<?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>137286</bug_id>
          
          <creation_ts>2014-09-30 21:47:09 -0700</creation_ts>
          <short_desc>Use is&lt;&gt;() / downcast&lt;&gt;() for Accessibility objects</short_desc>
          <delta_ts>2014-10-20 12:08:46 -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>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>137056</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1038456</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-30 21:47:09 -0700</bug_when>
    <thetext>Use is&lt;&gt;() / downcast&lt;&gt;() for Accessibility objects</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038457</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-09-30 21:47:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/18510859&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038462</commentid>
    <comment_count>2</comment_count>
      <attachid>238998</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-30 22:18:10 -0700</bug_when>
    <thetext>Created attachment 238998
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038463</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-30 22:19:41 -0700</bug_when>
    <thetext>Attachment 238998 did not pass style-queue:


ERROR: Source/WebCore/accessibility/AccessibilityListBox.cpp:101:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/accessibility/AccessibilityARIAGrid.cpp:58:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/accessibility/AccessibilityARIAGrid.cpp:62:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 3 in 52 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>1038476</commentid>
    <comment_count>4</comment_count>
      <attachid>238998</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-09-30 22:55:16 -0700</bug_when>
    <thetext>Comment on attachment 238998
Patch

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

Are we really doing this? 
This: is&lt;AccessibilityRenderObject&gt;(obj) does not seem like a nice thing to look at or to read

&gt; Source/WebCore/accessibility/AccessibilityListBox.cpp:-101
&gt; -        if (obj-&gt;roleValue() != ListBoxOptionRole)

I don&apos;t believe that obj-&gt;roleValue() != ListBoxOptionRole is equivalent to is&lt;AccessibilityListBoxOption&gt;(*child)

&gt; Source/WebCore/accessibility/AccessibilityListBox.cpp:138
&gt; +    if (!element || is&lt;HTMLHRElement&gt;(element))

are these things equivalent? it&apos;s not clear that they are.

&gt; Source/WebCore/accessibility/AccessibilityObject.h:1011
&gt; +    static bool isType(const WebCore::AccessibilityObject&amp; object) { return object.predicate; } \

any thoughts to making this inline?

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:2395
&gt; +    if (is&lt;AccessibilitySpinButton&gt;(m_object)) {

are these equivalent? at first glance the naming to me says no

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:2559
&gt;      if (m_object-&gt;isAccessibilityTable()) {

don&apos;t you want to to the is&lt;&gt; check here

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:3297
&gt; +        if (!array || !is&lt;AccessibilityListBox&gt;(m_object))

don&apos;t know if this is equivalent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038569</commentid>
    <comment_count>5</comment_count>
      <attachid>238998</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-01 09:34:46 -0700</bug_when>
    <thetext>Comment on attachment 238998
Patch

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

&gt;&gt; Source/WebCore/accessibility/AccessibilityListBox.cpp:-101
&gt;&gt; -        if (obj-&gt;roleValue() != ListBoxOptionRole)
&gt; 
&gt; I don&apos;t believe that obj-&gt;roleValue() != ListBoxOptionRole is equivalent to is&lt;AccessibilityListBoxOption&gt;(*child)

AccessibilityListBoxOption::roleValue() seems to be the only override returning ListBoxOptionRole. Am I missing something? Can an object that is not AccessibilityListBoxOption have roleValue() return ListBoxOptionRole somehow?
We are casting to a AccessibilityListBoxOption below so I guess this is not possible.

&gt;&gt; Source/WebCore/accessibility/AccessibilityListBox.cpp:138
&gt;&gt; +    if (!element || is&lt;HTMLHRElement&gt;(element))
&gt; 
&gt; are these things equivalent? it&apos;s not clear that they are.

Yes, this is equivalent.

&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.h:1011
&gt;&gt; +    static bool isType(const WebCore::AccessibilityObject&amp; object) { return object.predicate; } \
&gt; 
&gt; any thoughts to making this inline?

What do you mean? This should be inline already since the implementation is inside the class body (isTyoe() is a private member function).

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:-153
&gt; -    if (coreSelection-&gt;isListBox() || coreSelection-&gt;isMenuList()) {

I believe this check was incorrect. if isMenuList() returns true, then we have an AccessibilityMenuList, and it cannot be casted into an AccessibilityListBox. So the cast below would be unsafe. This looks more obvious with the new checks:
if (is&lt;AccessibilityListBox&gt;(coreSelection) || is&lt;AccessibilityMenuList&gt;(coreSelection))
    downcast&lt;AccessibilityListBox&gt;(coreSelection)-&gt;doSomething();

&gt;&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:2395
&gt;&gt; +    if (is&lt;AccessibilitySpinButton&gt;(m_object)) {
&gt; 
&gt; are these equivalent? at first glance the naming to me says no

The type cast macro was &quot;ACCESSIBILITY_OBJECT_TYPE_CASTS(AccessibilitySpinButton, isNativeSpinButton())&quot; so we were checking that is object.isNativeSpinButton(), then we could cast to a AccessibilitySpinButton. Am I missing something?

&gt;&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:2559
&gt;&gt;      if (m_object-&gt;isAccessibilityTable()) {
&gt; 
&gt; don&apos;t you want to to the is&lt;&gt; check here

isAccessibilityTable() is stricter than is&lt;AccessibilityTable&gt;(). is&lt;AccessibilityTable&gt;() is equivalent to isTable(). This part isn&apos;t nice yet but could be solved though refactoring. Ideally, this would be something like is&lt;AccessibilityTable&gt;(m_object) &amp;&amp; downcast&lt;AccessibilityTable&gt;(*m_object).renderer(), or something similar. Right now, I think the isTable() / isAccessibilityTable() distinction is a bit confusing.

&gt;&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:3297
&gt;&gt; +        if (!array || !is&lt;AccessibilityListBox&gt;(m_object))
&gt; 
&gt; don&apos;t know if this is equivalent

I believe it is until I am missing something. I also think it is clearer to have an is&lt;X&gt;() before a downcast&lt;X&gt;(), like we have here. This 1-1 mapping avoids mistakes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040316</commentid>
    <comment_count>6</comment_count>
      <attachid>238998</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-10-08 09:46:01 -0700</bug_when>
    <thetext>Comment on attachment 238998
Patch

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

&gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityListBox.cpp:-101
&gt;&gt;&gt; -        if (obj-&gt;roleValue() != ListBoxOptionRole)
&gt;&gt; 
&gt;&gt; I don&apos;t believe that obj-&gt;roleValue() != ListBoxOptionRole is equivalent to is&lt;AccessibilityListBoxOption&gt;(*child)
&gt; 
&gt; AccessibilityListBoxOption::roleValue() seems to be the only override returning ListBoxOptionRole. Am I missing something? Can an object that is not AccessibilityListBoxOption have roleValue() return ListBoxOptionRole somehow?
&gt; We are casting to a AccessibilityListBoxOption below so I guess this is not possible.

It looks like if you use an aria role of role=&quot;option&quot; the role can be ListBoxOptionRole, which might not be a AccessibilityListBoxOption from what I can tell.

&gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.h:1011
&gt;&gt;&gt; +    static bool isType(const WebCore::AccessibilityObject&amp; object) { return object.predicate; } \
&gt;&gt; 
&gt;&gt; any thoughts to making this inline?
&gt; 
&gt; What do you mean? This should be inline already since the implementation is inside the class body (isTyoe() is a private member function).

ok

&gt;&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:-153
&gt;&gt; -    if (coreSelection-&gt;isListBox() || coreSelection-&gt;isMenuList()) {
&gt; 
&gt; I believe this check was incorrect. if isMenuList() returns true, then we have an AccessibilityMenuList, and it cannot be casted into an AccessibilityListBox. So the cast below would be unsafe. This looks more obvious with the new checks:
&gt; if (is&lt;AccessibilityListBox&gt;(coreSelection) || is&lt;AccessibilityMenuList&gt;(coreSelection))
&gt;     downcast&lt;AccessibilityListBox&gt;(coreSelection)-&gt;doSomething();

Not sure what the intention was here but your assessment seems correct

&gt;&gt;&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:2395
&gt;&gt;&gt; +    if (is&lt;AccessibilitySpinButton&gt;(m_object)) {
&gt;&gt; 
&gt;&gt; are these equivalent? at first glance the naming to me says no
&gt; 
&gt; The type cast macro was &quot;ACCESSIBILITY_OBJECT_TYPE_CASTS(AccessibilitySpinButton, isNativeSpinButton())&quot; so we were checking that is object.isNativeSpinButton(), then we could cast to a AccessibilitySpinButton. Am I missing something?

Ok thanks for double checking. Poorly named classes and functions I guess

&gt;&gt;&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:2559
&gt;&gt;&gt;      if (m_object-&gt;isAccessibilityTable()) {
&gt;&gt; 
&gt;&gt; don&apos;t you want to to the is&lt;&gt; check here
&gt; 
&gt; isAccessibilityTable() is stricter than is&lt;AccessibilityTable&gt;(). is&lt;AccessibilityTable&gt;() is equivalent to isTable(). This part isn&apos;t nice yet but could be solved though refactoring. Ideally, this would be something like is&lt;AccessibilityTable&gt;(m_object) &amp;&amp; downcast&lt;AccessibilityTable&gt;(*m_object).renderer(), or something similar. Right now, I think the isTable() / isAccessibilityTable() distinction is a bit confusing.

Agreed it&apos;s a bit too confusing now

&gt;&gt;&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:3297
&gt;&gt;&gt; +        if (!array || !is&lt;AccessibilityListBox&gt;(m_object))
&gt;&gt; 
&gt;&gt; don&apos;t know if this is equivalent
&gt; 
&gt; I believe it is until I am missing something. I also think it is clearer to have an is&lt;X&gt;() before a downcast&lt;X&gt;(), like we have here. This 1-1 mapping avoids mistakes.

ok thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042734</commentid>
    <comment_count>7</comment_count>
      <attachid>240099</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-19 22:15:44 -0700</bug_when>
    <thetext>Created attachment 240099
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042737</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-19 22:18:08 -0700</bug_when>
    <thetext>Attachment 240099 did not pass style-queue:


ERROR: Source/WebCore/accessibility/AccessibilityARIAGrid.cpp:58:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/accessibility/AccessibilityARIAGrid.cpp:62:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 2 in 53 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>1042836</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-20 09:34:50 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Are we really doing this? 
&gt; This: is&lt;AccessibilityRenderObject&gt;(obj) does not seem like a nice thing to
&gt; look at or to read

Chris F, did you talk to the Chris D about this basic question?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042840</commentid>
    <comment_count>10</comment_count>
      <attachid>240099</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-20 09:45:56 -0700</bug_when>
    <thetext>Comment on attachment 240099
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityARIAGrid.cpp:63
&gt; -    if (!child || (!child-&gt;isTableRow() &amp;&amp; child-&gt;ariaRoleAttribute() != RowRole))
&gt; +    if (!child || (!is&lt;AccessibilityTableRow&gt;(*child) &amp;&amp; child-&gt;ariaRoleAttribute() != RowRole))
&gt;          return false;
&gt;          
&gt; -    AccessibilityTableRow* row = toAccessibilityTableRow(child);
&gt; -    if (appendedRows.contains(row))
&gt; +    auto&amp; row = downcast&lt;AccessibilityTableRow&gt;(*child);
&gt; +    if (appendedRows.contains(&amp;row))
&gt;          return false;

I don’t understand the relationship of the if statement to the code below. As currently written, if a non-AccessibilityTableRow child has an ariaRoleAttribute of RowRole, it looks like we will cast incorrectly.

&gt; Source/WebCore/accessibility/AccessibilityARIAGridCell.cpp:58
&gt;      if (parent-&gt;isAccessibilityTable())

It’s irritating that callsites like this one can’t change to is&lt;AccessibilityTable&gt;. That’s because this also checks if there is a renderer, I believe. Yet that is not at all clear from the name. I think this needs work; it’s not good to have a name like this with hidden extra behavior. It’s also not good that all the callers have to do a downcast in a non-obviously-correct way.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2841
&gt; +    // FIXME: We should use is&lt;&gt;() / downcast&lt;&gt;() for SpinButtonElement.

I agree about downcast&lt;&gt;. I’m not sure why you mention is&lt;&gt;?

&gt; Source/WebCore/accessibility/AccessibilityTable.h:78
&gt; +    // isAccessibilityTable is whether it is exposed as an AccessibilityTable to the platform.

This comment was already a bit confusing, but even more so now that it’s not in context with isTable and isDataTable below. What can we do to mitigate that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042842</commentid>
    <comment_count>11</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-10-20 09:47:12 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #4)
&gt; &gt; Are we really doing this? 
&gt; &gt; This: is&lt;AccessibilityRenderObject&gt;(obj) does not seem like a nice thing to
&gt; &gt; look at or to read
&gt; 
&gt; Chris F, did you talk to the Chris D about this basic question?

It looks like the ship has sailed, so I&apos;m on board if WebKit is going in this direction.

There&apos;s still some minor coding fixes that I&apos;d like to see made before this lands (plus its failing style checker)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042849</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-20 09:59:09 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; Are we really doing this? 
&gt; &gt; &gt; This: is&lt;AccessibilityRenderObject&gt;(obj) does not seem like a nice thing to
&gt; &gt; &gt; look at or to read
&gt; &gt; 
&gt; &gt; Chris F, did you talk to the Chris D about this basic question?
&gt; 
&gt; It looks like the ship has sailed, so I&apos;m on board if WebKit is going in
&gt; this direction.
&gt; 
&gt; There&apos;s still some minor coding fixes that I&apos;d like to see made before this
&gt; lands (plus its failing style checker)

Sure, please let me know which fixes I should do. Regarding the style checker, I believe it is confused in this case as my code style seems correct to the best of my knowledge. It is complaining about multi-line controls even though they are really single-line ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042865</commentid>
    <comment_count>13</comment_count>
      <attachid>240099</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-20 10:24:51 -0700</bug_when>
    <thetext>Comment on attachment 240099
Patch

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

&gt;&gt; Source/WebCore/accessibility/AccessibilityARIAGrid.cpp:63
&gt;&gt;          return false;
&gt; 
&gt; I don’t understand the relationship of the if statement to the code below. As currently written, if a non-AccessibilityTableRow child has an ariaRoleAttribute of RowRole, it looks like we will cast incorrectly.

Yes, the cast does look unsafe but I will look further into it.

&gt;&gt; Source/WebCore/accessibility/AccessibilityARIAGridCell.cpp:58
&gt;&gt;      if (parent-&gt;isAccessibilityTable())
&gt; 
&gt; It’s irritating that callsites like this one can’t change to is&lt;AccessibilityTable&gt;. That’s because this also checks if there is a renderer, I believe. Yet that is not at all clear from the name. I think this needs work; it’s not good to have a name like this with hidden extra behavior. It’s also not good that all the callers have to do a downcast in a non-obviously-correct way.

Yes, I am planning to refactor this further as discussed earlier with Chris F. Basically, I&apos;d like to make this: &quot;if (is&lt;AccessibilityTable&gt;(*parent) &amp;&amp; downcast&lt;AccessibilityTable&gt;(*parent).renderer())&quot;. It is admittedly longer but it is clearer IMHO. I was hoping to do this in a follow-up patch if that&apos;s OK for everyone.

&gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2841
&gt;&gt; +    // FIXME: We should use is&lt;&gt;() / downcast&lt;&gt;() for SpinButtonElement.
&gt; 
&gt; I agree about downcast&lt;&gt;. I’m not sure why you mention is&lt;&gt;?

Because there is a spinButtonElement-&gt;isSpinButtonElement() 2 lines above that would need to be replaced with an is&lt;&gt;().

&gt;&gt; Source/WebCore/accessibility/AccessibilityTable.h:78
&gt;&gt; +    // isAccessibilityTable is whether it is exposed as an AccessibilityTable to the platform.
&gt; 
&gt; This comment was already a bit confusing, but even more so now that it’s not in context with isTable and isDataTable below. What can we do to mitigate that?

I am planning to get rid of this method as it is confusing (see comment above).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042866</commentid>
    <comment_count>14</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-10-20 10:25:44 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; &gt; Are we really doing this? 
&gt; &gt; &gt; &gt; This: is&lt;AccessibilityRenderObject&gt;(obj) does not seem like a nice thing to
&gt; &gt; &gt; &gt; look at or to read
&gt; &gt; &gt; 
&gt; &gt; &gt; Chris F, did you talk to the Chris D about this basic question?
&gt; &gt; 
&gt; &gt; It looks like the ship has sailed, so I&apos;m on board if WebKit is going in
&gt; &gt; this direction.
&gt; &gt; 
&gt; &gt; There&apos;s still some minor coding fixes that I&apos;d like to see made before this
&gt; &gt; lands (plus its failing style checker)
&gt; 
&gt; Sure, please let me know which fixes I should do. Regarding the style
&gt; checker, I believe it is confused in this case as my code style seems
&gt; correct to the best of my knowledge. It is complaining about multi-line
&gt; controls even though they are really single-line ones.

I think the ListBoxOptionRole code is the primary concern

------------------------
&gt; AccessibilityListBoxOption::roleValue() seems to be the only override returning ListBoxOptionRole. Am I missing something? Can an object that is not AccessibilityListBoxOption have roleValue() return ListBoxOptionRole somehow?
&gt; We are casting to a AccessibilityListBoxOption below so I guess this is not possible.

It looks like if you use an aria role of role=&quot;option&quot; the role can be ListBoxOptionRole, which might not be a AccessibilityListBoxOption from what I can tell.
--------------------</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042872</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-20 10:35:45 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; &gt; &gt; Are we really doing this? 
&gt; &gt; &gt; &gt; &gt; This: is&lt;AccessibilityRenderObject&gt;(obj) does not seem like a nice thing to
&gt; &gt; &gt; &gt; &gt; look at or to read
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Chris F, did you talk to the Chris D about this basic question?
&gt; &gt; &gt; 
&gt; &gt; &gt; It looks like the ship has sailed, so I&apos;m on board if WebKit is going in
&gt; &gt; &gt; this direction.
&gt; &gt; &gt; 
&gt; &gt; &gt; There&apos;s still some minor coding fixes that I&apos;d like to see made before this
&gt; &gt; &gt; lands (plus its failing style checker)
&gt; &gt; 
&gt; &gt; Sure, please let me know which fixes I should do. Regarding the style
&gt; &gt; checker, I believe it is confused in this case as my code style seems
&gt; &gt; correct to the best of my knowledge. It is complaining about multi-line
&gt; &gt; controls even though they are really single-line ones.
&gt; 
&gt; I think the ListBoxOptionRole code is the primary concern
&gt; 
&gt; ------------------------
&gt; &gt; AccessibilityListBoxOption::roleValue() seems to be the only override returning ListBoxOptionRole. Am I missing something? Can an object that is not AccessibilityListBoxOption have roleValue() return ListBoxOptionRole somehow?
&gt; &gt; We are casting to a AccessibilityListBoxOption below so I guess this is not possible.
&gt; 
&gt; It looks like if you use an aria role of role=&quot;option&quot; the role can be
&gt; ListBoxOptionRole, which might not be a AccessibilityListBoxOption from what
&gt; I can tell.
&gt; --------------------

Chris, are you referring to the older patch? In my latest patch, I have been a lot more conservative, and AFAIK I haven&apos;t replaces any role check by is&lt;&gt;() checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042873</commentid>
    <comment_count>16</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-10-20 10:37:52 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; &gt; &gt; &gt; Are we really doing this? 
&gt; &gt; &gt; &gt; &gt; &gt; This: is&lt;AccessibilityRenderObject&gt;(obj) does not seem like a nice thing to
&gt; &gt; &gt; &gt; &gt; &gt; look at or to read
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Chris F, did you talk to the Chris D about this basic question?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; It looks like the ship has sailed, so I&apos;m on board if WebKit is going in
&gt; &gt; &gt; &gt; this direction.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; There&apos;s still some minor coding fixes that I&apos;d like to see made before this
&gt; &gt; &gt; &gt; lands (plus its failing style checker)
&gt; &gt; &gt; 
&gt; &gt; &gt; Sure, please let me know which fixes I should do. Regarding the style
&gt; &gt; &gt; checker, I believe it is confused in this case as my code style seems
&gt; &gt; &gt; correct to the best of my knowledge. It is complaining about multi-line
&gt; &gt; &gt; controls even though they are really single-line ones.
&gt; &gt; 
&gt; &gt; I think the ListBoxOptionRole code is the primary concern
&gt; &gt; 
&gt; &gt; ------------------------
&gt; &gt; &gt; AccessibilityListBoxOption::roleValue() seems to be the only override returning ListBoxOptionRole. Am I missing something? Can an object that is not AccessibilityListBoxOption have roleValue() return ListBoxOptionRole somehow?
&gt; &gt; &gt; We are casting to a AccessibilityListBoxOption below so I guess this is not possible.
&gt; &gt; 
&gt; &gt; It looks like if you use an aria role of role=&quot;option&quot; the role can be
&gt; &gt; ListBoxOptionRole, which might not be a AccessibilityListBoxOption from what
&gt; &gt; I can tell.
&gt; &gt; --------------------
&gt; 
&gt; Chris, are you referring to the older patch? In my latest patch, I have been
&gt; a lot more conservative, and AFAIK I haven&apos;t replaces any role check by
&gt; is&lt;&gt;() checks.

Ah, I didn&apos;t realize obsolete patches are hidden by default.. I hadn&apos;t seen the new patch go up. yea looks ok
thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042874</commentid>
    <comment_count>17</comment_count>
      <attachid>240099</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-20 10:39:09 -0700</bug_when>
    <thetext>Comment on attachment 240099
Patch

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

&gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityARIAGrid.cpp:63
&gt;&gt;&gt;          return false;
&gt;&gt; 
&gt;&gt; I don’t understand the relationship of the if statement to the code below. As currently written, if a non-AccessibilityTableRow child has an ariaRoleAttribute of RowRole, it looks like we will cast incorrectly.
&gt; 
&gt; Yes, the cast does look unsafe but I will look further into it.

Chris F, any thought about this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042878</commentid>
    <comment_count>18</comment_count>
      <attachid>240099</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-20 10:49:27 -0700</bug_when>
    <thetext>Comment on attachment 240099
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityARIAGrid.cpp:58
&gt; +    if (!child || (!is&lt;AccessibilityTableRow&gt;(*child) &amp;&amp; child-&gt;ariaRoleAttribute() != RowRole))

It seems ariaRoleAttribute() can only return RowRole if the object is a AccessibilityTableRow, so the cast below is safe. However, I don&apos;t think we can replace this with a is&lt;AccessibilityTableRow&gt;() because not all AccessibilityTableRow objects have RowRole as ariaRoleAttribute().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042879</commentid>
    <comment_count>19</comment_count>
      <attachid>240099</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-10-20 10:50:03 -0700</bug_when>
    <thetext>Comment on attachment 240099
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityARIAGrid.cpp:63
&gt;&gt;&gt;&gt;          return false;
&gt;&gt;&gt; 
&gt;&gt;&gt; I don’t understand the relationship of the if statement to the code below. As currently written, if a non-AccessibilityTableRow child has an ariaRoleAttribute of RowRole, it looks like we will cast incorrectly.
&gt;&gt; 
&gt;&gt; Yes, the cast does look unsafe but I will look further into it.
&gt; 
&gt; Chris F, any thought about this?

I think if an object has an ARIA role of Row, we are assuming that we&apos;ll be guaranteed to be an AccessibilityARIAGridRow, which is a sub-class of AccessibilityTableRow.
I think that&apos;s generally a safe assumption to make, but its not very clear.

the case this is trying to protect against I think is where the object is an AccessibilityTableRow, but its roleValue() is something different.

This might be better to write as

|| (!is&lt;AccessibilityTableRow&gt;(*child) &amp;&amp; !is&lt;AccessibilityARIAGridRow&gt;(*child))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042893</commentid>
    <comment_count>20</comment_count>
      <attachid>240131</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-20 11:25:12 -0700</bug_when>
    <thetext>Created attachment 240131
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042894</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-20 11:25:58 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Comment on attachment 240099 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=240099&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityARIAGrid.cpp:63
&gt; &gt;&gt;&gt;&gt;          return false;
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; I don’t understand the relationship of the if statement to the code below. As currently written, if a non-AccessibilityTableRow child has an ariaRoleAttribute of RowRole, it looks like we will cast incorrectly.
&gt; &gt;&gt; 
&gt; &gt;&gt; Yes, the cast does look unsafe but I will look further into it.
&gt; &gt; 
&gt; &gt; Chris F, any thought about this?
&gt; 
&gt; I think if an object has an ARIA role of Row, we are assuming that we&apos;ll be
&gt; guaranteed to be an AccessibilityARIAGridRow, which is a sub-class of
&gt; AccessibilityTableRow.
&gt; I think that&apos;s generally a safe assumption to make, but its not very clear.
&gt; 
&gt; the case this is trying to protect against I think is where the object is an
&gt; AccessibilityTableRow, but its roleValue() is something different.
&gt; 
&gt; This might be better to write as
&gt; 
&gt; || (!is&lt;AccessibilityTableRow&gt;(*child) &amp;&amp;
&gt; !is&lt;AccessibilityARIAGridRow&gt;(*child))

Ok, I made this change before landing, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042895</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-20 11:26:56 -0700</bug_when>
    <thetext>Attachment 240131 did not pass style-queue:


ERROR: Source/WebCore/accessibility/AccessibilityARIAGrid.cpp:58:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/accessibility/AccessibilityARIAGrid.cpp:62:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 2 in 53 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>1042915</commentid>
    <comment_count>23</comment_count>
      <attachid>240131</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-20 12:08:40 -0700</bug_when>
    <thetext>Comment on attachment 240131
Patch

Clearing flags on attachment: 240131

Committed r174898: &lt;http://trac.webkit.org/changeset/174898&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042916</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-20 12:08:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238998</attachid>
            <date>2014-09-30 22:18:10 -0700</date>
            <delta_ts>2014-10-19 22:15:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137286-20140930221810.patch</filename>
            <type>text/plain</type>
            <size>95121</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk2OTAzODk2NDNhZjE3
MzdjNWZiMmQwMzBkZmUxMzZmMjA1YWM5ZS4uYTlhMjFlZTJlZGIzZDM0ZGZlYmVmNmFkMzI3Mzlk
MjgxMTMxNzk4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNCBAQAorMjAxNC0wOS0zMCAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgQWNjZXNzaWJpbGl0eSBvYmplY3RzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyODYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8Pigp
IGZvciBBY2Nlc3NpYmlsaXR5IG9iamVjdHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBi
ZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6Zm9jdXNlZEltYWdlTWFwVUlF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5vdGlmaWNhdGlvblBv
c3RUaW1lckZpcmVkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklB
R3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZFRh
YmxlQ2VsbENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZDo6
YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFH
cmlkQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxs
OjpwYXJlbnRUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRD
ZWxsOjpyb3dJbmRleFJhbmdlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlBUklBR3JpZFJvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdy
aWRSb3c6OmRpc2Nsb3NlZFJvd3MpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFS
SUFHcmlkUm93OjpkaXNjbG9zZWRCeVJvdyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5QVJJQUdyaWRSb3c6OnBhcmVudFRhYmxlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlBUklBR3JpZFJvdy5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eUltYWdlTWFwTGluay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
SW1hZ2VNYXBMaW5rOjppbWFnZU1hcExpbmtSZW5kZXJlcik6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TGlzdC5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3g6
OnNldFNlbGVjdGVkQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxp
c3RCb3g6OnNlbGVjdGVkQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eUxpc3RCb3g6Omxpc3RCb3hPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94Lmg6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5oOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlNZW51TGlzdDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU1lbnVMaXN0OjpkaWRVcGRhdGVBY3RpdmVPcHRpb24pOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlNZW51TGlzdFBvcHVwOjptZW51TGlzdE9wdGlvbkFjY2Vzc2liaWxpdHlPYmplY3QpOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuaDoKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNb2NrT2JqZWN0Lmg6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGV4dFVuZGVyRWxlbWVudCk6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjphcHBlbmRDaGlsZHJlblRvQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6c2Nyb2xsVmlld0FuY2VzdG9yKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6Z2V0RG9jdW1lbnRMaW5rcyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpoYW5kbGVBY3RpdmVEZXNjZW5kYW50Q2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbmhlcml0c1ByZXNlbnRhdGlv
bmFsUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojph
ZGRJbWFnZU1hcENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmFkZFRleHRGaWVsZENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnJlbW90ZVNWR1Jvb3RFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFyaWFTZWxlY3RlZFJvd3MpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNWR1Jvb3QuaDoKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3OjphZGRDaGlsZFNjcm9sbGJhcik6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5oOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVNsaWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5U2xpZGVyOjphZGRDaGlsZHJlbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2xpZGVyLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U3Bp
bkJ1dHRvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbjo6
YWRkQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNwaW5CdXR0b25Q
YXJ0OjpwcmVzcyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U3BpbkJ1
dHRvbi5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6YWRkQ2hpbGRyZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjphZGRDaGlsZHJlbkZyb21TZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6aGVhZGVyQ29udGFpbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6Y29sdW1uSGVhZGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnJvd0hlYWRlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjpjZWxsRm9yQ29sdW1uQW5kUm93KToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpwYXJlbnRUYWJsZSk6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmg6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjpoZWFkZXJPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjphZGRDaGlsZHJlbik6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaDoKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXI6OmFkZENoaWxkcmVuKToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OnBhcmVudFRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6aGVhZGVyT2JqZWN0KToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5oOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3BwOgorICAg
ICAgICAod2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkNsZWFyU2VsZWN0aW9uKToKKyAgICAgICAg
KHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25TZWxlY3RBbGxTZWxlY3Rpb24pOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHA6Cisg
ICAgICAgIChjZWxsKToKKyAgICAgICAgKGNlbGxBdEluZGV4KToKKyAgICAgICAgKHdlYmtpdEFj
Y2Vzc2libGVUYWJsZUdldEluZGV4QXQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxl
R2V0TkNvbHVtbnMpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0TlJvd3MpOgor
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q29sdW1uSGVhZGVyKToKKyAgICAgICAg
KHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJvd0hlYWRlcik6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlQ2VsbC5jcHA6CisgICAgICAg
ICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVDZWxsR2V0Q29sdW1uSGVhZGVyQ2VsbHMpOgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZVRhYmxlQ2VsbEdldFJvd0hlYWRlckNlbGxzKToKKyAgICAgICAg
KHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxHZXRDb2x1bW5TcGFuKToKKyAgICAgICAgKHdlYmtp
dEFjY2Vzc2libGVUYWJsZUNlbGxHZXRSb3dTcGFuKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2li
bGVUYWJsZUNlbGxHZXRQb3NpdGlvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvQWNj
ZXNzaWJpbGl0eU9iamVjdElPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OmFjY2Vzc2liaWxpdHlQYXNzd29yZEZpZWxkTGVuZ3RoKToKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgY29udmVydFBvaW50VG9TY3JlZW5T
cGFjZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgY29udmVy
dFJlY3RUb1NjcmVlblNwYWNlOl0pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJp
bmdTZXRFbGVtZW50KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
YWRkaXRpb25hbEFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc10pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBjb252ZXJ0UG9pbnRUb1NjcmVlblNwYWNlOl0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBzdWJyb2xlXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHJvbGVEZXNjcmlwdGlvbl0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBzY3JvbGxWaWV3UGFyZW50
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgYWNjZXNzaWJpbGl0eVNob3dDb250ZXh0TWVudV0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5U2V0VmFsdWU6Zm9yQXR0cmlidXRl
Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6Zm9yUGFyYW1ldGVyOl0pOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0OjpkaWRV
cGRhdGVBY3RpdmVPcHRpb24pOgorCiAyMDE0LTA5LTMwICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgU3RhY2sgb3ZlcmZsb3cgd2l0aCBlbm9y
bW91cyBTVkcgZmlsdGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggYWZhYzgyZmNkNzYzMGUzNjBhNTM1
ZDViNzI0Yjk1MDYxNWU1YmExMC4uODFjODVkZTcwMTE2MDZkMzBiMDE4YTFmZmVlMTVhZjk5NDgy
NzNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE5IEBACiAyMDE0LTA5LTMwICBDaHJp
c3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAorICAgICAgICBVc2UgaXM8PigpIC8g
ZG93bmNhc3Q8PigpIGZvciBBY2Nlc3NpYmlsaXR5IG9iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzI4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkg
Zm9yIEFjY2Vzc2liaWxpdHkgb2JqZWN0cy4KKworICAgICAgICAqIEFjY2Vzc2libGVCYXNlLmNw
cDoKKyAgICAgICAgKEFjY2Vzc2libGVCYXNlOjphY2NTZWxlY3QpOgorICAgICAgICAqIEFjY2Vz
c2libGVJbWFnZS5jcHA6CisgICAgICAgIChBY2Nlc3NpYmxlSW1hZ2U6Om5hbWUpOgorCisyMDE0
LTA5LTMwICBDaHJpc3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBH
ZW5lcmFsaXplIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBzdXBwb3J0IHRvIGFsbCB0eXBlcwogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MjQzCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDZk
MmYzMmNiODEwZjQ0N2Y2Y2FjNDk1MTFmYzJmNzE4MDBiMTVhNDguLjU2ZWJkZTU2OGE0MjAxZDNh
NWU0MGUwYWY2YjNhYjk5ZWQ0NTY0YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtMTU4LDEwICsxNTgsMTAgQEAgQWNjZXNzaWJpbGl0
eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Zm9jdXNlZEltYWdlTWFwVUlFbGVtZW50KEhUTUxBcmVh
RWxlbWVudCogYXIKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgZm9yIChjb25z
dCBhdXRvJiBjaGlsZCA6IGF4UmVuZGVySW1hZ2UtPmNoaWxkcmVuKCkpIHsKLSAgICAgICAgaWYg
KCFjaGlsZC0+aXNJbWFnZU1hcExpbmsoKSkKKyAgICAgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5
SW1hZ2VNYXBMaW5rPigqY2hpbGQpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAot
ICAgICAgICBpZiAodG9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rKGNoaWxkLmdldCgpKS0+YXJl
YUVsZW1lbnQoKSA9PSBhcmVhRWxlbWVudCkKKyAgICAgICAgaWYgKGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlJbWFnZU1hcExpbms+KCpjaGlsZCkuYXJlYUVsZW1lbnQoKSA9PSBhcmVhRWxlbWVudCkK
ICAgICAgICAgICAgIHJldHVybiBjaGlsZC5nZXQoKTsKICAgICB9ICAgIAogICAgIApAQCAtNzE5
LDEwICs3MTksOSBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6Om5vdGlmaWNhdGlvblBvc3RUaW1lckZp
cmVkKFRpbWVyPEFYT2JqZWN0Q2FjaGU+JikKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIC8vIE1h
a2Ugc3VyZSBub25lIG9mIHRoZSByZW5kZXIgdmlld3MgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJl
aW5nIGxheWVkIG91dC4KICAgICAgICAgLy8gTm90aWZpY2F0aW9ucyBzaG91bGQgb25seSBiZSBz
ZW50IGFmdGVyIHRoZSByZW5kZXJlciBoYXMgZmluaXNoZWQKLSAgICAgICAgaWYgKG9iai0+aXNB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QqIHJlbmRlck9iaiA9IHRvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdChvYmop
OwotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHJlbmRlck9iai0+cmVuZGVy
ZXIoKTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJlcikKKyAgICAgICAgaWYgKGlzPEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q+KG9iaikpIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QmIHJlbmRlck9iaiA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+
KCpvYmopOworICAgICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSByZW5kZXJP
YmoucmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICBBU1NFUlQoIXJlbmRlcmVyLT52aWV3KCku
bGF5b3V0U3RhdGUoKSk7CiAgICAgICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCmluZGV4IGY4MmM3
MGU0N2I1YjRjZWMyNzBmZTE2ZmUwYmM3NmVkM2UxYmU4NTMuLjE1MGE4M2ZiODc0MjY2ZDMwZDk3
NTFkZmI5MmE2OGJmYzQ3NmEyNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAKQEAgLTU1LDI5ICs1NSwyOSBAQCBQ
YXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlBUklBR3JpZD4gQWNjZXNzaWJpbGl0eUFSSUFHcmlkOjpj
cmVhdGUoUmVuZGVyT2JqZWN0KiByZQogCiBib29sIEFjY2Vzc2liaWxpdHlBUklBR3JpZDo6YWRk
VGFibGVDZWxsQ2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCogY2hpbGQsIEhhc2hTZXQ8QWNjZXNz
aWJpbGl0eU9iamVjdCo+JiBhcHBlbmRlZFJvd3MsIHVuc2lnbmVkJiBjb2x1bW5Db3VudCkKIHsK
LSAgICBpZiAoIWNoaWxkIHx8ICghY2hpbGQtPmlzVGFibGVSb3coKSAmJiBjaGlsZC0+YXJpYVJv
bGVBdHRyaWJ1dGUoKSAhPSBSb3dSb2xlKSkKKyAgICBpZiAoIWNoaWxkIHx8ICghaXM8QWNjZXNz
aWJpbGl0eVRhYmxlUm93PihjaGlsZCkgJiYgY2hpbGQtPmFyaWFSb2xlQXR0cmlidXRlKCkgIT0g
Um93Um9sZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgQWNjZXNzaWJp
bGl0eVRhYmxlUm93KiByb3cgPSB0b0FjY2Vzc2liaWxpdHlUYWJsZVJvdyhjaGlsZCk7Ci0gICAg
aWYgKGFwcGVuZGVkUm93cy5jb250YWlucyhyb3cpKQorICAgIEFjY2Vzc2liaWxpdHlUYWJsZVJv
dyYgcm93ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlUm93PigqY2hpbGQpOworICAgIGlm
IChhcHBlbmRlZFJvd3MuY29udGFpbnMoJnJvdykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgCiAgICAgLy8gc3RvcmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMKLSAgICB1
bnNpZ25lZCByb3dDZWxsQ291bnQgPSByb3ctPmNoaWxkcmVuKCkuc2l6ZSgpOworICAgIHVuc2ln
bmVkIHJvd0NlbGxDb3VudCA9IHJvdy5jaGlsZHJlbigpLnNpemUoKTsKICAgICBpZiAocm93Q2Vs
bENvdW50ID4gY29sdW1uQ291bnQpCiAgICAgICAgIGNvbHVtbkNvdW50ID0gcm93Q2VsbENvdW50
OwogICAgIAotICAgIHJvdy0+c2V0Um93SW5kZXgoKGludCltX3Jvd3Muc2l6ZSgpKTsgICAgICAg
IAotICAgIG1fcm93cy5hcHBlbmQocm93KTsKKyAgICByb3cuc2V0Um93SW5kZXgoKGludCltX3Jv
d3Muc2l6ZSgpKTsKKyAgICBtX3Jvd3MuYXBwZW5kKCZyb3cpOwogCiAgICAgLy8gVHJ5IGFkZGlu
ZyB0aGUgcm93IGlmIGl0J3Mgbm90IGlnbm9yaW5nIGFjY2Vzc2liaWxpdHksCiAgICAgLy8gb3Ro
ZXJ3aXNlIGFkZCBpdHMgY2hpbGRyZW4gKHRoZSBjZWxscykgYXMgdGhlIGdyaWQncyBjaGlsZHJl
bi4KLSAgICBpZiAoIXJvdy0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQotICAgICAgICBtX2No
aWxkcmVuLmFwcGVuZChyb3cpOworICAgIGlmICghcm93LmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQo
KSkKKyAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoJnJvdyk7CiAgICAgZWxzZQotICAgICAgICBt
X2NoaWxkcmVuLmFwcGVuZFZlY3Rvcihyb3ctPmNoaWxkcmVuKCkpOworICAgICAgICBtX2NoaWxk
cmVuLmFwcGVuZFZlY3Rvcihyb3cuY2hpbGRyZW4oKSk7CiAKLSAgICBhcHBlbmRlZFJvd3MuYWRk
KHJvdyk7CisgICAgYXBwZW5kZWRSb3dzLmFkZCgmcm93KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMTM1LDEyICsxMzUsMTIgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZENo
aWxkcmVuKCkKICAgICAKICAgICAvLyBtYWtlIHRoZSBjb2x1bW5zIGJhc2VkIG9uIHRoZSBudW1i
ZXIgb2YgY29sdW1ucyBpbiB0aGUgZmlyc3QgYm9keQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb2x1bW5Db3VudDsgKytpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVt
biogY29sdW1uID0gdG9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4oYXhDYWNoZS0+Z2V0T3JDcmVh
dGUoQ29sdW1uUm9sZSkpOwotICAgICAgICBjb2x1bW4tPnNldENvbHVtbkluZGV4KChpbnQpaSk7
Ci0gICAgICAgIGNvbHVtbi0+c2V0UGFyZW50KHRoaXMpOwotICAgICAgICBtX2NvbHVtbnMuYXBw
ZW5kKGNvbHVtbik7Ci0gICAgICAgIGlmICghY29sdW1uLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
KCkpCi0gICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChjb2x1bW4pOworICAgICAgICBBY2Nl
c3NpYmlsaXR5VGFibGVDb2x1bW4mIGNvbHVtbiA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJs
ZUNvbHVtbj4oKmF4Q2FjaGUtPmdldE9yQ3JlYXRlKENvbHVtblJvbGUpKTsKKyAgICAgICAgY29s
dW1uLnNldENvbHVtbkluZGV4KChpbnQpaSk7CisgICAgICAgIGNvbHVtbi5zZXRQYXJlbnQodGhp
cyk7CisgICAgICAgIG1fY29sdW1ucy5hcHBlbmQoJmNvbHVtbik7CisgICAgICAgIGlmICghY29s
dW1uLmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKKyAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBw
ZW5kKCZjb2x1bW4pOwogICAgIH0KICAgICAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFk
ZXJDb250YWluZXJPYmplY3QgPSBoZWFkZXJDb250YWluZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3Bw
CmluZGV4IDk3MzA2YjE5Y2UyZDg5ZjFiZThjYjQ3N2JiNTQ1ODNmZWY1OWZlYTEuLmQ3NzU1MThl
MTUwOTlmNjM3MGQyMjM5ZjcxNzlhYzc1NDhhOWI3MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcApA
QCAtNTYsNyArNTYsNyBAQCBBY2Nlc3NpYmlsaXR5VGFibGUqIEFjY2Vzc2liaWxpdHlBUklBR3Jp
ZENlbGw6OnBhcmVudFRhYmxlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
CiAgICAgaWYgKHBhcmVudC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJu
IHRvQWNjZXNzaWJpbGl0eVRhYmxlKHBhcmVudCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxB
Y2Nlc3NpYmlsaXR5VGFibGU+KHBhcmVudCk7CiAKICAgICAvLyBJdCBjb3VsZCBoYXBwZW4gdGhh
dCB3ZSBoYWRuJ3QgcmVhY2hlZCB0aGUgcGFyZW50IHRhYmxlIHlldCAoaW4KICAgICAvLyBjYXNl
IG9iamVjdHMgZm9yIHJvd3Mgd2VyZSBub3QgaWdub3JpbmcgYWNjZXNzaWJpbGl0eSkgc28gZm9y
CkBAIC02NSw3ICs2NSw3IEBAIEFjY2Vzc2liaWxpdHlUYWJsZSogQWNjZXNzaWJpbGl0eUFSSUFH
cmlkQ2VsbDo6cGFyZW50VGFibGUoKSBjb25zdAogICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQt
PmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAot
ICAgIHJldHVybiB0b0FjY2Vzc2liaWxpdHlUYWJsZShwYXJlbnQpOworICAgIHJldHVybiBkb3du
Y2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KHBhcmVudCk7CiB9CiAgICAgCiB2b2lkIEFjY2Vzc2li
aWxpdHlBUklBR3JpZENlbGw6OnJvd0luZGV4UmFuZ2Uoc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNp
Z25lZD4mIHJvd1JhbmdlKQpAQCAtNzQsMTMgKzc0LDEzIEBAIHZvaWQgQWNjZXNzaWJpbGl0eUFS
SUFHcmlkQ2VsbDo6cm93SW5kZXhSYW5nZShzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiYg
cm93CiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwYXJlbnQt
PmlzVGFibGVSb3coKSkgeworICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGVSb3c+KHBhcmVu
dCkpIHsKICAgICAgICAgLy8gV2UgYWxyZWFkeSBnb3QgYSB0YWJsZSByb3csIHVzZSBpdHMgQVBJ
LgotICAgICAgICByb3dSYW5nZS5maXJzdCA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlUm93KHBhcmVu
dCktPnJvd0luZGV4KCk7CisgICAgICAgIHJvd1JhbmdlLmZpcnN0ID0gZG93bmNhc3Q8QWNjZXNz
aWJpbGl0eVRhYmxlUm93PigqcGFyZW50KS5yb3dJbmRleCgpOwogICAgIH0gZWxzZSBpZiAocGFy
ZW50LT5pc0FjY2Vzc2liaWxpdHlUYWJsZSgpKSB7CiAgICAgICAgIC8vIFdlIHJlYWNoZWQgdGhl
IHBhcmVudCB0YWJsZSwgc28gd2UgbmVlZCB0byBpbnNwZWN0IGl0cwogICAgICAgICAvLyBjaGls
ZHJlbiB0byBkZXRlcm1pbmUgdGhlIHJvdyBpbmRleCBmb3IgdGhlIGNlbGwgaW4gaXQuCi0gICAg
ICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50ID0gdG9BY2Nlc3NpYmlsaXR5VGFibGUocGFyZW50KS0+
Y29sdW1uQ291bnQoKTsKKyAgICAgICAgdW5zaWduZWQgY29sdW1uQ291bnQgPSBkb3duY2FzdDxB
Y2Nlc3NpYmlsaXR5VGFibGU+KHBhcmVudCktPmNvbHVtbkNvdW50KCk7CiAgICAgICAgIGlmICgh
Y29sdW1uQ291bnQpCiAgICAgICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcAppbmRl
eCA5ZGZhMGJlNDA2MTk4ZWZjOWE3YjI0NmNmNzM4NzEyMzVmY2IxNzAzLi4wODQ5ZjYwZWVkZGU4
NWMxNTIxMzdkOTNmYjAwM2E4NGFkMGE3NGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwCkBAIC03Myw3
ICs3Myw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpkaXNjbG9zZWRSb3dzKEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgZGlzY2xvCiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICB1bnNpZ25lZCBsZXZlbCA9IGhpZXJhcmNoaWNhbExldmVsKCk7Ci0gICAgYXV0byYgYWxs
Um93cyA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlKHBhcmVudCktPnJvd3MoKTsKKyAgICBhdXRvJiBh
bGxSb3dzID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5yb3dzKCk7CiAg
ICAgaW50IHJvd0NvdW50ID0gYWxsUm93cy5zaXplKCk7CiAgICAgZm9yIChpbnQgayA9IGluZGV4
ICsgMTsgayA8IHJvd0NvdW50OyArK2spIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
cm93ID0gYWxsUm93c1trXS5nZXQoKTsKQEAgLTEwMCw3ICsxMDAsNyBAQCBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OmRpc2Nsb3NlZEJ5Um93KCkgY29uc3QK
ICAgICAKICAgICAvLyBTZWFyY2ggZm9yIHRoZSBwcmV2aW91cyByb3cgdGhhdCBtYXRjaGVzIHRo
ZSBjb3JyZWN0IGxldmVsLgogICAgIGludCBpbmRleCA9IHJvd0luZGV4KCk7Ci0gICAgYXV0byYg
YWxsUm93cyA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlKHBhcmVudCktPnJvd3MoKTsKKyAgICBhdXRv
JiBhbGxSb3dzID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5yb3dzKCk7
CiAgICAgaW50IHJvd0NvdW50ID0gYWxsUm93cy5zaXplKCk7CiAgICAgaWYgKGluZGV4ID49IHJv
d0NvdW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEyMCw4ICsxMjAsOCBAQCBBY2Nl
c3NpYmlsaXR5VGFibGUqIEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6cGFyZW50VGFibGUoKSBj
b25zdAogICAgIC8vIG9ubHkgaGF2ZSAicm93IiBlbGVtZW50cywgYnV0IGlmIG5vdCwgd2Ugc3Rp
bGwgc2hvdWxkIGhhbmRsZSBpdCBncmFjZWZ1bGx5IGJ5IGZpbmRpbmcgdGhlIHJpZ2h0IHRhYmxl
LgogICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gcGFyZW50T2JqZWN0KCk7
IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewogICAgICAgICAvLyBU
aGUgcGFyZW50IHRhYmxlIGZvciBhbiBBUklBIGdyaWQgcm93IHNob3VsZCBiZSBhbiBBUklBIHRh
YmxlLgotICAgICAgICBpZiAocGFyZW50LT5pc1RhYmxlKCkgJiYgcGFyZW50LT5pc0FjY2Vzc2li
aWxpdHlUYWJsZSgpICYmIHRvQWNjZXNzaWJpbGl0eVRhYmxlKHBhcmVudCktPmlzQXJpYVRhYmxl
KCkpCi0gICAgICAgICAgICByZXR1cm4gdG9BY2Nlc3NpYmlsaXR5VGFibGUocGFyZW50KTsKKyAg
ICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4ocGFyZW50KSAmJiBwYXJlbnQtPmlzQWNj
ZXNzaWJpbGl0eVRhYmxlKCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50
KS5pc0FyaWFUYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZT4ocGFyZW50KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3Jp
ZFJvdy5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdy
aWRSb3cuaAppbmRleCAzM2ZmYTU2MGE2Y2Y0NGViMWE5NWU3ZDljOGU4YTlmM2M4NGQwYzVjLi4z
NWU2ZDQxMTdkOGFjNzFjMTQxZWVmYjVmNDYwYzRmN2ZiMWQ0NTMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmgK
QEAgLTUzLDggKzUzLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlUYWJs
ZSogcGFyZW50VGFibGUoKSBjb25zdCBvdmVycmlkZTsKIH07IAogCi1BQ0NFU1NJQklMSVRZX09C
SkVDVF9UWVBFX0NBU1RTKEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdywgaXNBUklBVHJlZUdyaWRS
b3coKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19BQ0NFU1NJQklMSVRZKEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdywgaXNBUklBVHJlZUdyaWRS
b3coKSkKKwogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvd19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBM
aW5rLmNwcAppbmRleCBhYmMwMGRiYTM4NDljNjgxM2U2M2JlNWFmNDZmYTliOTc1YTllODA0Li41
NjRkNmIxMjllZjU5YTgzNDE5YzE4MjE2ZTk5ZTFmZjQ4MzFmMjAzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGlu
ay5jcHAKQEAgLTE0MCw4ICsxNDAsOCBAQCBSZW5kZXJFbGVtZW50KiBBY2Nlc3NpYmlsaXR5SW1h
Z2VNYXBMaW5rOjppbWFnZU1hcExpbmtSZW5kZXJlcigpIGNvbnN0CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBudWxscHRyOwotICAgIGlm
IChtX3BhcmVudCAmJiBtX3BhcmVudC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0g
ICAgICAgIHJlbmRlcmVyID0gdG9SZW5kZXJFbGVtZW50KHRvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdChtX3BhcmVudCktPnJlbmRlcmVyKCkpOworICAgIGlmIChtX3BhcmVudCAmJiBpczxBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0PihtX3BhcmVudCkpCisgICAgICAgIHJlbmRlcmVyID0gdG9S
ZW5kZXJFbGVtZW50KGRvd25jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+KCptX3BhcmVu
dCkucmVuZGVyZXIoKSk7CiAgICAgZWxzZQogICAgICAgICByZW5kZXJlciA9IG1fbWFwRWxlbWVu
dC0+cmVuZGVyZXIoKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmgKaW5kZXggOTFmNWNhNmZhODdjODQ0
NmU1YjQ4NzU0MThmZDA5Y2Q4MDAxMGFkMC4uNTJlY2JmY2M0M2E4NTJiMWRkOGJlODU3YTdlNTRm
MjcyYzc4MzJmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmgKQEAgLTgwLDkgKzgwLDkgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnZU1hcExpbmsoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzUGF0aCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KIH07Ci0KLUFDQ0VTU0lCSUxJVFlfT0JKRUNUX1RZUEVfQ0FTVFMo
QWNjZXNzaWJpbGl0eUltYWdlTWFwTGluaywgaXNJbWFnZU1hcExpbmsoKSkKICAgICAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZ
KEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmssIGlzSW1hZ2VNYXBMaW5rKCkpCisKICNlbmRpZiAv
LyBBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3QuaAppbmRleCA0OGJiMmY2MjUyZTk3ZDIxZjM4YzVm
MTlhMjM3MWI3NjQ2NmM4MzBkLi5mM2VmZTQ5NGQ0NDJhM2Y4MmYxZGFiZTg1NjQ3NDYxODFkOTI0
MjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdC5oCkBAIC01Miw4ICs1Miw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBBY2Nlc3NpYmls
aXR5Um9sZSBkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpIG92ZXJyaWRlOwogfTsKIAotQUND
RVNTSUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5TGlzdCwgaXNMaXN0KCkp
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19BQ0NF
U1NJQklMSVRZKEFjY2Vzc2liaWxpdHlMaXN0LCBpc0xpc3QoKSkKKwogI2VuZGlmIC8vIEFjY2Vz
c2liaWxpdHlMaXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAKaW5kZXggMGY4ZTFkOWI1NmU3ODhmODE3NTNiMWYyMDBj
ZmIyNzUzYmIxYjBiYy4uZTgxZDkzOGMyZDcyYTgwODNjZjMyZmQ1NWVhYmVlMTIxMDBhNGY0MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlz
dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveC5jcHAKQEAgLTkyLDE2ICs5MiwxNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlMaXN0Qm94
OjpzZXRTZWxlY3RlZENoaWxkcmVuKGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rvcgog
ICAgIAogICAgIC8vIGRpc2FibGUgYW55IHNlbGVjdGVkIG9wdGlvbnMKICAgICBmb3IgKGNvbnN0
IGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikgewotICAgICAgICBBY2Nlc3NpYmlsaXR5TGlzdEJv
eE9wdGlvbiogbGlzdEJveE9wdGlvbiA9IHRvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24oY2hp
bGQuZ2V0KCkpOwotICAgICAgICBpZiAobGlzdEJveE9wdGlvbi0+aXNTZWxlY3RlZCgpKQotICAg
ICAgICAgICAgbGlzdEJveE9wdGlvbi0+c2V0U2VsZWN0ZWQoZmFsc2UpOworICAgICAgICBBY2Nl
c3NpYmlsaXR5TGlzdEJveE9wdGlvbiYgbGlzdEJveE9wdGlvbiA9IGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlMaXN0Qm94T3B0aW9uPigqY2hpbGQpOworICAgICAgICBpZiAobGlzdEJveE9wdGlvbi5p
c1NlbGVjdGVkKCkpCisgICAgICAgICAgICBsaXN0Qm94T3B0aW9uLnNldFNlbGVjdGVkKGZhbHNl
KTsKICAgICB9CiAgICAgCi0gICAgZm9yIChjb25zdCBhdXRvJiBvYmogOiBjaGlsZHJlbikgewot
ICAgICAgICBpZiAob2JqLT5yb2xlVmFsdWUoKSAhPSBMaXN0Qm94T3B0aW9uUm9sZSkKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pIHsKKyAgICAgICAgaWYgKCFpczxBY2Nl
c3NpYmlsaXR5TGlzdEJveE9wdGlvbj4oKmNoaWxkKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICB0b0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uKG9i
ai5nZXQoKSktPnNldFNlbGVjdGVkKHRydWUpOworICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5TGlzdEJveE9wdGlvbj4oKmNoaWxkKS5zZXRTZWxlY3RlZCh0cnVlKTsKICAgICB9CiB9CiAg
ICAgCkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5TGlzdEJveDo6c2VsZWN0
ZWRDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJlc3VsdCkKICAgICAgICAg
YWRkQ2hpbGRyZW4oKTsKICAgICAgICAgCiAgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IG1f
Y2hpbGRyZW4pIHsKLSAgICAgICAgaWYgKHRvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24oY2hp
bGQuZ2V0KCkpLT5pc1NlbGVjdGVkKCkpCisgICAgICAgIGlmIChkb3duY2FzdDxBY2Nlc3NpYmls
aXR5TGlzdEJveE9wdGlvbj4oKmNoaWxkKS5pc1NlbGVjdGVkKCkpCiAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKGNoaWxkLmdldCgpKTsKICAgICB9ICAgIAogfQpAQCAtMTM1LDExICsxMzUsMTEg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5TGlzdEJveDo6dmlzaWJsZUNoaWxkcmVuKEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYgcmVzdWx0KQogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJp
bGl0eUxpc3RCb3g6Omxpc3RCb3hPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KEhUTUxFbGVtZW50
KiBlbGVtZW50KSBjb25zdAogewogICAgIC8vIHNraXAgaHIgZWxlbWVudHMKLSAgICBpZiAoIWVs
ZW1lbnQgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShoclRhZykpCisgICAgaWYgKCFlbGVtZW50IHx8
IGlzPEhUTUxIUkVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsaXN0Qm94T2JqZWN0ID0gbV9yZW5kZXJlci0+
ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKExpc3RCb3hPcHRpb25Sb2xl
KTsKLSAgICB0b0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uKGxpc3RCb3hPYmplY3QpLT5zZXRI
VE1MRWxlbWVudChlbGVtZW50KTsKKyAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TGlzdEJveE9w
dGlvbj4oKmxpc3RCb3hPYmplY3QpLnNldEhUTUxFbGVtZW50KGVsZW1lbnQpOwogICAgIAogICAg
IHJldHVybiBsaXN0Qm94T2JqZWN0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5oCmluZGV4IDI2MTM1OWRlNjlhODdjYmMwMjRm
YWYwNTY3ZWZkNGMwNzBmYzk1MzguLmYyMTY2ZjQyNGNmMjA3OTJiNzljNWFiNTU1ZGRiOWRiYTMz
Y2Q2NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUxpc3RCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlMaXN0Qm94LmgKQEAgLTU2LDkgKzU2LDkgQEAgcHJpdmF0ZToKICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBsaXN0Qm94T3B0aW9uQWNjZXNzaWJpbGl0eU9iamVjdChIVE1MRWxlbWVudCop
IGNvbnN0OwogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogZWxlbWVudEFjY2Vzc2li
aWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CiB9OwotCi1BQ0NF
U1NJQklMSVRZX09CSkVDVF9UWVBFX0NBU1RTKEFjY2Vzc2liaWxpdHlMaXN0Qm94LCBpc0xpc3RC
b3goKSkKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vzc2liaWxpdHlMaXN0Qm94LCBpc0xpc3RCb3goKSkKKwog
I2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlMaXN0Qm94X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uaAppbmRleCAw
NjBhNjA3YjRjYzNlZGJlODYyM2E3MTE5NjgyMDI4ZWNjMWUyZjU5Li44ZTIyYjQzMjEyN2I5ZmNl
YThhZjZkMDFhZDU4Y2E5OTM4YTVjYTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5oCkBAIC03NCw5ICs3
NCw5IEBAIHByaXZhdGU6CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdEJveE9wdGlvbkFj
Y2Vzc2liaWxpdHlPYmplY3QoSFRNTEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdCBvdmVycmlkZTsKIH07Ci0KLUFD
Q0VTU0lCSUxJVFlfT0JKRUNUX1RZUEVfQ0FTVFMoQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24s
IGlzTGlzdEJveE9wdGlvbigpKQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKIAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0
aW9uLCBpc0xpc3RCb3hPcHRpb24oKSkKKwogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlMaXN0Qm94
T3B0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU1lbnVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU1lbnVMaXN0LmNwcAppbmRleCA2ZTJjZTU0YzJmZTFhN2EyYzk2NzA5NTg4MDM2ODUw
NWNjN2I2ZDk2Li5mZjM5YmJkMzRhNTg5ZTRlM2ZkNTMyN2I4ZjZhMzliZWRmY2RiMTgwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlz
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVu
dUxpc3QuY3BwCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU1lbnVMaXN0Ojph
ZGRDaGlsZHJlbigpCiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm47CiAKLSAgICB0b0Fj
Y2Vzc2liaWxpdHlNb2NrT2JqZWN0KGxpc3QpLT5zZXRQYXJlbnQodGhpcyk7CisgICAgZG93bmNh
c3Q8QWNjZXNzaWJpbGl0eU1vY2tPYmplY3Q+KCpsaXN0KS5zZXRQYXJlbnQodGhpcyk7CiAgICAg
aWYgKGxpc3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkgewogICAgICAgICBjYWNoZS0+cmVt
b3ZlKGxpc3QtPmF4T2JqZWN0SUQoKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTEyMSwxMCArMTIx
LDggQEAgdm9pZCBBY2Nlc3NpYmlsaXR5TWVudUxpc3Q6OmRpZFVwZGF0ZUFjdGl2ZU9wdGlvbihp
bnQgb3B0aW9uSW5kZXgpCiAgICAgICAgIC8vIFlvdSBjYW4gcmVwcm9kdWNlIHRoZSBpc3N1ZSBp
biB0aGUgR1RLKyBwb3J0IGJ5IHJlbW92aW5nIHRoaXMgY2hlY2sgYW5kIHJ1bm5pbmcKICAgICAg
ICAgLy8gYWNjZXNzaWJpbGl0eS9pbnNlcnQtc2VsZWN0ZWQtb3B0aW9uLWludG8tc2VsZWN0LWNh
dXNlcy1jcmFzaC5odG1sICh3aWxsIGNyYXNoKS4KICAgICAgICAgaW50IHBvcHVwQ2hpbGRyZW5T
aXplID0gc3RhdGljX2Nhc3Q8aW50PihjaGlsZE9iamVjdHNbMF0tPmNoaWxkcmVuKCkuc2l6ZSgp
KTsKLSAgICAgICAgaWYgKGNoaWxkT2JqZWN0c1swXS0+aXNNZW51TGlzdFBvcHVwKCkgJiYgb3B0
aW9uSW5kZXggPj0gMCAmJiBvcHRpb25JbmRleCA8IHBvcHVwQ2hpbGRyZW5TaXplKSB7Ci0gICAg
ICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAqIHBvcHVwID0gdG9BY2Nlc3Np
YmlsaXR5TWVudUxpc3RQb3B1cChjaGlsZE9iamVjdHNbMF0uZ2V0KCkpKQotICAgICAgICAgICAg
ICAgIHBvcHVwLT5kaWRVcGRhdGVBY3RpdmVPcHRpb24ob3B0aW9uSW5kZXgpOwotICAgICAgICB9
CisgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cD4oKmNoaWxkT2JqZWN0
c1swXSkgJiYgb3B0aW9uSW5kZXggPj0gMCAmJiBvcHRpb25JbmRleCA8IHBvcHVwQ2hpbGRyZW5T
aXplKQorICAgICAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXA+KCpj
aGlsZE9iamVjdHNbMF0pLmRpZFVwZGF0ZUFjdGl2ZU9wdGlvbihvcHRpb25JbmRleCk7CiAgICAg
fQogCiAgICAgY2FjaGUtPnBvc3ROb3RpZmljYXRpb24odGhpcywgJmRvY3VtZW50LmdldCgpLCBB
WE9iamVjdENhY2hlOjpBWE1lbnVMaXN0VmFsdWVDaGFuZ2VkLCBUYXJnZXRFbGVtZW50LCBQb3N0
U3luY2hyb25vdXNseSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TWVudUxpc3QuaAppbmRleCA2Y2Y0ZmQyYmRkYWRkNzcyZjEzYWQ5NjdiNjZi
ZWI4Y2Q0OWRmOWUxLi41YjFiMmQ0MDcwNzIxY2EyNzNjZDBmNTRjNjM3OTk5NGMxOGM0MzMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51
TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1l
bnVMaXN0LmgKQEAgLTU1LDggKzU1LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY2hp
bGRyZW5DaGFuZ2VkKCkgb3ZlcnJpZGU7CiB9OwogCi1BQ0NFU1NJQklMSVRZX09CSkVDVF9UWVBF
X0NBU1RTKEFjY2Vzc2liaWxpdHlNZW51TGlzdCwgaXNNZW51TGlzdCgpKQotCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQUNDRVNTSUJJTElUWShBY2Nl
c3NpYmlsaXR5TWVudUxpc3QsIGlzTWVudUxpc3QoKSkKKwogI2VuZGlmIC8vIEFjY2Vzc2liaWxp
dHlNZW51TGlzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uaAppbmRleCA2YmVlNThiMTgzN2VhYThjOTBm
YzJiOWRiNzQ0MDNjNjdhOTE1YjIxLi41ZTM4M2Y3YmNmOWU0YWY2NTE2ZDNkMWYzNGRkMjU0NjI5
MGUxMjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlNZW51TGlzdE9wdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmgKQEAgLTYyLDggKzYyLDggQEAgcHJpdmF0ZToK
ICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG1fZWxlbWVudDsKIH07CiAKLUFDQ0VTU0lCSUxJVFlf
T0JKRUNUX1RZUEVfQ0FTVFMoQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLCBpc01lbnVMaXN0
T3B0aW9uKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbiwgaXNNZW51TGlz
dE9wdGlvbigpKQorCiAjZW5kaWYgLy8gQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVM
aXN0UG9wdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TWVudUxpc3RQb3B1cC5jcHAKaW5kZXggMzUwZGEwZGE1ZmY5ZDUxZWQwZGJkZTVjNWExNWUwODI1
OWIwNmNmNy4uZWY4ZjVkOGNhOTU0N2I4NGI1ZTE2ZWE5MDYyOTIzYTVlYWY1N2VlMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQ
b3B1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TWVudUxpc3RQb3B1cC5jcHAKQEAgLTc0LDEyICs3NCwxMiBAQCBBY2Nlc3NpYmlsaXR5TWVudUxp
c3RPcHRpb24qIEFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwOjptZW51TGlzdE9wdGlvbkFjY2Vz
c2liaQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IG9iamVjdCA9IGRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoTWVudUxp
c3RPcHRpb25Sb2xlKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihvYmpl
Y3QtPmlzTWVudUxpc3RPcHRpb24oKSk7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oaXM8QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uPihvYmplY3QpKTsKIAotICAgIEFj
Y2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbiogb3B0aW9uID0gdG9BY2Nlc3NpYmlsaXR5TWVudUxp
c3RPcHRpb24ob2JqZWN0KTsKLSAgICBvcHRpb24tPnNldEVsZW1lbnQoZWxlbWVudCk7CisgICAg
QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uJiBvcHRpb24gPSBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5TWVudUxpc3RPcHRpb24+KCpvYmplY3QpOworICAgIG9wdGlvbi5zZXRFbGVtZW50KGVsZW1l
bnQpOwogCi0gICAgcmV0dXJuIG9wdGlvbjsKKyAgICByZXR1cm4gJm9wdGlvbjsKIH0KIAogYm9v
bCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cDo6cHJlc3MoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5oIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5oCmlu
ZGV4IGE0YjdkNjAwYTc5MjAxMzI1MTU2ZDk4ZTg2Mzg2YTRiZmU5Nzk2YzcuLmMxNTZhY2UzNmRk
NDMwNWFhZTVlMjc3ZDY1Zjg1MzYyNWQzNDBiNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmgKQEAgLTYy
LDggKzYyLDggQEAgcHJpdmF0ZToKICAgICBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24qIG1l
bnVMaXN0T3B0aW9uQWNjZXNzaWJpbGl0eU9iamVjdChIVE1MRWxlbWVudCopIGNvbnN0OwogfTsK
IAotQUNDRVNTSUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5TWVudUxpc3RQ
b3B1cCwgaXNNZW51TGlzdFBvcHVwKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vzc2liaWxpdHlNZW51TGlzdFBv
cHVwLCBpc01lbnVMaXN0UG9wdXAoKSkKKwogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlNZW51TGlz
dFBvcHVwX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU1vY2tPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU1vY2tPYmplY3QuaAppbmRleCBlMDRmZDdmN2UwNzI5ZDRhMjJmYTljOWRmMTBlNGJm
NjVjOTk4YzdkLi43ODVjYjUzNTM4MjM5NjMxYjMyY2NmZDc0ZmUyMjcwM2M0NWI1NDk2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNb2NrT2Jq
ZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TW9j
a09iamVjdC5oCkBAIC01Miw5ICs1Miw5IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wg
Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdCBvdmVycmlkZTsKIH07IAotCi1B
Q0NFU1NJQklMSVRZX09CSkVDVF9UWVBFX0NBU1RTKEFjY2Vzc2liaWxpdHlNb2NrT2JqZWN0LCBp
c01vY2tPYmplY3QoKSkKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUgCiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQUNDRVNTSUJJTElUWShBY2Nlc3NpYmlsaXR5TW9ja09iamVjdCwgaXNN
b2NrT2JqZWN0KCkpCisKICNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5TW9ja09iamVjdF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCmluZGV4IGJkYmUzNDRlMDFlN2MxNDNmODljNjEwZjE5MWE3NjhhYjkyMWFmOTIu
LjJiYzRlMzUxNTdhMjYwMTZkNDE2MDU0NmVkYTBmYjk1ZTJiY2Y3ODYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qu
Y3BwCkBAIC0xNjc1LDkgKzE2NzUsOSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OnRleHRVbmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0eVRleHRVbmRlckVsZW1lbnRNbwogICAgICAg
ICBpZiAoIXNob3VsZFVzZUFjY2Vzc2libGl0eU9iamVjdElubmVyVGV4dChjaGlsZCwgbW9kZSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoY2hpbGQtPmlzQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3QoKSkgeworICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q+KGNoaWxkKSkgewogICAgICAgICAgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiB0ZXh0
T3JkZXI7Ci0gICAgICAgICAgICB0b0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KGNoaWxkKS0+YWx0
ZXJuYXRpdmVUZXh0KHRleHRPcmRlcik7CisgICAgICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdD4oKmNoaWxkKS5hbHRlcm5hdGl2ZVRleHQodGV4dE9yZGVyKTsKICAgICAg
ICAgICAgIGlmICh0ZXh0T3JkZXIuc2l6ZSgpID4gMCAmJiB0ZXh0T3JkZXJbMF0udGV4dC5sZW5n
dGgoKSkgewogICAgICAgICAgICAgICAgIGFwcGVuZE5hbWVUb1N0cmluZ0J1aWxkZXIoYnVpbGRl
ciwgdGV4dE9yZGVyWzBdLnRleHQpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dC5oCmluZGV4IDdhYjI4MTZmMzE1NjA3YjBlOTFlMGU4NTYzNjBhNjlkNWM2OTYwYjAuLmViNjE0
YTE4Njc0NmIzZTA4ZTlmOGE5NmM4ZmI1MjE1OWM4OGNhZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgKQEAgLTIw
Nyw4ICsyMDcsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgdXNlc0FsdFRhZ0ZvclRleHRDb21wdXRh
dGlvbigpIGNvbnN0OwogfTsKIAotQUNDRVNTSUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdCwgaXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCgpKQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQUNDRVNTSUJJTElU
WShBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCwgaXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCgpKQor
CiAjZW5kaWYgLy8gQWNjZXNzaWJpbGl0eU5vZGVPYmplY3RfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggOTE0ZGJk
ZGE3Mjk5YTY1Nzk2MGIzNjE1ZDBlMGI2ZmViMjllYmNmZS4uZjZiZTk4MTdlZTVmMWQ1NTBkMTc3
NjUzYjI4NmIzZjhhNjRlNDRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC01MDIsNyArNTAyLDcgQEAgc3RhdGlj
IHZvaWQgYXBwZW5kQ2hpbGRyZW5Ub0FycmF5KEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwg
Ym9vbCBpc0ZvcndhcmQsIEEKIHsKICAgICAvLyBBIHRhYmxlJ3MgY2hpbGRyZW4gaW5jbHVkZXMg
ZWxlbWVudHMgd2hvc2Ugb3duIGNoaWxkcmVuIGFyZSBhbHNvIHRoZSB0YWJsZSdzIGNoaWxkcmVu
IChkdWUgdG8gdGhlIHdheSB0aGUgTWFjIGV4cG9zZXMgdGFibGVzKS4KICAgICAvLyBUaGUgcm93
cyBmcm9tIHRoZSB0YWJsZSBzaG91bGQgYmUgcXVlcmllZCwgc2luY2UgdGhvc2UgYXJlIGRpcmVj
dCBkZXNjZW5kYW50cyBvZiB0aGUgdGFibGUsIGFuZCB0aGV5IGNvbnRhaW4gY29udGVudC4KLSAg
ICBjb25zdCBhdXRvJiBzZWFyY2hDaGlsZHJlbiA9IG9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5VGFi
bGUoKSA/IHRvQWNjZXNzaWJpbGl0eVRhYmxlKG9iamVjdCktPnJvd3MoKSA6IG9iamVjdC0+Y2hp
bGRyZW4oKTsKKyAgICBjb25zdCBhdXRvJiBzZWFyY2hDaGlsZHJlbiA9IG9iamVjdC0+aXNBY2Nl
c3NpYmlsaXR5VGFibGUoKSA/IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm9iamVjdCku
cm93cygpIDogb2JqZWN0LT5jaGlsZHJlbigpOwogCiAgICAgc2l6ZV90IGNoaWxkcmVuU2l6ZSA9
IHNlYXJjaENoaWxkcmVuLnNpemUoKTsKIApAQCAtMTUzNSw4ICsxNTM1LDggQEAgdm9pZCBBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojp1cGRhdGVCYWNraW5nU3RvcmUoKQogU2Nyb2xsVmlldyogQWNjZXNz
aWJpbGl0eU9iamVjdDo6c2Nyb2xsVmlld0FuY2VzdG9yKCkgY29uc3QKIHsKICAgICBmb3IgKGNv
bnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbFBhcmVudCA9IHRoaXM7IHNjcm9sbFBhcmVu
dDsgc2Nyb2xsUGFyZW50ID0gc2Nyb2xsUGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewotICAgICAg
ICBpZiAoc2Nyb2xsUGFyZW50LT5pc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpCi0gICAgICAg
ICAgICByZXR1cm4gdG9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhzY3JvbGxQYXJlbnQpLT5zY3Jv
bGxWaWV3KCk7CisgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oc2Nyb2xs
UGFyZW50KSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xs
Vmlldz4oKnNjcm9sbFBhcmVudCkuc2Nyb2xsVmlldygpOwogICAgIH0KICAgICAKICAgICByZXR1
cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmgKaW5kZXggYjExMTkwMWMxODI4Y2ZlYTE1NTk3YWRjZDQ5ZjBkNWIyYjc2
M2E5ZC4uNWY1OGFlOWYzNmI0Mjc2NzgwMTgwZmQ2YTdlNzk2ZGM0OWY2ODY4MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKQEAg
LTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1R5
cGVDYXN0cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09B
KQpAQCAtMTAwNSw4ICsxMDA2LDEwIEBAIGlubGluZSBpbnQgQWNjZXNzaWJpbGl0eU9iamVjdDo6
bGluZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IHsKIGlubGluZSB2
b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnVwZGF0ZUJhY2tpbmdTdG9yZSgpIHsgfQogI2VuZGlm
CiAKLSNkZWZpbmUgQUNDRVNTSUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhUb1ZhbHVlVHlwZU5h
bWUsIHByZWRpY2F0ZSkgXAotICAgIFRZUEVfQ0FTVFNfQkFTRShUb1ZhbHVlVHlwZU5hbWUsIEFj
Y2Vzc2liaWxpdHlPYmplY3QsIG9iamVjdCwgb2JqZWN0LT5wcmVkaWNhdGUsIG9iamVjdC5wcmVk
aWNhdGUpCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQUNDRVNTSUJJTElUWShUb1Zh
bHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3Qg
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7IHJldHVybiBvYmplY3QucHJl
ZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCA5NzBlYjJlMGZkZGYzNmJiMGI3
YzZhMThmYzJmMDU0ODFjMDIwZTEzLi41NDc3NDNkN2E4NjNiY2Q2ZjE1ZTk0OTZjMTQ0YjBlZjMz
NjQwMmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTE3NjAsMTMgKzE3NjAsMTMgQEAgdm9p
ZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpnZXREb2N1bWVudExpbmtzKEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYgcmUKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIE5vZGUq
IHBhcmVudCA9IGN1cnItPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgIGlmIChwYXJlbnQgJiYg
aXM8SFRNTEFyZWFFbGVtZW50PihjdXJyKSAmJiBpczxIVE1MTWFwRWxlbWVudD4ocGFyZW50KSkg
ewotICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsqIGFyZWFPYmplY3Qg
PSB0b0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsoYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0
ZShJbWFnZU1hcExpbmtSb2xlKSk7CisgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eUltYWdl
TWFwTGluayYgYXJlYU9iamVjdCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbms+
KCpheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKEltYWdlTWFwTGlua1JvbGUpKTsKICAgICAg
ICAgICAgICAgICBIVE1MTWFwRWxlbWVudCYgbWFwID0gZG93bmNhc3Q8SFRNTE1hcEVsZW1lbnQ+
KCpwYXJlbnQpOwotICAgICAgICAgICAgICAgIGFyZWFPYmplY3QtPnNldEhUTUxBcmVhRWxlbWVu
dChkb3duY2FzdDxIVE1MQXJlYUVsZW1lbnQ+KGN1cnIpKTsKLSAgICAgICAgICAgICAgICBhcmVh
T2JqZWN0LT5zZXRIVE1MTWFwRWxlbWVudCgmbWFwKTsKLSAgICAgICAgICAgICAgICBhcmVhT2Jq
ZWN0LT5zZXRQYXJlbnQoYWNjZXNzaWJpbGl0eVBhcmVudEZvckltYWdlTWFwKCZtYXApKTsKKyAg
ICAgICAgICAgICAgICBhcmVhT2JqZWN0LnNldEhUTUxBcmVhRWxlbWVudChkb3duY2FzdDxIVE1M
QXJlYUVsZW1lbnQ+KGN1cnIpKTsKKyAgICAgICAgICAgICAgICBhcmVhT2JqZWN0LnNldEhUTUxN
YXBFbGVtZW50KCZtYXApOworICAgICAgICAgICAgICAgIGFyZWFPYmplY3Quc2V0UGFyZW50KGFj
Y2Vzc2liaWxpdHlQYXJlbnRGb3JJbWFnZU1hcCgmbWFwKSk7CiAKLSAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKGFyZWFPYmplY3QpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JmFyZWFPYmplY3QpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjM0OSw3
ICsyMzQ5LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpoYW5kbGVBY3RpdmVE
ZXNjZW5kYW50Q2hhbmdlZCgpCiAgICAgaWYgKCFyZW5kZXJlcigpLT5mcmFtZSgpLnNlbGVjdGlv
bigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpIHx8IHJlbmRlcmVyKCktPmRvY3VtZW50KCkuZm9jdXNl
ZEVsZW1lbnQoKSAhPSBlbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodG9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0KGFjdGl2ZURlc2NlbmRhbnQoKSkgJiYgc2hvdWxkTm90aWZ5
QWN0aXZlRGVzY2VuZGFudCgpKQorICAgIGlmIChkb3duY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0PihhY3RpdmVEZXNjZW5kYW50KCkpICYmIHNob3VsZE5vdGlmeUFjdGl2ZURlc2NlbmRh
bnQoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCktPnBv
c3ROb3RpZmljYXRpb24obV9yZW5kZXJlciwgQVhPYmplY3RDYWNoZTo6QVhBY3RpdmVEZXNjZW5k
YW50Q2hhbmdlZCk7CiB9CiAKQEAgLTI2OTEsMTYgKzI2OTEsMTYgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Ojppbmhlcml0c1ByZXNlbnRhdGlvbmFsUm9sZSgpIGNvbnN0CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBh
cmVudCA9IHBhcmVudE9iamVjdCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2Jq
ZWN0KCkpIHsgCi0gICAgICAgIGlmICghcGFyZW50LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QoKSkKKyAgICAgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0PihwYXJlbnQp
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBOb2RlKiBub2RlID0g
dG9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KHBhcmVudCktPm5vZGUoKTsKKyAgICAgICAgTm9k
ZSogbm9kZSA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+KCpwYXJlbnQpLm5v
ZGUoKTsKICAgICAgICAgaWYgKCFub2RlIHx8ICFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgLy8gSWYgbmF0aXZlIHRhZyBvZiB0aGUg
cGFyZW50IGVsZW1lbnQgbWF0Y2hlcyBhbiBhY2NlcHRhYmxlIG5hbWUsIHRoZW4gcmV0dXJuCiAg
ICAgICAgIC8vIGJhc2VkIG9uIGl0cyBwcmVzZW50YXRpb25hbCBzdGF0dXMuCi0gICAgICAgIGlm
IChwb3NzaWJsZVBhcmVudFRhZ05hbWVzLT5jb250YWlucyhkb3duY2FzdDxFbGVtZW50Pihub2Rl
KS0+dGFnUU5hbWUoKSkpCisgICAgICAgIGlmIChwb3NzaWJsZVBhcmVudFRhZ05hbWVzLT5jb250
YWlucyhkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkudGFnUU5hbWUoKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gcGFyZW50LT5yb2xlVmFsdWUoKSA9PSBQcmVzZW50YXRpb25hbFJvbGU7CiAgICAgfQog
ICAgIApAQCAtMjgxMywxNCArMjgxMywxNCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmFkZEltYWdlTWFwQ2hpbGRyZW4oKQogICAgICAgICAvLyBhZGQgYW4gPGFyZWE+IGVsZW1l
bnQgZm9yIHRoaXMgY2hpbGQgaWYgaXQgaGFzIGEgbGluawogICAgICAgICBpZiAoIWFyZWEuaXNM
aW5rKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQWNjZXNzaWJpbGl0eUltYWdl
TWFwTGluayogYXJlYU9iamVjdCA9IHRvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluayhheE9iamVj
dENhY2hlKCktPmdldE9yQ3JlYXRlKEltYWdlTWFwTGlua1JvbGUpKTsKLSAgICAgICAgYXJlYU9i
amVjdC0+c2V0SFRNTEFyZWFFbGVtZW50KCZhcmVhKTsKLSAgICAgICAgYXJlYU9iamVjdC0+c2V0
SFRNTE1hcEVsZW1lbnQobWFwKTsKLSAgICAgICAgYXJlYU9iamVjdC0+c2V0UGFyZW50KHRoaXMp
OwotICAgICAgICBpZiAoIWFyZWFPYmplY3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKLSAg
ICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGFyZWFPYmplY3QpOworICAgICAgICBBY2Nlc3Np
YmlsaXR5SW1hZ2VNYXBMaW5rJiBhcmVhT2JqZWN0ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUlt
YWdlTWFwTGluaz4oKmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoSW1hZ2VNYXBMaW5rUm9s
ZSkpOworICAgICAgICBhcmVhT2JqZWN0LnNldEhUTUxBcmVhRWxlbWVudCgmYXJlYSk7CisgICAg
ICAgIGFyZWFPYmplY3Quc2V0SFRNTE1hcEVsZW1lbnQobWFwKTsKKyAgICAgICAgYXJlYU9iamVj
dC5zZXRQYXJlbnQodGhpcyk7CisgICAgICAgIGlmICghYXJlYU9iamVjdC5hY2Nlc3NpYmlsaXR5
SXNJZ25vcmVkKCkpCisgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZCgmYXJlYU9iamVjdCk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGF4T2JqZWN0Q2FjaGUoKS0+cmVtb3ZlKGFyZWFP
YmplY3QtPmF4T2JqZWN0SUQoKSk7CisgICAgICAgICAgICBheE9iamVjdENhY2hlKCktPnJlbW92
ZShhcmVhT2JqZWN0LmF4T2JqZWN0SUQoKSk7CiAgICAgfQogfQogCkBAIC0yODQzLDEwICsyODQz
LDEwIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkVGV4dEZpZWxkQ2hpbGRy
ZW4oKQogICAgIGlmICghc3BpbkJ1dHRvbkVsZW1lbnQgfHwgIXNwaW5CdXR0b25FbGVtZW50LT5p
c1NwaW5CdXR0b25FbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFjY2Vzc2liaWxp
dHlTcGluQnV0dG9uKiBheFNwaW5CdXR0b24gPSB0b0FjY2Vzc2liaWxpdHlTcGluQnV0dG9uKGF4
T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoU3BpbkJ1dHRvblJvbGUpKTsKLSAgICBheFNwaW5C
dXR0b24tPnNldFNwaW5CdXR0b25FbGVtZW50KHN0YXRpY19jYXN0PFNwaW5CdXR0b25FbGVtZW50
Kj4oc3BpbkJ1dHRvbkVsZW1lbnQpKTsKLSAgICBheFNwaW5CdXR0b24tPnNldFBhcmVudCh0aGlz
KTsKLSAgICBtX2NoaWxkcmVuLmFwcGVuZChheFNwaW5CdXR0b24pOworICAgIEFjY2Vzc2liaWxp
dHlTcGluQnV0dG9uJiBheFNwaW5CdXR0b24gPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U3BpbkJ1
dHRvbj4oKmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoU3BpbkJ1dHRvblJvbGUpKTsKKyAg
ICBheFNwaW5CdXR0b24uc2V0U3BpbkJ1dHRvbkVsZW1lbnQoc3RhdGljX2Nhc3Q8U3BpbkJ1dHRv
bkVsZW1lbnQqPihzcGluQnV0dG9uRWxlbWVudCkpOworICAgIGF4U3BpbkJ1dHRvbi5zZXRQYXJl
bnQodGhpcyk7CisgICAgbV9jaGlsZHJlbi5hcHBlbmQoJmF4U3BpbkJ1dHRvbik7CiB9CiAgICAg
CiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzU1ZHSW1hZ2UoKSBjb25zdApAQCAt
Mjg5NywxMSArMjg5NywxMSBAQCBBY2Nlc3NpYmlsaXR5U1ZHUm9vdCogQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6cmVtb3RlU1ZHUm9vdEVsZW1lbnQoKSBjb25zdAogCiAgICAgLy8gSW4gb3Jk
ZXIgdG8gY29ubmVjdCB0aGUgQVggaGllcmFyY2h5IGZyb20gdGhlIFNWRyByb290IGVsZW1lbnQg
ZnJvbSB0aGUgbG9hZGVkIHJlc291cmNlCiAgICAgLy8gdGhlIHBhcmVudCBtdXN0IGJlIHNldCwg
YmVjYXVzZSB0aGVyZSdzIG5vIG90aGVyIHdheSB0byBnZXQgYmFjayB0byB3aG8gY3JlYXRlZCB0
aGUgaW1hZ2UuCi0gICAgQVNTRVJUKHJvb3RTVkdPYmplY3QgJiYgcm9vdFNWR09iamVjdC0+aXNB
Y2Nlc3NpYmlsaXR5U1ZHUm9vdCgpKTsKLSAgICBpZiAoIXJvb3RTVkdPYmplY3QtPmlzQWNjZXNz
aWJpbGl0eVNWR1Jvb3QoKSkKKyAgICBBU1NFUlQocm9vdFNWR09iamVjdCAmJiBpczxBY2Nlc3Np
YmlsaXR5U1ZHUm9vdD4ocm9vdFNWR09iamVjdCkpOworICAgIGlmICghaXM8QWNjZXNzaWJpbGl0
eVNWR1Jvb3Q+KHJvb3RTVkdPYmplY3QpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAK
LSAgICByZXR1cm4gdG9BY2Nlc3NpYmlsaXR5U1ZHUm9vdChyb290U1ZHT2JqZWN0KTsKKyAgICBy
ZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNWR1Jvb3Q+KHJvb3RTVkdPYmplY3QpOwogfQog
ICAgIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRSZW1vdGVTVkdDaGlsZHJl
bigpCkBAIC0zMTQxLDggKzMxNDEsOCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmFyaWFTZWxlY3RlZFJvd3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiByZQogICAgICAg
ICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYWxsUm93czsKICAgICAgICAgYXJpYVRyZWVS
b3dzKGFsbFJvd3MpOwogICAgICAgICByb3dzSXRlcmF0aW9uKGFsbFJvd3MpOwotICAgIH0gZWxz
ZSBpZiAoaXNBY2Nlc3NpYmlsaXR5VGFibGUoKSAmJiB0b0FjY2Vzc2liaWxpdHlUYWJsZSh0aGlz
KS0+c3VwcG9ydHNTZWxlY3RlZFJvd3MoKSkKLSAgICAgICAgcm93c0l0ZXJhdGlvbih0b0FjY2Vz
c2liaWxpdHlUYWJsZSh0aGlzKS0+cm93cygpKTsKKyAgICB9IGVsc2UgaWYgKGlzQWNjZXNzaWJp
bGl0eVRhYmxlKCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqdGhpcykuc3VwcG9y
dHNTZWxlY3RlZFJvd3MoKSkKKyAgICAgICAgcm93c0l0ZXJhdGlvbihkb3duY2FzdDxBY2Nlc3Np
YmlsaXR5VGFibGU+KCp0aGlzKS5yb3dzKCkpOwogfQogICAgIAogdm9pZCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjphcmlhTGlzdGJveFNlbGVjdGVkQ2hpbGRyZW4oQWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yJiByZXN1bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCmluZGV4IGI0ZDI0MDU0ZTNjMzY3
MTFlMzY3OTEzMGE0OWI1YjhiY2IxNTJhODMuLjU0NTJkY2QwMGU2OTY0Mzg2YmYwODYyN2EwZjA1
YzdmYWQyZWRmOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCkBAIC0zMzgsOCArMzM4LDggQEAgcHJpdmF0
ZToKICNlbmRpZgogfTsKIAotQUNDRVNTSUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LCBpc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0FDQ0VTU0lCSUxJ
VFkoQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCwgaXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
KCkpCisKICNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNWR1Jvb3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNWR1Jvb3QuaAppbmRleCBl
OGI4NzIyMWUxNTdmMzczNjIzNjRkMDc0OTdjZjI1ZmU1ZDkzYzYyLi43N2VlYjFiNmFhNTIyMDA5
NGNkMDNhNTk4NDc2NTBiMWE0MzA2MWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTVkdSb290LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U1ZHUm9vdC5oCkBAIC00OSw5ICs0OSw5IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnRPYmplY3QoKSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U1ZHUm9vdCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIH07Ci0KLUFDQ0VTU0lCSUxJVFlfT0JKRUNU
X1RZUEVfQ0FTVFMoQWNjZXNzaWJpbGl0eVNWR1Jvb3QsIGlzQWNjZXNzaWJpbGl0eVNWR1Jvb3Qo
KSkKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUgCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQUNDRVNTSUJJTElUWShBY2Nlc3NpYmlsaXR5U1ZHUm9vdCwgaXNBY2Nlc3NpYmlsaXR5U1ZH
Um9vdCgpKQorCiAjZW5kaWYgLy8gQWNjZXNzaWJpbGl0eVNWR1Jvb3RfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNw
cAppbmRleCA5ZjI0Yzk3ZmRiYmEyMTM5NDRkNDIwZmMzZmUxYjBkZjZjZDJhZjNiLi4yZDc2NzY2
MjZjOWNhZmUzY2U1ZDRhZGM5NmVhYmJiMDc3MjczNWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcApAQCAt
MTUzLDEwICsxNTMsMTAgQEAgQWNjZXNzaWJpbGl0eVNjcm9sbGJhciogQWNjZXNzaWJpbGl0eVNj
cm9sbFZpZXc6OmFkZENoaWxkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2MKICAgICBpZiAoIWNhY2hl
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIq
IHNjcm9sbEJhck9iamVjdCA9IHRvQWNjZXNzaWJpbGl0eVNjcm9sbGJhcihjYWNoZS0+Z2V0T3JD
cmVhdGUoc2Nyb2xsYmFyKSk7Ci0gICAgc2Nyb2xsQmFyT2JqZWN0LT5zZXRQYXJlbnQodGhpcyk7
Ci0gICAgbV9jaGlsZHJlbi5hcHBlbmQoc2Nyb2xsQmFyT2JqZWN0KTsKLSAgICByZXR1cm4gc2Ny
b2xsQmFyT2JqZWN0OworICAgIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXImIHNjcm9sbEJhck9iamVj
dCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI+KCpjYWNoZS0+Z2V0T3JDcmVhdGUo
c2Nyb2xsYmFyKSk7CisgICAgc2Nyb2xsQmFyT2JqZWN0LnNldFBhcmVudCh0aGlzKTsKKyAgICBt
X2NoaWxkcmVuLmFwcGVuZCgmc2Nyb2xsQmFyT2JqZWN0KTsKKyAgICByZXR1cm4gJnNjcm9sbEJh
ck9iamVjdDsKIH0KICAgICAgICAgCiB2b2lkIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3OjpjbGVh
ckNoaWxkcmVuKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVNjcm9sbFZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVNjcm9sbFZpZXcuaAppbmRleCA1NmJlMWEwN2U5OTM0NjY4MTEzZjM5NTRmODVm
M2RiMTg2ZmFkMWFjLi44OWZkYmE5ZmE1YzAxMjEwZjMzNGM3MWM0ZDIxMTAzNWEwOTMxOTcwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
U2Nyb2xsVmlldy5oCkBAIC04Myw5ICs4Myw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3Q+IG1fdmVydGljYWxTY3JvbGxiYXI7CiAgICAgYm9vbCBtX2NoaWxkcmVu
RGlydHk7CiB9OwotCi1BQ0NFU1NJQklMSVRZX09CSkVDVF9UWVBFX0NBU1RTKEFjY2Vzc2liaWxp
dHlTY3JvbGxWaWV3LCBpc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpCiAgICAgCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQUNDRVNTSUJJTElUWShB
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldywgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldygpKQorCiAj
ZW5kaWYgLy8gQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuaAppbmRleCBhNzI3OTZl
NTQwNTE5ZjA5NzZjZGI5YTExNmQ1MGVjZDMyM2VhNDY4Li4yMDlmZmZkNWQwYzRhMjk3MjM4NmIz
MWM5MDQ2OTYzODg0YjRjMTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuaApAQCAtNjIsOCArNjIsOCBAQCBwcml2YXRl
OgogICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fc2Nyb2xsYmFyOwogfTsKIAotQUNDRVNTSUJJTElU
WV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLCBpc0FjY2Vzc2liaWxp
dHlTY3JvbGxiYXIoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0FDQ0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eVNjcm9sbGJhciwgaXNBY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyKCkpCisKICNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNs
aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlk
ZXIuY3BwCmluZGV4IGI1ZTM0NmQ1NmU2N2I0NDU0ZDA0YzlkNjBjOTgxMGE5MTIxZTEyZmUuLjhi
Yjk0OTBjYWVhMzg3NTNmMzkyNmVjZWQzNTJmM2MyZTg4Yzg1YWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcApAQCAtODQs
MTUgKzg0LDE1IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVNsaWRlcjo6YWRkQ2hpbGRyZW4oKQogCiAg
ICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX3JlbmRlcmVyLT5kb2N1bWVudCgpLmF4T2JqZWN0
Q2FjaGUoKTsKIAotICAgIEFjY2Vzc2liaWxpdHlTbGlkZXJUaHVtYiogdGh1bWIgPSB0b0FjY2Vz
c2liaWxpdHlTbGlkZXJUaHVtYihjYWNoZS0+Z2V0T3JDcmVhdGUoU2xpZGVyVGh1bWJSb2xlKSk7
Ci0gICAgdGh1bWItPnNldFBhcmVudCh0aGlzKTsKKyAgICBBY2Nlc3NpYmlsaXR5U2xpZGVyVGh1
bWImIHRodW1iID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNsaWRlclRodW1iPigqY2FjaGUtPmdl
dE9yQ3JlYXRlKFNsaWRlclRodW1iUm9sZSkpOworICAgIHRodW1iLnNldFBhcmVudCh0aGlzKTsK
IAogICAgIC8vIEJlZm9yZSBhY3R1YWxseSBhZGRpbmcgdGhlIHZhbHVlIGluZGljYXRvciB0byB0
aGUgaGllcmFyY2h5LAogICAgIC8vIGFsbG93IHRoZSBwbGF0Zm9ybSB0byBtYWtlIGEgZmluYWwg
ZGVjaXNpb24gYWJvdXQgaXQuCi0gICAgaWYgKHRodW1iLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
KCkpCi0gICAgICAgIGNhY2hlLT5yZW1vdmUodGh1bWItPmF4T2JqZWN0SUQoKSk7CisgICAgaWYg
KHRodW1iLmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKKyAgICAgICAgY2FjaGUtPnJlbW92ZSh0
aHVtYi5heE9iamVjdElEKCkpOwogICAgIGVsc2UKLSAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQo
dGh1bWIpOworICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZCgmdGh1bWIpOwogfQogCiBjb25zdCBB
dG9taWNTdHJpbmcmIEFjY2Vzc2liaWxpdHlTbGlkZXI6OmdldEF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5oCmluZGV4IDVlOWU3ZmRmYzU4ODljOTU5Y2Rm
YWIyNDNjZDY4NjE2YzkzNTRkOTYuLjI2NzhlNzI4ZGRjNTQ1OTU5MWQ5ODI4YTU4OTg5ODE5NTI4
NzU1ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNsaWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNsaWRlci5oCkBAIC04NCw4ICs4NCw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29s
IGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCi1B
Q0NFU1NJQklMSVRZX09CSkVDVF9UWVBFX0NBU1RTKEFjY2Vzc2liaWxpdHlTbGlkZXJUaHVtYiwg
aXNTbGlkZXJUaHVtYigpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQUNDRVNTSUJJTElUWShBY2Nlc3NpYmlsaXR5U2xpZGVyVGh1bWIsIGlzU2xp
ZGVyVGh1bWIoKSkKKwogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlTbGlkZXJfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTcGluQnV0dG9u
LmNwcAppbmRleCA5MzJhY2I0ZGZkNzcxOTFmYzdmOTM4NzFjOGQxZGJiZTE4ZjdjZTNiLi4wN2Q4
YmE2NTcxZjViNThmNWYzNzg3ZTRjZWUzYTQwOWI1OGY3OGI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTcGluQnV0dG9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTcGluQnV0dG9uLmNwcApA
QCAtODIsMTUgKzgyLDE1IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVNwaW5CdXR0b246OmFkZENoaWxk
cmVuKCkKIHsKICAgICBtX2hhdmVDaGlsZHJlbiA9IHRydWU7CiAgICAgCi0gICAgQWNjZXNzaWJp
bGl0eVNwaW5CdXR0b25QYXJ0KiBpbmNyZW1lbnRvciA9IHRvQWNjZXNzaWJpbGl0eVNwaW5CdXR0
b25QYXJ0KGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoU3BpbkJ1dHRvblBhcnRSb2xlKSk7
Ci0gICAgaW5jcmVtZW50b3ItPnNldElzSW5jcmVtZW50b3IodHJ1ZSk7Ci0gICAgaW5jcmVtZW50
b3ItPnNldFBhcmVudCh0aGlzKTsKLSAgICBtX2NoaWxkcmVuLmFwcGVuZChpbmNyZW1lbnRvcik7
CisgICAgQWNjZXNzaWJpbGl0eVNwaW5CdXR0b25QYXJ0JiBpbmNyZW1lbnRvciA9IGRvd25jYXN0
PEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uUGFydD4oKmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVh
dGUoU3BpbkJ1dHRvblBhcnRSb2xlKSk7CisgICAgaW5jcmVtZW50b3Iuc2V0SXNJbmNyZW1lbnRv
cih0cnVlKTsKKyAgICBpbmNyZW1lbnRvci5zZXRQYXJlbnQodGhpcyk7CisgICAgbV9jaGlsZHJl
bi5hcHBlbmQoJmluY3JlbWVudG9yKTsKIAotICAgIEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uUGFy
dCogZGVjcmVtZW50b3IgPSB0b0FjY2Vzc2liaWxpdHlTcGluQnV0dG9uUGFydChheE9iamVjdENh
Y2hlKCktPmdldE9yQ3JlYXRlKFNwaW5CdXR0b25QYXJ0Um9sZSkpOwotICAgIGRlY3JlbWVudG9y
LT5zZXRJc0luY3JlbWVudG9yKGZhbHNlKTsKLSAgICBkZWNyZW1lbnRvci0+c2V0UGFyZW50KHRo
aXMpOwotICAgIG1fY2hpbGRyZW4uYXBwZW5kKGRlY3JlbWVudG9yKTsKKyAgICBBY2Nlc3NpYmls
aXR5U3BpbkJ1dHRvblBhcnQmIGRlY3JlbWVudG9yID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNw
aW5CdXR0b25QYXJ0PigqYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShTcGluQnV0dG9uUGFy
dFJvbGUpKTsKKyAgICBkZWNyZW1lbnRvci5zZXRJc0luY3JlbWVudG9yKGZhbHNlKTsKKyAgICBk
ZWNyZW1lbnRvci5zZXRQYXJlbnQodGhpcyk7CisgICAgbV9jaGlsZHJlbi5hcHBlbmQoJmRlY3Jl
bWVudG9yKTsKIH0KICAgICAKIHZvaWQgQWNjZXNzaWJpbGl0eVNwaW5CdXR0b246OnN0ZXAoaW50
IGFtb3VudCkKQEAgLTEzNSwxMSArMTM1LDExIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVNwaW5CdXR0
b25QYXJ0OjpwcmVzcygpCiAgICAgaWYgKCFtX3BhcmVudCB8fCAhbV9wYXJlbnQtPmlzU3BpbkJ1
dHRvbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eVNw
aW5CdXR0b24qIHNwaW5CdXR0b24gPSB0b0FjY2Vzc2liaWxpdHlTcGluQnV0dG9uKHBhcmVudE9i
amVjdCgpKTsKKyAgICBBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbiYgc3BpbkJ1dHRvbiA9IGRvd25j
YXN0PEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uPigqcGFyZW50T2JqZWN0KCkpOwogICAgIGlmICht
X2lzSW5jcmVtZW50b3IpCi0gICAgICAgIHNwaW5CdXR0b24tPnN0ZXAoMSk7CisgICAgICAgIHNw
aW5CdXR0b24uc3RlcCgxKTsKICAgICBlbHNlCi0gICAgICAgIHNwaW5CdXR0b24tPnN0ZXAoLTEp
OworICAgICAgICBzcGluQnV0dG9uLnN0ZXAoLTEpOwogICAgIAogICAgIHJldHVybiB0cnVlOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
U3BpbkJ1dHRvbi5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
U3BpbkJ1dHRvbi5oCmluZGV4IGJlMjFmZmU5ZGY1MWIyOTg3NzMwOTM3ODdmNWY3NTg5NWU0MjI1
NWUuLjBjYjc4ZDdmZDVmZDc2ZWU0NGZlYzVlYjY5Mzg0NjU5NTc3N2MzMWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTcGluQnV0dG9u
LmgKQEAgLTczLDEwICs3MywxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1NwaW5C
dXR0b25QYXJ0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwg
TGF5b3V0UmVjdCBlbGVtZW50UmVjdCgpIGNvbnN0IG92ZXJyaWRlOwogfTsKLQotQUNDRVNTSUJJ
TElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbiwgaXNOYXRpdmVT
cGluQnV0dG9uKCkpCi1BQ0NFU1NJQklMSVRZX09CSkVDVF9UWVBFX0NBU1RTKEFjY2Vzc2liaWxp
dHlTcGluQnV0dG9uUGFydCwgaXNTcGluQnV0dG9uUGFydCgpKQogICAgIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZSAKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vz
c2liaWxpdHlTcGluQnV0dG9uLCBpc05hdGl2ZVNwaW5CdXR0b24oKSkKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQUNDRVNTSUJJTElUWShBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvblBhcnQsIGlzU3Bp
bkJ1dHRvblBhcnQoKSkKKwogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNw
cAppbmRleCA4Mjg4NzRmMzkwODk1M2VhNWYxNDgyYTU3NjExNzVmNWYzN2UwZWQ0Li5iYWI5NWRh
MWJmNDM1MmM2MDk2NWYzMDQyYjQ5MjJiOTA1ODNlYjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCkBAIC0zODAsMTIgKzM4
MCwxMiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlUYWJsZTo6YWRkQ2hpbGRyZW4oKQogICAgIC8vIG1h
a2UgdGhlIGNvbHVtbnMgYmFzZWQgb24gdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBmaXJz
dCBib2R5CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbWF4Q29sdW1uQ291bnQ7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlU
YWJsZUNvbHVtbiogY29sdW1uID0gdG9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4oYXhDYWNoZS0+
Z2V0T3JDcmVhdGUoQ29sdW1uUm9sZSkpOwotICAgICAgICBjb2x1bW4tPnNldENvbHVtbkluZGV4
KChpbnQpaSk7Ci0gICAgICAgIGNvbHVtbi0+c2V0UGFyZW50KHRoaXMpOwotICAgICAgICBtX2Nv
bHVtbnMuYXBwZW5kKGNvbHVtbik7Ci0gICAgICAgIGlmICghY29sdW1uLT5hY2Nlc3NpYmlsaXR5
SXNJZ25vcmVkKCkpCi0gICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChjb2x1bW4pOworICAg
ICAgICBBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4mIGNvbHVtbiA9IGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlUYWJsZUNvbHVtbj4oKmF4Q2FjaGUtPmdldE9yQ3JlYXRlKENvbHVtblJvbGUpKTsKKyAg
ICAgICAgY29sdW1uLnNldENvbHVtbkluZGV4KChpbnQpaSk7CisgICAgICAgIGNvbHVtbi5zZXRQ
YXJlbnQodGhpcyk7CisgICAgICAgIG1fY29sdW1ucy5hcHBlbmQoJmNvbHVtbik7CisgICAgICAg
IGlmICghY29sdW1uLmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKKyAgICAgICAgICAgIG1fY2hp
bGRyZW4uYXBwZW5kKCZjb2x1bW4pOwogICAgIH0KICAgICAKICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBoZWFkZXJDb250YWluZXJPYmplY3QgPSBoZWFkZXJDb250YWluZXIoKTsKQEAgLTQwOSwy
NCArNDA5LDI0IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlOjphZGRDaGlsZHJlbkZyb21TZWN0
aW9uKFJlbmRlclRhYmxlU2VjdGlvbiogdGFibGVTZWN0aW9uCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgCiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvd09iamVjdCA9IGF4
Q2FjaGUtPmdldE9yQ3JlYXRlKHJlbmRlclJvdyk7Ci0gICAgICAgIGlmICghcm93T2JqZWN0LT5p
c1RhYmxlUm93KCkpCisgICAgICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eVRhYmxlUm93Pihyb3dP
YmplY3QpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBBY2Nlc3Np
YmlsaXR5VGFibGVSb3cqIHJvdyA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlUm93KHJvd09iamVjdCk7
CisgICAgICAgIEFjY2Vzc2liaWxpdHlUYWJsZVJvdyYgcm93ID0gZG93bmNhc3Q8QWNjZXNzaWJp
bGl0eVRhYmxlUm93Pigqcm93T2JqZWN0KTsKICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBl
dmVyeSBjZWxsIGZvciBhIG5ldyByb3csIGJlY2F1c2UgY2VsbCBzcGFucwogICAgICAgICAvLyBj
YW4gY2F1c2UgdXMgdG8gbWlzcyByb3dzIGlmIHdlIGp1c3QgY2hlY2sgdGhlIGZpcnN0IGNvbHVt
bi4KLSAgICAgICAgaWYgKGFwcGVuZGVkUm93cy5jb250YWlucyhyb3cpKQorICAgICAgICBpZiAo
YXBwZW5kZWRSb3dzLmNvbnRhaW5zKCZyb3cpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIAotICAgICAgICByb3ctPnNldFJvd0luZGV4KHN0YXRpY19jYXN0PGludD4obV9yb3dzLnNp
emUoKSkpOwotICAgICAgICBtX3Jvd3MuYXBwZW5kKHJvdyk7Ci0gICAgICAgIGlmICghcm93LT5h
Y2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCi0gICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChy
b3cpOworICAgICAgICByb3cuc2V0Um93SW5kZXgoc3RhdGljX2Nhc3Q8aW50PihtX3Jvd3Muc2l6
ZSgpKSk7CisgICAgICAgIG1fcm93cy5hcHBlbmQoJnJvdyk7CisgICAgICAgIGlmICghcm93LmFj
Y2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKKyAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKCZy
b3cpOwogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZFZlY3Rvcihyb3ctPmNoaWxkcmVuKCkpOworICAg
ICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmRWZWN0b3Iocm93LmNoaWxkcmVuKCkpOwogI2VuZGlm
Ci0gICAgICAgIGFwcGVuZGVkUm93cy5hZGQocm93KTsKKyAgICAgICAgYXBwZW5kZWRSb3dzLmFk
ZCgmcm93KTsKICAgICB9CiAgICAgCiAgICAgbWF4Q29sdW1uQ291bnQgPSBzdGQ6Om1heCh0YWJs
ZVNlY3Rpb24tPm51bUNvbHVtbnMoKSwgbWF4Q29sdW1uQ291bnQpOwpAQCAtNDM3LDcgKzQzNyw3
IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlUYWJsZTo6aGVhZGVyQ29udGFp
bmVyKCkKICAgICBpZiAobV9oZWFkZXJDb250YWluZXIpCiAgICAgICAgIHJldHVybiBtX2hlYWRl
ckNvbnRhaW5lci5nZXQoKTsKICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5TW9ja09iamVjdCogdGFi
bGVIZWFkZXIgPSB0b0FjY2Vzc2liaWxpdHlNb2NrT2JqZWN0KGF4T2JqZWN0Q2FjaGUoKS0+Z2V0
T3JDcmVhdGUoVGFibGVIZWFkZXJDb250YWluZXJSb2xlKSk7CisgICAgQWNjZXNzaWJpbGl0eU1v
Y2tPYmplY3QqIHRhYmxlSGVhZGVyID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU1vY2tPYmplY3Q+
KGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoVGFibGVIZWFkZXJDb250YWluZXJSb2xlKSk7
CiAgICAgdGFibGVIZWFkZXItPnNldFBhcmVudCh0aGlzKTsKIAogICAgIG1faGVhZGVyQ29udGFp
bmVyID0gdGFibGVIZWFkZXI7CkBAIC00NjYsNyArNDY2LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
VGFibGU6OmNvbHVtbkhlYWRlcnMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBoZWFkZXJz
KQogICAgIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKICAgICAKICAgICBmb3IgKGNvbnN0
IGF1dG8mIGNvbHVtbiA6IG1fY29sdW1ucykgewotICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9i
amVjdCogaGVhZGVyID0gdG9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4oY29sdW1uLmdldCgpKS0+
aGVhZGVyT2JqZWN0KCkpCisgICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXIg
PSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4+KCpjb2x1bW4pLmhlYWRlck9iamVj
dCgpKQogICAgICAgICAgICAgaGVhZGVycy5hcHBlbmQoaGVhZGVyKTsKICAgICB9CiB9CkBAIC00
NzksNyArNDc5LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6OnJvd0hlYWRlcnMoQWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBoZWFkZXJzKQogICAgIHVwZGF0ZUNoaWxkcmVuSWZOZWNl
c3NhcnkoKTsKICAgICAKICAgICBmb3IgKGNvbnN0IGF1dG8mIHJvdyA6IG1fcm93cykgewotICAg
ICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogaGVhZGVyID0gdG9BY2Nlc3NpYmlsaXR5VGFi
bGVSb3cocm93LmdldCgpKS0+aGVhZGVyT2JqZWN0KCkpCisgICAgICAgIGlmIChBY2Nlc3NpYmls
aXR5T2JqZWN0KiBoZWFkZXIgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVSb3c+KCpyb3cp
LmhlYWRlck9iamVjdCgpKQogICAgICAgICAgICAgaGVhZGVycy5hcHBlbmQoaGVhZGVyKTsKICAg
ICB9CiB9CkBAIC01NDgsMTkgKzU0OCwxOSBAQCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBBY2Nl
c3NpYmlsaXR5VGFibGU6OmNlbGxGb3JDb2x1bW5BbmRSb3codW5zaWduZWQgY29sdW1uLAogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNvbEluZGV4Q291bnRlciA9IHN0ZDo6bWluKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihjaGlsZHJlbi5zaXplKCkpLCBjb2x1bW4gKyAxKTsgY29sSW5kZXhDb3VudGVy
ID4gMDsgLS1jb2xJbmRleENvdW50ZXIpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNvbEluZGV4
ID0gY29sSW5kZXhDb3VudGVyIC0gMTsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNoaWxkID0gY2hpbGRyZW5bY29sSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgQVNTRVJUKGNo
aWxkLT5pc1RhYmxlQ2VsbCgpKTsKLSAgICAgICAgICAgIGlmICghY2hpbGQtPmlzVGFibGVDZWxs
KCkpCisgICAgICAgICAgICBBU1NFUlQoaXM8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oY2hpbGQp
KTsKKyAgICAgICAgICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oY2hpbGQpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdGQ6
OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBjb2x1bW5SYW5nZTsKICAgICAgICAgICAgIHN0ZDo6
cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IHJvd1JhbmdlOwotICAgICAgICAgICAgQWNjZXNzaWJp
bGl0eVRhYmxlQ2VsbCogdGFibGVDZWxsQ2hpbGQgPSB0b0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwo
Y2hpbGQpOwotICAgICAgICAgICAgdGFibGVDZWxsQ2hpbGQtPmNvbHVtbkluZGV4UmFuZ2UoY29s
dW1uUmFuZ2UpOwotICAgICAgICAgICAgdGFibGVDZWxsQ2hpbGQtPnJvd0luZGV4UmFuZ2Uocm93
UmFuZ2UpOworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCYgdGFibGVDZWxsQ2hp
bGQgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY2hpbGQpOworICAgICAgICAg
ICAgdGFibGVDZWxsQ2hpbGQuY29sdW1uSW5kZXhSYW5nZShjb2x1bW5SYW5nZSk7CisgICAgICAg
ICAgICB0YWJsZUNlbGxDaGlsZC5yb3dJbmRleFJhbmdlKHJvd1JhbmdlKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKChjb2x1bW4gPj0gY29sdW1uUmFuZ2UuZmlyc3QgJiYgY29sdW1u
IDwgKGNvbHVtblJhbmdlLmZpcnN0ICsgY29sdW1uUmFuZ2Uuc2Vjb25kKSkKICAgICAgICAgICAg
ICAgICAmJiAocm93ID49IHJvd1JhbmdlLmZpcnN0ICYmIHJvdyA8IChyb3dSYW5nZS5maXJzdCAr
IHJvd1JhbmdlLnNlY29uZCkpKQotICAgICAgICAgICAgICAgIHJldHVybiB0YWJsZUNlbGxDaGls
ZDsKKyAgICAgICAgICAgICAgICByZXR1cm4gJnRhYmxlQ2VsbENoaWxkOwogICAgICAgICB9CiAg
ICAgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5VGFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVRhYmxlLmgKaW5kZXggNzQ2ZDFkYjJlMzg1YzEzZDQzNjZkNDE0OTNmZjY1NmU4ZDQzZGI0
Ni4uMjFjMTJmZWE1ODlmYzMyNzU0ZjRiZWI3OTA5ZjljMTZlYTFkYzAxOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oCkBAIC0xMDEs
OCArMTAxLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZENoaWxkcmVuRnJvbVNlY3Rpb24oUmVu
ZGVyVGFibGVTZWN0aW9uKiwgdW5zaWduZWQmIG1heENvbHVtbkNvdW50KTsKIH07CiAKLUFDQ0VT
U0lCSUxJVFlfT0JKRUNUX1RZUEVfQ0FTVFMoQWNjZXNzaWJpbGl0eVRhYmxlLCBpc1RhYmxlKCkp
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUgCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQUND
RVNTSUJJTElUWShBY2Nlc3NpYmlsaXR5VGFibGUsIGlzVGFibGUoKSkKKwogI2VuZGlmIC8vIEFj
Y2Vzc2liaWxpdHlUYWJsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcAppbmRleCA5MDNiYTE3ODY4NWFhMWQzYWQ2
ODA5M2MxZjlhNjhlZTA4MWI4OWMyLi45ZjcyMTI0MmJiNjkzZTE1YTlhMzg5NjkyMjQ3YTI0ZWJj
NGU4YjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlUYWJsZUNlbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAKQEAgLTg3LDcgKzg3LDcgQEAgQWNjZXNzaWJpbGl0eVRh
YmxlKiBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpwYXJlbnRUYWJsZSgpIGNvbnN0CiAgICAgLy8g
QnkgdXNpbmcgb25seSBnZXQoKSBpbXBsaWVzIHRoYXQgdGhlIEFYVGFibGUgbXVzdCBiZSBjcmVh
dGVkIGJlZm9yZSBBWFRhYmxlQ2VsbHMuIFRoaXMgc2hvdWxkCiAgICAgLy8gYWx3YXlzIGJlIHRo
ZSBjYXNlIHdoZW4gQVQgY2xpZW50cyBhY2Nlc3MgYSB0YWJsZS4KICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI2NTIgICAgCi0gICAgcmV0dXJuIHRvQWNj
ZXNzaWJpbGl0eVRhYmxlKGF4T2JqZWN0Q2FjaGUoKS0+Z2V0KHRvUmVuZGVyVGFibGVDZWxsKG1f
cmVuZGVyZXIpLT50YWJsZSgpKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlU
YWJsZT4oYXhPYmplY3RDYWNoZSgpLT5nZXQodG9SZW5kZXJUYWJsZUNlbGwobV9yZW5kZXJlcikt
PnRhYmxlKCkpKTsKIH0KICAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6aXNUYWJs
ZUNlbGwoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlUYWJsZUNlbGwuaAppbmRleCA2MWFmZjdiNmI2NjZkYjc0NjMxYTY1Zjc3ZTY1
MzFiOGYwYmRmOTBlLi5iMDNmODNhMDM0YTkyYTBhNjcwNmQ0YjJhMzQ3OWIyMDkxYTE4ODJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZUNlbGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlU
YWJsZUNlbGwuaApAQCAtNzEsOCArNzEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNUYWJsZUNl
bGxJblNhbWVDb2xHcm91cChBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKik7CiB9OwogCi1BQ0NFU1NJ
QklMSVRZX09CSkVDVF9UWVBFX0NBU1RTKEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwsIGlzVGFibGVD
ZWxsKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUgCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQUNDRVNTSUJJTElUWShBY2Nlc3NpYmlsaXR5VGFibGVDZWxsLCBpc1RhYmxlQ2VsbCgpKQor
CiAjZW5kaWYgLy8gQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHAKaW5k
ZXggNzhiNmQ1ZmM3YjViOWE3MTM2OTNiZWIzNjI5YjhhZTRlMDg0ZDc1NS4uYWFiNTRjOTU2NmQ2
MjUyMGUxN2Y5MzQzMWM4YWYyY2VkZmJiZWQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmNwcApAQCAtNzks
OCArNzksOCBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW46
OmhlYWRlck9iamVjdCgpCiAgICAgaWYgKCFtX3BhcmVudC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eVRhYmxl
KiBwYXJlbnRUYWJsZSA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlKG1fcGFyZW50KTsKLSAgICBpZiAo
cGFyZW50VGFibGUtPmlzQXJpYVRhYmxlKCkpIHsKKyAgICBBY2Nlc3NpYmlsaXR5VGFibGUmIHBh
cmVudFRhYmxlID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqbV9wYXJlbnQpOworICAg
IGlmIChwYXJlbnRUYWJsZS5pc0FyaWFUYWJsZSgpKSB7CiAgICAgICAgIGZvciAoY29uc3QgYXV0
byYgY2VsbCA6IGNoaWxkcmVuKCkpIHsKICAgICAgICAgICAgIGlmIChjZWxsLT5hcmlhUm9sZUF0
dHJpYnV0ZSgpID09IENvbHVtbkhlYWRlclJvbGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNl
bGwuZ2V0KCk7CkBAIC0xNjcsMTEgKzE2NywxMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlUYWJsZUNv
bHVtbjo6YWRkQ2hpbGRyZW4oKQogICAgIGlmICghbV9wYXJlbnQgfHwgIW1fcGFyZW50LT5pc0Fj
Y2Vzc2liaWxpdHlUYWJsZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgQWNjZXNzaWJp
bGl0eVRhYmxlKiBwYXJlbnRUYWJsZSA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlKG1fcGFyZW50KTsK
LSAgICBpbnQgbnVtUm93cyA9IHBhcmVudFRhYmxlLT5yb3dDb3VudCgpOworICAgIEFjY2Vzc2li
aWxpdHlUYWJsZSYgcGFyZW50VGFibGUgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpt
X3BhcmVudCk7CisgICAgaW50IG51bVJvd3MgPSBwYXJlbnRUYWJsZS5yb3dDb3VudCgpOwogICAg
IAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUm93czsgaSsrKSB7Ci0gICAgICAgIEFjY2Vz
c2liaWxpdHlUYWJsZUNlbGwqIGNlbGwgPSBwYXJlbnRUYWJsZS0+Y2VsbEZvckNvbHVtbkFuZFJv
dyhtX2NvbHVtbkluZGV4LCBpKTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogY2Vs
bCA9IHBhcmVudFRhYmxlLmNlbGxGb3JDb2x1bW5BbmRSb3cobV9jb2x1bW5JbmRleCwgaSk7CiAg
ICAgICAgIGlmICghY2VsbCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29s
dW1uLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNv
bHVtbi5oCmluZGV4IGUzY2M1MTYyNmE4YzEzZGZhMGFlZGU5ZmJlNDg1ZWE0ODdmZTljOTguLmFm
N2NlM2MxODgxOWUzNjZjMzMzY2JiYzYxZjQ2N2M4YzFiNDRjNzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaApA
QCAtNjYsOCArNjYsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlQWNjZXNz
aWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAotQUNDRVNTSUJJTElUWV9P
QkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4sIGlzVGFibGVDb2x1bW4o
KSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19B
Q0NFU1NJQklMSVRZKEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbiwgaXNUYWJsZUNvbHVtbigpKQor
CiAjZW5kaWYgLy8gQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlSGVh
ZGVyQ29udGFpbmVyLmNwcAppbmRleCBlNGRkOTMyZjZmZGFjM2Q5NTg0MzBkYzRiNjkwNTE0M2U2
NjYzMzdmLi4wODNiZDk4Y2I4MDc3ZDUzNGMyY2ZjMWU0NWYyYzFmZjY0MmMyODhiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUhlYWRl
ckNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyOjphZGRDaGlsZHJlbigpCiAgICAgaWYgKCFt
X3BhcmVudCB8fCAhbV9wYXJlbnQtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICB0b0FjY2Vzc2liaWxpdHlUYWJsZShtX3BhcmVudCktPmNvbHVtbkhl
YWRlcnMobV9jaGlsZHJlbik7CisgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqbV9w
YXJlbnQpLmNvbHVtbkhlYWRlcnMobV9jaGlsZHJlbik7CiAgICAgCiAgICAgZm9yIChjb25zdCBh
dXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCiAgICAgICAgIG1faGVhZGVyUmVjdC51bml0ZShjaGls
ZC0+ZWxlbWVudFJlY3QoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAKaW5kZXggNjM0ZDE0NGU1NmM0NWQwNjkwZDE0
ODA0ZDVlMjNmNzk3YjQ5YzA5NS4uMWE4ZWZiODBjOTczNmE3ODgzYTczZjA5YmE3YzNiMjdkMDlm
MzNjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5VGFibGVSb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVRhYmxlUm93LmNwcApAQCAtMTA2LDggKzEwNiw4IEBAIEFjY2Vzc2liaWxpdHlUYWJs
ZSogQWNjZXNzaWJpbGl0eVRhYmxlUm93OjpwYXJlbnRUYWJsZSgpIGNvbnN0CiAgICAgZm9yIChB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBwYXJlbnRPYmplY3QoKTsgcGFyZW50OyBwYXJl
bnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7CiAgICAgICAgIC8vIElmIHRoaXMgaXMgYSB0
YWJsZSBvYmplY3QsIGJ1dCBub3QgYW4gYWNjZXNzaWJpbGl0eSB0YWJsZSwgd2Ugc2hvdWxkIHN0
b3AgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvCiAgICAgICAgIC8vIGNob29zZSBhbm90aGVyIGFu
Y2VzdG9yIHRhYmxlIGFzIHRoaXMgcm93J3MgdGFibGUuCi0gICAgICAgIGlmIChwYXJlbnQtPmlz
VGFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBwYXJlbnQtPmlzQWNjZXNzaWJpbGl0eVRhYmxl
KCkgPyB0b0FjY2Vzc2liaWxpdHlUYWJsZShwYXJlbnQpIDogMDsKKyAgICAgICAgaWYgKGlzPEFj
Y2Vzc2liaWxpdHlUYWJsZT4ocGFyZW50KSkKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnQtPmlz
QWNjZXNzaWJpbGl0eVRhYmxlKCkgPyBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KHBhcmVu
dCkgOiBudWxscHRyOwogICAgIH0KICAgICAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEyNCwx
MCArMTI0LDEwIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6
aGVhZGVyT2JqZWN0KCkKICAgICAKICAgICAvLyBjaGVjayB0aGUgZmlyc3QgZWxlbWVudCBpbiB0
aGUgcm93IHRvIHNlZSBpZiBpdCBpcyBhIFRIIGVsZW1lbnQKICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjZWxsID0gcm93Q2hpbGRyZW5bMF0uZ2V0KCk7Ci0gICAgaWYgKCFjZWxsLT5pc1RhYmxl
Q2VsbCgpKQorICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oY2VsbCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIFJlbmRlck9iamVjdCogY2VsbFJlbmRlcmVy
ID0gdG9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsKGNlbGwpLT5yZW5kZXJlcigpOworICAgIFJlbmRl
ck9iamVjdCogY2VsbFJlbmRlcmVyID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4o
KmNlbGwpLnJlbmRlcmVyKCk7CiAgICAgaWYgKCFjZWxsUmVuZGVyZXIpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVRhYmxlUm93LmgKaW5kZXggNjdkNWUyZGQxYmY1Yjc1NGYxYzMyNzk5NWVm
MDRlZDBmODUyNWNhYi4uNzc1MWQwMjExNGUwZjU5ZmNkY2ZjMmU4NWNiZDE3YmY1YmMwOWIyZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGVSb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlU
YWJsZVJvdy5oCkBAIC02Niw4ICs2Niw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGNv
bXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OyAKIAotQUND
RVNTSUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5VGFibGVSb3csIGlzVGFi
bGVSb3coKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vzc2liaWxpdHlUYWJsZVJvdywgaXNUYWJsZVJvdygpKQor
CiAjZW5kaWYgLy8gQWNjZXNzaWJpbGl0eVRhYmxlUm93X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVNlbGVjdGlvbi5jcHAKaW5kZXggOWU4N2Y0ZjVmYmM3N2VmZjUyODU3NjVkNjZm
Zjc0NzU5NGQwMjJjZi4uMjU5OWYyM2I1OTU1YWZkYmFkMmY1ODEzNGY3YTY3YWUyYzJhMGJjNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZUludGVyZmFjZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5jcHAKQEAgLTE1MCwx
MSArMTUwLDExIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uQ2xl
YXJTZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24pCiAgICAgICAgIHJldHVybiBGQUxT
RTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciBzZWxlY3RlZEl0ZW1zOwotICAgIGlmIChjb3JlU2VsZWN0aW9uLT5pc0xpc3RCb3goKSB8fCBj
b3JlU2VsZWN0aW9uLT5pc01lbnVMaXN0KCkpIHsKKyAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eUxp
c3RCb3g+KGNvcmVTZWxlY3Rpb24pKSB7CiAgICAgICAgIC8vIFNldCB0aGUgbGlzdCBvZiBzZWxl
Y3RlZCBpdGVtcyB0byBhbiBlbXB0eSBsaXN0OyB0aGVuIHZlcmlmeSB0aGF0IGl0IHdvcmtlZC4K
LSAgICAgICAgQWNjZXNzaWJpbGl0eUxpc3RCb3gqIGxpc3RCb3ggPSB0b0FjY2Vzc2liaWxpdHlM
aXN0Qm94KGNvcmVTZWxlY3Rpb24pOwotICAgICAgICBsaXN0Qm94LT5zZXRTZWxlY3RlZENoaWxk
cmVuKHNlbGVjdGVkSXRlbXMpOwotICAgICAgICBsaXN0Qm94LT5zZWxlY3RlZENoaWxkcmVuKHNl
bGVjdGVkSXRlbXMpOworICAgICAgICBBY2Nlc3NpYmlsaXR5TGlzdEJveCYgbGlzdEJveCA9IGRv
d25jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94PigqY29yZVNlbGVjdGlvbik7CisgICAgICAgIGxp
c3RCb3guc2V0U2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsKKyAgICAgICAgbGlzdEJv
eC5zZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkSXRlbXMpOwogICAgICAgICByZXR1cm4gIXNlbGVj
dGVkSXRlbXMuc2l6ZSgpOwogICAgIH0KICAgICByZXR1cm4gRkFMU0U7CkBAIC0yNDYsMTIgKzI0
NiwxMiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvblNlbGVjdEFs
bFNlbGVjdGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdAogICAgIGlmICghY29yZVNlbGVjdGlvbiB8
fCAhY29yZVNlbGVjdGlvbi0+aXNNdWx0aVNlbGVjdGFibGUoKSkKICAgICAgICAgcmV0dXJuIEZB
TFNFOwogCi0gICAgaWYgKGNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpKSB7CisgICAgaWYgKGlz
PEFjY2Vzc2liaWxpdHlMaXN0Qm94Pihjb3JlU2VsZWN0aW9uKSkgewogICAgICAgICBjb25zdCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVu
ID0gY29yZVNlbGVjdGlvbi0+Y2hpbGRyZW4oKTsKLSAgICAgICAgQWNjZXNzaWJpbGl0eUxpc3RC
b3gqIGxpc3RCb3ggPSB0b0FjY2Vzc2liaWxpdHlMaXN0Qm94KGNvcmVTZWxlY3Rpb24pOwotICAg
ICAgICBsaXN0Qm94LT5zZXRTZWxlY3RlZENoaWxkcmVuKGNoaWxkcmVuKTsKKyAgICAgICAgQWNj
ZXNzaWJpbGl0eUxpc3RCb3gmIGxpc3RCb3ggPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TGlzdEJv
eD4oKmNvcmVTZWxlY3Rpb24pOworICAgICAgICBsaXN0Qm94LnNldFNlbGVjdGVkQ2hpbGRyZW4o
Y2hpbGRyZW4pOwogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3Igc2VsZWN0ZWRJdGVtczsKLSAgICAgICAgbGlzdEJveC0+c2VsZWN0ZWRDaGls
ZHJlbihzZWxlY3RlZEl0ZW1zKTsKKyAgICAgICAgbGlzdEJveC5zZWxlY3RlZENoaWxkcmVuKHNl
bGVjdGVkSXRlbXMpOwogICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5zaXplKCkgPT0gY2hp
bGRyZW4uc2l6ZSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5j
cHAKaW5kZXggMzQ5MmI3ZTBlZjJjNzdmOWQ0M2U5Yzc2YmZhNmU4NmVjZWZjNjBjOC4uOTUxZDU1
MjZiYjMyZDM5MWM1NzhiOWYxZTdkZjUzMjcwNmQzOGIwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGFibGUuY3BwCkBAIC01OSw4ICs1OSw4IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5
VGFibGVDZWxsKiBjZWxsKEF0a1RhYmxlKiB0YWJsZSwgZ3VpbnQgcm93LCBndWludCBjb2x1bW4p
CiB7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKICAg
ICBpZiAoYWNjVGFibGUtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQotICAgICAgICBy
ZXR1cm4gdG9BY2Nlc3NpYmlsaXR5VGFibGUoYWNjVGFibGUpLT5jZWxsRm9yQ29sdW1uQW5kUm93
KGNvbHVtbiwgcm93KTsKLSAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxlKS5jZWxsRm9yQ29sdW1uQW5kUm93KGNvbHVtbiwg
cm93KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIGdpbnQgY2VsbEluZGV4KEFj
Y2Vzc2liaWxpdHlUYWJsZUNlbGwqIGF4Q2VsbCwgQWNjZXNzaWJpbGl0eVRhYmxlKiBheFRhYmxl
KQpAQCAtODEsMTMgKzgxLDEzIEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBjZWxs
QXRJbmRleChBdGtUYWJsZSogdGFibGUsIGdpbnQgaW5kZXgpCiAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKICAgICBpZiAoYWNjVGFibGUtPmlzQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdCgpKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBhbGxDZWxsczsKLSAgICAgICAgdG9BY2Nlc3NpYmls
aXR5VGFibGUoYWNjVGFibGUpLT5jZWxscyhhbGxDZWxscyk7CisgICAgICAgIGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxlKS5jZWxscyhhbGxDZWxscyk7CiAgICAgICAgIGlm
ICgwIDw9IGluZGV4ICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPCBhbGxDZWxscy5z
aXplKCkpIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY0NlbGwgPSBhbGxD
ZWxscy5hdChpbmRleCkuZ2V0KCk7Ci0gICAgICAgICAgICByZXR1cm4gdG9BY2Nlc3NpYmlsaXR5
VGFibGVDZWxsKGFjY0NlbGwpOworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlUYWJsZUNlbGw+KGFjY0NlbGwpOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiAw
OworICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRBY2Nl
c3NpYmxlVGFibGVSZWZBdChBdGtUYWJsZSogdGFibGUsIGdpbnQgcm93LCBnaW50IGNvbHVtbikK
QEAgLTExNCw3ICsxMTQsNyBAQCBzdGF0aWMgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRJ
bmRleEF0KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCByb3csIGdpbnQgY29sdQogICAgIHJldHVyblZh
bElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRSh0YWJsZSksIC0x
KTsKIAogICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGF4Q2VsbCA9IGNlbGwodGFibGUsIHJv
dywgY29sdW1uKTsKLSAgICBBY2Nlc3NpYmlsaXR5VGFibGUqIGF4VGFibGUgPSB0b0FjY2Vzc2li
aWxpdHlUYWJsZShjb3JlKHRhYmxlKSk7CisgICAgQWNjZXNzaWJpbGl0eVRhYmxlKiBheFRhYmxl
ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPihjb3JlKHRhYmxlKSk7CiAgICAgcmV0dXJu
IGNlbGxJbmRleChheENlbGwsIGF4VGFibGUpOwogfQogCkBAIC0xNTMsNyArMTUzLDcgQEAgc3Rh
dGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0TkNvbHVtbnMoQXRrVGFibGUqIHRhYmxl
KQogCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKICAg
ICBpZiAoYWNjVGFibGUtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQotICAgICAgICBy
ZXR1cm4gdG9BY2Nlc3NpYmlsaXR5VGFibGUoYWNjVGFibGUpLT5jb2x1bW5Db3VudCgpOworICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqYWNjVGFibGUpLmNvbHVt
bkNvdW50KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE2NCw3ICsxNjQsNyBAQCBzdGF0aWMg
Z2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXROUm93cyhBdGtUYWJsZSogdGFibGUpCiAKICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFibGUpOwogICAgIGlmIChh
Y2NUYWJsZS0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0
b0FjY2Vzc2liaWxpdHlUYWJsZShhY2NUYWJsZSktPnJvd0NvdW50KCk7CisgICAgICAgIHJldHVy
biBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NUYWJsZSkucm93Q291bnQoKTsKICAg
ICByZXR1cm4gMDsKIH0KIApAQCAtMjA0LDE2ICsyMDQsMTYgQEAgc3RhdGljIEF0a09iamVjdCog
d2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q29sdW1uSGVhZGVyKEF0a1RhYmxlKiB0YWJsZSwgZ2lu
dCBjb2wKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFibGUpOwog
ICAgIGlmIChhY2NUYWJsZS0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKICAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbHVt
bkhlYWRlcnM7Ci0gICAgICAgIHRvQWNjZXNzaWJpbGl0eVRhYmxlKGFjY1RhYmxlKS0+Y29sdW1u
SGVhZGVycyhjb2x1bW5IZWFkZXJzKTsKKyAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlPigqYWNjVGFibGUpLmNvbHVtbkhlYWRlcnMoY29sdW1uSGVhZGVycyk7CiAKICAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiBjb2x1bW5IZWFkZXIgOiBjb2x1bW5IZWFkZXJzKSB7CiAgICAgICAg
ICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBjb2x1bW5SYW5nZTsKLSAgICAgICAg
ICAgIHRvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbChjb2x1bW5IZWFkZXIuZ2V0KCkpLT5jb2x1bW5J
bmRleFJhbmdlKGNvbHVtblJhbmdlKTsKKyAgICAgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZUNlbGw+KCpjb2x1bW5IZWFkZXIpLmNvbHVtbkluZGV4UmFuZ2UoY29sdW1uUmFuZ2Up
OwogICAgICAgICAgICAgaWYgKGNvbHVtblJhbmdlLmZpcnN0IDw9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihjb2x1bW4pICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2x1bW4pIDwgY29sdW1uUmFu
Z2UuZmlyc3QgKyBjb2x1bW5SYW5nZS5zZWNvbmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bHVtbkhlYWRlci0+d3JhcHBlcigpOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3Np
YmxlVGFibGVHZXRSb3dIZWFkZXIoQXRrVGFibGUqIHRhYmxlLCBnaW50IHJvdykKQEAgLTIyNCwx
NiArMjI0LDE2IEBAIHN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJv
d0hlYWRlcihBdGtUYWJsZSogdGFibGUsIGdpbnQgcm93KQogICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGFjY1RhYmxlID0gY29yZSh0YWJsZSk7CiAgICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QoKSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93SGVhZGVyczsKLSAgICAgICAgdG9BY2Nlc3NpYmls
aXR5VGFibGUoYWNjVGFibGUpLT5yb3dIZWFkZXJzKHJvd0hlYWRlcnMpOworICAgICAgICBkb3du
Y2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NUYWJsZSkucm93SGVhZGVycyhyb3dIZWFkZXJz
KTsKIAogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJvd0hlYWRlciA6IHJvd0hlYWRlcnMpIHsK
ICAgICAgICAgICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IHJvd1JhbmdlOwotICAg
ICAgICAgICAgdG9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsKHJvd0hlYWRlci5nZXQoKSktPnJvd0lu
ZGV4UmFuZ2Uocm93UmFuZ2UpOworICAgICAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlQ2VsbD4oKnJvd0hlYWRlcikucm93SW5kZXhSYW5nZShyb3dSYW5nZSk7CiAgICAgICAgICAg
ICBpZiAocm93UmFuZ2UuZmlyc3QgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJvdykgJiYgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHJvdykgPCByb3dSYW5nZS5maXJzdCArIHJvd1JhbmdlLnNlY29u
ZCkKICAgICAgICAgICAgICAgICByZXR1cm4gcm93SGVhZGVyLT53cmFwcGVyKCk7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRp
YyBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENhcHRpb24oQXRrVGFibGUqIHRh
YmxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlQ2VsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGVDZWxsLmNwcAppbmRleCA0
YjhmMGU4NDc5ZTFlNzQzNzM4Nzc3MTJiMGViNzEwMDE4YzYwNzBhLi45ZTAyNzExZmYwMTNhOWFm
MzU0YWRjM2Q3MDE1YzRlN2RlYTUxOGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGVDZWxsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGFibGVDZWxsLmNwcApAQCAtNTQsMTEgKzU0LDExIEBAIEdQdHJBcnJheSogd2Via2l0QWNj
ZXNzaWJsZVRhYmxlQ2VsbEdldENvbHVtbkhlYWRlckNlbGxzKEF0a1RhYmxlQ2VsbCogY2VsbCkK
ICAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lC
TEUoY2VsbCksIG51bGxwdHIpOwogCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYXhPYmplY3Qg
PSBjb3JlKGNlbGwpOwotICAgIGlmICghYXhPYmplY3QgfHwgIWF4T2JqZWN0LT5pc1RhYmxlQ2Vs
bCgpKQorICAgIGlmICghYXhPYmplY3QgfHwgIWlzPEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KGF4
T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29sdW1uSGVhZGVyczsKLSAgICB0b0Fj
Y2Vzc2liaWxpdHlUYWJsZUNlbGwoYXhPYmplY3QpLT5jb2x1bW5IZWFkZXJzKGNvbHVtbkhlYWRl
cnMpOworICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpheE9iamVjdCkuY29s
dW1uSGVhZGVycyhjb2x1bW5IZWFkZXJzKTsKIAogICAgIHJldHVybiBjb252ZXJ0VG9HUHRyQXJy
YXkoY29sdW1uSGVhZGVycyk7CiB9CkBAIC02OSwxMSArNjksMTEgQEAgR1B0ckFycmF5KiB3ZWJr
aXRBY2Nlc3NpYmxlVGFibGVDZWxsR2V0Um93SGVhZGVyQ2VsbHMoQXRrVGFibGVDZWxsKiBjZWxs
KQogICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNT
SUJMRShjZWxsKSwgbnVsbHB0cik7CiAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVj
dCA9IGNvcmUoY2VsbCk7Ci0gICAgaWYgKCFheE9iamVjdCB8fCAhYXhPYmplY3QtPmlzVGFibGVD
ZWxsKCkpCisgICAgaWYgKCFheE9iamVjdCB8fCAhaXM8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4o
YXhPYmplY3QpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dIZWFkZXJzOwotICAgIHRvQWNj
ZXNzaWJpbGl0eVRhYmxlQ2VsbChheE9iamVjdCktPnJvd0hlYWRlcnMocm93SGVhZGVycyk7Cisg
ICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmF4T2JqZWN0KS5yb3dIZWFkZXJz
KHJvd0hlYWRlcnMpOwogCiAgICAgcmV0dXJuIGNvbnZlcnRUb0dQdHJBcnJheShyb3dIZWFkZXJz
KTsKIH0KQEAgLTg0LDExICs4NCwxMSBAQCBnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxH
ZXRDb2x1bW5TcGFuKEF0a1RhYmxlQ2VsbCogY2VsbCkKICAgICByZXR1cm5WYWxJZldlYktpdEFj
Y2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUoY2VsbCksIDApOwogCiAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogYXhPYmplY3QgPSBjb3JlKGNlbGwpOwotICAgIGlmICghYXhPYmpl
Y3QgfHwgIWF4T2JqZWN0LT5pc1RhYmxlQ2VsbCgpKQorICAgIGlmICghYXhPYmplY3QgfHwgIWlz
PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KGF4T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBjb2x1bW5SYW5nZTsKLSAgICB0b0Fj
Y2Vzc2liaWxpdHlUYWJsZUNlbGwoYXhPYmplY3QpLT5jb2x1bW5JbmRleFJhbmdlKGNvbHVtblJh
bmdlKTsKKyAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqYXhPYmplY3QpLmNv
bHVtbkluZGV4UmFuZ2UoY29sdW1uUmFuZ2UpOwogCiAgICAgcmV0dXJuIGNvbHVtblJhbmdlLnNl
Y29uZDsKIH0KQEAgLTk5LDExICs5OSwxMSBAQCBnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUNl
bGxHZXRSb3dTcGFuKEF0a1RhYmxlQ2VsbCogY2VsbCkKICAgICByZXR1cm5WYWxJZldlYktpdEFj
Y2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUoY2VsbCksIDApOwogCiAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogYXhPYmplY3QgPSBjb3JlKGNlbGwpOwotICAgIGlmICghYXhPYmpl
Y3QgfHwgIWF4T2JqZWN0LT5pc1RhYmxlQ2VsbCgpKQorICAgIGlmICghYXhPYmplY3QgfHwgIWlz
PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KGF4T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiByb3dSYW5nZTsKLSAgICB0b0FjY2Vz
c2liaWxpdHlUYWJsZUNlbGwoYXhPYmplY3QpLT5yb3dJbmRleFJhbmdlKHJvd1JhbmdlKTsKKyAg
ICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqYXhPYmplY3QpLnJvd0luZGV4UmFu
Z2Uocm93UmFuZ2UpOwogCiAgICAgcmV0dXJuIHJvd1JhbmdlLnNlY29uZDsKIH0KQEAgLTExNCwx
NiArMTE0LDE2IEBAIGdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxHZXRQb3NpdGlv
bihBdGtUYWJsZUNlbGwqIGNlbGwsIGdpbnQqIHJvdywgZ2luCiAgICAgcmV0dXJuVmFsSWZXZWJL
aXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJQkxFKGNlbGwpLCBmYWxzZSk7CiAK
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9IGNvcmUoY2VsbCk7Ci0gICAgaWYg
KCFheE9iamVjdCB8fCAhYXhPYmplY3QtPmlzVGFibGVDZWxsKCkpCisgICAgaWYgKCFheE9iamVj
dCB8fCAhaXM8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oYXhPYmplY3QpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBjb2x1bW5Sb3dS
YW5nZTsKICAgICBpZiAocm93KSB7Ci0gICAgICAgIHRvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbChh
eE9iamVjdCktPnJvd0luZGV4UmFuZ2UoY29sdW1uUm93UmFuZ2UpOworICAgICAgICBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqYXhPYmplY3QpLnJvd0luZGV4UmFuZ2UoY29sdW1u
Um93UmFuZ2UpOwogICAgICAgICAqcm93ID0gY29sdW1uUm93UmFuZ2UuZmlyc3Q7CiAgICAgfQog
ICAgIGlmIChjb2x1bW4pIHsKLSAgICAgICAgdG9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsKGF4T2Jq
ZWN0KS0+Y29sdW1uSW5kZXhSYW5nZShjb2x1bW5Sb3dSYW5nZSk7CisgICAgICAgIGRvd25jYXN0
PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpheE9iamVjdCkuY29sdW1uSW5kZXhSYW5nZShjb2x1
bW5Sb3dSYW5nZSk7CiAgICAgICAgICpjb2x1bW4gPSBjb2x1bW5Sb3dSYW5nZS5maXJzdDsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vz
c2liaWxpdHlPYmplY3RJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9B
Y2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tCmluZGV4IDFjOWI5MzllZmUxYWIwN2MyZTNkYTEyZWY3
NTY3OTY4M2JhOTkyMDguLmIxMzc2OGE4MzI4NmZmYjQ4NDJiZWFmZGIzMTYyOTkzMjYxZTExMTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxp
dHlPYmplY3RJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNj
ZXNzaWJpbGl0eU9iamVjdElPUy5tbQpAQCAtNjIsNyArNjIsNyBAQCBpbnQgQWNjZXNzaWJpbGl0
eU9iamVjdDo6YWNjZXNzaWJpbGl0eVBhc3N3b3JkRmllbGRMZW5ndGgoKQogewogICAgIGlmICgh
aXNQYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlbmRlck9iamVjdCog
cmVuZGVyT2JqZWN0ID0gdG9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KHRoaXMpLT5yZW5kZXJl
cigpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0gZG93bmNhc3Q8QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdD4oKnRoaXMpLnJlbmRlcmVyKCk7CiAgICAgCiAgICAgaWYgKCFyZW5k
ZXJPYmplY3QgfHwgIXJlbmRlck9iamVjdC0+bm9kZSgpIHx8ICFyZW5kZXJPYmplY3QtPm5vZGUo
KS0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCmluZGV4IGNkZjEyNTE2MThkYzFiYTk1Y2RjNTdiNmJj
NGY3ZDhkOGE3N2U0ZDQuLmJmMGM4M2NhMjRjZTZkYmEzMmYzOWQ4OWVhNmQ4M2I2MTZkMDdjNWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCkBAIC0xMTEzLDggKzEx
MTMsOCBAQCAtIChDR1BvaW50KWNvbnZlcnRQb2ludFRvU2NyZWVuU3BhY2U6KEZsb2F0UG9pbnQg
Jilwb2ludAogICAgICAgICBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3ID0gbnVsbHB0cjsKICAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChw
YXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50
LT5wYXJlbnRPYmplY3QoKSkgewotICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNBY2Nlc3NpYmls
aXR5U2Nyb2xsVmlldygpKSB7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsVmlldyA9IHRvQWNjZXNz
aWJpbGl0eVNjcm9sbFZpZXcocGFyZW50KS0+c2Nyb2xsVmlldygpOworICAgICAgICAgICAgaWYg
KGlzPEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3PihwYXJlbnQpKSB7CisgICAgICAgICAgICAgICAg
c2Nyb2xsVmlldyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3PigqcGFyZW50KS5z
Y3JvbGxWaWV3KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTExNjcsOCArMTE2Nyw4IEBAIC0gKENHUmVjdCljb252ZXJ0UmVjdFRvU2NyZWVu
U3BhY2U6KEludFJlY3QgJilyZWN0CiAgICAgICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcgPSBu
dWxscHRyOwogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBudWxscHRyOwog
ICAgICAgICBmb3IgKHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50OyBw
YXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAgICAgICBpZiAocGFyZW50
LT5pc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxW
aWV3ID0gdG9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhwYXJlbnQpLT5zY3JvbGxWaWV3KCk7Cisg
ICAgICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KHBhcmVudCkpIHsKKyAg
ICAgICAgICAgICAgICBzY3JvbGxWaWV3ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNjcm9sbFZp
ZXc+KCpwYXJlbnQpLnNjcm9sbFZpZXcoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5t
bQppbmRleCA0OGI5YWVlMjcwYmVjODk5ZTlmNzk0YjEzNDMxODU1ODkzM2YzY2E0Li4yM2I1MDNk
ZDk1NTQwODIyZThhZmVlMmZjZTUwODNkYTQ4NjYzOWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlck1hYy5tbQpAQCAtOTk0LDEwICs5OTQsMTAgQEAgc3RhdGljIHZvaWQgQVhB
dHRyaWJ1dGVTdHJpbmdTZXRFbGVtZW50KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJT
dHJpbmcsIE4KICAgICBpZiAoIUFYQXR0cmlidXRlZFN0cmluZ1JhbmdlSXNWYWxpZChhdHRyU3Ry
aW5nLCByYW5nZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAob2JqZWN0ICYmIG9i
amVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKKyAgICBpZiAob2JqZWN0ICYm
IGlzPEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+KG9iamVjdCkpIHsKICAgICAgICAgLy8gbWFr
ZSBhIHNlcmlhbGl6YWJsZSBBWCBvYmplY3QKICAgICAgICAgCi0gICAgICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSB0b0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qob2JqZWN0KS0+cmVuZGVy
ZXIoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q+KCpvYmplY3QpLnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghcmVu
ZGVyZXIpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIApAQCAtMTE5OSw3ICsxMTk5LDcg
QEAgLSAoTlNBcnJheSopYWRkaXRpb25hbEFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcwogICAg
IGlmIChtX29iamVjdC0+c3VwcG9ydHNBUklBRHJvcHBpbmcoKSkKICAgICAgICAgW2FkZGl0aW9u
YWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRlXTsKICAgICAK
LSAgICBpZiAobV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgJiYgdG9BY2Nlc3NpYmls
aXR5VGFibGUobV9vYmplY3QpLT5zdXBwb3J0c1NlbGVjdGVkUm93cygpKQorICAgIGlmIChtX29i
amVjdC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFi
bGU+KCptX29iamVjdCkuc3VwcG9ydHNTZWxlY3RlZFJvd3MoKSkKICAgICAgICAgW2FkZGl0aW9u
YWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV07CiAgICAg
CiAgICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c0FSSUFMaXZlUmVnaW9uKCkpIHsKQEAgLTE3NTIs
OCArMTc1Miw4IEBAIC0gKENHUG9pbnQpY29udmVydFBvaW50VG9TY3JlZW5TcGFjZTooRmxvYXRQ
b2ludCAmKXBvaW50CiAgICAgICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcgPSBudWxscHRyOwog
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBudWxscHRyOwogICAgICAgICBm
b3IgKHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50OyBwYXJlbnQgPSBw
YXJlbnQtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAgICAgICBpZiAocGFyZW50LT5pc0FjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3KCkpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxWaWV3ID0gdG9B
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhwYXJlbnQpLT5zY3JvbGxWaWV3KCk7CisgICAgICAgICAg
ICBpZiAoaXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KHBhcmVudCkpIHsKKyAgICAgICAgICAg
ICAgICBzY3JvbGxWaWV3ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpwYXJl
bnQpLnNjcm9sbFZpZXcoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtMTk5Miw4ICsxOTkyLDggQEAgLSAoTlNTdHJpbmcqKXN1YnJvbGUKICAg
ICBpZiAobV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IEhvcml6b250YWxSdWxlUm9sZSkKICAgICAg
ICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eUNvbnRlbnRTZXBhcmF0b3JTdWJyb2xlOwogICAgIAot
ICAgIGlmIChtX29iamVjdC0+aXNTcGluQnV0dG9uUGFydCgpKSB7Ci0gICAgICAgIGlmICh0b0Fj
Y2Vzc2liaWxpdHlTcGluQnV0dG9uUGFydChtX29iamVjdCktPmlzSW5jcmVtZW50b3IoKSkKKyAg
ICBpZiAoaXM8QWNjZXNzaWJpbGl0eVNwaW5CdXR0b25QYXJ0PihtX29iamVjdCkpIHsKKyAgICAg
ICAgaWYgKGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uUGFydD4oKm1fb2JqZWN0KS5p
c0luY3JlbWVudG9yKCkpCiAgICAgICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5SW5jcmVt
ZW50QXJyb3dTdWJyb2xlOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0
eURlY3JlbWVudEFycm93U3Vicm9sZTsKQEAgLTIwMDUsMTEgKzIwMDUsMTEgQEAgLSAoTlNTdHJp
bmcqKXN1YnJvbGUKICAgICBpZiAobV9vYmplY3QtPmlzVHJlZUl0ZW0oKSkKICAgICAgICAgcmV0
dXJuIE5TQWNjZXNzaWJpbGl0eU91dGxpbmVSb3dTdWJyb2xlOwogICAgIAotICAgIGlmIChtX29i
amVjdC0+aXNMaXN0KCkpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eUxpc3QqIGxpc3RPYmplY3Qg
PSB0b0FjY2Vzc2liaWxpdHlMaXN0KG1fb2JqZWN0KTsKLSAgICAgICAgaWYgKGxpc3RPYmplY3Qt
PmlzVW5vcmRlcmVkTGlzdCgpIHx8IGxpc3RPYmplY3QtPmlzT3JkZXJlZExpc3QoKSkKKyAgICBp
ZiAoaXM8QWNjZXNzaWJpbGl0eUxpc3Q+KG1fb2JqZWN0KSkgeworICAgICAgICBBY2Nlc3NpYmls
aXR5TGlzdCYgbGlzdE9iamVjdCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlMaXN0PigqbV9vYmpl
Y3QpOworICAgICAgICBpZiAobGlzdE9iamVjdC5pc1Vub3JkZXJlZExpc3QoKSB8fCBsaXN0T2Jq
ZWN0LmlzT3JkZXJlZExpc3QoKSkKICAgICAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlD
b250ZW50TGlzdFN1YnJvbGU7Ci0gICAgICAgIGlmIChsaXN0T2JqZWN0LT5pc0Rlc2NyaXB0aW9u
TGlzdCgpKSB7CisgICAgICAgIGlmIChsaXN0T2JqZWN0LmlzRGVzY3JpcHRpb25MaXN0KCkpIHsK
ICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTA5MAogICAgICAgICAgICAg
cmV0dXJuIE5TQWNjZXNzaWJpbGl0eURlZmluaXRpb25MaXN0U3Vicm9sZTsKICNlbHNlCkBAIC0y
MTc5LDkgKzIxNzksOSBAQCAtIChOU1N0cmluZyopcm9sZURlc2NyaXB0aW9uCiAgICAgCiAgICAg
Ly8gT25seSByZXR1cm5pbmcgZm9yIERMIChub3QgVUwgb3IgT0wpIGJlY2F1c2UgZGVzY3JpcHRp
b24gY2hhbmdlZCB3aXRoIEhUTUw1IGZyb20gJ2RlZmluaXRpb24gbGlzdCcgdG8KICAgICAvLyBz
dXBlcnNldCAnZGVzY3JpcHRpb24gbGlzdCcgYW5kIGRvZXMgbm90IHJldHVybiB0aGUgc2FtZSB2
YWx1ZXMgaW4gQVggQVBJIG9uIHNvbWUgT1MgdmVyc2lvbnMuIAotICAgIGlmIChtX29iamVjdC0+
aXNMaXN0KCkpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eUxpc3QqIGxpc3RPYmplY3QgPSB0b0Fj
Y2Vzc2liaWxpdHlMaXN0KG1fb2JqZWN0KTsKLSAgICAgICAgaWYgKGxpc3RPYmplY3QtPmlzRGVz
Y3JpcHRpb25MaXN0KCkpCisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlMaXN0PihtX29iamVjdCkp
IHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eUxpc3QmIGxpc3RPYmplY3QgPSBkb3duY2FzdDxBY2Nl
c3NpYmlsaXR5TGlzdD4oKm1fb2JqZWN0KTsKKyAgICAgICAgaWYgKGxpc3RPYmplY3QuaXNEZXNj
cmlwdGlvbkxpc3QoKSkKICAgICAgICAgICAgIHJldHVybiBBWERlc2NyaXB0aW9uTGlzdFRleHQo
KTsKICAgICB9CiAgICAgCkBAIC0yMjE3LDcgKzIyMTcsNyBAQCAtIChOU1N0cmluZyAqKWNvbXB1
dGVkUm9sZVN0cmluZwogCiAtIChpZClzY3JvbGxWaWV3UGFyZW50CiB7Ci0gICAgaWYgKCFtX29i
amVjdCB8fCAhbV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSkKKyAgICBpZiAo
IW1fb2JqZWN0IHx8ICFpczxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4obV9vYmplY3QpKQogICAg
ICAgICByZXR1cm4gbmlsOwogICAgIAogICAgIC8vIElmIHRoaXMgc2Nyb2xsIHZpZXcgcHJvdmlk
ZXMgaXQncyBwYXJlbnQgb2JqZWN0IChiZWNhdXNlIGl0J3MgYSBzdWItZnJhbWUpLCB0aGVuCkBA
IC0yMjI1LDggKzIyMjUsOCBAQCAtIChpZClzY3JvbGxWaWV3UGFyZW50CiAgICAgaWYgKG1fb2Jq
ZWN0LT5wYXJlbnRPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBBY2Nl
c3NpYmlsaXR5U2Nyb2xsVmlldyogc2Nyb2xsVmlldyA9IHRvQWNjZXNzaWJpbGl0eVNjcm9sbFZp
ZXcobV9vYmplY3QpOwotICAgIFNjcm9sbFZpZXcqIHNjcm9sbCA9IHNjcm9sbFZpZXctPnNjcm9s
bFZpZXcoKTsKKyAgICBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyYgc2Nyb2xsVmlldyA9IGRvd25j
YXN0PEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3PigqbV9vYmplY3QpOworICAgIFNjcm9sbFZpZXcq
IHNjcm9sbCA9IHNjcm9sbFZpZXcuc2Nyb2xsVmlldygpOwogICAgIGlmICghc2Nyb2xsKQogICAg
ICAgICByZXR1cm4gbmlsOwogICAgIApAQCAtMjMzMyw3ICsyMzMzLDcgQEAgLSAoaWQpYWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyopYXR0cmlidXRlTmFtZQogICAgIGlmICht
X29iamVjdC0+aXNXZWJBcmVhKCkpIHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpAIkFYTGlua1VJRWxlbWVudHMiXSkgewogICAgICAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGxpbmtzOwotICAgICAgICAg
ICAgdG9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KG1fb2JqZWN0KS0+Z2V0RG9jdW1lbnRMaW5r
cyhsaW5rcyk7CisgICAgICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
PigqbV9vYmplY3QpLmdldERvY3VtZW50TGlua3MobGlua3MpOwogICAgICAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb05TQXJyYXkobGlua3MpOwogICAgICAgICB9CiAgICAgICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExvYWRlZCJdKQpAQCAtMjM5MiwxMSArMjM5Miwx
MSBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1
dGVOYW1lCiAgICAgfQogCiAgICAgLy8gT25seSBuYXRpdmUgc3BpbiBidXR0b25zIGhhdmUgaW5j
cmVtZW50IGFuZCBkZWNyZW1lbnQgYnV0dG9ucy4KLSAgICBpZiAobV9vYmplY3QtPmlzTmF0aXZl
U3BpbkJ1dHRvbigpKSB7CisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uPihtX29i
amVjdCkpIHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlJbmNyZW1lbnRCdXR0b25BdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJu
IHRvQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24obV9vYmplY3QpLT5pbmNyZW1lbnRCdXR0b24oKS0+
d3JhcHBlcigpOworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTcGlu
QnV0dG9uPigqbV9vYmplY3QpLmluY3JlbWVudEJ1dHRvbigpLT53cmFwcGVyKCk7CiAgICAgICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGVjcmVt
ZW50QnV0dG9uQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiB0b0FjY2Vzc2liaWxpdHlT
cGluQnV0dG9uKG1fb2JqZWN0KS0+ZGVjcmVtZW50QnV0dG9uKCktPndyYXBwZXIoKTsKKyAgICAg
ICAgICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbj4oKm1fb2JqZWN0
KS5kZWNyZW1lbnRCdXR0b24oKS0+d3JhcHBlcigpOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYVmlzaXRlZCJdKQpAQCAtMjU1OCwxOCAr
MjU1OCwxOCBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilh
dHRyaWJ1dGVOYW1lCiAgICAgCiAgICAgaWYgKG1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlUYWJs
ZSgpKSB7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5Um93c0F0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNB
cnJheSh0b0FjY2Vzc2liaWxpdHlUYWJsZShtX29iamVjdCktPnJvd3MoKSk7CisgICAgICAgICAg
ICByZXR1cm4gY29udmVydFRvTlNBcnJheShkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpt
X29iamVjdCkucm93cygpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZVJvd3NBdHRyaWJ1dGVdKSB7CiAg
ICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgdmlzaWJsZVJvd3M7Ci0gICAgICAgICAgICB0b0FjY2Vzc2liaWxpdHlUYWJsZShtX29iamVj
dCktPnZpc2libGVSb3dzKHZpc2libGVSb3dzKTsKKyAgICAgICAgICAgIGRvd25jYXN0PEFjY2Vz
c2liaWxpdHlUYWJsZT4oKm1fb2JqZWN0KS52aXNpYmxlUm93cyh2aXNpYmxlUm93cyk7CiAgICAg
ICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheSh2aXNpYmxlUm93cyk7CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIC8vIFRPRE86IGRpc3Rpbmd1aXNoIGJldHdlZW4gdmlzaWJsZSBh
bmQgbm9uLXZpc2libGUgY29sdW1ucwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNvbHVtbnNBdHRyaWJ1dGVdIHx8CiAgICAgICAgICAg
ICBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNv
bHVtbnNBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheSh0
b0FjY2Vzc2liaWxpdHlUYWJsZShtX29iamVjdCktPmNvbHVtbnMoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gY29udmVydFRvTlNBcnJheShkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCptX29i
amVjdCkuY29sdW1ucygpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NBdHRy
aWJ1dGVdKSB7CkBAIC0yNTg1LDEyICsyNTg1LDEyIEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVWYWx1ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWUKICAgICAgICAgCiAgICAgICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q29sdW1uSGVh
ZGVyVUlFbGVtZW50c0F0dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5IZWFkZXJzOwotICAgICAgICAg
ICAgdG9BY2Nlc3NpYmlsaXR5VGFibGUobV9vYmplY3QpLT5jb2x1bW5IZWFkZXJzKGNvbHVtbkhl
YWRlcnMpOworICAgICAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqbV9vYmpl
Y3QpLmNvbHVtbkhlYWRlcnMoY29sdW1uSGVhZGVycyk7CiAgICAgICAgICAgICByZXR1cm4gY29u
dmVydFRvTlNBcnJheShjb2x1bW5IZWFkZXJzKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlIZWFk
ZXJBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXJD
b250YWluZXIgPSB0b0FjY2Vzc2liaWxpdHlUYWJsZShtX29iamVjdCktPmhlYWRlckNvbnRhaW5l
cigpOworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogaGVhZGVyQ29udGFpbmVyID0g
ZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqbV9vYmplY3QpLmhlYWRlckNvbnRhaW5lcigp
OwogICAgICAgICAgICAgaWYgKGhlYWRlckNvbnRhaW5lcikKICAgICAgICAgICAgICAgICByZXR1
cm4gaGVhZGVyQ29udGFpbmVyLT53cmFwcGVyKCk7CiAgICAgICAgICAgICByZXR1cm4gbmlsOwpA
QCAtMjU5OCw1OSArMjU5OCw1OSBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lCiAgICAgICAgIAogICAgICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvd0hlYWRlclVJRWxlbWVudHNB
dHRyaWJ1dGVdKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3Igcm93SGVhZGVyczsKLSAgICAgICAgICAgIHRvQWNjZXNzaWJpbGl0
eVRhYmxlKG1fb2JqZWN0KS0+cm93SGVhZGVycyhyb3dIZWFkZXJzKTsKKyAgICAgICAgICAgIGRv
d25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fb2JqZWN0KS5yb3dIZWFkZXJzKHJvd0hlYWRl
cnMpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkocm93SGVhZGVycyk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNlbGxzQXR0cmlidXRlXSkgewogICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNlbGxz
OwotICAgICAgICAgICAgdG9BY2Nlc3NpYmlsaXR5VGFibGUobV9vYmplY3QpLT5jZWxscyhjZWxs
cyk7CisgICAgICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCptX29iamVjdCku
Y2VsbHMoY2VsbHMpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY2VsbHMp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNvbHVtbkNvdW50QXR0cmlidXRlXSkKLSAgICAgICAg
ICAgIHJldHVybiBAKHRvQWNjZXNzaWJpbGl0eVRhYmxlKG1fb2JqZWN0KS0+Y29sdW1uQ291bnQo
KSk7CisgICAgICAgICAgICByZXR1cm4gQChkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpt
X29iamVjdCkuY29sdW1uQ291bnQoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvd0NvdW50QXR0cmlidXRlXSkK
LSAgICAgICAgICAgIHJldHVybiBAKHRvQWNjZXNzaWJpbGl0eVRhYmxlKG1fb2JqZWN0KS0+cm93
Q291bnQoKSk7CisgICAgICAgICAgICByZXR1cm4gQChkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFi
bGU+KCptX29iamVjdCkucm93Q291bnQoKSk7CiAgICAgfQogICAgIAotICAgIGlmIChtX29iamVj
dC0+aXNUYWJsZUNvbHVtbigpKSB7CisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVt
bj4obV9vYmplY3QpKSB7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIFtO
U051bWJlciBudW1iZXJXaXRoSW50OnRvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uKG1fb2JqZWN0
KS0+Y29sdW1uSW5kZXgoKV07CisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6ZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uPigqbV9vYmplY3QpLmNvbHVt
bkluZGV4KCldOwogICAgICAgICAKICAgICAgICAgLy8gcm93cyBhdHRyaWJ1dGUgZm9yIGEgY29s
dW1uIGlzIHRoZSBsaXN0IG9mIGFsbCB0aGUgZWxlbWVudHMgaW4gdGhhdCBjb2x1bW4gYXQgZWFj
aCByb3cKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlSb3dzQXR0cmlidXRlXSB8fAogICAgICAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZpc2libGVSb3dzQXR0cmlidXRlXSkgewotICAg
ICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkodG9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1
bW4obV9vYmplY3QpLT5jaGlsZHJlbigpKTsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9O
U0FycmF5KGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbj4oKm1fb2JqZWN0KS5jaGls
ZHJlbigpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eUhlYWRlckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlciA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uKG1f
b2JqZWN0KS0+aGVhZGVyT2JqZWN0KCk7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBoZWFkZXIgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4+KCptX29iamVjdCku
aGVhZGVyT2JqZWN0KCk7CiAgICAgICAgICAgICBpZiAoIWhlYWRlcikKICAgICAgICAgICAgICAg
ICByZXR1cm4gbmlsOwogICAgICAgICAgICAgcmV0dXJuIGhlYWRlci0+d3JhcHBlcigpOwogICAg
ICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNUYWJsZUNlbGwoKSkgewor
ICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPihtX29iamVjdCkpIHsKICAgICAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb3dJbmRl
eFJhbmdlQXR0cmlidXRlXSkgewogICAgICAgICAgICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNp
Z25lZD4gcm93UmFuZ2U7Ci0gICAgICAgICAgICB0b0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwobV9v
YmplY3QpLT5yb3dJbmRleFJhbmdlKHJvd1JhbmdlKTsKKyAgICAgICAgICAgIGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlUYWJsZUNlbGw+KCptX29iamVjdCkucm93SW5kZXhSYW5nZShyb3dSYW5nZSk7
CiAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6TlNNYWtlUmFuZ2Uo
cm93UmFuZ2UuZmlyc3QsIHJvd1JhbmdlLnNlY29uZCldOwogICAgICAgICB9CiAgICAgICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q29sdW1uSW5k
ZXhSYW5nZUF0dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5z
aWduZWQ+IGNvbHVtblJhbmdlOwotICAgICAgICAgICAgdG9BY2Nlc3NpYmlsaXR5VGFibGVDZWxs
KG1fb2JqZWN0KS0+Y29sdW1uSW5kZXhSYW5nZShjb2x1bW5SYW5nZSk7CisgICAgICAgICAgICBk
b3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqbV9vYmplY3QpLmNvbHVtbkluZGV4UmFu
Z2UoY29sdW1uUmFuZ2UpOwogICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJh
bmdlOk5TTWFrZVJhbmdlKGNvbHVtblJhbmdlLmZpcnN0LCBjb2x1bW5SYW5nZS5zZWNvbmQpXTsK
ICAgICAgICAgfQogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUNvbHVtbkhlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGVdKSB7CiAgICAgICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29s
dW1uSGVhZGVyczsKLSAgICAgICAgICAgIHRvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbChtX29iamVj
dCktPmNvbHVtbkhlYWRlcnMoY29sdW1uSGVhZGVycyk7CisgICAgICAgICAgICBkb3duY2FzdDxB
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqbV9vYmplY3QpLmNvbHVtbkhlYWRlcnMoY29sdW1uSGVh
ZGVycyk7CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShjb2x1bW5IZWFkZXJz
KTsKICAgICAgICAgfQogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eVJvd0hlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGVdKSB7CiAgICAgICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93
SGVhZGVyczsKLSAgICAgICAgICAgIHRvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbChtX29iamVjdCkt
PnJvd0hlYWRlcnMocm93SGVhZGVycyk7CisgICAgICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGVDZWxsPigqbV9vYmplY3QpLnJvd0hlYWRlcnMocm93SGVhZGVycyk7CiAgICAgICAg
ICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShyb3dIZWFkZXJzKTsKICAgICAgICAgfQogICAg
IH0KQEAgLTI2OTEsOSArMjY5MSw5IEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWUKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0
dXJuIG5pbDsKICAgICAgICAgfQotICAgICAgICBpZiAobV9vYmplY3QtPmlzVGFibGVSb3coKSkg
eworICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlUm93PihtX29iamVjdCkpIHsKICAg
ICAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5SW5kZXhBdHRyaWJ1dGVdKQotICAgICAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVt
YmVyV2l0aEludDp0b0FjY2Vzc2liaWxpdHlUYWJsZVJvdyhtX29iamVjdCktPnJvd0luZGV4KCld
OworICAgICAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5VGFibGVSb3c+KCptX29iamVjdCkucm93SW5kZXgoKV07CiAgICAgICAg
IH0KICAgICB9CiAgICAgCkBAIC0yNzAzLDkgKzI3MDMsOSBAQCAtIChpZClhY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lCiAgICAgICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93c0NvcHk7CiAg
ICAgICAgICAgICBtX29iamVjdC0+YXJpYVRyZWVJdGVtRGlzY2xvc2VkUm93cyhyb3dzQ29weSk7
CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShyb3dzQ29weSk7Ci0gICAgICAg
IH0gZWxzZSBpZiAobV9vYmplY3QtPmlzQVJJQVRyZWVHcmlkUm93KCkpIHsKKyAgICAgICAgfSBl
bHNlIGlmIChpczxBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c+KG1fb2JqZWN0KSkgewogICAgICAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJv
d3NDb3B5OwotICAgICAgICAgICAgdG9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cobV9vYmplY3Qp
LT5kaXNjbG9zZWRSb3dzKHJvd3NDb3B5KTsKKyAgICAgICAgICAgIGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlBUklBR3JpZFJvdz4obV9vYmplY3QpLT5kaXNjbG9zZWRSb3dzKHJvd3NDb3B5KTsKICAg
ICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHJvd3NDb3B5KTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTI3MjMsOCArMjcyMyw4IEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWUKICAgICAgICAgICAgICAgICBwYXJlbnQgPSBw
YXJlbnQtPnBhcmVudE9iamVjdCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICAgICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNBUklBVHJlZUdyaWRSb3coKSkg
ewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcm93ID0gdG9BY2Nlc3NpYmlsaXR5
QVJJQUdyaWRSb3cobV9vYmplY3QpLT5kaXNjbG9zZWRCeVJvdygpOworICAgICAgICB9IGVsc2Ug
aWYgKGlzPEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdz4obV9vYmplY3QpKSB7CisgICAgICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiByb3cgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5QVJJQUdy
aWRSb3c+KG1fb2JqZWN0KS0+ZGlzY2xvc2VkQnlSb3coKTsKICAgICAgICAgICAgIGlmICghcm93
KQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgICAgICByZXR1cm4gcm93LT53
cmFwcGVyKCk7CkBAIC0yNzY5LDggKzI3NjksNyBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmli
dXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lCiAgICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmlzU2VsZWN0ZWQoKV07CiAgICAgCiAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VydmVzQXNU
aXRsZUZvclVJRWxlbWVudHNBdHRyaWJ1dGVdICYmIG1fb2JqZWN0LT5pc01lbnVCdXR0b24oKSkg
ewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB1aUVsZW1lbnQgPSB0b0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QobV9vYmplY3QpLT5tZW51Rm9yTWVudUJ1dHRvbigpOwotICAgICAgICBp
ZiAodWlFbGVtZW50KQorICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogdWlFbGVtZW50
ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdD4oKm1fb2JqZWN0KS5tZW51Rm9y
TWVudUJ1dHRvbigpKQogICAgICAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVj
dDp1aUVsZW1lbnQtPndyYXBwZXIoKV07CiAgICAgfQogICAgIApAQCAtMzE5Nyw4ICszMTk2LDgg
QEAgLSAodm9pZClhY2Nlc3NpYmlsaXR5U2hvd0NvbnRleHRNZW51CiAgICAgaWYgKGZyYW1lVmll
dyAmJiAhZnJhbWVWaWV3LT5wbGF0Zm9ybVdpZGdldCgpKSB7CiAgICAgICAgIC8vIEZpbmQgdGhl
IGFwcHJvcHJpYXRlIHNjcm9sbCB2aWV3IHRvIHVzZSB0byBjb252ZXJ0IHRoZSBjb250ZW50cyB0
byB0aGUgd2luZG93LgogICAgICAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9
IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVu
dE9iamVjdCgpKSB7Ci0gICAgICAgICAgICBpZiAocGFyZW50LT5pc0FjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3KCkpIHsKLSAgICAgICAgICAgICAgICBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3ID0gdG9B
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhwYXJlbnQpLT5zY3JvbGxWaWV3KCk7CisgICAgICAgICAg
ICBpZiAoaXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KHBhcmVudCkpIHsKKyAgICAgICAgICAg
ICAgICBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNjcm9s
bFZpZXc+KCpwYXJlbnQpLnNjcm9sbFZpZXcoKTsKICAgICAgICAgICAgICAgICByZWN0ID0gc2Ny
b2xsVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJlY3QpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQpAQCAtMzI5NSwxMSArMzI5NCwxMSBAQCAtICh2b2lkKWFjY2Vzc2li
aWxpdHlTZXRWYWx1ZTooaWQpdmFsdWUgZm9yQXR0cmlidXRlOihOU1N0cmluZyopYXR0cmlidXRl
TmFtZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX29iamVjdC0+c2V0U2VsZWN0ZWQo
W251bWJlciBib29sVmFsdWVdKTsKICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZV0pIHsK
LSAgICAgICAgaWYgKCFhcnJheSB8fCBtX29iamVjdC0+cm9sZVZhbHVlKCkgIT0gTGlzdEJveFJv
bGUpCisgICAgICAgIGlmICghYXJyYXkgfHwgIWlzPEFjY2Vzc2liaWxpdHlMaXN0Qm94PihtX29i
amVjdCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZENoaWxkcmVuOwogICAgICAgICBj
b252ZXJ0VG9WZWN0b3IoYXJyYXksIHNlbGVjdGVkQ2hpbGRyZW4pOwotICAgICAgICB0b0FjY2Vz
c2liaWxpdHlMaXN0Qm94KG1fb2JqZWN0KS0+c2V0U2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENo
aWxkcmVuKTsKKyAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUxpc3RCb3g+KCptX29iamVj
dCkuc2V0U2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuKTsKICAgICB9IGVsc2UgaWYg
KG1fb2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0QXR0cmlidXRlXSkg
ewogICAgICAgICAgICAgbV9vYmplY3QtPnNldFNlbGVjdGVkVGV4dChzdHJpbmcpOwpAQCAtMzcw
Niw3ICszNzA1LDcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmlu
ZyopYXR0cmlidXRlIGZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGUKICAgICAgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNlbGxGb3JDb2x1bW5BbmRSb3dQ
YXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAgICAgICAgaWYgKGFycmF5ID09IG5pbCB8
fCBbYXJyYXkgY291bnRdICE9IDIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAg
ICAgICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGNlbGwgPSB0b0FjY2Vzc2liaWxpdHlUYWJs
ZShtX29iamVjdCktPmNlbGxGb3JDb2x1bW5BbmRSb3coW1thcnJheSBvYmplY3RBdEluZGV4OjBd
IHVuc2lnbmVkSW50VmFsdWVdLCBbW2FycmF5IG9iamVjdEF0SW5kZXg6MV0gdW5zaWduZWRJbnRW
YWx1ZV0pOworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogY2VsbCA9IGRvd25j
YXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fb2JqZWN0KS5jZWxsRm9yQ29sdW1uQW5kUm93KFtb
YXJyYXkgb2JqZWN0QXRJbmRleDowXSB1bnNpZ25lZEludFZhbHVlXSwgW1thcnJheSBvYmplY3RB
dEluZGV4OjFdIHVuc2lnbmVkSW50VmFsdWVdKTsKICAgICAgICAgICAgIGlmICghY2VsbCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBjM2JiZGQwMWIzYWU5ZmQx
OGQzYTU0ODJiMDA1ZmYwYWJmMDM3OTYyLi43MmZhYjdhODNhODM2ZDNiNDJiOGYyZDQ5MWZlOGFl
YzMxYzYxYzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAKQEAgLTE1ODEsOCArMTU4MSw4IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6CiAg
ICAgICAgICAgICAgICAgICAgIGxpdmVSZWdpb25TdGF0dXMgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzOjpQb2xpdGU7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChheE9iamVjdC0+aXNBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdCgpKQotICAgICAgICAgICAgICAgIG1vdXNlRXZlbnROb2RlID0gdG9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdChheE9iamVjdCktPm1vdXNlQnV0dG9uTGlzdGVuZXIoTW91c2VC
dXR0b25MaXN0ZW5lclJlc3VsdEZpbHRlcjo6SW5jbHVkZUJvZHlFbGVtZW50KTsKKyAgICAgICAg
ICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdD4oYXhPYmplY3QpKQorICAgICAgICAg
ICAgICAgIG1vdXNlRXZlbnROb2RlID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q+
KCpheE9iamVjdCkubW91c2VCdXR0b25MaXN0ZW5lcihNb3VzZUJ1dHRvbkxpc3RlbmVyUmVzdWx0
RmlsdGVyOjpJbmNsdWRlQm9keUVsZW1lbnQpOwogCiAgICAgICAgICAgICBpZiAoYXhPYmplY3Qt
PnN1cHBvcnRzQVJJQU93bnMoKSkgewogICAgICAgICAgICAgICAgIFZlY3RvcjxFbGVtZW50Kj4g
b3duZWRFbGVtZW50czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZW51TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3Qu
Y3BwCmluZGV4IDdjYTM1MmRjN2YyODViODAzM2M0NzQ0NWRkMGNkNGY2Y2IxMjdmMGEuLjRlZThl
OGVmN2FjOGUzMTEzYjRkMzBkZTA0ZGVjYzgzMjlkYzZmYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcApAQCAtNDM3LDcgKzQzNyw3IEBAIHZvaWQgUmVu
ZGVyTWVudUxpc3Q6OmRpZFVwZGF0ZUFjdGl2ZU9wdGlvbihpbnQgb3B0aW9uSW5kZXgpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCku
ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpIHsKLSAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlNZW51
TGlzdCogbWVudUxpc3QgPSB0b0FjY2Vzc2liaWxpdHlNZW51TGlzdChjYWNoZS0+Z2V0KHRoaXMp
KSkKKyAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlNZW51TGlzdCogbWVudUxpc3QgPSBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5TWVudUxpc3Q+KGNhY2hlLT5nZXQodGhpcykpKQogICAgICAgICAgICAg
bWVudUxpc3QtPmRpZFVwZGF0ZUFjdGl2ZU9wdGlvbihvcHRpb25JbmRleCk7CiAgICAgfQogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2UuY3BwIGIvU291cmNl
L1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2UuY3BwCmluZGV4IDk2ZjliNzUxN2E5M2Y3MzFhYWNj
MWUxODY4NTU2MTkyMjhmZDMwM2EuLjY3Y2M0ZjFkYjFlZDhiZThlNmM3YjBlM2MxMjU2YmQ0Y2Ux
YWM3YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVCYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9BY2Nlc3NpYmxlQmFzZS5jcHAKQEAgLTYxNiwxMCArNjE2
LDEwIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQWNjZXNzaWJsZUJhc2U6OmFjY1NlbGVj
dChsb25nIHNlbGVjdGlvbkZsYWdzLCBWQVJJQU5UCiAgICAgICAgIHJldHVybiBFX0lOVkFMSURB
Ukc7CiAKICAgICBpZiAoc2VsZWN0aW9uRmxhZ3MgJiBTRUxGTEFHX1RBS0VTRUxFQ1RJT04pIHsK
LSAgICAgICAgaWYgKHBhcmVudE9iamVjdC0+aXNMaXN0Qm94KCkpIHsKKyAgICAgICAgaWYgKGlz
PEFjY2Vzc2liaWxpdHlMaXN0Qm94PihwYXJlbnRPYmplY3QpKSB7CiAgICAgICAgICAgICBWZWN0
b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+ID4gc2VsZWN0ZWRDaGlsZHJlbigxKTsKICAg
ICAgICAgICAgIHNlbGVjdGVkQ2hpbGRyZW5bMF0gPSBjaGlsZE9iamVjdDsKLSAgICAgICAgICAg
IHRvQWNjZXNzaWJpbGl0eUxpc3RCb3gocGFyZW50T2JqZWN0KS0+c2V0U2VsZWN0ZWRDaGlsZHJl
bihzZWxlY3RlZENoaWxkcmVuKTsKKyAgICAgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlM
aXN0Qm94PigqcGFyZW50T2JqZWN0KS5zZXRTZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRy
ZW4pOwogICAgICAgICB9IGVsc2UgeyAvLyBhbnkgZWxlbWVudCBtYXkgYmUgc2VsZWN0YWJsZSBi
eSB2aXJ0dWUgb2YgaXQgaGF2aW5nIHRoZSBhcmlhLXNlbGVjdGVkIHByb3BlcnR5CiAgICAgICAg
ICAgICBBU1NFUlQoIXBhcmVudE9iamVjdC0+aXNNdWx0aVNlbGVjdGFibGUoKSk7CiAgICAgICAg
ICAgICBjaGlsZE9iamVjdC0+c2V0U2VsZWN0ZWQodHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3dpbi9BY2Nlc3NpYmxlSW1hZ2UuY3BwIGIvU291cmNlL1dlYktpdC93aW4vQWNjZXNz
aWJsZUltYWdlLmNwcAppbmRleCBmZDVmNWY2N2M2MTYwODYxNDQwNzk4MTM2ZmExY2E0MTRjNDc3
Y2EwLi5jZjE2MzhhMWJiMGZjYWM2NmZjMGRiYjE0MzQwNjA1ZTViMTg1ZmQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3dpbi9BY2Nlc3NpYmxlSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvd2luL0FjY2Vzc2libGVJbWFnZS5jcHAKQEAgLTQxLDE2ICs0MSwxNiBAQCBBY2Nlc3NpYmxl
SW1hZ2U6OkFjY2Vzc2libGVJbWFnZShBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmosIEhXTkQgd2lu
ZG93KQogCiBTdHJpbmcgQWNjZXNzaWJsZUltYWdlOjpuYW1lKCkgY29uc3QKIHsKLSAgICBpZiAo
IW1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICBpZiAoIWlzPEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+KG1fb2JqZWN0KSkKICAgICAgICAgcmV0dXJuIEFjY2Vz
c2libGVCYXNlOjpuYW1lKCk7CiAKLSAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KiBvYmog
PSB0b0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QobV9vYmplY3QpOworICAgIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QmIG9iaiA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+
KCptX29iamVjdCk7CiAKLSAgICBTdHJpbmcgYXJpYUxhYmVsID0gb2JqLT5hcmlhTGFiZWxlZEJ5
QXR0cmlidXRlKCk7CisgICAgU3RyaW5nIGFyaWFMYWJlbCA9IG9iai5hcmlhTGFiZWxlZEJ5QXR0
cmlidXRlKCk7CiAgICAgaWYgKCFhcmlhTGFiZWwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
YXJpYUxhYmVsOwogCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhbHRUZXh0ID0gb2JqLT5nZXRB
dHRyaWJ1dGUoSFRNTE5hbWVzOjphbHRBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFs
dFRleHQgPSBvYmouZ2V0QXR0cmlidXRlKEhUTUxOYW1lczo6YWx0QXR0cik7CiAgICAgaWYgKCFh
bHRUZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGFsdFRleHQ7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240099</attachid>
            <date>2014-10-19 22:15:44 -0700</date>
            <delta_ts>2014-10-20 11:25:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137286-20141019221549.patch</filename>
            <type>text/plain</type>
            <size>99367</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0ODc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDRjNjJjNTA3OTA2YjlhYzNiZTM3NDQz
NzIyODdmYjgxM2Y3OGE2NmEuLjdkMDdmMDJmMTJlY2U0ZWMxNzkyOWQ3OTc0NGEwZDc4ZWEwNTc5
NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTQtMTAtMTkgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBBY2Nl
c3NpYmlsaXR5IG9iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNzI4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFJlbW92ZSB0aGUgbGVnYWN5IFRZUEVfQ0FTVFNfQkFTRSgpIG1hY3JvIG5vdyB0
aGF0IGl0IGlzIG5vIGxvbmdlcgorICAgICAgICB1c2VkLgorCisgICAgICAgICogd3RmL0Fzc2Vy
dGlvbnMuaDoKKwogMjAxNC0xMC0xOCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgog
CiAgICAgICAgIFdvcmtRdWV1ZSBkaXNwYXRjaGVzIGZ1bmN0aW9ucyBidXQgaXNu4oCZdCBhIEZ1
bmN0aW9uRGlzcGF0Y2hlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDRkNjgxNTYzMzBlNTBlZTRiNWM1Y2E2MTAz
ZDFlN2E4MWNiMzczYzcuLmViNTA5MjQzNmMyYmQ1ZGI0M2QwYzdkNDQwYmM0YWI2Y2I1ZjVhOTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNDQgQEAKIDIwMTQtMTAtMTkgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAorICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZv
ciBBY2Nlc3NpYmlsaXR5IG9iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNzI4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIEFjY2Vzc2liaWxp
dHkgb2JqZWN0cyBhbmQgY2xlYW4gdXAgdGhlCisgICAgICAgIHN1cnJvdW5kaW5nIGNvZGUuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmpl
Y3RDYWNoZTo6Zm9jdXNlZEltYWdlTWFwVUlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6Om5vdGlmaWNhdGlvblBvc3RUaW1lckZpcmVkKToKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZFRhYmxlQ2VsbENoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpwYXJlbnRUYWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpyb3dJbmRleFJhbmdlKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OmRpc2Nsb3NlZFJvd3MpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpkaXNjbG9zZWRCeVJvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OnBhcmVudFRhYmxlKToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5oOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rOjppbWFnZU1hcExpbmtSZW5k
ZXJlcik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5r
Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5oOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3g6OnNldFNlbGVjdGVkQ2hpbGRyZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3g6OnNlbGVjdGVkQ2hpbGRyZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3g6Omxpc3RCb3hPcHRpb25BY2Nlc3Np
YmlsaXR5T2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0
Qm94Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlv
bi5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZW51TGlzdDo6YWRkQ2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0OjpkaWRVcGRhdGVBY3RpdmVP
cHRpb24pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0Lmg6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uaDoK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwOjptZW51TGlzdE9w
dGlvbkFjY2Vzc2liaWxpdHlPYmplY3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU1lbnVMaXN0UG9wdXAuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlNb2NrT2JqZWN0Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6dGV4dFVuZGVyRWxlbWVudCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRDaGlsZHJlblRvQXJyYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2Nyb2xsVmlld0FuY2VzdG9yKToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Z2V0RG9jdW1lbnRMaW5rcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpoYW5kbGVBY3RpdmVE
ZXNjZW5kYW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojppbmhlcml0c1ByZXNlbnRhdGlvbmFsUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRJbWFnZU1hcENoaWxkcmVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZFRleHRGaWVsZENoaWxkcmVu
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJlbW90ZVNW
R1Jvb3RFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmFyaWFTZWxlY3RlZFJvd3MpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVNWR1Jvb3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3OjphZGRD
aGlsZFNjcm9sbGJhcik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Ny
b2xsVmlldy5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJh
ci5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2xpZGVyOjphZGRDaGlsZHJlbik6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmg6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbjo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVNwaW5CdXR0b25QYXJ0OjpwcmVzcyk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5oOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlUYWJsZTo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRh
YmxlOjphZGRDaGlsZHJlbkZyb21TZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlUYWJsZTo6aGVhZGVyQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlUYWJsZTo6Y29sdW1uSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5VGFibGU6OnJvd0hlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRh
YmxlOjpjZWxsRm9yQ29sdW1uQW5kUm93KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlUYWJsZS5oOgorICAgICAgICBNYWtlIGlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgcHVi
bGljIGFuZCBtYXJrIGFzIGZpbmFsIHNvIHRoYXQgY2FsbGVycworICAgICAgICBjYW4gYmVuZWZp
dCBmcm9tIHRpZ2h0ZXIgdHlwaW5nLCBhcyBpc0FjY2Vzc2liaWxpdHlUYWJsZSgpIGlzCisgICAg
ICAgIHN0cmljdGVyIHRoYW4gaXNUYWJsZSgpLiBpc1RhYmxlKCkgaW5kaWNhdGVzIHRoYXQgdGhl
IG9iamVjdCBpcyBhbgorICAgICAgICBBY2Nlc3NpYmlsaXR5VGFibGUgYW5kIGlzIGVxdWl2YWxl
bnQgdG8gaXM8QWNjZXNzaWJpbGl0eVRhYmxlPihvYmplY3QpLgorICAgICAgICBpc0FjY2Vzc2li
aWxpdHlUYWJsZSgpIGlzIGVxdWl2YWxlbnQgdG8gImlzVGFibGUoKSAmJiByZW5kZXJlcigpIi4K
KworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpwYXJlbnRUYWJsZSk6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmg6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjpoZWFkZXJPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjphZGRDaGlsZHJlbik6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaDoKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXI6OmFkZENo
aWxkcmVuKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OnBhcmVudFRhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6aGVhZGVyT2JqZWN0
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5oOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rp
b24uY3BwOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkNsZWFyU2VsZWN0aW9u
KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25TZWxlY3RBbGxTZWxlY3Rpb24p
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VU
YWJsZS5jcHA6CisgICAgICAgIChjb3JlKToKKyAgICAgICAgKGNlbGwpOgorICAgICAgICAoY2Vs
bEF0SW5kZXgpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0SW5kZXhBdCk6Cisg
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXROQ29sdW1ucyk6CisgICAgICAgICh3ZWJr
aXRBY2Nlc3NpYmxlVGFibGVHZXROUm93cyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFi
bGVHZXRDb2x1bW5IZWFkZXIpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93
SGVhZGVyKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGFibGVDZWxsLmNwcDoKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxH
ZXRDb2x1bW5IZWFkZXJDZWxscyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVDZWxs
R2V0Um93SGVhZGVyQ2VsbHMpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlQ2VsbEdl
dENvbHVtblNwYW4pOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlQ2VsbEdldFJvd1Nw
YW4pOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlQ2VsbEdldFBvc2l0aW9uKToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eVBhc3N3b3Jk
RmllbGRMZW5ndGgpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBjb252ZXJ0UG9pbnRUb1NjcmVlblNwYWNlOl0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBjb252ZXJ0UmVjdFRvU2NyZWVuU3BhY2U6XSk6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMu
bW06CisgICAgICAgIChBWEF0dHJpYnV0ZVN0cmluZ1NldEVsZW1lbnQpOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZU5hbWVzXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNv
bnZlcnRQb2ludFRvU2NyZWVuU3BhY2U6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIHN1YnJvbGVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgcm9sZURlc2NyaXB0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIHNjcm9sbFZpZXdQYXJlbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5U2hvd0NvbnRl
eHRNZW51XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vz
c2liaWxpdHlTZXRWYWx1ZTpmb3JBdHRyaWJ1dGU6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpmb3JQYXJhbWV0
ZXI6XSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgor
ICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OmRpZFVwZGF0ZUFjdGl2ZU9wdGlvbik6CisKKzIwMTQt
MTAtMTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBVc2UgaXM8
PigpIC8gZG93bmNhc3Q8PigpIGZvciBhbGwgcmVtYWluaW5nIFJlbmRlck9iamVjdCBzdWJjbGFz
c2VzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc4
NDUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IDE5M2JhNThhNmU5N2YxNTJkNzY5MzIwMDU0MjRiOTAw
MGVkN2RiYWIuLjA3OGRmNDU0ZmJhMmVmMzMzNGIxZTVhMTU1YTg2ZTg4ZmRlN2JmOGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNC0xMC0xOSAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9y
IEFjY2Vzc2liaWxpdHkgb2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM3Mjg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgQWNjZXNzaWJpbGl0
eSBvYmplY3RzLgorCisgICAgICAgICogQWNjZXNzaWJsZUJhc2UuY3BwOgorICAgICAgICAoQWNj
ZXNzaWJsZUJhc2U6OmFjY1NlbGVjdCk6CisgICAgICAgICogQWNjZXNzaWJsZUltYWdlLmNwcDoK
KyAgICAgICAgKEFjY2Vzc2libGVJbWFnZTo6bmFtZSk6CisKIDIwMTQtMTAtMTggIHBlYXZvQG91
dGxvb2suY29tICA8cGVhdm9Ab3V0bG9vay5jb20+CiAKICAgICAgICAgW1dpbkNhaXJvXSBSZXBh
aW50IGlzc3VlcyB3aXRoIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5oIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5oCmlu
ZGV4IDcyYmUzZDYzOGNkMzVkNTg1YzU0YWViOGU2OGM3MGI1ODU0MmZlYzIuLjA1NDc1MGFhZGY5
YmU0ODVmMGY4NGVjZjI2ZDUwZDI1ZTlhMTU0ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L0Fzc2VydGlvbnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmgKQEAgLTM4Miwz
MiArMzgyLDQgQEAgc3RhdGljIGlubGluZSB2b2lkIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgp
CiAjZGVmaW5lIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCkgQVNTRVJUX05PVF9SRUFDSEVE
KCkKICNlbmRpZgogCi0vKiBUWVBFIENBU1QgKi8KLQotLy8gRklYTUU6IFRoaXMgbWFjcm8gc2hv
dWxkIGJlIHJlbW92ZWQgb25jZSB0aGUgY29kZSBiYXNlIGlzIHBvcnRlZCB0byB1c2luZwotLy8g
dGhlIG5ldyBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTXyooKSBtYWNyby4KLSNkZWZpbmUgVFlQRV9D
QVNUU19CQVNFKFRvQ2xhc3NOYW1lLCBhcmd1bWVudFR5cGUsIGFyZ3VtZW50TmFtZSwgcG9pbnRl
clByZWRpY2F0ZSwgcmVmZXJlbmNlUHJlZGljYXRlKSBcCi1pbmxpbmUgVG9DbGFzc05hbWUqIHRv
IyNUb0NsYXNzTmFtZShhcmd1bWVudFR5cGUqIGFyZ3VtZW50TmFtZSkgXAoteyBcCi0gICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWFyZ3VtZW50TmFtZSB8fCAocG9pbnRlclBy
ZWRpY2F0ZSkpOyBcCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRvQ2xhc3NOYW1lKj4oYXJndW1l
bnROYW1lKTsgXAotfSBcCi1pbmxpbmUgY29uc3QgVG9DbGFzc05hbWUqIHRvIyNUb0NsYXNzTmFt
ZShjb25zdCBhcmd1bWVudFR5cGUqIGFyZ3VtZW50TmFtZSkgXAoteyBcCi0gICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWFyZ3VtZW50TmFtZSB8fCAocG9pbnRlclByZWRpY2F0
ZSkpOyBcCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFRvQ2xhc3NOYW1lKj4oYXJndW1l
bnROYW1lKTsgXAotfSBcCi1pbmxpbmUgVG9DbGFzc05hbWUmIHRvIyNUb0NsYXNzTmFtZShhcmd1
bWVudFR5cGUmIGFyZ3VtZW50TmFtZSkgXAoteyBcCi0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04ocmVmZXJlbmNlUHJlZGljYXRlKTsgXAotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUb0NsYXNzTmFtZSY+KGFyZ3VtZW50TmFtZSk7IFwKLX0gXAotaW5saW5lIGNvbnN0IFRvQ2xh
c3NOYW1lJiB0byMjVG9DbGFzc05hbWUoY29uc3QgYXJndW1lbnRUeXBlJiBhcmd1bWVudE5hbWUp
IFwKLXsgXAotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHJlZmVyZW5jZVBy
ZWRpY2F0ZSk7IFwKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVG9DbGFzc05hbWUmPihh
cmd1bWVudE5hbWUpOyBcCi19IFwKLXZvaWQgdG8jI1RvQ2xhc3NOYW1lKGNvbnN0IFRvQ2xhc3NO
YW1lKik7IFwKLXZvaWQgdG8jI1RvQ2xhc3NOYW1lKGNvbnN0IFRvQ2xhc3NOYW1lJik7Ci0KICNl
bmRpZiAvKiBXVEZfQXNzZXJ0aW9uc19oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCAxNjMxMmIwMzk5OWRlOGEzNDFiYmJmNTA1ZWM2
NTVhYzQ4MmU3NDIyLi4wMjQ1MmQ1OTA3NzVjMTgyNzk4YmM5YzFlYWI0OTNhYmJmMjc2OTlmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAg
LTE1OSwxMCArMTU5LDEwIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmZv
Y3VzZWRJbWFnZU1hcFVJRWxlbWVudChIVE1MQXJlYUVsZW1lbnQqIGFyCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIAogICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBheFJlbmRlcklt
YWdlLT5jaGlsZHJlbigpKSB7Ci0gICAgICAgIGlmICghY2hpbGQtPmlzSW1hZ2VNYXBMaW5rKCkp
CisgICAgICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eUltYWdlTWFwTGluaz4oKmNoaWxkKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgaWYgKHRvQWNjZXNzaWJpbGl0
eUltYWdlTWFwTGluayhjaGlsZC5nZXQoKSktPmFyZWFFbGVtZW50KCkgPT0gYXJlYUVsZW1lbnQp
CisgICAgICAgIGlmIChkb3duY2FzdDxBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rPigqY2hpbGQp
LmFyZWFFbGVtZW50KCkgPT0gYXJlYUVsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gY2hpbGQu
Z2V0KCk7CiAgICAgfSAgICAKICAgICAKQEAgLTcyMCwxMCArNzIwLDggQEAgdm9pZCBBWE9iamVj
dENhY2hlOjpub3RpZmljYXRpb25Qb3N0VGltZXJGaXJlZChUaW1lcjxBWE9iamVjdENhY2hlPiYp
CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAvLyBNYWtlIHN1cmUgbm9uZSBvZiB0aGUgcmVuZGVy
IHZpZXdzIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBsYXllZCBvdXQuCiAgICAgICAgIC8v
IE5vdGlmaWNhdGlvbnMgc2hvdWxkIG9ubHkgYmUgc2VudCBhZnRlciB0aGUgcmVuZGVyZXIgaGFz
IGZpbmlzaGVkCi0gICAgICAgIGlmIChvYmotPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgp
KSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KiByZW5kZXJPYmogPSB0
b0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qob2JqKTsKLSAgICAgICAgICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSByZW5kZXJPYmotPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICBpZiAocmVu
ZGVyZXIpCisgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Pigqb2JqKSkg
eworICAgICAgICAgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdD4oKm9iaikucmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICBBU1NFUlQo
IXJlbmRlcmVyLT52aWV3KCkubGF5b3V0U3RhdGUoKSk7CiAgICAgICAgIH0KICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdy
aWQuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdy
aWQuY3BwCmluZGV4IDExZTIxZjBlMGZmNzlkOTJlY2FkNmYyOWQxMTllNThiYzQ4MTJhYTYuLjM3
NWY5OWUzNDQwMzkxMzU3MGRhMGM2YTcyYTJkMWYyNWFlNzA0ODIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAKQEAg
LTU1LDI5ICs1NSwyOSBAQCBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlBUklBR3JpZD4gQWNjZXNz
aWJpbGl0eUFSSUFHcmlkOjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZQogCiBib29sIEFjY2Vzc2li
aWxpdHlBUklBR3JpZDo6YWRkVGFibGVDZWxsQ2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCogY2hp
bGQsIEhhc2hTZXQ8QWNjZXNzaWJpbGl0eU9iamVjdCo+JiBhcHBlbmRlZFJvd3MsIHVuc2lnbmVk
JiBjb2x1bW5Db3VudCkKIHsKLSAgICBpZiAoIWNoaWxkIHx8ICghY2hpbGQtPmlzVGFibGVSb3co
KSAmJiBjaGlsZC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSAhPSBSb3dSb2xlKSkKKyAgICBpZiAoIWNo
aWxkIHx8ICghaXM8QWNjZXNzaWJpbGl0eVRhYmxlUm93PigqY2hpbGQpICYmIGNoaWxkLT5hcmlh
Um9sZUF0dHJpYnV0ZSgpICE9IFJvd1JvbGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIAotICAgIEFjY2Vzc2liaWxpdHlUYWJsZVJvdyogcm93ID0gdG9BY2Nlc3NpYmlsaXR5VGFi
bGVSb3coY2hpbGQpOwotICAgIGlmIChhcHBlbmRlZFJvd3MuY29udGFpbnMocm93KSkKKyAgICBh
dXRvJiByb3cgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVSb3c+KCpjaGlsZCk7CisgICAg
aWYgKGFwcGVuZGVkUm93cy5jb250YWlucygmcm93KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAKICAgICAvLyBzdG9yZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29sdW1ucwotICAg
IHVuc2lnbmVkIHJvd0NlbGxDb3VudCA9IHJvdy0+Y2hpbGRyZW4oKS5zaXplKCk7CisgICAgdW5z
aWduZWQgcm93Q2VsbENvdW50ID0gcm93LmNoaWxkcmVuKCkuc2l6ZSgpOwogICAgIGlmIChyb3dD
ZWxsQ291bnQgPiBjb2x1bW5Db3VudCkKICAgICAgICAgY29sdW1uQ291bnQgPSByb3dDZWxsQ291
bnQ7CiAgICAgCi0gICAgcm93LT5zZXRSb3dJbmRleCgoaW50KW1fcm93cy5zaXplKCkpOyAgICAg
ICAgCi0gICAgbV9yb3dzLmFwcGVuZChyb3cpOworICAgIHJvdy5zZXRSb3dJbmRleCgoaW50KW1f
cm93cy5zaXplKCkpOworICAgIG1fcm93cy5hcHBlbmQoJnJvdyk7CiAKICAgICAvLyBUcnkgYWRk
aW5nIHRoZSByb3cgaWYgaXQncyBub3QgaWdub3JpbmcgYWNjZXNzaWJpbGl0eSwKICAgICAvLyBv
dGhlcndpc2UgYWRkIGl0cyBjaGlsZHJlbiAodGhlIGNlbGxzKSBhcyB0aGUgZ3JpZCdzIGNoaWxk
cmVuLgotICAgIGlmICghcm93LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCi0gICAgICAgIG1f
Y2hpbGRyZW4uYXBwZW5kKHJvdyk7CisgICAgaWYgKCFyb3cuYWNjZXNzaWJpbGl0eUlzSWdub3Jl
ZCgpKQorICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZCgmcm93KTsKICAgICBlbHNlCi0gICAgICAg
IG1fY2hpbGRyZW4uYXBwZW5kVmVjdG9yKHJvdy0+Y2hpbGRyZW4oKSk7CisgICAgICAgIG1fY2hp
bGRyZW4uYXBwZW5kVmVjdG9yKHJvdy5jaGlsZHJlbigpKTsKIAotICAgIGFwcGVuZGVkUm93cy5h
ZGQocm93KTsKKyAgICBhcHBlbmRlZFJvd3MuYWRkKCZyb3cpOwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC0xMzQsMTIgKzEzNCwxMiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlBUklBR3JpZDo6YWRk
Q2hpbGRyZW4oKQogICAgIAogICAgIC8vIG1ha2UgdGhlIGNvbHVtbnMgYmFzZWQgb24gdGhlIG51
bWJlciBvZiBjb2x1bW5zIGluIHRoZSBmaXJzdCBib2R5CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvbHVtbkNvdW50OyArK2kpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ29s
dW1uKiBjb2x1bW4gPSB0b0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbihheENhY2hlLT5nZXRPckNy
ZWF0ZShDb2x1bW5Sb2xlKSk7Ci0gICAgICAgIGNvbHVtbi0+c2V0Q29sdW1uSW5kZXgoKGludClp
KTsKLSAgICAgICAgY29sdW1uLT5zZXRQYXJlbnQodGhpcyk7Ci0gICAgICAgIG1fY29sdW1ucy5h
cHBlbmQoY29sdW1uKTsKLSAgICAgICAgaWYgKCFjb2x1bW4tPmFjY2Vzc2liaWxpdHlJc0lnbm9y
ZWQoKSkKLSAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNvbHVtbik7CisgICAgICAgIGF1
dG8mIGNvbHVtbiA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbj4oKmF4Q2FjaGUt
PmdldE9yQ3JlYXRlKENvbHVtblJvbGUpKTsKKyAgICAgICAgY29sdW1uLnNldENvbHVtbkluZGV4
KHN0YXRpY19jYXN0PGludD4oaSkpOworICAgICAgICBjb2x1bW4uc2V0UGFyZW50KHRoaXMpOwor
ICAgICAgICBtX2NvbHVtbnMuYXBwZW5kKCZjb2x1bW4pOworICAgICAgICBpZiAoIWNvbHVtbi5h
Y2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCisgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZCgm
Y29sdW1uKTsKICAgICB9CiAgICAgCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogaGVhZGVyQ29u
dGFpbmVyT2JqZWN0ID0gaGVhZGVyQ29udGFpbmVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcAppbmRl
eCA1OGJlZDJiZTgzZjU2ZmU3NjY2NmQwNTVkOGY4ZDFhYzljN2E1YzMzLi5kMWRjOTM5NzBkNThj
OWQwZGIzNjY1ODIzZWRhZmY5ZDY5YzFkNmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHAKQEAgLTU2
LDcgKzU2LDcgQEAgQWNjZXNzaWJpbGl0eVRhYmxlKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxs
OjpwYXJlbnRUYWJsZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAg
IGlmIChwYXJlbnQtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiB0b0Fj
Y2Vzc2liaWxpdHlUYWJsZShwYXJlbnQpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNz
aWJpbGl0eVRhYmxlPihwYXJlbnQpOwogCiAgICAgLy8gSXQgY291bGQgaGFwcGVuIHRoYXQgd2Ug
aGFkbid0IHJlYWNoZWQgdGhlIHBhcmVudCB0YWJsZSB5ZXQgKGluCiAgICAgLy8gY2FzZSBvYmpl
Y3RzIGZvciByb3dzIHdlcmUgbm90IGlnbm9yaW5nIGFjY2Vzc2liaWxpdHkpIHNvIGZvcgpAQCAt
NjUsNyArNjUsNyBAQCBBY2Nlc3NpYmlsaXR5VGFibGUqIEFjY2Vzc2liaWxpdHlBUklBR3JpZENl
bGw6OnBhcmVudFRhYmxlKCkgY29uc3QKICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc0Fj
Y2Vzc2liaWxpdHlUYWJsZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBy
ZXR1cm4gdG9BY2Nlc3NpYmlsaXR5VGFibGUocGFyZW50KTsKKyAgICByZXR1cm4gZG93bmNhc3Q8
QWNjZXNzaWJpbGl0eVRhYmxlPihwYXJlbnQpOwogfQogICAgIAogdm9pZCBBY2Nlc3NpYmlsaXR5
QVJJQUdyaWRDZWxsOjpyb3dJbmRleFJhbmdlKHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+
JiByb3dSYW5nZSkKQEAgLTc0LDEzICs3NCwxMyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlBUklBR3Jp
ZENlbGw6OnJvd0luZGV4UmFuZ2Uoc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4mIHJvdwog
ICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGFyZW50LT5pc1Rh
YmxlUm93KCkpIHsKKyAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlUm93PigqcGFyZW50KSkg
ewogICAgICAgICAvLyBXZSBhbHJlYWR5IGdvdCBhIHRhYmxlIHJvdywgdXNlIGl0cyBBUEkuCi0g
ICAgICAgIHJvd1JhbmdlLmZpcnN0ID0gdG9BY2Nlc3NpYmlsaXR5VGFibGVSb3cocGFyZW50KS0+
cm93SW5kZXgoKTsKKyAgICAgICAgcm93UmFuZ2UuZmlyc3QgPSBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGVSb3c+KCpwYXJlbnQpLnJvd0luZGV4KCk7CiAgICAgfSBlbHNlIGlmIChwYXJlbnQt
PmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpIHsKICAgICAgICAgLy8gV2UgcmVhY2hlZCB0aGUgcGFy
ZW50IHRhYmxlLCBzbyB3ZSBuZWVkIHRvIGluc3BlY3QgaXRzCiAgICAgICAgIC8vIGNoaWxkcmVu
IHRvIGRldGVybWluZSB0aGUgcm93IGluZGV4IGZvciB0aGUgY2VsbCBpbiBpdC4KLSAgICAgICAg
dW5zaWduZWQgY29sdW1uQ291bnQgPSB0b0FjY2Vzc2liaWxpdHlUYWJsZShwYXJlbnQpLT5jb2x1
bW5Db3VudCgpOworICAgICAgICB1bnNpZ25lZCBjb2x1bW5Db3VudCA9IGRvd25jYXN0PEFjY2Vz
c2liaWxpdHlUYWJsZT4oKnBhcmVudCkuY29sdW1uQ291bnQoKTsKICAgICAgICAgaWYgKCFjb2x1
bW5Db3VudCkKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwCmluZGV4IDlk
ZmEwYmU0MDYxOThlZmM5YTdiMjQ2Y2Y3Mzg3MTIzNWZjYjE3MDMuLjA5MmNhNDQ0NjJiM2Y5MWVj
NjhhNTBiNTk1N2ViOWFlYzJjMjFkMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5jcHAKQEAgLTczLDcgKzcz
LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OmRpc2Nsb3NlZFJvd3MoQWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBkaXNjbG8KICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IHVuc2lnbmVkIGxldmVsID0gaGllcmFyY2hpY2FsTGV2ZWwoKTsKLSAgICBhdXRvJiBhbGxSb3dz
ID0gdG9BY2Nlc3NpYmlsaXR5VGFibGUocGFyZW50KS0+cm93cygpOworICAgIGF1dG8mIGFsbFJv
d3MgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpLnJvd3MoKTsKICAgICBp
bnQgcm93Q291bnQgPSBhbGxSb3dzLnNpemUoKTsKICAgICBmb3IgKGludCBrID0gaW5kZXggKyAx
OyBrIDwgcm93Q291bnQ7ICsraykgewogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiByb3cg
PSBhbGxSb3dzW2tdLmdldCgpOwpAQCAtMTAwLDcgKzEwMCw3IEBAIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6ZGlzY2xvc2VkQnlSb3coKSBjb25zdAogICAg
IAogICAgIC8vIFNlYXJjaCBmb3IgdGhlIHByZXZpb3VzIHJvdyB0aGF0IG1hdGNoZXMgdGhlIGNv
cnJlY3QgbGV2ZWwuCiAgICAgaW50IGluZGV4ID0gcm93SW5kZXgoKTsKLSAgICBhdXRvJiBhbGxS
b3dzID0gdG9BY2Nlc3NpYmlsaXR5VGFibGUocGFyZW50KS0+cm93cygpOworICAgIGF1dG8mIGFs
bFJvd3MgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KHBhcmVudCktPnJvd3MoKTsKICAg
ICBpbnQgcm93Q291bnQgPSBhbGxSb3dzLnNpemUoKTsKICAgICBpZiAoaW5kZXggPj0gcm93Q291
bnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTIwLDggKzEyMCw4IEBAIEFjY2Vzc2li
aWxpdHlUYWJsZSogQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpwYXJlbnRUYWJsZSgpIGNvbnN0
CiAgICAgLy8gb25seSBoYXZlICJyb3ciIGVsZW1lbnRzLCBidXQgaWYgbm90LCB3ZSBzdGlsbCBz
aG91bGQgaGFuZGxlIGl0IGdyYWNlZnVsbHkgYnkgZmluZGluZyB0aGUgcmlnaHQgdGFibGUuCiAg
ICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBwYXJlbnRPYmplY3QoKTsgcGFy
ZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7CiAgICAgICAgIC8vIFRoZSBw
YXJlbnQgdGFibGUgZm9yIGFuIEFSSUEgZ3JpZCByb3cgc2hvdWxkIGJlIGFuIEFSSUEgdGFibGUu
Ci0gICAgICAgIGlmIChwYXJlbnQtPmlzVGFibGUoKSAmJiBwYXJlbnQtPmlzQWNjZXNzaWJpbGl0
eVRhYmxlKCkgJiYgdG9BY2Nlc3NpYmlsaXR5VGFibGUocGFyZW50KS0+aXNBcmlhVGFibGUoKSkK
LSAgICAgICAgICAgIHJldHVybiB0b0FjY2Vzc2liaWxpdHlUYWJsZShwYXJlbnQpOworICAgICAg
ICBpZiAocGFyZW50LT5pc0FjY2Vzc2liaWxpdHlUYWJsZSgpICYmIGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlUYWJsZT4oKnBhcmVudCkuaXNBcmlhVGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBk
b3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KHBhcmVudCk7CiAgICAgfQogICAgIAogICAgIHJl
dHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmgKaW5kZXggMzNmZmE1NjBhNmNmNDRlYjFhOTVlN2Q5
YzhlOGE5ZjNjODRkMGM1Yy4uMzVlNmQ0MTE3ZDhhYzcxYzE0MWVlZmI1ZjQ2MGM0ZjdmYjFkNDUz
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
QVJJQUdyaWRSb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlBUklBR3JpZFJvdy5oCkBAIC01Myw4ICs1Myw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBBY2Nlc3NpYmlsaXR5VGFibGUqIHBhcmVudFRhYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OyAK
IAotQUNDRVNTSUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5QVJJQUdyaWRS
b3csIGlzQVJJQVRyZWVHcmlkUm93KCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUgCiAKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQUNDRVNTSUJJTElUWShBY2Nlc3NpYmlsaXR5QVJJQUdyaWRS
b3csIGlzQVJJQVRyZWVHcmlkUm93KCkpCisKICNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5QVJJQUdy
aWRSb3dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5SW1hZ2VNYXBMaW5rLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUltYWdlTWFwTGluay5jcHAKaW5kZXggYWU5NTdmMDhkMjY1OWE5NWU0NTVhYzZm
Y2EyZjYzYWVhZmI0MGU2My4uOWE5YWZiNDg2YzU4N2Q5NDI2MWY5MmJiNDA5NmQ2ZTQ1NmZlOGQz
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
SW1hZ2VNYXBMaW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlJbWFnZU1hcExpbmsuY3BwCkBAIC0xNDAsOCArMTQwLDggQEAgUmVuZGVyRWxlbWVu
dCogQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluazo6aW1hZ2VNYXBMaW5rUmVuZGVyZXIoKSBjb25z
dAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVy
ID0gbnVsbHB0cjsKLSAgICBpZiAobV9wYXJlbnQgJiYgbV9wYXJlbnQtPmlzQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdCgpKQotICAgICAgICByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckVsZW1l
bnQ+KHRvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdChtX3BhcmVudCktPnJlbmRlcmVyKCkpOwor
ICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0PihtX3BhcmVudCkpCisgICAgICAg
IHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdD4oKm1fcGFyZW50KS5yZW5kZXJlcigpKTsKICAgICBlbHNlCiAgICAgICAg
IHJlbmRlcmVyID0gbV9tYXBFbGVtZW50LT5yZW5kZXJlcigpOwogICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsu
aAppbmRleCA5MWY1Y2E2ZmE4N2M4NDQ2ZTViNDg3NTQxOGZkMDljZDgwMDEwYWQwLi41MmVjYmZj
YzQzYTg1MmIxZGQ4YmU4NTdhN2U1NGYyNzJjNzgzMmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsuaApAQCAt
ODAsOSArODAsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdlTWFwTGluaygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNQYXRoKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogfTsKLQotQUNDRVNTSUJJ
TElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLCBpc0ltYWdl
TWFwTGluaygpKQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0FDQ0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluaywgaXNJbWFn
ZU1hcExpbmsoKSkKKwogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmtfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5o
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5oCmluZGV4
IDQ4YmIyZjYyNTJlOTdkMjFmMzhjNWYxOWEyMzcxYjc2NDY2YzgzMGQuLmYzZWZlNDk0ZDQ0MmEz
ZjgyZjFkYWJlODU2NDc0NjE4MWQ5MjQyNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0LmgKQEAgLTUyLDggKzUyLDggQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlSb2xlIGRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xl
KCkgb3ZlcnJpZGU7CiB9OwogCi1BQ0NFU1NJQklMSVRZX09CSkVDVF9UWVBFX0NBU1RTKEFjY2Vz
c2liaWxpdHlMaXN0LCBpc0xpc3QoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0FDQ0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eUxpc3QsIGlzTGlz
dCgpKQorCiAjZW5kaWYgLy8gQWNjZXNzaWJpbGl0eUxpc3RfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcAppbmRleCAzNTYx
ZWU2ZGFkMWEyNjk4MGU3YTMxYTQ0OTNkYWJmMjdmMzUyYmRhLi5hMzYwZGQzMzgyMzQ5YjM5MjA2
MzBmZWMyYmIwMjE5N2YwNGM1NWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcApAQCAtOTIsMTYgKzkyLDE2IEBAIHZv
aWQgQWNjZXNzaWJpbGl0eUxpc3RCb3g6OnNldFNlbGVjdGVkQ2hpbGRyZW4oY29uc3QgQWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yCiAgICAgCiAgICAgLy8gZGlzYWJsZSBhbnkgc2VsZWN0ZWQg
b3B0aW9ucwogICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7Ci0gICAg
ICAgIEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uKiBsaXN0Qm94T3B0aW9uID0gdG9BY2Nlc3Np
YmlsaXR5TGlzdEJveE9wdGlvbihjaGlsZC5nZXQoKSk7Ci0gICAgICAgIGlmIChsaXN0Qm94T3B0
aW9uLT5pc1NlbGVjdGVkKCkpCi0gICAgICAgICAgICBsaXN0Qm94T3B0aW9uLT5zZXRTZWxlY3Rl
ZChmYWxzZSk7CisgICAgICAgIGF1dG8mIGxpc3RCb3hPcHRpb24gPSBkb3duY2FzdDxBY2Nlc3Np
YmlsaXR5TGlzdEJveE9wdGlvbj4oKmNoaWxkKTsKKyAgICAgICAgaWYgKGxpc3RCb3hPcHRpb24u
aXNTZWxlY3RlZCgpKQorICAgICAgICAgICAgbGlzdEJveE9wdGlvbi5zZXRTZWxlY3RlZChmYWxz
ZSk7CiAgICAgfQogICAgIAogICAgIGZvciAoY29uc3QgYXV0byYgb2JqIDogY2hpbGRyZW4pIHsK
ICAgICAgICAgaWYgKG9iai0+cm9sZVZhbHVlKCkgIT0gTGlzdEJveE9wdGlvblJvbGUpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgdG9BY2Nlc3NpYmls
aXR5TGlzdEJveE9wdGlvbihvYmouZ2V0KCkpLT5zZXRTZWxlY3RlZCh0cnVlKTsKKyAgICAgICAg
ZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24+KCpvYmopLnNldFNlbGVjdGVkKHRy
dWUpOwogICAgIH0KIH0KICAgICAKQEAgLTExMyw3ICsxMTMsNyBAQCB2b2lkIEFjY2Vzc2liaWxp
dHlMaXN0Qm94OjpzZWxlY3RlZENoaWxkcmVuKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYg
cmVzdWx0KQogICAgICAgICBhZGRDaGlsZHJlbigpOwogICAgICAgICAKICAgICBmb3IgKGNvbnN0
IGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikgewotICAgICAgICBpZiAodG9BY2Nlc3NpYmlsaXR5
TGlzdEJveE9wdGlvbihjaGlsZC5nZXQoKSktPmlzU2VsZWN0ZWQoKSkKKyAgICAgICAgaWYgKGRv
d25jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uPigqY2hpbGQpLmlzU2VsZWN0ZWQoKSkK
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hpbGQuZ2V0KCkpOwogICAgIH0gICAgCiB9CkBA
IC0xMzgsMTAgKzEzOCwxMCBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5TGlz
dEJveDo6bGlzdEJveE9wdGlvbkFjY2Vzc2liaWxpdHlPYmplY3QoSFRNTAogICAgIGlmICghZWxl
bWVudCB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGhyVGFnKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdEJveE9iamVjdCA9IG1fcmVu
ZGVyZXItPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShMaXN0Qm94T3B0
aW9uUm9sZSk7Ci0gICAgdG9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbihsaXN0Qm94T2JqZWN0
KS0+c2V0SFRNTEVsZW1lbnQoZWxlbWVudCk7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCYgbGlz
dEJveE9iamVjdCA9ICptX3JlbmRlcmVyLT5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKS0+Z2V0
T3JDcmVhdGUoTGlzdEJveE9wdGlvblJvbGUpOworICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlM
aXN0Qm94T3B0aW9uPihsaXN0Qm94T2JqZWN0KS5zZXRIVE1MRWxlbWVudChlbGVtZW50KTsKICAg
ICAKLSAgICByZXR1cm4gbGlzdEJveE9iamVjdDsKKyAgICByZXR1cm4gJmxpc3RCb3hPYmplY3Q7
CiB9CiAgICAgCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5TGlzdEJveDo6ZWxl
bWVudEFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RC
b3guaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3gu
aAppbmRleCAyNjEzNTlkZTY5YTg3Y2JjMDI0ZmFmMDU2N2VmZDRjMDcwZmM5NTM4Li5mMjE2NmY0
MjRjZjIwNzkyYjc5YzVhYjU1NWRkYjlkYmEzM2NkNjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5oCkBAIC01Niw5ICs1Niw5
IEBAIHByaXZhdGU6CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdEJveE9wdGlvbkFjY2Vz
c2liaWxpdHlPYmplY3QoSFRNTEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGVsZW1lbnRBY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2ludCYp
IGNvbnN0IG92ZXJyaWRlOwogfTsKLQotQUNDRVNTSUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhB
Y2Nlc3NpYmlsaXR5TGlzdEJveCwgaXNMaXN0Qm94KCkpCiAgICAgCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQUNDRVNTSUJJTElUWShBY2Nlc3NpYmls
aXR5TGlzdEJveCwgaXNMaXN0Qm94KCkpCisKICNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5TGlzdEJv
eF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlMaXN0Qm94T3B0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlMaXN0Qm94T3B0aW9uLmgKaW5kZXggMDYwYTYwN2I0Y2MzZWRiZTg2MjNhNzExOTY4MjAy
OGVjYzFlMmY1OS4uOGUyMmI0MzIxMjdiOWZjZWE4YWY2ZDAxYWQ1OGNhOTkzOGE1Y2EzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJv
eE9wdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUxpc3RCb3hPcHRpb24uaApAQCAtNzQsOSArNzQsOSBAQCBwcml2YXRlOgogICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGxpc3RCb3hPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KEhUTUxFbGVtZW50
KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
KCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwotCi1BQ0NFU1NJQklMSVRZX09CSkVDVF9UWVBFX0NBU1RT
KEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLCBpc0xpc3RCb3hPcHRpb24oKSkKICAgICAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUgCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQUNDRVNTSUJJ
TElUWShBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbiwgaXNMaXN0Qm94T3B0aW9uKCkpCisKICNl
bmRpZiAvLyBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAKaW5kZXggNmUy
Y2U1NGMyZmUxYTdhMmM5NjcwOTU4ODAzNjg1MDVjYzdiNmQ5Ni4uNDJkZTg0NjI1OTlmNDA2OTRl
NWY4MTY5NzYwZTE2YmZiNzc4OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcApAQCAtNjYsNyArNjYsNyBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlNZW51TGlzdDo6YWRkQ2hpbGRyZW4oKQogICAgIGlmICghbGlzdCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgdG9BY2Nlc3NpYmlsaXR5TW9ja09iamVjdChsaXN0KS0+
c2V0UGFyZW50KHRoaXMpOworICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlNb2NrT2JqZWN0Pigq
bGlzdCkuc2V0UGFyZW50KHRoaXMpOwogICAgIGlmIChsaXN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25v
cmVkKCkpIHsKICAgICAgICAgY2FjaGUtPnJlbW92ZShsaXN0LT5heE9iamVjdElEKCkpOwogICAg
ICAgICByZXR1cm47CkBAIC0xMTEsNyArMTExLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5TWVudUxp
c3Q6OmRpZFVwZGF0ZUFjdGl2ZU9wdGlvbihpbnQgb3B0aW9uSW5kZXgpCiAgICAgY29uc3QgYXV0
byYgY2hpbGRPYmplY3RzID0gY2hpbGRyZW4oKTsKICAgICBpZiAoIWNoaWxkT2JqZWN0cy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgQVNTRVJUKGNoaWxkT2JqZWN0cy5zaXplKCkgPT0gMSk7Ci0gICAg
ICAgIEFTU0VSVChjaGlsZE9iamVjdHNbMF0tPmlzTWVudUxpc3RQb3B1cCgpKTsKKyAgICAgICAg
QVNTRVJUKGlzPEFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwPigqY2hpbGRPYmplY3RzWzBdKSk7
CiAKICAgICAgICAgLy8gV2UgbWlnaHQgYmUgY2FsbGluZyB0aGlzIG1ldGhvZCBpbiBzaXR1YXRp
b25zIHdoZXJlIHRoZSByZW5kZXJlcnMgZm9yIGxpc3QgaXRlbXMKICAgICAgICAgLy8gYXNzb2Np
YXRlZCB0byB0aGUgbWVudSBsaXN0IGhhdmUgbm90IGJlZW4gY3JlYXRlZCAoZS5nLiB0aGV5IG1p
Z2h0IGJlIHJlbmRlcmVkCkBAIC0xMjEsMTAgKzEyMSw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU1l
bnVMaXN0OjpkaWRVcGRhdGVBY3RpdmVPcHRpb24oaW50IG9wdGlvbkluZGV4KQogICAgICAgICAv
LyBZb3UgY2FuIHJlcHJvZHVjZSB0aGUgaXNzdWUgaW4gdGhlIEdUSysgcG9ydCBieSByZW1vdmlu
ZyB0aGlzIGNoZWNrIGFuZCBydW5uaW5nCiAgICAgICAgIC8vIGFjY2Vzc2liaWxpdHkvaW5zZXJ0
LXNlbGVjdGVkLW9wdGlvbi1pbnRvLXNlbGVjdC1jYXVzZXMtY3Jhc2guaHRtbCAod2lsbCBjcmFz
aCkuCiAgICAgICAgIGludCBwb3B1cENoaWxkcmVuU2l6ZSA9IHN0YXRpY19jYXN0PGludD4oY2hp
bGRPYmplY3RzWzBdLT5jaGlsZHJlbigpLnNpemUoKSk7Ci0gICAgICAgIGlmIChjaGlsZE9iamVj
dHNbMF0tPmlzTWVudUxpc3RQb3B1cCgpICYmIG9wdGlvbkluZGV4ID49IDAgJiYgb3B0aW9uSW5k
ZXggPCBwb3B1cENoaWxkcmVuU2l6ZSkgewotICAgICAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlN
ZW51TGlzdFBvcHVwKiBwb3B1cCA9IHRvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAoY2hpbGRP
YmplY3RzWzBdLmdldCgpKSkKLSAgICAgICAgICAgICAgICBwb3B1cC0+ZGlkVXBkYXRlQWN0aXZl
T3B0aW9uKG9wdGlvbkluZGV4KTsKLSAgICAgICAgfQorICAgICAgICBpZiAoaXM8QWNjZXNzaWJp
bGl0eU1lbnVMaXN0UG9wdXA+KCpjaGlsZE9iamVjdHNbMF0pICYmIG9wdGlvbkluZGV4ID49IDAg
JiYgb3B0aW9uSW5kZXggPCBwb3B1cENoaWxkcmVuU2l6ZSkKKyAgICAgICAgICAgIGRvd25jYXN0
PEFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwPigqY2hpbGRPYmplY3RzWzBdKS5kaWRVcGRhdGVB
Y3RpdmVPcHRpb24ob3B0aW9uSW5kZXgpOwogICAgIH0KIAogICAgIGNhY2hlLT5wb3N0Tm90aWZp
Y2F0aW9uKHRoaXMsICZkb2N1bWVudC5nZXQoKSwgQVhPYmplY3RDYWNoZTo6QVhNZW51TGlzdFZh
bHVlQ2hhbmdlZCwgVGFyZ2V0RWxlbWVudCwgUG9zdFN5bmNocm9ub3VzbHkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuaCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmgKaW5k
ZXggNmNmNGZkMmJkZGFkZDc3MmYxM2FkOTY3YjY2YmViOGNkNDlkZjllMS4uNWIxYjJkNDA3MDcy
MWNhMjczY2QwZjU0YzYzNzk5OTRjMThjNDMzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5oCkBAIC01NSw4ICs1NSw4IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpIG92ZXJyaWRlOwog
fTsKIAotQUNDRVNTSUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5TWVudUxp
c3QsIGlzTWVudUxpc3QoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0FDQ0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eU1lbnVMaXN0LCBpc01lbnVM
aXN0KCkpCisKICNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5TWVudUxpc3RfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0
aW9uLmgKaW5kZXggNmJlZTU4YjE4MzdlYWE4YzkwZmMyYjlkYjc0NDAzYzY3YTkxNWIyMS4uNWUz
ODNmN2JjZjllNGFmNjUxNmQzZDFmMzRkZDI1NDYyOTBlMTI4MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlv
bi5oCkBAIC02Miw4ICs2Miw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBt
X2VsZW1lbnQ7CiB9OwogCi1BQ0NFU1NJQklMSVRZX09CSkVDVF9UWVBFX0NBU1RTKEFjY2Vzc2li
aWxpdHlNZW51TGlzdE9wdGlvbiwgaXNNZW51TGlzdE9wdGlvbigpKQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQUNDRVNTSUJJTElUWShBY2Nlc3Np
YmlsaXR5TWVudUxpc3RPcHRpb24sIGlzTWVudUxpc3RPcHRpb24oKSkKKwogI2VuZGlmIC8vIEFj
Y2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuY3BwCmluZGV4IDQ2
OWFmY2FhMDE0MTJlNWY2NjQzYmVjYTZlZGQ3ZDUwMDViNDEyYmEuLmZlMWJkMzRiODRhZTY0MDk1
OGVlMGRmYmEzZGJmNzk5Y2NiMmQyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuY3BwCkBAIC03Mywx
MyArNzMsMTAgQEAgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uKiBBY2Nlc3NpYmlsaXR5TWVu
dUxpc3RQb3B1cDo6bWVudUxpc3RPcHRpb25BY2Nlc3NpYmkKICAgICBpZiAoIWlzPEhUTUxPcHRp
b25FbGVtZW50PihlbGVtZW50KSB8fCAhZWxlbWVudC0+aW5SZW5kZXJlZERvY3VtZW50KCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0
ID0gZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShNZW51TGlzdE9wdGlv
blJvbGUpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9iamVjdC0+aXNN
ZW51TGlzdE9wdGlvbigpKTsKKyAgICBhdXRvJiBvcHRpb24gPSBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5TWVudUxpc3RPcHRpb24+KCpkb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3Jl
YXRlKE1lbnVMaXN0T3B0aW9uUm9sZSkpOworICAgIG9wdGlvbi5zZXRFbGVtZW50KGVsZW1lbnQp
OwogCi0gICAgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uKiBvcHRpb24gPSB0b0FjY2Vzc2li
aWxpdHlNZW51TGlzdE9wdGlvbihvYmplY3QpOwotICAgIG9wdGlvbi0+c2V0RWxlbWVudChlbGVt
ZW50KTsKLQotICAgIHJldHVybiBvcHRpb247CisgICAgcmV0dXJuICZvcHRpb247CiB9CiAKIGJv
b2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXA6OnByZXNzKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuaCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuaApp
bmRleCBhNGI3ZDYwMGE3OTIwMTMyNTE1NmQ5OGU4NjM4NmE0YmZlOTc5NmM3Li5jMTU2YWNlMzZk
ZDQzMDVhYWU1ZTI3N2Q2NWY4NTM2MjVkMzQwYjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5oCkBAIC02
Miw4ICs2Miw4IEBAIHByaXZhdGU6CiAgICAgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uKiBt
ZW51TGlzdE9wdGlvbkFjY2Vzc2liaWxpdHlPYmplY3QoSFRNTEVsZW1lbnQqKSBjb25zdDsKIH07
CiAKLUFDQ0VTU0lCSUxJVFlfT0JKRUNUX1RZUEVfQ0FTVFMoQWNjZXNzaWJpbGl0eU1lbnVMaXN0
UG9wdXAsIGlzTWVudUxpc3RQb3B1cCgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQUNDRVNTSUJJTElUWShBY2Nlc3NpYmlsaXR5TWVudUxpc3RQ
b3B1cCwgaXNNZW51TGlzdFBvcHVwKCkpCisKICNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5TWVudUxp
c3RQb3B1cF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlNb2NrT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlNb2NrT2JqZWN0LmgKaW5kZXggZTA0ZmQ3ZjdlMDcyOWQ0YTIyZmE5YzlkZjEwZTRi
ZjY1Yzk5OGM3ZC4uNGI3YmM0NjgwMjdjYTQ1NDI1ZWRiOTdjZmY1MTRmMDFhMjM5OGRiYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TW9ja09i
amVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1v
Y2tPYmplY3QuaApAQCAtNTEsMTAgKzUxLDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29s
IGlzTW9ja09iamVjdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZp
cnR1YWwgYm9vbCBjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IG92ZXJyaWRl
OwotfTsgCit9OwogCi1BQ0NFU1NJQklMSVRZX09CSkVDVF9UWVBFX0NBU1RTKEFjY2Vzc2liaWxp
dHlNb2NrT2JqZWN0LCBpc01vY2tPYmplY3QoKSkKLSAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUgCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQUNDRVNTSUJJTElUWShBY2Nlc3NpYmlsaXR5
TW9ja09iamVjdCwgaXNNb2NrT2JqZWN0KCkpCisKICNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5TW9j
a09iamVjdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCmluZGV4IGE4YTRlNmIzN2QyZWY4YTZkODBhYjJhM2I3
MDg4ODgxNGJhOWQ3NjkuLjA3OTY2Y2Y0ZWExYThiMWIwNjM2MTA5OGM2ZjliN2RhNDZmYzUyMjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3QuY3BwCkBAIC0xNjY5LDkgKzE2NjksOSBAQCBTdHJpbmcgQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0eVRleHRVbmRlckVs
ZW1lbnRNbwogICAgICAgICBpZiAoIXNob3VsZFVzZUFjY2Vzc2libGl0eU9iamVjdElubmVyVGV4
dChjaGlsZCwgbW9kZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoY2hp
bGQtPmlzQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QoKSkgeworICAgICAgICBpZiAoaXM8QWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q+KCpjaGlsZCkpIHsKICAgICAgICAgICAgIFZlY3RvcjxBY2Nlc3Np
YmlsaXR5VGV4dD4gdGV4dE9yZGVyOwotICAgICAgICAgICAgdG9BY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdChjaGlsZCktPmFsdGVybmF0aXZlVGV4dCh0ZXh0T3JkZXIpOworICAgICAgICAgICAgZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q+KCpjaGlsZCkuYWx0ZXJuYXRpdmVUZXh0KHRl
eHRPcmRlcik7CiAgICAgICAgICAgICBpZiAodGV4dE9yZGVyLnNpemUoKSA+IDAgJiYgdGV4dE9y
ZGVyWzBdLnRleHQubGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICBhcHBlbmROYW1lVG9TdHJp
bmdCdWlsZGVyKGJ1aWxkZXIsIHRleHRPcmRlclswXS50ZXh0KTsKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuaAppbmRleCA3YWIyODE2ZjMxNTYwN2IwZTkxZTBlODU2MzYwYTY5
ZDVjNjk2MGIwLi5lYjYxNGExODY3NDZiM2UwOGU5ZjhhOTZjOGZiNTIxNTljODhjYWVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5oCkBAIC0yMDcsOCArMjA3LDggQEAgcHJpdmF0ZToKICAgICBib29sIHVzZXNBbHRU
YWdGb3JUZXh0Q29tcHV0YXRpb24oKSBjb25zdDsKIH07CiAKLUFDQ0VTU0lCSUxJVFlfT0JKRUNU
X1RZUEVfQ0FTVFMoQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QsIGlzQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0FDQ0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QsIGlzQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QoKSkKKwogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCmluZGV4IGU3YzdkMmM1MDk1MmJkOWJiZDc3N2I5NTA5YTY3ZjMwNWU0YWExOWMuLjJiYWY0
NGFhYjM3M2E0ZGNkZDhlMzIwMjk5YTc3NGM0NWZjZjFkN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNTAyLDcg
KzUwMiw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZENoaWxkcmVuVG9BcnJheShBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmplY3QsIGJvb2wgaXNGb3J3YXJkLCBBCiB7CiAgICAgLy8gQSB0YWJsZSdzIGNo
aWxkcmVuIGluY2x1ZGVzIGVsZW1lbnRzIHdob3NlIG93biBjaGlsZHJlbiBhcmUgYWxzbyB0aGUg
dGFibGUncyBjaGlsZHJlbiAoZHVlIHRvIHRoZSB3YXkgdGhlIE1hYyBleHBvc2VzIHRhYmxlcyku
CiAgICAgLy8gVGhlIHJvd3MgZnJvbSB0aGUgdGFibGUgc2hvdWxkIGJlIHF1ZXJpZWQsIHNpbmNl
IHRob3NlIGFyZSBkaXJlY3QgZGVzY2VuZGFudHMgb2YgdGhlIHRhYmxlLCBhbmQgdGhleSBjb250
YWluIGNvbnRlbnQuCi0gICAgY29uc3QgYXV0byYgc2VhcmNoQ2hpbGRyZW4gPSBvYmplY3QtPmlz
QWNjZXNzaWJpbGl0eVRhYmxlKCkgPyB0b0FjY2Vzc2liaWxpdHlUYWJsZShvYmplY3QpLT5yb3dz
KCkgOiBvYmplY3QtPmNoaWxkcmVuKCk7CisgICAgY29uc3QgYXV0byYgc2VhcmNoQ2hpbGRyZW4g
PSBvYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgPyBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5
VGFibGU+KCpvYmplY3QpLnJvd3MoKSA6IG9iamVjdC0+Y2hpbGRyZW4oKTsKIAogICAgIHNpemVf
dCBjaGlsZHJlblNpemUgPSBzZWFyY2hDaGlsZHJlbi5zaXplKCk7CiAKQEAgLTE1MzYsOCArMTUz
Niw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6dXBkYXRlQmFja2luZ1N0b3JlKCkKIFNj
cm9sbFZpZXcqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNjcm9sbFZpZXdBbmNlc3RvcigpIGNvbnN0
CiB7CiAgICAgZm9yIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzY3JvbGxQYXJlbnQgPSB0
aGlzOyBzY3JvbGxQYXJlbnQ7IHNjcm9sbFBhcmVudCA9IHNjcm9sbFBhcmVudC0+cGFyZW50T2Jq
ZWN0KCkpIHsKLSAgICAgICAgaWYgKHNjcm9sbFBhcmVudC0+aXNBY2Nlc3NpYmlsaXR5U2Nyb2xs
VmlldygpKQotICAgICAgICAgICAgcmV0dXJuIHRvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoc2Ny
b2xsUGFyZW50KS0+c2Nyb2xsVmlldygpOworICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVNj
cm9sbFZpZXc+KCpzY3JvbGxQYXJlbnQpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlTY3JvbGxWaWV3Pigqc2Nyb2xsUGFyZW50KS5zY3JvbGxWaWV3KCk7CiAgICAg
fQogICAgIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCBiMTExOTAxYzE4MjhjZmVhMTU1
OTdhZGNkNDlmMGQ1YjJiNzYzYTlkLi4wMjM0YmIzZGZkMWYxNzdjNWUwZGZlZjJjMzkwM2MwN2Ix
MmYxNTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuaApAQCAtMTAwNSw5ICsxMDA1LDExIEBAIGlubGluZSBpbnQgQWNjZXNzaWJp
bGl0eU9iamVjdDo6bGluZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0
IHsKIGlubGluZSB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnVwZGF0ZUJhY2tpbmdTdG9yZSgp
IHsgfQogI2VuZGlmCiAKLSNkZWZpbmUgQUNDRVNTSUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhU
b1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAotICAgIFRZUEVfQ0FTVFNfQkFTRShUb1ZhbHVl
VHlwZU5hbWUsIEFjY2Vzc2liaWxpdHlPYmplY3QsIG9iamVjdCwgb2JqZWN0LT5wcmVkaWNhdGUs
IG9iamVjdC5wcmVkaWNhdGUpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2RlZmluZSBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0FDQ0VTU0lCSUxJVFkoVG9WYWx1ZVR5cGVOYW1lLCBwcmVk
aWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9WYWx1ZVR5
cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3QmIG9iamVjdCkgeyByZXR1cm4gb2JqZWN0LnByZWRpY2F0ZTsgfSBcCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5T2JqZWN0
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IGNhMjJlY2M2MjQwY2I0MzNjYjFhODU3MjUxOWQ5
ZWY0MjIwYzgxNjkuLjNlMzVkNWU4NTA0NGRhZWViNDU2NjdhMjM1MzE1NWJmMGZmZTdlZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMTczOCwxMyArMTczOCwxMyBAQCB2b2lkIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmdldERvY3VtZW50TGlua3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJiByZQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgTm9kZSogcGFyZW50ID0g
Y3Vyci0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgaWYgKGlzPEhUTUxBcmVhRWxlbWVudD4o
KmN1cnIpICYmIGlzPEhUTUxNYXBFbGVtZW50PihwYXJlbnQpKSB7Ci0gICAgICAgICAgICAgICAg
QWNjZXNzaWJpbGl0eUltYWdlTWFwTGluayogYXJlYU9iamVjdCA9IHRvQWNjZXNzaWJpbGl0eUlt
YWdlTWFwTGluayhheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKEltYWdlTWFwTGlua1JvbGUp
KTsKKyAgICAgICAgICAgICAgICBhdXRvJiBhcmVhT2JqZWN0ID0gZG93bmNhc3Q8QWNjZXNzaWJp
bGl0eUltYWdlTWFwTGluaz4oKmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoSW1hZ2VNYXBM
aW5rUm9sZSkpOwogICAgICAgICAgICAgICAgIEhUTUxNYXBFbGVtZW50JiBtYXAgPSBkb3duY2Fz
dDxIVE1MTWFwRWxlbWVudD4oKnBhcmVudCk7Ci0gICAgICAgICAgICAgICAgYXJlYU9iamVjdC0+
c2V0SFRNTEFyZWFFbGVtZW50KGRvd25jYXN0PEhUTUxBcmVhRWxlbWVudD4oY3VycikpOwotICAg
ICAgICAgICAgICAgIGFyZWFPYmplY3QtPnNldEhUTUxNYXBFbGVtZW50KCZtYXApOwotICAgICAg
ICAgICAgICAgIGFyZWFPYmplY3QtPnNldFBhcmVudChhY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1h
Z2VNYXAoJm1hcCkpOworICAgICAgICAgICAgICAgIGFyZWFPYmplY3Quc2V0SFRNTEFyZWFFbGVt
ZW50KGRvd25jYXN0PEhUTUxBcmVhRWxlbWVudD4oY3VycikpOworICAgICAgICAgICAgICAgIGFy
ZWFPYmplY3Quc2V0SFRNTE1hcEVsZW1lbnQoJm1hcCk7CisgICAgICAgICAgICAgICAgYXJlYU9i
amVjdC5zZXRQYXJlbnQoYWNjZXNzaWJpbGl0eVBhcmVudEZvckltYWdlTWFwKCZtYXApKTsKIAot
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYXJlYU9iamVjdCk7CisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgmYXJlYU9iamVjdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CkBAIC0yMzI4LDcgKzIzMjgsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmhhbmRsZUFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkKCkKICAgICBpZiAoIXJlbmRlcmVyKCkt
PmZyYW1lKCkuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkgfHwgcmVuZGVyZXIoKS0+
ZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpICE9IGVsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmICh0b0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoYWN0aXZlRGVzY2VuZGFudCgp
KSAmJiBzaG91bGROb3RpZnlBY3RpdmVEZXNjZW5kYW50KCkpCisgICAgaWYgKGFjdGl2ZURlc2Nl
bmRhbnQoKSAmJiBzaG91bGROb3RpZnlBY3RpdmVEZXNjZW5kYW50KCkpCiAgICAgICAgIHJlbmRl
cmVyKCktPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKG1fcmVu
ZGVyZXIsIEFYT2JqZWN0Q2FjaGU6OkFYQWN0aXZlRGVzY2VuZGFudENoYW5nZWQpOwogfQogCkBA
IC0yNjg1LDEwICsyNjg1LDEwIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW5o
ZXJpdHNQcmVzZW50YXRpb25hbFJvbGUoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCiAgICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBwYXJlbnRPYmplY3Qo
KTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7IAotICAgICAgICBp
ZiAoIXBhcmVudC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisgICAgICAgIGlmICgh
aXM8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdD4oKnBhcmVudCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIG5vZGUgPSB0b0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QocGFyZW50KS0+bm9kZSgpOworICAgICAgICBOb2RlKiBub2RlID0gZG93bmNhc3Q8
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdD4oKnBhcmVudCkubm9kZSgpOwogICAgICAgICBpZiAo
IWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIApAQCAt
MjgwNywxNCArMjgwNywxNCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZElt
YWdlTWFwQ2hpbGRyZW4oKQogICAgICAgICAvLyBhZGQgYW4gPGFyZWE+IGVsZW1lbnQgZm9yIHRo
aXMgY2hpbGQgaWYgaXQgaGFzIGEgbGluawogICAgICAgICBpZiAoIWFyZWEuaXNMaW5rKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluayog
YXJlYU9iamVjdCA9IHRvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluayhheE9iamVjdENhY2hlKCkt
PmdldE9yQ3JlYXRlKEltYWdlTWFwTGlua1JvbGUpKTsKLSAgICAgICAgYXJlYU9iamVjdC0+c2V0
SFRNTEFyZWFFbGVtZW50KCZhcmVhKTsKLSAgICAgICAgYXJlYU9iamVjdC0+c2V0SFRNTE1hcEVs
ZW1lbnQobWFwKTsKLSAgICAgICAgYXJlYU9iamVjdC0+c2V0UGFyZW50KHRoaXMpOwotICAgICAg
ICBpZiAoIWFyZWFPYmplY3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKLSAgICAgICAgICAg
IG1fY2hpbGRyZW4uYXBwZW5kKGFyZWFPYmplY3QpOworICAgICAgICBhdXRvJiBhcmVhT2JqZWN0
ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUltYWdlTWFwTGluaz4oKmF4T2JqZWN0Q2FjaGUoKS0+
Z2V0T3JDcmVhdGUoSW1hZ2VNYXBMaW5rUm9sZSkpOworICAgICAgICBhcmVhT2JqZWN0LnNldEhU
TUxBcmVhRWxlbWVudCgmYXJlYSk7CisgICAgICAgIGFyZWFPYmplY3Quc2V0SFRNTE1hcEVsZW1l
bnQobWFwKTsKKyAgICAgICAgYXJlYU9iamVjdC5zZXRQYXJlbnQodGhpcyk7CisgICAgICAgIGlm
ICghYXJlYU9iamVjdC5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCisgICAgICAgICAgICBtX2No
aWxkcmVuLmFwcGVuZCgmYXJlYU9iamVjdCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGF4
T2JqZWN0Q2FjaGUoKS0+cmVtb3ZlKGFyZWFPYmplY3QtPmF4T2JqZWN0SUQoKSk7CisgICAgICAg
ICAgICBheE9iamVjdENhY2hlKCktPnJlbW92ZShhcmVhT2JqZWN0LmF4T2JqZWN0SUQoKSk7CiAg
ICAgfQogfQogCkBAIC0yODM3LDEwICsyODM3LDExIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6YWRkVGV4dEZpZWxkQ2hpbGRyZW4oKQogICAgIGlmICghc3BpbkJ1dHRvbkVsZW1l
bnQgfHwgIXNwaW5CdXR0b25FbGVtZW50LT5pc1NwaW5CdXR0b25FbGVtZW50KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uKiBheFNwaW5CdXR0b24gPSB0
b0FjY2Vzc2liaWxpdHlTcGluQnV0dG9uKGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoU3Bp
bkJ1dHRvblJvbGUpKTsKLSAgICBheFNwaW5CdXR0b24tPnNldFNwaW5CdXR0b25FbGVtZW50KHN0
YXRpY19jYXN0PFNwaW5CdXR0b25FbGVtZW50Kj4oc3BpbkJ1dHRvbkVsZW1lbnQpKTsKLSAgICBh
eFNwaW5CdXR0b24tPnNldFBhcmVudCh0aGlzKTsKLSAgICBtX2NoaWxkcmVuLmFwcGVuZChheFNw
aW5CdXR0b24pOworICAgIGF1dG8mIGF4U3BpbkJ1dHRvbiA9IGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlTcGluQnV0dG9uPigqYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShTcGluQnV0dG9uUm9s
ZSkpOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBm
b3IgU3BpbkJ1dHRvbkVsZW1lbnQuCisgICAgYXhTcGluQnV0dG9uLnNldFNwaW5CdXR0b25FbGVt
ZW50KHN0YXRpY19jYXN0PFNwaW5CdXR0b25FbGVtZW50Kj4oc3BpbkJ1dHRvbkVsZW1lbnQpKTsK
KyAgICBheFNwaW5CdXR0b24uc2V0UGFyZW50KHRoaXMpOworICAgIG1fY2hpbGRyZW4uYXBwZW5k
KCZheFNwaW5CdXR0b24pOwogfQogICAgIAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
Ojppc1NWR0ltYWdlKCkgY29uc3QKQEAgLTI4OTAsMTEgKzI4OTEsMTEgQEAgQWNjZXNzaWJpbGl0
eVNWR1Jvb3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJlbW90ZVNWR1Jvb3RFbGVtZW50
KCkgY29uc3QKIAogICAgIC8vIEluIG9yZGVyIHRvIGNvbm5lY3QgdGhlIEFYIGhpZXJhcmNoeSBm
cm9tIHRoZSBTVkcgcm9vdCBlbGVtZW50IGZyb20gdGhlIGxvYWRlZCByZXNvdXJjZQogICAgIC8v
IHRoZSBwYXJlbnQgbXVzdCBiZSBzZXQsIGJlY2F1c2UgdGhlcmUncyBubyBvdGhlciB3YXkgdG8g
Z2V0IGJhY2sgdG8gd2hvIGNyZWF0ZWQgdGhlIGltYWdlLgotICAgIEFTU0VSVChyb290U1ZHT2Jq
ZWN0ICYmIHJvb3RTVkdPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVNWR1Jvb3QoKSk7Ci0gICAgaWYg
KCFyb290U1ZHT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlTVkdSb290KCkpCisgICAgQVNTRVJUKHJv
b3RTVkdPYmplY3QpOworICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eVNWR1Jvb3Q+KCpyb290U1ZH
T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgcmV0dXJuIHRvQWNj
ZXNzaWJpbGl0eVNWR1Jvb3Qocm9vdFNWR09iamVjdCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlTVkdSb290Pihyb290U1ZHT2JqZWN0KTsKIH0KICAgICAKIHZvaWQgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6YWRkUmVtb3RlU1ZHQ2hpbGRyZW4oKQpAQCAtMzEzNCw4ICsz
MTM1LDggQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhU2VsZWN0ZWRSb3dz
KEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgcmUKICAgICAgICAgQWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIGFsbFJvd3M7CiAgICAgICAgIGFyaWFUcmVlUm93cyhhbGxSb3dzKTsKICAg
ICAgICAgcm93c0l0ZXJhdGlvbihhbGxSb3dzKTsKLSAgICB9IGVsc2UgaWYgKGlzQWNjZXNzaWJp
bGl0eVRhYmxlKCkgJiYgdG9BY2Nlc3NpYmlsaXR5VGFibGUodGhpcyktPnN1cHBvcnRzU2VsZWN0
ZWRSb3dzKCkpCi0gICAgICAgIHJvd3NJdGVyYXRpb24odG9BY2Nlc3NpYmlsaXR5VGFibGUodGhp
cyktPnJvd3MoKSk7CisgICAgfSBlbHNlIGlmIChpc0FjY2Vzc2liaWxpdHlUYWJsZSgpICYmIGRv
d25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnRoaXMpLnN1cHBvcnRzU2VsZWN0ZWRSb3dzKCkp
CisgICAgICAgIHJvd3NJdGVyYXRpb24oZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqdGhp
cykucm93cygpKTsKIH0KICAgICAKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YXJp
YUxpc3Rib3hTZWxlY3RlZENoaWxkcmVuKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgcmVz
dWx0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuaAppbmRleCBmYTVkMzg1ZGE4YzY2OGY0MWRlMTk3NTAxNzcwNzRj
OThkZDgxNmE5Li5lZDdiZTEwNGE4NzhlYzllNWFmNThkMDc0NzFmNmRjYWJmNzc2ZWYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuaApAQCAtMzM4LDggKzMzOCw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAK
LUFDQ0VTU0lCSUxJVFlfT0JKRUNUX1RZUEVfQ0FTVFMoQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dCwgaXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QsIGlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQorCiAjZW5kaWYgLy8g
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTVkdSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTVkdSb290LmgKaW5kZXggZThiODcyMjFlMTU3ZjM3MzYy
MzY0ZDA3NDk3Y2YyNWZlNWQ5M2M2Mi4uNzdlZWIxYjZhYTUyMjAwOTRjZDAzYTU5ODQ3NjUwYjFh
NDMwNjFhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U1ZHUm9vdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVNWR1Jvb3QuaApAQCAtNDksOSArNDksOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
QWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVNWR1Jvb3QoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CiB9OwotCi1BQ0NFU1NJQklMSVRZX09CSkVDVF9UWVBFX0NBU1RTKEFjY2Vz
c2liaWxpdHlTVkdSb290LCBpc0FjY2Vzc2liaWxpdHlTVkdSb290KCkpCiAgICAgCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlIAogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0FDQ0VTU0lCSUxJVFko
QWNjZXNzaWJpbGl0eVNWR1Jvb3QsIGlzQWNjZXNzaWJpbGl0eVNWR1Jvb3QoKSkKKwogI2VuZGlm
IC8vIEFjY2Vzc2liaWxpdHlTVkdSb290X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAKaW5kZXggODU3NmRkNjYx
NTA2NjJiZTFhYWUxYzEyNGFlZjRmN2Y5YzZjMGU4ZS4uYzkwMDA5OGU2ZjA1NTRiYjliZjE5NzRk
YTZiYTRlOGJmZjQ0Nzk1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAKQEAgLTE1MSwxMCArMTUxLDEwIEBA
IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIqIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3OjphZGRDaGls
ZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjCiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKiBzY3JvbGxCYXJPYmplY3Qg
PSB0b0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIoY2FjaGUtPmdldE9yQ3JlYXRlKHNjcm9sbGJhcikp
OwotICAgIHNjcm9sbEJhck9iamVjdC0+c2V0UGFyZW50KHRoaXMpOwotICAgIG1fY2hpbGRyZW4u
YXBwZW5kKHNjcm9sbEJhck9iamVjdCk7Ci0gICAgcmV0dXJuIHNjcm9sbEJhck9iamVjdDsKKyAg
ICBhdXRvJiBzY3JvbGxCYXJPYmplY3QgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFy
PigqY2FjaGUtPmdldE9yQ3JlYXRlKHNjcm9sbGJhcikpOworICAgIHNjcm9sbEJhck9iamVjdC5z
ZXRQYXJlbnQodGhpcyk7CisgICAgbV9jaGlsZHJlbi5hcHBlbmQoJnNjcm9sbEJhck9iamVjdCk7
CisgICAgcmV0dXJuICZzY3JvbGxCYXJPYmplY3Q7CiB9CiAgICAgICAgIAogdm9pZCBBY2Nlc3Np
YmlsaXR5U2Nyb2xsVmlldzo6Y2xlYXJDaGlsZHJlbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmgKaW5kZXggNTZiZTFh
MDdlOTkzNDY2ODExM2YzOTU0Zjg1ZjNkYjE4NmZhZDFhYy4uODlmZGJhOWZhNWMwMTIxMGYzMzRj
NzFjNGQyMTEwMzVhMDkzMTk3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuaApAQCAtODMsOSArODMsOSBAQCBwcml2
YXRlOgogICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBtX3ZlcnRpY2FsU2Nyb2xsYmFy
OwogICAgIGJvb2wgbV9jaGlsZHJlbkRpcnR5OwogfTsKLQotQUNDRVNTSUJJTElUWV9PQkpFQ1Rf
VFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldywgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xs
VmlldygpKQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0FDQ0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcsIGlzQWNjZXNzaWJp
bGl0eVNjcm9sbFZpZXcoKSkKKwogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNj
cm9sbGJhci5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Ny
b2xsYmFyLmgKaW5kZXggYTcyNzk2ZTU0MDUxOWYwOTc2Y2RiOWExMTZkNTBlY2QzMjNlYTQ2OC4u
MjA5ZmZmZDVkMGM0YTI5NzIzODZiMzFjOTA0Njk2Mzg4NGI0YzE3NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmgKQEAg
LTYyLDggKzYyLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3Njcm9sbGJh
cjsKIH07CiAKLUFDQ0VTU0lCSUxJVFlfT0JKRUNUX1RZUEVfQ0FTVFMoQWNjZXNzaWJpbGl0eVNj
cm9sbGJhciwgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vzc2liaWxp
dHlTY3JvbGxiYXIsIGlzQWNjZXNzaWJpbGl0eVNjcm9sbGJhcigpKQorCiAjZW5kaWYgLy8gQWNj
ZXNzaWJpbGl0eVNjcm9sbGJhcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAppbmRleCBiNWUzNDZkNTZlNjdiNDQ1NGQwNGM5
ZDYwYzk4MTBhOTEyMWUxMmZlLi45MWFhZDNmNTYyMzgwOWJmOGJmYmJhYjllMGVhZmI4MmExZWU3
ZmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlTbGlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNsaWRlci5jcHAKQEAgLTg0LDE1ICs4NCwxNSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlTbGlk
ZXI6OmFkZENoaWxkcmVuKCkKIAogICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9yZW5kZXJl
ci0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCk7CiAKLSAgICBBY2Nlc3NpYmlsaXR5U2xpZGVy
VGh1bWIqIHRodW1iID0gdG9BY2Nlc3NpYmlsaXR5U2xpZGVyVGh1bWIoY2FjaGUtPmdldE9yQ3Jl
YXRlKFNsaWRlclRodW1iUm9sZSkpOwotICAgIHRodW1iLT5zZXRQYXJlbnQodGhpcyk7CisgICAg
YXV0byYgdGh1bWIgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U2xpZGVyVGh1bWI+KCpjYWNoZS0+
Z2V0T3JDcmVhdGUoU2xpZGVyVGh1bWJSb2xlKSk7CisgICAgdGh1bWIuc2V0UGFyZW50KHRoaXMp
OwogCiAgICAgLy8gQmVmb3JlIGFjdHVhbGx5IGFkZGluZyB0aGUgdmFsdWUgaW5kaWNhdG9yIHRv
IHRoZSBoaWVyYXJjaHksCiAgICAgLy8gYWxsb3cgdGhlIHBsYXRmb3JtIHRvIG1ha2UgYSBmaW5h
bCBkZWNpc2lvbiBhYm91dCBpdC4KLSAgICBpZiAodGh1bWItPmFjY2Vzc2liaWxpdHlJc0lnbm9y
ZWQoKSkKLSAgICAgICAgY2FjaGUtPnJlbW92ZSh0aHVtYi0+YXhPYmplY3RJRCgpKTsKKyAgICBp
ZiAodGh1bWIuYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQorICAgICAgICBjYWNoZS0+cmVtb3Zl
KHRodW1iLmF4T2JqZWN0SUQoKSk7CiAgICAgZWxzZQotICAgICAgICBtX2NoaWxkcmVuLmFwcGVu
ZCh0aHVtYik7CisgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKCZ0aHVtYik7CiB9CiAKIGNvbnN0
IEF0b21pY1N0cmluZyYgQWNjZXNzaWJpbGl0eVNsaWRlcjo6Z2V0QXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5oIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmgKaW5kZXggNWU5ZTdmZGZjNTg4OWM5NTlj
ZGZhYjI0M2NkNjg2MTZjOTM1NGQ5Ni4uMjY3OGU3MjhkZGM1NDU5NTkxZDk4MjhhNTg5ODk4MTk1
Mjg3NTVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2xpZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2xpZGVyLmgKQEAgLTg0LDggKzg0LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJv
b2wgY29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdCBvdmVycmlkZTsKIH07CiAK
LUFDQ0VTU0lCSUxJVFlfT0JKRUNUX1RZUEVfQ0FTVFMoQWNjZXNzaWJpbGl0eVNsaWRlclRodW1i
LCBpc1NsaWRlclRodW1iKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vzc2liaWxpdHlTbGlkZXJUaHVtYiwgaXNT
bGlkZXJUaHVtYigpKQorCiAjZW5kaWYgLy8gQWNjZXNzaWJpbGl0eVNsaWRlcl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTcGluQnV0dG9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNwaW5CdXR0
b24uY3BwCmluZGV4IDkzMmFjYjRkZmQ3NzE5MWZjN2Y5Mzg3MWM4ZDFkYmJlMThmN2NlM2IuLjNj
ZTk0MTlkYTcxMTlmZmRiMjY4ZGE0ODNlMGNhM2Y1NWY1Y2NmYmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uY3Bw
CkBAIC04MiwxNSArODIsMTUgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbjo6YWRkQ2hp
bGRyZW4oKQogewogICAgIG1faGF2ZUNoaWxkcmVuID0gdHJ1ZTsKICAgICAKLSAgICBBY2Nlc3Np
YmlsaXR5U3BpbkJ1dHRvblBhcnQqIGluY3JlbWVudG9yID0gdG9BY2Nlc3NpYmlsaXR5U3BpbkJ1
dHRvblBhcnQoYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShTcGluQnV0dG9uUGFydFJvbGUp
KTsKLSAgICBpbmNyZW1lbnRvci0+c2V0SXNJbmNyZW1lbnRvcih0cnVlKTsKLSAgICBpbmNyZW1l
bnRvci0+c2V0UGFyZW50KHRoaXMpOwotICAgIG1fY2hpbGRyZW4uYXBwZW5kKGluY3JlbWVudG9y
KTsKKyAgICBhdXRvJiBpbmNyZW1lbnRvciA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTcGluQnV0
dG9uUGFydD4oKmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoU3BpbkJ1dHRvblBhcnRSb2xl
KSk7CisgICAgaW5jcmVtZW50b3Iuc2V0SXNJbmNyZW1lbnRvcih0cnVlKTsKKyAgICBpbmNyZW1l
bnRvci5zZXRQYXJlbnQodGhpcyk7CisgICAgbV9jaGlsZHJlbi5hcHBlbmQoJmluY3JlbWVudG9y
KTsKIAotICAgIEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uUGFydCogZGVjcmVtZW50b3IgPSB0b0Fj
Y2Vzc2liaWxpdHlTcGluQnV0dG9uUGFydChheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKFNw
aW5CdXR0b25QYXJ0Um9sZSkpOwotICAgIGRlY3JlbWVudG9yLT5zZXRJc0luY3JlbWVudG9yKGZh
bHNlKTsKLSAgICBkZWNyZW1lbnRvci0+c2V0UGFyZW50KHRoaXMpOwotICAgIG1fY2hpbGRyZW4u
YXBwZW5kKGRlY3JlbWVudG9yKTsKKyAgICBhdXRvJiBkZWNyZW1lbnRvciA9IGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlTcGluQnV0dG9uUGFydD4oKmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUo
U3BpbkJ1dHRvblBhcnRSb2xlKSk7CisgICAgZGVjcmVtZW50b3Iuc2V0SXNJbmNyZW1lbnRvcihm
YWxzZSk7CisgICAgZGVjcmVtZW50b3Iuc2V0UGFyZW50KHRoaXMpOworICAgIG1fY2hpbGRyZW4u
YXBwZW5kKCZkZWNyZW1lbnRvcik7CiB9CiAgICAgCiB2b2lkIEFjY2Vzc2liaWxpdHlTcGluQnV0
dG9uOjpzdGVwKGludCBhbW91bnQpCkBAIC0xMzIsMTQgKzEzMiwxNCBAQCBMYXlvdXRSZWN0IEFj
Y2Vzc2liaWxpdHlTcGluQnV0dG9uUGFydDo6ZWxlbWVudFJlY3QoKSBjb25zdAogCiBib29sIEFj
Y2Vzc2liaWxpdHlTcGluQnV0dG9uUGFydDo6cHJlc3MoKQogewotICAgIGlmICghbV9wYXJlbnQg
fHwgIW1fcGFyZW50LT5pc1NwaW5CdXR0b24oKSkKKyAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlT
cGluQnV0dG9uPihtX3BhcmVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBB
Y2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbiogc3BpbkJ1dHRvbiA9IHRvQWNjZXNzaWJpbGl0eVNwaW5C
dXR0b24ocGFyZW50T2JqZWN0KCkpOworICAgIGF1dG8mIHNwaW5CdXR0b24gPSBkb3duY2FzdDxB
Y2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbj4oKm1fcGFyZW50KTsKICAgICBpZiAobV9pc0luY3JlbWVu
dG9yKQotICAgICAgICBzcGluQnV0dG9uLT5zdGVwKDEpOworICAgICAgICBzcGluQnV0dG9uLnN0
ZXAoMSk7CiAgICAgZWxzZQotICAgICAgICBzcGluQnV0dG9uLT5zdGVwKC0xKTsKKyAgICAgICAg
c3BpbkJ1dHRvbi5zdGVwKC0xKTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24u
aCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24u
aAppbmRleCBiZTIxZmZlOWRmNTFiMjk4NzczMDkzNzg3ZjVmNzU4OTVlNDIyNTVlLi44NzMxOTQy
ZDVlNjI5NzY0ZWEzZmVhMGI0NjI4ODkzM2E5MGIyMTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTcGluQnV0dG9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5oCkBAIC03Mywx
MCArNzMsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNTcGluQnV0dG9uUGFydCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIExheW91dFJlY3Qg
ZWxlbWVudFJlY3QoKSBjb25zdCBvdmVycmlkZTsKIH07Ci0KLUFDQ0VTU0lCSUxJVFlfT0JKRUNU
X1RZUEVfQ0FTVFMoQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24sIGlzTmF0aXZlU3BpbkJ1dHRvbigp
KQotQUNDRVNTSUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRv
blBhcnQsIGlzU3BpbkJ1dHRvblBhcnQoKSkKICAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUg
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQUNDRVNT
SUJJTElUWShBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbiwgaXNOYXRpdmVTcGluQnV0dG9uKCkpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0FDQ0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eVNwaW5CdXR0
b25QYXJ0LCBpc1NwaW5CdXR0b25QYXJ0KCkpCiAKICNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5U3Bp
bkJ1dHRvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlUYWJsZS5jcHAKaW5kZXggMTFmZmQxNDYxMjhhYmYwODliYzM0MmJiYTczYWE5NmY4ZTk2
Y2YzYS4uMGI3YmUzYWY1YTJlZDc2ZThmZTJiZjQ4Yjk2NDJiZGU0MmVjMTg0MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcApA
QCAtMzc5LDEyICszNzksMTIgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6OmFkZENoaWxkcmVu
KCkKICAgICAvLyBtYWtlIHRoZSBjb2x1bW5zIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgY29sdW1u
cyBpbiB0aGUgZmlyc3QgYm9keQogICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1heENvbHVtbkNvdW50
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBB
Y2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4qIGNvbHVtbiA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlQ29s
dW1uKGF4Q2FjaGUtPmdldE9yQ3JlYXRlKENvbHVtblJvbGUpKTsKLSAgICAgICAgY29sdW1uLT5z
ZXRDb2x1bW5JbmRleCgoaW50KWkpOwotICAgICAgICBjb2x1bW4tPnNldFBhcmVudCh0aGlzKTsK
LSAgICAgICAgbV9jb2x1bW5zLmFwcGVuZChjb2x1bW4pOwotICAgICAgICBpZiAoIWNvbHVtbi0+
YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQotICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQo
Y29sdW1uKTsKKyAgICAgICAgYXV0byYgY29sdW1uID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlQ29sdW1uPigqYXhDYWNoZS0+Z2V0T3JDcmVhdGUoQ29sdW1uUm9sZSkpOworICAgICAgICBj
b2x1bW4uc2V0Q29sdW1uSW5kZXgoKGludClpKTsKKyAgICAgICAgY29sdW1uLnNldFBhcmVudCh0
aGlzKTsKKyAgICAgICAgbV9jb2x1bW5zLmFwcGVuZCgmY29sdW1uKTsKKyAgICAgICAgaWYgKCFj
b2x1bW4uYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQorICAgICAgICAgICAgbV9jaGlsZHJlbi5h
cHBlbmQoJmNvbHVtbik7CiAgICAgfQogICAgIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGhl
YWRlckNvbnRhaW5lck9iamVjdCA9IGhlYWRlckNvbnRhaW5lcigpOwpAQCAtNDA3LDI1ICs0MDcs
MjUgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6OmFkZENoaWxkcmVuRnJvbVNlY3Rpb24oUmVu
ZGVyVGFibGVTZWN0aW9uKiB0YWJsZVNlY3Rpb24KICAgICAgICAgaWYgKCFyZW5kZXJSb3cpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIHJvd09iamVjdCA9IGF4Q2FjaGUtPmdldE9yQ3JlYXRlKHJlbmRlclJvdyk7Ci0gICAgICAg
IGlmICghcm93T2JqZWN0LT5pc1RhYmxlUm93KCkpCisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QmIHJvd09iamVjdCA9ICpheENhY2hlLT5nZXRPckNyZWF0ZShyZW5kZXJSb3cpOworICAgICAg
ICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4ocm93T2JqZWN0KSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgQWNjZXNzaWJpbGl0eVRhYmxlUm93KiByb3cg
PSB0b0FjY2Vzc2liaWxpdHlUYWJsZVJvdyhyb3dPYmplY3QpOworICAgICAgICBhdXRvJiByb3cg
PSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVSb3c+KHJvd09iamVjdCk7CiAgICAgICAgIC8v
IFdlIG5lZWQgdG8gY2hlY2sgZXZlcnkgY2VsbCBmb3IgYSBuZXcgcm93LCBiZWNhdXNlIGNlbGwg
c3BhbnMKICAgICAgICAgLy8gY2FuIGNhdXNlIHVzIHRvIG1pc3Mgcm93cyBpZiB3ZSBqdXN0IGNo
ZWNrIHRoZSBmaXJzdCBjb2x1bW4uCi0gICAgICAgIGlmIChhcHBlbmRlZFJvd3MuY29udGFpbnMo
cm93KSkKKyAgICAgICAgaWYgKGFwcGVuZGVkUm93cy5jb250YWlucygmcm93KSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgcm93LT5zZXRSb3dJbmRleChzdGF0aWNf
Y2FzdDxpbnQ+KG1fcm93cy5zaXplKCkpKTsKLSAgICAgICAgbV9yb3dzLmFwcGVuZChyb3cpOwot
ICAgICAgICBpZiAoIXJvdy0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQotICAgICAgICAgICAg
bV9jaGlsZHJlbi5hcHBlbmQocm93KTsKKyAgICAgICAgcm93LnNldFJvd0luZGV4KHN0YXRpY19j
YXN0PGludD4obV9yb3dzLnNpemUoKSkpOworICAgICAgICBtX3Jvd3MuYXBwZW5kKCZyb3cpOwor
ICAgICAgICBpZiAoIXJvdy5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCisgICAgICAgICAgICBt
X2NoaWxkcmVuLmFwcGVuZCgmcm93KTsKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVG
TCkKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmRWZWN0b3Iocm93
LT5jaGlsZHJlbigpKTsKKyAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kVmVjdG9yKHJvdy5j
aGlsZHJlbigpKTsKICNlbmRpZgotICAgICAgICBhcHBlbmRlZFJvd3MuYWRkKHJvdyk7CisgICAg
ICAgIGFwcGVuZGVkUm93cy5hZGQoJnJvdyk7CiAgICAgfQogICAgIAogICAgIG1heENvbHVtbkNv
dW50ID0gc3RkOjptYXgodGFibGVTZWN0aW9uLT5udW1Db2x1bW5zKCksIG1heENvbHVtbkNvdW50
KTsKQEAgLTQzNiwxMCArNDM2LDEwIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxp
dHlUYWJsZTo6aGVhZGVyQ29udGFpbmVyKCkKICAgICBpZiAobV9oZWFkZXJDb250YWluZXIpCiAg
ICAgICAgIHJldHVybiBtX2hlYWRlckNvbnRhaW5lci5nZXQoKTsKICAgICAKLSAgICBBY2Nlc3Np
YmlsaXR5TW9ja09iamVjdCogdGFibGVIZWFkZXIgPSB0b0FjY2Vzc2liaWxpdHlNb2NrT2JqZWN0
KGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoVGFibGVIZWFkZXJDb250YWluZXJSb2xlKSk7
Ci0gICAgdGFibGVIZWFkZXItPnNldFBhcmVudCh0aGlzKTsKKyAgICBhdXRvJiB0YWJsZUhlYWRl
ciA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlNb2NrT2JqZWN0PigqYXhPYmplY3RDYWNoZSgpLT5n
ZXRPckNyZWF0ZShUYWJsZUhlYWRlckNvbnRhaW5lclJvbGUpKTsKKyAgICB0YWJsZUhlYWRlci5z
ZXRQYXJlbnQodGhpcyk7CiAKLSAgICBtX2hlYWRlckNvbnRhaW5lciA9IHRhYmxlSGVhZGVyOwor
ICAgIG1faGVhZGVyQ29udGFpbmVyID0gJnRhYmxlSGVhZGVyOwogICAgIHJldHVybiBtX2hlYWRl
ckNvbnRhaW5lci5nZXQoKTsKIH0KIApAQCAtNDY1LDcgKzQ2NSw3IEBAIHZvaWQgQWNjZXNzaWJp
bGl0eVRhYmxlOjpjb2x1bW5IZWFkZXJzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgaGVh
ZGVycykKICAgICB1cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCk7CiAgICAgCiAgICAgZm9yIChj
b25zdCBhdXRvJiBjb2x1bW4gOiBtX2NvbHVtbnMpIHsKLSAgICAgICAgaWYgKEFjY2Vzc2liaWxp
dHlPYmplY3QqIGhlYWRlciA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uKGNvbHVtbi5nZXQo
KSktPmhlYWRlck9iamVjdCgpKQorICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogaGVh
ZGVyID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uPigqY29sdW1uKS5oZWFkZXJP
YmplY3QoKSkKICAgICAgICAgICAgIGhlYWRlcnMuYXBwZW5kKGhlYWRlcik7CiAgICAgfQogfQpA
QCAtNDc4LDcgKzQ3OCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlOjpyb3dIZWFkZXJzKEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgaGVhZGVycykKICAgICB1cGRhdGVDaGlsZHJlbklm
TmVjZXNzYXJ5KCk7CiAgICAgCiAgICAgZm9yIChjb25zdCBhdXRvJiByb3cgOiBtX3Jvd3MpIHsK
LSAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlciA9IHRvQWNjZXNzaWJpbGl0
eVRhYmxlUm93KHJvdy5nZXQoKSktPmhlYWRlck9iamVjdCgpKQorICAgICAgICBpZiAoQWNjZXNz
aWJpbGl0eU9iamVjdCogaGVhZGVyID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlUm93Pigq
cm93KS5oZWFkZXJPYmplY3QoKSkKICAgICAgICAgICAgIGhlYWRlcnMuYXBwZW5kKGhlYWRlcik7
CiAgICAgfQogfQpAQCAtNTQ3LDE5ICs1NDcsMTkgQEAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCog
QWNjZXNzaWJpbGl0eVRhYmxlOjpjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNvbHVtbiwK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjb2xJbmRleENvdW50ZXIgPSBzdGQ6Om1pbihzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oY2hpbGRyZW4uc2l6ZSgpKSwgY29sdW1uICsgMSk7IGNvbEluZGV4Q291
bnRlciA+IDA7IC0tY29sSW5kZXhDb3VudGVyKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjb2xJ
bmRleCA9IGNvbEluZGV4Q291bnRlciAtIDE7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjaGlsZCA9IGNoaWxkcmVuW2NvbEluZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIEFTU0VS
VChjaGlsZC0+aXNUYWJsZUNlbGwoKSk7Ci0gICAgICAgICAgICBpZiAoIWNoaWxkLT5pc1RhYmxl
Q2VsbCgpKQorICAgICAgICAgICAgQVNTRVJUKGlzPEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpj
aGlsZCkpOworICAgICAgICAgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY2hp
bGQpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBjb2x1bW5SYW5nZTsKICAgICAgICAgICAg
IHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IHJvd1JhbmdlOwotICAgICAgICAgICAgQWNj
ZXNzaWJpbGl0eVRhYmxlQ2VsbCogdGFibGVDZWxsQ2hpbGQgPSB0b0FjY2Vzc2liaWxpdHlUYWJs
ZUNlbGwoY2hpbGQpOwotICAgICAgICAgICAgdGFibGVDZWxsQ2hpbGQtPmNvbHVtbkluZGV4UmFu
Z2UoY29sdW1uUmFuZ2UpOwotICAgICAgICAgICAgdGFibGVDZWxsQ2hpbGQtPnJvd0luZGV4UmFu
Z2Uocm93UmFuZ2UpOworICAgICAgICAgICAgYXV0byYgdGFibGVDZWxsQ2hpbGQgPSBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY2hpbGQpOworICAgICAgICAgICAgdGFibGVDZWxs
Q2hpbGQuY29sdW1uSW5kZXhSYW5nZShjb2x1bW5SYW5nZSk7CisgICAgICAgICAgICB0YWJsZUNl
bGxDaGlsZC5yb3dJbmRleFJhbmdlKHJvd1JhbmdlKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKChjb2x1bW4gPj0gY29sdW1uUmFuZ2UuZmlyc3QgJiYgY29sdW1uIDwgKGNvbHVtblJh
bmdlLmZpcnN0ICsgY29sdW1uUmFuZ2Uuc2Vjb25kKSkKICAgICAgICAgICAgICAgICAmJiAocm93
ID49IHJvd1JhbmdlLmZpcnN0ICYmIHJvdyA8IChyb3dSYW5nZS5maXJzdCArIHJvd1JhbmdlLnNl
Y29uZCkpKQotICAgICAgICAgICAgICAgIHJldHVybiB0YWJsZUNlbGxDaGlsZDsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJnRhYmxlQ2VsbENoaWxkOwogICAgICAgICB9CiAgICAgfQogICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmgK
aW5kZXggNzQ2ZDFkYjJlMzg1YzEzZDQzNjZkNDE0OTNmZjY1NmU4ZDQzZGI0Ni4uYjAyNmY1MmU2
ZGEzYzYxNGNkODExY2YwYjdhNjYxYmMxOWMwMDA2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oCkBAIC03NSw2ICs3NSw5IEBAIHB1
YmxpYzoKICAgICAvLyBhbiBvYmplY3QgdGhhdCBjb250YWlucywgYXMgY2hpbGRyZW4sIGFsbCB0
aGUgb2JqZWN0cyB0aGF0IGFjdCBhcyBoZWFkZXJzCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
aGVhZGVyQ29udGFpbmVyKCk7CiAKKyAgICAvLyBpc0FjY2Vzc2liaWxpdHlUYWJsZSBpcyB3aGV0
aGVyIGl0IGlzIGV4cG9zZWQgYXMgYW4gQWNjZXNzaWJpbGl0eVRhYmxlIHRvIHRoZSBwbGF0Zm9y
bS4KKyAgICB2aXJ0dWFsIGJvb2wgaXNBY2Nlc3NpYmlsaXR5VGFibGUoKSBjb25zdCBvdmVycmlk
ZSBmaW5hbDsKKwogcHJvdGVjdGVkOgogICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBt
X3Jvd3M7CiAgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIG1fY29sdW1uczsKQEAgLTg2
LDggKzg5LDYgQEAgcHJvdGVjdGVkOgogCiAgICAgLy8gaXNUYWJsZSBpcyB3aGV0aGVyIGl0J3Mg
YW4gQWNjZXNzaWJpbGl0eVRhYmxlIG9iamVjdC4KICAgICB2aXJ0dWFsIGJvb2wgaXNUYWJsZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICAvLyBpc0FjY2Vzc2liaWxpdHlU
YWJsZSBpcyB3aGV0aGVyIGl0IGlzIGV4cG9zZWQgYXMgYW4gQWNjZXNzaWJpbGl0eVRhYmxlIHRv
IHRoZSBwbGF0Zm9ybS4KLSAgICB2aXJ0dWFsIGJvb2wgaXNBY2Nlc3NpYmlsaXR5VGFibGUoKSBj
b25zdCBvdmVycmlkZTsKICAgICAvLyBpc0RhdGFUYWJsZSBpcyB3aGV0aGVyIGl0IGlzIGV4cG9z
ZWQgYXMgYW4gQWNjZXNzaWJpbGl0eVRhYmxlIGJlY2F1c2UgdGhlIGhldXJpc3RpYwogICAgIC8v
IHRoaW5rIHRoaXMgImxvb2tzIiBsaWtlIGEgZGF0YS1iYXNlZCB0YWJsZSAoaW5zdGVhZCBvZiBh
IHRhYmxlIHVzZWQgZm9yIGxheW91dCkuCiAgICAgdmlydHVhbCBib29sIGlzRGF0YVRhYmxlKCkg
Y29uc3Qgb3ZlcnJpZGU7CkBAIC0xMDEsOCArMTAyLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGFk
ZENoaWxkcmVuRnJvbVNlY3Rpb24oUmVuZGVyVGFibGVTZWN0aW9uKiwgdW5zaWduZWQmIG1heENv
bHVtbkNvdW50KTsKIH07CiAKLUFDQ0VTU0lCSUxJVFlfT0JKRUNUX1RZUEVfQ0FTVFMoQWNjZXNz
aWJpbGl0eVRhYmxlLCBpc1RhYmxlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUgCiAKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQUNDRVNTSUJJTElUWShBY2Nlc3NpYmlsaXR5VGFibGUsIGlz
VGFibGUoKSkKKwogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlUYWJsZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcApp
bmRleCBjNmNjODY2OTRjNGU4ZTQ2NDZhMDNlNDE5MjdjMzYwYWZhOWQ5NmM1Li42ODM3YmUwMjgy
MWIzYTM4NjQ3MWIwMWZlMzljMzkwODA4Mzg4MzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAKQEAgLTg5LDkg
Kzg5LDkgQEAgQWNjZXNzaWJpbGl0eVRhYmxlKiBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpwYXJl
bnRUYWJsZSgpIGNvbnN0CiAgICAgLy8gYWx3YXlzIGJlIHRoZSBjYXNlIHdoZW4gQVQgY2xpZW50
cyBhY2Nlc3MgYSB0YWJsZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDI2NTIKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnRUYWJsZSA9IGF4
T2JqZWN0Q2FjaGUoKS0+Z2V0KGRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4oKm1fcmVuZGVyZXIp
LnRhYmxlKCkpOwotICAgIGlmICghcGFyZW50VGFibGUgfHwgIXBhcmVudFRhYmxlLT5pc1RhYmxl
KCkpCisgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5VGFibGU+KHBhcmVudFRhYmxlKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHRvQWNjZXNzaWJpbGl0eVRhYmxlKHBhcmVu
dFRhYmxlKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPihwYXJlbnRU
YWJsZSk7CiB9CiAgICAgCiBib29sIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmlzVGFibGVDZWxs
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5VGFibGVDZWxsLmgKaW5kZXggYzdjNzNjM2IwODM4NTZhYWQ1YjI5MDRlN2YwYzNiYzc2
YTFlODQxNC4uMzMxODY4MmRlZmQ0NjJhYWUwODc3ZWM2NGNjZDhjNTg2YzE3MmUyZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVD
ZWxsLmgKQEAgLTczLDggKzczLDggQEAgcHJpdmF0ZToKICAgICBib29sIGlzVGFibGVDZWxsSW5T
YW1lQ29sR3JvdXAoQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCopOwogfTsKIAotQUNDRVNTSUJJTElU
WV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5VGFibGVDZWxsLCBpc1RhYmxlQ2VsbCgp
KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlIAogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0FD
Q0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCwgaXNUYWJsZUNlbGwoKSkKKwogI2Vu
ZGlmIC8vIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwCmluZGV4IDhl
NzEwZTEyZTBkZmZjMjM4Njg4MjliZmJlYjkwNjBiZTc2NDg1YzcuLmIwMmY5ZWZkNWM1OWQ3YjNm
MGQ0NGE5MzFkMGQ3ZjM5MzEyZjVlOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHAKQEAgLTc5LDggKzc5
LDggQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjpoZWFk
ZXJPYmplY3QoKQogICAgIGlmICghbV9wYXJlbnQtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIEFjY2Vzc2liaWxpdHlUYWJsZSogcGFy
ZW50VGFibGUgPSB0b0FjY2Vzc2liaWxpdHlUYWJsZShtX3BhcmVudCk7Ci0gICAgaWYgKHBhcmVu
dFRhYmxlLT5pc0FyaWFUYWJsZSgpKSB7CisgICAgYXV0byYgcGFyZW50VGFibGUgPSBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5VGFibGU+KCptX3BhcmVudCk7CisgICAgaWYgKHBhcmVudFRhYmxlLmlz
QXJpYVRhYmxlKCkpIHsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjZWxsIDogY2hpbGRyZW4o
KSkgewogICAgICAgICAgICAgaWYgKGNlbGwtPmFyaWFSb2xlQXR0cmlidXRlKCkgPT0gQ29sdW1u
SGVhZGVyUm9sZSkKICAgICAgICAgICAgICAgICByZXR1cm4gY2VsbC5nZXQoKTsKQEAgLTE3Mywx
MSArMTczLDExIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjphZGRDaGlsZHJlbigp
CiAgICAgaWYgKCFtX3BhcmVudCB8fCAhbV9wYXJlbnQtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5VGFibGUqIHBhcmVudFRh
YmxlID0gdG9BY2Nlc3NpYmlsaXR5VGFibGUobV9wYXJlbnQpOwotICAgIGludCBudW1Sb3dzID0g
cGFyZW50VGFibGUtPnJvd0NvdW50KCk7CisgICAgQWNjZXNzaWJpbGl0eVRhYmxlJiBwYXJlbnRU
YWJsZSA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fcGFyZW50KTsKKyAgICBpbnQg
bnVtUm93cyA9IHBhcmVudFRhYmxlLnJvd0NvdW50KCk7CiAgICAgCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1Sb3dzOyBpKyspIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCog
Y2VsbCA9IHBhcmVudFRhYmxlLT5jZWxsRm9yQ29sdW1uQW5kUm93KG1fY29sdW1uSW5kZXgsIGkp
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUm93czsgKytpKSB7CisgICAgICAgIEFjY2Vz
c2liaWxpdHlUYWJsZUNlbGwqIGNlbGwgPSBwYXJlbnRUYWJsZS5jZWxsRm9yQ29sdW1uQW5kUm93
KG1fY29sdW1uSW5kZXgsIGkpOwogICAgICAgICBpZiAoIWNlbGwpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaAppbmRleCBlM2NjNTE2MjZhOGMxM2RmYTBhZWRl
OWZiZTQ4NWVhNDg3ZmU5Yzk4Li5hZjdjZTNjMTg4MTllMzY2YzMzM2NiYmM2MWY0NjdjOGMxYjQ0
YzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZUNvbHVtbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVRhYmxlQ29sdW1uLmgKQEAgLTY2LDggKzY2LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIGJvb2wgY29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdCBvdmVycmlkZTsK
IH07CiAKLUFDQ0VTU0lCSUxJVFlfT0JKRUNUX1RZUEVfQ0FTVFMoQWNjZXNzaWJpbGl0eVRhYmxl
Q29sdW1uLCBpc1RhYmxlQ29sdW1uKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUgCiAKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQUNDRVNTSUJJTElUWShBY2Nlc3NpYmlsaXR5VGFibGVDb2x1
bW4sIGlzVGFibGVDb2x1bW4oKSkKKwogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVt
bl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZUhlYWRlckNvbnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lci5jcHAKaW5kZXggZTRkZDkzMmY2ZmRh
YzNkOTU4NDMwZGM0YjY5MDUxNDNlNjY2MzM3Zi4uMDgzYmQ5OGNiODA3N2Q1MzRjMmNmYzFlNDVm
MmMxZmY2NDJjMjg4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyLmNwcApAQCAt
NzMsNyArNzMsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lcjo6YWRk
Q2hpbGRyZW4oKQogICAgIGlmICghbV9wYXJlbnQgfHwgIW1fcGFyZW50LT5pc0FjY2Vzc2liaWxp
dHlUYWJsZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgdG9BY2Nlc3NpYmlsaXR5VGFi
bGUobV9wYXJlbnQpLT5jb2x1bW5IZWFkZXJzKG1fY2hpbGRyZW4pOworICAgIGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlUYWJsZT4oKm1fcGFyZW50KS5jb2x1bW5IZWFkZXJzKG1fY2hpbGRyZW4pOwog
ICAgIAogICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQogICAgICAgICBt
X2hlYWRlclJlY3QudW5pdGUoY2hpbGQtPmVsZW1lbnRSZWN0KCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwCmluZGV4
IDYzNGQxNDRlNTZjNDVkMDY5MGQxNDgwNGQ1ZTIzZjc5N2I0OWMwOTUuLmIxMjQxZDE0MTMzZDlj
MTViYTI2YTQyZDM1ZGY1NzMxZjI2NzQyM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAKQEAgLTEwNiw4ICsxMDYs
OCBAQCBBY2Nlc3NpYmlsaXR5VGFibGUqIEFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6cGFyZW50VGFi
bGUoKSBjb25zdAogICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gcGFyZW50
T2JqZWN0KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewogICAg
ICAgICAvLyBJZiB0aGlzIGlzIGEgdGFibGUgb2JqZWN0LCBidXQgbm90IGFuIGFjY2Vzc2liaWxp
dHkgdGFibGUsIHdlIHNob3VsZCBzdG9wIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0bwogICAgICAg
ICAvLyBjaG9vc2UgYW5vdGhlciBhbmNlc3RvciB0YWJsZSBhcyB0aGlzIHJvdydzIHRhYmxlLgot
ICAgICAgICBpZiAocGFyZW50LT5pc1RhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcGFyZW50
LT5pc0FjY2Vzc2liaWxpdHlUYWJsZSgpID8gdG9BY2Nlc3NpYmlsaXR5VGFibGUocGFyZW50KSA6
IDA7CisgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpKQorICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnBhcmVudCkuaXNBY2Nl
c3NpYmlsaXR5VGFibGUoKSA/IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4ocGFyZW50KSA6
IG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIHJldHVybiBudWxscHRyOwpAQCAtMTI0LDEwICsx
MjQsMTAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVRhYmxlUm93OjpoZWFk
ZXJPYmplY3QoKQogICAgIAogICAgIC8vIGNoZWNrIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBy
b3cgdG8gc2VlIGlmIGl0IGlzIGEgVEggZWxlbWVudAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNlbGwgPSByb3dDaGlsZHJlblswXS5nZXQoKTsKLSAgICBpZiAoIWNlbGwtPmlzVGFibGVDZWxs
KCkpCisgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY2VsbCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIAotICAgIFJlbmRlck9iamVjdCogY2VsbFJlbmRlcmVyID0g
dG9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsKGNlbGwpLT5yZW5kZXJlcigpOworICAgIFJlbmRlck9i
amVjdCogY2VsbFJlbmRlcmVyID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmNl
bGwpLnJlbmRlcmVyKCk7CiAgICAgaWYgKCFjZWxsUmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGVSb3cuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlUm93LmgKaW5kZXggNjdkNWUyZGQxYmY1Yjc1NGYxYzMyNzk5NWVmMDRl
ZDBmODUyNWNhYi4uZjFmZTAzMjIzOTQ3MzViNjAwODFkN2E0NTUyMTAzZGMzMGRjMTY5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVS
b3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZVJvdy5oCkBAIC02NCwxMCArNjQsMTAgQEAgcHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFsIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIG9ic2VydmFibGVPYmplY3QoKSBjb25zdCBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIGJvb2wgY29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdCBvdmVy
cmlkZTsKLX07IAorfTsKIAotQUNDRVNTSUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3Np
YmlsaXR5VGFibGVSb3csIGlzVGFibGVSb3coKSkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQUNDRVNTSUJJ
TElUWShBY2Nlc3NpYmlsaXR5VGFibGVSb3csIGlzVGFibGVSb3coKSkKIAogI2VuZGlmIC8vIEFj
Y2Vzc2liaWxpdHlUYWJsZVJvd19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxl
Y3Rpb24uY3BwCmluZGV4IDllODdmNGY1ZmJjNzdlZmY1Mjg1NzY1ZDY2ZmY3NDc1OTRkMDIyY2Yu
LjBmNzliMDA4NWEyYzE2ODBkNTdmMzBiYjljNzQ3YzdjOWYzZDhjZTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VT
ZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3BwCkBAIC0xNTAsMTIgKzE1MCwxMiBAQCBz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkNsZWFyU2VsZWN0aW9uKEF0
a1NlbGVjdGlvbiogc2VsZWN0aW9uKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAKICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRJdGVt
czsKLSAgICBpZiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkgfHwgY29yZVNlbGVjdGlvbi0+
aXNNZW51TGlzdCgpKSB7CisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlMaXN0Qm94PigqY29yZVNl
bGVjdGlvbikpIHsKICAgICAgICAgLy8gU2V0IHRoZSBsaXN0IG9mIHNlbGVjdGVkIGl0ZW1zIHRv
IGFuIGVtcHR5IGxpc3Q7IHRoZW4gdmVyaWZ5IHRoYXQgaXQgd29ya2VkLgotICAgICAgICBBY2Nl
c3NpYmlsaXR5TGlzdEJveCogbGlzdEJveCA9IHRvQWNjZXNzaWJpbGl0eUxpc3RCb3goY29yZVNl
bGVjdGlvbik7Ci0gICAgICAgIGxpc3RCb3gtPnNldFNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJ
dGVtcyk7Ci0gICAgICAgIGxpc3RCb3gtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJdGVtcyk7
Ci0gICAgICAgIHJldHVybiAhc2VsZWN0ZWRJdGVtcy5zaXplKCk7CisgICAgICAgIGF1dG8mIGxp
c3RCb3ggPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TGlzdEJveD4oKmNvcmVTZWxlY3Rpb24pOwor
ICAgICAgICBsaXN0Qm94LnNldFNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJdGVtcyk7CisgICAg
ICAgIGxpc3RCb3guc2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsKKyAgICAgICAgcmV0
dXJuIHNlbGVjdGVkSXRlbXMuaXNFbXB0eSgpOwogICAgIH0KICAgICByZXR1cm4gRkFMU0U7CiB9
CkBAIC0yNDYsMTIgKzI0NiwxMiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVNl
bGVjdGlvblNlbGVjdEFsbFNlbGVjdGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdAogICAgIGlmICgh
Y29yZVNlbGVjdGlvbiB8fCAhY29yZVNlbGVjdGlvbi0+aXNNdWx0aVNlbGVjdGFibGUoKSkKICAg
ICAgICAgcmV0dXJuIEZBTFNFOwogCi0gICAgaWYgKGNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgp
KSB7CisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlMaXN0Qm94PigqY29yZVNlbGVjdGlvbikpIHsK
ICAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJiBjaGlsZHJlbiA9IGNvcmVTZWxlY3Rpb24tPmNoaWxkcmVuKCk7Ci0gICAgICAgIEFj
Y2Vzc2liaWxpdHlMaXN0Qm94KiBsaXN0Qm94ID0gdG9BY2Nlc3NpYmlsaXR5TGlzdEJveChjb3Jl
U2VsZWN0aW9uKTsKLSAgICAgICAgbGlzdEJveC0+c2V0U2VsZWN0ZWRDaGlsZHJlbihjaGlsZHJl
bik7CisgICAgICAgIEFjY2Vzc2liaWxpdHlMaXN0Qm94JiBsaXN0Qm94ID0gZG93bmNhc3Q8QWNj
ZXNzaWJpbGl0eUxpc3RCb3g+KCpjb3JlU2VsZWN0aW9uKTsKKyAgICAgICAgbGlzdEJveC5zZXRT
ZWxlY3RlZENoaWxkcmVuKGNoaWxkcmVuKTsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkSXRlbXM7Ci0gICAgICAgIGxpc3RC
b3gtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJdGVtcyk7CisgICAgICAgIGxpc3RCb3guc2Vs
ZWN0ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsKICAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRl
bXMuc2l6ZSgpID09IGNoaWxkcmVuLnNpemUoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJs
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGFibGUuY3BwCmluZGV4IDAyNWVmMDgxN2VlNTljOTYwMzVjNjVlODUwYjFiMzU1
YjA0ODNhMmYuLmQwODlhNTRiYmEwNzA5ZjI0N2Y3ZGFjMGYxZTZmNWJjNmZkZDczOTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VUYWJsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcApAQCAtNTAsNyArNTAsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0
a1RhYmxlKiB0YWJsZSkKIHsKICAgICBpZiAoIVdFQktJVF9JU19BQ0NFU1NJQkxFKHRhYmxlKSkK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJu
IHdlYmtpdEFjY2Vzc2libGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KFdFQktJVF9BQ0NFU1NJQkxF
KHRhYmxlKSk7CiB9CkBAIC01OCw5ICs1OCw5IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjb3JlKEF0a1RhYmxlKiB0YWJsZSkKIHN0YXRpYyBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBj
ZWxsKEF0a1RhYmxlKiB0YWJsZSwgZ3VpbnQgcm93LCBndWludCBjb2x1bW4pCiB7CiAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKLSAgICBpZiAoYWNjVGFi
bGUtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQotICAgICAgICByZXR1cm4gdG9BY2Nl
c3NpYmlsaXR5VGFibGUoYWNjVGFibGUpLT5jZWxsRm9yQ29sdW1uQW5kUm93KGNvbHVtbiwgcm93
KTsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqYWNjVGFi
bGUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqYWNjVGFi
bGUpLmNlbGxGb3JDb2x1bW5BbmRSb3coY29sdW1uLCByb3cpOworICAgIHJldHVybiBudWxscHRy
OwogfQogCiBzdGF0aWMgZ2ludCBjZWxsSW5kZXgoQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogYXhD
ZWxsLCBBY2Nlc3NpYmlsaXR5VGFibGUqIGF4VGFibGUpCkBAIC03OSwxNSArNzksMTMgQEAgc3Rh
dGljIGdpbnQgY2VsbEluZGV4KEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGF4Q2VsbCwgQWNjZXNz
aWJpbGl0eVRhYmxlKiBheFRhYmwKIHN0YXRpYyBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBjZWxs
QXRJbmRleChBdGtUYWJsZSogdGFibGUsIGdpbnQgaW5kZXgpCiB7CiAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKLSAgICBpZiAoYWNjVGFibGUtPmlzQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKSB7CisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJs
ZT4oKmFjY1RhYmxlKSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3IgYWxsQ2VsbHM7Ci0gICAgICAgIHRvQWNjZXNzaWJpbGl0eVRhYmxl
KGFjY1RhYmxlKS0+Y2VsbHMoYWxsQ2VsbHMpOwotICAgICAgICBpZiAoMCA8PSBpbmRleCAmJiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDwgYWxsQ2VsbHMuc2l6ZSgpKSB7Ci0gICAgICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NDZWxsID0gYWxsQ2VsbHMuYXQoaW5kZXgpLmdl
dCgpOwotICAgICAgICAgICAgcmV0dXJuIHRvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbChhY2NDZWxs
KTsKLSAgICAgICAgfQorICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NU
YWJsZSkuY2VsbHMoYWxsQ2VsbHMpOworICAgICAgICBpZiAoMCA8PSBpbmRleCAmJiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oaW5kZXgpIDwgYWxsQ2VsbHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KGFsbENlbGxzW2luZGV4XS5nZXQo
KSk7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0
aWMgQXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVSZWZBdChBdGtUYWJsZSogdGFibGUs
IGdpbnQgcm93LCBnaW50IGNvbHVtbikKQEAgLTExNCw3ICsxMTIsNyBAQCBzdGF0aWMgZ2ludCB3
ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRJbmRleEF0KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCByb3cs
IGdpbnQgY29sdQogICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJL
SVRfQUNDRVNTSUJMRSh0YWJsZSksIC0xKTsKIAogICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwq
IGF4Q2VsbCA9IGNlbGwodGFibGUsIHJvdywgY29sdW1uKTsKLSAgICBBY2Nlc3NpYmlsaXR5VGFi
bGUqIGF4VGFibGUgPSB0b0FjY2Vzc2liaWxpdHlUYWJsZShjb3JlKHRhYmxlKSk7CisgICAgQWNj
ZXNzaWJpbGl0eVRhYmxlKiBheFRhYmxlID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPihj
b3JlKHRhYmxlKSk7CiAgICAgcmV0dXJuIGNlbGxJbmRleChheENlbGwsIGF4VGFibGUpOwogfQog
CkBAIC0xNTIsOCArMTUwLDggQEAgc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0
TkNvbHVtbnMoQXRrVGFibGUqIHRhYmxlKQogICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJs
ZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRSh0YWJsZSksIDApOwogCiAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKLSAgICBpZiAoYWNjVGFibGUtPmlz
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQotICAgICAgICByZXR1cm4gdG9BY2Nlc3NpYmls
aXR5VGFibGUoYWNjVGFibGUpLT5jb2x1bW5Db3VudCgpOworICAgIGlmIChpczxBY2Nlc3NpYmls
aXR5VGFibGU+KCphY2NUYWJsZSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGU+KCphY2NUYWJsZSkuY29sdW1uQ291bnQoKTsKICAgICByZXR1cm4gMDsKIH0KIApA
QCAtMTYzLDggKzE2MSw4IEBAIHN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldE5S
b3dzKEF0a1RhYmxlKiB0YWJsZSkKICAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0lu
dmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUodGFibGUpLCAwKTsKIAogICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIGFjY1RhYmxlID0gY29yZSh0YWJsZSk7Ci0gICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRvQWNjZXNzaWJpbGl0eVRh
YmxlKGFjY1RhYmxlKS0+cm93Q291bnQoKTsKKyAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxl
PigqYWNjVGFibGUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxl
PigqYWNjVGFibGUpLnJvd0NvdW50KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTIwMiwxOCAr
MjAwLDE4IEBAIHN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVt
bkhlYWRlcihBdGtUYWJsZSogdGFibGUsIGdpbnQgY29sCiAgICAgcmV0dXJuVmFsSWZXZWJLaXRB
Y2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJQkxFKHRhYmxlKSwgMCk7CiAKICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFibGUpOwotICAgIGlmIChhY2NU
YWJsZS0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKKyAgICBpZiAoaXM8QWNjZXNz
aWJpbGl0eVRhYmxlPigqYWNjVGFibGUpKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5IZWFkZXJzOwotICAgICAgICB0b0Fj
Y2Vzc2liaWxpdHlUYWJsZShhY2NUYWJsZSktPmNvbHVtbkhlYWRlcnMoY29sdW1uSGVhZGVycyk7
CisgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxlKS5jb2x1bW5I
ZWFkZXJzKGNvbHVtbkhlYWRlcnMpOwogCiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgY29sdW1u
SGVhZGVyIDogY29sdW1uSGVhZGVycykgewogICAgICAgICAgICAgc3RkOjpwYWlyPHVuc2lnbmVk
LCB1bnNpZ25lZD4gY29sdW1uUmFuZ2U7Ci0gICAgICAgICAgICB0b0FjY2Vzc2liaWxpdHlUYWJs
ZUNlbGwoY29sdW1uSGVhZGVyLmdldCgpKS0+Y29sdW1uSW5kZXhSYW5nZShjb2x1bW5SYW5nZSk7
CisgICAgICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY29sdW1uSGVh
ZGVyKS5jb2x1bW5JbmRleFJhbmdlKGNvbHVtblJhbmdlKTsKICAgICAgICAgICAgIGlmIChjb2x1
bW5SYW5nZS5maXJzdCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29sdW1uKSAmJiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oY29sdW1uKSA8IGNvbHVtblJhbmdlLmZpcnN0ICsgY29sdW1uUmFuZ2Uu
c2Vjb25kKQogICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW5IZWFkZXItPndyYXBwZXIoKTsK
ICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAogc3RhdGljIEF0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93SGVhZGVyKEF0
a1RhYmxlKiB0YWJsZSwgZ2ludCByb3cpCkBAIC0yMjIsMTggKzIyMCwxOCBAQCBzdGF0aWMgQXRr
T2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dIZWFkZXIoQXRrVGFibGUqIHRhYmxl
LCBnaW50IHJvdykKICAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VC
S0lUX0FDQ0VTU0lCTEUodGFibGUpLCAwKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFj
Y1RhYmxlID0gY29yZSh0YWJsZSk7Ci0gICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QoKSkgeworICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NUYWJs
ZSkpIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yIHJvd0hlYWRlcnM7Ci0gICAgICAgIHRvQWNjZXNzaWJpbGl0eVRhYmxlKGFjY1RhYmxl
KS0+cm93SGVhZGVycyhyb3dIZWFkZXJzKTsKKyAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVRhYmxlPigqYWNjVGFibGUpLnJvd0hlYWRlcnMocm93SGVhZGVycyk7CiAKICAgICAgICAgZm9y
IChjb25zdCBhdXRvJiByb3dIZWFkZXIgOiByb3dIZWFkZXJzKSB7CiAgICAgICAgICAgICBzdGQ6
OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiByb3dSYW5nZTsKLSAgICAgICAgICAgIHRvQWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbChyb3dIZWFkZXIuZ2V0KCkpLT5yb3dJbmRleFJhbmdlKHJvd1Jhbmdl
KTsKKyAgICAgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpyb3dIZWFk
ZXIpLnJvd0luZGV4UmFuZ2Uocm93UmFuZ2UpOwogICAgICAgICAgICAgaWYgKHJvd1JhbmdlLmZp
cnN0IDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyb3cpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihyb3cpIDwgcm93UmFuZ2UuZmlyc3QgKyByb3dSYW5nZS5zZWNvbmQpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJvd0hlYWRlci0+d3JhcHBlcigpOwogICAgICAgICB9CiAgICAgfQotICAgIHJl
dHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgQXRrT2JqZWN0KiB3ZWJr
aXRBY2Nlc3NpYmxlVGFibGVHZXRDYXB0aW9uKEF0a1RhYmxlKiB0YWJsZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VUYWJsZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlQ2VsbC5jcHAKaW5kZXggNGI4ZjBlODQ3OWUxZTc0Mzcz
ODc3NzEyYjBlYjcxMDAxOGM2MDcwYS4uM2QxZTk2MjExZTk0NWNkZmE0MWVhODAyZTFmMzEzMGE3
MzM1OGMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlQ2VsbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlQ2VsbC5jcHAK
QEAgLTU0LDExICs1NCwxMSBAQCBHUHRyQXJyYXkqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxH
ZXRDb2x1bW5IZWFkZXJDZWxscyhBdGtUYWJsZUNlbGwqIGNlbGwpCiAgICAgcmV0dXJuVmFsSWZX
ZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJQkxFKGNlbGwpLCBudWxscHRy
KTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4T2JqZWN0ID0gY29yZShjZWxsKTsKLSAg
ICBpZiAoIWF4T2JqZWN0IHx8ICFheE9iamVjdC0+aXNUYWJsZUNlbGwoKSkKKyAgICBpZiAoIWlz
PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KGF4T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgY29sdW1uSGVhZGVyczsKLSAgICB0b0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwoYXhPYmplY3Qp
LT5jb2x1bW5IZWFkZXJzKGNvbHVtbkhlYWRlcnMpOworICAgIGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZUNlbGw+KCpheE9iamVjdCkuY29sdW1uSGVhZGVycyhjb2x1bW5IZWFkZXJzKTsKIAog
ICAgIHJldHVybiBjb252ZXJ0VG9HUHRyQXJyYXkoY29sdW1uSGVhZGVycyk7CiB9CkBAIC02OSwx
MSArNjksMTEgQEAgR1B0ckFycmF5KiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVDZWxsR2V0Um93SGVh
ZGVyQ2VsbHMoQXRrVGFibGVDZWxsKiBjZWxsKQogICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNz
aWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRShjZWxsKSwgbnVsbHB0cik7CiAKICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9IGNvcmUoY2VsbCk7Ci0gICAgaWYgKCFheE9i
amVjdCB8fCAhYXhPYmplY3QtPmlzVGFibGVDZWxsKCkpCisgICAgaWYgKCFpczxBY2Nlc3NpYmls
aXR5VGFibGVDZWxsPihheE9iamVjdCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd0hlYWRl
cnM7Ci0gICAgdG9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsKGF4T2JqZWN0KS0+cm93SGVhZGVycyhy
b3dIZWFkZXJzKTsKKyAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqYXhPYmpl
Y3QpLnJvd0hlYWRlcnMocm93SGVhZGVycyk7CiAKICAgICByZXR1cm4gY29udmVydFRvR1B0ckFy
cmF5KHJvd0hlYWRlcnMpOwogfQpAQCAtODQsMTEgKzg0LDExIEBAIGdpbnQgd2Via2l0QWNjZXNz
aWJsZVRhYmxlQ2VsbEdldENvbHVtblNwYW4oQXRrVGFibGVDZWxsKiBjZWxsKQogICAgIHJldHVy
blZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRShjZWxsKSwg
MCk7CiAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9IGNvcmUoY2VsbCk7Ci0g
ICAgaWYgKCFheE9iamVjdCB8fCAhYXhPYmplY3QtPmlzVGFibGVDZWxsKCkpCisgICAgaWYgKCFp
czxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPihheE9iamVjdCkpCiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gY29sdW1uUmFuZ2U7Ci0gICAgdG9B
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsKGF4T2JqZWN0KS0+Y29sdW1uSW5kZXhSYW5nZShjb2x1bW5S
YW5nZSk7CisgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmF4T2JqZWN0KS5j
b2x1bW5JbmRleFJhbmdlKGNvbHVtblJhbmdlKTsKIAogICAgIHJldHVybiBjb2x1bW5SYW5nZS5z
ZWNvbmQ7CiB9CkBAIC05OSwxMSArOTksMTEgQEAgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVD
ZWxsR2V0Um93U3BhbihBdGtUYWJsZUNlbGwqIGNlbGwpCiAgICAgcmV0dXJuVmFsSWZXZWJLaXRB
Y2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJQkxFKGNlbGwpLCAwKTsKIAogICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGF4T2JqZWN0ID0gY29yZShjZWxsKTsKLSAgICBpZiAoIWF4T2Jq
ZWN0IHx8ICFheE9iamVjdC0+aXNUYWJsZUNlbGwoKSkKKyAgICBpZiAoIWlzPEFjY2Vzc2liaWxp
dHlUYWJsZUNlbGw+KGF4T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBzdGQ6OnBh
aXI8dW5zaWduZWQsIHVuc2lnbmVkPiByb3dSYW5nZTsKLSAgICB0b0FjY2Vzc2liaWxpdHlUYWJs
ZUNlbGwoYXhPYmplY3QpLT5yb3dJbmRleFJhbmdlKHJvd1JhbmdlKTsKKyAgICBkb3duY2FzdDxB
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqYXhPYmplY3QpLnJvd0luZGV4UmFuZ2Uocm93UmFuZ2Up
OwogCiAgICAgcmV0dXJuIHJvd1JhbmdlLnNlY29uZDsKIH0KQEAgLTExNCwxNiArMTE0LDE2IEBA
IGdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxHZXRQb3NpdGlvbihBdGtUYWJsZUNl
bGwqIGNlbGwsIGdpbnQqIHJvdywgZ2luCiAgICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxl
SXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJQkxFKGNlbGwpLCBmYWxzZSk7CiAKICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBheE9iamVjdCA9IGNvcmUoY2VsbCk7Ci0gICAgaWYgKCFheE9iamVjdCB8
fCAhYXhPYmplY3QtPmlzVGFibGVDZWxsKCkpCisgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5VGFi
bGVDZWxsPihheE9iamVjdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHN0ZDo6cGFp
cjx1bnNpZ25lZCwgdW5zaWduZWQ+IGNvbHVtblJvd1JhbmdlOwogICAgIGlmIChyb3cpIHsKLSAg
ICAgICAgdG9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsKGF4T2JqZWN0KS0+cm93SW5kZXhSYW5nZShj
b2x1bW5Sb3dSYW5nZSk7CisgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+
KCpheE9iamVjdCkucm93SW5kZXhSYW5nZShjb2x1bW5Sb3dSYW5nZSk7CiAgICAgICAgICpyb3cg
PSBjb2x1bW5Sb3dSYW5nZS5maXJzdDsKICAgICB9CiAgICAgaWYgKGNvbHVtbikgewotICAgICAg
ICB0b0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwoYXhPYmplY3QpLT5jb2x1bW5JbmRleFJhbmdlKGNv
bHVtblJvd1JhbmdlKTsKKyAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4o
KmF4T2JqZWN0KS5jb2x1bW5JbmRleFJhbmdlKGNvbHVtblJvd1JhbmdlKTsKICAgICAgICAgKmNv
bHVtbiA9IGNvbHVtblJvd1JhbmdlLmZpcnN0OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJpbGl0eU9iamVjdElPUy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1MubW0K
aW5kZXggMWM5YjkzOWVmZTFhYjA3YzJlM2RhMTJlZjc1Njc5NjgzYmE5OTIwOC4uM2JiODc2OWEz
MTEzNjI5MmU1NTUzM2JiZmViZjhkN2M3MWM4MTIxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJpbGl0eU9iamVjdElPUy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tCkBA
IC02Miw5ICs2Miw5IEBAIGludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5UGFz
c3dvcmRGaWVsZExlbmd0aCgpCiB7CiAgICAgaWYgKCFpc1Bhc3N3b3JkRmllbGQoKSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QgPSB0b0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QodGhpcyktPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJPYmplY3QgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0PigqdGhpcyku
cmVuZGVyZXIoKTsKICAgICAKLSAgICBpZiAoIXJlbmRlck9iamVjdCB8fCAhcmVuZGVyT2JqZWN0
LT5ub2RlKCkgfHwgIXJlbmRlck9iamVjdC0+bm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpCisgICAg
aWYgKCFyZW5kZXJPYmplY3QgfHwgIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KHJlbmRlck9iamVjdC0+
bm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEhUTUxJbnB1dEVsZW1l
bnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpyZW5kZXJPYmpl
Y3QtPm5vZGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCmluZGV4
IGY0NWIwOTY2ZGU4ZjM5MmNhYjg3ZWY0OTJmYzc2NmJkMjA2MDljOTAuLjZhNDFiOTc3MWUwNThh
Y2RhNmIxYWE4MWFjYTIxMGUxYmRmMGM1ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVySU9TLm1tCkBAIC0xMTE0LDggKzExMTQsOCBAQCAtIChDR1BvaW50KWNvbnZlcnRQb2lu
dFRvU2NyZWVuU3BhY2U6KEZsb2F0UG9pbnQgJilwb2ludAogICAgICAgICBTY3JvbGxWaWV3KiBz
Y3JvbGxWaWV3ID0gbnVsbHB0cjsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50
ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0
KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewotICAgICAgICAg
ICAgaWYgKHBhcmVudC0+aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldygpKSB7Ci0gICAgICAgICAg
ICAgICAgc2Nyb2xsVmlldyA9IHRvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcocGFyZW50KS0+c2Ny
b2xsVmlldygpOworICAgICAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Pigq
cGFyZW50KSkgeworICAgICAgICAgICAgICAgIHNjcm9sbFZpZXcgPSBkb3duY2FzdDxBY2Nlc3Np
YmlsaXR5U2Nyb2xsVmlldz4oKnBhcmVudCkuc2Nyb2xsVmlldygpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMTY4LDggKzExNjgsOCBAQCAt
IChDR1JlY3QpY29udmVydFJlY3RUb1NjcmVlblNwYWNlOihJbnRSZWN0ICYpcmVjdAogICAgICAg
ICBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3ID0gbnVsbHB0cjsKICAgICAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogcGFyZW50ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChwYXJlbnQgPSBtX29iamVj
dC0+cGFyZW50T2JqZWN0KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3Qo
KSkgewotICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldygp
KSB7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsVmlldyA9IHRvQWNjZXNzaWJpbGl0eVNjcm9sbFZp
ZXcocGFyZW50KS0+c2Nyb2xsVmlldygpOworICAgICAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxp
dHlTY3JvbGxWaWV3PigqcGFyZW50KSkgeworICAgICAgICAgICAgICAgIHNjcm9sbFZpZXcgPSBk
b3duY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKnBhcmVudCkuc2Nyb2xsVmlldygpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCmluZGV4IDQ4YjlhZWUyNzBiZWM4OTllOWY3
OTRiMTM0MzE4NTU4OTMzZjNjYTQuLjNmOWRiZDZlMDBkYzk0ZTE1NDc1MjcyMTIwZmIyNjM3YmFm
Y2M2NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC05OTQs
MTAgKzk5NCwxMCBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldEVsZW1lbnQoTlNN
dXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywgTgogICAgIGlmICghQVhBdHRyaWJ1
dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKGF0dHJTdHJpbmcsIHJhbmdlKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QoKSkgeworICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0PihvYmplY3Qp
KSB7CiAgICAgICAgIC8vIG1ha2UgYSBzZXJpYWxpemFibGUgQVggb2JqZWN0CiAgICAgICAgIAot
ICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdG9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0KG9iamVjdCktPnJlbmRlcmVyKCk7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Pigqb2JqZWN0KS5yZW5kZXJlcigp
OwogICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
QEAgLTExOTksNyArMTE5OSw3IEBAIC0gKE5TQXJyYXkqKWFkZGl0aW9uYWxBY2Nlc3NpYmlsaXR5
QXR0cmlidXRlTmFtZXMKICAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzQVJJQURyb3BwaW5nKCkp
CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlEcm9wRWZmZWN0
c0F0dHJpYnV0ZV07CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlUYWJs
ZSgpICYmIHRvQWNjZXNzaWJpbGl0eVRhYmxlKG1fb2JqZWN0KS0+c3VwcG9ydHNTZWxlY3RlZFJv
d3MoKSkKKyAgICBpZiAobV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgJiYgZG93bmNh
c3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqbV9vYmplY3QpLnN1cHBvcnRzU2VsZWN0ZWRSb3dzKCkp
CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJv
d3NBdHRyaWJ1dGVdOwogICAgIAogICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNBUklBTGl2ZVJl
Z2lvbigpKSB7CkBAIC0xNzUyLDggKzE3NTIsOCBAQCAtIChDR1BvaW50KWNvbnZlcnRQb2ludFRv
U2NyZWVuU3BhY2U6KEZsb2F0UG9pbnQgJilwb2ludAogICAgICAgICBTY3JvbGxWaWV3KiBzY3Jv
bGxWaWV3ID0gbnVsbHB0cjsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0g
bnVsbHB0cjsKICAgICAgICAgZm9yIChwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7
IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewotICAgICAgICAgICAg
aWYgKHBhcmVudC0+aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldygpKSB7Ci0gICAgICAgICAgICAg
ICAgc2Nyb2xsVmlldyA9IHRvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcocGFyZW50KS0+c2Nyb2xs
VmlldygpOworICAgICAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3PigqcGFy
ZW50KSkgeworICAgICAgICAgICAgICAgIHNjcm9sbFZpZXcgPSBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5U2Nyb2xsVmlldz4oKnBhcmVudCkuc2Nyb2xsVmlldygpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xOTkyLDggKzE5OTIsOCBAQCAtIChO
U1N0cmluZyopc3Vicm9sZQogICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVlKCkgPT0gSG9yaXpv
bnRhbFJ1bGVSb2xlKQogICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5Q29udGVudFNlcGFy
YXRvclN1YnJvbGU7CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc1NwaW5CdXR0b25QYXJ0KCkp
IHsKLSAgICAgICAgaWYgKHRvQWNjZXNzaWJpbGl0eVNwaW5CdXR0b25QYXJ0KG1fb2JqZWN0KS0+
aXNJbmNyZW1lbnRvcigpKQorICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvblBhcnQ+
KCptX29iamVjdCkpIHsKKyAgICAgICAgaWYgKGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTcGluQnV0
dG9uUGFydD4oKm1fb2JqZWN0KS5pc0luY3JlbWVudG9yKCkpCiAgICAgICAgICAgICByZXR1cm4g
TlNBY2Nlc3NpYmlsaXR5SW5jcmVtZW50QXJyb3dTdWJyb2xlOwogICAgICAgICAKICAgICAgICAg
cmV0dXJuIE5TQWNjZXNzaWJpbGl0eURlY3JlbWVudEFycm93U3Vicm9sZTsKQEAgLTIwMDUsMTEg
KzIwMDUsMTEgQEAgLSAoTlNTdHJpbmcqKXN1YnJvbGUKICAgICBpZiAobV9vYmplY3QtPmlzVHJl
ZUl0ZW0oKSkKICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eU91dGxpbmVSb3dTdWJyb2xl
OwogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNMaXN0KCkpIHsKLSAgICAgICAgQWNjZXNzaWJp
bGl0eUxpc3QqIGxpc3RPYmplY3QgPSB0b0FjY2Vzc2liaWxpdHlMaXN0KG1fb2JqZWN0KTsKLSAg
ICAgICAgaWYgKGxpc3RPYmplY3QtPmlzVW5vcmRlcmVkTGlzdCgpIHx8IGxpc3RPYmplY3QtPmlz
T3JkZXJlZExpc3QoKSkKKyAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eUxpc3Q+KCptX29iamVjdCkp
IHsKKyAgICAgICAgYXV0byYgbGlzdE9iamVjdCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlMaXN0
PigqbV9vYmplY3QpOworICAgICAgICBpZiAobGlzdE9iamVjdC5pc1Vub3JkZXJlZExpc3QoKSB8
fCBsaXN0T2JqZWN0LmlzT3JkZXJlZExpc3QoKSkKICAgICAgICAgICAgIHJldHVybiBOU0FjY2Vz
c2liaWxpdHlDb250ZW50TGlzdFN1YnJvbGU7Ci0gICAgICAgIGlmIChsaXN0T2JqZWN0LT5pc0Rl
c2NyaXB0aW9uTGlzdCgpKSB7CisgICAgICAgIGlmIChsaXN0T2JqZWN0LmlzRGVzY3JpcHRpb25M
aXN0KCkpIHsKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTA5MAogICAg
ICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eURlZmluaXRpb25MaXN0U3Vicm9sZTsKICNl
bHNlCkBAIC0yMTc5LDkgKzIxNzksOCBAQCAtIChOU1N0cmluZyopcm9sZURlc2NyaXB0aW9uCiAg
ICAgCiAgICAgLy8gT25seSByZXR1cm5pbmcgZm9yIERMIChub3QgVUwgb3IgT0wpIGJlY2F1c2Ug
ZGVzY3JpcHRpb24gY2hhbmdlZCB3aXRoIEhUTUw1IGZyb20gJ2RlZmluaXRpb24gbGlzdCcgdG8K
ICAgICAvLyBzdXBlcnNldCAnZGVzY3JpcHRpb24gbGlzdCcgYW5kIGRvZXMgbm90IHJldHVybiB0
aGUgc2FtZSB2YWx1ZXMgaW4gQVggQVBJIG9uIHNvbWUgT1MgdmVyc2lvbnMuIAotICAgIGlmICht
X29iamVjdC0+aXNMaXN0KCkpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eUxpc3QqIGxpc3RPYmpl
Y3QgPSB0b0FjY2Vzc2liaWxpdHlMaXN0KG1fb2JqZWN0KTsKLSAgICAgICAgaWYgKGxpc3RPYmpl
Y3QtPmlzRGVzY3JpcHRpb25MaXN0KCkpCisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlMaXN0Pigq
bV9vYmplY3QpKSB7CisgICAgICAgIGlmIChkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TGlzdD4oKm1f
b2JqZWN0KS5pc0Rlc2NyaXB0aW9uTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuIEFYRGVzY3Jp
cHRpb25MaXN0VGV4dCgpOwogICAgIH0KICAgICAKQEAgLTIyMTcsNyArMjIxNiw3IEBAIC0gKE5T
U3RyaW5nICopY29tcHV0ZWRSb2xlU3RyaW5nCiAKIC0gKGlkKXNjcm9sbFZpZXdQYXJlbnQKIHsK
LSAgICBpZiAoIW1fb2JqZWN0IHx8ICFtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmll
dygpKQorICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KG1fb2JqZWN0KSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKICAgICAKICAgICAvLyBJZiB0aGlzIHNjcm9sbCB2aWV3IHByb3Zp
ZGVzIGl0J3MgcGFyZW50IG9iamVjdCAoYmVjYXVzZSBpdCdzIGEgc3ViLWZyYW1lKSwgdGhlbgpA
QCAtMjIyNSw4ICsyMjI0LDcgQEAgLSAoaWQpc2Nyb2xsVmlld1BhcmVudAogICAgIGlmIChtX29i
amVjdC0+cGFyZW50T2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgQWNj
ZXNzaWJpbGl0eVNjcm9sbFZpZXcqIHNjcm9sbFZpZXcgPSB0b0FjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3KG1fb2JqZWN0KTsKLSAgICBTY3JvbGxWaWV3KiBzY3JvbGwgPSBzY3JvbGxWaWV3LT5zY3Jv
bGxWaWV3KCk7CisgICAgU2Nyb2xsVmlldyogc2Nyb2xsID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVNjcm9sbFZpZXc+KCptX29iamVjdCkuc2Nyb2xsVmlldygpOwogICAgIGlmICghc2Nyb2xsKQog
ICAgICAgICByZXR1cm4gbmlsOwogICAgIApAQCAtMjMzMyw3ICsyMzMxLDcgQEAgLSAoaWQpYWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyopYXR0cmlidXRlTmFtZQogICAgIGlm
IChtX29iamVjdC0+aXNXZWJBcmVhKCkpIHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpAIkFYTGlua1VJRWxlbWVudHMiXSkgewogICAgICAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGxpbmtzOwotICAgICAg
ICAgICAgdG9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KG1fb2JqZWN0KS0+Z2V0RG9jdW1lbnRM
aW5rcyhsaW5rcyk7CisgICAgICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0PigqbV9vYmplY3QpLmdldERvY3VtZW50TGlua3MobGlua3MpOwogICAgICAgICAgICAgcmV0
dXJuIGNvbnZlcnRUb05TQXJyYXkobGlua3MpOwogICAgICAgICB9CiAgICAgICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExvYWRlZCJdKQpAQCAtMjM5MiwxMSArMjM5
MCwxMSBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRy
aWJ1dGVOYW1lCiAgICAgfQogCiAgICAgLy8gT25seSBuYXRpdmUgc3BpbiBidXR0b25zIGhhdmUg
aW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgYnV0dG9ucy4KLSAgICBpZiAobV9vYmplY3QtPmlzTmF0
aXZlU3BpbkJ1dHRvbigpKSB7CisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uPigq
bV9vYmplY3QpKSB7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5SW5jcmVtZW50QnV0dG9uQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJl
dHVybiB0b0FjY2Vzc2liaWxpdHlTcGluQnV0dG9uKG1fb2JqZWN0KS0+aW5jcmVtZW50QnV0dG9u
KCktPndyYXBwZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5
U3BpbkJ1dHRvbj4oKm1fb2JqZWN0KS5pbmNyZW1lbnRCdXR0b24oKS0+d3JhcHBlcigpOwogICAg
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURl
Y3JlbWVudEJ1dHRvbkF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gdG9BY2Nlc3NpYmls
aXR5U3BpbkJ1dHRvbihtX29iamVjdCktPmRlY3JlbWVudEJ1dHRvbigpLT53cmFwcGVyKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNwaW5CdXR0b24+KCptX29i
amVjdCkuZGVjcmVtZW50QnV0dG9uKCktPndyYXBwZXIoKTsKICAgICB9CiAgICAgCiAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogQCJBWFZpc2l0ZWQiXSkKQEAgLTI1NTcs
MTkgKzI1NTUsMjAgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmlu
ZyopYXR0cmlidXRlTmFtZQogICAgIH0KICAgICAKICAgICBpZiAobV9vYmplY3QtPmlzQWNjZXNz
aWJpbGl0eVRhYmxlKCkpIHsKKyAgICAgICAgYXV0byYgdGFibGUgPSBkb3duY2FzdDxBY2Nlc3Np
YmlsaXR5VGFibGU+KCptX29iamVjdCk7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93c0F0dHJpYnV0ZV0pCi0gICAgICAgICAgICBy
ZXR1cm4gY29udmVydFRvTlNBcnJheSh0b0FjY2Vzc2liaWxpdHlUYWJsZShtX29iamVjdCktPnJv
d3MoKSk7CisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheSh0YWJsZS5yb3dzKCkp
OwogICAgICAgICAKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlWaXNpYmxlUm93c0F0dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB2aXNpYmxlUm93czsK
LSAgICAgICAgICAgIHRvQWNjZXNzaWJpbGl0eVRhYmxlKG1fb2JqZWN0KS0+dmlzaWJsZVJvd3Mo
dmlzaWJsZVJvd3MpOworICAgICAgICAgICAgdGFibGUudmlzaWJsZVJvd3ModmlzaWJsZVJvd3Mp
OwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkodmlzaWJsZVJvd3MpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBUT0RPOiBkaXN0aW5ndWlzaCBiZXR3ZWVuIHZp
c2libGUgYW5kIG5vbi12aXNpYmxlIGNvbHVtbnMKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb2x1bW5zQXR0cmlidXRlXSB8fAogICAg
ICAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZp
c2libGVDb2x1bW5zQXR0cmlidXRlXSkgewotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05T
QXJyYXkodG9BY2Nlc3NpYmlsaXR5VGFibGUobV9vYmplY3QpLT5jb2x1bW5zKCkpOworICAgICAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkodGFibGUuY29sdW1ucygpKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVdKSB7CkBAIC0yNTg1LDEyICsyNTg0
LDEyIEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcqKWF0dHJp
YnV0ZU5hbWUKICAgICAgICAgCiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q29sdW1uSGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZV0pIHsK
ICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBjb2x1bW5IZWFkZXJzOwotICAgICAgICAgICAgdG9BY2Nlc3NpYmlsaXR5VGFibGUobV9v
YmplY3QpLT5jb2x1bW5IZWFkZXJzKGNvbHVtbkhlYWRlcnMpOworICAgICAgICAgICAgdGFibGUu
Y29sdW1uSGVhZGVycyhjb2x1bW5IZWFkZXJzKTsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0
VG9OU0FycmF5KGNvbHVtbkhlYWRlcnMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUhlYWRlckF0
dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlckNvbnRh
aW5lciA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlKG1fb2JqZWN0KS0+aGVhZGVyQ29udGFpbmVyKCk7
CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXJDb250YWluZXIgPSB0YWJs
ZS5oZWFkZXJDb250YWluZXIoKTsKICAgICAgICAgICAgIGlmIChoZWFkZXJDb250YWluZXIpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGhlYWRlckNvbnRhaW5lci0+d3JhcHBlcigpOwogICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKQEAgLTI1OTgsNTkgKzI1OTcsNjEgQEAgLSAoaWQpYWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyopYXR0cmlidXRlTmFtZQogICAgICAgICAKICAg
ICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlS
b3dIZWFkZXJVSUVsZW1lbnRzQXR0cmlidXRlXSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd0hlYWRlcnM7Ci0gICAgICAg
ICAgICB0b0FjY2Vzc2liaWxpdHlUYWJsZShtX29iamVjdCktPnJvd0hlYWRlcnMocm93SGVhZGVy
cyk7CisgICAgICAgICAgICB0YWJsZS5yb3dIZWFkZXJzKHJvd0hlYWRlcnMpOwogICAgICAgICAg
ICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkocm93SGVhZGVycyk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5VmlzaWJsZUNlbGxzQXR0cmlidXRlXSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNlbGxzOwotICAgICAgICAgICAg
dG9BY2Nlc3NpYmlsaXR5VGFibGUobV9vYmplY3QpLT5jZWxscyhjZWxscyk7CisgICAgICAgICAg
ICB0YWJsZS5jZWxscyhjZWxscyk7CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJh
eShjZWxscyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q29sdW1uQ291bnRBdHRyaWJ1dGVdKQot
ICAgICAgICAgICAgcmV0dXJuIEAodG9BY2Nlc3NpYmlsaXR5VGFibGUobV9vYmplY3QpLT5jb2x1
bW5Db3VudCgpKTsKKyAgICAgICAgICAgIHJldHVybiBAKHRhYmxlLmNvbHVtbkNvdW50KCkpOwog
ICAgICAgICAKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlSb3dDb3VudEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gQCh0b0Fj
Y2Vzc2liaWxpdHlUYWJsZShtX29iamVjdCktPnJvd0NvdW50KCkpOworICAgICAgICAgICAgcmV0
dXJuIEAodGFibGUucm93Q291bnQoKSk7CiAgICAgfQogICAgIAotICAgIGlmIChtX29iamVjdC0+
aXNUYWJsZUNvbHVtbigpKSB7CisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbj4o
Km1fb2JqZWN0KSkgeworICAgICAgICBhdXRvJiBjb2x1bW4gPSBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGVDb2x1bW4+KCptX29iamVjdCk7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdKQotICAgICAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OnRvQWNjZXNzaWJpbGl0eVRhYmxlQ29s
dW1uKG1fb2JqZWN0KS0+Y29sdW1uSW5kZXgoKV07CisgICAgICAgICAgICByZXR1cm4gW05TTnVt
YmVyIG51bWJlcldpdGhJbnQ6Y29sdW1uLmNvbHVtbkluZGV4KCldOwogICAgICAgICAKICAgICAg
ICAgLy8gcm93cyBhdHRyaWJ1dGUgZm9yIGEgY29sdW1uIGlzIHRoZSBsaXN0IG9mIGFsbCB0aGUg
ZWxlbWVudHMgaW4gdGhhdCBjb2x1bW4gYXQgZWFjaCByb3cKICAgICAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb3dzQXR0cmlidXRlXSB8fAog
ICAgICAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eVZpc2libGVSb3dzQXR0cmlidXRlXSkgewotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05T
QXJyYXkodG9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4obV9vYmplY3QpLT5jaGlsZHJlbigpKTsK
KyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGNvbHVtbi5jaGlsZHJlbigpKTsK
ICAgICAgICAgfQogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUhlYWRlckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGhlYWRlciA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uKG1fb2JqZWN0KS0+
aGVhZGVyT2JqZWN0KCk7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXIg
PSBjb2x1bW4uaGVhZGVyT2JqZWN0KCk7CiAgICAgICAgICAgICBpZiAoIWhlYWRlcikKICAgICAg
ICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgcmV0dXJuIGhlYWRlci0+d3JhcHBl
cigpOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNUYWJsZUNl
bGwoKSkgeworICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqbV9vYmplY3QpKSB7
CisgICAgICAgIGF1dG8mIGNlbGwgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigq
bV9vYmplY3QpOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eVJvd0luZGV4UmFuZ2VBdHRyaWJ1dGVdKSB7CiAgICAgICAgICAgICBzdGQ6
OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiByb3dSYW5nZTsKLSAgICAgICAgICAgIHRvQWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbChtX29iamVjdCktPnJvd0luZGV4UmFuZ2Uocm93UmFuZ2UpOworICAg
ICAgICAgICAgY2VsbC5yb3dJbmRleFJhbmdlKHJvd1JhbmdlKTsKICAgICAgICAgICAgIHJldHVy
biBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpOU01ha2VSYW5nZShyb3dSYW5nZS5maXJzdCwgcm93
UmFuZ2Uuc2Vjb25kKV07CiAgICAgICAgIH0KICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb2x1bW5JbmRleFJhbmdlQXR0cmlidXRlXSkg
ewogICAgICAgICAgICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gY29sdW1uUmFuZ2U7
Ci0gICAgICAgICAgICB0b0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwobV9vYmplY3QpLT5jb2x1bW5J
bmRleFJhbmdlKGNvbHVtblJhbmdlKTsKKyAgICAgICAgICAgIGNlbGwuY29sdW1uSW5kZXhSYW5n
ZShjb2x1bW5SYW5nZSk7CiAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmFu
Z2U6TlNNYWtlUmFuZ2UoY29sdW1uUmFuZ2UuZmlyc3QsIGNvbHVtblJhbmdlLnNlY29uZCldOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5Q29sdW1uSGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZV0pIHsKICAgICAgICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1
bW5IZWFkZXJzOwotICAgICAgICAgICAgdG9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsKG1fb2JqZWN0
KS0+Y29sdW1uSGVhZGVycyhjb2x1bW5IZWFkZXJzKTsKKyAgICAgICAgICAgIGNlbGwuY29sdW1u
SGVhZGVycyhjb2x1bW5IZWFkZXJzKTsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0Fy
cmF5KGNvbHVtbkhlYWRlcnMpOwogICAgICAgICB9CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93SGVhZGVyVUlFbGVtZW50c0F0dHJp
YnV0ZV0pIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciByb3dIZWFkZXJzOwotICAgICAgICAgICAgdG9BY2Nlc3NpYmlsaXR5VGFi
bGVDZWxsKG1fb2JqZWN0KS0+cm93SGVhZGVycyhyb3dIZWFkZXJzKTsKKyAgICAgICAgICAgIGNl
bGwucm93SGVhZGVycyhyb3dIZWFkZXJzKTsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9O
U0FycmF5KHJvd0hlYWRlcnMpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjY5MSw5ICsyNjkyLDkg
QEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyopYXR0cmlidXRl
TmFtZQogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICB9Ci0g
ICAgICAgIGlmIChtX29iamVjdC0+aXNUYWJsZVJvdygpKSB7CisgICAgICAgIGlmIChpczxBY2Nl
c3NpYmlsaXR5VGFibGVSb3c+KCptX29iamVjdCkpIHsKICAgICAgICAgICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdKQot
ICAgICAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDp0b0FjY2Vzc2li
aWxpdHlUYWJsZVJvdyhtX29iamVjdCktPnJvd0luZGV4KCldOworICAgICAgICAgICAgICAgIHJl
dHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVS
b3c+KCptX29iamVjdCkucm93SW5kZXgoKV07CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0y
NzAzLDkgKzI3MDQsOSBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3Ry
aW5nKilhdHRyaWJ1dGVOYW1lCiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93c0NvcHk7CiAgICAgICAgICAgICBtX29iamVjdC0+
YXJpYVRyZWVJdGVtRGlzY2xvc2VkUm93cyhyb3dzQ29weSk7CiAgICAgICAgICAgICByZXR1cm4g
Y29udmVydFRvTlNBcnJheShyb3dzQ29weSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobV9vYmplY3Qt
PmlzQVJJQVRyZWVHcmlkUm93KCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChpczxBY2Nlc3NpYmls
aXR5QVJJQUdyaWRSb3c+KCptX29iamVjdCkpIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dzQ29weTsKLSAgICAgICAgICAg
IHRvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93KG1fb2JqZWN0KS0+ZGlzY2xvc2VkUm93cyhyb3dz
Q29weSk7CisgICAgICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c+KCpt
X29iamVjdCkuZGlzY2xvc2VkUm93cyhyb3dzQ29weSk7CiAgICAgICAgICAgICByZXR1cm4gY29u
dmVydFRvTlNBcnJheShyb3dzQ29weSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzIzLDggKzI3
MjQsOCBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRy
aWJ1dGVOYW1lCiAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3Qo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIH0gZWxz
ZSBpZiAobV9vYmplY3QtPmlzQVJJQVRyZWVHcmlkUm93KCkpIHsKLSAgICAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIHJvdyA9IHRvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93KG1fb2JqZWN0
KS0+ZGlzY2xvc2VkQnlSb3coKTsKKyAgICAgICAgfSBlbHNlIGlmIChpczxBY2Nlc3NpYmlsaXR5
QVJJQUdyaWRSb3c+KCptX29iamVjdCkpIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIHJvdyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdz4oKm1fb2JqZWN0KS5k
aXNjbG9zZWRCeVJvdygpOwogICAgICAgICAgICAgaWYgKCFyb3cpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICAgICAgICAgIHJldHVybiByb3ctPndyYXBwZXIoKTsKQEAgLTI3Njks
NyArMjc3MCw3IEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcq
KWF0dHJpYnV0ZU5hbWUKICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpt
X29iamVjdC0+aXNTZWxlY3RlZCgpXTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZXJ2ZXNBc1RpdGxlRm9yVUlFbGVtZW50c0F0
dHJpYnV0ZV0gJiYgbV9vYmplY3QtPmlzTWVudUJ1dHRvbigpKSB7Ci0gICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIHVpRWxlbWVudCA9IHRvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdChtX29i
amVjdCktPm1lbnVGb3JNZW51QnV0dG9uKCk7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IHVpRWxlbWVudCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+KCptX29iamVj
dCkubWVudUZvck1lbnVCdXR0b24oKTsKICAgICAgICAgaWYgKHVpRWxlbWVudCkKICAgICAgICAg
ICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6dWlFbGVtZW50LT53cmFwcGVyKCld
OwogICAgIH0KQEAgLTMxOTcsOCArMzE5OCw4IEBAIC0gKHZvaWQpYWNjZXNzaWJpbGl0eVNob3dD
b250ZXh0TWVudQogICAgIGlmIChmcmFtZVZpZXcgJiYgIWZyYW1lVmlldy0+cGxhdGZvcm1XaWRn
ZXQoKSkgewogICAgICAgICAvLyBGaW5kIHRoZSBhcHByb3ByaWF0ZSBzY3JvbGwgdmlldyB0byB1
c2UgdG8gY29udmVydCB0aGUgY29udGVudHMgdG8gdGhlIHdpbmRvdy4KICAgICAgICAgZm9yIChB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7IHBh
cmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewotICAgICAgICAgICAgaWYg
KHBhcmVudC0+aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldygpKSB7Ci0gICAgICAgICAgICAgICAg
U2Nyb2xsVmlldyogc2Nyb2xsVmlldyA9IHRvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcocGFyZW50
KS0+c2Nyb2xsVmlldygpOworICAgICAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3PigqcGFyZW50KSkgeworICAgICAgICAgICAgICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcg
PSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKnBhcmVudCkuc2Nyb2xsVmlldygp
OwogICAgICAgICAgICAgICAgIHJlY3QgPSBzY3JvbGxWaWV3LT5jb250ZW50c1RvUm9vdFZpZXco
cmVjdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zMjk5LDcg
KzMzMDAsNyBAQCAtICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFsdWUgZm9yQXR0
cmlidXRlOihOU1N0cmluZyopYXR0cmlidXRlTmFtZQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2Vs
ZWN0ZWRDaGlsZHJlbjsKICAgICAgICAgY29udmVydFRvVmVjdG9yKGFycmF5LCBzZWxlY3RlZENo
aWxkcmVuKTsKLSAgICAgICAgdG9BY2Nlc3NpYmlsaXR5TGlzdEJveChtX29iamVjdCktPnNldFNl
bGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbik7CisgICAgICAgIGRvd25jYXN0PEFjY2Vz
c2liaWxpdHlMaXN0Qm94PigqbV9vYmplY3QpLnNldFNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRD
aGlsZHJlbik7CiAgICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7CiAg
ICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0
eVNlbGVjdGVkVGV4dEF0dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIG1fb2JqZWN0LT5zZXRTZWxl
Y3RlZFRleHQoc3RyaW5nKTsKQEAgLTM3MDYsNyArMzcwNyw3IEBAIC0gKGlkKWFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZSBmb3JQYXJhbWV0ZXI6KGlkKXBh
cmFtZXRlCiAgICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlDZWxsRm9yQ29sdW1uQW5kUm93UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAgICAg
ICAgICAgIGlmIChhcnJheSA9PSBuaWwgfHwgW2FycmF5IGNvdW50XSAhPSAyKQogICAgICAgICAg
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBj
ZWxsID0gdG9BY2Nlc3NpYmlsaXR5VGFibGUobV9vYmplY3QpLT5jZWxsRm9yQ29sdW1uQW5kUm93
KFtbYXJyYXkgb2JqZWN0QXRJbmRleDowXSB1bnNpZ25lZEludFZhbHVlXSwgW1thcnJheSBvYmpl
Y3RBdEluZGV4OjFdIHVuc2lnbmVkSW50VmFsdWVdKTsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxp
dHlUYWJsZUNlbGwqIGNlbGwgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCptX29iamVj
dCkuY2VsbEZvckNvbHVtbkFuZFJvdyhbW2FycmF5IG9iamVjdEF0SW5kZXg6MF0gdW5zaWduZWRJ
bnRWYWx1ZV0sIFtbYXJyYXkgb2JqZWN0QXRJbmRleDoxXSB1bnNpZ25lZEludFZhbHVlXSk7CiAg
ICAgICAgICAgICBpZiAoIWNlbGwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAg
ICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5j
cHAKaW5kZXggMGExMzk3ZjAxY2IwZDhjNWFlN2UzMmY3ODBjNDUxYjBmZjc3ZTcxZS4uMTNkYzVh
MWRlMWI1NGE0MTQ1NjJiMzJlOGY1ZGE3ZjRhMTg4N2EyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0xNTg1LDggKzE1ODUsOCBAQCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRp
ZXM+IEluc3BlY3RvckRPTUFnZW50OgogICAgICAgICAgICAgICAgICAgICBsaXZlUmVnaW9uU3Rh
dHVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
TGl2ZVJlZ2lvblN0YXR1czo6UG9saXRlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
ZiAoYXhPYmplY3QtPmlzQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QoKSkKLSAgICAgICAgICAgICAg
ICBtb3VzZUV2ZW50Tm9kZSA9IHRvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QoYXhPYmplY3QpLT5t
b3VzZUJ1dHRvbkxpc3RlbmVyKE1vdXNlQnV0dG9uTGlzdGVuZXJSZXN1bHRGaWx0ZXI6OkluY2x1
ZGVCb2R5RWxlbWVudCk7CisgICAgICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q+KCpheE9iamVjdCkpCisgICAgICAgICAgICAgICAgbW91c2VFdmVudE5vZGUgPSBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdD4oKmF4T2JqZWN0KS5tb3VzZUJ1dHRvbkxpc3RlbmVy
KE1vdXNlQnV0dG9uTGlzdGVuZXJSZXN1bHRGaWx0ZXI6OkluY2x1ZGVCb2R5RWxlbWVudCk7CiAK
ICAgICAgICAgICAgIGlmIChheE9iamVjdC0+c3VwcG9ydHNBUklBT3ducygpKSB7CiAgICAgICAg
ICAgICAgICAgVmVjdG9yPEVsZW1lbnQqPiBvd25lZEVsZW1lbnRzOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKaW5kZXggNDg0ZmZiZjRhYjk2OWJlZmIyZmE5
ZTQ3MjhlNzkxMzU0MjYxOTk5Ny4uNDRjOGQyYjNhZjlmNTdjMWZhOWMwZDk3M2MxMWY1MWVhZjlm
YzFlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCkBA
IC00MzcsNyArNDM3LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6ZGlkVXBkYXRlQWN0aXZlT3B0
aW9uKGludCBvcHRpb25JbmRleCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKEFYT2JqZWN0
Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkgewotICAg
ICAgICBpZiAoQWNjZXNzaWJpbGl0eU1lbnVMaXN0KiBtZW51TGlzdCA9IHRvQWNjZXNzaWJpbGl0
eU1lbnVMaXN0KGNhY2hlLT5nZXQodGhpcykpKQorICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU1l
bnVMaXN0KiBtZW51TGlzdCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlNZW51TGlzdD4oY2FjaGUt
PmdldCh0aGlzKSkpCiAgICAgICAgICAgICBtZW51TGlzdC0+ZGlkVXBkYXRlQWN0aXZlT3B0aW9u
KG9wdGlvbkluZGV4KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9B
Y2Nlc3NpYmxlQmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9BY2Nlc3NpYmxlQmFzZS5jcHAK
aW5kZXggOTZmOWI3NTE3YTkzZjczMWFhY2MxZTE4Njg1NTYxOTIyOGZkMzAzYS4uNTg5YzMwOGY2
Mjg1YThhNmI0ZmU1MTJjMWJhMjg4MTJhZjY2YTE2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC93aW4vQWNjZXNzaWJsZUJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2li
bGVCYXNlLmNwcApAQCAtNjE2LDEwICs2MTYsMTAgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBBY2Nlc3NpYmxlQmFzZTo6YWNjU2VsZWN0KGxvbmcgc2VsZWN0aW9uRmxhZ3MsIFZBUklBTlQK
ICAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKIAogICAgIGlmIChzZWxlY3Rpb25GbGFncyAm
IFNFTEZMQUdfVEFLRVNFTEVDVElPTikgewotICAgICAgICBpZiAocGFyZW50T2JqZWN0LT5pc0xp
c3RCb3goKSkgeworICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eUxpc3RCb3g+KCpwYXJlbnRP
YmplY3QpKSB7CiAgICAgICAgICAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+
ID4gc2VsZWN0ZWRDaGlsZHJlbigxKTsKICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGRyZW5bMF0g
PSBjaGlsZE9iamVjdDsKLSAgICAgICAgICAgIHRvQWNjZXNzaWJpbGl0eUxpc3RCb3gocGFyZW50
T2JqZWN0KS0+c2V0U2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuKTsKKyAgICAgICAg
ICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94PigqcGFyZW50T2JqZWN0KS5zZXRTZWxl
Y3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW4pOwogICAgICAgICB9IGVsc2UgeyAvLyBhbnkg
ZWxlbWVudCBtYXkgYmUgc2VsZWN0YWJsZSBieSB2aXJ0dWUgb2YgaXQgaGF2aW5nIHRoZSBhcmlh
LXNlbGVjdGVkIHByb3BlcnR5CiAgICAgICAgICAgICBBU1NFUlQoIXBhcmVudE9iamVjdC0+aXNN
dWx0aVNlbGVjdGFibGUoKSk7CiAgICAgICAgICAgICBjaGlsZE9iamVjdC0+c2V0U2VsZWN0ZWQo
dHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9BY2Nlc3NpYmxlSW1hZ2UuY3Bw
IGIvU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUltYWdlLmNwcAppbmRleCBmZDVmNWY2N2M2
MTYwODYxNDQwNzk4MTM2ZmExY2E0MTRjNDc3Y2EwLi5lYjY0ZTNhYjg5NDBmNmJiN2U5N2YyMDdj
ODNiZjg1ZTBiY2I0Mzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9BY2Nlc3NpYmxl
SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVJbWFnZS5jcHAKQEAg
LTQxLDE2ICs0MSwxNiBAQCBBY2Nlc3NpYmxlSW1hZ2U6OkFjY2Vzc2libGVJbWFnZShBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBvYmosIEhXTkQgd2luZG93KQogCiBTdHJpbmcgQWNjZXNzaWJsZUltYWdl
OjpuYW1lKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QoKSkKKyAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+KCptX29i
amVjdCkpCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmxlQmFzZTo6bmFtZSgpOwogCi0gICAgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdCogb2JqID0gdG9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
KG1fb2JqZWN0KTsKKyAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0JiBvYmogPSBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0PigqbV9vYmplY3QpOwogCi0gICAgU3RyaW5nIGFy
aWFMYWJlbCA9IG9iai0+YXJpYUxhYmVsZWRCeUF0dHJpYnV0ZSgpOworICAgIFN0cmluZyBhcmlh
TGFiZWwgPSBvYmouYXJpYUxhYmVsZWRCeUF0dHJpYnV0ZSgpOwogICAgIGlmICghYXJpYUxhYmVs
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGFyaWFMYWJlbDsKIAotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgYWx0VGV4dCA9IG9iai0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6YWx0QXR0cik7
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhbHRUZXh0ID0gb2JqLmdldEF0dHJpYnV0ZShIVE1M
TmFtZXM6OmFsdEF0dHIpOwogICAgIGlmICghYWx0VGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBhbHRUZXh0OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240131</attachid>
            <date>2014-10-20 11:25:12 -0700</date>
            <delta_ts>2014-10-20 12:08:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137286-20141020112518.patch</filename>
            <type>text/plain</type>
            <size>99300</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0ODkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDRjNjJjNTA3OTA2YjlhYzNiZTM3NDQz
NzIyODdmYjgxM2Y3OGE2NmEuLmJiZDczYzIyZDM1YzE4MmVmMGYyNTcxNzcwYmZjMzI3YmUxNzdl
ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTQtMTAtMTkgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBBY2Nl
c3NpYmlsaXR5IG9iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNzI4NgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisg
ICAgICAgIFJlbW92ZSB0aGUgbGVnYWN5IFRZUEVfQ0FTVFNfQkFTRSgpIG1hY3JvIG5vdyB0aGF0
IGl0IGlzIG5vIGxvbmdlcgorICAgICAgICB1c2VkLgorCisgICAgICAgICogd3RmL0Fzc2VydGlv
bnMuaDoKKwogMjAxNC0xMC0xOCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAg
ICAgICAgIFdvcmtRdWV1ZSBkaXNwYXRjaGVzIGZ1bmN0aW9ucyBidXQgaXNu4oCZdCBhIEZ1bmN0
aW9uRGlzcGF0Y2hlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGJjY2U4NzZiMzhmMzEzNGZhYTZlMjkwZjQ5YTY2
MTI2NjY2OWNjNGIuLmE2N2MxYTA4NjdmYTg3MmQxOTU4MjgxNGE5MmVlMGQ5NWM3NWU2YTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNDIgQEAKKzIwMTQtMTAtMTkgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBB
Y2Nlc3NpYmlsaXR5IG9iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNzI4NgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgor
CisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIEFjY2Vzc2liaWxpdHkgb2Jq
ZWN0cyBhbmQgY2xlYW4gdXAgdGhlCisgICAgICAgIHN1cnJvdW5kaW5nIGNvZGUuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNo
ZTo6Zm9jdXNlZEltYWdlTWFwVUlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6Om5vdGlmaWNhdGlvblBvc3RUaW1lckZpcmVkKToKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5QVJJQUdyaWQ6OmFkZFRhYmxlQ2VsbENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlBUklBR3JpZDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpwYXJlbnRUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpyb3dJbmRleFJhbmdlKToKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OmRpc2Nsb3NlZFJvd3MpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpkaXNjbG9zZWRCeVJvdyk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OnBhcmVudFRhYmxlKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5oOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rOjppbWFnZU1hcExpbmtSZW5kZXJlcik6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmg6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5oOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eUxpc3RCb3g6OnNldFNlbGVjdGVkQ2hpbGRyZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3g6OnNlbGVjdGVkQ2hpbGRyZW4pOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3g6Omxpc3RCb3hPcHRpb25BY2Nlc3NpYmlsaXR5
T2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94Lmg6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5oOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZW51TGlzdDo6YWRkQ2hpbGRyZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0OjpkaWRVcGRhdGVBY3RpdmVPcHRpb24p
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0Lmg6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uaDoKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwOjptZW51TGlzdE9wdGlvbkFj
Y2Vzc2liaWxpdHlPYmplY3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU1lbnVMaXN0UG9wdXAuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlN
b2NrT2JqZWN0Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGV4
dFVuZGVyRWxlbWVudCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRDaGlsZHJlblRvQXJyYXkpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2Nyb2xsVmlld0FuY2VzdG9yKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Z2V0RG9jdW1lbnRMaW5rcyk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpoYW5kbGVBY3RpdmVEZXNjZW5k
YW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
Ojppbmhlcml0c1ByZXNlbnRhdGlvbmFsUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjphZGRJbWFnZU1hcENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZFRleHRGaWVsZENoaWxkcmVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJlbW90ZVNWR1Jvb3RF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFy
aWFTZWxlY3RlZFJvd3MpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNWR1Jv
b3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3OjphZGRDaGlsZFNj
cm9sbGJhcik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmll
dy5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5oOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2xpZGVyOjphZGRDaGlsZHJlbik6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmg6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5U3BpbkJ1dHRvbjo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVNwaW5CdXR0b25QYXJ0OjpwcmVzcyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJs
ZTo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjph
ZGRDaGlsZHJlbkZyb21TZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlU
YWJsZTo6aGVhZGVyQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlU
YWJsZTo6Y29sdW1uSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFi
bGU6OnJvd0hlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjpj
ZWxsRm9yQ29sdW1uQW5kUm93KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZS5oOgorICAgICAgICBNYWtlIGlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgcHVibGljIGFu
ZCBtYXJrIGFzIGZpbmFsIHNvIHRoYXQgY2FsbGVycworICAgICAgICBjYW4gYmVuZWZpdCBmcm9t
IHRpZ2h0ZXIgdHlwaW5nLCBhcyBpc0FjY2Vzc2liaWxpdHlUYWJsZSgpIGlzCisgICAgICAgIHN0
cmljdGVyIHRoYW4gaXNUYWJsZSgpLiBpc1RhYmxlKCkgaW5kaWNhdGVzIHRoYXQgdGhlIG9iamVj
dCBpcyBhbgorICAgICAgICBBY2Nlc3NpYmlsaXR5VGFibGUgYW5kIGlzIGVxdWl2YWxlbnQgdG8g
aXM8QWNjZXNzaWJpbGl0eVRhYmxlPihvYmplY3QpLgorICAgICAgICBpc0FjY2Vzc2liaWxpdHlU
YWJsZSgpIGlzIGVxdWl2YWxlbnQgdG8gImlzVGFibGUoKSAmJiByZW5kZXJlcigpIi4KKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpwYXJlbnRUYWJsZSk6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmg6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjpoZWFkZXJPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjphZGRDaGlsZHJlbik6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaDoKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXI6OmFkZENoaWxkcmVu
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OnBhcmVudFRhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6aGVhZGVyT2JqZWN0KToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5oOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3Bw
OgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkNsZWFyU2VsZWN0aW9uKToKKyAg
ICAgICAgKHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25TZWxlY3RBbGxTZWxlY3Rpb24pOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5j
cHA6CisgICAgICAgIChjb3JlKToKKyAgICAgICAgKGNlbGwpOgorICAgICAgICAoY2VsbEF0SW5k
ZXgpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0SW5kZXhBdCk6CisgICAgICAg
ICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXROQ29sdW1ucyk6CisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlVGFibGVHZXROUm93cyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRD
b2x1bW5IZWFkZXIpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93SGVhZGVy
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
VGFibGVDZWxsLmNwcDoKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxHZXRDb2x1
bW5IZWFkZXJDZWxscyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVDZWxsR2V0Um93
SGVhZGVyQ2VsbHMpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlQ2VsbEdldENvbHVt
blNwYW4pOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlQ2VsbEdldFJvd1NwYW4pOgor
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlQ2VsbEdldFBvc2l0aW9uKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eVBhc3N3b3JkRmllbGRM
ZW5ndGgpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBjb252ZXJ0UG9pbnRUb1NjcmVlblNwYWNlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBjb252ZXJ0UmVjdFRvU2NyZWVuU3BhY2U6XSk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06Cisg
ICAgICAgIChBWEF0dHJpYnV0ZVN0cmluZ1NldEVsZW1lbnQpOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5h
bWVzXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNvbnZlcnRQ
b2ludFRvU2NyZWVuU3BhY2U6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIHN1YnJvbGVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgcm9sZURlc2NyaXB0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIHNjcm9sbFZpZXdQYXJlbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5U2hvd0NvbnRleHRNZW51
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxp
dHlTZXRWYWx1ZTpmb3JBdHRyaWJ1dGU6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpmb3JQYXJhbWV0ZXI6XSk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAg
ICAoUmVuZGVyTWVudUxpc3Q6OmRpZFVwZGF0ZUFjdGl2ZU9wdGlvbik6CisKIDIwMTQtMTAtMTkg
IEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIEF2b2lkIHVubmVj
ZXNzYXJ5IE5TVVJMUmVzcG9uc2UgY29uc3RydWN0aW9uIGZvciBRdWlja0xvb2sgb24gaU9TCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKaW5kZXggMTkzYmE1OGE2ZTk3ZjE1MmQ3NjkzMjAwNTQyNGI5MDAwZWQ3ZGJh
Yi4uMDQwYWFlZjg5ODRkNjI1NDViZTJhMzQ5NGNkYjc3NDE3Nzc0YjZiNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE0LTEwLTE5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgQWNjZXNz
aWJpbGl0eSBvYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzcyODYKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAg
ICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBBY2Nlc3NpYmlsaXR5IG9iamVjdHMu
CisKKyAgICAgICAgKiBBY2Nlc3NpYmxlQmFzZS5jcHA6CisgICAgICAgIChBY2Nlc3NpYmxlQmFz
ZTo6YWNjU2VsZWN0KToKKyAgICAgICAgKiBBY2Nlc3NpYmxlSW1hZ2UuY3BwOgorICAgICAgICAo
QWNjZXNzaWJsZUltYWdlOjpuYW1lKToKKwogMjAxNC0xMC0xOCAgcGVhdm9Ab3V0bG9vay5jb20g
IDxwZWF2b0BvdXRsb29rLmNvbT4KIAogICAgICAgICBbV2luQ2Fpcm9dIFJlcGFpbnQgaXNzdWVz
IHdpdGggYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9Bc3NlcnRpb25zLmggYi9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmgKaW5kZXggNzJiZTNk
NjM4Y2QzNWQ1ODVjNTRhZWI4ZTY4YzcwYjU4NTQyZmVjMi4uMDU0NzUwYWFkZjliZTQ4NWYwZjg0
ZWNmMjZkNTBkMjVlOWExNTQ4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQXNzZXJ0aW9u
cy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuaApAQCAtMzgyLDMyICszODIsNCBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCkKICNkZWZpbmUg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKSBBU1NFUlRfTk9UX1JFQUNIRUQoKQogI2VuZGlm
CiAKLS8qIFRZUEUgQ0FTVCAqLwotCi0vLyBGSVhNRTogVGhpcyBtYWNybyBzaG91bGQgYmUgcmVt
b3ZlZCBvbmNlIHRoZSBjb2RlIGJhc2UgaXMgcG9ydGVkIHRvIHVzaW5nCi0vLyB0aGUgbmV3IFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfKigpIG1hY3JvLgotI2RlZmluZSBUWVBFX0NBU1RTX0JBU0Uo
VG9DbGFzc05hbWUsIGFyZ3VtZW50VHlwZSwgYXJndW1lbnROYW1lLCBwb2ludGVyUHJlZGljYXRl
LCByZWZlcmVuY2VQcmVkaWNhdGUpIFwKLWlubGluZSBUb0NsYXNzTmFtZSogdG8jI1RvQ2xhc3NO
YW1lKGFyZ3VtZW50VHlwZSogYXJndW1lbnROYW1lKSBcCi17IFwKLSAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTighYXJndW1lbnROYW1lIHx8IChwb2ludGVyUHJlZGljYXRlKSk7
IFwKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG9DbGFzc05hbWUqPihhcmd1bWVudE5hbWUpOyBc
Ci19IFwKLWlubGluZSBjb25zdCBUb0NsYXNzTmFtZSogdG8jI1RvQ2xhc3NOYW1lKGNvbnN0IGFy
Z3VtZW50VHlwZSogYXJndW1lbnROYW1lKSBcCi17IFwKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTighYXJndW1lbnROYW1lIHx8IChwb2ludGVyUHJlZGljYXRlKSk7IFwKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVG9DbGFzc05hbWUqPihhcmd1bWVudE5hbWUpOyBc
Ci19IFwKLWlubGluZSBUb0NsYXNzTmFtZSYgdG8jI1RvQ2xhc3NOYW1lKGFyZ3VtZW50VHlwZSYg
YXJndW1lbnROYW1lKSBcCi17IFwKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihyZWZlcmVuY2VQcmVkaWNhdGUpOyBcCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRvQ2xhc3NO
YW1lJj4oYXJndW1lbnROYW1lKTsgXAotfSBcCi1pbmxpbmUgY29uc3QgVG9DbGFzc05hbWUmIHRv
IyNUb0NsYXNzTmFtZShjb25zdCBhcmd1bWVudFR5cGUmIGFyZ3VtZW50TmFtZSkgXAoteyBcCi0g
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocmVmZXJlbmNlUHJlZGljYXRlKTsg
XAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBUb0NsYXNzTmFtZSY+KGFyZ3VtZW50TmFt
ZSk7IFwKLX0gXAotdm9pZCB0byMjVG9DbGFzc05hbWUoY29uc3QgVG9DbGFzc05hbWUqKTsgXAot
dm9pZCB0byMjVG9DbGFzc05hbWUoY29uc3QgVG9DbGFzc05hbWUmKTsKLQogI2VuZGlmIC8qIFdU
Rl9Bc3NlcnRpb25zX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwCmluZGV4IDE2MzEyYjAzOTk5ZGU4YTM0MWJiYmY1MDVlYzY1NWFjNDgyZTc0
MjIuLjAyNDUyZDU5MDc3NWMxODI3OThiYzljMWVhYjQ5M2FiYmYyNzY5OWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtMTU5LDEwICsx
NTksMTAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Zm9jdXNlZEltYWdl
TWFwVUlFbGVtZW50KEhUTUxBcmVhRWxlbWVudCogYXIKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgCiAgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IGF4UmVuZGVySW1hZ2UtPmNoaWxk
cmVuKCkpIHsKLSAgICAgICAgaWYgKCFjaGlsZC0+aXNJbWFnZU1hcExpbmsoKSkKKyAgICAgICAg
aWYgKCFpczxBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rPigqY2hpbGQpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIAotICAgICAgICBpZiAodG9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBM
aW5rKGNoaWxkLmdldCgpKS0+YXJlYUVsZW1lbnQoKSA9PSBhcmVhRWxlbWVudCkKKyAgICAgICAg
aWYgKGRvd25jYXN0PEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbms+KCpjaGlsZCkuYXJlYUVsZW1l
bnQoKSA9PSBhcmVhRWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiBjaGlsZC5nZXQoKTsKICAg
ICB9ICAgIAogICAgIApAQCAtNzIwLDEwICs3MjAsOCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6Om5v
dGlmaWNhdGlvblBvc3RUaW1lckZpcmVkKFRpbWVyPEFYT2JqZWN0Q2FjaGU+JikKICNpZm5kZWYg
TkRFQlVHCiAgICAgICAgIC8vIE1ha2Ugc3VyZSBub25lIG9mIHRoZSByZW5kZXIgdmlld3MgYXJl
IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGxheWVkIG91dC4KICAgICAgICAgLy8gTm90aWZpY2F0
aW9ucyBzaG91bGQgb25seSBiZSBzZW50IGFmdGVyIHRoZSByZW5kZXJlciBoYXMgZmluaXNoZWQK
LSAgICAgICAgaWYgKG9iai0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKLSAgICAg
ICAgICAgIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqIHJlbmRlck9iaiA9IHRvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdChvYmopOwotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IHJlbmRlck9iai0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJlcikKKyAg
ICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+KCpvYmopKSB7CisgICAgICAg
ICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Pigqb2JqKS5yZW5kZXJlcigpKQogICAgICAgICAgICAgICAgIEFTU0VSVCghcmVuZGVyZXIt
PnZpZXcoKS5sYXlvdXRTdGF0ZSgpKTsKICAgICAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAKaW5k
ZXggMTFlMjFmMGUwZmY3OWQ5MmVjYWQ2ZjI5ZDExOWU1OGJjNDgxMmFhNi4uNTg1ZmIwNzNkNzMx
OTNjNDliYzlmYmM4MjhhNTBkMGZkNzNjMmQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcApAQCAtNTUsMjkgKzU1
LDI5IEBAIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eUFSSUFHcmlkPiBBY2Nlc3NpYmlsaXR5QVJJ
QUdyaWQ6OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJlCiAKIGJvb2wgQWNjZXNzaWJpbGl0eUFSSUFH
cmlkOjphZGRUYWJsZUNlbGxDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCwgSGFzaFNl
dDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNv
dW50KQogewotICAgIGlmICghY2hpbGQgfHwgKCFjaGlsZC0+aXNUYWJsZVJvdygpICYmIGNoaWxk
LT5hcmlhUm9sZUF0dHJpYnV0ZSgpICE9IFJvd1JvbGUpKQorICAgIGlmICghY2hpbGQgfHwgKCFp
czxBY2Nlc3NpYmlsaXR5VGFibGVSb3c+KCpjaGlsZCkgJiYgIWlzPEFjY2Vzc2liaWxpdHlBUklB
R3JpZFJvdz4oKmNoaWxkKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAg
QWNjZXNzaWJpbGl0eVRhYmxlUm93KiByb3cgPSB0b0FjY2Vzc2liaWxpdHlUYWJsZVJvdyhjaGls
ZCk7Ci0gICAgaWYgKGFwcGVuZGVkUm93cy5jb250YWlucyhyb3cpKQorICAgIGF1dG8mIHJvdyA9
IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKmNoaWxkKTsKKyAgICBpZiAoYXBwZW5k
ZWRSb3dzLmNvbnRhaW5zKCZyb3cpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAog
ICAgIC8vIHN0b3JlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb2x1bW5zCi0gICAgdW5zaWduZWQg
cm93Q2VsbENvdW50ID0gcm93LT5jaGlsZHJlbigpLnNpemUoKTsKKyAgICB1bnNpZ25lZCByb3dD
ZWxsQ291bnQgPSByb3cuY2hpbGRyZW4oKS5zaXplKCk7CiAgICAgaWYgKHJvd0NlbGxDb3VudCA+
IGNvbHVtbkNvdW50KQogICAgICAgICBjb2x1bW5Db3VudCA9IHJvd0NlbGxDb3VudDsKICAgICAK
LSAgICByb3ctPnNldFJvd0luZGV4KChpbnQpbV9yb3dzLnNpemUoKSk7ICAgICAgICAKLSAgICBt
X3Jvd3MuYXBwZW5kKHJvdyk7CisgICAgcm93LnNldFJvd0luZGV4KChpbnQpbV9yb3dzLnNpemUo
KSk7CisgICAgbV9yb3dzLmFwcGVuZCgmcm93KTsKIAogICAgIC8vIFRyeSBhZGRpbmcgdGhlIHJv
dyBpZiBpdCdzIG5vdCBpZ25vcmluZyBhY2Nlc3NpYmlsaXR5LAogICAgIC8vIG90aGVyd2lzZSBh
ZGQgaXRzIGNoaWxkcmVuICh0aGUgY2VsbHMpIGFzIHRoZSBncmlkJ3MgY2hpbGRyZW4uCi0gICAg
aWYgKCFyb3ctPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKLSAgICAgICAgbV9jaGlsZHJlbi5h
cHBlbmQocm93KTsKKyAgICBpZiAoIXJvdy5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCisgICAg
ICAgIG1fY2hpbGRyZW4uYXBwZW5kKCZyb3cpOwogICAgIGVsc2UKLSAgICAgICAgbV9jaGlsZHJl
bi5hcHBlbmRWZWN0b3Iocm93LT5jaGlsZHJlbigpKTsKKyAgICAgICAgbV9jaGlsZHJlbi5hcHBl
bmRWZWN0b3Iocm93LmNoaWxkcmVuKCkpOwogCi0gICAgYXBwZW5kZWRSb3dzLmFkZChyb3cpOwor
ICAgIGFwcGVuZGVkUm93cy5hZGQoJnJvdyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEz
NCwxMiArMTM0LDEyIEBAIHZvaWQgQWNjZXNzaWJpbGl0eUFSSUFHcmlkOjphZGRDaGlsZHJlbigp
CiAgICAgCiAgICAgLy8gbWFrZSB0aGUgY29sdW1ucyBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGNv
bHVtbnMgaW4gdGhlIGZpcnN0IGJvZHkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29s
dW1uQ291bnQ7ICsraSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4qIGNvbHVt
biA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uKGF4Q2FjaGUtPmdldE9yQ3JlYXRlKENvbHVt
blJvbGUpKTsKLSAgICAgICAgY29sdW1uLT5zZXRDb2x1bW5JbmRleCgoaW50KWkpOwotICAgICAg
ICBjb2x1bW4tPnNldFBhcmVudCh0aGlzKTsKLSAgICAgICAgbV9jb2x1bW5zLmFwcGVuZChjb2x1
bW4pOwotICAgICAgICBpZiAoIWNvbHVtbi0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQotICAg
ICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoY29sdW1uKTsKKyAgICAgICAgYXV0byYgY29sdW1u
ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uPigqYXhDYWNoZS0+Z2V0T3JDcmVh
dGUoQ29sdW1uUm9sZSkpOworICAgICAgICBjb2x1bW4uc2V0Q29sdW1uSW5kZXgoc3RhdGljX2Nh
c3Q8aW50PihpKSk7CisgICAgICAgIGNvbHVtbi5zZXRQYXJlbnQodGhpcyk7CisgICAgICAgIG1f
Y29sdW1ucy5hcHBlbmQoJmNvbHVtbik7CisgICAgICAgIGlmICghY29sdW1uLmFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQoKSkKKyAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKCZjb2x1bW4pOwog
ICAgIH0KICAgICAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXJDb250YWluZXJPYmpl
Y3QgPSBoZWFkZXJDb250YWluZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwCmluZGV4IDU4YmVkMmJl
ODNmNTZmZTc2NjY2ZDA1NWQ4ZjhkMWFjOWM3YTVjMzMuLmQxZGM5Mzk3MGQ1OGM5ZDBkYjM2NjU4
MjNlZGFmZjlkNjljMWQ2YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcApAQCAtNTYsNyArNTYsNyBA
QCBBY2Nlc3NpYmlsaXR5VGFibGUqIEFjY2Vzc2liaWxpdHlBUklBR3JpZENlbGw6OnBhcmVudFRh
YmxlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgaWYgKHBhcmVu
dC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHRvQWNjZXNzaWJpbGl0
eVRhYmxlKHBhcmVudCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFi
bGU+KHBhcmVudCk7CiAKICAgICAvLyBJdCBjb3VsZCBoYXBwZW4gdGhhdCB3ZSBoYWRuJ3QgcmVh
Y2hlZCB0aGUgcGFyZW50IHRhYmxlIHlldCAoaW4KICAgICAvLyBjYXNlIG9iamVjdHMgZm9yIHJv
d3Mgd2VyZSBub3QgaWdub3JpbmcgYWNjZXNzaWJpbGl0eSkgc28gZm9yCkBAIC02NSw3ICs2NSw3
IEBAIEFjY2Vzc2liaWxpdHlUYWJsZSogQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cGFyZW50
VGFibGUoKSBjb25zdAogICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQWNjZXNzaWJpbGl0
eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIHJldHVybiB0b0Fj
Y2Vzc2liaWxpdHlUYWJsZShwYXJlbnQpOworICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGU+KHBhcmVudCk7CiB9CiAgICAgCiB2b2lkIEFjY2Vzc2liaWxpdHlBUklBR3JpZENl
bGw6OnJvd0luZGV4UmFuZ2Uoc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4mIHJvd1Jhbmdl
KQpAQCAtNzQsMTMgKzc0LDEzIEBAIHZvaWQgQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cm93
SW5kZXhSYW5nZShzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiYgcm93CiAgICAgaWYgKCFw
YXJlbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwYXJlbnQtPmlzVGFibGVSb3coKSkg
eworICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGVSb3c+KCpwYXJlbnQpKSB7CiAgICAgICAg
IC8vIFdlIGFscmVhZHkgZ290IGEgdGFibGUgcm93LCB1c2UgaXRzIEFQSS4KLSAgICAgICAgcm93
UmFuZ2UuZmlyc3QgPSB0b0FjY2Vzc2liaWxpdHlUYWJsZVJvdyhwYXJlbnQpLT5yb3dJbmRleCgp
OworICAgICAgICByb3dSYW5nZS5maXJzdCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZVJv
dz4oKnBhcmVudCkucm93SW5kZXgoKTsKICAgICB9IGVsc2UgaWYgKHBhcmVudC0+aXNBY2Nlc3Np
YmlsaXR5VGFibGUoKSkgewogICAgICAgICAvLyBXZSByZWFjaGVkIHRoZSBwYXJlbnQgdGFibGUs
IHNvIHdlIG5lZWQgdG8gaW5zcGVjdCBpdHMKICAgICAgICAgLy8gY2hpbGRyZW4gdG8gZGV0ZXJt
aW5lIHRoZSByb3cgaW5kZXggZm9yIHRoZSBjZWxsIGluIGl0LgotICAgICAgICB1bnNpZ25lZCBj
b2x1bW5Db3VudCA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlKHBhcmVudCktPmNvbHVtbkNvdW50KCk7
CisgICAgICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlPigqcGFyZW50KS5jb2x1bW5Db3VudCgpOwogICAgICAgICBpZiAoIWNvbHVtbkNvdW50KQog
ICAgICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5jcHAKaW5kZXggOWRmYTBiZTQwNjE5
OGVmYzlhN2IyNDZjZjczODcxMjM1ZmNiMTcwMy4uMDkyY2E0NDQ2MmIzZjkxZWM2OGE1MGI1OTU3
ZWI5YWVjMmMyMWQyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcApAQCAtNzMsNyArNzMsNyBAQCB2b2lk
IEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6ZGlzY2xvc2VkUm93cyhBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3ImIGRpc2NsbwogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgdW5zaWduZWQg
bGV2ZWwgPSBoaWVyYXJjaGljYWxMZXZlbCgpOwotICAgIGF1dG8mIGFsbFJvd3MgPSB0b0FjY2Vz
c2liaWxpdHlUYWJsZShwYXJlbnQpLT5yb3dzKCk7CisgICAgYXV0byYgYWxsUm93cyA9IGRvd25j
YXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnBhcmVudCkucm93cygpOwogICAgIGludCByb3dDb3Vu
dCA9IGFsbFJvd3Muc2l6ZSgpOwogICAgIGZvciAoaW50IGsgPSBpbmRleCArIDE7IGsgPCByb3dD
b3VudDsgKytrKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvdyA9IGFsbFJvd3Nb
a10uZ2V0KCk7CkBAIC0xMDAsNyArMTAwLDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNz
aWJpbGl0eUFSSUFHcmlkUm93OjpkaXNjbG9zZWRCeVJvdygpIGNvbnN0CiAgICAgCiAgICAgLy8g
U2VhcmNoIGZvciB0aGUgcHJldmlvdXMgcm93IHRoYXQgbWF0Y2hlcyB0aGUgY29ycmVjdCBsZXZl
bC4KICAgICBpbnQgaW5kZXggPSByb3dJbmRleCgpOwotICAgIGF1dG8mIGFsbFJvd3MgPSB0b0Fj
Y2Vzc2liaWxpdHlUYWJsZShwYXJlbnQpLT5yb3dzKCk7CisgICAgYXV0byYgYWxsUm93cyA9IGRv
d25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4ocGFyZW50KS0+cm93cygpOwogICAgIGludCByb3dD
b3VudCA9IGFsbFJvd3Muc2l6ZSgpOwogICAgIGlmIChpbmRleCA+PSByb3dDb3VudCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMjAsOCArMTIwLDggQEAgQWNjZXNzaWJpbGl0eVRhYmxl
KiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OnBhcmVudFRhYmxlKCkgY29uc3QKICAgICAvLyBv
bmx5IGhhdmUgInJvdyIgZWxlbWVudHMsIGJ1dCBpZiBub3QsIHdlIHN0aWxsIHNob3VsZCBoYW5k
bGUgaXQgZ3JhY2VmdWxseSBieSBmaW5kaW5nIHRoZSByaWdodCB0YWJsZS4KICAgICBmb3IgKEFj
Y2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9iamVjdCgpOyBwYXJlbnQ7IHBhcmVu
dCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKICAgICAgICAgLy8gVGhlIHBhcmVudCB0YWJs
ZSBmb3IgYW4gQVJJQSBncmlkIHJvdyBzaG91bGQgYmUgYW4gQVJJQSB0YWJsZS4KLSAgICAgICAg
aWYgKHBhcmVudC0+aXNUYWJsZSgpICYmIHBhcmVudC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSAm
JiB0b0FjY2Vzc2liaWxpdHlUYWJsZShwYXJlbnQpLT5pc0FyaWFUYWJsZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIHRvQWNjZXNzaWJpbGl0eVRhYmxlKHBhcmVudCk7CisgICAgICAgIGlmIChwYXJl
bnQtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxl
PigqcGFyZW50KS5pc0FyaWFUYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlUYWJsZT4ocGFyZW50KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIG51bGxw
dHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlBUklBR3JpZFJvdy5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5QVJJQUdyaWRSb3cuaAppbmRleCAzM2ZmYTU2MGE2Y2Y0NGViMWE5NWU3ZDljOGU4YTlmM2M4
NGQwYzVjLi4zNWU2ZDQxMTdkOGFjNzFjMTQxZWVmYjVmNDYwYzRmN2ZiMWQ0NTMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJv
dy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFH
cmlkUm93LmgKQEAgLTUzLDggKzUzLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEFjY2Vzc2li
aWxpdHlUYWJsZSogcGFyZW50VGFibGUoKSBjb25zdCBvdmVycmlkZTsKIH07IAogCi1BQ0NFU1NJ
QklMSVRZX09CSkVDVF9UWVBFX0NBU1RTKEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdywgaXNBUklB
VHJlZUdyaWRSb3coKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdywgaXNBUklB
VHJlZUdyaWRSb3coKSkKKwogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvd19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFn
ZU1hcExpbmsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
SW1hZ2VNYXBMaW5rLmNwcAppbmRleCBhZTk1N2YwOGQyNjU5YTk1ZTQ1NWFjNmZjYTJmNjNhZWFm
YjQwZTYzLi45YTlhZmI0ODZjNTg3ZDk0MjYxZjkyYmI0MDk2ZDZlNDU2ZmU4ZDMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExp
bmsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUlt
YWdlTWFwTGluay5jcHAKQEAgLTE0MCw4ICsxNDAsOCBAQCBSZW5kZXJFbGVtZW50KiBBY2Nlc3Np
YmlsaXR5SW1hZ2VNYXBMaW5rOjppbWFnZU1hcExpbmtSZW5kZXJlcigpIGNvbnN0CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBudWxscHRy
OwotICAgIGlmIChtX3BhcmVudCAmJiBtX3BhcmVudC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0KCkpCi0gICAgICAgIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4odG9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0KG1fcGFyZW50KS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKGlz
PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+KG1fcGFyZW50KSkKKyAgICAgICAgcmVuZGVyZXIg
PSBkb3duY2FzdDxSZW5kZXJFbGVtZW50Pihkb3duY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0PigqbV9wYXJlbnQpLnJlbmRlcmVyKCkpOwogICAgIGVsc2UKICAgICAgICAgcmVuZGVyZXIg
PSBtX21hcEVsZW1lbnQtPnJlbmRlcmVyKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsuaCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5oCmluZGV4IDkx
ZjVjYTZmYTg3Yzg0NDZlNWI0ODc1NDE4ZmQwOWNkODAwMTBhZDAuLjUyZWNiZmNjNDNhODUyYjFk
ZDhiZTg1N2E3ZTU0ZjI3MmM3ODMyZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5oCkBAIC04MCw5ICs4MCw5
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzSW1hZ2VNYXBMaW5rKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1BhdGgoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiB9OwotCi1BQ0NFU1NJQklMSVRZX09CSkVD
VF9UWVBFX0NBU1RTKEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmssIGlzSW1hZ2VNYXBMaW5rKCkp
CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QUNDRVNTSUJJTElUWShBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLCBpc0ltYWdlTWFwTGluaygp
KQorCiAjZW5kaWYgLy8gQWNjZXNzaWJpbGl0eUltYWdlTWFwTGlua19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0LmgKaW5kZXggNDhiYjJmNjI1
MmU5N2QyMWYzOGM1ZjE5YTIzNzFiNzY0NjZjODMwZC4uZjNlZmU0OTRkNDQyYTNmODJmMWRhYmU4
NTY0NzQ2MTgxZDkyNDI2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eUxpc3QuaApAQCAtNTIsOCArNTIsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgQWNjZXNzaWJpbGl0eVJvbGUgZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKSBvdmVycmlk
ZTsKIH07CiAKLUFDQ0VTU0lCSUxJVFlfT0JKRUNUX1RZUEVfQ0FTVFMoQWNjZXNzaWJpbGl0eUxp
c3QsIGlzTGlzdCgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQUNDRVNTSUJJTElUWShBY2Nlc3NpYmlsaXR5TGlzdCwgaXNMaXN0KCkpCisKICNl
bmRpZiAvLyBBY2Nlc3NpYmlsaXR5TGlzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwCmluZGV4IDM1NjFlZTZkYWQxYTI2
OTgwZTdhMzFhNDQ5M2RhYmYyN2YzNTJiZGEuLmEzNjBkZDMzODIzNDliMzkyMDYzMGZlYzJiYjAy
MTk3ZjA0YzU1YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUxpc3RCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwCkBAIC05MiwxNiArOTIsMTYgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5TGlzdEJveDo6c2V0U2VsZWN0ZWRDaGlsZHJlbihjb25zdCBBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IKICAgICAKICAgICAvLyBkaXNhYmxlIGFueSBzZWxlY3RlZCBvcHRpb25zCiAg
ICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKLSAgICAgICAgQWNjZXNz
aWJpbGl0eUxpc3RCb3hPcHRpb24qIGxpc3RCb3hPcHRpb24gPSB0b0FjY2Vzc2liaWxpdHlMaXN0
Qm94T3B0aW9uKGNoaWxkLmdldCgpKTsKLSAgICAgICAgaWYgKGxpc3RCb3hPcHRpb24tPmlzU2Vs
ZWN0ZWQoKSkKLSAgICAgICAgICAgIGxpc3RCb3hPcHRpb24tPnNldFNlbGVjdGVkKGZhbHNlKTsK
KyAgICAgICAgYXV0byYgbGlzdEJveE9wdGlvbiA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlMaXN0
Qm94T3B0aW9uPigqY2hpbGQpOworICAgICAgICBpZiAobGlzdEJveE9wdGlvbi5pc1NlbGVjdGVk
KCkpCisgICAgICAgICAgICBsaXN0Qm94T3B0aW9uLnNldFNlbGVjdGVkKGZhbHNlKTsKICAgICB9
CiAgICAgCiAgICAgZm9yIChjb25zdCBhdXRvJiBvYmogOiBjaGlsZHJlbikgewogICAgICAgICBp
ZiAob2JqLT5yb2xlVmFsdWUoKSAhPSBMaXN0Qm94T3B0aW9uUm9sZSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICB0b0FjY2Vzc2liaWxpdHlMaXN0Qm94
T3B0aW9uKG9iai5nZXQoKSktPnNldFNlbGVjdGVkKHRydWUpOworICAgICAgICBkb3duY2FzdDxB
Y2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbj4oKm9iaikuc2V0U2VsZWN0ZWQodHJ1ZSk7CiAgICAg
fQogfQogICAgIApAQCAtMTEzLDcgKzExMyw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUxpc3RCb3g6
OnNlbGVjdGVkQ2hpbGRyZW4oQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiByZXN1bHQpCiAg
ICAgICAgIGFkZENoaWxkcmVuKCk7CiAgICAgICAgIAogICAgIGZvciAoY29uc3QgYXV0byYgY2hp
bGQgOiBtX2NoaWxkcmVuKSB7Ci0gICAgICAgIGlmICh0b0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0
aW9uKGNoaWxkLmdldCgpKS0+aXNTZWxlY3RlZCgpKQorICAgICAgICBpZiAoZG93bmNhc3Q8QWNj
ZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24+KCpjaGlsZCkuaXNTZWxlY3RlZCgpKQogICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChjaGlsZC5nZXQoKSk7CiAgICAgfSAgICAKIH0KQEAgLTEzOCwxMCAr
MTM4LDEwIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlMaXN0Qm94OjpsaXN0
Qm94T3B0aW9uQWNjZXNzaWJpbGl0eU9iamVjdChIVE1MCiAgICAgaWYgKCFlbGVtZW50IHx8IGVs
ZW1lbnQtPmhhc1RhZ05hbWUoaHJUYWcpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAK
LSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsaXN0Qm94T2JqZWN0ID0gbV9yZW5kZXJlci0+ZG9j
dW1lbnQoKS5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKExpc3RCb3hPcHRpb25Sb2xlKTsK
LSAgICB0b0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uKGxpc3RCb3hPYmplY3QpLT5zZXRIVE1M
RWxlbWVudChlbGVtZW50KTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBsaXN0Qm94T2JqZWN0
ID0gKm1fcmVuZGVyZXItPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShM
aXN0Qm94T3B0aW9uUm9sZSk7CisgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRp
b24+KGxpc3RCb3hPYmplY3QpLnNldEhUTUxFbGVtZW50KGVsZW1lbnQpOwogICAgIAotICAgIHJl
dHVybiBsaXN0Qm94T2JqZWN0OworICAgIHJldHVybiAmbGlzdEJveE9iamVjdDsKIH0KICAgICAK
IEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlMaXN0Qm94OjplbGVtZW50QWNjZXNz
aWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5oIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5oCmluZGV4IDI2
MTM1OWRlNjlhODdjYmMwMjRmYWYwNTY3ZWZkNGMwNzBmYzk1MzguLmYyMTY2ZjQyNGNmMjA3OTJi
NzljNWFiNTU1ZGRiOWRiYTMzY2Q2NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmgKQEAgLTU2LDkgKzU2LDkgQEAgcHJpdmF0
ZToKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsaXN0Qm94T3B0aW9uQWNjZXNzaWJpbGl0eU9i
amVjdChIVE1MRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVj
dCogZWxlbWVudEFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50JikgY29uc3Qgb3Zl
cnJpZGU7CiB9OwotCi1BQ0NFU1NJQklMSVRZX09CSkVDVF9UWVBFX0NBU1RTKEFjY2Vzc2liaWxp
dHlMaXN0Qm94LCBpc0xpc3RCb3goKSkKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vzc2liaWxpdHlMaXN0Qm94
LCBpc0xpc3RCb3goKSkKKwogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlMaXN0Qm94X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hP
cHRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RC
b3hPcHRpb24uaAppbmRleCAwNjBhNjA3YjRjYzNlZGJlODYyM2E3MTE5NjgyMDI4ZWNjMWUyZjU5
Li44ZTIyYjQzMjEyN2I5ZmNlYThhZjZkMDFhZDU4Y2E5OTM4YTVjYTNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9w
dGlvbi5oCkBAIC03NCw5ICs3NCw5IEBAIHByaXZhdGU6CiAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogbGlzdEJveE9wdGlvbkFjY2Vzc2liaWxpdHlPYmplY3QoSFRNTEVsZW1lbnQqKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgY29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdCBv
dmVycmlkZTsKIH07Ci0KLUFDQ0VTU0lCSUxJVFlfT0JKRUNUX1RZUEVfQ0FTVFMoQWNjZXNzaWJp
bGl0eUxpc3RCb3hPcHRpb24sIGlzTGlzdEJveE9wdGlvbigpKQogICAgIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZSAKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vz
c2liaWxpdHlMaXN0Qm94T3B0aW9uLCBpc0xpc3RCb3hPcHRpb24oKSkKKwogI2VuZGlmIC8vIEFj
Y2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcAppbmRleCA2ZTJjZTU0YzJmZTFh
N2EyYzk2NzA5NTg4MDM2ODUwNWNjN2I2ZDk2Li40MmRlODQ2MjU5OWY0MDY5NGU1ZjgxNjk3NjBl
MTZiZmI3Nzg5YzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlNZW51TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgQWNjZXNz
aWJpbGl0eU1lbnVMaXN0OjphZGRDaGlsZHJlbigpCiAgICAgaWYgKCFsaXN0KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICB0b0FjY2Vzc2liaWxpdHlNb2NrT2JqZWN0KGxpc3QpLT5zZXRQYXJlbnQo
dGhpcyk7CisgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU1vY2tPYmplY3Q+KCpsaXN0KS5zZXRQ
YXJlbnQodGhpcyk7CiAgICAgaWYgKGxpc3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkgewog
ICAgICAgICBjYWNoZS0+cmVtb3ZlKGxpc3QtPmF4T2JqZWN0SUQoKSk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlNZW51TGlzdDo6ZGlkVXBk
YXRlQWN0aXZlT3B0aW9uKGludCBvcHRpb25JbmRleCkKICAgICBjb25zdCBhdXRvJiBjaGlsZE9i
amVjdHMgPSBjaGlsZHJlbigpOwogICAgIGlmICghY2hpbGRPYmplY3RzLmlzRW1wdHkoKSkgewog
ICAgICAgICBBU1NFUlQoY2hpbGRPYmplY3RzLnNpemUoKSA9PSAxKTsKLSAgICAgICAgQVNTRVJU
KGNoaWxkT2JqZWN0c1swXS0+aXNNZW51TGlzdFBvcHVwKCkpOworICAgICAgICBBU1NFUlQoaXM8
QWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXA+KCpjaGlsZE9iamVjdHNbMF0pKTsKIAogICAgICAg
ICAvLyBXZSBtaWdodCBiZSBjYWxsaW5nIHRoaXMgbWV0aG9kIGluIHNpdHVhdGlvbnMgd2hlcmUg
dGhlIHJlbmRlcmVycyBmb3IgbGlzdCBpdGVtcwogICAgICAgICAvLyBhc3NvY2lhdGVkIHRvIHRo
ZSBtZW51IGxpc3QgaGF2ZSBub3QgYmVlbiBjcmVhdGVkIChlLmcuIHRoZXkgbWlnaHQgYmUgcmVu
ZGVyZWQKQEAgLTEyMSwxMCArMTIxLDggQEAgdm9pZCBBY2Nlc3NpYmlsaXR5TWVudUxpc3Q6OmRp
ZFVwZGF0ZUFjdGl2ZU9wdGlvbihpbnQgb3B0aW9uSW5kZXgpCiAgICAgICAgIC8vIFlvdSBjYW4g
cmVwcm9kdWNlIHRoZSBpc3N1ZSBpbiB0aGUgR1RLKyBwb3J0IGJ5IHJlbW92aW5nIHRoaXMgY2hl
Y2sgYW5kIHJ1bm5pbmcKICAgICAgICAgLy8gYWNjZXNzaWJpbGl0eS9pbnNlcnQtc2VsZWN0ZWQt
b3B0aW9uLWludG8tc2VsZWN0LWNhdXNlcy1jcmFzaC5odG1sICh3aWxsIGNyYXNoKS4KICAgICAg
ICAgaW50IHBvcHVwQ2hpbGRyZW5TaXplID0gc3RhdGljX2Nhc3Q8aW50PihjaGlsZE9iamVjdHNb
MF0tPmNoaWxkcmVuKCkuc2l6ZSgpKTsKLSAgICAgICAgaWYgKGNoaWxkT2JqZWN0c1swXS0+aXNN
ZW51TGlzdFBvcHVwKCkgJiYgb3B0aW9uSW5kZXggPj0gMCAmJiBvcHRpb25JbmRleCA8IHBvcHVw
Q2hpbGRyZW5TaXplKSB7Ci0gICAgICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9w
dXAqIHBvcHVwID0gdG9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cChjaGlsZE9iamVjdHNbMF0u
Z2V0KCkpKQotICAgICAgICAgICAgICAgIHBvcHVwLT5kaWRVcGRhdGVBY3RpdmVPcHRpb24ob3B0
aW9uSW5kZXgpOwotICAgICAgICB9CisgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5TWVudUxp
c3RQb3B1cD4oKmNoaWxkT2JqZWN0c1swXSkgJiYgb3B0aW9uSW5kZXggPj0gMCAmJiBvcHRpb25J
bmRleCA8IHBvcHVwQ2hpbGRyZW5TaXplKQorICAgICAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJp
bGl0eU1lbnVMaXN0UG9wdXA+KCpjaGlsZE9iamVjdHNbMF0pLmRpZFVwZGF0ZUFjdGl2ZU9wdGlv
bihvcHRpb25JbmRleCk7CiAgICAgfQogCiAgICAgY2FjaGUtPnBvc3ROb3RpZmljYXRpb24odGhp
cywgJmRvY3VtZW50LmdldCgpLCBBWE9iamVjdENhY2hlOjpBWE1lbnVMaXN0VmFsdWVDaGFuZ2Vk
LCBUYXJnZXRFbGVtZW50LCBQb3N0U3luY2hyb25vdXNseSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5oIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuaAppbmRleCA2Y2Y0ZmQy
YmRkYWRkNzcyZjEzYWQ5NjdiNjZiZWI4Y2Q0OWRmOWUxLi41YjFiMmQ0MDcwNzIxY2EyNzNjZDBm
NTRjNjM3OTk5NGMxOGM0MzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmgKQEAgLTU1LDggKzU1LDggQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCkgb3ZlcnJpZGU7CiB9OwogCi1BQ0NF
U1NJQklMSVRZX09CSkVDVF9UWVBFX0NBU1RTKEFjY2Vzc2liaWxpdHlNZW51TGlzdCwgaXNNZW51
TGlzdCgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQUNDRVNTSUJJTElUWShBY2Nlc3NpYmlsaXR5TWVudUxpc3QsIGlzTWVudUxpc3QoKSkKKwog
I2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlNZW51TGlzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uaAppbmRl
eCA2YmVlNThiMTgzN2VhYThjOTBmYzJiOWRiNzQ0MDNjNjdhOTE1YjIxLi41ZTM4M2Y3YmNmOWU0
YWY2NTE2ZDNkMWYzNGRkMjU0NjI5MGUxMjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmgKQEAgLTYy
LDggKzYyLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG1fZWxlbWVudDsK
IH07CiAKLUFDQ0VTU0lCSUxJVFlfT0JKRUNUX1RZUEVfQ0FTVFMoQWNjZXNzaWJpbGl0eU1lbnVM
aXN0T3B0aW9uLCBpc01lbnVMaXN0T3B0aW9uKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vzc2liaWxpdHlNZW51
TGlzdE9wdGlvbiwgaXNNZW51TGlzdE9wdGlvbigpKQorCiAjZW5kaWYgLy8gQWNjZXNzaWJpbGl0
eU1lbnVMaXN0T3B0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAKaW5kZXggNDY5YWZjYWEwMTQx
MmU1ZjY2NDNiZWNhNmVkZDdkNTAwNWI0MTJiYS4uZmUxYmQzNGI4NGFlNjQwOTU4ZWUwZGZiYTNk
YmY3OTljY2IyZDIzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAKQEAgLTczLDEzICs3MywxMCBA
QCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24qIEFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVw
OjptZW51TGlzdE9wdGlvbkFjY2Vzc2liaQogICAgIGlmICghaXM8SFRNTE9wdGlvbkVsZW1lbnQ+
KGVsZW1lbnQpIHx8ICFlbGVtZW50LT5pblJlbmRlcmVkRG9jdW1lbnQoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBkb2N1bWVu
dCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKE1lbnVMaXN0T3B0aW9uUm9sZSk7Ci0g
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ob2JqZWN0LT5pc01lbnVMaXN0T3B0
aW9uKCkpOworICAgIGF1dG8mIG9wdGlvbiA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlNZW51TGlz
dE9wdGlvbj4oKmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoTWVudUxp
c3RPcHRpb25Sb2xlKSk7CisgICAgb3B0aW9uLnNldEVsZW1lbnQoZWxlbWVudCk7CiAKLSAgICBB
Y2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24qIG9wdGlvbiA9IHRvQWNjZXNzaWJpbGl0eU1lbnVM
aXN0T3B0aW9uKG9iamVjdCk7Ci0gICAgb3B0aW9uLT5zZXRFbGVtZW50KGVsZW1lbnQpOwotCi0g
ICAgcmV0dXJuIG9wdGlvbjsKKyAgICByZXR1cm4gJm9wdGlvbjsKIH0KIAogYm9vbCBBY2Nlc3Np
YmlsaXR5TWVudUxpc3RQb3B1cDo6cHJlc3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5oIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5oCmluZGV4IGE0Yjdk
NjAwYTc5MjAxMzI1MTU2ZDk4ZTg2Mzg2YTRiZmU5Nzk2YzcuLmMxNTZhY2UzNmRkNDMwNWFhZTVl
Mjc3ZDY1Zjg1MzYyNWQzNDBiNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmgKQEAgLTYyLDggKzYyLDgg
QEAgcHJpdmF0ZToKICAgICBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24qIG1lbnVMaXN0T3B0
aW9uQWNjZXNzaWJpbGl0eU9iamVjdChIVE1MRWxlbWVudCopIGNvbnN0OwogfTsKIAotQUNDRVNT
SUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cCwgaXNN
ZW51TGlzdFBvcHVwKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLCBpc01l
bnVMaXN0UG9wdXAoKSkKKwogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1v
Y2tPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1v
Y2tPYmplY3QuaAppbmRleCBlMDRmZDdmN2UwNzI5ZDRhMjJmYTljOWRmMTBlNGJmNjVjOTk4Yzdk
Li40YjdiYzQ2ODAyN2NhNDU0MjVlZGI5N2NmZjUxNGYwMWEyMzk4ZGJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNb2NrT2JqZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TW9ja09iamVjdC5o
CkBAIC01MSwxMCArNTEsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNNb2NrT2Jq
ZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCBib29s
IGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci19OyAKK307
CiAKLUFDQ0VTU0lCSUxJVFlfT0JKRUNUX1RZUEVfQ0FTVFMoQWNjZXNzaWJpbGl0eU1vY2tPYmpl
Y3QsIGlzTW9ja09iamVjdCgpKQotICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKIAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vzc2liaWxpdHlNb2NrT2JqZWN0
LCBpc01vY2tPYmplY3QoKSkKKwogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlNb2NrT2JqZWN0X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdC5jcHAKaW5kZXggYThhNGU2YjM3ZDJlZjhhNmQ4MGFiMmEzYjcwODg4ODE0YmE5
ZDc2OS4uMDc5NjZjZjRlYTFhOGIxYjA2MzYxMDk4YzZmOWI3ZGE0NmZjNTIyMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdC5jcHAKQEAgLTE2NjksOSArMTY2OSw5IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6dGV4dFVuZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vCiAg
ICAgICAgIGlmICghc2hvdWxkVXNlQWNjZXNzaWJsaXR5T2JqZWN0SW5uZXJUZXh0KGNoaWxkLCBt
b2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChjaGlsZC0+aXNBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdCgpKSB7CisgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdD4oKmNoaWxkKSkgewogICAgICAgICAgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0
PiB0ZXh0T3JkZXI7Ci0gICAgICAgICAgICB0b0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KGNoaWxk
KS0+YWx0ZXJuYXRpdmVUZXh0KHRleHRPcmRlcik7CisgICAgICAgICAgICBkb3duY2FzdDxBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdD4oKmNoaWxkKS5hbHRlcm5hdGl2ZVRleHQodGV4dE9yZGVyKTsK
ICAgICAgICAgICAgIGlmICh0ZXh0T3JkZXIuc2l6ZSgpID4gMCAmJiB0ZXh0T3JkZXJbMF0udGV4
dC5sZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIGFwcGVuZE5hbWVUb1N0cmluZ0J1aWxkZXIo
YnVpbGRlciwgdGV4dE9yZGVyWzBdLnRleHQpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5oCmluZGV4IDdhYjI4MTZmMzE1NjA3YjBlOTFlMGU4NTYzNjBhNjlkNWM2OTYwYjAu
LmViNjE0YTE4Njc0NmIzZTA4ZTlmOGE5NmM4ZmI1MjE1OWM4OGNhZWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgK
QEAgLTIwNyw4ICsyMDcsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgdXNlc0FsdFRhZ0ZvclRleHRD
b21wdXRhdGlvbigpIGNvbnN0OwogfTsKIAotQUNDRVNTSUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNU
UyhBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCwgaXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCgpKQot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQUNDRVNT
SUJJTElUWShBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCwgaXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dCgpKQorCiAjZW5kaWYgLy8gQWNjZXNzaWJpbGl0eU5vZGVPYmplY3RfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXgg
ZTdjN2QyYzUwOTUyYmQ5YmJkNzc3Yjk1MDlhNjdmMzA1ZTRhYTE5Yy4uMmJhZjQ0YWFiMzczYTRk
Y2RkOGUzMjAyOTlhNzc0YzQ1ZmNmMWQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC01MDIsNyArNTAyLDcgQEAg
c3RhdGljIHZvaWQgYXBwZW5kQ2hpbGRyZW5Ub0FycmF5KEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
amVjdCwgYm9vbCBpc0ZvcndhcmQsIEEKIHsKICAgICAvLyBBIHRhYmxlJ3MgY2hpbGRyZW4gaW5j
bHVkZXMgZWxlbWVudHMgd2hvc2Ugb3duIGNoaWxkcmVuIGFyZSBhbHNvIHRoZSB0YWJsZSdzIGNo
aWxkcmVuIChkdWUgdG8gdGhlIHdheSB0aGUgTWFjIGV4cG9zZXMgdGFibGVzKS4KICAgICAvLyBU
aGUgcm93cyBmcm9tIHRoZSB0YWJsZSBzaG91bGQgYmUgcXVlcmllZCwgc2luY2UgdGhvc2UgYXJl
IGRpcmVjdCBkZXNjZW5kYW50cyBvZiB0aGUgdGFibGUsIGFuZCB0aGV5IGNvbnRhaW4gY29udGVu
dC4KLSAgICBjb25zdCBhdXRvJiBzZWFyY2hDaGlsZHJlbiA9IG9iamVjdC0+aXNBY2Nlc3NpYmls
aXR5VGFibGUoKSA/IHRvQWNjZXNzaWJpbGl0eVRhYmxlKG9iamVjdCktPnJvd3MoKSA6IG9iamVj
dC0+Y2hpbGRyZW4oKTsKKyAgICBjb25zdCBhdXRvJiBzZWFyY2hDaGlsZHJlbiA9IG9iamVjdC0+
aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSA/IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm9i
amVjdCkucm93cygpIDogb2JqZWN0LT5jaGlsZHJlbigpOwogCiAgICAgc2l6ZV90IGNoaWxkcmVu
U2l6ZSA9IHNlYXJjaENoaWxkcmVuLnNpemUoKTsKIApAQCAtMTUzNiw4ICsxNTM2LDggQEAgdm9p
ZCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp1cGRhdGVCYWNraW5nU3RvcmUoKQogU2Nyb2xsVmlldyog
QWNjZXNzaWJpbGl0eU9iamVjdDo6c2Nyb2xsVmlld0FuY2VzdG9yKCkgY29uc3QKIHsKICAgICBm
b3IgKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbFBhcmVudCA9IHRoaXM7IHNjcm9s
bFBhcmVudDsgc2Nyb2xsUGFyZW50ID0gc2Nyb2xsUGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewot
ICAgICAgICBpZiAoc2Nyb2xsUGFyZW50LT5pc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpCi0g
ICAgICAgICAgICByZXR1cm4gdG9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhzY3JvbGxQYXJlbnQp
LT5zY3JvbGxWaWV3KCk7CisgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4o
KnNjcm9sbFBhcmVudCkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVNjcm9sbFZpZXc+KCpzY3JvbGxQYXJlbnQpLnNjcm9sbFZpZXcoKTsKICAgICB9CiAgICAgCiAg
ICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IGIxMTE5MDFjMTgyOGNmZWExNTU5N2FkY2Q0OWYw
ZDViMmI3NjNhOWQuLjAyMzRiYjNkZmQxZjE3N2M1ZTBkZmVmMmMzOTAzYzA3YjEyZjE1NWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5oCkBAIC0xMDA1LDkgKzEwMDUsMTEgQEAgaW5saW5lIGludCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpsaW5lRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3QgewogaW5saW5l
IHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6dXBkYXRlQmFja2luZ1N0b3JlKCkgeyB9CiAjZW5k
aWYKIAotI2RlZmluZSBBQ0NFU1NJQklMSVRZX09CSkVDVF9UWVBFX0NBU1RTKFRvVmFsdWVUeXBl
TmFtZSwgcHJlZGljYXRlKSBcCi0gICAgVFlQRV9DQVNUU19CQVNFKFRvVmFsdWVUeXBlTmFtZSwg
QWNjZXNzaWJpbGl0eU9iamVjdCwgb2JqZWN0LCBvYmplY3QtPnByZWRpY2F0ZSwgb2JqZWN0LnBy
ZWRpY2F0ZSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCisjZGVmaW5lIFNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQUNDRVNTSUJJTElUWShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUb1ZhbHVlVHlwZU5hbWUpIFwK
KyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dCYgb2JqZWN0KSB7IHJldHVybiBvYmplY3QucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKKwogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlPYmplY3RfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAKaW5kZXggY2EyMmVjYzYyNDBjYjQzM2NiMWE4NTcyNTE5ZDllZjQyMjBjODE2
OS4uM2UzNWQ1ZTg1MDQ0ZGFlZWI0NTY2N2EyMzUzMTU1YmYwZmZlN2VkNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCkBAIC0xNzM4LDEzICsxNzM4LDEzIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6Z2V0RG9jdW1lbnRMaW5rcyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJl
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBOb2RlKiBwYXJlbnQgPSBjdXJyLT5wYXJl
bnROb2RlKCk7CiAgICAgICAgICAgICBpZiAoaXM8SFRNTEFyZWFFbGVtZW50PigqY3VycikgJiYg
aXM8SFRNTE1hcEVsZW1lbnQ+KHBhcmVudCkpIHsKLSAgICAgICAgICAgICAgICBBY2Nlc3NpYmls
aXR5SW1hZ2VNYXBMaW5rKiBhcmVhT2JqZWN0ID0gdG9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5r
KGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoSW1hZ2VNYXBMaW5rUm9sZSkpOworICAgICAg
ICAgICAgICAgIGF1dG8mIGFyZWFPYmplY3QgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5SW1hZ2VN
YXBMaW5rPigqYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShJbWFnZU1hcExpbmtSb2xlKSk7
CiAgICAgICAgICAgICAgICAgSFRNTE1hcEVsZW1lbnQmIG1hcCA9IGRvd25jYXN0PEhUTUxNYXBF
bGVtZW50PigqcGFyZW50KTsKLSAgICAgICAgICAgICAgICBhcmVhT2JqZWN0LT5zZXRIVE1MQXJl
YUVsZW1lbnQoZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50PihjdXJyKSk7Ci0gICAgICAgICAgICAg
ICAgYXJlYU9iamVjdC0+c2V0SFRNTE1hcEVsZW1lbnQoJm1hcCk7Ci0gICAgICAgICAgICAgICAg
YXJlYU9iamVjdC0+c2V0UGFyZW50KGFjY2Vzc2liaWxpdHlQYXJlbnRGb3JJbWFnZU1hcCgmbWFw
KSk7CisgICAgICAgICAgICAgICAgYXJlYU9iamVjdC5zZXRIVE1MQXJlYUVsZW1lbnQoZG93bmNh
c3Q8SFRNTEFyZWFFbGVtZW50PihjdXJyKSk7CisgICAgICAgICAgICAgICAgYXJlYU9iamVjdC5z
ZXRIVE1MTWFwRWxlbWVudCgmbWFwKTsKKyAgICAgICAgICAgICAgICBhcmVhT2JqZWN0LnNldFBh
cmVudChhY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1hZ2VNYXAoJm1hcCkpOwogCi0gICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChhcmVhT2JqZWN0KTsKKyAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCZhcmVhT2JqZWN0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAg
LTIzMjgsNyArMjMyOCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aGFuZGxl
QWN0aXZlRGVzY2VuZGFudENoYW5nZWQoKQogICAgIGlmICghcmVuZGVyZXIoKS0+ZnJhbWUoKS5z
ZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSB8fCByZW5kZXJlcigpLT5kb2N1bWVudCgp
LmZvY3VzZWRFbGVtZW50KCkgIT0gZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KHRvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdChhY3RpdmVEZXNjZW5kYW50KCkpICYmIHNob3Vs
ZE5vdGlmeUFjdGl2ZURlc2NlbmRhbnQoKSkKKyAgICBpZiAoYWN0aXZlRGVzY2VuZGFudCgpICYm
IHNob3VsZE5vdGlmeUFjdGl2ZURlc2NlbmRhbnQoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+ZG9j
dW1lbnQoKS5heE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obV9yZW5kZXJlciwgQVhP
YmplY3RDYWNoZTo6QVhBY3RpdmVEZXNjZW5kYW50Q2hhbmdlZCk7CiB9CiAKQEAgLTI2ODUsMTAg
KzI2ODUsMTAgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbmhlcml0c1ByZXNl
bnRhdGlvbmFsUm9sZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBm
b3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9iamVjdCgpOyBwYXJlbnQ7
IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsgCi0gICAgICAgIGlmICghcGFyZW50
LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAgaWYgKCFpczxBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0PigqcGFyZW50KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAKLSAgICAgICAgTm9kZSogbm9kZSA9IHRvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdChw
YXJlbnQpLT5ub2RlKCk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0PigqcGFyZW50KS5ub2RlKCk7CiAgICAgICAgIGlmICghaXM8RWxlbWVu
dD4obm9kZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCkBAIC0yODA3LDE0ICsy
ODA3LDE0IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkSW1hZ2VNYXBDaGls
ZHJlbigpCiAgICAgICAgIC8vIGFkZCBhbiA8YXJlYT4gZWxlbWVudCBmb3IgdGhpcyBjaGlsZCBp
ZiBpdCBoYXMgYSBsaW5rCiAgICAgICAgIGlmICghYXJlYS5pc0xpbmsoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rKiBhcmVhT2JqZWN0
ID0gdG9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rKGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVh
dGUoSW1hZ2VNYXBMaW5rUm9sZSkpOwotICAgICAgICBhcmVhT2JqZWN0LT5zZXRIVE1MQXJlYUVs
ZW1lbnQoJmFyZWEpOwotICAgICAgICBhcmVhT2JqZWN0LT5zZXRIVE1MTWFwRWxlbWVudChtYXAp
OwotICAgICAgICBhcmVhT2JqZWN0LT5zZXRQYXJlbnQodGhpcyk7Ci0gICAgICAgIGlmICghYXJl
YU9iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQotICAgICAgICAgICAgbV9jaGlsZHJl
bi5hcHBlbmQoYXJlYU9iamVjdCk7CisgICAgICAgIGF1dG8mIGFyZWFPYmplY3QgPSBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rPigqYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0
ZShJbWFnZU1hcExpbmtSb2xlKSk7CisgICAgICAgIGFyZWFPYmplY3Quc2V0SFRNTEFyZWFFbGVt
ZW50KCZhcmVhKTsKKyAgICAgICAgYXJlYU9iamVjdC5zZXRIVE1MTWFwRWxlbWVudChtYXApOwor
ICAgICAgICBhcmVhT2JqZWN0LnNldFBhcmVudCh0aGlzKTsKKyAgICAgICAgaWYgKCFhcmVhT2Jq
ZWN0LmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKKyAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBw
ZW5kKCZhcmVhT2JqZWN0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYXhPYmplY3RDYWNo
ZSgpLT5yZW1vdmUoYXJlYU9iamVjdC0+YXhPYmplY3RJRCgpKTsKKyAgICAgICAgICAgIGF4T2Jq
ZWN0Q2FjaGUoKS0+cmVtb3ZlKGFyZWFPYmplY3QuYXhPYmplY3RJRCgpKTsKICAgICB9CiB9CiAK
QEAgLTI4MzcsMTAgKzI4MzcsMTEgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojph
ZGRUZXh0RmllbGRDaGlsZHJlbigpCiAgICAgaWYgKCFzcGluQnV0dG9uRWxlbWVudCB8fCAhc3Bp
bkJ1dHRvbkVsZW1lbnQtPmlzU3BpbkJ1dHRvbkVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24qIGF4U3BpbkJ1dHRvbiA9IHRvQWNjZXNzaWJp
bGl0eVNwaW5CdXR0b24oYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShTcGluQnV0dG9uUm9s
ZSkpOwotICAgIGF4U3BpbkJ1dHRvbi0+c2V0U3BpbkJ1dHRvbkVsZW1lbnQoc3RhdGljX2Nhc3Q8
U3BpbkJ1dHRvbkVsZW1lbnQqPihzcGluQnV0dG9uRWxlbWVudCkpOwotICAgIGF4U3BpbkJ1dHRv
bi0+c2V0UGFyZW50KHRoaXMpOwotICAgIG1fY2hpbGRyZW4uYXBwZW5kKGF4U3BpbkJ1dHRvbik7
CisgICAgYXV0byYgYXhTcGluQnV0dG9uID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNwaW5CdXR0
b24+KCpheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKFNwaW5CdXR0b25Sb2xlKSk7CisgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCB1c2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBTcGluQnV0
dG9uRWxlbWVudC4KKyAgICBheFNwaW5CdXR0b24uc2V0U3BpbkJ1dHRvbkVsZW1lbnQoc3RhdGlj
X2Nhc3Q8U3BpbkJ1dHRvbkVsZW1lbnQqPihzcGluQnV0dG9uRWxlbWVudCkpOworICAgIGF4U3Bp
bkJ1dHRvbi5zZXRQYXJlbnQodGhpcyk7CisgICAgbV9jaGlsZHJlbi5hcHBlbmQoJmF4U3BpbkJ1
dHRvbik7CiB9CiAgICAgCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzU1ZHSW1h
Z2UoKSBjb25zdApAQCAtMjg5MCwxMSArMjg5MSwxMSBAQCBBY2Nlc3NpYmlsaXR5U1ZHUm9vdCog
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6cmVtb3RlU1ZHUm9vdEVsZW1lbnQoKSBjb25zdAog
CiAgICAgLy8gSW4gb3JkZXIgdG8gY29ubmVjdCB0aGUgQVggaGllcmFyY2h5IGZyb20gdGhlIFNW
RyByb290IGVsZW1lbnQgZnJvbSB0aGUgbG9hZGVkIHJlc291cmNlCiAgICAgLy8gdGhlIHBhcmVu
dCBtdXN0IGJlIHNldCwgYmVjYXVzZSB0aGVyZSdzIG5vIG90aGVyIHdheSB0byBnZXQgYmFjayB0
byB3aG8gY3JlYXRlZCB0aGUgaW1hZ2UuCi0gICAgQVNTRVJUKHJvb3RTVkdPYmplY3QgJiYgcm9v
dFNWR09iamVjdC0+aXNBY2Nlc3NpYmlsaXR5U1ZHUm9vdCgpKTsKLSAgICBpZiAoIXJvb3RTVkdP
YmplY3QtPmlzQWNjZXNzaWJpbGl0eVNWR1Jvb3QoKSkKKyAgICBBU1NFUlQocm9vdFNWR09iamVj
dCk7CisgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5U1ZHUm9vdD4oKnJvb3RTVkdPYmplY3QpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICByZXR1cm4gdG9BY2Nlc3NpYmlsaXR5
U1ZHUm9vdChyb290U1ZHT2JqZWN0KTsKKyAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVNWR1Jvb3Q+KHJvb3RTVkdPYmplY3QpOwogfQogICAgIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjphZGRSZW1vdGVTVkdDaGlsZHJlbigpCkBAIC0zMTM0LDggKzMxMzUsOCBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFyaWFTZWxlY3RlZFJvd3MoQWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yJiByZQogICAgICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgYWxsUm93czsKICAgICAgICAgYXJpYVRyZWVSb3dzKGFsbFJvd3MpOwogICAgICAgICByb3dz
SXRlcmF0aW9uKGFsbFJvd3MpOwotICAgIH0gZWxzZSBpZiAoaXNBY2Nlc3NpYmlsaXR5VGFibGUo
KSAmJiB0b0FjY2Vzc2liaWxpdHlUYWJsZSh0aGlzKS0+c3VwcG9ydHNTZWxlY3RlZFJvd3MoKSkK
LSAgICAgICAgcm93c0l0ZXJhdGlvbih0b0FjY2Vzc2liaWxpdHlUYWJsZSh0aGlzKS0+cm93cygp
KTsKKyAgICB9IGVsc2UgaWYgKGlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgJiYgZG93bmNhc3Q8QWNj
ZXNzaWJpbGl0eVRhYmxlPigqdGhpcykuc3VwcG9ydHNTZWxlY3RlZFJvd3MoKSkKKyAgICAgICAg
cm93c0l0ZXJhdGlvbihkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCp0aGlzKS5yb3dzKCkp
OwogfQogICAgIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhTGlzdGJveFNl
bGVjdGVkQ2hpbGRyZW4oQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiByZXN1bHQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5oCmluZGV4IGZhNWQzODVkYThjNjY4ZjQxZGUxOTc1MDE3NzA3NGM5OGRkODE2YTku
LmVkN2JlMTA0YTg3OGVjOWU1YWY1OGQwNzQ3MWY2ZGNhYmY3NzZlZjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5oCkBAIC0zMzgsOCArMzM4LDggQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotQUNDRVNTSUJJ
TElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LCBpc0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0FDQ0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dCwgaXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisKICNlbmRpZiAvLyBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVNWR1Jvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVNWR1Jvb3QuaAppbmRleCBlOGI4NzIyMWUxNTdmMzczNjIzNjRkMDc0OTdj
ZjI1ZmU1ZDkzYzYyLi43N2VlYjFiNmFhNTIyMDA5NGNkMDNhNTk4NDc2NTBiMWE0MzA2MWEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTVkdS
b290LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U1ZH
Um9vdC5oCkBAIC00OSw5ICs0OSw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBwYXJlbnRPYmplY3QoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJv
b2wgaXNBY2Nlc3NpYmlsaXR5U1ZHUm9vdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KIH07Ci0KLUFDQ0VTU0lCSUxJVFlfT0JKRUNUX1RZUEVfQ0FTVFMoQWNjZXNzaWJpbGl0eVNW
R1Jvb3QsIGlzQWNjZXNzaWJpbGl0eVNWR1Jvb3QoKSkKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUgCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQUNDRVNTSUJJTElUWShBY2Nlc3NpYmls
aXR5U1ZHUm9vdCwgaXNBY2Nlc3NpYmlsaXR5U1ZHUm9vdCgpKQorCiAjZW5kaWYgLy8gQWNjZXNz
aWJpbGl0eVNWR1Jvb3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcAppbmRleCA4NTc2ZGQ2NjE1MDY2MmJlMWFh
ZTFjMTI0YWVmNGY3ZjljNmMwZThlLi5jOTAwMDk4ZTZmMDU1NGJiOWJmMTk3NGRhNmJhNGU4YmZm
NDQ3OTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlTY3JvbGxWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcApAQCAtMTUxLDEwICsxNTEsMTAgQEAgQWNjZXNzaWJp
bGl0eVNjcm9sbGJhciogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6OmFkZENoaWxkU2Nyb2xsYmFy
KFNjcm9sbGJhciogc2MKICAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIqIHNjcm9sbEJhck9iamVjdCA9IHRvQWNjZXNz
aWJpbGl0eVNjcm9sbGJhcihjYWNoZS0+Z2V0T3JDcmVhdGUoc2Nyb2xsYmFyKSk7Ci0gICAgc2Ny
b2xsQmFyT2JqZWN0LT5zZXRQYXJlbnQodGhpcyk7Ci0gICAgbV9jaGlsZHJlbi5hcHBlbmQoc2Ny
b2xsQmFyT2JqZWN0KTsKLSAgICByZXR1cm4gc2Nyb2xsQmFyT2JqZWN0OworICAgIGF1dG8mIHNj
cm9sbEJhck9iamVjdCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI+KCpjYWNoZS0+
Z2V0T3JDcmVhdGUoc2Nyb2xsYmFyKSk7CisgICAgc2Nyb2xsQmFyT2JqZWN0LnNldFBhcmVudCh0
aGlzKTsKKyAgICBtX2NoaWxkcmVuLmFwcGVuZCgmc2Nyb2xsQmFyT2JqZWN0KTsKKyAgICByZXR1
cm4gJnNjcm9sbEJhck9iamVjdDsKIH0KICAgICAgICAgCiB2b2lkIEFjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3OjpjbGVhckNoaWxkcmVuKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuaAppbmRleCA1NmJlMWEwN2U5OTM0NjY4
MTEzZjM5NTRmODVmM2RiMTg2ZmFkMWFjLi44OWZkYmE5ZmE1YzAxMjEwZjMzNGM3MWM0ZDIxMTAz
NWEwOTMxOTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oCkBAIC04Myw5ICs4Myw5IEBAIHByaXZhdGU6CiAgICAg
UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG1fdmVydGljYWxTY3JvbGxiYXI7CiAgICAgYm9v
bCBtX2NoaWxkcmVuRGlydHk7CiB9OwotCi1BQ0NFU1NJQklMSVRZX09CSkVDVF9UWVBFX0NBU1RT
KEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LCBpc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpCiAg
ICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQUND
RVNTSUJJTElUWShBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldywgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xs
VmlldygpKQorCiAjZW5kaWYgLy8gQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXdfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuaApp
bmRleCBhNzI3OTZlNTQwNTE5ZjA5NzZjZGI5YTExNmQ1MGVjZDMyM2VhNDY4Li4yMDlmZmZkNWQw
YzRhMjk3MjM4NmIzMWM5MDQ2OTYzODg0YjRjMTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuaApAQCAtNjIsOCArNjIs
OCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fc2Nyb2xsYmFyOwogfTsKIAot
QUNDRVNTSUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLCBp
c0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0FDQ0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eVNjcm9sbGJh
ciwgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKCkpCisKICNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5
U2Nyb2xsYmFyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVNsaWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlTbGlkZXIuY3BwCmluZGV4IGI1ZTM0NmQ1NmU2N2I0NDU0ZDA0YzlkNjBjOTgxMGE5
MTIxZTEyZmUuLjkxYWFkM2Y1NjIzODA5YmY4YmZiYmFiOWUwZWFmYjgyYTFlZTdmZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVy
LmNwcApAQCAtODQsMTUgKzg0LDE1IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVNsaWRlcjo6YWRkQ2hp
bGRyZW4oKQogCiAgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX3JlbmRlcmVyLT5kb2N1bWVu
dCgpLmF4T2JqZWN0Q2FjaGUoKTsKIAotICAgIEFjY2Vzc2liaWxpdHlTbGlkZXJUaHVtYiogdGh1
bWIgPSB0b0FjY2Vzc2liaWxpdHlTbGlkZXJUaHVtYihjYWNoZS0+Z2V0T3JDcmVhdGUoU2xpZGVy
VGh1bWJSb2xlKSk7Ci0gICAgdGh1bWItPnNldFBhcmVudCh0aGlzKTsKKyAgICBhdXRvJiB0aHVt
YiA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTbGlkZXJUaHVtYj4oKmNhY2hlLT5nZXRPckNyZWF0
ZShTbGlkZXJUaHVtYlJvbGUpKTsKKyAgICB0aHVtYi5zZXRQYXJlbnQodGhpcyk7CiAKICAgICAv
LyBCZWZvcmUgYWN0dWFsbHkgYWRkaW5nIHRoZSB2YWx1ZSBpbmRpY2F0b3IgdG8gdGhlIGhpZXJh
cmNoeSwKICAgICAvLyBhbGxvdyB0aGUgcGxhdGZvcm0gdG8gbWFrZSBhIGZpbmFsIGRlY2lzaW9u
IGFib3V0IGl0LgotICAgIGlmICh0aHVtYi0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQotICAg
ICAgICBjYWNoZS0+cmVtb3ZlKHRodW1iLT5heE9iamVjdElEKCkpOworICAgIGlmICh0aHVtYi5h
Y2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCisgICAgICAgIGNhY2hlLT5yZW1vdmUodGh1bWIuYXhP
YmplY3RJRCgpKTsKICAgICBlbHNlCi0gICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKHRodW1iKTsK
KyAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoJnRodW1iKTsKIH0KIAogY29uc3QgQXRvbWljU3Ry
aW5nJiBBY2Nlc3NpYmlsaXR5U2xpZGVyOjpnZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0cmlidXRlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlTbGlkZXIuaAppbmRleCA1ZTllN2ZkZmM1ODg5Yzk1OWNkZmFiMjQzY2Q2
ODYxNmM5MzU0ZDk2Li4yNjc4ZTcyOGRkYzU0NTk1OTFkOTgyOGE1ODk4OTgxOTUyODc1NWY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlk
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlk
ZXIuaApAQCAtODQsOCArODQsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBjb21wdXRl
QWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAotQUNDRVNTSUJJ
TElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5U2xpZGVyVGh1bWIsIGlzU2xpZGVy
VGh1bWIoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0FDQ0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eVNsaWRlclRodW1iLCBpc1NsaWRlclRodW1i
KCkpCisKICNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5U2xpZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5jcHAKaW5k
ZXggOTMyYWNiNGRmZDc3MTkxZmM3ZjkzODcxYzhkMWRiYmUxOGY3Y2UzYi4uM2NlOTQxOWRhNzEx
OWZmZGIyNjhkYTQ4M2UwY2EzZjU1ZjVjY2ZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5jcHAKQEAgLTgyLDE1
ICs4MiwxNSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uOjphZGRDaGlsZHJlbigpCiB7
CiAgICAgbV9oYXZlQ2hpbGRyZW4gPSB0cnVlOwogICAgIAotICAgIEFjY2Vzc2liaWxpdHlTcGlu
QnV0dG9uUGFydCogaW5jcmVtZW50b3IgPSB0b0FjY2Vzc2liaWxpdHlTcGluQnV0dG9uUGFydChh
eE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKFNwaW5CdXR0b25QYXJ0Um9sZSkpOwotICAgIGlu
Y3JlbWVudG9yLT5zZXRJc0luY3JlbWVudG9yKHRydWUpOwotICAgIGluY3JlbWVudG9yLT5zZXRQ
YXJlbnQodGhpcyk7Ci0gICAgbV9jaGlsZHJlbi5hcHBlbmQoaW5jcmVtZW50b3IpOworICAgIGF1
dG8mIGluY3JlbWVudG9yID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNwaW5CdXR0b25QYXJ0Pigq
YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShTcGluQnV0dG9uUGFydFJvbGUpKTsKKyAgICBp
bmNyZW1lbnRvci5zZXRJc0luY3JlbWVudG9yKHRydWUpOworICAgIGluY3JlbWVudG9yLnNldFBh
cmVudCh0aGlzKTsKKyAgICBtX2NoaWxkcmVuLmFwcGVuZCgmaW5jcmVtZW50b3IpOwogCi0gICAg
QWNjZXNzaWJpbGl0eVNwaW5CdXR0b25QYXJ0KiBkZWNyZW1lbnRvciA9IHRvQWNjZXNzaWJpbGl0
eVNwaW5CdXR0b25QYXJ0KGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoU3BpbkJ1dHRvblBh
cnRSb2xlKSk7Ci0gICAgZGVjcmVtZW50b3ItPnNldElzSW5jcmVtZW50b3IoZmFsc2UpOwotICAg
IGRlY3JlbWVudG9yLT5zZXRQYXJlbnQodGhpcyk7Ci0gICAgbV9jaGlsZHJlbi5hcHBlbmQoZGVj
cmVtZW50b3IpOworICAgIGF1dG8mIGRlY3JlbWVudG9yID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVNwaW5CdXR0b25QYXJ0PigqYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShTcGluQnV0dG9u
UGFydFJvbGUpKTsKKyAgICBkZWNyZW1lbnRvci5zZXRJc0luY3JlbWVudG9yKGZhbHNlKTsKKyAg
ICBkZWNyZW1lbnRvci5zZXRQYXJlbnQodGhpcyk7CisgICAgbV9jaGlsZHJlbi5hcHBlbmQoJmRl
Y3JlbWVudG9yKTsKIH0KICAgICAKIHZvaWQgQWNjZXNzaWJpbGl0eVNwaW5CdXR0b246OnN0ZXAo
aW50IGFtb3VudCkKQEAgLTEzMiwxNCArMTMyLDE0IEBAIExheW91dFJlY3QgQWNjZXNzaWJpbGl0
eVNwaW5CdXR0b25QYXJ0OjplbGVtZW50UmVjdCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0
eVNwaW5CdXR0b25QYXJ0OjpwcmVzcygpCiB7Ci0gICAgaWYgKCFtX3BhcmVudCB8fCAhbV9wYXJl
bnQtPmlzU3BpbkJ1dHRvbigpKQorICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eVNwaW5CdXR0b24+
KG1fcGFyZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEFjY2Vzc2liaWxp
dHlTcGluQnV0dG9uKiBzcGluQnV0dG9uID0gdG9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbihwYXJl
bnRPYmplY3QoKSk7CisgICAgYXV0byYgc3BpbkJ1dHRvbiA9IGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlTcGluQnV0dG9uPigqbV9wYXJlbnQpOwogICAgIGlmIChtX2lzSW5jcmVtZW50b3IpCi0gICAg
ICAgIHNwaW5CdXR0b24tPnN0ZXAoMSk7CisgICAgICAgIHNwaW5CdXR0b24uc3RlcCgxKTsKICAg
ICBlbHNlCi0gICAgICAgIHNwaW5CdXR0b24tPnN0ZXAoLTEpOworICAgICAgICBzcGluQnV0dG9u
LnN0ZXAoLTEpOwogICAgIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5oIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5oCmluZGV4IGJl
MjFmZmU5ZGY1MWIyOTg3NzMwOTM3ODdmNWY3NTg5NWU0MjI1NWUuLjg3MzE5NDJkNWU2Mjk3NjRl
YTNmZWEwYjQ2Mjg4OTMzYTkwYjIxMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTcGluQnV0dG9uLmgKQEAgLTczLDEwICs3MywxMCBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1NwaW5CdXR0b25QYXJ0KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBlbGVtZW50UmVj
dCgpIGNvbnN0IG92ZXJyaWRlOwogfTsKLQotQUNDRVNTSUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNU
UyhBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbiwgaXNOYXRpdmVTcGluQnV0dG9uKCkpCi1BQ0NFU1NJ
QklMSVRZX09CSkVDVF9UWVBFX0NBU1RTKEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uUGFydCwgaXNT
cGluQnV0dG9uUGFydCgpKQogICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZKEFj
Y2Vzc2liaWxpdHlTcGluQnV0dG9uLCBpc05hdGl2ZVNwaW5CdXR0b24oKSkKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQUNDRVNTSUJJTElUWShBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvblBhcnQsIGlz
U3BpbkJ1dHRvblBhcnQoKSkKIAogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxl
LmNwcAppbmRleCAxMWZmZDE0NjEyOGFiZjA4OWJjMzQyYmJhNzNhYTk2ZjhlOTZjZjNhLi4wYjdi
ZTNhZjVhMmVkNzZlOGZlMmJmNDhiOTY0MmJkZTQyZWMxODQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCkBAIC0zNzksMTIg
KzM3OSwxMiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlUYWJsZTo6YWRkQ2hpbGRyZW4oKQogICAgIC8v
IG1ha2UgdGhlIGNvbHVtbnMgYmFzZWQgb24gdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBm
aXJzdCBib2R5CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbWF4Q29sdW1uQ291bnQ7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxp
dHlUYWJsZUNvbHVtbiogY29sdW1uID0gdG9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4oYXhDYWNo
ZS0+Z2V0T3JDcmVhdGUoQ29sdW1uUm9sZSkpOwotICAgICAgICBjb2x1bW4tPnNldENvbHVtbklu
ZGV4KChpbnQpaSk7Ci0gICAgICAgIGNvbHVtbi0+c2V0UGFyZW50KHRoaXMpOwotICAgICAgICBt
X2NvbHVtbnMuYXBwZW5kKGNvbHVtbik7Ci0gICAgICAgIGlmICghY29sdW1uLT5hY2Nlc3NpYmls
aXR5SXNJZ25vcmVkKCkpCi0gICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChjb2x1bW4pOwor
ICAgICAgICBhdXRvJiBjb2x1bW4gPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4+
KCpheENhY2hlLT5nZXRPckNyZWF0ZShDb2x1bW5Sb2xlKSk7CisgICAgICAgIGNvbHVtbi5zZXRD
b2x1bW5JbmRleCgoaW50KWkpOworICAgICAgICBjb2x1bW4uc2V0UGFyZW50KHRoaXMpOworICAg
ICAgICBtX2NvbHVtbnMuYXBwZW5kKCZjb2x1bW4pOworICAgICAgICBpZiAoIWNvbHVtbi5hY2Nl
c3NpYmlsaXR5SXNJZ25vcmVkKCkpCisgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZCgmY29s
dW1uKTsKICAgICB9CiAgICAgCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogaGVhZGVyQ29udGFp
bmVyT2JqZWN0ID0gaGVhZGVyQ29udGFpbmVyKCk7CkBAIC00MDcsMjUgKzQwNywyNSBAQCB2b2lk
IEFjY2Vzc2liaWxpdHlUYWJsZTo6YWRkQ2hpbGRyZW5Gcm9tU2VjdGlvbihSZW5kZXJUYWJsZVNl
Y3Rpb24qIHRhYmxlU2VjdGlvbgogICAgICAgICBpZiAoIXJlbmRlclJvdykKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcm93T2Jq
ZWN0ID0gYXhDYWNoZS0+Z2V0T3JDcmVhdGUocmVuZGVyUm93KTsKLSAgICAgICAgaWYgKCFyb3dP
YmplY3QtPmlzVGFibGVSb3coKSkKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCYgcm93T2Jq
ZWN0ID0gKmF4Q2FjaGUtPmdldE9yQ3JlYXRlKHJlbmRlclJvdyk7CisgICAgICAgIGlmICghaXM8
QWNjZXNzaWJpbGl0eVRhYmxlUm93Pihyb3dPYmplY3QpKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIAotICAgICAgICBBY2Nlc3NpYmlsaXR5VGFibGVSb3cqIHJvdyA9IHRvQWNjZXNz
aWJpbGl0eVRhYmxlUm93KHJvd09iamVjdCk7CisgICAgICAgIGF1dG8mIHJvdyA9IGRvd25jYXN0
PEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4ocm93T2JqZWN0KTsKICAgICAgICAgLy8gV2UgbmVlZCB0
byBjaGVjayBldmVyeSBjZWxsIGZvciBhIG5ldyByb3csIGJlY2F1c2UgY2VsbCBzcGFucwogICAg
ICAgICAvLyBjYW4gY2F1c2UgdXMgdG8gbWlzcyByb3dzIGlmIHdlIGp1c3QgY2hlY2sgdGhlIGZp
cnN0IGNvbHVtbi4KLSAgICAgICAgaWYgKGFwcGVuZGVkUm93cy5jb250YWlucyhyb3cpKQorICAg
ICAgICBpZiAoYXBwZW5kZWRSb3dzLmNvbnRhaW5zKCZyb3cpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIAotICAgICAgICByb3ctPnNldFJvd0luZGV4KHN0YXRpY19jYXN0PGludD4o
bV9yb3dzLnNpemUoKSkpOwotICAgICAgICBtX3Jvd3MuYXBwZW5kKHJvdyk7Ci0gICAgICAgIGlm
ICghcm93LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCi0gICAgICAgICAgICBtX2NoaWxkcmVu
LmFwcGVuZChyb3cpOworICAgICAgICByb3cuc2V0Um93SW5kZXgoc3RhdGljX2Nhc3Q8aW50Piht
X3Jvd3Muc2l6ZSgpKSk7CisgICAgICAgIG1fcm93cy5hcHBlbmQoJnJvdyk7CisgICAgICAgIGlm
ICghcm93LmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKKyAgICAgICAgICAgIG1fY2hpbGRyZW4u
YXBwZW5kKCZyb3cpOwogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZFZlY3Rvcihyb3ctPmNoaWxkcmVu
KCkpOworICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmRWZWN0b3Iocm93LmNoaWxkcmVuKCkp
OwogI2VuZGlmCi0gICAgICAgIGFwcGVuZGVkUm93cy5hZGQocm93KTsKKyAgICAgICAgYXBwZW5k
ZWRSb3dzLmFkZCgmcm93KTsKICAgICB9CiAgICAgCiAgICAgbWF4Q29sdW1uQ291bnQgPSBzdGQ6
Om1heCh0YWJsZVNlY3Rpb24tPm51bUNvbHVtbnMoKSwgbWF4Q29sdW1uQ291bnQpOwpAQCAtNDM2
LDEwICs0MzYsMTAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVRhYmxlOjpo
ZWFkZXJDb250YWluZXIoKQogICAgIGlmIChtX2hlYWRlckNvbnRhaW5lcikKICAgICAgICAgcmV0
dXJuIG1faGVhZGVyQ29udGFpbmVyLmdldCgpOwogICAgIAotICAgIEFjY2Vzc2liaWxpdHlNb2Nr
T2JqZWN0KiB0YWJsZUhlYWRlciA9IHRvQWNjZXNzaWJpbGl0eU1vY2tPYmplY3QoYXhPYmplY3RD
YWNoZSgpLT5nZXRPckNyZWF0ZShUYWJsZUhlYWRlckNvbnRhaW5lclJvbGUpKTsKLSAgICB0YWJs
ZUhlYWRlci0+c2V0UGFyZW50KHRoaXMpOworICAgIGF1dG8mIHRhYmxlSGVhZGVyID0gZG93bmNh
c3Q8QWNjZXNzaWJpbGl0eU1vY2tPYmplY3Q+KCpheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRl
KFRhYmxlSGVhZGVyQ29udGFpbmVyUm9sZSkpOworICAgIHRhYmxlSGVhZGVyLnNldFBhcmVudCh0
aGlzKTsKIAotICAgIG1faGVhZGVyQ29udGFpbmVyID0gdGFibGVIZWFkZXI7CisgICAgbV9oZWFk
ZXJDb250YWluZXIgPSAmdGFibGVIZWFkZXI7CiAgICAgcmV0dXJuIG1faGVhZGVyQ29udGFpbmVy
LmdldCgpOwogfQogCkBAIC00NjUsNyArNDY1LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6
OmNvbHVtbkhlYWRlcnMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBoZWFkZXJzKQogICAg
IHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKICAgICAKICAgICBmb3IgKGNvbnN0IGF1dG8m
IGNvbHVtbiA6IG1fY29sdW1ucykgewotICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCog
aGVhZGVyID0gdG9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4oY29sdW1uLmdldCgpKS0+aGVhZGVy
T2JqZWN0KCkpCisgICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXIgPSBkb3du
Y2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4+KCpjb2x1bW4pLmhlYWRlck9iamVjdCgpKQog
ICAgICAgICAgICAgaGVhZGVycy5hcHBlbmQoaGVhZGVyKTsKICAgICB9CiB9CkBAIC00NzgsNyAr
NDc4LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6OnJvd0hlYWRlcnMoQWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yJiBoZWFkZXJzKQogICAgIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3Nhcnko
KTsKICAgICAKICAgICBmb3IgKGNvbnN0IGF1dG8mIHJvdyA6IG1fcm93cykgewotICAgICAgICBp
ZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogaGVhZGVyID0gdG9BY2Nlc3NpYmlsaXR5VGFibGVSb3co
cm93LmdldCgpKS0+aGVhZGVyT2JqZWN0KCkpCisgICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBoZWFkZXIgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVSb3c+KCpyb3cpLmhlYWRl
ck9iamVjdCgpKQogICAgICAgICAgICAgaGVhZGVycy5hcHBlbmQoaGVhZGVyKTsKICAgICB9CiB9
CkBAIC01NDcsMTkgKzU0NywxOSBAQCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBBY2Nlc3NpYmls
aXR5VGFibGU6OmNlbGxGb3JDb2x1bW5BbmRSb3codW5zaWduZWQgY29sdW1uLAogICAgICAgICBm
b3IgKHVuc2lnbmVkIGNvbEluZGV4Q291bnRlciA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihjaGlsZHJlbi5zaXplKCkpLCBjb2x1bW4gKyAxKTsgY29sSW5kZXhDb3VudGVyID4gMDsg
LS1jb2xJbmRleENvdW50ZXIpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNvbEluZGV4ID0gY29s
SW5kZXhDb3VudGVyIC0gMTsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNoaWxk
ID0gY2hpbGRyZW5bY29sSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT5p
c1RhYmxlQ2VsbCgpKTsKLSAgICAgICAgICAgIGlmICghY2hpbGQtPmlzVGFibGVDZWxsKCkpCisg
ICAgICAgICAgICBBU1NFUlQoaXM8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmNoaWxkKSk7Cisg
ICAgICAgICAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpjaGlsZCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0ZDo6cGFp
cjx1bnNpZ25lZCwgdW5zaWduZWQ+IGNvbHVtblJhbmdlOwogICAgICAgICAgICAgc3RkOjpwYWly
PHVuc2lnbmVkLCB1bnNpZ25lZD4gcm93UmFuZ2U7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5
VGFibGVDZWxsKiB0YWJsZUNlbGxDaGlsZCA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbChjaGls
ZCk7Ci0gICAgICAgICAgICB0YWJsZUNlbGxDaGlsZC0+Y29sdW1uSW5kZXhSYW5nZShjb2x1bW5S
YW5nZSk7Ci0gICAgICAgICAgICB0YWJsZUNlbGxDaGlsZC0+cm93SW5kZXhSYW5nZShyb3dSYW5n
ZSk7CisgICAgICAgICAgICBhdXRvJiB0YWJsZUNlbGxDaGlsZCA9IGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlUYWJsZUNlbGw+KCpjaGlsZCk7CisgICAgICAgICAgICB0YWJsZUNlbGxDaGlsZC5jb2x1
bW5JbmRleFJhbmdlKGNvbHVtblJhbmdlKTsKKyAgICAgICAgICAgIHRhYmxlQ2VsbENoaWxkLnJv
d0luZGV4UmFuZ2Uocm93UmFuZ2UpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoKGNv
bHVtbiA+PSBjb2x1bW5SYW5nZS5maXJzdCAmJiBjb2x1bW4gPCAoY29sdW1uUmFuZ2UuZmlyc3Qg
KyBjb2x1bW5SYW5nZS5zZWNvbmQpKQogICAgICAgICAgICAgICAgICYmIChyb3cgPj0gcm93UmFu
Z2UuZmlyc3QgJiYgcm93IDwgKHJvd1JhbmdlLmZpcnN0ICsgcm93UmFuZ2Uuc2Vjb25kKSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlQ2VsbENoaWxkOworICAgICAgICAgICAgICAgIHJl
dHVybiAmdGFibGVDZWxsQ2hpbGQ7CiAgICAgICAgIH0KICAgICB9CiAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuaAppbmRleCA3NDZk
MWRiMmUzODVjMTNkNDM2NmQ0MTQ5M2ZmNjU2ZThkNDNkYjQ2Li5iMDI2ZjUyZTZkYTNjNjE0Y2Q4
MTFjZjBiN2E2NjFiYzE5YzAwMDZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmgKQEAgLTc1LDYgKzc1LDkgQEAgcHVibGljOgogICAg
IC8vIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zLCBhcyBjaGlsZHJlbiwgYWxsIHRoZSBvYmplY3Rz
IHRoYXQgYWN0IGFzIGhlYWRlcnMKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXJDb250
YWluZXIoKTsKIAorICAgIC8vIGlzQWNjZXNzaWJpbGl0eVRhYmxlIGlzIHdoZXRoZXIgaXQgaXMg
ZXhwb3NlZCBhcyBhbiBBY2Nlc3NpYmlsaXR5VGFibGUgdG8gdGhlIHBsYXRmb3JtLgorICAgIHZp
cnR1YWwgYm9vbCBpc0FjY2Vzc2liaWxpdHlUYWJsZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwor
CiBwcm90ZWN0ZWQ6CiAgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIG1fcm93czsKICAg
ICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgbV9jb2x1bW5zOwpAQCAtODYsOCArODksNiBA
QCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBpc1RhYmxlIGlzIHdoZXRoZXIgaXQncyBhbiBBY2Nlc3Np
YmlsaXR5VGFibGUgb2JqZWN0LgogICAgIHZpcnR1YWwgYm9vbCBpc1RhYmxlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIC8vIGlzQWNjZXNzaWJpbGl0eVRhYmxlIGlzIHdo
ZXRoZXIgaXQgaXMgZXhwb3NlZCBhcyBhbiBBY2Nlc3NpYmlsaXR5VGFibGUgdG8gdGhlIHBsYXRm
b3JtLgotICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vzc2liaWxpdHlUYWJsZSgpIGNvbnN0IG92ZXJy
aWRlOwogICAgIC8vIGlzRGF0YVRhYmxlIGlzIHdoZXRoZXIgaXQgaXMgZXhwb3NlZCBhcyBhbiBB
Y2Nlc3NpYmlsaXR5VGFibGUgYmVjYXVzZSB0aGUgaGV1cmlzdGljCiAgICAgLy8gdGhpbmsgdGhp
cyAibG9va3MiIGxpa2UgYSBkYXRhLWJhc2VkIHRhYmxlIChpbnN0ZWFkIG9mIGEgdGFibGUgdXNl
ZCBmb3IgbGF5b3V0KS4KICAgICB2aXJ0dWFsIGJvb2wgaXNEYXRhVGFibGUoKSBjb25zdCBvdmVy
cmlkZTsKQEAgLTEwMSw4ICsxMDIsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRkQ2hpbGRyZW5G
cm9tU2VjdGlvbihSZW5kZXJUYWJsZVNlY3Rpb24qLCB1bnNpZ25lZCYgbWF4Q29sdW1uQ291bnQp
OwogfTsKIAotQUNDRVNTSUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5VGFi
bGUsIGlzVGFibGUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vzc2liaWxpdHlUYWJsZSwgaXNUYWJsZSgpKQor
CiAjZW5kaWYgLy8gQWNjZXNzaWJpbGl0eVRhYmxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwCmluZGV4IGM2Y2M4
NjY5NGM0ZThlNDY0NmEwM2U0MTkyN2MzNjBhZmE5ZDk2YzUuLjY4MzdiZTAyODIxYjNhMzg2NDcx
YjAxZmUzOWMzOTA4MDgzODgzNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcApAQCAtODksOSArODksOSBAQCBB
Y2Nlc3NpYmlsaXR5VGFibGUqIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnBhcmVudFRhYmxlKCkg
Y29uc3QKICAgICAvLyBhbHdheXMgYmUgdGhlIGNhc2Ugd2hlbiBBVCBjbGllbnRzIGFjY2VzcyBh
IHRhYmxlLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
MjY1MgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudFRhYmxlID0gYXhPYmplY3RDYWNo
ZSgpLT5nZXQoZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqbV9yZW5kZXJlcikudGFibGUoKSk7
Ci0gICAgaWYgKCFwYXJlbnRUYWJsZSB8fCAhcGFyZW50VGFibGUtPmlzVGFibGUoKSkKKyAgICBp
ZiAoIWlzPEFjY2Vzc2liaWxpdHlUYWJsZT4ocGFyZW50VGFibGUpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICByZXR1cm4gdG9BY2Nlc3NpYmlsaXR5VGFibGUocGFyZW50VGFibGUpOwor
ICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KHBhcmVudFRhYmxlKTsKIH0K
ICAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6aXNUYWJsZUNlbGwoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGVDZWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZUNlbGwuaAppbmRleCBjN2M3M2MzYjA4Mzg1NmFhZDViMjkwNGU3ZjBjM2JjNzZhMWU4NDE0Li4z
MzE4NjgyZGVmZDQ2MmFhZTA4NzdlYzY0Y2NkOGM1ODZjMTcyZTJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaApAQCAt
NzMsOCArNzMsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNUYWJsZUNlbGxJblNhbWVDb2xHcm91
cChBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKik7CiB9OwogCi1BQ0NFU1NJQklMSVRZX09CSkVDVF9U
WVBFX0NBU1RTKEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwsIGlzVGFibGVDZWxsKCkpCi0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUgCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQUNDRVNTSUJJTElU
WShBY2Nlc3NpYmlsaXR5VGFibGVDZWxsLCBpc1RhYmxlQ2VsbCgpKQorCiAjZW5kaWYgLy8gQWNj
ZXNzaWJpbGl0eVRhYmxlQ2VsbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHAKaW5kZXggOGU3MTBlMTJlMGRm
ZmMyMzg2ODgyOWJmYmViOTA2MGJlNzY0ODVjNy4uYjAyZjllZmQ1YzU5ZDdiM2YwZDQ0YTkzMWQw
ZDdmMzkzMTJmNWU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmNwcApAQCAtNzksOCArNzksOCBAQCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW46OmhlYWRlck9iamVjdCgp
CiAgICAgaWYgKCFtX3BhcmVudC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eVRhYmxlKiBwYXJlbnRUYWJsZSA9
IHRvQWNjZXNzaWJpbGl0eVRhYmxlKG1fcGFyZW50KTsKLSAgICBpZiAocGFyZW50VGFibGUtPmlz
QXJpYVRhYmxlKCkpIHsKKyAgICBhdXRvJiBwYXJlbnRUYWJsZSA9IGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlUYWJsZT4oKm1fcGFyZW50KTsKKyAgICBpZiAocGFyZW50VGFibGUuaXNBcmlhVGFibGUo
KSkgewogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNlbGwgOiBjaGlsZHJlbigpKSB7CiAgICAg
ICAgICAgICBpZiAoY2VsbC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBDb2x1bW5IZWFkZXJSb2xl
KQogICAgICAgICAgICAgICAgIHJldHVybiBjZWxsLmdldCgpOwpAQCAtMTczLDExICsxNzMsMTEg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW46OmFkZENoaWxkcmVuKCkKICAgICBpZiAo
IW1fcGFyZW50IHx8ICFtX3BhcmVudC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIEFjY2Vzc2liaWxpdHlUYWJsZSogcGFyZW50VGFibGUgPSB0b0Fj
Y2Vzc2liaWxpdHlUYWJsZShtX3BhcmVudCk7Ci0gICAgaW50IG51bVJvd3MgPSBwYXJlbnRUYWJs
ZS0+cm93Q291bnQoKTsKKyAgICBBY2Nlc3NpYmlsaXR5VGFibGUmIHBhcmVudFRhYmxlID0gZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqbV9wYXJlbnQpOworICAgIGludCBudW1Sb3dzID0g
cGFyZW50VGFibGUucm93Q291bnQoKTsKICAgICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51
bVJvd3M7IGkrKykgewotICAgICAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBjZWxsID0gcGFy
ZW50VGFibGUtPmNlbGxGb3JDb2x1bW5BbmRSb3cobV9jb2x1bW5JbmRleCwgaSk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBudW1Sb3dzOyArK2kpIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eVRh
YmxlQ2VsbCogY2VsbCA9IHBhcmVudFRhYmxlLmNlbGxGb3JDb2x1bW5BbmRSb3cobV9jb2x1bW5J
bmRleCwgaSk7CiAgICAgICAgIGlmICghY2VsbCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVRhYmxlQ29sdW1uLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlUYWJsZUNvbHVtbi5oCmluZGV4IGUzY2M1MTYyNmE4YzEzZGZhMGFlZGU5ZmJlNDg1ZWE0
ODdmZTljOTguLmFmN2NlM2MxODgxOWUzNjZjMzMzY2JiYzYxZjQ2N2M4YzFiNDRjNzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29s
dW1uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGVDb2x1bW4uaApAQCAtNjYsOCArNjYsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBj
b21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAotQUND
RVNTSUJJTElUWV9PQkpFQ1RfVFlQRV9DQVNUUyhBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4sIGlz
VGFibGVDb2x1bW4oKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbiwgaXNUYWJs
ZUNvbHVtbigpKQorCiAjZW5kaWYgLy8gQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlSGVh
ZGVyQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyLmNwcAppbmRleCBlNGRkOTMyZjZmZGFjM2Q5NTg0MzBk
YzRiNjkwNTE0M2U2NjYzMzdmLi4wODNiZDk4Y2I4MDc3ZDUzNGMyY2ZjMWU0NWYyYzFmZjY0MmMy
ODhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZUhlYWRlckNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwCkBAIC03Myw3ICs3Myw3
IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyOjphZGRDaGlsZHJlbigp
CiAgICAgaWYgKCFtX3BhcmVudCB8fCAhbV9wYXJlbnQtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICB0b0FjY2Vzc2liaWxpdHlUYWJsZShtX3BhcmVu
dCktPmNvbHVtbkhlYWRlcnMobV9jaGlsZHJlbik7CisgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVRhYmxlPigqbV9wYXJlbnQpLmNvbHVtbkhlYWRlcnMobV9jaGlsZHJlbik7CiAgICAgCiAgICAg
Zm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCiAgICAgICAgIG1faGVhZGVyUmVj
dC51bml0ZShjaGlsZC0+ZWxlbWVudFJlY3QoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAKaW5kZXggNjM0ZDE0NGU1
NmM0NWQwNjkwZDE0ODA0ZDVlMjNmNzk3YjQ5YzA5NS4uYjEyNDFkMTQxMzNkOWMxNWJhMjZhNDJk
MzVkZjU3MzFmMjY3NDIzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmNwcApAQCAtMTA2LDggKzEwNiw4IEBAIEFjY2Vz
c2liaWxpdHlUYWJsZSogQWNjZXNzaWJpbGl0eVRhYmxlUm93OjpwYXJlbnRUYWJsZSgpIGNvbnN0
CiAgICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBwYXJlbnRPYmplY3QoKTsg
cGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7CiAgICAgICAgIC8vIElm
IHRoaXMgaXMgYSB0YWJsZSBvYmplY3QsIGJ1dCBub3QgYW4gYWNjZXNzaWJpbGl0eSB0YWJsZSwg
d2Ugc2hvdWxkIHN0b3AgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvCiAgICAgICAgIC8vIGNob29z
ZSBhbm90aGVyIGFuY2VzdG9yIHRhYmxlIGFzIHRoaXMgcm93J3MgdGFibGUuCi0gICAgICAgIGlm
IChwYXJlbnQtPmlzVGFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBwYXJlbnQtPmlzQWNjZXNz
aWJpbGl0eVRhYmxlKCkgPyB0b0FjY2Vzc2liaWxpdHlUYWJsZShwYXJlbnQpIDogMDsKKyAgICAg
ICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKnBhcmVudCkpCisgICAgICAgICAgICByZXR1
cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5pc0FjY2Vzc2liaWxpdHlU
YWJsZSgpID8gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPihwYXJlbnQpIDogbnVsbHB0cjsK
ICAgICB9CiAgICAgCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMjQsMTAgKzEyNCwxMCBAQCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OmhlYWRlck9iamVjdCgp
CiAgICAgCiAgICAgLy8gY2hlY2sgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHJvdyB0byBzZWUg
aWYgaXQgaXMgYSBUSCBlbGVtZW50CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY2VsbCA9IHJv
d0NoaWxkcmVuWzBdLmdldCgpOwotICAgIGlmICghY2VsbC0+aXNUYWJsZUNlbGwoKSkKKyAgICBp
ZiAoIWlzPEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpjZWxsKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgCi0gICAgUmVuZGVyT2JqZWN0KiBjZWxsUmVuZGVyZXIgPSB0b0FjY2Vzc2li
aWxpdHlUYWJsZUNlbGwoY2VsbCktPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiBjZWxs
UmVuZGVyZXIgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY2VsbCkucmVuZGVy
ZXIoKTsKICAgICBpZiAoIWNlbGxSZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZVJvdy5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
VGFibGVSb3cuaAppbmRleCA2N2Q1ZTJkZDFiZjViNzU0ZjFjMzI3OTk1ZWYwNGVkMGY4NTI1Y2Fi
Li5mMWZlMDMyMjM5NDczNWI2MDA4MWQ3YTQ1NTIxMDNkYzMwZGMxNjlmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmgKQEAg
LTY0LDEwICs2NCwxMCBAQCBwcml2YXRlOgogICAgIAogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0
eU9iamVjdCogb2JzZXJ2YWJsZU9iamVjdCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
Ym9vbCBjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IG92ZXJyaWRlOwotfTsg
Cit9OwogCi1BQ0NFU1NJQklMSVRZX09CSkVDVF9UWVBFX0NBU1RTKEFjY2Vzc2liaWxpdHlUYWJs
ZVJvdywgaXNUYWJsZVJvdygpKQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vz
c2liaWxpdHlUYWJsZVJvdywgaXNUYWJsZVJvdygpKQogCiAjZW5kaWYgLy8gQWNjZXNzaWJpbGl0
eVRhYmxlUm93X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5jcHAK
aW5kZXggOWU4N2Y0ZjVmYmM3N2VmZjUyODU3NjVkNjZmZjc0NzU5NGQwMjJjZi4uMGY3OWIwMDg1
YTJjMTY4MGQ1N2YzMGJiOWM3NDdjN2M5ZjNkOGNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVNlbGVjdGlvbi5jcHAKQEAgLTE1MCwxMiArMTUwLDEyIEBAIHN0YXRpYyBnYm9v
bGVhbiB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uQ2xlYXJTZWxlY3Rpb24oQXRrU2VsZWN0aW9u
KiBzZWxlY3Rpb24pCiAgICAgICAgIHJldHVybiBGQUxTRTsKIAogICAgIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZEl0ZW1zOwotICAgIGlm
IChjb3JlU2VsZWN0aW9uLT5pc0xpc3RCb3goKSB8fCBjb3JlU2VsZWN0aW9uLT5pc01lbnVMaXN0
KCkpIHsKKyAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eUxpc3RCb3g+KCpjb3JlU2VsZWN0aW9uKSkg
ewogICAgICAgICAvLyBTZXQgdGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgaXRlbXMgdG8gYW4gZW1wdHkg
bGlzdDsgdGhlbiB2ZXJpZnkgdGhhdCBpdCB3b3JrZWQuCi0gICAgICAgIEFjY2Vzc2liaWxpdHlM
aXN0Qm94KiBsaXN0Qm94ID0gdG9BY2Nlc3NpYmlsaXR5TGlzdEJveChjb3JlU2VsZWN0aW9uKTsK
LSAgICAgICAgbGlzdEJveC0+c2V0U2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsKLSAg
ICAgICAgbGlzdEJveC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsKLSAgICAgICAg
cmV0dXJuICFzZWxlY3RlZEl0ZW1zLnNpemUoKTsKKyAgICAgICAgYXV0byYgbGlzdEJveCA9IGRv
d25jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94PigqY29yZVNlbGVjdGlvbik7CisgICAgICAgIGxp
c3RCb3guc2V0U2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsKKyAgICAgICAgbGlzdEJv
eC5zZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkSXRlbXMpOworICAgICAgICByZXR1cm4gc2VsZWN0
ZWRJdGVtcy5pc0VtcHR5KCk7CiAgICAgfQogICAgIHJldHVybiBGQUxTRTsKIH0KQEAgLTI0Niwx
MiArMjQ2LDEyIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uU2Vs
ZWN0QWxsU2VsZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0CiAgICAgaWYgKCFjb3JlU2VsZWN0
aW9uIHx8ICFjb3JlU2VsZWN0aW9uLT5pc011bHRpU2VsZWN0YWJsZSgpKQogICAgICAgICByZXR1
cm4gRkFMU0U7CiAKLSAgICBpZiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkpIHsKKyAgICBp
ZiAoaXM8QWNjZXNzaWJpbGl0eUxpc3RCb3g+KCpjb3JlU2VsZWN0aW9uKSkgewogICAgICAgICBj
b25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNo
aWxkcmVuID0gY29yZVNlbGVjdGlvbi0+Y2hpbGRyZW4oKTsKLSAgICAgICAgQWNjZXNzaWJpbGl0
eUxpc3RCb3gqIGxpc3RCb3ggPSB0b0FjY2Vzc2liaWxpdHlMaXN0Qm94KGNvcmVTZWxlY3Rpb24p
OwotICAgICAgICBsaXN0Qm94LT5zZXRTZWxlY3RlZENoaWxkcmVuKGNoaWxkcmVuKTsKKyAgICAg
ICAgQWNjZXNzaWJpbGl0eUxpc3RCb3gmIGxpc3RCb3ggPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5
TGlzdEJveD4oKmNvcmVTZWxlY3Rpb24pOworICAgICAgICBsaXN0Qm94LnNldFNlbGVjdGVkQ2hp
bGRyZW4oY2hpbGRyZW4pOwogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRJdGVtczsKLSAgICAgICAgbGlzdEJveC0+c2VsZWN0
ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsKKyAgICAgICAgbGlzdEJveC5zZWxlY3RlZENoaWxk
cmVuKHNlbGVjdGVkSXRlbXMpOwogICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5zaXplKCkg
PT0gY2hpbGRyZW4uc2l6ZSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VU
YWJsZS5jcHAKaW5kZXggMDI1ZWYwODE3ZWU1OWM5NjAzNWM2NWU4NTBiMWIzNTViMDQ4M2EyZi4u
ZDA4OWE1NGJiYTA3MDlmMjQ3ZjdkYWMwZjFlNmY1YmM2ZmRkNzM5OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRh
YmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGFibGUuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrVGFibGUqIHRh
YmxlKQogewogICAgIGlmICghV0VCS0lUX0lTX0FDQ0VTU0lCTEUodGFibGUpKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gd2Via2l0QWNj
ZXNzaWJsZUdldEFjY2Vzc2liaWxpdHlPYmplY3QoV0VCS0lUX0FDQ0VTU0lCTEUodGFibGUpKTsK
IH0KQEAgLTU4LDkgKzU4LDkgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRr
VGFibGUqIHRhYmxlKQogc3RhdGljIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGNlbGwoQXRrVGFi
bGUqIHRhYmxlLCBndWludCByb3csIGd1aW50IGNvbHVtbikKIHsKICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFibGUpOwotICAgIGlmIChhY2NUYWJsZS0+aXNBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0b0FjY2Vzc2liaWxpdHlU
YWJsZShhY2NUYWJsZSktPmNlbGxGb3JDb2x1bW5BbmRSb3coY29sdW1uLCByb3cpOwotICAgIHJl
dHVybiAwOworICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NUYWJsZSkpCisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NUYWJsZSkuY2VsbEZv
ckNvbHVtbkFuZFJvdyhjb2x1bW4sIHJvdyk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0
YXRpYyBnaW50IGNlbGxJbmRleChBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBheENlbGwsIEFjY2Vz
c2liaWxpdHlUYWJsZSogYXhUYWJsZSkKQEAgLTc5LDE1ICs3OSwxMyBAQCBzdGF0aWMgZ2ludCBj
ZWxsSW5kZXgoQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogYXhDZWxsLCBBY2Nlc3NpYmlsaXR5VGFi
bGUqIGF4VGFibAogc3RhdGljIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGNlbGxBdEluZGV4KEF0
a1RhYmxlKiB0YWJsZSwgZ2ludCBpbmRleCkKIHsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBh
Y2NUYWJsZSA9IGNvcmUodGFibGUpOwotICAgIGlmIChhY2NUYWJsZS0+aXNBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0KCkpIHsKKyAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqYWNjVGFi
bGUpKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciBhbGxDZWxsczsKLSAgICAgICAgdG9BY2Nlc3NpYmlsaXR5VGFibGUoYWNjVGFibGUp
LT5jZWxscyhhbGxDZWxscyk7Ci0gICAgICAgIGlmICgwIDw9IGluZGV4ICYmIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihpbmRleCkgPCBhbGxDZWxscy5zaXplKCkpIHsKLSAgICAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGFjY0NlbGwgPSBhbGxDZWxscy5hdChpbmRleCkuZ2V0KCk7Ci0gICAg
ICAgICAgICByZXR1cm4gdG9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsKGFjY0NlbGwpOwotICAgICAg
ICB9CisgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxlKS5jZWxs
cyhhbGxDZWxscyk7CisgICAgICAgIGlmICgwIDw9IGluZGV4ICYmIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbmRleCkgPCBhbGxDZWxscy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNh
c3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oYWxsQ2VsbHNbaW5kZXhdLmdldCgpKTsKICAgICB9
Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRpYyBBdGtPYmpl
Y3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZVJlZkF0KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCByb3cs
IGdpbnQgY29sdW1uKQpAQCAtMTE0LDcgKzExMiw3IEBAIHN0YXRpYyBnaW50IHdlYmtpdEFjY2Vz
c2libGVUYWJsZUdldEluZGV4QXQoQXRrVGFibGUqIHRhYmxlLCBnaW50IHJvdywgZ2ludCBjb2x1
CiAgICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJ
QkxFKHRhYmxlKSwgLTEpOwogCiAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogYXhDZWxsID0g
Y2VsbCh0YWJsZSwgcm93LCBjb2x1bW4pOwotICAgIEFjY2Vzc2liaWxpdHlUYWJsZSogYXhUYWJs
ZSA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlKGNvcmUodGFibGUpKTsKKyAgICBBY2Nlc3NpYmlsaXR5
VGFibGUqIGF4VGFibGUgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KGNvcmUodGFibGUp
KTsKICAgICByZXR1cm4gY2VsbEluZGV4KGF4Q2VsbCwgYXhUYWJsZSk7CiB9CiAKQEAgLTE1Miw4
ICsxNTAsOCBAQCBzdGF0aWMgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXROQ29sdW1ucyhB
dGtUYWJsZSogdGFibGUpCiAgICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlk
KFdFQktJVF9BQ0NFU1NJQkxFKHRhYmxlKSwgMCk7CiAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBhY2NUYWJsZSA9IGNvcmUodGFibGUpOwotICAgIGlmIChhY2NUYWJsZS0+aXNBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0b0FjY2Vzc2liaWxpdHlUYWJsZShh
Y2NUYWJsZSktPmNvbHVtbkNvdW50KCk7CisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4o
KmFjY1RhYmxlKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4o
KmFjY1RhYmxlKS5jb2x1bW5Db3VudCgpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xNjMsOCAr
MTYxLDggQEAgc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0TlJvd3MoQXRrVGFi
bGUqIHRhYmxlKQogICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJL
SVRfQUNDRVNTSUJMRSh0YWJsZSksIDApOwogCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNj
VGFibGUgPSBjb3JlKHRhYmxlKTsKLSAgICBpZiAoYWNjVGFibGUtPmlzQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdCgpKQotICAgICAgICByZXR1cm4gdG9BY2Nlc3NpYmlsaXR5VGFibGUoYWNjVGFi
bGUpLT5yb3dDb3VudCgpOworICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NUYWJs
ZSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NUYWJs
ZSkucm93Q291bnQoKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjAyLDE4ICsyMDAsMTggQEAg
c3RhdGljIEF0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q29sdW1uSGVhZGVyKEF0
a1RhYmxlKiB0YWJsZSwgZ2ludCBjb2wKICAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJ
c0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUodGFibGUpLCAwKTsKIAogICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGFjY1RhYmxlID0gY29yZSh0YWJsZSk7Ci0gICAgaWYgKGFjY1RhYmxlLT5pc0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgeworICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFi
bGU+KCphY2NUYWJsZSkpIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yIGNvbHVtbkhlYWRlcnM7Ci0gICAgICAgIHRvQWNjZXNzaWJpbGl0
eVRhYmxlKGFjY1RhYmxlKS0+Y29sdW1uSGVhZGVycyhjb2x1bW5IZWFkZXJzKTsKKyAgICAgICAg
ZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqYWNjVGFibGUpLmNvbHVtbkhlYWRlcnMoY29s
dW1uSGVhZGVycyk7CiAKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjb2x1bW5IZWFkZXIgOiBj
b2x1bW5IZWFkZXJzKSB7CiAgICAgICAgICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVk
PiBjb2x1bW5SYW5nZTsKLSAgICAgICAgICAgIHRvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbChjb2x1
bW5IZWFkZXIuZ2V0KCkpLT5jb2x1bW5JbmRleFJhbmdlKGNvbHVtblJhbmdlKTsKKyAgICAgICAg
ICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpjb2x1bW5IZWFkZXIpLmNvbHVt
bkluZGV4UmFuZ2UoY29sdW1uUmFuZ2UpOwogICAgICAgICAgICAgaWYgKGNvbHVtblJhbmdlLmZp
cnN0IDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2x1bW4pICYmIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihjb2x1bW4pIDwgY29sdW1uUmFuZ2UuZmlyc3QgKyBjb2x1bW5SYW5nZS5zZWNvbmQpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbkhlYWRlci0+d3JhcHBlcigpOwogICAgICAgICB9
CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMg
QXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dIZWFkZXIoQXRrVGFibGUqIHRh
YmxlLCBnaW50IHJvdykKQEAgLTIyMiwxOCArMjIwLDE4IEBAIHN0YXRpYyBBdGtPYmplY3QqIHdl
YmtpdEFjY2Vzc2libGVUYWJsZUdldFJvd0hlYWRlcihBdGtUYWJsZSogdGFibGUsIGdpbnQgcm93
KQogICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNT
SUJMRSh0YWJsZSksIDApOwogCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjVGFibGUgPSBj
b3JlKHRhYmxlKTsKLSAgICBpZiAoYWNjVGFibGUtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dCgpKSB7CisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxlKSkgewogICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93
SGVhZGVyczsKLSAgICAgICAgdG9BY2Nlc3NpYmlsaXR5VGFibGUoYWNjVGFibGUpLT5yb3dIZWFk
ZXJzKHJvd0hlYWRlcnMpOworICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCph
Y2NUYWJsZSkucm93SGVhZGVycyhyb3dIZWFkZXJzKTsKIAogICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIHJvd0hlYWRlciA6IHJvd0hlYWRlcnMpIHsKICAgICAgICAgICAgIHN0ZDo6cGFpcjx1bnNp
Z25lZCwgdW5zaWduZWQ+IHJvd1JhbmdlOwotICAgICAgICAgICAgdG9BY2Nlc3NpYmlsaXR5VGFi
bGVDZWxsKHJvd0hlYWRlci5nZXQoKSktPnJvd0luZGV4UmFuZ2Uocm93UmFuZ2UpOworICAgICAg
ICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKnJvd0hlYWRlcikucm93SW5k
ZXhSYW5nZShyb3dSYW5nZSk7CiAgICAgICAgICAgICBpZiAocm93UmFuZ2UuZmlyc3QgPD0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHJvdykgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJvdykgPCBy
b3dSYW5nZS5maXJzdCArIHJvd1JhbmdlLnNlY29uZCkKICAgICAgICAgICAgICAgICByZXR1cm4g
cm93SGVhZGVyLT53cmFwcGVyKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2li
bGVUYWJsZUdldENhcHRpb24oQXRrVGFibGUqIHRhYmxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlQ2Vs
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGFibGVDZWxsLmNwcAppbmRleCA0YjhmMGU4NDc5ZTFlNzQzNzM4Nzc3MTJiMGVi
NzEwMDE4YzYwNzBhLi4zZDFlOTYyMTFlOTQ1Y2RmYTQxZWE4MDJlMWYzMTMwYTczMzU4YzBiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGFibGVDZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGVDZWxsLmNwcApAQCAtNTQsMTEg
KzU0LDExIEBAIEdQdHJBcnJheSogd2Via2l0QWNjZXNzaWJsZVRhYmxlQ2VsbEdldENvbHVtbkhl
YWRlckNlbGxzKEF0a1RhYmxlQ2VsbCogY2VsbCkKICAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vz
c2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUoY2VsbCksIG51bGxwdHIpOwogCiAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogYXhPYmplY3QgPSBjb3JlKGNlbGwpOwotICAgIGlmICghYXhP
YmplY3QgfHwgIWF4T2JqZWN0LT5pc1RhYmxlQ2VsbCgpKQorICAgIGlmICghaXM8QWNjZXNzaWJp
bGl0eVRhYmxlQ2VsbD4oYXhPYmplY3QpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5I
ZWFkZXJzOwotICAgIHRvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbChheE9iamVjdCktPmNvbHVtbkhl
YWRlcnMoY29sdW1uSGVhZGVycyk7CisgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bD4oKmF4T2JqZWN0KS5jb2x1bW5IZWFkZXJzKGNvbHVtbkhlYWRlcnMpOwogCiAgICAgcmV0dXJu
IGNvbnZlcnRUb0dQdHJBcnJheShjb2x1bW5IZWFkZXJzKTsKIH0KQEAgLTY5LDExICs2OSwxMSBA
QCBHUHRyQXJyYXkqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxHZXRSb3dIZWFkZXJDZWxscyhB
dGtUYWJsZUNlbGwqIGNlbGwpCiAgICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZh
bGlkKFdFQktJVF9BQ0NFU1NJQkxFKGNlbGwpLCBudWxscHRyKTsKIAogICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGF4T2JqZWN0ID0gY29yZShjZWxsKTsKLSAgICBpZiAoIWF4T2JqZWN0IHx8ICFh
eE9iamVjdC0+aXNUYWJsZUNlbGwoKSkKKyAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlUYWJsZUNl
bGw+KGF4T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93SGVhZGVyczsKLSAgICB0
b0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwoYXhPYmplY3QpLT5yb3dIZWFkZXJzKHJvd0hlYWRlcnMp
OworICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpheE9iamVjdCkucm93SGVh
ZGVycyhyb3dIZWFkZXJzKTsKIAogICAgIHJldHVybiBjb252ZXJ0VG9HUHRyQXJyYXkocm93SGVh
ZGVycyk7CiB9CkBAIC04NCwxMSArODQsMTEgQEAgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVD
ZWxsR2V0Q29sdW1uU3BhbihBdGtUYWJsZUNlbGwqIGNlbGwpCiAgICAgcmV0dXJuVmFsSWZXZWJL
aXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJQkxFKGNlbGwpLCAwKTsKIAogICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4T2JqZWN0ID0gY29yZShjZWxsKTsKLSAgICBpZiAoIWF4
T2JqZWN0IHx8ICFheE9iamVjdC0+aXNUYWJsZUNlbGwoKSkKKyAgICBpZiAoIWlzPEFjY2Vzc2li
aWxpdHlUYWJsZUNlbGw+KGF4T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBzdGQ6
OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBjb2x1bW5SYW5nZTsKLSAgICB0b0FjY2Vzc2liaWxp
dHlUYWJsZUNlbGwoYXhPYmplY3QpLT5jb2x1bW5JbmRleFJhbmdlKGNvbHVtblJhbmdlKTsKKyAg
ICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqYXhPYmplY3QpLmNvbHVtbkluZGV4
UmFuZ2UoY29sdW1uUmFuZ2UpOwogCiAgICAgcmV0dXJuIGNvbHVtblJhbmdlLnNlY29uZDsKIH0K
QEAgLTk5LDExICs5OSwxMSBAQCBnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxHZXRSb3dT
cGFuKEF0a1RhYmxlQ2VsbCogY2VsbCkKICAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJ
c0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUoY2VsbCksIDApOwogCiAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogYXhPYmplY3QgPSBjb3JlKGNlbGwpOwotICAgIGlmICghYXhPYmplY3QgfHwgIWF4
T2JqZWN0LT5pc1RhYmxlQ2VsbCgpKQorICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bD4oYXhPYmplY3QpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHN0ZDo6cGFpcjx1bnNpZ25l
ZCwgdW5zaWduZWQ+IHJvd1JhbmdlOwotICAgIHRvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbChheE9i
amVjdCktPnJvd0luZGV4UmFuZ2Uocm93UmFuZ2UpOworICAgIGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZUNlbGw+KCpheE9iamVjdCkucm93SW5kZXhSYW5nZShyb3dSYW5nZSk7CiAKICAgICBy
ZXR1cm4gcm93UmFuZ2Uuc2Vjb25kOwogfQpAQCAtMTE0LDE2ICsxMTQsMTYgQEAgZ2Jvb2xlYW4g
d2Via2l0QWNjZXNzaWJsZVRhYmxlQ2VsbEdldFBvc2l0aW9uKEF0a1RhYmxlQ2VsbCogY2VsbCwg
Z2ludCogcm93LCBnaW4KICAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQo
V0VCS0lUX0FDQ0VTU0lCTEUoY2VsbCksIGZhbHNlKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGF4T2JqZWN0ID0gY29yZShjZWxsKTsKLSAgICBpZiAoIWF4T2JqZWN0IHx8ICFheE9iamVj
dC0+aXNUYWJsZUNlbGwoKSkKKyAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KGF4
T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc3RkOjpwYWlyPHVuc2lnbmVk
LCB1bnNpZ25lZD4gY29sdW1uUm93UmFuZ2U7CiAgICAgaWYgKHJvdykgewotICAgICAgICB0b0Fj
Y2Vzc2liaWxpdHlUYWJsZUNlbGwoYXhPYmplY3QpLT5yb3dJbmRleFJhbmdlKGNvbHVtblJvd1Jh
bmdlKTsKKyAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmF4T2JqZWN0
KS5yb3dJbmRleFJhbmdlKGNvbHVtblJvd1JhbmdlKTsKICAgICAgICAgKnJvdyA9IGNvbHVtblJv
d1JhbmdlLmZpcnN0OwogICAgIH0KICAgICBpZiAoY29sdW1uKSB7Ci0gICAgICAgIHRvQWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbChheE9iamVjdCktPmNvbHVtbkluZGV4UmFuZ2UoY29sdW1uUm93UmFu
Z2UpOworICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqYXhPYmplY3Qp
LmNvbHVtbkluZGV4UmFuZ2UoY29sdW1uUm93UmFuZ2UpOwogICAgICAgICAqY29sdW1uID0gY29s
dW1uUm93UmFuZ2UuZmlyc3Q7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJpbGl0eU9iamVjdElPUy5tbQppbmRleCAxYzli
OTM5ZWZlMWFiMDdjMmUzZGExMmVmNzU2Nzk2ODNiYTk5MjA4Li4zYmI4NzY5YTMxMTM2MjkyZTU1
NTMzYmJmZWJmOGQ3YzcxYzgxMjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1MubW0KQEAgLTYyLDkgKzYy
LDkgQEAgaW50IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFjY2Vzc2liaWxpdHlQYXNzd29yZEZpZWxk
TGVuZ3RoKCkKIHsKICAgICBpZiAoIWlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4g
MDsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCA9IHRvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdCh0aGlzKS0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVj
dCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+KCp0aGlzKS5yZW5kZXJlcigp
OwogICAgIAotICAgIGlmICghcmVuZGVyT2JqZWN0IHx8ICFyZW5kZXJPYmplY3QtPm5vZGUoKSB8
fCAhcmVuZGVyT2JqZWN0LT5ub2RlKCktPmlzSFRNTEVsZW1lbnQoKSkKKyAgICBpZiAoIXJlbmRl
ck9iamVjdCB8fCAhaXM8SFRNTElucHV0RWxlbWVudD4ocmVuZGVyT2JqZWN0LT5ub2RlKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRF
bGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKnJlbmRlck9iamVjdC0+bm9kZSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KaW5kZXggZjQ1YjA5NjZk
ZThmMzkyY2FiODdlZjQ5MmZjNzY2YmQyMDYwOWM5MC4uNmE0MWI5NzcxZTA1OGFjZGE2YjFhYTgx
YWNhMjEwZTFiZGYwYzVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1Mu
bW0KQEAgLTExMTQsOCArMTExNCw4IEBAIC0gKENHUG9pbnQpY29udmVydFBvaW50VG9TY3JlZW5T
cGFjZTooRmxvYXRQb2ludCAmKXBvaW50CiAgICAgICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcg
PSBudWxscHRyOwogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBudWxscHRy
OwogICAgICAgICBmb3IgKHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50
OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAgICAgICBpZiAocGFy
ZW50LT5pc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpIHsKLSAgICAgICAgICAgICAgICBzY3Jv
bGxWaWV3ID0gdG9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhwYXJlbnQpLT5zY3JvbGxWaWV3KCk7
CisgICAgICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpwYXJlbnQpKSB7
CisgICAgICAgICAgICAgICAgc2Nyb2xsVmlldyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3PigqcGFyZW50KS5zY3JvbGxWaWV3KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTExNjgsOCArMTE2OCw4IEBAIC0gKENHUmVjdClj
b252ZXJ0UmVjdFRvU2NyZWVuU3BhY2U6KEludFJlY3QgJilyZWN0CiAgICAgICAgIFNjcm9sbFZp
ZXcqIHNjcm9sbFZpZXcgPSBudWxscHRyOwogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBw
YXJlbnQgPSBudWxscHRyOwogICAgICAgICBmb3IgKHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRP
YmplY3QoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAg
ICAgICAgICBpZiAocGFyZW50LT5pc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpIHsKLSAgICAg
ICAgICAgICAgICBzY3JvbGxWaWV3ID0gdG9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhwYXJlbnQp
LT5zY3JvbGxWaWV3KCk7CisgICAgICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZp
ZXc+KCpwYXJlbnQpKSB7CisgICAgICAgICAgICAgICAgc2Nyb2xsVmlldyA9IGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlTY3JvbGxWaWV3PigqcGFyZW50KS5zY3JvbGxWaWV3KCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggNDhiOWFlZTI3MGJlYzg5OWU5Zjc5NGIxMzQzMTg1
NTg5MzNmM2NhNC4uM2Y5ZGJkNmUwMGRjOTRlMTU0NzUyNzIxMjBmYjI2MzdiYWZjYzY3OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9t
YWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTk5NCwxMCArOTk0LDEw
IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0RWxlbWVudChOU011dGFibGVBdHRy
aWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOCiAgICAgaWYgKCFBWEF0dHJpYnV0ZWRTdHJpbmdS
YW5nZUlzVmFsaWQoYXR0clN0cmluZywgcmFuZ2UpKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgaWYgKG9iamVjdCAmJiBvYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKSB7
CisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+KG9iamVjdCkpIHsKICAgICAg
ICAgLy8gbWFrZSBhIHNlcmlhbGl6YWJsZSBBWCBvYmplY3QKICAgICAgICAgCi0gICAgICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSB0b0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qob2JqZWN0
KS0+cmVuZGVyZXIoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRvd25jYXN0
PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+KCpvYmplY3QpLnJlbmRlcmVyKCk7CiAgICAgICAg
IGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIApAQCAtMTE5OSw3
ICsxMTk5LDcgQEAgLSAoTlNBcnJheSopYWRkaXRpb25hbEFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVO
YW1lcwogICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNBUklBRHJvcHBpbmcoKSkKICAgICAgICAg
W2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRl
XTsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgJiYgdG9B
Y2Nlc3NpYmlsaXR5VGFibGUobV9vYmplY3QpLT5zdXBwb3J0c1NlbGVjdGVkUm93cygpKQorICAg
IGlmIChtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSAmJiBkb3duY2FzdDxBY2Nlc3Np
YmlsaXR5VGFibGU+KCptX29iamVjdCkuc3VwcG9ydHNTZWxlY3RlZFJvd3MoKSkKICAgICAgICAg
W2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0
ZV07CiAgICAgCiAgICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c0FSSUFMaXZlUmVnaW9uKCkpIHsK
QEAgLTE3NTIsOCArMTc1Miw4IEBAIC0gKENHUG9pbnQpY29udmVydFBvaW50VG9TY3JlZW5TcGFj
ZTooRmxvYXRQb2ludCAmKXBvaW50CiAgICAgICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcgPSBu
dWxscHRyOwogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBudWxscHRyOwog
ICAgICAgICBmb3IgKHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50OyBw
YXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAgICAgICBpZiAocGFyZW50
LT5pc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxW
aWV3ID0gdG9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhwYXJlbnQpLT5zY3JvbGxWaWV3KCk7Cisg
ICAgICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpwYXJlbnQpKSB7Cisg
ICAgICAgICAgICAgICAgc2Nyb2xsVmlldyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3PigqcGFyZW50KS5zY3JvbGxWaWV3KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE5OTIsOCArMTk5Miw4IEBAIC0gKE5TU3RyaW5nKilz
dWJyb2xlCiAgICAgaWYgKG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBIb3Jpem9udGFsUnVsZVJv
bGUpCiAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlDb250ZW50U2VwYXJhdG9yU3Vicm9s
ZTsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzU3BpbkJ1dHRvblBhcnQoKSkgewotICAgICAg
ICBpZiAodG9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvblBhcnQobV9vYmplY3QpLT5pc0luY3JlbWVu
dG9yKCkpCisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uUGFydD4oKm1fb2JqZWN0
KSkgeworICAgICAgICBpZiAoZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNwaW5CdXR0b25QYXJ0Pigq
bV9vYmplY3QpLmlzSW5jcmVtZW50b3IoKSkKICAgICAgICAgICAgIHJldHVybiBOU0FjY2Vzc2li
aWxpdHlJbmNyZW1lbnRBcnJvd1N1YnJvbGU7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gTlNB
Y2Nlc3NpYmlsaXR5RGVjcmVtZW50QXJyb3dTdWJyb2xlOwpAQCAtMjAwNSwxMSArMjAwNSwxMSBA
QCAtIChOU1N0cmluZyopc3Vicm9sZQogICAgIGlmIChtX29iamVjdC0+aXNUcmVlSXRlbSgpKQog
ICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5T3V0bGluZVJvd1N1YnJvbGU7CiAgICAgCi0g
ICAgaWYgKG1fb2JqZWN0LT5pc0xpc3QoKSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5TGlzdCog
bGlzdE9iamVjdCA9IHRvQWNjZXNzaWJpbGl0eUxpc3QobV9vYmplY3QpOwotICAgICAgICBpZiAo
bGlzdE9iamVjdC0+aXNVbm9yZGVyZWRMaXN0KCkgfHwgbGlzdE9iamVjdC0+aXNPcmRlcmVkTGlz
dCgpKQorICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5TGlzdD4oKm1fb2JqZWN0KSkgeworICAgICAg
ICBhdXRvJiBsaXN0T2JqZWN0ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUxpc3Q+KCptX29iamVj
dCk7CisgICAgICAgIGlmIChsaXN0T2JqZWN0LmlzVW5vcmRlcmVkTGlzdCgpIHx8IGxpc3RPYmpl
Y3QuaXNPcmRlcmVkTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eUNv
bnRlbnRMaXN0U3Vicm9sZTsKLSAgICAgICAgaWYgKGxpc3RPYmplY3QtPmlzRGVzY3JpcHRpb25M
aXN0KCkpIHsKKyAgICAgICAgaWYgKGxpc3RPYmplY3QuaXNEZXNjcmlwdGlvbkxpc3QoKSkgewog
I2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDkwCiAgICAgICAgICAgICBy
ZXR1cm4gTlNBY2Nlc3NpYmlsaXR5RGVmaW5pdGlvbkxpc3RTdWJyb2xlOwogI2Vsc2UKQEAgLTIx
NzksOSArMjE3OSw4IEBAIC0gKE5TU3RyaW5nKilyb2xlRGVzY3JpcHRpb24KICAgICAKICAgICAv
LyBPbmx5IHJldHVybmluZyBmb3IgREwgKG5vdCBVTCBvciBPTCkgYmVjYXVzZSBkZXNjcmlwdGlv
biBjaGFuZ2VkIHdpdGggSFRNTDUgZnJvbSAnZGVmaW5pdGlvbiBsaXN0JyB0bwogICAgIC8vIHN1
cGVyc2V0ICdkZXNjcmlwdGlvbiBsaXN0JyBhbmQgZG9lcyBub3QgcmV0dXJuIHRoZSBzYW1lIHZh
bHVlcyBpbiBBWCBBUEkgb24gc29tZSBPUyB2ZXJzaW9ucy4gCi0gICAgaWYgKG1fb2JqZWN0LT5p
c0xpc3QoKSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5TGlzdCogbGlzdE9iamVjdCA9IHRvQWNj
ZXNzaWJpbGl0eUxpc3QobV9vYmplY3QpOwotICAgICAgICBpZiAobGlzdE9iamVjdC0+aXNEZXNj
cmlwdGlvbkxpc3QoKSkKKyAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eUxpc3Q+KCptX29iamVjdCkp
IHsKKyAgICAgICAgaWYgKGRvd25jYXN0PEFjY2Vzc2liaWxpdHlMaXN0PigqbV9vYmplY3QpLmlz
RGVzY3JpcHRpb25MaXN0KCkpCiAgICAgICAgICAgICByZXR1cm4gQVhEZXNjcmlwdGlvbkxpc3RU
ZXh0KCk7CiAgICAgfQogICAgIApAQCAtMjIxNyw3ICsyMjE2LDcgQEAgLSAoTlNTdHJpbmcgKilj
b21wdXRlZFJvbGVTdHJpbmcKIAogLSAoaWQpc2Nyb2xsVmlld1BhcmVudAogewotICAgIGlmICgh
bV9vYmplY3QgfHwgIW1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpCisgICAg
aWYgKCFpczxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4obV9vYmplY3QpKQogICAgICAgICByZXR1
cm4gbmlsOwogICAgIAogICAgIC8vIElmIHRoaXMgc2Nyb2xsIHZpZXcgcHJvdmlkZXMgaXQncyBw
YXJlbnQgb2JqZWN0IChiZWNhdXNlIGl0J3MgYSBzdWItZnJhbWUpLCB0aGVuCkBAIC0yMjI1LDgg
KzIyMjQsNyBAQCAtIChpZClzY3JvbGxWaWV3UGFyZW50CiAgICAgaWYgKG1fb2JqZWN0LT5wYXJl
bnRPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5
U2Nyb2xsVmlldyogc2Nyb2xsVmlldyA9IHRvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcobV9vYmpl
Y3QpOwotICAgIFNjcm9sbFZpZXcqIHNjcm9sbCA9IHNjcm9sbFZpZXctPnNjcm9sbFZpZXcoKTsK
KyAgICBTY3JvbGxWaWV3KiBzY3JvbGwgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmll
dz4oKm1fb2JqZWN0KS5zY3JvbGxWaWV3KCk7CiAgICAgaWYgKCFzY3JvbGwpCiAgICAgICAgIHJl
dHVybiBuaWw7CiAgICAgCkBAIC0yMzMzLDcgKzIzMzEsNyBAQCAtIChpZClhY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lCiAgICAgaWYgKG1fb2JqZWN0
LT5pc1dlYkFyZWEoKSkgewogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhMaW5rVUlFbGVtZW50cyJdKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgbGlua3M7Ci0gICAgICAgICAgICB0b0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QobV9vYmplY3QpLT5nZXREb2N1bWVudExpbmtzKGxpbmtz
KTsKKyAgICAgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+KCptX29i
amVjdCkuZ2V0RG9jdW1lbnRMaW5rcyhsaW5rcyk7CiAgICAgICAgICAgICByZXR1cm4gY29udmVy
dFRvTlNBcnJheShsaW5rcyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpAIkFYTG9hZGVkIl0pCkBAIC0yMzkyLDExICsyMzkwLDExIEBAIC0g
KGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWUK
ICAgICB9CiAKICAgICAvLyBPbmx5IG5hdGl2ZSBzcGluIGJ1dHRvbnMgaGF2ZSBpbmNyZW1lbnQg
YW5kIGRlY3JlbWVudCBidXR0b25zLgotICAgIGlmIChtX29iamVjdC0+aXNOYXRpdmVTcGluQnV0
dG9uKCkpIHsKKyAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVNwaW5CdXR0b24+KCptX29iamVjdCkp
IHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlJbmNyZW1lbnRCdXR0b25BdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIHRvQWNj
ZXNzaWJpbGl0eVNwaW5CdXR0b24obV9vYmplY3QpLT5pbmNyZW1lbnRCdXR0b24oKS0+d3JhcHBl
cigpOworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTcGluQnV0dG9u
PigqbV9vYmplY3QpLmluY3JlbWVudEJ1dHRvbigpLT53cmFwcGVyKCk7CiAgICAgICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGVjcmVtZW50QnV0
dG9uQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiB0b0FjY2Vzc2liaWxpdHlTcGluQnV0
dG9uKG1fb2JqZWN0KS0+ZGVjcmVtZW50QnV0dG9uKCktPndyYXBwZXIoKTsKKyAgICAgICAgICAg
IHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbj4oKm1fb2JqZWN0KS5kZWNy
ZW1lbnRCdXR0b24oKS0+d3JhcHBlcigpOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYVmlzaXRlZCJdKQpAQCAtMjU1NywxOSArMjU1NSwy
MCBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1
dGVOYW1lCiAgICAgfQogICAgIAogICAgIGlmIChtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5VGFi
bGUoKSkgeworICAgICAgICBhdXRvJiB0YWJsZSA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJs
ZT4oKm1fb2JqZWN0KTsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlSb3dzQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiBjb252
ZXJ0VG9OU0FycmF5KHRvQWNjZXNzaWJpbGl0eVRhYmxlKG1fb2JqZWN0KS0+cm93cygpKTsKKyAg
ICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHRhYmxlLnJvd3MoKSk7CiAgICAgICAg
IAogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eVZpc2libGVSb3dzQXR0cmlidXRlXSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHZpc2libGVSb3dzOwotICAgICAgICAg
ICAgdG9BY2Nlc3NpYmlsaXR5VGFibGUobV9vYmplY3QpLT52aXNpYmxlUm93cyh2aXNpYmxlUm93
cyk7CisgICAgICAgICAgICB0YWJsZS52aXNpYmxlUm93cyh2aXNpYmxlUm93cyk7CiAgICAgICAg
ICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheSh2aXNpYmxlUm93cyk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIC8vIFRPRE86IGRpc3Rpbmd1aXNoIGJldHdlZW4gdmlzaWJsZSBhbmQg
bm9uLXZpc2libGUgY29sdW1ucwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNvbHVtbnNBdHRyaWJ1dGVdIHx8CiAgICAgICAgICAgICBb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNvbHVt
bnNBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheSh0b0Fj
Y2Vzc2liaWxpdHlUYWJsZShtX29iamVjdCktPmNvbHVtbnMoKSk7CisgICAgICAgICAgICByZXR1
cm4gY29udmVydFRvTlNBcnJheSh0YWJsZS5jb2x1bW5zKCkpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV0pIHsKQEAgLTI1ODUsMTIgKzI1ODQsMTIgQEAgLSAo
aWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyopYXR0cmlidXRlTmFtZQog
ICAgICAgICAKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlDb2x1bW5IZWFkZXJVSUVsZW1lbnRzQXR0cmlidXRlXSkgewogICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbHVt
bkhlYWRlcnM7Ci0gICAgICAgICAgICB0b0FjY2Vzc2liaWxpdHlUYWJsZShtX29iamVjdCktPmNv
bHVtbkhlYWRlcnMoY29sdW1uSGVhZGVycyk7CisgICAgICAgICAgICB0YWJsZS5jb2x1bW5IZWFk
ZXJzKGNvbHVtbkhlYWRlcnMpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXko
Y29sdW1uSGVhZGVycyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SGVhZGVyQXR0cmlidXRlXSkg
ewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogaGVhZGVyQ29udGFpbmVyID0gdG9B
Y2Nlc3NpYmlsaXR5VGFibGUobV9vYmplY3QpLT5oZWFkZXJDb250YWluZXIoKTsKKyAgICAgICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlckNvbnRhaW5lciA9IHRhYmxlLmhlYWRlckNv
bnRhaW5lcigpOwogICAgICAgICAgICAgaWYgKGhlYWRlckNvbnRhaW5lcikKICAgICAgICAgICAg
ICAgICByZXR1cm4gaGVhZGVyQ29udGFpbmVyLT53cmFwcGVyKCk7CiAgICAgICAgICAgICByZXR1
cm4gbmlsOwpAQCAtMjU5OCw1OSArMjU5Nyw2MSBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmli
dXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lCiAgICAgICAgIAogICAgICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvd0hlYWRlclVJ
RWxlbWVudHNBdHRyaWJ1dGVdKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93SGVhZGVyczsKLSAgICAgICAgICAgIHRvQWNj
ZXNzaWJpbGl0eVRhYmxlKG1fb2JqZWN0KS0+cm93SGVhZGVycyhyb3dIZWFkZXJzKTsKKyAgICAg
ICAgICAgIHRhYmxlLnJvd0hlYWRlcnMocm93SGVhZGVycyk7CiAgICAgICAgICAgICByZXR1cm4g
Y29udmVydFRvTlNBcnJheShyb3dIZWFkZXJzKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWaXNp
YmxlQ2VsbHNBdHRyaWJ1dGVdKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2VsbHM7Ci0gICAgICAgICAgICB0b0FjY2Vzc2li
aWxpdHlUYWJsZShtX29iamVjdCktPmNlbGxzKGNlbGxzKTsKKyAgICAgICAgICAgIHRhYmxlLmNl
bGxzKGNlbGxzKTsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGNlbGxzKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb2x1bW5Db3VudEF0dHJpYnV0ZV0pCi0gICAgICAgICAg
ICByZXR1cm4gQCh0b0FjY2Vzc2liaWxpdHlUYWJsZShtX29iamVjdCktPmNvbHVtbkNvdW50KCkp
OworICAgICAgICAgICAgcmV0dXJuIEAodGFibGUuY29sdW1uQ291bnQoKSk7CiAgICAgICAgIAog
ICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eVJvd0NvdW50QXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiBAKHRvQWNjZXNzaWJpbGl0
eVRhYmxlKG1fb2JqZWN0KS0+cm93Q291bnQoKSk7CisgICAgICAgICAgICByZXR1cm4gQCh0YWJs
ZS5yb3dDb3VudCgpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc1RhYmxlQ29s
dW1uKCkpIHsKKyAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uPigqbV9vYmplY3Qp
KSB7CisgICAgICAgIGF1dG8mIGNvbHVtbiA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNv
bHVtbj4oKm1fb2JqZWN0KTsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlJbmRleEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6dG9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4obV9vYmpl
Y3QpLT5jb2x1bW5JbmRleCgpXTsKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aEludDpjb2x1bW4uY29sdW1uSW5kZXgoKV07CiAgICAgICAgIAogICAgICAgICAvLyByb3dz
IGF0dHJpYnV0ZSBmb3IgYSBjb2x1bW4gaXMgdGhlIGxpc3Qgb2YgYWxsIHRoZSBlbGVtZW50cyBp
biB0aGF0IGNvbHVtbiBhdCBlYWNoIHJvdwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvd3NBdHRyaWJ1dGVdIHx8CiAgICAgICAgICAg
ICBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZVJv
d3NBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheSh0b0Fj
Y2Vzc2liaWxpdHlUYWJsZUNvbHVtbihtX29iamVjdCktPmNoaWxkcmVuKCkpOworICAgICAgICAg
ICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29sdW1uLmNoaWxkcmVuKCkpOwogICAgICAgICB9
CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5SGVhZGVyQXR0cmlidXRlXSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
aGVhZGVyID0gdG9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4obV9vYmplY3QpLT5oZWFkZXJPYmpl
Y3QoKTsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlciA9IGNvbHVtbi5o
ZWFkZXJPYmplY3QoKTsKICAgICAgICAgICAgIGlmICghaGVhZGVyKQogICAgICAgICAgICAgICAg
IHJldHVybiBuaWw7CiAgICAgICAgICAgICByZXR1cm4gaGVhZGVyLT53cmFwcGVyKCk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc1RhYmxlQ2VsbCgpKSB7Cisg
ICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCptX29iamVjdCkpIHsKKyAgICAgICAg
YXV0byYgY2VsbCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCptX29iamVjdCk7
CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5Um93SW5kZXhSYW5nZUF0dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIHN0ZDo6cGFpcjx1bnNp
Z25lZCwgdW5zaWduZWQ+IHJvd1JhbmdlOwotICAgICAgICAgICAgdG9BY2Nlc3NpYmlsaXR5VGFi
bGVDZWxsKG1fb2JqZWN0KS0+cm93SW5kZXhSYW5nZShyb3dSYW5nZSk7CisgICAgICAgICAgICBj
ZWxsLnJvd0luZGV4UmFuZ2Uocm93UmFuZ2UpOwogICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVl
IHZhbHVlV2l0aFJhbmdlOk5TTWFrZVJhbmdlKHJvd1JhbmdlLmZpcnN0LCByb3dSYW5nZS5zZWNv
bmQpXTsKICAgICAgICAgfQogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eUNvbHVtbkluZGV4UmFuZ2VBdHRyaWJ1dGVdKSB7CiAgICAgICAg
ICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBjb2x1bW5SYW5nZTsKLSAgICAgICAg
ICAgIHRvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbChtX29iamVjdCktPmNvbHVtbkluZGV4UmFuZ2Uo
Y29sdW1uUmFuZ2UpOworICAgICAgICAgICAgY2VsbC5jb2x1bW5JbmRleFJhbmdlKGNvbHVtblJh
bmdlKTsKICAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpOU01ha2VS
YW5nZShjb2x1bW5SYW5nZS5maXJzdCwgY29sdW1uUmFuZ2Uuc2Vjb25kKV07CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlDb2x1bW5IZWFkZXJVSUVsZW1lbnRzQXR0cmlidXRlXSkgewogICAgICAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbHVtbkhlYWRlcnM7
Ci0gICAgICAgICAgICB0b0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwobV9vYmplY3QpLT5jb2x1bW5I
ZWFkZXJzKGNvbHVtbkhlYWRlcnMpOworICAgICAgICAgICAgY2VsbC5jb2x1bW5IZWFkZXJzKGNv
bHVtbkhlYWRlcnMpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29sdW1u
SGVhZGVycyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb3dIZWFkZXJVSUVsZW1lbnRzQXR0cmlidXRlXSkgewog
ICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yIHJvd0hlYWRlcnM7Ci0gICAgICAgICAgICB0b0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwobV9v
YmplY3QpLT5yb3dIZWFkZXJzKHJvd0hlYWRlcnMpOworICAgICAgICAgICAgY2VsbC5yb3dIZWFk
ZXJzKHJvd0hlYWRlcnMpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkocm93
SGVhZGVycyk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNjkxLDkgKzI2OTIsOSBAQCAtIChpZClh
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lCiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KG1fb2JqZWN0LT5pc1RhYmxlUm93KCkpIHsKKyAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlU
YWJsZVJvdz4oKm1fb2JqZWN0KSkgewogICAgICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmRleEF0dHJpYnV0ZV0pCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OnRvQWNjZXNzaWJpbGl0eVRhYmxl
Um93KG1fb2JqZWN0KS0+cm93SW5kZXgoKV07CisgICAgICAgICAgICAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoSW50OmRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKm1fb2Jq
ZWN0KS5yb3dJbmRleCgpXTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTI3MDMsOSArMjcw
NCw5IEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcqKWF0dHJp
YnV0ZU5hbWUKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciByb3dzQ29weTsKICAgICAgICAgICAgIG1fb2JqZWN0LT5hcmlhVHJlZUl0
ZW1EaXNjbG9zZWRSb3dzKHJvd3NDb3B5KTsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9O
U0FycmF5KHJvd3NDb3B5KTsKLSAgICAgICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNBUklBVHJl
ZUdyaWRSb3coKSkgeworICAgICAgICB9IGVsc2UgaWYgKGlzPEFjY2Vzc2liaWxpdHlBUklBR3Jp
ZFJvdz4oKm1fb2JqZWN0KSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3NDb3B5OwotICAgICAgICAgICAgdG9BY2Nlc3Np
YmlsaXR5QVJJQUdyaWRSb3cobV9vYmplY3QpLT5kaXNjbG9zZWRSb3dzKHJvd3NDb3B5KTsKKyAg
ICAgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdz4oKm1fb2JqZWN0KS5k
aXNjbG9zZWRSb3dzKHJvd3NDb3B5KTsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0Fy
cmF5KHJvd3NDb3B5KTsKICAgICAgICAgfQogICAgIH0KQEAgLTI3MjMsOCArMjcyNCw4IEBAIC0g
KGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWUK
ICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgfSBlbHNlIGlmIChtX29i
amVjdC0+aXNBUklBVHJlZUdyaWRSb3coKSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogcm93ID0gdG9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cobV9vYmplY3QpLT5kaXNjbG9z
ZWRCeVJvdygpOworICAgICAgICB9IGVsc2UgaWYgKGlzPEFjY2Vzc2liaWxpdHlBUklBR3JpZFJv
dz4oKm1fb2JqZWN0KSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcm93ID0g
ZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93PigqbV9vYmplY3QpLmRpc2Nsb3NlZEJ5
Um93KCk7CiAgICAgICAgICAgICBpZiAoIXJvdykKICAgICAgICAgICAgICAgICByZXR1cm4gbmls
OwogICAgICAgICAgICAgcmV0dXJuIHJvdy0+d3JhcHBlcigpOwpAQCAtMjc2OSw3ICsyNzcwLDcg
QEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyopYXR0cmlidXRl
TmFtZQogICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5p
c1NlbGVjdGVkKCldOwogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6IE5TQWNjZXNzaWJpbGl0eVNlcnZlc0FzVGl0bGVGb3JVSUVsZW1lbnRzQXR0cmlidXRlXSAm
JiBtX29iamVjdC0+aXNNZW51QnV0dG9uKCkpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogdWlFbGVtZW50ID0gdG9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KG1fb2JqZWN0KS0+bWVu
dUZvck1lbnVCdXR0b24oKTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogdWlFbGVtZW50
ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdD4oKm1fb2JqZWN0KS5tZW51Rm9y
TWVudUJ1dHRvbigpOwogICAgICAgICBpZiAodWlFbGVtZW50KQogICAgICAgICAgICAgcmV0dXJu
IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDp1aUVsZW1lbnQtPndyYXBwZXIoKV07CiAgICAgfQpA
QCAtMzE5Nyw4ICszMTk4LDggQEAgLSAodm9pZClhY2Nlc3NpYmlsaXR5U2hvd0NvbnRleHRNZW51
CiAgICAgaWYgKGZyYW1lVmlldyAmJiAhZnJhbWVWaWV3LT5wbGF0Zm9ybVdpZGdldCgpKSB7CiAg
ICAgICAgIC8vIEZpbmQgdGhlIGFwcHJvcHJpYXRlIHNjcm9sbCB2aWV3IHRvIHVzZSB0byBjb252
ZXJ0IHRoZSBjb250ZW50cyB0byB0aGUgd2luZG93LgogICAgICAgICBmb3IgKEFjY2Vzc2liaWxp
dHlPYmplY3QqIHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50OyBwYXJl
bnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAgICAgICBpZiAocGFyZW50LT5p
c0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpIHsKLSAgICAgICAgICAgICAgICBTY3JvbGxWaWV3
KiBzY3JvbGxWaWV3ID0gdG9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhwYXJlbnQpLT5zY3JvbGxW
aWV3KCk7CisgICAgICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpwYXJl
bnQpKSB7CisgICAgICAgICAgICAgICAgU2Nyb2xsVmlldyogc2Nyb2xsVmlldyA9IGRvd25jYXN0
PEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3PigqcGFyZW50KS5zY3JvbGxWaWV3KCk7CiAgICAgICAg
ICAgICAgICAgcmVjdCA9IHNjcm9sbFZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhyZWN0KTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTMyOTksNyArMzMwMCw3IEBA
IC0gKHZvaWQpYWNjZXNzaWJpbGl0eVNldFZhbHVlOihpZCl2YWx1ZSBmb3JBdHRyaWJ1dGU6KE5T
U3RyaW5nKilhdHRyaWJ1dGVOYW1lCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZENoaWxk
cmVuOwogICAgICAgICBjb252ZXJ0VG9WZWN0b3IoYXJyYXksIHNlbGVjdGVkQ2hpbGRyZW4pOwot
ICAgICAgICB0b0FjY2Vzc2liaWxpdHlMaXN0Qm94KG1fb2JqZWN0KS0+c2V0U2VsZWN0ZWRDaGls
ZHJlbihzZWxlY3RlZENoaWxkcmVuKTsKKyAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUxp
c3RCb3g+KCptX29iamVjdCkuc2V0U2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuKTsK
ICAgICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsKICAgICAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRU
ZXh0QXR0cmlidXRlXSkgewogICAgICAgICAgICAgbV9vYmplY3QtPnNldFNlbGVjdGVkVGV4dChz
dHJpbmcpOwpAQCAtMzcwNiw3ICszNzA3LDcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOihOU1N0cmluZyopYXR0cmlidXRlIGZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGUKICAg
ICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNlbGxG
b3JDb2x1bW5BbmRSb3dQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAgICAgICAgaWYg
KGFycmF5ID09IG5pbCB8fCBbYXJyYXkgY291bnRdICE9IDIpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGNlbGwgPSB0b0Fj
Y2Vzc2liaWxpdHlUYWJsZShtX29iamVjdCktPmNlbGxGb3JDb2x1bW5BbmRSb3coW1thcnJheSBv
YmplY3RBdEluZGV4OjBdIHVuc2lnbmVkSW50VmFsdWVdLCBbW2FycmF5IG9iamVjdEF0SW5kZXg6
MV0gdW5zaWduZWRJbnRWYWx1ZV0pOworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bCogY2VsbCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fb2JqZWN0KS5jZWxsRm9y
Q29sdW1uQW5kUm93KFtbYXJyYXkgb2JqZWN0QXRJbmRleDowXSB1bnNpZ25lZEludFZhbHVlXSwg
W1thcnJheSBvYmplY3RBdEluZGV4OjFdIHVuc2lnbmVkSW50VmFsdWVdKTsKICAgICAgICAgICAg
IGlmICghY2VsbCkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCAw
YTEzOTdmMDFjYjBkOGM1YWU3ZTMyZjc4MGM0NTFiMGZmNzdlNzFlLi4xM2RjNWExZGUxYjU0YTQx
NDU2MmIzMmU4ZjVkYTdmNGExODg3YTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTE1ODUsOCArMTU4NSw4IEBAIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVj
dG9yRE9NQWdlbnQ6CiAgICAgICAgICAgICAgICAgICAgIGxpdmVSZWdpb25TdGF0dXMgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9u
U3RhdHVzOjpQb2xpdGU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChheE9iamVj
dC0+aXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCgpKQotICAgICAgICAgICAgICAgIG1vdXNlRXZl
bnROb2RlID0gdG9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdChheE9iamVjdCktPm1vdXNlQnV0dG9u
TGlzdGVuZXIoTW91c2VCdXR0b25MaXN0ZW5lclJlc3VsdEZpbHRlcjo6SW5jbHVkZUJvZHlFbGVt
ZW50KTsKKyAgICAgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdD4oKmF4T2Jq
ZWN0KSkKKyAgICAgICAgICAgICAgICBtb3VzZUV2ZW50Tm9kZSA9IGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0PigqYXhPYmplY3QpLm1vdXNlQnV0dG9uTGlzdGVuZXIoTW91c2VCdXR0
b25MaXN0ZW5lclJlc3VsdEZpbHRlcjo6SW5jbHVkZUJvZHlFbGVtZW50KTsKIAogICAgICAgICAg
ICAgaWYgKGF4T2JqZWN0LT5zdXBwb3J0c0FSSUFPd25zKCkpIHsKICAgICAgICAgICAgICAgICBW
ZWN0b3I8RWxlbWVudCo+IG93bmVkRWxlbWVudHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lbnVMaXN0LmNwcAppbmRleCA0ODRmZmJmNGFiOTY5YmVmYjJmYTllNDcyOGU3OTEz
NTQyNjE5OTk3Li40NGM4ZDJiM2FmOWY1N2MxZmE5YzBkOTczYzExZjUxZWFmOWZjMWUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKQEAgLTQzNyw3ICs0
MzcsNyBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjpkaWRVcGRhdGVBY3RpdmVPcHRpb24oaW50IG9w
dGlvbkluZGV4KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2Fj
aGUgPSBkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKSB7Ci0gICAgICAgIGlmIChB
Y2Nlc3NpYmlsaXR5TWVudUxpc3QqIG1lbnVMaXN0ID0gdG9BY2Nlc3NpYmlsaXR5TWVudUxpc3Qo
Y2FjaGUtPmdldCh0aGlzKSkpCisgICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5TWVudUxpc3QqIG1l
bnVMaXN0ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU1lbnVMaXN0PihjYWNoZS0+Z2V0KHRoaXMp
KSkKICAgICAgICAgICAgIG1lbnVMaXN0LT5kaWRVcGRhdGVBY3RpdmVPcHRpb24ob3B0aW9uSW5k
ZXgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVC
YXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVCYXNlLmNwcAppbmRleCA5NmY5
Yjc1MTdhOTNmNzMxYWFjYzFlMTg2ODU1NjE5MjI4ZmQzMDNhLi41ODljMzA4ZjYyODVhOGE2YjRm
ZTUxMmMxYmEyODgxMmFmNjZhMTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9BY2Nl
c3NpYmxlQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2UuY3Bw
CkBAIC02MTYsMTAgKzYxNiwxMCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEFjY2Vzc2li
bGVCYXNlOjphY2NTZWxlY3QobG9uZyBzZWxlY3Rpb25GbGFncywgVkFSSUFOVAogICAgICAgICBy
ZXR1cm4gRV9JTlZBTElEQVJHOwogCiAgICAgaWYgKHNlbGVjdGlvbkZsYWdzICYgU0VMRkxBR19U
QUtFU0VMRUNUSU9OKSB7Ci0gICAgICAgIGlmIChwYXJlbnRPYmplY3QtPmlzTGlzdEJveCgpKSB7
CisgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5TGlzdEJveD4oKnBhcmVudE9iamVjdCkpIHsK
ICAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gPiBzZWxlY3Rl
ZENoaWxkcmVuKDEpOwogICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZHJlblswXSA9IGNoaWxkT2Jq
ZWN0OwotICAgICAgICAgICAgdG9BY2Nlc3NpYmlsaXR5TGlzdEJveChwYXJlbnRPYmplY3QpLT5z
ZXRTZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW4pOworICAgICAgICAgICAgZG93bmNh
c3Q8QWNjZXNzaWJpbGl0eUxpc3RCb3g+KCpwYXJlbnRPYmplY3QpLnNldFNlbGVjdGVkQ2hpbGRy
ZW4oc2VsZWN0ZWRDaGlsZHJlbik7CiAgICAgICAgIH0gZWxzZSB7IC8vIGFueSBlbGVtZW50IG1h
eSBiZSBzZWxlY3RhYmxlIGJ5IHZpcnR1ZSBvZiBpdCBoYXZpbmcgdGhlIGFyaWEtc2VsZWN0ZWQg
cHJvcGVydHkKICAgICAgICAgICAgIEFTU0VSVCghcGFyZW50T2JqZWN0LT5pc011bHRpU2VsZWN0
YWJsZSgpKTsKICAgICAgICAgICAgIGNoaWxkT2JqZWN0LT5zZXRTZWxlY3RlZCh0cnVlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVJbWFnZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9BY2Nlc3NpYmxlSW1hZ2UuY3BwCmluZGV4IGZkNWY1ZjY3YzYxNjA4NjE0NDA3
OTgxMzZmYTFjYTQxNGM0NzdjYTAuLmViNjRlM2FiODk0MGY2YmI3ZTk3ZjIwN2M4M2JmODVlMGJj
YjQzOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVJbWFnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUltYWdlLmNwcApAQCAtNDEsMTYgKzQx
LDE2IEBAIEFjY2Vzc2libGVJbWFnZTo6QWNjZXNzaWJsZUltYWdlKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iaiwgSFdORCB3aW5kb3cpCiAKIFN0cmluZyBBY2Nlc3NpYmxlSW1hZ2U6Om5hbWUoKSBj
b25zdAogewotICAgIGlmICghbV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgp
KQorICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdD4oKm1fb2JqZWN0KSkKICAg
ICAgICAgcmV0dXJuIEFjY2Vzc2libGVCYXNlOjpuYW1lKCk7CiAKLSAgICBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0KiBvYmogPSB0b0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QobV9vYmplY3Qp
OworICAgIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QmIG9iaiA9IGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q+KCptX29iamVjdCk7CiAKLSAgICBTdHJpbmcgYXJpYUxhYmVsID0g
b2JqLT5hcmlhTGFiZWxlZEJ5QXR0cmlidXRlKCk7CisgICAgU3RyaW5nIGFyaWFMYWJlbCA9IG9i
ai5hcmlhTGFiZWxlZEJ5QXR0cmlidXRlKCk7CiAgICAgaWYgKCFhcmlhTGFiZWwuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gYXJpYUxhYmVsOwogCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBh
bHRUZXh0ID0gb2JqLT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjphbHRBdHRyKTsKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGFsdFRleHQgPSBvYmouZ2V0QXR0cmlidXRlKEhUTUxOYW1lczo6YWx0
QXR0cik7CiAgICAgaWYgKCFhbHRUZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGFsdFRl
eHQ7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>