<?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>47339</bug_id>
          
          <creation_ts>2010-10-07 04:49:13 -0700</creation_ts>
          <short_desc>Web Inspector: Implement property toggling in InspectorCSSAgent</short_desc>
          <delta_ts>2010-10-22 08:57:45 -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>0</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>abarth</cc>
    
    <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>290922</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-07 04:49:13 -0700</bug_when>
    <thetext>CSS style property disablement should be implemented in the CSS agent prior to enabling it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294709</commentid>
    <comment_count>1</comment_count>
      <attachid>70858</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-15 05:50:54 -0700</bug_when>
    <thetext>Created attachment 70858
[PATCH] Suggested solution</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294710</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-15 05:52:11 -0700</bug_when>
    <thetext>Attachment 70858 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/inspector/InspectorStyleSheet.cpp:117:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/inspector/InspectorStyleSheet.cpp:303:  Semicolon defining empty statement for this loop. Use { } instead.  [whitespace/semicolon] [5]
Total errors found: 2 in 5 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>294715</commentid>
    <comment_count>3</comment_count>
      <attachid>70860</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-15 06:04:40 -0700</bug_when>
    <thetext>Created attachment 70860
[PATCH] Style fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295199</commentid>
    <comment_count>4</comment_count>
      <attachid>70860</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-17 01:02:58 -0700</bug_when>
    <thetext>Comment on attachment 70860
[PATCH] Style fixed

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

&gt; WebCore/inspector/InspectorCSSAgent.cpp:93
&gt; +//    parentStyleSheet : { id, href }

Nits:
- having sourceURL instead of href would be consistent with sourceLine
- we should either have parentStyleSheet id in all the rules or encode it as a part of ruleId, but not both.

&gt; WebCore/inspector/InspectorCSSAgent.cpp:94
&gt; +//    sourceLine       : &lt;string&gt;

Nit: should be &lt;number&gt;

&gt; WebCore/inspector/InspectorCSSAgent.cpp:101
&gt;  //    href           : &lt;string&gt;

sourceURL for consistency?

&gt; WebCore/inspector/InspectorStyleSheet.cpp:125
&gt; +FrontendPropertyIterator&amp; FrontendPropertyIterator::operator++()

ditto

&gt; WebCore/inspector/InspectorStyleSheet.cpp:166
&gt; +    // A disabled property should be returned if:

This is very, very complex (proved with the long comment). Converting iterator into the Style object would probably simplify it a lot.

&gt; WebCore/inspector/InspectorStyleSheet.cpp:297
&gt; +    DisabledPropertyStore* store = disabledPropertyStoreForStyle(style, disable);

Disabled property store could live inside InspectorStyle object.

&gt; WebCore/inspector/InspectorStyleSheet.cpp:395
&gt; +    FrontendPropertyIterator it = allProperties(ruleOrStyleId(style));

I still find ruleOrStyleId notion wrong.  Can we be more explicit? I.e. keep style ids and rule ids separate?

&gt; WebCore/inspector/InspectorStyleSheet.h:51
&gt; +typedef std::pair&lt;CSSPropertySourceData, bool&gt; SourceAwareProperty;

So this bool is &quot;hasSource&quot;? What do we need this type for? Can we get away with FrontendPropertyData? Should we rename FrontendPropertyData to InspectorStyleProperty?

&gt; WebCore/inspector/InspectorStyleSheet.h:108
&gt; +    FrontendPropertyIterator allProperties(const String&amp; styleId);

This interface gets too involved with the style content. Should we introduce InspectorStyle abstraction that would manage toggling and iterating for us?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295442</commentid>
    <comment_count>5</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-18 04:47:27 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 70860 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70860&amp;action=review

Since your comments involve changes to API structures (Web Inspector Protocol), I suggest that you also review the document, which I have changed to follow your comments.

&gt; &gt; WebCore/inspector/InspectorCSSAgent.cpp:93
&gt; &gt; +//    parentStyleSheet : { id, href }
&gt; 
&gt; Nits:
&gt; - having sourceURL instead of href would be consistent with sourceLine
&gt; - we should either have parentStyleSheet id in all the rules or encode it as a part of ruleId, but not both.

Done.

&gt; &gt; WebCore/inspector/InspectorCSSAgent.cpp:94
&gt; &gt; +//    sourceLine       : &lt;string&gt;
&gt; 
&gt; Nit: should be &lt;number&gt;

Done.

&gt; &gt; WebCore/inspector/InspectorCSSAgent.cpp:101
&gt; &gt;  //    href           : &lt;string&gt;
&gt; 
&gt; sourceURL for consistency?

Removed according to the first comment.

&gt; &gt; WebCore/inspector/InspectorStyleSheet.cpp:125
&gt; &gt; +FrontendPropertyIterator&amp; FrontendPropertyIterator::operator++()
&gt; 
&gt; ditto

What is this related to?

&gt; &gt; WebCore/inspector/InspectorStyleSheet.cpp:166
&gt; &gt; +    // A disabled property should be returned if:
&gt; 
&gt; This is very, very complex (proved with the long comment). Converting iterator into the Style object would probably simplify it a lot.

No it wouldn&apos;t. This algorithm joins disabled properties of a single style with live properties of the same style in order to produce the final &quot;cssProperties&quot; InspectorObject for the frontend. Is there any difference with regard to the location of this code (also see a minor comment at the end)?

This complexity is due to the loose constraints that we impose on the property disablement and style editing, to keep the disabled properties as close to their original positions in the aggregated style as possible, meaning that we need to keep this order when producing the final property object vector (array). This complexity is encapsulated into the iterator, so I do not see how extracting InspectorStyle will help reduce this complexity.

&gt; &gt; WebCore/inspector/InspectorStyleSheet.cpp:297
&gt; &gt; +    DisabledPropertyStore* store = disabledPropertyStoreForStyle(style, disable);
&gt; 
&gt; Disabled property store could live inside InspectorStyle object.

Do you suggest holding a map CSSStyleDeclaration* -&gt; InspectorStyle?

&gt; &gt; WebCore/inspector/InspectorStyleSheet.cpp:395
&gt; &gt; +    FrontendPropertyIterator it = allProperties(ruleOrStyleId(style));
&gt; 
&gt; I still find ruleOrStyleId notion wrong.  Can we be more explicit? I.e. keep style ids and rule ids separate?

It is an implementation detail, as you can see. We never address styles using ruleId or rules using styleId. We also never store them in the backend. What is your particular concern?

&gt; &gt; WebCore/inspector/InspectorStyleSheet.h:51
&gt; &gt; +typedef std::pair&lt;CSSPropertySourceData, bool&gt; SourceAwareProperty;
&gt; 
&gt; So this bool is &quot;hasSource&quot;? What do we need this type for? Can we get away with FrontendPropertyData?

Done.

&gt; Should we rename FrontendPropertyData to InspectorStyleProperty?

Done.

&gt; &gt; WebCore/inspector/InspectorStyleSheet.h:108
&gt; &gt; +    FrontendPropertyIterator allProperties(const String&amp; styleId);
&gt; 
&gt; This interface gets too involved with the style content. Should we introduce InspectorStyle abstraction that would manage toggling and iterating for us?

Iterating is done by the InspectorFrontendPropertyIterator. This is a non-trivial operation (akin to a &quot;mixing iterator&quot;), and I do not see why you don&apos;t like it, given that we never need to have a distinct vector of all the style properties at hand.

Will submit the patch once the remaining issues are resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295448</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-18 05:03:36 -0700</bug_when>
    <thetext>&gt; &gt; This is very, very complex (proved with the long comment). Converting iterator into the Style object would probably simplify it a lot.
&gt; 
&gt; No it wouldn&apos;t. This algorithm joins disabled properties of a single style with live properties of the same style in order to produce the final &quot;cssProperties&quot; InspectorObject for the frontend. Is there any difference with regard to the location of this code (also see a minor comment at the end)?
&gt; 
&gt; This complexity is due to the loose constraints that we impose on the property disablement and style editing, to keep the disabled properties as close to their original positions in the aggregated style as possible, meaning that we need to keep this order when producing the final property object vector (array). This complexity is encapsulated into the iterator, so I do not see how extracting InspectorStyle will help reduce this complexity.
&gt; 

I think that stateful style abstraction will help you in getting rid of this complexity. Also, &quot;InspectorFrontendPropertyIterator&quot; suggests that it is a part of front-end, while it is not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296135</commentid>
    <comment_count>7</comment_count>
      <attachid>71158</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-19 05:52:05 -0700</bug_when>
    <thetext>Created attachment 71158
[PATCH] Implemented another approach suggested by pfeldman</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296148</commentid>
    <comment_count>8</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-19 06:41:38 -0700</bug_when>
    <thetext>Attachment 71158 did not build on qt:
Build output: http://queues.webkit.org/results/4500019</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296162</commentid>
    <comment_count>9</comment_count>
      <attachid>71158</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-19 06:55:07 -0700</bug_when>
    <thetext>Comment on attachment 71158
[PATCH] Implemented another approach suggested by pfeldman

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

&gt; WebCore/inspector/InspectorStyleSheet.h:78
&gt; +    const Vector&lt;InspectorStyleProperty&gt; m_liveProperties;

I still don&apos;t get the iterator thing. What is it actually used for? Wouldn&apos;t it be simpler to have a class that would build front-end objects for merged properties in the loop?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296175</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-19 07:17:21 -0700</bug_when>
    <thetext>Attachment 71158 did not build on mac:
Build output: http://queues.webkit.org/results/4489038</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296177</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-19 07:21:14 -0700</bug_when>
    <thetext>Attachment 71158 did not build on chromium:
Build output: http://queues.webkit.org/results/4447076</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296204</commentid>
    <comment_count>12</comment_count>
      <attachid>71173</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-19 08:16:22 -0700</bug_when>
    <thetext>Created attachment 71173
[PATCH] Removed mixing iterator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296215</commentid>
    <comment_count>13</comment_count>
      <attachid>71173</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-19 08:42:50 -0700</bug_when>
    <thetext>Comment on attachment 71173
[PATCH] Removed mixing iterator

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

&gt; WebCore/inspector/InspectorCSSAgent.cpp:180
&gt; +void InspectorCSSAgent::populateInspectorFrontendProperties(CSSStyleDeclaration* style, Vector&lt;CSSPropertySourceData&gt;* sourcePropertyData, DisabledPropertyStore disabledProperties, Vector&lt;InspectorStyleProperty&gt;* result)

ditto.

&gt; WebCore/inspector/InspectorCSSAgent.cpp:363
&gt; +void InspectorCSSAgent::setStyleData2(const String&amp; fullStyleId, RefPtr&lt;InspectorObject&gt; styleDataObject, RefPtr&lt;InspectorValue&gt;* result)

I think we should pass text and disabled property list in separate parameters. Disabled property list is optional.

&gt; WebCore/inspector/InspectorCSSAgent.h:59
&gt; +    static PassRefPtr&lt;InspectorObject&gt; buildObjectForStyle(CSSStyleDeclaration*, const String&amp; fullStyleId, Vector&lt;InspectorStyleProperty&gt;&amp; properties, CSSStyleSourceData* = 0);

I am now lost what this method does: you pass live CSSStyleDeclaration to it, style id, a set of properties and style source data and expect a front-end object to be built. But I don&apos;t know where to take all of these items. Should there be a clean InspectorStyle abstraction that would contain what it should and be able to build front-end object for itself? It should either be private or have friendly interface.

&gt; WebCore/inspector/InspectorStyleSheet.h:63
&gt; +    CSSPropertySourceData property;

InspectorStyleProperty::property looks weird. Should it be called &quot;sourceData&quot;?

&gt; WebCore/inspector/InspectorStyleSheet.h:68
&gt; +typedef RefPtr&lt;InspectorArray&gt; DisabledPropertyStore;

You should not use messaging classes for storing data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296276</commentid>
    <comment_count>14</comment_count>
      <attachid>71184</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-19 10:52:41 -0700</bug_when>
    <thetext>Created attachment 71184
[PATCH] Introduced InspectorStyle

Let&apos;s stick to the implemented message format and change it later if need be. The code is not used at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296279</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-19 10:54:41 -0700</bug_when>
    <thetext>Attachment 71184 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/inspector/InspectorStyleSheet.cpp:101:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 1 in 5 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>296701</commentid>
    <comment_count>16</comment_count>
      <attachid>71264</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-20 02:06:00 -0700</bug_when>
    <thetext>Created attachment 71264
[PATCH] Style fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296721</commentid>
    <comment_count>17</comment_count>
      <attachid>71264</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-20 03:22:29 -0700</bug_when>
    <thetext>Comment on attachment 71264
[PATCH] Style fixed

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

&gt; WebCore/inspector/InspectorStyleSheet.h:63
&gt; +    CSSPropertySourceData property;

should this be called sourceData? property in property sounds confusing.

&gt; WebCore/inspector/InspectorStyleSheet.h:68
&gt; +struct DisabledProperty {

As we agreed, lets try using InspectorStyleProperty in place of this one and hence save the markup.

&gt; WebCore/inspector/InspectorStyleSheet.h:86
&gt; +        : m_id(fullStyleId)

Nit: you sometimes use the fullStyleId and sometimes id. In this case it is clear they are the same thing.

&gt; WebCore/inspector/InspectorStyleSheet.h:96
&gt; +    InspectorStyleProperty disabledInspectorStyleProperty(unsigned disabledIndex) const;

This one will become especially trivial once you store disabled properties in this class.

&gt; WebCore/inspector/InspectorStyleSheet.h:129
&gt; +    bool setStyle(const String&amp; styleId, InspectorObject* styleObject);

We should somehow ease understanding of these methods. Like in this case, it is not clear from what kind of object style is being set. But I guess we won&apos;t need it anyways.

&gt; WebCore/inspector/InspectorStyleSheet.h:140
&gt; +    virtual void setDisabledPropertiesForStyle(CSSStyleDeclaration*, PassRefPtr&lt;InspectorArray&gt; disabledProperties);

I think you should access these via InspectorStyle

&gt; WebCore/inspector/InspectorStyleSheet.h:141
&gt; +    virtual DisabledPropertyStore* disabledPropertyStoreForStyle(CSSStyleDeclaration*);

ditto

&gt; WebCore/inspector/InspectorStyleSheet.h:184
&gt; +    virtual void setDisabledPropertiesForStyle(CSSStyleDeclaration* style, PassRefPtr&lt;InspectorArray&gt; disabledProperties);

I think you should access these via InspectorStyle

&gt; WebCore/inspector/InspectorStyleSheet.h:185
&gt; +    virtual DisabledPropertyStore* disabledPropertyStoreForStyle(CSSStyleDeclaration* style, bool) { ASSERT_UNUSED(style, style == inlineStyle()); return &amp;m_disabledProperties; }

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297878</commentid>
    <comment_count>18</comment_count>
      <attachid>71539</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-22 03:03:51 -0700</bug_when>
    <thetext>Created attachment 71539
[PATCH] Rewrote the API according to the latest chat with pfeldman</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297879</commentid>
    <comment_count>19</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-22 03:05:43 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 71264 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71264&amp;action=review
&gt; 
&gt; &gt; WebCore/inspector/InspectorStyleSheet.h:63
&gt; &gt; +    CSSPropertySourceData property;
&gt; 
&gt; should this be called sourceData? property in property sounds confusing.

Correct, fixed.

&gt; &gt; WebCore/inspector/InspectorStyleSheet.h:68
&gt; &gt; +struct DisabledProperty {
&gt; 
&gt; As we agreed, lets try using InspectorStyleProperty in place of this one and hence save the markup.

Done.

&gt; &gt; WebCore/inspector/InspectorStyleSheet.h:86
&gt; &gt; +        : m_id(fullStyleId)
&gt; 
&gt; Nit: you sometimes use the fullStyleId and sometimes id. In this case it is clear they are the same thing.

Changed to m_fullId.

The rest of comments are obsolete due to the changes. The entire API has become much cleaner and more efficient wrt the disabled properties position retention.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297899</commentid>
    <comment_count>20</comment_count>
      <attachid>71539</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-22 03:58:04 -0700</bug_when>
    <thetext>Comment on attachment 71539
[PATCH] Rewrote the API according to the latest chat with pfeldman

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

Looks much better now, almost ready for landing.

&gt; WebCore/inspector/InspectorStyleSheet.cpp:662
&gt; +        rememberInspectorStyle(styleForId(styleId), inspectorStyle.release());

You should release the style once it stores no toggled properties.

&gt; WebCore/inspector/InspectorStyleSheet.h:52
&gt; +class InspectorCompoundId {

Now that you have &quot;parsed&quot; id, class, I think you should operate it instead of strings in the InspectorStyleSheet and such. You should quickly parse the string that you get from the front-end and carry this thing since then.

&gt; WebCore/inspector/InspectorStyleSheet.h:98
&gt; +    static PassRefPtr&lt;InspectorStyle&gt; create(const String&amp; fullStyleId, InspectorStyleSheet* parentStyleSheet)

Constructing this class in two different ways does not make sense to my. We should always assign to m_style, styleId / parentStylSheet can be undefined for r/o unbound styles.

&gt; WebCore/inspector/InspectorStyleSheet.h:166
&gt; +    void populateAllProperties(const String&amp; styleId, Vector&lt;InspectorStyleProperty&gt;* result);

Please remove this.

&gt; WebCore/inspector/InspectorStyleSheet.h:231
&gt; +    virtual void rememberInspectorStyle(CSSStyleDeclaration* style, PassRefPtr&lt;InspectorStyle&gt; inspectorStyle) { }

It seems strange that you are passing both model and inspector styles. One should be sufficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297945</commentid>
    <comment_count>21</comment_count>
      <attachid>71558</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-22 06:22:09 -0700</bug_when>
    <thetext>Created attachment 71558
[PATCH] Comments addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297948</commentid>
    <comment_count>22</comment_count>
      <attachid>71558</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-22 06:27:27 -0700</bug_when>
    <thetext>Comment on attachment 71558
[PATCH] Comments addressed

Wrong augmented patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297953</commentid>
    <comment_count>23</comment_count>
      <attachid>71560</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-22 06:31:03 -0700</bug_when>
    <thetext>Created attachment 71560
[PATCH] The right fix for the comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297967</commentid>
    <comment_count>24</comment_count>
      <attachid>71560</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-22 07:20:36 -0700</bug_when>
    <thetext>Comment on attachment 71560
[PATCH] The right fix for the comments

This now looks good. See single comment below. I&apos;d suggest that we land it after this review and do a follow-up inspection in the source. The change has been up in the air for too long and it is fairly large.

&gt; WebCore/inspector/InspectorStyleSheet.h:52
&gt; +class InspectorCompoundId {

How about we rename it to InspectorStyleId and hardcode the style id structure? (I.e. stylesheet id and style id parts).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297977</commentid>
    <comment_count>25</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-22 08:07:11 -0700</bug_when>
    <thetext>Landed with the changes suggested by pfeldman.

Committing to http://svn.webkit.org/repository/webkit/trunk ...
        M       WebCore/ChangeLog
        M       WebCore/inspector/InspectorCSSAgent.cpp
        M       WebCore/inspector/InspectorCSSAgent.h
        M       WebCore/inspector/InspectorStyleSheet.cpp
        M       WebCore/inspector/InspectorStyleSheet.h
Committed r70306</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298002</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-22 08:57:45 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/70306 might have broken GTK Linux 64-bit Debug
The following tests are not passing:
mathml/presentation/fenced-mi.xhtml
mathml/presentation/fenced.xhtml
mathml/presentation/fractions-vertical-alignment.xhtml
mathml/presentation/fractions.xhtml
mathml/presentation/mo.xhtml
mathml/presentation/over.xhtml
mathml/presentation/roots.xhtml
mathml/presentation/row-alignment.xhtml</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70858</attachid>
            <date>2010-10-15 05:50:54 -0700</date>
            <delta_ts>2010-10-15 06:04:40 -0700</delta_ts>
            <desc>[PATCH] Suggested solution</desc>
            <filename>toggle.patch</filename>
            <type>text/plain</type>
            <size>34834</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IGEyMDYxNmQxNTFiZTU3ZjVhMjEyNzRmNmJkY2M0ZTIzMTAzZjY3MTAKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBGcmkgT2N0IDE1
IDE1OjE3OjU4IDIwMTAgKzA0MDAKCiAgICBQcmVwYXJlIHRvZ2dsZWQgcHJvcGVydGllcyBmb3Ig
Y29tbWl0CgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA4Mzc1MmNmLi4xYzkxODgwIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEwLTEwLTE1ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogSW1wbGVtZW50IElu
c3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eTIoKQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczMzkKKworICAgICAgICBEcml2ZS1ieTogZml4
ZXMgZm9yIHRoZSBXZWIgSW5zcGVjdG9yIFByb3RvY29sIGZvcm1hdC4KKworICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDU1NBZ2VudDo6cG9wdWxhdGVTb3VyY2VBd2FyZVByb3BlcnRpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlMik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkyKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojpwb3B1bGF0ZU9iamVjdFdpdGhTdHls
ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZFByb3BlcnR5SXRlcmF0b3I6OkZyb250ZW5kUHJv
cGVydHlJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZFByb3BlcnR5SXRlcmF0
b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZFByb3BlcnR5SXRlcmF0
b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRQcm9wZXJ0eUl0ZXJh
dG9yOjplbmFibGVDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyb250ZW5kUHJvcGVydHlJ
dGVyYXRvcjo6YXREaXNhYmxlZFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clN0eWxlU2hlZXQ6OmFsbFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
U3R5bGVTaGVldDo6dG9nZ2xlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmRpc2FibGVkUHJvcGVydHlTdG9yZUZvclN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZTo6c2V0U3R5bGVUZXh0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVl
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRQcm9wZXJ0eURhdGE6OkZyb250ZW5kUHJv
cGVydHlEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZyb250ZW5kUHJvcGVydHlJdGVyYXRvcjo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZFByb3BlcnR5SXRlcmF0b3I6
OmF0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVT
dHlsZTo6c3R5bGVGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU6OnJ1bGVTb3VyY2VEYXRhRm9yKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6ZGlzYWJsZWRQcm9wZXJ0eVN0b3JlRm9y
U3R5bGUpOgorCiAyMDEwLTEwLTE1ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCBlMGZhYjg1Li42NTg2OTZhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC00OSw3ICs0OSw4IEBACiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotCisv
LyBDdXJyZW50bHkgaW1wbGVtZW50ZWQgbW9kZWw6CisvLwogLy8gY3NzUHJvcGVydHkgPSB7CiAv
LyAgICBuYW1lICAgICAgICAgIDogPHN0cmluZz4sCiAvLyAgICB2YWx1ZSAgICAgICAgIDogPHN0
cmluZz4sCkBAIC03MCw4ICs3MSw4IEBACiAvLwogLy8KIC8vIGNzc1N0eWxlID0gewotLy8gICAg
c3R5bGVJZCAgICAgICAgIDogPG51bWJlcj4sIC8vIE9wdGlvbmFsCi0vLyAgICBzdHlsZVNoZWV0
SWQgICAgOiA8bnVtYmVyPiwgLy8gUGFyZW50OiAtMSBmb3IgaW5saW5lIHN0eWxlcyAoPGZvbyBz
dHlsZT0iLi4iPikKKy8vICAgIHN0eWxlSWQgICAgICAgICA6IDxzdHJpbmc+LCAvLyBPcHRpb25h
bAorLy8gICAgc3R5bGVTaGVldElkICAgIDogPG51bWJlcj4sIC8vIE9wdGlvbmFsCiAvLyAgICBj
c3NQcm9wZXJ0aWVzICAgOiBbCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgI2Nzc1Byb3Bl
cnR5LAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgpAQCAtODIsNjAgKzgzLDUyIEBA
CiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kTmFtZTIgOiBzaG9ydGhhbmRW
YWx1ZTIKIC8vICAgICAgICAgICAgICAgICAgICAgIH0sCiAvLyAgICBjc3NUZXh0ICAgICAgICAg
OiA8c3RyaW5nPiwgLy8gZGVjbGFyYXRpb24gdGV4dAotLy8gICAgcHJvcGVydGllcyAgICAgIDog
eyB9IC8vID8/PworLy8gICAgcHJvcGVydGllcyAgICAgIDogeyB3aWR0aCwgaGVpZ2h0IH0KIC8v
IH0KIC8vCi0vLyAvLyBUT0RPOgotLy8gLy8gLSBjb252ZXJ0IGRpc2FibGVkUHJvcGVydGllcyB0
byBlbmFibGVkIGZsYWcuCi0vLyAvLyAtIGNvbnZlcnQgd2lkdGgsIGhlaWdodCB0byBwcm9wZXJ0
aWVzCi0vLwogLy8gY3NzUnVsZSA9IHsKLS8vICAgIHJ1bGVJZCAgICAgICA6IDxudW1iZXI+LAot
Ly8gICAgc2VsZWN0b3JUZXh0IDogPHN0cmluZz4KLS8vICAgIHNvdXJjZVVSTCAgICA6IDxzdHJp
bmc+Ci0vLyAgICBzb3VyY2VMaW5lICAgOiA8c3RyaW5nPgotLy8gICAgc3R5bGVTaGVldElkIDog
PG51bWJlcj4gLy8gYWxzbyBmb3VuZCBpbiBzdHlsZQotLy8gICAgb3JpZ2luICAgICAgIDogPHN0
cmluZz4gLy8gIiIgfHwgInVzZXItYWdlbnQiIHx8ICJ1c2VyIiB8fCAiaW5zcGVjdG9yIgotLy8g
ICAgc3R5bGUgICAgICAgIDogI2Nzc1N0eWxlCisvLyAgICBydWxlSWQgICAgICAgICAgIDogPHN0
cmluZz4sCisvLyAgICBzZWxlY3RvclRleHQgICAgIDogPHN0cmluZz4KKy8vICAgIGRvY3VtZW50
VVJMICAgICAgOiA8c3RyaW5nPgorLy8gICAgcGFyZW50U3R5bGVTaGVldCA6IHsgaWQsIGhyZWYg
fQorLy8gICAgc291cmNlTGluZSAgICAgICA6IDxzdHJpbmc+CisvLyAgICBvcmlnaW4gICAgICAg
ICAgIDogPHN0cmluZz4gLy8gIiIgfHwgInVzZXItYWdlbnQiIHx8ICJ1c2VyIiB8fCAiaW5zcGVj
dG9yIgorLy8gICAgc3R5bGUgICAgICAgICAgICA6ICNjc3NTdHlsZQogLy8gfQogLy8KLS8vIC8v
IFRPRE86Ci0vLyAvLyAtIGZpeCBvcmlnaW4KLS8vIC8vIC0gYWRkIHNvdXJjZVVSTAotLy8gLy8g
LSBmaXggcGFyZW50U3R5bGVTaGVldElkCi0vLwogLy8gY3NzU3R5bGVTaGVldCA9IHsKIC8vICAg
IHN0eWxlU2hlZXRJZCAgIDogPG51bWJlcj4KIC8vICAgIGhyZWYgICAgICAgICAgIDogPHN0cmlu
Zz4KIC8vICAgIHRpdGxlICAgICAgICAgIDogPHN0cmluZz4KIC8vICAgIGRpc2FibGVkICAgICAg
IDogPGJvb2xlYW4+Ci0vLyAgICBkb2N1bWVudE5vZGVJZCA6IDxudW1iZXI+CiAvLyAgICBydWxl
cyAgICAgICAgICA6IFsKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICNjc3NSdWxlLAogLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgLi4uCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAj
Y3NzUnVsZQogLy8gICAgICAgICAgICAgICAgICAgICBdCisvLyAgICB0ZXh0ICAgICAgICAgICA6
IDxzdHJpbmc+IC8vIE9wdGlvbmFsIC0gd2hlbmV2ZXIgdGhlIHRleHQgaXMgYXZhaWxhYmxlIGZv
ciBhIHRleHQtYmFzZWQgc3R5bGVzaGVldAogLy8gfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IC8vIHN0YXRpYwotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckNTU0FnZW50
OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBjb25zdCBT
dHJpbmcmIGZ1bGxTdHlsZUlkLCBDU1NTdHlsZVNvdXJjZURhdGEqIHNvdXJjZURhdGEpCitQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgZnVsbFN0eWxl
SWQsIEZyb250ZW5kUHJvcGVydHlJdGVyYXRvciYgcHJvcGVydGllc0l0LCBDU1NTdHlsZVNvdXJj
ZURhdGEqIHNvdXJjZURhdGEpCiB7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBpZiAoIWZ1bGxTdHlsZUlkLmlzRW1w
dHkoKSkKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImlkIiwgZnVsbFN0eWxlSWQpOworICAg
ICAgICByZXN1bHQtPnNldFN0cmluZygic3R5bGVJZCIsIGZ1bGxTdHlsZUlkKTsKIAotICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJ3aWR0aCIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJ3aWR0aCIp
KTsKLSAgICByZXN1bHQtPnNldFN0cmluZygiaGVpZ2h0Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFs
dWUoImhlaWdodCIpKTsKLSAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiogcHJvcGVy
dHlEYXRhID0gMDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0aWVzID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm9wZXJ0aWVzLT5zZXRTdHJpbmcoIndpZHRo
Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoIndpZHRoIikpOworICAgIHByb3BlcnRpZXMtPnNl
dFN0cmluZygiaGVpZ2h0Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpKTsKIAog
ICAgIGlmIChzb3VyY2VEYXRhKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJzdGFydE9m
ZnNldCIsIHNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0KTsKLSAgICAgICAgcmVzdWx0
LT5zZXROdW1iZXIoImVuZE9mZnNldCIsIHNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCk7
Ci0gICAgICAgIHByb3BlcnR5RGF0YSA9ICZzb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7CisgICAg
ICAgIHByb3BlcnRpZXMtPnNldE51bWJlcigic3RhcnRPZmZzZXQiLCBzb3VyY2VEYXRhLT5zdHls
ZUJvZHlSYW5nZS5zdGFydCk7CisgICAgICAgIHByb3BlcnRpZXMtPnNldE51bWJlcigiZW5kT2Zm
c2V0Iiwgc291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kKTsKICAgICB9Ci0gICAgcG9wdWxh
dGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKHN0eWxlLCByZXN1bHQuZ2V0KCksIHByb3BlcnR5
RGF0YSk7CisgICAgcmVzdWx0LT5zZXRPYmplY3QoInByb3BlcnRpZXMiLCBwcm9wZXJ0aWVzKTsK
KworICAgIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhzdHlsZSwgcmVzdWx0Lmdl
dCgpLCBwcm9wZXJ0aWVzSXQpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CkBA
IC0xNjQsNiArMTU3LDI3IEBAIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzQ1NT
U3R5bGVSdWxlKFN0eWxlQmFzZSogc3R5bGVCYXNlKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxD
U1NTdHlsZVJ1bGUqPihydWxlKTsKIH0KIAorLy8gc3RhdGljCit2b2lkIEluc3BlY3RvckNTU0Fn
ZW50Ojpwb3B1bGF0ZVNvdXJjZUF3YXJlUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4qIHNvdXJjZVByb3BlcnR5RGF0YSwg
VmVjdG9yPFNvdXJjZUF3YXJlUHJvcGVydHk+KiByZXN1bHQpCit7CisgICAgSGFzaFNldDxTdHJp
bmc+IGZvdW5kU2hvcnRoYW5kczsKKyAgICBIYXNoU2V0PFN0cmluZz4gc291cmNlUHJvcGVydHlO
YW1lczsKKyAgICBpZiAoc291cmNlUHJvcGVydHlEYXRhKSB7CisgICAgICAgIGZvciAoVmVjdG9y
PENTU1Byb3BlcnR5U291cmNlRGF0YT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc291cmNlUHJvcGVy
dHlEYXRhLT5iZWdpbigpOyBpdCAhPSBzb3VyY2VQcm9wZXJ0eURhdGEtPmVuZCgpOyArK2l0KSB7
CisgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChTb3VyY2VBd2FyZVByb3BlcnR5KCppdCwgdHJ1
ZSkpOworICAgICAgICAgICAgc291cmNlUHJvcGVydHlOYW1lcy5hZGQoaXQtPm5hbWUpOworICAg
ICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDAsIHNpemUgPSBzdHlsZS0+bGVuZ3Ro
KCk7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBzdHlsZS0+aXRlbShp
KTsKKyAgICAgICAgaWYgKHNvdXJjZVByb3BlcnR5TmFtZXMuY29udGFpbnMobmFtZSkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzb3VyY2VQcm9wZXJ0eU5hbWVzLmFkZChuYW1l
KTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQoU291cmNlQXdhcmVQcm9wZXJ0eShDU1NQcm9wZXJ0
eVNvdXJjZURhdGEobmFtZSwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUobmFtZSksICFzdHlsZS0+
Z2V0UHJvcGVydHlQcmlvcml0eShuYW1lKS5pc0VtcHR5KCksIHRydWUsIFNvdXJjZVJhbmdlKCkp
LCBmYWxzZSkpOworICAgIH0KK30KIAogSW5zcGVjdG9yQ1NTQWdlbnQ6Okluc3BlY3RvckNTU0Fn
ZW50KEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250
ZW5kKQogICAgIDogbV9kb21BZ2VudChkb21BZ2VudCkKQEAgLTI0Niw3ICsyNjAsMTEgQEAgdm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUyKGxvbmcgbm9kZUlk
LCBSZWZQdHI8SW5zcGVjdG9yVmEKICAgICBpZiAoIWRlZmF1bHRWaWV3KQogICAgICAgICByZXR1
cm47CiAKLSAgICAqc3R5bGUgPSBidWlsZE9iamVjdEZvclN0eWxlKGRlZmF1bHRWaWV3LT5nZXRD
b21wdXRlZFN0eWxlKGVsZW1lbnQsICIiKS5nZXQoKSwgIiIpOworICAgIFJlZlB0cjxDU1NTdHls
ZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlID0gZGVmYXVsdFZpZXctPmdldENvbXB1dGVkU3R5
bGUoZWxlbWVudCwgIiIpOworICAgIFZlY3RvcjxTb3VyY2VBd2FyZVByb3BlcnR5PiBwcm9wZXJ0
aWVzOworICAgIHBvcHVsYXRlU291cmNlQXdhcmVQcm9wZXJ0aWVzKGNvbXB1dGVkU3R5bGUuZ2V0
KCksIDAsICZwcm9wZXJ0aWVzKTsKKyAgICBGcm9udGVuZFByb3BlcnR5SXRlcmF0b3IgcHJvcGVy
dGllc0l0KHByb3BlcnRpZXMsIDApOworICAgICpzdHlsZSA9IGJ1aWxkT2JqZWN0Rm9yU3R5bGUo
Y29tcHV0ZWRTdHlsZS5nZXQoKSwgIiIsIHByb3BlcnRpZXNJdCk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldEluaGVyaXRlZFN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBzdHlsZSkKQEAgLTMyNCw5ICszNDIsMTcgQEAgdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVUZXh0Mihjb25zdCBTdHJpbmcmIGZ1bGxTdHlsZUlkLCBj
b25zdCBTdHJpbmcmIHQKICAgICAqcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRP
YmplY3RGb3JTdHlsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5zdHlsZUZvcklkKGlkUGFydHMuYXQo
MSkpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkyKGNvbnN0
IFN0cmluZyYsIGxvbmcsIGJvb2wpCit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9w
ZXJ0eTIoY29uc3QgU3RyaW5nJiBmdWxsU3R5bGVJZCwgbG9uZyBwcm9wZXJ0eU9yZGluYWwsIGJv
b2wgZGlzYWJsZSkKIHsKLSAgICAvLyBGSVhNRShhcGF2bG92KTogaW1wbGVtZW50CisgICAgVmVj
dG9yPFN0cmluZz4gaWRQYXJ0czsKKyAgICBmdWxsU3R5bGVJZC5zcGxpdCgnOicsIGlkUGFydHMp
OworICAgIEFTU0VSVChpZFBhcnRzLnNpemUoKSA9PSAyKTsKKworICAgIEluc3BlY3RvclN0eWxl
U2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoaWRQYXJ0cy5hdCgw
KSk7CisgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQorICAgICAgICByZXR1cm47CisKKyAg
ICBpbnNwZWN0b3JTdHlsZVNoZWV0LT50b2dnbGVQcm9wZXJ0eShpZFBhcnRzLmF0KDEpLCBwcm9w
ZXJ0eU9yZGluYWwsIGRpc2FibGUpOwogfQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRS
dWxlU2VsZWN0b3IyKGNvbnN0IFN0cmluZyYgZnVsbFJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQpAQCAtMzgwLDcxICs0MDYsNTYg
QEAgRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmlubGluZVN0eWxlRWxlbWVudChDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSkKIH0KIAogLy8gc3RhdGljCi12b2lkIEluc3BlY3RvckNTU0Fn
ZW50Ojpwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUsIEluc3BlY3Rvck9iamVjdCogcmVzdWx0LCBWZWN0b3I8Q1NTUHJvcGVydHlTb3Vy
Y2VEYXRhPiogcHJvcGVydHlEYXRhKQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cG9wdWxhdGVP
YmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBJbnNw
ZWN0b3JPYmplY3QqIHJlc3VsdCwgRnJvbnRlbmRQcm9wZXJ0eUl0ZXJhdG9yJiBwcm9wZXJ0aWVz
SXQpCiB7CiAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm9wZXJ0aWVzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNob3J0aGFuZFZh
bHVlcyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+ID4gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3Bl
cnR5OwogICAgIEhhc2hTZXQ8U3RyaW5nPiBmb3VuZFNob3J0aGFuZHM7Ci0gICAgSGFzaFNldDxT
dHJpbmc+IHNvdXJjZVByb3BlcnR5TmFtZXM7Ci0gICAgaWYgKHByb3BlcnR5RGF0YSkgewotICAg
ICAgICBmb3IgKFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IHByb3BlcnR5RGF0YS0+YmVnaW4oKTsgaXQgIT0gcHJvcGVydHlEYXRhLT5lbmQoKTsgKytp
dCkgewotICAgICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eUVu
dHJ5ID0gKml0OwotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHJvcGVydHkg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgcHJvcGVydGllcy0+cHVz
aE9iamVjdChwcm9wZXJ0eSk7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBwcm9w
ZXJ0eUVudHJ5Lm5hbWU7Ci0gICAgICAgICAgICBzb3VyY2VQcm9wZXJ0eU5hbWVzLmFkZChuYW1l
KTsKLSAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoIm5hbWUiLCBuYW1lKTsKLSAgICAg
ICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInZhbHVlIiwgcHJvcGVydHlFbnRyeS52YWx1ZSk7
Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJwcmlvcml0eSIsIHByb3BlcnR5RW50
cnkuaW1wb3J0YW50ID8gImltcG9ydGFudCIgOiAiIik7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+
c2V0U3RyaW5nKCJzdGF0dXMiLCAiYWN0aXZlIik7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0
Qm9vbGVhbigicGFyc2VkT2siLCBwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKTsKLSAgICAgICAgICAg
IHByb3BlcnR5LT5zZXROdW1iZXIoInN0YXJ0T2Zmc2V0IiwgcHJvcGVydHlFbnRyeS5yYW5nZS5z
dGFydCk7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0TnVtYmVyKCJlbmRPZmZzZXQiLCBwcm9w
ZXJ0eUVudHJ5LnJhbmdlLmVuZCk7Ci0gICAgICAgICAgICBpZiAocHJvcGVydHlFbnRyeS5wYXJz
ZWRPaykgewotICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJpbXBsaWNpdCIs
IGZhbHNlKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gc3R5bGUtPmdldFBy
b3BlcnR5U2hvcnRoYW5kKG5hbWUpOwotICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJp
bmcoInNob3J0aGFuZE5hbWUiLCBzaG9ydGhhbmQpOwotICAgICAgICAgICAgICAgIGlmICghc2hv
cnRoYW5kLmlzRW1wdHkoKSAmJiAhZm91bmRTaG9ydGhhbmRzLmNvbnRhaW5zKHNob3J0aGFuZCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzLmFkZChzaG9ydGhhbmQpOwot
ICAgICAgICAgICAgICAgICAgICBzaG9ydGhhbmRWYWx1ZXMtPnNldFN0cmluZyhzaG9ydGhhbmQs
IHNob3J0aGFuZFZhbHVlKHN0eWxlLCBzaG9ydGhhbmQpKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFu
KCJpbXBsaWNpdCIsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5n
KCJzaG9ydGhhbmROYW1lIiwgIiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgSGFzaE1h
cDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+ID46Oml0ZXJhdG9yIGFjdGl2ZUl0ID0g
cHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmZpbmQobmFtZSk7Ci0gICAgICAg
ICAgICBpZiAoYWN0aXZlSXQgIT0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5
LmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgYWN0aXZlSXQtPnNlY29uZC0+c2V0U3RyaW5nKCJz
dGF0dXMiLCAiaW5hY3RpdmUiKTsKLSAgICAgICAgICAgICAgICBhY3RpdmVJdC0+c2Vjb25kLT5z
ZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCAiIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuc2V0KG5hbWUsIHByb3BlcnR5
KTsKLSAgICAgICAgfQotICAgIH0KIAotICAgIGZvciAoaW50IGkgPSAwLCBzaXplID0gc3R5bGUt
Pmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gc3R5bGUt
Pml0ZW0oaSk7Ci0gICAgICAgIGlmIChzb3VyY2VQcm9wZXJ0eU5hbWVzLmNvbnRhaW5zKG5hbWUp
KQotICAgICAgICAgICAgY29udGludWU7CisgICAgZm9yICg7ICFwcm9wZXJ0aWVzSXQuYXRFbmQo
KTsgKytwcm9wZXJ0aWVzSXQpIHsKKyAgICAgICAgRnJvbnRlbmRQcm9wZXJ0eURhdGEgcHJvcGVy
dHlEYXRhKCpwcm9wZXJ0aWVzSXQpOworICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURh
dGEmIHByb3BlcnR5RW50cnkgPSBwcm9wZXJ0eURhdGEucHJvcGVydHk7CisgICAgICAgIGNvbnN0
IFN0cmluZyYgbmFtZSA9IHByb3BlcnR5RW50cnkubmFtZTsKIAotICAgICAgICBzb3VyY2VQcm9w
ZXJ0eU5hbWVzLmFkZChuYW1lKTsKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHJv
cGVydHkgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwcm9wZXJ0aWVzLT5w
dXNoT2JqZWN0KHByb3BlcnR5KTsKICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygibmFtZSIs
IG5hbWUpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHN0eWxlLT5nZXRQ
cm9wZXJ0eVZhbHVlKG5hbWUpKTsKLSAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygicHJpb3Jp
dHkiLCBzdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eSgibmFtZSIpKTsKLSAgICAgICAgcHJvcGVy
dHktPnNldEJvb2xlYW4oImltcGxpY2l0Iiwgc3R5bGUtPmlzUHJvcGVydHlJbXBsaWNpdChuYW1l
KSk7Ci0gICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJwYXJzZWRPayIsIHRydWUpOwotICAg
ICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzdGF0dXMiLCAic3R5bGUiKTsKLSAgICAgICAgU3Ry
aW5nIHNob3J0aGFuZCA9IHN0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKLSAgICAg
ICAgcHJvcGVydHktPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsIHNob3J0aGFuZCk7Ci0gICAg
ICAgIGlmICghc2hvcnRoYW5kLmlzRW1wdHkoKSAmJiAhZm91bmRTaG9ydGhhbmRzLmNvbnRhaW5z
KHNob3J0aGFuZCkpIHsKLSAgICAgICAgICAgIGZvdW5kU2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5k
KTsKLSAgICAgICAgICAgIHNob3J0aGFuZFZhbHVlcy0+c2V0U3RyaW5nKHNob3J0aGFuZCwgc2hv
cnRoYW5kVmFsdWUoc3R5bGUsIHNob3J0aGFuZCkpOworICAgICAgICBwcm9wZXJ0eS0+c2V0U3Ry
aW5nKCJ2YWx1ZSIsIHByb3BlcnR5RW50cnkudmFsdWUpOworICAgICAgICBwcm9wZXJ0eS0+c2V0
U3RyaW5nKCJwcmlvcml0eSIsIHByb3BlcnR5RW50cnkuaW1wb3J0YW50ID8gImltcG9ydGFudCIg
OiAiIik7CisgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsIHByb3BlcnR5RGF0
YS5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiYWN0aXZlIik7CisgICAgICAgIHByb3BlcnR5LT5z
ZXRCb29sZWFuKCJwYXJzZWRPayIsIHByb3BlcnR5RW50cnkucGFyc2VkT2spOworICAgICAgICBp
ZiAoIXByb3BlcnR5RGF0YS5kaXNhYmxlZCkgeworICAgICAgICAgICAgaWYgKHByb3BlcnR5RGF0
YS5oYXNTb3VyY2UpIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1w
bGljaXQiLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcHJvcGVydHktPnNldE51bWJlcigic3Rh
cnRPZmZzZXQiLCBwcm9wZXJ0eUVudHJ5LnJhbmdlLnN0YXJ0KTsKKyAgICAgICAgICAgICAgICBw
cm9wZXJ0eS0+c2V0TnVtYmVyKCJlbmRPZmZzZXQiLCBwcm9wZXJ0eUVudHJ5LnJhbmdlLmVuZCk7
CisKKyAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gPjo6aXRlcmF0b3IgYWN0aXZlSXQgPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJv
cGVydHkuZmluZChuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aXZlSXQgIT0gcHJvcGVy
dHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmVuZCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0cmluZygic3RhdHVzIiwgImluYWN0aXZlIik7Cisg
ICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0cmluZygic2hvcnRoYW5k
TmFtZSIsICIiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChuYW1lLCBwcm9wZXJ0eSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJpbXBs
aWNpdCIsIHN0eWxlLT5pc1Byb3BlcnR5SW1wbGljaXQobmFtZSkpOworICAgICAgICAgICAgICAg
IHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsICJzdHlsZSIpOworICAgICAgICAgICAgfQog
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHByb3BlcnR5RW50cnkucGFyc2VkT2spIHsKKyAgICAg
ICAgICAgIC8vIEJvdGggZm9yIHN0eWxlLW9yaWdpbmF0ZWQgYW5kIHBhcnNlZCBzb3VyY2UgcHJv
cGVydGllcy4KKyAgICAgICAgICAgIFN0cmluZyBzaG9ydGhhbmQgPSBzdHlsZS0+Z2V0UHJvcGVy
dHlTaG9ydGhhbmQobmFtZSk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9y
dGhhbmROYW1lIiwgc2hvcnRoYW5kKTsKKyAgICAgICAgICAgIGlmICghc2hvcnRoYW5kLmlzRW1w
dHkoKSAmJiAhZm91bmRTaG9ydGhhbmRzLmNvbnRhaW5zKHNob3J0aGFuZCkpIHsKKyAgICAgICAg
ICAgICAgICBmb3VuZFNob3J0aGFuZHMuYWRkKHNob3J0aGFuZCk7CisgICAgICAgICAgICAgICAg
c2hvcnRoYW5kVmFsdWVzLT5zZXRTdHJpbmcoc2hvcnRoYW5kLCBzaG9ydGhhbmRWYWx1ZShzdHls
ZSwgc2hvcnRoYW5kKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgcHJvcGVydHktPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsICIiKTsKICAgICB9CiAKLSAg
ICByZXN1bHQtPnNldEFycmF5KCJwcm9wZXJ0aWVzIiwgcHJvcGVydGllcyk7CisgICAgcmVzdWx0
LT5zZXRBcnJheSgiY3NzUHJvcGVydGllcyIsIHByb3BlcnRpZXMpOwogICAgIHJlc3VsdC0+c2V0
T2JqZWN0KCJzaG9ydGhhbmRWYWx1ZXMiLCBzaG9ydGhhbmRWYWx1ZXMpOwogfQogCkBAIC02MjIs
NyArNjMzLDEwIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMoRWxlCiAgICAgICAgIEF0dHJpYnV0ZSog
YXR0cmlidXRlID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgaWYgKGF0
dHJpYnV0ZS0+c3R5bGUoKSkgewogICAgICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSBh
dHRyaWJ1dGUtPmxvY2FsTmFtZSgpOwotICAgICAgICAgICAgc3R5bGVBdHRyaWJ1dGVzLT5zZXRP
YmplY3QoYXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpLCBidWlsZE9iamVjdEZvclN0eWxlKGF0
dHJpYnV0ZS0+c3R5bGUoKSwgIiIpKTsKKyAgICAgICAgICAgIFZlY3RvcjxTb3VyY2VBd2FyZVBy
b3BlcnR5PiBwcm9wZXJ0aWVzOworICAgICAgICAgICAgcG9wdWxhdGVTb3VyY2VBd2FyZVByb3Bl
cnRpZXMoYXR0cmlidXRlLT5zdHlsZSgpLCAwLCAmcHJvcGVydGllcyk7CisgICAgICAgICAgICBG
cm9udGVuZFByb3BlcnR5SXRlcmF0b3IgcHJvcGVydGllc0l0KHByb3BlcnRpZXMsIDApOworICAg
ICAgICAgICAgc3R5bGVBdHRyaWJ1dGVzLT5zZXRPYmplY3QoYXR0cmlidXRlTmFtZS51dGY4KCku
ZGF0YSgpLCBidWlsZE9iamVjdEZvclN0eWxlKGF0dHJpYnV0ZS0+c3R5bGUoKSwgIiIsIHByb3Bl
cnRpZXNJdCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuaAppbmRleCBlYjYwMTNiLi40YTU0NWVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU0FnZW50LmgKQEAgLTU2LDkgKzU2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJbnNwZWN0b3JDU1NBZ2VudChkb21BZ2VudCwgZnJvbnRlbmQpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9y
U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgZnVsbFN0eWxlSWQsIENT
U1N0eWxlU291cmNlRGF0YSogPSAwKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0
cmluZyYgZnVsbFN0eWxlSWQsIEZyb250ZW5kUHJvcGVydHlJdGVyYXRvciYgcHJvcGVydGllc0l0
LCBDU1NTdHlsZVNvdXJjZURhdGEqID0gMCk7CiAgICAgc3RhdGljIENTU1N0eWxlU2hlZXQqIHBh
cmVudFN0eWxlU2hlZXQoU3R5bGVCYXNlKik7CiAgICAgc3RhdGljIENTU1N0eWxlUnVsZSogYXND
U1NTdHlsZVJ1bGUoU3R5bGVCYXNlKik7CisgICAgc3RhdGljIHZvaWQgcG9wdWxhdGVTb3VyY2VB
d2FyZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFZlY3RvcjxDU1NQcm9w
ZXJ0eVNvdXJjZURhdGE+KiBzb3VyY2VQcm9wZXJ0eURhdGEsIFZlY3RvcjxTb3VyY2VBd2FyZVBy
b3BlcnR5PiogcmVzdWx0KTsKIAogICAgIEluc3BlY3RvckNTU0FnZW50KEluc3BlY3RvckRPTUFn
ZW50KiBkb21BZ2VudCwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKTsKICAgICB+SW5zcGVj
dG9yQ1NTQWdlbnQoKTsKQEAgLTc0LDcgKzc1LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0U3R5
bGVTaGVldDIoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4qIHJlc3VsdCk7CiAgICAgdm9pZCBzZXRTdHlsZVNoZWV0VGV4dDIoY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiAgICAgdm9pZCBzZXRTdHlsZVRleHQy
KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiByZXN1bHQpOwotICAgIHZvaWQgdG9nZ2xlUHJvcGVydHkyKGNvbnN0IFN0cmlu
ZyYgc3R5bGVJZCwgbG9uZyBwcm9wZXJ0eU9yZGluYWwsIGJvb2wgZGlzYWJsZWQpOworICAgIHZv
aWQgdG9nZ2xlUHJvcGVydHkyKGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgbG9uZyBwcm9wZXJ0eU9y
ZGluYWwsIGJvb2wgZGlzYWJsZSk7CiAgICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IyKGNvbnN0IFN0
cmluZyYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiByZXN1bHQpOwogICAgIHZvaWQgYWRkUnVsZTIoY29uc3QgbG9uZyBjb250ZXh0Tm9kZUlk
LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQp
OwogICAgIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+KiByZXN1bHQpOwpAQCAtODIsMTEgKzgzLDExIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+ID4gSWRU
b0luc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlU2hlZXQq
LCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gPiBDU1NTdHlsZVNoZWV0VG9JbnNwZWN0b3JT
dHlsZVNoZWV0OwotICAgIHR5cGVkZWYgSGFzaE1hcDxOb2RlKiwgUmVmUHRyPEluc3BlY3RvclN0
eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gPiBOb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0OyAvLyBm
b3IgYm9ndXMgInN0eWxlc2hlZXRzIiB3aXRoIGlubGluZSBub2RlIHN0eWxlcworICAgIHR5cGVk
ZWYgSGFzaE1hcDxOb2RlKiwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZT4gPiBOb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0OyAvLyBib2d1cyAic3R5bGVzaGVldHMiIHdp
dGggZWxlbWVudHMnIGlubGluZSBzdHlsZXMKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPERv
Y3VtZW50PiwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+ID4gRG9jdW1lbnRUb1ZpYUluc3Bl
Y3RvclN0eWxlU2hlZXQ7IC8vICJ2aWEgaW5zcGVjdG9yIiBzdHlsZXNoZWV0cwogCiAgICAgc3Rh
dGljIEVsZW1lbnQqIGlubGluZVN0eWxlRWxlbWVudChDU1NTdHlsZURlY2xhcmF0aW9uKik7Ci0g
ICAgc3RhdGljIHZvaWQgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENTU1N0eWxl
RGVjbGFyYXRpb24qLCBJbnNwZWN0b3JPYmplY3QqIHJlc3VsdCwgVmVjdG9yPENTU1Byb3BlcnR5
U291cmNlRGF0YT4qIHByb3BlcnR5RGF0YSk7CisgICAgc3RhdGljIHZvaWQgcG9wdWxhdGVPYmpl
Y3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlc3VsdCwgRnJvbnRlbmRQcm9wZXJ0eUl0ZXJhdG9yJiBwcm9wZXJ0aWVzSXQpOwogICAg
IHN0YXRpYyBTdHJpbmcgc2hvcnRoYW5kVmFsdWUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0
IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpOwogICAgIHN0YXRpYyBTdHJpbmcgc2hvcnRoYW5k
UHJpb3JpdHkoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJv
cGVydHkpOwogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb25naGFuZFByb3BlcnRpZXMoQ1NT
U3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpOwpAQCAt
MTEzLDYgKzExNCw3IEBAIHByaXZhdGU6CiAgICAgQ1NTU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5
bGVTaGVldCBtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgTm9kZVRv
SW5zcGVjdG9yU3R5bGVTaGVldCBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgRG9j
dW1lbnRUb1ZpYUluc3BlY3RvclN0eWxlU2hlZXQgbV9kb2N1bWVudFRvSW5zcGVjdG9yU3R5bGVT
aGVldDsKKyAgICBEaXNhYmxlZFByb3BlcnR5U3RvcmUgbV9kaXNhYmxlZFByb3BlcnR5U3RvcmU7
CiAKICAgICBsb25nIG1fbGFzdFN0eWxlU2hlZXRJZDsKICAgICBsb25nIG1fbGFzdFJ1bGVJZDsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggOWVlMWY1MS4u
NDg2YzMwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVl
dC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAg
LTk4LDYgKzk4LDgwIEBAIFJlZlB0cjxXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0YT4gUGFyc2Vk
U3R5bGVTaGVldDo6cnVsZVNvdXJjZURhdGFBdCh1bnNpZ25lZCBpCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorRnJvbnRlbmRQcm9wZXJ0eUl0ZXJhdG9yOjpGcm9udGVuZFByb3BlcnR5SXRlcmF0
b3IoY29uc3QgVmVjdG9yPFNvdXJjZUF3YXJlUHJvcGVydHk+JiBsaXZlUHJvcGVydGllcywgRGlz
YWJsZWRQcm9wZXJ0eVN0b3JlKiBkaXNhYmxlZFByb3BlcnRpZXMpCisgICAgOiBtX2xpdmVQcm9w
ZXJ0aWVzKGxpdmVQcm9wZXJ0aWVzKQorICAgICwgbV9kaXNhYmxlZFByb3BlcnRpZXMoZGlzYWJs
ZWRQcm9wZXJ0aWVzKQorICAgICwgbV9jdXJyZW50SW5kZXgoMCkKKyAgICAsIG1fY3VycmVudERp
c2FibGVkSW5kZXgoMCkKKyAgICAsIG1fc2xvdFBvc2l0aW9uKDApCisgICAgLCBtX3Bvc2l0aW9u
SW5TbG90KDApCit7CisgICAgLy8gUHJlY29uZGl0aW9uOiBtX2Rpc2FibGVkUHJvcGVydGllcyBp
cyBzb3J0ZWQgd3J0IHRoZSBwcm9wZXJ0eSBvcmRpbmFsLgorICAgIG1fbGl2ZUl0ID0gbV9saXZl
UHJvcGVydGllcy5iZWdpbigpOworICAgIG1fZGlzYWJsZWRJdCA9IG1fZGlzYWJsZWRQcm9wZXJ0
aWVzID8gbV9kaXNhYmxlZFByb3BlcnRpZXMtPmJlZ2luKCkgOiAwOworICAgIG1fZGlzYWJsZWRT
bG90SXQgPSBtX2Rpc2FibGVkUHJvcGVydGllcyAmJiBtX2Rpc2FibGVkSXQgIT0gbV9kaXNhYmxl
ZFByb3BlcnRpZXMtPmVuZCgpID8gbV9kaXNhYmxlZEl0LT5zZWNvbmQuYmVnaW4oKSA6IDA7Cit9
CisKK0Zyb250ZW5kUHJvcGVydHlEYXRhIEZyb250ZW5kUHJvcGVydHlJdGVyYXRvcjo6b3BlcmF0
b3IqKCkgY29uc3QKK3sKKyAgICBpZiAoYXREaXNhYmxlZFByb3BlcnR5KCkpCisgICAgICAgIHJl
dHVybiBGcm9udGVuZFByb3BlcnR5RGF0YSgqbV9kaXNhYmxlZFNsb3RJdCwgdHJ1ZSk7CisgICAg
ZWxzZSBpZiAobV9saXZlSXQgIT0gbV9saXZlUHJvcGVydGllcy5lbmQoKSkKKyAgICAgICAgcmV0
dXJuIEZyb250ZW5kUHJvcGVydHlEYXRhKCptX2xpdmVJdCwgZmFsc2UpOworCisgICAgcmV0dXJu
IEZyb250ZW5kUHJvcGVydHlEYXRhKFNvdXJjZUF3YXJlUHJvcGVydHkoZW1wdHlDU1NQcm9wZXJ0
eVNvdXJjZURhdGEsIGZhbHNlKSwgZmFsc2UpOworfQorCitGcm9udGVuZFByb3BlcnR5SXRlcmF0
b3ImIEZyb250ZW5kUHJvcGVydHlJdGVyYXRvcjo6b3BlcmF0b3IrKygpCit7CisgICAgKyttX2N1
cnJlbnRJbmRleDsKKyAgICBpZiAoYXREaXNhYmxlZFByb3BlcnR5KCkpIHsKKyAgICAgICAgLy8g
U2hvdWxkIHBpY2sgYSBkaXNhYmxlZCByYXRoZXIgdGhhbiBlbmFibGVkIHByb3BlcnR5LgorICAg
ICAgICBpZiAobV9kaXNhYmxlZFNsb3RJdCAhPSBtX2Rpc2FibGVkSXQtPnNlY29uZC5lbmQoKSkg
eworICAgICAgICAgICAgLy8gbW92ZSBmb3J3YXJkIGluIHRoZSBzbG90IHZlY3RvcgorICAgICAg
ICAgICAgKyttX2Rpc2FibGVkU2xvdEl0OworICAgICAgICAgICAgKyttX3Bvc2l0aW9uSW5TbG90
OworICAgICAgICB9CisgICAgICAgIHdoaWxlIChtX2Rpc2FibGVkU2xvdEl0ID09IG1fZGlzYWJs
ZWRJdC0+c2Vjb25kLmVuZCgpKSB7CisgICAgICAgICAgICAvLyBtb3ZlIHRvIHRoZSBuZXh0IHNs
b3Qgc3RhcnQKKyAgICAgICAgICAgICsrbV9zbG90UG9zaXRpb247CisgICAgICAgICAgICArK21f
Y3VycmVudERpc2FibGVkSW5kZXg7CisgICAgICAgICAgICArK21fZGlzYWJsZWRJdDsKKyAgICAg
ICAgICAgIG1fcG9zaXRpb25JblNsb3QgPSAwOworICAgICAgICAgICAgaWYgKG1fZGlzYWJsZWRJ
dCAhPSBtX2Rpc2FibGVkUHJvcGVydGllcy0+ZW5kKCkpCisgICAgICAgICAgICAgICAgbV9kaXNh
YmxlZFNsb3RJdCA9IG1fZGlzYWJsZWRJdC0+c2Vjb25kLmJlZ2luKCk7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBtX2Rpc2FibGVkU2xvdEl0ID0gMDsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9s
aXZlSXQgIT0gbV9saXZlUHJvcGVydGllcy5lbmQoKSkgeworICAgICAgICAvLyBtb3ZlIHRvIHRo
ZSBuZXh0IGxpdmUgcHJvcGVydHkKKyAgICAgICAgKyttX2N1cnJlbnREaXNhYmxlZEluZGV4Owor
ICAgICAgICArK21fbGl2ZUl0OworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3ZvaWQg
RnJvbnRlbmRQcm9wZXJ0eUl0ZXJhdG9yOjplbmFibGVDdXJyZW50KCkKK3sKKyAgICBBU1NFUlQo
YXREaXNhYmxlZFByb3BlcnR5KCkpOworICAgIG1fZGlzYWJsZWRJdC0+c2Vjb25kLnJlbW92ZSht
X3Bvc2l0aW9uSW5TbG90KTsKKyAgICBpZiAobV9kaXNhYmxlZEl0LT5zZWNvbmQuaXNFbXB0eSgp
KQorICAgICAgICBtX2Rpc2FibGVkUHJvcGVydGllcy0+cmVtb3ZlKG1fc2xvdFBvc2l0aW9uKTsK
K30KKworYm9vbCBGcm9udGVuZFByb3BlcnR5SXRlcmF0b3I6OmF0RGlzYWJsZWRQcm9wZXJ0eSgp
IGNvbnN0Cit7CisgICAgLy8gQSBkaXNhYmxlZCBwcm9wZXJ0eSBzaG91bGQgYmUgcmV0dXJuZWQg
aWY6CisgICAgLy8gLSBkaXNhYmxlZCBwcm9wZXJ0eSBpdGVyYXRvcnMgcG9pbnQgdG8gYSB2YWxp
ZCBkaXNhYmxlZCBwcm9wZXJ0eSBBTkQKKyAgICAvLyAtIEFOWSBvZiB0aGUgZm9sbG93aW5nIGhv
bGRzIHRydWU6CisgICAgLy8gICAgIC0gY3VycmVudCBkaXNhYmxlZCBwcm9wZXJ0eSBzbG90IGlu
ZGV4IGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IHByb3BlcnR5ICJjaHVuayIgb3JkaW5hbCAo
YSBjaHVuayBpcyBlaXRoZXIgYSBzaW5nbGUgZW5hYmxlZCBwcm9wZXJ0eSBvciBhbGwgZGlzYWJs
ZWQgcHJvcGVydGllcyBpbiB0aGUgc2FtZSBzbG90KSBPUgorICAgIC8vICAgICAtIHRoZXJlIGFy
ZSBubyBtb3JlIGVuYWJsZWQgcHJvcGVydGllcyBPUgorICAgIC8vICAgICAtIHRoZXJlIGFyZSBv
bmx5IHN0eWxlLWJhc2VkIGVuYWJsZWQgcHJvcGVydGllcyByZW1haW5pbmcKKyAgICByZXR1cm4g
bV9kaXNhYmxlZFByb3BlcnRpZXMgJiYgbV9kaXNhYmxlZEl0ICE9IG1fZGlzYWJsZWRQcm9wZXJ0
aWVzLT5lbmQoKSAmJiBtX2Rpc2FibGVkU2xvdEl0ICE9IG1fZGlzYWJsZWRJdC0+c2Vjb25kLmVu
ZCgpICYmIChtX2N1cnJlbnREaXNhYmxlZEluZGV4ID09IG1fZGlzYWJsZWRJdC0+Zmlyc3QgfHwg
bV9saXZlSXQgPT0gbV9saXZlUHJvcGVydGllcy5lbmQoKSB8fCAhbV9saXZlSXQtPnNlY29uZCk7
Cit9CisKIEluc3BlY3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoY29uc3QgU3Ry
aW5nJiBpZCwgQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIGNvbnN0IFN0cmluZyYgb3Jp
Z2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMKQogICAgIDogbV9pZChpZCkKICAgICAsIG1f
cGFnZVN0eWxlU2hlZXQocGFnZVN0eWxlU2hlZXQpCkBAIC0xOTcsNiArMjcxLDY2IEBAIENTU1N0
eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZUZvcklkKGNvbnN0IFN0cmluZyYgaWQp
IGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKK0Zyb250ZW5kUHJvcGVydHlJdGVyYXRvciBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjphbGxQcm9wZXJ0aWVzKGNvbnN0IFN0cmluZyYgc3R5bGVJZCkKK3sK
KyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHN0eWxlRm9ySWQoc3R5bGVJZCk7Cisg
ICAgLy8gRklYTUU6IGNoYW5nZSB0aGlzIHRvIHJldHVybiBib29sZWFuIHN1Y2Nlc3MgYW5kIGhh
dmUgYW4gb3V0cHV0IHBhcmFtZXRlcj8KKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm4g
RnJvbnRlbmRQcm9wZXJ0eUl0ZXJhdG9yKFZlY3RvcjxTb3VyY2VBd2FyZVByb3BlcnR5PigpLCAw
KTsKKworICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YTsKKyAgICBpZiAo
ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCisgICAgICAgIHNvdXJjZURhdGEgPSBydWxlU291cmNl
RGF0YUZvcihzdHlsZSk7CisKKyAgICBWZWN0b3I8U291cmNlQXdhcmVQcm9wZXJ0eT4gc291cmNl
QXdhcmVQcm9wZXJ0aWVzOworICAgIEluc3BlY3RvckNTU0FnZW50Ojpwb3B1bGF0ZVNvdXJjZUF3
YXJlUHJvcGVydGllcyhzdHlsZSwgc291cmNlRGF0YSA/ICYoc291cmNlRGF0YS0+c3R5bGVTb3Vy
Y2VEYXRhLT5wcm9wZXJ0eURhdGEpIDogMCwgJnNvdXJjZUF3YXJlUHJvcGVydGllcyk7CisKKyAg
ICByZXR1cm4gRnJvbnRlbmRQcm9wZXJ0eUl0ZXJhdG9yKHNvdXJjZUF3YXJlUHJvcGVydGllcywg
ZGlzYWJsZWRQcm9wZXJ0eVN0b3JlRm9yU3R5bGUoc3R5bGUsIGZhbHNlKSk7Cit9CisKK2Jvb2wg
SW5zcGVjdG9yU3R5bGVTaGVldDo6dG9nZ2xlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBzdHlsZUlk
LCB1bnNpZ25lZCBnbG9iYWxJbmRleCwgYm9vbCBkaXNhYmxlKQoreworICAgIENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlID0gc3R5bGVGb3JJZChzdHlsZUlkKTsKKyAgICBpZiAoIXN0eWxlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBEaXNhYmxlZFByb3BlcnR5U3RvcmUqIHN0b3Jl
ID0gZGlzYWJsZWRQcm9wZXJ0eVN0b3JlRm9yU3R5bGUoc3R5bGUsIGRpc2FibGUpOworICAgIGlm
ICghc3RvcmUgJiYgIWRpc2FibGUpIC8vIFNob3J0Y3V0OiBlbmFibGUgd2hlbiB0aGVyZSBhcmUg
bm8gZGlzYWJsZWQgcHJvcGVydGllcy4KKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICB1bnNp
Z25lZCBjdXJJbmRleCA9IDA7CisgICAgRnJvbnRlbmRQcm9wZXJ0eUl0ZXJhdG9yIGl0ID0gYWxs
UHJvcGVydGllcyhzdHlsZUlkKTsKKyAgICBmb3IgKDsgIWl0LmF0RW5kKCkgJiYgY3VySW5kZXgg
PCBnbG9iYWxJbmRleDsgKytpdCwgKytjdXJJbmRleCkgOworCisgICAgaWYgKGN1ckluZGV4ICE9
IGdsb2JhbEluZGV4KQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFdyb25nIHByb3BlcnR5IGlu
ZGV4LgorCisgICAgaWYgKGRpc2FibGUgPT0gKCppdCkuZGlzYWJsZWQpCisgICAgICAgIHJldHVy
biB0cnVlOyAvLyBBdHRlbXB0aW5nIGFuIGlkZW1wb3RlbnQgb3BlcmF0aW9uLgorCisgICAgaWYg
KCFkaXNhYmxlKSB7CisgICAgICAgIGl0LmVuYWJsZUN1cnJlbnQoKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgdW5zaWduZWQgZW50cnlJbmRleCA9IDA7CisgICAgU291cmNl
QXdhcmVQcm9wZXJ0eSBwcm9wZXJ0eVRvRGlzYWJsZSgoKml0KS5wcm9wZXJ0eSwgKCppdCkuaGFz
U291cmNlKTsKKyAgICBmb3IgKERpc2FibGVkUHJvcGVydHlTdG9yZTo6aXRlcmF0b3IgZW50cnlJ
dCA9IHN0b3JlLT5iZWdpbigpLCBlbnRyeUVuZCA9IHN0b3JlLT5lbmQoKTsgZW50cnlJdCAhPSBl
bnRyeUVuZDsgKytlbnRyeUl0LCArK2VudHJ5SW5kZXgpIHsKKyAgICAgICAgaWYgKCgqZW50cnlJ
dCkuZmlyc3QgPT0gZ2xvYmFsSW5kZXgpIHsKKyAgICAgICAgICAgICgqZW50cnlJdCkuc2Vjb25k
LmFwcGVuZChwcm9wZXJ0eVRvRGlzYWJsZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoKCplbnRyeUl0KS5maXJzdCA+IGdsb2JhbEluZGV4KSB7Cisg
ICAgICAgICAgICBzdG9yZS0+aW5zZXJ0KGVudHJ5SW5kZXgsIERpc2FibGVkUHJvcGVydGllc1Ns
b3QoZ2xvYmFsSW5kZXgsIFZlY3RvcjxTb3VyY2VBd2FyZVByb3BlcnR5PigpKSk7CisgICAgICAg
ICAgICBzdG9yZS0+YXQoZW50cnlJbmRleCkuc2Vjb25kLmFwcGVuZChwcm9wZXJ0eVRvRGlzYWJs
ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzdG9y
ZS0+YXBwZW5kKERpc2FibGVkUHJvcGVydGllc1Nsb3QoZ2xvYmFsSW5kZXgsIFZlY3RvcjxTb3Vy
Y2VBd2FyZVByb3BlcnR5PigpKSk7CisgICAgc3RvcmUtPmxhc3QoKS5zZWNvbmQuYXBwZW5kKHBy
b3BlcnR5VG9EaXNhYmxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVl
dCgpCiB7CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhZ2VTdHlsZVNoZWV0KCk7
CkBAIC0yMDQsMTMgKzMzOCwxMyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVj
dG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCkKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJpZCIsIGlkKCkpOworICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCBpZCgpKTsKICAgICByZXN1bHQtPnNldEJv
b2xlYW4oImRpc2FibGVkIiwgc3R5bGVTaGVldC0+ZGlzYWJsZWQoKSk7CiAgICAgcmVzdWx0LT5z
ZXRTdHJpbmcoImhyZWYiLCBzdHlsZVNoZWV0LT5ocmVmKCkpOwogICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJ0aXRsZSIsIHN0eWxlU2hlZXQtPnRpdGxlKCkpOwogICAgIFJlZlB0cjxDU1NSdWxlTGlz
dD4gY3NzUnVsZUxpc3QgPSBDU1NSdWxlTGlzdDo6Y3JlYXRlKHN0eWxlU2hlZXQsIHRydWUpOwog
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY3NzUnVsZXMgPSBidWlsZEFycmF5Rm9yUnVsZUxp
c3QoY3NzUnVsZUxpc3QuZ2V0KCkpOwotICAgIHJlc3VsdC0+c2V0QXJyYXkoImNzc1J1bGVzIiwg
Y3NzUnVsZXMucmVsZWFzZSgpKTsKKyAgICByZXN1bHQtPnNldEFycmF5KCJydWxlcyIsIGNzc1J1
bGVzLnJlbGVhc2UoKSk7CiAKICAgICBTdHJpbmcgc3R5bGVTaGVldFRleHQ7CiAgICAgYm9vbCBz
dWNjZXNzID0gdGV4dCgmc3R5bGVTaGVldFRleHQpOwpAQCAtMjI4LDE1ICszNjIsMTQgQEAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0
Rm9yUnVsZShDU1NTdHlsZVJ1bGUKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNl
bGVjdG9yVGV4dCIsIHJ1bGUtPnNlbGVjdG9yVGV4dCgpKTsKLSAgICByZXN1bHQtPnNldFN0cmlu
ZygiY3NzVGV4dCIsIHJ1bGUtPmNzc1RleHQoKSk7CiAgICAgcmVzdWx0LT5zZXROdW1iZXIoInNv
dXJjZUxpbmUiLCBydWxlLT5zb3VyY2VMaW5lKCkpOwogICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJk
b2N1bWVudFVSTCIsIG1fZG9jdW1lbnRVUkwpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJvcmln
aW4iLCBtX29yaWdpbik7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJlbnRTdHls
ZVNoZWV0VmFsdWUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmVudFN0eWxl
U2hlZXRWYWx1ZS0+c2V0U3RyaW5nKCJpZCIsIGlkKCkpOwogICAgIHBhcmVudFN0eWxlU2hlZXRW
YWx1ZS0+c2V0U3RyaW5nKCJocmVmIiwgc3R5bGVTaGVldC0+aHJlZigpKTsKICAgICByZXN1bHQt
PnNldE9iamVjdCgicGFyZW50U3R5bGVTaGVldCIsIHBhcmVudFN0eWxlU2hlZXRWYWx1ZS5yZWxl
YXNlKCkpOwotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJvcmlnaW4iLCBtX29yaWdpbik7CiAKICAg
ICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3VyZVBh
cnNlZERhdGFSZWFkeSgpKQpAQCAtMjQ4LDcgKzM4MSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVS
dWxlCiAKICAgICByZXN1bHQtPnNldE9iamVjdCgic3R5bGUiLCBidWlsZE9iamVjdEZvclN0eWxl
KHJ1bGUtPnN0eWxlKCkpKTsKICAgICBpZiAoY2FuQmluZCgpKQotICAgICAgICByZXN1bHQtPnNl
dFN0cmluZygiaWQiLCBmdWxsUnVsZUlkKHJ1bGUpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJp
bmcoInJ1bGVJZCIsIGZ1bGxSdWxlSWQocnVsZSkpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlKCk7CiB9CkBAIC0yNTksOCArMzkyLDE3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjCiAg
ICAgaWYgKGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKQogICAgICAgICBzb3VyY2VEYXRhID0gcnVs
ZVNvdXJjZURhdGFGb3Ioc3R5bGUpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGUsIGZ1bGxT
dHlsZUlkKHN0eWxlKSwgc291cmNlRGF0YSA/IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS5n
ZXQoKSA6IDApOwotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwYXJlbnRTdHlsZVNoZWV0SWQiLCBp
ZCgpKTsKKyAgICBGcm9udGVuZFByb3BlcnR5SXRlcmF0b3IgaXQgPSBhbGxQcm9wZXJ0aWVzKHJ1
bGVPclN0eWxlSWQoc3R5bGUpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZSwgZnVsbFN0eWxl
SWQoc3R5bGUpLCBpdCwgc291cmNlRGF0YSA/IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS5n
ZXQoKSA6IDApOworICAgIGlmIChzb3VyY2VEYXRhKSB7CisgICAgICAgIFN0cmluZyB0ZXh0Owor
ICAgICAgICBib29sIHN1Y2Nlc3MgPSBzdHlsZVNoZWV0VGV4dCgmdGV4dCk7CisgICAgICAgIGlm
IChzdWNjZXNzKSB7CisgICAgICAgICAgICBjb25zdCBTb3VyY2VSYW5nZSYgYm9keVJhbmdlID0g
c291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZTsKKyAgICAgICAgICAg
IHJlc3VsdC0+c2V0U3RyaW5nKCJjc3NUZXh0IiwgdGV4dC5zdWJzdHJpbmcoYm9keVJhbmdlLnN0
YXJ0LCBib2R5UmFuZ2UuZW5kIC0gYm9keVJhbmdlLnN0YXJ0KSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIGlkKCkpOwogICAgIHJldHVy
biByZXN1bHQucmVsZWFzZSgpOwogfQogCkBAIC0zMTIsNiArNDU0LDE3IEBAIGJvb2wgSW5zcGVj
dG9yU3R5bGVTaGVldDo6ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkKICAgICByZXR1cm4gZW5zdXJl
VGV4dCgpICYmIGVuc3VyZVNvdXJjZURhdGEocGFnZVN0eWxlU2hlZXQoKS0+b3duZXJOb2RlKCkp
OwogfQogCitEaXNhYmxlZFByb3BlcnR5U3RvcmUqIEluc3BlY3RvclN0eWxlU2hlZXQ6OmRpc2Fi
bGVkUHJvcGVydHlTdG9yZUZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBib29s
IGNyZWF0ZUlmQWJzZW50KQoreworICAgIEhhc2hNYXA8Q1NTU3R5bGVEZWNsYXJhdGlvbiosIERp
c2FibGVkUHJvcGVydHlTdG9yZT46Oml0ZXJhdG9yIGl0ID0gbV9zdHlsZURpc2FibGVkUHJvcGVy
dHlTdG9yZXMuZmluZChzdHlsZSk7CisgICAgaWYgKGl0ID09IG1fc3R5bGVEaXNhYmxlZFByb3Bl
cnR5U3RvcmVzLmVuZCgpKSB7CisgICAgICAgIGlmICghY3JlYXRlSWZBYnNlbnQpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgaXQgPSBtX3N0eWxlRGlzYWJsZWRQcm9wZXJ0eVN0b3Jl
cy5zZXQoc3R5bGUsIERpc2FibGVkUHJvcGVydHlTdG9yZSgpKS5maXJzdDsKKyAgICB9CisgICAg
cmV0dXJuICYoaXQtPnNlY29uZCk7Cit9CisKIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6dGV4
dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAoIWVuc3VyZVRleHQoKSkKQEAgLTUx
Myw4ICs2NjYsNyBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3Rv
clN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShjb25zdCBTdHJpbgogCiBib29sIEluc3BlY3RvclN0
eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6c2V0U3R5bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJ
ZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIEFTU0VSVChzdHlsZUlkID09ICIwIik7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0eWxlSWQpOworICAgIEFTU0VSVF9VTlVTRUQoc3R5bGVJZCwgc3R5
bGVJZCA9PSAiMCIpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIG1fZWxlbWVudC0+
c2V0QXR0cmlidXRlKCJzdHlsZSIsIHRleHQsIGVjKTsKICAgICBtX3J1bGVTb3VyY2VEYXRhLmNs
ZWFyKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKaW5kZXggMzhhYjc3
Ny4uZmYyMzRhZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaApAQCAt
MjYsMTYgKzI2LDE0IEBACiAjZGVmaW5lIEluc3BlY3RvclN0eWxlU2hlZXRfaAogCiAjaW5jbHVk
ZSAiQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKIGNsYXNzIFBhcnNlZFN0eWxlU2hlZXQ7CiAKQEAgLTQzLDExICs0MSw1
NCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1J1bGVMaXN0OwogY2xhc3MgQ1NT
U3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBEb2N1bWVudDsK
IGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBOb2RlOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAor
dHlwZWRlZiBzdGQ6OnBhaXI8Q1NTUHJvcGVydHlTb3VyY2VEYXRhLCBib29sPiBTb3VyY2VBd2Fy
ZVByb3BlcnR5OwordHlwZWRlZiBzdGQ6OnBhaXI8dW5zaWduZWQsIFZlY3RvcjxTb3VyY2VBd2Fy
ZVByb3BlcnR5PiA+IERpc2FibGVkUHJvcGVydGllc1Nsb3Q7Cit0eXBlZGVmIFZlY3RvcjxEaXNh
YmxlZFByb3BlcnRpZXNTbG90PiBEaXNhYmxlZFByb3BlcnR5U3RvcmU7CisKK3N0cnVjdCBGcm9u
dGVuZFByb3BlcnR5RGF0YSB7CisgICAgRnJvbnRlbmRQcm9wZXJ0eURhdGEoU291cmNlQXdhcmVQ
cm9wZXJ0eSBzb3VyY2VBd2FyZVByb3BlcnR5LCBib29sIGRpc2FibGVkKQorICAgICAgICA6IHBy
b3BlcnR5KHNvdXJjZUF3YXJlUHJvcGVydHkuZmlyc3QpCisgICAgICAgICwgaGFzU291cmNlKHNv
dXJjZUF3YXJlUHJvcGVydHkuc2Vjb25kKQorICAgICAgICAsIGRpc2FibGVkKGRpc2FibGVkKQor
ICAgIHsKKyAgICB9CisKKyAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEgcHJvcGVydHk7CisgICAg
Ym9vbCBoYXNTb3VyY2U7CisgICAgYm9vbCBkaXNhYmxlZDsKK307CisKK2NsYXNzIEZyb250ZW5k
UHJvcGVydHlJdGVyYXRvciB7CitwdWJsaWM6CisgICAgRnJvbnRlbmRQcm9wZXJ0eUl0ZXJhdG9y
KGNvbnN0IFZlY3RvcjxTb3VyY2VBd2FyZVByb3BlcnR5PiYgbGl2ZVByb3BlcnRpZXMsIERpc2Fi
bGVkUHJvcGVydHlTdG9yZSogZGlzYWJsZWRQcm9wZXJ0aWVzKTsKKworICAgIEZyb250ZW5kUHJv
cGVydHlEYXRhIG9wZXJhdG9yKigpIGNvbnN0OworICAgIEZyb250ZW5kUHJvcGVydHlJdGVyYXRv
ciYgb3BlcmF0b3IrKygpOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcm9udGVuZFByb3Bl
cnR5SXRlcmF0b3ImIG90aGVySXQpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEluZGV4ID09IG90
aGVySXQubV9jdXJyZW50SW5kZXg7IH0KKyAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4g
KCFhdERpc2FibGVkUHJvcGVydHkoKSAmJiBtX2xpdmVJdCA9PSBtX2xpdmVQcm9wZXJ0aWVzLmVu
ZCgpKTsgfQorICAgIHZvaWQgZW5hYmxlQ3VycmVudCgpOworCitwcml2YXRlOgorICAgIGJvb2wg
YXREaXNhYmxlZFByb3BlcnR5KCkgY29uc3Q7CisKKyAgICBWZWN0b3I8U291cmNlQXdhcmVQcm9w
ZXJ0eT4gbV9saXZlUHJvcGVydGllczsKKyAgICBEaXNhYmxlZFByb3BlcnR5U3RvcmUqIG1fZGlz
YWJsZWRQcm9wZXJ0aWVzOworICAgIHVuc2lnbmVkIG1fY3VycmVudEluZGV4OworICAgIHVuc2ln
bmVkIG1fY3VycmVudERpc2FibGVkSW5kZXg7CisgICAgdW5zaWduZWQgbV9zbG90UG9zaXRpb247
CisgICAgdW5zaWduZWQgbV9wb3NpdGlvbkluU2xvdDsKKyAgICBWZWN0b3I8U291cmNlQXdhcmVQ
cm9wZXJ0eT46Oml0ZXJhdG9yIG1fbGl2ZUl0OworICAgIFZlY3RvcjxTb3VyY2VBd2FyZVByb3Bl
cnR5Pjo6aXRlcmF0b3IgbV9kaXNhYmxlZFNsb3RJdDsKKyAgICBEaXNhYmxlZFByb3BlcnR5U3Rv
cmU6Oml0ZXJhdG9yIG1fZGlzYWJsZWRJdDsKK307CisKIGNsYXNzIEluc3BlY3RvclN0eWxlU2hl
ZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JTdHlsZVNoZWV0PiB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gY3JlYXRlKGNvbnN0IFN0
cmluZyYgaWQsIENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBjb25zdCBTdHJpbmcmIG9y
aWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCkKQEAgLTY0LDYgKzEwNSw4IEBAIHB1Ymxp
YzoKICAgICBib29sIHNldFJ1bGVTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHJ1bGVJZCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3Rvcik7CiAgICAgQ1NTU3R5bGVSdWxlKiBhZGRSdWxlKGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3IpOwogICAgIENTU1N0eWxlUnVsZSogcnVsZUZvcklkKGNvbnN0IFN0cmluZyYp
IGNvbnN0OworICAgIEZyb250ZW5kUHJvcGVydHlJdGVyYXRvciBhbGxQcm9wZXJ0aWVzKGNvbnN0
IFN0cmluZyYgc3R5bGVJZCk7CisgICAgYm9vbCB0b2dnbGVQcm9wZXJ0eShjb25zdCBTdHJpbmcm
IHN0eWxlSWQsIHVuc2lnbmVkIGdsb2JhbEluZGV4LCBib29sIGRpc2FibGUpOwogICAgIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKTsKICAgICBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVs
ZSopOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclN0eWxl
KENTU1N0eWxlRGVjbGFyYXRpb24qKTsKQEAgLTc4LDYgKzEyMSw3IEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgcnVs
ZUluZGV4QnlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpOworICAgIHZpcnR1YWwgRGlzYWJsZWRQcm9wZXJ0
eVN0b3JlKiBkaXNhYmxlZFByb3BlcnR5U3RvcmVGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9u
KiwgYm9vbCBjcmVhdGVJZkFic2VudCk7CiAKIHByaXZhdGU6CiAgICAgYm9vbCB0ZXh0KFN0cmlu
ZyogcmVzdWx0KSBjb25zdDsKQEAgLTEwMSw2ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIFN0cmlu
ZyBtX2RvY3VtZW50VVJMOwogICAgIGJvb2wgbV9pc1JldmFsaWRhdGluZzsKICAgICBQYXJzZWRT
dHlsZVNoZWV0KiBtX3BhcnNlZFN0eWxlU2hlZXQ7CisgICAgSGFzaE1hcDxDU1NTdHlsZURlY2xh
cmF0aW9uKiwgRGlzYWJsZWRQcm9wZXJ0eVN0b3JlPiBtX3N0eWxlRGlzYWJsZWRQcm9wZXJ0eVN0
b3JlczsKIH07CiAKIGNsYXNzIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSA6IHB1
YmxpYyBJbnNwZWN0b3JTdHlsZVNoZWV0IHsKQEAgLTExMSwxNCArMTU2LDE1IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoY29uc3QgU3Ry
aW5nJiBpZCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBvcmlnaW4pOwotICAgIHZp
cnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChjb25zdCBTdHJpbmcmIGlkKSBj
b25zdCB7IEFTU0VSVChpZCA9PSAiMCIpOyBVTlVTRURfUEFSQU0oaWQpOyByZXR1cm4gaW5saW5l
U3R5bGUoKTsgfQorICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChj
b25zdCBTdHJpbmcmIGlkKSBjb25zdCB7IEFTU0VSVF9VTlVTRUQoaWQsIGlkID09ICIwIik7IHJl
dHVybiBpbmxpbmVTdHlsZSgpOyB9CiAgICAgdmlydHVhbCBib29sIHNldFN0eWxlVGV4dChjb25z
dCBTdHJpbmcmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFy
YXRpb24qIHN0eWxlKSBjb25zdCB7IEFTU0VSVChzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsgVU5V
U0VEX1BBUkFNKHN0eWxlKTsgcmV0dXJuIG1fcnVsZVNvdXJjZURhdGE7IH0KKyAgICB2aXJ0dWFs
IFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUpIGNvbnN0IHsgQVNTRVJUX1VOVVNFRChzdHlsZSwgc3R5bGUgPT0gaW5s
aW5lU3R5bGUoKSk7IHJldHVybiBtX3J1bGVTb3VyY2VEYXRhOyB9CiAgICAgdmlydHVhbCB1bnNp
Z25lZCBydWxlSW5kZXhCeVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdCB7IHJldHVy
biAwOyB9CiAgICAgdmlydHVhbCBib29sIGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpOworICAgIHZp
cnR1YWwgRGlzYWJsZWRQcm9wZXJ0eVN0b3JlKiBkaXNhYmxlZFByb3BlcnR5U3RvcmVGb3JTdHls
ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgYm9vbCkgeyBBU1NFUlRfVU5VU0VEKHN0eWxl
LCBzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsgcmV0dXJuICZtX2Rpc2FibGVkUHJvcGVydHlTdG9y
ZTsgfQogCiBwcml2YXRlOgogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGlubGluZVN0eWxlKCkg
Y29uc3Q7CkBAIC0xMjYsNiArMTcyLDcgQEAgcHJpdmF0ZToKIAogICAgIEVsZW1lbnQqIG1fZWxl
bWVudDsKICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IG1fcnVsZVNvdXJjZURhdGE7Cisg
ICAgRGlzYWJsZWRQcm9wZXJ0eVN0b3JlIG1fZGlzYWJsZWRQcm9wZXJ0eVN0b3JlOwogfTsKIAog
I2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70860</attachid>
            <date>2010-10-15 06:04:40 -0700</date>
            <delta_ts>2010-10-19 05:52:05 -0700</delta_ts>
            <desc>[PATCH] Style fixed</desc>
            <filename>toggle.patch</filename>
            <type>text/plain</type>
            <size>34831</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IGI5YTNjOTczZjQ1N2QzZDI4MjJjMGVmYTIxYzE0M2MxMDQ0ZDEzNjAKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBGcmkgT2N0IDE1
IDE1OjE3OjU4IDIwMTAgKzA0MDAKCiAgICBQcmVwYXJlIHRvZ2dsZWQgcHJvcGVydGllcyBmb3Ig
Y29tbWl0CgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA4Mzc1MmNmLi4xYzkxODgwIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEwLTEwLTE1ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogSW1wbGVtZW50IElu
c3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eTIoKQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczMzkKKworICAgICAgICBEcml2ZS1ieTogZml4
ZXMgZm9yIHRoZSBXZWIgSW5zcGVjdG9yIFByb3RvY29sIGZvcm1hdC4KKworICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDU1NBZ2VudDo6cG9wdWxhdGVTb3VyY2VBd2FyZVByb3BlcnRpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlMik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkyKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojpwb3B1bGF0ZU9iamVjdFdpdGhTdHls
ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZFByb3BlcnR5SXRlcmF0b3I6OkZyb250ZW5kUHJv
cGVydHlJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZFByb3BlcnR5SXRlcmF0
b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZFByb3BlcnR5SXRlcmF0
b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRQcm9wZXJ0eUl0ZXJh
dG9yOjplbmFibGVDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyb250ZW5kUHJvcGVydHlJ
dGVyYXRvcjo6YXREaXNhYmxlZFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clN0eWxlU2hlZXQ6OmFsbFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
U3R5bGVTaGVldDo6dG9nZ2xlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmRpc2FibGVkUHJvcGVydHlTdG9yZUZvclN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZTo6c2V0U3R5bGVUZXh0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVl
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRQcm9wZXJ0eURhdGE6OkZyb250ZW5kUHJv
cGVydHlEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZyb250ZW5kUHJvcGVydHlJdGVyYXRvcjo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZFByb3BlcnR5SXRlcmF0b3I6
OmF0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVT
dHlsZTo6c3R5bGVGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU6OnJ1bGVTb3VyY2VEYXRhRm9yKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6ZGlzYWJsZWRQcm9wZXJ0eVN0b3JlRm9y
U3R5bGUpOgorCiAyMDEwLTEwLTE1ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCBlMGZhYjg1Li42NTg2OTZhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC00OSw3ICs0OSw4IEBACiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotCisv
LyBDdXJyZW50bHkgaW1wbGVtZW50ZWQgbW9kZWw6CisvLwogLy8gY3NzUHJvcGVydHkgPSB7CiAv
LyAgICBuYW1lICAgICAgICAgIDogPHN0cmluZz4sCiAvLyAgICB2YWx1ZSAgICAgICAgIDogPHN0
cmluZz4sCkBAIC03MCw4ICs3MSw4IEBACiAvLwogLy8KIC8vIGNzc1N0eWxlID0gewotLy8gICAg
c3R5bGVJZCAgICAgICAgIDogPG51bWJlcj4sIC8vIE9wdGlvbmFsCi0vLyAgICBzdHlsZVNoZWV0
SWQgICAgOiA8bnVtYmVyPiwgLy8gUGFyZW50OiAtMSBmb3IgaW5saW5lIHN0eWxlcyAoPGZvbyBz
dHlsZT0iLi4iPikKKy8vICAgIHN0eWxlSWQgICAgICAgICA6IDxzdHJpbmc+LCAvLyBPcHRpb25h
bAorLy8gICAgc3R5bGVTaGVldElkICAgIDogPG51bWJlcj4sIC8vIE9wdGlvbmFsCiAvLyAgICBj
c3NQcm9wZXJ0aWVzICAgOiBbCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgI2Nzc1Byb3Bl
cnR5LAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgpAQCAtODIsNjAgKzgzLDUyIEBA
CiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kTmFtZTIgOiBzaG9ydGhhbmRW
YWx1ZTIKIC8vICAgICAgICAgICAgICAgICAgICAgIH0sCiAvLyAgICBjc3NUZXh0ICAgICAgICAg
OiA8c3RyaW5nPiwgLy8gZGVjbGFyYXRpb24gdGV4dAotLy8gICAgcHJvcGVydGllcyAgICAgIDog
eyB9IC8vID8/PworLy8gICAgcHJvcGVydGllcyAgICAgIDogeyB3aWR0aCwgaGVpZ2h0IH0KIC8v
IH0KIC8vCi0vLyAvLyBUT0RPOgotLy8gLy8gLSBjb252ZXJ0IGRpc2FibGVkUHJvcGVydGllcyB0
byBlbmFibGVkIGZsYWcuCi0vLyAvLyAtIGNvbnZlcnQgd2lkdGgsIGhlaWdodCB0byBwcm9wZXJ0
aWVzCi0vLwogLy8gY3NzUnVsZSA9IHsKLS8vICAgIHJ1bGVJZCAgICAgICA6IDxudW1iZXI+LAot
Ly8gICAgc2VsZWN0b3JUZXh0IDogPHN0cmluZz4KLS8vICAgIHNvdXJjZVVSTCAgICA6IDxzdHJp
bmc+Ci0vLyAgICBzb3VyY2VMaW5lICAgOiA8c3RyaW5nPgotLy8gICAgc3R5bGVTaGVldElkIDog
PG51bWJlcj4gLy8gYWxzbyBmb3VuZCBpbiBzdHlsZQotLy8gICAgb3JpZ2luICAgICAgIDogPHN0
cmluZz4gLy8gIiIgfHwgInVzZXItYWdlbnQiIHx8ICJ1c2VyIiB8fCAiaW5zcGVjdG9yIgotLy8g
ICAgc3R5bGUgICAgICAgIDogI2Nzc1N0eWxlCisvLyAgICBydWxlSWQgICAgICAgICAgIDogPHN0
cmluZz4sCisvLyAgICBzZWxlY3RvclRleHQgICAgIDogPHN0cmluZz4KKy8vICAgIGRvY3VtZW50
VVJMICAgICAgOiA8c3RyaW5nPgorLy8gICAgcGFyZW50U3R5bGVTaGVldCA6IHsgaWQsIGhyZWYg
fQorLy8gICAgc291cmNlTGluZSAgICAgICA6IDxzdHJpbmc+CisvLyAgICBvcmlnaW4gICAgICAg
ICAgIDogPHN0cmluZz4gLy8gIiIgfHwgInVzZXItYWdlbnQiIHx8ICJ1c2VyIiB8fCAiaW5zcGVj
dG9yIgorLy8gICAgc3R5bGUgICAgICAgICAgICA6ICNjc3NTdHlsZQogLy8gfQogLy8KLS8vIC8v
IFRPRE86Ci0vLyAvLyAtIGZpeCBvcmlnaW4KLS8vIC8vIC0gYWRkIHNvdXJjZVVSTAotLy8gLy8g
LSBmaXggcGFyZW50U3R5bGVTaGVldElkCi0vLwogLy8gY3NzU3R5bGVTaGVldCA9IHsKIC8vICAg
IHN0eWxlU2hlZXRJZCAgIDogPG51bWJlcj4KIC8vICAgIGhyZWYgICAgICAgICAgIDogPHN0cmlu
Zz4KIC8vICAgIHRpdGxlICAgICAgICAgIDogPHN0cmluZz4KIC8vICAgIGRpc2FibGVkICAgICAg
IDogPGJvb2xlYW4+Ci0vLyAgICBkb2N1bWVudE5vZGVJZCA6IDxudW1iZXI+CiAvLyAgICBydWxl
cyAgICAgICAgICA6IFsKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICNjc3NSdWxlLAogLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgLi4uCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAj
Y3NzUnVsZQogLy8gICAgICAgICAgICAgICAgICAgICBdCisvLyAgICB0ZXh0ICAgICAgICAgICA6
IDxzdHJpbmc+IC8vIE9wdGlvbmFsIC0gd2hlbmV2ZXIgdGhlIHRleHQgaXMgYXZhaWxhYmxlIGZv
ciBhIHRleHQtYmFzZWQgc3R5bGVzaGVldAogLy8gfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IC8vIHN0YXRpYwotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckNTU0FnZW50
OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBjb25zdCBT
dHJpbmcmIGZ1bGxTdHlsZUlkLCBDU1NTdHlsZVNvdXJjZURhdGEqIHNvdXJjZURhdGEpCitQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgZnVsbFN0eWxl
SWQsIEZyb250ZW5kUHJvcGVydHlJdGVyYXRvciYgcHJvcGVydGllc0l0LCBDU1NTdHlsZVNvdXJj
ZURhdGEqIHNvdXJjZURhdGEpCiB7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBpZiAoIWZ1bGxTdHlsZUlkLmlzRW1w
dHkoKSkKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImlkIiwgZnVsbFN0eWxlSWQpOworICAg
ICAgICByZXN1bHQtPnNldFN0cmluZygic3R5bGVJZCIsIGZ1bGxTdHlsZUlkKTsKIAotICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJ3aWR0aCIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJ3aWR0aCIp
KTsKLSAgICByZXN1bHQtPnNldFN0cmluZygiaGVpZ2h0Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFs
dWUoImhlaWdodCIpKTsKLSAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiogcHJvcGVy
dHlEYXRhID0gMDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0aWVzID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm9wZXJ0aWVzLT5zZXRTdHJpbmcoIndpZHRo
Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoIndpZHRoIikpOworICAgIHByb3BlcnRpZXMtPnNl
dFN0cmluZygiaGVpZ2h0Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpKTsKIAog
ICAgIGlmIChzb3VyY2VEYXRhKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJzdGFydE9m
ZnNldCIsIHNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0KTsKLSAgICAgICAgcmVzdWx0
LT5zZXROdW1iZXIoImVuZE9mZnNldCIsIHNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCk7
Ci0gICAgICAgIHByb3BlcnR5RGF0YSA9ICZzb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7CisgICAg
ICAgIHByb3BlcnRpZXMtPnNldE51bWJlcigic3RhcnRPZmZzZXQiLCBzb3VyY2VEYXRhLT5zdHls
ZUJvZHlSYW5nZS5zdGFydCk7CisgICAgICAgIHByb3BlcnRpZXMtPnNldE51bWJlcigiZW5kT2Zm
c2V0Iiwgc291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kKTsKICAgICB9Ci0gICAgcG9wdWxh
dGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKHN0eWxlLCByZXN1bHQuZ2V0KCksIHByb3BlcnR5
RGF0YSk7CisgICAgcmVzdWx0LT5zZXRPYmplY3QoInByb3BlcnRpZXMiLCBwcm9wZXJ0aWVzKTsK
KworICAgIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhzdHlsZSwgcmVzdWx0Lmdl
dCgpLCBwcm9wZXJ0aWVzSXQpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CkBA
IC0xNjQsNiArMTU3LDI3IEBAIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzQ1NT
U3R5bGVSdWxlKFN0eWxlQmFzZSogc3R5bGVCYXNlKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxD
U1NTdHlsZVJ1bGUqPihydWxlKTsKIH0KIAorLy8gc3RhdGljCit2b2lkIEluc3BlY3RvckNTU0Fn
ZW50Ojpwb3B1bGF0ZVNvdXJjZUF3YXJlUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4qIHNvdXJjZVByb3BlcnR5RGF0YSwg
VmVjdG9yPFNvdXJjZUF3YXJlUHJvcGVydHk+KiByZXN1bHQpCit7CisgICAgSGFzaFNldDxTdHJp
bmc+IGZvdW5kU2hvcnRoYW5kczsKKyAgICBIYXNoU2V0PFN0cmluZz4gc291cmNlUHJvcGVydHlO
YW1lczsKKyAgICBpZiAoc291cmNlUHJvcGVydHlEYXRhKSB7CisgICAgICAgIGZvciAoVmVjdG9y
PENTU1Byb3BlcnR5U291cmNlRGF0YT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc291cmNlUHJvcGVy
dHlEYXRhLT5iZWdpbigpOyBpdCAhPSBzb3VyY2VQcm9wZXJ0eURhdGEtPmVuZCgpOyArK2l0KSB7
CisgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChTb3VyY2VBd2FyZVByb3BlcnR5KCppdCwgdHJ1
ZSkpOworICAgICAgICAgICAgc291cmNlUHJvcGVydHlOYW1lcy5hZGQoaXQtPm5hbWUpOworICAg
ICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDAsIHNpemUgPSBzdHlsZS0+bGVuZ3Ro
KCk7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBzdHlsZS0+aXRlbShp
KTsKKyAgICAgICAgaWYgKHNvdXJjZVByb3BlcnR5TmFtZXMuY29udGFpbnMobmFtZSkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzb3VyY2VQcm9wZXJ0eU5hbWVzLmFkZChuYW1l
KTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQoU291cmNlQXdhcmVQcm9wZXJ0eShDU1NQcm9wZXJ0
eVNvdXJjZURhdGEobmFtZSwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUobmFtZSksICFzdHlsZS0+
Z2V0UHJvcGVydHlQcmlvcml0eShuYW1lKS5pc0VtcHR5KCksIHRydWUsIFNvdXJjZVJhbmdlKCkp
LCBmYWxzZSkpOworICAgIH0KK30KIAogSW5zcGVjdG9yQ1NTQWdlbnQ6Okluc3BlY3RvckNTU0Fn
ZW50KEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250
ZW5kKQogICAgIDogbV9kb21BZ2VudChkb21BZ2VudCkKQEAgLTI0Niw3ICsyNjAsMTEgQEAgdm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUyKGxvbmcgbm9kZUlk
LCBSZWZQdHI8SW5zcGVjdG9yVmEKICAgICBpZiAoIWRlZmF1bHRWaWV3KQogICAgICAgICByZXR1
cm47CiAKLSAgICAqc3R5bGUgPSBidWlsZE9iamVjdEZvclN0eWxlKGRlZmF1bHRWaWV3LT5nZXRD
b21wdXRlZFN0eWxlKGVsZW1lbnQsICIiKS5nZXQoKSwgIiIpOworICAgIFJlZlB0cjxDU1NTdHls
ZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlID0gZGVmYXVsdFZpZXctPmdldENvbXB1dGVkU3R5
bGUoZWxlbWVudCwgIiIpOworICAgIFZlY3RvcjxTb3VyY2VBd2FyZVByb3BlcnR5PiBwcm9wZXJ0
aWVzOworICAgIHBvcHVsYXRlU291cmNlQXdhcmVQcm9wZXJ0aWVzKGNvbXB1dGVkU3R5bGUuZ2V0
KCksIDAsICZwcm9wZXJ0aWVzKTsKKyAgICBGcm9udGVuZFByb3BlcnR5SXRlcmF0b3IgcHJvcGVy
dGllc0l0KHByb3BlcnRpZXMsIDApOworICAgICpzdHlsZSA9IGJ1aWxkT2JqZWN0Rm9yU3R5bGUo
Y29tcHV0ZWRTdHlsZS5nZXQoKSwgIiIsIHByb3BlcnRpZXNJdCk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldEluaGVyaXRlZFN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBzdHlsZSkKQEAgLTMyNCw5ICszNDIsMTcgQEAgdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVUZXh0Mihjb25zdCBTdHJpbmcmIGZ1bGxTdHlsZUlkLCBj
b25zdCBTdHJpbmcmIHQKICAgICAqcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRP
YmplY3RGb3JTdHlsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5zdHlsZUZvcklkKGlkUGFydHMuYXQo
MSkpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkyKGNvbnN0
IFN0cmluZyYsIGxvbmcsIGJvb2wpCit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9w
ZXJ0eTIoY29uc3QgU3RyaW5nJiBmdWxsU3R5bGVJZCwgbG9uZyBwcm9wZXJ0eU9yZGluYWwsIGJv
b2wgZGlzYWJsZSkKIHsKLSAgICAvLyBGSVhNRShhcGF2bG92KTogaW1wbGVtZW50CisgICAgVmVj
dG9yPFN0cmluZz4gaWRQYXJ0czsKKyAgICBmdWxsU3R5bGVJZC5zcGxpdCgnOicsIGlkUGFydHMp
OworICAgIEFTU0VSVChpZFBhcnRzLnNpemUoKSA9PSAyKTsKKworICAgIEluc3BlY3RvclN0eWxl
U2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoaWRQYXJ0cy5hdCgw
KSk7CisgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQorICAgICAgICByZXR1cm47CisKKyAg
ICBpbnNwZWN0b3JTdHlsZVNoZWV0LT50b2dnbGVQcm9wZXJ0eShpZFBhcnRzLmF0KDEpLCBwcm9w
ZXJ0eU9yZGluYWwsIGRpc2FibGUpOwogfQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRS
dWxlU2VsZWN0b3IyKGNvbnN0IFN0cmluZyYgZnVsbFJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQpAQCAtMzgwLDcxICs0MDYsNTYg
QEAgRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmlubGluZVN0eWxlRWxlbWVudChDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSkKIH0KIAogLy8gc3RhdGljCi12b2lkIEluc3BlY3RvckNTU0Fn
ZW50Ojpwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUsIEluc3BlY3Rvck9iamVjdCogcmVzdWx0LCBWZWN0b3I8Q1NTUHJvcGVydHlTb3Vy
Y2VEYXRhPiogcHJvcGVydHlEYXRhKQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cG9wdWxhdGVP
YmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBJbnNw
ZWN0b3JPYmplY3QqIHJlc3VsdCwgRnJvbnRlbmRQcm9wZXJ0eUl0ZXJhdG9yJiBwcm9wZXJ0aWVz
SXQpCiB7CiAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm9wZXJ0aWVzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNob3J0aGFuZFZh
bHVlcyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+ID4gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3Bl
cnR5OwogICAgIEhhc2hTZXQ8U3RyaW5nPiBmb3VuZFNob3J0aGFuZHM7Ci0gICAgSGFzaFNldDxT
dHJpbmc+IHNvdXJjZVByb3BlcnR5TmFtZXM7Ci0gICAgaWYgKHByb3BlcnR5RGF0YSkgewotICAg
ICAgICBmb3IgKFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IHByb3BlcnR5RGF0YS0+YmVnaW4oKTsgaXQgIT0gcHJvcGVydHlEYXRhLT5lbmQoKTsgKytp
dCkgewotICAgICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eUVu
dHJ5ID0gKml0OwotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHJvcGVydHkg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgcHJvcGVydGllcy0+cHVz
aE9iamVjdChwcm9wZXJ0eSk7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBwcm9w
ZXJ0eUVudHJ5Lm5hbWU7Ci0gICAgICAgICAgICBzb3VyY2VQcm9wZXJ0eU5hbWVzLmFkZChuYW1l
KTsKLSAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoIm5hbWUiLCBuYW1lKTsKLSAgICAg
ICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInZhbHVlIiwgcHJvcGVydHlFbnRyeS52YWx1ZSk7
Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJwcmlvcml0eSIsIHByb3BlcnR5RW50
cnkuaW1wb3J0YW50ID8gImltcG9ydGFudCIgOiAiIik7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+
c2V0U3RyaW5nKCJzdGF0dXMiLCAiYWN0aXZlIik7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0
Qm9vbGVhbigicGFyc2VkT2siLCBwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKTsKLSAgICAgICAgICAg
IHByb3BlcnR5LT5zZXROdW1iZXIoInN0YXJ0T2Zmc2V0IiwgcHJvcGVydHlFbnRyeS5yYW5nZS5z
dGFydCk7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0TnVtYmVyKCJlbmRPZmZzZXQiLCBwcm9w
ZXJ0eUVudHJ5LnJhbmdlLmVuZCk7Ci0gICAgICAgICAgICBpZiAocHJvcGVydHlFbnRyeS5wYXJz
ZWRPaykgewotICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJpbXBsaWNpdCIs
IGZhbHNlKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gc3R5bGUtPmdldFBy
b3BlcnR5U2hvcnRoYW5kKG5hbWUpOwotICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJp
bmcoInNob3J0aGFuZE5hbWUiLCBzaG9ydGhhbmQpOwotICAgICAgICAgICAgICAgIGlmICghc2hv
cnRoYW5kLmlzRW1wdHkoKSAmJiAhZm91bmRTaG9ydGhhbmRzLmNvbnRhaW5zKHNob3J0aGFuZCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzLmFkZChzaG9ydGhhbmQpOwot
ICAgICAgICAgICAgICAgICAgICBzaG9ydGhhbmRWYWx1ZXMtPnNldFN0cmluZyhzaG9ydGhhbmQs
IHNob3J0aGFuZFZhbHVlKHN0eWxlLCBzaG9ydGhhbmQpKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFu
KCJpbXBsaWNpdCIsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5n
KCJzaG9ydGhhbmROYW1lIiwgIiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgSGFzaE1h
cDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+ID46Oml0ZXJhdG9yIGFjdGl2ZUl0ID0g
cHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmZpbmQobmFtZSk7Ci0gICAgICAg
ICAgICBpZiAoYWN0aXZlSXQgIT0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5
LmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgYWN0aXZlSXQtPnNlY29uZC0+c2V0U3RyaW5nKCJz
dGF0dXMiLCAiaW5hY3RpdmUiKTsKLSAgICAgICAgICAgICAgICBhY3RpdmVJdC0+c2Vjb25kLT5z
ZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCAiIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuc2V0KG5hbWUsIHByb3BlcnR5
KTsKLSAgICAgICAgfQotICAgIH0KIAotICAgIGZvciAoaW50IGkgPSAwLCBzaXplID0gc3R5bGUt
Pmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gc3R5bGUt
Pml0ZW0oaSk7Ci0gICAgICAgIGlmIChzb3VyY2VQcm9wZXJ0eU5hbWVzLmNvbnRhaW5zKG5hbWUp
KQotICAgICAgICAgICAgY29udGludWU7CisgICAgZm9yICg7ICFwcm9wZXJ0aWVzSXQuYXRFbmQo
KTsgKytwcm9wZXJ0aWVzSXQpIHsKKyAgICAgICAgRnJvbnRlbmRQcm9wZXJ0eURhdGEgcHJvcGVy
dHlEYXRhKCpwcm9wZXJ0aWVzSXQpOworICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURh
dGEmIHByb3BlcnR5RW50cnkgPSBwcm9wZXJ0eURhdGEucHJvcGVydHk7CisgICAgICAgIGNvbnN0
IFN0cmluZyYgbmFtZSA9IHByb3BlcnR5RW50cnkubmFtZTsKIAotICAgICAgICBzb3VyY2VQcm9w
ZXJ0eU5hbWVzLmFkZChuYW1lKTsKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHJv
cGVydHkgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwcm9wZXJ0aWVzLT5w
dXNoT2JqZWN0KHByb3BlcnR5KTsKICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygibmFtZSIs
IG5hbWUpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHN0eWxlLT5nZXRQ
cm9wZXJ0eVZhbHVlKG5hbWUpKTsKLSAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygicHJpb3Jp
dHkiLCBzdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eSgibmFtZSIpKTsKLSAgICAgICAgcHJvcGVy
dHktPnNldEJvb2xlYW4oImltcGxpY2l0Iiwgc3R5bGUtPmlzUHJvcGVydHlJbXBsaWNpdChuYW1l
KSk7Ci0gICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJwYXJzZWRPayIsIHRydWUpOwotICAg
ICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzdGF0dXMiLCAic3R5bGUiKTsKLSAgICAgICAgU3Ry
aW5nIHNob3J0aGFuZCA9IHN0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKLSAgICAg
ICAgcHJvcGVydHktPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsIHNob3J0aGFuZCk7Ci0gICAg
ICAgIGlmICghc2hvcnRoYW5kLmlzRW1wdHkoKSAmJiAhZm91bmRTaG9ydGhhbmRzLmNvbnRhaW5z
KHNob3J0aGFuZCkpIHsKLSAgICAgICAgICAgIGZvdW5kU2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5k
KTsKLSAgICAgICAgICAgIHNob3J0aGFuZFZhbHVlcy0+c2V0U3RyaW5nKHNob3J0aGFuZCwgc2hv
cnRoYW5kVmFsdWUoc3R5bGUsIHNob3J0aGFuZCkpOworICAgICAgICBwcm9wZXJ0eS0+c2V0U3Ry
aW5nKCJ2YWx1ZSIsIHByb3BlcnR5RW50cnkudmFsdWUpOworICAgICAgICBwcm9wZXJ0eS0+c2V0
U3RyaW5nKCJwcmlvcml0eSIsIHByb3BlcnR5RW50cnkuaW1wb3J0YW50ID8gImltcG9ydGFudCIg
OiAiIik7CisgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsIHByb3BlcnR5RGF0
YS5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiYWN0aXZlIik7CisgICAgICAgIHByb3BlcnR5LT5z
ZXRCb29sZWFuKCJwYXJzZWRPayIsIHByb3BlcnR5RW50cnkucGFyc2VkT2spOworICAgICAgICBp
ZiAoIXByb3BlcnR5RGF0YS5kaXNhYmxlZCkgeworICAgICAgICAgICAgaWYgKHByb3BlcnR5RGF0
YS5oYXNTb3VyY2UpIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1w
bGljaXQiLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcHJvcGVydHktPnNldE51bWJlcigic3Rh
cnRPZmZzZXQiLCBwcm9wZXJ0eUVudHJ5LnJhbmdlLnN0YXJ0KTsKKyAgICAgICAgICAgICAgICBw
cm9wZXJ0eS0+c2V0TnVtYmVyKCJlbmRPZmZzZXQiLCBwcm9wZXJ0eUVudHJ5LnJhbmdlLmVuZCk7
CisKKyAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gPjo6aXRlcmF0b3IgYWN0aXZlSXQgPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJv
cGVydHkuZmluZChuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aXZlSXQgIT0gcHJvcGVy
dHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmVuZCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0cmluZygic3RhdHVzIiwgImluYWN0aXZlIik7Cisg
ICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0cmluZygic2hvcnRoYW5k
TmFtZSIsICIiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChuYW1lLCBwcm9wZXJ0eSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJpbXBs
aWNpdCIsIHN0eWxlLT5pc1Byb3BlcnR5SW1wbGljaXQobmFtZSkpOworICAgICAgICAgICAgICAg
IHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsICJzdHlsZSIpOworICAgICAgICAgICAgfQog
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHByb3BlcnR5RW50cnkucGFyc2VkT2spIHsKKyAgICAg
ICAgICAgIC8vIEJvdGggZm9yIHN0eWxlLW9yaWdpbmF0ZWQgYW5kIHBhcnNlZCBzb3VyY2UgcHJv
cGVydGllcy4KKyAgICAgICAgICAgIFN0cmluZyBzaG9ydGhhbmQgPSBzdHlsZS0+Z2V0UHJvcGVy
dHlTaG9ydGhhbmQobmFtZSk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9y
dGhhbmROYW1lIiwgc2hvcnRoYW5kKTsKKyAgICAgICAgICAgIGlmICghc2hvcnRoYW5kLmlzRW1w
dHkoKSAmJiAhZm91bmRTaG9ydGhhbmRzLmNvbnRhaW5zKHNob3J0aGFuZCkpIHsKKyAgICAgICAg
ICAgICAgICBmb3VuZFNob3J0aGFuZHMuYWRkKHNob3J0aGFuZCk7CisgICAgICAgICAgICAgICAg
c2hvcnRoYW5kVmFsdWVzLT5zZXRTdHJpbmcoc2hvcnRoYW5kLCBzaG9ydGhhbmRWYWx1ZShzdHls
ZSwgc2hvcnRoYW5kKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgcHJvcGVydHktPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsICIiKTsKICAgICB9CiAKLSAg
ICByZXN1bHQtPnNldEFycmF5KCJwcm9wZXJ0aWVzIiwgcHJvcGVydGllcyk7CisgICAgcmVzdWx0
LT5zZXRBcnJheSgiY3NzUHJvcGVydGllcyIsIHByb3BlcnRpZXMpOwogICAgIHJlc3VsdC0+c2V0
T2JqZWN0KCJzaG9ydGhhbmRWYWx1ZXMiLCBzaG9ydGhhbmRWYWx1ZXMpOwogfQogCkBAIC02MjIs
NyArNjMzLDEwIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMoRWxlCiAgICAgICAgIEF0dHJpYnV0ZSog
YXR0cmlidXRlID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgaWYgKGF0
dHJpYnV0ZS0+c3R5bGUoKSkgewogICAgICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSBh
dHRyaWJ1dGUtPmxvY2FsTmFtZSgpOwotICAgICAgICAgICAgc3R5bGVBdHRyaWJ1dGVzLT5zZXRP
YmplY3QoYXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpLCBidWlsZE9iamVjdEZvclN0eWxlKGF0
dHJpYnV0ZS0+c3R5bGUoKSwgIiIpKTsKKyAgICAgICAgICAgIFZlY3RvcjxTb3VyY2VBd2FyZVBy
b3BlcnR5PiBwcm9wZXJ0aWVzOworICAgICAgICAgICAgcG9wdWxhdGVTb3VyY2VBd2FyZVByb3Bl
cnRpZXMoYXR0cmlidXRlLT5zdHlsZSgpLCAwLCAmcHJvcGVydGllcyk7CisgICAgICAgICAgICBG
cm9udGVuZFByb3BlcnR5SXRlcmF0b3IgcHJvcGVydGllc0l0KHByb3BlcnRpZXMsIDApOworICAg
ICAgICAgICAgc3R5bGVBdHRyaWJ1dGVzLT5zZXRPYmplY3QoYXR0cmlidXRlTmFtZS51dGY4KCku
ZGF0YSgpLCBidWlsZE9iamVjdEZvclN0eWxlKGF0dHJpYnV0ZS0+c3R5bGUoKSwgIiIsIHByb3Bl
cnRpZXNJdCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuaAppbmRleCBlYjYwMTNiLi40YTU0NWVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU0FnZW50LmgKQEAgLTU2LDkgKzU2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJbnNwZWN0b3JDU1NBZ2VudChkb21BZ2VudCwgZnJvbnRlbmQpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9y
U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgZnVsbFN0eWxlSWQsIENT
U1N0eWxlU291cmNlRGF0YSogPSAwKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0
cmluZyYgZnVsbFN0eWxlSWQsIEZyb250ZW5kUHJvcGVydHlJdGVyYXRvciYgcHJvcGVydGllc0l0
LCBDU1NTdHlsZVNvdXJjZURhdGEqID0gMCk7CiAgICAgc3RhdGljIENTU1N0eWxlU2hlZXQqIHBh
cmVudFN0eWxlU2hlZXQoU3R5bGVCYXNlKik7CiAgICAgc3RhdGljIENTU1N0eWxlUnVsZSogYXND
U1NTdHlsZVJ1bGUoU3R5bGVCYXNlKik7CisgICAgc3RhdGljIHZvaWQgcG9wdWxhdGVTb3VyY2VB
d2FyZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFZlY3RvcjxDU1NQcm9w
ZXJ0eVNvdXJjZURhdGE+KiBzb3VyY2VQcm9wZXJ0eURhdGEsIFZlY3RvcjxTb3VyY2VBd2FyZVBy
b3BlcnR5PiogcmVzdWx0KTsKIAogICAgIEluc3BlY3RvckNTU0FnZW50KEluc3BlY3RvckRPTUFn
ZW50KiBkb21BZ2VudCwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKTsKICAgICB+SW5zcGVj
dG9yQ1NTQWdlbnQoKTsKQEAgLTc0LDcgKzc1LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0U3R5
bGVTaGVldDIoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4qIHJlc3VsdCk7CiAgICAgdm9pZCBzZXRTdHlsZVNoZWV0VGV4dDIoY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiAgICAgdm9pZCBzZXRTdHlsZVRleHQy
KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiByZXN1bHQpOwotICAgIHZvaWQgdG9nZ2xlUHJvcGVydHkyKGNvbnN0IFN0cmlu
ZyYgc3R5bGVJZCwgbG9uZyBwcm9wZXJ0eU9yZGluYWwsIGJvb2wgZGlzYWJsZWQpOworICAgIHZv
aWQgdG9nZ2xlUHJvcGVydHkyKGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgbG9uZyBwcm9wZXJ0eU9y
ZGluYWwsIGJvb2wgZGlzYWJsZSk7CiAgICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IyKGNvbnN0IFN0
cmluZyYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiByZXN1bHQpOwogICAgIHZvaWQgYWRkUnVsZTIoY29uc3QgbG9uZyBjb250ZXh0Tm9kZUlk
LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQp
OwogICAgIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+KiByZXN1bHQpOwpAQCAtODIsMTEgKzgzLDExIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+ID4gSWRU
b0luc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlU2hlZXQq
LCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gPiBDU1NTdHlsZVNoZWV0VG9JbnNwZWN0b3JT
dHlsZVNoZWV0OwotICAgIHR5cGVkZWYgSGFzaE1hcDxOb2RlKiwgUmVmUHRyPEluc3BlY3RvclN0
eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gPiBOb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0OyAvLyBm
b3IgYm9ndXMgInN0eWxlc2hlZXRzIiB3aXRoIGlubGluZSBub2RlIHN0eWxlcworICAgIHR5cGVk
ZWYgSGFzaE1hcDxOb2RlKiwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZT4gPiBOb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0OyAvLyBib2d1cyAic3R5bGVzaGVldHMiIHdp
dGggZWxlbWVudHMnIGlubGluZSBzdHlsZXMKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPERv
Y3VtZW50PiwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+ID4gRG9jdW1lbnRUb1ZpYUluc3Bl
Y3RvclN0eWxlU2hlZXQ7IC8vICJ2aWEgaW5zcGVjdG9yIiBzdHlsZXNoZWV0cwogCiAgICAgc3Rh
dGljIEVsZW1lbnQqIGlubGluZVN0eWxlRWxlbWVudChDU1NTdHlsZURlY2xhcmF0aW9uKik7Ci0g
ICAgc3RhdGljIHZvaWQgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENTU1N0eWxl
RGVjbGFyYXRpb24qLCBJbnNwZWN0b3JPYmplY3QqIHJlc3VsdCwgVmVjdG9yPENTU1Byb3BlcnR5
U291cmNlRGF0YT4qIHByb3BlcnR5RGF0YSk7CisgICAgc3RhdGljIHZvaWQgcG9wdWxhdGVPYmpl
Y3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlc3VsdCwgRnJvbnRlbmRQcm9wZXJ0eUl0ZXJhdG9yJiBwcm9wZXJ0aWVzSXQpOwogICAg
IHN0YXRpYyBTdHJpbmcgc2hvcnRoYW5kVmFsdWUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0
IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpOwogICAgIHN0YXRpYyBTdHJpbmcgc2hvcnRoYW5k
UHJpb3JpdHkoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJv
cGVydHkpOwogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb25naGFuZFByb3BlcnRpZXMoQ1NT
U3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpOwpAQCAt
MTEzLDYgKzExNCw3IEBAIHByaXZhdGU6CiAgICAgQ1NTU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5
bGVTaGVldCBtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgTm9kZVRv
SW5zcGVjdG9yU3R5bGVTaGVldCBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgRG9j
dW1lbnRUb1ZpYUluc3BlY3RvclN0eWxlU2hlZXQgbV9kb2N1bWVudFRvSW5zcGVjdG9yU3R5bGVT
aGVldDsKKyAgICBEaXNhYmxlZFByb3BlcnR5U3RvcmUgbV9kaXNhYmxlZFByb3BlcnR5U3RvcmU7
CiAKICAgICBsb25nIG1fbGFzdFN0eWxlU2hlZXRJZDsKICAgICBsb25nIG1fbGFzdFJ1bGVJZDsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggOWVlMWY1MS4u
YTQ3YWMwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVl
dC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAg
LTk4LDYgKzk4LDgwIEBAIFJlZlB0cjxXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0YT4gUGFyc2Vk
U3R5bGVTaGVldDo6cnVsZVNvdXJjZURhdGFBdCh1bnNpZ25lZCBpCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorRnJvbnRlbmRQcm9wZXJ0eUl0ZXJhdG9yOjpGcm9udGVuZFByb3BlcnR5SXRlcmF0
b3IoY29uc3QgVmVjdG9yPFNvdXJjZUF3YXJlUHJvcGVydHk+JiBsaXZlUHJvcGVydGllcywgRGlz
YWJsZWRQcm9wZXJ0eVN0b3JlKiBkaXNhYmxlZFByb3BlcnRpZXMpCisgICAgOiBtX2xpdmVQcm9w
ZXJ0aWVzKGxpdmVQcm9wZXJ0aWVzKQorICAgICwgbV9kaXNhYmxlZFByb3BlcnRpZXMoZGlzYWJs
ZWRQcm9wZXJ0aWVzKQorICAgICwgbV9jdXJyZW50SW5kZXgoMCkKKyAgICAsIG1fY3VycmVudERp
c2FibGVkSW5kZXgoMCkKKyAgICAsIG1fc2xvdFBvc2l0aW9uKDApCisgICAgLCBtX3Bvc2l0aW9u
SW5TbG90KDApCit7CisgICAgLy8gUHJlY29uZGl0aW9uOiBtX2Rpc2FibGVkUHJvcGVydGllcyBp
cyBzb3J0ZWQgd3J0IHRoZSBwcm9wZXJ0eSBvcmRpbmFsLgorICAgIG1fbGl2ZUl0ID0gbV9saXZl
UHJvcGVydGllcy5iZWdpbigpOworICAgIG1fZGlzYWJsZWRJdCA9IG1fZGlzYWJsZWRQcm9wZXJ0
aWVzID8gbV9kaXNhYmxlZFByb3BlcnRpZXMtPmJlZ2luKCkgOiAwOworICAgIG1fZGlzYWJsZWRT
bG90SXQgPSBtX2Rpc2FibGVkUHJvcGVydGllcyAmJiBtX2Rpc2FibGVkSXQgIT0gbV9kaXNhYmxl
ZFByb3BlcnRpZXMtPmVuZCgpID8gbV9kaXNhYmxlZEl0LT5zZWNvbmQuYmVnaW4oKSA6IDA7Cit9
CisKK0Zyb250ZW5kUHJvcGVydHlEYXRhIEZyb250ZW5kUHJvcGVydHlJdGVyYXRvcjo6b3BlcmF0
b3IqKCkgY29uc3QKK3sKKyAgICBpZiAoYXREaXNhYmxlZFByb3BlcnR5KCkpCisgICAgICAgIHJl
dHVybiBGcm9udGVuZFByb3BlcnR5RGF0YSgqbV9kaXNhYmxlZFNsb3RJdCwgdHJ1ZSk7CisgICAg
aWYgKG1fbGl2ZUl0ICE9IG1fbGl2ZVByb3BlcnRpZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBG
cm9udGVuZFByb3BlcnR5RGF0YSgqbV9saXZlSXQsIGZhbHNlKTsKKworICAgIHJldHVybiBGcm9u
dGVuZFByb3BlcnR5RGF0YShTb3VyY2VBd2FyZVByb3BlcnR5KGVtcHR5Q1NTUHJvcGVydHlTb3Vy
Y2VEYXRhLCBmYWxzZSksIGZhbHNlKTsKK30KKworRnJvbnRlbmRQcm9wZXJ0eUl0ZXJhdG9yJiBG
cm9udGVuZFByb3BlcnR5SXRlcmF0b3I6Om9wZXJhdG9yKysoKQoreworICAgICsrbV9jdXJyZW50
SW5kZXg7CisgICAgaWYgKGF0RGlzYWJsZWRQcm9wZXJ0eSgpKSB7CisgICAgICAgIC8vIFNob3Vs
ZCBwaWNrIGEgZGlzYWJsZWQgcmF0aGVyIHRoYW4gZW5hYmxlZCBwcm9wZXJ0eS4KKyAgICAgICAg
aWYgKG1fZGlzYWJsZWRTbG90SXQgIT0gbV9kaXNhYmxlZEl0LT5zZWNvbmQuZW5kKCkpIHsKKyAg
ICAgICAgICAgIC8vIG1vdmUgZm9yd2FyZCBpbiB0aGUgc2xvdCB2ZWN0b3IKKyAgICAgICAgICAg
ICsrbV9kaXNhYmxlZFNsb3RJdDsKKyAgICAgICAgICAgICsrbV9wb3NpdGlvbkluU2xvdDsKKyAg
ICAgICAgfQorICAgICAgICB3aGlsZSAobV9kaXNhYmxlZFNsb3RJdCA9PSBtX2Rpc2FibGVkSXQt
PnNlY29uZC5lbmQoKSkgeworICAgICAgICAgICAgLy8gbW92ZSB0byB0aGUgbmV4dCBzbG90IHN0
YXJ0CisgICAgICAgICAgICArK21fc2xvdFBvc2l0aW9uOworICAgICAgICAgICAgKyttX2N1cnJl
bnREaXNhYmxlZEluZGV4OworICAgICAgICAgICAgKyttX2Rpc2FibGVkSXQ7CisgICAgICAgICAg
ICBtX3Bvc2l0aW9uSW5TbG90ID0gMDsKKyAgICAgICAgICAgIGlmIChtX2Rpc2FibGVkSXQgIT0g
bV9kaXNhYmxlZFByb3BlcnRpZXMtPmVuZCgpKQorICAgICAgICAgICAgICAgIG1fZGlzYWJsZWRT
bG90SXQgPSBtX2Rpc2FibGVkSXQtPnNlY29uZC5iZWdpbigpOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgbV9kaXNhYmxlZFNsb3RJdCA9IDA7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fbGl2ZUl0
ICE9IG1fbGl2ZVByb3BlcnRpZXMuZW5kKCkpIHsKKyAgICAgICAgLy8gbW92ZSB0byB0aGUgbmV4
dCBsaXZlIHByb3BlcnR5CisgICAgICAgICsrbV9jdXJyZW50RGlzYWJsZWRJbmRleDsKKyAgICAg
ICAgKyttX2xpdmVJdDsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIEZyb250
ZW5kUHJvcGVydHlJdGVyYXRvcjo6ZW5hYmxlQ3VycmVudCgpCit7CisgICAgQVNTRVJUKGF0RGlz
YWJsZWRQcm9wZXJ0eSgpKTsKKyAgICBtX2Rpc2FibGVkSXQtPnNlY29uZC5yZW1vdmUobV9wb3Np
dGlvbkluU2xvdCk7CisgICAgaWYgKG1fZGlzYWJsZWRJdC0+c2Vjb25kLmlzRW1wdHkoKSkKKyAg
ICAgICAgbV9kaXNhYmxlZFByb3BlcnRpZXMtPnJlbW92ZShtX3Nsb3RQb3NpdGlvbik7Cit9CisK
K2Jvb2wgRnJvbnRlbmRQcm9wZXJ0eUl0ZXJhdG9yOjphdERpc2FibGVkUHJvcGVydHkoKSBjb25z
dAoreworICAgIC8vIEEgZGlzYWJsZWQgcHJvcGVydHkgc2hvdWxkIGJlIHJldHVybmVkIGlmOgor
ICAgIC8vIC0gZGlzYWJsZWQgcHJvcGVydHkgaXRlcmF0b3JzIHBvaW50IHRvIGEgdmFsaWQgZGlz
YWJsZWQgcHJvcGVydHkgQU5ECisgICAgLy8gLSBBTlkgb2YgdGhlIGZvbGxvd2luZyBob2xkcyB0
cnVlOgorICAgIC8vICAgICAtIGN1cnJlbnQgZGlzYWJsZWQgcHJvcGVydHkgc2xvdCBpbmRleCBp
cyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBwcm9wZXJ0eSAiY2h1bmsiIG9yZGluYWwgKGEgY2h1
bmsgaXMgZWl0aGVyIGEgc2luZ2xlIGVuYWJsZWQgcHJvcGVydHkgb3IgYWxsIGRpc2FibGVkIHBy
b3BlcnRpZXMgaW4gdGhlIHNhbWUgc2xvdCkgT1IKKyAgICAvLyAgICAgLSB0aGVyZSBhcmUgbm8g
bW9yZSBlbmFibGVkIHByb3BlcnRpZXMgT1IKKyAgICAvLyAgICAgLSB0aGVyZSBhcmUgb25seSBz
dHlsZS1iYXNlZCBlbmFibGVkIHByb3BlcnRpZXMgcmVtYWluaW5nCisgICAgcmV0dXJuIG1fZGlz
YWJsZWRQcm9wZXJ0aWVzICYmIG1fZGlzYWJsZWRJdCAhPSBtX2Rpc2FibGVkUHJvcGVydGllcy0+
ZW5kKCkgJiYgbV9kaXNhYmxlZFNsb3RJdCAhPSBtX2Rpc2FibGVkSXQtPnNlY29uZC5lbmQoKSAm
JiAobV9jdXJyZW50RGlzYWJsZWRJbmRleCA9PSBtX2Rpc2FibGVkSXQtPmZpcnN0IHx8IG1fbGl2
ZUl0ID09IG1fbGl2ZVByb3BlcnRpZXMuZW5kKCkgfHwgIW1fbGl2ZUl0LT5zZWNvbmQpOworfQor
CiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYg
aWQsIENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBjb25zdCBTdHJpbmcmIG9yaWdpbiwg
Y29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCkKICAgICA6IG1faWQoaWQpCiAgICAgLCBtX3BhZ2VT
dHlsZVNoZWV0KHBhZ2VTdHlsZVNoZWV0KQpAQCAtMTk3LDYgKzI3MSw2NiBAQCBDU1NTdHlsZVJ1
bGUqIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1bGVGb3JJZChjb25zdCBTdHJpbmcmIGlkKSBjb25z
dAogICAgIHJldHVybiAwOwogfQogCitGcm9udGVuZFByb3BlcnR5SXRlcmF0b3IgSW5zcGVjdG9y
U3R5bGVTaGVldDo6YWxsUHJvcGVydGllcyhjb25zdCBTdHJpbmcmIHN0eWxlSWQpCit7CisgICAg
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBzdHlsZUZvcklkKHN0eWxlSWQpOworICAgIC8v
IEZJWE1FOiBjaGFuZ2UgdGhpcyB0byByZXR1cm4gYm9vbGVhbiBzdWNjZXNzIGFuZCBoYXZlIGFu
IG91dHB1dCBwYXJhbWV0ZXI/CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIEZyb250
ZW5kUHJvcGVydHlJdGVyYXRvcihWZWN0b3I8U291cmNlQXdhcmVQcm9wZXJ0eT4oKSwgMCk7CisK
KyAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CisgICAgaWYgKGVuc3Vy
ZVBhcnNlZERhdGFSZWFkeSgpKQorICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFG
b3Ioc3R5bGUpOworCisgICAgVmVjdG9yPFNvdXJjZUF3YXJlUHJvcGVydHk+IHNvdXJjZUF3YXJl
UHJvcGVydGllczsKKyAgICBJbnNwZWN0b3JDU1NBZ2VudDo6cG9wdWxhdGVTb3VyY2VBd2FyZVBy
b3BlcnRpZXMoc3R5bGUsIHNvdXJjZURhdGEgPyAmKHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0
YS0+cHJvcGVydHlEYXRhKSA6IDAsICZzb3VyY2VBd2FyZVByb3BlcnRpZXMpOworCisgICAgcmV0
dXJuIEZyb250ZW5kUHJvcGVydHlJdGVyYXRvcihzb3VyY2VBd2FyZVByb3BlcnRpZXMsIGRpc2Fi
bGVkUHJvcGVydHlTdG9yZUZvclN0eWxlKHN0eWxlLCBmYWxzZSkpOworfQorCitib29sIEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OnRvZ2dsZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgdW5z
aWduZWQgZ2xvYmFsSW5kZXgsIGJvb2wgZGlzYWJsZSkKK3sKKyAgICBDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSA9IHN0eWxlRm9ySWQoc3R5bGVJZCk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgRGlzYWJsZWRQcm9wZXJ0eVN0b3JlKiBzdG9yZSA9IGRp
c2FibGVkUHJvcGVydHlTdG9yZUZvclN0eWxlKHN0eWxlLCBkaXNhYmxlKTsKKyAgICBpZiAoIXN0
b3JlICYmICFkaXNhYmxlKSAvLyBTaG9ydGN1dDogZW5hYmxlIHdoZW4gdGhlcmUgYXJlIG5vIGRp
c2FibGVkIHByb3BlcnRpZXMuCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgdW5zaWduZWQg
Y3VySW5kZXggPSAwOworICAgIEZyb250ZW5kUHJvcGVydHlJdGVyYXRvciBpdCA9IGFsbFByb3Bl
cnRpZXMoc3R5bGVJZCk7CisgICAgZm9yICg7ICFpdC5hdEVuZCgpICYmIGN1ckluZGV4IDwgZ2xv
YmFsSW5kZXg7ICsraXQsICsrY3VySW5kZXgpIHsgfQorCisgICAgaWYgKGN1ckluZGV4ICE9IGds
b2JhbEluZGV4KQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFdyb25nIHByb3BlcnR5IGluZGV4
LgorCisgICAgaWYgKGRpc2FibGUgPT0gKCppdCkuZGlzYWJsZWQpCisgICAgICAgIHJldHVybiB0
cnVlOyAvLyBBdHRlbXB0aW5nIGFuIGlkZW1wb3RlbnQgb3BlcmF0aW9uLgorCisgICAgaWYgKCFk
aXNhYmxlKSB7CisgICAgICAgIGl0LmVuYWJsZUN1cnJlbnQoKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgdW5zaWduZWQgZW50cnlJbmRleCA9IDA7CisgICAgU291cmNlQXdh
cmVQcm9wZXJ0eSBwcm9wZXJ0eVRvRGlzYWJsZSgoKml0KS5wcm9wZXJ0eSwgKCppdCkuaGFzU291
cmNlKTsKKyAgICBmb3IgKERpc2FibGVkUHJvcGVydHlTdG9yZTo6aXRlcmF0b3IgZW50cnlJdCA9
IHN0b3JlLT5iZWdpbigpLCBlbnRyeUVuZCA9IHN0b3JlLT5lbmQoKTsgZW50cnlJdCAhPSBlbnRy
eUVuZDsgKytlbnRyeUl0LCArK2VudHJ5SW5kZXgpIHsKKyAgICAgICAgaWYgKCgqZW50cnlJdCku
Zmlyc3QgPT0gZ2xvYmFsSW5kZXgpIHsKKyAgICAgICAgICAgICgqZW50cnlJdCkuc2Vjb25kLmFw
cGVuZChwcm9wZXJ0eVRvRGlzYWJsZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoKCplbnRyeUl0KS5maXJzdCA+IGdsb2JhbEluZGV4KSB7CisgICAg
ICAgICAgICBzdG9yZS0+aW5zZXJ0KGVudHJ5SW5kZXgsIERpc2FibGVkUHJvcGVydGllc1Nsb3Qo
Z2xvYmFsSW5kZXgsIFZlY3RvcjxTb3VyY2VBd2FyZVByb3BlcnR5PigpKSk7CisgICAgICAgICAg
ICBzdG9yZS0+YXQoZW50cnlJbmRleCkuc2Vjb25kLmFwcGVuZChwcm9wZXJ0eVRvRGlzYWJsZSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzdG9yZS0+
YXBwZW5kKERpc2FibGVkUHJvcGVydGllc1Nsb3QoZ2xvYmFsSW5kZXgsIFZlY3RvcjxTb3VyY2VB
d2FyZVByb3BlcnR5PigpKSk7CisgICAgc3RvcmUtPmxhc3QoKS5zZWNvbmQuYXBwZW5kKHByb3Bl
cnR5VG9EaXNhYmxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgp
CiB7CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhZ2VTdHlsZVNoZWV0KCk7CkBA
IC0yMDQsMTMgKzMzOCwxMyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCkKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJpZCIsIGlkKCkpOworICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCBpZCgpKTsKICAgICByZXN1bHQtPnNldEJvb2xl
YW4oImRpc2FibGVkIiwgc3R5bGVTaGVldC0+ZGlzYWJsZWQoKSk7CiAgICAgcmVzdWx0LT5zZXRT
dHJpbmcoImhyZWYiLCBzdHlsZVNoZWV0LT5ocmVmKCkpOwogICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJ0aXRsZSIsIHN0eWxlU2hlZXQtPnRpdGxlKCkpOwogICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4g
Y3NzUnVsZUxpc3QgPSBDU1NSdWxlTGlzdDo6Y3JlYXRlKHN0eWxlU2hlZXQsIHRydWUpOwogICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY3NzUnVsZXMgPSBidWlsZEFycmF5Rm9yUnVsZUxpc3Qo
Y3NzUnVsZUxpc3QuZ2V0KCkpOwotICAgIHJlc3VsdC0+c2V0QXJyYXkoImNzc1J1bGVzIiwgY3Nz
UnVsZXMucmVsZWFzZSgpKTsKKyAgICByZXN1bHQtPnNldEFycmF5KCJydWxlcyIsIGNzc1J1bGVz
LnJlbGVhc2UoKSk7CiAKICAgICBTdHJpbmcgc3R5bGVTaGVldFRleHQ7CiAgICAgYm9vbCBzdWNj
ZXNzID0gdGV4dCgmc3R5bGVTaGVldFRleHQpOwpAQCAtMjI4LDE1ICszNjIsMTQgQEAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9y
UnVsZShDU1NTdHlsZVJ1bGUKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNlbGVj
dG9yVGV4dCIsIHJ1bGUtPnNlbGVjdG9yVGV4dCgpKTsKLSAgICByZXN1bHQtPnNldFN0cmluZygi
Y3NzVGV4dCIsIHJ1bGUtPmNzc1RleHQoKSk7CiAgICAgcmVzdWx0LT5zZXROdW1iZXIoInNvdXJj
ZUxpbmUiLCBydWxlLT5zb3VyY2VMaW5lKCkpOwogICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJkb2N1
bWVudFVSTCIsIG1fZG9jdW1lbnRVUkwpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJvcmlnaW4i
LCBtX29yaWdpbik7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJlbnRTdHlsZVNo
ZWV0VmFsdWUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmVudFN0eWxlU2hl
ZXRWYWx1ZS0+c2V0U3RyaW5nKCJpZCIsIGlkKCkpOwogICAgIHBhcmVudFN0eWxlU2hlZXRWYWx1
ZS0+c2V0U3RyaW5nKCJocmVmIiwgc3R5bGVTaGVldC0+aHJlZigpKTsKICAgICByZXN1bHQtPnNl
dE9iamVjdCgicGFyZW50U3R5bGVTaGVldCIsIHBhcmVudFN0eWxlU2hlZXRWYWx1ZS5yZWxlYXNl
KCkpOwotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJvcmlnaW4iLCBtX29yaWdpbik7CiAKICAgICBS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3VyZVBhcnNl
ZERhdGFSZWFkeSgpKQpAQCAtMjQ4LDcgKzM4MSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxl
CiAKICAgICByZXN1bHQtPnNldE9iamVjdCgic3R5bGUiLCBidWlsZE9iamVjdEZvclN0eWxlKHJ1
bGUtPnN0eWxlKCkpKTsKICAgICBpZiAoY2FuQmluZCgpKQotICAgICAgICByZXN1bHQtPnNldFN0
cmluZygiaWQiLCBmdWxsUnVsZUlkKHJ1bGUpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmco
InJ1bGVJZCIsIGZ1bGxSdWxlSWQocnVsZSkpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
KCk7CiB9CkBAIC0yNTksOCArMzkyLDE3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjCiAgICAg
aWYgKGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKQogICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNv
dXJjZURhdGFGb3Ioc3R5bGUpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGUsIGZ1bGxTdHls
ZUlkKHN0eWxlKSwgc291cmNlRGF0YSA/IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS5nZXQo
KSA6IDApOwotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwYXJlbnRTdHlsZVNoZWV0SWQiLCBpZCgp
KTsKKyAgICBGcm9udGVuZFByb3BlcnR5SXRlcmF0b3IgaXQgPSBhbGxQcm9wZXJ0aWVzKHJ1bGVP
clN0eWxlSWQoc3R5bGUpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZSwgZnVsbFN0eWxlSWQo
c3R5bGUpLCBpdCwgc291cmNlRGF0YSA/IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS5nZXQo
KSA6IDApOworICAgIGlmIChzb3VyY2VEYXRhKSB7CisgICAgICAgIFN0cmluZyB0ZXh0OworICAg
ICAgICBib29sIHN1Y2Nlc3MgPSBzdHlsZVNoZWV0VGV4dCgmdGV4dCk7CisgICAgICAgIGlmIChz
dWNjZXNzKSB7CisgICAgICAgICAgICBjb25zdCBTb3VyY2VSYW5nZSYgYm9keVJhbmdlID0gc291
cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZTsKKyAgICAgICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJjc3NUZXh0IiwgdGV4dC5zdWJzdHJpbmcoYm9keVJhbmdlLnN0YXJ0
LCBib2R5UmFuZ2UuZW5kIC0gYm9keVJhbmdlLnN0YXJ0KSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIGlkKCkpOwogICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZSgpOwogfQogCkBAIC0zMTIsNiArNDU0LDE3IEBAIGJvb2wgSW5zcGVjdG9y
U3R5bGVTaGVldDo6ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkKICAgICByZXR1cm4gZW5zdXJlVGV4
dCgpICYmIGVuc3VyZVNvdXJjZURhdGEocGFnZVN0eWxlU2hlZXQoKS0+b3duZXJOb2RlKCkpOwog
fQogCitEaXNhYmxlZFByb3BlcnR5U3RvcmUqIEluc3BlY3RvclN0eWxlU2hlZXQ6OmRpc2FibGVk
UHJvcGVydHlTdG9yZUZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBib29sIGNy
ZWF0ZUlmQWJzZW50KQoreworICAgIEhhc2hNYXA8Q1NTU3R5bGVEZWNsYXJhdGlvbiosIERpc2Fi
bGVkUHJvcGVydHlTdG9yZT46Oml0ZXJhdG9yIGl0ID0gbV9zdHlsZURpc2FibGVkUHJvcGVydHlT
dG9yZXMuZmluZChzdHlsZSk7CisgICAgaWYgKGl0ID09IG1fc3R5bGVEaXNhYmxlZFByb3BlcnR5
U3RvcmVzLmVuZCgpKSB7CisgICAgICAgIGlmICghY3JlYXRlSWZBYnNlbnQpCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgaXQgPSBtX3N0eWxlRGlzYWJsZWRQcm9wZXJ0eVN0b3Jlcy5z
ZXQoc3R5bGUsIERpc2FibGVkUHJvcGVydHlTdG9yZSgpKS5maXJzdDsKKyAgICB9CisgICAgcmV0
dXJuICYoaXQtPnNlY29uZCk7Cit9CisKIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6dGV4dChT
dHJpbmcqIHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAoIWVuc3VyZVRleHQoKSkKQEAgLTUxMyw4
ICs2NjYsNyBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0
eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShjb25zdCBTdHJpbgogCiBib29sIEluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZTo6c2V0U3R5bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwg
Y29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIEFTU0VSVChzdHlsZUlkID09ICIwIik7Ci0gICAg
VU5VU0VEX1BBUkFNKHN0eWxlSWQpOworICAgIEFTU0VSVF9VTlVTRUQoc3R5bGVJZCwgc3R5bGVJ
ZCA9PSAiMCIpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIG1fZWxlbWVudC0+c2V0
QXR0cmlidXRlKCJzdHlsZSIsIHRleHQsIGVjKTsKICAgICBtX3J1bGVTb3VyY2VEYXRhLmNsZWFy
KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0Lmgg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKaW5kZXggMzhhYjc3Ny4u
ZmYyMzRhZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVl
dC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaApAQCAtMjYs
MTYgKzI2LDE0IEBACiAjZGVmaW5lIEluc3BlY3RvclN0eWxlU2hlZXRfaAogCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHlTb3VyY2VEYXRhLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIGNsYXNzIFBhcnNlZFN0eWxlU2hlZXQ7CiAKQEAgLTQzLDExICs0MSw1NCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1J1bGVMaXN0OwogY2xhc3MgQ1NTU3R5
bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBEb2N1bWVudDsKIGNs
YXNzIEVsZW1lbnQ7CiBjbGFzcyBOb2RlOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAordHlw
ZWRlZiBzdGQ6OnBhaXI8Q1NTUHJvcGVydHlTb3VyY2VEYXRhLCBib29sPiBTb3VyY2VBd2FyZVBy
b3BlcnR5OwordHlwZWRlZiBzdGQ6OnBhaXI8dW5zaWduZWQsIFZlY3RvcjxTb3VyY2VBd2FyZVBy
b3BlcnR5PiA+IERpc2FibGVkUHJvcGVydGllc1Nsb3Q7Cit0eXBlZGVmIFZlY3RvcjxEaXNhYmxl
ZFByb3BlcnRpZXNTbG90PiBEaXNhYmxlZFByb3BlcnR5U3RvcmU7CisKK3N0cnVjdCBGcm9udGVu
ZFByb3BlcnR5RGF0YSB7CisgICAgRnJvbnRlbmRQcm9wZXJ0eURhdGEoU291cmNlQXdhcmVQcm9w
ZXJ0eSBzb3VyY2VBd2FyZVByb3BlcnR5LCBib29sIGRpc2FibGVkKQorICAgICAgICA6IHByb3Bl
cnR5KHNvdXJjZUF3YXJlUHJvcGVydHkuZmlyc3QpCisgICAgICAgICwgaGFzU291cmNlKHNvdXJj
ZUF3YXJlUHJvcGVydHkuc2Vjb25kKQorICAgICAgICAsIGRpc2FibGVkKGRpc2FibGVkKQorICAg
IHsKKyAgICB9CisKKyAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEgcHJvcGVydHk7CisgICAgYm9v
bCBoYXNTb3VyY2U7CisgICAgYm9vbCBkaXNhYmxlZDsKK307CisKK2NsYXNzIEZyb250ZW5kUHJv
cGVydHlJdGVyYXRvciB7CitwdWJsaWM6CisgICAgRnJvbnRlbmRQcm9wZXJ0eUl0ZXJhdG9yKGNv
bnN0IFZlY3RvcjxTb3VyY2VBd2FyZVByb3BlcnR5PiYgbGl2ZVByb3BlcnRpZXMsIERpc2FibGVk
UHJvcGVydHlTdG9yZSogZGlzYWJsZWRQcm9wZXJ0aWVzKTsKKworICAgIEZyb250ZW5kUHJvcGVy
dHlEYXRhIG9wZXJhdG9yKigpIGNvbnN0OworICAgIEZyb250ZW5kUHJvcGVydHlJdGVyYXRvciYg
b3BlcmF0b3IrKygpOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcm9udGVuZFByb3BlcnR5
SXRlcmF0b3ImIG90aGVySXQpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEluZGV4ID09IG90aGVy
SXQubV9jdXJyZW50SW5kZXg7IH0KKyAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gKCFh
dERpc2FibGVkUHJvcGVydHkoKSAmJiBtX2xpdmVJdCA9PSBtX2xpdmVQcm9wZXJ0aWVzLmVuZCgp
KTsgfQorICAgIHZvaWQgZW5hYmxlQ3VycmVudCgpOworCitwcml2YXRlOgorICAgIGJvb2wgYXRE
aXNhYmxlZFByb3BlcnR5KCkgY29uc3Q7CisKKyAgICBWZWN0b3I8U291cmNlQXdhcmVQcm9wZXJ0
eT4gbV9saXZlUHJvcGVydGllczsKKyAgICBEaXNhYmxlZFByb3BlcnR5U3RvcmUqIG1fZGlzYWJs
ZWRQcm9wZXJ0aWVzOworICAgIHVuc2lnbmVkIG1fY3VycmVudEluZGV4OworICAgIHVuc2lnbmVk
IG1fY3VycmVudERpc2FibGVkSW5kZXg7CisgICAgdW5zaWduZWQgbV9zbG90UG9zaXRpb247Cisg
ICAgdW5zaWduZWQgbV9wb3NpdGlvbkluU2xvdDsKKyAgICBWZWN0b3I8U291cmNlQXdhcmVQcm9w
ZXJ0eT46Oml0ZXJhdG9yIG1fbGl2ZUl0OworICAgIFZlY3RvcjxTb3VyY2VBd2FyZVByb3BlcnR5
Pjo6aXRlcmF0b3IgbV9kaXNhYmxlZFNsb3RJdDsKKyAgICBEaXNhYmxlZFByb3BlcnR5U3RvcmU6
Oml0ZXJhdG9yIG1fZGlzYWJsZWRJdDsKK307CisKIGNsYXNzIEluc3BlY3RvclN0eWxlU2hlZXQg
OiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JTdHlsZVNoZWV0PiB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYgaWQsIENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBjb25zdCBTdHJpbmcmIG9yaWdp
biwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCkKQEAgLTY0LDYgKzEwNSw4IEBAIHB1YmxpYzoK
ICAgICBib29sIHNldFJ1bGVTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHJ1bGVJZCwgY29uc3QgU3Ry
aW5nJiBzZWxlY3Rvcik7CiAgICAgQ1NTU3R5bGVSdWxlKiBhZGRSdWxlKGNvbnN0IFN0cmluZyYg
c2VsZWN0b3IpOwogICAgIENTU1N0eWxlUnVsZSogcnVsZUZvcklkKGNvbnN0IFN0cmluZyYpIGNv
bnN0OworICAgIEZyb250ZW5kUHJvcGVydHlJdGVyYXRvciBhbGxQcm9wZXJ0aWVzKGNvbnN0IFN0
cmluZyYgc3R5bGVJZCk7CisgICAgYm9vbCB0b2dnbGVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHN0
eWxlSWQsIHVuc2lnbmVkIGdsb2JhbEluZGV4LCBib29sIGRpc2FibGUpOwogICAgIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKTsKICAgICBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSop
OwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclN0eWxlKENT
U1N0eWxlRGVjbGFyYXRpb24qKTsKQEAgLTc4LDYgKzEyMSw3IEBAIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgcnVsZUlu
ZGV4QnlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpOworICAgIHZpcnR1YWwgRGlzYWJsZWRQcm9wZXJ0eVN0
b3JlKiBkaXNhYmxlZFByb3BlcnR5U3RvcmVGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwg
Ym9vbCBjcmVhdGVJZkFic2VudCk7CiAKIHByaXZhdGU6CiAgICAgYm9vbCB0ZXh0KFN0cmluZyog
cmVzdWx0KSBjb25zdDsKQEAgLTEwMSw2ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBt
X2RvY3VtZW50VVJMOwogICAgIGJvb2wgbV9pc1JldmFsaWRhdGluZzsKICAgICBQYXJzZWRTdHls
ZVNoZWV0KiBtX3BhcnNlZFN0eWxlU2hlZXQ7CisgICAgSGFzaE1hcDxDU1NTdHlsZURlY2xhcmF0
aW9uKiwgRGlzYWJsZWRQcm9wZXJ0eVN0b3JlPiBtX3N0eWxlRGlzYWJsZWRQcm9wZXJ0eVN0b3Jl
czsKIH07CiAKIGNsYXNzIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSA6IHB1Ymxp
YyBJbnNwZWN0b3JTdHlsZVNoZWV0IHsKQEAgLTExMSwxNCArMTU2LDE1IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoY29uc3QgU3RyaW5n
JiBpZCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBvcmlnaW4pOwotICAgIHZpcnR1
YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChjb25zdCBTdHJpbmcmIGlkKSBjb25z
dCB7IEFTU0VSVChpZCA9PSAiMCIpOyBVTlVTRURfUEFSQU0oaWQpOyByZXR1cm4gaW5saW5lU3R5
bGUoKTsgfQorICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChjb25z
dCBTdHJpbmcmIGlkKSBjb25zdCB7IEFTU0VSVF9VTlVTRUQoaWQsIGlkID09ICIwIik7IHJldHVy
biBpbmxpbmVTdHlsZSgpOyB9CiAgICAgdmlydHVhbCBib29sIHNldFN0eWxlVGV4dChjb25zdCBT
dHJpbmcmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiAKIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBSZWZQ
dHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlKSBjb25zdCB7IEFTU0VSVChzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsgVU5VU0VE
X1BBUkFNKHN0eWxlKTsgcmV0dXJuIG1fcnVsZVNvdXJjZURhdGE7IH0KKyAgICB2aXJ0dWFsIFJl
ZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUpIGNvbnN0IHsgQVNTRVJUX1VOVVNFRChzdHlsZSwgc3R5bGUgPT0gaW5saW5l
U3R5bGUoKSk7IHJldHVybiBtX3J1bGVTb3VyY2VEYXRhOyB9CiAgICAgdmlydHVhbCB1bnNpZ25l
ZCBydWxlSW5kZXhCeVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdCB7IHJldHVybiAw
OyB9CiAgICAgdmlydHVhbCBib29sIGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpOworICAgIHZpcnR1
YWwgRGlzYWJsZWRQcm9wZXJ0eVN0b3JlKiBkaXNhYmxlZFByb3BlcnR5U3RvcmVGb3JTdHlsZShD
U1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgYm9vbCkgeyBBU1NFUlRfVU5VU0VEKHN0eWxlLCBz
dHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsgcmV0dXJuICZtX2Rpc2FibGVkUHJvcGVydHlTdG9yZTsg
fQogCiBwcml2YXRlOgogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGlubGluZVN0eWxlKCkgY29u
c3Q7CkBAIC0xMjYsNiArMTcyLDcgQEAgcHJpdmF0ZToKIAogICAgIEVsZW1lbnQqIG1fZWxlbWVu
dDsKICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IG1fcnVsZVNvdXJjZURhdGE7CisgICAg
RGlzYWJsZWRQcm9wZXJ0eVN0b3JlIG1fZGlzYWJsZWRQcm9wZXJ0eVN0b3JlOwogfTsKIAogI2Vu
ZGlmCg==
</data>
<flag name="review"
          id="60782"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71158</attachid>
            <date>2010-10-19 05:52:05 -0700</date>
            <delta_ts>2010-10-19 08:16:22 -0700</delta_ts>
            <desc>[PATCH] Implemented another approach suggested by pfeldman</desc>
            <filename>toggle.patch</filename>
            <type>text/plain</type>
            <size>36010</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IGUyOTE3OWIyOTFhZmNhY2QwODc3OTFkMjA4NzkzZTg0ZTJlN2I4M2EKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBGcmkgT2N0IDE1
IDE1OjE3OjU4IDIwMTAgKzA0MDAKCiAgICBQcmVwYXJlIHRvZ2dsZWQgcHJvcGVydGllcyBmb3Ig
Y29tbWl0CgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAzN2JhYzgxLi44MmRmMWMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEwLTEwLTE5ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogSW1wbGVtZW50IHBy
b3BlcnR5IHRvZ2dsaW5nIGluIEluc3BlY3RvckNTU0FnZW50CisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgaW1wbGVtZW50cyBlbmFibGVtZW50L2Rpc2FibGVtZW50IG9mIHN0eWxlIHByb3BlcnRpZXMu
CisgICAgICAgIERpc2FibGVkIHByb3BlcnRpZXMgYXJlIHBlcnNpc3RlZCBpbiB0aGUgc2NvcGUg
b2YgSW5zcGVjdG9yQ1NTQWdlbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NzMzOQorCisgICAgICAgIERyaXZlLWJ5OiBmaXhlcyBmb3IgdGhlIFdl
YiBJbnNwZWN0b3IgUHJvdG9jb2wgZm9ybWF0LgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojpi
dWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50
Ojpwb3B1bGF0ZUluc3BlY3RvckZyb250ZW5kUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUyKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZURhdGEyKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojpwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlU3R5bGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVByb3BlcnR5SXRlcmF0b3I6Okluc3BlY3RvclN0eWxl
UHJvcGVydHlJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVByb3Bl
cnR5SXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHls
ZVByb3BlcnR5SXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3R5bGVQcm9wZXJ0eUl0ZXJhdG9yOjpjdXJyZW50RGlzYWJsZWRQcm9wZXJ0eU9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVByb3BlcnR5SXRlcmF0b3I6OmF0RGlz
YWJsZWRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Ojph
bGxQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1
aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHls
ZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dHlsZVNoZWV0OjpkaXNhYmxlZFByb3BlcnR5U3RvcmVGb3JTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXREaXNhYmxlZFByb3BlcnRpZXNGb3JTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZXZhbGlkYXRlU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6cmVzb3VyY2VTdHlsZVNo
ZWV0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5l
U3R5bGU6OnNldFN0eWxlVGV4dCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlUHJvcGVydHk6Okluc3Bl
Y3RvclN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVQcm9w
ZXJ0eUl0ZXJhdG9yOjphdEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNo
ZWV0Rm9ySW5saW5lU3R5bGU6OnN0eWxlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpydWxlU291cmNlRGF0YUZvcik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnNldERpc2FibGVk
UHJvcGVydGllc0ZvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hl
ZXRGb3JJbmxpbmVTdHlsZTo6ZGlzYWJsZWRQcm9wZXJ0eVN0b3JlRm9yU3R5bGUpOgorCiAyMDEw
LTEwLTE5ICBIYXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNw
cAppbmRleCBlMGZhYjg1Li4zYTRkYjJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwCkBAIC00OSw3ICs0OSw4IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotCisvLyBDdXJyZW50bHkgaW1wbGVtZW50ZWQg
bW9kZWw6CisvLwogLy8gY3NzUHJvcGVydHkgPSB7CiAvLyAgICBuYW1lICAgICAgICAgIDogPHN0
cmluZz4sCiAvLyAgICB2YWx1ZSAgICAgICAgIDogPHN0cmluZz4sCkBAIC02Miw2ICs2MywxMSBA
QAogLy8gICAgZW5kT2Zmc2V0ICAgICA6IDxudW1iZXI+LCAvLyBPcHRpb25hbCAtIHByb3BlcnR5
IHRleHQgZW5kIG9mZnNldCBpbiBlbmNsb3Npbmcgc3R5bGUgZGVjbGFyYXRpb24uIEFic2VudCBm
b3IgY29tcHV0ZWQgc3R5bGVzIGFuZCBzdWNoLgogLy8gfQogLy8KKy8vIG5hbWUgKyB2YWx1ZSAr
IHByaW9yaXR5IDogcHJlc2VudCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBlbmFibGVkCisvLyB0ZXh0
ICAgICAgICAgICAgICAgICAgICA6IHByZXNlbnQgd2hlbiB0aGUgcHJvcGVydHkgaXMgZGlzYWJs
ZWQKKy8vCisvLyBGb3IgZGlzYWJsZWQgcHJvcGVydGllcywgc3RhcnRPZmZzZXQgPT09IGVuZE9m
ZnNldCA9PT0gaW5zZXJ0aW9uIHBvaW50IGZvciB0aGUgcHJvcGVydHkuCisvLwogLy8gc3RhdHVz
OgogLy8gImRpc2FibGVkIiA9PSBwcm9wZXJ0eSBkaXNhYmxlZCBieSB1c2VyCiAvLyAiYWN0aXZl
IiA9PSBwcm9wZXJ0eSBwYXJ0aWNpcGF0ZXMgaW4gdGhlIGNvbXB1dGVkIHN0eWxlIGNhbGN1bGF0
aW9uCkBAIC03MCw4ICs3Niw3IEBACiAvLwogLy8KIC8vIGNzc1N0eWxlID0gewotLy8gICAgc3R5
bGVJZCAgICAgICAgIDogPG51bWJlcj4sIC8vIE9wdGlvbmFsCi0vLyAgICBzdHlsZVNoZWV0SWQg
ICAgOiA8bnVtYmVyPiwgLy8gUGFyZW50OiAtMSBmb3IgaW5saW5lIHN0eWxlcyAoPGZvbyBzdHls
ZT0iLi4iPikKKy8vICAgIHN0eWxlSWQgICAgICAgICA6IDxzdHJpbmc+LCAvLyBPcHRpb25hbAog
Ly8gICAgY3NzUHJvcGVydGllcyAgIDogWwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICNj
c3NQcm9wZXJ0eSwKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KQEAgLTgxLDYxICs4
Niw1MiBAQAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZE5hbWUxIDogc2hv
cnRoYW5kVmFsdWUxLAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZE5hbWUy
IDogc2hvcnRoYW5kVmFsdWUyCiAvLyAgICAgICAgICAgICAgICAgICAgICB9LAotLy8gICAgY3Nz
VGV4dCAgICAgICAgIDogPHN0cmluZz4sIC8vIGRlY2xhcmF0aW9uIHRleHQKLS8vICAgIHByb3Bl
cnRpZXMgICAgICA6IHsgfSAvLyA/Pz8KKy8vICAgIGNzc1RleHQgICAgICAgICA6IDxzdHJpbmc+
LCAvLyBPcHRpb25hbCAtIGRlY2xhcmF0aW9uIHRleHQKKy8vICAgIHByb3BlcnRpZXMgICAgICA6
IHsgd2lkdGgsIGhlaWdodCB9CiAvLyB9CiAvLwotLy8gLy8gVE9ETzoKLS8vIC8vIC0gY29udmVy
dCBkaXNhYmxlZFByb3BlcnRpZXMgdG8gZW5hYmxlZCBmbGFnLgotLy8gLy8gLSBjb252ZXJ0IHdp
ZHRoLCBoZWlnaHQgdG8gcHJvcGVydGllcwotLy8KIC8vIGNzc1J1bGUgPSB7Ci0vLyAgICBydWxl
SWQgICAgICAgOiA8bnVtYmVyPiwKLS8vICAgIHNlbGVjdG9yVGV4dCA6IDxzdHJpbmc+Ci0vLyAg
ICBzb3VyY2VVUkwgICAgOiA8c3RyaW5nPgotLy8gICAgc291cmNlTGluZSAgIDogPHN0cmluZz4K
LS8vICAgIHN0eWxlU2hlZXRJZCA6IDxudW1iZXI+IC8vIGFsc28gZm91bmQgaW4gc3R5bGUKLS8v
ICAgIG9yaWdpbiAgICAgICA6IDxzdHJpbmc+IC8vICIiIHx8ICJ1c2VyLWFnZW50IiB8fCAidXNl
ciIgfHwgImluc3BlY3RvciIKKy8vICAgIHJ1bGVJZCAgICAgICA6IDxzdHJpbmc+LCAvLyBPcHRp
b25hbAorLy8gICAgc2VsZWN0b3JUZXh0IDogPHN0cmluZz4sCisvLyAgICBzb3VyY2VVUkwgICAg
OiA8c3RyaW5nPiwKKy8vICAgIHNvdXJjZUxpbmUgICA6IDxzdHJpbmc+LAorLy8gICAgb3JpZ2lu
ICAgICAgIDogPHN0cmluZz4sIC8vICIiIHx8ICJ1c2VyLWFnZW50IiB8fCAidXNlciIgfHwgImlu
c3BlY3RvciIKIC8vICAgIHN0eWxlICAgICAgICA6ICNjc3NTdHlsZQogLy8gfQogLy8KLS8vIC8v
IFRPRE86Ci0vLyAvLyAtIGZpeCBvcmlnaW4KLS8vIC8vIC0gYWRkIHNvdXJjZVVSTAotLy8gLy8g
LSBmaXggcGFyZW50U3R5bGVTaGVldElkCi0vLwogLy8gY3NzU3R5bGVTaGVldCA9IHsKIC8vICAg
IHN0eWxlU2hlZXRJZCAgIDogPG51bWJlcj4KLS8vICAgIGhyZWYgICAgICAgICAgIDogPHN0cmlu
Zz4KKy8vICAgIHNvdXJjZVVSTCAgICAgIDogPHN0cmluZz4KIC8vICAgIHRpdGxlICAgICAgICAg
IDogPHN0cmluZz4KIC8vICAgIGRpc2FibGVkICAgICAgIDogPGJvb2xlYW4+Ci0vLyAgICBkb2N1
bWVudE5vZGVJZCA6IDxudW1iZXI+CiAvLyAgICBydWxlcyAgICAgICAgICA6IFsKIC8vICAgICAg
ICAgICAgICAgICAgICAgICAgICNjc3NSdWxlLAogLy8gICAgICAgICAgICAgICAgICAgICAgICAg
Li4uCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAjY3NzUnVsZQogLy8gICAgICAgICAgICAg
ICAgICAgICBdCisvLyAgICB0ZXh0ICAgICAgICAgICA6IDxzdHJpbmc+IC8vIE9wdGlvbmFsIC0g
d2hlbmV2ZXIgdGhlIHRleHQgaXMgYXZhaWxhYmxlIGZvciBhIHRleHQtYmFzZWQgc3R5bGVzaGVl
dAogLy8gfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIHN0YXRpYwotUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclN0eWxlKENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBjb25zdCBTdHJpbmcmIGZ1bGxTdHlsZUlkLCBDU1NT
dHlsZVNvdXJjZURhdGEqIHNvdXJjZURhdGEpCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUsIGNvbnN0IFN0cmluZyYgZnVsbFN0eWxlSWQsIEluc3BlY3RvclN0eWxlUHJvcGVy
dHlJdGVyYXRvciYgcHJvcGVydGllc0l0LCBDU1NTdHlsZVNvdXJjZURhdGEqIHNvdXJjZURhdGEp
CiB7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgICBpZiAoIWZ1bGxTdHlsZUlkLmlzRW1wdHkoKSkKLSAgICAgICAgcmVz
dWx0LT5zZXRTdHJpbmcoImlkIiwgZnVsbFN0eWxlSWQpOworICAgICAgICByZXN1bHQtPnNldFN0
cmluZygic3R5bGVJZCIsIGZ1bGxTdHlsZUlkKTsKIAotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJ3
aWR0aCIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJ3aWR0aCIpKTsKLSAgICByZXN1bHQtPnNl
dFN0cmluZygiaGVpZ2h0Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpKTsKLSAg
ICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiogcHJvcGVydHlEYXRhID0gMDsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0aWVzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBwcm9wZXJ0aWVzLT5zZXRTdHJpbmcoIndpZHRoIiwgc3R5bGUtPmdldFByb3Bl
cnR5VmFsdWUoIndpZHRoIikpOworICAgIHByb3BlcnRpZXMtPnNldFN0cmluZygiaGVpZ2h0Iiwg
c3R5bGUtPmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpKTsKIAogICAgIGlmIChzb3VyY2VEYXRh
KSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJzdGFydE9mZnNldCIsIHNvdXJjZURhdGEt
PnN0eWxlQm9keVJhbmdlLnN0YXJ0KTsKLSAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoImVuZE9m
ZnNldCIsIHNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCk7Ci0gICAgICAgIHByb3BlcnR5
RGF0YSA9ICZzb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7CisgICAgICAgIHByb3BlcnRpZXMtPnNl
dE51bWJlcigic3RhcnRPZmZzZXQiLCBzb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5zdGFydCk7
CisgICAgICAgIHByb3BlcnRpZXMtPnNldE51bWJlcigiZW5kT2Zmc2V0Iiwgc291cmNlRGF0YS0+
c3R5bGVCb2R5UmFuZ2UuZW5kKTsKICAgICB9Ci0gICAgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQ
cm9wZXJ0aWVzKHN0eWxlLCByZXN1bHQuZ2V0KCksIHByb3BlcnR5RGF0YSk7CisgICAgcmVzdWx0
LT5zZXRPYmplY3QoInByb3BlcnRpZXMiLCBwcm9wZXJ0aWVzKTsKKworICAgIHBvcHVsYXRlT2Jq
ZWN0V2l0aFN0eWxlUHJvcGVydGllcyhzdHlsZSwgcmVzdWx0LmdldCgpLCBwcm9wZXJ0aWVzSXQp
OwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CkBAIC0xNjQsNiArMTYwLDI3IEBA
IENTU1N0eWxlUnVsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzQ1NTU3R5bGVSdWxlKFN0eWxlQmFz
ZSogc3R5bGVCYXNlKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxl
KTsKIH0KIAorLy8gc3RhdGljCit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpwb3B1bGF0ZUluc3Bl
Y3RvckZyb250ZW5kUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgVmVjdG9y
PENTU1Byb3BlcnR5U291cmNlRGF0YT4qIHNvdXJjZVByb3BlcnR5RGF0YSwgVmVjdG9yPEluc3Bl
Y3RvclN0eWxlUHJvcGVydHk+KiByZXN1bHQpCit7CisgICAgSGFzaFNldDxTdHJpbmc+IGZvdW5k
U2hvcnRoYW5kczsKKyAgICBIYXNoU2V0PFN0cmluZz4gc291cmNlUHJvcGVydHlOYW1lczsKKyAg
ICBpZiAoc291cmNlUHJvcGVydHlEYXRhKSB7CisgICAgICAgIGZvciAoVmVjdG9yPENTU1Byb3Bl
cnR5U291cmNlRGF0YT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc291cmNlUHJvcGVydHlEYXRhLT5i
ZWdpbigpOyBpdCAhPSBzb3VyY2VQcm9wZXJ0eURhdGEtPmVuZCgpOyArK2l0KSB7CisgICAgICAg
ICAgICByZXN1bHQtPmFwcGVuZChJbnNwZWN0b3JTdHlsZVByb3BlcnR5KCppdCwgdHJ1ZSwgZmFs
c2UpKTsKKyAgICAgICAgICAgIHNvdXJjZVByb3BlcnR5TmFtZXMuYWRkKGl0LT5uYW1lKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwLCBzaXplID0gc3R5bGUtPmxlbmd0
aCgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gc3R5bGUtPml0ZW0o
aSk7CisgICAgICAgIGlmIChzb3VyY2VQcm9wZXJ0eU5hbWVzLmNvbnRhaW5zKG5hbWUpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc291cmNlUHJvcGVydHlOYW1lcy5hZGQobmFt
ZSk7CisgICAgICAgIHJlc3VsdC0+YXBwZW5kKEluc3BlY3RvclN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlTb3VyY2VEYXRhKG5hbWUsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpLCAhc3R5
bGUtPmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSkuaXNFbXB0eSgpLCB0cnVlLCBTb3VyY2VSYW5n
ZSgpKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgfQorfQogCiBJbnNwZWN0b3JDU1NBZ2VudDo6SW5z
cGVjdG9yQ1NTQWdlbnQoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50LCBJbnNwZWN0b3JGcm9u
dGVuZCogZnJvbnRlbmQpCiAgICAgOiBtX2RvbUFnZW50KGRvbUFnZW50KQpAQCAtMjQ2LDcgKzI2
MywxMSBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIo
bG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYQogICAgIGlmICghZGVmYXVsdFZpZXcpCiAg
ICAgICAgIHJldHVybjsKIAotICAgICpzdHlsZSA9IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoZGVmYXVs
dFZpZXctPmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgIiIpLmdldCgpLCAiIik7CisgICAgUmVm
UHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGUgPSBkZWZhdWx0Vmlldy0+Z2V0
Q29tcHV0ZWRTdHlsZShlbGVtZW50LCAiIik7CisgICAgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJv
cGVydHk+IHByb3BlcnRpZXM7CisgICAgcG9wdWxhdGVJbnNwZWN0b3JGcm9udGVuZFByb3BlcnRp
ZXMoY29tcHV0ZWRTdHlsZS5nZXQoKSwgMCwgJnByb3BlcnRpZXMpOworICAgIEluc3BlY3RvclN0
eWxlUHJvcGVydHlJdGVyYXRvciBwcm9wZXJ0aWVzSXQocHJvcGVydGllcywgMCk7CisgICAgKnN0
eWxlID0gYnVpbGRPYmplY3RGb3JTdHlsZShjb21wdXRlZFN0eWxlLmdldCgpLCAiIiwgcHJvcGVy
dGllc0l0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0SW5oZXJpdGVkU3R5bGVz
Rm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxlKQpAQCAt
MzA4LDcgKzMyOSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0
Mihjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyCiAgICAgaW5zcGVjdG9yU3R5
bGVTaGVldC0+c2V0VGV4dCh0ZXh0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0
U3R5bGVUZXh0Mihjb25zdCBTdHJpbmcmIGZ1bGxTdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQs
IFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OnNldFN0eWxlRGF0YTIoY29uc3QgU3RyaW5nJiBmdWxsU3R5bGVJZCwgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gc3R5bGVEYXRhT2JqZWN0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQp
CiB7CiAgICAgVmVjdG9yPFN0cmluZz4gaWRQYXJ0czsKICAgICBmdWxsU3R5bGVJZC5zcGxpdCgn
OicsIGlkUGFydHMpOwpAQCAtMzE4LDE3ICszMzksMTIgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6c2V0U3R5bGVUZXh0Mihjb25zdCBTdHJpbmcmIGZ1bGxTdHlsZUlkLCBjb25zdCBTdHJpbmcm
IHQKICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmICghaW5zcGVjdG9yU3R5bGVTaGVldC0+c2V0U3R5bGVUZXh0KGlkUGFydHMuYXQoMSksIHRl
eHQpKQorICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldC0+c2V0U3R5bGUoaWRQYXJ0cy5hdCgx
KSwgc3R5bGVEYXRhT2JqZWN0LmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgKnJlc3Vs
dCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5
bGVTaGVldC0+c3R5bGVGb3JJZChpZFBhcnRzLmF0KDEpKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5Mihjb25zdCBTdHJpbmcmLCBsb25nLCBib29sKQotewot
ICAgIC8vIEZJWE1FKGFwYXZsb3YpOiBpbXBsZW1lbnQKLX0KLQogdm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6c2V0UnVsZVNlbGVjdG9yMihjb25zdCBTdHJpbmcmIGZ1bGxSdWxlSWQsIGNvbnN0IFN0
cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKIHsKICAgICBW
ZWN0b3I8U3RyaW5nPiBpZFBhcnRzOwpAQCAtMzgwLDcxICszOTYsNTcgQEAgRWxlbWVudCogSW5z
cGVjdG9yQ1NTQWdlbnQ6OmlubGluZVN0eWxlRWxlbWVudChDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSkKIH0KIAogLy8gc3RhdGljCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojpwb3B1bGF0ZU9i
amVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEluc3Bl
Y3Rvck9iamVjdCogcmVzdWx0LCBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiogcHJvcGVy
dHlEYXRhKQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQ
cm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBJbnNwZWN0b3JPYmplY3QqIHJl
c3VsdCwgSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eUl0ZXJhdG9yJiBwcm9wZXJ0aWVzSXQpCiB7CiAg
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm9wZXJ0aWVzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNob3J0aGFuZFZhbHVlcyA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+ID4gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5OwogICAg
IEhhc2hTZXQ8U3RyaW5nPiBmb3VuZFNob3J0aGFuZHM7Ci0gICAgSGFzaFNldDxTdHJpbmc+IHNv
dXJjZVByb3BlcnR5TmFtZXM7Ci0gICAgaWYgKHByb3BlcnR5RGF0YSkgewotICAgICAgICBmb3Ig
KFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHByb3Bl
cnR5RGF0YS0+YmVnaW4oKTsgaXQgIT0gcHJvcGVydHlEYXRhLT5lbmQoKTsgKytpdCkgewotICAg
ICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eUVudHJ5ID0gKml0
OwotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHJvcGVydHkgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgcHJvcGVydGllcy0+cHVzaE9iamVjdChw
cm9wZXJ0eSk7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBwcm9wZXJ0eUVudHJ5
Lm5hbWU7Ci0gICAgICAgICAgICBzb3VyY2VQcm9wZXJ0eU5hbWVzLmFkZChuYW1lKTsKKworICAg
IGZvciAoOyAhcHJvcGVydGllc0l0LmF0RW5kKCk7ICsrcHJvcGVydGllc0l0KSB7CisgICAgICAg
IEluc3BlY3RvclN0eWxlUHJvcGVydHkgcHJvcGVydHlEYXRhKCpwcm9wZXJ0aWVzSXQpOworICAg
ICAgICBjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5RW50cnkgPSBwcm9wZXJ0
eURhdGEucHJvcGVydHk7CisgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IHByb3BlcnR5RW50
cnkubmFtZTsKKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0eSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHByb3BlcnRpZXMtPnB1c2hPYmplY3Qo
cHJvcGVydHkpOworICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzdGF0dXMiLCBwcm9wZXJ0
eURhdGEuZGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogImFjdGl2ZSIpOworICAgICAgICBwcm9wZXJ0
eS0+c2V0Qm9vbGVhbigicGFyc2VkT2siLCBwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKTsKKyAgICAg
ICAgaWYgKCFwcm9wZXJ0eURhdGEuZGlzYWJsZWQpIHsKICAgICAgICAgICAgIHByb3BlcnR5LT5z
ZXRTdHJpbmcoIm5hbWUiLCBuYW1lKTsKICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmco
InZhbHVlIiwgcHJvcGVydHlFbnRyeS52YWx1ZSk7CiAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0
U3RyaW5nKCJwcmlvcml0eSIsIHByb3BlcnR5RW50cnkuaW1wb3J0YW50ID8gImltcG9ydGFudCIg
OiAiIik7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzdGF0dXMiLCAiYWN0aXZl
Iik7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigicGFyc2VkT2siLCBwcm9wZXJ0
eUVudHJ5LnBhcnNlZE9rKTsKLSAgICAgICAgICAgIHByb3BlcnR5LT5zZXROdW1iZXIoInN0YXJ0
T2Zmc2V0IiwgcHJvcGVydHlFbnRyeS5yYW5nZS5zdGFydCk7Ci0gICAgICAgICAgICBwcm9wZXJ0
eS0+c2V0TnVtYmVyKCJlbmRPZmZzZXQiLCBwcm9wZXJ0eUVudHJ5LnJhbmdlLmVuZCk7Ci0gICAg
ICAgICAgICBpZiAocHJvcGVydHlFbnRyeS5wYXJzZWRPaykgeworICAgICAgICAgICAgaWYgKHBy
b3BlcnR5RGF0YS5oYXNTb3VyY2UpIHsKICAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9v
bGVhbigiaW1wbGljaXQiLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHNob3J0aGFu
ZCA9IHN0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKLSAgICAgICAgICAgICAgICBw
cm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgc2hvcnRoYW5kKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIXNob3J0aGFuZC5pc0VtcHR5KCkgJiYgIWZvdW5kU2hvcnRoYW5kcy5jb250
YWlucyhzaG9ydGhhbmQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kU2hvcnRoYW5kcy5h
ZGQoc2hvcnRoYW5kKTsKLSAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kVmFsdWVzLT5zZXRT
dHJpbmcoc2hvcnRoYW5kLCBzaG9ydGhhbmRWYWx1ZShzdHlsZSwgc2hvcnRoYW5kKSk7CisgICAg
ICAgICAgICAgICAgcHJvcGVydHktPnNldE51bWJlcigic3RhcnRPZmZzZXQiLCBwcm9wZXJ0eUVu
dHJ5LnJhbmdlLnN0YXJ0KTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0TnVtYmVyKCJl
bmRPZmZzZXQiLCBwcm9wZXJ0eUVudHJ5LnJhbmdlLmVuZCk7CisKKyAgICAgICAgICAgICAgICBI
YXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gPjo6aXRlcmF0b3IgYWN0aXZl
SXQgPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuZmluZChuYW1lKTsKKyAg
ICAgICAgICAgICAgICBpZiAoYWN0aXZlSXQgIT0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2
ZVByb3BlcnR5LmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQt
PnNldFN0cmluZygic3RhdHVzIiwgImluYWN0aXZlIik7CisgICAgICAgICAgICAgICAgICAgIGFj
dGl2ZUl0LT5zZWNvbmQtPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsICIiKTsKICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVBy
b3BlcnR5LnNldChuYW1lLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJpbXBsaWNpdCIsIGZhbHNlKTsKLSAgICAg
ICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgIiIpOworICAg
ICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJpbXBsaWNpdCIsIHN0eWxlLT5pc1By
b3BlcnR5SW1wbGljaXQobmFtZSkpOworICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJp
bmcoInN0YXR1cyIsICJzdHlsZSIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgSGFzaE1h
cDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+ID46Oml0ZXJhdG9yIGFjdGl2ZUl0ID0g
cHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmZpbmQobmFtZSk7Ci0gICAgICAg
ICAgICBpZiAoYWN0aXZlSXQgIT0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5
LmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgYWN0aXZlSXQtPnNlY29uZC0+c2V0U3RyaW5nKCJz
dGF0dXMiLCAiaW5hY3RpdmUiKTsKLSAgICAgICAgICAgICAgICBhY3RpdmVJdC0+c2Vjb25kLT5z
ZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCAiIik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgcHJvcGVydHktPnNldFN0cmluZygidGV4dCIsIHByb3BlcnR5RW50cnkudmFsdWUpOworCisg
ICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKSB7CisgICAgICAgICAgICAvLyBCb3Ro
IGZvciBzdHlsZS1vcmlnaW5hdGVkIGFuZCBwYXJzZWQgc291cmNlIHByb3BlcnRpZXMuCisgICAg
ICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5h
bWUpOworICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsIHNo
b3J0aGFuZCk7CisgICAgICAgICAgICBpZiAoIXNob3J0aGFuZC5pc0VtcHR5KCkgJiYgIWZvdW5k
U2hvcnRoYW5kcy5jb250YWlucyhzaG9ydGhhbmQpKSB7CisgICAgICAgICAgICAgICAgZm91bmRT
aG9ydGhhbmRzLmFkZChzaG9ydGhhbmQpOworICAgICAgICAgICAgICAgIHNob3J0aGFuZFZhbHVl
cy0+c2V0U3RyaW5nKHNob3J0aGFuZCwgc2hvcnRoYW5kVmFsdWUoc3R5bGUsIHNob3J0aGFuZCkp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2
ZVByb3BlcnR5LnNldChuYW1lLCBwcm9wZXJ0eSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBm
b3IgKGludCBpID0gMCwgc2l6ZSA9IHN0eWxlLT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBTdHJpbmcgbmFtZSA9IHN0eWxlLT5pdGVtKGkpOwotICAgICAgICBpZiAoc291cmNl
UHJvcGVydHlOYW1lcy5jb250YWlucyhuYW1lKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIHNvdXJjZVByb3BlcnR5TmFtZXMuYWRkKG5hbWUpOwotICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwcm9wZXJ0eSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
ICAgIHByb3BlcnRpZXMtPnB1c2hPYmplY3QocHJvcGVydHkpOwotICAgICAgICBwcm9wZXJ0eS0+
c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7Ci0gICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInZh
bHVlIiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUobmFtZSkpOwotICAgICAgICBwcm9wZXJ0eS0+
c2V0U3RyaW5nKCJwcmlvcml0eSIsIHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KCJuYW1lIikp
OwotICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCBzdHlsZS0+aXNQcm9w
ZXJ0eUltcGxpY2l0KG5hbWUpKTsKLSAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oInBhcnNl
ZE9rIiwgdHJ1ZSk7Ci0gICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsICJzdHls
ZSIpOwotICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gc3R5bGUtPmdldFByb3BlcnR5U2hvcnRo
YW5kKG5hbWUpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwg
c2hvcnRoYW5kKTsKLSAgICAgICAgaWYgKCFzaG9ydGhhbmQuaXNFbXB0eSgpICYmICFmb3VuZFNo
b3J0aGFuZHMuY29udGFpbnMoc2hvcnRoYW5kKSkgewotICAgICAgICAgICAgZm91bmRTaG9ydGhh
bmRzLmFkZChzaG9ydGhhbmQpOwotICAgICAgICAgICAgc2hvcnRoYW5kVmFsdWVzLT5zZXRTdHJp
bmcoc2hvcnRoYW5kLCBzaG9ydGhhbmRWYWx1ZShzdHlsZSwgc2hvcnRoYW5kKSk7Ci0gICAgICAg
IH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9y
dGhhbmROYW1lIiwgIiIpOwogICAgIH0KIAotICAgIHJlc3VsdC0+c2V0QXJyYXkoInByb3BlcnRp
ZXMiLCBwcm9wZXJ0aWVzKTsKKyAgICByZXN1bHQtPnNldEFycmF5KCJjc3NQcm9wZXJ0aWVzIiwg
cHJvcGVydGllcyk7CiAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNob3J0aGFuZFZhbHVlcyIsIHNo
b3J0aGFuZFZhbHVlcyk7CiB9CiAKQEAgLTYyMiw3ICs2MjQsMTAgQEAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHJpYnV0ZVN0
eWxlcyhFbGUKICAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5hdHRy
aWJ1dGVJdGVtKGkpOwogICAgICAgICBpZiAoYXR0cmlidXRlLT5zdHlsZSgpKSB7CiAgICAgICAg
ICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZS0+bG9jYWxOYW1lKCk7Ci0gICAg
ICAgICAgICBzdHlsZUF0dHJpYnV0ZXMtPnNldE9iamVjdChhdHRyaWJ1dGVOYW1lLnV0ZjgoKS5k
YXRhKCksIGJ1aWxkT2JqZWN0Rm9yU3R5bGUoYXR0cmlidXRlLT5zdHlsZSgpLCAiIikpOworICAg
ICAgICAgICAgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+IHByb3BlcnRpZXM7CisgICAg
ICAgICAgICBwb3B1bGF0ZUluc3BlY3RvckZyb250ZW5kUHJvcGVydGllcyhhdHRyaWJ1dGUtPnN0
eWxlKCksIDAsICZwcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIEluc3BlY3RvclN0eWxlUHJvcGVy
dHlJdGVyYXRvciBwcm9wZXJ0aWVzSXQocHJvcGVydGllcywgMCk7CisgICAgICAgICAgICBzdHls
ZUF0dHJpYnV0ZXMtPnNldE9iamVjdChhdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCksIGJ1aWxk
T2JqZWN0Rm9yU3R5bGUoYXR0cmlidXRlLT5zdHlsZSgpLCAiIiwgcHJvcGVydGllc0l0KSk7CiAg
ICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU0FnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCmluZGV4
IGViNjAxM2IuLjQxZTkyODcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU0FnZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaApA
QCAtNTYsOSArNTYsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElu
c3BlY3RvckNTU0FnZW50KGRvbUFnZW50LCBmcm9udGVuZCkpOwogICAgIH0KIAotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHls
ZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBmdWxsU3R5bGVJZCwgQ1NTU3R5bGVTb3VyY2VE
YXRhKiA9IDApOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRP
YmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBmdWxsU3R5
bGVJZCwgSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eUl0ZXJhdG9yJiBwcm9wZXJ0aWVzSXQsIENTU1N0
eWxlU291cmNlRGF0YSogPSAwKTsKICAgICBzdGF0aWMgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5
bGVTaGVldChTdHlsZUJhc2UqKTsKICAgICBzdGF0aWMgQ1NTU3R5bGVSdWxlKiBhc0NTU1N0eWxl
UnVsZShTdHlsZUJhc2UqKTsKKyAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZUluc3BlY3RvckZyb250
ZW5kUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgVmVjdG9yPENTU1Byb3Bl
cnR5U291cmNlRGF0YT4qIHNvdXJjZVByb3BlcnR5RGF0YSwgVmVjdG9yPEluc3BlY3RvclN0eWxl
UHJvcGVydHk+KiByZXN1bHQpOwogCiAgICAgSW5zcGVjdG9yQ1NTQWdlbnQoSW5zcGVjdG9yRE9N
QWdlbnQqIGRvbUFnZW50LCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpOwogICAgIH5JbnNw
ZWN0b3JDU1NBZ2VudCgpOwpAQCAtNzMsOCArNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRB
bGxTdHlsZXMyKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxlcyk7CiAgICAgdm9pZCBnZXRT
dHlsZVNoZWV0Mihjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiogcmVzdWx0KTsKICAgICB2b2lkIHNldFN0eWxlU2hlZXRUZXh0Mihjb25zdCBTdHJpbmcm
IHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKLSAgICB2b2lkIHNldFN0eWxlVGV4
dDIoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4qIHJlc3VsdCk7Ci0gICAgdm9pZCB0b2dnbGVQcm9wZXJ0eTIoY29uc3QgU3Ry
aW5nJiBzdHlsZUlkLCBsb25nIHByb3BlcnR5T3JkaW5hbCwgYm9vbCBkaXNhYmxlZCk7CisgICAg
dm9pZCBzZXRTdHlsZURhdGEyKGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gc3R5bGVEYXRhT2JqZWN0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQp
OwogICAgIHZvaWQgc2V0UnVsZVNlbGVjdG9yMihjb25zdCBTdHJpbmcmIHJ1bGVJZCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKICAgICB2
b2lkIGFkZFJ1bGUyKGNvbnN0IGxvbmcgY29udGV4dE5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKICAgICB2b2lkIGdldFN1cHBv
cnRlZENTU1Byb3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KTsKQEAgLTgy
LDExICs4MiwxMSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+IElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0
OwogICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVNoZWV0KiwgUmVmUHRyPEluc3BlY3RvclN0
eWxlU2hlZXQ+ID4gQ1NTU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKLSAgICB0eXBl
ZGVmIEhhc2hNYXA8Tm9kZSosIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGU+ID4gTm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldDsgLy8gZm9yIGJvZ3VzICJzdHlsZXNoZWV0
cyIgd2l0aCBpbmxpbmUgbm9kZSBzdHlsZXMKKyAgICB0eXBlZGVmIEhhc2hNYXA8Tm9kZSosIFJl
ZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+ID4gTm9kZVRvSW5zcGVjdG9y
U3R5bGVTaGVldDsgLy8gYm9ndXMgInN0eWxlc2hlZXRzIiB3aXRoIGVsZW1lbnRzJyBpbmxpbmUg
c3R5bGVzCiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxEb2N1bWVudD4sIFJlZlB0cjxJbnNw
ZWN0b3JTdHlsZVNoZWV0PiA+IERvY3VtZW50VG9WaWFJbnNwZWN0b3JTdHlsZVNoZWV0OyAvLyAi
dmlhIGluc3BlY3RvciIgc3R5bGVzaGVldHMKIAogICAgIHN0YXRpYyBFbGVtZW50KiBpbmxpbmVT
dHlsZUVsZW1lbnQoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOwotICAgIHN0YXRpYyB2b2lkIHBvcHVs
YXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiwgSW5zcGVj
dG9yT2JqZWN0KiByZXN1bHQsIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+KiBwcm9wZXJ0
eURhdGEpOworICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGll
cyhDU1NTdHlsZURlY2xhcmF0aW9uKiwgSW5zcGVjdG9yT2JqZWN0KiByZXN1bHQsIEluc3BlY3Rv
clN0eWxlUHJvcGVydHlJdGVyYXRvciYgcHJvcGVydGllc0l0KTsKICAgICBzdGF0aWMgU3RyaW5n
IHNob3J0aGFuZFZhbHVlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIHNob3J0
aGFuZFByb3BlcnR5KTsKICAgICBzdGF0aWMgU3RyaW5nIHNob3J0aGFuZFByaW9yaXR5KENTU1N0
eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KTsKICAgICBz
dGF0aWMgVmVjdG9yPFN0cmluZz4gbG9uZ2hhbmRQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRp
b24qLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggMTFjZDY0OS4uODUwN2E2ZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTk4LDYgKzk4LDY4IEBAIFJl
ZlB0cjxXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0YT4gUGFyc2VkU3R5bGVTaGVldDo6cnVsZVNv
dXJjZURhdGFBdCh1bnNpZ25lZCBpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorSW5zcGVjdG9y
U3R5bGVQcm9wZXJ0eUl0ZXJhdG9yOjpJbnNwZWN0b3JTdHlsZVByb3BlcnR5SXRlcmF0b3IoY29u
c3QgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+JiBsaXZlUHJvcGVydGllcywgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gZGlzYWJsZWRQcm9wZXJ0aWVzKQorICAgIDogbV9saXZlUHJv
cGVydGllcyhsaXZlUHJvcGVydGllcykKKyAgICAsIG1fZGlzYWJsZWRQcm9wZXJ0aWVzKGRpc2Fi
bGVkUHJvcGVydGllcykKKyAgICAsIG1fZGlzYWJsZWRQcm9wZXJ0eUluZGV4KDApCit7CisgICAg
Ly8gUHJlY29uZGl0aW9uOiBkaXNhYmxlZFByb3BlcnRpZXMgaXMgc29ydGVkIHdydCB0aGUgcHJv
cGVydHkgb2Zmc2V0LgorICAgIG1fbGl2ZUl0ID0gbV9saXZlUHJvcGVydGllcy5iZWdpbigpOwor
ICAgIG1fbGl2ZUVuZCA9IG1fbGl2ZVByb3BlcnRpZXMuZW5kKCk7Cit9CisKK0luc3BlY3RvclN0
eWxlUHJvcGVydHkgSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eUl0ZXJhdG9yOjpvcGVyYXRvciooKSBj
b25zdAoreworICAgIGlmIChhdERpc2FibGVkUHJvcGVydHkoKSkgeworICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBkaXNhYmxlZFByb3BlcnR5ID0gY3VycmVudERpc2FibGVkUHJvcGVy
dHlPYmplY3QoKTsKKyAgICAgICAgQVNTRVJUKGRpc2FibGVkUHJvcGVydHkpOworICAgICAgICBT
dHJpbmcgdGV4dDsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gZGlzYWJsZWRQcm9wZXJ0eS0+Z2V0
U3RyaW5nKCJ0ZXh0IiwgJnRleHQpOworICAgICAgICBBU1NFUlQoc3VjY2Vzcyk7CisgICAgICAg
IGRvdWJsZSBkb3VibGVPZmZzZXQ7CisgICAgICAgIHN1Y2Nlc3MgPSBkaXNhYmxlZFByb3BlcnR5
LT5nZXROdW1iZXIoIm9mZnNldCIsICZkb3VibGVPZmZzZXQpOworICAgICAgICBBU1NFUlQoc3Vj
Y2Vzcyk7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihk
b3VibGVPZmZzZXQpOworICAgICAgICByZXR1cm4gSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVNvdXJjZURhdGEoIjxub25lPiIsIHRleHQsIGZhbHNlLCBmYWxzZSwgU291cmNlUmFu
Z2Uob2Zmc2V0LCBvZmZzZXQpKSwgdHJ1ZSwgdHJ1ZSk7CisgICAgfQorICAgIGlmIChtX2xpdmVJ
dCAhPSBtX2xpdmVFbmQpCisgICAgICAgIHJldHVybiAqbV9saXZlSXQ7CisKKyAgICByZXR1cm4g
SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eShlbXB0eUNTU1Byb3BlcnR5U291cmNlRGF0YSwgZmFsc2Us
IGZhbHNlKTsKK30KKworSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eUl0ZXJhdG9yJiBJbnNwZWN0b3JT
dHlsZVByb3BlcnR5SXRlcmF0b3I6Om9wZXJhdG9yKysoKQoreworICAgIGlmIChhdERpc2FibGVk
UHJvcGVydHkoKSkKKyAgICAgICAgKyttX2Rpc2FibGVkUHJvcGVydHlJbmRleDsKKyAgICBlbHNl
IGlmIChtX2xpdmVJdCAhPSBtX2xpdmVFbmQpCisgICAgICAgICsrbV9saXZlSXQ7CisgICAgcmV0
dXJuICp0aGlzOworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yU3R5
bGVQcm9wZXJ0eUl0ZXJhdG9yOjpjdXJyZW50RGlzYWJsZWRQcm9wZXJ0eU9iamVjdCgpIGNvbnN0
Cit7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IG1fZGlzYWJsZWRQcm9wZXJ0
aWVzLT5nZXQobV9kaXNhYmxlZFByb3BlcnR5SW5kZXgpOworICAgIHJldHVybiB2YWx1ZS0+YXNP
YmplY3QoKTsKK30KKworYm9vbCBJbnNwZWN0b3JTdHlsZVByb3BlcnR5SXRlcmF0b3I6OmF0RGlz
YWJsZWRQcm9wZXJ0eSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Rpc2FibGVkUHJvcGVydGllcyB8
fCBtX2Rpc2FibGVkUHJvcGVydHlJbmRleCA+PSBtX2Rpc2FibGVkUHJvcGVydGllcy0+bGVuZ3Ro
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEFsbCBzdHlsZS1vbmx5IHByb3Bl
cnRpZXMgZ28gYWZ0ZXIgYWxsIHNvdXJjZS1iYXNlZCBwcm9wZXJ0aWVzLCBpbmNsdWRpbmcgdGhl
IGRpc2FibGVkIG9uZXMuCisgICAgaWYgKG1fbGl2ZUl0ID09IG1fbGl2ZUVuZCB8fCAhbV9saXZl
SXQtPmhhc1NvdXJjZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBkaXNhYmxlZFByb3BlcnR5ID0gY3VycmVudERpc2FibGVkUHJvcGVydHlPYmpl
Y3QoKTsKKyAgICBBU1NFUlQoZGlzYWJsZWRQcm9wZXJ0eSk7CisgICAgZG91YmxlIG9mZnNldDsK
KyAgICBib29sIHN1Y2Nlc3MgPSBkaXNhYmxlZFByb3BlcnR5LT5nZXROdW1iZXIoIm9mZnNldCIs
ICZvZmZzZXQpOworICAgIEFTU0VSVChzdWNjZXNzKTsKKyAgICByZXR1cm4gb2Zmc2V0IDw9IG1f
bGl2ZUl0LT5wcm9wZXJ0eS5yYW5nZS5zdGFydDsKK30KKwogSW5zcGVjdG9yU3R5bGVTaGVldDo6
SW5zcGVjdG9yU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIGlkLCBDU1NTdHlsZVNoZWV0KiBwYWdl
U3R5bGVTaGVldCwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRV
UkwpCiAgICAgOiBtX2lkKGlkKQogICAgICwgbV9wYWdlU3R5bGVTaGVldChwYWdlU3R5bGVTaGVl
dCkKQEAgLTE5Nyw2ICsyNTksMjMgQEAgQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JTdHlsZVNoZWV0
OjpydWxlRm9ySWQoY29uc3QgU3RyaW5nJiBpZCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAor
UGFzc093blB0cjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5SXRlcmF0b3I+IEluc3BlY3RvclN0eWxl
U2hlZXQ6OmFsbFByb3BlcnRpZXMoY29uc3QgU3RyaW5nJiBzdHlsZUlkKQoreworICAgIENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gc3R5bGVGb3JJZChzdHlsZUlkKTsKKyAgICAvLyBGSVhN
RTogY2hhbmdlIHRoaXMgdG8gcmV0dXJuIGJvb2xlYW4gc3VjY2VzcyBhbmQgaGF2ZSBhbiBvdXRw
dXQgcGFyYW1ldGVyPworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eUl0ZXJhdG9yKFZlY3RvcjxJbnNwZWN0b3JTdHlsZVBy
b3BlcnR5PigpLCAwKSk7CisKKyAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURh
dGE7CisgICAgaWYgKGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKQorICAgICAgICBzb3VyY2VEYXRh
ID0gcnVsZVNvdXJjZURhdGFGb3Ioc3R5bGUpOworCisgICAgVmVjdG9yPEluc3BlY3RvclN0eWxl
UHJvcGVydHk+IGluc3BlY3RvckZyb250ZW5kUHJvcGVydGllczsKKyAgICBJbnNwZWN0b3JDU1NB
Z2VudDo6cG9wdWxhdGVJbnNwZWN0b3JGcm9udGVuZFByb3BlcnRpZXMoc3R5bGUsIHNvdXJjZURh
dGEgPyAmKHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhKSA6IDAsICZp
bnNwZWN0b3JGcm9udGVuZFByb3BlcnRpZXMpOworCisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJ
bnNwZWN0b3JTdHlsZVByb3BlcnR5SXRlcmF0b3IoaW5zcGVjdG9yRnJvbnRlbmRQcm9wZXJ0aWVz
LCBkaXNhYmxlZFByb3BlcnR5U3RvcmVGb3JTdHlsZShzdHlsZSkpKTsKK30KKwogUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5
bGVTaGVldCgpCiB7CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhZ2VTdHlsZVNo
ZWV0KCk7CkBAIC0yMDQsMTkgKzI4MywyMCBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCkKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJpZCIsIGlkKCkpOwog
ICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigiZGlzYWJsZWQiLCBzdHlsZVNoZWV0LT5kaXNhYmxlZCgp
KTsKLSAgICByZXN1bHQtPnNldFN0cmluZygiaHJlZiIsIHN0eWxlU2hlZXQtPmhyZWYoKSk7Cisg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoInNvdXJjZVVSTCIsIHN0eWxlU2hlZXQtPmhyZWYoKSk7CiAg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxlIiwgc3R5bGVTaGVldC0+dGl0bGUoKSk7CiAgICAg
UmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlTGlzdCA9IENTU1J1bGVMaXN0OjpjcmVhdGUoc3R5
bGVTaGVldCwgdHJ1ZSk7CiAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjc3NSdWxlcyA9IGJ1
aWxkQXJyYXlGb3JSdWxlTGlzdChjc3NSdWxlTGlzdC5nZXQoKSk7Ci0gICAgcmVzdWx0LT5zZXRB
cnJheSgiY3NzUnVsZXMiLCBjc3NSdWxlcy5yZWxlYXNlKCkpOworICAgIHJlc3VsdC0+c2V0QXJy
YXkoInJ1bGVzIiwgY3NzUnVsZXMucmVsZWFzZSgpKTsKIAogICAgIFN0cmluZyBzdHlsZVNoZWV0
VGV4dDsKICAgICBib29sIHN1Y2Nlc3MgPSB0ZXh0KCZzdHlsZVNoZWV0VGV4dCk7CiAgICAgaWYg
KHN1Y2Nlc3MpCiAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJ0ZXh0Iiwgc3R5bGVTaGVldFRl
eHQpOwogCisgICAgcmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIGlkKCkpOworCiAg
ICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTIyOCwyNyArMzA4LDEzIEBAIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVj
dEZvclJ1bGUoQ1NTU3R5bGVSdWxlCiAKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJz
ZWxlY3RvclRleHQiLCBydWxlLT5zZWxlY3RvclRleHQoKSk7Ci0gICAgcmVzdWx0LT5zZXRTdHJp
bmcoImNzc1RleHQiLCBydWxlLT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJz
b3VyY2VVUkwiLCAhc3R5bGVTaGVldC0+aHJlZigpLmlzRW1wdHkoKSA/IHN0eWxlU2hlZXQtPmhy
ZWYoKSA6IG1fZG9jdW1lbnRVUkwpOwogICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJzb3VyY2VMaW5l
IiwgcnVsZS0+c291cmNlTGluZSgpKTsKLSAgICByZXN1bHQtPnNldFN0cmluZygiZG9jdW1lbnRV
UkwiLCBtX2RvY3VtZW50VVJMKTsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmVu
dFN0eWxlU2hlZXRWYWx1ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFyZW50
U3R5bGVTaGVldFZhbHVlLT5zZXRTdHJpbmcoImlkIiwgaWQoKSk7Ci0gICAgcGFyZW50U3R5bGVT
aGVldFZhbHVlLT5zZXRTdHJpbmcoImhyZWYiLCBzdHlsZVNoZWV0LT5ocmVmKCkpOwotICAgIHJl
c3VsdC0+c2V0T2JqZWN0KCJwYXJlbnRTdHlsZVNoZWV0IiwgcGFyZW50U3R5bGVTaGVldFZhbHVl
LnJlbGVhc2UoKSk7CiAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm9yaWdpbiIsIG1fb3JpZ2luKTsK
IAotICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YTsKLSAgICBpZiAoZW5z
dXJlUGFyc2VkRGF0YVJlYWR5KCkpCi0gICAgICAgIHNvdXJjZURhdGEgPSBydWxlU291cmNlRGF0
YUZvcihydWxlLT5zdHlsZSgpKTsKLSAgICBpZiAoc291cmNlRGF0YSkgewotICAgICAgICByZXN1
bHQtPnNldE51bWJlcigic2VsZWN0b3JTdGFydE9mZnNldCIsIHNvdXJjZURhdGEtPnNlbGVjdG9y
TGlzdFJhbmdlLnN0YXJ0KTsKLSAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoInNlbGVjdG9yRW5k
T2Zmc2V0Iiwgc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2UuZW5kKTsKLSAgICB9Ci0KICAg
ICByZXN1bHQtPnNldE9iamVjdCgic3R5bGUiLCBidWlsZE9iamVjdEZvclN0eWxlKHJ1bGUtPnN0
eWxlKCkpKTsKICAgICBpZiAoY2FuQmluZCgpKQotICAgICAgICByZXN1bHQtPnNldFN0cmluZygi
aWQiLCBmdWxsUnVsZUlkKHJ1bGUpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInJ1bGVJ
ZCIsIGZ1bGxSdWxlSWQocnVsZSkpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9
CkBAIC0yNTksMTEgKzMyNSwzNSBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVj
dG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlYwogICAgIGlmIChl
bnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKICAgICAgICAgc291cmNlRGF0YSA9IHJ1bGVTb3VyY2VE
YXRhRm9yKHN0eWxlKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclN0eWxlKHN0eWxlLCBmdWxsU3R5bGVJZChz
dHlsZSksIHNvdXJjZURhdGEgPyBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEuZ2V0KCkgOiAw
KTsKLSAgICByZXN1bHQtPnNldFN0cmluZygicGFyZW50U3R5bGVTaGVldElkIiwgaWQoKSk7Cisg
ICAgT3duUHRyPEluc3BlY3RvclN0eWxlUHJvcGVydHlJdGVyYXRvcj4gaXQgPSBhbGxQcm9wZXJ0
aWVzKHJ1bGVPclN0eWxlSWQoc3R5bGUpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZSwgZnVs
bFN0eWxlSWQoc3R5bGUpLCAqaXQsIHNvdXJjZURhdGEgPyBzb3VyY2VEYXRhLT5zdHlsZVNvdXJj
ZURhdGEuZ2V0KCkgOiAwKTsKKyAgICBpZiAoc291cmNlRGF0YSkgeworICAgICAgICBTdHJpbmcg
dGV4dDsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gc3R5bGVTaGVldFRleHQoJnRleHQpOworICAg
ICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgY29uc3QgU291cmNlUmFuZ2UmIGJvZHlS
YW5nZSA9IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2U7CisgICAg
ICAgICAgICByZXN1bHQtPnNldFN0cmluZygiY3NzVGV4dCIsIHRleHQuc3Vic3RyaW5nKGJvZHlS
YW5nZS5zdGFydCwgYm9keVJhbmdlLmVuZCAtIGJvZHlSYW5nZS5zdGFydCkpOworICAgICAgICB9
CisgICAgfQogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCitib29sIEluc3BlY3Rv
clN0eWxlU2hlZXQ6OnNldFN0eWxlKGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiBzdHlsZU9iamVjdCkKK3sKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHN0
eWxlRm9ySWQoc3R5bGVJZCk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgU3RyaW5nIHRleHQ7CisgICAgYm9vbCBzdWNjZXNzID0gc3R5bGVPYmplY3QtPmdl
dFN0cmluZygidGV4dCIsICZ0ZXh0KTsKKyAgICBBU1NFUlQoc3VjY2Vzcyk7CisgICAgc3VjY2Vz
cyA9IGlubmVyU2V0U3R5bGVUZXh0KHN0eWxlLCB0ZXh0KTsKKyAgICBpZiAoc3VjY2VzcykKKyAg
ICAgICAgc2V0RGlzYWJsZWRQcm9wZXJ0aWVzRm9yU3R5bGUoc3R5bGUsIHN0eWxlT2JqZWN0LT5n
ZXRBcnJheSgiZGlzYWJsZWRQcm9wZXJ0aWVzIikpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9
CisKIENTU1N0eWxlRGVjbGFyYXRpb24qIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlRm9ySWQo
Y29uc3QgU3RyaW5nJiBpZCkgY29uc3QKIHsKICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBydWxl
Rm9ySWQoaWQpOwpAQCAtMjczLDEzICszNjMsMjAgQEAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogSW5z
cGVjdG9yU3R5bGVTaGVldDo6c3R5bGVGb3JJZChjb25zdCBTdHJpbmcmIGlkKSBjb25zdAogICAg
IHJldHVybiBydWxlLT5zdHlsZSgpOwogfQogCi1ib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnNl
dFN0eWxlVGV4dChjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgbmV3VGV4dCkK
K1Bhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmRpc2FibGVk
UHJvcGVydHlTdG9yZUZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogewotICAg
IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gc3R5bGVGb3JJZChzdHlsZUlkKTsKLSAgICBp
ZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSGFzaE1hcDxDU1NTdHlsZURl
Y2xhcmF0aW9uKiwgRGlzYWJsZWRQcm9wZXJ0eVN0b3JlPjo6aXRlcmF0b3IgaXQgPSBtX3N0eWxl
RGlzYWJsZWRQcm9wZXJ0aWVzLmZpbmQoc3R5bGUpOworICAgIGlmIChpdCA9PSBtX3N0eWxlRGlz
YWJsZWRQcm9wZXJ0aWVzLmVuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaXQt
PnNlY29uZDsKK30KIAotICAgIHJldHVybiBpbm5lclNldFN0eWxlVGV4dChzdHlsZSwgbmV3VGV4
dCk7Cit2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OnNldERpc2FibGVkUHJvcGVydGllc0ZvclN0
eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBkaXNhYmxlZFByb3BlcnRpZXMpCit7CisgICAgaWYgKCFkaXNhYmxlZFByb3BlcnRpZXMpCisg
ICAgICAgIG1fc3R5bGVEaXNhYmxlZFByb3BlcnRpZXMucmVtb3ZlKHN0eWxlKTsKKyAgICBlbHNl
CisgICAgICAgIG1fc3R5bGVEaXNhYmxlZFByb3BlcnRpZXMuc2V0KHN0eWxlLCBkaXNhYmxlZFBy
b3BlcnRpZXMpOwogfQogCiBEb2N1bWVudCogSW5zcGVjdG9yU3R5bGVTaGVldDo6b3duZXJEb2N1
bWVudCgpIGNvbnN0CkBAIC00NDQsOCArNTQxLDEwIEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVl
dDo6cmV2YWxpZGF0ZVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHBhZ2VTdHlsZSkKICAgICAg
ICAgaWYgKCFwYXJzZWRSdWxlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChw
YXJzZWRSdWxlLT5zdHlsZSgpID09IHBhZ2VTdHlsZSkgewotICAgICAgICAgICAgaWYgKHBhcnNl
ZFJ1bGUtPnN0eWxlKCktPmNzc1RleHQoKSAhPSBwYWdlU3R5bGUtPmNzc1RleHQoKSkKKyAgICAg
ICAgICAgIGlmIChwYXJzZWRSdWxlLT5zdHlsZSgpLT5jc3NUZXh0KCkgIT0gcGFnZVN0eWxlLT5j
c3NUZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGNsZWFyIHRo
ZSBkaXNhYmxlZCBwcm9wZXJ0aWVzIGZvciB0aGUgaW52YWxpZCBzdHlsZSBoZXJlPwogICAgICAg
ICAgICAgICAgIGlubmVyU2V0U3R5bGVUZXh0KHBhZ2VTdHlsZSwgcGFnZVN0eWxlLT5jc3NUZXh0
KCkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9
CkBAIC00NjUsNyArNTY0LDcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZVNoZWV0
VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpy
ZXNvdXJjZVN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAogewotICAgIGlmICgh
bV9wYWdlU3R5bGVTaGVldCkKKyAgICBpZiAoIW1fcGFnZVN0eWxlU2hlZXQgfHwgIW93bmVyRG9j
dW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIEluc3BlY3RvclJl
c291cmNlQWdlbnQ6OnJlc291cmNlQ29udGVudChvd25lckRvY3VtZW50KCktPmZyYW1lKCksIG1f
cGFnZVN0eWxlU2hlZXQtPmZpbmFsVVJMKCksIHJlc3VsdCk7CkBAIC01MTMsOCArNjEyLDcgQEAg
SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9y
SW5saW5lU3R5bGUoY29uc3QgU3RyaW4KIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5s
aW5lU3R5bGU6OnNldFN0eWxlVGV4dChjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCkKIHsKLSAgICBBU1NFUlQoc3R5bGVJZCA9PSAiMCIpOwotICAgIFVOVVNFRF9QQVJB
TShzdHlsZUlkKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN0eWxlSWQsIHN0eWxlSWQgPT0gIjAiKTsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZSgi
c3R5bGUiLCB0ZXh0LCBlYyk7CiAgICAgbV9ydWxlU291cmNlRGF0YS5jbGVhcigpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCmluZGV4IDM4YWI3NzcuLmI1OGQ4MTIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKQEAgLTI2LDE2ICsyNiwxNCBA
QAogI2RlZmluZSBJbnNwZWN0b3JTdHlsZVNoZWV0X2gKIAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5
U291cmNlRGF0YS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
VmFsdWVzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBjbGFzcyBQYXJzZWRTdHlsZVNoZWV0OwogCkBAIC00MywxMSArNDEsNDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDU1NSdWxlTGlzdDsKIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRp
b247CitjbGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50
OwogY2xhc3MgTm9kZTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKK3N0cnVjdCBJbnNwZWN0
b3JTdHlsZVByb3BlcnR5IHsKKyAgICBJbnNwZWN0b3JTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
U291cmNlRGF0YSBwcm9wZXJ0eSwgYm9vbCBoYXNTb3VyY2UsIGJvb2wgZGlzYWJsZWQpCisgICAg
ICAgIDogcHJvcGVydHkocHJvcGVydHkpCisgICAgICAgICwgaGFzU291cmNlKGhhc1NvdXJjZSkK
KyAgICAgICAgLCBkaXNhYmxlZChkaXNhYmxlZCkKKyAgICB7CisgICAgfQorCisgICAgQ1NTUHJv
cGVydHlTb3VyY2VEYXRhIHByb3BlcnR5OworICAgIGJvb2wgaGFzU291cmNlOworICAgIGJvb2wg
ZGlzYWJsZWQ7Cit9OworCit0eXBlZGVmIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gRGlzYWJsZWRQ
cm9wZXJ0eVN0b3JlOworCitjbGFzcyBJbnNwZWN0b3JTdHlsZVByb3BlcnR5SXRlcmF0b3Igewor
cHVibGljOgorICAgIEluc3BlY3RvclN0eWxlUHJvcGVydHlJdGVyYXRvcihjb25zdCBWZWN0b3I8
SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4mIGxpdmVQcm9wZXJ0aWVzLCBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBkaXNhYmxlZFByb3BlcnRpZXMpOworCisgICAgSW5zcGVjdG9yU3R5bGVQcm9w
ZXJ0eSBvcGVyYXRvciooKSBjb25zdDsKKyAgICBJbnNwZWN0b3JTdHlsZVByb3BlcnR5SXRlcmF0
b3ImIG9wZXJhdG9yKysoKTsKKyAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gKCFhdERp
c2FibGVkUHJvcGVydHkoKSAmJiBtX2xpdmVJdCA9PSBtX2xpdmVFbmQpOyB9CisKK3ByaXZhdGU6
CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlUHJvcGVydHlJ
dGVyYXRvcjo6Y3VycmVudERpc2FibGVkUHJvcGVydHlPYmplY3QoKSBjb25zdDsKKyAgICBib29s
IGF0RGlzYWJsZWRQcm9wZXJ0eSgpIGNvbnN0OworCisgICAgY29uc3QgVmVjdG9yPEluc3BlY3Rv
clN0eWxlUHJvcGVydHk+IG1fbGl2ZVByb3BlcnRpZXM7CisgICAgVmVjdG9yPEluc3BlY3RvclN0
eWxlUHJvcGVydHk+Ojpjb25zdF9pdGVyYXRvciBtX2xpdmVJdDsKKyAgICBWZWN0b3I8SW5zcGVj
dG9yU3R5bGVQcm9wZXJ0eT46OmNvbnN0X2l0ZXJhdG9yIG1fbGl2ZUVuZDsKKyAgICBEaXNhYmxl
ZFByb3BlcnR5U3RvcmUgbV9kaXNhYmxlZFByb3BlcnRpZXM7CisgICAgdW5zaWduZWQgbV9kaXNh
YmxlZFByb3BlcnR5SW5kZXg7Cit9OworCiBjbGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0IDogcHVi
bGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yU3R5bGVTaGVldD4gewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGlk
LCBDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgZG9jdW1lbnRVUkwpCkBAIC02NCwxMSArOTgsMTIgQEAgcHVibGljOgogICAg
IGJvb2wgc2V0UnVsZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgcnVsZUlkLCBjb25zdCBTdHJpbmcm
IHNlbGVjdG9yKTsKICAgICBDU1NTdHlsZVJ1bGUqIGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxl
Y3Rvcik7CiAgICAgQ1NTU3R5bGVSdWxlKiBydWxlRm9ySWQoY29uc3QgU3RyaW5nJikgY29uc3Q7
CisgICAgUGFzc093blB0cjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5SXRlcmF0b3I+IGFsbFByb3Bl
cnRpZXMoY29uc3QgU3RyaW5nJiBzdHlsZUlkKTsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqKTsKICAgICBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0
aW9uKik7CisgICAgYm9vbCBzZXRTdHlsZShjb25zdCBTdHJpbmcmIHN0eWxlSWQsIEluc3BlY3Rv
ck9iamVjdCogc3R5bGVPYmplY3QpOwogICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGVGb3JJZChjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2V0U3R5
bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKIAogcHJv
dGVjdGVkOgogICAgIGJvb2wgY2FuQmluZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luICE9ICJ1
c2VyQWdlbnQiICYmIG1fb3JpZ2luICE9ICJ1c2VyIjsgfQpAQCAtNzgsNiArMTEzLDggQEAgcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNl
RGF0YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3Q7CiAgICAgdmlydHVhbCB1
bnNpZ25lZCBydWxlSW5kZXhCeVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCk7CisgICAgdmlydHVhbCB2b2lk
IHNldERpc2FibGVkUHJvcGVydGllc0ZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiBkaXNhYmxlZFByb3BlcnRpZXMpOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGlzYWJsZWRQcm9wZXJ0eVN0b3JlRm9yU3R5bGUo
Q1NTU3R5bGVEZWNsYXJhdGlvbiopOwogCiBwcml2YXRlOgogICAgIGJvb2wgdGV4dChTdHJpbmcq
IHJlc3VsdCkgY29uc3Q7CkBAIC0xMDEsNiArMTM4LDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcg
bV9kb2N1bWVudFVSTDsKICAgICBib29sIG1faXNSZXZhbGlkYXRpbmc7CiAgICAgUGFyc2VkU3R5
bGVTaGVldCogbV9wYXJzZWRTdHlsZVNoZWV0OworICAgIEhhc2hNYXA8Q1NTU3R5bGVEZWNsYXJh
dGlvbiosIERpc2FibGVkUHJvcGVydHlTdG9yZT4gbV9zdHlsZURpc2FibGVkUHJvcGVydGllczsK
IH07CiAKIGNsYXNzIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSA6IHB1YmxpYyBJ
bnNwZWN0b3JTdHlsZVNoZWV0IHsKQEAgLTExMSwxNCArMTQ5LDE2IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoY29uc3QgU3RyaW5nJiBp
ZCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBvcmlnaW4pOwotICAgIHZpcnR1YWwg
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChjb25zdCBTdHJpbmcmIGlkKSBjb25zdCB7
IEFTU0VSVChpZCA9PSAiMCIpOyBVTlVTRURfUEFSQU0oaWQpOyByZXR1cm4gaW5saW5lU3R5bGUo
KTsgfQorICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChjb25zdCBT
dHJpbmcmIGlkKSBjb25zdCB7IEFTU0VSVF9VTlVTRUQoaWQsIGlkID09ICIwIik7IHJldHVybiBp
bmxpbmVTdHlsZSgpOyB9CiAgICAgdmlydHVhbCBib29sIHNldFN0eWxlVGV4dChjb25zdCBTdHJp
bmcmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBSZWZQdHI8
Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlKSBjb25zdCB7IEFTU0VSVChzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsgVU5VU0VEX1BB
UkFNKHN0eWxlKTsgcmV0dXJuIG1fcnVsZVNvdXJjZURhdGE7IH0KKyAgICB2aXJ0dWFsIFJlZlB0
cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUpIGNvbnN0IHsgQVNTRVJUX1VOVVNFRChzdHlsZSwgc3R5bGUgPT0gaW5saW5lU3R5
bGUoKSk7IHJldHVybiBtX3J1bGVTb3VyY2VEYXRhOyB9CiAgICAgdmlydHVhbCB1bnNpZ25lZCBy
dWxlSW5kZXhCeVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdCB7IHJldHVybiAwOyB9
CiAgICAgdmlydHVhbCBib29sIGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpOworICAgIHZpcnR1YWwg
dm9pZCBzZXREaXNhYmxlZFByb3BlcnRpZXNGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGlzYWJsZWRQcm9wZXJ0aWVzKSB7IEFT
U0VSVF9VTlVTRUQoc3R5bGUsIHN0eWxlID09IGlubGluZVN0eWxlKCkpOyBtX2Rpc2FibGVkUHJv
cGVydGllcyA9IGRpc2FibGVkUHJvcGVydGllczsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gZGlzYWJsZWRQcm9wZXJ0eVN0b3JlRm9yU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUsIGJvb2wpIHsgQVNTRVJUX1VOVVNFRChzdHlsZSwgc3R5bGUgPT0gaW5s
aW5lU3R5bGUoKSk7IHJldHVybiBtX2Rpc2FibGVkUHJvcGVydGllczsgfQogCiBwcml2YXRlOgog
ICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGlubGluZVN0eWxlKCkgY29uc3Q7CkBAIC0xMjYsNiAr
MTY2LDcgQEAgcHJpdmF0ZToKIAogICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKICAgICBSZWZQdHI8
Q1NTUnVsZVNvdXJjZURhdGE+IG1fcnVsZVNvdXJjZURhdGE7CisgICAgRGlzYWJsZWRQcm9wZXJ0
eVN0b3JlIG1fZGlzYWJsZWRQcm9wZXJ0aWVzOwogfTsKIAogI2VuZGlmCg==
</data>
<flag name="review"
          id="61143"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71173</attachid>
            <date>2010-10-19 08:16:22 -0700</date>
            <delta_ts>2010-10-19 10:52:41 -0700</delta_ts>
            <desc>[PATCH] Removed mixing iterator</desc>
            <filename>toggle.patch</filename>
            <type>text/plain</type>
            <size>33889</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IDBhMzg0YjU3OTI4ZDYwMWU1NWM0ZTEzNDRhZmQ2MTg4ZTNmZjFhMDMKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBGcmkgT2N0IDE1
IDE1OjE3OjU4IDIwMTAgKzA0MDAKCiAgICBQcmVwYXJlIHRvZ2dsZWQgcHJvcGVydGllcyBmb3Ig
Y29tbWl0CgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAzN2JhYzgxLi41M2I3NzczIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEwLTEwLTE5ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogSW1wbGVtZW50IHBy
b3BlcnR5IHRvZ2dsaW5nIGluIEluc3BlY3RvckNTU0FnZW50CisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgaW1wbGVtZW50cyBlbmFibGVtZW50L2Rpc2FibGVtZW50IG9mIHN0eWxlIHByb3BlcnRpZXMu
CisgICAgICAgIERpc2FibGVkIHByb3BlcnRpZXMgYXJlIHBlcnNpc3RlZCBpbiB0aGUgc2NvcGUg
b2YgSW5zcGVjdG9yQ1NTQWdlbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NzMzOQorCisgICAgICAgIERyaXZlLWJ5OiBmaXhlcyBmb3IgdGhlIFdl
YiBJbnNwZWN0b3IgUHJvdG9jb2wgZm9ybWF0LgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojpi
dWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50
OjpkaXNhYmxlZEluc3BlY3RvclN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ1NTQWdlbnQ6OnBvcHVsYXRlSW5zcGVjdG9yRnJvbnRlbmRQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9k
ZTIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlRGF0YTIp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnBvcHVsYXRlT2JqZWN0V2l0
aFN0eWxlUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6
YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDU1NBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnBvcHVsYXRlQWxs
UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWls
ZE9iamVjdEZvclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVT
aGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0
eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3R5bGVTaGVldDo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5
bGVTaGVldDo6ZGlzYWJsZWRQcm9wZXJ0eVN0b3JlRm9yU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0RGlzYWJsZWRQcm9wZXJ0aWVzRm9yU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6cmV2YWxpZGF0ZVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnJlc291cmNlU3R5bGVTaGVl
dFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlOjpzZXRTdHlsZVRleHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNo
ZWV0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVByb3BlcnR5OjpJbnNwZWN0
b3JTdHlsZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRG
b3JJbmxpbmVTdHlsZTo6c3R5bGVGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnJ1bGVTb3VyY2VEYXRhRm9yKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6c2V0RGlzYWJsZWRQcm9w
ZXJ0aWVzRm9yU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlOjpkaXNhYmxlZFByb3BlcnR5U3RvcmVGb3JTdHlsZSk6CisKIDIwMTAtMTAt
MTkgIEhheWF0byBJdG8gIDxoYXlhdG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCmlu
ZGV4IGUwZmFiODUuLjI4NzQ0MWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5jcHAKQEAgLTQ5LDcgKzQ5LDggQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCi0KKy8vIEN1cnJlbnRseSBpbXBsZW1lbnRlZCBtb2Rl
bDoKKy8vCiAvLyBjc3NQcm9wZXJ0eSA9IHsKIC8vICAgIG5hbWUgICAgICAgICAgOiA8c3RyaW5n
PiwKIC8vICAgIHZhbHVlICAgICAgICAgOiA8c3RyaW5nPiwKQEAgLTYyLDYgKzYzLDExIEBACiAv
LyAgICBlbmRPZmZzZXQgICAgIDogPG51bWJlcj4sIC8vIE9wdGlvbmFsIC0gcHJvcGVydHkgdGV4
dCBlbmQgb2Zmc2V0IGluIGVuY2xvc2luZyBzdHlsZSBkZWNsYXJhdGlvbi4gQWJzZW50IGZvciBj
b21wdXRlZCBzdHlsZXMgYW5kIHN1Y2guCiAvLyB9CiAvLworLy8gbmFtZSArIHZhbHVlICsgcHJp
b3JpdHkgOiBwcmVzZW50IHdoZW4gdGhlIHByb3BlcnR5IGlzIGVuYWJsZWQKKy8vIHRleHQgICAg
ICAgICAgICAgICAgICAgIDogcHJlc2VudCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBkaXNhYmxlZAor
Ly8KKy8vIEZvciBkaXNhYmxlZCBwcm9wZXJ0aWVzLCBzdGFydE9mZnNldCA9PT0gZW5kT2Zmc2V0
ID09PSBpbnNlcnRpb24gcG9pbnQgZm9yIHRoZSBwcm9wZXJ0eS4KKy8vCiAvLyBzdGF0dXM6CiAv
LyAiZGlzYWJsZWQiID09IHByb3BlcnR5IGRpc2FibGVkIGJ5IHVzZXIKIC8vICJhY3RpdmUiID09
IHByb3BlcnR5IHBhcnRpY2lwYXRlcyBpbiB0aGUgY29tcHV0ZWQgc3R5bGUgY2FsY3VsYXRpb24K
QEAgLTcwLDggKzc2LDcgQEAKIC8vCiAvLwogLy8gY3NzU3R5bGUgPSB7Ci0vLyAgICBzdHlsZUlk
ICAgICAgICAgOiA8bnVtYmVyPiwgLy8gT3B0aW9uYWwKLS8vICAgIHN0eWxlU2hlZXRJZCAgICA6
IDxudW1iZXI+LCAvLyBQYXJlbnQ6IC0xIGZvciBpbmxpbmUgc3R5bGVzICg8Zm9vIHN0eWxlPSIu
LiI+KQorLy8gICAgc3R5bGVJZCAgICAgICAgIDogPHN0cmluZz4sIC8vIE9wdGlvbmFsCiAvLyAg
ICBjc3NQcm9wZXJ0aWVzICAgOiBbCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgI2Nzc1By
b3BlcnR5LAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgpAQCAtODEsNjEgKzg2LDUy
IEBACiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kTmFtZTEgOiBzaG9ydGhh
bmRWYWx1ZTEsCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kTmFtZTIgOiBz
aG9ydGhhbmRWYWx1ZTIKIC8vICAgICAgICAgICAgICAgICAgICAgIH0sCi0vLyAgICBjc3NUZXh0
ICAgICAgICAgOiA8c3RyaW5nPiwgLy8gZGVjbGFyYXRpb24gdGV4dAotLy8gICAgcHJvcGVydGll
cyAgICAgIDogeyB9IC8vID8/PworLy8gICAgY3NzVGV4dCAgICAgICAgIDogPHN0cmluZz4sIC8v
IE9wdGlvbmFsIC0gZGVjbGFyYXRpb24gdGV4dAorLy8gICAgcHJvcGVydGllcyAgICAgIDogeyB3
aWR0aCwgaGVpZ2h0IH0KIC8vIH0KIC8vCi0vLyAvLyBUT0RPOgotLy8gLy8gLSBjb252ZXJ0IGRp
c2FibGVkUHJvcGVydGllcyB0byBlbmFibGVkIGZsYWcuCi0vLyAvLyAtIGNvbnZlcnQgd2lkdGgs
IGhlaWdodCB0byBwcm9wZXJ0aWVzCi0vLwogLy8gY3NzUnVsZSA9IHsKLS8vICAgIHJ1bGVJZCAg
ICAgICA6IDxudW1iZXI+LAotLy8gICAgc2VsZWN0b3JUZXh0IDogPHN0cmluZz4KLS8vICAgIHNv
dXJjZVVSTCAgICA6IDxzdHJpbmc+Ci0vLyAgICBzb3VyY2VMaW5lICAgOiA8c3RyaW5nPgotLy8g
ICAgc3R5bGVTaGVldElkIDogPG51bWJlcj4gLy8gYWxzbyBmb3VuZCBpbiBzdHlsZQotLy8gICAg
b3JpZ2luICAgICAgIDogPHN0cmluZz4gLy8gIiIgfHwgInVzZXItYWdlbnQiIHx8ICJ1c2VyIiB8
fCAiaW5zcGVjdG9yIgorLy8gICAgcnVsZUlkICAgICAgIDogPHN0cmluZz4sIC8vIE9wdGlvbmFs
CisvLyAgICBzZWxlY3RvclRleHQgOiA8c3RyaW5nPiwKKy8vICAgIHNvdXJjZVVSTCAgICA6IDxz
dHJpbmc+LAorLy8gICAgc291cmNlTGluZSAgIDogPHN0cmluZz4sCisvLyAgICBvcmlnaW4gICAg
ICAgOiA8c3RyaW5nPiwgLy8gIiIgfHwgInVzZXItYWdlbnQiIHx8ICJ1c2VyIiB8fCAiaW5zcGVj
dG9yIgogLy8gICAgc3R5bGUgICAgICAgIDogI2Nzc1N0eWxlCiAvLyB9CiAvLwotLy8gLy8gVE9E
TzoKLS8vIC8vIC0gZml4IG9yaWdpbgotLy8gLy8gLSBhZGQgc291cmNlVVJMCi0vLyAvLyAtIGZp
eCBwYXJlbnRTdHlsZVNoZWV0SWQKLS8vCiAvLyBjc3NTdHlsZVNoZWV0ID0gewogLy8gICAgc3R5
bGVTaGVldElkICAgOiA8bnVtYmVyPgotLy8gICAgaHJlZiAgICAgICAgICAgOiA8c3RyaW5nPgor
Ly8gICAgc291cmNlVVJMICAgICAgOiA8c3RyaW5nPgogLy8gICAgdGl0bGUgICAgICAgICAgOiA8
c3RyaW5nPgogLy8gICAgZGlzYWJsZWQgICAgICAgOiA8Ym9vbGVhbj4KLS8vICAgIGRvY3VtZW50
Tm9kZUlkIDogPG51bWJlcj4KIC8vICAgIHJ1bGVzICAgICAgICAgIDogWwogLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgI2Nzc1J1bGUsCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAuLi4K
IC8vICAgICAgICAgICAgICAgICAgICAgICAgICNjc3NSdWxlCiAvLyAgICAgICAgICAgICAgICAg
ICAgIF0KKy8vICAgIHRleHQgICAgICAgICAgIDogPHN0cmluZz4gLy8gT3B0aW9uYWwgLSB3aGVu
ZXZlciB0aGUgdGV4dCBpcyBhdmFpbGFibGUgZm9yIGEgdGV4dC1iYXNlZCBzdHlsZXNoZWV0CiAv
LyB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gc3RhdGljCi1QYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgZnVsbFN0eWxlSWQsIENTU1N0eWxl
U291cmNlRGF0YSogc291cmNlRGF0YSkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNw
ZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwgY29uc3QgU3RyaW5nJiBmdWxsU3R5bGVJZCwgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJv
cGVydHk+JiBwcm9wZXJ0aWVzLCBDU1NTdHlsZVNvdXJjZURhdGEqIHNvdXJjZURhdGEpCiB7CiAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgICBpZiAoIWZ1bGxTdHlsZUlkLmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0LT5z
ZXRTdHJpbmcoImlkIiwgZnVsbFN0eWxlSWQpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZygi
c3R5bGVJZCIsIGZ1bGxTdHlsZUlkKTsKIAotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJ3aWR0aCIs
IHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJ3aWR0aCIpKTsKLSAgICByZXN1bHQtPnNldFN0cmlu
ZygiaGVpZ2h0Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpKTsKLSAgICBWZWN0
b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiogcHJvcGVydHlEYXRhID0gMDsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0aWVzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBwcm9wZXJ0aWVzT2JqZWN0LT5zZXRTdHJpbmcoIndpZHRoIiwgc3R5bGUtPmdl
dFByb3BlcnR5VmFsdWUoIndpZHRoIikpOworICAgIHByb3BlcnRpZXNPYmplY3QtPnNldFN0cmlu
ZygiaGVpZ2h0Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpKTsKIAogICAgIGlm
IChzb3VyY2VEYXRhKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJzdGFydE9mZnNldCIs
IHNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0KTsKLSAgICAgICAgcmVzdWx0LT5zZXRO
dW1iZXIoImVuZE9mZnNldCIsIHNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCk7Ci0gICAg
ICAgIHByb3BlcnR5RGF0YSA9ICZzb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7CisgICAgICAgIHBy
b3BlcnRpZXNPYmplY3QtPnNldE51bWJlcigic3RhcnRPZmZzZXQiLCBzb3VyY2VEYXRhLT5zdHls
ZUJvZHlSYW5nZS5zdGFydCk7CisgICAgICAgIHByb3BlcnRpZXNPYmplY3QtPnNldE51bWJlcigi
ZW5kT2Zmc2V0Iiwgc291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kKTsKICAgICB9Ci0gICAg
cG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKHN0eWxlLCByZXN1bHQuZ2V0KCksIHBy
b3BlcnR5RGF0YSk7CisgICAgcmVzdWx0LT5zZXRPYmplY3QoInByb3BlcnRpZXMiLCBwcm9wZXJ0
aWVzT2JqZWN0KTsKKworICAgIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhzdHls
ZSwgcHJvcGVydGllcywgcmVzdWx0LmdldCgpKTsKIAogICAgIHJldHVybiByZXN1bHQucmVsZWFz
ZSgpOwogfQpAQCAtMTY0LDYgKzE2MCw1OSBAQCBDU1NTdHlsZVJ1bGUqIEluc3BlY3RvckNTU0Fn
ZW50Ojphc0NTU1N0eWxlUnVsZShTdHlsZUJhc2UqIHN0eWxlQmFzZSkKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZSk7CiB9CiAKKy8vIHN0YXRpYworSW5zcGVjdG9y
U3R5bGVQcm9wZXJ0eSBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlzYWJsZWRJbnNwZWN0b3JTdHlsZVBy
b3BlcnR5KERpc2FibGVkUHJvcGVydHlTdG9yZSBkaXNhYmxlZFByb3BlcnRpZXMsIHVuc2lnbmVk
IGRpc2FibGVkSW5kZXgpCit7CisgICAgQVNTRVJUKGRpc2FibGVkSW5kZXggPCBkaXNhYmxlZFBy
b3BlcnRpZXMtPmxlbmd0aCgpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGRpc2FibGVk
VmFsdWUgPSBkaXNhYmxlZFByb3BlcnRpZXMtPmdldChkaXNhYmxlZEluZGV4KTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBkaXNhYmxlZFByb3BlcnR5ID0gZGlzYWJsZWRWYWx1ZS0+YXNP
YmplY3QoKTsKKyAgICBTdHJpbmcgdGV4dDsKKyAgICBib29sIHN1Y2Nlc3MgPSBkaXNhYmxlZFBy
b3BlcnR5LT5nZXRTdHJpbmcoInRleHQiLCAmdGV4dCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNj
ZXNzLCBzdWNjZXNzKTsKKyAgICBkb3VibGUgZG91YmxlT2Zmc2V0OworICAgIHN1Y2Nlc3MgPSBk
aXNhYmxlZFByb3BlcnR5LT5nZXROdW1iZXIoIm9mZnNldCIsICZkb3VibGVPZmZzZXQpOworICAg
IEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRvdWJsZU9mZnNldCk7CisgICAgcmV0dXJuIEluc3BlY3Rv
clN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlTb3VyY2VEYXRhKCI8PiIsIHRleHQsIGZhbHNlLCBm
YWxzZSwgU291cmNlUmFuZ2Uob2Zmc2V0LCBvZmZzZXQpKSwgdHJ1ZSwgdHJ1ZSk7Cit9CisKKy8v
IHN0YXRpYwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cG9wdWxhdGVJbnNwZWN0b3JGcm9udGVu
ZFByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFZlY3RvcjxDU1NQcm9wZXJ0
eVNvdXJjZURhdGE+KiBzb3VyY2VQcm9wZXJ0eURhdGEsIERpc2FibGVkUHJvcGVydHlTdG9yZSBk
aXNhYmxlZFByb3BlcnRpZXMsIFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiogcmVzdWx0
KQoreworICAgIEhhc2hTZXQ8U3RyaW5nPiBmb3VuZFNob3J0aGFuZHM7CisgICAgSGFzaFNldDxT
dHJpbmc+IHNvdXJjZVByb3BlcnR5TmFtZXM7CisgICAgdW5zaWduZWQgZGlzYWJsZWRJbmRleCA9
IDA7CisgICAgdW5zaWduZWQgZGlzYWJsZWRMZW5ndGggPSBkaXNhYmxlZFByb3BlcnRpZXMgPyBk
aXNhYmxlZFByb3BlcnRpZXMtPmxlbmd0aCgpIDogMDsKKyAgICBJbnNwZWN0b3JTdHlsZVByb3Bl
cnR5IGRpc2FibGVkUHJvcGVydHk7CisgICAgaWYgKGRpc2FibGVkSW5kZXggPCBkaXNhYmxlZExl
bmd0aCkKKyAgICAgICAgZGlzYWJsZWRQcm9wZXJ0eSA9IGRpc2FibGVkSW5zcGVjdG9yU3R5bGVQ
cm9wZXJ0eShkaXNhYmxlZFByb3BlcnRpZXMsIGRpc2FibGVkSW5kZXgpOworCisgICAgaWYgKHNv
dXJjZVByb3BlcnR5RGF0YSkgeworICAgICAgICBmb3IgKFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJj
ZURhdGE+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHNvdXJjZVByb3BlcnR5RGF0YS0+YmVnaW4oKTsg
aXQgIT0gc291cmNlUHJvcGVydHlEYXRhLT5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgaWYg
KGRpc2FibGVkUHJvcGVydGllcyAmJiBkaXNhYmxlZEluZGV4IDwgZGlzYWJsZWRMZW5ndGggJiYg
ZGlzYWJsZWRQcm9wZXJ0eS5wcm9wZXJ0eS5yYW5nZS5zdGFydCA8PSBpdC0+cmFuZ2Uuc3RhcnQp
IHsKKyAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChkaXNhYmxlZFByb3BlcnR5KTsKKyAg
ICAgICAgICAgICAgICBpZiAoKytkaXNhYmxlZEluZGV4IDwgZGlzYWJsZWRMZW5ndGgpCisgICAg
ICAgICAgICAgICAgICAgIGRpc2FibGVkUHJvcGVydHkgPSBkaXNhYmxlZEluc3BlY3RvclN0eWxl
UHJvcGVydHkoZGlzYWJsZWRQcm9wZXJ0aWVzLCBkaXNhYmxlZEluZGV4KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKEluc3BlY3RvclN0eWxlUHJvcGVydHkoKml0
LCB0cnVlLCBmYWxzZSkpOworICAgICAgICAgICAgc291cmNlUHJvcGVydHlOYW1lcy5hZGQoaXQt
Pm5hbWUpOworICAgICAgICB9CisgICAgfQorCisgICAgd2hpbGUgKGRpc2FibGVkSW5kZXggPCBk
aXNhYmxlZExlbmd0aCkgeworICAgICAgICByZXN1bHQtPmFwcGVuZChkaXNhYmxlZFByb3BlcnR5
KTsKKyAgICAgICAgZGlzYWJsZWRQcm9wZXJ0eSA9IGRpc2FibGVkSW5zcGVjdG9yU3R5bGVQcm9w
ZXJ0eShkaXNhYmxlZFByb3BlcnRpZXMsIGRpc2FibGVkSW5kZXgrKyk7CisgICAgfQorCisgICAg
Zm9yIChpbnQgaSA9IDAsIHNpemUgPSBzdHlsZS0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpIHsK
KyAgICAgICAgU3RyaW5nIG5hbWUgPSBzdHlsZS0+aXRlbShpKTsKKyAgICAgICAgaWYgKHNvdXJj
ZVByb3BlcnR5TmFtZXMuY29udGFpbnMobmFtZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBzb3VyY2VQcm9wZXJ0eU5hbWVzLmFkZChuYW1lKTsKKyAgICAgICAgcmVzdWx0LT5h
cHBlbmQoSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVNvdXJjZURhdGEobmFtZSwg
c3R5bGUtPmdldFByb3BlcnR5VmFsdWUobmFtZSksICFzdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0
eShuYW1lKS5pc0VtcHR5KCksIHRydWUsIFNvdXJjZVJhbmdlKCkpLCBmYWxzZSwgZmFsc2UpKTsK
KyAgICB9Cit9CiAKIEluc3BlY3RvckNTU0FnZW50OjpJbnNwZWN0b3JDU1NBZ2VudChJbnNwZWN0
b3JET01BZ2VudCogZG9tQWdlbnQsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICA6
IG1fZG9tQWdlbnQoZG9tQWdlbnQpCkBAIC0yNDYsNyArMjk1LDEwIEBAIHZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPElu
c3BlY3RvclZhCiAgICAgaWYgKCFkZWZhdWx0VmlldykKICAgICAgICAgcmV0dXJuOwogCi0gICAg
KnN0eWxlID0gYnVpbGRPYmplY3RGb3JTdHlsZShkZWZhdWx0Vmlldy0+Z2V0Q29tcHV0ZWRTdHls
ZShlbGVtZW50LCAiIikuZ2V0KCksICIiKTsKKyAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlv
bj4gY29tcHV0ZWRTdHlsZSA9IGRlZmF1bHRWaWV3LT5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQs
ICIiKTsKKyAgICBWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4gcHJvcGVydGllczsKKyAg
ICBwb3B1bGF0ZUluc3BlY3RvckZyb250ZW5kUHJvcGVydGllcyhjb21wdXRlZFN0eWxlLmdldCgp
LCAwLCAwLCAmcHJvcGVydGllcyk7CisgICAgKnN0eWxlID0gYnVpbGRPYmplY3RGb3JTdHlsZShj
b21wdXRlZFN0eWxlLmdldCgpLCAiIiwgcHJvcGVydGllcyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmdldEluaGVyaXRlZFN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+KiBzdHlsZSkKQEAgLTMwOCw3ICszNjAsNyBAQCB2b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpzZXRTdHlsZVNoZWV0VGV4dDIoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQs
IGNvbnN0IFN0cgogICAgIGluc3BlY3RvclN0eWxlU2hlZXQtPnNldFRleHQodGV4dCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlVGV4dDIoY29uc3QgU3RyaW5nJiBmdWxs
U3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1
bHQpCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZURhdGEyKGNvbnN0IFN0cmluZyYg
ZnVsbFN0eWxlSWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHN0eWxlRGF0YU9iamVjdCwgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQogewogICAgIFZlY3RvcjxTdHJpbmc+IGlkUGFy
dHM7CiAgICAgZnVsbFN0eWxlSWQuc3BsaXQoJzonLCBpZFBhcnRzKTsKQEAgLTMxOCwxNyArMzcw
LDEyIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlVGV4dDIoY29uc3QgU3RyaW5n
JiBmdWxsU3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNo
ZWV0KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQtPnNl
dFN0eWxlVGV4dChpZFBhcnRzLmF0KDEpLCB0ZXh0KSkKKyAgICBpZiAoIWluc3BlY3RvclN0eWxl
U2hlZXQtPnNldFN0eWxlKGlkUGFydHMuYXQoMSksIHN0eWxlRGF0YU9iamVjdC5nZXQoKSkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgICpyZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWls
ZE9iamVjdEZvclN0eWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoaWRQYXJ0cy5h
dCgxKSkpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eTIoY29u
c3QgU3RyaW5nJiwgbG9uZywgYm9vbCkKLXsKLSAgICAvLyBGSVhNRShhcGF2bG92KTogaW1wbGVt
ZW50Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcjIoY29uc3Qg
U3RyaW5nJiBmdWxsUnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiByZXN1bHQpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gaWRQYXJ0czsKQEAgLTM4
MCw3MSArNDI3LDU2IEBAIEVsZW1lbnQqIEluc3BlY3RvckNTU0FnZW50OjppbmxpbmVTdHlsZUVs
ZW1lbnQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB9CiAKIC8vIHN0YXRpYwotdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6cG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBJbnNwZWN0b3JPYmplY3QqIHJlc3VsdCwgVmVjdG9yPENT
U1Byb3BlcnR5U291cmNlRGF0YT4qIHByb3BlcnR5RGF0YSkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OnBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSwgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+JiBwcm9wZXJ0aWVzLCBJbnNw
ZWN0b3JPYmplY3QqIHJlc3VsdCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Bl
cnRpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm9wZXJ0aWVzT2JqZWN0ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNob3J0aGFuZFZhbHVlcyA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+ID4g
cHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5OwogICAgIEhhc2hTZXQ8U3RyaW5n
PiBmb3VuZFNob3J0aGFuZHM7Ci0gICAgSGFzaFNldDxTdHJpbmc+IHNvdXJjZVByb3BlcnR5TmFt
ZXM7Ci0gICAgaWYgKHByb3BlcnR5RGF0YSkgewotICAgICAgICBmb3IgKFZlY3RvcjxDU1NQcm9w
ZXJ0eVNvdXJjZURhdGE+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHByb3BlcnR5RGF0YS0+YmVnaW4o
KTsgaXQgIT0gcHJvcGVydHlEYXRhLT5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgY29uc3Qg
Q1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eUVudHJ5ID0gKml0OwotICAgICAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHJvcGVydHkgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwotICAgICAgICAgICAgcHJvcGVydGllcy0+cHVzaE9iamVjdChwcm9wZXJ0eSk7Ci0gICAg
ICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBwcm9wZXJ0eUVudHJ5Lm5hbWU7Ci0gICAgICAg
ICAgICBzb3VyY2VQcm9wZXJ0eU5hbWVzLmFkZChuYW1lKTsKKworICAgIGZvciAoVmVjdG9yPElu
c3BlY3RvclN0eWxlUHJvcGVydHk+OjppdGVyYXRvciBpdCA9IHByb3BlcnRpZXMuYmVnaW4oKSwg
aXRFbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOyBpdCAhPSBpdEVuZDsgKytpdCkgeworICAgICAgICBj
b25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5RW50cnkgPSBpdC0+cHJvcGVydHk7
CisgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IHByb3BlcnR5RW50cnkubmFtZTsKKworICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0eSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgICAgIHByb3BlcnRpZXNPYmplY3QtPnB1c2hPYmplY3QocHJvcGVydHkp
OworICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzdGF0dXMiLCBpdC0+ZGlzYWJsZWQgPyAi
ZGlzYWJsZWQiIDogImFjdGl2ZSIpOworICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigicGFy
c2VkT2siLCBwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKTsKKyAgICAgICAgaWYgKCFpdC0+ZGlzYWJs
ZWQpIHsKICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoIm5hbWUiLCBuYW1lKTsKICAg
ICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInZhbHVlIiwgcHJvcGVydHlFbnRyeS52YWx1
ZSk7CiAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJwcmlvcml0eSIsIHByb3BlcnR5
RW50cnkuaW1wb3J0YW50ID8gImltcG9ydGFudCIgOiAiIik7Ci0gICAgICAgICAgICBwcm9wZXJ0
eS0+c2V0U3RyaW5nKCJzdGF0dXMiLCAiYWN0aXZlIik7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+
c2V0Qm9vbGVhbigicGFyc2VkT2siLCBwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKTsKLSAgICAgICAg
ICAgIHByb3BlcnR5LT5zZXROdW1iZXIoInN0YXJ0T2Zmc2V0IiwgcHJvcGVydHlFbnRyeS5yYW5n
ZS5zdGFydCk7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0TnVtYmVyKCJlbmRPZmZzZXQiLCBw
cm9wZXJ0eUVudHJ5LnJhbmdlLmVuZCk7Ci0gICAgICAgICAgICBpZiAocHJvcGVydHlFbnRyeS5w
YXJzZWRPaykgeworICAgICAgICAgICAgaWYgKGl0LT5oYXNTb3VyY2UpIHsKICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCBmYWxzZSk7Ci0gICAgICAgICAg
ICAgICAgU3RyaW5nIHNob3J0aGFuZCA9IHN0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1l
KTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwg
c2hvcnRoYW5kKTsKLSAgICAgICAgICAgICAgICBpZiAoIXNob3J0aGFuZC5pc0VtcHR5KCkgJiYg
IWZvdW5kU2hvcnRoYW5kcy5jb250YWlucyhzaG9ydGhhbmQpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGZvdW5kU2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKLSAgICAgICAgICAgICAgICAgICAg
c2hvcnRoYW5kVmFsdWVzLT5zZXRTdHJpbmcoc2hvcnRoYW5kLCBzaG9ydGhhbmRWYWx1ZShzdHls
ZSwgc2hvcnRoYW5kKSk7CisgICAgICAgICAgICAgICAgcHJvcGVydHktPnNldE51bWJlcigic3Rh
cnRPZmZzZXQiLCBwcm9wZXJ0eUVudHJ5LnJhbmdlLnN0YXJ0KTsKKyAgICAgICAgICAgICAgICBw
cm9wZXJ0eS0+c2V0TnVtYmVyKCJlbmRPZmZzZXQiLCBwcm9wZXJ0eUVudHJ5LnJhbmdlLmVuZCk7
CisKKyAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gPjo6aXRlcmF0b3IgYWN0aXZlSXQgPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJv
cGVydHkuZmluZChuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aXZlSXQgIT0gcHJvcGVy
dHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmVuZCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0cmluZygic3RhdHVzIiwgImluYWN0aXZlIik7Cisg
ICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0cmluZygic2hvcnRoYW5k
TmFtZSIsICIiKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChuYW1lLCBwcm9wZXJ0eSk7CiAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJpbXBs
aWNpdCIsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9y
dGhhbmROYW1lIiwgIiIpOworICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJp
bXBsaWNpdCIsIHN0eWxlLT5pc1Byb3BlcnR5SW1wbGljaXQobmFtZSkpOworICAgICAgICAgICAg
ICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsICJzdHlsZSIpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+ID46
Oml0ZXJhdG9yIGFjdGl2ZUl0ID0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5
LmZpbmQobmFtZSk7Ci0gICAgICAgICAgICBpZiAoYWN0aXZlSXQgIT0gcHJvcGVydHlOYW1lVG9Q
cmV2aW91c0FjdGl2ZVByb3BlcnR5LmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgYWN0aXZlSXQt
PnNlY29uZC0+c2V0U3RyaW5nKCJzdGF0dXMiLCAiaW5hY3RpdmUiKTsKLSAgICAgICAgICAgICAg
ICBhY3RpdmVJdC0+c2Vjb25kLT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCAiIik7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygidGV4dCIsIHByb3Bl
cnR5RW50cnkudmFsdWUpOworCisgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKSB7
CisgICAgICAgICAgICAvLyBCb3RoIGZvciBzdHlsZS1vcmlnaW5hdGVkIGFuZCBwYXJzZWQgc291
cmNlIHByb3BlcnRpZXMuCisgICAgICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gc3R5bGUtPmdl
dFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOworICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmlu
Zygic2hvcnRoYW5kTmFtZSIsIHNob3J0aGFuZCk7CisgICAgICAgICAgICBpZiAoIXNob3J0aGFu
ZC5pc0VtcHR5KCkgJiYgIWZvdW5kU2hvcnRoYW5kcy5jb250YWlucyhzaG9ydGhhbmQpKSB7Cisg
ICAgICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzLmFkZChzaG9ydGhhbmQpOworICAgICAgICAg
ICAgICAgIHNob3J0aGFuZFZhbHVlcy0+c2V0U3RyaW5nKHNob3J0aGFuZCwgc2hvcnRoYW5kVmFs
dWUoc3R5bGUsIHNob3J0aGFuZCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJvcGVy
dHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChuYW1lLCBwcm9wZXJ0eSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMCwgc2l6ZSA9IHN0eWxlLT5sZW5ndGgo
KTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBTdHJpbmcgbmFtZSA9IHN0eWxlLT5pdGVtKGkp
OwotICAgICAgICBpZiAoc291cmNlUHJvcGVydHlOYW1lcy5jb250YWlucyhuYW1lKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHNvdXJjZVByb3BlcnR5TmFtZXMuYWRkKG5hbWUp
OwotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0eSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHByb3BlcnRpZXMtPnB1c2hPYmplY3QocHJvcGVydHkp
OwotICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7Ci0gICAgICAgIHBy
b3BlcnR5LT5zZXRTdHJpbmcoInZhbHVlIiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUobmFtZSkp
OwotICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJwcmlvcml0eSIsIHN0eWxlLT5nZXRQcm9w
ZXJ0eVByaW9yaXR5KCJuYW1lIikpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1w
bGljaXQiLCBzdHlsZS0+aXNQcm9wZXJ0eUltcGxpY2l0KG5hbWUpKTsKLSAgICAgICAgcHJvcGVy
dHktPnNldEJvb2xlYW4oInBhcnNlZE9rIiwgdHJ1ZSk7Ci0gICAgICAgIHByb3BlcnR5LT5zZXRT
dHJpbmcoInN0YXR1cyIsICJzdHlsZSIpOwotICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gc3R5
bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0U3Ry
aW5nKCJzaG9ydGhhbmROYW1lIiwgc2hvcnRoYW5kKTsKLSAgICAgICAgaWYgKCFzaG9ydGhhbmQu
aXNFbXB0eSgpICYmICFmb3VuZFNob3J0aGFuZHMuY29udGFpbnMoc2hvcnRoYW5kKSkgewotICAg
ICAgICAgICAgZm91bmRTaG9ydGhhbmRzLmFkZChzaG9ydGhhbmQpOwotICAgICAgICAgICAgc2hv
cnRoYW5kVmFsdWVzLT5zZXRTdHJpbmcoc2hvcnRoYW5kLCBzaG9ydGhhbmRWYWx1ZShzdHlsZSwg
c2hvcnRoYW5kKSk7Ci0gICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBwcm9w
ZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgIiIpOwogICAgIH0KIAotICAgIHJlc3Vs
dC0+c2V0QXJyYXkoInByb3BlcnRpZXMiLCBwcm9wZXJ0aWVzKTsKKyAgICByZXN1bHQtPnNldEFy
cmF5KCJjc3NQcm9wZXJ0aWVzIiwgcHJvcGVydGllc09iamVjdCk7CiAgICAgcmVzdWx0LT5zZXRP
YmplY3QoInNob3J0aGFuZFZhbHVlcyIsIHNob3J0aGFuZFZhbHVlcyk7CiB9CiAKQEAgLTYyMiw3
ICs2NTQsOSBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ1NTQWdlbnQ6
OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKEVsZQogICAgICAgICBBdHRyaWJ1dGUqIGF0
dHJpYnV0ZSA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgIGlmIChhdHRy
aWJ1dGUtPnN0eWxlKCkpIHsKICAgICAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gYXR0
cmlidXRlLT5sb2NhbE5hbWUoKTsKLSAgICAgICAgICAgIHN0eWxlQXR0cmlidXRlcy0+c2V0T2Jq
ZWN0KGF0dHJpYnV0ZU5hbWUudXRmOCgpLmRhdGEoKSwgYnVpbGRPYmplY3RGb3JTdHlsZShhdHRy
aWJ1dGUtPnN0eWxlKCksICIiKSk7CisgICAgICAgICAgICBWZWN0b3I8SW5zcGVjdG9yU3R5bGVQ
cm9wZXJ0eT4gcHJvcGVydGllczsKKyAgICAgICAgICAgIHBvcHVsYXRlSW5zcGVjdG9yRnJvbnRl
bmRQcm9wZXJ0aWVzKGF0dHJpYnV0ZS0+c3R5bGUoKSwgMCwgMCwgJnByb3BlcnRpZXMpOworICAg
ICAgICAgICAgc3R5bGVBdHRyaWJ1dGVzLT5zZXRPYmplY3QoYXR0cmlidXRlTmFtZS51dGY4KCku
ZGF0YSgpLCBidWlsZE9iamVjdEZvclN0eWxlKGF0dHJpYnV0ZS0+c3R5bGUoKSwgIiIsIHByb3Bl
cnRpZXMpKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0Fn
ZW50LmgKaW5kZXggZWI2MDEzYi4uMmMzMTI5NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5oCkBAIC01Niw5ICs1NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSW5zcGVjdG9yQ1NTQWdlbnQoZG9tQWdlbnQsIGZyb250ZW5kKSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclN0
eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIGZ1bGxTdHlsZUlkLCBDU1NT
dHlsZVNvdXJjZURhdGEqID0gMCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJp
bmcmIGZ1bGxTdHlsZUlkLCBWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4mIHByb3BlcnRp
ZXMsIENTU1N0eWxlU291cmNlRGF0YSogPSAwKTsKICAgICBzdGF0aWMgQ1NTU3R5bGVTaGVldCog
cGFyZW50U3R5bGVTaGVldChTdHlsZUJhc2UqKTsKICAgICBzdGF0aWMgQ1NTU3R5bGVSdWxlKiBh
c0NTU1N0eWxlUnVsZShTdHlsZUJhc2UqKTsKKyAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZUluc3Bl
Y3RvckZyb250ZW5kUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgVmVjdG9y
PENTU1Byb3BlcnR5U291cmNlRGF0YT4qIHNvdXJjZVByb3BlcnR5RGF0YSwgRGlzYWJsZWRQcm9w
ZXJ0eVN0b3JlIGRpc2FibGVkUHJvcGVydGllcywgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVy
dHk+KiByZXN1bHQpOwogCiAgICAgSW5zcGVjdG9yQ1NTQWdlbnQoSW5zcGVjdG9yRE9NQWdlbnQq
IGRvbUFnZW50LCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpOwogICAgIH5JbnNwZWN0b3JD
U1NBZ2VudCgpOwpAQCAtNzMsOCArNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRBbGxTdHls
ZXMyKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxlcyk7CiAgICAgdm9pZCBnZXRTdHlsZVNo
ZWV0Mihjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiog
cmVzdWx0KTsKICAgICB2b2lkIHNldFN0eWxlU2hlZXRUZXh0Mihjb25zdCBTdHJpbmcmIHN0eWxl
U2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKLSAgICB2b2lkIHNldFN0eWxlVGV4dDIoY29u
c3QgU3RyaW5nJiBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4qIHJlc3VsdCk7Ci0gICAgdm9pZCB0b2dnbGVQcm9wZXJ0eTIoY29uc3QgU3RyaW5nJiBz
dHlsZUlkLCBsb25nIHByb3BlcnR5T3JkaW5hbCwgYm9vbCBkaXNhYmxlZCk7CisgICAgdm9pZCBz
ZXRTdHlsZURhdGEyKGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gc3R5bGVEYXRhT2JqZWN0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwogICAg
IHZvaWQgc2V0UnVsZVNlbGVjdG9yMihjb25zdCBTdHJpbmcmIHJ1bGVJZCwgY29uc3QgU3RyaW5n
JiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKICAgICB2b2lkIGFk
ZFJ1bGUyKGNvbnN0IGxvbmcgY29udGV4dE5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3Rvciwg
UmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKICAgICB2b2lkIGdldFN1cHBvcnRlZENT
U1Byb3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KTsKQEAgLTgyLDExICs4
MiwxMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJl
ZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+IElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0OwogICAg
IHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVNoZWV0KiwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hl
ZXQ+ID4gQ1NTU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKLSAgICB0eXBlZGVmIEhh
c2hNYXA8Tm9kZSosIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+ID4g
Tm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldDsgLy8gZm9yIGJvZ3VzICJzdHlsZXNoZWV0cyIgd2l0
aCBpbmxpbmUgbm9kZSBzdHlsZXMKKyAgICB0eXBlZGVmIEhhc2hNYXA8Tm9kZSosIFJlZlB0cjxJ
bnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+ID4gTm9kZVRvSW5zcGVjdG9yU3R5bGVT
aGVldDsgLy8gYm9ndXMgInN0eWxlc2hlZXRzIiB3aXRoIGVsZW1lbnRzJyBpbmxpbmUgc3R5bGVz
CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxEb2N1bWVudD4sIFJlZlB0cjxJbnNwZWN0b3JT
dHlsZVNoZWV0PiA+IERvY3VtZW50VG9WaWFJbnNwZWN0b3JTdHlsZVNoZWV0OyAvLyAidmlhIGlu
c3BlY3RvciIgc3R5bGVzaGVldHMKIAorICAgIHN0YXRpYyBJbnNwZWN0b3JTdHlsZVByb3BlcnR5
IGRpc2FibGVkSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eShEaXNhYmxlZFByb3BlcnR5U3RvcmUgZGlz
YWJsZWRQcm9wZXJ0aWVzLCB1bnNpZ25lZCBkaXNhYmxlZEluZGV4KTsKICAgICBzdGF0aWMgRWxl
bWVudCogaW5saW5lU3R5bGVFbGVtZW50KENTU1N0eWxlRGVjbGFyYXRpb24qKTsKLSAgICBzdGF0
aWMgdm9pZCBwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJh
dGlvbiosIEluc3BlY3Rvck9iamVjdCogcmVzdWx0LCBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VE
YXRhPiogcHJvcGVydHlEYXRhKTsKKyAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZU9iamVjdFdpdGhT
dHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIFZlY3RvcjxJbnNwZWN0b3JTdHls
ZVByb3BlcnR5PiYsIEluc3BlY3Rvck9iamVjdCogcmVzdWx0KTsKICAgICBzdGF0aWMgU3RyaW5n
IHNob3J0aGFuZFZhbHVlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIHNob3J0
aGFuZFByb3BlcnR5KTsKICAgICBzdGF0aWMgU3RyaW5nIHNob3J0aGFuZFByaW9yaXR5KENTU1N0
eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KTsKICAgICBz
dGF0aWMgVmVjdG9yPFN0cmluZz4gbG9uZ2hhbmRQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRp
b24qLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggMTFjZDY0OS4uZDI4ZTJhZCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTE5Nyw2ICsxOTcsMjEgQEAg
Q1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlRm9ySWQoY29uc3QgU3RyaW5n
JiBpZCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0
Ojpwb3B1bGF0ZUFsbFByb3BlcnRpZXMoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCBWZWN0b3I8SW5z
cGVjdG9yU3R5bGVQcm9wZXJ0eT4qIHJlc3VsdCkKK3sKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSA9IHN0eWxlRm9ySWQoc3R5bGVJZCk7CisgICAgLy8gRklYTUU6IGNoYW5nZSB0aGlz
IHRvIHJldHVybiBib29sZWFuIHN1Y2Nlc3MgYW5kIGhhdmUgYW4gb3V0cHV0IHBhcmFtZXRlcj8K
KyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+IHNvdXJjZURhdGE7CisgICAgaWYgKGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKQor
ICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3Ioc3R5bGUpOworCisgICAgRGlz
YWJsZWRQcm9wZXJ0eVN0b3JlIGRpc2FibGVkUHJvcGVydGllcyA9IGRpc2FibGVkUHJvcGVydHlT
dG9yZUZvclN0eWxlKHN0eWxlKTsKKyAgICBJbnNwZWN0b3JDU1NBZ2VudDo6cG9wdWxhdGVJbnNw
ZWN0b3JGcm9udGVuZFByb3BlcnRpZXMoc3R5bGUsIHNvdXJjZURhdGEgPyAmKHNvdXJjZURhdGEt
PnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhKSA6IDAsIGRpc2FibGVkUHJvcGVydGllcywg
cmVzdWx0KTsKK30KKwogUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxl
U2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpCiB7CiAgICAgQ1NTU3R5bGVTaGVldCog
c3R5bGVTaGVldCA9IHBhZ2VTdHlsZVNoZWV0KCk7CkBAIC0yMDQsMTkgKzIxOSwyMCBAQCBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RG
b3JTdHlsZVNoZWV0KCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHJlc3VsdC0+
c2V0U3RyaW5nKCJpZCIsIGlkKCkpOwogICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigiZGlzYWJsZWQi
LCBzdHlsZVNoZWV0LT5kaXNhYmxlZCgpKTsKLSAgICByZXN1bHQtPnNldFN0cmluZygiaHJlZiIs
IHN0eWxlU2hlZXQtPmhyZWYoKSk7CisgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNvdXJjZVVSTCIs
IHN0eWxlU2hlZXQtPmhyZWYoKSk7CiAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxlIiwgc3R5
bGVTaGVldC0+dGl0bGUoKSk7CiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlTGlzdCA9
IENTU1J1bGVMaXN0OjpjcmVhdGUoc3R5bGVTaGVldCwgdHJ1ZSk7CiAgICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBjc3NSdWxlcyA9IGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChjc3NSdWxlTGlzdC5n
ZXQoKSk7Ci0gICAgcmVzdWx0LT5zZXRBcnJheSgiY3NzUnVsZXMiLCBjc3NSdWxlcy5yZWxlYXNl
KCkpOworICAgIHJlc3VsdC0+c2V0QXJyYXkoInJ1bGVzIiwgY3NzUnVsZXMucmVsZWFzZSgpKTsK
IAogICAgIFN0cmluZyBzdHlsZVNoZWV0VGV4dDsKICAgICBib29sIHN1Y2Nlc3MgPSB0ZXh0KCZz
dHlsZVNoZWV0VGV4dCk7CiAgICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJ0ZXh0Iiwgc3R5bGVTaGVldFRleHQpOwogCisgICAgcmVzdWx0LT5zZXRTdHJpbmcoInN0
eWxlU2hlZXRJZCIsIGlkKCkpOworCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAK
QEAgLTIyOCwyNyArMjQ0LDEzIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0
b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlCiAKICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzZWxlY3RvclRleHQiLCBydWxlLT5zZWxlY3RvclRleHQo
KSk7Ci0gICAgcmVzdWx0LT5zZXRTdHJpbmcoImNzc1RleHQiLCBydWxlLT5jc3NUZXh0KCkpOwor
ICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCAhc3R5bGVTaGVldC0+aHJlZigpLmlz
RW1wdHkoKSA/IHN0eWxlU2hlZXQtPmhyZWYoKSA6IG1fZG9jdW1lbnRVUkwpOwogICAgIHJlc3Vs
dC0+c2V0TnVtYmVyKCJzb3VyY2VMaW5lIiwgcnVsZS0+c291cmNlTGluZSgpKTsKLSAgICByZXN1
bHQtPnNldFN0cmluZygiZG9jdW1lbnRVUkwiLCBtX2RvY3VtZW50VVJMKTsKLQotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmVudFN0eWxlU2hlZXRWYWx1ZSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgcGFyZW50U3R5bGVTaGVldFZhbHVlLT5zZXRTdHJpbmcoImlkIiwg
aWQoKSk7Ci0gICAgcGFyZW50U3R5bGVTaGVldFZhbHVlLT5zZXRTdHJpbmcoImhyZWYiLCBzdHls
ZVNoZWV0LT5ocmVmKCkpOwotICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJwYXJlbnRTdHlsZVNoZWV0
IiwgcGFyZW50U3R5bGVTaGVldFZhbHVlLnJlbGVhc2UoKSk7CiAgICAgcmVzdWx0LT5zZXRTdHJp
bmcoIm9yaWdpbiIsIG1fb3JpZ2luKTsKIAotICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
c291cmNlRGF0YTsKLSAgICBpZiAoZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCi0gICAgICAgIHNv
dXJjZURhdGEgPSBydWxlU291cmNlRGF0YUZvcihydWxlLT5zdHlsZSgpKTsKLSAgICBpZiAoc291
cmNlRGF0YSkgewotICAgICAgICByZXN1bHQtPnNldE51bWJlcigic2VsZWN0b3JTdGFydE9mZnNl
dCIsIHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0KTsKLSAgICAgICAgcmVzdWx0
LT5zZXROdW1iZXIoInNlbGVjdG9yRW5kT2Zmc2V0Iiwgc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0
UmFuZ2UuZW5kKTsKLSAgICB9Ci0KICAgICByZXN1bHQtPnNldE9iamVjdCgic3R5bGUiLCBidWls
ZE9iamVjdEZvclN0eWxlKHJ1bGUtPnN0eWxlKCkpKTsKICAgICBpZiAoY2FuQmluZCgpKQotICAg
ICAgICByZXN1bHQtPnNldFN0cmluZygiaWQiLCBmdWxsUnVsZUlkKHJ1bGUpKTsKKyAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoInJ1bGVJZCIsIGZ1bGxSdWxlSWQocnVsZSkpOwogCiAgICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CkBAIC0yNTksMTEgKzI2MSwzNiBAQCBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHls
ZShDU1NTdHlsZURlYwogICAgIGlmIChlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKICAgICAgICAg
c291cmNlRGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKHN0eWxlKTsKIAotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclN0
eWxlKHN0eWxlLCBmdWxsU3R5bGVJZChzdHlsZSksIHNvdXJjZURhdGEgPyBzb3VyY2VEYXRhLT5z
dHlsZVNvdXJjZURhdGEuZ2V0KCkgOiAwKTsKLSAgICByZXN1bHQtPnNldFN0cmluZygicGFyZW50
U3R5bGVTaGVldElkIiwgaWQoKSk7CisgICAgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+
IHByb3BlcnRpZXM7CisgICAgcG9wdWxhdGVBbGxQcm9wZXJ0aWVzKHJ1bGVPclN0eWxlSWQoc3R5
bGUpLCAmcHJvcGVydGllcyk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGUsIGZ1bGxTdHlsZUlk
KHN0eWxlKSwgcHJvcGVydGllcywgc291cmNlRGF0YSA/IHNvdXJjZURhdGEtPnN0eWxlU291cmNl
RGF0YS5nZXQoKSA6IDApOworICAgIGlmIChzb3VyY2VEYXRhKSB7CisgICAgICAgIFN0cmluZyB0
ZXh0OworICAgICAgICBib29sIHN1Y2Nlc3MgPSBzdHlsZVNoZWV0VGV4dCgmdGV4dCk7CisgICAg
ICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBjb25zdCBTb3VyY2VSYW5nZSYgYm9keVJh
bmdlID0gc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZTsKKyAgICAg
ICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJjc3NUZXh0IiwgdGV4dC5zdWJzdHJpbmcoYm9keVJh
bmdlLnN0YXJ0LCBib2R5UmFuZ2UuZW5kIC0gYm9keVJhbmdlLnN0YXJ0KSk7CisgICAgICAgIH0K
KyAgICB9CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKK2Jvb2wgSW5zcGVjdG9y
U3R5bGVTaGVldDo6c2V0U3R5bGUoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCBJbnNwZWN0b3JPYmpl
Y3QqIHN0eWxlT2JqZWN0KQoreworICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gc3R5
bGVGb3JJZChzdHlsZUlkKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBTdHJpbmcgdGV4dDsKKyAgICBib29sIHN1Y2Nlc3MgPSBzdHlsZU9iamVjdC0+Z2V0
U3RyaW5nKCJ0ZXh0IiwgJnRleHQpOworICAgIEFTU0VSVChzdWNjZXNzKTsKKyAgICBzdWNjZXNz
ID0gaW5uZXJTZXRTdHlsZVRleHQoc3R5bGUsIHRleHQpOworICAgIGlmIChzdWNjZXNzKQorICAg
ICAgICBzZXREaXNhYmxlZFByb3BlcnRpZXNGb3JTdHlsZShzdHlsZSwgc3R5bGVPYmplY3QtPmdl
dEFycmF5KCJkaXNhYmxlZFByb3BlcnRpZXMiKSk7CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30K
KwogQ1NTU3R5bGVEZWNsYXJhdGlvbiogSW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVGb3JJZChj
b25zdCBTdHJpbmcmIGlkKSBjb25zdAogewogICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IHJ1bGVG
b3JJZChpZCk7CkBAIC0yNzMsMTMgKzMwMCwyMCBAQCBDU1NTdHlsZURlY2xhcmF0aW9uKiBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpzdHlsZUZvcklkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0CiAgICAg
cmV0dXJuIHJ1bGUtPnN0eWxlKCk7CiB9CiAKLWJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0
U3R5bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0KQor
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6ZGlzYWJsZWRQ
cm9wZXJ0eVN0b3JlRm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7Ci0gICAg
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBzdHlsZUZvcklkKHN0eWxlSWQpOwotICAgIGlm
ICghc3R5bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBIYXNoTWFwPENTU1N0eWxlRGVj
bGFyYXRpb24qLCBEaXNhYmxlZFByb3BlcnR5U3RvcmU+OjppdGVyYXRvciBpdCA9IG1fc3R5bGVE
aXNhYmxlZFByb3BlcnRpZXMuZmluZChzdHlsZSk7CisgICAgaWYgKGl0ID09IG1fc3R5bGVEaXNh
YmxlZFByb3BlcnRpZXMuZW5kKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBpdC0+
c2Vjb25kOworfQogCi0gICAgcmV0dXJuIGlubmVyU2V0U3R5bGVUZXh0KHN0eWxlLCBuZXdUZXh0
KTsKK3ZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0RGlzYWJsZWRQcm9wZXJ0aWVzRm9yU3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGRpc2FibGVkUHJvcGVydGllcykKK3sKKyAgICBpZiAoIWRpc2FibGVkUHJvcGVydGllcykKKyAg
ICAgICAgbV9zdHlsZURpc2FibGVkUHJvcGVydGllcy5yZW1vdmUoc3R5bGUpOworICAgIGVsc2UK
KyAgICAgICAgbV9zdHlsZURpc2FibGVkUHJvcGVydGllcy5zZXQoc3R5bGUsIGRpc2FibGVkUHJv
cGVydGllcyk7CiB9CiAKIERvY3VtZW50KiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpvd25lckRvY3Vt
ZW50KCkgY29uc3QKQEAgLTQ0NCw4ICs0NzgsMTAgQEAgdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0
OjpyZXZhbGlkYXRlU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogcGFnZVN0eWxlKQogICAgICAg
ICBpZiAoIXBhcnNlZFJ1bGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHBh
cnNlZFJ1bGUtPnN0eWxlKCkgPT0gcGFnZVN0eWxlKSB7Ci0gICAgICAgICAgICBpZiAocGFyc2Vk
UnVsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpICE9IHBhZ2VTdHlsZS0+Y3NzVGV4dCgpKQorICAgICAg
ICAgICAgaWYgKHBhcnNlZFJ1bGUtPnN0eWxlKCktPmNzc1RleHQoKSAhPSBwYWdlU3R5bGUtPmNz
c1RleHQoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgd2UgY2xlYXIgdGhl
IGRpc2FibGVkIHByb3BlcnRpZXMgZm9yIHRoZSBpbnZhbGlkIHN0eWxlIGhlcmU/CiAgICAgICAg
ICAgICAgICAgaW5uZXJTZXRTdHlsZVRleHQocGFnZVN0eWxlLCBwYWdlU3R5bGUtPmNzc1RleHQo
KSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0K
QEAgLTQ2NSw3ICs1MDEsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRU
ZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAogCiBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJl
c291cmNlU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X3BhZ2VTdHlsZVNoZWV0KQorICAgIGlmICghbV9wYWdlU3R5bGVTaGVldCB8fCAhb3duZXJEb2N1
bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudDo6cmVzb3VyY2VDb250ZW50KG93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSwgbV9w
YWdlU3R5bGVTaGVldC0+ZmluYWxVUkwoKSwgcmVzdWx0KTsKQEAgLTUxMyw4ICs1NDksNyBAQCBJ
bnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZShjb25zdCBTdHJpbgogCiBib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxp
bmVTdHlsZTo6c2V0U3R5bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3RyaW5n
JiB0ZXh0KQogewotICAgIEFTU0VSVChzdHlsZUlkID09ICIwIik7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0eWxlSWQpOworICAgIEFTU0VSVF9VTlVTRUQoc3R5bGVJZCwgc3R5bGVJZCA9PSAiMCIpOwog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIG1fZWxlbWVudC0+c2V0QXR0cmlidXRlKCJz
dHlsZSIsIHRleHQsIGVjKTsKICAgICBtX3J1bGVTb3VyY2VEYXRhLmNsZWFyKCk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmggYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKaW5kZXggMzhhYjc3Ny4uMDQ5NTQ3YiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaApAQCAtMjYsMTYgKzI2LDE0IEBA
CiAjZGVmaW5lIEluc3BlY3RvclN0eWxlU2hlZXRfaAogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlT
b3VyY2VEYXRhLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JW
YWx1ZXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IGNsYXNzIFBhcnNlZFN0eWxlU2hlZXQ7CiAKQEAgLTQzLDExICs0MSwzMiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIENTU1J1bGVMaXN0OwogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlv
bjsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEVsZW1lbnQ7
CiBjbGFzcyBOb2RlOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAorc3RydWN0IEluc3BlY3Rv
clN0eWxlUHJvcGVydHkgeworICAgIEluc3BlY3RvclN0eWxlUHJvcGVydHkoKQorICAgIHsKKyAg
ICB9CisKKyAgICBJbnNwZWN0b3JTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5U291cmNlRGF0YSBw
cm9wZXJ0eSwgYm9vbCBoYXNTb3VyY2UsIGJvb2wgZGlzYWJsZWQpCisgICAgICAgIDogcHJvcGVy
dHkocHJvcGVydHkpCisgICAgICAgICwgaGFzU291cmNlKGhhc1NvdXJjZSkKKyAgICAgICAgLCBk
aXNhYmxlZChkaXNhYmxlZCkKKyAgICB7CisgICAgfQorCisgICAgQ1NTUHJvcGVydHlTb3VyY2VE
YXRhIHByb3BlcnR5OworICAgIGJvb2wgaGFzU291cmNlOworICAgIGJvb2wgZGlzYWJsZWQ7Cit9
OworCit0eXBlZGVmIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gRGlzYWJsZWRQcm9wZXJ0eVN0b3Jl
OworCiBjbGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVj
dG9yU3R5bGVTaGVldD4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
clN0eWxlU2hlZXQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGlkLCBDU1NTdHlsZVNoZWV0KiBwYWdl
U3R5bGVTaGVldCwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRV
UkwpCkBAIC02NCwxMSArODMsMTIgQEAgcHVibGljOgogICAgIGJvb2wgc2V0UnVsZVNlbGVjdG9y
KGNvbnN0IFN0cmluZyYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKTsKICAgICBDU1NT
dHlsZVJ1bGUqIGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3Rvcik7CiAgICAgQ1NTU3R5bGVS
dWxlKiBydWxlRm9ySWQoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgdm9pZCBwb3B1bGF0ZUFs
bFByb3BlcnRpZXMoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCBWZWN0b3I8SW5zcGVjdG9yU3R5bGVQ
cm9wZXJ0eT4qIHJlc3VsdCk7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxk
T2JqZWN0Rm9yU3R5bGVTaGVldCgpOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBi
dWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOworICAg
IGJvb2wgc2V0U3R5bGUoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCBJbnNwZWN0b3JPYmplY3QqIHN0
eWxlT2JqZWN0KTsKICAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQo
Y29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNldFN0eWxlVGV4dChjb25z
dCBTdHJpbmcmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiAKIHByb3RlY3RlZDoKICAg
ICBib29sIGNhbkJpbmQoKSBjb25zdCB7IHJldHVybiBtX29yaWdpbiAhPSAidXNlckFnZW50IiAm
JiBtX29yaWdpbiAhPSAidXNlciI7IH0KQEAgLTc4LDYgKzk4LDggQEAgcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUZvcihDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBydWxl
SW5kZXhCeVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCk7CisgICAgdmlydHVhbCB2b2lkIHNldERpc2FibGVk
UHJvcGVydGllc0ZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBkaXNhYmxlZFByb3BlcnRpZXMpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gZGlzYWJsZWRQcm9wZXJ0eVN0b3JlRm9yU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiopOwogCiBwcml2YXRlOgogICAgIGJvb2wgdGV4dChTdHJpbmcqIHJlc3VsdCkgY29u
c3Q7CkBAIC0xMDEsNiArMTIzLDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9kb2N1bWVudFVS
TDsKICAgICBib29sIG1faXNSZXZhbGlkYXRpbmc7CiAgICAgUGFyc2VkU3R5bGVTaGVldCogbV9w
YXJzZWRTdHlsZVNoZWV0OworICAgIEhhc2hNYXA8Q1NTU3R5bGVEZWNsYXJhdGlvbiosIERpc2Fi
bGVkUHJvcGVydHlTdG9yZT4gbV9zdHlsZURpc2FibGVkUHJvcGVydGllczsKIH07CiAKIGNsYXNz
IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSA6IHB1YmxpYyBJbnNwZWN0b3JTdHls
ZVNoZWV0IHsKQEAgLTExMSwxNCArMTM0LDE2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBJbnNw
ZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoY29uc3QgU3RyaW5nJiBpZCwgRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgU3RyaW5nJiBvcmlnaW4pOwotICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGVGb3JJZChjb25zdCBTdHJpbmcmIGlkKSBjb25zdCB7IEFTU0VSVChpZCA9
PSAiMCIpOyBVTlVTRURfUEFSQU0oaWQpOyByZXR1cm4gaW5saW5lU3R5bGUoKTsgfQorICAgIHZp
cnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChjb25zdCBTdHJpbmcmIGlkKSBj
b25zdCB7IEFTU0VSVF9VTlVTRUQoaWQsIGlkID09ICIwIik7IHJldHVybiBpbmxpbmVTdHlsZSgp
OyB9CiAgICAgdmlydHVhbCBib29sIHNldFN0eWxlVGV4dChjb25zdCBTdHJpbmcmIHN0eWxlSWQs
IGNvbnN0IFN0cmluZyYgdGV4dCk7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIERvY3VtZW50
KiBvd25lckRvY3VtZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBSZWZQdHI8Q1NTUnVsZVNvdXJj
ZURhdGE+IHJ1bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25z
dCB7IEFTU0VSVChzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsgVU5VU0VEX1BBUkFNKHN0eWxlKTsg
cmV0dXJuIG1fcnVsZVNvdXJjZURhdGE7IH0KKyAgICB2aXJ0dWFsIFJlZlB0cjxDU1NSdWxlU291
cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNv
bnN0IHsgQVNTRVJUX1VOVVNFRChzdHlsZSwgc3R5bGUgPT0gaW5saW5lU3R5bGUoKSk7IHJldHVy
biBtX3J1bGVTb3VyY2VEYXRhOyB9CiAgICAgdmlydHVhbCB1bnNpZ25lZCBydWxlSW5kZXhCeVN0
eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVh
bCBib29sIGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXREaXNh
YmxlZFByb3BlcnRpZXNGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gZGlzYWJsZWRQcm9wZXJ0aWVzKSB7IEFTU0VSVF9VTlVTRUQo
c3R5bGUsIHN0eWxlID09IGlubGluZVN0eWxlKCkpOyBtX2Rpc2FibGVkUHJvcGVydGllcyA9IGRp
c2FibGVkUHJvcGVydGllczsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gZGlzYWJsZWRQcm9wZXJ0eVN0b3JlRm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUsIGJvb2wpIHsgQVNTRVJUX1VOVVNFRChzdHlsZSwgc3R5bGUgPT0gaW5saW5lU3R5bGUoKSk7
IHJldHVybiBtX2Rpc2FibGVkUHJvcGVydGllczsgfQogCiBwcml2YXRlOgogICAgIENTU1N0eWxl
RGVjbGFyYXRpb24qIGlubGluZVN0eWxlKCkgY29uc3Q7CkBAIC0xMjYsNiArMTUxLDcgQEAgcHJp
dmF0ZToKIAogICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJj
ZURhdGE+IG1fcnVsZVNvdXJjZURhdGE7CisgICAgRGlzYWJsZWRQcm9wZXJ0eVN0b3JlIG1fZGlz
YWJsZWRQcm9wZXJ0aWVzOwogfTsKIAogI2VuZGlmCg==
</data>
<flag name="review"
          id="61166"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71184</attachid>
            <date>2010-10-19 10:52:41 -0700</date>
            <delta_ts>2010-10-20 02:06:00 -0700</delta_ts>
            <desc>[PATCH] Introduced InspectorStyle</desc>
            <filename>toggle.patch</filename>
            <type>text/plain</type>
            <size>41523</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IDRmYzM5ZDQ5MzVmMDJhNzQyODRlYzI5ODY3ZWM4ZTNkMGE3NDNiMTMKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBGcmkgT2N0IDE1
IDE1OjE3OjU4IDIwMTAgKzA0MDAKCiAgICBQcmVwYXJlIHRvZ2dsZWQgcHJvcGVydGllcyBmb3Ig
Y29tbWl0CgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAzN2JhYzgxLi5lYzZhMzIwIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEwLTEwLTE5ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogSW1wbGVtZW50IHBy
b3BlcnR5IHRvZ2dsaW5nIGluIEluc3BlY3RvckNTU0FnZW50CisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgaW1wbGVtZW50cyBlbmFibGVtZW50L2Rpc2FibGVtZW50IG9mIHN0eWxlIHByb3BlcnRpZXMu
CisgICAgICAgIERpc2FibGVkIHByb3BlcnRpZXMgYXJlIHBlcnNpc3RlZCBpbiB0aGUgc2NvcGUg
b2YgSW5zcGVjdG9yQ1NTQWdlbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NzMzOQorCisgICAgICAgIERyaXZlLWJ5OiBmaXhlcyBmb3IgdGhlIFdl
YiBJbnNwZWN0b3IgUHJvdG9jb2wgZm9ybWF0LgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojpn
ZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NT
QWdlbnQ6OnNldFN0eWxlRGF0YTIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNhYmxlZFByb3BlcnR5Ojpmcm9tSW5zcGVj
dG9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzYWJsZWRQcm9wZXJ0eTo6dG9JbnNwZWN0
b3JPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OmJ1aWxkT2JqZWN0
Rm9yU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OmRpc2FibGVkSW5z
cGVjdG9yU3R5bGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6
cG9wdWxhdGVBbGxQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
Ojpwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3R5bGU6OnNob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclN0eWxlOjpzaG9ydGhhbmRQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JTdHlsZTo6bG9uZ2hhbmRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpkaXNhYmxlZFByb3BlcnR5U3RvcmVGb3JTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXREaXNhYmxlZFByb3Bl
cnRpZXNGb3JTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Ojpy
ZXZhbGlkYXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6
cmVzb3VyY2VTdHlsZVNoZWV0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHls
ZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnNldFN0eWxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnNldERpc2FibGVkUHJvcGVydGllc0Zv
clN0eWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eTo6SW5zcGVjdG9yU3R5bGVQcm9w
ZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNhYmxlZFByb3BlcnR5OjpEaXNhYmxlZFByb3Bl
cnR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpJbnNwZWN0b3JTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnN0
eWxlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlOjpydWxlU291cmNlRGF0YUZvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmRpc2FibGVkUHJvcGVydHlTdG9yZUZvclN0eWxlKToK
KwogMjAxMC0xMC0xOSAgSGF5YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHAKaW5kZXggZTBmYWI4NS4uODZlYzA4ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcApAQCAtNDksNyArNDksOCBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLQorLy8gQ3VycmVudGx5IGltcGxl
bWVudGVkIG1vZGVsOgorLy8KIC8vIGNzc1Byb3BlcnR5ID0gewogLy8gICAgbmFtZSAgICAgICAg
ICA6IDxzdHJpbmc+LAogLy8gICAgdmFsdWUgICAgICAgICA6IDxzdHJpbmc+LApAQCAtNjIsODUg
KzYzLDYzIEBACiAvLyAgICBlbmRPZmZzZXQgICAgIDogPG51bWJlcj4sIC8vIE9wdGlvbmFsIC0g
cHJvcGVydHkgdGV4dCBlbmQgb2Zmc2V0IGluIGVuY2xvc2luZyBzdHlsZSBkZWNsYXJhdGlvbi4g
QWJzZW50IGZvciBjb21wdXRlZCBzdHlsZXMgYW5kIHN1Y2guCiAvLyB9CiAvLworLy8gbmFtZSAr
IHZhbHVlICsgcHJpb3JpdHkgOiBwcmVzZW50IHdoZW4gdGhlIHByb3BlcnR5IGlzIGVuYWJsZWQK
Ky8vIHRleHQgICAgICAgICAgICAgICAgICAgIDogcHJlc2VudCB3aGVuIHRoZSBwcm9wZXJ0eSBp
cyBkaXNhYmxlZAorLy8KKy8vIEZvciBkaXNhYmxlZCBwcm9wZXJ0aWVzLCBzdGFydE9mZnNldCA9
PT0gZW5kT2Zmc2V0ID09PSBpbnNlcnRpb24gcG9pbnQgZm9yIHRoZSBwcm9wZXJ0eS4KKy8vCiAv
LyBzdGF0dXM6CiAvLyAiZGlzYWJsZWQiID09IHByb3BlcnR5IGRpc2FibGVkIGJ5IHVzZXIKIC8v
ICJhY3RpdmUiID09IHByb3BlcnR5IHBhcnRpY2lwYXRlcyBpbiB0aGUgY29tcHV0ZWQgc3R5bGUg
Y2FsY3VsYXRpb24KIC8vICJpbmFjdGl2ZSIgPT0gcHJvcGVydHkgZG9lcyBubyBwYXJ0aWNpcGF0
ZSBpbiB0aGUgY29tcHV0ZWQgc3R5bGUgY2FsY3VsYXRpb24gKGkuZS4gb3ZlcnJpZGRlbiBieSBh
IHN1YnNlcXVlbnQgcHJvcGVydHkgd2l0aCB0aGUgc2FtZSBuYW1lKQogLy8gInN0eWxlIiA9PSBw
cm9wZXJ0eSBpcyBhY3RpdmUgYW5kIG9yaWdpbmF0ZXMgZnJvbSB0aGUgV2ViQ29yZSBDU1NTdHls
ZURlY2xhcmF0aW9uIHJhdGhlciB0aGFuIENTUyBzb3VyY2UgY29kZSAoZS5nLiBpbXBsaWNpdCBs
b25naGFuZCBwcm9wZXJ0aWVzKQogLy8KKy8vIGRpc2FibGVkUHJvcGVydHkgPSB7CisvLyAgICBv
ZmZzZXQ6IDxudW1iZXI+LAorLy8gICAgdGV4dCAgOiA8c3RyaW5nPgorLy8gfQogLy8KIC8vIGNz
c1N0eWxlID0gewotLy8gICAgc3R5bGVJZCAgICAgICAgIDogPG51bWJlcj4sIC8vIE9wdGlvbmFs
Ci0vLyAgICBzdHlsZVNoZWV0SWQgICAgOiA8bnVtYmVyPiwgLy8gUGFyZW50OiAtMSBmb3IgaW5s
aW5lIHN0eWxlcyAoPGZvbyBzdHlsZT0iLi4iPikKLS8vICAgIGNzc1Byb3BlcnRpZXMgICA6IFsK
Ky8vICAgIHN0eWxlSWQgICAgICAgICAgICA6IDxzdHJpbmc+LCAvLyBPcHRpb25hbAorLy8gICAg
Y3NzUHJvcGVydGllcyAgICAgIDogWwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICNjc3NQ
cm9wZXJ0eSwKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KIC8vICAgICAgICAgICAg
ICAgICAgICAgICAgICAjY3NzUHJvcGVydHkKLS8vICAgICAgICAgICAgICAgICAgICBdLAotLy8g
ICAgc2hvcnRoYW5kVmFsdWVzIDogeworLy8gICAgICAgICAgICAgICAgICAgICAgICAgXSwKKy8v
ICAgIHNob3J0aGFuZFZhbHVlcyAgICA6IHsKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICBz
aG9ydGhhbmROYW1lMSA6IHNob3J0aGFuZFZhbHVlMSwKIC8vICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaG9ydGhhbmROYW1lMiA6IHNob3J0aGFuZFZhbHVlMgotLy8gICAgICAgICAgICAgICAg
ICAgICAgfSwKLS8vICAgIGNzc1RleHQgICAgICAgICA6IDxzdHJpbmc+LCAvLyBkZWNsYXJhdGlv
biB0ZXh0Ci0vLyAgICBwcm9wZXJ0aWVzICAgICAgOiB7IH0gLy8gPz8/CisvLyAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAorLy8gICAgY3NzVGV4dCAgICAgICAgICAgIDogPHN0cmluZz4sIC8v
IE9wdGlvbmFsIC0gZGVjbGFyYXRpb24gdGV4dAorLy8gICAgZGlzYWJsZWRQcm9wZXJ0aWVzIDog
WyAjZGlzYWJsZWRQcm9wZXJ0eSwuLi4gI2Rpc2FibGVkUHJvcGVydHkgXQorLy8gICAgcHJvcGVy
dGllcyAgICAgICAgIDogeyB3aWR0aCwgaGVpZ2h0IH0KIC8vIH0KIC8vCi0vLyAvLyBUT0RPOgot
Ly8gLy8gLSBjb252ZXJ0IGRpc2FibGVkUHJvcGVydGllcyB0byBlbmFibGVkIGZsYWcuCi0vLyAv
LyAtIGNvbnZlcnQgd2lkdGgsIGhlaWdodCB0byBwcm9wZXJ0aWVzCi0vLwogLy8gY3NzUnVsZSA9
IHsKLS8vICAgIHJ1bGVJZCAgICAgICA6IDxudW1iZXI+LAotLy8gICAgc2VsZWN0b3JUZXh0IDog
PHN0cmluZz4KLS8vICAgIHNvdXJjZVVSTCAgICA6IDxzdHJpbmc+Ci0vLyAgICBzb3VyY2VMaW5l
ICAgOiA8c3RyaW5nPgotLy8gICAgc3R5bGVTaGVldElkIDogPG51bWJlcj4gLy8gYWxzbyBmb3Vu
ZCBpbiBzdHlsZQotLy8gICAgb3JpZ2luICAgICAgIDogPHN0cmluZz4gLy8gIiIgfHwgInVzZXIt
YWdlbnQiIHx8ICJ1c2VyIiB8fCAiaW5zcGVjdG9yIgorLy8gICAgcnVsZUlkICAgICAgIDogPHN0
cmluZz4sIC8vIE9wdGlvbmFsCisvLyAgICBzZWxlY3RvclRleHQgOiA8c3RyaW5nPiwKKy8vICAg
IHNvdXJjZVVSTCAgICA6IDxzdHJpbmc+LAorLy8gICAgc291cmNlTGluZSAgIDogPHN0cmluZz4s
CisvLyAgICBvcmlnaW4gICAgICAgOiA8c3RyaW5nPiwgLy8gIiIgfHwgInVzZXItYWdlbnQiIHx8
ICJ1c2VyIiB8fCAiaW5zcGVjdG9yIgogLy8gICAgc3R5bGUgICAgICAgIDogI2Nzc1N0eWxlCiAv
LyB9CiAvLwotLy8gLy8gVE9ETzoKLS8vIC8vIC0gZml4IG9yaWdpbgotLy8gLy8gLSBhZGQgc291
cmNlVVJMCi0vLyAvLyAtIGZpeCBwYXJlbnRTdHlsZVNoZWV0SWQKLS8vCiAvLyBjc3NTdHlsZVNo
ZWV0ID0gewogLy8gICAgc3R5bGVTaGVldElkICAgOiA8bnVtYmVyPgotLy8gICAgaHJlZiAgICAg
ICAgICAgOiA8c3RyaW5nPgorLy8gICAgc291cmNlVVJMICAgICAgOiA8c3RyaW5nPgogLy8gICAg
dGl0bGUgICAgICAgICAgOiA8c3RyaW5nPgogLy8gICAgZGlzYWJsZWQgICAgICAgOiA8Ym9vbGVh
bj4KLS8vICAgIGRvY3VtZW50Tm9kZUlkIDogPG51bWJlcj4KIC8vICAgIHJ1bGVzICAgICAgICAg
IDogWwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgI2Nzc1J1bGUsCiAvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAuLi4KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICNjc3NSdWxlCiAv
LyAgICAgICAgICAgICAgICAgICAgIF0KKy8vICAgIHRleHQgICAgICAgICAgIDogPHN0cmluZz4g
Ly8gT3B0aW9uYWwgLSB3aGVuZXZlciB0aGUgdGV4dCBpcyBhdmFpbGFibGUgZm9yIGEgdGV4dC1i
YXNlZCBzdHlsZXNoZWV0CiAvLyB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gc3RhdGlj
Ci1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgZnVs
bFN0eWxlSWQsIENTU1N0eWxlU291cmNlRGF0YSogc291cmNlRGF0YSkKLXsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGlmICghZnVsbFN0eWxlSWQuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHQtPnNldFN0cmluZygi
aWQiLCBmdWxsU3R5bGVJZCk7Ci0KLSAgICByZXN1bHQtPnNldFN0cmluZygid2lkdGgiLCBzdHls
ZS0+Z2V0UHJvcGVydHlWYWx1ZSgid2lkdGgiKSk7Ci0gICAgcmVzdWx0LT5zZXRTdHJpbmcoImhl
aWdodCIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSk7Ci0gICAgVmVjdG9yPENT
U1Byb3BlcnR5U291cmNlRGF0YT4qIHByb3BlcnR5RGF0YSA9IDA7Ci0KLSAgICBpZiAoc291cmNl
RGF0YSkgewotICAgICAgICByZXN1bHQtPnNldE51bWJlcigic3RhcnRPZmZzZXQiLCBzb3VyY2VE
YXRhLT5zdHlsZUJvZHlSYW5nZS5zdGFydCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJl
bmRPZmZzZXQiLCBzb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5lbmQpOwotICAgICAgICBwcm9w
ZXJ0eURhdGEgPSAmc291cmNlRGF0YS0+cHJvcGVydHlEYXRhOwotICAgIH0KLSAgICBwb3B1bGF0
ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoc3R5bGUsIHJlc3VsdC5nZXQoKSwgcHJvcGVydHlE
YXRhKTsKLQotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQotCi0vLyBzdGF0aWMKIENT
U1N0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpwYXJlbnRTdHlsZVNoZWV0KFN0eWxlQmFz
ZSogc3R5bGVCYXNlKQogewogICAgIGlmICghc3R5bGVCYXNlKQpAQCAtMTY0LDcgKzE0Myw2IEBA
IENTU1N0eWxlUnVsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzQ1NTU3R5bGVSdWxlKFN0eWxlQmFz
ZSogc3R5bGVCYXNlKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxl
KTsKIH0KIAotCiBJbnNwZWN0b3JDU1NBZ2VudDo6SW5zcGVjdG9yQ1NTQWdlbnQoSW5zcGVjdG9y
RE9NQWdlbnQqIGRvbUFnZW50LCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAgICAgOiBt
X2RvbUFnZW50KGRvbUFnZW50KQogICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKQEAgLTI0Niw3
ICsyMjQsMTAgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5v
ZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmEKICAgICBpZiAoIWRlZmF1bHRWaWV3
KQogICAgICAgICByZXR1cm47CiAKLSAgICAqc3R5bGUgPSBidWlsZE9iamVjdEZvclN0eWxlKGRl
ZmF1bHRWaWV3LT5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsICIiKS5nZXQoKSwgIiIpOworICAg
IFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlID0gZGVmYXVsdFZpZXct
PmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgIiIpOworICAgIFZlY3RvcjxJbnNwZWN0b3JTdHls
ZVByb3BlcnR5PiBwcm9wZXJ0aWVzOworICAgIEluc3BlY3RvclN0eWxlIGluc3BlY3RvclN0eWxl
KCIiLCBjb21wdXRlZFN0eWxlLmdldCgpLCAwLCAwKTsKKyAgICAqc3R5bGUgPSBpbnNwZWN0b3JT
dHlsZS5idWlsZE9iamVjdEZvclN0eWxlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OmdldEluaGVyaXRlZFN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiBzdHlsZSkKQEAgLTMwOCw3ICsyODksNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50
OjpzZXRTdHlsZVNoZWV0VGV4dDIoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0
cgogICAgIGluc3BlY3RvclN0eWxlU2hlZXQtPnNldFRleHQodGV4dCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlVGV4dDIoY29uc3QgU3RyaW5nJiBmdWxsU3R5bGVJZCwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCit2b2lk
IEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZURhdGEyKGNvbnN0IFN0cmluZyYgZnVsbFN0eWxl
SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHN0eWxlRGF0YU9iamVjdCwgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiogcmVzdWx0KQogewogICAgIFZlY3RvcjxTdHJpbmc+IGlkUGFydHM7CiAgICAg
ZnVsbFN0eWxlSWQuc3BsaXQoJzonLCBpZFBhcnRzKTsKQEAgLTMxOCwxNyArMjk5LDEyIEBAIHZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlVGV4dDIoY29uc3QgU3RyaW5nJiBmdWxsU3R5
bGVJZCwgY29uc3QgU3RyaW5nJiB0CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQtPnNldFN0eWxlVGV4
dChpZFBhcnRzLmF0KDEpLCB0ZXh0KSkKKyAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQtPnNl
dFN0eWxlKGlkUGFydHMuYXQoMSksIHN0eWxlRGF0YU9iamVjdC5nZXQoKSkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgICpyZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZv
clN0eWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoaWRQYXJ0cy5hdCgxKSkpOwog
fQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eTIoY29uc3QgU3RyaW5n
JiwgbG9uZywgYm9vbCkKLXsKLSAgICAvLyBGSVhNRShhcGF2bG92KTogaW1wbGVtZW50Ci19Ci0K
IHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcjIoY29uc3QgU3RyaW5nJiBm
dWxsUnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
KiByZXN1bHQpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gaWRQYXJ0czsKQEAgLTM3OSwxMzAgKzM1
NSw2IEBAIEVsZW1lbnQqIEluc3BlY3RvckNTU0FnZW50OjppbmxpbmVTdHlsZUVsZW1lbnQoQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKTsKIH0KIAotLy8gc3RhdGljCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojpwb3B1bGF0
ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIElu
c3BlY3Rvck9iamVjdCogcmVzdWx0LCBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiogcHJv
cGVydHlEYXRhKQotewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydGllcyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzaG9y
dGhhbmRWYWx1ZXMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIEhhc2hNYXA8U3Ry
aW5nLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiA+IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3Rp
dmVQcm9wZXJ0eTsKLSAgICBIYXNoU2V0PFN0cmluZz4gZm91bmRTaG9ydGhhbmRzOwotICAgIEhh
c2hTZXQ8U3RyaW5nPiBzb3VyY2VQcm9wZXJ0eU5hbWVzOwotICAgIGlmIChwcm9wZXJ0eURhdGEp
IHsKLSAgICAgICAgZm9yIChWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBwcm9wZXJ0eURhdGEtPmJlZ2luKCk7IGl0ICE9IHByb3BlcnR5RGF0YS0+ZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5U291cmNlRGF0YSYgcHJv
cGVydHlFbnRyeSA9ICppdDsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBy
b3BlcnR5ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIHByb3BlcnRp
ZXMtPnB1c2hPYmplY3QocHJvcGVydHkpOwotICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBuYW1l
ID0gcHJvcGVydHlFbnRyeS5uYW1lOwotICAgICAgICAgICAgc291cmNlUHJvcGVydHlOYW1lcy5h
ZGQobmFtZSk7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7
Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHByb3BlcnR5RW50cnku
dmFsdWUpOwotICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygicHJpb3JpdHkiLCBwcm9w
ZXJ0eUVudHJ5LmltcG9ydGFudCA/ICJpbXBvcnRhbnQiIDogIiIpOwotICAgICAgICAgICAgcHJv
cGVydHktPnNldFN0cmluZygic3RhdHVzIiwgImFjdGl2ZSIpOwotICAgICAgICAgICAgcHJvcGVy
dHktPnNldEJvb2xlYW4oInBhcnNlZE9rIiwgcHJvcGVydHlFbnRyeS5wYXJzZWRPayk7Ci0gICAg
ICAgICAgICBwcm9wZXJ0eS0+c2V0TnVtYmVyKCJzdGFydE9mZnNldCIsIHByb3BlcnR5RW50cnku
cmFuZ2Uuc3RhcnQpOwotICAgICAgICAgICAgcHJvcGVydHktPnNldE51bWJlcigiZW5kT2Zmc2V0
IiwgcHJvcGVydHlFbnRyeS5yYW5nZS5lbmQpOwotICAgICAgICAgICAgaWYgKHByb3BlcnR5RW50
cnkucGFyc2VkT2spIHsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1w
bGljaXQiLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHNob3J0aGFuZCA9IHN0eWxl
LT5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+
c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgc2hvcnRoYW5kKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXNob3J0aGFuZC5pc0VtcHR5KCkgJiYgIWZvdW5kU2hvcnRoYW5kcy5jb250YWlucyhzaG9y
dGhhbmQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kU2hvcnRoYW5kcy5hZGQoc2hvcnRo
YW5kKTsKLSAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kVmFsdWVzLT5zZXRTdHJpbmcoc2hv
cnRoYW5kLCBzaG9ydGhhbmRWYWx1ZShzdHlsZSwgc2hvcnRoYW5kKSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0
Qm9vbGVhbigiaW1wbGljaXQiLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHktPnNl
dFN0cmluZygic2hvcnRoYW5kTmFtZSIsICIiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiA+OjppdGVyYXRvciBhY3Rp
dmVJdCA9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5maW5kKG5hbWUpOwot
ICAgICAgICAgICAgaWYgKGFjdGl2ZUl0ICE9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQ
cm9wZXJ0eS5lbmQoKSkgewotICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0
cmluZygic3RhdHVzIiwgImluYWN0aXZlIik7Ci0gICAgICAgICAgICAgICAgYWN0aXZlSXQtPnNl
Y29uZC0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgIiIpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChuYW1lLCBw
cm9wZXJ0eSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMCwgc2l6ZSA9
IHN0eWxlLT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBTdHJpbmcgbmFtZSA9
IHN0eWxlLT5pdGVtKGkpOwotICAgICAgICBpZiAoc291cmNlUHJvcGVydHlOYW1lcy5jb250YWlu
cyhuYW1lKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHNvdXJjZVByb3BlcnR5
TmFtZXMuYWRkKG5hbWUpOwotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0
eSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHByb3BlcnRpZXMtPnB1c2hP
YmplY3QocHJvcGVydHkpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwgbmFt
ZSk7Ci0gICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInZhbHVlIiwgc3R5bGUtPmdldFByb3Bl
cnR5VmFsdWUobmFtZSkpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJwcmlvcml0eSIs
IHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KCJuYW1lIikpOwotICAgICAgICBwcm9wZXJ0eS0+
c2V0Qm9vbGVhbigiaW1wbGljaXQiLCBzdHlsZS0+aXNQcm9wZXJ0eUltcGxpY2l0KG5hbWUpKTsK
LSAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oInBhcnNlZE9rIiwgdHJ1ZSk7Ci0gICAgICAg
IHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsICJzdHlsZSIpOwotICAgICAgICBTdHJpbmcg
c2hvcnRoYW5kID0gc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOwotICAgICAgICBw
cm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgc2hvcnRoYW5kKTsKLSAgICAgICAg
aWYgKCFzaG9ydGhhbmQuaXNFbXB0eSgpICYmICFmb3VuZFNob3J0aGFuZHMuY29udGFpbnMoc2hv
cnRoYW5kKSkgewotICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzLmFkZChzaG9ydGhhbmQpOwot
ICAgICAgICAgICAgc2hvcnRoYW5kVmFsdWVzLT5zZXRTdHJpbmcoc2hvcnRoYW5kLCBzaG9ydGhh
bmRWYWx1ZShzdHlsZSwgc2hvcnRoYW5kKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXN1
bHQtPnNldEFycmF5KCJwcm9wZXJ0aWVzIiwgcHJvcGVydGllcyk7Ci0gICAgcmVzdWx0LT5zZXRP
YmplY3QoInNob3J0aGFuZFZhbHVlcyIsIHNob3J0aGFuZFZhbHVlcyk7Ci19Ci0KLS8vIHN0YXRp
YwotU3RyaW5nIEluc3BlY3RvckNTU0FnZW50OjpzaG9ydGhhbmRWYWx1ZShDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkKLXsKLSAgICBT
dHJpbmcgdmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShzaG9ydGhhbmRQcm9wZXJ0eSk7
Ci0gICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3R5bGUtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIFN0cmluZyBpbmRpdmlk
dWFsUHJvcGVydHkgPSBzdHlsZS0+aXRlbShpKTsKLSAgICAgICAgICAgIGlmIChzdHlsZS0+Z2V0
UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZpZHVhbFByb3BlcnR5KSAhPSBzaG9ydGhhbmRQcm9wZXJ0
eSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChzdHlsZS0+aXNQ
cm9wZXJ0eUltcGxpY2l0KGluZGl2aWR1YWxQcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFZhbHVlID0gc3R5bGUtPmdldFBy
b3BlcnR5VmFsdWUoaW5kaXZpZHVhbFByb3BlcnR5KTsKLSAgICAgICAgICAgIGlmIChpbmRpdmlk
dWFsVmFsdWUgPT0gImluaXRpYWwiKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaWYgKHZhbHVlLmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIHZhbHVlLmFwcGVuZCgi
ICIpOwotICAgICAgICAgICAgdmFsdWUuYXBwZW5kKGluZGl2aWR1YWxWYWx1ZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi0vLyBzdGF0aWMKLVN0cmluZyBJbnNw
ZWN0b3JDU1NBZ2VudDo6c2hvcnRoYW5kUHJpb3JpdHkoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUsIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpCi17Ci0gICAgU3RyaW5nIHByaW9y
aXR5ID0gc3R5bGUtPmdldFByb3BlcnR5UHJpb3JpdHkoc2hvcnRoYW5kUHJvcGVydHkpOwotICAg
IGlmIChwcmlvcml0eS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0eWxlLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaW5kaXZpZHVh
bFByb3BlcnR5ID0gc3R5bGUtPml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAoc3R5bGUtPmdldFBy
b3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1YWxQcm9wZXJ0eSkgIT0gc2hvcnRoYW5kUHJvcGVydHkp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBwcmlvcml0eSA9IHN0eWxl
LT5nZXRQcm9wZXJ0eVByaW9yaXR5KGluZGl2aWR1YWxQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcHJpb3JpdHk7Ci19Ci0KLQotLy8g
c3RhdGljCi1WZWN0b3I8U3RyaW5nPiBJbnNwZWN0b3JDU1NBZ2VudDo6bG9uZ2hhbmRQcm9wZXJ0
aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFBy
b3BlcnR5KQotewotICAgIFZlY3RvcjxTdHJpbmc+IHByb3BlcnRpZXM7Ci0gICAgSGFzaFNldDxT
dHJpbmc+IGZvdW5kUHJvcGVydGllczsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5
bGUtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgU3RyaW5nIGluZGl2aWR1YWxQcm9wZXJ0eSA9
IHN0eWxlLT5pdGVtKGkpOwotICAgICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzLmNvbnRhaW5zKGlu
ZGl2aWR1YWxQcm9wZXJ0eSkgfHwgc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1
YWxQcm9wZXJ0eSkgIT0gc2hvcnRoYW5kUHJvcGVydHkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBmb3VuZFByb3BlcnRpZXMuYWRkKGluZGl2aWR1YWxQcm9wZXJ0eSk7Ci0gICAg
ICAgIHByb3BlcnRpZXMuYXBwZW5kKGluZGl2aWR1YWxQcm9wZXJ0eSk7Ci0gICAgfQotICAgIHJl
dHVybiBwcm9wZXJ0aWVzOwotfQotCiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUq
IEluc3BlY3RvckNTU0FnZW50Ojphc0luc3BlY3RvclN0eWxlU2hlZXQoRWxlbWVudCogZWxlbWVu
dCkKIHsKICAgICBOb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0OjppdGVyYXRvciBpdCA9IG1fbm9k
ZVRvSW5zcGVjdG9yU3R5bGVTaGVldC5maW5kKGVsZW1lbnQpOwpAQCAtNjIyLDcgKzQ3NCw4IEBA
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmpl
Y3RGb3JBdHRyaWJ1dGVTdHlsZXMoRWxlCiAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0g
YXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZS0+c3R5
bGUoKSkgewogICAgICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGUtPmxv
Y2FsTmFtZSgpOwotICAgICAgICAgICAgc3R5bGVBdHRyaWJ1dGVzLT5zZXRPYmplY3QoYXR0cmli
dXRlTmFtZS51dGY4KCkuZGF0YSgpLCBidWlsZE9iamVjdEZvclN0eWxlKGF0dHJpYnV0ZS0+c3R5
bGUoKSwgIiIpKTsKKyAgICAgICAgICAgIEluc3BlY3RvclN0eWxlIGluc3BlY3RvclN0eWxlKCIi
LCBhdHRyaWJ1dGUtPnN0eWxlKCksIDAsIDApOworICAgICAgICAgICAgc3R5bGVBdHRyaWJ1dGVz
LT5zZXRPYmplY3QoYXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpLCBpbnNwZWN0b3JTdHlsZS5i
dWlsZE9iamVjdEZvclN0eWxlKCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCBlYjYwMTNiLi5jNzYwMzY4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmgKQEAgLTU2LDcgKzU2LDYgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckNTU0FnZW50KGRvbUFnZW50LCBmcm9udGVu
ZCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVp
bGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBmdWxs
U3R5bGVJZCwgQ1NTU3R5bGVTb3VyY2VEYXRhKiA9IDApOwogICAgIHN0YXRpYyBDU1NTdHlsZVNo
ZWV0KiBwYXJlbnRTdHlsZVNoZWV0KFN0eWxlQmFzZSopOwogICAgIHN0YXRpYyBDU1NTdHlsZVJ1
bGUqIGFzQ1NTU3R5bGVSdWxlKFN0eWxlQmFzZSopOwogCkBAIC03Myw4ICs3Miw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGdldEFsbFN0eWxlczIoUmVmUHRyPEluc3BlY3RvckFycmF5Piogc3R5bGVz
KTsKICAgICB2b2lkIGdldFN0eWxlU2hlZXQyKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwogICAgIHZvaWQgc2V0U3R5bGVTaGVldFRl
eHQyKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQpOwotICAg
IHZvaWQgc2V0U3R5bGVUZXh0Mihjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYg
dGV4dCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKLSAgICB2b2lkIHRvZ2dsZVBy
b3BlcnR5Mihjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGxvbmcgcHJvcGVydHlPcmRpbmFsLCBib29s
IGRpc2FibGVkKTsKKyAgICB2b2lkIHNldFN0eWxlRGF0YTIoY29uc3QgU3RyaW5nJiBzdHlsZUlk
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzdHlsZURhdGFPYmplY3QsIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4qIHJlc3VsdCk7CiAgICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IyKGNvbnN0IFN0cmlu
ZyYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
KiByZXN1bHQpOwogICAgIHZvaWQgYWRkUnVsZTIoY29uc3QgbG9uZyBjb250ZXh0Tm9kZUlkLCBj
b25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwog
ICAgIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiByZXN1bHQpOwpAQCAtODIsMTQgKzgwLDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+ID4gSWRUb0lu
c3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlU2hlZXQqLCBS
ZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gPiBDU1NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHls
ZVNoZWV0OwotICAgIHR5cGVkZWYgSGFzaE1hcDxOb2RlKiwgUmVmUHRyPEluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZT4gPiBOb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0OyAvLyBmb3Ig
Ym9ndXMgInN0eWxlc2hlZXRzIiB3aXRoIGlubGluZSBub2RlIHN0eWxlcworICAgIHR5cGVkZWYg
SGFzaE1hcDxOb2RlKiwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4g
PiBOb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0OyAvLyBib2d1cyAic3R5bGVzaGVldHMiIHdpdGgg
ZWxlbWVudHMnIGlubGluZSBzdHlsZXMKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPERvY3Vt
ZW50PiwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+ID4gRG9jdW1lbnRUb1ZpYUluc3BlY3Rv
clN0eWxlU2hlZXQ7IC8vICJ2aWEgaW5zcGVjdG9yIiBzdHlsZXNoZWV0cwogCiAgICAgc3RhdGlj
IEVsZW1lbnQqIGlubGluZVN0eWxlRWxlbWVudChDU1NTdHlsZURlY2xhcmF0aW9uKik7Ci0gICAg
c3RhdGljIHZvaWQgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENTU1N0eWxlRGVj
bGFyYXRpb24qLCBJbnNwZWN0b3JPYmplY3QqIHJlc3VsdCwgVmVjdG9yPENTU1Byb3BlcnR5U291
cmNlRGF0YT4qIHByb3BlcnR5RGF0YSk7Ci0gICAgc3RhdGljIFN0cmluZyBzaG9ydGhhbmRWYWx1
ZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7
Ci0gICAgc3RhdGljIFN0cmluZyBzaG9ydGhhbmRQcmlvcml0eShDU1NTdHlsZURlY2xhcmF0aW9u
KiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7Ci0gICAgc3RhdGljIFZlY3RvcjxT
dHJpbmc+IGxvbmdoYW5kUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3Ry
aW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7CiAKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5s
aW5lU3R5bGUqIGFzSW5zcGVjdG9yU3R5bGVTaGVldChFbGVtZW50KiBlbGVtZW50KTsKICAgICBF
bGVtZW50KiBlbGVtZW50Rm9ySWQobG9uZyBub2RlSWQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmNwcAppbmRleCAxMWNkNjQ5Li5mYjIzODc1IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApAQCAtOTgsNiArOTgsMjEwIEBAIFJlZlB0
cjxXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0YT4gUGFyc2VkU3R5bGVTaGVldDo6cnVsZVNvdXJj
ZURhdGFBdCh1bnNpZ25lZCBpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy9zdGF0aWMKK0Rp
c2FibGVkUHJvcGVydHkgRGlzYWJsZWRQcm9wZXJ0eTo6ZnJvbUluc3BlY3RvclZhbHVlKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCB0ZXh0TmFtZSwgKCJ0ZXh0IikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBvZmZzZXROYW1lLCAoIm9mZnNldCIpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBT
dHJpbmcgdGV4dDsKKyAgICBkb3VibGUgb2Zmc2V0OworICAgIGJvb2wgc3VjY2VzcyA9IG9iamVj
dC0+Z2V0U3RyaW5nKHRleHROYW1lLCAmdGV4dCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNz
LCBzdWNjZXNzKTsKKyAgICBzdWNjZXNzID0gb2JqZWN0LT5nZXROdW1iZXIob2Zmc2V0TmFtZSwg
Jm9mZnNldCk7CisgICAgQVNTRVJUKHN1Y2Nlc3MpOworICAgIHJldHVybiBEaXNhYmxlZFByb3Bl
cnR5KHRleHQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihvZmZzZXQpKTsKK30KKworUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IERpc2FibGVkUHJvcGVydHk6OnRvSW5zcGVjdG9yT2JqZWN0KCkK
K3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJ0ZXh0IiwgdGV4dCk7CisgICAgcmVz
dWx0LT5zZXROdW1iZXIoIm9mZnNldCIsIG9mZnNldCk7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdHlsZTo6
YnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0Cit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoIW1faWQuaXNF
bXB0eSgpKQorICAgICAgICByZXN1bHQtPnNldFN0cmluZygic3R5bGVJZCIsIG1faWQpOworCisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHJvcGVydGllc09iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgcHJvcGVydGllc09iamVjdC0+c2V0U3RyaW5nKCJ3aWR0aCIs
IG1fc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoIndpZHRoIikpOworICAgIHByb3BlcnRpZXNPYmpl
Y3QtPnNldFN0cmluZygiaGVpZ2h0IiwgbV9zdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZSgiaGVpZ2h0
IikpOworCisgICAgaWYgKG1fc291cmNlRGF0YSkgeworICAgICAgICBwcm9wZXJ0aWVzT2JqZWN0
LT5zZXROdW1iZXIoInN0YXJ0T2Zmc2V0IiwgbV9zb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEt
PnN0eWxlQm9keVJhbmdlLnN0YXJ0KTsKKyAgICAgICAgcHJvcGVydGllc09iamVjdC0+c2V0TnVt
YmVyKCJlbmRPZmZzZXQiLCBtX3NvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5
UmFuZ2UuZW5kKTsKKyAgICB9CisgICAgcmVzdWx0LT5zZXRPYmplY3QoInByb3BlcnRpZXMiLCBw
cm9wZXJ0aWVzT2JqZWN0KTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGlzYWJsZWRQ
cm9wZXJ0aWVzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgaWYgKG1fZGlz
YWJsZWRQcm9wZXJ0aWVzKSB7CisgICAgICAgIGZvciAoRGlzYWJsZWRQcm9wZXJ0eVN0b3JlOjpp
dGVyYXRvciBpdCA9IG1fZGlzYWJsZWRQcm9wZXJ0aWVzLT5iZWdpbigpLCBpdEVuZCA9IG1fZGlz
YWJsZWRQcm9wZXJ0aWVzLT5lbmQoKTsgaXQgIT0gaXRFbmQ7ICsraXQpCisgICAgICAgICAgICBk
aXNhYmxlZFByb3BlcnRpZXNBcnJheS0+cHVzaE9iamVjdChpdC0+dG9JbnNwZWN0b3JPYmplY3Qo
KSk7CisgICAgfQorICAgIHJlc3VsdC0+c2V0QXJyYXkoImRpc2FibGVkUHJvcGVydGllcyIsIGRp
c2FibGVkUHJvcGVydGllc0FycmF5KTsKKworICAgIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJv
cGVydGllcyhyZXN1bHQuZ2V0KCkpOworCisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9
CisKK0luc3BlY3RvclN0eWxlUHJvcGVydHkgSW5zcGVjdG9yU3R5bGU6OmRpc2FibGVkSW5zcGVj
dG9yU3R5bGVQcm9wZXJ0eSh1bnNpZ25lZCBkaXNhYmxlZEluZGV4KSBjb25zdAoreworICAgIEFT
U0VSVChkaXNhYmxlZEluZGV4IDwgbV9kaXNhYmxlZFByb3BlcnRpZXMtPnNpemUoKSk7CisgICAg
Y29uc3QgRGlzYWJsZWRQcm9wZXJ0eSYgZGlzYWJsZWRQcm9wZXJ0eSA9IG1fZGlzYWJsZWRQcm9w
ZXJ0aWVzLT5hdChkaXNhYmxlZEluZGV4KTsKKyAgICByZXR1cm4gSW5zcGVjdG9yU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVNvdXJjZURhdGEoIjw+IiwgZGlzYWJsZWRQcm9wZXJ0eS50ZXh0LCBm
YWxzZSwgZmFsc2UsIFNvdXJjZVJhbmdlKGRpc2FibGVkUHJvcGVydHkub2Zmc2V0LCBkaXNhYmxl
ZFByb3BlcnR5Lm9mZnNldCkpLCB0cnVlLCB0cnVlKTsKK30KKwordm9pZCBJbnNwZWN0b3JTdHls
ZTo6cG9wdWxhdGVBbGxQcm9wZXJ0aWVzKFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5Piog
cmVzdWx0KSBjb25zdAoreworICAgIEhhc2hTZXQ8U3RyaW5nPiBmb3VuZFNob3J0aGFuZHM7Cisg
ICAgSGFzaFNldDxTdHJpbmc+IHNvdXJjZVByb3BlcnR5TmFtZXM7CisgICAgdW5zaWduZWQgZGlz
YWJsZWRJbmRleCA9IDA7CisgICAgdW5zaWduZWQgZGlzYWJsZWRMZW5ndGggPSBtX2Rpc2FibGVk
UHJvcGVydGllcyA/IG1fZGlzYWJsZWRQcm9wZXJ0aWVzLT5zaXplKCkgOiAwOworICAgIEluc3Bl
Y3RvclN0eWxlUHJvcGVydHkgZGlzYWJsZWRQcm9wZXJ0eTsKKyAgICBpZiAoZGlzYWJsZWRJbmRl
eCA8IGRpc2FibGVkTGVuZ3RoKQorICAgICAgICBkaXNhYmxlZFByb3BlcnR5ID0gZGlzYWJsZWRJ
bnNwZWN0b3JTdHlsZVByb3BlcnR5KGRpc2FibGVkSW5kZXgpOworCisgICAgVmVjdG9yPENTU1By
b3BlcnR5U291cmNlRGF0YT4qIHNvdXJjZVByb3BlcnR5RGF0YSA9IG1fc291cmNlRGF0YSA/ICYo
bV9zb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YSkgOiAwOworICAgIGlm
IChzb3VyY2VQcm9wZXJ0eURhdGEpIHsKKyAgICAgICAgZm9yIChWZWN0b3I8Q1NTUHJvcGVydHlT
b3VyY2VEYXRhPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzb3VyY2VQcm9wZXJ0eURhdGEtPmJlZ2lu
KCk7IGl0ICE9IHNvdXJjZVByb3BlcnR5RGF0YS0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAg
IHdoaWxlIChtX2Rpc2FibGVkUHJvcGVydGllcyAmJiBkaXNhYmxlZEluZGV4IDwgZGlzYWJsZWRM
ZW5ndGggJiYgZGlzYWJsZWRQcm9wZXJ0eS5wcm9wZXJ0eS5yYW5nZS5zdGFydCA8PSBpdC0+cmFu
Z2Uuc3RhcnQpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChkaXNhYmxlZFByb3Bl
cnR5KTsKKyAgICAgICAgICAgICAgICBpZiAoKytkaXNhYmxlZEluZGV4IDwgZGlzYWJsZWRMZW5n
dGgpCisgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUHJvcGVydHkgPSBkaXNhYmxlZEluc3Bl
Y3RvclN0eWxlUHJvcGVydHkoZGlzYWJsZWRJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXN1bHQtPmFwcGVuZChJbnNwZWN0b3JTdHlsZVByb3BlcnR5KCppdCwgdHJ1ZSwgZmFs
c2UpKTsKKyAgICAgICAgICAgIHNvdXJjZVByb3BlcnR5TmFtZXMuYWRkKGl0LT5uYW1lKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHdoaWxlIChkaXNhYmxlZEluZGV4IDwgZGlzYWJsZWRMZW5n
dGgpIHsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQoZGlzYWJsZWRQcm9wZXJ0eSk7CisgICAgICAg
IGRpc2FibGVkUHJvcGVydHkgPSBkaXNhYmxlZEluc3BlY3RvclN0eWxlUHJvcGVydHkoZGlzYWJs
ZWRJbmRleCsrKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMCwgc2l6ZSA9IG1fc3R5bGUt
Pmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gbV9zdHls
ZS0+aXRlbShpKTsKKyAgICAgICAgaWYgKHNvdXJjZVByb3BlcnR5TmFtZXMuY29udGFpbnMobmFt
ZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzb3VyY2VQcm9wZXJ0eU5hbWVz
LmFkZChuYW1lKTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQoSW5zcGVjdG9yU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eVNvdXJjZURhdGEobmFtZSwgbV9zdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShu
YW1lKSwgIW1fc3R5bGUtPmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSkuaXNFbXB0eSgpLCB0cnVl
LCBTb3VyY2VSYW5nZSgpKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgfQorfQorCit2b2lkIEluc3Bl
Y3RvclN0eWxlOjpwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoSW5zcGVjdG9yT2Jq
ZWN0KiByZXN1bHQpIGNvbnN0Cit7CisgICAgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+
IHByb3BlcnRpZXM7CisgICAgcG9wdWxhdGVBbGxQcm9wZXJ0aWVzKCZwcm9wZXJ0aWVzKTsKKwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydGllc09iamVjdCA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzaG9ydGhhbmRWYWx1
ZXMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiA+IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0
eTsKKyAgICBIYXNoU2V0PFN0cmluZz4gZm91bmRTaG9ydGhhbmRzOworCisgICAgZm9yIChWZWN0
b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT46Oml0ZXJhdG9yIGl0ID0gcHJvcGVydGllcy5iZWdp
bigpLCBpdEVuZCA9IHByb3BlcnRpZXMuZW5kKCk7IGl0ICE9IGl0RW5kOyArK2l0KSB7CisgICAg
ICAgIGNvbnN0IENTU1Byb3BlcnR5U291cmNlRGF0YSYgcHJvcGVydHlFbnRyeSA9IGl0LT5wcm9w
ZXJ0eTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gcHJvcGVydHlFbnRyeS5uYW1lOwor
CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHByb3BlcnR5ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgcHJvcGVydGllc09iamVjdC0+cHVzaE9iamVjdChwcm9w
ZXJ0eSk7CisgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsIGl0LT5kaXNhYmxl
ZCA/ICJkaXNhYmxlZCIgOiAiYWN0aXZlIik7CisgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFu
KCJwYXJzZWRPayIsIHByb3BlcnR5RW50cnkucGFyc2VkT2spOworICAgICAgICBpZiAoIWl0LT5k
aXNhYmxlZCkgeworICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygibmFtZSIsIG5hbWUp
OworICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygidmFsdWUiLCBwcm9wZXJ0eUVudHJ5
LnZhbHVlKTsKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInByaW9yaXR5IiwgcHJv
cGVydHlFbnRyeS5pbXBvcnRhbnQgPyAiaW1wb3J0YW50IiA6ICIiKTsKKyAgICAgICAgICAgIGlm
IChpdC0+aGFzU291cmNlKSB7CisgICAgICAgICAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4o
ImltcGxpY2l0IiwgZmFsc2UpOworICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXROdW1iZXIo
InN0YXJ0T2Zmc2V0IiwgcHJvcGVydHlFbnRyeS5yYW5nZS5zdGFydCk7CisgICAgICAgICAgICAg
ICAgcHJvcGVydHktPnNldE51bWJlcigiZW5kT2Zmc2V0IiwgcHJvcGVydHlFbnRyeS5yYW5nZS5l
bmQpOworCisgICAgICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+ID46Oml0ZXJhdG9yIGFjdGl2ZUl0ID0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2
ZVByb3BlcnR5LmZpbmQobmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZUl0ICE9IHBy
b3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5lbmQoKSkgeworICAgICAgICAgICAg
ICAgICAgICBhY3RpdmVJdC0+c2Vjb25kLT5zZXRTdHJpbmcoInN0YXR1cyIsICJpbmFjdGl2ZSIp
OworICAgICAgICAgICAgICAgICAgICBhY3RpdmVJdC0+c2Vjb25kLT5zZXRTdHJpbmcoInNob3J0
aGFuZE5hbWUiLCAiIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByb3Bl
cnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5zZXQobmFtZSwgcHJvcGVydHkpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigi
aW1wbGljaXQiLCBtX3N0eWxlLT5pc1Byb3BlcnR5SW1wbGljaXQobmFtZSkpOworICAgICAgICAg
ICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsICJzdHlsZSIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInRl
eHQiLCBwcm9wZXJ0eUVudHJ5LnZhbHVlKTsKKworICAgICAgICBpZiAocHJvcGVydHlFbnRyeS5w
YXJzZWRPaykgeworICAgICAgICAgICAgLy8gQm90aCBmb3Igc3R5bGUtb3JpZ2luYXRlZCBhbmQg
cGFyc2VkIHNvdXJjZSBwcm9wZXJ0aWVzLgorICAgICAgICAgICAgU3RyaW5nIHNob3J0aGFuZCA9
IG1fc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOworICAgICAgICAgICAgcHJvcGVy
dHktPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsIHNob3J0aGFuZCk7CisgICAgICAgICAgICBp
ZiAoIXNob3J0aGFuZC5pc0VtcHR5KCkgJiYgIWZvdW5kU2hvcnRoYW5kcy5jb250YWlucyhzaG9y
dGhhbmQpKSB7CisgICAgICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzLmFkZChzaG9ydGhhbmQp
OworICAgICAgICAgICAgICAgIHNob3J0aGFuZFZhbHVlcy0+c2V0U3RyaW5nKHNob3J0aGFuZCwg
c2hvcnRoYW5kVmFsdWUoc2hvcnRoYW5kKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsICIiKTsK
KyAgICB9CisKKyAgICByZXN1bHQtPnNldEFycmF5KCJjc3NQcm9wZXJ0aWVzIiwgcHJvcGVydGll
c09iamVjdCk7CisgICAgcmVzdWx0LT5zZXRPYmplY3QoInNob3J0aGFuZFZhbHVlcyIsIHNob3J0
aGFuZFZhbHVlcyk7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JTdHlsZTo6c2hvcnRoYW5kVmFsdWUo
Y29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkgY29uc3QKK3sKKyAgICBTdHJpbmcgdmFs
dWUgPSBtX3N0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHNob3J0aGFuZFByb3BlcnR5KTsKKyAgICBp
ZiAodmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3N0eWxlLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFBy
b3BlcnR5ID0gbV9zdHlsZS0+aXRlbShpKTsKKyAgICAgICAgICAgIGlmIChtX3N0eWxlLT5nZXRQ
cm9wZXJ0eVNob3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9IHNob3J0aGFuZFByb3BlcnR5
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmlz
UHJvcGVydHlJbXBsaWNpdChpbmRpdmlkdWFsUHJvcGVydHkpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgU3RyaW5nIGluZGl2aWR1YWxWYWx1ZSA9IG1fc3R5bGUtPmdl
dFByb3BlcnR5VmFsdWUoaW5kaXZpZHVhbFByb3BlcnR5KTsKKyAgICAgICAgICAgIGlmIChpbmRp
dmlkdWFsVmFsdWUgPT0gImluaXRpYWwiKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIHZhbHVlLmFwcGVu
ZCgiICIpOworICAgICAgICAgICAgdmFsdWUuYXBwZW5kKGluZGl2aWR1YWxWYWx1ZSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHZhbHVlOworfQorCitTdHJpbmcgSW5zcGVjdG9yU3R5
bGU6OnNob3J0aGFuZFByaW9yaXR5KGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpIGNv
bnN0Cit7CisgICAgU3RyaW5nIHByaW9yaXR5ID0gbV9zdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0
eShzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgaWYgKHByaW9yaXR5LmlzRW1wdHkoKSkgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdHlsZS0+bGVuZ3RoKCk7ICsraSkgewor
ICAgICAgICAgICAgU3RyaW5nIGluZGl2aWR1YWxQcm9wZXJ0eSA9IG1fc3R5bGUtPml0ZW0oaSk7
CisgICAgICAgICAgICBpZiAobV9zdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZpZHVh
bFByb3BlcnR5KSAhPSBzaG9ydGhhbmRQcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIHByaW9yaXR5ID0gbV9zdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShp
bmRpdmlkdWFsUHJvcGVydHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIHByaW9yaXR5OworfQorCitWZWN0b3I8U3RyaW5nPiBJbnNwZWN0b3JTdHls
ZTo6bG9uZ2hhbmRQcm9wZXJ0aWVzKGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpIGNv
bnN0Cit7CisgICAgVmVjdG9yPFN0cmluZz4gcHJvcGVydGllczsKKyAgICBIYXNoU2V0PFN0cmlu
Zz4gZm91bmRQcm9wZXJ0aWVzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0eWxl
LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFN0cmluZyBpbmRpdmlkdWFsUHJvcGVydHkgPSBt
X3N0eWxlLT5pdGVtKGkpOworICAgICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzLmNvbnRhaW5zKGlu
ZGl2aWR1YWxQcm9wZXJ0eSkgfHwgbV9zdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZp
ZHVhbFByb3BlcnR5KSAhPSBzaG9ydGhhbmRQcm9wZXJ0eSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIGZvdW5kUHJvcGVydGllcy5hZGQoaW5kaXZpZHVhbFByb3BlcnR5KTsKKyAg
ICAgICAgcHJvcGVydGllcy5hcHBlbmQoaW5kaXZpZHVhbFByb3BlcnR5KTsKKyAgICB9CisgICAg
cmV0dXJuIHByb3BlcnRpZXM7Cit9CisKIEluc3BlY3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0
eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBpZCwgQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQs
IGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMKQogICAgIDog
bV9pZChpZCkKICAgICAsIG1fcGFnZVN0eWxlU2hlZXQocGFnZVN0eWxlU2hlZXQpCkBAIC0yMDQs
MTkgKzQwOCwyMCBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yU3R5bGVT
aGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJpZCIsIGlkKCkpOwogICAgIHJlc3VsdC0+c2V0
Qm9vbGVhbigiZGlzYWJsZWQiLCBzdHlsZVNoZWV0LT5kaXNhYmxlZCgpKTsKLSAgICByZXN1bHQt
PnNldFN0cmluZygiaHJlZiIsIHN0eWxlU2hlZXQtPmhyZWYoKSk7CisgICAgcmVzdWx0LT5zZXRT
dHJpbmcoInNvdXJjZVVSTCIsIHN0eWxlU2hlZXQtPmhyZWYoKSk7CiAgICAgcmVzdWx0LT5zZXRT
dHJpbmcoInRpdGxlIiwgc3R5bGVTaGVldC0+dGl0bGUoKSk7CiAgICAgUmVmUHRyPENTU1J1bGVM
aXN0PiBjc3NSdWxlTGlzdCA9IENTU1J1bGVMaXN0OjpjcmVhdGUoc3R5bGVTaGVldCwgdHJ1ZSk7
CiAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjc3NSdWxlcyA9IGJ1aWxkQXJyYXlGb3JSdWxl
TGlzdChjc3NSdWxlTGlzdC5nZXQoKSk7Ci0gICAgcmVzdWx0LT5zZXRBcnJheSgiY3NzUnVsZXMi
LCBjc3NSdWxlcy5yZWxlYXNlKCkpOworICAgIHJlc3VsdC0+c2V0QXJyYXkoInJ1bGVzIiwgY3Nz
UnVsZXMucmVsZWFzZSgpKTsKIAogICAgIFN0cmluZyBzdHlsZVNoZWV0VGV4dDsKICAgICBib29s
IHN1Y2Nlc3MgPSB0ZXh0KCZzdHlsZVNoZWV0VGV4dCk7CiAgICAgaWYgKHN1Y2Nlc3MpCiAgICAg
ICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJ0ZXh0Iiwgc3R5bGVTaGVldFRleHQpOwogCisgICAgcmVz
dWx0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIGlkKCkpOworCiAgICAgcmV0dXJuIHJlc3Vs
dC5yZWxlYXNlKCk7CiB9CiAKQEAgLTIyOCwyNyArNDMzLDEzIEBAIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5
bGVSdWxlCiAKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzZWxlY3RvclRleHQiLCBy
dWxlLT5zZWxlY3RvclRleHQoKSk7Ci0gICAgcmVzdWx0LT5zZXRTdHJpbmcoImNzc1RleHQiLCBy
dWxlLT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCAhc3R5
bGVTaGVldC0+aHJlZigpLmlzRW1wdHkoKSA/IHN0eWxlU2hlZXQtPmhyZWYoKSA6IG1fZG9jdW1l
bnRVUkwpOwogICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJzb3VyY2VMaW5lIiwgcnVsZS0+c291cmNl
TGluZSgpKTsKLSAgICByZXN1bHQtPnNldFN0cmluZygiZG9jdW1lbnRVUkwiLCBtX2RvY3VtZW50
VVJMKTsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmVudFN0eWxlU2hlZXRWYWx1
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFyZW50U3R5bGVTaGVldFZhbHVl
LT5zZXRTdHJpbmcoImlkIiwgaWQoKSk7Ci0gICAgcGFyZW50U3R5bGVTaGVldFZhbHVlLT5zZXRT
dHJpbmcoImhyZWYiLCBzdHlsZVNoZWV0LT5ocmVmKCkpOwotICAgIHJlc3VsdC0+c2V0T2JqZWN0
KCJwYXJlbnRTdHlsZVNoZWV0IiwgcGFyZW50U3R5bGVTaGVldFZhbHVlLnJlbGVhc2UoKSk7CiAg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoIm9yaWdpbiIsIG1fb3JpZ2luKTsKIAotICAgIFJlZlB0cjxD
U1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YTsKLSAgICBpZiAoZW5zdXJlUGFyc2VkRGF0YVJl
YWR5KCkpCi0gICAgICAgIHNvdXJjZURhdGEgPSBydWxlU291cmNlRGF0YUZvcihydWxlLT5zdHls
ZSgpKTsKLSAgICBpZiAoc291cmNlRGF0YSkgewotICAgICAgICByZXN1bHQtPnNldE51bWJlcigi
c2VsZWN0b3JTdGFydE9mZnNldCIsIHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0
KTsKLSAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoInNlbGVjdG9yRW5kT2Zmc2V0Iiwgc291cmNl
RGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2UuZW5kKTsKLSAgICB9Ci0KICAgICByZXN1bHQtPnNldE9i
amVjdCgic3R5bGUiLCBidWlsZE9iamVjdEZvclN0eWxlKHJ1bGUtPnN0eWxlKCkpKTsKICAgICBp
ZiAoY2FuQmluZCgpKQotICAgICAgICByZXN1bHQtPnNldFN0cmluZygiaWQiLCBmdWxsUnVsZUlk
KHJ1bGUpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInJ1bGVJZCIsIGZ1bGxSdWxlSWQo
cnVsZSkpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CkBAIC0yNTksMTEgKzQ1
MCwzOSBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6
YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlYwogICAgIGlmIChlbnN1cmVQYXJzZWREYXRh
UmVhZHkoKSkKICAgICAgICAgc291cmNlRGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKHN0eWxlKTsK
IAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3RvckNTU0FnZW50
OjpidWlsZE9iamVjdEZvclN0eWxlKHN0eWxlLCBmdWxsU3R5bGVJZChzdHlsZSksIHNvdXJjZURh
dGEgPyBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEuZ2V0KCkgOiAwKTsKLSAgICByZXN1bHQt
PnNldFN0cmluZygicGFyZW50U3R5bGVTaGVldElkIiwgaWQoKSk7CisgICAgRGlzYWJsZWRQcm9w
ZXJ0eVN0b3JlKiBkaXNhYmxlZFByb3BlcnRpZXMgPSBkaXNhYmxlZFByb3BlcnR5U3RvcmVGb3JT
dHlsZShzdHlsZSk7CisgICAgSW5zcGVjdG9yU3R5bGUgaW5zcGVjdG9yU3R5bGUoZnVsbFN0eWxl
SWQoc3R5bGUpLCBzdHlsZSwgc291cmNlRGF0YSwgZGlzYWJsZWRQcm9wZXJ0aWVzKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZS5idWlsZE9iamVj
dEZvclN0eWxlKCk7CisKKyAgICAvLyBTdHlsZSB0ZXh0IGNhbm5vdCBiZSByZXRyaWV2ZWQgd2l0
aG91dCBzdHlsZXNoZWV0LCBoZW5jZSB3ZSBzZXQgY3NzVGV4dCBoZXJlLgorICAgIGlmIChzb3Vy
Y2VEYXRhKSB7CisgICAgICAgIFN0cmluZyB0ZXh0OworICAgICAgICBib29sIHN1Y2Nlc3MgPSBz
dHlsZVNoZWV0VGV4dCgmdGV4dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAg
ICBjb25zdCBTb3VyY2VSYW5nZSYgYm9keVJhbmdlID0gc291cmNlRGF0YS0+c3R5bGVTb3VyY2VE
YXRhLT5zdHlsZUJvZHlSYW5nZTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJjc3NU
ZXh0IiwgdGV4dC5zdWJzdHJpbmcoYm9keVJhbmdlLnN0YXJ0LCBib2R5UmFuZ2UuZW5kIC0gYm9k
eVJhbmdlLnN0YXJ0KSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2UoKTsKIH0KIAorYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRTdHlsZShjb25zdCBT
dHJpbmcmIHN0eWxlSWQsIEluc3BlY3Rvck9iamVjdCogc3R5bGVPYmplY3QpCit7CisgICAgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBzdHlsZUZvcklkKHN0eWxlSWQpOworICAgIGlmICgh
c3R5bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyB0ZXh0OworICAgIGJv
b2wgc3VjY2VzcyA9IHN0eWxlT2JqZWN0LT5nZXRTdHJpbmcoInRleHQiLCAmdGV4dCk7CisgICAg
QVNTRVJUKHN1Y2Nlc3MpOworICAgIHN1Y2Nlc3MgPSBpbm5lclNldFN0eWxlVGV4dChzdHlsZSwg
dGV4dCk7CisgICAgaWYgKHN1Y2Nlc3MpCisgICAgICAgIHNldERpc2FibGVkUHJvcGVydGllc0Zv
clN0eWxlKHN0eWxlLCBzdHlsZU9iamVjdC0+Z2V0QXJyYXkoImRpc2FibGVkUHJvcGVydGllcyIp
KTsKKworICAgIHJldHVybiBzdWNjZXNzOworfQorCiBDU1NTdHlsZURlY2xhcmF0aW9uKiBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpzdHlsZUZvcklkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0CiB7CiAg
ICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gcnVsZUZvcklkKGlkKTsKQEAgLTI3MywxMyArNDkyLDIz
IEBAIENTU1N0eWxlRGVjbGFyYXRpb24qIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlRm9ySWQo
Y29uc3QgU3RyaW5nJiBpZCkgY29uc3QKICAgICByZXR1cm4gcnVsZS0+c3R5bGUoKTsKIH0KIAot
Ym9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRTdHlsZVRleHQoY29uc3QgU3RyaW5nJiBzdHls
ZUlkLCBjb25zdCBTdHJpbmcmIG5ld1RleHQpCitEaXNhYmxlZFByb3BlcnR5U3RvcmUqIEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OmRpc2FibGVkUHJvcGVydHlTdG9yZUZvclN0eWxlKENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlKQogewotICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gc3R5
bGVGb3JJZChzdHlsZUlkKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgSGFzaE1hcDxDU1NTdHlsZURlY2xhcmF0aW9uKiwgRGlzYWJsZWRQcm9wZXJ0eVN0b3Jl
Pjo6aXRlcmF0b3IgaXQgPSBtX3N0eWxlRGlzYWJsZWRQcm9wZXJ0aWVzLmZpbmQoc3R5bGUpOwor
ICAgIGlmIChpdCA9PSBtX3N0eWxlRGlzYWJsZWRQcm9wZXJ0aWVzLmVuZCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gJihpdC0+c2Vjb25kKTsKK30KIAotICAgIHJldHVybiBpbm5l
clNldFN0eWxlVGV4dChzdHlsZSwgbmV3VGV4dCk7Cit2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6
OnNldERpc2FibGVkUHJvcGVydGllc0ZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkaXNhYmxlZFByb3BlcnRpZXMpCit7CisgICAg
aWYgKCFkaXNhYmxlZFByb3BlcnRpZXMpCisgICAgICAgIG1fc3R5bGVEaXNhYmxlZFByb3BlcnRp
ZXMucmVtb3ZlKHN0eWxlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgSGFzaE1hcDxDU1NTdHlsZURl
Y2xhcmF0aW9uKiwgRGlzYWJsZWRQcm9wZXJ0eVN0b3JlPjo6aXRlcmF0b3IgaXQgPSBtX3N0eWxl
RGlzYWJsZWRQcm9wZXJ0aWVzLnNldChzdHlsZSwgRGlzYWJsZWRQcm9wZXJ0eVN0b3JlKCkpLmZp
cnN0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gZGlzYWJsZWRQcm9wZXJ0
aWVzLT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgIGl0LT5zZWNvbmQuYXBw
ZW5kKERpc2FibGVkUHJvcGVydHk6OmZyb21JbnNwZWN0b3JWYWx1ZShkaXNhYmxlZFByb3BlcnRp
ZXMtPmdldChpKSkpOworICAgIH0KIH0KIAogRG9jdW1lbnQqIEluc3BlY3RvclN0eWxlU2hlZXQ6
Om93bmVyRG9jdW1lbnQoKSBjb25zdApAQCAtNDQ0LDggKzY3MywxMCBAQCB2b2lkIEluc3BlY3Rv
clN0eWxlU2hlZXQ6OnJldmFsaWRhdGVTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBwYWdlU3R5
bGUpCiAgICAgICAgIGlmICghcGFyc2VkUnVsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBpZiAocGFyc2VkUnVsZS0+c3R5bGUoKSA9PSBwYWdlU3R5bGUpIHsKLSAgICAgICAgICAg
IGlmIChwYXJzZWRSdWxlLT5zdHlsZSgpLT5jc3NUZXh0KCkgIT0gcGFnZVN0eWxlLT5jc3NUZXh0
KCkpCisgICAgICAgICAgICBpZiAocGFyc2VkUnVsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpICE9IHBh
Z2VTdHlsZS0+Y3NzVGV4dCgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCB3
ZSBjbGVhciB0aGUgZGlzYWJsZWQgcHJvcGVydGllcyBmb3IgdGhlIGludmFsaWQgc3R5bGUgaGVy
ZT8KICAgICAgICAgICAgICAgICBpbm5lclNldFN0eWxlVGV4dChwYWdlU3R5bGUsIHBhZ2VTdHls
ZS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgfQpAQCAtNDY1LDcgKzY5Niw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6
c3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yU3R5
bGVTaGVldDo6cmVzb3VyY2VTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKIHsK
LSAgICBpZiAoIW1fcGFnZVN0eWxlU2hlZXQpCisgICAgaWYgKCFtX3BhZ2VTdHlsZVNoZWV0IHx8
ICFvd25lckRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQob3duZXJEb2N1bWVudCgpLT5m
cmFtZSgpLCBtX3BhZ2VTdHlsZVNoZWV0LT5maW5hbFVSTCgpLCByZXN1bHQpOwpAQCAtNTEzLDgg
Kzc0NCw3IEBAIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6SW5zcGVjdG9yU3R5
bGVTaGVldEZvcklubGluZVN0eWxlKGNvbnN0IFN0cmluCiAKIGJvb2wgSW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlOjpzZXRTdHlsZVRleHQoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCBj
b25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgQVNTRVJUKHN0eWxlSWQgPT0gIjAiKTsKLSAgICBV
TlVTRURfUEFSQU0oc3R5bGVJZCk7CisgICAgQVNTRVJUX1VOVVNFRChzdHlsZUlkLCBzdHlsZUlk
ID09ICIwIik7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgbV9lbGVtZW50LT5zZXRB
dHRyaWJ1dGUoInN0eWxlIiwgdGV4dCwgZWMpOwogICAgIG1fcnVsZVNvdXJjZURhdGEuY2xlYXIo
KTsKQEAgLTU0MSw2ICs3NzEsMTQgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5l
U3R5bGU6OmVuc3VyZVBhcnNlZERhdGFSZWFkeSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3Zv
aWQgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpzZXREaXNhYmxlZFByb3BlcnRp
ZXNGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gZGlzYWJsZWRQcm9wZXJ0aWVzKQoreworICAgIEFTU0VSVF9VTlVTRUQoc3R5bGUs
IHN0eWxlID09IGlubGluZVN0eWxlKCkpOworICAgIG1fZGlzYWJsZWRQcm9wZXJ0aWVzLmNsZWFy
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IGRpc2FibGVkUHJvcGVydGllcy0+
bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fZGlzYWJsZWRQcm9wZXJ0aWVzLmFw
cGVuZChEaXNhYmxlZFByb3BlcnR5Ojpmcm9tSW5zcGVjdG9yVmFsdWUoZGlzYWJsZWRQcm9wZXJ0
aWVzLT5nZXQoaSkpKTsKK30KKwogQ1NTU3R5bGVEZWNsYXJhdGlvbiogSW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlOjppbmxpbmVTdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
ZWxlbWVudC0+c3R5bGUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaApp
bmRleCAzOGFiNzc3Li4yMThhZDkxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5oCkBAIC0yNiwxNiArMjYsMTQgQEAKICNkZWZpbmUgSW5zcGVjdG9yU3R5bGVTaGVldF9o
CiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCIKLSNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogY2xhc3MgUGFyc2VkU3R5bGVTaGVldDsKIApAQCAt
NDMsMTEgKzQxLDcxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTUnVsZUxpc3Q7
CiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOworY2xhc3MgQ1NTU3R5bGVTaGVldDsKK2NsYXNz
IERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIE5vZGU7CiAKICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQogCitzdHJ1Y3QgSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eSB7CisgICAgSW5zcGVjdG9y
U3R5bGVQcm9wZXJ0eSgpCisgICAgeworICAgIH0KKworICAgIEluc3BlY3RvclN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlTb3VyY2VEYXRhIHByb3BlcnR5LCBib29sIGhhc1NvdXJjZSwgYm9vbCBk
aXNhYmxlZCkKKyAgICAgICAgOiBwcm9wZXJ0eShwcm9wZXJ0eSkKKyAgICAgICAgLCBoYXNTb3Vy
Y2UoaGFzU291cmNlKQorICAgICAgICAsIGRpc2FibGVkKGRpc2FibGVkKQorICAgIHsKKyAgICB9
CisKKyAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEgcHJvcGVydHk7CisgICAgYm9vbCBoYXNTb3Vy
Y2U7CisgICAgYm9vbCBkaXNhYmxlZDsKK307CisKK3N0cnVjdCBEaXNhYmxlZFByb3BlcnR5IHsK
KyAgICBzdGF0aWMgRGlzYWJsZWRQcm9wZXJ0eSBmcm9tSW5zcGVjdG9yVmFsdWUoUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpOworICAgIERpc2FibGVkUHJvcGVydHkoY29uc3QgU3Ry
aW5nJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogdGV4dCh0ZXh0KQorICAgICAg
ICAsIG9mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gdG9JbnNwZWN0b3JPYmplY3QoKTsKKworICAgIFN0cmluZyB0ZXh0OworICAgIHVu
c2lnbmVkIG9mZnNldDsKK307CisKK3R5cGVkZWYgVmVjdG9yPERpc2FibGVkUHJvcGVydHk+IERp
c2FibGVkUHJvcGVydHlTdG9yZTsKKworY2xhc3MgSW5zcGVjdG9yU3R5bGUgeworcHVibGljOgor
ICAgIEluc3BlY3RvclN0eWxlKGNvbnN0IFN0cmluZyYgZnVsbFN0eWxlSWQsIENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlLCBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRh
LCBEaXNhYmxlZFByb3BlcnR5U3RvcmUqIGRpc2FibGVkUHJvcGVydGllcykKKyAgICAgICAgOiBt
X2lkKGZ1bGxTdHlsZUlkKQorICAgICAgICAsIG1fc3R5bGUoc3R5bGUpCisgICAgICAgICwgbV9z
b3VyY2VEYXRhKHNvdXJjZURhdGEpCisgICAgICAgICwgbV9kaXNhYmxlZFByb3BlcnRpZXMoZGlz
YWJsZWRQcm9wZXJ0aWVzKQorICAgIHsKKyAgICB9CisKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIElu
c3BlY3RvclN0eWxlUHJvcGVydHkgZGlzYWJsZWRJbnNwZWN0b3JTdHlsZVByb3BlcnR5KHVuc2ln
bmVkIGRpc2FibGVkSW5kZXgpIGNvbnN0OworICAgIHZvaWQgcG9wdWxhdGVBbGxQcm9wZXJ0aWVz
KFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiogcmVzdWx0KSBjb25zdDsKKyAgICB2b2lk
IHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhJbnNwZWN0b3JPYmplY3QqIHJlc3Vs
dCkgY29uc3Q7CisgICAgU3RyaW5nIHNob3J0aGFuZFZhbHVlKGNvbnN0IFN0cmluZyYgc2hvcnRo
YW5kUHJvcGVydHkpIGNvbnN0OworICAgIFN0cmluZyBzaG9ydGhhbmRQcmlvcml0eShjb25zdCBT
dHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KSBjb25zdDsKKyAgICBWZWN0b3I8U3RyaW5nPiBsb25n
aGFuZFByb3BlcnRpZXMoY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkgY29uc3Q7CisK
KyAgICBTdHJpbmcgbV9pZDsKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBtX3N0eWxlOworICAg
IFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gbV9zb3VyY2VEYXRhOworICAgIERpc2FibGVkUHJv
cGVydHlTdG9yZSogbV9kaXNhYmxlZFByb3BlcnRpZXM7Cit9OworCiBjbGFzcyBJbnNwZWN0b3JT
dHlsZVNoZWV0IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yU3R5bGVTaGVldD4gewogcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IGNyZWF0ZShj
b25zdCBTdHJpbmcmIGlkLCBDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgY29uc3QgU3Ry
aW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwpCkBAIC02NCwxMSArMTIyLDEy
IEBAIHB1YmxpYzoKICAgICBib29sIHNldFJ1bGVTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHJ1bGVJ
ZCwgY29uc3QgU3RyaW5nJiBzZWxlY3Rvcik7CiAgICAgQ1NTU3R5bGVSdWxlKiBhZGRSdWxlKGNv
bnN0IFN0cmluZyYgc2VsZWN0b3IpOwogICAgIENTU1N0eWxlUnVsZSogcnVsZUZvcklkKGNvbnN0
IFN0cmluZyYpIGNvbnN0OworICAgIHZvaWQgcG9wdWxhdGVBbGxQcm9wZXJ0aWVzKGNvbnN0IFN0
cmluZyYgc3R5bGVJZCwgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+KiByZXN1bHQpOwog
ICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXQo
KTsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JSdWxlKENT
U1N0eWxlUnVsZSopOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVj
dEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKKyAgICBib29sIHNldFN0eWxlKGNvbnN0
IFN0cmluZyYgc3R5bGVJZCwgSW5zcGVjdG9yT2JqZWN0KiBzdHlsZU9iamVjdCk7CiAgICAgdmly
dHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZUZvcklkKGNvbnN0IFN0cmluZyYpIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBzZXRTdHlsZVRleHQoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCBj
b25zdCBTdHJpbmcmIHRleHQpOwogCiBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBjYW5CaW5kKCkgY29u
c3QgeyByZXR1cm4gbV9vcmlnaW4gIT0gInVzZXJBZ2VudCIgJiYgbV9vcmlnaW4gIT0gInVzZXIi
OyB9CkBAIC03OCw2ICsxMzcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBSZWZQdHI8Q1NT
UnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHJ1bGVJbmRleEJ5U3R5bGUoQ1NTU3R5
bGVEZWNsYXJhdGlvbiopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVQYXJzZWREYXRh
UmVhZHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGlzYWJsZWRQcm9wZXJ0aWVzRm9yU3R5bGUo
Q1NTU3R5bGVEZWNsYXJhdGlvbiosIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRpc2FibGVk
UHJvcGVydGllcyk7CisgICAgdmlydHVhbCBEaXNhYmxlZFByb3BlcnR5U3RvcmUqIGRpc2FibGVk
UHJvcGVydHlTdG9yZUZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKIAogcHJpdmF0ZToK
ICAgICBib29sIHRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0OwpAQCAtMTAxLDYgKzE2Miw3IEBA
IHByaXZhdGU6CiAgICAgU3RyaW5nIG1fZG9jdW1lbnRVUkw7CiAgICAgYm9vbCBtX2lzUmV2YWxp
ZGF0aW5nOwogICAgIFBhcnNlZFN0eWxlU2hlZXQqIG1fcGFyc2VkU3R5bGVTaGVldDsKKyAgICBI
YXNoTWFwPENTU1N0eWxlRGVjbGFyYXRpb24qLCBEaXNhYmxlZFByb3BlcnR5U3RvcmU+IG1fc3R5
bGVEaXNhYmxlZFByb3BlcnRpZXM7CiB9OwogCiBjbGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9y
SW5saW5lU3R5bGUgOiBwdWJsaWMgSW5zcGVjdG9yU3R5bGVTaGVldCB7CkBAIC0xMTEsMTQgKzE3
MywxNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlKGNvbnN0IFN0cmluZyYgaWQsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYg
b3JpZ2luKTsKLSAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQoY29u
c3QgU3RyaW5nJiBpZCkgY29uc3QgeyBBU1NFUlQoaWQgPT0gIjAiKTsgVU5VU0VEX1BBUkFNKGlk
KTsgcmV0dXJuIGlubGluZVN0eWxlKCk7IH0KKyAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlRm9ySWQoY29uc3QgU3RyaW5nJiBpZCkgY29uc3QgeyBBU1NFUlRfVU5VU0VEKGlk
LCBpZCA9PSAiMCIpOyByZXR1cm4gaW5saW5lU3R5bGUoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBz
ZXRTdHlsZVRleHQoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQpOwog
CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUZv
cihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyBBU1NFUlQoc3R5bGUgPT0gaW5s
aW5lU3R5bGUoKSk7IFVOVVNFRF9QQVJBTShzdHlsZSk7IHJldHVybiBtX3J1bGVTb3VyY2VEYXRh
OyB9CisgICAgdmlydHVhbCBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRh
Rm9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdCB7IEFTU0VSVF9VTlVTRUQoc3R5
bGUsIHN0eWxlID09IGlubGluZVN0eWxlKCkpOyByZXR1cm4gbV9ydWxlU291cmNlRGF0YTsgfQog
ICAgIHZpcnR1YWwgdW5zaWduZWQgcnVsZUluZGV4QnlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9u
KikgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVQYXJzZWREYXRh
UmVhZHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGlzYWJsZWRQcm9wZXJ0aWVzRm9yU3R5bGUo
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRp
c2FibGVkUHJvcGVydGllcyk7CisgICAgdmlydHVhbCBEaXNhYmxlZFByb3BlcnR5U3RvcmUqIGRp
c2FibGVkUHJvcGVydHlTdG9yZUZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBi
b29sKSB7IEFTU0VSVF9VTlVTRUQoc3R5bGUsIHN0eWxlID09IGlubGluZVN0eWxlKCkpOyByZXR1
cm4gJm1fZGlzYWJsZWRQcm9wZXJ0aWVzOyB9CiAKIHByaXZhdGU6CiAgICAgQ1NTU3R5bGVEZWNs
YXJhdGlvbiogaW5saW5lU3R5bGUoKSBjb25zdDsKQEAgLTEyNiw2ICsxOTAsNyBAQCBwcml2YXRl
OgogCiAgICAgRWxlbWVudCogbV9lbGVtZW50OwogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0
YT4gbV9ydWxlU291cmNlRGF0YTsKKyAgICBEaXNhYmxlZFByb3BlcnR5U3RvcmUgbV9kaXNhYmxl
ZFByb3BlcnRpZXM7CiB9OwogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71264</attachid>
            <date>2010-10-20 02:06:00 -0700</date>
            <delta_ts>2010-10-22 03:03:51 -0700</delta_ts>
            <desc>[PATCH] Style fixed</desc>
            <filename>toggle.patch</filename>
            <type>text/plain</type>
            <size>41524</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IDU2NmFlNDc0ZjI4MTEzYWU4OWFkZDE5N2QwZWE0Mjk2NzQwNWMxMzYKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBGcmkgT2N0IDE1
IDE1OjE3OjU4IDIwMTAgKzA0MDAKCiAgICBQcmVwYXJlIHRvZ2dsZWQgcHJvcGVydGllcyBmb3Ig
Y29tbWl0CgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAzN2JhYzgxLi5lYzZhMzIwIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEwLTEwLTE5ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogSW1wbGVtZW50IHBy
b3BlcnR5IHRvZ2dsaW5nIGluIEluc3BlY3RvckNTU0FnZW50CisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgaW1wbGVtZW50cyBlbmFibGVtZW50L2Rpc2FibGVtZW50IG9mIHN0eWxlIHByb3BlcnRpZXMu
CisgICAgICAgIERpc2FibGVkIHByb3BlcnRpZXMgYXJlIHBlcnNpc3RlZCBpbiB0aGUgc2NvcGUg
b2YgSW5zcGVjdG9yQ1NTQWdlbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NzMzOQorCisgICAgICAgIERyaXZlLWJ5OiBmaXhlcyBmb3IgdGhlIFdl
YiBJbnNwZWN0b3IgUHJvdG9jb2wgZm9ybWF0LgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojpn
ZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NT
QWdlbnQ6OnNldFN0eWxlRGF0YTIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNhYmxlZFByb3BlcnR5Ojpmcm9tSW5zcGVj
dG9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzYWJsZWRQcm9wZXJ0eTo6dG9JbnNwZWN0
b3JPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OmJ1aWxkT2JqZWN0
Rm9yU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OmRpc2FibGVkSW5z
cGVjdG9yU3R5bGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6
cG9wdWxhdGVBbGxQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
Ojpwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3R5bGU6OnNob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclN0eWxlOjpzaG9ydGhhbmRQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JTdHlsZTo6bG9uZ2hhbmRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpkaXNhYmxlZFByb3BlcnR5U3RvcmVGb3JTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXREaXNhYmxlZFByb3Bl
cnRpZXNGb3JTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Ojpy
ZXZhbGlkYXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6
cmVzb3VyY2VTdHlsZVNoZWV0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHls
ZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnNldFN0eWxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnNldERpc2FibGVkUHJvcGVydGllc0Zv
clN0eWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eTo6SW5zcGVjdG9yU3R5bGVQcm9w
ZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNhYmxlZFByb3BlcnR5OjpEaXNhYmxlZFByb3Bl
cnR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpJbnNwZWN0b3JTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnN0
eWxlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlOjpydWxlU291cmNlRGF0YUZvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmRpc2FibGVkUHJvcGVydHlTdG9yZUZvclN0eWxlKToK
KwogMjAxMC0xMC0xOSAgSGF5YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHAKaW5kZXggZTBmYWI4NS4uODZlYzA4ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcApAQCAtNDksNyArNDksOCBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLQorLy8gQ3VycmVudGx5IGltcGxl
bWVudGVkIG1vZGVsOgorLy8KIC8vIGNzc1Byb3BlcnR5ID0gewogLy8gICAgbmFtZSAgICAgICAg
ICA6IDxzdHJpbmc+LAogLy8gICAgdmFsdWUgICAgICAgICA6IDxzdHJpbmc+LApAQCAtNjIsODUg
KzYzLDYzIEBACiAvLyAgICBlbmRPZmZzZXQgICAgIDogPG51bWJlcj4sIC8vIE9wdGlvbmFsIC0g
cHJvcGVydHkgdGV4dCBlbmQgb2Zmc2V0IGluIGVuY2xvc2luZyBzdHlsZSBkZWNsYXJhdGlvbi4g
QWJzZW50IGZvciBjb21wdXRlZCBzdHlsZXMgYW5kIHN1Y2guCiAvLyB9CiAvLworLy8gbmFtZSAr
IHZhbHVlICsgcHJpb3JpdHkgOiBwcmVzZW50IHdoZW4gdGhlIHByb3BlcnR5IGlzIGVuYWJsZWQK
Ky8vIHRleHQgICAgICAgICAgICAgICAgICAgIDogcHJlc2VudCB3aGVuIHRoZSBwcm9wZXJ0eSBp
cyBkaXNhYmxlZAorLy8KKy8vIEZvciBkaXNhYmxlZCBwcm9wZXJ0aWVzLCBzdGFydE9mZnNldCA9
PT0gZW5kT2Zmc2V0ID09PSBpbnNlcnRpb24gcG9pbnQgZm9yIHRoZSBwcm9wZXJ0eS4KKy8vCiAv
LyBzdGF0dXM6CiAvLyAiZGlzYWJsZWQiID09IHByb3BlcnR5IGRpc2FibGVkIGJ5IHVzZXIKIC8v
ICJhY3RpdmUiID09IHByb3BlcnR5IHBhcnRpY2lwYXRlcyBpbiB0aGUgY29tcHV0ZWQgc3R5bGUg
Y2FsY3VsYXRpb24KIC8vICJpbmFjdGl2ZSIgPT0gcHJvcGVydHkgZG9lcyBubyBwYXJ0aWNpcGF0
ZSBpbiB0aGUgY29tcHV0ZWQgc3R5bGUgY2FsY3VsYXRpb24gKGkuZS4gb3ZlcnJpZGRlbiBieSBh
IHN1YnNlcXVlbnQgcHJvcGVydHkgd2l0aCB0aGUgc2FtZSBuYW1lKQogLy8gInN0eWxlIiA9PSBw
cm9wZXJ0eSBpcyBhY3RpdmUgYW5kIG9yaWdpbmF0ZXMgZnJvbSB0aGUgV2ViQ29yZSBDU1NTdHls
ZURlY2xhcmF0aW9uIHJhdGhlciB0aGFuIENTUyBzb3VyY2UgY29kZSAoZS5nLiBpbXBsaWNpdCBs
b25naGFuZCBwcm9wZXJ0aWVzKQogLy8KKy8vIGRpc2FibGVkUHJvcGVydHkgPSB7CisvLyAgICBv
ZmZzZXQ6IDxudW1iZXI+LAorLy8gICAgdGV4dCAgOiA8c3RyaW5nPgorLy8gfQogLy8KIC8vIGNz
c1N0eWxlID0gewotLy8gICAgc3R5bGVJZCAgICAgICAgIDogPG51bWJlcj4sIC8vIE9wdGlvbmFs
Ci0vLyAgICBzdHlsZVNoZWV0SWQgICAgOiA8bnVtYmVyPiwgLy8gUGFyZW50OiAtMSBmb3IgaW5s
aW5lIHN0eWxlcyAoPGZvbyBzdHlsZT0iLi4iPikKLS8vICAgIGNzc1Byb3BlcnRpZXMgICA6IFsK
Ky8vICAgIHN0eWxlSWQgICAgICAgICAgICA6IDxzdHJpbmc+LCAvLyBPcHRpb25hbAorLy8gICAg
Y3NzUHJvcGVydGllcyAgICAgIDogWwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICNjc3NQ
cm9wZXJ0eSwKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KIC8vICAgICAgICAgICAg
ICAgICAgICAgICAgICAjY3NzUHJvcGVydHkKLS8vICAgICAgICAgICAgICAgICAgICBdLAotLy8g
ICAgc2hvcnRoYW5kVmFsdWVzIDogeworLy8gICAgICAgICAgICAgICAgICAgICAgICAgXSwKKy8v
ICAgIHNob3J0aGFuZFZhbHVlcyAgICA6IHsKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICBz
aG9ydGhhbmROYW1lMSA6IHNob3J0aGFuZFZhbHVlMSwKIC8vICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaG9ydGhhbmROYW1lMiA6IHNob3J0aGFuZFZhbHVlMgotLy8gICAgICAgICAgICAgICAg
ICAgICAgfSwKLS8vICAgIGNzc1RleHQgICAgICAgICA6IDxzdHJpbmc+LCAvLyBkZWNsYXJhdGlv
biB0ZXh0Ci0vLyAgICBwcm9wZXJ0aWVzICAgICAgOiB7IH0gLy8gPz8/CisvLyAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAorLy8gICAgY3NzVGV4dCAgICAgICAgICAgIDogPHN0cmluZz4sIC8v
IE9wdGlvbmFsIC0gZGVjbGFyYXRpb24gdGV4dAorLy8gICAgZGlzYWJsZWRQcm9wZXJ0aWVzIDog
WyAjZGlzYWJsZWRQcm9wZXJ0eSwuLi4gI2Rpc2FibGVkUHJvcGVydHkgXQorLy8gICAgcHJvcGVy
dGllcyAgICAgICAgIDogeyB3aWR0aCwgaGVpZ2h0IH0KIC8vIH0KIC8vCi0vLyAvLyBUT0RPOgot
Ly8gLy8gLSBjb252ZXJ0IGRpc2FibGVkUHJvcGVydGllcyB0byBlbmFibGVkIGZsYWcuCi0vLyAv
LyAtIGNvbnZlcnQgd2lkdGgsIGhlaWdodCB0byBwcm9wZXJ0aWVzCi0vLwogLy8gY3NzUnVsZSA9
IHsKLS8vICAgIHJ1bGVJZCAgICAgICA6IDxudW1iZXI+LAotLy8gICAgc2VsZWN0b3JUZXh0IDog
PHN0cmluZz4KLS8vICAgIHNvdXJjZVVSTCAgICA6IDxzdHJpbmc+Ci0vLyAgICBzb3VyY2VMaW5l
ICAgOiA8c3RyaW5nPgotLy8gICAgc3R5bGVTaGVldElkIDogPG51bWJlcj4gLy8gYWxzbyBmb3Vu
ZCBpbiBzdHlsZQotLy8gICAgb3JpZ2luICAgICAgIDogPHN0cmluZz4gLy8gIiIgfHwgInVzZXIt
YWdlbnQiIHx8ICJ1c2VyIiB8fCAiaW5zcGVjdG9yIgorLy8gICAgcnVsZUlkICAgICAgIDogPHN0
cmluZz4sIC8vIE9wdGlvbmFsCisvLyAgICBzZWxlY3RvclRleHQgOiA8c3RyaW5nPiwKKy8vICAg
IHNvdXJjZVVSTCAgICA6IDxzdHJpbmc+LAorLy8gICAgc291cmNlTGluZSAgIDogPHN0cmluZz4s
CisvLyAgICBvcmlnaW4gICAgICAgOiA8c3RyaW5nPiwgLy8gIiIgfHwgInVzZXItYWdlbnQiIHx8
ICJ1c2VyIiB8fCAiaW5zcGVjdG9yIgogLy8gICAgc3R5bGUgICAgICAgIDogI2Nzc1N0eWxlCiAv
LyB9CiAvLwotLy8gLy8gVE9ETzoKLS8vIC8vIC0gZml4IG9yaWdpbgotLy8gLy8gLSBhZGQgc291
cmNlVVJMCi0vLyAvLyAtIGZpeCBwYXJlbnRTdHlsZVNoZWV0SWQKLS8vCiAvLyBjc3NTdHlsZVNo
ZWV0ID0gewogLy8gICAgc3R5bGVTaGVldElkICAgOiA8bnVtYmVyPgotLy8gICAgaHJlZiAgICAg
ICAgICAgOiA8c3RyaW5nPgorLy8gICAgc291cmNlVVJMICAgICAgOiA8c3RyaW5nPgogLy8gICAg
dGl0bGUgICAgICAgICAgOiA8c3RyaW5nPgogLy8gICAgZGlzYWJsZWQgICAgICAgOiA8Ym9vbGVh
bj4KLS8vICAgIGRvY3VtZW50Tm9kZUlkIDogPG51bWJlcj4KIC8vICAgIHJ1bGVzICAgICAgICAg
IDogWwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgI2Nzc1J1bGUsCiAvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAuLi4KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICNjc3NSdWxlCiAv
LyAgICAgICAgICAgICAgICAgICAgIF0KKy8vICAgIHRleHQgICAgICAgICAgIDogPHN0cmluZz4g
Ly8gT3B0aW9uYWwgLSB3aGVuZXZlciB0aGUgdGV4dCBpcyBhdmFpbGFibGUgZm9yIGEgdGV4dC1i
YXNlZCBzdHlsZXNoZWV0CiAvLyB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gc3RhdGlj
Ci1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgZnVs
bFN0eWxlSWQsIENTU1N0eWxlU291cmNlRGF0YSogc291cmNlRGF0YSkKLXsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGlmICghZnVsbFN0eWxlSWQuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHQtPnNldFN0cmluZygi
aWQiLCBmdWxsU3R5bGVJZCk7Ci0KLSAgICByZXN1bHQtPnNldFN0cmluZygid2lkdGgiLCBzdHls
ZS0+Z2V0UHJvcGVydHlWYWx1ZSgid2lkdGgiKSk7Ci0gICAgcmVzdWx0LT5zZXRTdHJpbmcoImhl
aWdodCIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSk7Ci0gICAgVmVjdG9yPENT
U1Byb3BlcnR5U291cmNlRGF0YT4qIHByb3BlcnR5RGF0YSA9IDA7Ci0KLSAgICBpZiAoc291cmNl
RGF0YSkgewotICAgICAgICByZXN1bHQtPnNldE51bWJlcigic3RhcnRPZmZzZXQiLCBzb3VyY2VE
YXRhLT5zdHlsZUJvZHlSYW5nZS5zdGFydCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJl
bmRPZmZzZXQiLCBzb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5lbmQpOwotICAgICAgICBwcm9w
ZXJ0eURhdGEgPSAmc291cmNlRGF0YS0+cHJvcGVydHlEYXRhOwotICAgIH0KLSAgICBwb3B1bGF0
ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoc3R5bGUsIHJlc3VsdC5nZXQoKSwgcHJvcGVydHlE
YXRhKTsKLQotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQotCi0vLyBzdGF0aWMKIENT
U1N0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpwYXJlbnRTdHlsZVNoZWV0KFN0eWxlQmFz
ZSogc3R5bGVCYXNlKQogewogICAgIGlmICghc3R5bGVCYXNlKQpAQCAtMTY0LDcgKzE0Myw2IEBA
IENTU1N0eWxlUnVsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzQ1NTU3R5bGVSdWxlKFN0eWxlQmFz
ZSogc3R5bGVCYXNlKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxl
KTsKIH0KIAotCiBJbnNwZWN0b3JDU1NBZ2VudDo6SW5zcGVjdG9yQ1NTQWdlbnQoSW5zcGVjdG9y
RE9NQWdlbnQqIGRvbUFnZW50LCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAgICAgOiBt
X2RvbUFnZW50KGRvbUFnZW50KQogICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKQEAgLTI0Niw3
ICsyMjQsMTAgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5v
ZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmEKICAgICBpZiAoIWRlZmF1bHRWaWV3
KQogICAgICAgICByZXR1cm47CiAKLSAgICAqc3R5bGUgPSBidWlsZE9iamVjdEZvclN0eWxlKGRl
ZmF1bHRWaWV3LT5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsICIiKS5nZXQoKSwgIiIpOworICAg
IFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlID0gZGVmYXVsdFZpZXct
PmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgIiIpOworICAgIFZlY3RvcjxJbnNwZWN0b3JTdHls
ZVByb3BlcnR5PiBwcm9wZXJ0aWVzOworICAgIEluc3BlY3RvclN0eWxlIGluc3BlY3RvclN0eWxl
KCIiLCBjb21wdXRlZFN0eWxlLmdldCgpLCAwLCAwKTsKKyAgICAqc3R5bGUgPSBpbnNwZWN0b3JT
dHlsZS5idWlsZE9iamVjdEZvclN0eWxlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OmdldEluaGVyaXRlZFN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiBzdHlsZSkKQEAgLTMwOCw3ICsyODksNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50
OjpzZXRTdHlsZVNoZWV0VGV4dDIoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0
cgogICAgIGluc3BlY3RvclN0eWxlU2hlZXQtPnNldFRleHQodGV4dCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlVGV4dDIoY29uc3QgU3RyaW5nJiBmdWxsU3R5bGVJZCwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCit2b2lk
IEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZURhdGEyKGNvbnN0IFN0cmluZyYgZnVsbFN0eWxl
SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHN0eWxlRGF0YU9iamVjdCwgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiogcmVzdWx0KQogewogICAgIFZlY3RvcjxTdHJpbmc+IGlkUGFydHM7CiAgICAg
ZnVsbFN0eWxlSWQuc3BsaXQoJzonLCBpZFBhcnRzKTsKQEAgLTMxOCwxNyArMjk5LDEyIEBAIHZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlVGV4dDIoY29uc3QgU3RyaW5nJiBmdWxsU3R5
bGVJZCwgY29uc3QgU3RyaW5nJiB0CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQtPnNldFN0eWxlVGV4
dChpZFBhcnRzLmF0KDEpLCB0ZXh0KSkKKyAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQtPnNl
dFN0eWxlKGlkUGFydHMuYXQoMSksIHN0eWxlRGF0YU9iamVjdC5nZXQoKSkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgICpyZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZv
clN0eWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoaWRQYXJ0cy5hdCgxKSkpOwog
fQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eTIoY29uc3QgU3RyaW5n
JiwgbG9uZywgYm9vbCkKLXsKLSAgICAvLyBGSVhNRShhcGF2bG92KTogaW1wbGVtZW50Ci19Ci0K
IHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcjIoY29uc3QgU3RyaW5nJiBm
dWxsUnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
KiByZXN1bHQpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gaWRQYXJ0czsKQEAgLTM3OSwxMzAgKzM1
NSw2IEBAIEVsZW1lbnQqIEluc3BlY3RvckNTU0FnZW50OjppbmxpbmVTdHlsZUVsZW1lbnQoQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKTsKIH0KIAotLy8gc3RhdGljCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojpwb3B1bGF0
ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIElu
c3BlY3Rvck9iamVjdCogcmVzdWx0LCBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiogcHJv
cGVydHlEYXRhKQotewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydGllcyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzaG9y
dGhhbmRWYWx1ZXMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIEhhc2hNYXA8U3Ry
aW5nLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiA+IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3Rp
dmVQcm9wZXJ0eTsKLSAgICBIYXNoU2V0PFN0cmluZz4gZm91bmRTaG9ydGhhbmRzOwotICAgIEhh
c2hTZXQ8U3RyaW5nPiBzb3VyY2VQcm9wZXJ0eU5hbWVzOwotICAgIGlmIChwcm9wZXJ0eURhdGEp
IHsKLSAgICAgICAgZm9yIChWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBwcm9wZXJ0eURhdGEtPmJlZ2luKCk7IGl0ICE9IHByb3BlcnR5RGF0YS0+ZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5U291cmNlRGF0YSYgcHJv
cGVydHlFbnRyeSA9ICppdDsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBy
b3BlcnR5ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIHByb3BlcnRp
ZXMtPnB1c2hPYmplY3QocHJvcGVydHkpOwotICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBuYW1l
ID0gcHJvcGVydHlFbnRyeS5uYW1lOwotICAgICAgICAgICAgc291cmNlUHJvcGVydHlOYW1lcy5h
ZGQobmFtZSk7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7
Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHByb3BlcnR5RW50cnku
dmFsdWUpOwotICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygicHJpb3JpdHkiLCBwcm9w
ZXJ0eUVudHJ5LmltcG9ydGFudCA/ICJpbXBvcnRhbnQiIDogIiIpOwotICAgICAgICAgICAgcHJv
cGVydHktPnNldFN0cmluZygic3RhdHVzIiwgImFjdGl2ZSIpOwotICAgICAgICAgICAgcHJvcGVy
dHktPnNldEJvb2xlYW4oInBhcnNlZE9rIiwgcHJvcGVydHlFbnRyeS5wYXJzZWRPayk7Ci0gICAg
ICAgICAgICBwcm9wZXJ0eS0+c2V0TnVtYmVyKCJzdGFydE9mZnNldCIsIHByb3BlcnR5RW50cnku
cmFuZ2Uuc3RhcnQpOwotICAgICAgICAgICAgcHJvcGVydHktPnNldE51bWJlcigiZW5kT2Zmc2V0
IiwgcHJvcGVydHlFbnRyeS5yYW5nZS5lbmQpOwotICAgICAgICAgICAgaWYgKHByb3BlcnR5RW50
cnkucGFyc2VkT2spIHsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1w
bGljaXQiLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHNob3J0aGFuZCA9IHN0eWxl
LT5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+
c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgc2hvcnRoYW5kKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXNob3J0aGFuZC5pc0VtcHR5KCkgJiYgIWZvdW5kU2hvcnRoYW5kcy5jb250YWlucyhzaG9y
dGhhbmQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kU2hvcnRoYW5kcy5hZGQoc2hvcnRo
YW5kKTsKLSAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kVmFsdWVzLT5zZXRTdHJpbmcoc2hv
cnRoYW5kLCBzaG9ydGhhbmRWYWx1ZShzdHlsZSwgc2hvcnRoYW5kKSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0
Qm9vbGVhbigiaW1wbGljaXQiLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHktPnNl
dFN0cmluZygic2hvcnRoYW5kTmFtZSIsICIiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiA+OjppdGVyYXRvciBhY3Rp
dmVJdCA9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5maW5kKG5hbWUpOwot
ICAgICAgICAgICAgaWYgKGFjdGl2ZUl0ICE9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQ
cm9wZXJ0eS5lbmQoKSkgewotICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0
cmluZygic3RhdHVzIiwgImluYWN0aXZlIik7Ci0gICAgICAgICAgICAgICAgYWN0aXZlSXQtPnNl
Y29uZC0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgIiIpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChuYW1lLCBw
cm9wZXJ0eSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMCwgc2l6ZSA9
IHN0eWxlLT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBTdHJpbmcgbmFtZSA9
IHN0eWxlLT5pdGVtKGkpOwotICAgICAgICBpZiAoc291cmNlUHJvcGVydHlOYW1lcy5jb250YWlu
cyhuYW1lKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHNvdXJjZVByb3BlcnR5
TmFtZXMuYWRkKG5hbWUpOwotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0
eSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHByb3BlcnRpZXMtPnB1c2hP
YmplY3QocHJvcGVydHkpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwgbmFt
ZSk7Ci0gICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInZhbHVlIiwgc3R5bGUtPmdldFByb3Bl
cnR5VmFsdWUobmFtZSkpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJwcmlvcml0eSIs
IHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KCJuYW1lIikpOwotICAgICAgICBwcm9wZXJ0eS0+
c2V0Qm9vbGVhbigiaW1wbGljaXQiLCBzdHlsZS0+aXNQcm9wZXJ0eUltcGxpY2l0KG5hbWUpKTsK
LSAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oInBhcnNlZE9rIiwgdHJ1ZSk7Ci0gICAgICAg
IHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsICJzdHlsZSIpOwotICAgICAgICBTdHJpbmcg
c2hvcnRoYW5kID0gc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOwotICAgICAgICBw
cm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgc2hvcnRoYW5kKTsKLSAgICAgICAg
aWYgKCFzaG9ydGhhbmQuaXNFbXB0eSgpICYmICFmb3VuZFNob3J0aGFuZHMuY29udGFpbnMoc2hv
cnRoYW5kKSkgewotICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzLmFkZChzaG9ydGhhbmQpOwot
ICAgICAgICAgICAgc2hvcnRoYW5kVmFsdWVzLT5zZXRTdHJpbmcoc2hvcnRoYW5kLCBzaG9ydGhh
bmRWYWx1ZShzdHlsZSwgc2hvcnRoYW5kKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXN1
bHQtPnNldEFycmF5KCJwcm9wZXJ0aWVzIiwgcHJvcGVydGllcyk7Ci0gICAgcmVzdWx0LT5zZXRP
YmplY3QoInNob3J0aGFuZFZhbHVlcyIsIHNob3J0aGFuZFZhbHVlcyk7Ci19Ci0KLS8vIHN0YXRp
YwotU3RyaW5nIEluc3BlY3RvckNTU0FnZW50OjpzaG9ydGhhbmRWYWx1ZShDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkKLXsKLSAgICBT
dHJpbmcgdmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShzaG9ydGhhbmRQcm9wZXJ0eSk7
Ci0gICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3R5bGUtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIFN0cmluZyBpbmRpdmlk
dWFsUHJvcGVydHkgPSBzdHlsZS0+aXRlbShpKTsKLSAgICAgICAgICAgIGlmIChzdHlsZS0+Z2V0
UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZpZHVhbFByb3BlcnR5KSAhPSBzaG9ydGhhbmRQcm9wZXJ0
eSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChzdHlsZS0+aXNQ
cm9wZXJ0eUltcGxpY2l0KGluZGl2aWR1YWxQcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFZhbHVlID0gc3R5bGUtPmdldFBy
b3BlcnR5VmFsdWUoaW5kaXZpZHVhbFByb3BlcnR5KTsKLSAgICAgICAgICAgIGlmIChpbmRpdmlk
dWFsVmFsdWUgPT0gImluaXRpYWwiKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaWYgKHZhbHVlLmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIHZhbHVlLmFwcGVuZCgi
ICIpOwotICAgICAgICAgICAgdmFsdWUuYXBwZW5kKGluZGl2aWR1YWxWYWx1ZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi0vLyBzdGF0aWMKLVN0cmluZyBJbnNw
ZWN0b3JDU1NBZ2VudDo6c2hvcnRoYW5kUHJpb3JpdHkoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUsIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpCi17Ci0gICAgU3RyaW5nIHByaW9y
aXR5ID0gc3R5bGUtPmdldFByb3BlcnR5UHJpb3JpdHkoc2hvcnRoYW5kUHJvcGVydHkpOwotICAg
IGlmIChwcmlvcml0eS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0eWxlLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaW5kaXZpZHVh
bFByb3BlcnR5ID0gc3R5bGUtPml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAoc3R5bGUtPmdldFBy
b3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1YWxQcm9wZXJ0eSkgIT0gc2hvcnRoYW5kUHJvcGVydHkp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBwcmlvcml0eSA9IHN0eWxl
LT5nZXRQcm9wZXJ0eVByaW9yaXR5KGluZGl2aWR1YWxQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcHJpb3JpdHk7Ci19Ci0KLQotLy8g
c3RhdGljCi1WZWN0b3I8U3RyaW5nPiBJbnNwZWN0b3JDU1NBZ2VudDo6bG9uZ2hhbmRQcm9wZXJ0
aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFBy
b3BlcnR5KQotewotICAgIFZlY3RvcjxTdHJpbmc+IHByb3BlcnRpZXM7Ci0gICAgSGFzaFNldDxT
dHJpbmc+IGZvdW5kUHJvcGVydGllczsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5
bGUtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgU3RyaW5nIGluZGl2aWR1YWxQcm9wZXJ0eSA9
IHN0eWxlLT5pdGVtKGkpOwotICAgICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzLmNvbnRhaW5zKGlu
ZGl2aWR1YWxQcm9wZXJ0eSkgfHwgc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1
YWxQcm9wZXJ0eSkgIT0gc2hvcnRoYW5kUHJvcGVydHkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBmb3VuZFByb3BlcnRpZXMuYWRkKGluZGl2aWR1YWxQcm9wZXJ0eSk7Ci0gICAg
ICAgIHByb3BlcnRpZXMuYXBwZW5kKGluZGl2aWR1YWxQcm9wZXJ0eSk7Ci0gICAgfQotICAgIHJl
dHVybiBwcm9wZXJ0aWVzOwotfQotCiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUq
IEluc3BlY3RvckNTU0FnZW50Ojphc0luc3BlY3RvclN0eWxlU2hlZXQoRWxlbWVudCogZWxlbWVu
dCkKIHsKICAgICBOb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0OjppdGVyYXRvciBpdCA9IG1fbm9k
ZVRvSW5zcGVjdG9yU3R5bGVTaGVldC5maW5kKGVsZW1lbnQpOwpAQCAtNjIyLDcgKzQ3NCw4IEBA
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmpl
Y3RGb3JBdHRyaWJ1dGVTdHlsZXMoRWxlCiAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0g
YXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZS0+c3R5
bGUoKSkgewogICAgICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGUtPmxv
Y2FsTmFtZSgpOwotICAgICAgICAgICAgc3R5bGVBdHRyaWJ1dGVzLT5zZXRPYmplY3QoYXR0cmli
dXRlTmFtZS51dGY4KCkuZGF0YSgpLCBidWlsZE9iamVjdEZvclN0eWxlKGF0dHJpYnV0ZS0+c3R5
bGUoKSwgIiIpKTsKKyAgICAgICAgICAgIEluc3BlY3RvclN0eWxlIGluc3BlY3RvclN0eWxlKCIi
LCBhdHRyaWJ1dGUtPnN0eWxlKCksIDAsIDApOworICAgICAgICAgICAgc3R5bGVBdHRyaWJ1dGVz
LT5zZXRPYmplY3QoYXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpLCBpbnNwZWN0b3JTdHlsZS5i
dWlsZE9iamVjdEZvclN0eWxlKCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCBlYjYwMTNiLi5jNzYwMzY4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmgKQEAgLTU2LDcgKzU2LDYgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckNTU0FnZW50KGRvbUFnZW50LCBmcm9udGVu
ZCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVp
bGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBmdWxs
U3R5bGVJZCwgQ1NTU3R5bGVTb3VyY2VEYXRhKiA9IDApOwogICAgIHN0YXRpYyBDU1NTdHlsZVNo
ZWV0KiBwYXJlbnRTdHlsZVNoZWV0KFN0eWxlQmFzZSopOwogICAgIHN0YXRpYyBDU1NTdHlsZVJ1
bGUqIGFzQ1NTU3R5bGVSdWxlKFN0eWxlQmFzZSopOwogCkBAIC03Myw4ICs3Miw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGdldEFsbFN0eWxlczIoUmVmUHRyPEluc3BlY3RvckFycmF5Piogc3R5bGVz
KTsKICAgICB2b2lkIGdldFN0eWxlU2hlZXQyKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwogICAgIHZvaWQgc2V0U3R5bGVTaGVldFRl
eHQyKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQpOwotICAg
IHZvaWQgc2V0U3R5bGVUZXh0Mihjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYg
dGV4dCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKLSAgICB2b2lkIHRvZ2dsZVBy
b3BlcnR5Mihjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGxvbmcgcHJvcGVydHlPcmRpbmFsLCBib29s
IGRpc2FibGVkKTsKKyAgICB2b2lkIHNldFN0eWxlRGF0YTIoY29uc3QgU3RyaW5nJiBzdHlsZUlk
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzdHlsZURhdGFPYmplY3QsIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4qIHJlc3VsdCk7CiAgICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IyKGNvbnN0IFN0cmlu
ZyYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
KiByZXN1bHQpOwogICAgIHZvaWQgYWRkUnVsZTIoY29uc3QgbG9uZyBjb250ZXh0Tm9kZUlkLCBj
b25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwog
ICAgIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiByZXN1bHQpOwpAQCAtODIsMTQgKzgwLDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+ID4gSWRUb0lu
c3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlU2hlZXQqLCBS
ZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gPiBDU1NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHls
ZVNoZWV0OwotICAgIHR5cGVkZWYgSGFzaE1hcDxOb2RlKiwgUmVmUHRyPEluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZT4gPiBOb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0OyAvLyBmb3Ig
Ym9ndXMgInN0eWxlc2hlZXRzIiB3aXRoIGlubGluZSBub2RlIHN0eWxlcworICAgIHR5cGVkZWYg
SGFzaE1hcDxOb2RlKiwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4g
PiBOb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0OyAvLyBib2d1cyAic3R5bGVzaGVldHMiIHdpdGgg
ZWxlbWVudHMnIGlubGluZSBzdHlsZXMKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPERvY3Vt
ZW50PiwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+ID4gRG9jdW1lbnRUb1ZpYUluc3BlY3Rv
clN0eWxlU2hlZXQ7IC8vICJ2aWEgaW5zcGVjdG9yIiBzdHlsZXNoZWV0cwogCiAgICAgc3RhdGlj
IEVsZW1lbnQqIGlubGluZVN0eWxlRWxlbWVudChDU1NTdHlsZURlY2xhcmF0aW9uKik7Ci0gICAg
c3RhdGljIHZvaWQgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENTU1N0eWxlRGVj
bGFyYXRpb24qLCBJbnNwZWN0b3JPYmplY3QqIHJlc3VsdCwgVmVjdG9yPENTU1Byb3BlcnR5U291
cmNlRGF0YT4qIHByb3BlcnR5RGF0YSk7Ci0gICAgc3RhdGljIFN0cmluZyBzaG9ydGhhbmRWYWx1
ZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7
Ci0gICAgc3RhdGljIFN0cmluZyBzaG9ydGhhbmRQcmlvcml0eShDU1NTdHlsZURlY2xhcmF0aW9u
KiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7Ci0gICAgc3RhdGljIFZlY3RvcjxT
dHJpbmc+IGxvbmdoYW5kUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3Ry
aW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7CiAKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5s
aW5lU3R5bGUqIGFzSW5zcGVjdG9yU3R5bGVTaGVldChFbGVtZW50KiBlbGVtZW50KTsKICAgICBF
bGVtZW50KiBlbGVtZW50Rm9ySWQobG9uZyBub2RlSWQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmNwcAppbmRleCAxMWNkNjQ5Li5lNjQxMjI3IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApAQCAtOTgsNiArOTgsMjEwIEBAIFJlZlB0
cjxXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0YT4gUGFyc2VkU3R5bGVTaGVldDo6cnVsZVNvdXJj
ZURhdGFBdCh1bnNpZ25lZCBpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gc3RhdGljCitE
aXNhYmxlZFByb3BlcnR5IERpc2FibGVkUHJvcGVydHk6OmZyb21JbnNwZWN0b3JWYWx1ZShQYXNz
UmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgdGV4dE5hbWUsICgidGV4dCIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0
cmluZywgb2Zmc2V0TmFtZSwgKCJvZmZzZXQiKSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgQVNTRVJUKG9iamVjdCk7CisgICAg
U3RyaW5nIHRleHQ7CisgICAgZG91YmxlIG9mZnNldDsKKyAgICBib29sIHN1Y2Nlc3MgPSBvYmpl
Y3QtPmdldFN0cmluZyh0ZXh0TmFtZSwgJnRleHQpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vz
cywgc3VjY2Vzcyk7CisgICAgc3VjY2VzcyA9IG9iamVjdC0+Z2V0TnVtYmVyKG9mZnNldE5hbWUs
ICZvZmZzZXQpOworICAgIEFTU0VSVChzdWNjZXNzKTsKKyAgICByZXR1cm4gRGlzYWJsZWRQcm9w
ZXJ0eSh0ZXh0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2Zmc2V0KSk7Cit9CisKK1Bhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBEaXNhYmxlZFByb3BlcnR5Ojp0b0luc3BlY3Rvck9iamVjdCgp
Cit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygidGV4dCIsIHRleHQpOworICAgIHJl
c3VsdC0+c2V0TnVtYmVyKCJvZmZzZXQiLCBvZmZzZXQpOworICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yU3R5bGU6
OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdAoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCFtX2lkLmlz
RW1wdHkoKSkKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlSWQiLCBtX2lkKTsKKwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHByb3BlcnRpZXNPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3BlcnRpZXNPYmplY3QtPnNldFN0cmluZygid2lkdGgi
LCBtX3N0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJ3aWR0aCIpKTsKKyAgICBwcm9wZXJ0aWVzT2Jq
ZWN0LT5zZXRTdHJpbmcoImhlaWdodCIsIG1fc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoImhlaWdo
dCIpKTsKKworICAgIGlmIChtX3NvdXJjZURhdGEpIHsKKyAgICAgICAgcHJvcGVydGllc09iamVj
dC0+c2V0TnVtYmVyKCJzdGFydE9mZnNldCIsIG1fc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRh
LT5zdHlsZUJvZHlSYW5nZS5zdGFydCk7CisgICAgICAgIHByb3BlcnRpZXNPYmplY3QtPnNldE51
bWJlcigiZW5kT2Zmc2V0IiwgbV9zb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9k
eVJhbmdlLmVuZCk7CisgICAgfQorICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJwcm9wZXJ0aWVzIiwg
cHJvcGVydGllc09iamVjdCk7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRpc2FibGVk
UHJvcGVydGllc0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIGlmIChtX2Rp
c2FibGVkUHJvcGVydGllcykgeworICAgICAgICBmb3IgKERpc2FibGVkUHJvcGVydHlTdG9yZTo6
aXRlcmF0b3IgaXQgPSBtX2Rpc2FibGVkUHJvcGVydGllcy0+YmVnaW4oKSwgaXRFbmQgPSBtX2Rp
c2FibGVkUHJvcGVydGllcy0+ZW5kKCk7IGl0ICE9IGl0RW5kOyArK2l0KQorICAgICAgICAgICAg
ZGlzYWJsZWRQcm9wZXJ0aWVzQXJyYXktPnB1c2hPYmplY3QoaXQtPnRvSW5zcGVjdG9yT2JqZWN0
KCkpOworICAgIH0KKyAgICByZXN1bHQtPnNldEFycmF5KCJkaXNhYmxlZFByb3BlcnRpZXMiLCBk
aXNhYmxlZFByb3BlcnRpZXNBcnJheSk7CisKKyAgICBwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVBy
b3BlcnRpZXMocmVzdWx0LmdldCgpKTsKKworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwor
fQorCitJbnNwZWN0b3JTdHlsZVByb3BlcnR5IEluc3BlY3RvclN0eWxlOjpkaXNhYmxlZEluc3Bl
Y3RvclN0eWxlUHJvcGVydHkodW5zaWduZWQgZGlzYWJsZWRJbmRleCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoZGlzYWJsZWRJbmRleCA8IG1fZGlzYWJsZWRQcm9wZXJ0aWVzLT5zaXplKCkpOworICAg
IGNvbnN0IERpc2FibGVkUHJvcGVydHkmIGRpc2FibGVkUHJvcGVydHkgPSBtX2Rpc2FibGVkUHJv
cGVydGllcy0+YXQoZGlzYWJsZWRJbmRleCk7CisgICAgcmV0dXJuIEluc3BlY3RvclN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlTb3VyY2VEYXRhKCI8PiIsIGRpc2FibGVkUHJvcGVydHkudGV4dCwg
ZmFsc2UsIGZhbHNlLCBTb3VyY2VSYW5nZShkaXNhYmxlZFByb3BlcnR5Lm9mZnNldCwgZGlzYWJs
ZWRQcm9wZXJ0eS5vZmZzZXQpKSwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3R5
bGU6OnBvcHVsYXRlQWxsUHJvcGVydGllcyhWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4q
IHJlc3VsdCkgY29uc3QKK3sKKyAgICBIYXNoU2V0PFN0cmluZz4gZm91bmRTaG9ydGhhbmRzOwor
ICAgIEhhc2hTZXQ8U3RyaW5nPiBzb3VyY2VQcm9wZXJ0eU5hbWVzOworICAgIHVuc2lnbmVkIGRp
c2FibGVkSW5kZXggPSAwOworICAgIHVuc2lnbmVkIGRpc2FibGVkTGVuZ3RoID0gbV9kaXNhYmxl
ZFByb3BlcnRpZXMgPyBtX2Rpc2FibGVkUHJvcGVydGllcy0+c2l6ZSgpIDogMDsKKyAgICBJbnNw
ZWN0b3JTdHlsZVByb3BlcnR5IGRpc2FibGVkUHJvcGVydHk7CisgICAgaWYgKGRpc2FibGVkSW5k
ZXggPCBkaXNhYmxlZExlbmd0aCkKKyAgICAgICAgZGlzYWJsZWRQcm9wZXJ0eSA9IGRpc2FibGVk
SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eShkaXNhYmxlZEluZGV4KTsKKworICAgIFZlY3RvcjxDU1NQ
cm9wZXJ0eVNvdXJjZURhdGE+KiBzb3VyY2VQcm9wZXJ0eURhdGEgPSBtX3NvdXJjZURhdGEgPyAm
KG1fc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGEpIDogMDsKKyAgICBp
ZiAoc291cmNlUHJvcGVydHlEYXRhKSB7CisgICAgICAgIGZvciAoVmVjdG9yPENTU1Byb3BlcnR5
U291cmNlRGF0YT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc291cmNlUHJvcGVydHlEYXRhLT5iZWdp
bigpOyBpdCAhPSBzb3VyY2VQcm9wZXJ0eURhdGEtPmVuZCgpOyArK2l0KSB7CisgICAgICAgICAg
ICB3aGlsZSAobV9kaXNhYmxlZFByb3BlcnRpZXMgJiYgZGlzYWJsZWRJbmRleCA8IGRpc2FibGVk
TGVuZ3RoICYmIGRpc2FibGVkUHJvcGVydHkucHJvcGVydHkucmFuZ2Uuc3RhcnQgPD0gaXQtPnJh
bmdlLnN0YXJ0KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQoZGlzYWJsZWRQcm9w
ZXJ0eSk7CisgICAgICAgICAgICAgICAgaWYgKCsrZGlzYWJsZWRJbmRleCA8IGRpc2FibGVkTGVu
Z3RoKQorICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFByb3BlcnR5ID0gZGlzYWJsZWRJbnNw
ZWN0b3JTdHlsZVByb3BlcnR5KGRpc2FibGVkSW5kZXgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmVzdWx0LT5hcHBlbmQoSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eSgqaXQsIHRydWUsIGZh
bHNlKSk7CisgICAgICAgICAgICBzb3VyY2VQcm9wZXJ0eU5hbWVzLmFkZChpdC0+bmFtZSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB3aGlsZSAoZGlzYWJsZWRJbmRleCA8IGRpc2FibGVkTGVu
Z3RoKSB7CisgICAgICAgIHJlc3VsdC0+YXBwZW5kKGRpc2FibGVkUHJvcGVydHkpOworICAgICAg
ICBkaXNhYmxlZFByb3BlcnR5ID0gZGlzYWJsZWRJbnNwZWN0b3JTdHlsZVByb3BlcnR5KGRpc2Fi
bGVkSW5kZXgrKyk7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDAsIHNpemUgPSBtX3N0eWxl
LT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBTdHJpbmcgbmFtZSA9IG1fc3R5
bGUtPml0ZW0oaSk7CisgICAgICAgIGlmIChzb3VyY2VQcm9wZXJ0eU5hbWVzLmNvbnRhaW5zKG5h
bWUpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc291cmNlUHJvcGVydHlOYW1l
cy5hZGQobmFtZSk7CisgICAgICAgIHJlc3VsdC0+YXBwZW5kKEluc3BlY3RvclN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlTb3VyY2VEYXRhKG5hbWUsIG1fc3R5bGUtPmdldFByb3BlcnR5VmFsdWUo
bmFtZSksICFtX3N0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpLmlzRW1wdHkoKSwgdHJ1
ZSwgU291cmNlUmFuZ2UoKSksIGZhbHNlLCBmYWxzZSkpOworICAgIH0KK30KKwordm9pZCBJbnNw
ZWN0b3JTdHlsZTo6cG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKEluc3BlY3Rvck9i
amVjdCogcmVzdWx0KSBjb25zdAoreworICAgIFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5
PiBwcm9wZXJ0aWVzOworICAgIHBvcHVsYXRlQWxsUHJvcGVydGllcygmcHJvcGVydGllcyk7CisK
KyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3BlcnRpZXNPYmplY3QgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2hvcnRoYW5kVmFs
dWVzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gPiBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVy
dHk7CisgICAgSGFzaFNldDxTdHJpbmc+IGZvdW5kU2hvcnRoYW5kczsKKworICAgIGZvciAoVmVj
dG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+OjppdGVyYXRvciBpdCA9IHByb3BlcnRpZXMuYmVn
aW4oKSwgaXRFbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOyBpdCAhPSBpdEVuZDsgKytpdCkgeworICAg
ICAgICBjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5RW50cnkgPSBpdC0+cHJv
cGVydHk7CisgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IHByb3BlcnR5RW50cnkubmFtZTsK
KworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0eSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHByb3BlcnRpZXNPYmplY3QtPnB1c2hPYmplY3QocHJv
cGVydHkpOworICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzdGF0dXMiLCBpdC0+ZGlzYWJs
ZWQgPyAiZGlzYWJsZWQiIDogImFjdGl2ZSIpOworICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVh
bigicGFyc2VkT2siLCBwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKTsKKyAgICAgICAgaWYgKCFpdC0+
ZGlzYWJsZWQpIHsKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoIm5hbWUiLCBuYW1l
KTsKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInZhbHVlIiwgcHJvcGVydHlFbnRy
eS52YWx1ZSk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJwcmlvcml0eSIsIHBy
b3BlcnR5RW50cnkuaW1wb3J0YW50ID8gImltcG9ydGFudCIgOiAiIik7CisgICAgICAgICAgICBp
ZiAoaXQtPmhhc1NvdXJjZSkgeworICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFu
KCJpbXBsaWNpdCIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0TnVtYmVy
KCJzdGFydE9mZnNldCIsIHByb3BlcnR5RW50cnkucmFuZ2Uuc3RhcnQpOworICAgICAgICAgICAg
ICAgIHByb3BlcnR5LT5zZXROdW1iZXIoImVuZE9mZnNldCIsIHByb3BlcnR5RW50cnkucmFuZ2Uu
ZW5kKTsKKworICAgICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiA+OjppdGVyYXRvciBhY3RpdmVJdCA9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3Rp
dmVQcm9wZXJ0eS5maW5kKG5hbWUpOworICAgICAgICAgICAgICAgIGlmIChhY3RpdmVJdCAhPSBw
cm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuZW5kKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYWN0aXZlSXQtPnNlY29uZC0+c2V0U3RyaW5nKCJzdGF0dXMiLCAiaW5hY3RpdmUi
KTsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnNlY29uZC0+c2V0U3RyaW5nKCJzaG9y
dGhhbmROYW1lIiwgIiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuc2V0KG5hbWUsIHByb3BlcnR5KTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4o
ImltcGxpY2l0IiwgbV9zdHlsZS0+aXNQcm9wZXJ0eUltcGxpY2l0KG5hbWUpKTsKKyAgICAgICAg
ICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzdGF0dXMiLCAic3R5bGUiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJ0
ZXh0IiwgcHJvcGVydHlFbnRyeS52YWx1ZSk7CisKKyAgICAgICAgaWYgKHByb3BlcnR5RW50cnku
cGFyc2VkT2spIHsKKyAgICAgICAgICAgIC8vIEJvdGggZm9yIHN0eWxlLW9yaWdpbmF0ZWQgYW5k
IHBhcnNlZCBzb3VyY2UgcHJvcGVydGllcy4KKyAgICAgICAgICAgIFN0cmluZyBzaG9ydGhhbmQg
PSBtX3N0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKKyAgICAgICAgICAgIHByb3Bl
cnR5LT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCBzaG9ydGhhbmQpOworICAgICAgICAgICAg
aWYgKCFzaG9ydGhhbmQuaXNFbXB0eSgpICYmICFmb3VuZFNob3J0aGFuZHMuY29udGFpbnMoc2hv
cnRoYW5kKSkgeworICAgICAgICAgICAgICAgIGZvdW5kU2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5k
KTsKKyAgICAgICAgICAgICAgICBzaG9ydGhhbmRWYWx1ZXMtPnNldFN0cmluZyhzaG9ydGhhbmQs
IHNob3J0aGFuZFZhbHVlKHNob3J0aGFuZCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCAiIik7
CisgICAgfQorCisgICAgcmVzdWx0LT5zZXRBcnJheSgiY3NzUHJvcGVydGllcyIsIHByb3BlcnRp
ZXNPYmplY3QpOworICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzaG9ydGhhbmRWYWx1ZXMiLCBzaG9y
dGhhbmRWYWx1ZXMpOworfQorCitTdHJpbmcgSW5zcGVjdG9yU3R5bGU6OnNob3J0aGFuZFZhbHVl
KGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpIGNvbnN0Cit7CisgICAgU3RyaW5nIHZh
bHVlID0gbV9zdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAg
aWYgKHZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9zdHlsZS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIGluZGl2aWR1YWxQ
cm9wZXJ0eSA9IG1fc3R5bGUtPml0ZW0oaSk7CisgICAgICAgICAgICBpZiAobV9zdHlsZS0+Z2V0
UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZpZHVhbFByb3BlcnR5KSAhPSBzaG9ydGhhbmRQcm9wZXJ0
eSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChtX3N0eWxlLT5p
c1Byb3BlcnR5SW1wbGljaXQoaW5kaXZpZHVhbFByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIFN0cmluZyBpbmRpdmlkdWFsVmFsdWUgPSBtX3N0eWxlLT5n
ZXRQcm9wZXJ0eVZhbHVlKGluZGl2aWR1YWxQcm9wZXJ0eSk7CisgICAgICAgICAgICBpZiAoaW5k
aXZpZHVhbFZhbHVlID09ICJpbml0aWFsIikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICB2YWx1ZS5hcHBl
bmQoIiAiKTsKKyAgICAgICAgICAgIHZhbHVlLmFwcGVuZChpbmRpdmlkdWFsVmFsdWUpOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiB2YWx1ZTsKK30KKworU3RyaW5nIEluc3BlY3RvclN0
eWxlOjpzaG9ydGhhbmRQcmlvcml0eShjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KSBj
b25zdAoreworICAgIFN0cmluZyBwcmlvcml0eSA9IG1fc3R5bGUtPmdldFByb3BlcnR5UHJpb3Jp
dHkoc2hvcnRoYW5kUHJvcGVydHkpOworICAgIGlmIChwcmlvcml0eS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3R5bGUtPmxlbmd0aCgpOyArK2kpIHsK
KyAgICAgICAgICAgIFN0cmluZyBpbmRpdmlkdWFsUHJvcGVydHkgPSBtX3N0eWxlLT5pdGVtKGkp
OworICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1
YWxQcm9wZXJ0eSkgIT0gc2hvcnRoYW5kUHJvcGVydHkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBwcmlvcml0eSA9IG1fc3R5bGUtPmdldFByb3BlcnR5UHJpb3JpdHko
aW5kaXZpZHVhbFByb3BlcnR5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiBwcmlvcml0eTsKK30KKworVmVjdG9yPFN0cmluZz4gSW5zcGVjdG9yU3R5
bGU6OmxvbmdoYW5kUHJvcGVydGllcyhjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KSBj
b25zdAoreworICAgIFZlY3RvcjxTdHJpbmc+IHByb3BlcnRpZXM7CisgICAgSGFzaFNldDxTdHJp
bmc+IGZvdW5kUHJvcGVydGllczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdHls
ZS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFByb3BlcnR5ID0g
bV9zdHlsZS0+aXRlbShpKTsKKyAgICAgICAgaWYgKGZvdW5kUHJvcGVydGllcy5jb250YWlucyhp
bmRpdmlkdWFsUHJvcGVydHkpIHx8IG1fc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKGluZGl2
aWR1YWxQcm9wZXJ0eSkgIT0gc2hvcnRoYW5kUHJvcGVydHkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBmb3VuZFByb3BlcnRpZXMuYWRkKGluZGl2aWR1YWxQcm9wZXJ0eSk7Cisg
ICAgICAgIHByb3BlcnRpZXMuYXBwZW5kKGluZGl2aWR1YWxQcm9wZXJ0eSk7CisgICAgfQorICAg
IHJldHVybiBwcm9wZXJ0aWVzOworfQorCiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JT
dHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgaWQsIENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0
LCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCkKICAgICA6
IG1faWQoaWQpCiAgICAgLCBtX3BhZ2VTdHlsZVNoZWV0KHBhZ2VTdHlsZVNoZWV0KQpAQCAtMjA0
LDE5ICs0MDgsMjAgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxl
U2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKLSAgICByZXN1bHQtPnNldFN0cmluZygiaWQiLCBpZCgpKTsKICAgICByZXN1bHQtPnNl
dEJvb2xlYW4oImRpc2FibGVkIiwgc3R5bGVTaGVldC0+ZGlzYWJsZWQoKSk7Ci0gICAgcmVzdWx0
LT5zZXRTdHJpbmcoImhyZWYiLCBzdHlsZVNoZWV0LT5ocmVmKCkpOworICAgIHJlc3VsdC0+c2V0
U3RyaW5nKCJzb3VyY2VVUkwiLCBzdHlsZVNoZWV0LT5ocmVmKCkpOwogICAgIHJlc3VsdC0+c2V0
U3RyaW5nKCJ0aXRsZSIsIHN0eWxlU2hlZXQtPnRpdGxlKCkpOwogICAgIFJlZlB0cjxDU1NSdWxl
TGlzdD4gY3NzUnVsZUxpc3QgPSBDU1NSdWxlTGlzdDo6Y3JlYXRlKHN0eWxlU2hlZXQsIHRydWUp
OwogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY3NzUnVsZXMgPSBidWlsZEFycmF5Rm9yUnVs
ZUxpc3QoY3NzUnVsZUxpc3QuZ2V0KCkpOwotICAgIHJlc3VsdC0+c2V0QXJyYXkoImNzc1J1bGVz
IiwgY3NzUnVsZXMucmVsZWFzZSgpKTsKKyAgICByZXN1bHQtPnNldEFycmF5KCJydWxlcyIsIGNz
c1J1bGVzLnJlbGVhc2UoKSk7CiAKICAgICBTdHJpbmcgc3R5bGVTaGVldFRleHQ7CiAgICAgYm9v
bCBzdWNjZXNzID0gdGV4dCgmc3R5bGVTaGVldFRleHQpOwogICAgIGlmIChzdWNjZXNzKQogICAg
ICAgICByZXN1bHQtPnNldFN0cmluZygidGV4dCIsIHN0eWxlU2hlZXRUZXh0KTsKIAorICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCBpZCgpKTsKKwogICAgIHJldHVybiByZXN1
bHQucmVsZWFzZSgpOwogfQogCkBAIC0yMjgsMjcgKzQzMywxMyBAQCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0
eWxlUnVsZQogCiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgICByZXN1bHQtPnNldFN0cmluZygic2VsZWN0b3JUZXh0Iiwg
cnVsZS0+c2VsZWN0b3JUZXh0KCkpOwotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJjc3NUZXh0Iiwg
cnVsZS0+Y3NzVGV4dCgpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygic291cmNlVVJMIiwgIXN0
eWxlU2hlZXQtPmhyZWYoKS5pc0VtcHR5KCkgPyBzdHlsZVNoZWV0LT5ocmVmKCkgOiBtX2RvY3Vt
ZW50VVJMKTsKICAgICByZXN1bHQtPnNldE51bWJlcigic291cmNlTGluZSIsIHJ1bGUtPnNvdXJj
ZUxpbmUoKSk7Ci0gICAgcmVzdWx0LT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgbV9kb2N1bWVu
dFVSTCk7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJlbnRTdHlsZVNoZWV0VmFs
dWUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmVudFN0eWxlU2hlZXRWYWx1
ZS0+c2V0U3RyaW5nKCJpZCIsIGlkKCkpOwotICAgIHBhcmVudFN0eWxlU2hlZXRWYWx1ZS0+c2V0
U3RyaW5nKCJocmVmIiwgc3R5bGVTaGVldC0+aHJlZigpKTsKLSAgICByZXN1bHQtPnNldE9iamVj
dCgicGFyZW50U3R5bGVTaGVldCIsIHBhcmVudFN0eWxlU2hlZXRWYWx1ZS5yZWxlYXNlKCkpOwog
ICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJvcmlnaW4iLCBtX29yaWdpbik7CiAKLSAgICBSZWZQdHI8
Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7Ci0gICAgaWYgKGVuc3VyZVBhcnNlZERhdGFS
ZWFkeSgpKQotICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3IocnVsZS0+c3R5
bGUoKSk7Ci0gICAgaWYgKHNvdXJjZURhdGEpIHsKLSAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIo
InNlbGVjdG9yU3RhcnRPZmZzZXQiLCBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5zdGFy
dCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJzZWxlY3RvckVuZE9mZnNldCIsIHNvdXJj
ZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLmVuZCk7Ci0gICAgfQotCiAgICAgcmVzdWx0LT5zZXRP
YmplY3QoInN0eWxlIiwgYnVpbGRPYmplY3RGb3JTdHlsZShydWxlLT5zdHlsZSgpKSk7CiAgICAg
aWYgKGNhbkJpbmQoKSkKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImlkIiwgZnVsbFJ1bGVJ
ZChydWxlKSk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJydWxlSWQiLCBmdWxsUnVsZUlk
KHJ1bGUpKTsKIAogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQpAQCAtMjU5LDExICs0
NTAsMzkgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6
OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWMKICAgICBpZiAoZW5zdXJlUGFyc2VkRGF0
YVJlYWR5KCkpCiAgICAgICAgIHNvdXJjZURhdGEgPSBydWxlU291cmNlRGF0YUZvcihzdHlsZSk7
CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZSwgZnVsbFN0eWxlSWQoc3R5bGUpLCBzb3VyY2VE
YXRhID8gc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLmdldCgpIDogMCk7Ci0gICAgcmVzdWx0
LT5zZXRTdHJpbmcoInBhcmVudFN0eWxlU2hlZXRJZCIsIGlkKCkpOworICAgIERpc2FibGVkUHJv
cGVydHlTdG9yZSogZGlzYWJsZWRQcm9wZXJ0aWVzID0gZGlzYWJsZWRQcm9wZXJ0eVN0b3JlRm9y
U3R5bGUoc3R5bGUpOworICAgIEluc3BlY3RvclN0eWxlIGluc3BlY3RvclN0eWxlKGZ1bGxTdHls
ZUlkKHN0eWxlKSwgc3R5bGUsIHNvdXJjZURhdGEsIGRpc2FibGVkUHJvcGVydGllcyk7CisgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGUuYnVpbGRPYmpl
Y3RGb3JTdHlsZSgpOworCisgICAgLy8gU3R5bGUgdGV4dCBjYW5ub3QgYmUgcmV0cmlldmVkIHdp
dGhvdXQgc3R5bGVzaGVldCwgaGVuY2Ugd2Ugc2V0IGNzc1RleHQgaGVyZS4KKyAgICBpZiAoc291
cmNlRGF0YSkgeworICAgICAgICBTdHJpbmcgdGV4dDsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0g
c3R5bGVTaGVldFRleHQoJnRleHQpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAg
ICAgY29uc3QgU291cmNlUmFuZ2UmIGJvZHlSYW5nZSA9IHNvdXJjZURhdGEtPnN0eWxlU291cmNl
RGF0YS0+c3R5bGVCb2R5UmFuZ2U7CisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygiY3Nz
VGV4dCIsIHRleHQuc3Vic3RyaW5nKGJvZHlSYW5nZS5zdGFydCwgYm9keVJhbmdlLmVuZCAtIGJv
ZHlSYW5nZS5zdGFydCkpOworICAgICAgICB9CisgICAgfQorCiAgICAgcmV0dXJuIHJlc3VsdC5y
ZWxlYXNlKCk7CiB9CiAKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0U3R5bGUoY29uc3Qg
U3RyaW5nJiBzdHlsZUlkLCBJbnNwZWN0b3JPYmplY3QqIHN0eWxlT2JqZWN0KQoreworICAgIENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gc3R5bGVGb3JJZChzdHlsZUlkKTsKKyAgICBpZiAo
IXN0eWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgdGV4dDsKKyAgICBi
b29sIHN1Y2Nlc3MgPSBzdHlsZU9iamVjdC0+Z2V0U3RyaW5nKCJ0ZXh0IiwgJnRleHQpOworICAg
IEFTU0VSVChzdWNjZXNzKTsKKyAgICBzdWNjZXNzID0gaW5uZXJTZXRTdHlsZVRleHQoc3R5bGUs
IHRleHQpOworICAgIGlmIChzdWNjZXNzKQorICAgICAgICBzZXREaXNhYmxlZFByb3BlcnRpZXNG
b3JTdHlsZShzdHlsZSwgc3R5bGVPYmplY3QtPmdldEFycmF5KCJkaXNhYmxlZFByb3BlcnRpZXMi
KSk7CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwogQ1NTU3R5bGVEZWNsYXJhdGlvbiogSW5z
cGVjdG9yU3R5bGVTaGVldDo6c3R5bGVGb3JJZChjb25zdCBTdHJpbmcmIGlkKSBjb25zdAogewog
ICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IHJ1bGVGb3JJZChpZCk7CkBAIC0yNzMsMTMgKzQ5Miwy
MyBAQCBDU1NTdHlsZURlY2xhcmF0aW9uKiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZUZvcklk
KGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0CiAgICAgcmV0dXJuIHJ1bGUtPnN0eWxlKCk7CiB9CiAK
LWJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0U3R5bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5
bGVJZCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0KQorRGlzYWJsZWRQcm9wZXJ0eVN0b3JlKiBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpkaXNhYmxlZFByb3BlcnR5U3RvcmVGb3JTdHlsZShDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSkKIHsKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHN0
eWxlRm9ySWQoc3R5bGVJZCk7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIEhhc2hNYXA8Q1NTU3R5bGVEZWNsYXJhdGlvbiosIERpc2FibGVkUHJvcGVydHlTdG9y
ZT46Oml0ZXJhdG9yIGl0ID0gbV9zdHlsZURpc2FibGVkUHJvcGVydGllcy5maW5kKHN0eWxlKTsK
KyAgICBpZiAoaXQgPT0gbV9zdHlsZURpc2FibGVkUHJvcGVydGllcy5lbmQoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuICYoaXQtPnNlY29uZCk7Cit9CiAKLSAgICByZXR1cm4gaW5u
ZXJTZXRTdHlsZVRleHQoc3R5bGUsIG5ld1RleHQpOwordm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0
OjpzZXREaXNhYmxlZFByb3BlcnRpZXNGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGlzYWJsZWRQcm9wZXJ0aWVzKQoreworICAg
IGlmICghZGlzYWJsZWRQcm9wZXJ0aWVzKQorICAgICAgICBtX3N0eWxlRGlzYWJsZWRQcm9wZXJ0
aWVzLnJlbW92ZShzdHlsZSk7CisgICAgZWxzZSB7CisgICAgICAgIEhhc2hNYXA8Q1NTU3R5bGVE
ZWNsYXJhdGlvbiosIERpc2FibGVkUHJvcGVydHlTdG9yZT46Oml0ZXJhdG9yIGl0ID0gbV9zdHls
ZURpc2FibGVkUHJvcGVydGllcy5zZXQoc3R5bGUsIERpc2FibGVkUHJvcGVydHlTdG9yZSgpKS5m
aXJzdDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IGRpc2FibGVkUHJvcGVy
dGllcy0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICBpdC0+c2Vjb25kLmFw
cGVuZChEaXNhYmxlZFByb3BlcnR5Ojpmcm9tSW5zcGVjdG9yVmFsdWUoZGlzYWJsZWRQcm9wZXJ0
aWVzLT5nZXQoaSkpKTsKKyAgICB9CiB9CiAKIERvY3VtZW50KiBJbnNwZWN0b3JTdHlsZVNoZWV0
Ojpvd25lckRvY3VtZW50KCkgY29uc3QKQEAgLTQ0NCw4ICs2NzMsMTAgQEAgdm9pZCBJbnNwZWN0
b3JTdHlsZVNoZWV0OjpyZXZhbGlkYXRlU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogcGFnZVN0
eWxlKQogICAgICAgICBpZiAoIXBhcnNlZFJ1bGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgaWYgKHBhcnNlZFJ1bGUtPnN0eWxlKCkgPT0gcGFnZVN0eWxlKSB7Ci0gICAgICAgICAg
ICBpZiAocGFyc2VkUnVsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpICE9IHBhZ2VTdHlsZS0+Y3NzVGV4
dCgpKQorICAgICAgICAgICAgaWYgKHBhcnNlZFJ1bGUtPnN0eWxlKCktPmNzc1RleHQoKSAhPSBw
YWdlU3R5bGUtPmNzc1RleHQoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQg
d2UgY2xlYXIgdGhlIGRpc2FibGVkIHByb3BlcnRpZXMgZm9yIHRoZSBpbnZhbGlkIHN0eWxlIGhl
cmU/CiAgICAgICAgICAgICAgICAgaW5uZXJTZXRTdHlsZVRleHQocGFnZVN0eWxlLCBwYWdlU3R5
bGUtPmNzc1RleHQoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgIH0KQEAgLTQ2NSw3ICs2OTYsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6
OnN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAogCiBib29sIEluc3BlY3RvclN0
eWxlU2hlZXQ6OnJlc291cmNlU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0CiB7
Ci0gICAgaWYgKCFtX3BhZ2VTdHlsZVNoZWV0KQorICAgIGlmICghbV9wYWdlU3R5bGVTaGVldCB8
fCAhb3duZXJEb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4g
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzb3VyY2VDb250ZW50KG93bmVyRG9jdW1lbnQoKS0+
ZnJhbWUoKSwgbV9wYWdlU3R5bGVTaGVldC0+ZmluYWxVUkwoKSwgcmVzdWx0KTsKQEAgLTUxMyw4
ICs3NDQsNyBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0
eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShjb25zdCBTdHJpbgogCiBib29sIEluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZTo6c2V0U3R5bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwg
Y29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIEFTU0VSVChzdHlsZUlkID09ICIwIik7Ci0gICAg
VU5VU0VEX1BBUkFNKHN0eWxlSWQpOworICAgIEFTU0VSVF9VTlVTRUQoc3R5bGVJZCwgc3R5bGVJ
ZCA9PSAiMCIpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIG1fZWxlbWVudC0+c2V0
QXR0cmlidXRlKCJzdHlsZSIsIHRleHQsIGVjKTsKICAgICBtX3J1bGVTb3VyY2VEYXRhLmNsZWFy
KCk7CkBAIC01NDEsNiArNzcxLDE0IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlOjplbnN1cmVQYXJzZWREYXRhUmVhZHkoKQogICAgIHJldHVybiB0cnVlOwogfQogCit2
b2lkIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6c2V0RGlzYWJsZWRQcm9wZXJ0
aWVzRm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGRpc2FibGVkUHJvcGVydGllcykKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0eWxl
LCBzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsKKyAgICBtX2Rpc2FibGVkUHJvcGVydGllcy5jbGVh
cigpOworICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBkaXNhYmxlZFByb3BlcnRpZXMt
Pmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBtX2Rpc2FibGVkUHJvcGVydGllcy5h
cHBlbmQoRGlzYWJsZWRQcm9wZXJ0eTo6ZnJvbUluc3BlY3RvclZhbHVlKGRpc2FibGVkUHJvcGVy
dGllcy0+Z2V0KGkpKSk7Cit9CisKIENTU1N0eWxlRGVjbGFyYXRpb24qIEluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZTo6aW5saW5lU3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBt
X2VsZW1lbnQtPnN0eWxlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdHlsZVNoZWV0LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgK
aW5kZXggMzhhYjc3Ny4uMjE4YWQ5MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3R5bGVTaGVldC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuaApAQCAtMjYsMTYgKzI2LDE0IEBACiAjZGVmaW5lIEluc3BlY3RvclN0eWxlU2hlZXRf
aAogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgogCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIGNsYXNzIFBhcnNlZFN0eWxlU2hlZXQ7CiAKQEAg
LTQzLDExICs0MSw3MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1J1bGVMaXN0
OwogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFz
cyBEb2N1bWVudDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBOb2RlOwogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKIAorc3RydWN0IEluc3BlY3RvclN0eWxlUHJvcGVydHkgeworICAgIEluc3BlY3Rv
clN0eWxlUHJvcGVydHkoKQorICAgIHsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5U291cmNlRGF0YSBwcm9wZXJ0eSwgYm9vbCBoYXNTb3VyY2UsIGJvb2wg
ZGlzYWJsZWQpCisgICAgICAgIDogcHJvcGVydHkocHJvcGVydHkpCisgICAgICAgICwgaGFzU291
cmNlKGhhc1NvdXJjZSkKKyAgICAgICAgLCBkaXNhYmxlZChkaXNhYmxlZCkKKyAgICB7CisgICAg
fQorCisgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhIHByb3BlcnR5OworICAgIGJvb2wgaGFzU291
cmNlOworICAgIGJvb2wgZGlzYWJsZWQ7Cit9OworCitzdHJ1Y3QgRGlzYWJsZWRQcm9wZXJ0eSB7
CisgICAgc3RhdGljIERpc2FibGVkUHJvcGVydHkgZnJvbUluc3BlY3RvclZhbHVlKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsKKyAgICBEaXNhYmxlZFByb3BlcnR5KGNvbnN0IFN0
cmluZyYgdGV4dCwgdW5zaWduZWQgb2Zmc2V0KQorICAgICAgICA6IHRleHQodGV4dCkKKyAgICAg
ICAgLCBvZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHRvSW5zcGVjdG9yT2JqZWN0KCk7CisKKyAgICBTdHJpbmcgdGV4dDsKKyAgICB1
bnNpZ25lZCBvZmZzZXQ7Cit9OworCit0eXBlZGVmIFZlY3RvcjxEaXNhYmxlZFByb3BlcnR5PiBE
aXNhYmxlZFByb3BlcnR5U3RvcmU7CisKK2NsYXNzIEluc3BlY3RvclN0eWxlIHsKK3B1YmxpYzoK
KyAgICBJbnNwZWN0b3JTdHlsZShjb25zdCBTdHJpbmcmIGZ1bGxTdHlsZUlkLCBDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSwgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0
YSwgRGlzYWJsZWRQcm9wZXJ0eVN0b3JlKiBkaXNhYmxlZFByb3BlcnRpZXMpCisgICAgICAgIDog
bV9pZChmdWxsU3R5bGVJZCkKKyAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQorICAgICAgICAsIG1f
c291cmNlRGF0YShzb3VyY2VEYXRhKQorICAgICAgICAsIG1fZGlzYWJsZWRQcm9wZXJ0aWVzKGRp
c2FibGVkUHJvcGVydGllcykKKyAgICB7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBJ
bnNwZWN0b3JTdHlsZVByb3BlcnR5IGRpc2FibGVkSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eSh1bnNp
Z25lZCBkaXNhYmxlZEluZGV4KSBjb25zdDsKKyAgICB2b2lkIHBvcHVsYXRlQWxsUHJvcGVydGll
cyhWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4qIHJlc3VsdCkgY29uc3Q7CisgICAgdm9p
ZCBwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoSW5zcGVjdG9yT2JqZWN0KiByZXN1
bHQpIGNvbnN0OworICAgIFN0cmluZyBzaG9ydGhhbmRWYWx1ZShjb25zdCBTdHJpbmcmIHNob3J0
aGFuZFByb3BlcnR5KSBjb25zdDsKKyAgICBTdHJpbmcgc2hvcnRoYW5kUHJpb3JpdHkoY29uc3Qg
U3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkgY29uc3Q7CisgICAgVmVjdG9yPFN0cmluZz4gbG9u
Z2hhbmRQcm9wZXJ0aWVzKGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpIGNvbnN0Owor
CisgICAgU3RyaW5nIG1faWQ7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogbV9zdHlsZTsKKyAg
ICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IG1fc291cmNlRGF0YTsKKyAgICBEaXNhYmxlZFBy
b3BlcnR5U3RvcmUqIG1fZGlzYWJsZWRQcm9wZXJ0aWVzOworfTsKKwogY2xhc3MgSW5zcGVjdG9y
U3R5bGVTaGVldCA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvclN0eWxlU2hlZXQ+IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBjcmVhdGUo
Y29uc3QgU3RyaW5nJiBpZCwgQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIGNvbnN0IFN0
cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMKQpAQCAtNjQsMTEgKzEyMiwx
MiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRSdWxlU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBydWxl
SWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOwogICAgIENTU1N0eWxlUnVsZSogYWRkUnVsZShj
b25zdCBTdHJpbmcmIHNlbGVjdG9yKTsKICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGVGb3JJZChjb25z
dCBTdHJpbmcmKSBjb25zdDsKKyAgICB2b2lkIHBvcHVsYXRlQWxsUHJvcGVydGllcyhjb25zdCBT
dHJpbmcmIHN0eWxlSWQsIFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiogcmVzdWx0KTsK
ICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0
KCk7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUnVsZShD
U1NTdHlsZVJ1bGUqKTsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmpl
Y3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7CisgICAgYm9vbCBzZXRTdHlsZShjb25z
dCBTdHJpbmcmIHN0eWxlSWQsIEluc3BlY3Rvck9iamVjdCogc3R5bGVPYmplY3QpOwogICAgIHZp
cnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChjb25zdCBTdHJpbmcmKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgc2V0U3R5bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwg
Y29uc3QgU3RyaW5nJiB0ZXh0KTsKIAogcHJvdGVjdGVkOgogICAgIGJvb2wgY2FuQmluZCgpIGNv
bnN0IHsgcmV0dXJuIG1fb3JpZ2luICE9ICJ1c2VyQWdlbnQiICYmIG1fb3JpZ2luICE9ICJ1c2Vy
IjsgfQpAQCAtNzgsNiArMTM3LDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgUmVmUHRyPENT
U1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBydWxlSW5kZXhCeVN0eWxlKENTU1N0
eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUGFyc2VkRGF0
YVJlYWR5KCk7CisgICAgdmlydHVhbCB2b2lkIHNldERpc2FibGVkUHJvcGVydGllc0ZvclN0eWxl
KENTU1N0eWxlRGVjbGFyYXRpb24qLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkaXNhYmxl
ZFByb3BlcnRpZXMpOworICAgIHZpcnR1YWwgRGlzYWJsZWRQcm9wZXJ0eVN0b3JlKiBkaXNhYmxl
ZFByb3BlcnR5U3RvcmVGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7CiAKIHByaXZhdGU6
CiAgICAgYm9vbCB0ZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdDsKQEAgLTEwMSw2ICsxNjIsNyBA
QCBwcml2YXRlOgogICAgIFN0cmluZyBtX2RvY3VtZW50VVJMOwogICAgIGJvb2wgbV9pc1JldmFs
aWRhdGluZzsKICAgICBQYXJzZWRTdHlsZVNoZWV0KiBtX3BhcnNlZFN0eWxlU2hlZXQ7CisgICAg
SGFzaE1hcDxDU1NTdHlsZURlY2xhcmF0aW9uKiwgRGlzYWJsZWRQcm9wZXJ0eVN0b3JlPiBtX3N0
eWxlRGlzYWJsZWRQcm9wZXJ0aWVzOwogfTsKIAogY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlIDogcHVibGljIEluc3BlY3RvclN0eWxlU2hlZXQgewpAQCAtMTExLDE0ICsx
NzMsMTYgQEAgcHVibGljOgogICAgIH0KIAogICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxp
bmVTdHlsZShjb25zdCBTdHJpbmcmIGlkLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcm
IG9yaWdpbik7Ci0gICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZUZvcklkKGNv
bnN0IFN0cmluZyYgaWQpIGNvbnN0IHsgQVNTRVJUKGlkID09ICIwIik7IFVOVVNFRF9QQVJBTShp
ZCk7IHJldHVybiBpbmxpbmVTdHlsZSgpOyB9CisgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZUZvcklkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0IHsgQVNTRVJUX1VOVVNFRChp
ZCwgaWQgPT0gIjAiKTsgcmV0dXJuIGlubGluZVN0eWxlKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wg
c2V0U3R5bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsK
IAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFG
b3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0IHsgQVNTRVJUKHN0eWxlID09IGlu
bGluZVN0eWxlKCkpOyBVTlVTRURfUEFSQU0oc3R5bGUpOyByZXR1cm4gbV9ydWxlU291cmNlRGF0
YTsgfQorICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0
YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyBBU1NFUlRfVU5VU0VEKHN0
eWxlLCBzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsgcmV0dXJuIG1fcnVsZVNvdXJjZURhdGE7IH0K
ICAgICB2aXJ0dWFsIHVuc2lnbmVkIHJ1bGVJbmRleEJ5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlv
biopIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUGFyc2VkRGF0
YVJlYWR5KCk7CisgICAgdmlydHVhbCB2b2lkIHNldERpc2FibGVkUHJvcGVydGllc0ZvclN0eWxl
KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBk
aXNhYmxlZFByb3BlcnRpZXMpOworICAgIHZpcnR1YWwgRGlzYWJsZWRQcm9wZXJ0eVN0b3JlKiBk
aXNhYmxlZFByb3BlcnR5U3RvcmVGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwg
Ym9vbCkgeyBBU1NFUlRfVU5VU0VEKHN0eWxlLCBzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsgcmV0
dXJuICZtX2Rpc2FibGVkUHJvcGVydGllczsgfQogCiBwcml2YXRlOgogICAgIENTU1N0eWxlRGVj
bGFyYXRpb24qIGlubGluZVN0eWxlKCkgY29uc3Q7CkBAIC0xMjYsNiArMTkwLDcgQEAgcHJpdmF0
ZToKIAogICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURh
dGE+IG1fcnVsZVNvdXJjZURhdGE7CisgICAgRGlzYWJsZWRQcm9wZXJ0eVN0b3JlIG1fZGlzYWJs
ZWRQcm9wZXJ0aWVzOwogfTsKIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71539</attachid>
            <date>2010-10-22 03:03:51 -0700</date>
            <delta_ts>2010-10-22 06:22:09 -0700</delta_ts>
            <desc>[PATCH] Rewrote the API according to the latest chat with pfeldman</desc>
            <filename>toggle.patch</filename>
            <type>text/plain</type>
            <size>57663</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IGFhZjZjMmYzOGFjM2IwN2FkZjVkN2IwN2EzZjZmZGU1MTcxNWNiZTQKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBGcmkgT2N0IDE1
IDE1OjE3OjU4IDIwMTAgKzA0MDAKCiAgICBQcmVwYXJlIHRvZ2dsZWQgcHJvcGVydGllcyBmb3Ig
Y29tbWl0CgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA1MjljNzdiLi41YTNhOGY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDEwLTEwLTIyICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogSW1wbGVtZW50IHBy
b3BlcnR5IHRvZ2dsaW5nIGluIEluc3BlY3RvckNTU0FnZW50CisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgaW1wbGVtZW50cyBlbmFibGVtZW50L2Rpc2FibGVtZW50IGFuZCBzZXR0aW5nIG9mIHN0eWxl
IHByb3BlcnRpZXMuCisgICAgICAgIERpc2FibGVkIHByb3BlcnRpZXMgYXJlIHBlcnNpc3RlZCBp
biB0aGUgKHVwcGVyLWxldmVsKSBzY29wZSBvZiBJbnNwZWN0b3JTdHlsZVNoZWV0LgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczMzkKKworICAgICAg
ICBEcml2ZS1ieTogZml4ZXMgZm9yIHRoZSBXZWIgSW5zcGVjdG9yIFByb3RvY29sIGZvcm1hdC4K
KworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUyKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpzZXRQcm9wZXJ0eVRleHQyKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eTIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcjIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRl
U3R5bGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZTo6c2V0UHJvcGVydHlUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0eWxlOjp0b2dnbGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JTdHlsZTo6ZGlzYWJsZWRJbmRleEJ5T3JkaW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JTdHlsZTo6cGFnZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
OjpzdHlsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OmRpc2FibGVQ
cm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6ZW5hYmxlUHJvcGVy
dHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OnBvcHVsYXRlQWxsUHJvcGVy
dGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6cG9wdWxhdGVPYmplY3RX
aXRoU3R5bGVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpz
aGlmdERpc2FibGVkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHls
ZTo6cmVwbGFjZVByb3BlcnR5SW5TdHlsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3R5bGU6OnNob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0
eWxlOjpzaG9ydGhhbmRQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHls
ZTo6bG9uZ2hhbmRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
U2hlZXQ6OnNldFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6
c2V0UnVsZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6
OmFkZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YmplY3RGb3JTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hl
ZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHls
ZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clN0eWxlU2hlZXQ6OnNldFByb3BlcnR5VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JTdHlsZVNoZWV0Ojp0b2dnbGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0eWxlU2hlZXQ6OnJlbWVtYmVySW5zcGVjdG9yU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlVGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRTdHlsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFRleHRXaXRoQ2hhbmdlZFN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnJldmFsaWRhdGVTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpvcmlnaW5hbFN0eWxlU2hlZXRU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnJlc291cmNlU3R5
bGVTaGVldFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpzZXRTdHlsZVRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpp
bnNwZWN0b3JTdHlsZUZvcklkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29tcG91bmRJZDo6SW5zcGVjdG9y
Q29tcG91bmRJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb21wb3VuZElkOjpwYXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbXBvdW5kSWQ6OnBhcnRDb3VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb21wb3VuZElkOjphcHBlbmRQYXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbXBvdW5kSWQ6OmFzU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0eWxlUHJvcGVydHk6Okluc3BlY3RvclN0eWxlUHJvcGVydHkpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZTo6SW5zcGVjdG9yU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpzdHlsZUZvcklkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6cnVsZVNvdXJjZURh
dGFGb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlOjpyZW1lbWJlckluc3BlY3RvclN0eWxlKToKKwogMjAxMC0xMC0yMiAgWm9sdGFuIEhlcmN6
ZWcgIDx6aGVyY3plZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpcmsgU2No
dWx6ZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCBlMGZhYjg1
Li41YzE4MWZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC00
OSw3ICs0OSw4IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KIAotCisvLyBDdXJyZW50bHkgaW1wbGVtZW50ZWQgbW9kZWw6CisvLwogLy8g
Y3NzUHJvcGVydHkgPSB7CiAvLyAgICBuYW1lICAgICAgICAgIDogPHN0cmluZz4sCiAvLyAgICB2
YWx1ZSAgICAgICAgIDogPHN0cmluZz4sCkBAIC02Miw4NSArNjMsNTcgQEAKIC8vICAgIGVuZE9m
ZnNldCAgICAgOiA8bnVtYmVyPiwgLy8gT3B0aW9uYWwgLSBwcm9wZXJ0eSB0ZXh0IGVuZCBvZmZz
ZXQgaW4gZW5jbG9zaW5nIHN0eWxlIGRlY2xhcmF0aW9uLiBBYnNlbnQgZm9yIGNvbXB1dGVkIHN0
eWxlcyBhbmQgc3VjaC4KIC8vIH0KIC8vCisvLyBuYW1lICsgdmFsdWUgKyBwcmlvcml0eSA6IHBy
ZXNlbnQgd2hlbiB0aGUgcHJvcGVydHkgaXMgZW5hYmxlZAorLy8gdGV4dCAgICAgICAgICAgICAg
ICAgICAgOiBwcmVzZW50IHdoZW4gdGhlIHByb3BlcnR5IGlzIGRpc2FibGVkCisvLworLy8gRm9y
IGRpc2FibGVkIHByb3BlcnRpZXMsIHN0YXJ0T2Zmc2V0ID09PSBlbmRPZmZzZXQgPT09IGluc2Vy
dGlvbiBwb2ludCBmb3IgdGhlIHByb3BlcnR5LgorLy8KIC8vIHN0YXR1czoKIC8vICJkaXNhYmxl
ZCIgPT0gcHJvcGVydHkgZGlzYWJsZWQgYnkgdXNlcgogLy8gImFjdGl2ZSIgPT0gcHJvcGVydHkg
cGFydGljaXBhdGVzIGluIHRoZSBjb21wdXRlZCBzdHlsZSBjYWxjdWxhdGlvbgogLy8gImluYWN0
aXZlIiA9PSBwcm9wZXJ0eSBkb2VzIG5vIHBhcnRpY2lwYXRlIGluIHRoZSBjb21wdXRlZCBzdHls
ZSBjYWxjdWxhdGlvbiAoaS5lLiBvdmVycmlkZGVuIGJ5IGEgc3Vic2VxdWVudCBwcm9wZXJ0eSB3
aXRoIHRoZSBzYW1lIG5hbWUpCiAvLyAic3R5bGUiID09IHByb3BlcnR5IGlzIGFjdGl2ZSBhbmQg
b3JpZ2luYXRlcyBmcm9tIHRoZSBXZWJDb3JlIENTU1N0eWxlRGVjbGFyYXRpb24gcmF0aGVyIHRo
YW4gQ1NTIHNvdXJjZSBjb2RlIChlLmcuIGltcGxpY2l0IGxvbmdoYW5kIHByb3BlcnRpZXMpCiAv
LwotLy8KIC8vIGNzc1N0eWxlID0gewotLy8gICAgc3R5bGVJZCAgICAgICAgIDogPG51bWJlcj4s
IC8vIE9wdGlvbmFsCi0vLyAgICBzdHlsZVNoZWV0SWQgICAgOiA8bnVtYmVyPiwgLy8gUGFyZW50
OiAtMSBmb3IgaW5saW5lIHN0eWxlcyAoPGZvbyBzdHlsZT0iLi4iPikKLS8vICAgIGNzc1Byb3Bl
cnRpZXMgICA6IFsKKy8vICAgIHN0eWxlSWQgICAgICAgICAgICA6IDxzdHJpbmc+LCAvLyBPcHRp
b25hbAorLy8gICAgY3NzUHJvcGVydGllcyAgICAgIDogWwogLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICNjc3NQcm9wZXJ0eSwKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAjY3NzUHJvcGVydHkKLS8vICAgICAgICAgICAgICAg
ICAgICBdLAotLy8gICAgc2hvcnRoYW5kVmFsdWVzIDogeworLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgXSwKKy8vICAgIHNob3J0aGFuZFZhbHVlcyAgICA6IHsKIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaG9ydGhhbmROYW1lMSA6IHNob3J0aGFuZFZhbHVlMSwKIC8vICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaG9ydGhhbmROYW1lMiA6IHNob3J0aGFuZFZhbHVlMgotLy8gICAg
ICAgICAgICAgICAgICAgICAgfSwKLS8vICAgIGNzc1RleHQgICAgICAgICA6IDxzdHJpbmc+LCAv
LyBkZWNsYXJhdGlvbiB0ZXh0Ci0vLyAgICBwcm9wZXJ0aWVzICAgICAgOiB7IH0gLy8gPz8/Cisv
LyAgICAgICAgICAgICAgICAgICAgICAgICB9LAorLy8gICAgY3NzVGV4dCAgICAgICAgICAgIDog
PHN0cmluZz4sIC8vIE9wdGlvbmFsIC0gZGVjbGFyYXRpb24gdGV4dAorLy8gICAgcHJvcGVydGll
cyAgICAgICAgIDogeyB3aWR0aCwgaGVpZ2h0IH0KIC8vIH0KIC8vCi0vLyAvLyBUT0RPOgotLy8g
Ly8gLSBjb252ZXJ0IGRpc2FibGVkUHJvcGVydGllcyB0byBlbmFibGVkIGZsYWcuCi0vLyAvLyAt
IGNvbnZlcnQgd2lkdGgsIGhlaWdodCB0byBwcm9wZXJ0aWVzCi0vLwogLy8gY3NzUnVsZSA9IHsK
LS8vICAgIHJ1bGVJZCAgICAgICA6IDxudW1iZXI+LAotLy8gICAgc2VsZWN0b3JUZXh0IDogPHN0
cmluZz4KLS8vICAgIHNvdXJjZVVSTCAgICA6IDxzdHJpbmc+Ci0vLyAgICBzb3VyY2VMaW5lICAg
OiA8c3RyaW5nPgotLy8gICAgc3R5bGVTaGVldElkIDogPG51bWJlcj4gLy8gYWxzbyBmb3VuZCBp
biBzdHlsZQotLy8gICAgb3JpZ2luICAgICAgIDogPHN0cmluZz4gLy8gIiIgfHwgInVzZXItYWdl
bnQiIHx8ICJ1c2VyIiB8fCAiaW5zcGVjdG9yIgorLy8gICAgcnVsZUlkICAgICAgIDogPHN0cmlu
Zz4sIC8vIE9wdGlvbmFsCisvLyAgICBzZWxlY3RvclRleHQgOiA8c3RyaW5nPiwKKy8vICAgIHNv
dXJjZVVSTCAgICA6IDxzdHJpbmc+LAorLy8gICAgc291cmNlTGluZSAgIDogPHN0cmluZz4sCisv
LyAgICBvcmlnaW4gICAgICAgOiA8c3RyaW5nPiwgLy8gIiIgfHwgInVzZXItYWdlbnQiIHx8ICJ1
c2VyIiB8fCAiaW5zcGVjdG9yIgogLy8gICAgc3R5bGUgICAgICAgIDogI2Nzc1N0eWxlCiAvLyB9
CiAvLwotLy8gLy8gVE9ETzoKLS8vIC8vIC0gZml4IG9yaWdpbgotLy8gLy8gLSBhZGQgc291cmNl
VVJMCi0vLyAvLyAtIGZpeCBwYXJlbnRTdHlsZVNoZWV0SWQKLS8vCiAvLyBjc3NTdHlsZVNoZWV0
ID0gewogLy8gICAgc3R5bGVTaGVldElkICAgOiA8bnVtYmVyPgotLy8gICAgaHJlZiAgICAgICAg
ICAgOiA8c3RyaW5nPgorLy8gICAgc291cmNlVVJMICAgICAgOiA8c3RyaW5nPgogLy8gICAgdGl0
bGUgICAgICAgICAgOiA8c3RyaW5nPgogLy8gICAgZGlzYWJsZWQgICAgICAgOiA8Ym9vbGVhbj4K
LS8vICAgIGRvY3VtZW50Tm9kZUlkIDogPG51bWJlcj4KIC8vICAgIHJ1bGVzICAgICAgICAgIDog
WwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgI2Nzc1J1bGUsCiAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAuLi4KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICNjc3NSdWxlCiAvLyAg
ICAgICAgICAgICAgICAgICAgIF0KKy8vICAgIHRleHQgICAgICAgICAgIDogPHN0cmluZz4gLy8g
T3B0aW9uYWwgLSB3aGVuZXZlciB0aGUgdGV4dCBpcyBhdmFpbGFibGUgZm9yIGEgdGV4dC1iYXNl
ZCBzdHlsZXNoZWV0CiAvLyB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gc3RhdGljCi1Q
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgZnVsbFN0
eWxlSWQsIENTU1N0eWxlU291cmNlRGF0YSogc291cmNlRGF0YSkKLXsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGlm
ICghZnVsbFN0eWxlSWQuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHQtPnNldFN0cmluZygiaWQi
LCBmdWxsU3R5bGVJZCk7Ci0KLSAgICByZXN1bHQtPnNldFN0cmluZygid2lkdGgiLCBzdHlsZS0+
Z2V0UHJvcGVydHlWYWx1ZSgid2lkdGgiKSk7Ci0gICAgcmVzdWx0LT5zZXRTdHJpbmcoImhlaWdo
dCIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSk7Ci0gICAgVmVjdG9yPENTU1By
b3BlcnR5U291cmNlRGF0YT4qIHByb3BlcnR5RGF0YSA9IDA7Ci0KLSAgICBpZiAoc291cmNlRGF0
YSkgewotICAgICAgICByZXN1bHQtPnNldE51bWJlcigic3RhcnRPZmZzZXQiLCBzb3VyY2VEYXRh
LT5zdHlsZUJvZHlSYW5nZS5zdGFydCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJlbmRP
ZmZzZXQiLCBzb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5lbmQpOwotICAgICAgICBwcm9wZXJ0
eURhdGEgPSAmc291cmNlRGF0YS0+cHJvcGVydHlEYXRhOwotICAgIH0KLSAgICBwb3B1bGF0ZU9i
amVjdFdpdGhTdHlsZVByb3BlcnRpZXMoc3R5bGUsIHJlc3VsdC5nZXQoKSwgcHJvcGVydHlEYXRh
KTsKLQotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQotCi0vLyBzdGF0aWMKIENTU1N0
eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpwYXJlbnRTdHlsZVNoZWV0KFN0eWxlQmFzZSog
c3R5bGVCYXNlKQogewogICAgIGlmICghc3R5bGVCYXNlKQpAQCAtMTY0LDcgKzEzNyw2IEBAIENT
U1N0eWxlUnVsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzQ1NTU3R5bGVSdWxlKFN0eWxlQmFzZSog
c3R5bGVCYXNlKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxlKTsK
IH0KIAotCiBJbnNwZWN0b3JDU1NBZ2VudDo6SW5zcGVjdG9yQ1NTQWdlbnQoSW5zcGVjdG9yRE9N
QWdlbnQqIGRvbUFnZW50LCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAgICAgOiBtX2Rv
bUFnZW50KGRvbUFnZW50KQogICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKQEAgLTI0Niw3ICsy
MTgsMTAgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUy
KGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmEKICAgICBpZiAoIWRlZmF1bHRWaWV3KQog
ICAgICAgICByZXR1cm47CiAKLSAgICAqc3R5bGUgPSBidWlsZE9iamVjdEZvclN0eWxlKGRlZmF1
bHRWaWV3LT5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsICIiKS5nZXQoKSwgIiIpOworICAgIFJl
ZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlID0gZGVmYXVsdFZpZXctPmdl
dENvbXB1dGVkU3R5bGUoZWxlbWVudCwgIiIpOworICAgIFZlY3RvcjxJbnNwZWN0b3JTdHlsZVBy
b3BlcnR5PiBwcm9wZXJ0aWVzOworICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9y
U3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKGNvbXB1dGVkU3R5bGUuZ2V0KCkpOworICAg
ICpzdHlsZSA9IGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEluaGVyaXRlZFN0eWxlc0Zvck5vZGUyKGxvbmcgbm9k
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBzdHlsZSkKQEAgLTMwOCwzOCArMjgzLDQ0IEBA
IHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0Mihjb25zdCBTdHJpbmcm
IHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyCiAgICAgaW5zcGVjdG9yU3R5bGVTaGVldC0+c2V0VGV4
dCh0ZXh0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVUZXh0Mihjb25z
dCBTdHJpbmcmIGZ1bGxTdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3BlcnR5VGV4
dDIoY29uc3QgU3RyaW5nJiBmdWxsU3R5bGVJZCwgbG9uZyBwcm9wZXJ0eUluZGV4LCBjb25zdCBT
dHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1
bHQpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gaWRQYXJ0czsKLSAgICBmdWxsU3R5bGVJZC5zcGxp
dCgnOicsIGlkUGFydHMpOwotICAgIEFTU0VSVChpZFBhcnRzLnNpemUoKSA9PSAyKTsKKyAgICBJ
bnNwZWN0b3JDb21wb3VuZElkIGNvbXBvdW5kSWQoZnVsbFN0eWxlSWQpOworICAgIEFTU0VSVChj
b21wb3VuZElkLnBhcnRDb3VudCgpID09IDIpOwogCi0gICAgSW5zcGVjdG9yU3R5bGVTaGVldCog
aW5zcGVjdG9yU3R5bGVTaGVldCA9IHN0eWxlU2hlZXRGb3JJZChpZFBhcnRzLmF0KDApKTsKKyAg
ICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gc3R5bGVTaGVldEZv
cklkKGNvbXBvdW5kSWQucGFydCgwKSk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQtPnNldFN0eWxl
VGV4dChpZFBhcnRzLmF0KDEpLCB0ZXh0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgKnJlc3Vs
dCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5
bGVTaGVldC0+c3R5bGVGb3JJZChpZFBhcnRzLmF0KDEpKSk7CisgICAgYm9vbCBzdWNjZXNzID0g
aW5zcGVjdG9yU3R5bGVTaGVldC0+c2V0UHJvcGVydHlUZXh0KGNvbXBvdW5kSWQucGFydCgxKSwg
cHJvcGVydHlJbmRleCwgdGV4dCwgb3ZlcndyaXRlKTsKKyAgICBpZiAoc3VjY2VzcykKKyAgICAg
ICAgKnJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5z
cGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJZChjb21wb3VuZElkLnBhcnQoMSkpKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkyKGNvbnN0IFN0cmluZyYsIGxv
bmcsIGJvb2wpCit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eTIoY29uc3Qg
U3RyaW5nJiBmdWxsU3R5bGVJZCwgbG9uZyBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKIHsKLSAgICAvLyBGSVhNRShhcGF2bG92KTog
aW1wbGVtZW50CisgICAgSW5zcGVjdG9yQ29tcG91bmRJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlk
KTsKKyAgICBBU1NFUlQoY29tcG91bmRJZC5wYXJ0Q291bnQoKSA9PSAyKTsKKworICAgIEluc3Bl
Y3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoY29t
cG91bmRJZC5wYXJ0KDApKTsKKyAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCisgICAgICAg
IHJldHVybjsKKworICAgIGJvb2wgc3VjY2VzcyA9IGluc3BlY3RvclN0eWxlU2hlZXQtPnRvZ2ds
ZVByb3BlcnR5KGNvbXBvdW5kSWQucGFydCgxKSwgcHJvcGVydHlJbmRleCwgZGlzYWJsZSk7Cisg
ICAgaWYgKHN1Y2Nlc3MpCisgICAgICAgICpyZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5i
dWlsZE9iamVjdEZvclN0eWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoY29tcG91
bmRJZC5wYXJ0KDEpKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxl
Y3RvcjIoY29uc3QgU3RyaW5nJiBmdWxsUnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gaWRQ
YXJ0czsKLSAgICBmdWxsUnVsZUlkLnNwbGl0KCc6JywgaWRQYXJ0cyk7Ci0gICAgQVNTRVJUKGlk
UGFydHMuc2l6ZSgpID09IDIpOworICAgIEluc3BlY3RvckNvbXBvdW5kSWQgY29tcG91bmRJZChm
dWxsUnVsZUlkKTsKKyAgICBBU1NFUlQoY29tcG91bmRJZC5wYXJ0Q291bnQoKSA9PSAyKTsKIAot
ICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0
Rm9ySWQoaWRQYXJ0cy5hdCgwKSk7CisgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9y
U3R5bGVTaGVldCA9IHN0eWxlU2hlZXRGb3JJZChjb21wb3VuZElkLnBhcnQoMCkpOwogICAgIGlm
ICghaW5zcGVjdG9yU3R5bGVTaGVldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgU3Ry
aW5nJiBydWxlSWQgPSBpZFBhcnRzLmF0KDEpOworICAgIGNvbnN0IFN0cmluZyYgcnVsZUlkID0g
Y29tcG91bmRJZC5wYXJ0KDEpOwogICAgIGJvb2wgc3VjY2VzcyA9IGluc3BlY3RvclN0eWxlU2hl
ZXQtPnNldFJ1bGVTZWxlY3RvcihydWxlSWQsIHNlbGVjdG9yKTsKICAgICBpZiAoIXN1Y2Nlc3Mp
CiAgICAgICAgIHJldHVybjsKQEAgLTM3OSwxMzAgKzM2MCw2IEBAIEVsZW1lbnQqIEluc3BlY3Rv
ckNTU0FnZW50OjppbmxpbmVTdHlsZUVsZW1lbnQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUp
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKIH0KIAotLy8gc3RhdGlj
Ci12b2lkIEluc3BlY3RvckNTU0FnZW50Ojpwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRp
ZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEluc3BlY3Rvck9iamVjdCogcmVzdWx0LCBW
ZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiogcHJvcGVydHlEYXRhKQotewotICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydGllcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzaG9ydGhhbmRWYWx1ZXMgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiA+IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eTsKLSAgICBIYXNoU2V0
PFN0cmluZz4gZm91bmRTaG9ydGhhbmRzOwotICAgIEhhc2hTZXQ8U3RyaW5nPiBzb3VyY2VQcm9w
ZXJ0eU5hbWVzOwotICAgIGlmIChwcm9wZXJ0eURhdGEpIHsKLSAgICAgICAgZm9yIChWZWN0b3I8
Q1NTUHJvcGVydHlTb3VyY2VEYXRhPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwcm9wZXJ0eURhdGEt
PmJlZ2luKCk7IGl0ICE9IHByb3BlcnR5RGF0YS0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAg
IGNvbnN0IENTU1Byb3BlcnR5U291cmNlRGF0YSYgcHJvcGVydHlFbnRyeSA9ICppdDsKLSAgICAg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHByb3BlcnR5ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIHByb3BlcnRpZXMtPnB1c2hPYmplY3QocHJvcGVydHkp
OwotICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gcHJvcGVydHlFbnRyeS5uYW1lOwot
ICAgICAgICAgICAgc291cmNlUHJvcGVydHlOYW1lcy5hZGQobmFtZSk7Ci0gICAgICAgICAgICBw
cm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+
c2V0U3RyaW5nKCJ2YWx1ZSIsIHByb3BlcnR5RW50cnkudmFsdWUpOwotICAgICAgICAgICAgcHJv
cGVydHktPnNldFN0cmluZygicHJpb3JpdHkiLCBwcm9wZXJ0eUVudHJ5LmltcG9ydGFudCA/ICJp
bXBvcnRhbnQiIDogIiIpOwotICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygic3RhdHVz
IiwgImFjdGl2ZSIpOwotICAgICAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oInBhcnNlZE9r
IiwgcHJvcGVydHlFbnRyeS5wYXJzZWRPayk7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0TnVt
YmVyKCJzdGFydE9mZnNldCIsIHByb3BlcnR5RW50cnkucmFuZ2Uuc3RhcnQpOwotICAgICAgICAg
ICAgcHJvcGVydHktPnNldE51bWJlcigiZW5kT2Zmc2V0IiwgcHJvcGVydHlFbnRyeS5yYW5nZS5l
bmQpOwotICAgICAgICAgICAgaWYgKHByb3BlcnR5RW50cnkucGFyc2VkT2spIHsKLSAgICAgICAg
ICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCBmYWxzZSk7Ci0gICAgICAg
ICAgICAgICAgU3RyaW5nIHNob3J0aGFuZCA9IHN0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChu
YW1lKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1l
Iiwgc2hvcnRoYW5kKTsKLSAgICAgICAgICAgICAgICBpZiAoIXNob3J0aGFuZC5pc0VtcHR5KCkg
JiYgIWZvdW5kU2hvcnRoYW5kcy5jb250YWlucyhzaG9ydGhhbmQpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGZvdW5kU2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKLSAgICAgICAgICAgICAgICAg
ICAgc2hvcnRoYW5kVmFsdWVzLT5zZXRTdHJpbmcoc2hvcnRoYW5kLCBzaG9ydGhhbmRWYWx1ZShz
dHlsZSwgc2hvcnRoYW5kKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCBmYWxz
ZSk7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIs
ICIiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiA+OjppdGVyYXRvciBhY3RpdmVJdCA9IHByb3BlcnR5TmFtZVRvUHJl
dmlvdXNBY3RpdmVQcm9wZXJ0eS5maW5kKG5hbWUpOwotICAgICAgICAgICAgaWYgKGFjdGl2ZUl0
ICE9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5lbmQoKSkgewotICAgICAg
ICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0cmluZygic3RhdHVzIiwgImluYWN0aXZl
Iik7Ci0gICAgICAgICAgICAgICAgYWN0aXZlSXQtPnNlY29uZC0+c2V0U3RyaW5nKCJzaG9ydGhh
bmROYW1lIiwgIiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9Q
cmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChuYW1lLCBwcm9wZXJ0eSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBmb3IgKGludCBpID0gMCwgc2l6ZSA9IHN0eWxlLT5sZW5ndGgoKTsgaSA8IHNp
emU7ICsraSkgewotICAgICAgICBTdHJpbmcgbmFtZSA9IHN0eWxlLT5pdGVtKGkpOwotICAgICAg
ICBpZiAoc291cmNlUHJvcGVydHlOYW1lcy5jb250YWlucyhuYW1lKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIHNvdXJjZVByb3BlcnR5TmFtZXMuYWRkKG5hbWUpOwotICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0eSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgICAgIHByb3BlcnRpZXMtPnB1c2hPYmplY3QocHJvcGVydHkpOwotICAgICAg
ICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7Ci0gICAgICAgIHByb3BlcnR5LT5z
ZXRTdHJpbmcoInZhbHVlIiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUobmFtZSkpOwotICAgICAg
ICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJwcmlvcml0eSIsIHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9y
aXR5KCJuYW1lIikpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCBz
dHlsZS0+aXNQcm9wZXJ0eUltcGxpY2l0KG5hbWUpKTsKLSAgICAgICAgcHJvcGVydHktPnNldEJv
b2xlYW4oInBhcnNlZE9rIiwgdHJ1ZSk7Ci0gICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInN0
YXR1cyIsICJzdHlsZSIpOwotICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gc3R5bGUtPmdldFBy
b3BlcnR5U2hvcnRoYW5kKG5hbWUpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9y
dGhhbmROYW1lIiwgc2hvcnRoYW5kKTsKLSAgICAgICAgaWYgKCFzaG9ydGhhbmQuaXNFbXB0eSgp
ICYmICFmb3VuZFNob3J0aGFuZHMuY29udGFpbnMoc2hvcnRoYW5kKSkgewotICAgICAgICAgICAg
Zm91bmRTaG9ydGhhbmRzLmFkZChzaG9ydGhhbmQpOwotICAgICAgICAgICAgc2hvcnRoYW5kVmFs
dWVzLT5zZXRTdHJpbmcoc2hvcnRoYW5kLCBzaG9ydGhhbmRWYWx1ZShzdHlsZSwgc2hvcnRoYW5k
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXN1bHQtPnNldEFycmF5KCJwcm9wZXJ0aWVz
IiwgcHJvcGVydGllcyk7Ci0gICAgcmVzdWx0LT5zZXRPYmplY3QoInNob3J0aGFuZFZhbHVlcyIs
IHNob3J0aGFuZFZhbHVlcyk7Ci19Ci0KLS8vIHN0YXRpYwotU3RyaW5nIEluc3BlY3RvckNTU0Fn
ZW50OjpzaG9ydGhhbmRWYWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3Ry
aW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkKLXsKLSAgICBTdHJpbmcgdmFsdWUgPSBzdHlsZS0+Z2V0
UHJvcGVydHlWYWx1ZShzaG9ydGhhbmRQcm9wZXJ0eSk7Ci0gICAgaWYgKHZhbHVlLmlzRW1wdHko
KSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmxlbmd0aCgpOyAr
K2kpIHsKLSAgICAgICAgICAgIFN0cmluZyBpbmRpdmlkdWFsUHJvcGVydHkgPSBzdHlsZS0+aXRl
bShpKTsKLSAgICAgICAgICAgIGlmIChzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZp
ZHVhbFByb3BlcnR5KSAhPSBzaG9ydGhhbmRQcm9wZXJ0eSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGlmIChzdHlsZS0+aXNQcm9wZXJ0eUltcGxpY2l0KGluZGl2aWR1
YWxQcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBTdHJp
bmcgaW5kaXZpZHVhbFZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoaW5kaXZpZHVhbFBy
b3BlcnR5KTsKLSAgICAgICAgICAgIGlmIChpbmRpdmlkdWFsVmFsdWUgPT0gImluaXRpYWwiKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCgp
KQotICAgICAgICAgICAgICAgIHZhbHVlLmFwcGVuZCgiICIpOwotICAgICAgICAgICAgdmFsdWUu
YXBwZW5kKGluZGl2aWR1YWxWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHZh
bHVlOwotfQotCi0vLyBzdGF0aWMKLVN0cmluZyBJbnNwZWN0b3JDU1NBZ2VudDo6c2hvcnRoYW5k
UHJpb3JpdHkoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgc2hvcnRo
YW5kUHJvcGVydHkpCi17Ci0gICAgU3RyaW5nIHByaW9yaXR5ID0gc3R5bGUtPmdldFByb3BlcnR5
UHJpb3JpdHkoc2hvcnRoYW5kUHJvcGVydHkpOwotICAgIGlmIChwcmlvcml0eS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlLT5sZW5ndGgoKTsgKytp
KSB7Ci0gICAgICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFByb3BlcnR5ID0gc3R5bGUtPml0ZW0o
aSk7Ci0gICAgICAgICAgICBpZiAoc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1
YWxQcm9wZXJ0eSkgIT0gc2hvcnRoYW5kUHJvcGVydHkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBwcmlvcml0eSA9IHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KGlu
ZGl2aWR1YWxQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gcHJpb3JpdHk7Ci19Ci0KLQotLy8gc3RhdGljCi1WZWN0b3I8U3RyaW5nPiBJ
bnNwZWN0b3JDU1NBZ2VudDo6bG9uZ2hhbmRQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KQotewotICAgIFZlY3RvcjxT
dHJpbmc+IHByb3BlcnRpZXM7Ci0gICAgSGFzaFNldDxTdHJpbmc+IGZvdW5kUHJvcGVydGllczsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmxlbmd0aCgpOyArK2kpIHsKLSAg
ICAgICAgU3RyaW5nIGluZGl2aWR1YWxQcm9wZXJ0eSA9IHN0eWxlLT5pdGVtKGkpOwotICAgICAg
ICBpZiAoZm91bmRQcm9wZXJ0aWVzLmNvbnRhaW5zKGluZGl2aWR1YWxQcm9wZXJ0eSkgfHwgc3R5
bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1YWxQcm9wZXJ0eSkgIT0gc2hvcnRoYW5k
UHJvcGVydHkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3VuZFByb3BlcnRp
ZXMuYWRkKGluZGl2aWR1YWxQcm9wZXJ0eSk7Ci0gICAgICAgIHByb3BlcnRpZXMuYXBwZW5kKGlu
ZGl2aWR1YWxQcm9wZXJ0eSk7Ci0gICAgfQotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotfQotCiBJ
bnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUqIEluc3BlY3RvckNTU0FnZW50Ojphc0lu
c3BlY3RvclN0eWxlU2hlZXQoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBOb2RlVG9JbnNwZWN0
b3JTdHlsZVNoZWV0OjppdGVyYXRvciBpdCA9IG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldC5m
aW5kKGVsZW1lbnQpOwpAQCAtNjIyLDcgKzQ3OSw4IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMoRWxl
CiAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRl
bShpKTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZS0+c3R5bGUoKSkgewogICAgICAgICAgICAgU3Ry
aW5nIGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGUtPmxvY2FsTmFtZSgpOwotICAgICAgICAgICAg
c3R5bGVBdHRyaWJ1dGVzLT5zZXRPYmplY3QoYXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpLCBi
dWlsZE9iamVjdEZvclN0eWxlKGF0dHJpYnV0ZS0+c3R5bGUoKSwgIiIpKTsKKyAgICAgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6
Y3JlYXRlKGF0dHJpYnV0ZS0+c3R5bGUoKSk7CisgICAgICAgICAgICBzdHlsZUF0dHJpYnV0ZXMt
PnNldE9iamVjdChhdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCksIGluc3BlY3RvclN0eWxlLT5i
dWlsZE9iamVjdEZvclN0eWxlKCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCBlYjYwMTNiLi4zNWYyZGY5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmgKQEAgLTU2LDcgKzU2LDYgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckNTU0FnZW50KGRvbUFnZW50LCBmcm9udGVu
ZCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVp
bGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBmdWxs
U3R5bGVJZCwgQ1NTU3R5bGVTb3VyY2VEYXRhKiA9IDApOwogICAgIHN0YXRpYyBDU1NTdHlsZVNo
ZWV0KiBwYXJlbnRTdHlsZVNoZWV0KFN0eWxlQmFzZSopOwogICAgIHN0YXRpYyBDU1NTdHlsZVJ1
bGUqIGFzQ1NTU3R5bGVSdWxlKFN0eWxlQmFzZSopOwogCkBAIC03Myw4ICs3Miw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGdldEFsbFN0eWxlczIoUmVmUHRyPEluc3BlY3RvckFycmF5Piogc3R5bGVz
KTsKICAgICB2b2lkIGdldFN0eWxlU2hlZXQyKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwogICAgIHZvaWQgc2V0U3R5bGVTaGVldFRl
eHQyKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQpOwotICAg
IHZvaWQgc2V0U3R5bGVUZXh0Mihjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYg
dGV4dCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKLSAgICB2b2lkIHRvZ2dsZVBy
b3BlcnR5Mihjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGxvbmcgcHJvcGVydHlPcmRpbmFsLCBib29s
IGRpc2FibGVkKTsKKyAgICB2b2lkIHNldFByb3BlcnR5VGV4dDIoY29uc3QgU3RyaW5nJiBzdHls
ZUlkLCBsb25nIHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBvdmVyd3Jp
dGUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CisgICAgdm9pZCB0b2dnbGVQcm9w
ZXJ0eTIoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCBsb25nIHByb3BlcnR5SW5kZXgsIGJvb2wgZGlz
YWJsZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKICAgICB2b2lkIHNldFJ1bGVT
ZWxlY3RvcjIoY29uc3QgU3RyaW5nJiBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CiAgICAgdm9pZCBhZGRSdWxlMihjb25zdCBs
b25nIGNvbnRleHROb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4qIHJlc3VsdCk7CiAgICAgdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCk7CkBAIC04MiwxNCArODEsMTAgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9y
U3R5bGVTaGVldD4gPiBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKICAgICB0eXBlZGVmIEhhc2hN
YXA8Q1NTU3R5bGVTaGVldCosIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+IENTU1N0eWxl
U2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQ7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPE5vZGUqLCBS
ZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlPiA+IE5vZGVUb0luc3BlY3Rv
clN0eWxlU2hlZXQ7IC8vIGZvciBib2d1cyAic3R5bGVzaGVldHMiIHdpdGggaW5saW5lIG5vZGUg
c3R5bGVzCisgICAgdHlwZWRlZiBIYXNoTWFwPE5vZGUqLCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlPiA+IE5vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQ7IC8vIGJvZ3Vz
ICJzdHlsZXNoZWV0cyIgd2l0aCBlbGVtZW50cycgaW5saW5lIHN0eWxlcwogICAgIHR5cGVkZWYg
SGFzaE1hcDxSZWZQdHI8RG9jdW1lbnQ+LCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gPiBE
b2N1bWVudFRvVmlhSW5zcGVjdG9yU3R5bGVTaGVldDsgLy8gInZpYSBpbnNwZWN0b3IiIHN0eWxl
c2hlZXRzCiAKICAgICBzdGF0aWMgRWxlbWVudCogaW5saW5lU3R5bGVFbGVtZW50KENTU1N0eWxl
RGVjbGFyYXRpb24qKTsKLSAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVBy
b3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIEluc3BlY3Rvck9iamVjdCogcmVzdWx0LCBW
ZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiogcHJvcGVydHlEYXRhKTsKLSAgICBzdGF0aWMg
U3RyaW5nIHNob3J0aGFuZFZhbHVlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcm
IHNob3J0aGFuZFByb3BlcnR5KTsKLSAgICBzdGF0aWMgU3RyaW5nIHNob3J0aGFuZFByaW9yaXR5
KENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KTsK
LSAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9uZ2hhbmRQcm9wZXJ0aWVzKENTU1N0eWxlRGVj
bGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KTsKIAogICAgIEluc3Bl
Y3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogYXNJbnNwZWN0b3JTdHlsZVNoZWV0KEVsZW1l
bnQqIGVsZW1lbnQpOwogICAgIEVsZW1lbnQqIGVsZW1lbnRGb3JJZChsb25nIG5vZGVJZCk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IDExY2Q2NDkuLmM4
ZGJhNWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCkBAIC05
OCw2ICs5OCwzODcgQEAgUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhPiBQYXJzZWRT
dHlsZVNoZWV0OjpydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkIGkKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxk
T2JqZWN0Rm9yU3R5bGUoKSBjb25zdAoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCFtX2Z1bGxJZC5pc0Vt
cHR5KCkpCisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzdHlsZUlkIiwgbV9mdWxsSWQpOwor
CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBwYWdlU3R5bGUoKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0aWVzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBwcm9wZXJ0aWVzT2JqZWN0LT5zZXRTdHJpbmcoIndpZHRoIiwgc3R5bGUt
PmdldFByb3BlcnR5VmFsdWUoIndpZHRoIikpOworICAgIHByb3BlcnRpZXNPYmplY3QtPnNldFN0
cmluZygiaGVpZ2h0Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpKTsKKworICAg
IFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IG1fcGFyZW50U3R5bGVTaGVl
dCA/IG1fcGFyZW50U3R5bGVTaGVldC0+cnVsZVNvdXJjZURhdGFGb3IocGFnZVN0eWxlKCkpIDog
MDsKKyAgICBpZiAoc291cmNlRGF0YSkgeworICAgICAgICBwcm9wZXJ0aWVzT2JqZWN0LT5zZXRO
dW1iZXIoInN0YXJ0T2Zmc2V0Iiwgc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJv
ZHlSYW5nZS5zdGFydCk7CisgICAgICAgIHByb3BlcnRpZXNPYmplY3QtPnNldE51bWJlcigiZW5k
T2Zmc2V0Iiwgc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5lbmQp
OworICAgIH0KKyAgICByZXN1bHQtPnNldE9iamVjdCgicHJvcGVydGllcyIsIHByb3BlcnRpZXNP
YmplY3QpOworCisgICAgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKHJlc3VsdC5n
ZXQoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKworYm9vbCBJbnNwZWN0
b3JTdHlsZTo6c2V0UHJvcGVydHlUZXh0KHVuc2lnbmVkIGluZGV4LCBjb25zdCBTdHJpbmcmIHBy
b3BlcnR5VGV4dCwgYm9vbCBvdmVyd3JpdGUpCit7CisgICAgQVNTRVJUKG1fcGFyZW50U3R5bGVT
aGVldCk7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBwYWdlU3R5bGUoKTsKKyAg
ICBBU1NFUlQoc3R5bGUpOworICAgIGlmICghbV9wYXJlbnRTdHlsZVNoZWV0LT5lbnN1cmVQYXJz
ZWREYXRhUmVhZHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPEluc3Bl
Y3RvclN0eWxlUHJvcGVydHk+IGFsbFByb3BlcnRpZXM7CisgICAgcG9wdWxhdGVBbGxQcm9wZXJ0
aWVzKCZhbGxQcm9wZXJ0aWVzKTsKKworICAgIHVuc2lnbmVkIHByb3BlcnR5U3RhcnQgPSAwOyAv
LyBOZWVkIHRvIGluaXRpYWxpemUgdG8gbWFrZSB0aGUgY29tcGlsZXIgaGFwcHkuCisgICAgbG9u
ZyBwcm9wZXJ0eUxlbmd0aERlbHRhOworCisgICAgaWYgKG92ZXJ3cml0ZSkgeworICAgICAgICBB
U1NFUlQoaW5kZXggPCBhbGxQcm9wZXJ0aWVzLnNpemUoKSk7CisgICAgICAgIEluc3BlY3RvclN0
eWxlUHJvcGVydHkmIHByb3BlcnR5ID0gYWxsUHJvcGVydGllcy5hdChpbmRleCk7CisgICAgICAg
IHByb3BlcnR5U3RhcnQgPSBwcm9wZXJ0eS5zb3VyY2VEYXRhLnJhbmdlLnN0YXJ0OworICAgICAg
ICB1bnNpZ25lZCBwcm9wZXJ0eUVuZCA9IHByb3BlcnR5LnNvdXJjZURhdGEucmFuZ2UuZW5kOwor
ICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBwcm9wZXJ0eUVuZCAtIHByb3BlcnR5U3RhcnQ7
CisgICAgICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IHByb3BlcnR5VGV4dC5sZW5ndGgoKTsKKyAg
ICAgICAgcHJvcGVydHlMZW5ndGhEZWx0YSA9IG5ld0xlbmd0aCAtIG9sZExlbmd0aDsKKworICAg
ICAgICBpZiAoIXByb3BlcnR5LmRpc2FibGVkKSB7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3Mg
PSByZXBsYWNlUHJvcGVydHlJblN0eWxlVGV4dChwcm9wZXJ0eSwgcHJvcGVydHlUZXh0KTsKKyAg
ICAgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcm9wZXJ0eS5yYXdUZXh0ID0gcHJvcGVydHlU
ZXh0OworICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eVRleHQubGVuZ3RoKCkpIHsKKyAgICAgICAg
ICAgICAgICBib29sIHN1Y2Nlc3MgPSBlbmFibGVQcm9wZXJ0eShpbmRleCwgYWxsUHJvcGVydGll
cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJbnNlcnQgYXQgaW5kZXguCisgICAgICAg
IFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IG1fcGFyZW50U3R5bGVTaGVl
dC0+cnVsZVNvdXJjZURhdGFGb3Ioc3R5bGUpOworICAgICAgICBpZiAoIXNvdXJjZURhdGEpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFN0cmluZyB0ZXh0OworICAgICAgICBi
b29sIHN1Y2Nlc3MgPSBzdHlsZVRleHQoJnRleHQpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHByb3BlcnR5TGVuZ3RoRGVsdGEgPSBw
cm9wZXJ0eVRleHQubGVuZ3RoKCk7CisKKyAgICAgICAgYm9vbCBpbnNlcnRMYXN0ID0gdHJ1ZTsK
KyAgICAgICAgaWYgKGluZGV4IDwgYWxsUHJvcGVydGllcy5zaXplKCkpIHsKKyAgICAgICAgICAg
IEluc3BlY3RvclN0eWxlUHJvcGVydHkmIHByb3BlcnR5ID0gYWxsUHJvcGVydGllcy5hdChpbmRl
eCk7CisgICAgICAgICAgICBpZiAocHJvcGVydHkuaGFzU291cmNlKSB7CisgICAgICAgICAgICAg
ICAgcHJvcGVydHlTdGFydCA9IHByb3BlcnR5LnNvdXJjZURhdGEucmFuZ2Uuc3RhcnQ7CisgICAg
ICAgICAgICAgICAgLy8gSWYgaW5zZXJ0aW5nIGJlZm9yZSBhIGRpc2FibGVkIHByb3BlcnR5LCBp
dCBzaG91bGQgYmUgc2hpZnRlZCwgdG9vLgorICAgICAgICAgICAgICAgIGluc2VydExhc3QgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoaW5zZXJ0TGFzdCkK
KyAgICAgICAgICAgIHByb3BlcnR5U3RhcnQgPSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEt
PnN0eWxlQm9keVJhbmdlLmVuZDsKKworICAgICAgICB0ZXh0Lmluc2VydChwcm9wZXJ0eVRleHQs
IHByb3BlcnR5U3RhcnQpOworICAgICAgICBtX3BhcmVudFN0eWxlU2hlZXQtPnNldFN0eWxlVGV4
dChzdHlsZSwgdGV4dCk7CisgICAgfQorCisgICAgLy8gUmVjb21wdXRlIHN1YnNlcXVlbnQgZGlz
YWJsZWQgcHJvcGVydHkgcmFuZ2VzLgorICAgIHNoaWZ0RGlzYWJsZWRQcm9wZXJ0aWVzKGRpc2Fi
bGVkSW5kZXhCeU9yZGluYWwoaW5kZXgsIHRydWUsIGFsbFByb3BlcnRpZXMpLCBwcm9wZXJ0eUxl
bmd0aERlbHRhKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEluc3BlY3RvclN0eWxl
Ojp0b2dnbGVQcm9wZXJ0eSh1bnNpZ25lZCBpbmRleCwgYm9vbCBkaXNhYmxlKQoreworICAgIEFT
U0VSVChtX3BhcmVudFN0eWxlU2hlZXQpOworICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
ID0gbV9wYXJlbnRTdHlsZVNoZWV0LT5zdHlsZUZvcklkKEluc3BlY3RvckNvbXBvdW5kSWQobV9m
dWxsSWQpLnBhcnQoMSkpOworICAgIEFTU0VSVChzdHlsZSk7CisgICAgaWYgKCFtX3BhcmVudFN0
eWxlU2hlZXQtPmVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIENhbiB0b2dnbGUgb25seSBzb3VyY2UtYmFzZWQgcHJvcGVydGllcy4KKyAgICBSZWZQdHI8
Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSBtX3BhcmVudFN0eWxlU2hlZXQtPnJ1bGVT
b3VyY2VEYXRhRm9yKHN0eWxlKTsKKyAgICBpZiAoIXNvdXJjZURhdGEpCisgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gTm8gc291cmNlIGRhdGEgZm9yIHRoZSBzdHlsZS4KKworICAgIFZlY3RvcjxJ
bnNwZWN0b3JTdHlsZVByb3BlcnR5PiBhbGxQcm9wZXJ0aWVzOworICAgIHBvcHVsYXRlQWxsUHJv
cGVydGllcygmYWxsUHJvcGVydGllcyk7CisgICAgaWYgKGluZGV4ID49IGFsbFByb3BlcnRpZXMu
c2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE91dHNpZGUgb2YgcHJvcGVydHkgcmFu
Z2UuCisKKyAgICBJbnNwZWN0b3JTdHlsZVByb3BlcnR5JiBwcm9wZXJ0eSA9IGFsbFByb3BlcnRp
ZXMuYXQoaW5kZXgpOworICAgIGlmIChwcm9wZXJ0eS5kaXNhYmxlZCA9PSBkaXNhYmxlKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsgLy8gSWRlbXBvdGVudCBvcGVyYXRpb24uCisKKyAgICBib29sIHN1
Y2Nlc3M7CisgICAgaWYgKCFkaXNhYmxlKQorICAgICAgICBzdWNjZXNzID0gZW5hYmxlUHJvcGVy
dHkoaW5kZXgsIGFsbFByb3BlcnRpZXMpOworICAgIGVsc2UKKyAgICAgICAgc3VjY2VzcyA9IGRp
c2FibGVQcm9wZXJ0eShpbmRleCwgYWxsUHJvcGVydGllcyk7CisKKyAgICByZXR1cm4gc3VjY2Vz
czsKK30KKworLy8gc3RhdGljCit1bnNpZ25lZCBJbnNwZWN0b3JTdHlsZTo6ZGlzYWJsZWRJbmRl
eEJ5T3JkaW5hbCh1bnNpZ25lZCBvcmRpbmFsLCBib29sIGNhblVzZVN1YnNlcXVlbnQsIFZlY3Rv
cjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiYgYWxsUHJvcGVydGllcykKK3sKKyAgICB1bnNpZ25l
ZCBkaXNhYmxlZEluZGV4ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gYWxs
UHJvcGVydGllcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgSW5zcGVjdG9yU3R5
bGVQcm9wZXJ0eSYgcHJvcGVydHkgPSBhbGxQcm9wZXJ0aWVzLmF0KGkpOworICAgICAgICBpZiAo
cHJvcGVydHkuZGlzYWJsZWQpIHsKKyAgICAgICAgICAgIGlmIChpID09IG9yZGluYWwgfHwgKGNh
blVzZVN1YnNlcXVlbnQgJiYgaSA+IG9yZGluYWwpKQorICAgICAgICAgICAgICAgIHJldHVybiBk
aXNhYmxlZEluZGV4OworICAgICAgICAgICAgKytkaXNhYmxlZEluZGV4OworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIFVJTlRfTUFYOworfQorCitDU1NTdHlsZURlY2xhcmF0aW9uKiBJ
bnNwZWN0b3JTdHlsZTo6cGFnZVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHlsZSA/
IG1fc3R5bGUgOiBtX3BhcmVudFN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoSW5zcGVjdG9yQ29tcG91
bmRJZChtX2Z1bGxJZCkucGFydCgxKSk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGU6OnN0eWxl
VGV4dChTdHJpbmcqIHJlc3VsdCkKK3sKKyAgICAvLyBQcmVjb25kaXRpb246IG1fcGFyZW50U3R5
bGVTaGVldC0+ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkgaGFzIGJlZW4gY2FsbGVkIHN1Y2Nlc3Nm
dWxseS4KKyAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSBtX3BhcmVu
dFN0eWxlU2hlZXQtPnJ1bGVTb3VyY2VEYXRhRm9yKHBhZ2VTdHlsZSgpKTsKKyAgICBpZiAoIXNv
dXJjZURhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyBzdHlsZVNoZWV0
VGV4dDsKKyAgICBib29sIHN1Y2Nlc3MgPSBtX3BhcmVudFN0eWxlU2hlZXQtPnRleHQoJnN0eWxl
U2hlZXRUZXh0KTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFNvdXJjZVJhbmdlJiBib2R5UmFuZ2UgPSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEt
PnN0eWxlQm9keVJhbmdlOworICAgICpyZXN1bHQgPSBzdHlsZVNoZWV0VGV4dC5zdWJzdHJpbmco
Ym9keVJhbmdlLnN0YXJ0LCBib2R5UmFuZ2UuZW5kIC0gYm9keVJhbmdlLnN0YXJ0KTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnNwZWN0b3JTdHlsZTo6ZGlzYWJsZVByb3BlcnR5KHVu
c2lnbmVkIGluZGV4VG9EaXNhYmxlLCBWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4mIGFs
bFByb3BlcnRpZXMpCit7CisgICAgLy8gUHJlY29uZGl0aW9uOiB8aW5kZXhUb0VuYWJsZXwgcG9p
bnRzIHRvIGFuIGVuYWJsZWQgcHJvcGVydHkuCisgICAgY29uc3QgSW5zcGVjdG9yU3R5bGVQcm9w
ZXJ0eSYgcHJvcGVydHkgPSBhbGxQcm9wZXJ0aWVzLmF0KGluZGV4VG9EaXNhYmxlKTsKKyAgICBJ
bnNwZWN0b3JTdHlsZVByb3BlcnR5IGRpc2FibGVkUHJvcGVydHkocHJvcGVydHkpOworICAgIGRp
c2FibGVkUHJvcGVydHkuZGlzYWJsZWQgPSB0cnVlOworICAgIHVuc2lnbmVkIHByb3BlcnR5U3Rh
cnQgPSBwcm9wZXJ0eS5zb3VyY2VEYXRhLnJhbmdlLnN0YXJ0OworICAgIC8vIFRoaXMgbWF5IGhh
dmUgdG8gYmUgbmVnYXRlZCBiZWxvdy4KKyAgICBsb25nIHByb3BlcnR5TGVuZ3RoID0gcHJvcGVy
dHkuc291cmNlRGF0YS5yYW5nZS5lbmQgLSBwcm9wZXJ0eVN0YXJ0OworICAgIGRpc2FibGVkUHJv
cGVydHkuc291cmNlRGF0YS5yYW5nZS5lbmQgPSBwcm9wZXJ0eVN0YXJ0OworICAgIFN0cmluZyBv
bGRTdHlsZVRleHQ7CisgICAgYm9vbCBzdWNjZXNzID0gc3R5bGVUZXh0KCZvbGRTdHlsZVRleHQp
OworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRpc2FibGVk
UHJvcGVydHkucmF3VGV4dCA9IG9sZFN0eWxlVGV4dC5zdWJzdHJpbmcocHJvcGVydHlTdGFydCwg
cHJvcGVydHlMZW5ndGgpOworICAgIHN1Y2Nlc3MgPSByZXBsYWNlUHJvcGVydHlJblN0eWxlVGV4
dChwcm9wZXJ0eSwgIiIpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gQWRkIGRpc2FibGVkIHByb3BlcnR5IGF0IGNvcnJlY3QgcG9zaXRpb24uCisg
ICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5kZXggPSBkaXNhYmxlZEluZGV4QnlPcmRpbmFsKGluZGV4
VG9EaXNhYmxlLCB0cnVlLCBhbGxQcm9wZXJ0aWVzKTsKKyAgICBpZiAoaW5zZXJ0aW9uSW5kZXgg
PT0gVUlOVF9NQVgpCisgICAgICAgIG1fZGlzYWJsZWRQcm9wZXJ0aWVzLmFwcGVuZChkaXNhYmxl
ZFByb3BlcnR5KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9kaXNhYmxlZFByb3BlcnRpZXMuaW5z
ZXJ0KGluc2VydGlvbkluZGV4LCBkaXNhYmxlZFByb3BlcnR5KTsKKyAgICAgICAgc2hpZnREaXNh
YmxlZFByb3BlcnRpZXMoaW5zZXJ0aW9uSW5kZXggKyAxLCAtcHJvcGVydHlMZW5ndGgpOyAvLyBQ
cm9wZXJ0eSByZW1vdmVkIGZyb20gdGV4dCAtIHNoaWZ0IHRoZXNlIGJhY2suCisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEluc3BlY3RvclN0eWxlOjplbmFibGVQcm9wZXJ0eSh1
bnNpZ25lZCBpbmRleFRvRW5hYmxlLCBWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4mIGFs
bFByb3BlcnRpZXMpCit7CisgICAgLy8gUHJlY29uZGl0aW9uOiB8aW5kZXhUb0VuYWJsZXwgcG9p
bnRzIHRvIGEgZGlzYWJsZWQgcHJvcGVydHkuCisgICAgdW5zaWduZWQgZGlzYWJsZWRJbmRleCA9
IGRpc2FibGVkSW5kZXhCeU9yZGluYWwoaW5kZXhUb0VuYWJsZSwgZmFsc2UsIGFsbFByb3BlcnRp
ZXMpOworICAgIGlmIChkaXNhYmxlZEluZGV4ID09IFVJTlRfTUFYKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBJbnNwZWN0b3JTdHlsZVByb3BlcnR5IGRpc2FibGVkUHJvcGVydHkgPSBt
X2Rpc2FibGVkUHJvcGVydGllcy5hdChkaXNhYmxlZEluZGV4KTsKKyAgICBtX2Rpc2FibGVkUHJv
cGVydGllcy5yZW1vdmUoZGlzYWJsZWRJbmRleCk7CisgICAgYm9vbCBzdWNjZXNzID0gcmVwbGFj
ZVByb3BlcnR5SW5TdHlsZVRleHQoZGlzYWJsZWRQcm9wZXJ0eSwgZGlzYWJsZWRQcm9wZXJ0eS5y
YXdUZXh0KTsKKyAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgc2hpZnREaXNhYmxlZFByb3BlcnRp
ZXMoZGlzYWJsZWRJbmRleCwgZGlzYWJsZWRQcm9wZXJ0eS5yYXdUZXh0Lmxlbmd0aCgpKTsKKyAg
ICByZXR1cm4gc3VjY2VzczsKK30KKworYm9vbCBJbnNwZWN0b3JTdHlsZTo6cG9wdWxhdGVBbGxQ
cm9wZXJ0aWVzKFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiogcmVzdWx0KSBjb25zdAor
eworICAgIEhhc2hTZXQ8U3RyaW5nPiBmb3VuZFNob3J0aGFuZHM7CisgICAgSGFzaFNldDxTdHJp
bmc+IHNvdXJjZVByb3BlcnR5TmFtZXM7CisgICAgdW5zaWduZWQgZGlzYWJsZWRJbmRleCA9IDA7
CisgICAgdW5zaWduZWQgZGlzYWJsZWRMZW5ndGggPSBtX2Rpc2FibGVkUHJvcGVydGllcy5zaXpl
KCk7CisgICAgSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eSBkaXNhYmxlZFByb3BlcnR5OworICAgIGlm
IChkaXNhYmxlZEluZGV4IDwgZGlzYWJsZWRMZW5ndGgpCisgICAgICAgIGRpc2FibGVkUHJvcGVy
dHkgPSBtX2Rpc2FibGVkUHJvcGVydGllcy5hdChkaXNhYmxlZEluZGV4KTsKKworICAgIENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gcGFnZVN0eWxlKCk7CisgICAgaWYgKCFzdHlsZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3Vy
Y2VEYXRhID0gKG1fcGFyZW50U3R5bGVTaGVldCAmJiBtX3BhcmVudFN0eWxlU2hlZXQtPmVuc3Vy
ZVBhcnNlZERhdGFSZWFkeSgpKSA/IG1fcGFyZW50U3R5bGVTaGVldC0+cnVsZVNvdXJjZURhdGFG
b3Ioc3R5bGUpIDogMDsKKyAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiogc291cmNl
UHJvcGVydHlEYXRhID0gc291cmNlRGF0YSA/ICYoc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRh
LT5wcm9wZXJ0eURhdGEpIDogMDsKKyAgICBpZiAoc291cmNlUHJvcGVydHlEYXRhKSB7CisgICAg
ICAgIGZvciAoVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gc291cmNlUHJvcGVydHlEYXRhLT5iZWdpbigpOyBpdCAhPSBzb3VyY2VQcm9wZXJ0eURhdGEt
PmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICB3aGlsZSAoZGlzYWJsZWRJbmRleCA8IGRpc2Fi
bGVkTGVuZ3RoICYmIGRpc2FibGVkUHJvcGVydHkuc291cmNlRGF0YS5yYW5nZS5zdGFydCA8PSBp
dC0+cmFuZ2Uuc3RhcnQpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChkaXNhYmxl
ZFByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICBpZiAoKytkaXNhYmxlZEluZGV4IDwgZGlzYWJs
ZWRMZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUHJvcGVydHkgPSBtX2Rpc2Fi
bGVkUHJvcGVydGllcy5hdChkaXNhYmxlZEluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJlc3VsdC0+YXBwZW5kKEluc3BlY3RvclN0eWxlUHJvcGVydHkoKml0LCB0cnVlLCBmYWxz
ZSkpOworICAgICAgICAgICAgc291cmNlUHJvcGVydHlOYW1lcy5hZGQoaXQtPm5hbWUpOworICAg
ICAgICB9CisgICAgfQorCisgICAgd2hpbGUgKGRpc2FibGVkSW5kZXggPCBkaXNhYmxlZExlbmd0
aCkgeworICAgICAgICBkaXNhYmxlZFByb3BlcnR5ID0gbV9kaXNhYmxlZFByb3BlcnRpZXMuYXQo
ZGlzYWJsZWRJbmRleCsrKTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQoZGlzYWJsZWRQcm9wZXJ0
eSk7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDAsIHNpemUgPSBzdHlsZS0+bGVuZ3RoKCk7
IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBzdHlsZS0+aXRlbShpKTsK
KyAgICAgICAgaWYgKHNvdXJjZVByb3BlcnR5TmFtZXMuY29udGFpbnMobmFtZSkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBzb3VyY2VQcm9wZXJ0eU5hbWVzLmFkZChuYW1lKTsK
KyAgICAgICAgcmVzdWx0LT5hcHBlbmQoSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eVNvdXJjZURhdGEobmFtZSwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUobmFtZSksICFzdHlsZS0+
Z2V0UHJvcGVydHlQcmlvcml0eShuYW1lKS5pc0VtcHR5KCksIHRydWUsIFNvdXJjZVJhbmdlKCkp
LCBmYWxzZSwgZmFsc2UpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJ
bnNwZWN0b3JTdHlsZTo6cG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKEluc3BlY3Rv
ck9iamVjdCogcmVzdWx0KSBjb25zdAoreworICAgIFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3Bl
cnR5PiBwcm9wZXJ0aWVzOworICAgIHBvcHVsYXRlQWxsUHJvcGVydGllcygmcHJvcGVydGllcyk7
CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3BlcnRpZXNPYmplY3QgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2hvcnRoYW5k
VmFsdWVzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBIYXNoTWFwPFN0cmluZywg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gPiBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJv
cGVydHk7CisgICAgSGFzaFNldDxTdHJpbmc+IGZvdW5kU2hvcnRoYW5kczsKKyAgICBDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSA9IHBhZ2VTdHlsZSgpOworCisgICAgZm9yIChWZWN0b3I8SW5z
cGVjdG9yU3R5bGVQcm9wZXJ0eT46Oml0ZXJhdG9yIGl0ID0gcHJvcGVydGllcy5iZWdpbigpLCBp
dEVuZCA9IHByb3BlcnRpZXMuZW5kKCk7IGl0ICE9IGl0RW5kOyArK2l0KSB7CisgICAgICAgIGNv
bnN0IENTU1Byb3BlcnR5U291cmNlRGF0YSYgcHJvcGVydHlFbnRyeSA9IGl0LT5zb3VyY2VEYXRh
OworICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBwcm9wZXJ0eUVudHJ5Lm5hbWU7CisKKyAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHJvcGVydHkgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgICAgICBwcm9wZXJ0aWVzT2JqZWN0LT5wdXNoT2JqZWN0KHByb3BlcnR5
KTsKKyAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygic3RhdHVzIiwgaXQtPmRpc2FibGVkID8g
ImRpc2FibGVkIiA6ICJhY3RpdmUiKTsKKyAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oInBh
cnNlZE9rIiwgcHJvcGVydHlFbnRyeS5wYXJzZWRPayk7CisgICAgICAgIGlmICghaXQtPmRpc2Fi
bGVkKSB7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7Cisg
ICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHByb3BlcnR5RW50cnkudmFs
dWUpOworICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygicHJpb3JpdHkiLCBwcm9wZXJ0
eUVudHJ5LmltcG9ydGFudCA/ICJpbXBvcnRhbnQiIDogIiIpOworICAgICAgICAgICAgaWYgKGl0
LT5oYXNTb3VyY2UpIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1w
bGljaXQiLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcHJvcGVydHktPnNldE51bWJlcigic3Rh
cnRPZmZzZXQiLCBwcm9wZXJ0eUVudHJ5LnJhbmdlLnN0YXJ0KTsKKyAgICAgICAgICAgICAgICBw
cm9wZXJ0eS0+c2V0TnVtYmVyKCJlbmRPZmZzZXQiLCBwcm9wZXJ0eUVudHJ5LnJhbmdlLmVuZCk7
CisKKyAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gPjo6aXRlcmF0b3IgYWN0aXZlSXQgPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJv
cGVydHkuZmluZChuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aXZlSXQgIT0gcHJvcGVy
dHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmVuZCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0cmluZygic3RhdHVzIiwgImluYWN0aXZlIik7Cisg
ICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0cmluZygic2hvcnRoYW5k
TmFtZSIsICIiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChuYW1lLCBwcm9wZXJ0eSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJpbXBs
aWNpdCIsIHN0eWxlLT5pc1Byb3BlcnR5SW1wbGljaXQobmFtZSkpOworICAgICAgICAgICAgICAg
IHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsICJzdHlsZSIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInRleHQiLCBp
dC0+cmF3VGV4dCk7CisKKyAgICAgICAgaWYgKHByb3BlcnR5RW50cnkucGFyc2VkT2spIHsKKyAg
ICAgICAgICAgIC8vIEJvdGggZm9yIHN0eWxlLW9yaWdpbmF0ZWQgYW5kIHBhcnNlZCBzb3VyY2Ug
cHJvcGVydGllcy4KKyAgICAgICAgICAgIFN0cmluZyBzaG9ydGhhbmQgPSBzdHlsZS0+Z2V0UHJv
cGVydHlTaG9ydGhhbmQobmFtZSk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJz
aG9ydGhhbmROYW1lIiwgc2hvcnRoYW5kKTsKKyAgICAgICAgICAgIGlmICghc2hvcnRoYW5kLmlz
RW1wdHkoKSAmJiAhZm91bmRTaG9ydGhhbmRzLmNvbnRhaW5zKHNob3J0aGFuZCkpIHsKKyAgICAg
ICAgICAgICAgICBmb3VuZFNob3J0aGFuZHMuYWRkKHNob3J0aGFuZCk7CisgICAgICAgICAgICAg
ICAgc2hvcnRoYW5kVmFsdWVzLT5zZXRTdHJpbmcoc2hvcnRoYW5kLCBzaG9ydGhhbmRWYWx1ZShz
aG9ydGhhbmQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBw
cm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgIiIpOworICAgIH0KKworICAgIHJl
c3VsdC0+c2V0QXJyYXkoImNzc1Byb3BlcnRpZXMiLCBwcm9wZXJ0aWVzT2JqZWN0KTsKKyAgICBy
ZXN1bHQtPnNldE9iamVjdCgic2hvcnRoYW5kVmFsdWVzIiwgc2hvcnRoYW5kVmFsdWVzKTsKK30K
KworCit2b2lkIEluc3BlY3RvclN0eWxlOjpzaGlmdERpc2FibGVkUHJvcGVydGllcyh1bnNpZ25l
ZCBmcm9tSW5kZXgsIGxvbmcgZGVsdGEpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gZnJvbUlu
ZGV4LCBzaXplID0gbV9kaXNhYmxlZFByb3BlcnRpZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7
CisgICAgICAgIFNvdXJjZVJhbmdlJiByYW5nZSA9IG1fZGlzYWJsZWRQcm9wZXJ0aWVzLmF0KGkp
LnNvdXJjZURhdGEucmFuZ2U7CisgICAgICAgIHJhbmdlLnN0YXJ0ICs9IGRlbHRhOworICAgICAg
ICByYW5nZS5lbmQgKz0gZGVsdGE7CisgICAgfQorfQorCitib29sIEluc3BlY3RvclN0eWxlOjpy
ZXBsYWNlUHJvcGVydHlJblN0eWxlVGV4dChjb25zdCBJbnNwZWN0b3JTdHlsZVByb3BlcnR5JiBw
cm9wZXJ0eSwgY29uc3QgU3RyaW5nJiBuZXdUZXh0KQoreworICAgIC8vIFByZWNvbmRpdGlvbjog
bV9wYXJlbnRTdHlsZVNoZWV0LT5lbnN1cmVQYXJzZWREYXRhUmVhZHkoKSBoYXMgYmVlbiBjYWxs
ZWQgc3VjY2Vzc2Z1bGx5LgorICAgIFN0cmluZyB0ZXh0OworICAgIGJvb2wgc3VjY2VzcyA9IHN0
eWxlVGV4dCgmdGV4dCk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgY29uc3QgU291cmNlUmFuZ2UmIHJhbmdlID0gcHJvcGVydHkuc291cmNlRGF0YS5yYW5n
ZTsKKyAgICB0ZXh0LnJlcGxhY2UocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCAtIHJhbmdlLnN0YXJ0
LCBuZXdUZXh0KTsKKyAgICBzdWNjZXNzID0gbV9wYXJlbnRTdHlsZVNoZWV0LT5zZXRTdHlsZVRl
eHQocGFnZVN0eWxlKCksIHRleHQpOworICAgIHJldHVybiBzdWNjZXNzOworfQorCitTdHJpbmcg
SW5zcGVjdG9yU3R5bGU6OnNob3J0aGFuZFZhbHVlKGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJv
cGVydHkpIGNvbnN0Cit7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBwYWdlU3R5
bGUoKTsKKyAgICBTdHJpbmcgdmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShzaG9ydGhh
bmRQcm9wZXJ0eSk7CisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0
cmluZyBpbmRpdmlkdWFsUHJvcGVydHkgPSBzdHlsZS0+aXRlbShpKTsKKyAgICAgICAgICAgIGlm
IChzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZpZHVhbFByb3BlcnR5KSAhPSBzaG9y
dGhhbmRQcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlm
IChzdHlsZS0+aXNQcm9wZXJ0eUltcGxpY2l0KGluZGl2aWR1YWxQcm9wZXJ0eSkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFZhbHVlID0g
c3R5bGUtPmdldFByb3BlcnR5VmFsdWUoaW5kaXZpZHVhbFByb3BlcnR5KTsKKyAgICAgICAgICAg
IGlmIChpbmRpdmlkdWFsVmFsdWUgPT0gImluaXRpYWwiKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIHZh
bHVlLmFwcGVuZCgiICIpOworICAgICAgICAgICAgdmFsdWUuYXBwZW5kKGluZGl2aWR1YWxWYWx1
ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHZhbHVlOworfQorCitTdHJpbmcgSW5z
cGVjdG9yU3R5bGU6OnNob3J0aGFuZFByaW9yaXR5KGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJv
cGVydHkpIGNvbnN0Cit7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBwYWdlU3R5
bGUoKTsKKyAgICBTdHJpbmcgcHJpb3JpdHkgPSBzdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShz
aG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgaWYgKHByaW9yaXR5LmlzRW1wdHkoKSkgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAg
ICAgICAgIFN0cmluZyBpbmRpdmlkdWFsUHJvcGVydHkgPSBzdHlsZS0+aXRlbShpKTsKKyAgICAg
ICAgICAgIGlmIChzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZpZHVhbFByb3BlcnR5
KSAhPSBzaG9ydGhhbmRQcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIHByaW9yaXR5ID0gc3R5bGUtPmdldFByb3BlcnR5UHJpb3JpdHkoaW5kaXZpZHVhbFBy
b3BlcnR5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBwcmlvcml0eTsKK30KKworVmVjdG9yPFN0cmluZz4gSW5zcGVjdG9yU3R5bGU6OmxvbmdoYW5k
UHJvcGVydGllcyhjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KSBjb25zdAoreworICAg
IFZlY3RvcjxTdHJpbmc+IHByb3BlcnRpZXM7CisgICAgSGFzaFNldDxTdHJpbmc+IGZvdW5kUHJv
cGVydGllczsKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHBhZ2VTdHlsZSgpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZS0+bGVuZ3RoKCk7ICsraSkgeworICAg
ICAgICBTdHJpbmcgaW5kaXZpZHVhbFByb3BlcnR5ID0gc3R5bGUtPml0ZW0oaSk7CisgICAgICAg
IGlmIChmb3VuZFByb3BlcnRpZXMuY29udGFpbnMoaW5kaXZpZHVhbFByb3BlcnR5KSB8fCBzdHls
ZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZpZHVhbFByb3BlcnR5KSAhPSBzaG9ydGhhbmRQ
cm9wZXJ0eSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvdW5kUHJvcGVydGll
cy5hZGQoaW5kaXZpZHVhbFByb3BlcnR5KTsKKyAgICAgICAgcHJvcGVydGllcy5hcHBlbmQoaW5k
aXZpZHVhbFByb3BlcnR5KTsKKyAgICB9CisgICAgcmV0dXJuIHByb3BlcnRpZXM7Cit9CisKIElu
c3BlY3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBpZCwg
Q1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25z
dCBTdHJpbmcmIGRvY3VtZW50VVJMKQogICAgIDogbV9pZChpZCkKICAgICAsIG1fcGFnZVN0eWxl
U2hlZXQocGFnZVN0eWxlU2hlZXQpCkBAIC0xMjEsNiArNTAyLDcgQEAgYm9vbCBJbnNwZWN0b3JT
dHlsZVNoZWV0OjpzZXRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICBtX3BhcnNlZFN0eWxl
U2hlZXQtPnNldFRleHQodGV4dCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1f
cGFnZVN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICBtX3BhZ2VT
dHlsZVNoZWV0LT5yZW1vdmUoaSk7CisgICAgbV9pbnNwZWN0b3JTdHlsZXMuY2xlYXIoKTsKIAog
ICAgIG1fcGFnZVN0eWxlU2hlZXQtPnBhcnNlU3RyaW5nKHRleHQsIG1fcGFnZVN0eWxlU2hlZXQt
PnVzZVN0cmljdFBhcnNpbmcoKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xNDAsMTggKzUyMiwx
NiBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnNldFJ1bGVTZWxlY3Rvcihjb25zdCBTdHJp
bmcmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZQogICAgIGlmICghc291cmNlRGF0YSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgU3RyaW5nJiBzaGVldFRleHQgPSBtX3BhcnNl
ZFN0eWxlU2hlZXQtPnRleHQoKTsKLSAgICBTdHJpbmcgbmV3U3R5bGVTaGVldFRleHQgPSBzaGVl
dFRleHQuc3Vic3RyaW5nKDAsIHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0KTsK
LSAgICBuZXdTdHlsZVNoZWV0VGV4dCArPSBzZWxlY3RvcjsKLSAgICBuZXdTdHlsZVNoZWV0VGV4
dCArPSBzaGVldFRleHQucmlnaHQoc2hlZXRUZXh0Lmxlbmd0aCgpIC0gc291cmNlRGF0YS0+c2Vs
ZWN0b3JMaXN0UmFuZ2UuZW5kKTsKLSAgICBtX3BhcnNlZFN0eWxlU2hlZXQtPnNldFRleHQobmV3
U3R5bGVTaGVldFRleHQpOworICAgIFN0cmluZyBzaGVldFRleHQgPSBtX3BhcnNlZFN0eWxlU2hl
ZXQtPnRleHQoKTsKKyAgICBzaGVldFRleHQucmVwbGFjZShzb3VyY2VEYXRhLT5zZWxlY3Rvckxp
c3RSYW5nZS5zdGFydCwgc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2UuZW5kIC0gc291cmNl
RGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQsIHNlbGVjdG9yKTsKKyAgICBtX3BhcnNlZFN0
eWxlU2hlZXQtPnNldFRleHQoc2hlZXRUZXh0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogQ1NT
U3R5bGVSdWxlKiBJbnNwZWN0b3JTdHlsZVNoZWV0OjphZGRSdWxlKGNvbnN0IFN0cmluZyYgc2Vs
ZWN0b3IpCiB7Ci0gICAgU3RyaW5nIHRleHQ7Ci0gICAgYm9vbCBzdWNjZXNzID0gc3R5bGVTaGVl
dFRleHQoJnRleHQpOworICAgIFN0cmluZyBzdHlsZVNoZWV0VGV4dDsKKyAgICBib29sIHN1Y2Nl
c3MgPSB0ZXh0KCZzdHlsZVNoZWV0VGV4dCk7CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICBy
ZXR1cm4gMDsKIApAQCAtMTY0LDEyICs1NDQsMTIgQEAgQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JT
dHlsZVNoZWV0OjphZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiAgICAgQ1NTU3R5bGVS
dWxlKiBydWxlID0gSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzQ1NTU3R5bGVSdWxlKHJ1bGVzLT5pdGVt
KHJ1bGVzLT5sZW5ndGgoKSAtIDEpKTsKICAgICBBU1NFUlQocnVsZSk7CiAKLSAgICBpZiAodGV4
dC5sZW5ndGgoKSkKLSAgICAgICAgdGV4dCArPSAiXG4iOworICAgIGlmIChzdHlsZVNoZWV0VGV4
dC5sZW5ndGgoKSkKKyAgICAgICAgc3R5bGVTaGVldFRleHQgKz0gIlxuIjsKIAotICAgIHRleHQg
Kz0gc2VsZWN0b3I7Ci0gICAgdGV4dCArPSAiIHt9IjsKLSAgICBtX3BhcnNlZFN0eWxlU2hlZXQt
PnNldFRleHQodGV4dCk7CisgICAgc3R5bGVTaGVldFRleHQgKz0gc2VsZWN0b3I7CisgICAgc3R5
bGVTaGVldFRleHQgKz0gIiB7fSI7CisgICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRUZXh0KHN0
eWxlU2hlZXRUZXh0KTsKIAogICAgIHJldHVybiBydWxlOwogfQpAQCAtMjA0LDE5ICs1ODQsMjAg
QEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxk
T2JqZWN0Rm9yU3R5bGVTaGVldCgpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBy
ZXN1bHQtPnNldFN0cmluZygiaWQiLCBpZCgpKTsKICAgICByZXN1bHQtPnNldEJvb2xlYW4oImRp
c2FibGVkIiwgc3R5bGVTaGVldC0+ZGlzYWJsZWQoKSk7Ci0gICAgcmVzdWx0LT5zZXRTdHJpbmco
ImhyZWYiLCBzdHlsZVNoZWV0LT5ocmVmKCkpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzb3Vy
Y2VVUkwiLCBzdHlsZVNoZWV0LT5ocmVmKCkpOwogICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJ0aXRs
ZSIsIHN0eWxlU2hlZXQtPnRpdGxlKCkpOwogICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gY3NzUnVs
ZUxpc3QgPSBDU1NSdWxlTGlzdDo6Y3JlYXRlKHN0eWxlU2hlZXQsIHRydWUpOwogICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gY3NzUnVsZXMgPSBidWlsZEFycmF5Rm9yUnVsZUxpc3QoY3NzUnVs
ZUxpc3QuZ2V0KCkpOwotICAgIHJlc3VsdC0+c2V0QXJyYXkoImNzc1J1bGVzIiwgY3NzUnVsZXMu
cmVsZWFzZSgpKTsKKyAgICByZXN1bHQtPnNldEFycmF5KCJydWxlcyIsIGNzc1J1bGVzLnJlbGVh
c2UoKSk7CiAKICAgICBTdHJpbmcgc3R5bGVTaGVldFRleHQ7CiAgICAgYm9vbCBzdWNjZXNzID0g
dGV4dCgmc3R5bGVTaGVldFRleHQpOwogICAgIGlmIChzdWNjZXNzKQogICAgICAgICByZXN1bHQt
PnNldFN0cmluZygidGV4dCIsIHN0eWxlU2hlZXRUZXh0KTsKIAorICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJzdHlsZVNoZWV0SWQiLCBpZCgpKTsKKwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgp
OwogfQogCkBAIC0yMjgsMjcgKzYwOSwxMyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZQogCiAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgICByZXN1bHQtPnNldFN0cmluZygic2VsZWN0b3JUZXh0IiwgcnVsZS0+c2VsZWN0
b3JUZXh0KCkpOwotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJjc3NUZXh0IiwgcnVsZS0+Y3NzVGV4
dCgpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygic291cmNlVVJMIiwgIXN0eWxlU2hlZXQtPmhy
ZWYoKS5pc0VtcHR5KCkgPyBzdHlsZVNoZWV0LT5ocmVmKCkgOiBtX2RvY3VtZW50VVJMKTsKICAg
ICByZXN1bHQtPnNldE51bWJlcigic291cmNlTGluZSIsIHJ1bGUtPnNvdXJjZUxpbmUoKSk7Ci0g
ICAgcmVzdWx0LT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgbV9kb2N1bWVudFVSTCk7Ci0KLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJlbnRTdHlsZVNoZWV0VmFsdWUgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmVudFN0eWxlU2hlZXRWYWx1ZS0+c2V0U3RyaW5n
KCJpZCIsIGlkKCkpOwotICAgIHBhcmVudFN0eWxlU2hlZXRWYWx1ZS0+c2V0U3RyaW5nKCJocmVm
Iiwgc3R5bGVTaGVldC0+aHJlZigpKTsKLSAgICByZXN1bHQtPnNldE9iamVjdCgicGFyZW50U3R5
bGVTaGVldCIsIHBhcmVudFN0eWxlU2hlZXRWYWx1ZS5yZWxlYXNlKCkpOwogICAgIHJlc3VsdC0+
c2V0U3RyaW5nKCJvcmlnaW4iLCBtX29yaWdpbik7CiAKLSAgICBSZWZQdHI8Q1NTUnVsZVNvdXJj
ZURhdGE+IHNvdXJjZURhdGE7Ci0gICAgaWYgKGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKQotICAg
ICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3IocnVsZS0+c3R5bGUoKSk7Ci0gICAg
aWYgKHNvdXJjZURhdGEpIHsKLSAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoInNlbGVjdG9yU3Rh
cnRPZmZzZXQiLCBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCk7Ci0gICAgICAg
IHJlc3VsdC0+c2V0TnVtYmVyKCJzZWxlY3RvckVuZE9mZnNldCIsIHNvdXJjZURhdGEtPnNlbGVj
dG9yTGlzdFJhbmdlLmVuZCk7Ci0gICAgfQotCiAgICAgcmVzdWx0LT5zZXRPYmplY3QoInN0eWxl
IiwgYnVpbGRPYmplY3RGb3JTdHlsZShydWxlLT5zdHlsZSgpKSk7CiAgICAgaWYgKGNhbkJpbmQo
KSkKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImlkIiwgZnVsbFJ1bGVJZChydWxlKSk7Cisg
ICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJydWxlSWQiLCBmdWxsUnVsZUlkKHJ1bGUpKTsKIAog
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQpAQCAtMjU5LDExICs2MjYsNDMgQEAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0
Rm9yU3R5bGUoQ1NTU3R5bGVEZWMKICAgICBpZiAoZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCiAg
ICAgICAgIHNvdXJjZURhdGEgPSBydWxlU291cmNlRGF0YUZvcihzdHlsZSk7CiAKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmpl
Y3RGb3JTdHlsZShzdHlsZSwgZnVsbFN0eWxlSWQoc3R5bGUpLCBzb3VyY2VEYXRhID8gc291cmNl
RGF0YS0+c3R5bGVTb3VyY2VEYXRhLmdldCgpIDogMCk7Ci0gICAgcmVzdWx0LT5zZXRTdHJpbmco
InBhcmVudFN0eWxlU2hlZXRJZCIsIGlkKCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4g
aW5zcGVjdG9yU3R5bGUgPSBpbnNwZWN0b3JTdHlsZUZvcklkKHJ1bGVPclN0eWxlSWQoc3R5bGUp
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZS0+
YnVpbGRPYmplY3RGb3JTdHlsZSgpOworCisgICAgLy8gU3R5bGUgdGV4dCBjYW5ub3QgYmUgcmV0
cmlldmVkIHdpdGhvdXQgc3R5bGVzaGVldCwgc28gc2V0IGNzc1RleHQgaGVyZS4KKyAgICBpZiAo
c291cmNlRGF0YSkgeworICAgICAgICBTdHJpbmcgc2hlZXRUZXh0OworICAgICAgICBib29sIHN1
Y2Nlc3MgPSB0ZXh0KCZzaGVldFRleHQpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAg
ICAgICAgY29uc3QgU291cmNlUmFuZ2UmIGJvZHlSYW5nZSA9IHNvdXJjZURhdGEtPnN0eWxlU291
cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2U7CisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygi
Y3NzVGV4dCIsIHNoZWV0VGV4dC5zdWJzdHJpbmcoYm9keVJhbmdlLnN0YXJ0LCBib2R5UmFuZ2Uu
ZW5kIC0gYm9keVJhbmdlLnN0YXJ0KSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2UoKTsKIH0KIAorYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRQcm9w
ZXJ0eVRleHQoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBj
b25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlKQoreworICAgIFJlZlB0cjxJbnNwZWN0
b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBpbnNwZWN0b3JTdHlsZUZvcklkKHN0eWxlSWQpOwor
ICAgIGlmICghaW5zcGVjdG9yU3R5bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBpbnNwZWN0b3JTdHlsZS0+c2V0UHJvcGVydHlUZXh0KHByb3BlcnR5SW5kZXgsIHRleHQs
IG92ZXJ3cml0ZSk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6dG9nZ2xlUHJvcGVy
dHkoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBib29sIGRp
c2FibGUpCit7CisgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IGlu
c3BlY3RvclN0eWxlRm9ySWQoc3R5bGVJZCk7CisgICAgaWYgKCFpbnNwZWN0b3JTdHlsZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBzdWNjZXNzID0gaW5zcGVjdG9yU3R5bGUt
PnRvZ2dsZVByb3BlcnR5KHByb3BlcnR5SW5kZXgsIGRpc2FibGUpOworICAgIGlmIChzdWNjZXNz
ICYmIGRpc2FibGUpCisgICAgICAgIHJlbWVtYmVySW5zcGVjdG9yU3R5bGUoc3R5bGVGb3JJZChz
dHlsZUlkKSwgaW5zcGVjdG9yU3R5bGUucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gc3VjY2VzczsK
K30KKwogQ1NTU3R5bGVEZWNsYXJhdGlvbiogSW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVGb3JJ
ZChjb25zdCBTdHJpbmcmIGlkKSBjb25zdAogewogICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IHJ1
bGVGb3JJZChpZCk7CkBAIC0yNzMsMTMgKzY3MiwyMyBAQCBDU1NTdHlsZURlY2xhcmF0aW9uKiBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZUZvcklkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0CiAg
ICAgcmV0dXJuIHJ1bGUtPnN0eWxlKCk7CiB9CiAKLWJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6
c2V0U3R5bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0
KQorUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6aW5zcGVj
dG9yU3R5bGVGb3JJZChjb25zdCBTdHJpbmcmIHN0eWxlSWQpCiB7CiAgICAgQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUgPSBzdHlsZUZvcklkKHN0eWxlSWQpOwogICAgIGlmICghc3R5bGUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gaW5u
ZXJTZXRTdHlsZVRleHQoc3R5bGUsIG5ld1RleHQpOworICAgIEluc3BlY3RvclN0eWxlTWFwOjpp
dGVyYXRvciBpdCA9IG1faW5zcGVjdG9yU3R5bGVzLmZpbmQoc3R5bGUpOworICAgIGlmIChpdCA9
PSBtX2luc3BlY3RvclN0eWxlcy5lbmQoKSkgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yU3R5
bGU+IGluc3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShmdWxsU3R5bGVJZChz
dHlsZSksIHRoaXMpOworICAgICAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGUucmVsZWFzZSgpOwor
ICAgIH0KKyAgICByZXR1cm4gaXQtPnNlY29uZDsKK30KKwordm9pZCBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjpyZW1lbWJlckluc3BlY3RvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBQ
YXNzUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSkKK3sKKyAgICBtX2luc3Bl
Y3RvclN0eWxlcy5zZXQoc3R5bGUsIGluc3BlY3RvclN0eWxlKTsKIH0KIAogRG9jdW1lbnQqIElu
c3BlY3RvclN0eWxlU2hlZXQ6Om93bmVyRG9jdW1lbnQoKSBjb25zdApAQCAtMzI4LDcgKzczNyw3
IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlVGV4dCgpIGNvbnN0CiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgU3RyaW5nIHRleHQ7Ci0gICAgYm9vbCBzdWNjZXNzID0gc3R5
bGVTaGVldFRleHQoJnRleHQpOworICAgIGJvb2wgc3VjY2VzcyA9IG9yaWdpbmFsU3R5bGVTaGVl
dFRleHQoJnRleHQpOwogICAgIGlmIChzdWNjZXNzKQogICAgICAgICBtX3BhcnNlZFN0eWxlU2hl
ZXQtPnNldFRleHQodGV4dCk7CiAKQEAgLTM2MiwxMiArNzcxLDcgQEAgYm9vbCBJbnNwZWN0b3JT
dHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKE5vZGUqIG93bmVyTm9kZSkKICAgICByZXR1cm4g
bV9wYXJzZWRTdHlsZVNoZWV0LT5oYXNTb3VyY2VEYXRhKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
U3R5bGVTaGVldDo6aW5uZXJTZXRTdHlsZVNoZWV0VGV4dChjb25zdCBTdHJpbmcmIG5ld1RleHQp
Ci17Ci0gICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRUZXh0KG5ld1RleHQpOwotfQotCi1ib29s
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmlubmVyU2V0U3R5bGVUZXh0KENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlLCBjb25zdCBTdHJpbmcmIHRleHQpCitib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6
OnNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3RyaW5nJiB0
ZXh0KQogewogICAgIGlmICghcGFnZVN0eWxlU2hlZXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMzg2LDcgKzc5MCw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6aW5uZXJTZXRT
dHlsZVRleHQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgc3R5bGUtPnNldENzc1RleHQodGV4dCwgZWMpOwogICAgIGlm
ICghZWMpCi0gICAgICAgIGlubmVyU2V0U3R5bGVTaGVldFRleHQocGF0Y2hlZFN0eWxlU2hlZXRU
ZXh0KTsKKyAgICAgICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRUZXh0KHBhdGNoZWRTdHlsZVNo
ZWV0VGV4dCk7CiAKICAgICByZXR1cm4gIWVjOwogfQpAQCAtNDA3LDEwICs4MTEsOCBAQCBib29s
IEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRUZXh0V2l0aENoYW5nZWRTdHlsZShDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdAogICAgIFN0cmluZyB0ZXh0ID0gbV9wYXJzZWRTdHlsZVNoZWV0
LT50ZXh0KCk7CiAgICAgQVNTRVJUKGJvZHlFbmQgPD0gdGV4dC5sZW5ndGgoKSk7IC8vIGJvZHlF
bmQgaXMgZXhjbHVzaXZlCiAKLSAgICBTdHJpbmcgcGF0Y2hlZFRleHQgPSB0ZXh0LnN1YnN0cmlu
ZygwLCBib2R5U3RhcnQpOwotICAgIHBhdGNoZWRUZXh0ICs9IG5ld1N0eWxlVGV4dDsKLSAgICBw
YXRjaGVkVGV4dCArPSB0ZXh0LnN1YnN0cmluZyhib2R5RW5kLCB0ZXh0Lmxlbmd0aCgpKTsKLSAg
ICAqcmVzdWx0ID0gcGF0Y2hlZFRleHQ7CisgICAgdGV4dC5yZXBsYWNlKGJvZHlTdGFydCwgYm9k
eUVuZCAtIGJvZHlTdGFydCwgbmV3U3R5bGVUZXh0KTsKKyAgICAqcmVzdWx0ID0gdGV4dDsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDQ0LDE1ICs4NDYsMTggQEAgdm9pZCBJbnNwZWN0b3JT
dHlsZVNoZWV0OjpyZXZhbGlkYXRlU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogcGFnZVN0eWxl
KQogICAgICAgICBpZiAoIXBhcnNlZFJ1bGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgaWYgKHBhcnNlZFJ1bGUtPnN0eWxlKCkgPT0gcGFnZVN0eWxlKSB7Ci0gICAgICAgICAgICBp
ZiAocGFyc2VkUnVsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpICE9IHBhZ2VTdHlsZS0+Y3NzVGV4dCgp
KQotICAgICAgICAgICAgICAgIGlubmVyU2V0U3R5bGVUZXh0KHBhZ2VTdHlsZSwgcGFnZVN0eWxl
LT5jc3NUZXh0KCkpOworICAgICAgICAgICAgaWYgKHBhcnNlZFJ1bGUtPnN0eWxlKCktPmNzc1Rl
eHQoKSAhPSBwYWdlU3R5bGUtPmNzc1RleHQoKSkgeworICAgICAgICAgICAgICAgIC8vIENsZWFy
IHRoZSBkaXNhYmxlZCBwcm9wZXJ0aWVzIGZvciB0aGUgaW52YWxpZCBzdHlsZSBoZXJlLgorICAg
ICAgICAgICAgICAgIG1faW5zcGVjdG9yU3R5bGVzLnJlbW92ZShwYWdlU3R5bGUpOworICAgICAg
ICAgICAgICAgIHNldFN0eWxlVGV4dChwYWdlU3R5bGUsIHBhZ2VTdHlsZS0+Y3NzVGV4dCgpKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAg
IG1faXNSZXZhbGlkYXRpbmcgPSBmYWxzZTsKIH0KIAotYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0
OjpzdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKK2Jvb2wgSW5zcGVjdG9yU3R5
bGVTaGVldDo6b3JpZ2luYWxTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKIHsK
ICAgICBTdHJpbmcgdGV4dDsKICAgICBib29sIHN1Y2Nlc3MgPSBpbmxpbmVTdHlsZVNoZWV0VGV4
dCgmdGV4dCk7CkBAIC00NjUsNyArODcwLDcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpz
dHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JTdHls
ZVNoZWV0OjpyZXNvdXJjZVN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAogewot
ICAgIGlmICghbV9wYWdlU3R5bGVTaGVldCkKKyAgICBpZiAoIW1fcGFnZVN0eWxlU2hlZXQgfHwg
IW93bmVyRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIElu
c3BlY3RvclJlc291cmNlQWdlbnQ6OnJlc291cmNlQ29udGVudChvd25lckRvY3VtZW50KCktPmZy
YW1lKCksIG1fcGFnZVN0eWxlU2hlZXQtPmZpbmFsVVJMKCksIHJlc3VsdCk7CkBAIC01MDksMTIg
KzkxNCwxMiBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0
eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShjb25zdCBTdHJpbgogICAgICwgbV9ydWxlU291cmNlRGF0
YSgwKQogewogICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBtX2luc3BlY3RvclN0eWxlID0gSW5z
cGVjdG9yU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JDb21wb3VuZElkKCkuYXBwZW5kUGFydChpZCku
YXBwZW5kUGFydCgiMCIpLmFzU3RyaW5nKCksIHRoaXMpOwogfQogCi1ib29sIEluc3BlY3RvclN0
eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6c2V0U3R5bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJ
ZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQorYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5l
U3R5bGU6OnNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3Ry
aW5nJiB0ZXh0KQogewotICAgIEFTU0VSVChzdHlsZUlkID09ICIwIik7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0eWxlSWQpOworICAgIEFTU0VSVF9VTlVTRUQoc3R5bGUsIHN0eWxlID09IGlubGluZVN0
eWxlKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIG1fZWxlbWVudC0+c2V0QXR0
cmlidXRlKCJzdHlsZSIsIHRleHQsIGVjKTsKICAgICBtX3J1bGVTb3VyY2VEYXRhLmNsZWFyKCk7
CkBAIC01NDEsNiArOTQ2LDEyIEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlOjplbnN1cmVQYXJzZWREYXRhUmVhZHkoKQogICAgIHJldHVybiB0cnVlOwogfQogCitQYXNz
UmVmUHRyPEluc3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6
Omluc3BlY3RvclN0eWxlRm9ySWQoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCBib29sIGNyZWF0ZUlm
QWJzZW50KQoreworICAgIEFTU0VSVF9VTlVTRUQoc3R5bGVJZCwgc3R5bGVJZCA9PSAiMCIpOwor
ICAgIHJldHVybiBtX2luc3BlY3RvclN0eWxlOworfQorCiBDU1NTdHlsZURlY2xhcmF0aW9uKiBJ
bnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmlubGluZVN0eWxlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9lbGVtZW50LT5zdHlsZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5oCmluZGV4IDM4YWI3NzcuLmQ3NzVjNmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVNoZWV0LmgKQEAgLTI2LDE2ICsyNiwxNCBAQAogI2RlZmluZSBJbnNwZWN0
b3JTdHlsZVNoZWV0X2gKIAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5U291cmNlRGF0YS5oIgotI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Vu
dXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBjbGFzcyBQYXJzZWRTdHls
ZVNoZWV0OwogCkBAIC00MywxMyArNDEsMTE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ1NTUnVsZUxpc3Q7CiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOworY2xhc3MgQ1NTU3R5
bGVTaGVldDsKK2NsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKK2NsYXNzIEluc3BlY3Rv
clN0eWxlU2hlZXQ7CiBjbGFzcyBOb2RlOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAorY2xh
c3MgSW5zcGVjdG9yQ29tcG91bmRJZCB7CitwdWJsaWM6CisgICAgSW5zcGVjdG9yQ29tcG91bmRJ
ZCgpIHsgfQorICAgIEluc3BlY3RvckNvbXBvdW5kSWQoY29uc3QgU3RyaW5nJiBpZCkKKyAgICB7
CisgICAgICAgIGlkLnNwbGl0KCc6JywgbV9pZFBhcnRzKTsKKyAgICB9CisKKyAgICBjb25zdCBT
dHJpbmcmIHBhcnQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgQVNTRVJUKGluZGV4IDwgbV9pZFBh
cnRzLnNpemUoKSk7IHJldHVybiBtX2lkUGFydHMuYXQoaW5kZXgpOyB9CisgICAgdW5zaWduZWQg
cGFydENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9pZFBhcnRzLnNpemUoKTsgfQorICAgIEluc3Bl
Y3RvckNvbXBvdW5kSWQmIGFwcGVuZFBhcnQoY29uc3QgU3RyaW5nJiBwYXJ0KSB7IG1faWRQYXJ0
cy5hcHBlbmQocGFydCk7IHJldHVybiAqdGhpczsgfQorICAgIFN0cmluZyBhc1N0cmluZygpIGNv
bnN0CisgICAgeworICAgICAgICBTdHJpbmcgcmVzdWx0OworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwLCBzaXplID0gbV9pZFBhcnRzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgeworICAgICAg
ICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiOiI7CisgICAgICAg
ICAgICByZXN1bHQgKz0gbV9pZFBhcnRzLmF0KGkpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxTdHJpbmc+IG1faWRQYXJ0
czsKK307CisKK3N0cnVjdCBJbnNwZWN0b3JTdHlsZVByb3BlcnR5IHsKKyAgICBJbnNwZWN0b3JT
dHlsZVByb3BlcnR5KCkKKyAgICB7CisgICAgfQorCisgICAgSW5zcGVjdG9yU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eVNvdXJjZURhdGEgc291cmNlRGF0YSwgYm9vbCBoYXNTb3VyY2UsIGJvb2wg
ZGlzYWJsZWQpCisgICAgICAgIDogc291cmNlRGF0YShzb3VyY2VEYXRhKQorICAgICAgICAsIGhh
c1NvdXJjZShoYXNTb3VyY2UpCisgICAgICAgICwgZGlzYWJsZWQoZGlzYWJsZWQpCisgICAgewor
ICAgIH0KKworICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSBzb3VyY2VEYXRhOworICAgIGJvb2wg
aGFzU291cmNlOworICAgIGJvb2wgZGlzYWJsZWQ7CisgICAgU3RyaW5nIHJhd1RleHQ7Cit9Owor
CitjbGFzcyBJbnNwZWN0b3JTdHlsZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvclN0eWxl
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGNyZWF0
ZShjb25zdCBTdHJpbmcmIGZ1bGxTdHlsZUlkLCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRT
dHlsZVNoZWV0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JT
dHlsZShmdWxsU3R5bGVJZCwgcGFyZW50U3R5bGVTaGVldCkpOworICAgIH0KKworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlPiBjcmVhdGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0eWxl
KHN0eWxlKSk7CisgICAgfQorCisgICAgSW5zcGVjdG9yU3R5bGUoY29uc3QgU3RyaW5nJiBmdWxs
U3R5bGVJZCwgSW5zcGVjdG9yU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCkKKyAgICAgICAg
OiBtX2Z1bGxJZChmdWxsU3R5bGVJZCkKKyAgICAgICAgLCBtX3N0eWxlKDApCisgICAgICAgICwg
bV9wYXJlbnRTdHlsZVNoZWV0KHBhcmVudFN0eWxlU2hlZXQpCisgICAgeworICAgICAgICBBU1NF
UlQocGFyZW50U3R5bGVTaGVldCk7CisgICAgfQorCisgICAgSW5zcGVjdG9yU3R5bGUoQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUpCisgICAgICAgIDogbV9mdWxsSWQoIiIpCisgICAgICAgICwg
bV9zdHlsZShzdHlsZSkKKyAgICAgICAgLCBtX3BhcmVudFN0eWxlU2hlZXQoMCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChzdHlsZSk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdDsKKyAgICBib29sIHNldFByb3BlcnR5
VGV4dCh1bnNpZ25lZCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSk7
CisgICAgYm9vbCB0b2dnbGVQcm9wZXJ0eSh1bnNpZ25lZCBpbmRleCwgYm9vbCBkaXNhYmxlKTsK
KworcHJpdmF0ZToKKyAgICBzdGF0aWMgdW5zaWduZWQgZGlzYWJsZWRJbmRleEJ5T3JkaW5hbCh1
bnNpZ25lZCBvcmRpbmFsLCBib29sIGNhblVzZVN1YnNlcXVlbnQsIFZlY3RvcjxJbnNwZWN0b3JT
dHlsZVByb3BlcnR5PiYgYWxsUHJvcGVydGllcyk7CisKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9u
KiBwYWdlU3R5bGUoKSBjb25zdDsKKyAgICBib29sIHN0eWxlVGV4dChTdHJpbmcqIHJlc3VsdCk7
CisgICAgYm9vbCBkaXNhYmxlUHJvcGVydHkodW5zaWduZWQgaW5kZXhUb0Rpc2FibGUsIFZlY3Rv
cjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiYgYWxsUHJvcGVydGllcyk7CisgICAgYm9vbCBlbmFi
bGVQcm9wZXJ0eSh1bnNpZ25lZCBpbmRleFRvRW5hYmxlLCBWZWN0b3I8SW5zcGVjdG9yU3R5bGVQ
cm9wZXJ0eT4mIGFsbFByb3BlcnRpZXMpOworICAgIGJvb2wgcG9wdWxhdGVBbGxQcm9wZXJ0aWVz
KFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiogcmVzdWx0KSBjb25zdDsKKyAgICB2b2lk
IHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhJbnNwZWN0b3JPYmplY3QqIHJlc3Vs
dCkgY29uc3Q7CisgICAgdm9pZCBzaGlmdERpc2FibGVkUHJvcGVydGllcyh1bnNpZ25lZCBmcm9t
SW5kZXgsIGxvbmcgb2Zmc2V0KTsKKyAgICBib29sIHJlcGxhY2VQcm9wZXJ0eUluU3R5bGVUZXh0
KGNvbnN0IEluc3BlY3RvclN0eWxlUHJvcGVydHkmIHByb3BlcnR5LCBjb25zdCBTdHJpbmcmIG5l
d1RleHQpOworICAgIFN0cmluZyBzaG9ydGhhbmRWYWx1ZShjb25zdCBTdHJpbmcmIHNob3J0aGFu
ZFByb3BlcnR5KSBjb25zdDsKKyAgICBTdHJpbmcgc2hvcnRoYW5kUHJpb3JpdHkoY29uc3QgU3Ry
aW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkgY29uc3Q7CisgICAgVmVjdG9yPFN0cmluZz4gbG9uZ2hh
bmRQcm9wZXJ0aWVzKGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpIGNvbnN0OworCisg
ICAgU3RyaW5nIG1fZnVsbElkOworICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIG1fc3R5bGU7Cisg
ICAgSW5zcGVjdG9yU3R5bGVTaGVldCogbV9wYXJlbnRTdHlsZVNoZWV0OworICAgIFZlY3RvcjxJ
bnNwZWN0b3JTdHlsZVByb3BlcnR5PiBtX2Rpc2FibGVkUHJvcGVydGllczsKK307CisKIGNsYXNz
IEluc3BlY3RvclN0eWxlU2hlZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JTdHlsZVNo
ZWV0PiB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlRGVjbGFyYXRpb24q
LCBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+ID4gSW5zcGVjdG9yU3R5bGVNYXA7CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaWQs
IENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29u
c3QgU3RyaW5nJiBkb2N1bWVudFVSTCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSW5zcGVjdG9yU3R5bGVTaGVldChpZCwgcGFnZVN0eWxlU2hlZXQsIG9yaWdpbiwgZG9jdW1l
bnRVUkwpKTsKQEAgLTY0LDExICsxNjMsMTQgQEAgcHVibGljOgogICAgIGJvb2wgc2V0UnVsZVNl
bGVjdG9yKGNvbnN0IFN0cmluZyYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKTsKICAg
ICBDU1NTdHlsZVJ1bGUqIGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3Rvcik7CiAgICAgQ1NT
U3R5bGVSdWxlKiBydWxlRm9ySWQoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgdm9pZCBwb3B1
bGF0ZUFsbFByb3BlcnRpZXMoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCBWZWN0b3I8SW5zcGVjdG9y
U3R5bGVQcm9wZXJ0eT4qIHJlc3VsdCk7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7CiAgICAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiop
OworICAgIGJvb2wgc2V0UHJvcGVydHlUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgdW5zaWdu
ZWQgcHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSk7Cisg
ICAgYm9vbCB0b2dnbGVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHN0eWxlSWQsIHVuc2lnbmVkIHBy
b3BlcnR5SW5kZXgsIGJvb2wgZGlzYWJsZSk7CisKICAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFy
YXRpb24qIHN0eWxlRm9ySWQoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IHNldFN0eWxlVGV4dChjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7
CiAKIHByb3RlY3RlZDoKICAgICBib29sIGNhbkJpbmQoKSBjb25zdCB7IHJldHVybiBtX29yaWdp
biAhPSAidXNlckFnZW50IiAmJiBtX29yaWdpbiAhPSAidXNlciI7IH0KQEAgLTc4LDI5ICsxODAs
MzYgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBy
dWxlU291cmNlRGF0YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3Q7CiAgICAg
dmlydHVhbCB1bnNpZ25lZCBydWxlSW5kZXhCeVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCk7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0
IFN0cmluZyYgc3R5bGVJZCk7CisgICAgdmlydHVhbCB2b2lkIHJlbWVtYmVySW5zcGVjdG9yU3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGU+
IGluc3BlY3RvclN0eWxlKTsKKworICAgIC8vIEFsc28gYWNjZXNzZWQgYnkgZnJpZW5kIGNsYXNz
IEluc3BlY3RvclN0eWxlLgorICAgIHZpcnR1YWwgYm9vbCBzZXRTdHlsZVRleHQoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYpOwogCiBwcml2YXRlOgogICAgIGJvb2wgdGV4dChT
dHJpbmcqIHJlc3VsdCkgY29uc3Q7CiAgICAgYm9vbCBlbnN1cmVUZXh0KCkgY29uc3Q7CiAgICAg
Ym9vbCBlbnN1cmVTb3VyY2VEYXRhKE5vZGUqIG93bmVyTm9kZSk7Ci0gICAgdm9pZCBpbm5lclNl
dFN0eWxlU2hlZXRUZXh0KGNvbnN0IFN0cmluZyYgbmV3VGV4dCk7Ci0gICAgYm9vbCBpbm5lclNl
dFN0eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJik7CiAgICAgYm9v
bCBzdHlsZVNoZWV0VGV4dFdpdGhDaGFuZ2VkU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNv
bnN0IFN0cmluZyYgbmV3U3R5bGVUZXh0LCBTdHJpbmcqIHJlc3VsdCk7CiAgICAgQ1NTU3R5bGVS
dWxlKiBmaW5kUGFnZVJ1bGVXaXRoU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOwogICAgIFN0
cmluZyBmdWxsUnVsZUlkKENTU1N0eWxlUnVsZSogcnVsZSkgY29uc3Q7CiAgICAgU3RyaW5nIGZ1
bGxTdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdCB7IHJldHVybiBmdWxs
UnVsZU9yU3R5bGVJZChzdHlsZSk7IH0KICAgICB2b2lkIHJldmFsaWRhdGVTdHlsZShDU1NTdHls
ZURlY2xhcmF0aW9uKik7Ci0gICAgYm9vbCBzdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkg
Y29uc3Q7CisgICAgYm9vbCBvcmlnaW5hbFN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBj
b25zdDsKICAgICBib29sIHJlc291cmNlU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNv
bnN0OwogICAgIGJvb2wgaW5saW5lU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0
OwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChD
U1NSdWxlTGlzdCopOwogCisKICAgICBTdHJpbmcgbV9pZDsKICAgICBDU1NTdHlsZVNoZWV0KiBt
X3BhZ2VTdHlsZVNoZWV0OwogICAgIFN0cmluZyBtX29yaWdpbjsKICAgICBTdHJpbmcgbV9kb2N1
bWVudFVSTDsKICAgICBib29sIG1faXNSZXZhbGlkYXRpbmc7CiAgICAgUGFyc2VkU3R5bGVTaGVl
dCogbV9wYXJzZWRTdHlsZVNoZWV0OworICAgIEluc3BlY3RvclN0eWxlTWFwIG1faW5zcGVjdG9y
U3R5bGVzOworCisgICAgZnJpZW5kIGNsYXNzIEluc3BlY3RvclN0eWxlOwogfTsKIAogY2xhc3Mg
SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlIDogcHVibGljIEluc3BlY3RvclN0eWxl
U2hlZXQgewpAQCAtMTExLDE0ICsyMjAsMTggQEAgcHVibGljOgogICAgIH0KIAogICAgIEluc3Bl
Y3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShjb25zdCBTdHJpbmcmIGlkLCBFbGVtZW50KiBl
bGVtZW50LCBjb25zdCBTdHJpbmcmIG9yaWdpbik7Ci0gICAgdmlydHVhbCBDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZUZvcklkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0IHsgQVNTRVJUKGlkID09
ICIwIik7IFVOVVNFRF9QQVJBTShpZCk7IHJldHVybiBpbmxpbmVTdHlsZSgpOyB9Ci0gICAgdmly
dHVhbCBib29sIHNldFN0eWxlVGV4dChjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCk7CisgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZUZvcklkKGNv
bnN0IFN0cmluZyYgaWQpIGNvbnN0IHsgQVNTRVJUX1VOVVNFRChpZCwgaWQgPT0gIjAiKTsgcmV0
dXJuIGlubGluZVN0eWxlKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgRG9jdW1lbnQq
IG93bmVyRG9jdW1lbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxDU1NSdWxlU291cmNl
RGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0
IHsgQVNTRVJUKHN0eWxlID09IGlubGluZVN0eWxlKCkpOyBVTlVTRURfUEFSQU0oc3R5bGUpOyBy
ZXR1cm4gbV9ydWxlU291cmNlRGF0YTsgfQorICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVTb3Vy
Y2VEYXRhPiBydWxlU291cmNlRGF0YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29u
c3QgeyBBU1NFUlRfVU5VU0VEKHN0eWxlLCBzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsgcmV0dXJu
IG1fcnVsZVNvdXJjZURhdGE7IH0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIHJ1bGVJbmRleEJ5U3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFs
IGJvb2wgZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElu
c3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0IFN0cmluZyYgc3R5bGVJZCwg
Ym9vbCBhZGRJZkFic2VudCA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtZW1iZXJJbnNw
ZWN0b3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUpIHsgfQorCisgICAgLy8gQWxzbyBhY2Nlc3NlZCBieSBm
cmllbmQgY2xhc3MgSW5zcGVjdG9yU3R5bGUuCisgICAgdmlydHVhbCBib29sIHNldFN0eWxlVGV4
dChDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJik7CiAKIHByaXZhdGU6CiAgICAg
Q1NTU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lU3R5bGUoKSBjb25zdDsKQEAgLTEyNiw2ICsyMzks
NyBAQCBwcml2YXRlOgogCiAgICAgRWxlbWVudCogbV9lbGVtZW50OwogICAgIFJlZlB0cjxDU1NS
dWxlU291cmNlRGF0YT4gbV9ydWxlU291cmNlRGF0YTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yU3R5
bGU+IG1faW5zcGVjdG9yU3R5bGU7CiB9OwogCiAjZW5kaWYK
</data>
<flag name="review"
          id="61615"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71558</attachid>
            <date>2010-10-22 06:22:09 -0700</date>
            <delta_ts>2010-10-22 06:27:27 -0700</delta_ts>
            <desc>[PATCH] Comments addressed</desc>
            <filename>toggle.patch</filename>
            <type>text/plain</type>
            <size>94235</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IGViZjZkMDY3MDljOGUyZDk5ZGM2ZTlhNTExN2NkNTFlYWEwZjRiMTYKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBUaHUgU2VwIDE2
IDIwOjA0OjA0IDIwMTAgKzA0MDAKCiAgICBXSVAKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1uZXctQVBJLmNzcyBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9yZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEkuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjg0YzQ3YTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1uZXctQVBJLmNzcwpAQCAtMCwwICsxLDI2IEBACitodG1s
IHsKKyAgICBmb250LXdlaWdodDogNDAwOworfQorCitib2R5IHsKKyAgICBmb250LXNpemU6IDEy
cHg7CisgICAgZm9vOiBiYXIgIQorCisgICAgaW1wb3J0YW50IC8qICFpbXBvcnRhbnQgcHJvcGVy
dHkgbm90IHJlY29nbml6ZWQgYnkgV2ViQ29yZSAqLzsKKyAgICBoZWlnaHQ6IDEwMCUgIWltcG9y
dGFudDsKKyAgICBjb2xvcno6ICIhaW1wb3J0YW50IjsKKyAgICBpbXBvcnRhbnQ6IWltcG9ydGFu
dDsKKyAgICBjb2xvcjogImJhZGNvbG9yIiAhIGltcG9ydGFudCAvKiBnb29kIHByb3BlcnR5IHdp
dGggc3RyYW5nZSB2YWx1ZSAqLzsKK30KKworLyogY29tbWVudCBiZWZvcmUgc2VsZWN0b3IgKi9i
b2R5Lm1haW4xLyogY29tbWVudCBhZnRlciBzZWxlY3RvciAqL3svKiBjb21tZW50ICovY29sb3I6
ICNGMDBCQUE7em9vOm1vbyAvKiBub3QgYW4gIWltcG9ydGFudCB1bnJlY29nbml6ZWQgcHJvcGVy
dHkgKi99LyogY29tbWVudCAqLworCitib2R5Lm1haW4ye2JhY2tncm91bmQ6IGdyZWVuIC8qIHZh
bHVlICFpbXBvcnRhbnQgY29tbWVudCAqLyAhaW1wb3J0YW50IC8qIG5vIHNlbWljb2xvbiwgdmVy
eSAhaW1wb3J0YW50ICovfQorCitib2R5OjphZnRlciAgeworICAgIGNvbnRlbnQ6ICJBZnRlciBi
b2R5IjsKK30KKworaDEgeworICAgIGhlaWdodCA6IDEwMCUgOyBib3JkZXI6IDFweCBzb2xpZDsg
Ym9yZGVyLXdpZHRoOiAycHg7IGJhY2tncm91bmQtY29sb3IgOiAjMzNGRjMzOyBnb29nbGVzOiBh
YnJhOyBmb286IC5iYXI7IC1tb3otZ29vZzogMSoqKjsgYm9yZGVyLXdpZHRoOiAwcHg7Cit9Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3N0eWxlcy1uZXctQVBJLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9z
dHlsZXMtbmV3LUFQSS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZTMyMmVkYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9z
dHlsZXMtbmV3LUFQSS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzNDAgQEAKK1Rlc3RzIHRoYXQg
SW5zcGVjdG9yQ1NTQWdlbnQgQVBJIG1ldGhvZHMgd29yayBhcyBleHBlY3RlZC4KKworSDEKKwor
Cis9PT0gQ29tcHV0ZWQgc3R5bGUgcHJvcGVydHkgY291bnQgZm9yIGJvZHkgPT09CitPSworCis9
PT0gTWF0Y2hlZCBydWxlcyBmb3IgYm9keSA9PT0KKworcnVsZQorYm9keTogW3VzZXItYWdlbnRd
CitbJ2Rpc3BsYXknOidibG9jayddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snbWFy
Z2luLXRvcCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snbWFyZ2luLXJp
Z2h0JzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydtYXJnaW4tYm90dG9t
JzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydtYXJnaW4tbGVmdCc6Jzhw
eCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKKworcnVsZQorYm9keTogW10KK1snZm9u
dC1zaXplJzonMTJweCddIEBbNS0yMV0gYWN0aXZlCitbJ2Zvbyc6J2JhciAhCisKKyAgICBpbXBv
cnRhbnQgLyogIWltcG9ydGFudCBwcm9wZXJ0eSBub3QgcmVjb2duaXplZCBieSBXZWJDb3JlICov
JyBpcy1pbXBvcnRhbnQgbm9uLXBhcnNlZF0gQFsyNi0xMDRdIGFjdGl2ZQorWydoZWlnaHQnOicx
MDAlICFpbXBvcnRhbnQnIGlzLWltcG9ydGFudF0gQFsxMDktMTMzXSBhY3RpdmUKK1snY29sb3J6
JzonIiFpbXBvcnRhbnQiJyBub24tcGFyc2VkXSBAWzEzOC0xNTldIGFjdGl2ZQorWydpbXBvcnRh
bnQnOicnIG5vbi1wYXJzZWRdIEBbMTY0LTE3NF0gYWN0aXZlCitbJ2NvbG9yJzonImJhZGNvbG9y
IiAhIGltcG9ydGFudCAvKiBnb29kIHByb3BlcnR5IHdpdGggc3RyYW5nZSB2YWx1ZSAqLycgaXMt
aW1wb3J0YW50XSBAWzE5MC0yNTldIGFjdGl2ZQorCitydWxlCitib2R5Lm1haW4xOiBbXQorWydj
b2xvcic6JyNGMDBCQUEnXSBAWzEzLTI4XSBhY3RpdmUKK1snem9vJzonbW9vIC8qIG5vdCBhbiAh
aW1wb3J0YW50IHVucmVjb2duaXplZCBwcm9wZXJ0eSAqLycgbm9uLXBhcnNlZF0gQFsyOC04MV0g
YWN0aXZlCisKK3J1bGUKK2JvZHkubWFpbjI6IFtdCitbJ2JhY2tncm91bmQnOidncmVlbiAvKiB2
YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAvKiBubyBzZW1pY29sb24sIHZl
cnkgIWltcG9ydGFudCAqLycgaXMtaW1wb3J0YW50XSBAWzAtOTVdIGFjdGl2ZQorWydiYWNrZ3Jv
dW5kLWltYWdlJzonaW5pdGlhbCcgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
IHN0eWxlCitbJ2JhY2tncm91bmQtcmVwZWF0LXgnOidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1yZXBlYXQteSc6J2luaXRp
YWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3Jv
dW5kLWF0dGFjaG1lbnQnOidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1wb3NpdGlvbi14JzonaW5pdGlhbCcgaXMtaW1wb3J0
YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtcG9zaXRpb24t
eSc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQor
WydiYWNrZ3JvdW5kLW9yaWdpbic6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLWNsaXAnOidpbml0aWFsJyBpcy1pbXBvcnRh
bnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1jb2xvcic6J2dy
ZWVuJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKKworcnVsZQor
Ym9keS5tYWlucGFnZTogW10KK1sndGV4dC1kZWNvcmF0aW9uJzonbm9uZSddIEBbNS0yN10gYWN0
aXZlCitbJ2JhZHByb3BlcnR5JzonMWJhZHZhbHVlMScgbm9uLXBhcnNlZF0gQFsxMDctMTMxXSBh
Y3RpdmUKKworPT09IFBzZXVkbyBydWxlcyBmb3IgYm9keSA9PT0KK1BzZXVkb0lkPTQKKworcnVs
ZQorYm9keTo6YWZ0ZXI6IFtdCitbJ2NvbnRlbnQnOiciQWZ0ZXIgYm9keSInXSBAWzUtMjddIGFj
dGl2ZQorCis9PT0gQXR0cmlidXRlIHN0eWxlcyBmb3IgdGFibGUgPT09CitBdHRyaWJ1dGU6IHdp
ZHRoCisKK3N0eWxlCityYXcgc3R5bGUKK1snd2lkdGgnOic1MCUnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdIHN0eWxlCisKKz09PSBJbmhlcml0ZWQgc3R5bGVzIGZvciBib2R5ID09PQorTGV2ZWw9
MQorCitydWxlCitodG1sOiBbdXNlci1hZ2VudF0KK1snZGlzcGxheSc6J2Jsb2NrJ10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorCitydWxlCitodG1sOiBbXQorWydmb250LXdlaWdodCc6
JzQwMCddIEBbNS0yMl0gYWN0aXZlCisKKz09PSBJbmxpbmUgc3R5bGUgZm9yIGJvZHkgPT09CisK
K3N0eWxlCityYXcgc3R5bGUKK1snZm9udC13ZWlnaHQnOidub3JtYWwnXSBAWzAtMjBdIGFjdGl2
ZQorWyd3aWR0aCc6Jzg1JSddIEBbMjEtMzFdIGFjdGl2ZQorCis9PT0gQWxsIHN0eWxlc2hlZXRz
ID09PQorCitTdHlsZVNoZWV0OiAnaHRtbCB7CisgICAgZm9udC13ZWlnaHQ6IDQwMDsKK30KKwor
Ym9keSB7CisgICAgZm9udC1zaXplOiAxMnB4OworICAgIGZvbzogYmFyICEKKworICAgIGltcG9y
dGFudCAvKiAhaW1wb3J0YW50IHByb3BlcnR5IG5vdCByZWNvZ25pemVkIGJ5IFdlYkNvcmUgKi87
CisgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7CisgICAgY29sb3J6OiAiIWltcG9ydGFudCI7
CisgICAgaW1wb3J0YW50OiFpbXBvcnRhbnQ7CisgICAgY29sb3I6ICJiYWRjb2xvciIgISBpbXBv
cnRhbnQgLyogZ29vZCBwcm9wZXJ0eSB3aXRoIHN0cmFuZ2UgdmFsdWUgKi87Cit9CisKKy8qIGNv
bW1lbnQgYmVmb3JlIHNlbGVjdG9yICovYm9keS5tYWluMS8qIGNvbW1lbnQgYWZ0ZXIgc2VsZWN0
b3IgKi97LyogY29tbWVudCAqL2NvbG9yOiAjRjAwQkFBO3pvbzptb28gLyogbm90IGFuICFpbXBv
cnRhbnQgdW5yZWNvZ25pemVkIHByb3BlcnR5ICovfS8qIGNvbW1lbnQgKi8KKworYm9keS5tYWlu
MntiYWNrZ3JvdW5kOiBncmVlbiAvKiB2YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9y
dGFudCAvKiBubyBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFudCAqL30KKworYm9keTo6YWZ0ZXIg
IHsKKyAgICBjb250ZW50OiAiQWZ0ZXIgYm9keSI7Cit9CisKK2gxIHsKKyAgICBoZWlnaHQgOiAx
MDAlIDsgYm9yZGVyOiAxcHggc29saWQ7IGJvcmRlci13aWR0aDogMnB4OyBiYWNrZ3JvdW5kLWNv
bG9yIDogIzMzRkYzMzsgZ29vZ2xlczogYWJyYTsgZm9vOiAuYmFyOyAtbW96LWdvb2c6IDEqKio7
IGJvcmRlci13aWR0aDogMHB4OworfScKKworcnVsZQoraHRtbDogW10KK1snZm9udC13ZWlnaHQn
Oic0MDAnXSBAWzUtMjJdIGFjdGl2ZQorCitydWxlCitib2R5OiBbXQorWydmb250LXNpemUnOicx
MnB4J10gQFs1LTIxXSBhY3RpdmUKK1snZm9vJzonYmFyICEKKworICAgIGltcG9ydGFudCAvKiAh
aW1wb3J0YW50IHByb3BlcnR5IG5vdCByZWNvZ25pemVkIGJ5IFdlYkNvcmUgKi8nIGlzLWltcG9y
dGFudCBub24tcGFyc2VkXSBAWzI2LTEwNF0gYWN0aXZlCitbJ2hlaWdodCc6JzEwMCUgIWltcG9y
dGFudCcgaXMtaW1wb3J0YW50XSBAWzEwOS0xMzNdIGFjdGl2ZQorWydjb2xvcnonOiciIWltcG9y
dGFudCInIG5vbi1wYXJzZWRdIEBbMTM4LTE1OV0gYWN0aXZlCitbJ2ltcG9ydGFudCc6Jycgbm9u
LXBhcnNlZF0gQFsxNjQtMTc0XSBhY3RpdmUKK1snY29sb3InOiciYmFkY29sb3IiICEgaW1wb3J0
YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0aCBzdHJhbmdlIHZhbHVlICovJyBpcy1pbXBvcnRhbnRd
IEBbMTkwLTI1OV0gYWN0aXZlCisKK3J1bGUKK2JvZHkubWFpbjE6IFtdCitbJ2NvbG9yJzonI0Yw
MEJBQSddIEBbMTMtMjhdIGFjdGl2ZQorWyd6b28nOidtb28gLyogbm90IGFuICFpbXBvcnRhbnQg
dW5yZWNvZ25pemVkIHByb3BlcnR5ICovJyBub24tcGFyc2VkXSBAWzI4LTgxXSBhY3RpdmUKKwor
cnVsZQorYm9keS5tYWluMjogW10KK1snYmFja2dyb3VuZCc6J2dyZWVuIC8qIHZhbHVlICFpbXBv
cnRhbnQgY29tbWVudCAqLyAhaW1wb3J0YW50IC8qIG5vIHNlbWljb2xvbiwgdmVyeSAhaW1wb3J0
YW50ICovJyBpcy1pbXBvcnRhbnRdIEBbMC05NV0gYWN0aXZlCitbJ2JhY2tncm91bmQtaW1hZ2Un
Oidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1sn
YmFja2dyb3VuZC1yZXBlYXQteCc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLXJlcGVhdC15JzonaW5pdGlhbCcgaXMtaW1w
b3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtYXR0YWNo
bWVudCc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHls
ZQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnOidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBbdW5k
ZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1wb3NpdGlvbi15JzonaW5pdGlh
bCcgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91
bmQtb3JpZ2luJzonaW5pdGlhbCcgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
IHN0eWxlCitbJ2JhY2tncm91bmQtY2xpcCc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLWNvbG9yJzonZ3JlZW4nIGlzLWlt
cG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorCitydWxlCitib2R5OjphZnRl
cjogW10KK1snY29udGVudCc6JyJBZnRlciBib2R5IiddIEBbNS0yN10gYWN0aXZlCisKK3J1bGUK
K2gxOiBbXQorWydoZWlnaHQnOicxMDAlJ10gQFs1LTIwXSBhY3RpdmUKK1snYm9yZGVyJzonMXB4
IHNvbGlkJ10gQFsyMS0zOV0gYWN0aXZlCitbJ2JvcmRlci13aWR0aCc6JzJweCddIEBbNDAtNThd
IGluYWN0aXZlCitbJ2JhY2tncm91bmQtY29sb3InOicjMzNGRjMzJ10gQFs1OS04Nl0gYWN0aXZl
CitbJ2dvb2dsZXMnOidhYnJhJyBub24tcGFyc2VkXSBAWzg3LTEwMV0gYWN0aXZlCitbJ2Zvbyc6
Jycgbm9uLXBhcnNlZF0gQFsxMDItMTA3XSBhY3RpdmUKK1snLW1vei1nb29nJzonMSoqKicgbm9u
LXBhcnNlZF0gQFsxMTMtMTI5XSBhY3RpdmUKK1snYm9yZGVyLXdpZHRoJzonMHB4J10gQFsxMzAt
MTQ4XSBhY3RpdmUKK1snYm9yZGVyLXRvcC1zdHlsZSc6J3NvbGlkJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXSBzdHlsZQorWydib3JkZXItcmlnaHQtc3R5bGUnOidzb2xpZCddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0gc3R5bGUKK1snYm9yZGVyLWJvdHRvbS1zdHlsZSc6J3NvbGlkJ10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydib3JkZXItbGVmdC1zdHlsZSc6J3NvbGlkJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydib3JkZXItY29sb3InOidpbml0aWFsJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydib3JkZXItdG9wLXdpZHRoJzonMHB4J10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydib3JkZXItcmlnaHQtd2lkdGgnOicwcHgnXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JvcmRlci1ib3R0b20td2lkdGgnOicwcHgn
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JvcmRlci1sZWZ0LXdpZHRoJzonMHB4
J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorCitTdHlsZVNoZWV0OiAnCisKKy8qIEFu
IGlubGluZSBzdHlsZXNoZWV0ICovCitib2R5Lm1haW5wYWdlIHsKKyAgICB0ZXh0LWRlY29yYXRp
b246IG5vbmU7IC8qIGF0IGxlYXN0IG9uZSB2YWxpZCBwcm9wZXJ0eSBpcyBuZWNlc3NhcnkgZm9y
IFdlYkNvcmUgdG8gbWF0Y2ggYSBydWxlICovCisgICAgYmFkcHJvcGVydHk6IDFiYWR2YWx1ZTE7
Cit9CisKKycKKworcnVsZQorYm9keS5tYWlucGFnZTogW10KK1sndGV4dC1kZWNvcmF0aW9uJzon
bm9uZSddIEBbNS0yN10gYWN0aXZlCitbJ2JhZHByb3BlcnR5JzonMWJhZHZhbHVlMScgbm9uLXBh
cnNlZF0gQFsxMDctMTMxXSBhY3RpdmUKKworPT09IExhc3Qgc3R5bGVzaGVldCBwYXRjaGVkID09
PQorCitTdHlsZVNoZWV0OiAnYm9keS5tYWlucGFnZSB7ICAgIHRleHQtZGVjb3JhdGlvbjogc3Ry
aWtldGhyb3VnaDsgICAgYmFkcHJvcGVydHk6IDJiYWR2YWx1ZTI7fWJvZHkgeyAgICB0ZXh0LWFs
aWduOiBqdXN0aWZ5O30nCisKK3J1bGUKK2JvZHkubWFpbnBhZ2U6IFtdCitbJ3RleHQtZGVjb3Jh
dGlvbic6J3N0cmlrZXRocm91Z2gnXSBAWzQtMzVdIGFjdGl2ZQorWydiYWRwcm9wZXJ0eSc6JzJi
YWR2YWx1ZTInIG5vbi1wYXJzZWRdIEBbMzktNjNdIGFjdGl2ZQorCitydWxlCitib2R5OiBbXQor
Wyd0ZXh0LWFsaWduJzonanVzdGlmeSddIEBbNC0yNF0gYWN0aXZlCisKKz09PSBBZnRlciBzZWxl
Y3RvciBzZXQgPT09CisKK1N0eWxlU2hlZXQ6ICdodG1sICosIGJvZHlbZm9vPSJiYXIiXSB7ICAg
IHRleHQtZGVjb3JhdGlvbjogc3RyaWtldGhyb3VnaDsgICAgYmFkcHJvcGVydHk6IDJiYWR2YWx1
ZTI7fWJvZHkgeyAgICB0ZXh0LWFsaWduOiBqdXN0aWZ5O30nCisKK3J1bGUKK2h0bWwgKiwgYm9k
eVtmb289ImJhciJdOiBbXQorWyd0ZXh0LWRlY29yYXRpb24nOidzdHJpa2V0aHJvdWdoJ10gQFs0
LTM1XSBhY3RpdmUKK1snYmFkcHJvcGVydHknOicyYmFkdmFsdWUyJyBub24tcGFyc2VkXSBAWzM5
LTYzXSBhY3RpdmUKKworcnVsZQorYm9keTogW10KK1sndGV4dC1hbGlnbic6J2p1c3RpZnknXSBA
WzQtMjRdIGFjdGl2ZQorCis9PT0gQWZ0ZXIgc3R5bGUgdGV4dCBzZXQgPT09CisKK1N0eWxlU2hl
ZXQ6ICdodG1sICosIGJvZHlbZm9vPSJiYXIiXSB7ICAgICAgICBjb2xvcjogd2hpdGU7IGJhY2tn
cm91bmQ6IGJsYWNrO31ib2R5IHsgICAgdGV4dC1hbGlnbjoganVzdGlmeTt9JworCitydWxlCito
dG1sICosIGJvZHlbZm9vPSJiYXIiXTogW10KK1snY29sb3InOid3aGl0ZSddIEBbOC0yMV0gYWN0
aXZlCitbJ2JhY2tncm91bmQnOidibGFjayddIEBbMjItNDBdIGFjdGl2ZQorWydiYWNrZ3JvdW5k
LWltYWdlJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dy
b3VuZC1yZXBlYXQteCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitb
J2JhY2tncm91bmQtcmVwZWF0LXknOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBz
dHlsZQorWydiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnOidpbml0aWFsJ10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXknOidpbml0aWFs
J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLW9yaWdpbic6J2lu
aXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtY2xpcCc6
J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtY29s
b3InOidibGFjayddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKKworcnVsZQorYm9keTog
W10KK1sndGV4dC1hbGlnbic6J2p1c3RpZnknXSBAWzQtMjRdIGFjdGl2ZQorCis9PT0gTWF0Y2hl
ZCBydWxlcyBhZnRlciBydWxlIGFkZGVkID09PQorCitydWxlCitib2R5OiBbdXNlci1hZ2VudF0K
K1snZGlzcGxheSc6J2Jsb2NrJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydtYXJn
aW4tdG9wJzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydtYXJnaW4tcmln
aHQnOic4cHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ21hcmdpbi1ib3R0b20n
Oic4cHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ21hcmdpbi1sZWZ0JzonOHB4
J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorCitydWxlCitib2R5OiBbXQorWydmb250
LXNpemUnOicxMnB4J10gQFs1LTIxXSBhY3RpdmUKK1snZm9vJzonYmFyICEKKworICAgIGltcG9y
dGFudCAvKiAhaW1wb3J0YW50IHByb3BlcnR5IG5vdCByZWNvZ25pemVkIGJ5IFdlYkNvcmUgKi8n
IGlzLWltcG9ydGFudCBub24tcGFyc2VkXSBAWzI2LTEwNF0gYWN0aXZlCitbJ2hlaWdodCc6JzEw
MCUgIWltcG9ydGFudCcgaXMtaW1wb3J0YW50XSBAWzEwOS0xMzNdIGFjdGl2ZQorWydjb2xvcnon
OiciIWltcG9ydGFudCInIG5vbi1wYXJzZWRdIEBbMTM4LTE1OV0gYWN0aXZlCitbJ2ltcG9ydGFu
dCc6Jycgbm9uLXBhcnNlZF0gQFsxNjQtMTc0XSBhY3RpdmUKK1snY29sb3InOiciYmFkY29sb3Ii
ICEgaW1wb3J0YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0aCBzdHJhbmdlIHZhbHVlICovJyBpcy1p
bXBvcnRhbnRdIEBbMTkwLTI1OV0gYWN0aXZlCisKK3J1bGUKK2h0bWwgKiwgYm9keVtmb289ImJh
ciJdOiBbXQorWydjb2xvcic6J3doaXRlJ10gQFs4LTIxXSBhY3RpdmUKK1snYmFja2dyb3VuZCc6
J2JsYWNrJ10gQFsyMi00MF0gYWN0aXZlCitbJ2JhY2tncm91bmQtaW1hZ2UnOidpbml0aWFsJ10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLXJlcGVhdC14JzonaW5p
dGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1yZXBlYXQt
eSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQt
YXR0YWNobWVudCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2Jh
Y2tncm91bmQtcG9zaXRpb24teCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0
eWxlCitbJ2JhY2tncm91bmQtcG9zaXRpb24teSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtb3JpZ2luJzonaW5pdGlhbCddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1jbGlwJzonaW5pdGlhbCddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1jb2xvcic6J2JsYWNrJ10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorCitydWxlCitib2R5OiBbXQorWyd0ZXh0LWFsaWduJzon
anVzdGlmeSddIEBbNC0yNF0gYWN0aXZlCisKK3J1bGUKK2JvZHk6IFtpbnNwZWN0b3JdCitbJ2Zv
bnQnOidzZXJpZiddIEBbMC0xMV0gYWN0aXZlCisKK3J1bGUKK2JvZHkubWFpbjE6IFtdCitbJ2Nv
bG9yJzonI0YwMEJBQSddIEBbMTMtMjhdIGFjdGl2ZQorWyd6b28nOidtb28gLyogbm90IGFuICFp
bXBvcnRhbnQgdW5yZWNvZ25pemVkIHByb3BlcnR5ICovJyBub24tcGFyc2VkXSBAWzI4LTgxXSBh
Y3RpdmUKKworcnVsZQorYm9keS5tYWluMjogW10KK1snYmFja2dyb3VuZCc6J2dyZWVuIC8qIHZh
bHVlICFpbXBvcnRhbnQgY29tbWVudCAqLyAhaW1wb3J0YW50IC8qIG5vIHNlbWljb2xvbiwgdmVy
eSAhaW1wb3J0YW50ICovJyBpcy1pbXBvcnRhbnRdIEBbMC05NV0gYWN0aXZlCitbJ2JhY2tncm91
bmQtaW1hZ2UnOidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0g
c3R5bGUKK1snYmFja2dyb3VuZC1yZXBlYXQteCc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLXJlcGVhdC15JzonaW5pdGlh
bCcgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91
bmQtYXR0YWNobWVudCc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnOidpbml0aWFsJyBpcy1pbXBvcnRh
bnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1wb3NpdGlvbi15
JzonaW5pdGlhbCcgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitb
J2JhY2tncm91bmQtb3JpZ2luJzonaW5pdGlhbCcgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtY2xpcCc6J2luaXRpYWwnIGlzLWltcG9ydGFu
dF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLWNvbG9yJzonZ3Jl
ZW4nIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorCis9PT0gQWZ0
ZXIgdHdvIHByb3BlcnRpZXMgZGlzYWJsZWQsIG9uZSBwcm9wZXJ0eSBhZGRlZCwgb25lIHByb3Bl
cnR5IHJlbW92ZWQgPT09CisKK3N0eWxlCityYXcgc3R5bGUKK1t0ZXh0PSdoZWlnaHQgOiAxMDAl
IDsnXSBkaXNhYmxlZAorWydib3JkZXInOicxcHggc29saWQnXSBAWzYtMjRdIGFjdGl2ZQorWydi
b3JkZXItd2lkdGgnOicycHgnXSBAWzI1LTQzXSBhY3RpdmUKK1snZ29vZ2xlcyc6J2FicmEnIG5v
bi1wYXJzZWRdIEBbNDUtNTldIGFjdGl2ZQorWydmb28nOicnIG5vbi1wYXJzZWRdIEBbNjAtNjVd
IGFjdGl2ZQorWyctbW96LWdvb2cnOicxKioqJyBub24tcGFyc2VkXSBAWzcxLTg3XSBhY3RpdmUK
K1snZm9udC1zaXplJzonMTJweCddIEBbODgtMTA0XSBhY3RpdmUKK1t0ZXh0PSdib3JkZXItd2lk
dGg6IDBweDsnXSBkaXNhYmxlZAorW3RleHQ9J2ZvbnQtc2l6ZTogMTRweDsnXSBkaXNhYmxlZAor
Wydib3JkZXItdG9wLXN0eWxlJzonc29saWQnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxl
CitbJ2JvcmRlci1yaWdodC1zdHlsZSc6J3NvbGlkJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBz
dHlsZQorWydib3JkZXItYm90dG9tLXN0eWxlJzonc29saWQnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdIHN0eWxlCitbJ2JvcmRlci1sZWZ0LXN0eWxlJzonc29saWQnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdIHN0eWxlCitbJ2JvcmRlci1jb2xvcic6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdIHN0eWxlCitbJ2JvcmRlci10b3Atd2lkdGgnOicycHgnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdIHN0eWxlCitbJ2JvcmRlci1yaWdodC13aWR0aCc6JzJweCddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0gc3R5bGUKK1snYm9yZGVyLWJvdHRvbS13aWR0aCc6JzJweCddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0gc3R5bGUKK1snYm9yZGVyLWxlZnQtd2lkdGgnOicycHgnXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdIHN0eWxlCisKKz09PSBBZnRlciBwcm9wZXJ0eSBlbmFibGVkID09PQorCitz
dHlsZQorcmF3IHN0eWxlCitbdGV4dD0naGVpZ2h0IDogMTAwJSA7J10gZGlzYWJsZWQKK1snYm9y
ZGVyJzonMXB4IHNvbGlkJ10gQFs2LTI0XSBhY3RpdmUKK1snYm9yZGVyLXdpZHRoJzonMnB4J10g
QFsyNS00M10gYWN0aXZlCitbJ2dvb2dsZXMnOidhYnJhJyBub24tcGFyc2VkXSBAWzQ1LTU5XSBh
Y3RpdmUKK1snZm9vJzonJyBub24tcGFyc2VkXSBAWzYwLTY1XSBhY3RpdmUKK1snLW1vei1nb29n
JzonMSoqKicgbm9uLXBhcnNlZF0gQFs3MS04N10gYWN0aXZlCitbJ2ZvbnQtc2l6ZSc6JzEycHgn
XSBAWzg4LTEwNF0gaW5hY3RpdmUKK1t0ZXh0PSdib3JkZXItd2lkdGg6IDBweDsnXSBkaXNhYmxl
ZAorWydmb250LXNpemUnOicxNHB4J10gQFsxMDUtMTIxXSBhY3RpdmUKK1snYm9yZGVyLXRvcC1z
dHlsZSc6J3NvbGlkJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydib3JkZXItcmln
aHQtc3R5bGUnOidzb2xpZCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYm9yZGVy
LWJvdHRvbS1zdHlsZSc6J3NvbGlkJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydi
b3JkZXItbGVmdC1zdHlsZSc6J3NvbGlkJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQor
Wydib3JkZXItY29sb3InOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQor
Wydib3JkZXItdG9wLXdpZHRoJzonMnB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQor
Wydib3JkZXItcmlnaHQtd2lkdGgnOicycHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxl
CitbJ2JvcmRlci1ib3R0b20td2lkdGgnOicycHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0
eWxlCitbJ2JvcmRlci1sZWZ0LXdpZHRoJzonMnB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBz
dHlsZQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEku
aHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtbmV3LUFQSS5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMzQxNTcKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEkuaHRtbApAQCAtMCwwICsxLDMxOCBA
QAorPGh0bWw+Cis8aGVhZD4KKworPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJj
ZXMvc3R5bGVzLW5ldy1BUEkuY3NzIiAtLT4KKworPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMv
aW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJlbGVt
ZW50cy10ZXN0cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBkb2l0KCkKK3sK
KyAgICBmdW5jdGlvbiBjYWxsYmFjayhyZXN1bHQpCisgICAgeworICAgICAgICBkdW1wQXJyYXko
cmVzdWx0KTsKKyAgICAgICAgbm90aWZ5RG9uZSgpOworICAgIH0KKyAgICBldmFsdWF0ZUluV2Vi
SW5zcGVjdG9yKCJmcm9udGVuZF9ydW5UZXN0IiwgY2FsbGJhY2spOworfQorCisKKy8vIEZyb250
ZW5kIGZ1bmN0aW9ucy4KKworZnVuY3Rpb24gZnJvbnRlbmRfcnVuVGVzdCh0ZXN0Q29udHJvbGxl
cikKK3sKKyAgICB0ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgZnJvbnRlbmRf
ZXhwYW5kRE9NU3VidHJlZShXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQpOworICAgIHRl
c3RDb250cm9sbGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoZnVuY3Rpb24oKSB7CisgICAg
ICAgIGZ1bmN0aW9uIGNvbXB1dGVkU3R5bGVDYWxsYmFjayh0ZXN0Q29udHJvbGxlciwgY29tcHV0
ZWRTdHlsZSkKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5w
dXNoKCIiKTsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IENv
bXB1dGVkIHN0eWxlIHByb3BlcnR5IGNvdW50IGZvciBib2R5ID09PSIpOworICAgICAgICAgICAg
dmFyIHByb3BDb3VudCA9IGNvbXB1dGVkU3R5bGUuY3NzUHJvcGVydGllcy5sZW5ndGg7CisgICAg
ICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2gocHJvcENvdW50ID4gMjAwID8gIk9L
IiA6ICJGQUlMICgiICsgcHJvcENvdW50ICsgIikiKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIG1hdGNoZWRSdWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBtYXRjaGVkQ1NTUnVs
ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgi
Iik7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBNYXRjaGVk
IHJ1bGVzIGZvciBib2R5ID09PSIpOworICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVzQXJy
YXkodGVzdENvbnRyb2xsZXIsIG1hdGNoZWRDU1NSdWxlcyk7CisgICAgICAgIH0KKworICAgICAg
ICBmdW5jdGlvbiBwc2V1ZG9SdWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBwc2V1ZG9SdWxl
cykKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIi
KTsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IFBzZXVkbyBy
dWxlcyBmb3IgYm9keSA9PT0iKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHNl
dWRvUnVsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5y
ZXN1bHRzLnB1c2goIlBzZXVkb0lkPSIgKyBwc2V1ZG9SdWxlc1tpXS5wc2V1ZG9JZCk7CisgICAg
ICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVzQXJyYXkodGVzdENvbnRyb2xsZXIsIHBzZXVk
b1J1bGVzW2ldLnJ1bGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIGF0dHJpYnV0ZVN0eWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBhdHRyaWJ1dGVT
dHlsZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVz
aCgiIik7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBBdHRy
aWJ1dGUgc3R5bGVzIGZvciB0YWJsZSA9PT0iKTsKKyAgICAgICAgICAgIGZvciAodmFyIGF0dHIg
aW4gYXR0cmlidXRlU3R5bGVzKSB7CisgICAgICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVz
dWx0cy5wdXNoKCJBdHRyaWJ1dGU6ICIgKyBhdHRyKTsKKyAgICAgICAgICAgICAgICBmcm9udGVu
ZF9kdW1wUnVsZU9yU3R5bGUodGVzdENvbnRyb2xsZXIsIGF0dHJpYnV0ZVN0eWxlc1thdHRyXSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBpbmhlcml0ZWRT
dHlsZXNDYWxsYmFjayh0ZXN0Q29udHJvbGxlciwgaW5oZXJpdGVkU3R5bGVzKQorICAgICAgICB7
CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICAg
ICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gSW5oZXJpdGVkIHN0eWxlcyBmb3Ig
Ym9keSA9PT0iKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5oZXJpdGVkU3R5
bGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0
cy5wdXNoKCJMZXZlbD0iICsgKGkgKyAxKSk7CisgICAgICAgICAgICAgICAgZnJvbnRlbmRfZHVt
cFJ1bGVPclN0eWxlKHRlc3RDb250cm9sbGVyLCBpbmhlcml0ZWRTdHlsZXNbaV0uaW5saW5lU3R5
bGUpOworICAgICAgICAgICAgICAgIGZyb250ZW5kX2R1bXBSdWxlc0FycmF5KHRlc3RDb250cm9s
bGVyLCBpbmhlcml0ZWRTdHlsZXNbaV0ubWF0Y2hlZENTU1J1bGVzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGlubGluZVN0eWxlQ2FsbGJhY2sodGVzdENv
bnRyb2xsZXIsIGlubGluZVN0eWxlKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0Q29udHJv
bGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0
cy5wdXNoKCI9PT0gSW5saW5lIHN0eWxlIGZvciBib2R5ID09PSIpOworICAgICAgICAgICAgZnJv
bnRlbmRfZHVtcFJ1bGVPclN0eWxlKHRlc3RDb250cm9sbGVyLCBpbmxpbmVTdHlsZSk7CisgICAg
ICAgICAgICBmcm9udGVuZF90ZXN0U3R5bGVTaGVldHModGVzdENvbnRyb2xsZXIpOworICAgICAg
ICB9CisKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIo
V2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsIGNvbXB1dGVkU3R5bGVDYWxs
YmFjay5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgICAgIEluc3BlY3RvckJhY2tl
bmQuZ2V0TWF0Y2hlZFJ1bGVzRm9yTm9kZTIoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50
LmJvZHkuaWQsIG1hdGNoZWRSdWxlc0NhbGxiYWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIp
KTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRNYXRjaGVkUHNldWRvUnVsZXNGb3JOb2Rl
MihXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQuYm9keS5pZCwgcHNldWRvUnVsZXNDYWxs
YmFjay5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgICAgIEluc3BlY3RvckJhY2tl
bmQuZ2V0QXR0cmlidXRlU3R5bGVzRm9yTm9kZTIoZnJvbnRlbmRfbm9kZUZvcklkKCJ0aGV0YWJs
ZSIpLmlkLCBhdHRyaWJ1dGVTdHlsZXNDYWxsYmFjay5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVy
KSk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0SW5oZXJpdGVkU3R5bGVzRm9yTm9kZTIo
V2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsIGluaGVyaXRlZFN0eWxlc0Nh
bGxiYWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICAgICAgSW5zcGVjdG9yQmFj
a2VuZC5nZXRJbmxpbmVTdHlsZUZvck5vZGUyKFdlYkluc3BlY3Rvci5kb21BZ2VudC5kb2N1bWVu
dC5ib2R5LmlkLCBpbmxpbmVTdHlsZUNhbGxiYWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIp
KTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfdGVzdFN0eWxlU2hlZXRzKHRlc3RD
b250cm9sbGVyKQorewordmFyIG5ld1N0eWxlU2hlZXRUZXh0ID0KKyJib2R5Lm1haW5wYWdlIHtc
CisgICAgdGV4dC1kZWNvcmF0aW9uOiBzdHJpa2V0aHJvdWdoO1wKKyAgICBiYWRwcm9wZXJ0eTog
MmJhZHZhbHVlMjtcCit9XAorXAorYm9keSB7XAorICAgIHRleHQtYWxpZ246IGp1c3RpZnk7XAor
fVwKKyI7CisKKyAgICBmdW5jdGlvbiBwYXRjaFN0eWxlU2hlZXQodGVzdENvbnRyb2xsZXIsIHN0
eWxlU2hlZXQpCisgICAgeworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIp
OworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBMYXN0IHN0eWxlc2hl
ZXQgcGF0Y2hlZCA9PT0iKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRTdHlsZVNoZWV0
VGV4dDIoc3R5bGVTaGVldC5zdHlsZVNoZWV0SWQsIG5ld1N0eWxlU2hlZXRUZXh0LAorICAgICAg
ICAgICAgZnJvbnRlbmRfbG9hZEFuZER1bXBTdHlsZVNoZWV0LmJpbmQobnVsbCwgdGVzdENvbnRy
b2xsZXIsIHN0eWxlU2hlZXQuc3R5bGVTaGVldElkLCBmcm9udGVuZF9jaGFuZ2VTZWxlY3Rvci5i
aW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSkpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHN0eWxl
U2hlZXRJZHNMb2FkZWQodGVzdENvbnRyb2xsZXIsIGlkcykKKyAgICB7CisgICAgICAgIHRlc3RD
b250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3Vs
dHMucHVzaCgiPT09IEFsbCBzdHlsZXNoZWV0cyA9PT0iKTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBpZHMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBmcm9udGVuZF9sb2FkQW5kRHVt
cFN0eWxlU2hlZXQodGVzdENvbnRyb2xsZXIsIGlkc1tpXSwgKGkgPCBpZHMubGVuZ3RoIC0gMSkg
PyBudWxsIDogcGF0Y2hTdHlsZVNoZWV0LmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAg
ICB9CisgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRBbGxTdHlsZXMyKHN0eWxlU2hlZXRJZHNMb2Fk
ZWQuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworfQorCitmdW5jdGlvbiBmcm9udGVuZF9j
aGFuZ2VTZWxlY3Rvcih0ZXN0Q29udHJvbGxlciwgc3R5bGVTaGVldCkKK3sKKyAgICBmdW5jdGlv
biBkaWRTZXRTZWxlY3Rvcih0ZXN0Q29udHJvbGxlciwgcnVsZSkKKyAgICB7CisgICAgICAgIHRl
c3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJl
c3VsdHMucHVzaCgiPT09IEFmdGVyIHNlbGVjdG9yIHNldCA9PT0iKTsKKyAgICAgICAgZnJvbnRl
bmRfbG9hZEFuZER1bXBTdHlsZVNoZWV0KHRlc3RDb250cm9sbGVyLCBmcm9udGVuZF9wYXJlbnRT
dHlsZVNoZWV0SWQocnVsZS5ydWxlSWQpLCBmcm9udGVuZF9zZXRTdHlsZVRleHQuYmluZChudWxs
LCB0ZXN0Q29udHJvbGxlcikpOworICAgICAgICAvL2Zyb250ZW5kX2xvYWRBbmREdW1wU3R5bGVT
aGVldCh0ZXN0Q29udHJvbGxlciwgZnJvbnRlbmRfcGFyZW50U3R5bGVTaGVldElkKHJ1bGUucnVs
ZUlkKSwgZnJvbnRlbmRfYWRkUnVsZS5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAg
fQorCisgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRSdWxlU2VsZWN0b3IyKHN0eWxlU2hlZXQucnVs
ZXNbMF0ucnVsZUlkLCAiaHRtbCAqLCBib2R5W2Zvbz1cImJhclwiXSIsIGRpZFNldFNlbGVjdG9y
LmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfcGFy
ZW50U3R5bGVTaGVldElkKHJ1bGVPclN0eWxlSWQpCit7CisgICAgcmV0dXJuIHJ1bGVPclN0eWxl
SWQuc3Vic3RyaW5nKDAsIHJ1bGVPclN0eWxlSWQuaW5kZXhPZignOicpKTsKK30KKworCitmdW5j
dGlvbiBmcm9udGVuZF9zZXRTdHlsZVRleHQodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXQpCit7
CisgICAgZnVuY3Rpb24gZGlkU2V0U3R5bGVUZXh0KHRlc3RDb250cm9sbGVyLCBzdHlsZSkKKyAg
ICB7CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgIHRl
c3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IEFmdGVyIHN0eWxlIHRleHQgc2V0ID09PSIp
OworICAgICAgICBmcm9udGVuZF9sb2FkQW5kRHVtcFN0eWxlU2hlZXQodGVzdENvbnRyb2xsZXIs
IGZyb250ZW5kX3BhcmVudFN0eWxlU2hlZXRJZChzdHlsZS5zdHlsZUlkKSwgZnJvbnRlbmRfYWRk
UnVsZS5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgfQorCisgICAgSW5zcGVjdG9y
QmFja2VuZC5zZXRQcm9wZXJ0eVRleHQyKHN0eWxlU2hlZXQucnVsZXNbMF0uc3R5bGUuc3R5bGVJ
ZCwgMCwgIiIsIHRydWUpOworICAgIEluc3BlY3RvckJhY2tlbmQuc2V0UHJvcGVydHlUZXh0Mihz
dHlsZVNoZWV0LnJ1bGVzWzBdLnN0eWxlLnN0eWxlSWQsIDAsICIiLCB0cnVlKTsKKyAgICBJbnNw
ZWN0b3JCYWNrZW5kLnNldFByb3BlcnR5VGV4dDIoc3R5bGVTaGVldC5ydWxlc1swXS5zdHlsZS5z
dHlsZUlkLCAwLCAiY29sb3I6IHdoaXRlOyBiYWNrZ3JvdW5kOiBibGFjazsiLCBmYWxzZSwgZGlk
U2V0U3R5bGVUZXh0LmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24g
ZnJvbnRlbmRfYWRkUnVsZSh0ZXN0Q29udHJvbGxlcikKK3sKKyAgICBmdW5jdGlvbiBkaWRHZXRN
YXRjaGVkUnVsZXModGVzdENvbnRyb2xsZXIsIG1hdGNoZWRDU1NSdWxlcykKKyAgICB7CisgICAg
ICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgIHRlc3RDb250cm9s
bGVyLnJlc3VsdHMucHVzaCgiPT09IE1hdGNoZWQgcnVsZXMgYWZ0ZXIgcnVsZSBhZGRlZCA9PT0i
KTsKKyAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVzQXJyYXkodGVzdENvbnRyb2xsZXIsIG1hdGNo
ZWRDU1NSdWxlcyk7CisgICAgICAgIGZyb250ZW5kX2Rpc2FibGVQcm9wZXJ0eSh0ZXN0Q29udHJv
bGxlcik7CisgICAgfQorCisgICAgZnVuY3Rpb24gZGlkU2V0U3R5bGVUZXh0KHRlc3RDb250cm9s
bGVyLCBzdHlsZSkKKyAgICB7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0TWF0Y2hlZFJ1
bGVzRm9yTm9kZTIoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsIGRpZEdl
dE1hdGNoZWRSdWxlcy5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gcnVsZUFkZGVkKHRlc3RDb250cm9sbGVyLCBydWxlKQorICAgIHsKKyAgICAgICAg
SW5zcGVjdG9yQmFja2VuZC5zZXRQcm9wZXJ0eVRleHQyKHJ1bGUuc3R5bGUuc3R5bGVJZCwgMCwg
ImZvbnQ6IHNlcmlmIiwgZmFsc2UsIGRpZFNldFN0eWxlVGV4dC5iaW5kKG51bGwsIHRlc3RDb250
cm9sbGVyKSk7CisgICAgfQorCisgICAgSW5zcGVjdG9yQmFja2VuZC5hZGRSdWxlMihXZWJJbnNw
ZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQuYm9keS5pZCwgImJvZHkiLCBydWxlQWRkZWQuYmluZChu
dWxsLCB0ZXN0Q29udHJvbGxlcikpOworfQorCitmdW5jdGlvbiBmcm9udGVuZF9kaXNhYmxlUHJv
cGVydHkodGVzdENvbnRyb2xsZXIpCit7CisgICAgZnVuY3Rpb24gZGlkRGlzYWJsZVByb3BlcnR5
KHRlc3RDb250cm9sbGVyLCBzdHlsZSkKKyAgICB7CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJl
c3VsdHMucHVzaCgiIik7CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09
IEFmdGVyIHR3byBwcm9wZXJ0aWVzIGRpc2FibGVkLCBvbmUgcHJvcGVydHkgYWRkZWQsIG9uZSBw
cm9wZXJ0eSByZW1vdmVkID09PSIpOworICAgICAgICBmcm9udGVuZF9kdW1wUnVsZU9yU3R5bGUo
dGVzdENvbnRyb2xsZXIsIHN0eWxlKTsKKyAgICAgICAgZnJvbnRlbmRfZW5hYmxlUHJvcGVydHko
dGVzdENvbnRyb2xsZXIsIHN0eWxlLnN0eWxlSWQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIG1h
dGNoZWRSdWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBydWxlcykKKyAgICB7CisgICAgICAg
IC8vIGhlaWdodCA6IDEwMCUgOworICAgICAgICAvLyBib3JkZXI6IDFweCBzb2xpZDsKKyAgICAg
ICAgLy8gYm9yZGVyLXdpZHRoOiAycHg7CisgICAgICAgIC8vIGJhY2tncm91bmQtY29sb3IgOiAj
MzNGRjMzOworICAgICAgICAvLyBnb29nbGVzOiBhYnJhOworICAgICAgICAvLyBmb286IC5iYXI7
CisgICAgICAgIC8vIC1tb3otZ29vZzogMSoqKjsKKyAgICAgICAgLy8gYm9yZGVyLXdpZHRoOiAw
cHg7CisKKyAgICAgICAgdmFyIHN0eWxlID0gcnVsZXNbMV0uc3R5bGU7CisgICAgICAgIEluc3Bl
Y3RvckJhY2tlbmQudG9nZ2xlUHJvcGVydHkyKHN0eWxlLnN0eWxlSWQsIDAsIHRydWUpOyAvLyBo
ZWlnaHQ6IDEwMCUKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC50b2dnbGVQcm9wZXJ0eTIoc3R5
bGUuc3R5bGVJZCwgNywgdHJ1ZSk7IC8vIGJvcmRlci13aWR0aDogMHB4CisgICAgICAgIEluc3Bl
Y3RvckJhY2tlbmQuc2V0UHJvcGVydHlUZXh0MihzdHlsZS5zdHlsZUlkLCA3LCAiZm9udC1zaXpl
OiAxMnB4OyIsIGZhbHNlKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRQcm9wZXJ0eVRl
eHQyKHN0eWxlLnN0eWxlSWQsIDksICJmb250LXNpemU6IDE0cHg7IiwgZmFsc2UpOworICAgICAg
ICBJbnNwZWN0b3JCYWNrZW5kLnRvZ2dsZVByb3BlcnR5MihzdHlsZS5zdHlsZUlkLCA5LCB0cnVl
KTsgLy8gZm9udC1zaXplOiAxNHB4CisgICAgICAgIC8vIGhlaWdodCA6IDEwMCUgOyBbZF0KKyAg
ICAgICAgLy8gYm9yZGVyOiAxcHggc29saWQ7CisgICAgICAgIC8vIGJvcmRlci13aWR0aDogMnB4
OworICAgICAgICAvLyBiYWNrZ3JvdW5kLWNvbG9yIDogIzMzRkYzMzsKKyAgICAgICAgLy8gZ29v
Z2xlczogYWJyYTsKKyAgICAgICAgLy8gZm9vOiAuYmFyOworICAgICAgICAvLyAtbW96LWdvb2c6
IDEqKio7CisgICAgICAgIC8vIGZvbnQtc2l6ZTogMTJweDsKKyAgICAgICAgLy8gYm9yZGVyLXdp
ZHRoOiAwcHg7IFtkXQorICAgICAgICAvLyBmb250LXNpemU6IDE0cHg7IFtkXQorCisgICAgICAg
IEluc3BlY3RvckJhY2tlbmQuc2V0UHJvcGVydHlUZXh0MihzdHlsZS5zdHlsZUlkLCAzLCAiIiwg
dHJ1ZSwgZGlkRGlzYWJsZVByb3BlcnR5LmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAg
ICB9CisKKyAgICB2YXIgdG9nZ2xlRWxlbWVudCA9IGZyb250ZW5kX25vZGVGb3JJZCgidG9nZ2xl
Iik7CisgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRNYXRjaGVkUnVsZXNGb3JOb2RlMih0b2dnbGVF
bGVtZW50LmlkLCBtYXRjaGVkUnVsZXNDYWxsYmFjay5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVy
KSk7Cit9CisKK2Z1bmN0aW9uIGZyb250ZW5kX2VuYWJsZVByb3BlcnR5KHRlc3RDb250cm9sbGVy
LCBzdHlsZUlkKQoreworICAgIGZ1bmN0aW9uIGRpZEVuYWJsZVByb3BlcnR5KHRlc3RDb250cm9s
bGVyLCBzdHlsZSkKKyAgICB7CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgi
Iik7CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IEFmdGVyIHByb3Bl
cnR5IGVuYWJsZWQgPT09Iik7CisgICAgICAgIGZyb250ZW5kX2R1bXBSdWxlT3JTdHlsZSh0ZXN0
Q29udHJvbGxlciwgc3R5bGUpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKHRl
c3RDb250cm9sbGVyLnJlc3VsdHMpOworICAgIH0KKworICAgIEluc3BlY3RvckJhY2tlbmQudG9n
Z2xlUHJvcGVydHkyKHN0eWxlSWQsIDYsIGZhbHNlKTsKKyAgICBJbnNwZWN0b3JCYWNrZW5kLnRv
Z2dsZVByb3BlcnR5MihzdHlsZUlkLCA4LCBmYWxzZSwgZGlkRW5hYmxlUHJvcGVydHkuYmluZChu
dWxsLCB0ZXN0Q29udHJvbGxlcikpOworfQorCisvLyBEYXRhIGR1bXBpbmcKKworZnVuY3Rpb24g
ZnJvbnRlbmRfZHVtcFJ1bGVzQXJyYXkodGVzdENvbnRyb2xsZXIsIHJ1bGVzKQoreworICAgIGlm
ICghcnVsZXMpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVz
Lmxlbmd0aDsgKytpKQorICAgICAgICBmcm9udGVuZF9kdW1wUnVsZU9yU3R5bGUodGVzdENvbnRy
b2xsZXIsIHJ1bGVzW2ldKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfZHVtcFJ1bGVPclN0eWxl
KHRlc3RDb250cm9sbGVyLCBydWxlT3JTdHlsZSkKK3sKKyAgICBpZiAoIXJ1bGVPclN0eWxlKQor
ICAgICAgICByZXR1cm47CisgICAgdmFyIGlzUnVsZSA9ICEhKHJ1bGVPclN0eWxlLnN0eWxlKTsK
KyAgICB2YXIgc3R5bGUgPSBpc1J1bGUgPyBydWxlT3JTdHlsZS5zdHlsZSA6IHJ1bGVPclN0eWxl
OworICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgdGVzdENvbnRyb2xs
ZXIucmVzdWx0cy5wdXNoKGlzUnVsZSA/ICJydWxlIiA6ICJzdHlsZSIpOworICAgIHRlc3RDb250
cm9sbGVyLnJlc3VsdHMucHVzaCgoaXNSdWxlID8gKHJ1bGVPclN0eWxlLnNlbGVjdG9yVGV4dCAr
ICI6IFsiICsgcnVsZU9yU3R5bGUub3JpZ2luICsgIl0iKSA6ICJyYXcgc3R5bGUiKSk7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZS5jc3NQcm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIHZhciBwcm9wZXJ0eSA9IHN0eWxlLmNzc1Byb3BlcnRpZXNbaV07CisgICAgICAgIGlm
IChwcm9wZXJ0eS5zdGF0dXMgIT09ICJkaXNhYmxlZCIpCisgICAgICAgICAgICB0ZXN0Q29udHJv
bGxlci5yZXN1bHRzLnB1c2goIlsnIiArIHByb3BlcnR5Lm5hbWUgKyAiJzonIiArIHByb3BlcnR5
LnZhbHVlICsgIiciICsgKHByb3BlcnR5LnByaW9yaXR5ID09PSAiaW1wb3J0YW50IiA/ICIgaXMt
aW1wb3J0YW50IiA6ICIiKSArIChwcm9wZXJ0eS5wYXJzZWRPayA/ICIiIDogIiBub24tcGFyc2Vk
IikgKyJdIEBbIiArIHByb3BlcnR5LnN0YXJ0T2Zmc2V0ICsgIi0iICsgcHJvcGVydHkuZW5kT2Zm
c2V0ICsgIl0gIiArIHByb3BlcnR5LnN0YXR1cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiW3RleHQ9JyIgKyBwcm9wZXJ0eS50ZXh0ICsg
IiddICIgKyBwcm9wZXJ0eS5zdGF0dXMpOworICAgIH0KK30KKworCitmdW5jdGlvbiBmcm9udGVu
ZF9sb2FkQW5kRHVtcFN0eWxlU2hlZXQodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXRJZCwgY29u
dGludWF0aW9uKQoreworICAgIGZ1bmN0aW9uIHN0eWxlU2hlZXRMb2FkZWQodGVzdENvbnRyb2xs
ZXIsIHN0eWxlU2hlZXQpCisgICAgeworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1
c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIlN0eWxlU2hlZXQ6
ICciICsgc3R5bGVTaGVldC50ZXh0ICsgIiciKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBzdHlsZVNoZWV0LnJ1bGVzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgZnJvbnRlbmRfZHVt
cFJ1bGVPclN0eWxlKHRlc3RDb250cm9sbGVyLCBzdHlsZVNoZWV0LnJ1bGVzW2ldKTsKKyAgICAg
ICAgaWYgKGNvbnRpbnVhdGlvbikKKyAgICAgICAgICAgIGNvbnRpbnVhdGlvbihzdHlsZVNoZWV0
KTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlU2hlZXQyKHN0eWxlU2hl
ZXRJZCwgc3R5bGVTaGVldExvYWRlZC5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7Cit9CisK
Ky8qCitDb3ZlcmVkIEFQSSBtZXRob2RzOgorIC0gZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUyCisg
LSBnZXRNYXRjaGVkUnVsZXNGb3JOb2RlMgorIC0gZ2V0TWF0Y2hlZFBzZXVkb1J1bGVzRm9yTm9k
ZTIKKyAtIGdldEF0dHJpYnV0ZVN0eWxlc0Zvck5vZGUyCisgLSBnZXRJbmhlcml0ZWRTdHlsZXNG
b3JOb2RlMgorIC0gZ2V0SW5saW5lU3R5bGVGb3JOb2RlMgorIC0gZ2V0QWxsU3R5bGVzMgorIC0g
Z2V0U3R5bGVTaGVldDIKKyAtIHNldFN0eWxlU2hlZXRUZXh0MgorIC0gc2V0U3R5bGVEYXRhMgor
IC0gc2V0UnVsZVNlbGVjdG9yMgorIC0gYWRkUnVsZTIKKyovCisKKzwvc2NyaXB0PgorCis8c3R5
bGU+CisKKy8qIEFuIGlubGluZSBzdHlsZXNoZWV0ICovCitib2R5Lm1haW5wYWdlIHsKKyAgICB0
ZXh0LWRlY29yYXRpb246IG5vbmU7IC8qIGF0IGxlYXN0IG9uZSB2YWxpZCBwcm9wZXJ0eSBpcyBu
ZWNlc3NhcnkgZm9yIFdlYkNvcmUgdG8gbWF0Y2ggYSBydWxlICovCisgICAgYmFkcHJvcGVydHk6
IDFiYWR2YWx1ZTE7Cit9CisKKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGNsYXNzPSJtYWlu
MSBtYWluMiBtYWlucGFnZSIgb25sb2FkPSJvbmxvYWQoKSIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBu
b3JtYWw7IHdpZHRoOiA4NSUiPgorPHA+CitUZXN0cyB0aGF0IEluc3BlY3RvckNTU0FnZW50IEFQ
SSBtZXRob2RzIHdvcmsgYXMgZXhwZWN0ZWQuCis8L3A+Cis8dGFibGUgd2lkdGg9NTAlIGlkPSJ0
aGV0YWJsZSI+Cis8L3RhYmxlPgorPGgxIGlkPSJ0b2dnbGUiPkgxPC9oMT4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9m
ZnNldHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Ut
b2Zmc2V0cy1leHBlY3RlZC50eHQKaW5kZXggZTRkMzNkOC4uYmVlYzcyOCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy1leHBlY3Rl
ZC50eHQKQEAgLTEsNiArMSw2IEBACiBUZXN0cyB0aGF0IHByb3BlciBkYXRhIGFuZCBzdGFydC9l
bmQgb2Zmc2V0IHBvc2l0aW9ucyBhcmUgcmVwb3J0ZWQgZm9yIENTUyBzdHlsZSBkZWNsYXJhdGlv
bnMgYW5kIHByb3BlcnRpZXMuCiAKLWJvZHk6IFs2LTI2Nl0KK2JvZHk6IFswLTRdIFs2LTI2Nl0K
IFsnZm9udC1zaXplJzonMTJweCddIEBbNS0yMV0KIFsnZm9vJzonYmFyICEKIApAQCAtOSwxNSAr
OSwxNSBAQCBib2R5OiBbNi0yNjZdCiBbJ2NvbG9yeic6JyIhaW1wb3J0YW50Iicgbm9uLXBhcnNl
ZF0gQFsxMzgtMTU5XQogWydpbXBvcnRhbnQnOicnIG5vbi1wYXJzZWRdIEBbMTY0LTE3NF0KIFsn
Y29sb3InOiciYmFkY29sb3IiICEgaW1wb3J0YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0aCBzdHJh
bmdlIHZhbHVlICovJyAhaW1wb3J0YW50XSBAWzE5MC0yNTldCi1ib2R5Lm1haW4xOiBbMzM3LTQx
OF0KK2JvZHkubWFpbjE6IFsyOTgtMzM2XSBbMzM3LTQxOF0KIFsnY29sb3InOicjRjAwQkFBJ10g
QFsxMy0yOF0KIFsnem9vJzonbW9vIC8qIG5vdCBhbiAhaW1wb3J0YW50IHVucmVjb2duaXplZCBw
cm9wZXJ0eSAqLycgbm9uLXBhcnNlZF0gQFsyOC04MV0KLWJvZHkubWFpbjI6IFs0NDUtNTQwXQor
Ym9keS5tYWluMjogWzQzNC00NDRdIFs0NDUtNTQwXQogWydiYWNrZ3JvdW5kJzonZ3JlZW4gLyog
dmFsdWUgIWltcG9ydGFudCBjb21tZW50ICovICFpbXBvcnRhbnQgLyogbm8gc2VtaWNvbG9uLCB2
ZXJ5ICFpbXBvcnRhbnQgKi8nICFpbXBvcnRhbnRdIEBbMC05NV0KLWJvZHkubWFpbnBhZ2U6IFsx
Ny0xNDldCitib2R5Lm1haW5wYWdlOiBbMi0xNV0gWzE3LTE0OV0KIFsndGV4dC1kZWNvcmF0aW9u
Jzonbm9uZSddIEBbNS0yN10KIFsnYmFkcHJvcGVydHknOicxYmFkdmFsdWUxJyBub24tcGFyc2Vk
XSBAWzEwNy0xMzFdCi1lbGVtZW50LnN0eWxlOiBbMC0zMV0KK2VsZW1lbnQuc3R5bGU6IFswLTBd
IFswLTMxXQogWydmb250LXdlaWdodCc6J25vcm1hbCddIEBbMC0yMF0KIFsnd2lkdGgnOic4MCUn
XSBAWzIxLTMxXQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNv
dXJjZS1vZmZzZXRzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1v
ZmZzZXRzLmh0bWwKaW5kZXggZmNmOTI4Zi4uYjkzMTg5ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sCisrKyBiL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbApAQCAtMjQsMTEgKzI0LDYgQEAg
ZnVuY3Rpb24gZG9pdCgpCiAKIGZ1bmN0aW9uIGZyb250ZW5kX3J1blRlc3QodGVzdENvbnRyb2xs
ZXIpCiB7Ci0gICAgaWYgKCFXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5yZXNvdXJjZVRy
YWNraW5nRW5hYmxlZCkgewotICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5f
dG9nZ2xlUmVzb3VyY2VUcmFja2luZygpOwotICAgICAgICByZXR1cm4gInJlZnJlc2hpbmciOwot
ICAgIH0KLQogICAgIHRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKICAgICBmcm9udGVu
ZF9leHBhbmRET01TdWJ0cmVlKFdlYkluc3BlY3Rvci5kb21BZ2VudC5kb2N1bWVudCk7CiAgICAg
dGVzdENvbnRyb2xsZXIucnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcyhmdW5jdGlvbigpIHsKQEAg
LTQ4LDcgKzQzLDcgQEAgZnVuY3Rpb24gZnJvbnRlbmRfcnVuVGVzdCh0ZXN0Q29udHJvbGxlcikK
IGZ1bmN0aW9uIGZyb250ZW5kX3N0eWxlRGF0YVJlY2VpdmVkKHRlc3RDb250cm9sbGVyLCBydWxl
T3JTdHlsZSwgc2hvdWxkQmFpbCwgZGF0YSkKIHsKICAgICB2YXIgaXNSdWxlID0gISEocnVsZU9y
U3R5bGUuc3R5bGUpOwotICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgoaXNSdWxlID8g
cnVsZU9yU3R5bGUuc2VsZWN0b3JUZXh0IDogImVsZW1lbnQuc3R5bGUiKSArICI6IFsiICsgZGF0
YS5ib2R5UmFuZ2Uuc3RhcnQgKyAiLSIgKyBkYXRhLmJvZHlSYW5nZS5lbmQgKyAiXSIpOworICAg
IHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgoaXNSdWxlID8gcnVsZU9yU3R5bGUuc2VsZWN0
b3JUZXh0IDogImVsZW1lbnQuc3R5bGUiKSArICI6IFsiICsgZGF0YS5zZWxlY3RvclJhbmdlLnN0
YXJ0ICsgIi0iICsgZGF0YS5zZWxlY3RvclJhbmdlLmVuZCArICJdIFsiICsgZGF0YS5ib2R5UmFu
Z2Uuc3RhcnQgKyAiLSIgKyBkYXRhLmJvZHlSYW5nZS5lbmQgKyAiXSIpOwogICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZGF0YS5wcm9wZXJ0eURhdGEubGVuZ3RoOyArK2kpIHsKICAgICAgICAgdmFy
IHByb3BlcnR5RGF0dW0gPSBkYXRhLnByb3BlcnR5RGF0YVtpXTsKICAgICAgICAgdGVzdENvbnRy
b2xsZXIucmVzdWx0cy5wdXNoKCJbJyIgKyBwcm9wZXJ0eURhdHVtLm5hbWUgKyAiJzonIiArIHBy
b3BlcnR5RGF0dW0udmFsdWUgKyAiJyIgKyAocHJvcGVydHlEYXR1bS5pbXBvcnRhbnQgPyAiICFp
bXBvcnRhbnQiIDogIiIpICsgKHByb3BlcnR5RGF0dW0ucGFyc2VkID8gIiIgOiAiIG5vbi1wYXJz
ZWQiKSArIl0gQFsiICsgcHJvcGVydHlEYXR1bS5zdGFydCArICItIiArIHByb3BlcnR5RGF0dW0u
ZW5kICsgIl0iKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucG0gYi9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBt
CmluZGV4IGE1NjY1NzYuLjgzOWIyOWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5wbQpAQCAtMzgsNiArMzgsMTEgQEAgJHR5cGVUcmFuc2Zvcm17IkRPTSJ9
ID0gewogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JET01BZ2VudC5oIiwKICAgICAiZG9tYWlu
QWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkiLAogfTsKKyR0
eXBlVHJhbnNmb3JteyJDU1MifSA9IHsKKyAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckNTU0Fn
ZW50IiwKKyAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQ1NTQWdlbnQuaCIsCisgICAgImRvbWFp
bkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5jc3NBZ2VudCgpIiwKK307CiAk
dHlwZVRyYW5zZm9ybXsiQXBwbGljYXRpb25DYWNoZSJ9ID0gewogICAgICJmb3J3YXJkIiA9PiAi
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50IiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgiLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKaW5kZXgg
YjVhNDM4OC4uMThiYzVjOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
LmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCkBAIC0yMTMsNyArMjEz
LDIyIEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIHRvZ2dsZVN0
eWxlRW5hYmxlZChpbiBsb25nIHN0eWxlSWQsIGluIFN0cmluZyBwcm9wZXJ0eU5hbWUsIGluIGJv
b2xlYW4gZGlzYWJsZWQsIG91dCBWYWx1ZSBzdHlsZSk7CiAgICAgICAgIFtoYW5kbGVyPURPTV0g
dm9pZCBzZXRSdWxlU2VsZWN0b3IoaW4gbG9uZyBydWxlSWQsIGluIFN0cmluZyBzZWxlY3Rvciwg
aW4gbG9uZyBzZWxlY3RlZE5vZGVJZCwgb3V0IFZhbHVlIHJ1bGUsIG91dCBib29sZWFuIHNlbGVj
dG9yQWZmZWN0c05vZGUpOwogICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgYWRkUnVsZShpbiBT
dHJpbmcgc2VsZWN0b3IsIGluIGxvbmcgc2VsZWN0ZWROb2RlSWQsIG91dCBWYWx1ZSBydWxlLCBv
dXQgYm9vbGVhbiBzZWxlY3RvckFmZmVjdHNOb2RlKTsKLSAgICAgICAgW2hhbmRsZXI9RE9NXSB2
b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMob3V0IEFycmF5IGNzc1Byb3BlcnRpZXMpOwor
CisgICAgICAgIC8vIEdldCBhbGwgc3R5bGVzIGFwcGxpY2FibGUgdG8gdGhlIGdpdmVuIG5vZGUu
CisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBnZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIoaW4g
bG9uZyBub2RlSWQsIG91dCBWYWx1ZSBzdHlsZSk7CisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9p
ZCBnZXRNYXRjaGVkUnVsZXNGb3JOb2RlMihpbiBsb25nIG5vZGVJZCwgb3V0IEFycmF5IHJ1bGVz
KTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldE1hdGNoZWRQc2V1ZG9SdWxlc0Zvck5v
ZGUyKGluIGxvbmcgbm9kZUlkLCBvdXQgQXJyYXkgcnVsZXMpOyAvLyBhcnJheSBvZiB7IHBzZXVk
b0lkOiA8bnVtYmVyPiwgcnVsZXM6IGFycmF5IG9mICNjc3NSdWxlIH0KKyAgICAgICAgW2hhbmRs
ZXI9Q1NTXSB2b2lkIGdldEF0dHJpYnV0ZVN0eWxlc0Zvck5vZGUyKGluIGxvbmcgbm9kZUlkLCBv
dXQgVmFsdWUgc3R5bGVzKTsgLy8gbWFwOiBhdHRyaWJ1dGVOYW1lOiAjY3NzU3R5bGUKKyAgICAg
ICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldEluaGVyaXRlZFN0eWxlc0Zvck5vZGUyKGluIGxvbmcg
bm9kZUlkLCBvdXQgQXJyYXkgcmVzdWx0KTsgLy8gYXJyYXkgb2YgeyBpbmxpbmVTdHlsZTogI2Nz
c1N0eWxlLCBtYXRjaGVkQ1NTUnVsZXM6IGFycmF5IG9mICNjc3NSdWxlIH0KKyAgICAgICAgW2hh
bmRsZXI9Q1NTXSB2b2lkIGdldElubGluZVN0eWxlRm9yTm9kZTIoaW4gbG9uZyBub2RlSWQsIG91
dCBWYWx1ZSBzdHlsZSk7CisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBnZXRBbGxTdHlsZXMy
KG91dCBBcnJheSBzdHlsZVNoZWV0SWRzKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdl
dFN0eWxlU2hlZXQyKGluIFN0cmluZyBzdHlsZVNoZWV0SWQsIG91dCBWYWx1ZSBzdHlsZVNoZWV0
KTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHNldFN0eWxlU2hlZXRUZXh0MihpbiBTdHJp
bmcgc3R5bGVTaGVldElkLCBpbiBTdHJpbmcgdGV4dCk7CisgICAgICAgIFtoYW5kbGVyPUNTU10g
dm9pZCBzZXRQcm9wZXJ0eVRleHQyKGluIFN0cmluZyBzdHlsZUlkLCBpbiBsb25nIHByb3BlcnR5
SW5kZXgsIGluIFN0cmluZyB0ZXh0LCBpbiBib29sZWFuIG92ZXJ3cml0ZSwgb3V0IFZhbHVlIHN0
eWxlKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHRvZ2dsZVByb3BlcnR5MihpbiBTdHJp
bmcgc3R5bGVJZCwgaW4gbG9uZyBwcm9wZXJ0eUluZGV4LCBpbiBib29sZWFuIGRpc2FibGUsIG91
dCBWYWx1ZSBzdHlsZSk7CisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBzZXRSdWxlU2VsZWN0
b3IyKGluIFN0cmluZyBydWxlSWQsIGluIFN0cmluZyBzZWxlY3Rvciwgb3V0IFZhbHVlIHJ1bGUp
OworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgYWRkUnVsZTIoaW4gbG9uZyBjb250ZXh0Tm9k
ZUlkLCBpbiBTdHJpbmcgc2VsZWN0b3IsIG91dCBWYWx1ZSBydWxlKTsKKyAgICAgICAgW2hhbmRs
ZXI9Q1NTXSB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMob3V0IEFycmF5IGNzc1Byb3Bl
cnRpZXMpOwogCiAgICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgZ2V0Q29va2llcyhv
dXQgQXJyYXkgY29va2llcywgb3V0IFN0cmluZyBjb29raWVzU3RyaW5nKTsKICAgICAgICAgW2hh
bmRsZXI9Q29udHJvbGxlcl0gdm9pZCBkZWxldGVDb29raWUoaW4gU3RyaW5nIGNvb2tpZU5hbWUs
IGluIFN0cmluZyBkb21haW4pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
CmluZGV4IGUwZmFiODUuLmJkMTM3ZmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHAKQEAgLTQ5LDcgKzQ5LDggQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCi0KKy8vIEN1cnJlbnRseSBpbXBsZW1lbnRlZCBt
b2RlbDoKKy8vCiAvLyBjc3NQcm9wZXJ0eSA9IHsKIC8vICAgIG5hbWUgICAgICAgICAgOiA8c3Ry
aW5nPiwKIC8vICAgIHZhbHVlICAgICAgICAgOiA8c3RyaW5nPiwKQEAgLTYyLDg1ICs2Myw1NyBA
QAogLy8gICAgZW5kT2Zmc2V0ICAgICA6IDxudW1iZXI+LCAvLyBPcHRpb25hbCAtIHByb3BlcnR5
IHRleHQgZW5kIG9mZnNldCBpbiBlbmNsb3Npbmcgc3R5bGUgZGVjbGFyYXRpb24uIEFic2VudCBm
b3IgY29tcHV0ZWQgc3R5bGVzIGFuZCBzdWNoLgogLy8gfQogLy8KKy8vIG5hbWUgKyB2YWx1ZSAr
IHByaW9yaXR5IDogcHJlc2VudCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBlbmFibGVkCisvLyB0ZXh0
ICAgICAgICAgICAgICAgICAgICA6IHByZXNlbnQgd2hlbiB0aGUgcHJvcGVydHkgaXMgZGlzYWJs
ZWQKKy8vCisvLyBGb3IgZGlzYWJsZWQgcHJvcGVydGllcywgc3RhcnRPZmZzZXQgPT09IGVuZE9m
ZnNldCA9PT0gaW5zZXJ0aW9uIHBvaW50IGZvciB0aGUgcHJvcGVydHkuCisvLwogLy8gc3RhdHVz
OgogLy8gImRpc2FibGVkIiA9PSBwcm9wZXJ0eSBkaXNhYmxlZCBieSB1c2VyCiAvLyAiYWN0aXZl
IiA9PSBwcm9wZXJ0eSBwYXJ0aWNpcGF0ZXMgaW4gdGhlIGNvbXB1dGVkIHN0eWxlIGNhbGN1bGF0
aW9uCiAvLyAiaW5hY3RpdmUiID09IHByb3BlcnR5IGRvZXMgbm8gcGFydGljaXBhdGUgaW4gdGhl
IGNvbXB1dGVkIHN0eWxlIGNhbGN1bGF0aW9uIChpLmUuIG92ZXJyaWRkZW4gYnkgYSBzdWJzZXF1
ZW50IHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZSkKIC8vICJzdHlsZSIgPT0gcHJvcGVydHkg
aXMgYWN0aXZlIGFuZCBvcmlnaW5hdGVzIGZyb20gdGhlIFdlYkNvcmUgQ1NTU3R5bGVEZWNsYXJh
dGlvbiByYXRoZXIgdGhhbiBDU1Mgc291cmNlIGNvZGUgKGUuZy4gaW1wbGljaXQgbG9uZ2hhbmQg
cHJvcGVydGllcykKIC8vCi0vLwogLy8gY3NzU3R5bGUgPSB7Ci0vLyAgICBzdHlsZUlkICAgICAg
ICAgOiA8bnVtYmVyPiwgLy8gT3B0aW9uYWwKLS8vICAgIHN0eWxlU2hlZXRJZCAgICA6IDxudW1i
ZXI+LCAvLyBQYXJlbnQ6IC0xIGZvciBpbmxpbmUgc3R5bGVzICg8Zm9vIHN0eWxlPSIuLiI+KQot
Ly8gICAgY3NzUHJvcGVydGllcyAgIDogWworLy8gICAgc3R5bGVJZCAgICAgICAgICAgIDogPHN0
cmluZz4sIC8vIE9wdGlvbmFsCisvLyAgICBjc3NQcm9wZXJ0aWVzICAgICAgOiBbCiAvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgI2Nzc1Byb3BlcnR5LAogLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgIC4uLgogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICNjc3NQcm9wZXJ0eQotLy8g
ICAgICAgICAgICAgICAgICAgIF0sCi0vLyAgICBzaG9ydGhhbmRWYWx1ZXMgOiB7CisvLyAgICAg
ICAgICAgICAgICAgICAgICAgICBdLAorLy8gICAgc2hvcnRoYW5kVmFsdWVzICAgIDogewogLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZE5hbWUxIDogc2hvcnRoYW5kVmFsdWUx
LAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZE5hbWUyIDogc2hvcnRoYW5k
VmFsdWUyCi0vLyAgICAgICAgICAgICAgICAgICAgICB9LAotLy8gICAgY3NzVGV4dCAgICAgICAg
IDogPHN0cmluZz4sIC8vIGRlY2xhcmF0aW9uIHRleHQKLS8vICAgIHByb3BlcnRpZXMgICAgICA6
IHsgfSAvLyA/Pz8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisvLyAgICBjc3NUZXh0
ICAgICAgICAgICAgOiA8c3RyaW5nPiwgLy8gT3B0aW9uYWwgLSBkZWNsYXJhdGlvbiB0ZXh0Cisv
LyAgICBwcm9wZXJ0aWVzICAgICAgICAgOiB7IHdpZHRoLCBoZWlnaHQgfQogLy8gfQogLy8KLS8v
IC8vIFRPRE86Ci0vLyAvLyAtIGNvbnZlcnQgZGlzYWJsZWRQcm9wZXJ0aWVzIHRvIGVuYWJsZWQg
ZmxhZy4KLS8vIC8vIC0gY29udmVydCB3aWR0aCwgaGVpZ2h0IHRvIHByb3BlcnRpZXMKLS8vCiAv
LyBjc3NSdWxlID0gewotLy8gICAgcnVsZUlkICAgICAgIDogPG51bWJlcj4sCi0vLyAgICBzZWxl
Y3RvclRleHQgOiA8c3RyaW5nPgotLy8gICAgc291cmNlVVJMICAgIDogPHN0cmluZz4KLS8vICAg
IHNvdXJjZUxpbmUgICA6IDxzdHJpbmc+Ci0vLyAgICBzdHlsZVNoZWV0SWQgOiA8bnVtYmVyPiAv
LyBhbHNvIGZvdW5kIGluIHN0eWxlCi0vLyAgICBvcmlnaW4gICAgICAgOiA8c3RyaW5nPiAvLyAi
IiB8fCAidXNlci1hZ2VudCIgfHwgInVzZXIiIHx8ICJpbnNwZWN0b3IiCisvLyAgICBydWxlSWQg
ICAgICAgOiA8c3RyaW5nPiwgLy8gT3B0aW9uYWwKKy8vICAgIHNlbGVjdG9yVGV4dCA6IDxzdHJp
bmc+LAorLy8gICAgc291cmNlVVJMICAgIDogPHN0cmluZz4sCisvLyAgICBzb3VyY2VMaW5lICAg
OiA8c3RyaW5nPiwKKy8vICAgIG9yaWdpbiAgICAgICA6IDxzdHJpbmc+LCAvLyAiIiB8fCAidXNl
ci1hZ2VudCIgfHwgInVzZXIiIHx8ICJpbnNwZWN0b3IiCiAvLyAgICBzdHlsZSAgICAgICAgOiAj
Y3NzU3R5bGUKIC8vIH0KIC8vCi0vLyAvLyBUT0RPOgotLy8gLy8gLSBmaXggb3JpZ2luCi0vLyAv
LyAtIGFkZCBzb3VyY2VVUkwKLS8vIC8vIC0gZml4IHBhcmVudFN0eWxlU2hlZXRJZAotLy8KIC8v
IGNzc1N0eWxlU2hlZXQgPSB7CiAvLyAgICBzdHlsZVNoZWV0SWQgICA6IDxudW1iZXI+Ci0vLyAg
ICBocmVmICAgICAgICAgICA6IDxzdHJpbmc+CisvLyAgICBzb3VyY2VVUkwgICAgICA6IDxzdHJp
bmc+CiAvLyAgICB0aXRsZSAgICAgICAgICA6IDxzdHJpbmc+CiAvLyAgICBkaXNhYmxlZCAgICAg
ICA6IDxib29sZWFuPgotLy8gICAgZG9jdW1lbnROb2RlSWQgOiA8bnVtYmVyPgogLy8gICAgcnVs
ZXMgICAgICAgICAgOiBbCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAjY3NzUnVsZSwKIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgogLy8gICAgICAgICAgICAgICAgICAgICAgICAg
I2Nzc1J1bGUKIC8vICAgICAgICAgICAgICAgICAgICAgXQorLy8gICAgdGV4dCAgICAgICAgICAg
OiA8c3RyaW5nPiAvLyBPcHRpb25hbCAtIHdoZW5ldmVyIHRoZSB0ZXh0IGlzIGF2YWlsYWJsZSBm
b3IgYSB0ZXh0LWJhc2VkIHN0eWxlc2hlZXQKIC8vIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAvLyBzdGF0aWMKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3Qg
U3RyaW5nJiBmdWxsU3R5bGVJZCwgQ1NTU3R5bGVTb3VyY2VEYXRhKiBzb3VyY2VEYXRhKQotewot
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgaWYgKCFmdWxsU3R5bGVJZC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdC0+
c2V0U3RyaW5nKCJpZCIsIGZ1bGxTdHlsZUlkKTsKLQotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJ3
aWR0aCIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJ3aWR0aCIpKTsKLSAgICByZXN1bHQtPnNl
dFN0cmluZygiaGVpZ2h0Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpKTsKLSAg
ICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiogcHJvcGVydHlEYXRhID0gMDsKLQotICAg
IGlmIChzb3VyY2VEYXRhKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJzdGFydE9mZnNl
dCIsIHNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0KTsKLSAgICAgICAgcmVzdWx0LT5z
ZXROdW1iZXIoImVuZE9mZnNldCIsIHNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCk7Ci0g
ICAgICAgIHByb3BlcnR5RGF0YSA9ICZzb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7Ci0gICAgfQot
ICAgIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhzdHlsZSwgcmVzdWx0LmdldCgp
LCBwcm9wZXJ0eURhdGEpOwotCi0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Ci19Ci0KLS8v
IHN0YXRpYwogQ1NTU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTQWdlbnQ6OnBhcmVudFN0eWxlU2hl
ZXQoU3R5bGVCYXNlKiBzdHlsZUJhc2UpCiB7CiAgICAgaWYgKCFzdHlsZUJhc2UpCkBAIC0xNjQs
NyArMTM3LDYgQEAgQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNDU1NTdHlsZVJ1
bGUoU3R5bGVCYXNlKiBzdHlsZUJhc2UpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU1N0eWxl
UnVsZSo+KHJ1bGUpOwogfQogCi0KIEluc3BlY3RvckNTU0FnZW50OjpJbnNwZWN0b3JDU1NBZ2Vu
dChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVu
ZCkKICAgICA6IG1fZG9tQWdlbnQoZG9tQWdlbnQpCiAgICAgLCBtX2Zyb250ZW5kKGZyb250ZW5k
KQpAQCAtMjQ2LDcgKzIxOCwxMCBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRl
ZFN0eWxlRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYQogICAgIGlmICgh
ZGVmYXVsdFZpZXcpCiAgICAgICAgIHJldHVybjsKIAotICAgICpzdHlsZSA9IGJ1aWxkT2JqZWN0
Rm9yU3R5bGUoZGVmYXVsdFZpZXctPmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgIiIpLmdldCgp
LCAiIik7CisgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGUgPSBk
ZWZhdWx0Vmlldy0+Z2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCAiIik7CisgICAgVmVjdG9yPElu
c3BlY3RvclN0eWxlUHJvcGVydHk+IHByb3BlcnRpZXM7CisgICAgUmVmUHRyPEluc3BlY3RvclN0
eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yQ29t
cG91bmRJZCgpLCBjb21wdXRlZFN0eWxlLmdldCgpLCAwKTsKKyAgICAqc3R5bGUgPSBpbnNwZWN0
b3JTdHlsZS0+YnVpbGRPYmplY3RGb3JTdHlsZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRJbmhlcml0ZWRTdHlsZXNGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3Bl
Y3RvckFycmF5Piogc3R5bGUpCkBAIC0yNjMsNyArMjM4LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6Z2V0SW5oZXJpdGVkU3R5bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNw
ZWN0b3IKICAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQtPnN0eWxlKCkgJiYgcGFyZW50RWxlbWVu
dC0+c3R5bGUoKS0+bGVuZ3RoKCkpIHsKICAgICAgICAgICAgIEluc3BlY3RvclN0eWxlU2hlZXRG
b3JJbmxpbmVTdHlsZSogc3R5bGVTaGVldCA9IGFzSW5zcGVjdG9yU3R5bGVTaGVldChlbGVtZW50
KTsKICAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0KQotICAgICAgICAgICAgICAgIHBhcmVudFN0
eWxlLT5zZXRPYmplY3QoImlubGluZVN0eWxlIiwgc3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JT
dHlsZShzdHlsZVNoZWV0LT5zdHlsZUZvcklkKCIwIikpKTsKKyAgICAgICAgICAgICAgICBwYXJl
bnRTdHlsZS0+c2V0T2JqZWN0KCJpbmxpbmVTdHlsZSIsIHN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0
Rm9yU3R5bGUoc3R5bGVTaGVldC0+c3R5bGVGb3JJZChJbnNwZWN0b3JDb21wb3VuZElkKHN0eWxl
U2hlZXQtPmlkKCkpLmFwcGVuZFBhcnQoIjAiKSkpKTsKICAgICAgICAgfQogCiAgICAgICAgIENT
U1N0eWxlU2VsZWN0b3IqIHBhcmVudFNlbGVjdG9yID0gcGFyZW50RWxlbWVudC0+b3duZXJEb2N1
bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7CkBAIC0zMDgsNDMgKzI4Myw0OCBAQCB2b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpzZXRTdHlsZVNoZWV0VGV4dDIoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0
SWQsIGNvbnN0IFN0cgogICAgIGluc3BlY3RvclN0eWxlU2hlZXQtPnNldFRleHQodGV4dCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlVGV4dDIoY29uc3QgU3RyaW5nJiBm
dWxsU3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBy
ZXN1bHQpCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRQcm9wZXJ0eVRleHQyKGNvbnN0IFN0
cmluZyYgZnVsbFN0eWxlSWQsIGxvbmcgcHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQogewotICAg
IFZlY3RvcjxTdHJpbmc+IGlkUGFydHM7Ci0gICAgZnVsbFN0eWxlSWQuc3BsaXQoJzonLCBpZFBh
cnRzKTsKLSAgICBBU1NFUlQoaWRQYXJ0cy5zaXplKCkgPT0gMik7CisgICAgSW5zcGVjdG9yQ29t
cG91bmRJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlkKTsKKyAgICBBU1NFUlQoY29tcG91bmRJZC5w
YXJ0Q291bnQoKSA9PSAyKTsKIAotICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0
eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoaWRQYXJ0cy5hdCgwKSk7CisgICAgSW5zcGVjdG9y
U3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IHN0eWxlU2hlZXRGb3JJZChjb21wb3Vu
ZElkLnBhcnQoMCkpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0LT5zZXRTdHlsZVRleHQoaWRQYXJ0
cy5hdCgxKSwgdGV4dCkpCi0gICAgICAgIHJldHVybjsKLQotICAgICpyZXN1bHQgPSBpbnNwZWN0
b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnN0
eWxlRm9ySWQoaWRQYXJ0cy5hdCgxKSkpOworICAgIGJvb2wgc3VjY2VzcyA9IGluc3BlY3RvclN0
eWxlU2hlZXQtPnNldFByb3BlcnR5VGV4dChjb21wb3VuZElkLCBwcm9wZXJ0eUluZGV4LCB0ZXh0
LCBvdmVyd3JpdGUpOworICAgIGlmIChzdWNjZXNzKQorICAgICAgICAqcmVzdWx0ID0gaW5zcGVj
dG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5z
dHlsZUZvcklkKGNvbXBvdW5kSWQpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9n
Z2xlUHJvcGVydHkyKGNvbnN0IFN0cmluZyYsIGxvbmcsIGJvb2wpCit2b2lkIEluc3BlY3RvckNT
U0FnZW50Ojp0b2dnbGVQcm9wZXJ0eTIoY29uc3QgU3RyaW5nJiBmdWxsU3R5bGVJZCwgbG9uZyBw
cm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3Vs
dCkKIHsKLSAgICAvLyBGSVhNRShhcGF2bG92KTogaW1wbGVtZW50CisgICAgSW5zcGVjdG9yQ29t
cG91bmRJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlkKTsKKyAgICBBU1NFUlQoY29tcG91bmRJZC5w
YXJ0Q291bnQoKSA9PSAyKTsKKworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0
eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoY29tcG91bmRJZC5wYXJ0KDApKTsKKyAgICBpZiAo
IWluc3BlY3RvclN0eWxlU2hlZXQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgc3VjY2Vz
cyA9IGluc3BlY3RvclN0eWxlU2hlZXQtPnRvZ2dsZVByb3BlcnR5KGNvbXBvdW5kSWQsIHByb3Bl
cnR5SW5kZXgsIGRpc2FibGUpOworICAgIGlmIChzdWNjZXNzKQorICAgICAgICAqcmVzdWx0ID0g
aW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShpbnNwZWN0b3JTdHlsZVNo
ZWV0LT5zdHlsZUZvcklkKGNvbXBvdW5kSWQpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6c2V0UnVsZVNlbGVjdG9yMihjb25zdCBTdHJpbmcmIGZ1bGxSdWxlSWQsIGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKIHsKLSAgICBWZWN0
b3I8U3RyaW5nPiBpZFBhcnRzOwotICAgIGZ1bGxSdWxlSWQuc3BsaXQoJzonLCBpZFBhcnRzKTsK
LSAgICBBU1NFUlQoaWRQYXJ0cy5zaXplKCkgPT0gMik7CisgICAgSW5zcGVjdG9yQ29tcG91bmRJ
ZCBjb21wb3VuZElkKGZ1bGxSdWxlSWQpOworICAgIEFTU0VSVChjb21wb3VuZElkLnBhcnRDb3Vu
dCgpID09IDIpOwogCi0gICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVl
dCA9IHN0eWxlU2hlZXRGb3JJZChpZFBhcnRzLmF0KDApKTsKKyAgICBJbnNwZWN0b3JTdHlsZVNo
ZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gc3R5bGVTaGVldEZvcklkKGNvbXBvdW5kSWQucGFy
dCgwKSk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQogICAgICAgICByZXR1cm47CiAK
LSAgICBjb25zdCBTdHJpbmcmIHJ1bGVJZCA9IGlkUGFydHMuYXQoMSk7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+c2V0UnVsZVNlbGVjdG9yKHJ1bGVJZCwgc2VsZWN0
b3IpOworICAgIGJvb2wgc3VjY2VzcyA9IGluc3BlY3RvclN0eWxlU2hlZXQtPnNldFJ1bGVTZWxl
Y3Rvcihjb21wb3VuZElkLCBzZWxlY3Rvcik7CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICAqcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RG
b3JSdWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChydWxlSWQpKTsKKyAgICAqcmVz
dWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JSdWxlKGluc3BlY3RvclN0
eWxlU2hlZXQtPnJ1bGVGb3JJZChjb21wb3VuZElkKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OmFkZFJ1bGUyKGNvbnN0IGxvbmcgY29udGV4dE5vZGVJZCwgY29uc3QgU3RyaW5nJiBz
ZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQpAQCAtMzc5LDEzMCArMzU5
LDYgQEAgRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmlubGluZVN0eWxlRWxlbWVudChDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUpOwogfQogCi0vLyBzdGF0aWMKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnBvcHVsYXRl
T2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgSW5z
cGVjdG9yT2JqZWN0KiByZXN1bHQsIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+KiBwcm9w
ZXJ0eURhdGEpCi17Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm9wZXJ0aWVzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNob3J0
aGFuZFZhbHVlcyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+ID4gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2
ZVByb3BlcnR5OwotICAgIEhhc2hTZXQ8U3RyaW5nPiBmb3VuZFNob3J0aGFuZHM7Ci0gICAgSGFz
aFNldDxTdHJpbmc+IHNvdXJjZVByb3BlcnR5TmFtZXM7Ci0gICAgaWYgKHByb3BlcnR5RGF0YSkg
ewotICAgICAgICBmb3IgKFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IHByb3BlcnR5RGF0YS0+YmVnaW4oKTsgaXQgIT0gcHJvcGVydHlEYXRhLT5lbmQo
KTsgKytpdCkgewotICAgICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9w
ZXJ0eUVudHJ5ID0gKml0OwotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHJv
cGVydHkgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgcHJvcGVydGll
cy0+cHVzaE9iamVjdChwcm9wZXJ0eSk7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUg
PSBwcm9wZXJ0eUVudHJ5Lm5hbWU7Ci0gICAgICAgICAgICBzb3VyY2VQcm9wZXJ0eU5hbWVzLmFk
ZChuYW1lKTsKLSAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoIm5hbWUiLCBuYW1lKTsK
LSAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInZhbHVlIiwgcHJvcGVydHlFbnRyeS52
YWx1ZSk7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJwcmlvcml0eSIsIHByb3Bl
cnR5RW50cnkuaW1wb3J0YW50ID8gImltcG9ydGFudCIgOiAiIik7Ci0gICAgICAgICAgICBwcm9w
ZXJ0eS0+c2V0U3RyaW5nKCJzdGF0dXMiLCAiYWN0aXZlIik7Ci0gICAgICAgICAgICBwcm9wZXJ0
eS0+c2V0Qm9vbGVhbigicGFyc2VkT2siLCBwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKTsKLSAgICAg
ICAgICAgIHByb3BlcnR5LT5zZXROdW1iZXIoInN0YXJ0T2Zmc2V0IiwgcHJvcGVydHlFbnRyeS5y
YW5nZS5zdGFydCk7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0TnVtYmVyKCJlbmRPZmZzZXQi
LCBwcm9wZXJ0eUVudHJ5LnJhbmdlLmVuZCk7Ci0gICAgICAgICAgICBpZiAocHJvcGVydHlFbnRy
eS5wYXJzZWRPaykgewotICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJpbXBs
aWNpdCIsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gc3R5bGUt
PmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOwotICAgICAgICAgICAgICAgIHByb3BlcnR5LT5z
ZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCBzaG9ydGhhbmQpOwotICAgICAgICAgICAgICAgIGlm
ICghc2hvcnRoYW5kLmlzRW1wdHkoKSAmJiAhZm91bmRTaG9ydGhhbmRzLmNvbnRhaW5zKHNob3J0
aGFuZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzLmFkZChzaG9ydGhh
bmQpOwotICAgICAgICAgICAgICAgICAgICBzaG9ydGhhbmRWYWx1ZXMtPnNldFN0cmluZyhzaG9y
dGhhbmQsIHNob3J0aGFuZFZhbHVlKHN0eWxlLCBzaG9ydGhhbmQpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRC
b29sZWFuKCJpbXBsaWNpdCIsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0
U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgIiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
SGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+ID46Oml0ZXJhdG9yIGFjdGl2
ZUl0ID0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmZpbmQobmFtZSk7Ci0g
ICAgICAgICAgICBpZiAoYWN0aXZlSXQgIT0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVBy
b3BlcnR5LmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgYWN0aXZlSXQtPnNlY29uZC0+c2V0U3Ry
aW5nKCJzdGF0dXMiLCAiaW5hY3RpdmUiKTsKLSAgICAgICAgICAgICAgICBhY3RpdmVJdC0+c2Vj
b25kLT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCAiIik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuc2V0KG5hbWUsIHBy
b3BlcnR5KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwLCBzaXplID0g
c3R5bGUtPmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0g
c3R5bGUtPml0ZW0oaSk7Ci0gICAgICAgIGlmIChzb3VyY2VQcm9wZXJ0eU5hbWVzLmNvbnRhaW5z
KG5hbWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgc291cmNlUHJvcGVydHlO
YW1lcy5hZGQobmFtZSk7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHByb3BlcnR5
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgcHJvcGVydGllcy0+cHVzaE9i
amVjdChwcm9wZXJ0eSk7Ci0gICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoIm5hbWUiLCBuYW1l
KTsKLSAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygidmFsdWUiLCBzdHlsZS0+Z2V0UHJvcGVy
dHlWYWx1ZShuYW1lKSk7Ci0gICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInByaW9yaXR5Iiwg
c3R5bGUtPmdldFByb3BlcnR5UHJpb3JpdHkoIm5hbWUiKSk7Ci0gICAgICAgIHByb3BlcnR5LT5z
ZXRCb29sZWFuKCJpbXBsaWNpdCIsIHN0eWxlLT5pc1Byb3BlcnR5SW1wbGljaXQobmFtZSkpOwot
ICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigicGFyc2VkT2siLCB0cnVlKTsKLSAgICAgICAg
cHJvcGVydHktPnNldFN0cmluZygic3RhdHVzIiwgInN0eWxlIik7Ci0gICAgICAgIFN0cmluZyBz
aG9ydGhhbmQgPSBzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7Ci0gICAgICAgIHBy
b3BlcnR5LT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCBzaG9ydGhhbmQpOwotICAgICAgICBp
ZiAoIXNob3J0aGFuZC5pc0VtcHR5KCkgJiYgIWZvdW5kU2hvcnRoYW5kcy5jb250YWlucyhzaG9y
dGhhbmQpKSB7Ci0gICAgICAgICAgICBmb3VuZFNob3J0aGFuZHMuYWRkKHNob3J0aGFuZCk7Ci0g
ICAgICAgICAgICBzaG9ydGhhbmRWYWx1ZXMtPnNldFN0cmluZyhzaG9ydGhhbmQsIHNob3J0aGFu
ZFZhbHVlKHN0eWxlLCBzaG9ydGhhbmQpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3Vs
dC0+c2V0QXJyYXkoInByb3BlcnRpZXMiLCBwcm9wZXJ0aWVzKTsKLSAgICByZXN1bHQtPnNldE9i
amVjdCgic2hvcnRoYW5kVmFsdWVzIiwgc2hvcnRoYW5kVmFsdWVzKTsKLX0KLQotLy8gc3RhdGlj
Ci1TdHJpbmcgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNob3J0aGFuZFZhbHVlKENTU1N0eWxlRGVjbGFy
YXRpb24qIHN0eWxlLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KQotewotICAgIFN0
cmluZyB2YWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHNob3J0aGFuZFByb3BlcnR5KTsK
LSAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzdHlsZS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgU3RyaW5nIGluZGl2aWR1
YWxQcm9wZXJ0eSA9IHN0eWxlLT5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKHN0eWxlLT5nZXRQ
cm9wZXJ0eVNob3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9IHNob3J0aGFuZFByb3BlcnR5
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHN0eWxlLT5pc1By
b3BlcnR5SW1wbGljaXQoaW5kaXZpZHVhbFByb3BlcnR5KSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIFN0cmluZyBpbmRpdmlkdWFsVmFsdWUgPSBzdHlsZS0+Z2V0UHJv
cGVydHlWYWx1ZShpbmRpdmlkdWFsUHJvcGVydHkpOwotICAgICAgICAgICAgaWYgKGluZGl2aWR1
YWxWYWx1ZSA9PSAiaW5pdGlhbCIpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBpZiAodmFsdWUubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgdmFsdWUuYXBwZW5kKCIg
Iik7Ci0gICAgICAgICAgICB2YWx1ZS5hcHBlbmQoaW5kaXZpZHVhbFZhbHVlKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLS8vIHN0YXRpYwotU3RyaW5nIEluc3Bl
Y3RvckNTU0FnZW50OjpzaG9ydGhhbmRQcmlvcml0eShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkKLXsKLSAgICBTdHJpbmcgcHJpb3Jp
dHkgPSBzdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShzaG9ydGhhbmRQcm9wZXJ0eSk7Ci0gICAg
aWYgKHByaW9yaXR5LmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc3R5bGUtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIFN0cmluZyBpbmRpdmlkdWFs
UHJvcGVydHkgPSBzdHlsZS0+aXRlbShpKTsKLSAgICAgICAgICAgIGlmIChzdHlsZS0+Z2V0UHJv
cGVydHlTaG9ydGhhbmQoaW5kaXZpZHVhbFByb3BlcnR5KSAhPSBzaG9ydGhhbmRQcm9wZXJ0eSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHByaW9yaXR5ID0gc3R5bGUt
PmdldFByb3BlcnR5UHJpb3JpdHkoaW5kaXZpZHVhbFByb3BlcnR5KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcmlvcml0eTsKLX0KLQotCi0vLyBz
dGF0aWMKLVZlY3RvcjxTdHJpbmc+IEluc3BlY3RvckNTU0FnZW50Ojpsb25naGFuZFByb3BlcnRp
ZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJv
cGVydHkpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gcHJvcGVydGllczsKLSAgICBIYXNoU2V0PFN0
cmluZz4gZm91bmRQcm9wZXJ0aWVzOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHls
ZS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFByb3BlcnR5ID0g
c3R5bGUtPml0ZW0oaSk7Ci0gICAgICAgIGlmIChmb3VuZFByb3BlcnRpZXMuY29udGFpbnMoaW5k
aXZpZHVhbFByb3BlcnR5KSB8fCBzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZpZHVh
bFByb3BlcnR5KSAhPSBzaG9ydGhhbmRQcm9wZXJ0eSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIGZvdW5kUHJvcGVydGllcy5hZGQoaW5kaXZpZHVhbFByb3BlcnR5KTsKLSAgICAg
ICAgcHJvcGVydGllcy5hcHBlbmQoaW5kaXZpZHVhbFByb3BlcnR5KTsKLSAgICB9Ci0gICAgcmV0
dXJuIHByb3BlcnRpZXM7Ci19Ci0KIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSog
SW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldChFbGVtZW50KiBlbGVtZW50
KQogewogICAgIE5vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQ6Oml0ZXJhdG9yIGl0ID0gbV9ub2Rl
VG9JbnNwZWN0b3JTdHlsZVNoZWV0LmZpbmQoZWxlbWVudCk7CkBAIC02MjIsNyArNDc4LDggQEAg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVj
dEZvckF0dHJpYnV0ZVN0eWxlcyhFbGUKICAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBh
dHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICBpZiAoYXR0cmlidXRlLT5zdHls
ZSgpKSB7CiAgICAgICAgICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZS0+bG9j
YWxOYW1lKCk7Ci0gICAgICAgICAgICBzdHlsZUF0dHJpYnV0ZXMtPnNldE9iamVjdChhdHRyaWJ1
dGVOYW1lLnV0ZjgoKS5kYXRhKCksIGJ1aWxkT2JqZWN0Rm9yU3R5bGUoYXR0cmlidXRlLT5zdHls
ZSgpLCAiIikpOworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JT
dHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yQ29tcG91bmRJZCgpLCBhdHRy
aWJ1dGUtPnN0eWxlKCksIDApOworICAgICAgICAgICAgc3R5bGVBdHRyaWJ1dGVzLT5zZXRPYmpl
Y3QoYXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpLCBpbnNwZWN0b3JTdHlsZS0+YnVpbGRPYmpl
Y3RGb3JTdHlsZSgpKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU0FnZW50LmgKaW5kZXggZWI2MDEzYi4uMzQxZDA5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDU1NBZ2VudC5oCkBAIC01Niw3ICs1Niw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JDU1NBZ2VudChkb21BZ2VudCwgZnJvbnRlbmQpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0
Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgZnVsbFN0eWxlSWQs
IENTU1N0eWxlU291cmNlRGF0YSogPSAwKTsKICAgICBzdGF0aWMgQ1NTU3R5bGVTaGVldCogcGFy
ZW50U3R5bGVTaGVldChTdHlsZUJhc2UqKTsKICAgICBzdGF0aWMgQ1NTU3R5bGVSdWxlKiBhc0NT
U1N0eWxlUnVsZShTdHlsZUJhc2UqKTsKIApAQCAtNzMsOCArNzIsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBnZXRBbGxTdHlsZXMyKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxlcyk7CiAgICAg
dm9pZCBnZXRTdHlsZVNoZWV0Mihjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgUmVmUHRyPElu
c3BlY3RvclZhbHVlPiogcmVzdWx0KTsKICAgICB2b2lkIHNldFN0eWxlU2hlZXRUZXh0Mihjb25z
dCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKLSAgICB2b2lkIHNl
dFN0eWxlVGV4dDIoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7Ci0gICAgdm9pZCB0b2dnbGVQcm9wZXJ0eTIo
Y29uc3QgU3RyaW5nJiBzdHlsZUlkLCBsb25nIHByb3BlcnR5T3JkaW5hbCwgYm9vbCBkaXNhYmxl
ZCk7CisgICAgdm9pZCBzZXRQcm9wZXJ0eVRleHQyKGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgbG9u
ZyBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQgdG9nZ2xlUHJvcGVydHkyKGNv
bnN0IFN0cmluZyYgc3R5bGVJZCwgbG9uZyBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CiAgICAgdm9pZCBzZXRSdWxlU2VsZWN0b3Iy
KGNvbnN0IFN0cmluZyYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+KiByZXN1bHQpOwogICAgIHZvaWQgYWRkUnVsZTIoY29uc3QgbG9uZyBjb250
ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
KiByZXN1bHQpOwogICAgIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+KiByZXN1bHQpOwpAQCAtODIsMjEgKzgxLDE3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hl
ZXQ+ID4gSWRUb0luc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPENTU1N0
eWxlU2hlZXQqLCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gPiBDU1NTdHlsZVNoZWV0VG9J
bnNwZWN0b3JTdHlsZVNoZWV0OwotICAgIHR5cGVkZWYgSGFzaE1hcDxOb2RlKiwgUmVmUHRyPElu
c3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gPiBOb2RlVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0OyAvLyBmb3IgYm9ndXMgInN0eWxlc2hlZXRzIiB3aXRoIGlubGluZSBub2RlIHN0eWxlcwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxOb2RlKiwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZT4gPiBOb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0OyAvLyBib2d1cyAic3R5bGVz
aGVldHMiIHdpdGggZWxlbWVudHMnIGlubGluZSBzdHlsZXMKICAgICB0eXBlZGVmIEhhc2hNYXA8
UmVmUHRyPERvY3VtZW50PiwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+ID4gRG9jdW1lbnRU
b1ZpYUluc3BlY3RvclN0eWxlU2hlZXQ7IC8vICJ2aWEgaW5zcGVjdG9yIiBzdHlsZXNoZWV0cwog
CiAgICAgc3RhdGljIEVsZW1lbnQqIGlubGluZVN0eWxlRWxlbWVudChDU1NTdHlsZURlY2xhcmF0
aW9uKik7Ci0gICAgc3RhdGljIHZvaWQgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVz
KENTU1N0eWxlRGVjbGFyYXRpb24qLCBJbnNwZWN0b3JPYmplY3QqIHJlc3VsdCwgVmVjdG9yPENT
U1Byb3BlcnR5U291cmNlRGF0YT4qIHByb3BlcnR5RGF0YSk7Ci0gICAgc3RhdGljIFN0cmluZyBz
aG9ydGhhbmRWYWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBzaG9ydGhh
bmRQcm9wZXJ0eSk7Ci0gICAgc3RhdGljIFN0cmluZyBzaG9ydGhhbmRQcmlvcml0eShDU1NTdHls
ZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7Ci0gICAgc3Rh
dGljIFZlY3RvcjxTdHJpbmc+IGxvbmdoYW5kUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9u
KiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7CiAKICAgICBJbnNwZWN0b3JTdHls
ZVNoZWV0Rm9ySW5saW5lU3R5bGUqIGFzSW5zcGVjdG9yU3R5bGVTaGVldChFbGVtZW50KiBlbGVt
ZW50KTsKICAgICBFbGVtZW50KiBlbGVtZW50Rm9ySWQobG9uZyBub2RlSWQpOwogCiAgICAgSW5z
cGVjdG9yU3R5bGVTaGVldCogYmluZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOwogICAgIElu
c3BlY3RvclN0eWxlU2hlZXQqIHZpYUluc3BlY3RvclN0eWxlU2hlZXQoRG9jdW1lbnQqLCBib29s
IGNyZWF0ZUlmQWJzZW50KTsKLSAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBzdHlsZVNoZWV0Rm9y
SWQoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQpOworICAgIEluc3BlY3RvclN0eWxlU2hlZXQq
IHN0eWxlU2hlZXRGb3JJZChjb25zdCBTdHJpbmcmKTsKICAgICBTdHJpbmcgZGV0ZWN0T3JpZ2lu
KENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCk7
CiAKICAgICBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZEFycmF5Rm9yUnVsZUxpc3Qo
Q1NTUnVsZUxpc3QqIHJ1bGVMaXN0KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKaW5kZXggMDBhMTE2Ni4uOGE5ZWRiMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJJbmplY3Rl
ZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kLmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDU1NBZ2Vu
dC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNTU1N0b3JlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
Q2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKQEAgLTUwMCw2ICs1MDEs
NyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCgpCiAgICAgcmVs
ZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKICAgICBtX2Zyb250ZW5kID0gbmV3IEluc3Bl
Y3RvckZyb250ZW5kKG1fY2xpZW50KTsKICAgICBtX2RvbUFnZW50ID0gSW5zcGVjdG9yRE9NQWdl
bnQ6OmNyZWF0ZShtX2Nzc1N0b3JlLmdldCgpLCBtX2Zyb250ZW5kLmdldCgpKTsKKyAgICBtX2Nz
c0FnZW50ID0gSW5zcGVjdG9yQ1NTQWdlbnQ6OmNyZWF0ZShtX2RvbUFnZW50LmdldCgpLCBtX2Zy
b250ZW5kLmdldCgpKTsKICAgICAvLyBGSVhNRTogZW5hYmxlIHJlc291cmNlIGFnZW50IG9uY2Ug
ZnJvbnQtZW5kIGlzIHJlYWR5LgogICAgIC8vIG1fcmVzb3VyY2VBZ2VudCA9IEluc3BlY3RvclJl
c291cmNlQWdlbnQ6OmNyZWF0ZShtX2luc3BlY3RlZFBhZ2UsIG1fZnJvbnRlbmQuZ2V0KCkpOwog
CkBAIC02MTksNiArNjIxLDEwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZUZy
b250ZW5kTGlmZXRpbWVBZ2VudHMoKQogICAgICAgICBtX2RvbUFnZW50LT5yZXNldCgpOwogICAg
IG1fZG9tQWdlbnQuY2xlYXIoKTsKIAorICAgIGlmIChtX2Nzc0FnZW50KQorICAgICAgICBtX2Nz
c0FnZW50LT5yZXNldCgpOworICAgIG1fY3NzQWdlbnQuY2xlYXIoKTsKKwogI2lmIEVOQUJMRShE
QVRBQkFTRSkKICAgICBpZiAobV9zdG9yYWdlQWdlbnQpCiAgICAgICAgIG1fc3RvcmFnZUFnZW50
LT5jbGVhckZyb250ZW5kKCk7CkBAIC03OTEsNiArNzk3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgICAgIGlm
IChtX2Zyb250ZW5kKSB7CiAgICAgICAgICAgICBtX2Zyb250ZW5kLT5yZXNldCgpOwogICAgICAg
ICAgICAgbV9kb21BZ2VudC0+cmVzZXQoKTsKKyAgICAgICAgICAgIG1fY3NzQWdlbnQtPnJlc2V0
KCk7CiAgICAgICAgIH0KICNpZiBFTkFCTEUoV09SS0VSUykKICAgICAgICAgbV93b3JrZXJzLmNs
ZWFyKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggNmQ0ZDll
MC4uNDcwYWI3OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAt
NTgsNiArNTgsNyBAQCBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3RvckJhY2tl
bmQ7CiBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsKIGNsYXNzIEluc3BlY3RvckNs
aWVudDsKK2NsYXNzIEluc3BlY3RvckNTU0FnZW50OwogY2xhc3MgSW5zcGVjdG9yQ1NTU3RvcmU7
CiBjbGFzcyBJbnNwZWN0b3JET01BZ2VudDsKIGNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNv
dXJjZTsKQEAgLTI5NSw2ICsyOTYsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRNb25pdG9y
aW5nWEhSRW5hYmxlZChib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0YXRlKTsKICAgICB2b2lkIHN0
b3JlTGFzdEFjdGl2ZVBhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWxOYW1lKTsKKyAgICBJbnNwZWN0
b3JDU1NBZ2VudCogY3NzQWdlbnQoKSB7IHJldHVybiBtX2Nzc0FnZW50LmdldCgpOyB9CiAgICAg
SW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50KCkgeyByZXR1cm4gbV9kb21BZ2VudC5nZXQoKTsg
fQogICAgIHZvaWQgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKIApAQCAtMzQ0LDYg
KzM0Niw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBt
X2luc3BlY3RvckZyb250ZW5kQ2xpZW50OwogICAgIGJvb2wgbV9vcGVuaW5nRnJvbnRlbmQ7CiAg
ICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kPiBtX2Zyb250ZW5kOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JDU1NBZ2VudD4gbV9jc3NBZ2VudDsKICAgICBSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+
IG1fZG9tQWdlbnQ7CiAgICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlQWdlbnQ+IG1fcmVzb3Vy
Y2VBZ2VudDsKICAgICBSZWZQdHI8SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBtX3N0b3JhZ2VBZ2Vu
dDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBmNWM1ZjhiLi5j
YTNhYzc2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5j
cHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0xNTMx
LDE1ICsxNTMxLDYgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YWRkUnVsZShjb25zdCBTdHJp
bmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkLCBSZWYKICAgICAqcnVsZU9iamVjdCA9
IGJ1aWxkT2JqZWN0Rm9yUnVsZShub2RlLT5vd25lckRvY3VtZW50KCksIG5ld1J1bGUpOwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4qIGNzc1Byb3BlcnRpZXMpCi17Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm9wZXJ0aWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtQ1NTUHJvcGVydGllczsgKytpKQotICAgICAgICBwcm9wZXJ0aWVz
LT5wdXNoU3RyaW5nKHByb3BlcnR5TmFtZVN0cmluZ3NbaV0pOwotCi0gICAgKmNzc1Byb3BlcnRp
ZXMgPSBwcm9wZXJ0aWVzLnJlbGVhc2UoKTsKLX0KLQogUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFy
YXRpb24qIHN0eWxlLCBib29sIGJpbmQpCiB7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5oCmluZGV4IDAzZTRkOGQuLmVhMzZiZGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuaApAQCAtMTM3LDcgKzEzNyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdm9pZCB0b2dnbGVTdHlsZUVuYWJsZWQobG9uZyBzdHlsZUlkLCBjb25zdCBTdHJp
bmcmIHByb3BlcnR5TmFtZSwgYm9vbCBkaXNhYmxlZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiog
c3R5bGVPYmplY3QpOwogICAgICAgICB2b2lkIHNldFJ1bGVTZWxlY3Rvcihsb25nIHJ1bGVJZCwg
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgbG9uZyBzZWxlY3RlZE5vZGVJZCwgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiogcnVsZU9iamVjdCwgYm9vbCogc2VsZWN0b3JBZmZlY3RzTm9kZSk7CiAgICAg
ICAgIHZvaWQgYWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9k
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBydWxlT2JqZWN0LCBib29sKiBzZWxlY3RvckFm
ZmVjdHNOb2RlKTsKLSAgICAgICAgdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4qIGNzc1Byb3BlcnRpZXMpOwogCiAgICAgICAgIC8vIE1ldGhvZHMg
Y2FsbGVkIGZyb20gdGhlIEluc3BlY3RvckNvbnRyb2xsZXIuCiAgICAgICAgIHZvaWQgc2V0RG9j
dW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5
bGVTaGVldC5jcHAKaW5kZXggMTFjZDY0OS4uNzA4MmEzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTk4LDYgKzk4LDM2OSBAQCBSZWZQdHI8V2ViQ29y
ZTo6Q1NTUnVsZVNvdXJjZURhdGE+IFBhcnNlZFN0eWxlU2hlZXQ6OnJ1bGVTb3VyY2VEYXRhQXQo
dW5zaWduZWQgaQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1Bhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0Cit7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBpZiAoIW1fc3R5bGVJZC5pc0VtcHR5KCkpCisgICAgICAgIHJlc3VsdC0+c2V0
U3RyaW5nKCJzdHlsZUlkIiwgbV9zdHlsZUlkLmFzU3RyaW5nKCkpOworCisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcHJvcGVydGllc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgcHJvcGVydGllc09iamVjdC0+c2V0U3RyaW5nKCJ3aWR0aCIsIG1fc3R5bGUtPmdl
dFByb3BlcnR5VmFsdWUoIndpZHRoIikpOworICAgIHByb3BlcnRpZXNPYmplY3QtPnNldFN0cmlu
ZygiaGVpZ2h0IiwgbV9zdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZSgiaGVpZ2h0IikpOworCisgICAg
UmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gbV9wYXJlbnRTdHlsZVNoZWV0
ID8gbV9wYXJlbnRTdHlsZVNoZWV0LT5ydWxlU291cmNlRGF0YUZvcihtX3N0eWxlKSA6IDA7Cisg
ICAgaWYgKHNvdXJjZURhdGEpIHsKKyAgICAgICAgcHJvcGVydGllc09iamVjdC0+c2V0TnVtYmVy
KCJzdGFydE9mZnNldCIsIHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFu
Z2Uuc3RhcnQpOworICAgICAgICBwcm9wZXJ0aWVzT2JqZWN0LT5zZXROdW1iZXIoImVuZE9mZnNl
dCIsIHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kKTsKKyAg
ICB9CisgICAgcmVzdWx0LT5zZXRPYmplY3QoInByb3BlcnRpZXMiLCBwcm9wZXJ0aWVzT2JqZWN0
KTsKKworICAgIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhyZXN1bHQuZ2V0KCkp
OworCisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5
bGU6OnNldFByb3BlcnR5VGV4dCh1bnNpZ25lZCBpbmRleCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eVRleHQsIGJvb2wgb3ZlcndyaXRlKQoreworICAgIEFTU0VSVChtX3BhcmVudFN0eWxlU2hlZXQp
OworICAgIGlmICghbV9wYXJlbnRTdHlsZVNoZWV0LT5lbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVy
dHk+IGFsbFByb3BlcnRpZXM7CisgICAgcG9wdWxhdGVBbGxQcm9wZXJ0aWVzKCZhbGxQcm9wZXJ0
aWVzKTsKKworICAgIHVuc2lnbmVkIHByb3BlcnR5U3RhcnQgPSAwOyAvLyBOZWVkIHRvIGluaXRp
YWxpemUgdG8gbWFrZSB0aGUgY29tcGlsZXIgaGFwcHkuCisgICAgbG9uZyBwcm9wZXJ0eUxlbmd0
aERlbHRhOworCisgICAgaWYgKG92ZXJ3cml0ZSkgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBh
bGxQcm9wZXJ0aWVzLnNpemUoKSk7CisgICAgICAgIEluc3BlY3RvclN0eWxlUHJvcGVydHkmIHBy
b3BlcnR5ID0gYWxsUHJvcGVydGllcy5hdChpbmRleCk7CisgICAgICAgIHByb3BlcnR5U3RhcnQg
PSBwcm9wZXJ0eS5zb3VyY2VEYXRhLnJhbmdlLnN0YXJ0OworICAgICAgICB1bnNpZ25lZCBwcm9w
ZXJ0eUVuZCA9IHByb3BlcnR5LnNvdXJjZURhdGEucmFuZ2UuZW5kOworICAgICAgICB1bnNpZ25l
ZCBvbGRMZW5ndGggPSBwcm9wZXJ0eUVuZCAtIHByb3BlcnR5U3RhcnQ7CisgICAgICAgIHVuc2ln
bmVkIG5ld0xlbmd0aCA9IHByb3BlcnR5VGV4dC5sZW5ndGgoKTsKKyAgICAgICAgcHJvcGVydHlM
ZW5ndGhEZWx0YSA9IG5ld0xlbmd0aCAtIG9sZExlbmd0aDsKKworICAgICAgICBpZiAoIXByb3Bl
cnR5LmRpc2FibGVkKSB7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSByZXBsYWNlUHJvcGVy
dHlJblN0eWxlVGV4dChwcm9wZXJ0eSwgcHJvcGVydHlUZXh0KTsKKyAgICAgICAgICAgIGlmICgh
c3VjY2VzcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBwcm9wZXJ0eS5yYXdUZXh0ID0gcHJvcGVydHlUZXh0OworICAgICAgICAg
ICAgaWYgKCFwcm9wZXJ0eVRleHQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBib29sIHN1
Y2Nlc3MgPSBlbmFibGVQcm9wZXJ0eShpbmRleCwgYWxsUHJvcGVydGllcyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBJbnNlcnQgYXQgaW5kZXguCisgICAgICAgIFJlZlB0cjxDU1NSdWxl
U291cmNlRGF0YT4gc291cmNlRGF0YSA9IG1fcGFyZW50U3R5bGVTaGVldC0+cnVsZVNvdXJjZURh
dGFGb3IobV9zdHlsZSk7CisgICAgICAgIGlmICghc291cmNlRGF0YSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgU3RyaW5nIHRleHQ7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9
IHN0eWxlVGV4dCgmdGV4dCk7CisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcHJvcGVydHlMZW5ndGhEZWx0YSA9IHByb3BlcnR5VGV4dC5s
ZW5ndGgoKTsKKworICAgICAgICBib29sIGluc2VydExhc3QgPSB0cnVlOworICAgICAgICBpZiAo
aW5kZXggPCBhbGxQcm9wZXJ0aWVzLnNpemUoKSkgeworICAgICAgICAgICAgSW5zcGVjdG9yU3R5
bGVQcm9wZXJ0eSYgcHJvcGVydHkgPSBhbGxQcm9wZXJ0aWVzLmF0KGluZGV4KTsKKyAgICAgICAg
ICAgIGlmIChwcm9wZXJ0eS5oYXNTb3VyY2UpIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
YXJ0ID0gcHJvcGVydHkuc291cmNlRGF0YS5yYW5nZS5zdGFydDsKKyAgICAgICAgICAgICAgICAv
LyBJZiBpbnNlcnRpbmcgYmVmb3JlIGEgZGlzYWJsZWQgcHJvcGVydHksIGl0IHNob3VsZCBiZSBz
aGlmdGVkLCB0b28uCisgICAgICAgICAgICAgICAgaW5zZXJ0TGFzdCA9IGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpbnNlcnRMYXN0KQorICAgICAgICAgICAg
cHJvcGVydHlTdGFydCA9IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFu
Z2UuZW5kOworCisgICAgICAgIHRleHQuaW5zZXJ0KHByb3BlcnR5VGV4dCwgcHJvcGVydHlTdGFy
dCk7CisgICAgICAgIG1fcGFyZW50U3R5bGVTaGVldC0+c2V0U3R5bGVUZXh0KG1fc3R5bGUsIHRl
eHQpOworICAgIH0KKworICAgIC8vIFJlY29tcHV0ZSBzdWJzZXF1ZW50IGRpc2FibGVkIHByb3Bl
cnR5IHJhbmdlcy4KKyAgICBzaGlmdERpc2FibGVkUHJvcGVydGllcyhkaXNhYmxlZEluZGV4QnlP
cmRpbmFsKGluZGV4LCB0cnVlLCBhbGxQcm9wZXJ0aWVzKSwgcHJvcGVydHlMZW5ndGhEZWx0YSk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnNwZWN0b3JTdHlsZTo6dG9nZ2xlUHJv
cGVydHkodW5zaWduZWQgaW5kZXgsIGJvb2wgZGlzYWJsZSkKK3sKKyAgICBBU1NFUlQobV9wYXJl
bnRTdHlsZVNoZWV0KTsKKyAgICBpZiAoIW1fcGFyZW50U3R5bGVTaGVldC0+ZW5zdXJlUGFyc2Vk
RGF0YVJlYWR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gQ2FuIHRvZ2dsZSBvbmx5IHNv
dXJjZS1iYXNlZCBwcm9wZXJ0aWVzLgorICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291
cmNlRGF0YSA9IG1fcGFyZW50U3R5bGVTaGVldC0+cnVsZVNvdXJjZURhdGFGb3IobV9zdHlsZSk7
CisgICAgaWYgKCFzb3VyY2VEYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vIHNvdXJj
ZSBkYXRhIGZvciB0aGUgc3R5bGUuCisKKyAgICBWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0
eT4gYWxsUHJvcGVydGllczsKKyAgICBwb3B1bGF0ZUFsbFByb3BlcnRpZXMoJmFsbFByb3BlcnRp
ZXMpOworICAgIGlmIChpbmRleCA+PSBhbGxQcm9wZXJ0aWVzLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBPdXRzaWRlIG9mIHByb3BlcnR5IHJhbmdlLgorCisgICAgSW5zcGVjdG9y
U3R5bGVQcm9wZXJ0eSYgcHJvcGVydHkgPSBhbGxQcm9wZXJ0aWVzLmF0KGluZGV4KTsKKyAgICBp
ZiAocHJvcGVydHkuZGlzYWJsZWQgPT0gZGlzYWJsZSkKKyAgICAgICAgcmV0dXJuIHRydWU7IC8v
IElkZW1wb3RlbnQgb3BlcmF0aW9uLgorCisgICAgYm9vbCBzdWNjZXNzOworICAgIGlmICghZGlz
YWJsZSkKKyAgICAgICAgc3VjY2VzcyA9IGVuYWJsZVByb3BlcnR5KGluZGV4LCBhbGxQcm9wZXJ0
aWVzKTsKKyAgICBlbHNlCisgICAgICAgIHN1Y2Nlc3MgPSBkaXNhYmxlUHJvcGVydHkoaW5kZXgs
IGFsbFByb3BlcnRpZXMpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKy8vIHN0YXRpYwor
dW5zaWduZWQgSW5zcGVjdG9yU3R5bGU6OmRpc2FibGVkSW5kZXhCeU9yZGluYWwodW5zaWduZWQg
b3JkaW5hbCwgYm9vbCBjYW5Vc2VTdWJzZXF1ZW50LCBWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9w
ZXJ0eT4mIGFsbFByb3BlcnRpZXMpCit7CisgICAgdW5zaWduZWQgZGlzYWJsZWRJbmRleCA9IDA7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IGFsbFByb3BlcnRpZXMuc2l6ZSgpOyBp
IDwgc2l6ZTsgKytpKSB7CisgICAgICAgIEluc3BlY3RvclN0eWxlUHJvcGVydHkmIHByb3BlcnR5
ID0gYWxsUHJvcGVydGllcy5hdChpKTsKKyAgICAgICAgaWYgKHByb3BlcnR5LmRpc2FibGVkKSB7
CisgICAgICAgICAgICBpZiAoaSA9PSBvcmRpbmFsIHx8IChjYW5Vc2VTdWJzZXF1ZW50ICYmIGkg
PiBvcmRpbmFsKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGlzYWJsZWRJbmRleDsKKyAgICAg
ICAgICAgICsrZGlzYWJsZWRJbmRleDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBV
SU5UX01BWDsKK30KKworYm9vbCBJbnNwZWN0b3JTdHlsZTo6c3R5bGVUZXh0KFN0cmluZyogcmVz
dWx0KQoreworICAgIC8vIFByZWNvbmRpdGlvbjogbV9wYXJlbnRTdHlsZVNoZWV0LT5lbnN1cmVQ
YXJzZWREYXRhUmVhZHkoKSBoYXMgYmVlbiBjYWxsZWQgc3VjY2Vzc2Z1bGx5LgorICAgIFJlZlB0
cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IG1fcGFyZW50U3R5bGVTaGVldC0+cnVs
ZVNvdXJjZURhdGFGb3IobV9zdHlsZSk7CisgICAgaWYgKCFzb3VyY2VEYXRhKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgc3R5bGVTaGVldFRleHQ7CisgICAgYm9vbCBzdWNj
ZXNzID0gbV9wYXJlbnRTdHlsZVNoZWV0LT50ZXh0KCZzdHlsZVNoZWV0VGV4dCk7CisgICAgaWYg
KCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTb3VyY2VSYW5nZSYgYm9k
eVJhbmdlID0gc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZTsKKyAg
ICAqcmVzdWx0ID0gc3R5bGVTaGVldFRleHQuc3Vic3RyaW5nKGJvZHlSYW5nZS5zdGFydCwgYm9k
eVJhbmdlLmVuZCAtIGJvZHlSYW5nZS5zdGFydCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgSW5zcGVjdG9yU3R5bGU6OmRpc2FibGVQcm9wZXJ0eSh1bnNpZ25lZCBpbmRleFRvRGlzYWJs
ZSwgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+JiBhbGxQcm9wZXJ0aWVzKQoreworICAg
IC8vIFByZWNvbmRpdGlvbjogfGluZGV4VG9FbmFibGV8IHBvaW50cyB0byBhbiBlbmFibGVkIHBy
b3BlcnR5LgorICAgIGNvbnN0IEluc3BlY3RvclN0eWxlUHJvcGVydHkmIHByb3BlcnR5ID0gYWxs
UHJvcGVydGllcy5hdChpbmRleFRvRGlzYWJsZSk7CisgICAgSW5zcGVjdG9yU3R5bGVQcm9wZXJ0
eSBkaXNhYmxlZFByb3BlcnR5KHByb3BlcnR5KTsKKyAgICBkaXNhYmxlZFByb3BlcnR5LmRpc2Fi
bGVkID0gdHJ1ZTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eVN0YXJ0ID0gcHJvcGVydHkuc291cmNl
RGF0YS5yYW5nZS5zdGFydDsKKyAgICAvLyBUaGlzIG1heSBoYXZlIHRvIGJlIG5lZ2F0ZWQgYmVs
b3cuCisgICAgbG9uZyBwcm9wZXJ0eUxlbmd0aCA9IHByb3BlcnR5LnNvdXJjZURhdGEucmFuZ2Uu
ZW5kIC0gcHJvcGVydHlTdGFydDsKKyAgICBkaXNhYmxlZFByb3BlcnR5LnNvdXJjZURhdGEucmFu
Z2UuZW5kID0gcHJvcGVydHlTdGFydDsKKyAgICBTdHJpbmcgb2xkU3R5bGVUZXh0OworICAgIGJv
b2wgc3VjY2VzcyA9IHN0eWxlVGV4dCgmb2xkU3R5bGVUZXh0KTsKKyAgICBpZiAoIXN1Y2Nlc3Mp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkaXNhYmxlZFByb3BlcnR5LnJhd1RleHQgPSBv
bGRTdHlsZVRleHQuc3Vic3RyaW5nKHByb3BlcnR5U3RhcnQsIHByb3BlcnR5TGVuZ3RoKTsKKyAg
ICBzdWNjZXNzID0gcmVwbGFjZVByb3BlcnR5SW5TdHlsZVRleHQocHJvcGVydHksICIiKTsKKyAg
ICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEFkZCBkaXNh
YmxlZCBwcm9wZXJ0eSBhdCBjb3JyZWN0IHBvc2l0aW9uLgorICAgIHVuc2lnbmVkIGluc2VydGlv
bkluZGV4ID0gZGlzYWJsZWRJbmRleEJ5T3JkaW5hbChpbmRleFRvRGlzYWJsZSwgdHJ1ZSwgYWxs
UHJvcGVydGllcyk7CisgICAgaWYgKGluc2VydGlvbkluZGV4ID09IFVJTlRfTUFYKQorICAgICAg
ICBtX2Rpc2FibGVkUHJvcGVydGllcy5hcHBlbmQoZGlzYWJsZWRQcm9wZXJ0eSk7CisgICAgZWxz
ZSB7CisgICAgICAgIG1fZGlzYWJsZWRQcm9wZXJ0aWVzLmluc2VydChpbnNlcnRpb25JbmRleCwg
ZGlzYWJsZWRQcm9wZXJ0eSk7CisgICAgICAgIHNoaWZ0RGlzYWJsZWRQcm9wZXJ0aWVzKGluc2Vy
dGlvbkluZGV4ICsgMSwgLXByb3BlcnR5TGVuZ3RoKTsgLy8gUHJvcGVydHkgcmVtb3ZlZCBmcm9t
IHRleHQgLSBzaGlmdCB0aGVzZSBiYWNrLgorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBJbnNwZWN0b3JTdHlsZTo6ZW5hYmxlUHJvcGVydHkodW5zaWduZWQgaW5kZXhUb0VuYWJs
ZSwgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+JiBhbGxQcm9wZXJ0aWVzKQoreworICAg
IC8vIFByZWNvbmRpdGlvbjogfGluZGV4VG9FbmFibGV8IHBvaW50cyB0byBhIGRpc2FibGVkIHBy
b3BlcnR5LgorICAgIHVuc2lnbmVkIGRpc2FibGVkSW5kZXggPSBkaXNhYmxlZEluZGV4QnlPcmRp
bmFsKGluZGV4VG9FbmFibGUsIGZhbHNlLCBhbGxQcm9wZXJ0aWVzKTsKKyAgICBpZiAoZGlzYWJs
ZWRJbmRleCA9PSBVSU5UX01BWCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSW5zcGVj
dG9yU3R5bGVQcm9wZXJ0eSBkaXNhYmxlZFByb3BlcnR5ID0gbV9kaXNhYmxlZFByb3BlcnRpZXMu
YXQoZGlzYWJsZWRJbmRleCk7CisgICAgbV9kaXNhYmxlZFByb3BlcnRpZXMucmVtb3ZlKGRpc2Fi
bGVkSW5kZXgpOworICAgIGJvb2wgc3VjY2VzcyA9IHJlcGxhY2VQcm9wZXJ0eUluU3R5bGVUZXh0
KGRpc2FibGVkUHJvcGVydHksIGRpc2FibGVkUHJvcGVydHkucmF3VGV4dCk7CisgICAgaWYgKHN1
Y2Nlc3MpCisgICAgICAgIHNoaWZ0RGlzYWJsZWRQcm9wZXJ0aWVzKGRpc2FibGVkSW5kZXgsIGRp
c2FibGVkUHJvcGVydHkucmF3VGV4dC5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9
CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGU6OnBvcHVsYXRlQWxsUHJvcGVydGllcyhWZWN0b3I8SW5z
cGVjdG9yU3R5bGVQcm9wZXJ0eT4qIHJlc3VsdCkgY29uc3QKK3sKKyAgICBIYXNoU2V0PFN0cmlu
Zz4gZm91bmRTaG9ydGhhbmRzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBzb3VyY2VQcm9wZXJ0eU5h
bWVzOworICAgIHVuc2lnbmVkIGRpc2FibGVkSW5kZXggPSAwOworICAgIHVuc2lnbmVkIGRpc2Fi
bGVkTGVuZ3RoID0gbV9kaXNhYmxlZFByb3BlcnRpZXMuc2l6ZSgpOworICAgIEluc3BlY3RvclN0
eWxlUHJvcGVydHkgZGlzYWJsZWRQcm9wZXJ0eTsKKyAgICBpZiAoZGlzYWJsZWRJbmRleCA8IGRp
c2FibGVkTGVuZ3RoKQorICAgICAgICBkaXNhYmxlZFByb3BlcnR5ID0gbV9kaXNhYmxlZFByb3Bl
cnRpZXMuYXQoZGlzYWJsZWRJbmRleCk7CisKKyAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+
IHNvdXJjZURhdGEgPSAobV9wYXJlbnRTdHlsZVNoZWV0ICYmIG1fcGFyZW50U3R5bGVTaGVldC0+
ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpID8gbV9wYXJlbnRTdHlsZVNoZWV0LT5ydWxlU291cmNl
RGF0YUZvcihtX3N0eWxlKSA6IDA7CisgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4q
IHNvdXJjZVByb3BlcnR5RGF0YSA9IHNvdXJjZURhdGEgPyAmKHNvdXJjZURhdGEtPnN0eWxlU291
cmNlRGF0YS0+cHJvcGVydHlEYXRhKSA6IDA7CisgICAgaWYgKHNvdXJjZVByb3BlcnR5RGF0YSkg
eworICAgICAgICBmb3IgKFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IHNvdXJjZVByb3BlcnR5RGF0YS0+YmVnaW4oKTsgaXQgIT0gc291cmNlUHJvcGVy
dHlEYXRhLT5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgd2hpbGUgKGRpc2FibGVkSW5kZXgg
PCBkaXNhYmxlZExlbmd0aCAmJiBkaXNhYmxlZFByb3BlcnR5LnNvdXJjZURhdGEucmFuZ2Uuc3Rh
cnQgPD0gaXQtPnJhbmdlLnN0YXJ0KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQo
ZGlzYWJsZWRQcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgaWYgKCsrZGlzYWJsZWRJbmRleCA8
IGRpc2FibGVkTGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFByb3BlcnR5ID0g
bV9kaXNhYmxlZFByb3BlcnRpZXMuYXQoZGlzYWJsZWRJbmRleCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXN1bHQtPmFwcGVuZChJbnNwZWN0b3JTdHlsZVByb3BlcnR5KCppdCwgdHJ1
ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgIHNvdXJjZVByb3BlcnR5TmFtZXMuYWRkKGl0LT5uYW1l
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdoaWxlIChkaXNhYmxlZEluZGV4IDwgZGlzYWJs
ZWRMZW5ndGgpIHsKKyAgICAgICAgZGlzYWJsZWRQcm9wZXJ0eSA9IG1fZGlzYWJsZWRQcm9wZXJ0
aWVzLmF0KGRpc2FibGVkSW5kZXgrKyk7CisgICAgICAgIHJlc3VsdC0+YXBwZW5kKGRpc2FibGVk
UHJvcGVydHkpOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwLCBzaXplID0gbV9zdHlsZS0+
bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBtX3N0eWxl
LT5pdGVtKGkpOworICAgICAgICBpZiAoc291cmNlUHJvcGVydHlOYW1lcy5jb250YWlucyhuYW1l
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHNvdXJjZVByb3BlcnR5TmFtZXMu
YWRkKG5hbWUpOworICAgICAgICByZXN1bHQtPmFwcGVuZChJbnNwZWN0b3JTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5U291cmNlRGF0YShuYW1lLCBtX3N0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKG5h
bWUpLCAhbV9zdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShuYW1lKS5pc0VtcHR5KCksIHRydWUs
IFNvdXJjZVJhbmdlKCkpLCBmYWxzZSwgZmFsc2UpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBJbnNwZWN0b3JTdHlsZTo6cG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9w
ZXJ0aWVzKEluc3BlY3Rvck9iamVjdCogcmVzdWx0KSBjb25zdAoreworICAgIFZlY3RvcjxJbnNw
ZWN0b3JTdHlsZVByb3BlcnR5PiBwcm9wZXJ0aWVzOworICAgIHBvcHVsYXRlQWxsUHJvcGVydGll
cygmcHJvcGVydGllcyk7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3BlcnRpZXNP
YmplY3QgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gc2hvcnRoYW5kVmFsdWVzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBI
YXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gPiBwcm9wZXJ0eU5hbWVUb1By
ZXZpb3VzQWN0aXZlUHJvcGVydHk7CisgICAgSGFzaFNldDxTdHJpbmc+IGZvdW5kU2hvcnRoYW5k
czsKKworICAgIGZvciAoVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+OjppdGVyYXRvciBp
dCA9IHByb3BlcnRpZXMuYmVnaW4oKSwgaXRFbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOyBpdCAhPSBp
dEVuZDsgKytpdCkgeworICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIHByb3Bl
cnR5RW50cnkgPSBpdC0+c291cmNlRGF0YTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0g
cHJvcGVydHlFbnRyeS5uYW1lOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBy
b3BlcnR5ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgcHJvcGVydGllc09i
amVjdC0+cHVzaE9iamVjdChwcm9wZXJ0eSk7CisgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmco
InN0YXR1cyIsIGl0LT5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiYWN0aXZlIik7CisgICAgICAg
IHByb3BlcnR5LT5zZXRCb29sZWFuKCJwYXJzZWRPayIsIHByb3BlcnR5RW50cnkucGFyc2VkT2sp
OworICAgICAgICBpZiAoIWl0LT5kaXNhYmxlZCkgeworICAgICAgICAgICAgcHJvcGVydHktPnNl
dFN0cmluZygibmFtZSIsIG5hbWUpOworICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygi
dmFsdWUiLCBwcm9wZXJ0eUVudHJ5LnZhbHVlKTsKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRT
dHJpbmcoInByaW9yaXR5IiwgcHJvcGVydHlFbnRyeS5pbXBvcnRhbnQgPyAiaW1wb3J0YW50IiA6
ICIiKTsKKyAgICAgICAgICAgIGlmIChpdC0+aGFzU291cmNlKSB7CisgICAgICAgICAgICAgICAg
cHJvcGVydHktPnNldEJvb2xlYW4oImltcGxpY2l0IiwgZmFsc2UpOworICAgICAgICAgICAgICAg
IHByb3BlcnR5LT5zZXROdW1iZXIoInN0YXJ0T2Zmc2V0IiwgcHJvcGVydHlFbnRyeS5yYW5nZS5z
dGFydCk7CisgICAgICAgICAgICAgICAgcHJvcGVydHktPnNldE51bWJlcigiZW5kT2Zmc2V0Iiwg
cHJvcGVydHlFbnRyeS5yYW5nZS5lbmQpOworCisgICAgICAgICAgICAgICAgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+ID46Oml0ZXJhdG9yIGFjdGl2ZUl0ID0gcHJvcGVy
dHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmZpbmQobmFtZSk7CisgICAgICAgICAgICAg
ICAgaWYgKGFjdGl2ZUl0ICE9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5l
bmQoKSkgeworICAgICAgICAgICAgICAgICAgICBhY3RpdmVJdC0+c2Vjb25kLT5zZXRTdHJpbmco
InN0YXR1cyIsICJpbmFjdGl2ZSIpOworICAgICAgICAgICAgICAgICAgICBhY3RpdmVJdC0+c2Vj
b25kLT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCAiIik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5zZXQo
bmFtZSwgcHJvcGVydHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBw
cm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCBtX3N0eWxlLT5pc1Byb3BlcnR5SW1wbGlj
aXQobmFtZSkpOworICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIs
ICJzdHlsZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHBy
b3BlcnR5LT5zZXRTdHJpbmcoInRleHQiLCBpdC0+cmF3VGV4dCk7CisKKyAgICAgICAgaWYgKHBy
b3BlcnR5RW50cnkucGFyc2VkT2spIHsKKyAgICAgICAgICAgIC8vIEJvdGggZm9yIHN0eWxlLW9y
aWdpbmF0ZWQgYW5kIHBhcnNlZCBzb3VyY2UgcHJvcGVydGllcy4KKyAgICAgICAgICAgIFN0cmlu
ZyBzaG9ydGhhbmQgPSBtX3N0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKKyAgICAg
ICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCBzaG9ydGhhbmQpOwor
ICAgICAgICAgICAgaWYgKCFzaG9ydGhhbmQuaXNFbXB0eSgpICYmICFmb3VuZFNob3J0aGFuZHMu
Y29udGFpbnMoc2hvcnRoYW5kKSkgeworICAgICAgICAgICAgICAgIGZvdW5kU2hvcnRoYW5kcy5h
ZGQoc2hvcnRoYW5kKTsKKyAgICAgICAgICAgICAgICBzaG9ydGhhbmRWYWx1ZXMtPnNldFN0cmlu
ZyhzaG9ydGhhbmQsIHNob3J0aGFuZFZhbHVlKHNob3J0aGFuZCkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInNob3J0aGFu
ZE5hbWUiLCAiIik7CisgICAgfQorCisgICAgcmVzdWx0LT5zZXRBcnJheSgiY3NzUHJvcGVydGll
cyIsIHByb3BlcnRpZXNPYmplY3QpOworICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzaG9ydGhhbmRW
YWx1ZXMiLCBzaG9ydGhhbmRWYWx1ZXMpOworfQorCisKK3ZvaWQgSW5zcGVjdG9yU3R5bGU6OnNo
aWZ0RGlzYWJsZWRQcm9wZXJ0aWVzKHVuc2lnbmVkIGZyb21JbmRleCwgbG9uZyBkZWx0YSkKK3sK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBmcm9tSW5kZXgsIHNpemUgPSBtX2Rpc2FibGVkUHJvcGVy
dGllcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgU291cmNlUmFuZ2UmIHJhbmdl
ID0gbV9kaXNhYmxlZFByb3BlcnRpZXMuYXQoaSkuc291cmNlRGF0YS5yYW5nZTsKKyAgICAgICAg
cmFuZ2Uuc3RhcnQgKz0gZGVsdGE7CisgICAgICAgIHJhbmdlLmVuZCArPSBkZWx0YTsKKyAgICB9
Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGU6OnJlcGxhY2VQcm9wZXJ0eUluU3R5bGVUZXh0KGNv
bnN0IEluc3BlY3RvclN0eWxlUHJvcGVydHkmIHByb3BlcnR5LCBjb25zdCBTdHJpbmcmIG5ld1Rl
eHQpCit7CisgICAgLy8gUHJlY29uZGl0aW9uOiBtX3BhcmVudFN0eWxlU2hlZXQtPmVuc3VyZVBh
cnNlZERhdGFSZWFkeSgpIGhhcyBiZWVuIGNhbGxlZCBzdWNjZXNzZnVsbHkuCisgICAgU3RyaW5n
IHRleHQ7CisgICAgYm9vbCBzdWNjZXNzID0gc3R5bGVUZXh0KCZ0ZXh0KTsKKyAgICBpZiAoIXN1
Y2Nlc3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBTb3VyY2VSYW5nZSYgcmFu
Z2UgPSBwcm9wZXJ0eS5zb3VyY2VEYXRhLnJhbmdlOworICAgIHRleHQucmVwbGFjZShyYW5nZS5z
dGFydCwgcmFuZ2UuZW5kIC0gcmFuZ2Uuc3RhcnQsIG5ld1RleHQpOworICAgIHN1Y2Nlc3MgPSBt
X3BhcmVudFN0eWxlU2hlZXQtPnNldFN0eWxlVGV4dChtX3N0eWxlLCB0ZXh0KTsKKyAgICByZXR1
cm4gc3VjY2VzczsKK30KKworU3RyaW5nIEluc3BlY3RvclN0eWxlOjpzaG9ydGhhbmRWYWx1ZShj
b25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KSBjb25zdAoreworICAgIFN0cmluZyB2YWx1
ZSA9IG1fc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoc2hvcnRoYW5kUHJvcGVydHkpOworICAgIGlm
ICh2YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
c3R5bGUtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBpbmRpdmlkdWFsUHJv
cGVydHkgPSBtX3N0eWxlLT5pdGVtKGkpOworICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmdldFBy
b3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1YWxQcm9wZXJ0eSkgIT0gc2hvcnRoYW5kUHJvcGVydHkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAobV9zdHlsZS0+aXNQ
cm9wZXJ0eUltcGxpY2l0KGluZGl2aWR1YWxQcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFZhbHVlID0gbV9zdHlsZS0+Z2V0
UHJvcGVydHlWYWx1ZShpbmRpdmlkdWFsUHJvcGVydHkpOworICAgICAgICAgICAgaWYgKGluZGl2
aWR1YWxWYWx1ZSA9PSAiaW5pdGlhbCIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBpZiAodmFsdWUubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgdmFsdWUuYXBwZW5k
KCIgIik7CisgICAgICAgICAgICB2YWx1ZS5hcHBlbmQoaW5kaXZpZHVhbFZhbHVlKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JTdHls
ZTo6c2hvcnRoYW5kUHJpb3JpdHkoY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkgY29u
c3QKK3sKKyAgICBTdHJpbmcgcHJpb3JpdHkgPSBtX3N0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5
KHNob3J0aGFuZFByb3BlcnR5KTsKKyAgICBpZiAocHJpb3JpdHkuaXNFbXB0eSgpKSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0eWxlLT5sZW5ndGgoKTsgKytpKSB7Cisg
ICAgICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFByb3BlcnR5ID0gbV9zdHlsZS0+aXRlbShpKTsK
KyAgICAgICAgICAgIGlmIChtX3N0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChpbmRpdmlkdWFs
UHJvcGVydHkpICE9IHNob3J0aGFuZFByb3BlcnR5KQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgcHJpb3JpdHkgPSBtX3N0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KGlu
ZGl2aWR1YWxQcm9wZXJ0eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gcHJpb3JpdHk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IEluc3BlY3RvclN0eWxl
Ojpsb25naGFuZFByb3BlcnRpZXMoY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkgY29u
c3QKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBwcm9wZXJ0aWVzOworICAgIEhhc2hTZXQ8U3RyaW5n
PiBmb3VuZFByb3BlcnRpZXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3R5bGUt
Pmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIGluZGl2aWR1YWxQcm9wZXJ0eSA9IG1f
c3R5bGUtPml0ZW0oaSk7CisgICAgICAgIGlmIChmb3VuZFByb3BlcnRpZXMuY29udGFpbnMoaW5k
aXZpZHVhbFByb3BlcnR5KSB8fCBtX3N0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChpbmRpdmlk
dWFsUHJvcGVydHkpICE9IHNob3J0aGFuZFByb3BlcnR5KQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgZm91bmRQcm9wZXJ0aWVzLmFkZChpbmRpdmlkdWFsUHJvcGVydHkpOworICAg
ICAgICBwcm9wZXJ0aWVzLmFwcGVuZChpbmRpdmlkdWFsUHJvcGVydHkpOworICAgIH0KKyAgICBy
ZXR1cm4gcHJvcGVydGllczsKK30KKwogSW5zcGVjdG9yU3R5bGVTaGVldDo6SW5zcGVjdG9yU3R5
bGVTaGVldChjb25zdCBTdHJpbmcmIGlkLCBDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwg
Y29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwpCiAgICAgOiBt
X2lkKGlkKQogICAgICwgbV9wYWdlU3R5bGVTaGVldChwYWdlU3R5bGVTaGVldCkKQEAgLTEyMSwx
NCArNDg0LDE1IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0VGV4dChjb25zdCBTdHJp
bmcmIHRleHQpCiAgICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRUZXh0KHRleHQpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBtX3BhZ2VTdHlsZVNoZWV0LT5sZW5ndGgoKTsgaSA8
IHNpemU7ICsraSkKICAgICAgICAgbV9wYWdlU3R5bGVTaGVldC0+cmVtb3ZlKGkpOworICAgIG1f
aW5zcGVjdG9yU3R5bGVzLmNsZWFyKCk7CiAKICAgICBtX3BhZ2VTdHlsZVNoZWV0LT5wYXJzZVN0
cmluZyh0ZXh0LCBtX3BhZ2VTdHlsZVNoZWV0LT51c2VTdHJpY3RQYXJzaW5nKCkpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnNldFJ1bGVTZWxlY3Rv
cihjb25zdCBTdHJpbmcmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKK2Jvb2wgSW5z
cGVjdG9yU3R5bGVTaGVldDo6c2V0UnVsZVNlbGVjdG9yKGNvbnN0IEluc3BlY3RvckNvbXBvdW5k
SWQmIGlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogewotICAgIENTU1N0eWxlUnVsZSogcnVs
ZSA9IHJ1bGVGb3JJZChydWxlSWQpOworICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IHJ1bGVGb3JJ
ZChpZCk7CiAgICAgaWYgKCFydWxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgQ1NTU3R5
bGVTaGVldCogc3R5bGVTaGVldCA9IEluc3BlY3RvckNTU0FnZW50OjpwYXJlbnRTdHlsZVNoZWV0
KHJ1bGUpOwpAQCAtMTQwLDE4ICs1MDQsMTYgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpz
ZXRSdWxlU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2UKICAg
ICBpZiAoIXNvdXJjZURhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IFN0
cmluZyYgc2hlZXRUZXh0ID0gbV9wYXJzZWRTdHlsZVNoZWV0LT50ZXh0KCk7Ci0gICAgU3RyaW5n
IG5ld1N0eWxlU2hlZXRUZXh0ID0gc2hlZXRUZXh0LnN1YnN0cmluZygwLCBzb3VyY2VEYXRhLT5z
ZWxlY3Rvckxpc3RSYW5nZS5zdGFydCk7Ci0gICAgbmV3U3R5bGVTaGVldFRleHQgKz0gc2VsZWN0
b3I7Ci0gICAgbmV3U3R5bGVTaGVldFRleHQgKz0gc2hlZXRUZXh0LnJpZ2h0KHNoZWV0VGV4dC5s
ZW5ndGgoKSAtIHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLmVuZCk7Ci0gICAgbV9wYXJz
ZWRTdHlsZVNoZWV0LT5zZXRUZXh0KG5ld1N0eWxlU2hlZXRUZXh0KTsKKyAgICBTdHJpbmcgc2hl
ZXRUZXh0ID0gbV9wYXJzZWRTdHlsZVNoZWV0LT50ZXh0KCk7CisgICAgc2hlZXRUZXh0LnJlcGxh
Y2Uoc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQsIHNvdXJjZURhdGEtPnNlbGVj
dG9yTGlzdFJhbmdlLmVuZCAtIHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0LCBz
ZWxlY3Rvcik7CisgICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRUZXh0KHNoZWV0VGV4dCk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6
YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogewotICAgIFN0cmluZyB0ZXh0OwotICAg
IGJvb2wgc3VjY2VzcyA9IHN0eWxlU2hlZXRUZXh0KCZ0ZXh0KTsKKyAgICBTdHJpbmcgc3R5bGVT
aGVldFRleHQ7CisgICAgYm9vbCBzdWNjZXNzID0gdGV4dCgmc3R5bGVTaGVldFRleHQpOwogICAg
IGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTE2NCwyMyArNTI2LDI0IEBA
IENTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6YWRkUnVsZShjb25zdCBTdHJpbmcm
IHNlbGVjdG9yKQogICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IEluc3BlY3RvckNTU0FnZW50Ojph
c0NTU1N0eWxlUnVsZShydWxlcy0+aXRlbShydWxlcy0+bGVuZ3RoKCkgLSAxKSk7CiAgICAgQVNT
RVJUKHJ1bGUpOwogCi0gICAgaWYgKHRleHQubGVuZ3RoKCkpCi0gICAgICAgIHRleHQgKz0gIlxu
IjsKKyAgICBpZiAoc3R5bGVTaGVldFRleHQubGVuZ3RoKCkpCisgICAgICAgIHN0eWxlU2hlZXRU
ZXh0ICs9ICJcbiI7CiAKLSAgICB0ZXh0ICs9IHNlbGVjdG9yOwotICAgIHRleHQgKz0gIiB7fSI7
Ci0gICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRUZXh0KHRleHQpOworICAgIHN0eWxlU2hlZXRU
ZXh0ICs9IHNlbGVjdG9yOworICAgIHN0eWxlU2hlZXRUZXh0ICs9ICIge30iOworICAgIG1fcGFy
c2VkU3R5bGVTaGVldC0+c2V0VGV4dChzdHlsZVNoZWV0VGV4dCk7CiAKICAgICByZXR1cm4gcnVs
ZTsKIH0KIAotQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlRm9ySWQoY29u
c3QgU3RyaW5nJiBpZCkgY29uc3QKK0NTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6
cnVsZUZvcklkKGNvbnN0IEluc3BlY3RvckNvbXBvdW5kSWQmIGlkKSBjb25zdAogewogICAgIGlm
ICghbV9wYWdlU3R5bGVTaGVldCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBBU1NFUlQoaWQu
cGFydENvdW50KCkgPT0gMik7CiAgICAgYm9vbCBvazsKLSAgICB1bnNpZ25lZCBpbmRleCA9IGlk
LnRvVUludCgmb2spOworICAgIHVuc2lnbmVkIGluZGV4ID0gaWQucGFydCgxKS50b1VJbnQoJm9r
KTsKICAgICBpZiAoIW9rKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMjA0LDE5ICs1NjcsMjAg
QEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxk
T2JqZWN0Rm9yU3R5bGVTaGVldCgpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBy
ZXN1bHQtPnNldFN0cmluZygiaWQiLCBpZCgpKTsKICAgICByZXN1bHQtPnNldEJvb2xlYW4oImRp
c2FibGVkIiwgc3R5bGVTaGVldC0+ZGlzYWJsZWQoKSk7Ci0gICAgcmVzdWx0LT5zZXRTdHJpbmco
ImhyZWYiLCBzdHlsZVNoZWV0LT5ocmVmKCkpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzb3Vy
Y2VVUkwiLCBzdHlsZVNoZWV0LT5ocmVmKCkpOwogICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJ0aXRs
ZSIsIHN0eWxlU2hlZXQtPnRpdGxlKCkpOwogICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gY3NzUnVs
ZUxpc3QgPSBDU1NSdWxlTGlzdDo6Y3JlYXRlKHN0eWxlU2hlZXQsIHRydWUpOwogICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gY3NzUnVsZXMgPSBidWlsZEFycmF5Rm9yUnVsZUxpc3QoY3NzUnVs
ZUxpc3QuZ2V0KCkpOwotICAgIHJlc3VsdC0+c2V0QXJyYXkoImNzc1J1bGVzIiwgY3NzUnVsZXMu
cmVsZWFzZSgpKTsKKyAgICByZXN1bHQtPnNldEFycmF5KCJydWxlcyIsIGNzc1J1bGVzLnJlbGVh
c2UoKSk7CiAKICAgICBTdHJpbmcgc3R5bGVTaGVldFRleHQ7CiAgICAgYm9vbCBzdWNjZXNzID0g
dGV4dCgmc3R5bGVTaGVldFRleHQpOwogICAgIGlmIChzdWNjZXNzKQogICAgICAgICByZXN1bHQt
PnNldFN0cmluZygidGV4dCIsIHN0eWxlU2hlZXRUZXh0KTsKIAorICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJzdHlsZVNoZWV0SWQiLCBpZCgpKTsKKwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgp
OwogfQogCkBAIC0yMjgsMjcgKzU5MiwxMyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZQogCiAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgICByZXN1bHQtPnNldFN0cmluZygic2VsZWN0b3JUZXh0IiwgcnVsZS0+c2VsZWN0
b3JUZXh0KCkpOwotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJjc3NUZXh0IiwgcnVsZS0+Y3NzVGV4
dCgpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygic291cmNlVVJMIiwgIXN0eWxlU2hlZXQtPmhy
ZWYoKS5pc0VtcHR5KCkgPyBzdHlsZVNoZWV0LT5ocmVmKCkgOiBtX2RvY3VtZW50VVJMKTsKICAg
ICByZXN1bHQtPnNldE51bWJlcigic291cmNlTGluZSIsIHJ1bGUtPnNvdXJjZUxpbmUoKSk7Ci0g
ICAgcmVzdWx0LT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgbV9kb2N1bWVudFVSTCk7Ci0KLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJlbnRTdHlsZVNoZWV0VmFsdWUgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmVudFN0eWxlU2hlZXRWYWx1ZS0+c2V0U3RyaW5n
KCJpZCIsIGlkKCkpOwotICAgIHBhcmVudFN0eWxlU2hlZXRWYWx1ZS0+c2V0U3RyaW5nKCJocmVm
Iiwgc3R5bGVTaGVldC0+aHJlZigpKTsKLSAgICByZXN1bHQtPnNldE9iamVjdCgicGFyZW50U3R5
bGVTaGVldCIsIHBhcmVudFN0eWxlU2hlZXRWYWx1ZS5yZWxlYXNlKCkpOwogICAgIHJlc3VsdC0+
c2V0U3RyaW5nKCJvcmlnaW4iLCBtX29yaWdpbik7CiAKLSAgICBSZWZQdHI8Q1NTUnVsZVNvdXJj
ZURhdGE+IHNvdXJjZURhdGE7Ci0gICAgaWYgKGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKQotICAg
ICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3IocnVsZS0+c3R5bGUoKSk7Ci0gICAg
aWYgKHNvdXJjZURhdGEpIHsKLSAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoInNlbGVjdG9yU3Rh
cnRPZmZzZXQiLCBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCk7Ci0gICAgICAg
IHJlc3VsdC0+c2V0TnVtYmVyKCJzZWxlY3RvckVuZE9mZnNldCIsIHNvdXJjZURhdGEtPnNlbGVj
dG9yTGlzdFJhbmdlLmVuZCk7Ci0gICAgfQotCiAgICAgcmVzdWx0LT5zZXRPYmplY3QoInN0eWxl
IiwgYnVpbGRPYmplY3RGb3JTdHlsZShydWxlLT5zdHlsZSgpKSk7CiAgICAgaWYgKGNhbkJpbmQo
KSkKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImlkIiwgZnVsbFJ1bGVJZChydWxlKSk7Cisg
ICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJydWxlSWQiLCBydWxlSWQocnVsZSkuYXNTdHJpbmco
KSk7CiAKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KQEAgLTI1OSwxMiArNjA5LDQ4
IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWls
ZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjCiAgICAgaWYgKGVuc3VyZVBhcnNlZERhdGFSZWFk
eSgpKQogICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3Ioc3R5bGUpOwogCi0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGUsIGZ1bGxTdHlsZUlkKHN0eWxlKSwgc291cmNlRGF0YSA/
IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS5nZXQoKSA6IDApOwotICAgIHJlc3VsdC0+c2V0
U3RyaW5nKCJwYXJlbnRTdHlsZVNoZWV0SWQiLCBpZCgpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
U3R5bGU+IGluc3BlY3RvclN0eWxlID0gaW5zcGVjdG9yU3R5bGVGb3JJZChydWxlT3JTdHlsZUlk
KHN0eWxlKSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gaW5zcGVjdG9y
U3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKTsKKworICAgIC8vIFN0eWxlIHRleHQgY2Fubm90
IGJlIHJldHJpZXZlZCB3aXRob3V0IHN0eWxlc2hlZXQsIHNvIHNldCBjc3NUZXh0IGhlcmUuCisg
ICAgaWYgKHNvdXJjZURhdGEpIHsKKyAgICAgICAgU3RyaW5nIHNoZWV0VGV4dDsKKyAgICAgICAg
Ym9vbCBzdWNjZXNzID0gdGV4dCgmc2hlZXRUZXh0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsK
KyAgICAgICAgICAgIGNvbnN0IFNvdXJjZVJhbmdlJiBib2R5UmFuZ2UgPSBzb3VyY2VEYXRhLT5z
dHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlOworICAgICAgICAgICAgcmVzdWx0LT5zZXRT
dHJpbmcoImNzc1RleHQiLCBzaGVldFRleHQuc3Vic3RyaW5nKGJvZHlSYW5nZS5zdGFydCwgYm9k
eVJhbmdlLmVuZCAtIGJvZHlSYW5nZS5zdGFydCkpOworICAgICAgICB9CisgICAgfQorCiAgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLUNTU1N0eWxlRGVjbGFyYXRpb24qIEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OnN0eWxlRm9ySWQoY29uc3QgU3RyaW5nJiBpZCkgY29uc3QKK2Jvb2wg
SW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0UHJvcGVydHlUZXh0KGNvbnN0IEluc3BlY3RvckNvbXBv
dW5kSWQmIGlkLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJv
b2wgb3ZlcndyaXRlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5
bGUgPSBpbnNwZWN0b3JTdHlsZUZvcklkKGlkKTsKKyAgICBpZiAoIWluc3BlY3RvclN0eWxlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGUtPnNldFBy
b3BlcnR5VGV4dChwcm9wZXJ0eUluZGV4LCB0ZXh0LCBvdmVyd3JpdGUpOworfQorCitib29sIElu
c3BlY3RvclN0eWxlU2hlZXQ6OnRvZ2dsZVByb3BlcnR5KGNvbnN0IEluc3BlY3RvckNvbXBvdW5k
SWQmIGlkLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUpCit7CisgICAgUmVm
UHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IGluc3BlY3RvclN0eWxlRm9ySWQo
aWQpOworICAgIGlmICghaW5zcGVjdG9yU3R5bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGJvb2wgc3VjY2VzcyA9IGluc3BlY3RvclN0eWxlLT50b2dnbGVQcm9wZXJ0eShwcm9wZXJ0
eUluZGV4LCBkaXNhYmxlKTsKKyAgICBpZiAoc3VjY2VzcykgeworICAgICAgICBpZiAoZGlzYWJs
ZSkKKyAgICAgICAgICAgIHJlbWVtYmVySW5zcGVjdG9yU3R5bGUoaW5zcGVjdG9yU3R5bGUpOwor
ICAgICAgICBlbHNlIGlmICghaW5zcGVjdG9yU3R5bGUtPmhhc0Rpc2FibGVkUHJvcGVydGllcygp
KQorICAgICAgICAgICAgZm9yZ2V0SW5zcGVjdG9yU3R5bGUoaW5zcGVjdG9yU3R5bGUtPmNzc1N0
eWxlKCkpOworICAgIH0KKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworQ1NTU3R5bGVEZWNsYXJh
dGlvbiogSW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDb21w
b3VuZElkJiBpZCkgY29uc3QKIHsKICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRm9ySWQo
aWQpOwogICAgIGlmICghcnVsZSkKQEAgLTI3MywxMyArNjU5LDM3IEBAIENTU1N0eWxlRGVjbGFy
YXRpb24qIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlRm9ySWQoY29uc3QgU3RyaW5nJiBpZCkg
Y29uc3QKICAgICByZXR1cm4gcnVsZS0+c3R5bGUoKTsKIH0KIAotYm9vbCBJbnNwZWN0b3JTdHls
ZVNoZWV0OjpzZXRTdHlsZVRleHQoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCBjb25zdCBTdHJpbmcm
IG5ld1RleHQpCitQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0
OjppbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNvbXBvdW5kSWQmIGlkKQogewot
ICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gc3R5bGVGb3JJZChzdHlsZUlkKTsKKyAg
ICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHN0eWxlRm9ySWQoaWQpOwogICAgIGlmICgh
c3R5bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBJ
bnNwZWN0b3JTdHlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2luc3BlY3RvclN0eWxlcy5maW5kKHN0
eWxlKTsKKyAgICBpZiAoaXQgPT0gbV9pbnNwZWN0b3JTdHlsZXMuZW5kKCkpIHsKKyAgICAgICAg
UmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpj
cmVhdGUoaWQsIHN0eWxlLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlLnJl
bGVhc2UoKTsKKyAgICB9CisgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Cit9CiAKLSAgICByZXR1cm4g
aW5uZXJTZXRTdHlsZVRleHQoc3R5bGUsIG5ld1RleHQpOwordm9pZCBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjpyZW1lbWJlckluc3BlY3RvclN0eWxlKFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVj
dG9yU3R5bGUpCit7CisgICAgbV9pbnNwZWN0b3JTdHlsZXMuc2V0KGluc3BlY3RvclN0eWxlLT5j
c3NTdHlsZSgpLCBpbnNwZWN0b3JTdHlsZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3R5bGVTaGVl
dDo6Zm9yZ2V0SW5zcGVjdG9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7Cisg
ICAgbV9pbnNwZWN0b3JTdHlsZXMucmVtb3ZlKHN0eWxlKTsKK30KKworSW5zcGVjdG9yQ29tcG91
bmRJZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlT3JTdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlKSBjb25zdAoreworICAgIEluc3BlY3RvckNvbXBvdW5kSWQgcmVzdWx0OworICAg
IHVuc2lnbmVkIGluZGV4ID0gcnVsZUluZGV4QnlTdHlsZShzdHlsZSk7CisgICAgaWYgKGluZGV4
ICE9IFVJTlRfTUFYKQorICAgICAgICByZXN1bHQuYXBwZW5kUGFydChpZCgpKS5hcHBlbmRQYXJ0
KFN0cmluZzo6bnVtYmVyKGluZGV4KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRG9jdW1l
bnQqIEluc3BlY3RvclN0eWxlU2hlZXQ6Om93bmVyRG9jdW1lbnQoKSBjb25zdApAQCAtMzI4LDcg
KzczOCw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlVGV4dCgpIGNvbnN0CiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgU3RyaW5nIHRleHQ7Ci0gICAgYm9vbCBzdWNjZXNz
ID0gc3R5bGVTaGVldFRleHQoJnRleHQpOworICAgIGJvb2wgc3VjY2VzcyA9IG9yaWdpbmFsU3R5
bGVTaGVldFRleHQoJnRleHQpOwogICAgIGlmIChzdWNjZXNzKQogICAgICAgICBtX3BhcnNlZFN0
eWxlU2hlZXQtPnNldFRleHQodGV4dCk7CiAKQEAgLTM2MiwxMiArNzcyLDcgQEAgYm9vbCBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKE5vZGUqIG93bmVyTm9kZSkKICAgICBy
ZXR1cm4gbV9wYXJzZWRTdHlsZVNoZWV0LT5oYXNTb3VyY2VEYXRhKCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yU3R5bGVTaGVldDo6aW5uZXJTZXRTdHlsZVNoZWV0VGV4dChjb25zdCBTdHJpbmcmIG5l
d1RleHQpCi17Ci0gICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRUZXh0KG5ld1RleHQpOwotfQot
Ci1ib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OmlubmVyU2V0U3R5bGVUZXh0KENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlLCBjb25zdCBTdHJpbmcmIHRleHQpCitib29sIEluc3BlY3RvclN0eWxl
U2hlZXQ6OnNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3Ry
aW5nJiB0ZXh0KQogewogICAgIGlmICghcGFnZVN0eWxlU2hlZXQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMzc5LDE0ICs3ODQsMTQgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpp
bm5lclNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3QKICAg
ICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBpZCA9
IHJ1bGVPclN0eWxlSWQoc3R5bGUpOworICAgIEluc3BlY3RvckNvbXBvdW5kSWQgaWQgPSBydWxl
T3JTdHlsZUlkKHN0eWxlKTsKICAgICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBzdHlsZS0+c2V0Q3NzVGV4
dCh0ZXh0LCBlYyk7CiAgICAgaWYgKCFlYykKLSAgICAgICAgaW5uZXJTZXRTdHlsZVNoZWV0VGV4
dChwYXRjaGVkU3R5bGVTaGVldFRleHQpOworICAgICAgICBtX3BhcnNlZFN0eWxlU2hlZXQtPnNl
dFRleHQocGF0Y2hlZFN0eWxlU2hlZXRUZXh0KTsKIAogICAgIHJldHVybiAhZWM7CiB9CkBAIC00
MDcsMTAgKzgxMiw4IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFRleHRX
aXRoQ2hhbmdlZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0CiAgICAgU3RyaW5nIHRleHQg
PSBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKTsKICAgICBBU1NFUlQoYm9keUVuZCA8PSB0ZXh0
Lmxlbmd0aCgpKTsgLy8gYm9keUVuZCBpcyBleGNsdXNpdmUKIAotICAgIFN0cmluZyBwYXRjaGVk
VGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIGJvZHlTdGFydCk7Ci0gICAgcGF0Y2hlZFRleHQgKz0g
bmV3U3R5bGVUZXh0OwotICAgIHBhdGNoZWRUZXh0ICs9IHRleHQuc3Vic3RyaW5nKGJvZHlFbmQs
IHRleHQubGVuZ3RoKCkpOwotICAgICpyZXN1bHQgPSBwYXRjaGVkVGV4dDsKKyAgICB0ZXh0LnJl
cGxhY2UoYm9keVN0YXJ0LCBib2R5RW5kIC0gYm9keVN0YXJ0LCBuZXdTdHlsZVRleHQpOworICAg
ICpyZXN1bHQgPSB0ZXh0OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC00MjYsOSArODI5LDkg
QEAgQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpmaW5kUGFnZVJ1bGVXaXRoU3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3QKICAgICByZXR1cm4gMDsKIH0KIAotU3RyaW5nIElu
c3BlY3RvclN0eWxlU2hlZXQ6OmZ1bGxSdWxlSWQoQ1NTU3R5bGVSdWxlKiBydWxlKSBjb25zdAor
SW5zcGVjdG9yQ29tcG91bmRJZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlSWQoQ1NTU3R5bGVS
dWxlKiBydWxlKSBjb25zdAogewotICAgIHJldHVybiBmdWxsUnVsZU9yU3R5bGVJZChydWxlLT5z
dHlsZSgpKTsKKyAgICByZXR1cm4gcnVsZU9yU3R5bGVJZChydWxlLT5zdHlsZSgpKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZXZhbGlkYXRlU3R5bGUoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogcGFnZVN0eWxlKQpAQCAtNDQ0LDE1ICs4NDcsMTggQEAgdm9pZCBJbnNwZWN0b3JTdHls
ZVNoZWV0OjpyZXZhbGlkYXRlU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogcGFnZVN0eWxlKQog
ICAgICAgICBpZiAoIXBhcnNlZFJ1bGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
aWYgKHBhcnNlZFJ1bGUtPnN0eWxlKCkgPT0gcGFnZVN0eWxlKSB7Ci0gICAgICAgICAgICBpZiAo
cGFyc2VkUnVsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpICE9IHBhZ2VTdHlsZS0+Y3NzVGV4dCgpKQot
ICAgICAgICAgICAgICAgIGlubmVyU2V0U3R5bGVUZXh0KHBhZ2VTdHlsZSwgcGFnZVN0eWxlLT5j
c3NUZXh0KCkpOworICAgICAgICAgICAgaWYgKHBhcnNlZFJ1bGUtPnN0eWxlKCktPmNzc1RleHQo
KSAhPSBwYWdlU3R5bGUtPmNzc1RleHQoKSkgeworICAgICAgICAgICAgICAgIC8vIENsZWFyIHRo
ZSBkaXNhYmxlZCBwcm9wZXJ0aWVzIGZvciB0aGUgaW52YWxpZCBzdHlsZSBoZXJlLgorICAgICAg
ICAgICAgICAgIG1faW5zcGVjdG9yU3R5bGVzLnJlbW92ZShwYWdlU3R5bGUpOworICAgICAgICAg
ICAgICAgIHNldFN0eWxlVGV4dChwYWdlU3R5bGUsIHBhZ2VTdHlsZS0+Y3NzVGV4dCgpKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAgIG1f
aXNSZXZhbGlkYXRpbmcgPSBmYWxzZTsKIH0KIAotYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpz
dHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKK2Jvb2wgSW5zcGVjdG9yU3R5bGVT
aGVldDo6b3JpZ2luYWxTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKIHsKICAg
ICBTdHJpbmcgdGV4dDsKICAgICBib29sIHN1Y2Nlc3MgPSBpbmxpbmVTdHlsZVNoZWV0VGV4dCgm
dGV4dCk7CkBAIC00NjUsNyArODcxLDcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHls
ZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjpyZXNvdXJjZVN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAogewotICAg
IGlmICghbV9wYWdlU3R5bGVTaGVldCkKKyAgICBpZiAoIW1fcGFnZVN0eWxlU2hlZXQgfHwgIW93
bmVyRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIEluc3Bl
Y3RvclJlc291cmNlQWdlbnQ6OnJlc291cmNlQ29udGVudChvd25lckRvY3VtZW50KCktPmZyYW1l
KCksIG1fcGFnZVN0eWxlU2hlZXQtPmZpbmFsVVJMKCksIHJlc3VsdCk7CkBAIC01MDksMTIgKzkx
NSwxMiBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZShjb25zdCBTdHJpbgogICAgICwgbV9ydWxlU291cmNlRGF0YSgw
KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBtX2luc3BlY3RvclN0eWxlID0gSW5zcGVj
dG9yU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JDb21wb3VuZElkKGlkKS5hcHBlbmRQYXJ0KCIwIiks
IGlubGluZVN0eWxlKCksIHRoaXMpOwogfQogCi1ib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZTo6c2V0U3R5bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3Ry
aW5nJiB0ZXh0KQorYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnNldFN0
eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQog
ewotICAgIEFTU0VSVChzdHlsZUlkID09ICIwIik7Ci0gICAgVU5VU0VEX1BBUkFNKHN0eWxlSWQp
OworICAgIEFTU0VSVF9VTlVTRUQoc3R5bGUsIHN0eWxlID09IGlubGluZVN0eWxlKCkpOwogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIG1fZWxlbWVudC0+c2V0QXR0cmlidXRlKCJzdHls
ZSIsIHRleHQsIGVjKTsKICAgICBtX3J1bGVTb3VyY2VEYXRhLmNsZWFyKCk7CkBAIC01NDEsNiAr
OTQ3LDEyIEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjplbnN1cmVQ
YXJzZWREYXRhUmVhZHkoKQogICAgIHJldHVybiB0cnVlOwogfQogCitQYXNzUmVmUHRyPEluc3Bl
Y3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Omluc3BlY3RvclN0
eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ29tcG91bmRJZCYgaWQpCit7CisgICAgQVNTRVJUX1VO
VVNFRChpZCwgaWQucGFydCgxKSA9PSAiMCIpOworICAgIHJldHVybiBtX2luc3BlY3RvclN0eWxl
OworfQorCiBDU1NTdHlsZURlY2xhcmF0aW9uKiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5l
U3R5bGU6OmlubGluZVN0eWxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9lbGVtZW50LT5zdHls
ZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5o
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCmluZGV4IDM4YWI3Nzcu
LmU1MGNkNWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKQEAgLTI2
LDE2ICsyNiwxNCBAQAogI2RlZmluZSBJbnNwZWN0b3JTdHlsZVNoZWV0X2gKIAogI2luY2x1ZGUg
IkNTU1Byb3BlcnR5U291cmNlRGF0YS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBjbGFzcyBQYXJzZWRTdHlsZVNoZWV0OwogCkBAIC00MywxMyArNDEsMTAz
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTUnVsZUxpc3Q7CiBjbGFzcyBDU1NT
dHlsZURlY2xhcmF0aW9uOworY2xhc3MgQ1NTU3R5bGVTaGVldDsKK2NsYXNzIERvY3VtZW50Owog
Y2xhc3MgRWxlbWVudDsKK2NsYXNzIEluc3BlY3RvclN0eWxlU2hlZXQ7CiBjbGFzcyBOb2RlOwog
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAorY2xhc3MgSW5zcGVjdG9yQ29tcG91bmRJZCB7Citw
dWJsaWM6CisgICAgSW5zcGVjdG9yQ29tcG91bmRJZCgpIHsgfQorICAgIGV4cGxpY2l0IEluc3Bl
Y3RvckNvbXBvdW5kSWQoY29uc3QgU3RyaW5nJiBpZCkKKyAgICB7CisgICAgICAgIGlkLnNwbGl0
KCc6JywgbV9pZFBhcnRzKTsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIHBhcnQodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0IHsgQVNTRVJUKGluZGV4IDwgbV9pZFBhcnRzLnNpemUoKSk7IHJldHVy
biBtX2lkUGFydHMuYXQoaW5kZXgpOyB9CisgICAgdW5zaWduZWQgcGFydENvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9pZFBhcnRzLnNpemUoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1faWRQYXJ0cy5pc0VtcHR5KCk7IH0KKyAgICBJbnNwZWN0b3JDb21wb3VuZElkJiBh
cHBlbmRQYXJ0KGNvbnN0IFN0cmluZyYgcGFydCkgeyBtX2lkUGFydHMuYXBwZW5kKHBhcnQpOyBy
ZXR1cm4gKnRoaXM7IH0KKyAgICBTdHJpbmcgYXNTdHJpbmcoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgU3RyaW5nIHJlc3VsdDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1f
aWRQYXJ0cy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpID4gMCkK
KyAgICAgICAgICAgICAgICByZXN1bHQgKz0gIjoiOworICAgICAgICAgICAgcmVzdWx0ICs9IG1f
aWRQYXJ0cy5hdChpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworcHJpdmF0ZToKKyAgICBWZWN0b3I8U3RyaW5nPiBtX2lkUGFydHM7Cit9OworCitzdHJ1Y3Qg
SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eSB7CisgICAgSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eSgpCisg
ICAgeworICAgIH0KKworICAgIEluc3BlY3RvclN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlTb3Vy
Y2VEYXRhIHNvdXJjZURhdGEsIGJvb2wgaGFzU291cmNlLCBib29sIGRpc2FibGVkKQorICAgICAg
ICA6IHNvdXJjZURhdGEoc291cmNlRGF0YSkKKyAgICAgICAgLCBoYXNTb3VyY2UoaGFzU291cmNl
KQorICAgICAgICAsIGRpc2FibGVkKGRpc2FibGVkKQorICAgIHsKKyAgICB9CisKKyAgICBDU1NQ
cm9wZXJ0eVNvdXJjZURhdGEgc291cmNlRGF0YTsKKyAgICBib29sIGhhc1NvdXJjZTsKKyAgICBi
b29sIGRpc2FibGVkOworICAgIFN0cmluZyByYXdUZXh0OworfTsKKworY2xhc3MgSW5zcGVjdG9y
U3R5bGUgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JTdHlsZT4geworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlPiBjcmVhdGUoY29uc3QgSW5zcGVjdG9y
Q29tcG91bmRJZCYgc3R5bGVJZCwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEluc3BlY3Rv
clN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEluc3BlY3RvclN0eWxlKHN0eWxlSWQsIHN0eWxlLCBwYXJlbnRTdHlsZVNoZWV0
KSk7CisgICAgfQorCisgICAgSW5zcGVjdG9yU3R5bGUoY29uc3QgSW5zcGVjdG9yQ29tcG91bmRJ
ZCYgc3R5bGVJZCwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEluc3BlY3RvclN0eWxlU2hl
ZXQqIHBhcmVudFN0eWxlU2hlZXQpCisgICAgICAgIDogbV9zdHlsZUlkKHN0eWxlSWQpCisgICAg
ICAgICwgbV9zdHlsZShzdHlsZSkKKyAgICAgICAgLCBtX3BhcmVudFN0eWxlU2hlZXQocGFyZW50
U3R5bGVTaGVldCkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdHlsZSk7CisgICAgfQorCisgICAg
Q1NTU3R5bGVEZWNsYXJhdGlvbiogY3NzU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9
CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBj
b25zdDsKKyAgICBib29sIGhhc0Rpc2FibGVkUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuICFt
X2Rpc2FibGVkUHJvcGVydGllcy5pc0VtcHR5KCk7IH0KKyAgICBib29sIHNldFByb3BlcnR5VGV4
dCh1bnNpZ25lZCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSk7Cisg
ICAgYm9vbCB0b2dnbGVQcm9wZXJ0eSh1bnNpZ25lZCBpbmRleCwgYm9vbCBkaXNhYmxlKTsKKwor
cHJpdmF0ZToKKyAgICBzdGF0aWMgdW5zaWduZWQgZGlzYWJsZWRJbmRleEJ5T3JkaW5hbCh1bnNp
Z25lZCBvcmRpbmFsLCBib29sIGNhblVzZVN1YnNlcXVlbnQsIFZlY3RvcjxJbnNwZWN0b3JTdHls
ZVByb3BlcnR5PiYgYWxsUHJvcGVydGllcyk7CisKKyAgICBib29sIHN0eWxlVGV4dChTdHJpbmcq
IHJlc3VsdCk7CisgICAgYm9vbCBkaXNhYmxlUHJvcGVydHkodW5zaWduZWQgaW5kZXhUb0Rpc2Fi
bGUsIFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiYgYWxsUHJvcGVydGllcyk7CisgICAg
Ym9vbCBlbmFibGVQcm9wZXJ0eSh1bnNpZ25lZCBpbmRleFRvRW5hYmxlLCBWZWN0b3I8SW5zcGVj
dG9yU3R5bGVQcm9wZXJ0eT4mIGFsbFByb3BlcnRpZXMpOworICAgIGJvb2wgcG9wdWxhdGVBbGxQ
cm9wZXJ0aWVzKFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiogcmVzdWx0KSBjb25zdDsK
KyAgICB2b2lkIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhJbnNwZWN0b3JPYmpl
Y3QqIHJlc3VsdCkgY29uc3Q7CisgICAgdm9pZCBzaGlmdERpc2FibGVkUHJvcGVydGllcyh1bnNp
Z25lZCBmcm9tSW5kZXgsIGxvbmcgb2Zmc2V0KTsKKyAgICBib29sIHJlcGxhY2VQcm9wZXJ0eUlu
U3R5bGVUZXh0KGNvbnN0IEluc3BlY3RvclN0eWxlUHJvcGVydHkmIHByb3BlcnR5LCBjb25zdCBT
dHJpbmcmIG5ld1RleHQpOworICAgIFN0cmluZyBzaG9ydGhhbmRWYWx1ZShjb25zdCBTdHJpbmcm
IHNob3J0aGFuZFByb3BlcnR5KSBjb25zdDsKKyAgICBTdHJpbmcgc2hvcnRoYW5kUHJpb3JpdHko
Y29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkgY29uc3Q7CisgICAgVmVjdG9yPFN0cmlu
Zz4gbG9uZ2hhbmRQcm9wZXJ0aWVzKGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpIGNv
bnN0OworCisgICAgSW5zcGVjdG9yQ29tcG91bmRJZCBtX3N0eWxlSWQ7CisgICAgQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogbV9zdHlsZTsKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBtX3BhcmVudFN0
eWxlU2hlZXQ7CisgICAgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+IG1fZGlzYWJsZWRQ
cm9wZXJ0aWVzOworfTsKKwogY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldCA6IHB1YmxpYyBSZWZD
b3VudGVkPEluc3BlY3RvclN0eWxlU2hlZXQ+IHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIEhhc2hN
YXA8Q1NTU3R5bGVEZWNsYXJhdGlvbiosIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gPiBJbnNwZWN0
b3JTdHlsZU1hcDsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBj
cmVhdGUoY29uc3QgU3RyaW5nJiBpZCwgQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIGNv
bnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0KGlkLCBwYWdlU3R5
bGVTaGVldCwgb3JpZ2luLCBkb2N1bWVudFVSTCkpOwpAQCAtNjEsNDYgKzE0OSw1NSBAQCBwdWJs
aWM6CiAgICAgY29uc3QgU3RyaW5nJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KICAgICBD
U1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVN0eWxl
U2hlZXQ7IH0KICAgICBib29sIHNldFRleHQoY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBzZXRS
dWxlU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3Ip
OworICAgIGJvb2wgc2V0UnVsZVNlbGVjdG9yKGNvbnN0IEluc3BlY3RvckNvbXBvdW5kSWQmLCBj
b25zdCBTdHJpbmcmIHNlbGVjdG9yKTsKICAgICBDU1NTdHlsZVJ1bGUqIGFkZFJ1bGUoY29uc3Qg
U3RyaW5nJiBzZWxlY3Rvcik7Ci0gICAgQ1NTU3R5bGVSdWxlKiBydWxlRm9ySWQoY29uc3QgU3Ry
aW5nJikgY29uc3Q7CisgICAgQ1NTU3R5bGVSdWxlKiBydWxlRm9ySWQoY29uc3QgSW5zcGVjdG9y
Q29tcG91bmRJZCYpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWls
ZE9iamVjdEZvclN0eWxlU2hlZXQoKTsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSopOwogICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKLSAg
ICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQoY29uc3QgU3RyaW5nJikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNldFN0eWxlVGV4dChjb25zdCBTdHJpbmcmIHN0eWxl
SWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CisgICAgYm9vbCBzZXRQcm9wZXJ0eVRleHQoY29uc3Qg
SW5zcGVjdG9yQ29tcG91bmRJZCYsIHVuc2lnbmVkIHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmlu
ZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUpOworICAgIGJvb2wgdG9nZ2xlUHJvcGVydHkoY29uc3Qg
SW5zcGVjdG9yQ29tcG91bmRJZCYsIHVuc2lnbmVkIHByb3BlcnR5SW5kZXgsIGJvb2wgZGlzYWJs
ZSk7CisKKyAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQoY29uc3Qg
SW5zcGVjdG9yQ29tcG91bmRJZCYpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBjYW5C
aW5kKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW4gIT0gInVzZXJBZ2VudCIgJiYgbV9vcmlnaW4g
IT0gInVzZXIiOyB9Ci0gICAgU3RyaW5nIGZ1bGxSdWxlT3JTdHlsZUlkKENTU1N0eWxlRGVjbGFy
YXRpb24qIHN0eWxlKSBjb25zdCB7IHJldHVybiBpZCgpICsgIjoiICsgcnVsZU9yU3R5bGVJZChz
dHlsZSk7IH0KLSAgICBTdHJpbmcgcnVsZU9yU3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSkgY29uc3QgeyB1bnNpZ25lZCBpbmRleCA9IHJ1bGVJbmRleEJ5U3R5bGUoc3R5bGUpOyBy
ZXR1cm4gaW5kZXggPT0gVUlOVF9NQVggPyAiIiA6IFN0cmluZzo6bnVtYmVyKGluZGV4KTsgfQor
ICAgIEluc3BlY3RvckNvbXBvdW5kSWQgcnVsZU9yU3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSkgY29uc3Q7CiAgICAgdmlydHVhbCBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0
YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNp
Z25lZCBydWxlSW5kZXhCeVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCk7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNv
bXBvdW5kSWQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtZW1iZXJJbnNwZWN0b3JTdHlsZShSZWZQ
dHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9y
Z2V0SW5zcGVjdG9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpOworCisgICAgLy8g
QWxzbyBhY2Nlc3NlZCBieSBmcmllbmQgY2xhc3MgSW5zcGVjdG9yU3R5bGUuCisgICAgdmlydHVh
bCBib29sIHNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJik7
CiAKIHByaXZhdGU6CiAgICAgYm9vbCB0ZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdDsKICAgICBi
b29sIGVuc3VyZVRleHQoKSBjb25zdDsKICAgICBib29sIGVuc3VyZVNvdXJjZURhdGEoTm9kZSog
b3duZXJOb2RlKTsKLSAgICB2b2lkIGlubmVyU2V0U3R5bGVTaGVldFRleHQoY29uc3QgU3RyaW5n
JiBuZXdUZXh0KTsKLSAgICBib29sIGlubmVyU2V0U3R5bGVUZXh0KENTU1N0eWxlRGVjbGFyYXRp
b24qLCBjb25zdCBTdHJpbmcmKTsKICAgICBib29sIHN0eWxlU2hlZXRUZXh0V2l0aENoYW5nZWRT
dHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBuZXdTdHlsZVRleHQsIFN0
cmluZyogcmVzdWx0KTsKICAgICBDU1NTdHlsZVJ1bGUqIGZpbmRQYWdlUnVsZVdpdGhTdHlsZShD
U1NTdHlsZURlY2xhcmF0aW9uKik7Ci0gICAgU3RyaW5nIGZ1bGxSdWxlSWQoQ1NTU3R5bGVSdWxl
KiBydWxlKSBjb25zdDsKLSAgICBTdHJpbmcgZnVsbFN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUpIGNvbnN0IHsgcmV0dXJuIGZ1bGxSdWxlT3JTdHlsZUlkKHN0eWxlKTsgfQorICAg
IEluc3BlY3RvckNvbXBvdW5kSWQgcnVsZUlkKENTU1N0eWxlUnVsZSogcnVsZSkgY29uc3Q7Cisg
ICAgSW5zcGVjdG9yQ29tcG91bmRJZCBzdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
KSBjb25zdCB7IHJldHVybiBydWxlT3JTdHlsZUlkKHN0eWxlKTsgfQogICAgIHZvaWQgcmV2YWxp
ZGF0ZVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKLSAgICBib29sIHN0eWxlU2hlZXRUZXh0
KFN0cmluZyogcmVzdWx0KSBjb25zdDsKKyAgICBib29sIG9yaWdpbmFsU3R5bGVTaGVldFRleHQo
U3RyaW5nKiByZXN1bHQpIGNvbnN0OwogICAgIGJvb2wgcmVzb3VyY2VTdHlsZVNoZWV0VGV4dChT
dHJpbmcqIHJlc3VsdCkgY29uc3Q7CiAgICAgYm9vbCBpbmxpbmVTdHlsZVNoZWV0VGV4dChTdHJp
bmcqIHJlc3VsdCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRB
cnJheUZvclJ1bGVMaXN0KENTU1J1bGVMaXN0Kik7CiAKKwogICAgIFN0cmluZyBtX2lkOwogICAg
IENTU1N0eWxlU2hlZXQqIG1fcGFnZVN0eWxlU2hlZXQ7CiAgICAgU3RyaW5nIG1fb3JpZ2luOwog
ICAgIFN0cmluZyBtX2RvY3VtZW50VVJMOwogICAgIGJvb2wgbV9pc1JldmFsaWRhdGluZzsKICAg
ICBQYXJzZWRTdHlsZVNoZWV0KiBtX3BhcnNlZFN0eWxlU2hlZXQ7CisgICAgSW5zcGVjdG9yU3R5
bGVNYXAgbV9pbnNwZWN0b3JTdHlsZXM7CisKKyAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yU3R5
bGU7CiB9OwogCiBjbGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUgOiBwdWJs
aWMgSW5zcGVjdG9yU3R5bGVTaGVldCB7CkBAIC0xMTEsMTQgKzIwOCwxOSBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKGNvbnN0IFN0cmlu
ZyYgaWQsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgb3JpZ2luKTsKLSAgICB2aXJ0
dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQoY29uc3QgU3RyaW5nJiBpZCkgY29u
c3QgeyBBU1NFUlQoaWQgPT0gIjAiKTsgVU5VU0VEX1BBUkFNKGlkKTsgcmV0dXJuIGlubGluZVN0
eWxlKCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2V0U3R5bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5
bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ29tcG91bmRJZCYgaWQpIGNvbnN0IHsgQVNT
RVJUX1VOVVNFRChpZCwgaWQucGFydCgxKSA9PSAiMCIpOyByZXR1cm4gaW5saW5lU3R5bGUoKTsg
fQogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0
YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyBBU1NFUlQoc3R5bGUgPT0g
aW5saW5lU3R5bGUoKSk7IFVOVVNFRF9QQVJBTShzdHlsZSk7IHJldHVybiBtX3J1bGVTb3VyY2VE
YXRhOyB9CisgICAgdmlydHVhbCBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VE
YXRhRm9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdCB7IEFTU0VSVF9VTlVTRUQo
c3R5bGUsIHN0eWxlID09IGlubGluZVN0eWxlKCkpOyByZXR1cm4gbV9ydWxlU291cmNlRGF0YTsg
fQogICAgIHZpcnR1YWwgdW5zaWduZWQgcnVsZUluZGV4QnlTdHlsZShDU1NTdHlsZURlY2xhcmF0
aW9uKikgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVQYXJzZWRE
YXRhUmVhZHkoKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3Bl
Y3RvclN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ29tcG91bmRJZCYpOworICAgIHZpcnR1YWwg
dm9pZCByZW1lbWJlckluc3BlY3RvclN0eWxlKFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4pIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBmb3JnZXRJbnNwZWN0b3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9u
KikgeyB9CisKKyAgICAvLyBBbHNvIGFjY2Vzc2VkIGJ5IGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JT
dHlsZS4KKyAgICB2aXJ0dWFsIGJvb2wgc2V0U3R5bGVUZXh0KENTU1N0eWxlRGVjbGFyYXRpb24q
LCBjb25zdCBTdHJpbmcmKTsKIAogcHJpdmF0ZToKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBp
bmxpbmVTdHlsZSgpIGNvbnN0OwpAQCAtMTI2LDYgKzIyOCw3IEBAIHByaXZhdGU6CiAKICAgICBF
bGVtZW50KiBtX2VsZW1lbnQ7CiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBtX3J1bGVT
b3VyY2VEYXRhOworICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gbV9pbnNwZWN0b3JTdHlsZTsK
IH07CiAKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71560</attachid>
            <date>2010-10-22 06:31:03 -0700</date>
            <delta_ts>2010-10-22 07:20:36 -0700</delta_ts>
            <desc>[PATCH] The right fix for the comments</desc>
            <filename>toggle.patch</filename>
            <type>text/plain</type>
            <size>61959</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IDk0ZTM1YTNiMmIxZjE2MDk5ZjRlNGU0OTNhMmVhMTRiY2NlYTIwNWIKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBGcmkgT2N0IDE1
IDE1OjE3OjU4IDIwMTAgKzA0MDAKCiAgICBQcmVwYXJlIHRvZ2dsZWQgcHJvcGVydGllcyBmb3Ig
Y29tbWl0CgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA1MjljNzdiLi4xY2YyMWQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDEwLTEwLTIyICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogSW1wbGVtZW50IHBy
b3BlcnR5IHRvZ2dsaW5nIGluIEluc3BlY3RvckNTU0FnZW50CisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgaW1wbGVtZW50cyBlbmFibGVtZW50L2Rpc2FibGVtZW50IGFuZCBzZXR0aW5nIG9mIHN0eWxl
IHByb3BlcnRpZXMuCisgICAgICAgIERpc2FibGVkIHByb3BlcnRpZXMgYXJlIHBlcnNpc3RlZCBp
biB0aGUgKHRvcC1sZXZlbCkgc2NvcGUgb2YgSW5zcGVjdG9yU3R5bGVTaGVldC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MzM5CisKKyAgICAgICAg
RHJpdmUtYnk6IGZpeGVzIGZvciB0aGUgV2ViIEluc3BlY3RvciBQcm90b2NvbCBmb3JtYXQuCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlMik6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0SW5oZXJpdGVkU3R5bGVzRm9yTm9k
ZTIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3BlcnR5VGV4
dDIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5
Mik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9y
Mik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JB
dHRyaWJ1dGVTdHlsZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0eVRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3R5bGU6OnRvZ2dsZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclN0eWxlOjpkaXNhYmxlZEluZGV4QnlPcmRpbmFsKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0eWxlOjpzdHlsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3R5bGU6OmRpc2FibGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dHlsZTo6ZW5hYmxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6
OnBvcHVsYXRlQWxsUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHls
ZTo6cG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclN0eWxlOjpzaGlmdERpc2FibGVkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZTo6cmVwbGFjZVByb3BlcnR5SW5TdHlsZVRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OnNob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0eWxlOjpzaG9ydGhhbmRQcmlvcml0eSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZTo6bG9uZ2hhbmRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnNldFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yU3R5bGVTaGVldDo6c2V0UnVsZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0eWxlU2hlZXQ6OmFkZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
U3R5bGVTaGVldDo6cnVsZUZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
U2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRQcm9wZXJ0eVRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6dG9nZ2xlUHJvcGVydHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVGb3JJZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnJlbWVtYmVySW5zcGVjdG9yU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6Zm9yZ2V0SW5zcGVjdG9yU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZU9yU3R5bGVJZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnNldFN0eWxlVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZVNoZWV0VGV4dFdpdGhDaGFu
Z2VkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZUlk
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnJldmFsaWRhdGVTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpvcmlnaW5hbFN0eWxl
U2hlZXRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnJlc291
cmNlU3R5bGVTaGVldFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVl
dEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpzZXRTdHls
ZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlOjppbnNwZWN0b3JTdHlsZUZvcklkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29tcG91bmRJZDo6SW5z
cGVjdG9yQ29tcG91bmRJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb21wb3VuZElk
OjpwYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbXBvdW5kSWQ6OnBhcnRDb3Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb21wb3VuZElkOjppc0VtcHR5KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbXBvdW5kSWQ6OmFwcGVuZFBhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29tcG91bmRJZDo6YXNTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eTo6SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0eWxlOjpJbnNwZWN0b3JTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JTdHlsZTo6Y3NzU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5
bGU6Omhhc0Rpc2FibGVkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dHlsZVNoZWV0OjpzdHlsZUlkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hl
ZXRGb3JJbmxpbmVTdHlsZTo6c3R5bGVGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnJ1bGVTb3VyY2VEYXRhRm9yKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6cmVtZW1iZXJJbnNw
ZWN0b3JTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5s
aW5lU3R5bGU6OmZvcmdldEluc3BlY3RvclN0eWxlKToKKwogMjAxMC0xMC0yMiAgWm9sdGFuIEhl
cmN6ZWcgIDx6aGVyY3plZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpcmsg
U2NodWx6ZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCBlMGZh
Yjg1Li5iZDEzN2ZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBA
IC00OSw3ICs0OSw4IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAotCisvLyBDdXJyZW50bHkgaW1wbGVtZW50ZWQgbW9kZWw6CisvLwog
Ly8gY3NzUHJvcGVydHkgPSB7CiAvLyAgICBuYW1lICAgICAgICAgIDogPHN0cmluZz4sCiAvLyAg
ICB2YWx1ZSAgICAgICAgIDogPHN0cmluZz4sCkBAIC02Miw4NSArNjMsNTcgQEAKIC8vICAgIGVu
ZE9mZnNldCAgICAgOiA8bnVtYmVyPiwgLy8gT3B0aW9uYWwgLSBwcm9wZXJ0eSB0ZXh0IGVuZCBv
ZmZzZXQgaW4gZW5jbG9zaW5nIHN0eWxlIGRlY2xhcmF0aW9uLiBBYnNlbnQgZm9yIGNvbXB1dGVk
IHN0eWxlcyBhbmQgc3VjaC4KIC8vIH0KIC8vCisvLyBuYW1lICsgdmFsdWUgKyBwcmlvcml0eSA6
IHByZXNlbnQgd2hlbiB0aGUgcHJvcGVydHkgaXMgZW5hYmxlZAorLy8gdGV4dCAgICAgICAgICAg
ICAgICAgICAgOiBwcmVzZW50IHdoZW4gdGhlIHByb3BlcnR5IGlzIGRpc2FibGVkCisvLworLy8g
Rm9yIGRpc2FibGVkIHByb3BlcnRpZXMsIHN0YXJ0T2Zmc2V0ID09PSBlbmRPZmZzZXQgPT09IGlu
c2VydGlvbiBwb2ludCBmb3IgdGhlIHByb3BlcnR5LgorLy8KIC8vIHN0YXR1czoKIC8vICJkaXNh
YmxlZCIgPT0gcHJvcGVydHkgZGlzYWJsZWQgYnkgdXNlcgogLy8gImFjdGl2ZSIgPT0gcHJvcGVy
dHkgcGFydGljaXBhdGVzIGluIHRoZSBjb21wdXRlZCBzdHlsZSBjYWxjdWxhdGlvbgogLy8gImlu
YWN0aXZlIiA9PSBwcm9wZXJ0eSBkb2VzIG5vIHBhcnRpY2lwYXRlIGluIHRoZSBjb21wdXRlZCBz
dHlsZSBjYWxjdWxhdGlvbiAoaS5lLiBvdmVycmlkZGVuIGJ5IGEgc3Vic2VxdWVudCBwcm9wZXJ0
eSB3aXRoIHRoZSBzYW1lIG5hbWUpCiAvLyAic3R5bGUiID09IHByb3BlcnR5IGlzIGFjdGl2ZSBh
bmQgb3JpZ2luYXRlcyBmcm9tIHRoZSBXZWJDb3JlIENTU1N0eWxlRGVjbGFyYXRpb24gcmF0aGVy
IHRoYW4gQ1NTIHNvdXJjZSBjb2RlIChlLmcuIGltcGxpY2l0IGxvbmdoYW5kIHByb3BlcnRpZXMp
CiAvLwotLy8KIC8vIGNzc1N0eWxlID0gewotLy8gICAgc3R5bGVJZCAgICAgICAgIDogPG51bWJl
cj4sIC8vIE9wdGlvbmFsCi0vLyAgICBzdHlsZVNoZWV0SWQgICAgOiA8bnVtYmVyPiwgLy8gUGFy
ZW50OiAtMSBmb3IgaW5saW5lIHN0eWxlcyAoPGZvbyBzdHlsZT0iLi4iPikKLS8vICAgIGNzc1By
b3BlcnRpZXMgICA6IFsKKy8vICAgIHN0eWxlSWQgICAgICAgICAgICA6IDxzdHJpbmc+LCAvLyBP
cHRpb25hbAorLy8gICAgY3NzUHJvcGVydGllcyAgICAgIDogWwogLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICNjc3NQcm9wZXJ0eSwKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4K
IC8vICAgICAgICAgICAgICAgICAgICAgICAgICAjY3NzUHJvcGVydHkKLS8vICAgICAgICAgICAg
ICAgICAgICBdLAotLy8gICAgc2hvcnRoYW5kVmFsdWVzIDogeworLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgXSwKKy8vICAgIHNob3J0aGFuZFZhbHVlcyAgICA6IHsKIC8vICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaG9ydGhhbmROYW1lMSA6IHNob3J0aGFuZFZhbHVlMSwKIC8vICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaG9ydGhhbmROYW1lMiA6IHNob3J0aGFuZFZhbHVlMgotLy8g
ICAgICAgICAgICAgICAgICAgICAgfSwKLS8vICAgIGNzc1RleHQgICAgICAgICA6IDxzdHJpbmc+
LCAvLyBkZWNsYXJhdGlvbiB0ZXh0Ci0vLyAgICBwcm9wZXJ0aWVzICAgICAgOiB7IH0gLy8gPz8/
CisvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LAorLy8gICAgY3NzVGV4dCAgICAgICAgICAg
IDogPHN0cmluZz4sIC8vIE9wdGlvbmFsIC0gZGVjbGFyYXRpb24gdGV4dAorLy8gICAgcHJvcGVy
dGllcyAgICAgICAgIDogeyB3aWR0aCwgaGVpZ2h0IH0KIC8vIH0KIC8vCi0vLyAvLyBUT0RPOgot
Ly8gLy8gLSBjb252ZXJ0IGRpc2FibGVkUHJvcGVydGllcyB0byBlbmFibGVkIGZsYWcuCi0vLyAv
LyAtIGNvbnZlcnQgd2lkdGgsIGhlaWdodCB0byBwcm9wZXJ0aWVzCi0vLwogLy8gY3NzUnVsZSA9
IHsKLS8vICAgIHJ1bGVJZCAgICAgICA6IDxudW1iZXI+LAotLy8gICAgc2VsZWN0b3JUZXh0IDog
PHN0cmluZz4KLS8vICAgIHNvdXJjZVVSTCAgICA6IDxzdHJpbmc+Ci0vLyAgICBzb3VyY2VMaW5l
ICAgOiA8c3RyaW5nPgotLy8gICAgc3R5bGVTaGVldElkIDogPG51bWJlcj4gLy8gYWxzbyBmb3Vu
ZCBpbiBzdHlsZQotLy8gICAgb3JpZ2luICAgICAgIDogPHN0cmluZz4gLy8gIiIgfHwgInVzZXIt
YWdlbnQiIHx8ICJ1c2VyIiB8fCAiaW5zcGVjdG9yIgorLy8gICAgcnVsZUlkICAgICAgIDogPHN0
cmluZz4sIC8vIE9wdGlvbmFsCisvLyAgICBzZWxlY3RvclRleHQgOiA8c3RyaW5nPiwKKy8vICAg
IHNvdXJjZVVSTCAgICA6IDxzdHJpbmc+LAorLy8gICAgc291cmNlTGluZSAgIDogPHN0cmluZz4s
CisvLyAgICBvcmlnaW4gICAgICAgOiA8c3RyaW5nPiwgLy8gIiIgfHwgInVzZXItYWdlbnQiIHx8
ICJ1c2VyIiB8fCAiaW5zcGVjdG9yIgogLy8gICAgc3R5bGUgICAgICAgIDogI2Nzc1N0eWxlCiAv
LyB9CiAvLwotLy8gLy8gVE9ETzoKLS8vIC8vIC0gZml4IG9yaWdpbgotLy8gLy8gLSBhZGQgc291
cmNlVVJMCi0vLyAvLyAtIGZpeCBwYXJlbnRTdHlsZVNoZWV0SWQKLS8vCiAvLyBjc3NTdHlsZVNo
ZWV0ID0gewogLy8gICAgc3R5bGVTaGVldElkICAgOiA8bnVtYmVyPgotLy8gICAgaHJlZiAgICAg
ICAgICAgOiA8c3RyaW5nPgorLy8gICAgc291cmNlVVJMICAgICAgOiA8c3RyaW5nPgogLy8gICAg
dGl0bGUgICAgICAgICAgOiA8c3RyaW5nPgogLy8gICAgZGlzYWJsZWQgICAgICAgOiA8Ym9vbGVh
bj4KLS8vICAgIGRvY3VtZW50Tm9kZUlkIDogPG51bWJlcj4KIC8vICAgIHJ1bGVzICAgICAgICAg
IDogWwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgI2Nzc1J1bGUsCiAvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAuLi4KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICNjc3NSdWxlCiAv
LyAgICAgICAgICAgICAgICAgICAgIF0KKy8vICAgIHRleHQgICAgICAgICAgIDogPHN0cmluZz4g
Ly8gT3B0aW9uYWwgLSB3aGVuZXZlciB0aGUgdGV4dCBpcyBhdmFpbGFibGUgZm9yIGEgdGV4dC1i
YXNlZCBzdHlsZXNoZWV0CiAvLyB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gc3RhdGlj
Ci1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgZnVs
bFN0eWxlSWQsIENTU1N0eWxlU291cmNlRGF0YSogc291cmNlRGF0YSkKLXsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGlmICghZnVsbFN0eWxlSWQuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHQtPnNldFN0cmluZygi
aWQiLCBmdWxsU3R5bGVJZCk7Ci0KLSAgICByZXN1bHQtPnNldFN0cmluZygid2lkdGgiLCBzdHls
ZS0+Z2V0UHJvcGVydHlWYWx1ZSgid2lkdGgiKSk7Ci0gICAgcmVzdWx0LT5zZXRTdHJpbmcoImhl
aWdodCIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSk7Ci0gICAgVmVjdG9yPENT
U1Byb3BlcnR5U291cmNlRGF0YT4qIHByb3BlcnR5RGF0YSA9IDA7Ci0KLSAgICBpZiAoc291cmNl
RGF0YSkgewotICAgICAgICByZXN1bHQtPnNldE51bWJlcigic3RhcnRPZmZzZXQiLCBzb3VyY2VE
YXRhLT5zdHlsZUJvZHlSYW5nZS5zdGFydCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJl
bmRPZmZzZXQiLCBzb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5lbmQpOwotICAgICAgICBwcm9w
ZXJ0eURhdGEgPSAmc291cmNlRGF0YS0+cHJvcGVydHlEYXRhOwotICAgIH0KLSAgICBwb3B1bGF0
ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoc3R5bGUsIHJlc3VsdC5nZXQoKSwgcHJvcGVydHlE
YXRhKTsKLQotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQotCi0vLyBzdGF0aWMKIENT
U1N0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpwYXJlbnRTdHlsZVNoZWV0KFN0eWxlQmFz
ZSogc3R5bGVCYXNlKQogewogICAgIGlmICghc3R5bGVCYXNlKQpAQCAtMTY0LDcgKzEzNyw2IEBA
IENTU1N0eWxlUnVsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzQ1NTU3R5bGVSdWxlKFN0eWxlQmFz
ZSogc3R5bGVCYXNlKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxl
KTsKIH0KIAotCiBJbnNwZWN0b3JDU1NBZ2VudDo6SW5zcGVjdG9yQ1NTQWdlbnQoSW5zcGVjdG9y
RE9NQWdlbnQqIGRvbUFnZW50LCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAgICAgOiBt
X2RvbUFnZW50KGRvbUFnZW50KQogICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKQEAgLTI0Niw3
ICsyMTgsMTAgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5v
ZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmEKICAgICBpZiAoIWRlZmF1bHRWaWV3
KQogICAgICAgICByZXR1cm47CiAKLSAgICAqc3R5bGUgPSBidWlsZE9iamVjdEZvclN0eWxlKGRl
ZmF1bHRWaWV3LT5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsICIiKS5nZXQoKSwgIiIpOworICAg
IFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlID0gZGVmYXVsdFZpZXct
PmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgIiIpOworICAgIFZlY3RvcjxJbnNwZWN0b3JTdHls
ZVByb3BlcnR5PiBwcm9wZXJ0aWVzOworICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVj
dG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKEluc3BlY3RvckNvbXBvdW5kSWQoKSwg
Y29tcHV0ZWRTdHlsZS5nZXQoKSwgMCk7CisgICAgKnN0eWxlID0gaW5zcGVjdG9yU3R5bGUtPmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0SW5o
ZXJpdGVkU3R5bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4q
IHN0eWxlKQpAQCAtMjYzLDcgKzIzOCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldElu
aGVyaXRlZFN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yCiAgICAg
ICAgIGlmIChwYXJlbnRFbGVtZW50LT5zdHlsZSgpICYmIHBhcmVudEVsZW1lbnQtPnN0eWxlKCkt
Pmxlbmd0aCgpKSB7CiAgICAgICAgICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGUqIHN0eWxlU2hlZXQgPSBhc0luc3BlY3RvclN0eWxlU2hlZXQoZWxlbWVudCk7CiAgICAgICAg
ICAgICBpZiAoc3R5bGVTaGVldCkKLSAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0T2Jq
ZWN0KCJpbmxpbmVTdHlsZSIsIHN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGVT
aGVldC0+c3R5bGVGb3JJZCgiMCIpKSk7CisgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNl
dE9iamVjdCgiaW5saW5lU3R5bGUiLCBzdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKHN0
eWxlU2hlZXQtPnN0eWxlRm9ySWQoSW5zcGVjdG9yQ29tcG91bmRJZChzdHlsZVNoZWV0LT5pZCgp
KS5hcHBlbmRQYXJ0KCIwIikpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBDU1NTdHlsZVNlbGVj
dG9yKiBwYXJlbnRTZWxlY3RvciA9IHBhcmVudEVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5
bGVTZWxlY3RvcigpOwpAQCAtMzA4LDQzICsyODMsNDggQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6c2V0U3R5bGVTaGVldFRleHQyKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBT
dHIKICAgICBpbnNwZWN0b3JTdHlsZVNoZWV0LT5zZXRUZXh0KHRleHQpOwogfQogCi12b2lkIElu
c3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVRleHQyKGNvbnN0IFN0cmluZyYgZnVsbFN0eWxlSWQs
IGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQordm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UHJvcGVydHlUZXh0Mihjb25zdCBTdHJpbmcmIGZ1bGxT
dHlsZUlkLCBsb25nIHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBvdmVy
d3JpdGUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKIHsKLSAgICBWZWN0b3I8U3Ry
aW5nPiBpZFBhcnRzOwotICAgIGZ1bGxTdHlsZUlkLnNwbGl0KCc6JywgaWRQYXJ0cyk7Ci0gICAg
QVNTRVJUKGlkUGFydHMuc2l6ZSgpID09IDIpOworICAgIEluc3BlY3RvckNvbXBvdW5kSWQgY29t
cG91bmRJZChmdWxsU3R5bGVJZCk7CisgICAgQVNTRVJUKGNvbXBvdW5kSWQucGFydENvdW50KCkg
PT0gMik7CiAKLSAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0g
c3R5bGVTaGVldEZvcklkKGlkUGFydHMuYXQoMCkpOworICAgIEluc3BlY3RvclN0eWxlU2hlZXQq
IGluc3BlY3RvclN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoY29tcG91bmRJZC5wYXJ0KDAp
KTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmICghaW5zcGVjdG9yU3R5bGVTaGVldC0+c2V0U3R5bGVUZXh0KGlkUGFydHMuYXQoMSksIHRl
eHQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAqcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVl
dC0+YnVpbGRPYmplY3RGb3JTdHlsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5zdHlsZUZvcklkKGlk
UGFydHMuYXQoMSkpKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5z
ZXRQcm9wZXJ0eVRleHQoY29tcG91bmRJZCwgcHJvcGVydHlJbmRleCwgdGV4dCwgb3ZlcndyaXRl
KTsKKyAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgKnJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hl
ZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJZChj
b21wb3VuZElkKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5
Mihjb25zdCBTdHJpbmcmLCBsb25nLCBib29sKQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9n
Z2xlUHJvcGVydHkyKGNvbnN0IFN0cmluZyYgZnVsbFN0eWxlSWQsIGxvbmcgcHJvcGVydHlJbmRl
eCwgYm9vbCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCiB7Ci0gICAg
Ly8gRklYTUUoYXBhdmxvdik6IGltcGxlbWVudAorICAgIEluc3BlY3RvckNvbXBvdW5kSWQgY29t
cG91bmRJZChmdWxsU3R5bGVJZCk7CisgICAgQVNTRVJUKGNvbXBvdW5kSWQucGFydENvdW50KCkg
PT0gMik7CisKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0g
c3R5bGVTaGVldEZvcklkKGNvbXBvdW5kSWQucGFydCgwKSk7CisgICAgaWYgKCFpbnNwZWN0b3JT
dHlsZVNoZWV0KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIHN1Y2Nlc3MgPSBpbnNwZWN0
b3JTdHlsZVNoZWV0LT50b2dnbGVQcm9wZXJ0eShjb21wb3VuZElkLCBwcm9wZXJ0eUluZGV4LCBk
aXNhYmxlKTsKKyAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgKnJlc3VsdCA9IGluc3BlY3RvclN0
eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVG
b3JJZChjb21wb3VuZElkKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVT
ZWxlY3RvcjIoY29uc3QgU3RyaW5nJiBmdWxsUnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9y
LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4g
aWRQYXJ0czsKLSAgICBmdWxsUnVsZUlkLnNwbGl0KCc6JywgaWRQYXJ0cyk7Ci0gICAgQVNTRVJU
KGlkUGFydHMuc2l6ZSgpID09IDIpOworICAgIEluc3BlY3RvckNvbXBvdW5kSWQgY29tcG91bmRJ
ZChmdWxsUnVsZUlkKTsKKyAgICBBU1NFUlQoY29tcG91bmRJZC5wYXJ0Q291bnQoKSA9PSAyKTsK
IAotICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBzdHlsZVNo
ZWV0Rm9ySWQoaWRQYXJ0cy5hdCgwKSk7CisgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVj
dG9yU3R5bGVTaGVldCA9IHN0eWxlU2hlZXRGb3JJZChjb21wb3VuZElkLnBhcnQoMCkpOwogICAg
IGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3Qg
U3RyaW5nJiBydWxlSWQgPSBpZFBhcnRzLmF0KDEpOwotICAgIGJvb2wgc3VjY2VzcyA9IGluc3Bl
Y3RvclN0eWxlU2hlZXQtPnNldFJ1bGVTZWxlY3RvcihydWxlSWQsIHNlbGVjdG9yKTsKKyAgICBi
b29sIHN1Y2Nlc3MgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5zZXRSdWxlU2VsZWN0b3IoY29tcG91
bmRJZCwgc2VsZWN0b3IpOwogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgKnJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShpbnNw
ZWN0b3JTdHlsZVNoZWV0LT5ydWxlRm9ySWQocnVsZUlkKSk7CisgICAgKnJlc3VsdCA9IGluc3Bl
Y3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5y
dWxlRm9ySWQoY29tcG91bmRJZCkpOwogfQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjphZGRS
dWxlMihjb25zdCBsb25nIGNvbnRleHROb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKQEAgLTM3OSwxMzAgKzM1OSw2IEBAIEVsZW1l
bnQqIEluc3BlY3RvckNTU0FnZW50OjppbmxpbmVTdHlsZUVsZW1lbnQoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKIH0K
IAotLy8gc3RhdGljCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojpwb3B1bGF0ZU9iamVjdFdpdGhT
dHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEluc3BlY3Rvck9iamVj
dCogcmVzdWx0LCBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiogcHJvcGVydHlEYXRhKQot
ewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydGllcyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzaG9ydGhhbmRWYWx1ZXMg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiA+IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eTsK
LSAgICBIYXNoU2V0PFN0cmluZz4gZm91bmRTaG9ydGhhbmRzOwotICAgIEhhc2hTZXQ8U3RyaW5n
PiBzb3VyY2VQcm9wZXJ0eU5hbWVzOwotICAgIGlmIChwcm9wZXJ0eURhdGEpIHsKLSAgICAgICAg
Zm9yIChWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBw
cm9wZXJ0eURhdGEtPmJlZ2luKCk7IGl0ICE9IHByb3BlcnR5RGF0YS0+ZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5U291cmNlRGF0YSYgcHJvcGVydHlFbnRyeSA9
ICppdDsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHByb3BlcnR5ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIHByb3BlcnRpZXMtPnB1c2hPYmpl
Y3QocHJvcGVydHkpOwotICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gcHJvcGVydHlF
bnRyeS5uYW1lOwotICAgICAgICAgICAgc291cmNlUHJvcGVydHlOYW1lcy5hZGQobmFtZSk7Ci0g
ICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7Ci0gICAgICAgICAg
ICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHByb3BlcnR5RW50cnkudmFsdWUpOwotICAg
ICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygicHJpb3JpdHkiLCBwcm9wZXJ0eUVudHJ5Lmlt
cG9ydGFudCA/ICJpbXBvcnRhbnQiIDogIiIpOwotICAgICAgICAgICAgcHJvcGVydHktPnNldFN0
cmluZygic3RhdHVzIiwgImFjdGl2ZSIpOwotICAgICAgICAgICAgcHJvcGVydHktPnNldEJvb2xl
YW4oInBhcnNlZE9rIiwgcHJvcGVydHlFbnRyeS5wYXJzZWRPayk7Ci0gICAgICAgICAgICBwcm9w
ZXJ0eS0+c2V0TnVtYmVyKCJzdGFydE9mZnNldCIsIHByb3BlcnR5RW50cnkucmFuZ2Uuc3RhcnQp
OwotICAgICAgICAgICAgcHJvcGVydHktPnNldE51bWJlcigiZW5kT2Zmc2V0IiwgcHJvcGVydHlF
bnRyeS5yYW5nZS5lbmQpOwotICAgICAgICAgICAgaWYgKHByb3BlcnR5RW50cnkucGFyc2VkT2sp
IHsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCBmYWxz
ZSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHNob3J0aGFuZCA9IHN0eWxlLT5nZXRQcm9wZXJ0
eVNob3J0aGFuZChuYW1lKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJz
aG9ydGhhbmROYW1lIiwgc2hvcnRoYW5kKTsKLSAgICAgICAgICAgICAgICBpZiAoIXNob3J0aGFu
ZC5pc0VtcHR5KCkgJiYgIWZvdW5kU2hvcnRoYW5kcy5jb250YWlucyhzaG9ydGhhbmQpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvdW5kU2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKLSAgICAg
ICAgICAgICAgICAgICAgc2hvcnRoYW5kVmFsdWVzLT5zZXRTdHJpbmcoc2hvcnRoYW5kLCBzaG9y
dGhhbmRWYWx1ZShzdHlsZSwgc2hvcnRoYW5kKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1w
bGljaXQiLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygic2hv
cnRoYW5kTmFtZSIsICIiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEhhc2hNYXA8U3Ry
aW5nLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiA+OjppdGVyYXRvciBhY3RpdmVJdCA9IHByb3Bl
cnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5maW5kKG5hbWUpOwotICAgICAgICAgICAg
aWYgKGFjdGl2ZUl0ICE9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5lbmQo
KSkgewotICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0cmluZygic3RhdHVz
IiwgImluYWN0aXZlIik7Ci0gICAgICAgICAgICAgICAgYWN0aXZlSXQtPnNlY29uZC0+c2V0U3Ry
aW5nKCJzaG9ydGhhbmROYW1lIiwgIiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJv
cGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChuYW1lLCBwcm9wZXJ0eSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMCwgc2l6ZSA9IHN0eWxlLT5sZW5n
dGgoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBTdHJpbmcgbmFtZSA9IHN0eWxlLT5pdGVt
KGkpOwotICAgICAgICBpZiAoc291cmNlUHJvcGVydHlOYW1lcy5jb250YWlucyhuYW1lKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHNvdXJjZVByb3BlcnR5TmFtZXMuYWRkKG5h
bWUpOwotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0eSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHByb3BlcnRpZXMtPnB1c2hPYmplY3QocHJvcGVy
dHkpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7Ci0gICAgICAg
IHByb3BlcnR5LT5zZXRTdHJpbmcoInZhbHVlIiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUobmFt
ZSkpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJwcmlvcml0eSIsIHN0eWxlLT5nZXRQ
cm9wZXJ0eVByaW9yaXR5KCJuYW1lIikpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigi
aW1wbGljaXQiLCBzdHlsZS0+aXNQcm9wZXJ0eUltcGxpY2l0KG5hbWUpKTsKLSAgICAgICAgcHJv
cGVydHktPnNldEJvb2xlYW4oInBhcnNlZE9rIiwgdHJ1ZSk7Ci0gICAgICAgIHByb3BlcnR5LT5z
ZXRTdHJpbmcoInN0YXR1cyIsICJzdHlsZSIpOwotICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0g
c3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0
U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgc2hvcnRoYW5kKTsKLSAgICAgICAgaWYgKCFzaG9ydGhh
bmQuaXNFbXB0eSgpICYmICFmb3VuZFNob3J0aGFuZHMuY29udGFpbnMoc2hvcnRoYW5kKSkgewot
ICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzLmFkZChzaG9ydGhhbmQpOwotICAgICAgICAgICAg
c2hvcnRoYW5kVmFsdWVzLT5zZXRTdHJpbmcoc2hvcnRoYW5kLCBzaG9ydGhhbmRWYWx1ZShzdHls
ZSwgc2hvcnRoYW5kKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXN1bHQtPnNldEFycmF5
KCJwcm9wZXJ0aWVzIiwgcHJvcGVydGllcyk7Ci0gICAgcmVzdWx0LT5zZXRPYmplY3QoInNob3J0
aGFuZFZhbHVlcyIsIHNob3J0aGFuZFZhbHVlcyk7Ci19Ci0KLS8vIHN0YXRpYwotU3RyaW5nIElu
c3BlY3RvckNTU0FnZW50OjpzaG9ydGhhbmRWYWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkKLXsKLSAgICBTdHJpbmcgdmFsdWUg
PSBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShzaG9ydGhhbmRQcm9wZXJ0eSk7Ci0gICAgaWYgKHZh
bHVlLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUt
Pmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIFN0cmluZyBpbmRpdmlkdWFsUHJvcGVydHkg
PSBzdHlsZS0+aXRlbShpKTsKLSAgICAgICAgICAgIGlmIChzdHlsZS0+Z2V0UHJvcGVydHlTaG9y
dGhhbmQoaW5kaXZpZHVhbFByb3BlcnR5KSAhPSBzaG9ydGhhbmRQcm9wZXJ0eSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChzdHlsZS0+aXNQcm9wZXJ0eUltcGxp
Y2l0KGluZGl2aWR1YWxQcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5VmFsdWUo
aW5kaXZpZHVhbFByb3BlcnR5KTsKLSAgICAgICAgICAgIGlmIChpbmRpdmlkdWFsVmFsdWUgPT0g
ImluaXRpYWwiKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHZh
bHVlLmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIHZhbHVlLmFwcGVuZCgiICIpOwotICAgICAg
ICAgICAgdmFsdWUuYXBwZW5kKGluZGl2aWR1YWxWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIHZhbHVlOwotfQotCi0vLyBzdGF0aWMKLVN0cmluZyBJbnNwZWN0b3JDU1NBZ2Vu
dDo6c2hvcnRoYW5kUHJpb3JpdHkoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0
cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpCi17Ci0gICAgU3RyaW5nIHByaW9yaXR5ID0gc3R5bGUt
PmdldFByb3BlcnR5UHJpb3JpdHkoc2hvcnRoYW5kUHJvcGVydHkpOwotICAgIGlmIChwcmlvcml0
eS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlLT5s
ZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFByb3BlcnR5ID0g
c3R5bGUtPml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAoc3R5bGUtPmdldFByb3BlcnR5U2hvcnRo
YW5kKGluZGl2aWR1YWxQcm9wZXJ0eSkgIT0gc2hvcnRoYW5kUHJvcGVydHkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBwcmlvcml0eSA9IHN0eWxlLT5nZXRQcm9wZXJ0
eVByaW9yaXR5KGluZGl2aWR1YWxQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gcHJpb3JpdHk7Ci19Ci0KLQotLy8gc3RhdGljCi1WZWN0
b3I8U3RyaW5nPiBJbnNwZWN0b3JDU1NBZ2VudDo6bG9uZ2hhbmRQcm9wZXJ0aWVzKENTU1N0eWxl
RGVjbGFyYXRpb24qIHN0eWxlLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KQotewot
ICAgIFZlY3RvcjxTdHJpbmc+IHByb3BlcnRpZXM7Ci0gICAgSGFzaFNldDxTdHJpbmc+IGZvdW5k
UHJvcGVydGllczsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmxlbmd0aCgp
OyArK2kpIHsKLSAgICAgICAgU3RyaW5nIGluZGl2aWR1YWxQcm9wZXJ0eSA9IHN0eWxlLT5pdGVt
KGkpOwotICAgICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzLmNvbnRhaW5zKGluZGl2aWR1YWxQcm9w
ZXJ0eSkgfHwgc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1YWxQcm9wZXJ0eSkg
IT0gc2hvcnRoYW5kUHJvcGVydHkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBm
b3VuZFByb3BlcnRpZXMuYWRkKGluZGl2aWR1YWxQcm9wZXJ0eSk7Ci0gICAgICAgIHByb3BlcnRp
ZXMuYXBwZW5kKGluZGl2aWR1YWxQcm9wZXJ0eSk7Ci0gICAgfQotICAgIHJldHVybiBwcm9wZXJ0
aWVzOwotfQotCiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUqIEluc3BlY3RvckNT
U0FnZW50Ojphc0luc3BlY3RvclN0eWxlU2hlZXQoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBO
b2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0OjppdGVyYXRvciBpdCA9IG1fbm9kZVRvSW5zcGVjdG9y
U3R5bGVTaGVldC5maW5kKGVsZW1lbnQpOwpAQCAtNjIyLDcgKzQ3OCw4IEBAIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JBdHRyaWJ1
dGVTdHlsZXMoRWxlCiAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlcy0+
YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZS0+c3R5bGUoKSkgewogICAg
ICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGUtPmxvY2FsTmFtZSgpOwot
ICAgICAgICAgICAgc3R5bGVBdHRyaWJ1dGVzLT5zZXRPYmplY3QoYXR0cmlidXRlTmFtZS51dGY4
KCkuZGF0YSgpLCBidWlsZE9iamVjdEZvclN0eWxlKGF0dHJpYnV0ZS0+c3R5bGUoKSwgIiIpKTsK
KyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNw
ZWN0b3JTdHlsZTo6Y3JlYXRlKEluc3BlY3RvckNvbXBvdW5kSWQoKSwgYXR0cmlidXRlLT5zdHls
ZSgpLCAwKTsKKyAgICAgICAgICAgIHN0eWxlQXR0cmlidXRlcy0+c2V0T2JqZWN0KGF0dHJpYnV0
ZU5hbWUudXRmOCgpLmRhdGEoKSwgaW5zcGVjdG9yU3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUo
KSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5o
CmluZGV4IGViNjAxM2IuLjM0MWQwOWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuaApAQCAtNTYsNyArNTYsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSW5zcGVjdG9yQ1NTQWdlbnQoZG9tQWdlbnQsIGZyb250ZW5kKSk7CiAgICAgfQogCi0gICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclN0eWxlKENT
U1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIGZ1bGxTdHlsZUlkLCBDU1NTdHlsZVNv
dXJjZURhdGEqID0gMCk7CiAgICAgc3RhdGljIENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hl
ZXQoU3R5bGVCYXNlKik7CiAgICAgc3RhdGljIENTU1N0eWxlUnVsZSogYXNDU1NTdHlsZVJ1bGUo
U3R5bGVCYXNlKik7CiAKQEAgLTczLDggKzcyLDggQEAgcHVibGljOgogICAgIHZvaWQgZ2V0QWxs
U3R5bGVzMihSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBzdHlsZXMpOwogICAgIHZvaWQgZ2V0U3R5
bGVTaGVldDIoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4qIHJlc3VsdCk7CiAgICAgdm9pZCBzZXRTdHlsZVNoZWV0VGV4dDIoY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7Ci0gICAgdm9pZCBzZXRTdHlsZVRleHQy
KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiByZXN1bHQpOwotICAgIHZvaWQgdG9nZ2xlUHJvcGVydHkyKGNvbnN0IFN0cmlu
ZyYgc3R5bGVJZCwgbG9uZyBwcm9wZXJ0eU9yZGluYWwsIGJvb2wgZGlzYWJsZWQpOworICAgIHZv
aWQgc2V0UHJvcGVydHlUZXh0Mihjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGxvbmcgcHJvcGVydHlJ
bmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiogcmVzdWx0KTsKKyAgICB2b2lkIHRvZ2dsZVByb3BlcnR5Mihjb25zdCBTdHJpbmcm
IHN0eWxlSWQsIGxvbmcgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiByZXN1bHQpOwogICAgIHZvaWQgc2V0UnVsZVNlbGVjdG9yMihjb25zdCBTdHJp
bmcmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiogcmVzdWx0KTsKICAgICB2b2lkIGFkZFJ1bGUyKGNvbnN0IGxvbmcgY29udGV4dE5vZGVJZCwg
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsK
ICAgICB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5
PiogcmVzdWx0KTsKQEAgLTgyLDIxICs4MSwxNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+IElkVG9J
bnNwZWN0b3JTdHlsZVNoZWV0OwogICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVNoZWV0Kiwg
UmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+ID4gQ1NTU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5
bGVTaGVldDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8Tm9kZSosIFJlZlB0cjxJbnNwZWN0b3JTdHls
ZVNoZWV0Rm9ySW5saW5lU3R5bGU+ID4gTm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldDsgLy8gZm9y
IGJvZ3VzICJzdHlsZXNoZWV0cyIgd2l0aCBpbmxpbmUgbm9kZSBzdHlsZXMKKyAgICB0eXBlZGVm
IEhhc2hNYXA8Tm9kZSosIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+
ID4gTm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldDsgLy8gYm9ndXMgInN0eWxlc2hlZXRzIiB3aXRo
IGVsZW1lbnRzJyBpbmxpbmUgc3R5bGVzCiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxEb2N1
bWVudD4sIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+IERvY3VtZW50VG9WaWFJbnNwZWN0
b3JTdHlsZVNoZWV0OyAvLyAidmlhIGluc3BlY3RvciIgc3R5bGVzaGVldHMKIAogICAgIHN0YXRp
YyBFbGVtZW50KiBpbmxpbmVTdHlsZUVsZW1lbnQoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOwotICAg
IHN0YXRpYyB2b2lkIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhDU1NTdHlsZURl
Y2xhcmF0aW9uKiwgSW5zcGVjdG9yT2JqZWN0KiByZXN1bHQsIFZlY3RvcjxDU1NQcm9wZXJ0eVNv
dXJjZURhdGE+KiBwcm9wZXJ0eURhdGEpOwotICAgIHN0YXRpYyBTdHJpbmcgc2hvcnRoYW5kVmFs
dWUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkp
OwotICAgIHN0YXRpYyBTdHJpbmcgc2hvcnRoYW5kUHJpb3JpdHkoQ1NTU3R5bGVEZWNsYXJhdGlv
biosIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpOwotICAgIHN0YXRpYyBWZWN0b3I8
U3RyaW5nPiBsb25naGFuZFByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0
cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlKiBhc0luc3BlY3RvclN0eWxlU2hlZXQoRWxlbWVudCogZWxlbWVudCk7CiAgICAg
RWxlbWVudCogZWxlbWVudEZvcklkKGxvbmcgbm9kZUlkKTsKIAogICAgIEluc3BlY3RvclN0eWxl
U2hlZXQqIGJpbmRTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqKTsKICAgICBJbnNwZWN0b3JTdHls
ZVNoZWV0KiB2aWFJbnNwZWN0b3JTdHlsZVNoZWV0KERvY3VtZW50KiwgYm9vbCBjcmVhdGVJZkFi
c2VudCk7Ci0gICAgSW5zcGVjdG9yU3R5bGVTaGVldCogc3R5bGVTaGVldEZvcklkKGNvbnN0IFN0
cmluZyYgc3R5bGVTaGVldElkKTsKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBzdHlsZVNoZWV0
Rm9ySWQoY29uc3QgU3RyaW5nJik7CiAgICAgU3RyaW5nIGRldGVjdE9yaWdpbihDU1NTdHlsZVNo
ZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpOwogCiAgICAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvclJ1bGVMaXN0KENTU1J1bGVMaXN0
KiBydWxlTGlzdCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmlu
ZGV4IDExY2Q2NDkuLjcwODJhM2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuY3BwCkBAIC05OCw2ICs5OCwzNjkgQEAgUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3Vy
Y2VEYXRhPiBQYXJzZWRTdHlsZVNoZWV0OjpydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkIGkKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVj
dG9yU3R5bGU6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdAoreworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYg
KCFtX3N0eWxlSWQuaXNFbXB0eSgpKQorICAgICAgICByZXN1bHQtPnNldFN0cmluZygic3R5bGVJ
ZCIsIG1fc3R5bGVJZC5hc1N0cmluZygpKTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHByb3BlcnRpZXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3Bl
cnRpZXNPYmplY3QtPnNldFN0cmluZygid2lkdGgiLCBtX3N0eWxlLT5nZXRQcm9wZXJ0eVZhbHVl
KCJ3aWR0aCIpKTsKKyAgICBwcm9wZXJ0aWVzT2JqZWN0LT5zZXRTdHJpbmcoImhlaWdodCIsIG1f
c3R5bGUtPmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpKTsKKworICAgIFJlZlB0cjxDU1NSdWxl
U291cmNlRGF0YT4gc291cmNlRGF0YSA9IG1fcGFyZW50U3R5bGVTaGVldCA/IG1fcGFyZW50U3R5
bGVTaGVldC0+cnVsZVNvdXJjZURhdGFGb3IobV9zdHlsZSkgOiAwOworICAgIGlmIChzb3VyY2VE
YXRhKSB7CisgICAgICAgIHByb3BlcnRpZXNPYmplY3QtPnNldE51bWJlcigic3RhcnRPZmZzZXQi
LCBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0KTsKKyAg
ICAgICAgcHJvcGVydGllc09iamVjdC0+c2V0TnVtYmVyKCJlbmRPZmZzZXQiLCBzb3VyY2VEYXRh
LT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCk7CisgICAgfQorICAgIHJlc3Vs
dC0+c2V0T2JqZWN0KCJwcm9wZXJ0aWVzIiwgcHJvcGVydGllc09iamVjdCk7CisKKyAgICBwb3B1
bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMocmVzdWx0LmdldCgpKTsKKworICAgIHJldHVy
biByZXN1bHQucmVsZWFzZSgpOworfQorCitib29sIEluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0
eVRleHQodW5zaWduZWQgaW5kZXgsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlUZXh0LCBib29sIG92
ZXJ3cml0ZSkKK3sKKyAgICBBU1NFUlQobV9wYXJlbnRTdHlsZVNoZWV0KTsKKyAgICBpZiAoIW1f
cGFyZW50U3R5bGVTaGVldC0+ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiBhbGxQcm9wZXJ0
aWVzOworICAgIHBvcHVsYXRlQWxsUHJvcGVydGllcygmYWxsUHJvcGVydGllcyk7CisKKyAgICB1
bnNpZ25lZCBwcm9wZXJ0eVN0YXJ0ID0gMDsgLy8gTmVlZCB0byBpbml0aWFsaXplIHRvIG1ha2Ug
dGhlIGNvbXBpbGVyIGhhcHB5LgorICAgIGxvbmcgcHJvcGVydHlMZW5ndGhEZWx0YTsKKworICAg
IGlmIChvdmVyd3JpdGUpIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgYWxsUHJvcGVydGllcy5z
aXplKCkpOworICAgICAgICBJbnNwZWN0b3JTdHlsZVByb3BlcnR5JiBwcm9wZXJ0eSA9IGFsbFBy
b3BlcnRpZXMuYXQoaW5kZXgpOworICAgICAgICBwcm9wZXJ0eVN0YXJ0ID0gcHJvcGVydHkuc291
cmNlRGF0YS5yYW5nZS5zdGFydDsKKyAgICAgICAgdW5zaWduZWQgcHJvcGVydHlFbmQgPSBwcm9w
ZXJ0eS5zb3VyY2VEYXRhLnJhbmdlLmVuZDsKKyAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0g
cHJvcGVydHlFbmQgLSBwcm9wZXJ0eVN0YXJ0OworICAgICAgICB1bnNpZ25lZCBuZXdMZW5ndGgg
PSBwcm9wZXJ0eVRleHQubGVuZ3RoKCk7CisgICAgICAgIHByb3BlcnR5TGVuZ3RoRGVsdGEgPSBu
ZXdMZW5ndGggLSBvbGRMZW5ndGg7CisKKyAgICAgICAgaWYgKCFwcm9wZXJ0eS5kaXNhYmxlZCkg
eworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gcmVwbGFjZVByb3BlcnR5SW5TdHlsZVRleHQo
cHJvcGVydHksIHByb3BlcnR5VGV4dCk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
cHJvcGVydHkucmF3VGV4dCA9IHByb3BlcnR5VGV4dDsKKyAgICAgICAgICAgIGlmICghcHJvcGVy
dHlUZXh0Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gZW5hYmxl
UHJvcGVydHkoaW5kZXgsIGFsbFByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIHJldHVybiBz
dWNjZXNzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gSW5zZXJ0IGF0IGluZGV4LgorICAgICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNv
dXJjZURhdGEgPSBtX3BhcmVudFN0eWxlU2hlZXQtPnJ1bGVTb3VyY2VEYXRhRm9yKG1fc3R5bGUp
OworICAgICAgICBpZiAoIXNvdXJjZURhdGEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIFN0cmluZyB0ZXh0OworICAgICAgICBib29sIHN1Y2Nlc3MgPSBzdHlsZVRleHQoJnRl
eHQpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHByb3BlcnR5TGVuZ3RoRGVsdGEgPSBwcm9wZXJ0eVRleHQubGVuZ3RoKCk7CisKKyAg
ICAgICAgYm9vbCBpbnNlcnRMYXN0ID0gdHJ1ZTsKKyAgICAgICAgaWYgKGluZGV4IDwgYWxsUHJv
cGVydGllcy5zaXplKCkpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclN0eWxlUHJvcGVydHkmIHBy
b3BlcnR5ID0gYWxsUHJvcGVydGllcy5hdChpbmRleCk7CisgICAgICAgICAgICBpZiAocHJvcGVy
dHkuaGFzU291cmNlKSB7CisgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFydCA9IHByb3BlcnR5
LnNvdXJjZURhdGEucmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICAgICAgLy8gSWYgaW5zZXJ0aW5n
IGJlZm9yZSBhIGRpc2FibGVkIHByb3BlcnR5LCBpdCBzaG91bGQgYmUgc2hpZnRlZCwgdG9vLgor
ICAgICAgICAgICAgICAgIGluc2VydExhc3QgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAoaW5zZXJ0TGFzdCkKKyAgICAgICAgICAgIHByb3BlcnR5U3RhcnQg
PSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZDsKKworICAg
ICAgICB0ZXh0Lmluc2VydChwcm9wZXJ0eVRleHQsIHByb3BlcnR5U3RhcnQpOworICAgICAgICBt
X3BhcmVudFN0eWxlU2hlZXQtPnNldFN0eWxlVGV4dChtX3N0eWxlLCB0ZXh0KTsKKyAgICB9CisK
KyAgICAvLyBSZWNvbXB1dGUgc3Vic2VxdWVudCBkaXNhYmxlZCBwcm9wZXJ0eSByYW5nZXMuCisg
ICAgc2hpZnREaXNhYmxlZFByb3BlcnRpZXMoZGlzYWJsZWRJbmRleEJ5T3JkaW5hbChpbmRleCwg
dHJ1ZSwgYWxsUHJvcGVydGllcyksIHByb3BlcnR5TGVuZ3RoRGVsdGEpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGU6OnRvZ2dsZVByb3BlcnR5KHVuc2lnbmVk
IGluZGV4LCBib29sIGRpc2FibGUpCit7CisgICAgQVNTRVJUKG1fcGFyZW50U3R5bGVTaGVldCk7
CisgICAgaWYgKCFtX3BhcmVudFN0eWxlU2hlZXQtPmVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIENhbiB0b2dnbGUgb25seSBzb3VyY2UtYmFzZWQgcHJv
cGVydGllcy4KKyAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSBtX3Bh
cmVudFN0eWxlU2hlZXQtPnJ1bGVTb3VyY2VEYXRhRm9yKG1fc3R5bGUpOworICAgIGlmICghc291
cmNlRGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyBzb3VyY2UgZGF0YSBmb3IgdGhl
IHN0eWxlLgorCisgICAgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+IGFsbFByb3BlcnRp
ZXM7CisgICAgcG9wdWxhdGVBbGxQcm9wZXJ0aWVzKCZhbGxQcm9wZXJ0aWVzKTsKKyAgICBpZiAo
aW5kZXggPj0gYWxsUHJvcGVydGllcy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
T3V0c2lkZSBvZiBwcm9wZXJ0eSByYW5nZS4KKworICAgIEluc3BlY3RvclN0eWxlUHJvcGVydHkm
IHByb3BlcnR5ID0gYWxsUHJvcGVydGllcy5hdChpbmRleCk7CisgICAgaWYgKHByb3BlcnR5LmRp
c2FibGVkID09IGRpc2FibGUpCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBJZGVtcG90ZW50IG9w
ZXJhdGlvbi4KKworICAgIGJvb2wgc3VjY2VzczsKKyAgICBpZiAoIWRpc2FibGUpCisgICAgICAg
IHN1Y2Nlc3MgPSBlbmFibGVQcm9wZXJ0eShpbmRleCwgYWxsUHJvcGVydGllcyk7CisgICAgZWxz
ZQorICAgICAgICBzdWNjZXNzID0gZGlzYWJsZVByb3BlcnR5KGluZGV4LCBhbGxQcm9wZXJ0aWVz
KTsKKworICAgIHJldHVybiBzdWNjZXNzOworfQorCisvLyBzdGF0aWMKK3Vuc2lnbmVkIEluc3Bl
Y3RvclN0eWxlOjpkaXNhYmxlZEluZGV4QnlPcmRpbmFsKHVuc2lnbmVkIG9yZGluYWwsIGJvb2wg
Y2FuVXNlU3Vic2VxdWVudCwgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+JiBhbGxQcm9w
ZXJ0aWVzKQoreworICAgIHVuc2lnbmVkIGRpc2FibGVkSW5kZXggPSAwOworICAgIGZvciAodW5z
aWduZWQgaSA9IDAsIHNpemUgPSBhbGxQcm9wZXJ0aWVzLnNpemUoKTsgaSA8IHNpemU7ICsraSkg
eworICAgICAgICBJbnNwZWN0b3JTdHlsZVByb3BlcnR5JiBwcm9wZXJ0eSA9IGFsbFByb3BlcnRp
ZXMuYXQoaSk7CisgICAgICAgIGlmIChwcm9wZXJ0eS5kaXNhYmxlZCkgeworICAgICAgICAgICAg
aWYgKGkgPT0gb3JkaW5hbCB8fCAoY2FuVXNlU3Vic2VxdWVudCAmJiBpID4gb3JkaW5hbCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGRpc2FibGVkSW5kZXg7CisgICAgICAgICAgICArK2Rpc2Fi
bGVkSW5kZXg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gVUlOVF9NQVg7Cit9CisK
K2Jvb2wgSW5zcGVjdG9yU3R5bGU6OnN0eWxlVGV4dChTdHJpbmcqIHJlc3VsdCkKK3sKKyAgICAv
LyBQcmVjb25kaXRpb246IG1fcGFyZW50U3R5bGVTaGVldC0+ZW5zdXJlUGFyc2VkRGF0YVJlYWR5
KCkgaGFzIGJlZW4gY2FsbGVkIHN1Y2Nlc3NmdWxseS4KKyAgICBSZWZQdHI8Q1NTUnVsZVNvdXJj
ZURhdGE+IHNvdXJjZURhdGEgPSBtX3BhcmVudFN0eWxlU2hlZXQtPnJ1bGVTb3VyY2VEYXRhRm9y
KG1fc3R5bGUpOworICAgIGlmICghc291cmNlRGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgU3RyaW5nIHN0eWxlU2hlZXRUZXh0OworICAgIGJvb2wgc3VjY2VzcyA9IG1fcGFyZW50
U3R5bGVTaGVldC0+dGV4dCgmc3R5bGVTaGVldFRleHQpOworICAgIGlmICghc3VjY2VzcykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU291cmNlUmFuZ2UmIGJvZHlSYW5nZSA9IHNvdXJj
ZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2U7CisgICAgKnJlc3VsdCA9IHN0
eWxlU2hlZXRUZXh0LnN1YnN0cmluZyhib2R5UmFuZ2Uuc3RhcnQsIGJvZHlSYW5nZS5lbmQgLSBi
b2R5UmFuZ2Uuc3RhcnQpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEluc3BlY3RvclN0
eWxlOjpkaXNhYmxlUHJvcGVydHkodW5zaWduZWQgaW5kZXhUb0Rpc2FibGUsIFZlY3RvcjxJbnNw
ZWN0b3JTdHlsZVByb3BlcnR5PiYgYWxsUHJvcGVydGllcykKK3sKKyAgICAvLyBQcmVjb25kaXRp
b246IHxpbmRleFRvRW5hYmxlfCBwb2ludHMgdG8gYW4gZW5hYmxlZCBwcm9wZXJ0eS4KKyAgICBj
b25zdCBJbnNwZWN0b3JTdHlsZVByb3BlcnR5JiBwcm9wZXJ0eSA9IGFsbFByb3BlcnRpZXMuYXQo
aW5kZXhUb0Rpc2FibGUpOworICAgIEluc3BlY3RvclN0eWxlUHJvcGVydHkgZGlzYWJsZWRQcm9w
ZXJ0eShwcm9wZXJ0eSk7CisgICAgZGlzYWJsZWRQcm9wZXJ0eS5kaXNhYmxlZCA9IHRydWU7Cisg
ICAgdW5zaWduZWQgcHJvcGVydHlTdGFydCA9IHByb3BlcnR5LnNvdXJjZURhdGEucmFuZ2Uuc3Rh
cnQ7CisgICAgLy8gVGhpcyBtYXkgaGF2ZSB0byBiZSBuZWdhdGVkIGJlbG93LgorICAgIGxvbmcg
cHJvcGVydHlMZW5ndGggPSBwcm9wZXJ0eS5zb3VyY2VEYXRhLnJhbmdlLmVuZCAtIHByb3BlcnR5
U3RhcnQ7CisgICAgZGlzYWJsZWRQcm9wZXJ0eS5zb3VyY2VEYXRhLnJhbmdlLmVuZCA9IHByb3Bl
cnR5U3RhcnQ7CisgICAgU3RyaW5nIG9sZFN0eWxlVGV4dDsKKyAgICBib29sIHN1Y2Nlc3MgPSBz
dHlsZVRleHQoJm9sZFN0eWxlVGV4dCk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgZGlzYWJsZWRQcm9wZXJ0eS5yYXdUZXh0ID0gb2xkU3R5bGVUZXh0LnN1
YnN0cmluZyhwcm9wZXJ0eVN0YXJ0LCBwcm9wZXJ0eUxlbmd0aCk7CisgICAgc3VjY2VzcyA9IHJl
cGxhY2VQcm9wZXJ0eUluU3R5bGVUZXh0KHByb3BlcnR5LCAiIik7CisgICAgaWYgKCFzdWNjZXNz
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBBZGQgZGlzYWJsZWQgcHJvcGVydHkg
YXQgY29ycmVjdCBwb3NpdGlvbi4KKyAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9IGRpc2Fi
bGVkSW5kZXhCeU9yZGluYWwoaW5kZXhUb0Rpc2FibGUsIHRydWUsIGFsbFByb3BlcnRpZXMpOwor
ICAgIGlmIChpbnNlcnRpb25JbmRleCA9PSBVSU5UX01BWCkKKyAgICAgICAgbV9kaXNhYmxlZFBy
b3BlcnRpZXMuYXBwZW5kKGRpc2FibGVkUHJvcGVydHkpOworICAgIGVsc2UgeworICAgICAgICBt
X2Rpc2FibGVkUHJvcGVydGllcy5pbnNlcnQoaW5zZXJ0aW9uSW5kZXgsIGRpc2FibGVkUHJvcGVy
dHkpOworICAgICAgICBzaGlmdERpc2FibGVkUHJvcGVydGllcyhpbnNlcnRpb25JbmRleCArIDEs
IC1wcm9wZXJ0eUxlbmd0aCk7IC8vIFByb3BlcnR5IHJlbW92ZWQgZnJvbSB0ZXh0IC0gc2hpZnQg
dGhlc2UgYmFjay4KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW5zcGVjdG9y
U3R5bGU6OmVuYWJsZVByb3BlcnR5KHVuc2lnbmVkIGluZGV4VG9FbmFibGUsIFZlY3RvcjxJbnNw
ZWN0b3JTdHlsZVByb3BlcnR5PiYgYWxsUHJvcGVydGllcykKK3sKKyAgICAvLyBQcmVjb25kaXRp
b246IHxpbmRleFRvRW5hYmxlfCBwb2ludHMgdG8gYSBkaXNhYmxlZCBwcm9wZXJ0eS4KKyAgICB1
bnNpZ25lZCBkaXNhYmxlZEluZGV4ID0gZGlzYWJsZWRJbmRleEJ5T3JkaW5hbChpbmRleFRvRW5h
YmxlLCBmYWxzZSwgYWxsUHJvcGVydGllcyk7CisgICAgaWYgKGRpc2FibGVkSW5kZXggPT0gVUlO
VF9NQVgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEluc3BlY3RvclN0eWxlUHJvcGVy
dHkgZGlzYWJsZWRQcm9wZXJ0eSA9IG1fZGlzYWJsZWRQcm9wZXJ0aWVzLmF0KGRpc2FibGVkSW5k
ZXgpOworICAgIG1fZGlzYWJsZWRQcm9wZXJ0aWVzLnJlbW92ZShkaXNhYmxlZEluZGV4KTsKKyAg
ICBib29sIHN1Y2Nlc3MgPSByZXBsYWNlUHJvcGVydHlJblN0eWxlVGV4dChkaXNhYmxlZFByb3Bl
cnR5LCBkaXNhYmxlZFByb3BlcnR5LnJhd1RleHQpOworICAgIGlmIChzdWNjZXNzKQorICAgICAg
ICBzaGlmdERpc2FibGVkUHJvcGVydGllcyhkaXNhYmxlZEluZGV4LCBkaXNhYmxlZFByb3BlcnR5
LnJhd1RleHQubGVuZ3RoKCkpOworICAgIHJldHVybiBzdWNjZXNzOworfQorCitib29sIEluc3Bl
Y3RvclN0eWxlOjpwb3B1bGF0ZUFsbFByb3BlcnRpZXMoVmVjdG9yPEluc3BlY3RvclN0eWxlUHJv
cGVydHk+KiByZXN1bHQpIGNvbnN0Cit7CisgICAgSGFzaFNldDxTdHJpbmc+IGZvdW5kU2hvcnRo
YW5kczsKKyAgICBIYXNoU2V0PFN0cmluZz4gc291cmNlUHJvcGVydHlOYW1lczsKKyAgICB1bnNp
Z25lZCBkaXNhYmxlZEluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBkaXNhYmxlZExlbmd0aCA9IG1f
ZGlzYWJsZWRQcm9wZXJ0aWVzLnNpemUoKTsKKyAgICBJbnNwZWN0b3JTdHlsZVByb3BlcnR5IGRp
c2FibGVkUHJvcGVydHk7CisgICAgaWYgKGRpc2FibGVkSW5kZXggPCBkaXNhYmxlZExlbmd0aCkK
KyAgICAgICAgZGlzYWJsZWRQcm9wZXJ0eSA9IG1fZGlzYWJsZWRQcm9wZXJ0aWVzLmF0KGRpc2Fi
bGVkSW5kZXgpOworCisgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0g
KG1fcGFyZW50U3R5bGVTaGVldCAmJiBtX3BhcmVudFN0eWxlU2hlZXQtPmVuc3VyZVBhcnNlZERh
dGFSZWFkeSgpKSA/IG1fcGFyZW50U3R5bGVTaGVldC0+cnVsZVNvdXJjZURhdGFGb3IobV9zdHls
ZSkgOiAwOworICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+KiBzb3VyY2VQcm9wZXJ0
eURhdGEgPSBzb3VyY2VEYXRhID8gJihzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnByb3Bl
cnR5RGF0YSkgOiAwOworICAgIGlmIChzb3VyY2VQcm9wZXJ0eURhdGEpIHsKKyAgICAgICAgZm9y
IChWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzb3Vy
Y2VQcm9wZXJ0eURhdGEtPmJlZ2luKCk7IGl0ICE9IHNvdXJjZVByb3BlcnR5RGF0YS0+ZW5kKCk7
ICsraXQpIHsKKyAgICAgICAgICAgIHdoaWxlIChkaXNhYmxlZEluZGV4IDwgZGlzYWJsZWRMZW5n
dGggJiYgZGlzYWJsZWRQcm9wZXJ0eS5zb3VyY2VEYXRhLnJhbmdlLnN0YXJ0IDw9IGl0LT5yYW5n
ZS5zdGFydCkgeworICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKGRpc2FibGVkUHJvcGVy
dHkpOworICAgICAgICAgICAgICAgIGlmICgrK2Rpc2FibGVkSW5kZXggPCBkaXNhYmxlZExlbmd0
aCkKKyAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRQcm9wZXJ0eSA9IG1fZGlzYWJsZWRQcm9w
ZXJ0aWVzLmF0KGRpc2FibGVkSW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVz
dWx0LT5hcHBlbmQoSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eSgqaXQsIHRydWUsIGZhbHNlKSk7Cisg
ICAgICAgICAgICBzb3VyY2VQcm9wZXJ0eU5hbWVzLmFkZChpdC0+bmFtZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB3aGlsZSAoZGlzYWJsZWRJbmRleCA8IGRpc2FibGVkTGVuZ3RoKSB7Cisg
ICAgICAgIGRpc2FibGVkUHJvcGVydHkgPSBtX2Rpc2FibGVkUHJvcGVydGllcy5hdChkaXNhYmxl
ZEluZGV4KyspOworICAgICAgICByZXN1bHQtPmFwcGVuZChkaXNhYmxlZFByb3BlcnR5KTsKKyAg
ICB9CisKKyAgICBmb3IgKGludCBpID0gMCwgc2l6ZSA9IG1fc3R5bGUtPmxlbmd0aCgpOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gbV9zdHlsZS0+aXRlbShpKTsKKyAg
ICAgICAgaWYgKHNvdXJjZVByb3BlcnR5TmFtZXMuY29udGFpbnMobmFtZSkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBzb3VyY2VQcm9wZXJ0eU5hbWVzLmFkZChuYW1lKTsKKyAg
ICAgICAgcmVzdWx0LT5hcHBlbmQoSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVNv
dXJjZURhdGEobmFtZSwgbV9zdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShuYW1lKSwgIW1fc3R5bGUt
PmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSkuaXNFbXB0eSgpLCB0cnVlLCBTb3VyY2VSYW5nZSgp
KSwgZmFsc2UsIGZhbHNlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yU3R5bGU6OnBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhJbnNwZWN0
b3JPYmplY3QqIHJlc3VsdCkgY29uc3QKK3sKKyAgICBWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9w
ZXJ0eT4gcHJvcGVydGllczsKKyAgICBwb3B1bGF0ZUFsbFByb3BlcnRpZXMoJnByb3BlcnRpZXMp
OworCisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm9wZXJ0aWVzT2JqZWN0ID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNob3J0aGFu
ZFZhbHVlcyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+ID4gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVBy
b3BlcnR5OworICAgIEhhc2hTZXQ8U3RyaW5nPiBmb3VuZFNob3J0aGFuZHM7CisKKyAgICBmb3Ig
KFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5Pjo6aXRlcmF0b3IgaXQgPSBwcm9wZXJ0aWVz
LmJlZ2luKCksIGl0RW5kID0gcHJvcGVydGllcy5lbmQoKTsgaXQgIT0gaXRFbmQ7ICsraXQpIHsK
KyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eUVudHJ5ID0gaXQt
PnNvdXJjZURhdGE7CisgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IHByb3BlcnR5RW50cnku
bmFtZTsKKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0eSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHByb3BlcnRpZXNPYmplY3QtPnB1c2hPYmpl
Y3QocHJvcGVydHkpOworICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzdGF0dXMiLCBpdC0+
ZGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogImFjdGl2ZSIpOworICAgICAgICBwcm9wZXJ0eS0+c2V0
Qm9vbGVhbigicGFyc2VkT2siLCBwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKTsKKyAgICAgICAgaWYg
KCFpdC0+ZGlzYWJsZWQpIHsKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoIm5hbWUi
LCBuYW1lKTsKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInZhbHVlIiwgcHJvcGVy
dHlFbnRyeS52YWx1ZSk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJwcmlvcml0
eSIsIHByb3BlcnR5RW50cnkuaW1wb3J0YW50ID8gImltcG9ydGFudCIgOiAiIik7CisgICAgICAg
ICAgICBpZiAoaXQtPmhhc1NvdXJjZSkgeworICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRC
b29sZWFuKCJpbXBsaWNpdCIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0
TnVtYmVyKCJzdGFydE9mZnNldCIsIHByb3BlcnR5RW50cnkucmFuZ2Uuc3RhcnQpOworICAgICAg
ICAgICAgICAgIHByb3BlcnR5LT5zZXROdW1iZXIoImVuZE9mZnNldCIsIHByb3BlcnR5RW50cnku
cmFuZ2UuZW5kKTsKKworICAgICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiA+OjppdGVyYXRvciBhY3RpdmVJdCA9IHByb3BlcnR5TmFtZVRvUHJldmlv
dXNBY3RpdmVQcm9wZXJ0eS5maW5kKG5hbWUpOworICAgICAgICAgICAgICAgIGlmIChhY3RpdmVJ
dCAhPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuZW5kKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYWN0aXZlSXQtPnNlY29uZC0+c2V0U3RyaW5nKCJzdGF0dXMiLCAiaW5h
Y3RpdmUiKTsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnNlY29uZC0+c2V0U3RyaW5n
KCJzaG9ydGhhbmROYW1lIiwgIiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuc2V0KG5hbWUsIHByb3BlcnR5
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJvcGVydHktPnNldEJv
b2xlYW4oImltcGxpY2l0IiwgbV9zdHlsZS0+aXNQcm9wZXJ0eUltcGxpY2l0KG5hbWUpKTsKKyAg
ICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzdGF0dXMiLCAic3R5bGUiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3Ry
aW5nKCJ0ZXh0IiwgaXQtPnJhd1RleHQpOworCisgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LnBh
cnNlZE9rKSB7CisgICAgICAgICAgICAvLyBCb3RoIGZvciBzdHlsZS1vcmlnaW5hdGVkIGFuZCBw
YXJzZWQgc291cmNlIHByb3BlcnRpZXMuCisgICAgICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0g
bV9zdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7CisgICAgICAgICAgICBwcm9wZXJ0
eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgc2hvcnRoYW5kKTsKKyAgICAgICAgICAgIGlm
ICghc2hvcnRoYW5kLmlzRW1wdHkoKSAmJiAhZm91bmRTaG9ydGhhbmRzLmNvbnRhaW5zKHNob3J0
aGFuZCkpIHsKKyAgICAgICAgICAgICAgICBmb3VuZFNob3J0aGFuZHMuYWRkKHNob3J0aGFuZCk7
CisgICAgICAgICAgICAgICAgc2hvcnRoYW5kVmFsdWVzLT5zZXRTdHJpbmcoc2hvcnRoYW5kLCBz
aG9ydGhhbmRWYWx1ZShzaG9ydGhhbmQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgIiIpOwor
ICAgIH0KKworICAgIHJlc3VsdC0+c2V0QXJyYXkoImNzc1Byb3BlcnRpZXMiLCBwcm9wZXJ0aWVz
T2JqZWN0KTsKKyAgICByZXN1bHQtPnNldE9iamVjdCgic2hvcnRoYW5kVmFsdWVzIiwgc2hvcnRo
YW5kVmFsdWVzKTsKK30KKworCit2b2lkIEluc3BlY3RvclN0eWxlOjpzaGlmdERpc2FibGVkUHJv
cGVydGllcyh1bnNpZ25lZCBmcm9tSW5kZXgsIGxvbmcgZGVsdGEpCit7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gZnJvbUluZGV4LCBzaXplID0gbV9kaXNhYmxlZFByb3BlcnRpZXMuc2l6ZSgpOyBp
IDwgc2l6ZTsgKytpKSB7CisgICAgICAgIFNvdXJjZVJhbmdlJiByYW5nZSA9IG1fZGlzYWJsZWRQ
cm9wZXJ0aWVzLmF0KGkpLnNvdXJjZURhdGEucmFuZ2U7CisgICAgICAgIHJhbmdlLnN0YXJ0ICs9
IGRlbHRhOworICAgICAgICByYW5nZS5lbmQgKz0gZGVsdGE7CisgICAgfQorfQorCitib29sIElu
c3BlY3RvclN0eWxlOjpyZXBsYWNlUHJvcGVydHlJblN0eWxlVGV4dChjb25zdCBJbnNwZWN0b3JT
dHlsZVByb3BlcnR5JiBwcm9wZXJ0eSwgY29uc3QgU3RyaW5nJiBuZXdUZXh0KQoreworICAgIC8v
IFByZWNvbmRpdGlvbjogbV9wYXJlbnRTdHlsZVNoZWV0LT5lbnN1cmVQYXJzZWREYXRhUmVhZHko
KSBoYXMgYmVlbiBjYWxsZWQgc3VjY2Vzc2Z1bGx5LgorICAgIFN0cmluZyB0ZXh0OworICAgIGJv
b2wgc3VjY2VzcyA9IHN0eWxlVGV4dCgmdGV4dCk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgU291cmNlUmFuZ2UmIHJhbmdlID0gcHJvcGVydHku
c291cmNlRGF0YS5yYW5nZTsKKyAgICB0ZXh0LnJlcGxhY2UocmFuZ2Uuc3RhcnQsIHJhbmdlLmVu
ZCAtIHJhbmdlLnN0YXJ0LCBuZXdUZXh0KTsKKyAgICBzdWNjZXNzID0gbV9wYXJlbnRTdHlsZVNo
ZWV0LT5zZXRTdHlsZVRleHQobV9zdHlsZSwgdGV4dCk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9
CisKK1N0cmluZyBJbnNwZWN0b3JTdHlsZTo6c2hvcnRoYW5kVmFsdWUoY29uc3QgU3RyaW5nJiBz
aG9ydGhhbmRQcm9wZXJ0eSkgY29uc3QKK3sKKyAgICBTdHJpbmcgdmFsdWUgPSBtX3N0eWxlLT5n
ZXRQcm9wZXJ0eVZhbHVlKHNob3J0aGFuZFByb3BlcnR5KTsKKyAgICBpZiAodmFsdWUuaXNFbXB0
eSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0eWxlLT5sZW5ndGgo
KTsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFByb3BlcnR5ID0gbV9zdHls
ZS0+aXRlbShpKTsKKyAgICAgICAgICAgIGlmIChtX3N0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFu
ZChpbmRpdmlkdWFsUHJvcGVydHkpICE9IHNob3J0aGFuZFByb3BlcnR5KQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmlzUHJvcGVydHlJbXBsaWNp
dChpbmRpdmlkdWFsUHJvcGVydHkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgU3RyaW5nIGluZGl2aWR1YWxWYWx1ZSA9IG1fc3R5bGUtPmdldFByb3BlcnR5VmFsdWUo
aW5kaXZpZHVhbFByb3BlcnR5KTsKKyAgICAgICAgICAgIGlmIChpbmRpdmlkdWFsVmFsdWUgPT0g
ImluaXRpYWwiKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHZh
bHVlLmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIHZhbHVlLmFwcGVuZCgiICIpOworICAgICAg
ICAgICAgdmFsdWUuYXBwZW5kKGluZGl2aWR1YWxWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIHZhbHVlOworfQorCitTdHJpbmcgSW5zcGVjdG9yU3R5bGU6OnNob3J0aGFuZFBy
aW9yaXR5KGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpIGNvbnN0Cit7CisgICAgU3Ry
aW5nIHByaW9yaXR5ID0gbV9zdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShzaG9ydGhhbmRQcm9w
ZXJ0eSk7CisgICAgaWYgKHByaW9yaXR5LmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9zdHlsZS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgU3Ry
aW5nIGluZGl2aWR1YWxQcm9wZXJ0eSA9IG1fc3R5bGUtPml0ZW0oaSk7CisgICAgICAgICAgICBp
ZiAobV9zdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZpZHVhbFByb3BlcnR5KSAhPSBz
aG9ydGhhbmRQcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IHByaW9yaXR5ID0gbV9zdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShpbmRpdmlkdWFsUHJvcGVy
dHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBy
aW9yaXR5OworfQorCitWZWN0b3I8U3RyaW5nPiBJbnNwZWN0b3JTdHlsZTo6bG9uZ2hhbmRQcm9w
ZXJ0aWVzKGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpIGNvbnN0Cit7CisgICAgVmVj
dG9yPFN0cmluZz4gcHJvcGVydGllczsKKyAgICBIYXNoU2V0PFN0cmluZz4gZm91bmRQcm9wZXJ0
aWVzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0eWxlLT5sZW5ndGgoKTsgKytp
KSB7CisgICAgICAgIFN0cmluZyBpbmRpdmlkdWFsUHJvcGVydHkgPSBtX3N0eWxlLT5pdGVtKGkp
OworICAgICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzLmNvbnRhaW5zKGluZGl2aWR1YWxQcm9wZXJ0
eSkgfHwgbV9zdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZpZHVhbFByb3BlcnR5KSAh
PSBzaG9ydGhhbmRQcm9wZXJ0eSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZv
dW5kUHJvcGVydGllcy5hZGQoaW5kaXZpZHVhbFByb3BlcnR5KTsKKyAgICAgICAgcHJvcGVydGll
cy5hcHBlbmQoaW5kaXZpZHVhbFByb3BlcnR5KTsKKyAgICB9CisgICAgcmV0dXJuIHByb3BlcnRp
ZXM7Cit9CisKIEluc3BlY3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoY29uc3Qg
U3RyaW5nJiBpZCwgQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIGNvbnN0IFN0cmluZyYg
b3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMKQogICAgIDogbV9pZChpZCkKICAgICAs
IG1fcGFnZVN0eWxlU2hlZXQocGFnZVN0eWxlU2hlZXQpCkBAIC0xMjEsMTQgKzQ4NCwxNSBAQCBi
b29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnNldFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQogICAg
IG1fcGFyc2VkU3R5bGVTaGVldC0+c2V0VGV4dCh0ZXh0KTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwLCBzaXplID0gbV9wYWdlU3R5bGVTaGVldC0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpCiAg
ICAgICAgIG1fcGFnZVN0eWxlU2hlZXQtPnJlbW92ZShpKTsKKyAgICBtX2luc3BlY3RvclN0eWxl
cy5jbGVhcigpOwogCiAgICAgbV9wYWdlU3R5bGVTaGVldC0+cGFyc2VTdHJpbmcodGV4dCwgbV9w
YWdlU3R5bGVTaGVldC0+dXNlU3RyaWN0UGFyc2luZygpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRSdWxlU2VsZWN0b3IoY29uc3QgU3RyaW5n
JiBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCitib29sIEluc3BlY3RvclN0eWxlU2hl
ZXQ6OnNldFJ1bGVTZWxlY3Rvcihjb25zdCBJbnNwZWN0b3JDb21wb3VuZElkJiBpZCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3RvcikKIHsKLSAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRm9ySWQo
cnVsZUlkKTsKKyAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRm9ySWQoaWQpOwogICAgIGlm
ICghcnVsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIENTU1N0eWxlU2hlZXQqIHN0eWxl
U2hlZXQgPSBJbnNwZWN0b3JDU1NBZ2VudDo6cGFyZW50U3R5bGVTaGVldChydWxlKTsKQEAgLTE0
MCwxOCArNTA0LDE2IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0UnVsZVNlbGVjdG9y
KGNvbnN0IFN0cmluZyYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlCiAgICAgaWYgKCFzb3VyY2VE
YXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBTdHJpbmcmIHNoZWV0VGV4
dCA9IG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpOwotICAgIFN0cmluZyBuZXdTdHlsZVNoZWV0
VGV4dCA9IHNoZWV0VGV4dC5zdWJzdHJpbmcoMCwgc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFu
Z2Uuc3RhcnQpOwotICAgIG5ld1N0eWxlU2hlZXRUZXh0ICs9IHNlbGVjdG9yOwotICAgIG5ld1N0
eWxlU2hlZXRUZXh0ICs9IHNoZWV0VGV4dC5yaWdodChzaGVldFRleHQubGVuZ3RoKCkgLSBzb3Vy
Y2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5lbmQpOwotICAgIG1fcGFyc2VkU3R5bGVTaGVldC0+
c2V0VGV4dChuZXdTdHlsZVNoZWV0VGV4dCk7CisgICAgU3RyaW5nIHNoZWV0VGV4dCA9IG1fcGFy
c2VkU3R5bGVTaGVldC0+dGV4dCgpOworICAgIHNoZWV0VGV4dC5yZXBsYWNlKHNvdXJjZURhdGEt
PnNlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0LCBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5l
bmQgLSBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCwgc2VsZWN0b3IpOworICAg
IG1fcGFyc2VkU3R5bGVTaGVldC0+c2V0VGV4dChzaGVldFRleHQpOwogICAgIHJldHVybiB0cnVl
OwogfQogCiBDU1NTdHlsZVJ1bGUqIEluc3BlY3RvclN0eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3Qg
U3RyaW5nJiBzZWxlY3RvcikKIHsKLSAgICBTdHJpbmcgdGV4dDsKLSAgICBib29sIHN1Y2Nlc3Mg
PSBzdHlsZVNoZWV0VGV4dCgmdGV4dCk7CisgICAgU3RyaW5nIHN0eWxlU2hlZXRUZXh0OworICAg
IGJvb2wgc3VjY2VzcyA9IHRleHQoJnN0eWxlU2hlZXRUZXh0KTsKICAgICBpZiAoIXN1Y2Nlc3Mp
CiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xNjQsMjMgKzUyNiwyNCBAQCBDU1NTdHlsZVJ1bGUq
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKICAg
ICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBJbnNwZWN0b3JDU1NBZ2VudDo6YXNDU1NTdHlsZVJ1bGUo
cnVsZXMtPml0ZW0ocnVsZXMtPmxlbmd0aCgpIC0gMSkpOwogICAgIEFTU0VSVChydWxlKTsKIAot
ICAgIGlmICh0ZXh0Lmxlbmd0aCgpKQotICAgICAgICB0ZXh0ICs9ICJcbiI7CisgICAgaWYgKHN0
eWxlU2hlZXRUZXh0Lmxlbmd0aCgpKQorICAgICAgICBzdHlsZVNoZWV0VGV4dCArPSAiXG4iOwog
Ci0gICAgdGV4dCArPSBzZWxlY3RvcjsKLSAgICB0ZXh0ICs9ICIge30iOwotICAgIG1fcGFyc2Vk
U3R5bGVTaGVldC0+c2V0VGV4dCh0ZXh0KTsKKyAgICBzdHlsZVNoZWV0VGV4dCArPSBzZWxlY3Rv
cjsKKyAgICBzdHlsZVNoZWV0VGV4dCArPSAiIHt9IjsKKyAgICBtX3BhcnNlZFN0eWxlU2hlZXQt
PnNldFRleHQoc3R5bGVTaGVldFRleHQpOwogCiAgICAgcmV0dXJuIHJ1bGU7CiB9CiAKLUNTU1N0
eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZUZvcklkKGNvbnN0IFN0cmluZyYgaWQp
IGNvbnN0CitDU1NTdHlsZVJ1bGUqIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1bGVGb3JJZChjb25z
dCBJbnNwZWN0b3JDb21wb3VuZElkJiBpZCkgY29uc3QKIHsKICAgICBpZiAoIW1fcGFnZVN0eWxl
U2hlZXQpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgQVNTRVJUKGlkLnBhcnRDb3VudCgpID09
IDIpOwogICAgIGJvb2wgb2s7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBpZC50b1VJbnQoJm9rKTsK
KyAgICB1bnNpZ25lZCBpbmRleCA9IGlkLnBhcnQoMSkudG9VSW50KCZvayk7CiAgICAgaWYgKCFv
aykKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTIwNCwxOSArNTY3LDIwIEBAIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxl
U2hlZXQoKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcmVzdWx0LT5zZXRTdHJp
bmcoImlkIiwgaWQoKSk7CiAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJkaXNhYmxlZCIsIHN0eWxl
U2hlZXQtPmRpc2FibGVkKCkpOwotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJocmVmIiwgc3R5bGVT
aGVldC0+aHJlZigpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygic291cmNlVVJMIiwgc3R5bGVT
aGVldC0+aHJlZigpKTsKICAgICByZXN1bHQtPnNldFN0cmluZygidGl0bGUiLCBzdHlsZVNoZWV0
LT50aXRsZSgpKTsKICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IGNzc1J1bGVMaXN0ID0gQ1NTUnVs
ZUxpc3Q6OmNyZWF0ZShzdHlsZVNoZWV0LCB0cnVlKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGNzc1J1bGVzID0gYnVpbGRBcnJheUZvclJ1bGVMaXN0KGNzc1J1bGVMaXN0LmdldCgpKTsK
LSAgICByZXN1bHQtPnNldEFycmF5KCJjc3NSdWxlcyIsIGNzc1J1bGVzLnJlbGVhc2UoKSk7Cisg
ICAgcmVzdWx0LT5zZXRBcnJheSgicnVsZXMiLCBjc3NSdWxlcy5yZWxlYXNlKCkpOwogCiAgICAg
U3RyaW5nIHN0eWxlU2hlZXRUZXh0OwogICAgIGJvb2wgc3VjY2VzcyA9IHRleHQoJnN0eWxlU2hl
ZXRUZXh0KTsKICAgICBpZiAoc3VjY2VzcykKICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInRl
eHQiLCBzdHlsZVNoZWV0VGV4dCk7CiAKKyAgICByZXN1bHQtPnNldFN0cmluZygic3R5bGVTaGVl
dElkIiwgaWQoKSk7CisKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIApAQCAtMjI4
LDI3ICs1OTIsMTMgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxl
U2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUKIAogICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVz
dWx0LT5zZXRTdHJpbmcoInNlbGVjdG9yVGV4dCIsIHJ1bGUtPnNlbGVjdG9yVGV4dCgpKTsKLSAg
ICByZXN1bHQtPnNldFN0cmluZygiY3NzVGV4dCIsIHJ1bGUtPmNzc1RleHQoKSk7CisgICAgcmVz
dWx0LT5zZXRTdHJpbmcoInNvdXJjZVVSTCIsICFzdHlsZVNoZWV0LT5ocmVmKCkuaXNFbXB0eSgp
ID8gc3R5bGVTaGVldC0+aHJlZigpIDogbV9kb2N1bWVudFVSTCk7CiAgICAgcmVzdWx0LT5zZXRO
dW1iZXIoInNvdXJjZUxpbmUiLCBydWxlLT5zb3VyY2VMaW5lKCkpOwotICAgIHJlc3VsdC0+c2V0
U3RyaW5nKCJkb2N1bWVudFVSTCIsIG1fZG9jdW1lbnRVUkwpOwotCi0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyZW50U3R5bGVTaGVldFZhbHVlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBwYXJlbnRTdHlsZVNoZWV0VmFsdWUtPnNldFN0cmluZygiaWQiLCBpZCgpKTsK
LSAgICBwYXJlbnRTdHlsZVNoZWV0VmFsdWUtPnNldFN0cmluZygiaHJlZiIsIHN0eWxlU2hlZXQt
PmhyZWYoKSk7Ci0gICAgcmVzdWx0LT5zZXRPYmplY3QoInBhcmVudFN0eWxlU2hlZXQiLCBwYXJl
bnRTdHlsZVNoZWV0VmFsdWUucmVsZWFzZSgpKTsKICAgICByZXN1bHQtPnNldFN0cmluZygib3Jp
Z2luIiwgbV9vcmlnaW4pOwogCi0gICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VE
YXRhOwotICAgIGlmIChlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKLSAgICAgICAgc291cmNlRGF0
YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKHJ1bGUtPnN0eWxlKCkpOwotICAgIGlmIChzb3VyY2VEYXRh
KSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJzZWxlY3RvclN0YXJ0T2Zmc2V0Iiwgc291
cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQpOwotICAgICAgICByZXN1bHQtPnNldE51
bWJlcigic2VsZWN0b3JFbmRPZmZzZXQiLCBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5l
bmQpOwotICAgIH0KLQogICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzdHlsZSIsIGJ1aWxkT2JqZWN0
Rm9yU3R5bGUocnVsZS0+c3R5bGUoKSkpOwogICAgIGlmIChjYW5CaW5kKCkpCi0gICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJpZCIsIGZ1bGxSdWxlSWQocnVsZSkpOworICAgICAgICByZXN1bHQt
PnNldFN0cmluZygicnVsZUlkIiwgcnVsZUlkKHJ1bGUpLmFzU3RyaW5nKCkpOwogCiAgICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CkBAIC0yNTksMTIgKzYwOSw0OCBAQCBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHls
ZShDU1NTdHlsZURlYwogICAgIGlmIChlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKICAgICAgICAg
c291cmNlRGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKHN0eWxlKTsKIAotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclN0
eWxlKHN0eWxlLCBmdWxsU3R5bGVJZChzdHlsZSksIHNvdXJjZURhdGEgPyBzb3VyY2VEYXRhLT5z
dHlsZVNvdXJjZURhdGEuZ2V0KCkgOiAwKTsKLSAgICByZXN1bHQtPnNldFN0cmluZygicGFyZW50
U3R5bGVTaGVldElkIiwgaWQoKSk7CisgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0
b3JTdHlsZSA9IGluc3BlY3RvclN0eWxlRm9ySWQocnVsZU9yU3R5bGVJZChzdHlsZSkpOworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IGluc3BlY3RvclN0eWxlLT5idWlsZE9i
amVjdEZvclN0eWxlKCk7CisKKyAgICAvLyBTdHlsZSB0ZXh0IGNhbm5vdCBiZSByZXRyaWV2ZWQg
d2l0aG91dCBzdHlsZXNoZWV0LCBzbyBzZXQgY3NzVGV4dCBoZXJlLgorICAgIGlmIChzb3VyY2VE
YXRhKSB7CisgICAgICAgIFN0cmluZyBzaGVldFRleHQ7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9
IHRleHQoJnNoZWV0VGV4dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBj
b25zdCBTb3VyY2VSYW5nZSYgYm9keVJhbmdlID0gc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRh
LT5zdHlsZUJvZHlSYW5nZTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJjc3NUZXh0
Iiwgc2hlZXRUZXh0LnN1YnN0cmluZyhib2R5UmFuZ2Uuc3RhcnQsIGJvZHlSYW5nZS5lbmQgLSBi
b2R5UmFuZ2Uuc3RhcnQpKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZSgpOwogfQogCi1DU1NTdHlsZURlY2xhcmF0aW9uKiBJbnNwZWN0b3JTdHlsZVNoZWV0
OjpzdHlsZUZvcklkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0Citib29sIEluc3BlY3RvclN0eWxl
U2hlZXQ6OnNldFByb3BlcnR5VGV4dChjb25zdCBJbnNwZWN0b3JDb21wb3VuZElkJiBpZCwgdW5z
aWduZWQgcHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSkK
K3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gaW5zcGVjdG9y
U3R5bGVGb3JJZChpZCk7CisgICAgaWYgKCFpbnNwZWN0b3JTdHlsZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlLT5zZXRQcm9wZXJ0eVRleHQocHJv
cGVydHlJbmRleCwgdGV4dCwgb3ZlcndyaXRlKTsKK30KKworYm9vbCBJbnNwZWN0b3JTdHlsZVNo
ZWV0Ojp0b2dnbGVQcm9wZXJ0eShjb25zdCBJbnNwZWN0b3JDb21wb3VuZElkJiBpZCwgdW5zaWdu
ZWQgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JT
dHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBpbnNwZWN0b3JTdHlsZUZvcklkKGlkKTsKKyAgICBpZiAo
IWluc3BlY3RvclN0eWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIHN1Y2Nl
c3MgPSBpbnNwZWN0b3JTdHlsZS0+dG9nZ2xlUHJvcGVydHkocHJvcGVydHlJbmRleCwgZGlzYWJs
ZSk7CisgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgaWYgKGRpc2FibGUpCisgICAgICAgICAg
ICByZW1lbWJlckluc3BlY3RvclN0eWxlKGluc3BlY3RvclN0eWxlKTsKKyAgICAgICAgZWxzZSBp
ZiAoIWluc3BlY3RvclN0eWxlLT5oYXNEaXNhYmxlZFByb3BlcnRpZXMoKSkKKyAgICAgICAgICAg
IGZvcmdldEluc3BlY3RvclN0eWxlKGluc3BlY3RvclN0eWxlLT5jc3NTdHlsZSgpKTsKKyAgICB9
CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK0NTU1N0eWxlRGVjbGFyYXRpb24qIEluc3BlY3Rv
clN0eWxlU2hlZXQ6OnN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ29tcG91bmRJZCYgaWQpIGNv
bnN0CiB7CiAgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gcnVsZUZvcklkKGlkKTsKICAgICBpZiAo
IXJ1bGUpCkBAIC0yNzMsMTMgKzY1OSwzNyBAQCBDU1NTdHlsZURlY2xhcmF0aW9uKiBJbnNwZWN0
b3JTdHlsZVNoZWV0OjpzdHlsZUZvcklkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0CiAgICAgcmV0
dXJuIHJ1bGUtPnN0eWxlKCk7CiB9CiAKLWJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0U3R5
bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0KQorUGFz
c1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6aW5zcGVjdG9yU3R5
bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDb21wb3VuZElkJiBpZCkKIHsKLSAgICBDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSA9IHN0eWxlRm9ySWQoc3R5bGVJZCk7CisgICAgQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUgPSBzdHlsZUZvcklkKGlkKTsKICAgICBpZiAoIXN0eWxlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAwOworCisgICAgSW5zcGVjdG9yU3R5bGVN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9pbnNwZWN0b3JTdHlsZXMuZmluZChzdHlsZSk7CisgICAgaWYg
KGl0ID09IG1faW5zcGVjdG9yU3R5bGVzLmVuZCgpKSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKGlkLCBzdHls
ZSwgdGhpcyk7CisgICAgICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZS5yZWxlYXNlKCk7CisgICAg
fQorICAgIHJldHVybiBpdC0+c2Vjb25kOworfQogCi0gICAgcmV0dXJuIGlubmVyU2V0U3R5bGVU
ZXh0KHN0eWxlLCBuZXdUZXh0KTsKK3ZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cmVtZW1iZXJJ
bnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlKQorewor
ICAgIG1faW5zcGVjdG9yU3R5bGVzLnNldChpbnNwZWN0b3JTdHlsZS0+Y3NzU3R5bGUoKSwgaW5z
cGVjdG9yU3R5bGUpOworfQorCit2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmZvcmdldEluc3Bl
Y3RvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQoreworICAgIG1faW5zcGVjdG9y
U3R5bGVzLnJlbW92ZShzdHlsZSk7Cit9CisKK0luc3BlY3RvckNvbXBvdW5kSWQgSW5zcGVjdG9y
U3R5bGVTaGVldDo6cnVsZU9yU3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29u
c3QKK3sKKyAgICBJbnNwZWN0b3JDb21wb3VuZElkIHJlc3VsdDsKKyAgICB1bnNpZ25lZCBpbmRl
eCA9IHJ1bGVJbmRleEJ5U3R5bGUoc3R5bGUpOworICAgIGlmIChpbmRleCAhPSBVSU5UX01BWCkK
KyAgICAgICAgcmVzdWx0LmFwcGVuZFBhcnQoaWQoKSkuYXBwZW5kUGFydChTdHJpbmc6Om51bWJl
cihpbmRleCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIERvY3VtZW50KiBJbnNwZWN0b3JT
dHlsZVNoZWV0Ojpvd25lckRvY3VtZW50KCkgY29uc3QKQEAgLTMyOCw3ICs3MzgsNyBAQCBib29s
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3VyZVRleHQoKSBjb25zdAogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIFN0cmluZyB0ZXh0OwotICAgIGJvb2wgc3VjY2VzcyA9IHN0eWxlU2hlZXRU
ZXh0KCZ0ZXh0KTsKKyAgICBib29sIHN1Y2Nlc3MgPSBvcmlnaW5hbFN0eWxlU2hlZXRUZXh0KCZ0
ZXh0KTsKICAgICBpZiAoc3VjY2VzcykKICAgICAgICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRU
ZXh0KHRleHQpOwogCkBAIC0zNjIsMTIgKzc3Miw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVl
dDo6ZW5zdXJlU291cmNlRGF0YShOb2RlKiBvd25lck5vZGUpCiAgICAgcmV0dXJuIG1fcGFyc2Vk
U3R5bGVTaGVldC0+aGFzU291cmNlRGF0YSgpOwogfQogCi12b2lkIEluc3BlY3RvclN0eWxlU2hl
ZXQ6OmlubmVyU2V0U3R5bGVTaGVldFRleHQoY29uc3QgU3RyaW5nJiBuZXdUZXh0KQotewotICAg
IG1fcGFyc2VkU3R5bGVTaGVldC0+c2V0VGV4dChuZXdUZXh0KTsKLX0KLQotYm9vbCBJbnNwZWN0
b3JTdHlsZVNoZWV0Ojppbm5lclNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQorYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRTdHls
ZVRleHQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsK
ICAgICBpZiAoIXBhZ2VTdHlsZVNoZWV0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM3
OSwxNCArNzg0LDE0IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6aW5uZXJTZXRTdHlsZVRl
eHQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0CiAgICAgaWYgKCFzdWNjZXNz
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcgaWQgPSBydWxlT3JTdHlsZUlk
KHN0eWxlKTsKKyAgICBJbnNwZWN0b3JDb21wb3VuZElkIGlkID0gcnVsZU9yU3R5bGVJZChzdHls
ZSk7CiAgICAgaWYgKGlkLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgc3R5bGUtPnNldENzc1RleHQodGV4dCwgZWMpOwog
ICAgIGlmICghZWMpCi0gICAgICAgIGlubmVyU2V0U3R5bGVTaGVldFRleHQocGF0Y2hlZFN0eWxl
U2hlZXRUZXh0KTsKKyAgICAgICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRUZXh0KHBhdGNoZWRT
dHlsZVNoZWV0VGV4dCk7CiAKICAgICByZXR1cm4gIWVjOwogfQpAQCAtNDA3LDEwICs4MTIsOCBA
QCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRUZXh0V2l0aENoYW5nZWRTdHls
ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdAogICAgIFN0cmluZyB0ZXh0ID0gbV9wYXJzZWRTdHls
ZVNoZWV0LT50ZXh0KCk7CiAgICAgQVNTRVJUKGJvZHlFbmQgPD0gdGV4dC5sZW5ndGgoKSk7IC8v
IGJvZHlFbmQgaXMgZXhjbHVzaXZlCiAKLSAgICBTdHJpbmcgcGF0Y2hlZFRleHQgPSB0ZXh0LnN1
YnN0cmluZygwLCBib2R5U3RhcnQpOwotICAgIHBhdGNoZWRUZXh0ICs9IG5ld1N0eWxlVGV4dDsK
LSAgICBwYXRjaGVkVGV4dCArPSB0ZXh0LnN1YnN0cmluZyhib2R5RW5kLCB0ZXh0Lmxlbmd0aCgp
KTsKLSAgICAqcmVzdWx0ID0gcGF0Y2hlZFRleHQ7CisgICAgdGV4dC5yZXBsYWNlKGJvZHlTdGFy
dCwgYm9keUVuZCAtIGJvZHlTdGFydCwgbmV3U3R5bGVUZXh0KTsKKyAgICAqcmVzdWx0ID0gdGV4
dDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDI2LDkgKzgyOSw5IEBAIENTU1N0eWxlUnVs
ZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6ZmluZFBhZ2VSdWxlV2l0aFN0eWxlKENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjpmdWxsUnVsZUlkKENTU1N0eWxlUnVsZSogcnVsZSkgY29uc3QKK0luc3BlY3RvckNvbXBv
dW5kSWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZUlkKENTU1N0eWxlUnVsZSogcnVsZSkgY29u
c3QKIHsKLSAgICByZXR1cm4gZnVsbFJ1bGVPclN0eWxlSWQocnVsZS0+c3R5bGUoKSk7CisgICAg
cmV0dXJuIHJ1bGVPclN0eWxlSWQocnVsZS0+c3R5bGUoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
U3R5bGVTaGVldDo6cmV2YWxpZGF0ZVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHBhZ2VTdHls
ZSkKQEAgLTQ0NCwxNSArODQ3LDE4IEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cmV2YWxp
ZGF0ZVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHBhZ2VTdHlsZSkKICAgICAgICAgaWYgKCFw
YXJzZWRSdWxlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChwYXJzZWRSdWxl
LT5zdHlsZSgpID09IHBhZ2VTdHlsZSkgewotICAgICAgICAgICAgaWYgKHBhcnNlZFJ1bGUtPnN0
eWxlKCktPmNzc1RleHQoKSAhPSBwYWdlU3R5bGUtPmNzc1RleHQoKSkKLSAgICAgICAgICAgICAg
ICBpbm5lclNldFN0eWxlVGV4dChwYWdlU3R5bGUsIHBhZ2VTdHlsZS0+Y3NzVGV4dCgpKTsKKyAg
ICAgICAgICAgIGlmIChwYXJzZWRSdWxlLT5zdHlsZSgpLT5jc3NUZXh0KCkgIT0gcGFnZVN0eWxl
LT5jc3NUZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgZGlzYWJsZWQgcHJv
cGVydGllcyBmb3IgdGhlIGludmFsaWQgc3R5bGUgaGVyZS4KKyAgICAgICAgICAgICAgICBtX2lu
c3BlY3RvclN0eWxlcy5yZW1vdmUocGFnZVN0eWxlKTsKKyAgICAgICAgICAgICAgICBzZXRTdHls
ZVRleHQocGFnZVN0eWxlLCBwYWdlU3R5bGUtPmNzc1RleHQoKSk7CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KICAgICBtX2lzUmV2YWxpZGF0aW5n
ID0gZmFsc2U7CiB9CiAKLWJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFRleHQo
U3RyaW5nKiByZXN1bHQpIGNvbnN0Citib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6Om9yaWdpbmFs
U3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHRleHQ7
CiAgICAgYm9vbCBzdWNjZXNzID0gaW5saW5lU3R5bGVTaGVldFRleHQoJnRleHQpOwpAQCAtNDY1
LDcgKzg3MSw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFRleHQoU3Ry
aW5nKiByZXN1bHQpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6cmVzb3VyY2VT
dHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcGFnZVN0
eWxlU2hlZXQpCisgICAgaWYgKCFtX3BhZ2VTdHlsZVNoZWV0IHx8ICFvd25lckRvY3VtZW50KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50OjpyZXNvdXJjZUNvbnRlbnQob3duZXJEb2N1bWVudCgpLT5mcmFtZSgpLCBtX3BhZ2VTdHls
ZVNoZWV0LT5maW5hbFVSTCgpLCByZXN1bHQpOwpAQCAtNTA5LDEyICs5MTUsMTIgQEAgSW5zcGVj
dG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5l
U3R5bGUoY29uc3QgU3RyaW4KICAgICAsIG1fcnVsZVNvdXJjZURhdGEoMCkKIHsKICAgICBBU1NF
UlQoZWxlbWVudCk7CisgICAgbV9pbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVh
dGUoSW5zcGVjdG9yQ29tcG91bmRJZChpZCkuYXBwZW5kUGFydCgiMCIpLCBpbmxpbmVTdHlsZSgp
LCB0aGlzKTsKIH0KIAotYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnNl
dFN0eWxlVGV4dChjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCkKK2Jv
b2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpzZXRTdHlsZVRleHQoQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBBU1NFUlQo
c3R5bGVJZCA9PSAiMCIpOwotICAgIFVOVVNFRF9QQVJBTShzdHlsZUlkKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHN0eWxlLCBzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZSgic3R5bGUiLCB0ZXh0LCBlYyk7
CiAgICAgbV9ydWxlU291cmNlRGF0YS5jbGVhcigpOwpAQCAtNTQxLDYgKzk0NywxMiBAQCBib29s
IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6ZW5zdXJlUGFyc2VkRGF0YVJlYWR5
KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gSW5z
cGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjppbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0
IEluc3BlY3RvckNvbXBvdW5kSWQmIGlkKQoreworICAgIEFTU0VSVF9VTlVTRUQoaWQsIGlkLnBh
cnQoMSkgPT0gIjAiKTsKKyAgICByZXR1cm4gbV9pbnNwZWN0b3JTdHlsZTsKK30KKwogQ1NTU3R5
bGVEZWNsYXJhdGlvbiogSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjppbmxpbmVT
dHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZWxlbWVudC0+c3R5bGUoKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAppbmRleCAzOGFiNzc3Li5lNTBjZDVlIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCkBAIC0yNiwxNiArMjYsMTQgQEAK
ICNkZWZpbmUgSW5zcGVjdG9yU3R5bGVTaGVldF9oCiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eVNv
dXJjZURhdGEuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZh
bHVlcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
Y2xhc3MgUGFyc2VkU3R5bGVTaGVldDsKIApAQCAtNDMsMTMgKzQxLDEwMyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIENTU1J1bGVMaXN0OwogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlv
bjsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEVsZW1lbnQ7
CitjbGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0OwogY2xhc3MgTm9kZTsKIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCiAKK2NsYXNzIEluc3BlY3RvckNvbXBvdW5kSWQgeworcHVibGljOgorICAgIElu
c3BlY3RvckNvbXBvdW5kSWQoKSB7IH0KKyAgICBleHBsaWNpdCBJbnNwZWN0b3JDb21wb3VuZElk
KGNvbnN0IFN0cmluZyYgaWQpCisgICAgeworICAgICAgICBpZC5zcGxpdCgnOicsIG1faWRQYXJ0
cyk7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBwYXJ0KHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IEFTU0VSVChpbmRleCA8IG1faWRQYXJ0cy5zaXplKCkpOyByZXR1cm4gbV9pZFBhcnRzLmF0
KGluZGV4KTsgfQorICAgIHVuc2lnbmVkIHBhcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1faWRQ
YXJ0cy5zaXplKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2lkUGFy
dHMuaXNFbXB0eSgpOyB9CisgICAgSW5zcGVjdG9yQ29tcG91bmRJZCYgYXBwZW5kUGFydChjb25z
dCBTdHJpbmcmIHBhcnQpIHsgbV9pZFBhcnRzLmFwcGVuZChwYXJ0KTsgcmV0dXJuICp0aGlzOyB9
CisgICAgU3RyaW5nIGFzU3RyaW5nKCkgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZyByZXN1
bHQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBtX2lkUGFydHMuc2l6ZSgp
OyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICAg
ICAgcmVzdWx0ICs9ICI6IjsKKyAgICAgICAgICAgIHJlc3VsdCArPSBtX2lkUGFydHMuYXQoaSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgVmVjdG9yPFN0cmluZz4gbV9pZFBhcnRzOworfTsKKworc3RydWN0IEluc3BlY3RvclN0eWxl
UHJvcGVydHkgeworICAgIEluc3BlY3RvclN0eWxlUHJvcGVydHkoKQorICAgIHsKKyAgICB9CisK
KyAgICBJbnNwZWN0b3JTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5U291cmNlRGF0YSBzb3VyY2VE
YXRhLCBib29sIGhhc1NvdXJjZSwgYm9vbCBkaXNhYmxlZCkKKyAgICAgICAgOiBzb3VyY2VEYXRh
KHNvdXJjZURhdGEpCisgICAgICAgICwgaGFzU291cmNlKGhhc1NvdXJjZSkKKyAgICAgICAgLCBk
aXNhYmxlZChkaXNhYmxlZCkKKyAgICB7CisgICAgfQorCisgICAgQ1NTUHJvcGVydHlTb3VyY2VE
YXRhIHNvdXJjZURhdGE7CisgICAgYm9vbCBoYXNTb3VyY2U7CisgICAgYm9vbCBkaXNhYmxlZDsK
KyAgICBTdHJpbmcgcmF3VGV4dDsKK307CisKK2NsYXNzIEluc3BlY3RvclN0eWxlIDogcHVibGlj
IFJlZkNvdW50ZWQ8SW5zcGVjdG9yU3R5bGU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JTdHlsZT4gY3JlYXRlKGNvbnN0IEluc3BlY3RvckNvbXBvdW5kSWQmIHN0
eWxlSWQsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBw
YXJlbnRTdHlsZVNoZWV0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNw
ZWN0b3JTdHlsZShzdHlsZUlkLCBzdHlsZSwgcGFyZW50U3R5bGVTaGVldCkpOworICAgIH0KKwor
ICAgIEluc3BlY3RvclN0eWxlKGNvbnN0IEluc3BlY3RvckNvbXBvdW5kSWQmIHN0eWxlSWQsIENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRTdHls
ZVNoZWV0KQorICAgICAgICA6IG1fc3R5bGVJZChzdHlsZUlkKQorICAgICAgICAsIG1fc3R5bGUo
c3R5bGUpCisgICAgICAgICwgbV9wYXJlbnRTdHlsZVNoZWV0KHBhcmVudFN0eWxlU2hlZXQpCisg
ICAgeworICAgICAgICBBU1NFUlQoc3R5bGUpOworICAgIH0KKworICAgIENTU1N0eWxlRGVjbGFy
YXRpb24qIGNzc1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQorICAgIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclN0eWxlKCkgY29uc3Q7CisgICAgYm9v
bCBoYXNEaXNhYmxlZFByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiAhbV9kaXNhYmxlZFByb3Bl
cnRpZXMuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBzZXRQcm9wZXJ0eVRleHQodW5zaWduZWQgaW5k
ZXgsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUpOworICAgIGJvb2wgdG9nZ2xl
UHJvcGVydHkodW5zaWduZWQgaW5kZXgsIGJvb2wgZGlzYWJsZSk7CisKK3ByaXZhdGU6CisgICAg
c3RhdGljIHVuc2lnbmVkIGRpc2FibGVkSW5kZXhCeU9yZGluYWwodW5zaWduZWQgb3JkaW5hbCwg
Ym9vbCBjYW5Vc2VTdWJzZXF1ZW50LCBWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4mIGFs
bFByb3BlcnRpZXMpOworCisgICAgYm9vbCBzdHlsZVRleHQoU3RyaW5nKiByZXN1bHQpOworICAg
IGJvb2wgZGlzYWJsZVByb3BlcnR5KHVuc2lnbmVkIGluZGV4VG9EaXNhYmxlLCBWZWN0b3I8SW5z
cGVjdG9yU3R5bGVQcm9wZXJ0eT4mIGFsbFByb3BlcnRpZXMpOworICAgIGJvb2wgZW5hYmxlUHJv
cGVydHkodW5zaWduZWQgaW5kZXhUb0VuYWJsZSwgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVy
dHk+JiBhbGxQcm9wZXJ0aWVzKTsKKyAgICBib29sIHBvcHVsYXRlQWxsUHJvcGVydGllcyhWZWN0
b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4qIHJlc3VsdCkgY29uc3Q7CisgICAgdm9pZCBwb3B1
bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoSW5zcGVjdG9yT2JqZWN0KiByZXN1bHQpIGNv
bnN0OworICAgIHZvaWQgc2hpZnREaXNhYmxlZFByb3BlcnRpZXModW5zaWduZWQgZnJvbUluZGV4
LCBsb25nIG9mZnNldCk7CisgICAgYm9vbCByZXBsYWNlUHJvcGVydHlJblN0eWxlVGV4dChjb25z
dCBJbnNwZWN0b3JTdHlsZVByb3BlcnR5JiBwcm9wZXJ0eSwgY29uc3QgU3RyaW5nJiBuZXdUZXh0
KTsKKyAgICBTdHJpbmcgc2hvcnRoYW5kVmFsdWUoY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9w
ZXJ0eSkgY29uc3Q7CisgICAgU3RyaW5nIHNob3J0aGFuZFByaW9yaXR5KGNvbnN0IFN0cmluZyYg
c2hvcnRoYW5kUHJvcGVydHkpIGNvbnN0OworICAgIFZlY3RvcjxTdHJpbmc+IGxvbmdoYW5kUHJv
cGVydGllcyhjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KSBjb25zdDsKKworICAgIElu
c3BlY3RvckNvbXBvdW5kSWQgbV9zdHlsZUlkOworICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIG1f
c3R5bGU7CisgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogbV9wYXJlbnRTdHlsZVNoZWV0OworICAg
IFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiBtX2Rpc2FibGVkUHJvcGVydGllczsKK307
CisKIGNsYXNzIEluc3BlY3RvclN0eWxlU2hlZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0
b3JTdHlsZVNoZWV0PiB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlRGVj
bGFyYXRpb24qLCBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+ID4gSW5zcGVjdG9yU3R5bGVNYXA7CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gY3JlYXRlKGNvbnN0IFN0
cmluZyYgaWQsIENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBjb25zdCBTdHJpbmcmIG9y
aWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCkKICAgICB7CiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSW5zcGVjdG9yU3R5bGVTaGVldChpZCwgcGFnZVN0eWxlU2hlZXQsIG9yaWdp
biwgZG9jdW1lbnRVUkwpKTsKQEAgLTYxLDQ2ICsxNDksNTUgQEAgcHVibGljOgogICAgIGNvbnN0
IFN0cmluZyYgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAgICAgQ1NTU3R5bGVTaGVldCog
cGFnZVN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VTdHlsZVNoZWV0OyB9CiAgICAg
Ym9vbCBzZXRUZXh0KGNvbnN0IFN0cmluZyYpOwotICAgIGJvb2wgc2V0UnVsZVNlbGVjdG9yKGNv
bnN0IFN0cmluZyYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKTsKKyAgICBib29sIHNl
dFJ1bGVTZWxlY3Rvcihjb25zdCBJbnNwZWN0b3JDb21wb3VuZElkJiwgY29uc3QgU3RyaW5nJiBz
ZWxlY3Rvcik7CiAgICAgQ1NTU3R5bGVSdWxlKiBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IpOwotICAgIENTU1N0eWxlUnVsZSogcnVsZUZvcklkKGNvbnN0IFN0cmluZyYpIGNvbnN0Owor
ICAgIENTU1N0eWxlUnVsZSogcnVsZUZvcklkKGNvbnN0IEluc3BlY3RvckNvbXBvdW5kSWQmKSBj
b25zdDsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTdHls
ZVNoZWV0KCk7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9y
UnVsZShDU1NTdHlsZVJ1bGUqKTsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVp
bGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7Ci0gICAgdmlydHVhbCBDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZUZvcklkKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBzZXRTdHlsZVRleHQoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCBjb25zdCBTdHJp
bmcmIHRleHQpOworICAgIGJvb2wgc2V0UHJvcGVydHlUZXh0KGNvbnN0IEluc3BlY3RvckNvbXBv
dW5kSWQmLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wg
b3ZlcndyaXRlKTsKKyAgICBib29sIHRvZ2dsZVByb3BlcnR5KGNvbnN0IEluc3BlY3RvckNvbXBv
dW5kSWQmLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUpOworCisgICAgdmly
dHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNvbXBv
dW5kSWQmKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIGJvb2wgY2FuQmluZCgpIGNvbnN0IHsg
cmV0dXJuIG1fb3JpZ2luICE9ICJ1c2VyQWdlbnQiICYmIG1fb3JpZ2luICE9ICJ1c2VyIjsgfQot
ICAgIFN0cmluZyBmdWxsUnVsZU9yU3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkg
Y29uc3QgeyByZXR1cm4gaWQoKSArICI6IiArIHJ1bGVPclN0eWxlSWQoc3R5bGUpOyB9Ci0gICAg
U3RyaW5nIHJ1bGVPclN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0IHsg
dW5zaWduZWQgaW5kZXggPSBydWxlSW5kZXhCeVN0eWxlKHN0eWxlKTsgcmV0dXJuIGluZGV4ID09
IFVJTlRfTUFYID8gIiIgOiBTdHJpbmc6Om51bWJlcihpbmRleCk7IH0KKyAgICBJbnNwZWN0b3JD
b21wb3VuZElkIHJ1bGVPclN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0
OwogICAgIHZpcnR1YWwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgcnVsZUluZGV4
QnlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGVu
c3VyZVBhcnNlZERhdGFSZWFkeSgpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbnNwZWN0b3JT
dHlsZT4gaW5zcGVjdG9yU3R5bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDb21wb3VuZElkJik7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbWVtYmVySW5zcGVjdG9yU3R5bGUoUmVmUHRyPEluc3BlY3RvclN0
eWxlPiBpbnNwZWN0b3JTdHlsZSk7CisgICAgdmlydHVhbCB2b2lkIGZvcmdldEluc3BlY3RvclN0
eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKTsKKworICAgIC8vIEFsc28gYWNjZXNzZWQg
YnkgZnJpZW5kIGNsYXNzIEluc3BlY3RvclN0eWxlLgorICAgIHZpcnR1YWwgYm9vbCBzZXRTdHls
ZVRleHQoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYpOwogCiBwcml2YXRlOgog
ICAgIGJvb2wgdGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7CiAgICAgYm9vbCBlbnN1cmVUZXh0
KCkgY29uc3Q7CiAgICAgYm9vbCBlbnN1cmVTb3VyY2VEYXRhKE5vZGUqIG93bmVyTm9kZSk7Ci0g
ICAgdm9pZCBpbm5lclNldFN0eWxlU2hlZXRUZXh0KGNvbnN0IFN0cmluZyYgbmV3VGV4dCk7Ci0g
ICAgYm9vbCBpbm5lclNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3Ry
aW5nJik7CiAgICAgYm9vbCBzdHlsZVNoZWV0VGV4dFdpdGhDaGFuZ2VkU3R5bGUoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgbmV3U3R5bGVUZXh0LCBTdHJpbmcqIHJlc3VsdCk7
CiAgICAgQ1NTU3R5bGVSdWxlKiBmaW5kUGFnZVJ1bGVXaXRoU3R5bGUoQ1NTU3R5bGVEZWNsYXJh
dGlvbiopOwotICAgIFN0cmluZyBmdWxsUnVsZUlkKENTU1N0eWxlUnVsZSogcnVsZSkgY29uc3Q7
Ci0gICAgU3RyaW5nIGZ1bGxTdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25z
dCB7IHJldHVybiBmdWxsUnVsZU9yU3R5bGVJZChzdHlsZSk7IH0KKyAgICBJbnNwZWN0b3JDb21w
b3VuZElkIHJ1bGVJZChDU1NTdHlsZVJ1bGUqIHJ1bGUpIGNvbnN0OworICAgIEluc3BlY3RvckNv
bXBvdW5kSWQgc3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyByZXR1
cm4gcnVsZU9yU3R5bGVJZChzdHlsZSk7IH0KICAgICB2b2lkIHJldmFsaWRhdGVTdHlsZShDU1NT
dHlsZURlY2xhcmF0aW9uKik7Ci0gICAgYm9vbCBzdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3Vs
dCkgY29uc3Q7CisgICAgYm9vbCBvcmlnaW5hbFN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0
KSBjb25zdDsKICAgICBib29sIHJlc291cmNlU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1bHQp
IGNvbnN0OwogICAgIGJvb2wgaW5saW5lU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNv
bnN0OwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JSdWxlTGlz
dChDU1NSdWxlTGlzdCopOwogCisKICAgICBTdHJpbmcgbV9pZDsKICAgICBDU1NTdHlsZVNoZWV0
KiBtX3BhZ2VTdHlsZVNoZWV0OwogICAgIFN0cmluZyBtX29yaWdpbjsKICAgICBTdHJpbmcgbV9k
b2N1bWVudFVSTDsKICAgICBib29sIG1faXNSZXZhbGlkYXRpbmc7CiAgICAgUGFyc2VkU3R5bGVT
aGVldCogbV9wYXJzZWRTdHlsZVNoZWV0OworICAgIEluc3BlY3RvclN0eWxlTWFwIG1faW5zcGVj
dG9yU3R5bGVzOworCisgICAgZnJpZW5kIGNsYXNzIEluc3BlY3RvclN0eWxlOwogfTsKIAogY2xh
c3MgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlIDogcHVibGljIEluc3BlY3RvclN0
eWxlU2hlZXQgewpAQCAtMTExLDE0ICsyMDgsMTkgQEAgcHVibGljOgogICAgIH0KIAogICAgIElu
c3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShjb25zdCBTdHJpbmcmIGlkLCBFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIG9yaWdpbik7Ci0gICAgdmlydHVhbCBDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZUZvcklkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0IHsgQVNTRVJUKGlk
ID09ICIwIik7IFVOVVNFRF9QQVJBTShpZCk7IHJldHVybiBpbmxpbmVTdHlsZSgpOyB9Ci0gICAg
dmlydHVhbCBib29sIHNldFN0eWxlVGV4dChjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGNvbnN0IFN0
cmluZyYgdGV4dCk7CisgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZUZvcklk
KGNvbnN0IEluc3BlY3RvckNvbXBvdW5kSWQmIGlkKSBjb25zdCB7IEFTU0VSVF9VTlVTRUQoaWQs
IGlkLnBhcnQoMSkgPT0gIjAiKTsgcmV0dXJuIGlubGluZVN0eWxlKCk7IH0KIAogcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0IHsgQVNTRVJUKHN0eWxlID09IGlubGluZVN0eWxlKCkp
OyBVTlVTRURfUEFSQU0oc3R5bGUpOyByZXR1cm4gbV9ydWxlU291cmNlRGF0YTsgfQorICAgIHZp
cnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUZvcihDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyBBU1NFUlRfVU5VU0VEKHN0eWxlLCBzdHlsZSA9
PSBpbmxpbmVTdHlsZSgpKTsgcmV0dXJuIG1fcnVsZVNvdXJjZURhdGE7IH0KICAgICB2aXJ0dWFs
IHVuc2lnbmVkIHJ1bGVJbmRleEJ5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0IHsg
cmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCk7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZUZvcklk
KGNvbnN0IEluc3BlY3RvckNvbXBvdW5kSWQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtZW1iZXJJ
bnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+KSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZm9yZ2V0SW5zcGVjdG9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopIHsgfQorCisgICAg
Ly8gQWxzbyBhY2Nlc3NlZCBieSBmcmllbmQgY2xhc3MgSW5zcGVjdG9yU3R5bGUuCisgICAgdmly
dHVhbCBib29sIHNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5n
Jik7CiAKIHByaXZhdGU6CiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lU3R5bGUoKSBj
b25zdDsKQEAgLTEyNiw2ICsyMjgsNyBAQCBwcml2YXRlOgogCiAgICAgRWxlbWVudCogbV9lbGVt
ZW50OwogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gbV9ydWxlU291cmNlRGF0YTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IG1faW5zcGVjdG9yU3R5bGU7CiB9OwogCiAjZW5kaWYK
</data>
<flag name="review"
          id="61641"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>