<?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>36172</bug_id>
          
          <creation_ts>2010-03-16 09:51:28 -0700</creation_ts>
          <short_desc>Web Inspector: Reimplement style-related audits using native API</short_desc>
          <delta_ts>2010-03-17 07:25:44 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>200264</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-03-16 09:51:28 -0700</bug_when>
    <thetext>Recently pfeldman@chromium.org introduced style inspection through the native code rather than injected script to avoid cross-domain security issues. Audits that need docuemnt styles should be reimplemented in the same manner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200323</commentid>
    <comment_count>1</comment_count>
      <attachid>50816</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-03-16 11:27:31 -0700</bug_when>
    <thetext>Created attachment 50816
[PATCH] Proposed solution</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200328</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-16 11:32:14 -0700</bug_when>
    <thetext>Attachment 50816 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/inspector/InspectorBackend.cpp:367:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200464</commentid>
    <comment_count>3</comment_count>
      <attachid>50842</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-03-16 15:18:27 -0700</bug_when>
    <thetext>Created attachment 50842
[PATCH] Style fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200596</commentid>
    <comment_count>4</comment_count>
      <attachid>50842</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-16 23:45:04 -0700</bug_when>
    <thetext>Comment on attachment 50842
[PATCH] Style fixed

r+ with comments. Please fix before landing.

&gt; +    ListHashSet&lt;RefPtr&lt;Document&gt; &gt; copy = m_documents;

No need to iterate copy in sync call, just iterate the source.

&gt; +        for (unsigned i = 0, size = list-&gt;length(); i &lt; size; ++i) {

We don&apos;t do such optimization in the rest 99% of this class, be consistent.

&gt; -            matchedCSSRules.set(i, buildObjectForRule(static_cast&lt;CSSStyleRule*&gt;(rule)));
&gt; +            matchedCSSRules.set(counter++, buildObjectForRule(static_cast&lt;CSSStyleRule*&gt;(rule)));

Thanks for fixing this.

&gt; +    result.set(&quot;docId&quot;, m_documentNodeToIdMap.get(styleSheet-&gt;doc()));

Strictly speaking, this is documentElementId, not docId.

&gt; +    result.set(&quot;cssRules&quot;, styleSheetRules);

Nit: pick single name for both parts: either cssRules or styleSheetRules.

&gt; +    PassRefPtr&lt;CSSRuleList&gt; cssRuleList = CSSRuleList::create(styleSheet, true);
&gt; +    if (cssRuleList) {

Nit: You could do if (!cssRuleList) return here (less nesting).

&gt; +    result.set(&quot;cssText&quot;, rule-&gt;cssText());

Nice, we can now try implementing Edit As Text on style rule!

&gt; +
&gt; +                    if (unusedRules.length) {
&gt; +                        var entry = { type: styleSheet.href ? &quot;href&quot; : &quot;inline&quot;,
&gt; +                            totalSize: stylesheetSize,
&gt; +                            unusedSize: unusedStylesheetSize,
&gt; +                            location: styleSheet.href ? styleSheet.href : ++inlineBlockOrdinal,
&gt; +                            unusedRules: unusedRules };
&gt; +                        routineResult.styleSheets.push(entry);

Please fix this this before landing: This is no longer an injected routine, no need to use intermediate routineResult jsonable object here. There is also no need in its styleSheets property, no need in unusedRules array above. Just get rid of all of that code and dump audit results from within selectorsCallback. You have all necessary info for that. I can take a look at the patch before you land if you have questions on this one!

&gt; +                    }
&gt; +                }
&gt; +
&gt; +                if (!totalUnusedStylesheetSize)
&gt; +                    return callback(null);
&gt;  
&gt; -            for (var i = 0; i &lt; routineResult.styleSheets.length; ++i) {
&gt; -                var stylesheet = routineResult.styleSheets[i];
&gt; +                var totalUnusedPercent = Math.round(100 * totalUnusedStylesheetSize / totalStylesheetSize);
&gt; +                var summary = result.addChild(String.sprintf(&quot;%d%% of CSS (estimated) is not used by the current page.&quot;, totalUnusedPercent), true);
&gt;  
&gt; -                var url = stylesheet.type === &quot;href&quot; ? WebInspector.linkifyURL(stylesheet.location) : String.sprintf(&quot;Inline block #%s&quot;, stylesheet.location);
&gt; -                var pctUnused = Math.round(100 * stylesheet.unusedSize / stylesheet.totalSize);
&gt; -                var entry = summary.addChild(String.sprintf(&quot;%s: %d%% (estimated) is not used by the current page.&quot;, url, pctUnused));
&gt; +                for (var i = 0; i &lt; routineResult.styleSheets.length; ++i) {
&gt; +                    var stylesheet = routineResult.styleSheets[i];
&gt;  
&gt; -                for (var j = 0; j &lt; stylesheet.unusedRules.length; ++j)
&gt; -                    entry.addSnippet(stylesheet.unusedRules[j]);
&gt; +                    var url = stylesheet.type === &quot;href&quot; ? WebInspector.linkifyURL(stylesheet.location) : String.sprintf(&quot;Inline block #%s&quot;, stylesheet.location);
&gt; +                    var pctUnused = Math.round(100 * stylesheet.unusedSize / stylesheet.totalSize);
&gt; +                    var entry = summary.addChild(String.sprintf(&quot;%s: %d%% (estimated) is not used by the current page.&quot;, url, pctUnused));
&gt;  
&gt; -                result.violationCount += stylesheet.unusedRules.length;
&gt; +                    for (var j = 0; j &lt; stylesheet.unusedRules.length; ++j)
&gt; +                        entry.addSnippet(stylesheet.unusedRules[j]);
&gt; +
&gt; +                    result.violationCount += stylesheet.unusedRules.length;
&gt; +                }
&gt; +
&gt; +                callback(result);
&gt;              }
&gt;  
&gt; -            callback(result);
&gt; +            function routine(selectorArray)
&gt; +            {
&gt; +                var result = {};
&gt; +                for (var i = 0; i &lt; selectorArray.length; ++i) {
&gt; +                    var nodes = document.querySelectorAll(selectorArray[i]);
&gt; +                    if (nodes &amp;&amp; nodes.length)
&gt; +                        result[selectorArray[i]] = true;
&gt; +                }
&gt; +                return result;
&gt; +            }
&gt; +
&gt; +            WebInspector.AuditRules.evaluateInTargetWindow(routine, [selectors], selectorsCallback.bind(null, callback, styleSheets, testedSelectors));
&gt;          }
&gt;  
&gt;          function routine()
&gt; @@ -306,48 +370,11 @@ WebInspector.AuditRules.UnusedCssRule.prototype = {
&gt;              var styleSheets = document.styleSheets;
&gt;              if (!styleSheets)
&gt;                  return false;
&gt; -            var routineResult = { styleSheets: [] };
&gt; -            var inlineBlockOrdinal = 0;
&gt; -            var totalStylesheetSize = 0;
&gt; -            var totalUnusedStylesheetSize = 0;
&gt; -            var pseudoSelectorRegexp = /:hover|:link|:active|:visited|:focus/;
&gt; -            for (var i = 0; i &lt; styleSheets.length; ++i) {
&gt; -                var styleSheet = styleSheets[i];
&gt; -                if (!styleSheet.cssRules)
&gt; -                    continue;
&gt; -                var stylesheetSize = 0;
&gt; -                var unusedStylesheetSize = 0;
&gt; -                var unusedRules = [];
&gt; -                for (var curRule = 0; curRule &lt; styleSheet.cssRules.length; ++curRule) {
&gt; -                    var rule = styleSheet.cssRules[curRule];
&gt; -                    var textLength = rule.cssText ? rule.cssText.length : 0;
&gt; -                    stylesheetSize += textLength;
&gt; -                    if (rule.type !== 1 || rule.selectorText.match(pseudoSelectorRegexp))
&gt; -                        continue;
&gt; -                    var nodes = document.querySelectorAll(rule.selectorText);
&gt; -                    if (nodes &amp;&amp; nodes.length)
&gt; -                        continue;
&gt; -                    unusedStylesheetSize += textLength;
&gt; -                    unusedRules.push(rule.selectorText);
&gt; -                }
&gt; -                totalStylesheetSize += stylesheetSize;
&gt; -                totalUnusedStylesheetSize += unusedStylesheetSize;
&gt; -
&gt; -                if (unusedRules.length) {
&gt; -                    var entry = { type: styleSheet.href ? &quot;href&quot; : &quot;inline&quot;,
&gt; -                                  totalSize: stylesheetSize,
&gt; -                                  unusedSize: unusedStylesheetSize,
&gt; -                                  location: styleSheet.href ? styleSheet.href : ++inlineBlockOrdinal,
&gt; -                                  unusedRules: unusedRules };
&gt; -                    routineResult.styleSheets.push(entry);
&gt; -                }
&gt; -            }
&gt; -            routineResult.totalSize = totalStylesheetSize;
&gt; -            routineResult.unusedSize = totalUnusedStylesheetSize;
&gt; +
&gt;              return routineResult;
&gt;          }
&gt;  
&gt; -        WebInspector.AuditRules.evaluateInTargetWindow(routine, evalCallback);
&gt; +        InspectorBackend.getAllStyles(WebInspector.Callback.wrap(evalCallback));
&gt;      }
&gt;  }
&gt;  
&gt; @@ -669,7 +696,7 @@ WebInspector.AuditRules.ImageDimensionsRule.prototype = {
&gt;              return found ? {totalImages: images.length, map: urlToNoDimensionCount} : null;
&gt;          }
&gt;  
&gt; -        WebInspector.AuditRules.evaluateInTargetWindow(routine, evalCallback.bind(this));
&gt; +        WebInspector.AuditRules.evaluateInTargetWindow(routine, null, evalCallback.bind(this));
&gt;      }
&gt;  }
&gt;  
&gt; @@ -743,7 +770,7 @@ WebInspector.AuditRules.CssInHeadRule.prototype = {
&gt;              return found ? urlToViolationsArray : null;
&gt;          }
&gt;  
&gt; -        WebInspector.AuditRules.evaluateInTargetWindow(routine, evalCallback);
&gt; +        WebInspector.AuditRules.evaluateInTargetWindow(routine, null, evalCallback);
&gt;      }
&gt;  }
&gt;  
&gt; @@ -790,7 +817,7 @@ WebInspector.AuditRules.StylesScriptsOrderRule.prototype = {
&gt;              return [ lateStyleUrls, cssBeforeInlineCount ];
&gt;          }
&gt;  
&gt; -        WebInspector.AuditRules.evaluateInTargetWindow(routine, evalCallback.bind(this));
&gt; +        WebInspector.AuditRules.evaluateInTargetWindow(routine, null, evalCallback.bind(this));
&gt;      }
&gt;  }
&gt;  
&gt; diff --git a/WebCore/inspector/front-end/DOMAgent.js b/WebCore/inspector/front-end/DOMAgent.js
&gt; index 62fed77..83fede3 100644
&gt; --- a/WebCore/inspector/front-end/DOMAgent.js
&gt; +++ b/WebCore/inspector/front-end/DOMAgent.js
&gt; @@ -718,6 +718,7 @@ WebInspector.didRemoveNode = WebInspector.Callback.processCallback;
&gt;  WebInspector.didGetEventListenersForNode = WebInspector.Callback.processCallback;
&gt;  
&gt;  WebInspector.didGetStyles = WebInspector.Callback.processCallback;
&gt; +WebInspector.didGetAllStyles = WebInspector.Callback.processCallback;
&gt;  WebInspector.didGetInlineStyle = WebInspector.Callback.processCallback;
&gt;  WebInspector.didGetComputedStyle = WebInspector.Callback.processCallback;
&gt;  WebInspector.didApplyStyleText = WebInspector.Callback.processCallback;
&gt; diff --git a/WebCore/inspector/front-end/InjectedScript.js b/WebCore/inspector/front-end/InjectedScript.js
&gt; index 8c7d48e..2a2a252 100644
&gt; --- a/WebCore/inspector/front-end/InjectedScript.js
&gt; +++ b/WebCore/inspector/front-end/InjectedScript.js
&gt; @@ -786,9 +786,10 @@ InjectedScript.createProxyObject = function(object, objectId, abbreviate)
&gt;      return result;
&gt;  }
&gt;  
&gt; -InjectedScript.evaluateOnSelf = function(funcBody)
&gt; +InjectedScript.evaluateOnSelf = function(funcBody, args)
&gt;  {
&gt; -    return window.eval(&quot;(&quot; + funcBody + &quot;)();&quot;);
&gt; +    var func = window.eval(&quot;(&quot; + funcBody + &quot;)&quot;);
&gt; +    return func.apply(this, args || []);
&gt;  }
&gt;  
&gt;  InjectedScript.CallFrameProxy = function(id, callFrame)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200647</commentid>
    <comment_count>5</comment_count>
      <attachid>50888</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-03-17 03:22:03 -0700</bug_when>
    <thetext>Created attachment 50888
[PATCH] Comments addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200702</commentid>
    <comment_count>6</comment_count>
      <attachid>50888</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-17 05:25:38 -0700</bug_when>
    <thetext>Comment on attachment 50888
[PATCH] Comments addressed

I think you did not address my major complain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200711</commentid>
    <comment_count>7</comment_count>
      <attachid>50897</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-03-17 06:02:05 -0700</bug_when>
    <thetext>Created attachment 50897
[PATCH] Remove intermediate storage and second loop</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200712</commentid>
    <comment_count>8</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-03-17 06:03:46 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 50888 [details])
&gt; I think you did not address my major complain.

I don&apos;t think we get any tangible gain with this change (actually, it&apos;s a speed vs. space tradeoff). Anyway, the fix is in place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200716</commentid>
    <comment_count>9</comment_count>
      <attachid>50897</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-17 06:09:01 -0700</bug_when>
    <thetext>Comment on attachment 50897
[PATCH] Remove intermediate storage and second loop

&gt; +                var styleSheetEntries = [];

Unused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200766</commentid>
    <comment_count>10</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-03-17 07:25:44 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
        M       WebCore/ChangeLog
        M       WebCore/inspector/InspectorBackend.cpp
        M       WebCore/inspector/InspectorBackend.h
        M       WebCore/inspector/InspectorBackend.idl
        M       WebCore/inspector/InspectorDOMAgent.cpp
        M       WebCore/inspector/InspectorDOMAgent.h
        M       WebCore/inspector/InspectorFrontend.cpp
        M       WebCore/inspector/InspectorFrontend.h
        M       WebCore/inspector/front-end/AuditRules.js
        M       WebCore/inspector/front-end/DOMAgent.js
        M       WebCore/inspector/front-end/InjectedScript.js
Committed r56107</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50816</attachid>
            <date>2010-03-16 11:27:31 -0700</date>
            <delta_ts>2010-03-16 15:18:27 -0700</delta_ts>
            <desc>[PATCH] Proposed solution</desc>
            <filename>nativestyles.patch</filename>
            <type>text/plain</type>
            <size>21556</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTcyZWM3MS4uMjk5OTE0ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxMC0wMy0xNiAgQWxleGFuZGVyIFBh
dmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlaW1wbGVtZW50IHN0eWxlLXJl
bGF0ZWQgYXVkaXRzIHVzaW5nIG5hdGl2ZSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM2MTcyCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpnZXRB
bGxTdHlsZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmg6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6Z2V0QWxsU3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpnZXRNYXRjaGVkQ1NTUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldEFsbFN0eWxl
cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmg6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdFJ1bGVzLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5VbnVzZWRDc3NSdWxlLnByb3RvdHlwZS5kb1J1bi5ldmFsQ2FsbGJhY2su
c2VsZWN0b3JzQ2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuVW51
c2VkQ3NzUnVsZS5wcm90b3R5cGUuZG9SdW4uZXZhbENhbGxiYWNrLnJvdXRpbmUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuVW51c2VkQ3NzUnVsZS5wcm90b3R5cGUuZG9SdW4u
ZXZhbENhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlVudXNlZENz
c1J1bGUucHJvdG90eXBlLmRvUnVuLnJvdXRpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZXMuVW51c2VkQ3NzUnVsZS5wcm90b3R5cGUuZG9SdW4pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZS5wcm90b3R5cGUuZG9SdW4pOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ3NzSW5IZWFkUnVsZS5wcm90b3R5cGUu
ZG9SdW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuU3R5bGVzU2NyaXB0c09y
ZGVyUnVsZS5wcm90b3R5cGUuZG9SdW4pOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
RE9NQWdlbnQuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlw
dC5qczoKKyAgICAgICAgKGluamVjdGVkU2NyaXB0Q29uc3RydWN0b3IpOgorCiAyMDEwLTAzLTE2
ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5j
cHAKaW5kZXggNWEzZmQ2OS4uNjIxOGQ4NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5jcHAKQEAgLTM2Miw2ICszNjIsMTIgQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRT
dHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHkpCiAgICAgICAg
IGRvbUFnZW50LT5nZXRTdHlsZXMoY2FsbElkLCBub2RlSWQsIGF1dGhvck9ubHkpOwogfQogCit2
b2lkIEluc3BlY3RvckJhY2tlbmQ6OmdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCkKK3sKKyAgIGlm
IChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JET01BZ2VudCgpKQorICAg
ICAgIGRvbUFnZW50LT5nZXRBbGxTdHlsZXMoY2FsbElkKTsKK30KKwogdm9pZCBJbnNwZWN0b3JC
YWNrZW5kOjpnZXRJbmxpbmVTdHlsZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCiB7CiAgICAg
aWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckRPTUFnZW50KCkpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmggYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5kZXggOTNkYzI3Yy4uM2NjMjU0NSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApAQCAtMTE0LDYgKzExNCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHJlbW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKIAogICAg
IHZvaWQgZ2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgYm9vbCBhdXRoT25seSk7
CisgICAgdm9pZCBnZXRBbGxTdHlsZXMobG9uZyBjYWxsSWQpOwogICAgIHZvaWQgZ2V0SW5saW5l
U3R5bGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKICAgICB2b2lkIGdldENvbXB1dGVkU3R5
bGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKICAgICB2b2lkIGFwcGx5U3R5bGVUZXh0KGxv
bmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgc3R5bGVUZXh0LCBjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRs
CmluZGV4IGIwYmU2ZDIuLjJiM2NiNmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmQuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmQuaWRsCkBAIC05MSw2ICs5MSw3IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgdm9pZCBoaWRl
RE9NTm9kZUhpZ2hsaWdodCgpOwogCiAgICAgICAgIHZvaWQgZ2V0U3R5bGVzKGluIGxvbmcgY2Fs
bElkLCBpbiBsb25nIG5vZGVJZCwgaW4gYm9vbGVhbiBhdXRoT25seSk7CisgICAgICAgIHZvaWQg
Z2V0QWxsU3R5bGVzKGluIGxvbmcgY2FsbElkKTsKICAgICAgICAgdm9pZCBnZXRJbmxpbmVTdHls
ZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQpOwogICAgICAgICB2b2lkIGdldENvbXB1
dGVkU3R5bGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCBh
cHBseVN0eWxlVGV4dChpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBzdHlsZUlkLCBpbiBET01TdHJp
bmcgc3R5bGVUZXh0LCBpbiBET01TdHJpbmcgcHJvcGVydHlOYW1lKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBmYzFhMDYzLi4wZDU4MWMwIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC03MDMsNiArNzAzLDIyIEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFN0eWxlcyhsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGJv
b2wgYXV0aG9yT25seSkKICAgICBtX2Zyb250ZW5kLT5kaWRHZXRTdHlsZXMoY2FsbElkLCByZXN1
bHQpOwogfQogCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRBbGxTdHlsZXMobG9uZyBjYWxs
SWQpCit7CisgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPERvY3VtZW50PiA+IGNvcHkgPSBtX2RvY3Vt
ZW50czsKKyAgICBTY3JpcHRBcnJheSByZXN1bHQgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRBcnJh
eSgpOworICAgIHVuc2lnbmVkIGNvdW50ZXIgPSAwOworICAgIGZvciAoTGlzdEhhc2hTZXQ8UmVm
UHRyPERvY3VtZW50PiA+OjppdGVyYXRvciBpdCA9IGNvcHkuYmVnaW4oKTsgaXQgIT0gY29weS5l
bmQoKTsgKytpdCkgeworICAgICAgICBTdHlsZVNoZWV0TGlzdCogbGlzdCA9ICgqaXQpLT5zdHls
ZVNoZWV0cygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gbGlzdC0+bGVu
Z3RoKCk7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIFN0eWxlU2hlZXQqIHN0eWxlU2hl
ZXQgPSBsaXN0LT5pdGVtKGkpOworICAgICAgICAgICAgaWYgKHN0eWxlU2hlZXQtPmlzQ1NTU3R5
bGVTaGVldCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoY291bnRlcisrLCBidWlsZE9i
amVjdEZvclN0eWxlU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxlU2hlZXQp
KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9mcm9udGVuZC0+ZGlkR2V0QWxsU3R5bGVzKGNh
bGxJZCwgcmVzdWx0KTsKK30KKwogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0SW5saW5lU3R5
bGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKQogewogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9y
SWQobm9kZUlkKTsKQEAgLTczMywxMCArNzQ5LDExIEBAIFNjcmlwdEFycmF5IEluc3BlY3RvckRP
TUFnZW50OjpnZXRNYXRjaGVkQ1NTUnVsZXMoRWxlbWVudCogZWxlbWVudCwgYm9vbCBhdXRob3JP
CiAgICAgRE9NV2luZG93KiBkZWZhdWx0VmlldyA9IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+
ZGVmYXVsdFZpZXcoKTsKICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1hdGNoZWRSdWxlcyA9IGRl
ZmF1bHRWaWV3LT5nZXRNYXRjaGVkQ1NTUnVsZXMoZWxlbWVudCwgIiIsIGF1dGhvck9ubHkpOwog
ICAgIFNjcmlwdEFycmF5IG1hdGNoZWRDU1NSdWxlcyA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFy
cmF5KCk7CisgICAgdW5zaWduZWQgY291bnRlciA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgbWF0Y2hlZFJ1bGVzLmdldCgpICYmIGkgPCBtYXRjaGVkUnVsZXMtPmxlbmd0aCgpOyArK2kp
IHsKICAgICAgICAgQ1NTUnVsZSogcnVsZSA9IG1hdGNoZWRSdWxlcy0+aXRlbShpKTsKICAgICAg
ICAgaWYgKHJ1bGUtPnR5cGUoKSA9PSBDU1NSdWxlOjpTVFlMRV9SVUxFKQotICAgICAgICAgICAg
bWF0Y2hlZENTU1J1bGVzLnNldChpLCBidWlsZE9iamVjdEZvclJ1bGUoc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVSdWxlKj4ocnVsZSkpKTsKKyAgICAgICAgICAgIG1hdGNoZWRDU1NSdWxlcy5zZXQoY291
bnRlcisrLCBidWlsZE9iamVjdEZvclJ1bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVs
ZSkpKTsKICAgICB9CiAgICAgcmV0dXJuIG1hdGNoZWRDU1NSdWxlczsKIH0KQEAgLTEwNDIsMTIg
KzEwNTksMzQgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cG9wdWxhdGVPYmplY3RXaXRoU3R5
bGVQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qIHMKICAgICByZXN1bHQuc2V0KCJ1bmlx
dWVTdHlsZVByb3BlcnRpZXMiLCB0b0FycmF5KHVuaXF1ZVN0eWxlUHJvcGVydGllcyhzdHlsZSkp
KTsKIH0KIAorU2NyaXB0T2JqZWN0IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclN0
eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKK3sKKyAgICBTY3JpcHRPYmplY3Qg
cmVzdWx0ID0gbV9mcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCk7CisgICAgcmVzdWx0LnNldCgi
ZGlzYWJsZWQiLCBzdHlsZVNoZWV0LT5kaXNhYmxlZCgpKTsKKyAgICByZXN1bHQuc2V0KCJocmVm
Iiwgc3R5bGVTaGVldC0+aHJlZigpKTsKKyAgICByZXN1bHQuc2V0KCJ0aXRsZSIsIHN0eWxlU2hl
ZXQtPnRpdGxlKCkpOworICAgIHJlc3VsdC5zZXQoImRvY0lkIiwgbV9kb2N1bWVudE5vZGVUb0lk
TWFwLmdldChzdHlsZVNoZWV0LT5kb2MoKSkpOworICAgIFNjcmlwdEFycmF5IHN0eWxlU2hlZXRS
dWxlcyA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFycmF5KCk7CisgICAgcmVzdWx0LnNldCgiY3Nz
UnVsZXMiLCBzdHlsZVNoZWV0UnVsZXMpOworICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGNz
c1J1bGVMaXN0ID0gQ1NTUnVsZUxpc3Q6OmNyZWF0ZShzdHlsZVNoZWV0LCB0cnVlKTsKKyAgICBp
ZiAoY3NzUnVsZUxpc3QpIHsKKyAgICAgICAgdW5zaWduZWQgY291bnRlciA9IDA7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDAsIHJ1bGVMaXN0TGVuZ3RoID0gY3NzUnVsZUxpc3QtPmxlbmd0
aCgpOyBpIDwgcnVsZUxpc3RMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgQ1NTUnVsZSogcnVs
ZSA9IGNzc1J1bGVMaXN0LT5pdGVtKGkpOworICAgICAgICAgICAgaWYgKHJ1bGUtPmlzU3R5bGVS
dWxlKCkpCisgICAgICAgICAgICAgICAgc3R5bGVTaGVldFJ1bGVzLnNldChjb3VudGVyKyssIGJ1
aWxkT2JqZWN0Rm9yUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxlKSkpOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFNjcmlwdE9iamVjdCBJbnNw
ZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKIHsK
ICAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0ID0gcnVsZS0+cGFyZW50U3R5bGVT
aGVldCgpOwogCiAgICAgU2NyaXB0T2JqZWN0IHJlc3VsdCA9IG1fZnJvbnRlbmQtPm5ld1Njcmlw
dE9iamVjdCgpOwogICAgIHJlc3VsdC5zZXQoInNlbGVjdG9yVGV4dCIsIHJ1bGUtPnNlbGVjdG9y
VGV4dCgpKTsKKyAgICByZXN1bHQuc2V0KCJjc3NUZXh0IiwgcnVsZS0+Y3NzVGV4dCgpKTsKICAg
ICBpZiAocGFyZW50U3R5bGVTaGVldCkgewogICAgICAgICBTY3JpcHRPYmplY3QgcGFyZW50U3R5
bGVTaGVldFZhbHVlID0gbV9mcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCk7CiAgICAgICAgIHJl
c3VsdC5zZXQoInBhcmVudFN0eWxlU2hlZXQiLCBwYXJlbnRTdHlsZVNoZWV0VmFsdWUpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggMGNkYmNjMy4uYWU5ZjVlMSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0xMDAsNiArMTAwLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIE1ldGhvZHMgY2FsbGVkIGZyb20gdGhlIGZy
b250ZW5kIGZvciBDU1Mgc3R5bGVzIGluc3BlY3Rpb24uCiAgICAgICAgIHZvaWQgZ2V0U3R5bGVz
KGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgYm9vbCBhdXRob3JPbmx5KTsKKyAgICAgICAgdm9p
ZCBnZXRBbGxTdHlsZXMobG9uZyBjYWxsSWQpOwogICAgICAgICB2b2lkIGdldElubGluZVN0eWxl
KGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQgZ2V0Q29tcHV0ZWRTdHls
ZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwogICAgICAgICB2b2lkIGFwcGx5U3R5bGVUZXh0
KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgc3R5bGVUZXh0LCBjb25z
dCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CkBAIC0xNTksNiArMTYwLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBTY3JpcHRPYmplY3QgYnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHls
ZURlY2xhcmF0aW9uKiwgYm9vbCBiaW5kKTsKICAgICAgICAgdm9pZCBwb3B1bGF0ZU9iamVjdFdp
dGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIFNjcmlwdE9iamVjdCYgcmVz
dWx0KTsKICAgICAgICAgU2NyaXB0T2JqZWN0IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1
bGUqKTsKKyAgICAgICAgU2NyaXB0T2JqZWN0IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldChDU1NT
dHlsZVNoZWV0Kik7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHVuaXF1ZVN0eWxlUHJvcGVydGll
cyhDU1NTdHlsZURlY2xhcmF0aW9uKik7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGxvbmdoYW5k
UHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQ
cm9wZXJ0eSk7CiAgICAgICAgIFN0cmluZyBzaG9ydGhhbmRQcmlvcml0eShDU1NTdHlsZURlY2xh
cmF0aW9uKiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKaW5kZXggNTRhNDQxNC4uNTFhMWViOSAxMDA3NTUKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcApAQCAtNDg0LDYgKzQ4NCwxNSBAQCB2b2lk
IEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRTdHlsZXMobG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlw
dFZhbHVlJiBzdHlsZXMpCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCit2b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpkaWRHZXRBbGxTdHlsZXMobG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdEFycmF5
JiBzdHlsZXMpCit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVj
dG9yLCAiZGlzcGF0Y2giKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkR2V0QWxs
U3R5bGVzIik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbElkKTsKKyAgICBmdW5j
dGlvbi5hcHBlbmRBcmd1bWVudChzdHlsZXMpOworICAgIGZ1bmN0aW9uLmNhbGwoKTsKK30KKwog
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkR2V0Q29tcHV0ZWRTdHlsZShsb25nIGNhbGxJZCwg
Y29uc3QgU2NyaXB0VmFsdWUmIHN0eWxlKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kLmgKaW5kZXggNjFjMWE4Yy4uZGFkYWNiZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5oCkBAIC0xMjksNiArMTI5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2b2lkIGRpZFJlbW92ZU5vZGUoaW50IGNhbGxJZCwgaW50IG5vZGVJZCk7CiAKICAg
ICAgICAgdm9pZCBkaWRHZXRTdHlsZXMobG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBz
dHlsZXMpOworICAgICAgICB2b2lkIGRpZEdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCwgY29uc3Qg
U2NyaXB0QXJyYXkmIHN0eWxlcyk7CiAgICAgICAgIHZvaWQgZGlkR2V0SW5saW5lU3R5bGUobG9u
ZyBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBzdHlsZSk7CiAgICAgICAgIHZvaWQgZGlkR2V0
Q29tcHV0ZWRTdHlsZShsb25nIGNhbGxJZCwgY29uc3QgU2NyaXB0VmFsdWUmIHN0eWxlKTsKICAg
ICAgICAgdm9pZCBkaWRBcHBseVN0eWxlVGV4dChpbnQgY2FsbElkLCBib29sIHN1Y2Nlc3MsIGNv
bnN0IFNjcmlwdFZhbHVlJiBzdHlsZSwgY29uc3QgU2NyaXB0QXJyYXkmIGNoYW5nZWRQcm9wZXJ0
aWVzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdFJ1bGVz
LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanMKaW5kZXggMjcz
NjIyZi4uYTE0MTA4YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1
ZGl0UnVsZXMuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMu
anMKQEAgLTYzLDkgKzYzLDkgQEAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuZ2V0RG9tYWluVG9S
ZXNvdXJjZXNNYXAgPSBmdW5jdGlvbihyZXNvdXJjZXMsIHR5cGVzLCByZWcKICAgICByZXR1cm4g
ZG9tYWluVG9SZXNvdXJjZXNNYXA7CiB9CiAKLVdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmV2YWx1
YXRlSW5UYXJnZXRXaW5kb3cgPSBmdW5jdGlvbihmdW5jLCBjYWxsYmFjaykKK1dlYkluc3BlY3Rv
ci5BdWRpdFJ1bGVzLmV2YWx1YXRlSW5UYXJnZXRXaW5kb3cgPSBmdW5jdGlvbihmdW5jLCBhcmdz
LCBjYWxsYmFjaykKIHsKLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZhdWx0KCkuZXZh
bHVhdGVPblNlbGYoZnVuYy50b1N0cmluZygpLCBjYWxsYmFjayk7CisgICAgSW5qZWN0ZWRTY3Jp
cHRBY2Nlc3MuZ2V0RGVmYXVsdCgpLmV2YWx1YXRlT25TZWxmKGZ1bmMudG9TdHJpbmcoKSwgYXJn
cywgY2FsbGJhY2spOwogfQogCiAKQEAgLTI3OCwyNyArMjc4LDkxIEBAIFdlYkluc3BlY3Rvci5B
dWRpdFJ1bGVzLlVudXNlZENzc1J1bGUucHJvdG90eXBlID0gewogICAgIGRvUnVuOiBmdW5jdGlv
bihyZXNvdXJjZXMsIHJlc3VsdCwgY2FsbGJhY2spCiAgICAgewogICAgICAgICB2YXIgc2VsZiA9
IHRoaXM7Ci0gICAgICAgIGZ1bmN0aW9uIGV2YWxDYWxsYmFjayhyb3V0aW5lUmVzdWx0LCBpc0V4
Y2VwdGlvbikgewotICAgICAgICAgICAgaWYgKGlzRXhjZXB0aW9uIHx8ICFyb3V0aW5lUmVzdWx0
IHx8ICFyb3V0aW5lUmVzdWx0LnN0eWxlU2hlZXRzLmxlbmd0aCkKKyAgICAgICAgZnVuY3Rpb24g
ZXZhbENhbGxiYWNrKHN0eWxlU2hlZXRzKSB7CisgICAgICAgICAgICBpZiAoIXN0eWxlU2hlZXRz
Lmxlbmd0aCkKICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7CiAKLSAgICAg
ICAgICAgIHZhciB0b3RhbFVudXNlZFBlcmNlbnQgPSBNYXRoLnJvdW5kKDEwMCAqIHJvdXRpbmVS
ZXN1bHQudW51c2VkU2l6ZSAvIHJvdXRpbmVSZXN1bHQudG90YWxTaXplKTsKLSAgICAgICAgICAg
IHZhciBzdW1tYXJ5ID0gcmVzdWx0LmFkZENoaWxkKFN0cmluZy5zcHJpbnRmKCIlZCUlIG9mIENT
UyAoZXN0aW1hdGVkKSBpcyBub3QgdXNlZCBieSB0aGUgY3VycmVudCBwYWdlLiIsIHRvdGFsVW51
c2VkUGVyY2VudCksIHRydWUpOworICAgICAgICAgICAgdmFyIHBzZXVkb1NlbGVjdG9yUmVnZXhw
ID0gLzpob3Zlcnw6bGlua3w6YWN0aXZlfDp2aXNpdGVkfDpmb2N1c3w6YmVmb3JlfDphZnRlci87
CisgICAgICAgICAgICB2YXIgc2VsZWN0b3JzID0gW107CisgICAgICAgICAgICB2YXIgdGVzdGVk
U2VsZWN0b3JzID0ge307CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlU2hl
ZXRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIHN0eWxlU2hlZXQgPSBzdHls
ZVNoZWV0c1tpXTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBjdXJSdWxlID0gMDsgY3VyUnVs
ZSA8IHN0eWxlU2hlZXQuY3NzUnVsZXMubGVuZ3RoOyArK2N1clJ1bGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIHJ1bGUgPSBzdHlsZVNoZWV0LmNzc1J1bGVzW2N1clJ1bGVdOworICAgICAg
ICAgICAgICAgICAgICBpZiAocnVsZS5zZWxlY3RvclRleHQubWF0Y2gocHNldWRvU2VsZWN0b3JS
ZWdleHApKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgIHNlbGVjdG9ycy5wdXNoKHJ1bGUuc2VsZWN0b3JUZXh0KTsKKyAgICAgICAgICAgICAg
ICAgICAgdGVzdGVkU2VsZWN0b3JzW3J1bGUuc2VsZWN0b3JUZXh0XSA9IDE7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBzZWxlY3RvcnND
YWxsYmFjayhjYWxsYmFjaywgc3R5bGVTaGVldHMsIHRlc3RlZFNlbGVjdG9ycywgZm91bmRTZWxl
Y3RvcnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIHJvdXRpbmVSZXN1bHQg
PSB7IHN0eWxlU2hlZXRzOiBbXSB9OworICAgICAgICAgICAgICAgIHZhciBpbmxpbmVCbG9ja09y
ZGluYWwgPSAwOworICAgICAgICAgICAgICAgIHZhciB0b3RhbFN0eWxlc2hlZXRTaXplID0gMDsK
KyAgICAgICAgICAgICAgICB2YXIgdG90YWxVbnVzZWRTdHlsZXNoZWV0U2l6ZSA9IDA7CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZVNoZWV0cy5sZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgICAgICAgICB2YXIgc3R5bGVTaGVldCA9IHN0eWxlU2hlZXRzW2ldOwor
ICAgICAgICAgICAgICAgICAgICB2YXIgc3R5bGVzaGVldFNpemUgPSAwOworICAgICAgICAgICAg
ICAgICAgICB2YXIgdW51c2VkU3R5bGVzaGVldFNpemUgPSAwOworICAgICAgICAgICAgICAgICAg
ICB2YXIgdW51c2VkUnVsZXMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY3Vy
UnVsZSA9IDA7IGN1clJ1bGUgPCBzdHlsZVNoZWV0LmNzc1J1bGVzLmxlbmd0aDsgKytjdXJSdWxl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcnVsZSA9IHN0eWxlU2hlZXQuY3NzUnVs
ZXNbY3VyUnVsZV07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dExlbmd0aCA9IHJ1
bGUuY3NzVGV4dCA/IHJ1bGUuY3NzVGV4dC5sZW5ndGggOiAwOworICAgICAgICAgICAgICAgICAg
ICAgICAgc3R5bGVzaGVldFNpemUgKz0gdGV4dExlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghdGVzdGVkU2VsZWN0b3JzW3J1bGUuc2VsZWN0b3JUZXh0XSB8fCBmb3VuZFNlbGVj
dG9yc1tydWxlLnNlbGVjdG9yVGV4dF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnVzZWRTdHlsZXNoZWV0U2l6ZSArPSB0
ZXh0TGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgdW51c2VkUnVsZXMucHVzaChydWxl
LnNlbGVjdG9yVGV4dCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgdG90YWxTdHlsZXNoZWV0U2l6ZSArPSBzdHlsZXNoZWV0U2l6ZTsKKyAgICAgICAgICAgICAg
ICAgICAgdG90YWxVbnVzZWRTdHlsZXNoZWV0U2l6ZSArPSB1bnVzZWRTdHlsZXNoZWV0U2l6ZTsK
KworICAgICAgICAgICAgICAgICAgICBpZiAodW51c2VkUnVsZXMubGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7IHR5cGU6IHN0eWxlU2hlZXQuaHJlZiA/ICJo
cmVmIiA6ICJpbmxpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsU2l6ZTog
c3R5bGVzaGVldFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW51c2VkU2l6ZTog
dW51c2VkU3R5bGVzaGVldFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRp
b246IHN0eWxlU2hlZXQuaHJlZiA/IHN0eWxlU2hlZXQuaHJlZiA6ICsraW5saW5lQmxvY2tPcmRp
bmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVudXNlZFJ1bGVzOiB1bnVzZWRSdWxl
cyB9OworICAgICAgICAgICAgICAgICAgICAgICAgcm91dGluZVJlc3VsdC5zdHlsZVNoZWV0cy5w
dXNoKGVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmICghdG90YWxVbnVzZWRTdHlsZXNoZWV0U2l6ZSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpOwogCi0gICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHJvdXRpbmVSZXN1bHQuc3R5bGVTaGVldHMubGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgc3R5bGVzaGVldCA9IHJvdXRpbmVSZXN1bHQuc3R5bGVTaGVldHNb
aV07CisgICAgICAgICAgICAgICAgdmFyIHRvdGFsVW51c2VkUGVyY2VudCA9IE1hdGgucm91bmQo
MTAwICogdG90YWxVbnVzZWRTdHlsZXNoZWV0U2l6ZSAvIHRvdGFsU3R5bGVzaGVldFNpemUpOwor
ICAgICAgICAgICAgICAgIHZhciBzdW1tYXJ5ID0gcmVzdWx0LmFkZENoaWxkKFN0cmluZy5zcHJp
bnRmKCIlZCUlIG9mIENTUyAoZXN0aW1hdGVkKSBpcyBub3QgdXNlZCBieSB0aGUgY3VycmVudCBw
YWdlLiIsIHRvdGFsVW51c2VkUGVyY2VudCksIHRydWUpOwogCi0gICAgICAgICAgICAgICAgdmFy
IHVybCA9IHN0eWxlc2hlZXQudHlwZSA9PT0gImhyZWYiID8gV2ViSW5zcGVjdG9yLmxpbmtpZnlV
Ukwoc3R5bGVzaGVldC5sb2NhdGlvbikgOiBTdHJpbmcuc3ByaW50ZigiSW5saW5lIGJsb2NrICMl
cyIsIHN0eWxlc2hlZXQubG9jYXRpb24pOwotICAgICAgICAgICAgICAgIHZhciBwY3RVbnVzZWQg
PSBNYXRoLnJvdW5kKDEwMCAqIHN0eWxlc2hlZXQudW51c2VkU2l6ZSAvIHN0eWxlc2hlZXQudG90
YWxTaXplKTsKLSAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdW1tYXJ5LmFkZENoaWxkKFN0
cmluZy5zcHJpbnRmKCIlczogJWQlJSAoZXN0aW1hdGVkKSBpcyBub3QgdXNlZCBieSB0aGUgY3Vy
cmVudCBwYWdlLiIsIHVybCwgcGN0VW51c2VkKSk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCByb3V0aW5lUmVzdWx0LnN0eWxlU2hlZXRzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBzdHlsZXNoZWV0ID0gcm91dGluZVJlc3VsdC5zdHlsZVNoZWV0
c1tpXTsKIAotICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3R5bGVzaGVldC51
bnVzZWRSdWxlcy5sZW5ndGg7ICsraikKLSAgICAgICAgICAgICAgICAgICAgZW50cnkuYWRkU25p
cHBldChzdHlsZXNoZWV0LnVudXNlZFJ1bGVzW2pdKTsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHVybCA9IHN0eWxlc2hlZXQudHlwZSA9PT0gImhyZWYiID8gV2ViSW5zcGVjdG9yLmxpbmtpZnlV
Ukwoc3R5bGVzaGVldC5sb2NhdGlvbikgOiBTdHJpbmcuc3ByaW50ZigiSW5saW5lIGJsb2NrICMl
cyIsIHN0eWxlc2hlZXQubG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICB2YXIgcGN0VW51
c2VkID0gTWF0aC5yb3VuZCgxMDAgKiBzdHlsZXNoZWV0LnVudXNlZFNpemUgLyBzdHlsZXNoZWV0
LnRvdGFsU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHN1bW1hcnkuYWRk
Q2hpbGQoU3RyaW5nLnNwcmludGYoIiVzOiAlZCUlIChlc3RpbWF0ZWQpIGlzIG5vdCB1c2VkIGJ5
IHRoZSBjdXJyZW50IHBhZ2UuIiwgdXJsLCBwY3RVbnVzZWQpKTsKIAotICAgICAgICAgICAgICAg
IHJlc3VsdC52aW9sYXRpb25Db3VudCArPSBzdHlsZXNoZWV0LnVudXNlZFJ1bGVzLmxlbmd0aDsK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdHlsZXNoZWV0LnVudXNl
ZFJ1bGVzLmxlbmd0aDsgKytqKQorICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuYWRkU25p
cHBldChzdHlsZXNoZWV0LnVudXNlZFJ1bGVzW2pdKTsKKworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudmlvbGF0aW9uQ291bnQgKz0gc3R5bGVzaGVldC51bnVzZWRSdWxlcy5sZW5ndGg7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICAgICAgICAg
IGZ1bmN0aW9uIHJvdXRpbmUoc2VsZWN0b3JBcnJheSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICB2YXIgcmVzdWx0ID0ge307CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBzZWxlY3RvckFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBub2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JBcnJheVtpXSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlcyAmJiBub2Rlcy5sZW5ndGgpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHRbc2VsZWN0b3JBcnJheVtpXV0gPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5ldmFsdWF0ZUluVGFyZ2V0V2lu
ZG93KHJvdXRpbmUsIFtzZWxlY3RvcnNdLCBzZWxlY3RvcnNDYWxsYmFjay5iaW5kKG51bGwsIGNh
bGxiYWNrLCBzdHlsZVNoZWV0cywgdGVzdGVkU2VsZWN0b3JzKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBmdW5jdGlvbiByb3V0aW5lKCkKQEAgLTMwNiw0OCArMzcwLDExIEBAIFdlYkluc3BlY3Rv
ci5BdWRpdFJ1bGVzLlVudXNlZENzc1J1bGUucHJvdG90eXBlID0gewogICAgICAgICAgICAgdmFy
IHN0eWxlU2hlZXRzID0gZG9jdW1lbnQuc3R5bGVTaGVldHM7CiAgICAgICAgICAgICBpZiAoIXN0
eWxlU2hlZXRzKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHZh
ciByb3V0aW5lUmVzdWx0ID0geyBzdHlsZVNoZWV0czogW10gfTsKLSAgICAgICAgICAgIHZhciBp
bmxpbmVCbG9ja09yZGluYWwgPSAwOwotICAgICAgICAgICAgdmFyIHRvdGFsU3R5bGVzaGVldFNp
emUgPSAwOwotICAgICAgICAgICAgdmFyIHRvdGFsVW51c2VkU3R5bGVzaGVldFNpemUgPSAwOwot
ICAgICAgICAgICAgdmFyIHBzZXVkb1NlbGVjdG9yUmVnZXhwID0gLzpob3Zlcnw6bGlua3w6YWN0
aXZlfDp2aXNpdGVkfDpmb2N1cy87Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0
eWxlU2hlZXRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0eWxlU2hlZXQg
PSBzdHlsZVNoZWV0c1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0eWxlU2hlZXQuY3NzUnVs
ZXMpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHZhciBz
dHlsZXNoZWV0U2l6ZSA9IDA7Ci0gICAgICAgICAgICAgICAgdmFyIHVudXNlZFN0eWxlc2hlZXRT
aXplID0gMDsKLSAgICAgICAgICAgICAgICB2YXIgdW51c2VkUnVsZXMgPSBbXTsKLSAgICAgICAg
ICAgICAgICBmb3IgKHZhciBjdXJSdWxlID0gMDsgY3VyUnVsZSA8IHN0eWxlU2hlZXQuY3NzUnVs
ZXMubGVuZ3RoOyArK2N1clJ1bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBz
dHlsZVNoZWV0LmNzc1J1bGVzW2N1clJ1bGVdOwotICAgICAgICAgICAgICAgICAgICB2YXIgdGV4
dExlbmd0aCA9IHJ1bGUuY3NzVGV4dCA/IHJ1bGUuY3NzVGV4dC5sZW5ndGggOiAwOwotICAgICAg
ICAgICAgICAgICAgICBzdHlsZXNoZWV0U2l6ZSArPSB0ZXh0TGVuZ3RoOwotICAgICAgICAgICAg
ICAgICAgICBpZiAocnVsZS50eXBlICE9PSAxIHx8IHJ1bGUuc2VsZWN0b3JUZXh0Lm1hdGNoKHBz
ZXVkb1NlbGVjdG9yUmVnZXhwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxs
KHJ1bGUuc2VsZWN0b3JUZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVzICYmIG5v
ZGVzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICB1bnVzZWRTdHlsZXNoZWV0U2l6ZSArPSB0ZXh0TGVuZ3RoOwotICAgICAgICAg
ICAgICAgICAgICB1bnVzZWRSdWxlcy5wdXNoKHJ1bGUuc2VsZWN0b3JUZXh0KTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdG90YWxTdHlsZXNoZWV0U2l6ZSArPSBzdHlsZXNo
ZWV0U2l6ZTsKLSAgICAgICAgICAgICAgICB0b3RhbFVudXNlZFN0eWxlc2hlZXRTaXplICs9IHVu
dXNlZFN0eWxlc2hlZXRTaXplOwotCi0gICAgICAgICAgICAgICAgaWYgKHVudXNlZFJ1bGVzLmxl
bmd0aCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7IHR5cGU6IHN0eWxlU2hl
ZXQuaHJlZiA/ICJocmVmIiA6ICJpbmxpbmUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRvdGFsU2l6ZTogc3R5bGVzaGVldFNpemUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW51c2VkU2l6ZTogdW51c2VkU3R5bGVzaGVldFNpemUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IHN0eWxlU2hlZXQuaHJlZiA/IHN0eWxl
U2hlZXQuaHJlZiA6ICsraW5saW5lQmxvY2tPcmRpbmFsLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVudXNlZFJ1bGVzOiB1bnVzZWRSdWxlcyB9OwotICAgICAgICAgICAgICAg
ICAgICByb3V0aW5lUmVzdWx0LnN0eWxlU2hlZXRzLnB1c2goZW50cnkpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJvdXRpbmVSZXN1bHQudG90YWxTaXpl
ID0gdG90YWxTdHlsZXNoZWV0U2l6ZTsKLSAgICAgICAgICAgIHJvdXRpbmVSZXN1bHQudW51c2Vk
U2l6ZSA9IHRvdGFsVW51c2VkU3R5bGVzaGVldFNpemU7CisKICAgICAgICAgICAgIHJldHVybiBy
b3V0aW5lUmVzdWx0OwogICAgICAgICB9CiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVs
ZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyhyb3V0aW5lLCBldmFsQ2FsbGJhY2spOworICAgICAg
ICBJbnNwZWN0b3JCYWNrZW5kLmdldEFsbFN0eWxlcyhXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3Jh
cChldmFsQ2FsbGJhY2spKTsKICAgICB9CiB9CiAKQEAgLTY2OSw3ICs2OTYsNyBAQCBXZWJJbnNw
ZWN0b3IuQXVkaXRSdWxlcy5JbWFnZURpbWVuc2lvbnNSdWxlLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIHJldHVybiBmb3VuZCA/IHt0b3RhbEltYWdlczogaW1hZ2VzLmxlbmd0aCwgbWFwOiB1
cmxUb05vRGltZW5zaW9uQ291bnR9IDogbnVsbDsKICAgICAgICAgfQogCi0gICAgICAgIFdlYklu
c3BlY3Rvci5BdWRpdFJ1bGVzLmV2YWx1YXRlSW5UYXJnZXRXaW5kb3cocm91dGluZSwgZXZhbENh
bGxiYWNrLmJpbmQodGhpcykpOworICAgICAgICBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5ldmFs
dWF0ZUluVGFyZ2V0V2luZG93KHJvdXRpbmUsIG51bGwsIGV2YWxDYWxsYmFjay5iaW5kKHRoaXMp
KTsKICAgICB9CiB9CiAKQEAgLTc0Myw3ICs3NzAsNyBAQCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxl
cy5Dc3NJbkhlYWRSdWxlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybiBmb3VuZCA/
IHVybFRvVmlvbGF0aW9uc0FycmF5IDogbnVsbDsKICAgICAgICAgfQogCi0gICAgICAgIFdlYklu
c3BlY3Rvci5BdWRpdFJ1bGVzLmV2YWx1YXRlSW5UYXJnZXRXaW5kb3cocm91dGluZSwgZXZhbENh
bGxiYWNrKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRhcmdl
dFdpbmRvdyhyb3V0aW5lLCBudWxsLCBldmFsQ2FsbGJhY2spOwogICAgIH0KIH0KIApAQCAtNzkw
LDcgKzgxNyw3IEBAIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlN0eWxlc1NjcmlwdHNPcmRlclJ1
bGUucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIFsgbGF0ZVN0eWxlVXJscywgY3Nz
QmVmb3JlSW5saW5lQ291bnQgXTsKICAgICAgICAgfQogCi0gICAgICAgIFdlYkluc3BlY3Rvci5B
dWRpdFJ1bGVzLmV2YWx1YXRlSW5UYXJnZXRXaW5kb3cocm91dGluZSwgZXZhbENhbGxiYWNrLmJp
bmQodGhpcykpOworICAgICAgICBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5ldmFsdWF0ZUluVGFy
Z2V0V2luZG93KHJvdXRpbmUsIG51bGwsIGV2YWxDYWxsYmFjay5iaW5kKHRoaXMpKTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5q
cyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwppbmRleCA2MmZlZDc3
Li44M2ZlZGUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdl
bnQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCkBAIC03
MTgsNiArNzE4LDcgQEAgV2ViSW5zcGVjdG9yLmRpZFJlbW92ZU5vZGUgPSBXZWJJbnNwZWN0b3Iu
Q2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwogV2ViSW5zcGVjdG9yLmRpZEdldEV2ZW50TGlzdGVu
ZXJzRm9yTm9kZSA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CiAKIFdl
Ykluc3BlY3Rvci5kaWRHZXRTdHlsZXMgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0Nh
bGxiYWNrOworV2ViSW5zcGVjdG9yLmRpZEdldEFsbFN0eWxlcyA9IFdlYkluc3BlY3Rvci5DYWxs
YmFjay5wcm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlkR2V0SW5saW5lU3R5bGUgPSBX
ZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwogV2ViSW5zcGVjdG9yLmRpZEdl
dENvbXB1dGVkU3R5bGUgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwog
V2ViSW5zcGVjdG9yLmRpZEFwcGx5U3R5bGVUZXh0ID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnBy
b2Nlc3NDYWxsYmFjazsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bmplY3RlZFNjcmlwdC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNj
cmlwdC5qcwppbmRleCA4YzdkNDhlLi4yYTJhMjUyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCkBAIC03ODYsOSArNzg2LDEwIEBAIEluamVjdGVk
U2NyaXB0LmNyZWF0ZVByb3h5T2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0LCBvYmplY3RJZCwgYWJi
cmV2aWF0ZSkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1JbmplY3RlZFNjcmlwdC5ldmFsdWF0
ZU9uU2VsZiA9IGZ1bmN0aW9uKGZ1bmNCb2R5KQorSW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGVPblNl
bGYgPSBmdW5jdGlvbihmdW5jQm9keSwgYXJncykKIHsKLSAgICByZXR1cm4gd2luZG93LmV2YWwo
IigiICsgZnVuY0JvZHkgKyAiKSgpOyIpOworICAgIHZhciBmdW5jID0gd2luZG93LmV2YWwoIigi
ICsgZnVuY0JvZHkgKyAiKSIpOworICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MgfHwg
W10pOwogfQogCiBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94eSA9IGZ1bmN0aW9uKGlkLCBj
YWxsRnJhbWUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50842</attachid>
            <date>2010-03-16 15:18:27 -0700</date>
            <delta_ts>2010-03-17 03:22:03 -0700</delta_ts>
            <desc>[PATCH] Style fixed</desc>
            <filename>nativestyles.patch</filename>
            <type>text/plain</type>
            <size>21558</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTcyZWM3MS4uMjk5OTE0ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxMC0wMy0xNiAgQWxleGFuZGVyIFBh
dmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlaW1wbGVtZW50IHN0eWxlLXJl
bGF0ZWQgYXVkaXRzIHVzaW5nIG5hdGl2ZSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM2MTcyCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpnZXRB
bGxTdHlsZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmg6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6Z2V0QWxsU3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpnZXRNYXRjaGVkQ1NTUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldEFsbFN0eWxl
cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmg6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdFJ1bGVzLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5VbnVzZWRDc3NSdWxlLnByb3RvdHlwZS5kb1J1bi5ldmFsQ2FsbGJhY2su
c2VsZWN0b3JzQ2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuVW51
c2VkQ3NzUnVsZS5wcm90b3R5cGUuZG9SdW4uZXZhbENhbGxiYWNrLnJvdXRpbmUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuVW51c2VkQ3NzUnVsZS5wcm90b3R5cGUuZG9SdW4u
ZXZhbENhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlVudXNlZENz
c1J1bGUucHJvdG90eXBlLmRvUnVuLnJvdXRpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZXMuVW51c2VkQ3NzUnVsZS5wcm90b3R5cGUuZG9SdW4pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZS5wcm90b3R5cGUuZG9SdW4pOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ3NzSW5IZWFkUnVsZS5wcm90b3R5cGUu
ZG9SdW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuU3R5bGVzU2NyaXB0c09y
ZGVyUnVsZS5wcm90b3R5cGUuZG9SdW4pOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
RE9NQWdlbnQuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlw
dC5qczoKKyAgICAgICAgKGluamVjdGVkU2NyaXB0Q29uc3RydWN0b3IpOgorCiAyMDEwLTAzLTE2
ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5j
cHAKaW5kZXggNWEzZmQ2OS4uMDYzMGVlMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5jcHAKQEAgLTM2Miw2ICszNjIsMTIgQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRT
dHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHkpCiAgICAgICAg
IGRvbUFnZW50LT5nZXRTdHlsZXMoY2FsbElkLCBub2RlSWQsIGF1dGhvck9ubHkpOwogfQogCit2
b2lkIEluc3BlY3RvckJhY2tlbmQ6OmdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCkKK3sKKyAgICBp
ZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAg
ICAgICAgZG9tQWdlbnQtPmdldEFsbFN0eWxlcyhjYWxsSWQpOworfQorCiB2b2lkIEluc3BlY3Rv
ckJhY2tlbmQ6OmdldElubGluZVN0eWxlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkKIHsKICAg
ICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yRE9NQWdlbnQoKSkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaAppbmRleCA5M2RjMjdjLi4zY2MyNTQ1IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCkBAIC0xMTQsNiArMTE0LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgcmVtb3ZlTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwogCiAg
ICAgdm9pZCBnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhPbmx5
KTsKKyAgICB2b2lkIGdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCk7CiAgICAgdm9pZCBnZXRJbmxp
bmVTdHlsZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwogICAgIHZvaWQgZ2V0Q29tcHV0ZWRT
dHlsZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwogICAgIHZvaWQgYXBwbHlTdHlsZVRleHQo
bG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBzdHlsZVRleHQsIGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmQuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5p
ZGwKaW5kZXggYjBiZTZkMi4uMmIzY2I2ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5pZGwKQEAgLTkxLDYgKzkxLDcgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICB2b2lkIGhp
ZGVET01Ob2RlSGlnaGxpZ2h0KCk7CiAKICAgICAgICAgdm9pZCBnZXRTdHlsZXMoaW4gbG9uZyBj
YWxsSWQsIGluIGxvbmcgbm9kZUlkLCBpbiBib29sZWFuIGF1dGhPbmx5KTsKKyAgICAgICAgdm9p
ZCBnZXRBbGxTdHlsZXMoaW4gbG9uZyBjYWxsSWQpOwogICAgICAgICB2b2lkIGdldElubGluZVN0
eWxlKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQgZ2V0Q29t
cHV0ZWRTdHlsZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQpOwogICAgICAgICB2b2lk
IGFwcGx5U3R5bGVUZXh0KGluIGxvbmcgY2FsbElkLCBpbiBsb25nIHN0eWxlSWQsIGluIERPTVN0
cmluZyBzdHlsZVRleHQsIGluIERPTVN0cmluZyBwcm9wZXJ0eU5hbWUpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGZjMWEwNjMuLjBkNTgxYzAgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTcwMyw2ICs3MDMsMjIgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwg
Ym9vbCBhdXRob3JPbmx5KQogICAgIG1fZnJvbnRlbmQtPmRpZEdldFN0eWxlcyhjYWxsSWQsIHJl
c3VsdCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFsbFN0eWxlcyhsb25nIGNh
bGxJZCkKK3sKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8RG9jdW1lbnQ+ID4gY29weSA9IG1fZG9j
dW1lbnRzOworICAgIFNjcmlwdEFycmF5IHJlc3VsdCA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFy
cmF5KCk7CisgICAgdW5zaWduZWQgY291bnRlciA9IDA7CisgICAgZm9yIChMaXN0SGFzaFNldDxS
ZWZQdHI8RG9jdW1lbnQ+ID46Oml0ZXJhdG9yIGl0ID0gY29weS5iZWdpbigpOyBpdCAhPSBjb3B5
LmVuZCgpOyArK2l0KSB7CisgICAgICAgIFN0eWxlU2hlZXRMaXN0KiBsaXN0ID0gKCppdCktPnN0
eWxlU2hlZXRzKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBsaXN0LT5s
ZW5ndGgoKTsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgU3R5bGVTaGVldCogc3R5bGVT
aGVldCA9IGxpc3QtPml0ZW0oaSk7CisgICAgICAgICAgICBpZiAoc3R5bGVTaGVldC0+aXNDU1NT
dHlsZVNoZWV0KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LnNldChjb3VudGVyKyssIGJ1aWxk
T2JqZWN0Rm9yU3R5bGVTaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVl
dCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2Zyb250ZW5kLT5kaWRHZXRBbGxTdHlsZXMo
Y2FsbElkLCByZXN1bHQpOworfQorCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRJbmxpbmVT
dHlsZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVG
b3JJZChub2RlSWQpOwpAQCAtNzMzLDEwICs3NDksMTEgQEAgU2NyaXB0QXJyYXkgSW5zcGVjdG9y
RE9NQWdlbnQ6OmdldE1hdGNoZWRDU1NSdWxlcyhFbGVtZW50KiBlbGVtZW50LCBib29sIGF1dGhv
ck8KICAgICBET01XaW5kb3cqIGRlZmF1bHRWaWV3ID0gZWxlbWVudC0+b3duZXJEb2N1bWVudCgp
LT5kZWZhdWx0VmlldygpOwogICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0g
ZGVmYXVsdFZpZXctPmdldE1hdGNoZWRDU1NSdWxlcyhlbGVtZW50LCAiIiwgYXV0aG9yT25seSk7
CiAgICAgU2NyaXB0QXJyYXkgbWF0Y2hlZENTU1J1bGVzID0gbV9mcm9udGVuZC0+bmV3U2NyaXB0
QXJyYXkoKTsKKyAgICB1bnNpZ25lZCBjb3VudGVyID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBtYXRjaGVkUnVsZXMuZ2V0KCkgJiYgaSA8IG1hdGNoZWRSdWxlcy0+bGVuZ3RoKCk7ICsr
aSkgewogICAgICAgICBDU1NSdWxlKiBydWxlID0gbWF0Y2hlZFJ1bGVzLT5pdGVtKGkpOwogICAg
ICAgICBpZiAocnVsZS0+dHlwZSgpID09IENTU1J1bGU6OlNUWUxFX1JVTEUpCi0gICAgICAgICAg
ICBtYXRjaGVkQ1NTUnVsZXMuc2V0KGksIGJ1aWxkT2JqZWN0Rm9yUnVsZShzdGF0aWNfY2FzdDxD
U1NTdHlsZVJ1bGUqPihydWxlKSkpOworICAgICAgICAgICAgbWF0Y2hlZENTU1J1bGVzLnNldChj
b3VudGVyKyssIGJ1aWxkT2JqZWN0Rm9yUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihy
dWxlKSkpOwogICAgIH0KICAgICByZXR1cm4gbWF0Y2hlZENTU1J1bGVzOwogfQpAQCAtMTA0Miwx
MiArMTA1OSwzNCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpwb3B1bGF0ZU9iamVjdFdpdGhT
dHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiogcwogICAgIHJlc3VsdC5zZXQoInVu
aXF1ZVN0eWxlUHJvcGVydGllcyIsIHRvQXJyYXkodW5pcXVlU3R5bGVQcm9wZXJ0aWVzKHN0eWxl
KSkpOwogfQogCitTY3JpcHRPYmplY3QgSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQoreworICAgIFNjcmlwdE9iamVj
dCByZXN1bHQgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKKyAgICByZXN1bHQuc2V0
KCJkaXNhYmxlZCIsIHN0eWxlU2hlZXQtPmRpc2FibGVkKCkpOworICAgIHJlc3VsdC5zZXQoImhy
ZWYiLCBzdHlsZVNoZWV0LT5ocmVmKCkpOworICAgIHJlc3VsdC5zZXQoInRpdGxlIiwgc3R5bGVT
aGVldC0+dGl0bGUoKSk7CisgICAgcmVzdWx0LnNldCgiZG9jSWQiLCBtX2RvY3VtZW50Tm9kZVRv
SWRNYXAuZ2V0KHN0eWxlU2hlZXQtPmRvYygpKSk7CisgICAgU2NyaXB0QXJyYXkgc3R5bGVTaGVl
dFJ1bGVzID0gbV9mcm9udGVuZC0+bmV3U2NyaXB0QXJyYXkoKTsKKyAgICByZXN1bHQuc2V0KCJj
c3NSdWxlcyIsIHN0eWxlU2hlZXRSdWxlcyk7CisgICAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4g
Y3NzUnVsZUxpc3QgPSBDU1NSdWxlTGlzdDo6Y3JlYXRlKHN0eWxlU2hlZXQsIHRydWUpOworICAg
IGlmIChjc3NSdWxlTGlzdCkgeworICAgICAgICB1bnNpZ25lZCBjb3VudGVyID0gMDsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMCwgcnVsZUxpc3RMZW5ndGggPSBjc3NSdWxlTGlzdC0+bGVu
Z3RoKCk7IGkgPCBydWxlTGlzdExlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBDU1NSdWxlKiBy
dWxlID0gY3NzUnVsZUxpc3QtPml0ZW0oaSk7CisgICAgICAgICAgICBpZiAocnVsZS0+aXNTdHls
ZVJ1bGUoKSkKKyAgICAgICAgICAgICAgICBzdHlsZVNoZWV0UnVsZXMuc2V0KGNvdW50ZXIrKywg
YnVpbGRPYmplY3RGb3JSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUpKSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogU2NyaXB0T2JqZWN0IElu
c3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQog
ewogICAgIENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQgPSBydWxlLT5wYXJlbnRTdHls
ZVNoZWV0KCk7CiAKICAgICBTY3JpcHRPYmplY3QgcmVzdWx0ID0gbV9mcm9udGVuZC0+bmV3U2Ny
aXB0T2JqZWN0KCk7CiAgICAgcmVzdWx0LnNldCgic2VsZWN0b3JUZXh0IiwgcnVsZS0+c2VsZWN0
b3JUZXh0KCkpOworICAgIHJlc3VsdC5zZXQoImNzc1RleHQiLCBydWxlLT5jc3NUZXh0KCkpOwog
ICAgIGlmIChwYXJlbnRTdHlsZVNoZWV0KSB7CiAgICAgICAgIFNjcmlwdE9iamVjdCBwYXJlbnRT
dHlsZVNoZWV0VmFsdWUgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKICAgICAgICAg
cmVzdWx0LnNldCgicGFyZW50U3R5bGVTaGVldCIsIHBhcmVudFN0eWxlU2hlZXRWYWx1ZSk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCAwY2RiY2MzLi5hZTlmNWUxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSB0aGUg
ZnJvbnRlbmQgZm9yIENTUyBzdHlsZXMgaW5zcGVjdGlvbi4KICAgICAgICAgdm9pZCBnZXRTdHls
ZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHkpOworICAgICAgICB2
b2lkIGdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCk7CiAgICAgICAgIHZvaWQgZ2V0SW5saW5lU3R5
bGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCBnZXRDb21wdXRlZFN0
eWxlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQgYXBwbHlTdHlsZVRl
eHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBzdHlsZVRleHQsIGNv
bnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKQEAgLTE1OSw2ICsxNjAsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIFNjcmlwdE9iamVjdCBidWlsZE9iamVjdEZvclN0eWxlKENTU1N0
eWxlRGVjbGFyYXRpb24qLCBib29sIGJpbmQpOwogICAgICAgICB2b2lkIHBvcHVsYXRlT2JqZWN0
V2l0aFN0eWxlUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiwgU2NyaXB0T2JqZWN0JiBy
ZXN1bHQpOwogICAgICAgICBTY3JpcHRPYmplY3QgYnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxl
UnVsZSopOworICAgICAgICBTY3JpcHRPYmplY3QgYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KENT
U1N0eWxlU2hlZXQqKTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gdW5pcXVlU3R5bGVQcm9wZXJ0
aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gbG9uZ2hh
bmRQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIHNob3J0aGFu
ZFByb3BlcnR5KTsKICAgICAgICAgU3RyaW5nIHNob3J0aGFuZFByaW9yaXR5KENTU1N0eWxlRGVj
bGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAppbmRleCA1NGE0NDE0Li41MWExZWI5IDEwMDc1NQot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCkBAIC00ODQsNiArNDg0LDE1IEBAIHZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldFN0eWxlcyhsb25nIGNhbGxJZCwgY29uc3QgU2Ny
aXB0VmFsdWUmIHN0eWxlcykKICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKK3ZvaWQgSW5zcGVj
dG9yRnJvbnRlbmQ6OmRpZEdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCwgY29uc3QgU2NyaXB0QXJy
YXkmIHN0eWxlcykKK3sKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNw
ZWN0b3IsICJkaXNwYXRjaCIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRHZXRB
bGxTdHlsZXMiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOworICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN0eWxlcyk7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQor
CiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRDb21wdXRlZFN0eWxlKGxvbmcgY2FsbElk
LCBjb25zdCBTY3JpcHRWYWx1ZSYgc3R5bGUpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1
bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmQuaAppbmRleCA2MWMxYThjLi5kYWRhY2JkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kLmgKQEAgLTEyOSw2ICsxMjksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgZGlkUmVtb3ZlTm9kZShpbnQgY2FsbElkLCBpbnQgbm9kZUlkKTsKIAog
ICAgICAgICB2b2lkIGRpZEdldFN0eWxlcyhsb25nIGNhbGxJZCwgY29uc3QgU2NyaXB0VmFsdWUm
IHN0eWxlcyk7CisgICAgICAgIHZvaWQgZGlkR2V0QWxsU3R5bGVzKGxvbmcgY2FsbElkLCBjb25z
dCBTY3JpcHRBcnJheSYgc3R5bGVzKTsKICAgICAgICAgdm9pZCBkaWRHZXRJbmxpbmVTdHlsZShs
b25nIGNhbGxJZCwgY29uc3QgU2NyaXB0VmFsdWUmIHN0eWxlKTsKICAgICAgICAgdm9pZCBkaWRH
ZXRDb21wdXRlZFN0eWxlKGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRWYWx1ZSYgc3R5bGUpOwog
ICAgICAgICB2b2lkIGRpZEFwcGx5U3R5bGVUZXh0KGludCBjYWxsSWQsIGJvb2wgc3VjY2Vzcywg
Y29uc3QgU2NyaXB0VmFsdWUmIHN0eWxlLCBjb25zdCBTY3JpcHRBcnJheSYgY2hhbmdlZFByb3Bl
cnRpZXMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVs
ZXMuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRSdWxlcy5qcwppbmRleCAy
NzM2MjJmLi5hMTQxMDhhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
QXVkaXRSdWxlcy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRSdWxl
cy5qcwpAQCAtNjMsOSArNjMsOSBAQCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5nZXREb21haW5U
b1Jlc291cmNlc01hcCA9IGZ1bmN0aW9uKHJlc291cmNlcywgdHlwZXMsIHJlZwogICAgIHJldHVy
biBkb21haW5Ub1Jlc291cmNlc01hcDsKIH0KIAotV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuZXZh
bHVhdGVJblRhcmdldFdpbmRvdyA9IGZ1bmN0aW9uKGZ1bmMsIGNhbGxiYWNrKQorV2ViSW5zcGVj
dG9yLkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyA9IGZ1bmN0aW9uKGZ1bmMsIGFy
Z3MsIGNhbGxiYWNrKQogewotICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldERlZmF1bHQoKS5l
dmFsdWF0ZU9uU2VsZihmdW5jLnRvU3RyaW5nKCksIGNhbGxiYWNrKTsKKyAgICBJbmplY3RlZFNj
cmlwdEFjY2Vzcy5nZXREZWZhdWx0KCkuZXZhbHVhdGVPblNlbGYoZnVuYy50b1N0cmluZygpLCBh
cmdzLCBjYWxsYmFjayk7CiB9CiAKIApAQCAtMjc4LDI3ICsyNzgsOTEgQEAgV2ViSW5zcGVjdG9y
LkF1ZGl0UnVsZXMuVW51c2VkQ3NzUnVsZS5wcm90b3R5cGUgPSB7CiAgICAgZG9SdW46IGZ1bmN0
aW9uKHJlc291cmNlcywgcmVzdWx0LCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIHZhciBzZWxm
ID0gdGhpczsKLSAgICAgICAgZnVuY3Rpb24gZXZhbENhbGxiYWNrKHJvdXRpbmVSZXN1bHQsIGlz
RXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICBpZiAoaXNFeGNlcHRpb24gfHwgIXJvdXRpbmVSZXN1
bHQgfHwgIXJvdXRpbmVSZXN1bHQuc3R5bGVTaGVldHMubGVuZ3RoKQorICAgICAgICBmdW5jdGlv
biBldmFsQ2FsbGJhY2soc3R5bGVTaGVldHMpIHsKKyAgICAgICAgICAgIGlmICghc3R5bGVTaGVl
dHMubGVuZ3RoKQogICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTsKIAotICAg
ICAgICAgICAgdmFyIHRvdGFsVW51c2VkUGVyY2VudCA9IE1hdGgucm91bmQoMTAwICogcm91dGlu
ZVJlc3VsdC51bnVzZWRTaXplIC8gcm91dGluZVJlc3VsdC50b3RhbFNpemUpOwotICAgICAgICAg
ICAgdmFyIHN1bW1hcnkgPSByZXN1bHQuYWRkQ2hpbGQoU3RyaW5nLnNwcmludGYoIiVkJSUgb2Yg
Q1NTIChlc3RpbWF0ZWQpIGlzIG5vdCB1c2VkIGJ5IHRoZSBjdXJyZW50IHBhZ2UuIiwgdG90YWxV
bnVzZWRQZXJjZW50KSwgdHJ1ZSk7CisgICAgICAgICAgICB2YXIgcHNldWRvU2VsZWN0b3JSZWdl
eHAgPSAvOmhvdmVyfDpsaW5rfDphY3RpdmV8OnZpc2l0ZWR8OmZvY3VzfDpiZWZvcmV8OmFmdGVy
LzsKKyAgICAgICAgICAgIHZhciBzZWxlY3RvcnMgPSBbXTsKKyAgICAgICAgICAgIHZhciB0ZXN0
ZWRTZWxlY3RvcnMgPSB7fTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVT
aGVldHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3R5bGVTaGVldCA9IHN0
eWxlU2hlZXRzW2ldOworICAgICAgICAgICAgICAgIGZvciAodmFyIGN1clJ1bGUgPSAwOyBjdXJS
dWxlIDwgc3R5bGVTaGVldC5jc3NSdWxlcy5sZW5ndGg7ICsrY3VyUnVsZSkgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgcnVsZSA9IHN0eWxlU2hlZXQuY3NzUnVsZXNbY3VyUnVsZV07CisgICAg
ICAgICAgICAgICAgICAgIGlmIChydWxlLnNlbGVjdG9yVGV4dC5tYXRjaChwc2V1ZG9TZWxlY3Rv
clJlZ2V4cCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAgICAgc2VsZWN0b3JzLnB1c2gocnVsZS5zZWxlY3RvclRleHQpOworICAgICAgICAgICAg
ICAgICAgICB0ZXN0ZWRTZWxlY3RvcnNbcnVsZS5zZWxlY3RvclRleHRdID0gMTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHNlbGVjdG9y
c0NhbGxiYWNrKGNhbGxiYWNrLCBzdHlsZVNoZWV0cywgdGVzdGVkU2VsZWN0b3JzLCBmb3VuZFNl
bGVjdG9ycykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgcm91dGluZVJlc3Vs
dCA9IHsgc3R5bGVTaGVldHM6IFtdIH07CisgICAgICAgICAgICAgICAgdmFyIGlubGluZUJsb2Nr
T3JkaW5hbCA9IDA7CisgICAgICAgICAgICAgICAgdmFyIHRvdGFsU3R5bGVzaGVldFNpemUgPSAw
OworICAgICAgICAgICAgICAgIHZhciB0b3RhbFVudXNlZFN0eWxlc2hlZXRTaXplID0gMDsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlU2hlZXRzLmxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldHNbaV07
CisgICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZXNoZWV0U2l6ZSA9IDA7CisgICAgICAgICAg
ICAgICAgICAgIHZhciB1bnVzZWRTdHlsZXNoZWV0U2l6ZSA9IDA7CisgICAgICAgICAgICAgICAg
ICAgIHZhciB1bnVzZWRSdWxlcyA9IFtdOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBj
dXJSdWxlID0gMDsgY3VyUnVsZSA8IHN0eWxlU2hlZXQuY3NzUnVsZXMubGVuZ3RoOyArK2N1clJ1
bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBydWxlID0gc3R5bGVTaGVldC5jc3NS
dWxlc1tjdXJSdWxlXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0TGVuZ3RoID0g
cnVsZS5jc3NUZXh0ID8gcnVsZS5jc3NUZXh0Lmxlbmd0aCA6IDA7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdHlsZXNoZWV0U2l6ZSArPSB0ZXh0TGVuZ3RoOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCF0ZXN0ZWRTZWxlY3RvcnNbcnVsZS5zZWxlY3RvclRleHRdIHx8IGZvdW5kU2Vs
ZWN0b3JzW3J1bGUuc2VsZWN0b3JUZXh0XSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVudXNlZFN0eWxlc2hlZXRTaXplICs9
IHRleHRMZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnVzZWRSdWxlcy5wdXNoKHJ1
bGUuc2VsZWN0b3JUZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB0b3RhbFN0eWxlc2hlZXRTaXplICs9IHN0eWxlc2hlZXRTaXplOworICAgICAgICAgICAg
ICAgICAgICB0b3RhbFVudXNlZFN0eWxlc2hlZXRTaXplICs9IHVudXNlZFN0eWxlc2hlZXRTaXpl
OworCisgICAgICAgICAgICAgICAgICAgIGlmICh1bnVzZWRSdWxlcy5sZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHsgdHlwZTogc3R5bGVTaGVldC5ocmVmID8g
ImhyZWYiIDogImlubGluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxTaXpl
OiBzdHlsZXNoZWV0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnVzZWRTaXpl
OiB1bnVzZWRTdHlsZXNoZWV0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2Nh
dGlvbjogc3R5bGVTaGVldC5ocmVmID8gc3R5bGVTaGVldC5ocmVmIDogKytpbmxpbmVCbG9ja09y
ZGluYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW51c2VkUnVsZXM6IHVudXNlZFJ1
bGVzIH07CisgICAgICAgICAgICAgICAgICAgICAgICByb3V0aW5lUmVzdWx0LnN0eWxlU2hlZXRz
LnB1c2goZW50cnkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgaWYgKCF0b3RhbFVudXNlZFN0eWxlc2hlZXRTaXplKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7CiAKLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcm91dGluZVJlc3VsdC5zdHlsZVNoZWV0cy5sZW5ndGg7ICsraSkgewot
ICAgICAgICAgICAgICAgIHZhciBzdHlsZXNoZWV0ID0gcm91dGluZVJlc3VsdC5zdHlsZVNoZWV0
c1tpXTsKKyAgICAgICAgICAgICAgICB2YXIgdG90YWxVbnVzZWRQZXJjZW50ID0gTWF0aC5yb3Vu
ZCgxMDAgKiB0b3RhbFVudXNlZFN0eWxlc2hlZXRTaXplIC8gdG90YWxTdHlsZXNoZWV0U2l6ZSk7
CisgICAgICAgICAgICAgICAgdmFyIHN1bW1hcnkgPSByZXN1bHQuYWRkQ2hpbGQoU3RyaW5nLnNw
cmludGYoIiVkJSUgb2YgQ1NTIChlc3RpbWF0ZWQpIGlzIG5vdCB1c2VkIGJ5IHRoZSBjdXJyZW50
IHBhZ2UuIiwgdG90YWxVbnVzZWRQZXJjZW50KSwgdHJ1ZSk7CiAKLSAgICAgICAgICAgICAgICB2
YXIgdXJsID0gc3R5bGVzaGVldC50eXBlID09PSAiaHJlZiIgPyBXZWJJbnNwZWN0b3IubGlua2lm
eVVSTChzdHlsZXNoZWV0LmxvY2F0aW9uKSA6IFN0cmluZy5zcHJpbnRmKCJJbmxpbmUgYmxvY2sg
IyVzIiwgc3R5bGVzaGVldC5sb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgdmFyIHBjdFVudXNl
ZCA9IE1hdGgucm91bmQoMTAwICogc3R5bGVzaGVldC51bnVzZWRTaXplIC8gc3R5bGVzaGVldC50
b3RhbFNpemUpOwotICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHN1bW1hcnkuYWRkQ2hpbGQo
U3RyaW5nLnNwcmludGYoIiVzOiAlZCUlIChlc3RpbWF0ZWQpIGlzIG5vdCB1c2VkIGJ5IHRoZSBj
dXJyZW50IHBhZ2UuIiwgdXJsLCBwY3RVbnVzZWQpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHJvdXRpbmVSZXN1bHQuc3R5bGVTaGVldHMubGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHN0eWxlc2hlZXQgPSByb3V0aW5lUmVzdWx0LnN0eWxlU2hl
ZXRzW2ldOwogCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdHlsZXNoZWV0
LnVudXNlZFJ1bGVzLmxlbmd0aDsgKytqKQotICAgICAgICAgICAgICAgICAgICBlbnRyeS5hZGRT
bmlwcGV0KHN0eWxlc2hlZXQudW51c2VkUnVsZXNbal0pOworICAgICAgICAgICAgICAgICAgICB2
YXIgdXJsID0gc3R5bGVzaGVldC50eXBlID09PSAiaHJlZiIgPyBXZWJJbnNwZWN0b3IubGlua2lm
eVVSTChzdHlsZXNoZWV0LmxvY2F0aW9uKSA6IFN0cmluZy5zcHJpbnRmKCJJbmxpbmUgYmxvY2sg
IyVzIiwgc3R5bGVzaGVldC5sb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHZhciBwY3RV
bnVzZWQgPSBNYXRoLnJvdW5kKDEwMCAqIHN0eWxlc2hlZXQudW51c2VkU2l6ZSAvIHN0eWxlc2hl
ZXQudG90YWxTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3VtbWFyeS5h
ZGRDaGlsZChTdHJpbmcuc3ByaW50ZigiJXM6ICVkJSUgKGVzdGltYXRlZCkgaXMgbm90IHVzZWQg
YnkgdGhlIGN1cnJlbnQgcGFnZS4iLCB1cmwsIHBjdFVudXNlZCkpOwogCi0gICAgICAgICAgICAg
ICAgcmVzdWx0LnZpb2xhdGlvbkNvdW50ICs9IHN0eWxlc2hlZXQudW51c2VkUnVsZXMubGVuZ3Ro
OworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN0eWxlc2hlZXQudW51
c2VkUnVsZXMubGVuZ3RoOyArK2opCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5hZGRT
bmlwcGV0KHN0eWxlc2hlZXQudW51c2VkUnVsZXNbal0pOworCisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC52aW9sYXRpb25Db3VudCArPSBzdHlsZXNoZWV0LnVudXNlZFJ1bGVzLmxlbmd0aDsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgICAgICAg
ICAgZnVuY3Rpb24gcm91dGluZShzZWxlY3RvckFycmF5KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHZhciByZXN1bHQgPSB7fTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHNlbGVjdG9yQXJyYXkubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIG5vZGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvckFycmF5W2ldKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0aCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdFtzZWxlY3RvckFycmF5W2ldXSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmV2YWx1YXRlSW5UYXJnZXRX
aW5kb3cocm91dGluZSwgW3NlbGVjdG9yc10sIHNlbGVjdG9yc0NhbGxiYWNrLmJpbmQobnVsbCwg
Y2FsbGJhY2ssIHN0eWxlU2hlZXRzLCB0ZXN0ZWRTZWxlY3RvcnMpKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGZ1bmN0aW9uIHJvdXRpbmUoKQpAQCAtMzA2LDQ4ICszNzAsMTEgQEAgV2ViSW5zcGVj
dG9yLkF1ZGl0UnVsZXMuVW51c2VkQ3NzUnVsZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB2
YXIgc3R5bGVTaGVldHMgPSBkb2N1bWVudC5zdHlsZVNoZWV0czsKICAgICAgICAgICAgIGlmICgh
c3R5bGVTaGVldHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
dmFyIHJvdXRpbmVSZXN1bHQgPSB7IHN0eWxlU2hlZXRzOiBbXSB9OwotICAgICAgICAgICAgdmFy
IGlubGluZUJsb2NrT3JkaW5hbCA9IDA7Ci0gICAgICAgICAgICB2YXIgdG90YWxTdHlsZXNoZWV0
U2l6ZSA9IDA7Ci0gICAgICAgICAgICB2YXIgdG90YWxVbnVzZWRTdHlsZXNoZWV0U2l6ZSA9IDA7
Ci0gICAgICAgICAgICB2YXIgcHNldWRvU2VsZWN0b3JSZWdleHAgPSAvOmhvdmVyfDpsaW5rfDph
Y3RpdmV8OnZpc2l0ZWR8OmZvY3VzLzsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
c3R5bGVTaGVldHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3R5bGVTaGVl
dCA9IHN0eWxlU2hlZXRzW2ldOwotICAgICAgICAgICAgICAgIGlmICghc3R5bGVTaGVldC5jc3NS
dWxlcykKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgdmFy
IHN0eWxlc2hlZXRTaXplID0gMDsKLSAgICAgICAgICAgICAgICB2YXIgdW51c2VkU3R5bGVzaGVl
dFNpemUgPSAwOwotICAgICAgICAgICAgICAgIHZhciB1bnVzZWRSdWxlcyA9IFtdOwotICAgICAg
ICAgICAgICAgIGZvciAodmFyIGN1clJ1bGUgPSAwOyBjdXJSdWxlIDwgc3R5bGVTaGVldC5jc3NS
dWxlcy5sZW5ndGg7ICsrY3VyUnVsZSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgcnVsZSA9
IHN0eWxlU2hlZXQuY3NzUnVsZXNbY3VyUnVsZV07Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0
ZXh0TGVuZ3RoID0gcnVsZS5jc3NUZXh0ID8gcnVsZS5jc3NUZXh0Lmxlbmd0aCA6IDA7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0eWxlc2hlZXRTaXplICs9IHRleHRMZW5ndGg7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChydWxlLnR5cGUgIT09IDEgfHwgcnVsZS5zZWxlY3RvclRleHQubWF0Y2go
cHNldWRvU2VsZWN0b3JSZWdleHApKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBub2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JB
bGwocnVsZS5zZWxlY3RvclRleHQpOwotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZXMgJiYg
bm9kZXMubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgICAgIHVudXNlZFN0eWxlc2hlZXRTaXplICs9IHRleHRMZW5ndGg7Ci0gICAgICAg
ICAgICAgICAgICAgIHVudXNlZFJ1bGVzLnB1c2gocnVsZS5zZWxlY3RvclRleHQpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0b3RhbFN0eWxlc2hlZXRTaXplICs9IHN0eWxl
c2hlZXRTaXplOwotICAgICAgICAgICAgICAgIHRvdGFsVW51c2VkU3R5bGVzaGVldFNpemUgKz0g
dW51c2VkU3R5bGVzaGVldFNpemU7Ci0KLSAgICAgICAgICAgICAgICBpZiAodW51c2VkUnVsZXMu
bGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHsgdHlwZTogc3R5bGVT
aGVldC5ocmVmID8gImhyZWYiIDogImlubGluZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG90YWxTaXplOiBzdHlsZXNoZWV0U2l6ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnVzZWRTaXplOiB1bnVzZWRTdHlsZXNoZWV0U2l6ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogc3R5bGVTaGVldC5ocmVmID8gc3R5
bGVTaGVldC5ocmVmIDogKytpbmxpbmVCbG9ja09yZGluYWwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW51c2VkUnVsZXM6IHVudXNlZFJ1bGVzIH07Ci0gICAgICAgICAgICAg
ICAgICAgIHJvdXRpbmVSZXN1bHQuc3R5bGVTaGVldHMucHVzaChlbnRyeSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcm91dGluZVJlc3VsdC50b3RhbFNp
emUgPSB0b3RhbFN0eWxlc2hlZXRTaXplOwotICAgICAgICAgICAgcm91dGluZVJlc3VsdC51bnVz
ZWRTaXplID0gdG90YWxVbnVzZWRTdHlsZXNoZWV0U2l6ZTsKKwogICAgICAgICAgICAgcmV0dXJu
IHJvdXRpbmVSZXN1bHQ7CiAgICAgICAgIH0KIAotICAgICAgICBXZWJJbnNwZWN0b3IuQXVkaXRS
dWxlcy5ldmFsdWF0ZUluVGFyZ2V0V2luZG93KHJvdXRpbmUsIGV2YWxDYWxsYmFjayk7CisgICAg
ICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0QWxsU3R5bGVzKFdlYkluc3BlY3Rvci5DYWxsYmFjay53
cmFwKGV2YWxDYWxsYmFjaykpOwogICAgIH0KIH0KIApAQCAtNjY5LDcgKzY5Niw3IEBAIFdlYklu
c3BlY3Rvci5BdWRpdFJ1bGVzLkltYWdlRGltZW5zaW9uc1J1bGUucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgcmV0dXJuIGZvdW5kID8ge3RvdGFsSW1hZ2VzOiBpbWFnZXMubGVuZ3RoLCBtYXA6
IHVybFRvTm9EaW1lbnNpb25Db3VudH0gOiBudWxsOwogICAgICAgICB9CiAKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyhyb3V0aW5lLCBldmFs
Q2FsbGJhY2suYmluZCh0aGlzKSk7CisgICAgICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmV2
YWx1YXRlSW5UYXJnZXRXaW5kb3cocm91dGluZSwgbnVsbCwgZXZhbENhbGxiYWNrLmJpbmQodGhp
cykpOwogICAgIH0KIH0KIApAQCAtNzQzLDcgKzc3MCw3IEBAIFdlYkluc3BlY3Rvci5BdWRpdFJ1
bGVzLkNzc0luSGVhZFJ1bGUucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIGZvdW5k
ID8gdXJsVG9WaW9sYXRpb25zQXJyYXkgOiBudWxsOwogICAgICAgICB9CiAKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyhyb3V0aW5lLCBldmFs
Q2FsbGJhY2spOworICAgICAgICBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5ldmFsdWF0ZUluVGFy
Z2V0V2luZG93KHJvdXRpbmUsIG51bGwsIGV2YWxDYWxsYmFjayk7CiAgICAgfQogfQogCkBAIC03
OTAsNyArODE3LDcgQEAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuU3R5bGVzU2NyaXB0c09yZGVy
UnVsZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm4gWyBsYXRlU3R5bGVVcmxzLCBj
c3NCZWZvcmVJbmxpbmVDb3VudCBdOwogICAgICAgICB9CiAKLSAgICAgICAgV2ViSW5zcGVjdG9y
LkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyhyb3V0aW5lLCBldmFsQ2FsbGJhY2su
YmluZCh0aGlzKSk7CisgICAgICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmV2YWx1YXRlSW5U
YXJnZXRXaW5kb3cocm91dGluZSwgbnVsbCwgZXZhbENhbGxiYWNrLmJpbmQodGhpcykpOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50
LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCmluZGV4IDYyZmVk
NzcuLjgzZmVkZTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01B
Z2VudC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKQEAg
LTcxOCw2ICs3MTgsNyBAQCBXZWJJbnNwZWN0b3IuZGlkUmVtb3ZlTm9kZSA9IFdlYkluc3BlY3Rv
ci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlkR2V0RXZlbnRMaXN0
ZW5lcnNGb3JOb2RlID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKIAog
V2ViSW5zcGVjdG9yLmRpZEdldFN0eWxlcyA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNz
Q2FsbGJhY2s7CitXZWJJbnNwZWN0b3IuZGlkR2V0QWxsU3R5bGVzID0gV2ViSW5zcGVjdG9yLkNh
bGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKIFdlYkluc3BlY3Rvci5kaWRHZXRJbmxpbmVTdHlsZSA9
IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlk
R2V0Q29tcHV0ZWRTdHlsZSA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7
CiBXZWJJbnNwZWN0b3IuZGlkQXBwbHlTdHlsZVRleHQgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2su
cHJvY2Vzc0NhbGxiYWNrOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0luamVjdGVkU2NyaXB0LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVk
U2NyaXB0LmpzCmluZGV4IDhjN2Q0OGUuLjJhMmEyNTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKQEAgLTc4Niw5ICs3ODYsMTAgQEAgSW5qZWN0
ZWRTY3JpcHQuY3JlYXRlUHJveHlPYmplY3QgPSBmdW5jdGlvbihvYmplY3QsIG9iamVjdElkLCBh
YmJyZXZpYXRlKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUluamVjdGVkU2NyaXB0LmV2YWx1
YXRlT25TZWxmID0gZnVuY3Rpb24oZnVuY0JvZHkpCitJbmplY3RlZFNjcmlwdC5ldmFsdWF0ZU9u
U2VsZiA9IGZ1bmN0aW9uKGZ1bmNCb2R5LCBhcmdzKQogewotICAgIHJldHVybiB3aW5kb3cuZXZh
bCgiKCIgKyBmdW5jQm9keSArICIpKCk7Iik7CisgICAgdmFyIGZ1bmMgPSB3aW5kb3cuZXZhbCgi
KCIgKyBmdW5jQm9keSArICIpIik7CisgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyB8
fCBbXSk7CiB9CiAKIEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5ID0gZnVuY3Rpb24oaWQs
IGNhbGxGcmFtZSkK
</data>
<flag name="review"
          id="34015"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50888</attachid>
            <date>2010-03-17 03:22:03 -0700</date>
            <delta_ts>2010-03-17 06:02:05 -0700</delta_ts>
            <desc>[PATCH] Comments addressed</desc>
            <filename>nativestyles.patch</filename>
            <type>text/plain</type>
            <size>21416</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTcyZWM3MS4uMTJjNjkwMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxMC0wMy0xNyAgQWxleGFuZGVyIFBh
dmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlaW1wbGVtZW50IHN0eWxlLXJl
bGF0ZWQgYXVkaXRzIHVzaW5nIG5hdGl2ZSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM2MTcyCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpnZXRB
bGxTdHlsZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmg6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6Z2V0QWxsU3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpnZXRNYXRjaGVkQ1NTUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldEFsbFN0eWxl
cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmg6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdFJ1bGVzLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5VbnVzZWRDc3NSdWxlLnByb3RvdHlwZS5kb1J1bi5ldmFsQ2FsbGJhY2su
c2VsZWN0b3JzQ2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuVW51
c2VkQ3NzUnVsZS5wcm90b3R5cGUuZG9SdW4uZXZhbENhbGxiYWNrLnJvdXRpbmUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuVW51c2VkQ3NzUnVsZS5wcm90b3R5cGUuZG9SdW4u
ZXZhbENhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlVudXNlZENz
c1J1bGUucHJvdG90eXBlLmRvUnVuLnJvdXRpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZXMuVW51c2VkQ3NzUnVsZS5wcm90b3R5cGUuZG9SdW4pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZS5wcm90b3R5cGUuZG9SdW4pOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ3NzSW5IZWFkUnVsZS5wcm90b3R5cGUu
ZG9SdW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuU3R5bGVzU2NyaXB0c09y
ZGVyUnVsZS5wcm90b3R5cGUuZG9SdW4pOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
RE9NQWdlbnQuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlw
dC5qczoKKyAgICAgICAgKGluamVjdGVkU2NyaXB0Q29uc3RydWN0b3IpOgorCiAyMDEwLTAzLTE2
ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5j
cHAKaW5kZXggNWEzZmQ2OS4uMDYzMGVlMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5jcHAKQEAgLTM2Miw2ICszNjIsMTIgQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRT
dHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHkpCiAgICAgICAg
IGRvbUFnZW50LT5nZXRTdHlsZXMoY2FsbElkLCBub2RlSWQsIGF1dGhvck9ubHkpOwogfQogCit2
b2lkIEluc3BlY3RvckJhY2tlbmQ6OmdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCkKK3sKKyAgICBp
ZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAg
ICAgICAgZG9tQWdlbnQtPmdldEFsbFN0eWxlcyhjYWxsSWQpOworfQorCiB2b2lkIEluc3BlY3Rv
ckJhY2tlbmQ6OmdldElubGluZVN0eWxlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkKIHsKICAg
ICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yRE9NQWdlbnQoKSkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaAppbmRleCA5M2RjMjdjLi4zY2MyNTQ1IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCkBAIC0xMTQsNiArMTE0LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgcmVtb3ZlTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwogCiAg
ICAgdm9pZCBnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhPbmx5
KTsKKyAgICB2b2lkIGdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCk7CiAgICAgdm9pZCBnZXRJbmxp
bmVTdHlsZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwogICAgIHZvaWQgZ2V0Q29tcHV0ZWRT
dHlsZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwogICAgIHZvaWQgYXBwbHlTdHlsZVRleHQo
bG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBzdHlsZVRleHQsIGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmQuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5p
ZGwKaW5kZXggYjBiZTZkMi4uMmIzY2I2ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5pZGwKQEAgLTkxLDYgKzkxLDcgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICB2b2lkIGhp
ZGVET01Ob2RlSGlnaGxpZ2h0KCk7CiAKICAgICAgICAgdm9pZCBnZXRTdHlsZXMoaW4gbG9uZyBj
YWxsSWQsIGluIGxvbmcgbm9kZUlkLCBpbiBib29sZWFuIGF1dGhPbmx5KTsKKyAgICAgICAgdm9p
ZCBnZXRBbGxTdHlsZXMoaW4gbG9uZyBjYWxsSWQpOwogICAgICAgICB2b2lkIGdldElubGluZVN0
eWxlKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQgZ2V0Q29t
cHV0ZWRTdHlsZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQpOwogICAgICAgICB2b2lk
IGFwcGx5U3R5bGVUZXh0KGluIGxvbmcgY2FsbElkLCBpbiBsb25nIHN0eWxlSWQsIGluIERPTVN0
cmluZyBzdHlsZVRleHQsIGluIERPTVN0cmluZyBwcm9wZXJ0eU5hbWUpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGZjMWEwNjMuLmM4NzRlM2MgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTcwMyw2ICs3MDMsMjEgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwg
Ym9vbCBhdXRob3JPbmx5KQogICAgIG1fZnJvbnRlbmQtPmRpZEdldFN0eWxlcyhjYWxsSWQsIHJl
c3VsdCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFsbFN0eWxlcyhsb25nIGNh
bGxJZCkKK3sKKyAgICBTY3JpcHRBcnJheSByZXN1bHQgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRB
cnJheSgpOworICAgIHVuc2lnbmVkIGNvdW50ZXIgPSAwOworICAgIGZvciAoTGlzdEhhc2hTZXQ8
UmVmUHRyPERvY3VtZW50PiA+OjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRzLmJlZ2luKCk7IGl0
ICE9IG1fZG9jdW1lbnRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIFN0eWxlU2hlZXRMaXN0KiBs
aXN0ID0gKCppdCktPnN0eWxlU2hlZXRzKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsaXN0LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBTdHlsZVNoZWV0KiBzdHls
ZVNoZWV0ID0gbGlzdC0+aXRlbShpKTsKKyAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0LT5pc0NT
U1N0eWxlU2hlZXQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuc2V0KGNvdW50ZXIrKywgYnVp
bGRPYmplY3RGb3JTdHlsZVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZVNo
ZWV0KSkpOworICAgICAgICB9CisgICAgfQorICAgIG1fZnJvbnRlbmQtPmRpZEdldEFsbFN0eWxl
cyhjYWxsSWQsIHJlc3VsdCk7Cit9CisKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldElubGlu
ZVN0eWxlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0gbm9k
ZUZvcklkKG5vZGVJZCk7CkBAIC03MzMsMTAgKzc0OCwxMSBAQCBTY3JpcHRBcnJheSBJbnNwZWN0
b3JET01BZ2VudDo6Z2V0TWF0Y2hlZENTU1J1bGVzKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgYXV0
aG9yTwogICAgIERPTVdpbmRvdyogZGVmYXVsdFZpZXcgPSBlbGVtZW50LT5vd25lckRvY3VtZW50
KCktPmRlZmF1bHRWaWV3KCk7CiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtYXRjaGVkUnVsZXMg
PSBkZWZhdWx0Vmlldy0+Z2V0TWF0Y2hlZENTU1J1bGVzKGVsZW1lbnQsICIiLCBhdXRob3JPbmx5
KTsKICAgICBTY3JpcHRBcnJheSBtYXRjaGVkQ1NTUnVsZXMgPSBtX2Zyb250ZW5kLT5uZXdTY3Jp
cHRBcnJheSgpOworICAgIHVuc2lnbmVkIGNvdW50ZXIgPSAwOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IG1hdGNoZWRSdWxlcy5nZXQoKSAmJiBpIDwgbWF0Y2hlZFJ1bGVzLT5sZW5ndGgoKTsg
KytpKSB7CiAgICAgICAgIENTU1J1bGUqIHJ1bGUgPSBtYXRjaGVkUnVsZXMtPml0ZW0oaSk7CiAg
ICAgICAgIGlmIChydWxlLT50eXBlKCkgPT0gQ1NTUnVsZTo6U1RZTEVfUlVMRSkKLSAgICAgICAg
ICAgIG1hdGNoZWRDU1NSdWxlcy5zZXQoaSwgYnVpbGRPYmplY3RGb3JSdWxlKHN0YXRpY19jYXN0
PENTU1N0eWxlUnVsZSo+KHJ1bGUpKSk7CisgICAgICAgICAgICBtYXRjaGVkQ1NTUnVsZXMuc2V0
KGNvdW50ZXIrKywgYnVpbGRPYmplY3RGb3JSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+
KHJ1bGUpKSk7CiAgICAgfQogICAgIHJldHVybiBtYXRjaGVkQ1NTUnVsZXM7CiB9CkBAIC0xMDQy
LDEyICsxMDU4LDM0IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBvcHVsYXRlT2JqZWN0V2l0
aFN0eWxlUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiBzCiAgICAgcmVzdWx0LnNldCgi
dW5pcXVlU3R5bGVQcm9wZXJ0aWVzIiwgdG9BcnJheSh1bmlxdWVTdHlsZVByb3BlcnRpZXMoc3R5
bGUpKSk7CiB9CiAKK1NjcmlwdE9iamVjdCBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RG
b3JTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit7CisgICAgU2NyaXB0T2Jq
ZWN0IHJlc3VsdCA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOworICAgIHJlc3VsdC5z
ZXQoImRpc2FibGVkIiwgc3R5bGVTaGVldC0+ZGlzYWJsZWQoKSk7CisgICAgcmVzdWx0LnNldCgi
aHJlZiIsIHN0eWxlU2hlZXQtPmhyZWYoKSk7CisgICAgcmVzdWx0LnNldCgidGl0bGUiLCBzdHls
ZVNoZWV0LT50aXRsZSgpKTsKKyAgICByZXN1bHQuc2V0KCJkb2N1bWVudEVsZW1lbnRJZCIsIG1f
ZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoc3R5bGVTaGVldC0+ZG9jKCkpKTsKKyAgICBTY3JpcHRB
cnJheSBjc3NSdWxlcyA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFycmF5KCk7CisgICAgcmVzdWx0
LnNldCgiY3NzUnVsZXMiLCBjc3NSdWxlcyk7CisgICAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4g
Y3NzUnVsZUxpc3QgPSBDU1NSdWxlTGlzdDo6Y3JlYXRlKHN0eWxlU2hlZXQsIHRydWUpOworICAg
IGlmICghY3NzUnVsZUxpc3QpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgdW5zaWduZWQg
Y291bnRlciA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNzc1J1bGVMaXN0LT5s
ZW5ndGgoKTsgKytpKSB7CisgICAgICAgIENTU1J1bGUqIHJ1bGUgPSBjc3NSdWxlTGlzdC0+aXRl
bShpKTsKKyAgICAgICAgaWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgICAgICBjc3NS
dWxlcy5zZXQoY291bnRlcisrLCBidWlsZE9iamVjdEZvclJ1bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVSdWxlKj4ocnVsZSkpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogU2NyaXB0
T2JqZWN0IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxl
KiBydWxlKQogewogICAgIENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQgPSBydWxlLT5w
YXJlbnRTdHlsZVNoZWV0KCk7CiAKICAgICBTY3JpcHRPYmplY3QgcmVzdWx0ID0gbV9mcm9udGVu
ZC0+bmV3U2NyaXB0T2JqZWN0KCk7CiAgICAgcmVzdWx0LnNldCgic2VsZWN0b3JUZXh0IiwgcnVs
ZS0+c2VsZWN0b3JUZXh0KCkpOworICAgIHJlc3VsdC5zZXQoImNzc1RleHQiLCBydWxlLT5jc3NU
ZXh0KCkpOwogICAgIGlmIChwYXJlbnRTdHlsZVNoZWV0KSB7CiAgICAgICAgIFNjcmlwdE9iamVj
dCBwYXJlbnRTdHlsZVNoZWV0VmFsdWUgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsK
ICAgICAgICAgcmVzdWx0LnNldCgicGFyZW50U3R5bGVTaGVldCIsIHBhcmVudFN0eWxlU2hlZXRW
YWx1ZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5o
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCAwY2RiY2MzLi5h
ZTlmNWUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5o
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTEwMCw2ICsx
MDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gTWV0aG9kcyBjYWxsZWQg
ZnJvbSB0aGUgZnJvbnRlbmQgZm9yIENTUyBzdHlsZXMgaW5zcGVjdGlvbi4KICAgICAgICAgdm9p
ZCBnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHkpOwor
ICAgICAgICB2b2lkIGdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCk7CiAgICAgICAgIHZvaWQgZ2V0
SW5saW5lU3R5bGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCBnZXRD
b21wdXRlZFN0eWxlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQgYXBw
bHlTdHlsZVRleHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBzdHls
ZVRleHQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKQEAgLTE1OSw2ICsxNjAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNjcmlwdE9iamVjdCBidWlsZE9iamVjdEZvclN0
eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBib29sIGJpbmQpOwogICAgICAgICB2b2lkIHBvcHVs
YXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiwgU2NyaXB0
T2JqZWN0JiByZXN1bHQpOwogICAgICAgICBTY3JpcHRPYmplY3QgYnVpbGRPYmplY3RGb3JSdWxl
KENTU1N0eWxlUnVsZSopOworICAgICAgICBTY3JpcHRPYmplY3QgYnVpbGRPYmplY3RGb3JTdHls
ZVNoZWV0KENTU1N0eWxlU2hlZXQqKTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gdW5pcXVlU3R5
bGVQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKICAgICAgICAgVmVjdG9yPFN0cmlu
Zz4gbG9uZ2hhbmRQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcm
IHNob3J0aGFuZFByb3BlcnR5KTsKICAgICAgICAgU3RyaW5nIHNob3J0aGFuZFByaW9yaXR5KENT
U1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAppbmRleCA1NGE0NDE0Li41MWExZWI5
IDEwMDc1NQotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCkBAIC00ODQsNiArNDg0
LDE1IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldFN0eWxlcyhsb25nIGNhbGxJZCwg
Y29uc3QgU2NyaXB0VmFsdWUmIHN0eWxlcykKICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKK3Zv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCwgY29uc3Qg
U2NyaXB0QXJyYXkmIHN0eWxlcykKK3sKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24o
bV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KCJkaWRHZXRBbGxTdHlsZXMiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQp
OworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN0eWxlcyk7CisgICAgZnVuY3Rpb24uY2Fs
bCgpOworfQorCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRDb21wdXRlZFN0eWxlKGxv
bmcgY2FsbElkLCBjb25zdCBTY3JpcHRWYWx1ZSYgc3R5bGUpCiB7CiAgICAgU2NyaXB0RnVuY3Rp
b25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAppbmRleCA2MWMxYThjLi5kYWRhY2JkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKQEAgLTEyOSw2ICsxMjksNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGlkUmVtb3ZlTm9kZShpbnQgY2FsbElkLCBpbnQgbm9k
ZUlkKTsKIAogICAgICAgICB2b2lkIGRpZEdldFN0eWxlcyhsb25nIGNhbGxJZCwgY29uc3QgU2Ny
aXB0VmFsdWUmIHN0eWxlcyk7CisgICAgICAgIHZvaWQgZGlkR2V0QWxsU3R5bGVzKGxvbmcgY2Fs
bElkLCBjb25zdCBTY3JpcHRBcnJheSYgc3R5bGVzKTsKICAgICAgICAgdm9pZCBkaWRHZXRJbmxp
bmVTdHlsZShsb25nIGNhbGxJZCwgY29uc3QgU2NyaXB0VmFsdWUmIHN0eWxlKTsKICAgICAgICAg
dm9pZCBkaWRHZXRDb21wdXRlZFN0eWxlKGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRWYWx1ZSYg
c3R5bGUpOwogICAgICAgICB2b2lkIGRpZEFwcGx5U3R5bGVUZXh0KGludCBjYWxsSWQsIGJvb2wg
c3VjY2VzcywgY29uc3QgU2NyaXB0VmFsdWUmIHN0eWxlLCBjb25zdCBTY3JpcHRBcnJheSYgY2hh
bmdlZFByb3BlcnRpZXMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0F1ZGl0UnVsZXMuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRSdWxlcy5q
cwppbmRleCAyNzM2MjJmLi5lYzA0MWU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQXVkaXRSdWxlcy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
QXVkaXRSdWxlcy5qcwpAQCAtNjMsOSArNjMsOSBAQCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5n
ZXREb21haW5Ub1Jlc291cmNlc01hcCA9IGZ1bmN0aW9uKHJlc291cmNlcywgdHlwZXMsIHJlZwog
ICAgIHJldHVybiBkb21haW5Ub1Jlc291cmNlc01hcDsKIH0KIAotV2ViSW5zcGVjdG9yLkF1ZGl0
UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyA9IGZ1bmN0aW9uKGZ1bmMsIGNhbGxiYWNrKQor
V2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyA9IGZ1bmN0aW9u
KGZ1bmMsIGFyZ3MsIGNhbGxiYWNrKQogewotICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldERl
ZmF1bHQoKS5ldmFsdWF0ZU9uU2VsZihmdW5jLnRvU3RyaW5nKCksIGNhbGxiYWNrKTsKKyAgICBJ
bmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZhdWx0KCkuZXZhbHVhdGVPblNlbGYoZnVuYy50b1N0
cmluZygpLCBhcmdzLCBjYWxsYmFjayk7CiB9CiAKIApAQCAtMjc4LDI3ICsyNzgsOTEgQEAgV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZXMuVW51c2VkQ3NzUnVsZS5wcm90b3R5cGUgPSB7CiAgICAgZG9S
dW46IGZ1bmN0aW9uKHJlc291cmNlcywgcmVzdWx0LCBjYWxsYmFjaykKICAgICB7CiAgICAgICAg
IHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgZnVuY3Rpb24gZXZhbENhbGxiYWNrKHJvdXRpbmVS
ZXN1bHQsIGlzRXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICBpZiAoaXNFeGNlcHRpb24gfHwgIXJv
dXRpbmVSZXN1bHQgfHwgIXJvdXRpbmVSZXN1bHQuc3R5bGVTaGVldHMubGVuZ3RoKQorICAgICAg
ICBmdW5jdGlvbiBldmFsQ2FsbGJhY2soc3R5bGVTaGVldHMpIHsKKyAgICAgICAgICAgIGlmICgh
c3R5bGVTaGVldHMubGVuZ3RoKQogICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxs
KTsKIAotICAgICAgICAgICAgdmFyIHRvdGFsVW51c2VkUGVyY2VudCA9IE1hdGgucm91bmQoMTAw
ICogcm91dGluZVJlc3VsdC51bnVzZWRTaXplIC8gcm91dGluZVJlc3VsdC50b3RhbFNpemUpOwot
ICAgICAgICAgICAgdmFyIHN1bW1hcnkgPSByZXN1bHQuYWRkQ2hpbGQoU3RyaW5nLnNwcmludGYo
IiVkJSUgb2YgQ1NTIChlc3RpbWF0ZWQpIGlzIG5vdCB1c2VkIGJ5IHRoZSBjdXJyZW50IHBhZ2Uu
IiwgdG90YWxVbnVzZWRQZXJjZW50KSwgdHJ1ZSk7CisgICAgICAgICAgICB2YXIgcHNldWRvU2Vs
ZWN0b3JSZWdleHAgPSAvOmhvdmVyfDpsaW5rfDphY3RpdmV8OnZpc2l0ZWR8OmZvY3VzfDpiZWZv
cmV8OmFmdGVyLzsKKyAgICAgICAgICAgIHZhciBzZWxlY3RvcnMgPSBbXTsKKyAgICAgICAgICAg
IHZhciB0ZXN0ZWRTZWxlY3RvcnMgPSB7fTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgc3R5bGVTaGVldHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3R5bGVT
aGVldCA9IHN0eWxlU2hlZXRzW2ldOworICAgICAgICAgICAgICAgIGZvciAodmFyIGN1clJ1bGUg
PSAwOyBjdXJSdWxlIDwgc3R5bGVTaGVldC5jc3NSdWxlcy5sZW5ndGg7ICsrY3VyUnVsZSkgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgcnVsZSA9IHN0eWxlU2hlZXQuY3NzUnVsZXNbY3VyUnVs
ZV07CisgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLnNlbGVjdG9yVGV4dC5tYXRjaChwc2V1
ZG9TZWxlY3RvclJlZ2V4cCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzLnB1c2gocnVsZS5zZWxlY3RvclRleHQpOworICAg
ICAgICAgICAgICAgICAgICB0ZXN0ZWRTZWxlY3RvcnNbcnVsZS5zZWxlY3RvclRleHRdID0gMTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9u
IHNlbGVjdG9yc0NhbGxiYWNrKGNhbGxiYWNrLCBzdHlsZVNoZWV0cywgdGVzdGVkU2VsZWN0b3Jz
LCBmb3VuZFNlbGVjdG9ycykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgc3R5
bGVTaGVldEVudHJpZXMgPSBbXTsKKyAgICAgICAgICAgICAgICB2YXIgaW5saW5lQmxvY2tPcmRp
bmFsID0gMDsKKyAgICAgICAgICAgICAgICB2YXIgdG90YWxTdHlsZXNoZWV0U2l6ZSA9IDA7Cisg
ICAgICAgICAgICAgICAgdmFyIHRvdGFsVW51c2VkU3R5bGVzaGVldFNpemUgPSAwOworICAgICAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVTaGVldHMubGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0c1tpXTsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHN0eWxlc2hlZXRTaXplID0gMDsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHVudXNlZFN0eWxlc2hlZXRTaXplID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIHVudXNlZFJ1bGVzID0gW107CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGN1clJ1
bGUgPSAwOyBjdXJSdWxlIDwgc3R5bGVTaGVldC5jc3NSdWxlcy5sZW5ndGg7ICsrY3VyUnVsZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBzdHlsZVNoZWV0LmNzc1J1bGVz
W2N1clJ1bGVdOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRMZW5ndGggPSBydWxl
LmNzc1RleHQgPyBydWxlLmNzc1RleHQubGVuZ3RoIDogMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0eWxlc2hlZXRTaXplICs9IHRleHRMZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXRlc3RlZFNlbGVjdG9yc1tydWxlLnNlbGVjdG9yVGV4dF0gfHwgZm91bmRTZWxlY3Rv
cnNbcnVsZS5zZWxlY3RvclRleHRdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICAgICAgdW51c2VkU3R5bGVzaGVldFNpemUgKz0gdGV4
dExlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVudXNlZFJ1bGVzLnB1c2gocnVsZS5z
ZWxlY3RvclRleHQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHRvdGFsU3R5bGVzaGVldFNpemUgKz0gc3R5bGVzaGVldFNpemU7CisgICAgICAgICAgICAgICAg
ICAgIHRvdGFsVW51c2VkU3R5bGVzaGVldFNpemUgKz0gdW51c2VkU3R5bGVzaGVldFNpemU7CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHVudXNlZFJ1bGVzLmxlbmd0aCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0geyB0eXBlOiBzdHlsZVNoZWV0LmhyZWYgPyAiaHJl
ZiIgOiAiaW5saW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbFNpemU6IHN0
eWxlc2hlZXRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVudXNlZFNpemU6IHVu
dXNlZFN0eWxlc2hlZXRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9u
OiBzdHlsZVNoZWV0LmhyZWYgPyBzdHlsZVNoZWV0LmhyZWYgOiArK2lubGluZUJsb2NrT3JkaW5h
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnVzZWRSdWxlczogdW51c2VkUnVsZXMg
fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2hlZXRFbnRyaWVzLnB1c2goZW50cnkp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgaWYgKCF0b3RhbFVudXNlZFN0eWxlc2hlZXRTaXplKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY2FsbGJhY2sobnVsbCk7CiAKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcm91dGluZVJlc3VsdC5zdHlsZVNoZWV0cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
ICAgIHZhciBzdHlsZXNoZWV0ID0gcm91dGluZVJlc3VsdC5zdHlsZVNoZWV0c1tpXTsKKyAgICAg
ICAgICAgICAgICB2YXIgdG90YWxVbnVzZWRQZXJjZW50ID0gTWF0aC5yb3VuZCgxMDAgKiB0b3Rh
bFVudXNlZFN0eWxlc2hlZXRTaXplIC8gdG90YWxTdHlsZXNoZWV0U2l6ZSk7CisgICAgICAgICAg
ICAgICAgdmFyIHN1bW1hcnkgPSByZXN1bHQuYWRkQ2hpbGQoU3RyaW5nLnNwcmludGYoIiVkJSUg
b2YgQ1NTIChlc3RpbWF0ZWQpIGlzIG5vdCB1c2VkIGJ5IHRoZSBjdXJyZW50IHBhZ2UuIiwgdG90
YWxVbnVzZWRQZXJjZW50KSwgdHJ1ZSk7CiAKLSAgICAgICAgICAgICAgICB2YXIgdXJsID0gc3R5
bGVzaGVldC50eXBlID09PSAiaHJlZiIgPyBXZWJJbnNwZWN0b3IubGlua2lmeVVSTChzdHlsZXNo
ZWV0LmxvY2F0aW9uKSA6IFN0cmluZy5zcHJpbnRmKCJJbmxpbmUgYmxvY2sgIyVzIiwgc3R5bGVz
aGVldC5sb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgdmFyIHBjdFVudXNlZCA9IE1hdGgucm91
bmQoMTAwICogc3R5bGVzaGVldC51bnVzZWRTaXplIC8gc3R5bGVzaGVldC50b3RhbFNpemUpOwot
ICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHN1bW1hcnkuYWRkQ2hpbGQoU3RyaW5nLnNwcmlu
dGYoIiVzOiAlZCUlIChlc3RpbWF0ZWQpIGlzIG5vdCB1c2VkIGJ5IHRoZSBjdXJyZW50IHBhZ2Uu
IiwgdXJsLCBwY3RVbnVzZWQpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHN0eWxlU2hlZXRFbnRyaWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBzdHlsZXNoZWV0ID0gc3R5bGVTaGVldEVudHJpZXNbaV07CiAKLSAgICAgICAgICAgICAgICBm
b3IgKHZhciBqID0gMDsgaiA8IHN0eWxlc2hlZXQudW51c2VkUnVsZXMubGVuZ3RoOyArK2opCi0g
ICAgICAgICAgICAgICAgICAgIGVudHJ5LmFkZFNuaXBwZXQoc3R5bGVzaGVldC51bnVzZWRSdWxl
c1tqXSk7CisgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBzdHlsZXNoZWV0LnR5cGUgPT09
ICJocmVmIiA/IFdlYkluc3BlY3Rvci5saW5raWZ5VVJMKHN0eWxlc2hlZXQubG9jYXRpb24pIDog
U3RyaW5nLnNwcmludGYoIklubGluZSBibG9jayAjJXMiLCBzdHlsZXNoZWV0LmxvY2F0aW9uKTsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHBjdFVudXNlZCA9IE1hdGgucm91bmQoMTAwICogc3R5
bGVzaGVldC51bnVzZWRTaXplIC8gc3R5bGVzaGVldC50b3RhbFNpemUpOworICAgICAgICAgICAg
ICAgICAgICB2YXIgZW50cnkgPSBzdW1tYXJ5LmFkZENoaWxkKFN0cmluZy5zcHJpbnRmKCIlczog
JWQlJSAoZXN0aW1hdGVkKSBpcyBub3QgdXNlZCBieSB0aGUgY3VycmVudCBwYWdlLiIsIHVybCwg
cGN0VW51c2VkKSk7CiAKLSAgICAgICAgICAgICAgICByZXN1bHQudmlvbGF0aW9uQ291bnQgKz0g
c3R5bGVzaGVldC51bnVzZWRSdWxlcy5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgc3R5bGVzaGVldC51bnVzZWRSdWxlcy5sZW5ndGg7ICsraikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVudHJ5LmFkZFNuaXBwZXQoc3R5bGVzaGVldC51bnVzZWRSdWxl
c1tqXSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnZpb2xhdGlvbkNvdW50ICs9IHN0
eWxlc2hlZXQudW51c2VkUnVsZXMubGVuZ3RoOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGNhbGxiYWNrKHJlc3VsdCk7CisgICAgICAgICAgICBmdW5jdGlvbiByb3V0aW5lKHNlbGVjdG9y
QXJyYXkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHt9Owor
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0b3JBcnJheS5sZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZXMgPSBkb2N1bWVudC5xdWVyeVNl
bGVjdG9yQWxsKHNlbGVjdG9yQXJyYXlbaV0pOworICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZXMgJiYgbm9kZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3NlbGVj
dG9yQXJyYXlbaV1dID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyhyb3V0aW5lLCBbc2VsZWN0b3JzXSwg
c2VsZWN0b3JzQ2FsbGJhY2suYmluZChudWxsLCBjYWxsYmFjaywgc3R5bGVTaGVldHMsIHRlc3Rl
ZFNlbGVjdG9ycykpOwogICAgICAgICB9CiAKICAgICAgICAgZnVuY3Rpb24gcm91dGluZSgpCkBA
IC0zMDYsNDggKzM3MCwxMSBAQCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5VbnVzZWRDc3NSdWxl
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHZhciBzdHlsZVNoZWV0cyA9IGRvY3VtZW50LnN0
eWxlU2hlZXRzOwogICAgICAgICAgICAgaWYgKCFzdHlsZVNoZWV0cykKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgcm91dGluZVJlc3VsdCA9IHsgc3R5bGVT
aGVldHM6IFtdIH07Ci0gICAgICAgICAgICB2YXIgaW5saW5lQmxvY2tPcmRpbmFsID0gMDsKLSAg
ICAgICAgICAgIHZhciB0b3RhbFN0eWxlc2hlZXRTaXplID0gMDsKLSAgICAgICAgICAgIHZhciB0
b3RhbFVudXNlZFN0eWxlc2hlZXRTaXplID0gMDsKLSAgICAgICAgICAgIHZhciBwc2V1ZG9TZWxl
Y3RvclJlZ2V4cCA9IC86aG92ZXJ8Omxpbmt8OmFjdGl2ZXw6dmlzaXRlZHw6Zm9jdXMvOwotICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZVNoZWV0cy5sZW5ndGg7ICsraSkgewot
ICAgICAgICAgICAgICAgIHZhciBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldHNbaV07Ci0gICAgICAg
ICAgICAgICAgaWYgKCFzdHlsZVNoZWV0LmNzc1J1bGVzKQotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICB2YXIgc3R5bGVzaGVldFNpemUgPSAwOwotICAgICAg
ICAgICAgICAgIHZhciB1bnVzZWRTdHlsZXNoZWV0U2l6ZSA9IDA7Ci0gICAgICAgICAgICAgICAg
dmFyIHVudXNlZFJ1bGVzID0gW107Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgY3VyUnVsZSA9
IDA7IGN1clJ1bGUgPCBzdHlsZVNoZWV0LmNzc1J1bGVzLmxlbmd0aDsgKytjdXJSdWxlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciBydWxlID0gc3R5bGVTaGVldC5jc3NSdWxlc1tjdXJSdWxl
XTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRMZW5ndGggPSBydWxlLmNzc1RleHQgPyBy
dWxlLmNzc1RleHQubGVuZ3RoIDogMDsKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVzaGVldFNp
emUgKz0gdGV4dExlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSAhPT0g
MSB8fCBydWxlLnNlbGVjdG9yVGV4dC5tYXRjaChwc2V1ZG9TZWxlY3RvclJlZ2V4cCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG5v
ZGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChydWxlLnNlbGVjdG9yVGV4dCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlcyAmJiBub2Rlcy5sZW5ndGgpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgdW51c2VkU3R5bGVzaGVl
dFNpemUgKz0gdGV4dExlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgdW51c2VkUnVsZXMucHVz
aChydWxlLnNlbGVjdG9yVGV4dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHRvdGFsU3R5bGVzaGVldFNpemUgKz0gc3R5bGVzaGVldFNpemU7Ci0gICAgICAgICAgICAgICAg
dG90YWxVbnVzZWRTdHlsZXNoZWV0U2l6ZSArPSB1bnVzZWRTdHlsZXNoZWV0U2l6ZTsKLQotICAg
ICAgICAgICAgICAgIGlmICh1bnVzZWRSdWxlcy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIGVudHJ5ID0geyB0eXBlOiBzdHlsZVNoZWV0LmhyZWYgPyAiaHJlZiIgOiAiaW5saW5l
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbFNpemU6IHN0eWxlc2hl
ZXRTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVudXNlZFNpemU6IHVu
dXNlZFN0eWxlc2hlZXRTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2F0aW9uOiBzdHlsZVNoZWV0LmhyZWYgPyBzdHlsZVNoZWV0LmhyZWYgOiArK2lubGluZUJsb2Nr
T3JkaW5hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnVzZWRSdWxlczog
dW51c2VkUnVsZXMgfTsKLSAgICAgICAgICAgICAgICAgICAgcm91dGluZVJlc3VsdC5zdHlsZVNo
ZWV0cy5wdXNoKGVudHJ5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByb3V0aW5lUmVzdWx0LnRvdGFsU2l6ZSA9IHRvdGFsU3R5bGVzaGVldFNpemU7Ci0g
ICAgICAgICAgICByb3V0aW5lUmVzdWx0LnVudXNlZFNpemUgPSB0b3RhbFVudXNlZFN0eWxlc2hl
ZXRTaXplOworCiAgICAgICAgICAgICByZXR1cm4gcm91dGluZVJlc3VsdDsKICAgICAgICAgfQog
Ci0gICAgICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmV2YWx1YXRlSW5UYXJnZXRXaW5kb3co
cm91dGluZSwgZXZhbENhbGxiYWNrKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRBbGxT
dHlsZXMoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoZXZhbENhbGxiYWNrKSk7CiAgICAgfQog
fQogCkBAIC02NjksNyArNjk2LDcgQEAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1l
bnNpb25zUnVsZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm4gZm91bmQgPyB7dG90
YWxJbWFnZXM6IGltYWdlcy5sZW5ndGgsIG1hcDogdXJsVG9Ob0RpbWVuc2lvbkNvdW50fSA6IG51
bGw7CiAgICAgICAgIH0KIAotICAgICAgICBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5ldmFsdWF0
ZUluVGFyZ2V0V2luZG93KHJvdXRpbmUsIGV2YWxDYWxsYmFjay5iaW5kKHRoaXMpKTsKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyhyb3V0aW5l
LCBudWxsLCBldmFsQ2FsbGJhY2suYmluZCh0aGlzKSk7CiAgICAgfQogfQogCkBAIC03NDMsNyAr
NzcwLDcgQEAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ3NzSW5IZWFkUnVsZS5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICByZXR1cm4gZm91bmQgPyB1cmxUb1Zpb2xhdGlvbnNBcnJheSA6IG51
bGw7CiAgICAgICAgIH0KIAotICAgICAgICBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5ldmFsdWF0
ZUluVGFyZ2V0V2luZG93KHJvdXRpbmUsIGV2YWxDYWxsYmFjayk7CisgICAgICAgIFdlYkluc3Bl
Y3Rvci5BdWRpdFJ1bGVzLmV2YWx1YXRlSW5UYXJnZXRXaW5kb3cocm91dGluZSwgbnVsbCwgZXZh
bENhbGxiYWNrKTsKICAgICB9CiB9CiAKQEAgLTc5MCw3ICs4MTcsNyBAQCBXZWJJbnNwZWN0b3Iu
QXVkaXRSdWxlcy5TdHlsZXNTY3JpcHRzT3JkZXJSdWxlLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIHJldHVybiBbIGxhdGVTdHlsZVVybHMsIGNzc0JlZm9yZUlubGluZUNvdW50IF07CiAgICAg
ICAgIH0KIAotICAgICAgICBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5ldmFsdWF0ZUluVGFyZ2V0
V2luZG93KHJvdXRpbmUsIGV2YWxDYWxsYmFjay5iaW5kKHRoaXMpKTsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyhyb3V0aW5lLCBudWxsLCBl
dmFsQ2FsbGJhY2suYmluZCh0aGlzKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRE9NQWdlbnQuanMKaW5kZXggNjJmZWQ3Ny4uODNmZWRlMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwpAQCAtNzE4LDYgKzcxOCw3IEBAIFdlYkluc3BlY3Rv
ci5kaWRSZW1vdmVOb2RlID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsK
IFdlYkluc3BlY3Rvci5kaWRHZXRFdmVudExpc3RlbmVyc0Zvck5vZGUgPSBXZWJJbnNwZWN0b3Iu
Q2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwogCiBXZWJJbnNwZWN0b3IuZGlkR2V0U3R5bGVzID0g
V2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKK1dlYkluc3BlY3Rvci5kaWRH
ZXRBbGxTdHlsZXMgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwogV2Vi
SW5zcGVjdG9yLmRpZEdldElubGluZVN0eWxlID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nl
c3NDYWxsYmFjazsKIFdlYkluc3BlY3Rvci5kaWRHZXRDb21wdXRlZFN0eWxlID0gV2ViSW5zcGVj
dG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKIFdlYkluc3BlY3Rvci5kaWRBcHBseVN0eWxl
VGV4dCA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKaW5kZXggOGM3ZDQ4ZS4uMmEy
YTI1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2Ny
aXB0LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5q
cwpAQCAtNzg2LDkgKzc4NiwxMCBAQCBJbmplY3RlZFNjcmlwdC5jcmVhdGVQcm94eU9iamVjdCA9
IGZ1bmN0aW9uKG9iamVjdCwgb2JqZWN0SWQsIGFiYnJldmlhdGUpCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotSW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGVPblNlbGYgPSBmdW5jdGlvbihmdW5jQm9k
eSkKK0luamVjdGVkU2NyaXB0LmV2YWx1YXRlT25TZWxmID0gZnVuY3Rpb24oZnVuY0JvZHksIGFy
Z3MpCiB7Ci0gICAgcmV0dXJuIHdpbmRvdy5ldmFsKCIoIiArIGZ1bmNCb2R5ICsgIikoKTsiKTsK
KyAgICB2YXIgZnVuYyA9IHdpbmRvdy5ldmFsKCIoIiArIGZ1bmNCb2R5ICsgIikiKTsKKyAgICBy
ZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzIHx8IFtdKTsKIH0KIAogSW5qZWN0ZWRTY3JpcHQu
Q2FsbEZyYW1lUHJveHkgPSBmdW5jdGlvbihpZCwgY2FsbEZyYW1lKQo=
</data>
<flag name="review"
          id="34061"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50897</attachid>
            <date>2010-03-17 06:02:05 -0700</date>
            <delta_ts>2010-03-17 06:09:01 -0700</delta_ts>
            <desc>[PATCH] Remove intermediate storage and second loop</desc>
            <filename>nativestyles.patch</filename>
            <type>text/plain</type>
            <size>20850</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTcyZWM3MS4uMTJjNjkwMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxMC0wMy0xNyAgQWxleGFuZGVyIFBh
dmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlaW1wbGVtZW50IHN0eWxlLXJl
bGF0ZWQgYXVkaXRzIHVzaW5nIG5hdGl2ZSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM2MTcyCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpnZXRB
bGxTdHlsZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmg6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6Z2V0QWxsU3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpnZXRNYXRjaGVkQ1NTUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldEFsbFN0eWxl
cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmg6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdFJ1bGVzLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5VbnVzZWRDc3NSdWxlLnByb3RvdHlwZS5kb1J1bi5ldmFsQ2FsbGJhY2su
c2VsZWN0b3JzQ2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuVW51
c2VkQ3NzUnVsZS5wcm90b3R5cGUuZG9SdW4uZXZhbENhbGxiYWNrLnJvdXRpbmUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuVW51c2VkQ3NzUnVsZS5wcm90b3R5cGUuZG9SdW4u
ZXZhbENhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlVudXNlZENz
c1J1bGUucHJvdG90eXBlLmRvUnVuLnJvdXRpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZXMuVW51c2VkQ3NzUnVsZS5wcm90b3R5cGUuZG9SdW4pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZS5wcm90b3R5cGUuZG9SdW4pOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ3NzSW5IZWFkUnVsZS5wcm90b3R5cGUu
ZG9SdW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuU3R5bGVzU2NyaXB0c09y
ZGVyUnVsZS5wcm90b3R5cGUuZG9SdW4pOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
RE9NQWdlbnQuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlw
dC5qczoKKyAgICAgICAgKGluamVjdGVkU2NyaXB0Q29uc3RydWN0b3IpOgorCiAyMDEwLTAzLTE2
ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5j
cHAKaW5kZXggNWEzZmQ2OS4uMDYzMGVlMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5jcHAKQEAgLTM2Miw2ICszNjIsMTIgQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRT
dHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHkpCiAgICAgICAg
IGRvbUFnZW50LT5nZXRTdHlsZXMoY2FsbElkLCBub2RlSWQsIGF1dGhvck9ubHkpOwogfQogCit2
b2lkIEluc3BlY3RvckJhY2tlbmQ6OmdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCkKK3sKKyAgICBp
ZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAg
ICAgICAgZG9tQWdlbnQtPmdldEFsbFN0eWxlcyhjYWxsSWQpOworfQorCiB2b2lkIEluc3BlY3Rv
ckJhY2tlbmQ6OmdldElubGluZVN0eWxlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkKIHsKICAg
ICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yRE9NQWdlbnQoKSkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaAppbmRleCA5M2RjMjdjLi4zY2MyNTQ1IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCkBAIC0xMTQsNiArMTE0LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgcmVtb3ZlTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwogCiAg
ICAgdm9pZCBnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhPbmx5
KTsKKyAgICB2b2lkIGdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCk7CiAgICAgdm9pZCBnZXRJbmxp
bmVTdHlsZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwogICAgIHZvaWQgZ2V0Q29tcHV0ZWRT
dHlsZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwogICAgIHZvaWQgYXBwbHlTdHlsZVRleHQo
bG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBzdHlsZVRleHQsIGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmQuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5p
ZGwKaW5kZXggYjBiZTZkMi4uMmIzY2I2ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5pZGwKQEAgLTkxLDYgKzkxLDcgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICB2b2lkIGhp
ZGVET01Ob2RlSGlnaGxpZ2h0KCk7CiAKICAgICAgICAgdm9pZCBnZXRTdHlsZXMoaW4gbG9uZyBj
YWxsSWQsIGluIGxvbmcgbm9kZUlkLCBpbiBib29sZWFuIGF1dGhPbmx5KTsKKyAgICAgICAgdm9p
ZCBnZXRBbGxTdHlsZXMoaW4gbG9uZyBjYWxsSWQpOwogICAgICAgICB2b2lkIGdldElubGluZVN0
eWxlKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQgZ2V0Q29t
cHV0ZWRTdHlsZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQpOwogICAgICAgICB2b2lk
IGFwcGx5U3R5bGVUZXh0KGluIGxvbmcgY2FsbElkLCBpbiBsb25nIHN0eWxlSWQsIGluIERPTVN0
cmluZyBzdHlsZVRleHQsIGluIERPTVN0cmluZyBwcm9wZXJ0eU5hbWUpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGZjMWEwNjMuLmM4NzRlM2MgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTcwMyw2ICs3MDMsMjEgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwg
Ym9vbCBhdXRob3JPbmx5KQogICAgIG1fZnJvbnRlbmQtPmRpZEdldFN0eWxlcyhjYWxsSWQsIHJl
c3VsdCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFsbFN0eWxlcyhsb25nIGNh
bGxJZCkKK3sKKyAgICBTY3JpcHRBcnJheSByZXN1bHQgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRB
cnJheSgpOworICAgIHVuc2lnbmVkIGNvdW50ZXIgPSAwOworICAgIGZvciAoTGlzdEhhc2hTZXQ8
UmVmUHRyPERvY3VtZW50PiA+OjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRzLmJlZ2luKCk7IGl0
ICE9IG1fZG9jdW1lbnRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIFN0eWxlU2hlZXRMaXN0KiBs
aXN0ID0gKCppdCktPnN0eWxlU2hlZXRzKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsaXN0LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBTdHlsZVNoZWV0KiBzdHls
ZVNoZWV0ID0gbGlzdC0+aXRlbShpKTsKKyAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0LT5pc0NT
U1N0eWxlU2hlZXQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuc2V0KGNvdW50ZXIrKywgYnVp
bGRPYmplY3RGb3JTdHlsZVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZVNo
ZWV0KSkpOworICAgICAgICB9CisgICAgfQorICAgIG1fZnJvbnRlbmQtPmRpZEdldEFsbFN0eWxl
cyhjYWxsSWQsIHJlc3VsdCk7Cit9CisKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldElubGlu
ZVN0eWxlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0gbm9k
ZUZvcklkKG5vZGVJZCk7CkBAIC03MzMsMTAgKzc0OCwxMSBAQCBTY3JpcHRBcnJheSBJbnNwZWN0
b3JET01BZ2VudDo6Z2V0TWF0Y2hlZENTU1J1bGVzKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgYXV0
aG9yTwogICAgIERPTVdpbmRvdyogZGVmYXVsdFZpZXcgPSBlbGVtZW50LT5vd25lckRvY3VtZW50
KCktPmRlZmF1bHRWaWV3KCk7CiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtYXRjaGVkUnVsZXMg
PSBkZWZhdWx0Vmlldy0+Z2V0TWF0Y2hlZENTU1J1bGVzKGVsZW1lbnQsICIiLCBhdXRob3JPbmx5
KTsKICAgICBTY3JpcHRBcnJheSBtYXRjaGVkQ1NTUnVsZXMgPSBtX2Zyb250ZW5kLT5uZXdTY3Jp
cHRBcnJheSgpOworICAgIHVuc2lnbmVkIGNvdW50ZXIgPSAwOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IG1hdGNoZWRSdWxlcy5nZXQoKSAmJiBpIDwgbWF0Y2hlZFJ1bGVzLT5sZW5ndGgoKTsg
KytpKSB7CiAgICAgICAgIENTU1J1bGUqIHJ1bGUgPSBtYXRjaGVkUnVsZXMtPml0ZW0oaSk7CiAg
ICAgICAgIGlmIChydWxlLT50eXBlKCkgPT0gQ1NTUnVsZTo6U1RZTEVfUlVMRSkKLSAgICAgICAg
ICAgIG1hdGNoZWRDU1NSdWxlcy5zZXQoaSwgYnVpbGRPYmplY3RGb3JSdWxlKHN0YXRpY19jYXN0
PENTU1N0eWxlUnVsZSo+KHJ1bGUpKSk7CisgICAgICAgICAgICBtYXRjaGVkQ1NTUnVsZXMuc2V0
KGNvdW50ZXIrKywgYnVpbGRPYmplY3RGb3JSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+
KHJ1bGUpKSk7CiAgICAgfQogICAgIHJldHVybiBtYXRjaGVkQ1NTUnVsZXM7CiB9CkBAIC0xMDQy
LDEyICsxMDU4LDM0IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBvcHVsYXRlT2JqZWN0V2l0
aFN0eWxlUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiBzCiAgICAgcmVzdWx0LnNldCgi
dW5pcXVlU3R5bGVQcm9wZXJ0aWVzIiwgdG9BcnJheSh1bmlxdWVTdHlsZVByb3BlcnRpZXMoc3R5
bGUpKSk7CiB9CiAKK1NjcmlwdE9iamVjdCBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RG
b3JTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit7CisgICAgU2NyaXB0T2Jq
ZWN0IHJlc3VsdCA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOworICAgIHJlc3VsdC5z
ZXQoImRpc2FibGVkIiwgc3R5bGVTaGVldC0+ZGlzYWJsZWQoKSk7CisgICAgcmVzdWx0LnNldCgi
aHJlZiIsIHN0eWxlU2hlZXQtPmhyZWYoKSk7CisgICAgcmVzdWx0LnNldCgidGl0bGUiLCBzdHls
ZVNoZWV0LT50aXRsZSgpKTsKKyAgICByZXN1bHQuc2V0KCJkb2N1bWVudEVsZW1lbnRJZCIsIG1f
ZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoc3R5bGVTaGVldC0+ZG9jKCkpKTsKKyAgICBTY3JpcHRB
cnJheSBjc3NSdWxlcyA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFycmF5KCk7CisgICAgcmVzdWx0
LnNldCgiY3NzUnVsZXMiLCBjc3NSdWxlcyk7CisgICAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4g
Y3NzUnVsZUxpc3QgPSBDU1NSdWxlTGlzdDo6Y3JlYXRlKHN0eWxlU2hlZXQsIHRydWUpOworICAg
IGlmICghY3NzUnVsZUxpc3QpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgdW5zaWduZWQg
Y291bnRlciA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNzc1J1bGVMaXN0LT5s
ZW5ndGgoKTsgKytpKSB7CisgICAgICAgIENTU1J1bGUqIHJ1bGUgPSBjc3NSdWxlTGlzdC0+aXRl
bShpKTsKKyAgICAgICAgaWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgICAgICBjc3NS
dWxlcy5zZXQoY291bnRlcisrLCBidWlsZE9iamVjdEZvclJ1bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVSdWxlKj4ocnVsZSkpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogU2NyaXB0
T2JqZWN0IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxl
KiBydWxlKQogewogICAgIENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQgPSBydWxlLT5w
YXJlbnRTdHlsZVNoZWV0KCk7CiAKICAgICBTY3JpcHRPYmplY3QgcmVzdWx0ID0gbV9mcm9udGVu
ZC0+bmV3U2NyaXB0T2JqZWN0KCk7CiAgICAgcmVzdWx0LnNldCgic2VsZWN0b3JUZXh0IiwgcnVs
ZS0+c2VsZWN0b3JUZXh0KCkpOworICAgIHJlc3VsdC5zZXQoImNzc1RleHQiLCBydWxlLT5jc3NU
ZXh0KCkpOwogICAgIGlmIChwYXJlbnRTdHlsZVNoZWV0KSB7CiAgICAgICAgIFNjcmlwdE9iamVj
dCBwYXJlbnRTdHlsZVNoZWV0VmFsdWUgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsK
ICAgICAgICAgcmVzdWx0LnNldCgicGFyZW50U3R5bGVTaGVldCIsIHBhcmVudFN0eWxlU2hlZXRW
YWx1ZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5o
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCAwY2RiY2MzLi5h
ZTlmNWUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5o
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTEwMCw2ICsx
MDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gTWV0aG9kcyBjYWxsZWQg
ZnJvbSB0aGUgZnJvbnRlbmQgZm9yIENTUyBzdHlsZXMgaW5zcGVjdGlvbi4KICAgICAgICAgdm9p
ZCBnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHkpOwor
ICAgICAgICB2b2lkIGdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCk7CiAgICAgICAgIHZvaWQgZ2V0
SW5saW5lU3R5bGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCBnZXRD
b21wdXRlZFN0eWxlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQgYXBw
bHlTdHlsZVRleHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBzdHls
ZVRleHQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKQEAgLTE1OSw2ICsxNjAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNjcmlwdE9iamVjdCBidWlsZE9iamVjdEZvclN0
eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBib29sIGJpbmQpOwogICAgICAgICB2b2lkIHBvcHVs
YXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiwgU2NyaXB0
T2JqZWN0JiByZXN1bHQpOwogICAgICAgICBTY3JpcHRPYmplY3QgYnVpbGRPYmplY3RGb3JSdWxl
KENTU1N0eWxlUnVsZSopOworICAgICAgICBTY3JpcHRPYmplY3QgYnVpbGRPYmplY3RGb3JTdHls
ZVNoZWV0KENTU1N0eWxlU2hlZXQqKTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gdW5pcXVlU3R5
bGVQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKICAgICAgICAgVmVjdG9yPFN0cmlu
Zz4gbG9uZ2hhbmRQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcm
IHNob3J0aGFuZFByb3BlcnR5KTsKICAgICAgICAgU3RyaW5nIHNob3J0aGFuZFByaW9yaXR5KENT
U1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAppbmRleCA1NGE0NDE0Li41MWExZWI5
IDEwMDc1NQotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCkBAIC00ODQsNiArNDg0
LDE1IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldFN0eWxlcyhsb25nIGNhbGxJZCwg
Y29uc3QgU2NyaXB0VmFsdWUmIHN0eWxlcykKICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKK3Zv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCwgY29uc3Qg
U2NyaXB0QXJyYXkmIHN0eWxlcykKK3sKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24o
bV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KCJkaWRHZXRBbGxTdHlsZXMiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQp
OworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN0eWxlcyk7CisgICAgZnVuY3Rpb24uY2Fs
bCgpOworfQorCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRDb21wdXRlZFN0eWxlKGxv
bmcgY2FsbElkLCBjb25zdCBTY3JpcHRWYWx1ZSYgc3R5bGUpCiB7CiAgICAgU2NyaXB0RnVuY3Rp
b25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAppbmRleCA2MWMxYThjLi5kYWRhY2JkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKQEAgLTEyOSw2ICsxMjksNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGlkUmVtb3ZlTm9kZShpbnQgY2FsbElkLCBpbnQgbm9k
ZUlkKTsKIAogICAgICAgICB2b2lkIGRpZEdldFN0eWxlcyhsb25nIGNhbGxJZCwgY29uc3QgU2Ny
aXB0VmFsdWUmIHN0eWxlcyk7CisgICAgICAgIHZvaWQgZGlkR2V0QWxsU3R5bGVzKGxvbmcgY2Fs
bElkLCBjb25zdCBTY3JpcHRBcnJheSYgc3R5bGVzKTsKICAgICAgICAgdm9pZCBkaWRHZXRJbmxp
bmVTdHlsZShsb25nIGNhbGxJZCwgY29uc3QgU2NyaXB0VmFsdWUmIHN0eWxlKTsKICAgICAgICAg
dm9pZCBkaWRHZXRDb21wdXRlZFN0eWxlKGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRWYWx1ZSYg
c3R5bGUpOwogICAgICAgICB2b2lkIGRpZEFwcGx5U3R5bGVUZXh0KGludCBjYWxsSWQsIGJvb2wg
c3VjY2VzcywgY29uc3QgU2NyaXB0VmFsdWUmIHN0eWxlLCBjb25zdCBTY3JpcHRBcnJheSYgY2hh
bmdlZFByb3BlcnRpZXMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0F1ZGl0UnVsZXMuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRSdWxlcy5q
cwppbmRleCAyNzM2MjJmLi4xOTU1OTRmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQXVkaXRSdWxlcy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
QXVkaXRSdWxlcy5qcwpAQCAtNjMsOSArNjMsOSBAQCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5n
ZXREb21haW5Ub1Jlc291cmNlc01hcCA9IGZ1bmN0aW9uKHJlc291cmNlcywgdHlwZXMsIHJlZwog
ICAgIHJldHVybiBkb21haW5Ub1Jlc291cmNlc01hcDsKIH0KIAotV2ViSW5zcGVjdG9yLkF1ZGl0
UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyA9IGZ1bmN0aW9uKGZ1bmMsIGNhbGxiYWNrKQor
V2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyA9IGZ1bmN0aW9u
KGZ1bmMsIGFyZ3MsIGNhbGxiYWNrKQogewotICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldERl
ZmF1bHQoKS5ldmFsdWF0ZU9uU2VsZihmdW5jLnRvU3RyaW5nKCksIGNhbGxiYWNrKTsKKyAgICBJ
bmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZhdWx0KCkuZXZhbHVhdGVPblNlbGYoZnVuYy50b1N0
cmluZygpLCBhcmdzLCBjYWxsYmFjayk7CiB9CiAKIApAQCAtMjc4LDI3ICsyNzgsODMgQEAgV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZXMuVW51c2VkQ3NzUnVsZS5wcm90b3R5cGUgPSB7CiAgICAgZG9S
dW46IGZ1bmN0aW9uKHJlc291cmNlcywgcmVzdWx0LCBjYWxsYmFjaykKICAgICB7CiAgICAgICAg
IHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgZnVuY3Rpb24gZXZhbENhbGxiYWNrKHJvdXRpbmVS
ZXN1bHQsIGlzRXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICBpZiAoaXNFeGNlcHRpb24gfHwgIXJv
dXRpbmVSZXN1bHQgfHwgIXJvdXRpbmVSZXN1bHQuc3R5bGVTaGVldHMubGVuZ3RoKQorICAgICAg
ICBmdW5jdGlvbiBldmFsQ2FsbGJhY2soc3R5bGVTaGVldHMpIHsKKyAgICAgICAgICAgIGlmICgh
c3R5bGVTaGVldHMubGVuZ3RoKQogICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxs
KTsKIAotICAgICAgICAgICAgdmFyIHRvdGFsVW51c2VkUGVyY2VudCA9IE1hdGgucm91bmQoMTAw
ICogcm91dGluZVJlc3VsdC51bnVzZWRTaXplIC8gcm91dGluZVJlc3VsdC50b3RhbFNpemUpOwot
ICAgICAgICAgICAgdmFyIHN1bW1hcnkgPSByZXN1bHQuYWRkQ2hpbGQoU3RyaW5nLnNwcmludGYo
IiVkJSUgb2YgQ1NTIChlc3RpbWF0ZWQpIGlzIG5vdCB1c2VkIGJ5IHRoZSBjdXJyZW50IHBhZ2Uu
IiwgdG90YWxVbnVzZWRQZXJjZW50KSwgdHJ1ZSk7CisgICAgICAgICAgICB2YXIgcHNldWRvU2Vs
ZWN0b3JSZWdleHAgPSAvOmhvdmVyfDpsaW5rfDphY3RpdmV8OnZpc2l0ZWR8OmZvY3VzfDpiZWZv
cmV8OmFmdGVyLzsKKyAgICAgICAgICAgIHZhciBzZWxlY3RvcnMgPSBbXTsKKyAgICAgICAgICAg
IHZhciB0ZXN0ZWRTZWxlY3RvcnMgPSB7fTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgc3R5bGVTaGVldHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3R5bGVT
aGVldCA9IHN0eWxlU2hlZXRzW2ldOworICAgICAgICAgICAgICAgIGZvciAodmFyIGN1clJ1bGUg
PSAwOyBjdXJSdWxlIDwgc3R5bGVTaGVldC5jc3NSdWxlcy5sZW5ndGg7ICsrY3VyUnVsZSkgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgcnVsZSA9IHN0eWxlU2hlZXQuY3NzUnVsZXNbY3VyUnVs
ZV07CisgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLnNlbGVjdG9yVGV4dC5tYXRjaChwc2V1
ZG9TZWxlY3RvclJlZ2V4cCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzLnB1c2gocnVsZS5zZWxlY3RvclRleHQpOworICAg
ICAgICAgICAgICAgICAgICB0ZXN0ZWRTZWxlY3RvcnNbcnVsZS5zZWxlY3RvclRleHRdID0gMTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9u
IHNlbGVjdG9yc0NhbGxiYWNrKGNhbGxiYWNrLCBzdHlsZVNoZWV0cywgdGVzdGVkU2VsZWN0b3Jz
LCBmb3VuZFNlbGVjdG9ycykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgc3R5
bGVTaGVldEVudHJpZXMgPSBbXTsKKyAgICAgICAgICAgICAgICB2YXIgaW5saW5lQmxvY2tPcmRp
bmFsID0gMDsKKyAgICAgICAgICAgICAgICB2YXIgdG90YWxTdHlsZXNoZWV0U2l6ZSA9IDA7Cisg
ICAgICAgICAgICAgICAgdmFyIHRvdGFsVW51c2VkU3R5bGVzaGVldFNpemUgPSAwOworICAgICAg
ICAgICAgICAgIHZhciBzdW1tYXJ5ID0gcmVzdWx0LmFkZENoaWxkKCIiLCB0cnVlKTsKKworICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVTaGVldHMubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0c1tpXTsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHN0eWxlc2hlZXRTaXplID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIHVudXNlZFN0eWxlc2hlZXRTaXplID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIHVudXNlZFJ1bGVzID0gW107CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGN1
clJ1bGUgPSAwOyBjdXJSdWxlIDwgc3R5bGVTaGVldC5jc3NSdWxlcy5sZW5ndGg7ICsrY3VyUnVs
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBzdHlsZVNoZWV0LmNzc1J1
bGVzW2N1clJ1bGVdOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRMZW5ndGggPSBy
dWxlLmNzc1RleHQgPyBydWxlLmNzc1RleHQubGVuZ3RoIDogMDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0eWxlc2hlZXRTaXplICs9IHRleHRMZW5ndGg7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXRlc3RlZFNlbGVjdG9yc1tydWxlLnNlbGVjdG9yVGV4dF0gfHwgZm91bmRTZWxl
Y3RvcnNbcnVsZS5zZWxlY3RvclRleHRdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgdW51c2VkU3R5bGVzaGVldFNpemUgKz0g
dGV4dExlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVudXNlZFJ1bGVzLnB1c2gocnVs
ZS5zZWxlY3RvclRleHQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIHRvdGFsU3R5bGVzaGVldFNpemUgKz0gc3R5bGVzaGVldFNpemU7CisgICAgICAgICAgICAg
ICAgICAgIHRvdGFsVW51c2VkU3R5bGVzaGVldFNpemUgKz0gdW51c2VkU3R5bGVzaGVldFNpemU7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF1bnVzZWRSdWxlcy5sZW5ndGgpCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICB2YXIgdXJs
ID0gc3R5bGVTaGVldC5ocmVmID8gV2ViSW5zcGVjdG9yLmxpbmtpZnlVUkwoc3R5bGVTaGVldC5o
cmVmKSA6IFN0cmluZy5zcHJpbnRmKCJJbmxpbmUgYmxvY2sgIyVkIiwgKytpbmxpbmVCbG9ja09y
ZGluYWwpOworICAgICAgICAgICAgICAgICAgICB2YXIgcGN0VW51c2VkID0gTWF0aC5yb3VuZCgx
MDAgKiB1bnVzZWRTdHlsZXNoZWV0U2l6ZSAvIHN0eWxlc2hlZXRTaXplKTsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIGVudHJ5ID0gc3VtbWFyeS5hZGRDaGlsZChTdHJpbmcuc3ByaW50ZigiJXM6
ICVkJSUgKGVzdGltYXRlZCkgaXMgbm90IHVzZWQgYnkgdGhlIGN1cnJlbnQgcGFnZS4iLCB1cmws
IHBjdFVudXNlZCkpOwogCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvdXRpbmVS
ZXN1bHQuc3R5bGVTaGVldHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3R5
bGVzaGVldCA9IHJvdXRpbmVSZXN1bHQuc3R5bGVTaGVldHNbaV07CisgICAgICAgICAgICAgICAg
ICAgIGZvciAodmFyIGogPSAwOyBqIDwgdW51c2VkUnVsZXMubGVuZ3RoOyArK2opCisgICAgICAg
ICAgICAgICAgICAgICAgICBlbnRyeS5hZGRTbmlwcGV0KHVudXNlZFJ1bGVzW2pdKTsKIAotICAg
ICAgICAgICAgICAgIHZhciB1cmwgPSBzdHlsZXNoZWV0LnR5cGUgPT09ICJocmVmIiA/IFdlYklu
c3BlY3Rvci5saW5raWZ5VVJMKHN0eWxlc2hlZXQubG9jYXRpb24pIDogU3RyaW5nLnNwcmludGYo
IklubGluZSBibG9jayAjJXMiLCBzdHlsZXNoZWV0LmxvY2F0aW9uKTsKLSAgICAgICAgICAgICAg
ICB2YXIgcGN0VW51c2VkID0gTWF0aC5yb3VuZCgxMDAgKiBzdHlsZXNoZWV0LnVudXNlZFNpemUg
LyBzdHlsZXNoZWV0LnRvdGFsU2l6ZSk7Ci0gICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3Vt
bWFyeS5hZGRDaGlsZChTdHJpbmcuc3ByaW50ZigiJXM6ICVkJSUgKGVzdGltYXRlZCkgaXMgbm90
IHVzZWQgYnkgdGhlIGN1cnJlbnQgcGFnZS4iLCB1cmwsIHBjdFVudXNlZCkpOworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudmlvbGF0aW9uQ291bnQgKz0gdW51c2VkUnVsZXMubGVuZ3RoOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghdG90YWxVbnVzZWRTdHls
ZXNoZWV0U2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpOwog
Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdHlsZXNoZWV0LnVudXNlZFJ1
bGVzLmxlbmd0aDsgKytqKQotICAgICAgICAgICAgICAgICAgICBlbnRyeS5hZGRTbmlwcGV0KHN0
eWxlc2hlZXQudW51c2VkUnVsZXNbal0pOworICAgICAgICAgICAgICAgIHZhciB0b3RhbFVudXNl
ZFBlcmNlbnQgPSBNYXRoLnJvdW5kKDEwMCAqIHRvdGFsVW51c2VkU3R5bGVzaGVldFNpemUgLyB0
b3RhbFN0eWxlc2hlZXRTaXplKTsKKyAgICAgICAgICAgICAgICBzdW1tYXJ5LnZhbHVlID0gU3Ry
aW5nLnNwcmludGYoIiVkJSUgb2YgQ1NTIChlc3RpbWF0ZWQpIGlzIG5vdCB1c2VkIGJ5IHRoZSBj
dXJyZW50IHBhZ2UuIiwgdG90YWxVbnVzZWRQZXJjZW50KTsKIAotICAgICAgICAgICAgICAgIHJl
c3VsdC52aW9sYXRpb25Db3VudCArPSBzdHlsZXNoZWV0LnVudXNlZFJ1bGVzLmxlbmd0aDsKKyAg
ICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgICAgICAgICAgZnVuY3Rpb24gcm91dGluZShzZWxl
Y3RvckFycmF5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB7
fTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdG9yQXJyYXkubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGVzID0gZG9jdW1lbnQucXVl
cnlTZWxlY3RvckFsbChzZWxlY3RvckFycmF5W2ldKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGVzICYmIG5vZGVzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtz
ZWxlY3RvckFycmF5W2ldXSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5BdWRpdFJ1bGVzLmV2YWx1YXRlSW5UYXJnZXRXaW5kb3cocm91dGluZSwgW3NlbGVjdG9y
c10sIHNlbGVjdG9yc0NhbGxiYWNrLmJpbmQobnVsbCwgY2FsbGJhY2ssIHN0eWxlU2hlZXRzLCB0
ZXN0ZWRTZWxlY3RvcnMpKTsKICAgICAgICAgfQogCiAgICAgICAgIGZ1bmN0aW9uIHJvdXRpbmUo
KQpAQCAtMzA2LDQ4ICszNjIsMTEgQEAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuVW51c2VkQ3Nz
UnVsZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB2YXIgc3R5bGVTaGVldHMgPSBkb2N1bWVu
dC5zdHlsZVNoZWV0czsKICAgICAgICAgICAgIGlmICghc3R5bGVTaGVldHMpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdmFyIHJvdXRpbmVSZXN1bHQgPSB7IHN0
eWxlU2hlZXRzOiBbXSB9OwotICAgICAgICAgICAgdmFyIGlubGluZUJsb2NrT3JkaW5hbCA9IDA7
Ci0gICAgICAgICAgICB2YXIgdG90YWxTdHlsZXNoZWV0U2l6ZSA9IDA7Ci0gICAgICAgICAgICB2
YXIgdG90YWxVbnVzZWRTdHlsZXNoZWV0U2l6ZSA9IDA7Ci0gICAgICAgICAgICB2YXIgcHNldWRv
U2VsZWN0b3JSZWdleHAgPSAvOmhvdmVyfDpsaW5rfDphY3RpdmV8OnZpc2l0ZWR8OmZvY3VzLzsK
LSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVTaGVldHMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgICAgICB2YXIgc3R5bGVTaGVldCA9IHN0eWxlU2hlZXRzW2ldOwotICAg
ICAgICAgICAgICAgIGlmICghc3R5bGVTaGVldC5jc3NSdWxlcykKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgdmFyIHN0eWxlc2hlZXRTaXplID0gMDsKLSAg
ICAgICAgICAgICAgICB2YXIgdW51c2VkU3R5bGVzaGVldFNpemUgPSAwOwotICAgICAgICAgICAg
ICAgIHZhciB1bnVzZWRSdWxlcyA9IFtdOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGN1clJ1
bGUgPSAwOyBjdXJSdWxlIDwgc3R5bGVTaGVldC5jc3NSdWxlcy5sZW5ndGg7ICsrY3VyUnVsZSkg
ewotICAgICAgICAgICAgICAgICAgICB2YXIgcnVsZSA9IHN0eWxlU2hlZXQuY3NzUnVsZXNbY3Vy
UnVsZV07Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0TGVuZ3RoID0gcnVsZS5jc3NUZXh0
ID8gcnVsZS5jc3NUZXh0Lmxlbmd0aCA6IDA7Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlc2hl
ZXRTaXplICs9IHRleHRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChydWxlLnR5cGUg
IT09IDEgfHwgcnVsZS5zZWxlY3RvclRleHQubWF0Y2gocHNldWRvU2VsZWN0b3JSZWdleHApKQot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBub2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocnVsZS5zZWxlY3RvclRleHQpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZXMgJiYgbm9kZXMubGVuZ3RoKQotICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIHVudXNlZFN0eWxl
c2hlZXRTaXplICs9IHRleHRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIHVudXNlZFJ1bGVz
LnB1c2gocnVsZS5zZWxlY3RvclRleHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB0b3RhbFN0eWxlc2hlZXRTaXplICs9IHN0eWxlc2hlZXRTaXplOwotICAgICAgICAgICAg
ICAgIHRvdGFsVW51c2VkU3R5bGVzaGVldFNpemUgKz0gdW51c2VkU3R5bGVzaGVldFNpemU7Ci0K
LSAgICAgICAgICAgICAgICBpZiAodW51c2VkUnVsZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBlbnRyeSA9IHsgdHlwZTogc3R5bGVTaGVldC5ocmVmID8gImhyZWYiIDogImlu
bGluZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxTaXplOiBzdHls
ZXNoZWV0U2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnVzZWRTaXpl
OiB1bnVzZWRTdHlsZXNoZWV0U2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb2NhdGlvbjogc3R5bGVTaGVldC5ocmVmID8gc3R5bGVTaGVldC5ocmVmIDogKytpbmxpbmVC
bG9ja09yZGluYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW51c2VkUnVs
ZXM6IHVudXNlZFJ1bGVzIH07Ci0gICAgICAgICAgICAgICAgICAgIHJvdXRpbmVSZXN1bHQuc3R5
bGVTaGVldHMucHVzaChlbnRyeSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcm91dGluZVJlc3VsdC50b3RhbFNpemUgPSB0b3RhbFN0eWxlc2hlZXRTaXpl
OwotICAgICAgICAgICAgcm91dGluZVJlc3VsdC51bnVzZWRTaXplID0gdG90YWxVbnVzZWRTdHls
ZXNoZWV0U2l6ZTsKKwogICAgICAgICAgICAgcmV0dXJuIHJvdXRpbmVSZXN1bHQ7CiAgICAgICAg
IH0KIAotICAgICAgICBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5ldmFsdWF0ZUluVGFyZ2V0V2lu
ZG93KHJvdXRpbmUsIGV2YWxDYWxsYmFjayk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0
QWxsU3R5bGVzKFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGV2YWxDYWxsYmFjaykpOwogICAg
IH0KIH0KIApAQCAtNjY5LDcgKzY4OCw3IEBAIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkltYWdl
RGltZW5zaW9uc1J1bGUucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIGZvdW5kID8g
e3RvdGFsSW1hZ2VzOiBpbWFnZXMubGVuZ3RoLCBtYXA6IHVybFRvTm9EaW1lbnNpb25Db3VudH0g
OiBudWxsOwogICAgICAgICB9CiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuZXZh
bHVhdGVJblRhcmdldFdpbmRvdyhyb3V0aW5lLCBldmFsQ2FsbGJhY2suYmluZCh0aGlzKSk7Cisg
ICAgICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmV2YWx1YXRlSW5UYXJnZXRXaW5kb3cocm91
dGluZSwgbnVsbCwgZXZhbENhbGxiYWNrLmJpbmQodGhpcykpOwogICAgIH0KIH0KIApAQCAtNzQz
LDcgKzc2Miw3IEBAIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNzc0luSGVhZFJ1bGUucHJvdG90
eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIGZvdW5kID8gdXJsVG9WaW9sYXRpb25zQXJyYXkg
OiBudWxsOwogICAgICAgICB9CiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuZXZh
bHVhdGVJblRhcmdldFdpbmRvdyhyb3V0aW5lLCBldmFsQ2FsbGJhY2spOworICAgICAgICBXZWJJ
bnNwZWN0b3IuQXVkaXRSdWxlcy5ldmFsdWF0ZUluVGFyZ2V0V2luZG93KHJvdXRpbmUsIG51bGws
IGV2YWxDYWxsYmFjayk7CiAgICAgfQogfQogCkBAIC03OTAsNyArODA5LDcgQEAgV2ViSW5zcGVj
dG9yLkF1ZGl0UnVsZXMuU3R5bGVzU2NyaXB0c09yZGVyUnVsZS5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICByZXR1cm4gWyBsYXRlU3R5bGVVcmxzLCBjc3NCZWZvcmVJbmxpbmVDb3VudCBdOwog
ICAgICAgICB9CiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRh
cmdldFdpbmRvdyhyb3V0aW5lLCBldmFsQ2FsbGJhY2suYmluZCh0aGlzKSk7CisgICAgICAgIFdl
Ykluc3BlY3Rvci5BdWRpdFJ1bGVzLmV2YWx1YXRlSW5UYXJnZXRXaW5kb3cocm91dGluZSwgbnVs
bCwgZXZhbENhbGxiYWNrLmJpbmQodGhpcykpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0RPTUFnZW50LmpzCmluZGV4IDYyZmVkNzcuLjgzZmVkZTMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcworKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKQEAgLTcxOCw2ICs3MTgsNyBAQCBXZWJJbnNw
ZWN0b3IuZGlkUmVtb3ZlTm9kZSA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJh
Y2s7CiBXZWJJbnNwZWN0b3IuZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlID0gV2ViSW5zcGVj
dG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKIAogV2ViSW5zcGVjdG9yLmRpZEdldFN0eWxl
cyA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CitXZWJJbnNwZWN0b3Iu
ZGlkR2V0QWxsU3R5bGVzID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsK
IFdlYkluc3BlY3Rvci5kaWRHZXRJbmxpbmVTdHlsZSA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5w
cm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlkR2V0Q29tcHV0ZWRTdHlsZSA9IFdlYklu
c3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlkQXBwbHlT
dHlsZVRleHQgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCmluZGV4IDhjN2Q0OGUu
LjJhMmEyNTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3Rl
ZFNjcmlwdC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3Jp
cHQuanMKQEAgLTc4Niw5ICs3ODYsMTAgQEAgSW5qZWN0ZWRTY3JpcHQuY3JlYXRlUHJveHlPYmpl
Y3QgPSBmdW5jdGlvbihvYmplY3QsIG9iamVjdElkLCBhYmJyZXZpYXRlKQogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUluamVjdGVkU2NyaXB0LmV2YWx1YXRlT25TZWxmID0gZnVuY3Rpb24oZnVu
Y0JvZHkpCitJbmplY3RlZFNjcmlwdC5ldmFsdWF0ZU9uU2VsZiA9IGZ1bmN0aW9uKGZ1bmNCb2R5
LCBhcmdzKQogewotICAgIHJldHVybiB3aW5kb3cuZXZhbCgiKCIgKyBmdW5jQm9keSArICIpKCk7
Iik7CisgICAgdmFyIGZ1bmMgPSB3aW5kb3cuZXZhbCgiKCIgKyBmdW5jQm9keSArICIpIik7Cisg
ICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyB8fCBbXSk7CiB9CiAKIEluamVjdGVkU2Ny
aXB0LkNhbGxGcmFtZVByb3h5ID0gZnVuY3Rpb24oaWQsIGNhbGxGcmFtZSkK
</data>
<flag name="review"
          id="34068"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>