<?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>186321</bug_id>
          
          <creation_ts>2018-06-05 14:06:52 -0700</creation_ts>
          <short_desc>Clean ups after r232496 and r232511</short_desc>
          <delta_ts>2018-08-21 16:21:14 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>188410</dup_id>
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=188410</see_also>
          <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>186096</dependson>
    
    <dependson>186304</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1430219</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-06-05 14:06:52 -0700</bug_when>
    <thetext>Clean up the code changes from r232496 and r232511 to move back to a reference-based accessor, with the assertion hidden inside this method. Also create a pointer-based accessor to be used in the handful of places we actually want a nullptr check.

These changes will make the code more readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430220</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-06-05 14:07:48 -0700</bug_when>
    <thetext>&lt;rdar://problem/40822676&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448254</commentid>
    <comment_count>2</comment_count>
      <attachid>346660</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-08-06 14:59:41 -0700</bug_when>
    <thetext>Created attachment 346660
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448309</commentid>
    <comment_count>3</comment_count>
      <attachid>346667</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-08-06 17:20:59 -0700</bug_when>
    <thetext>Created attachment 346667
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448467</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-08-07 09:47:43 -0700</bug_when>
    <thetext>Looks like the wincairo failure is due to no space left on the device. The Windows test failures look like unhappiness with the Python environment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448469</commentid>
    <comment_count>5</comment_count>
      <attachid>346667</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-07 09:56:57 -0700</bug_when>
    <thetext>Comment on attachment 346667
Patch

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

&gt; Source/WebCore/html/InputType.h:310
&gt; +    HTMLInputElement* elementPtr() const { return m_element.get(); }

I am not in favor of this change. How is the caller supposed to know when it is safe to can element() instead of elementPtr()? This is *extremely* fragile and error prone. I think we should straighten out the lifetime management instead so that either:
- The HTMLInputElement *really* own the InputType and so InputType would not be RefCounted (would be a unique_ptr in HTMLInputElement). &lt;- my preference
- We null check the input element everywhere in InputType?

In InputType.h:
    // Raw pointer because the HTMLInputElement object owns this InputType object.
    WeakPtr&lt;HTMLInputElement&gt; m_element;

It claims the HTMLInputElement *owns* the InputType and m_element is raw. Both are currently lies it seems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448479</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-07 10:19:37 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #5)
&gt; Comment on attachment 346667 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=346667&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/InputType.h:310
&gt; &gt; +    HTMLInputElement* elementPtr() const { return m_element.get(); }
&gt; 
&gt; I am not in favor of this change. How is the caller supposed to know when it
&gt; is safe to can element() instead of elementPtr()? This is *extremely*
&gt; fragile and error prone. I think we should straighten out the lifetime
&gt; management instead so that either:
&gt; - The HTMLInputElement *really* own the InputType and so InputType would not
&gt; be RefCounted (would be a unique_ptr in HTMLInputElement). &lt;- my preference

To achieve this, we could have InputType subclass CanMakeWeakPtr&lt;InputType&gt;. Then, before calling operations on the HTMLInputElements that may destroy the InputType, the InputType would store makeWeakPtr(*this) in a local variable and could return early
after the call into element() if !weakThis.

&gt; - We null check the input element everywhere in InputType?
&gt; 
&gt; In InputType.h:
&gt;     // Raw pointer because the HTMLInputElement object owns this InputType
&gt; object.
&gt;     WeakPtr&lt;HTMLInputElement&gt; m_element;
&gt; 
&gt; It claims the HTMLInputElement *owns* the InputType and m_element is raw.
&gt; Both are currently lies it seems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448488</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-07 10:33:17 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #6)
&gt; (In reply to Chris Dumez from comment #5)
&gt; &gt; Comment on attachment 346667 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=346667&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/html/InputType.h:310
&gt; &gt; &gt; +    HTMLInputElement* elementPtr() const { return m_element.get(); }
&gt; &gt; 
&gt; &gt; I am not in favor of this change. How is the caller supposed to know when it
&gt; &gt; is safe to can element() instead of elementPtr()? This is *extremely*
&gt; &gt; fragile and error prone. I think we should straighten out the lifetime
&gt; &gt; management instead so that either:
&gt; &gt; - The HTMLInputElement *really* own the InputType and so InputType would not
&gt; &gt; be RefCounted (would be a unique_ptr in HTMLInputElement). &lt;- my preference
&gt; 
&gt; To achieve this, we could have InputType subclass CanMakeWeakPtr&lt;InputType&gt;.
&gt; Then, before calling operations on the HTMLInputElements that may destroy
&gt; the InputType, the InputType would store makeWeakPtr(*this) in a local
&gt; variable and could return early
&gt; after the call into element() if !weakThis.

I can give this a try if you&apos;d like.

&gt; 
&gt; &gt; - We null check the input element everywhere in InputType?
&gt; &gt; 
&gt; &gt; In InputType.h:
&gt; &gt;     // Raw pointer because the HTMLInputElement object owns this InputType
&gt; &gt; object.
&gt; &gt;     WeakPtr&lt;HTMLInputElement&gt; m_element;
&gt; &gt; 
&gt; &gt; It claims the HTMLInputElement *owns* the InputType and m_element is raw.
&gt; &gt; Both are currently lies it seems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448500</commentid>
    <comment_count>8</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-08-07 11:16:46 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #7)
&gt; &gt; To achieve this, we could have InputType subclass CanMakeWeakPtr&lt;InputType&gt;.
&gt; &gt; Then, before calling operations on the HTMLInputElements that may destroy
&gt; &gt; the InputType, the InputType would store makeWeakPtr(*this) in a local
&gt; &gt; variable and could return early
&gt; &gt; after the call into element() if !weakThis.
&gt; 
&gt; I can give this a try if you&apos;d like.

Have at it! That sounds like a great idea, and much safer. This area of code has been troublesome in the past, so anything we can do to make it safer would be a good thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448814</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-08 13:02:53 -0700</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #8)
&gt; (In reply to Chris Dumez from comment #7)
&gt; &gt; &gt; To achieve this, we could have InputType subclass CanMakeWeakPtr&lt;InputType&gt;.
&gt; &gt; &gt; Then, before calling operations on the HTMLInputElements that may destroy
&gt; &gt; &gt; the InputType, the InputType would store makeWeakPtr(*this) in a local
&gt; &gt; &gt; variable and could return early
&gt; &gt; &gt; after the call into element() if !weakThis.
&gt; &gt; 
&gt; &gt; I can give this a try if you&apos;d like.
&gt; 
&gt; Have at it! That sounds like a great idea, and much safer. This area of code
&gt; has been troublesome in the past, so anything we can do to make it safer
&gt; would be a good thing.

Here is my proposal:
https://bugs.webkit.org/show_bug.cgi?id=188410</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449148</commentid>
    <comment_count>10</comment_count>
      <attachid>346667</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-09 16:44:57 -0700</bug_when>
    <thetext>Comment on attachment 346667
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/html/InputType.h:310
&gt;&gt;&gt;&gt; +    HTMLInputElement* elementPtr() const { return m_element.get(); }
&gt;&gt;&gt; 
&gt;&gt;&gt; I am not in favor of this change. How is the caller supposed to know when it is safe to can element() instead of elementPtr()? This is *extremely* fragile and error prone. I think we should straighten out the lifetime management instead so that either:
&gt;&gt;&gt; - The HTMLInputElement *really* own the InputType and so InputType would not be RefCounted (would be a unique_ptr in HTMLInputElement). &lt;- my preference
&gt;&gt;&gt; - We null check the input element everywhere in InputType?
&gt;&gt;&gt; 
&gt;&gt;&gt; In InputType.h:
&gt;&gt;&gt;     // Raw pointer because the HTMLInputElement object owns this InputType object.
&gt;&gt;&gt;     WeakPtr&lt;HTMLInputElement&gt; m_element;
&gt;&gt;&gt; 
&gt;&gt;&gt; It claims the HTMLInputElement *owns* the InputType and m_element is raw. Both are currently lies it seems.
&gt;&gt; 
&gt;&gt; To achieve this, we could have InputType subclass CanMakeWeakPtr&lt;InputType&gt;. Then, before calling operations on the HTMLInputElements that may destroy the InputType, the InputType would store makeWeakPtr(*this) in a local variable and could return early
&gt;&gt; after the call into element() if !weakThis.
&gt; 
&gt; I can give this a try if you&apos;d like.

I don&apos;t think it makes sense to have two versions of functions like this as Chris points out.
Because each InputType member functions need to be robust against getting detached from an element,
we should have an ScriptDisallowedScope, and/or create a new RAII which asserts that the input element&apos;s type doesn&apos;t change.
Hiding asserts into a helper function like this would make it harder to reason about the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1452372</commentid>
    <comment_count>11</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-08-21 16:02:10 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 188410 ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1452379</commentid>
    <comment_count>12</comment_count>
      <attachid>346667</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-21 16:21:14 -0700</bug_when>
    <thetext>Comment on attachment 346667
Patch

Clearing r? flag.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346660</attachid>
            <date>2018-08-06 14:59:41 -0700</date>
            <delta_ts>2018-08-06 17:20:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-186321-20180806145940.patch</filename>
            <type>text/plain</type>
            <size>117382</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0MjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWU2NDNkNTA1ZjljMTQ3
MWJiOWY0YTcyZDE1YmJjN2U1ZjJhYWUwMC4uNTgyMTcyYzY1ZWQzNTgwNDhmNzNjYzU1ZWEwZWQ3
MWNmNjg2MzFjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMiBAQAorMjAxOC0wOC0wNiAgQnJl
bnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cHMgYWZ0
ZXIgcjIzMjQ5NiBhbmQgcjIzMjUxMQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg2MzIxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MDgyMjY3Nj4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDbGVhbiB1
cCB0aGUgc2VjdXJpdHkgY2hhbmdlcyBtYWRlIGluIHIyMzI0OTUgYW5kIHIyMzI1MTEgYXMgRGFy
aW4gc3VnZ2VzdGVkLgorICAgICAgICBUaGlzIGNoYW5nZSBpbmNsdWRlcyB0aGUgZm9sbG93aW5n
IGNoYW5nZXM6CisgICAgICAgIDEuIFJlbW92ZXMgYSBzZXQgb2YgQVNTRVJUUyBpbiB2YXJpb3Vz
IElucHV0VHlwZSBtZXRob2RzIGluIGZhdm9yIG9mIGEgc2luZ2xlIEFTU0VSVCBpbiB0aGUgYWNj
ZXNzb3IuCisgICAgICAgIDIuIENoYW5nZXMgdGhlIGFjY2Vzc29yICdlbGVtZW50KCknIHRvIHJl
dHVybiBhIHJlZmVyZW5jZSAocmF0aGVyIHRoYW4gYSBwb2ludGVyKS4KKyAgICAgICAgMy4gQWRk
IGEgbmV3IG1ldGhvZCB0aGF0IHJldHVybnMgYSBwb2ludGVyIGZvciB0aGUgaGFuZGZ1bCBvZiBj
YXNlcyB3aGVyZSB3ZSBhY3R1YWxseSBleHBlY3QKKyAgICAgICAgICAgYSBwb3NzaWJsZSBudWxs
cHRyIHJldHVybi4KKworICAgICAgICBObyBuZXcgdGVzdHMgZm9yIHRoaXMgcmVmYWN0b3Jpbmcg
Y2hhbmdlLCBhcyB0aGVyZSBzaG91bGQgbm90IGJlIGFueSBjaGFuZ2UgaW4gYmVoYXZpb3IuCisK
KyAgICAgICAgKiBodG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QmFzZUJ1dHRvbklucHV0VHlwZTo6Y3JlYXRlSW5wdXRSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpCYXNlQnV0dG9uSW5wdXRUeXBlOjpzZXRWYWx1ZSk6CisgICAgICAgICogaHRtbC9C
YXNlQ2hlY2thYmxlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDaGVja2Fi
bGVJbnB1dFR5cGU6OnNhdmVGb3JtQ29udHJvbFN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkJhc2VDaGVja2FibGVJbnB1dFR5cGU6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJhc2VDaGVja2FibGVJbnB1dFR5cGU6OmFwcGVuZEZvcm1EYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDaGVja2FibGVJbnB1dFR5cGU6OmhhbmRsZUtl
eWRvd25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjph
Y2Nlc3NLZXlBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNoZWNrYWJsZUlucHV0VHlw
ZTo6c2V0VmFsdWUpOgorICAgICAgICAqIGh0bWwvQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJ
bnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNob29zZXJPbmx5RGF0ZUFuZFRp
bWVJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
QmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUp
OgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6
OnVwZGF0ZUlubmVyVGV4dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDaG9vc2VyT25s
eURhdGVBbmRUaW1lSW5wdXRUeXBlOjpkaWRDaG9vc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBl
OjpoYW5kbGVLZXlwcmVzc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDaG9vc2VyT25s
eURhdGVBbmRUaW1lSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6QmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmlzTW91c2VGb2N1c2FibGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1
dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvQmFzZUNsaWNrYWJsZVdp
dGhLZXlJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNsaWNrYWJsZVdpdGhL
ZXlJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNl
Q2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6aGFuZGxlS2V5cHJlc3NFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9u
KToKKyAgICAgICAgKiBodG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNldFZhbHVlQXNEYXRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6dmFsdWVBc0Rv
dWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6
OnNldFZhbHVlQXNEZWNpbWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5k
VGltZUlucHV0VHlwZTo6dHlwZU1pc21hdGNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VEYXRlQW5kVGltZUlucHV0VHlwZTo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNlcmlhbGl6ZVdpdGhDb21wb25lbnRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6bG9jYWxp
emVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5
cGU6OnZpc2libGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFuZFRp
bWVJbnB1dFR5cGU6OnZhbHVlTWlzc2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNl
RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUgY29uc3QpOgorICAgICAg
ICAqIGh0bWwvQmFzZVRleHRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZVRl
eHRJbnB1dFR5cGU6OnBhdHRlcm5NaXNtYXRjaCBjb25zdCk6CisgICAgICAgICogaHRtbC9DaGVj
a2JveElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2JveElucHV0VHlwZTo6
dmFsdWVNaXNzaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrYm94SW5wdXRUeXBl
Ojp3aWxsRGlzcGF0Y2hDbGljayk6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2JveElucHV0VHlw
ZTo6ZGlkRGlzcGF0Y2hDbGljayk6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2JveElucHV0VHlw
ZTo6c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSBjb25zdCk6CisgICAgICAgICogaHRtbC9Db2xv
cklucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlwZTo6aXNNb3Vz
ZUZvY3VzYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlwZTo6aXNL
ZXlib2FyZEZvY3VzYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlw
ZTo6dmFsdWVBc0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9ySW5wdXRUeXBl
OjpjcmVhdGVTaGFkb3dTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9ySW5wdXRUeXBl
OjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9ySW5wdXRU
eXBlOjpkaWRDaG9vc2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlwZTo6
dXBkYXRlQ29sb3JTd2F0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JJbnB1dFR5cGU6OnNo
YWRvd0NvbG9yU3dhdGNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9ySW5wdXRUeXBl
OjplbGVtZW50UmVjdFJlbGF0aXZlVG9Sb290VmlldyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcklucHV0VHlwZTo6c2hvdWxkU2hvd1N1Z2dlc3Rpb25zIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9ySW5wdXRUeXBlOjpzdWdnZXN0aW9ucyBjb25zdCk6CisgICAgICAgICog
aHRtbC9EYXRlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVJbnB1dFR5cGU6
OmNyZWF0ZVN0ZXBSYW5nZSBjb25zdCk6CisgICAgICAgICogaHRtbC9EYXRlVGltZUxvY2FsSW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTG9jYWxJbnB1dFR5cGU6OmNy
ZWF0ZVN0ZXBSYW5nZSBjb25zdCk6CisgICAgICAgICogaHRtbC9FbWFpbElucHV0VHlwZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFbWFpbElucHV0VHlwZTo6dHlwZU1pc21hdGNoRm9yIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVtYWlsSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2ggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RW1haWxJbnB1dFR5cGU6OnR5cGVNaXNtYXRjaFRleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RW1haWxJbnB1dFR5cGU6OnNhbml0aXplVmFsdWUgY29u
c3QpOgorICAgICAgICAqIGh0bWwvRmlsZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlSW5wdXRUeXBlOjp2YWx1ZU1pc3NpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsZUlucHV0VHlwZTo6dmFsdWVNaXNzaW5nVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlSW5wdXRUeXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGVJbnB1dFR5cGU6OmNyZWF0ZUlucHV0UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZUlucHV0VHlwZTo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0
VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRU
eXBlOjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRU
eXBlOjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6
OmFsbG93c0RpcmVjdG9yaWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5
cGU6OnNldEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6Omljb25Mb2Fk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6cmVjZWl2ZURyb3BwZWRGaWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpkZWZhdWx0VG9vbFRpcCBjb25z
dCk6CisgICAgICAgICogaHRtbC9IaWRkZW5JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SGlkZGVuSW5wdXRUeXBlOjpzYXZlRm9ybUNvbnRyb2xTdGF0ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpIaWRkZW5JbnB1dFR5cGU6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhpZGRlbklucHV0VHlwZTo6c2V0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SGlkZGVuSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YSBjb25zdCk6CisgICAgICAgICog
aHRtbC9JbWFnZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUlucHV0VHlw
ZTo6YXBwZW5kRm9ybURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5
cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1
dFR5cGU6OmNyZWF0ZUlucHV0UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1
dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5
cGU6OmF0dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUlucHV0VHlwZTo6aGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlSW5wdXRUeXBlOjp3aWR0aCBjb25zdCk6Cisg
ICAgICAgICogaHRtbC9JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBl
OjpzYXZlRm9ybUNvbnRyb2xTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5
cGU6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlw
ZTo6aXNGb3JtRGF0YUFwcGVuZGFibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRU
eXBlOjphcHBlbmRGb3JtRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6
OnNpemVTaG91bGRJbmNsdWRlRGVjb3JhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnB1dFR5cGU6OnZhbGlkYXRpb25NZXNzYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
cHV0VHlwZTo6Y3JlYXRlSW5wdXRSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5
cGU6OmJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpkZXN0cm95U2hhZG93U3Vi
dHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmRpc3BhdGNoU2ltdWxhdGVkQ2xp
Y2tJZkFjdGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmNocm9tZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjppc01vdXNlRm9jdXNhYmxlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5wdXRUeXBlOjp2aXNpYmxlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRU
eXBlOjphcHBseVN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpzdGVwVXBGcm9t
UmVuZGVyZXIpOgorICAgICAgICAqIGh0bWwvSW5wdXRUeXBlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpJbnB1dFR5cGU6OmVsZW1lbnRQdHIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRU
eXBlOjplbGVtZW50IGNvbnN0KToKKyAgICAgICAgKiBodG1sL01vbnRoSW5wdXRUeXBlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vbnRoSW5wdXRUeXBlOjp2YWx1ZUFzRGF0ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNb250aElucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlIGNvbnN0KToK
KyAgICAgICAgKiBodG1sL051bWJlcklucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
dW1iZXJJbnB1dFR5cGU6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0
VHlwZTo6dmFsdWVBc0RvdWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1
dFR5cGU6OnNldFZhbHVlQXNEb3VibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TnVtYmVy
SW5wdXRUeXBlOjpzZXRWYWx1ZUFzRGVjaW1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpO
dW1iZXJJbnB1dFR5cGU6OnR5cGVNaXNtYXRjaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpO
dW1iZXJJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpOdW1iZXJJbnB1dFR5cGU6OnNpemVTaG91bGRJbmNsdWRlRGVjb3JhdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6OmRlY29yYXRpb25XaWR0aCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6OmxvY2FsaXplVmFsdWUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TnVtYmVySW5wdXRUeXBlOjp2aXNpYmxlVmFsdWUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TnVtYmVySW5wdXRUeXBlOjpjb252ZXJ0RnJvbVZpc2libGVW
YWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6Omhhc0JhZElu
cHV0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0VHlwZTo6YXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgICogaHRtbC9SYWRpb0lucHV0VHlwZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSYWRpb0lucHV0VHlwZTo6dmFsdWVNaXNzaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJhZGlvSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtleXVwRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmFkaW9JbnB1dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmFkaW9JbnB1dFR5cGU6OnNob3VsZFNlbmRDaGFuZ2VFdmVudEFmdGVyQ2hlY2tl
ZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9JbnB1dFR5cGU6OndpbGxEaXNwYXRj
aENsaWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvSW5wdXRUeXBlOjpkaWREaXNwYXRjaENs
aWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvSW5wdXRUeXBlOjptYXRjaGVzSW5kZXRlcm1p
bmF0ZVBzZXVkb0NsYXNzIGNvbnN0KToKKyAgICAgICAgKiBodG1sL1JhbmdlSW5wdXRUeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBlOjp2YWx1ZUFzRG91YmxlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBlOjpzZXRWYWx1ZUFzRGVjaW1hbCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBlOjpoYW5kbGVNb3VzZURv
d25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6aGFuZGxlVG91Y2hF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBlOjpjcmVhdGVTaGFkb3dTdWJ0
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBlOjpzbGlkZXJUcmFja0VsZW1l
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6OmNyZWF0ZUlucHV0
UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6OmFjY2Vzc0tleUFj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6YXR0cmlidXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6c2V0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6OnVwZGF0ZVRpY2tNYXJrVmFsdWVzKToKKyAgICAg
ICAgKiBodG1sL1Jlc2V0SW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc2V0SW5w
dXRUeXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KToKKyAgICAgICAgKiBodG1sL1NlYXJjaElu
cHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJbnB1dFR5cGU6OmFkZFNlYXJj
aFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJbnB1dFR5cGU6OmF0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5wdXRUeXBlOjpjcmVhdGVJbnB1dFJl
bmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaElucHV0VHlwZTo6Y3JlYXRlU2hhZG93
U3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJbnB1dFR5cGU6OmhhbmRsZUtleWRv
d25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJbnB1dFR5cGU6OnN0YXJ0U2VhcmNo
RXZlbnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJbnB1dFR5cGU6OnNlYXJjaEV2
ZW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJbnB1dFR5cGU6OnNlYXJj
aEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWFy
Y2hJbnB1dFR5cGU6OmRpZFNldFZhbHVlQnlVc2VyRWRpdCk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWFyY2hJbnB1dFR5cGU6OnNpemVTaG91bGRJbmNsdWRlRGVjb3JhdGlvbiBjb25zdCk6CisgICAg
ICAgICogaHRtbC9TdWJtaXRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3VibWl0
SW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdWJt
aXRJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQpOgorICAgICAgICAqIGh0bWwvVGV4
dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlw
ZTo6aXNLZXlib2FyZEZvY3VzYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Rmll
bGRJbnB1dFR5cGU6OmlzTW91c2VGb2N1c2FibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEZpZWxkSW5wdXRUeXBlOjp2YWx1ZU1pc3NpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
RmllbGRJbnB1dFR5cGU6OmhhbmRsZUNsaWNrRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnRGb3JTcGluQnV0dG9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6Zm9yd2FyZEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVGb2N1c0V2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlQmx1ckV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6Y3JlYXRlSW5wdXRSZW5kZXJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhhdmVTcGluQnV0dG9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkSGF2
ZUNhcHNMb2NrSW5kaWNhdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElu
cHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Rmll
bGRJbnB1dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZp
ZWxkSW5wdXRUeXBlOjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnVwZGF0ZVBsYWNlaG9sZGVyVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmFwcGVuZEZvcm1EYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c3VidHJlZUhhc0NoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpkaWRTZXRWYWx1ZUJ5VXNl
ckVkaXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjp1cGRhdGVJbm5l
clRleHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmZvY3Vz
QW5kU2VsZWN0U3BpbkJ1dHRvbk93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElu
cHV0VHlwZTo6c2hvdWxkU3BpbkJ1dHRvblJlc3BvbmRUb01vdXNlRXZlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkU3BpbkJ1dHRvblJlc3BvbmRUb1do
ZWVsRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxk
RHJhd0NhcHNMb2NrSW5kaWNhdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVs
ZElucHV0VHlwZTo6c2hvdWxkRHJhd0F1dG9GaWxsQnV0dG9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6YXV0b0ZpbGxCdXR0b25FbGVtZW50V2FzQ2xpY2tl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmNyZWF0ZUNvbnRhaW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmNyZWF0ZUF1dG9GaWxs
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6dXBkYXRlQXV0
b0ZpbGxCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjplbGVt
ZW50UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0RmllbGRJbnB1dFR5cGU6OnN1Z2dlc3Rpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRGaWVsZElucHV0VHlwZTo6ZGlkU2VsZWN0RGF0YUxpc3RPcHRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpkaXNwbGF5U3VnZ2VzdGlvbnMpOgorICAgICAg
ICAqIGh0bWwvVGltZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRU
eXBlOjpjcmVhdGVTdGVwUmFuZ2UgY29uc3QpOgorICAgICAgICAqIGh0bWwvVVJMSW5wdXRUeXBl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVSTElucHV0VHlwZTo6dHlwZU1pc21hdGNoIGNvbnN0
KToKKyAgICAgICAgKiBodG1sL1dlZWtJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2Vla0lucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlIGNvbnN0KToKKwogMjAxOC0wNy0yNSAgRGF2
aWQgRmVudG9uICA8ZGF2aWRfZmVudG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMjM0MTg3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9C
YXNlQnV0dG9uSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUJ1dHRvbklu
cHV0VHlwZS5jcHAKaW5kZXggMmRkYmFlYjlhNjlhODBjMWI0OWM0OTI2OTY3ZTNlZDMwNDQ2OWYz
OS4uNDI4ZTQxYTBmYmNiMWNmYjBiOTljYjM3YTg4YjlkYzBhNDA0Mjk2MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQnV0dG9uSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuY3BwCkBAIC01Myw4ICs1Myw3IEBAIGJv
b2wgQmFzZUJ1dHRvbklucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRE9NRm9ybURhdGEmLCBib29s
KSBjb25zdAogCiBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gQmFzZUJ1dHRvbklucHV0VHlwZTo6
Y3JlYXRlSW5wdXRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxlKQogewotICAgIEFTU0VSVChl
bGVtZW50KCkpOwotICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJCdXR0b24+KCplbGVt
ZW50KCksIFdURk1vdmUoc3R5bGUpKTsKKyAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVy
QnV0dG9uPihlbGVtZW50KCksIFdURk1vdmUoc3R5bGUpKTsKIH0KIAogYm9vbCBCYXNlQnV0dG9u
SW5wdXRUeXBlOjpzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpCkBAIC02NCw4ICs2
Myw3IEBAIGJvb2wgQmFzZUJ1dHRvbklucHV0VHlwZTo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21B
dHRyaWJ1dGUoKQogCiB2b2lkIEJhc2VCdXR0b25JbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0
cmluZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IpCiB7Ci0g
ICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgZWxlbWVudCgpLT5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKHZhbHVlQXR0ciwgc2FuaXRpemVkVmFsdWUpOworICAgIGVsZW1lbnQo
KS5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHZhbHVlQXR0ciwgc2FuaXRpemVk
VmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9CYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmNwcAppbmRleCBiYjFkYTA4NjZiYjY5YWZhZDlk
OWEyNGE4MDJhMWVhNzU3ODkwYzIwLi40MDUxYTU5NGQ2ZmI0NWIzOTc3OWVkMGU0NDdkZmZjNTA4
Y2VkZGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1
dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlucHV0VHlw
ZS5jcHAKQEAgLTQ1LDIyICs0NSwxOSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBG
b3JtQ29udHJvbFN0YXRlIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OnNhdmVGb3JtQ29udHJvbFN0
YXRlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4geyBlbGVt
ZW50KCktPmNoZWNrZWQoKSA/ICJvbiJfcyA6ICJvZmYiX3MgfTsKKyAgICByZXR1cm4geyBlbGVt
ZW50KCkuY2hlY2tlZCgpID8gIm9uIl9zIDogIm9mZiJfcyB9OwogfQogCiB2b2lkIEJhc2VDaGVj
a2FibGVJbnB1dFR5cGU6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKGNvbnN0IEZvcm1Db250cm9s
U3RhdGUmIHN0YXRlKQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGVsZW1lbnQoKS0+
c2V0Q2hlY2tlZChzdGF0ZVswXSA9PSAib24iKTsKKyAgICBlbGVtZW50KCkuc2V0Q2hlY2tlZChz
dGF0ZVswXSA9PSAib24iKTsKIH0KIAogYm9vbCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjphcHBl
bmRGb3JtRGF0YShET01Gb3JtRGF0YSYgZm9ybURhdGEsIGJvb2wpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKGVsZW1lbnQoKSk7Ci0gICAgaWYgKCFlbGVtZW50KCktPmNoZWNrZWQoKSkKKyAgICBpZiAo
IWVsZW1lbnQoKS5jaGVja2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3JtRGF0
YS5hcHBlbmQoZWxlbWVudCgpLT5uYW1lKCksIGVsZW1lbnQoKS0+dmFsdWUoKSk7CisgICAgZm9y
bURhdGEuYXBwZW5kKGVsZW1lbnQoKS5uYW1lKCksIGVsZW1lbnQoKS52YWx1ZSgpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNjgsOCArNjUsNyBAQCB2b2lkIEJhc2VDaGVja2FibGVJbnB1
dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKICAgICBj
b25zdCBTdHJpbmcmIGtleSA9IGV2ZW50LmtleUlkZW50aWZpZXIoKTsKICAgICBpZiAoa2V5ID09
ICJVKzAwMjAiKSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgICAgICBlbGVtZW50
KCktPnNldEFjdGl2ZSh0cnVlLCB0cnVlKTsKKyAgICAgICAgZWxlbWVudCgpLnNldEFjdGl2ZSh0
cnVlLCB0cnVlKTsKICAgICAgICAgLy8gTm8gc2V0RGVmYXVsdEhhbmRsZWQoKSwgYmVjYXVzZSBJ
RSBkaXNwYXRjaGVzIGEga2V5cHJlc3MgaW4gdGhpcyBjYXNlCiAgICAgICAgIC8vIGFuZCB0aGUg
Y2FsbGVyIHdpbGwgb25seSBkaXNwYXRjaCBhIGtleXByZXNzIGlmIHdlIGRvbid0IGNhbGwgc2V0
RGVmYXVsdEhhbmRsZWQoKS4KICAgICB9CkBAIC05Myw4ICs4OSw3IEBAIHZvaWQgQmFzZUNoZWNr
YWJsZUlucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZE1vdXNlRXZlbnRzKQogewog
ICAgIElucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKHNlbmRNb3VzZUV2ZW50cyk7CiAKLSAgICBB
U1NFUlQoZWxlbWVudCgpKTsKLSAgICBlbGVtZW50KCktPmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2so
MCwgc2VuZE1vdXNlRXZlbnRzID8gU2VuZE1vdXNlVXBEb3duRXZlbnRzIDogU2VuZE5vRXZlbnRz
KTsKKyAgICBlbGVtZW50KCkuZGlzcGF0Y2hTaW11bGF0ZWRDbGljaygwLCBzZW5kTW91c2VFdmVu
dHMgPyBTZW5kTW91c2VVcERvd25FdmVudHMgOiBTZW5kTm9FdmVudHMpOwogfQogCiBTdHJpbmcg
QmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6ZmFsbGJhY2tWYWx1ZSgpIGNvbnN0CkBAIC0xMTAsOCAr
MTA1LDcgQEAgYm9vbCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjpzdG9yZXNWYWx1ZVNlcGFyYXRl
RnJvbUF0dHJpYnV0ZSgpCiAKIHZvaWQgQmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6c2V0VmFsdWUo
Y29uc3QgU3RyaW5nJiBzYW5pdGl6ZWRWYWx1ZSwgYm9vbCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlv
cikKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBlbGVtZW50KCktPnNldEF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24odmFsdWVBdHRyLCBzYW5pdGl6ZWRWYWx1ZSk7CisgICAg
ZWxlbWVudCgpLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24odmFsdWVBdHRyLCBz
YW5pdGl6ZWRWYWx1ZSk7CiB9CiAKIGJvb2wgQmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6aXNDaGVj
a2FibGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQ2hvb3Nlck9ubHlE
YXRlQW5kVGltZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VDaG9vc2Vy
T25seURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAppbmRleCAyMWZlZGUxMDFmYjlhMWMxM2VjZTFk
NzQ4MDkyZjk3YzUyNDgyOGFlLi40N2Y3NTM5Nzk1MmEyYzQ2Mzk5NzkwZDVhZGViOWE3NjU2NTVl
ZGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VDaG9vc2VyT25seURhdGVB
bmRUaW1lSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VDaG9vc2Vy
T25seURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcApAQCAtNDYsMTYgKzQ2LDE1IEBAIEJhc2VDaG9v
c2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjp+QmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJ
bnB1dFR5cGUoKQogCiB2b2lkIEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjpo
YW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50JikKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsK
LSAgICBpZiAoZWxlbWVudCgpLT5pc0Rpc2FibGVkT3JSZWFkT25seSgpIHx8ICFlbGVtZW50KCkt
PnJlbmRlcmVyKCkgfHwgIVVzZXJHZXN0dXJlSW5kaWNhdG9yOjpwcm9jZXNzaW5nVXNlckdlc3R1
cmUoKSkKKyAgICBpZiAoZWxlbWVudCgpLmlzRGlzYWJsZWRPclJlYWRPbmx5KCkgfHwgIWVsZW1l
bnQoKS5yZW5kZXJlcigpIHx8ICFVc2VyR2VzdHVyZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2RhdGVUaW1lQ2hvb3NlcikK
ICAgICAgICAgcmV0dXJuOwotICAgIGlmICghZWxlbWVudCgpLT5kb2N1bWVudCgpLnBhZ2UoKSkK
KyAgICBpZiAoIWVsZW1lbnQoKS5kb2N1bWVudCgpLnBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIERhdGVUaW1lQ2hvb3NlclBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLSAgICBpZiAoIWVsZW1l
bnQoKS0+c2V0dXBEYXRlVGltZUNob29zZXJQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpKQorICAgIGlm
ICghZWxlbWVudCgpLnNldHVwRGF0ZVRpbWVDaG9vc2VyUGFyYW1ldGVycyhwYXJhbWV0ZXJzKSkK
ICAgICAgICAgcmV0dXJuOwogfQogCkBAIC02MywxNyArNjIsMTUgQEAgdm9pZCBCYXNlQ2hvb3Nl
ck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgpCiB7CiAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdmFsdWVDb250YWluZXJQc2V1ZG8o
Ii13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwogCi0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgYXV0byB2YWx1ZUNvbnRh
aW5lciA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZWxlbWVudCgpLT5kb2N1bWVudCgpKTsKKyAg
ICBhdXRvIHZhbHVlQ29udGFpbmVyID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShlbGVtZW50KCku
ZG9jdW1lbnQoKSk7CiAgICAgdmFsdWVDb250YWluZXItPnNldFBzZXVkbyh2YWx1ZUNvbnRhaW5l
clBzZXVkbyk7Ci0gICAgZWxlbWVudCgpLT51c2VyQWdlbnRTaGFkb3dSb290KCktPmFwcGVuZENo
aWxkKHZhbHVlQ29udGFpbmVyKTsKKyAgICBlbGVtZW50KCkudXNlckFnZW50U2hhZG93Um9vdCgp
LT5hcHBlbmRDaGlsZCh2YWx1ZUNvbnRhaW5lcik7CiAgICAgdXBkYXRlSW5uZXJUZXh0VmFsdWUo
KTsKIH0KIAogdm9pZCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZTo6dXBkYXRl
SW5uZXJUZXh0VmFsdWUoKQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIFJlZlB0cjxO
b2RlPiBub2RlID0gZWxlbWVudCgpLT51c2VyQWdlbnRTaGFkb3dSb290KCktPmZpcnN0Q2hpbGQo
KTsKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGVsZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290
KCktPmZpcnN0Q2hpbGQoKTsKICAgICBpZiAoIWlzPEhUTUxFbGVtZW50Pihub2RlKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIFN0cmluZyBkaXNwbGF5VmFsdWUgPSB2aXNpYmxlVmFsdWUoKTsKQEAg
LTk4LDggKzk1LDcgQEAgdm9pZCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZTo6
ZGV0YWNoKCkKIAogdm9pZCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZTo6ZGlk
Q2hvb3NlVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgp
KTsKLSAgICBlbGVtZW50KCktPnNldFZhbHVlKHZhbHVlLCBEaXNwYXRjaElucHV0QW5kQ2hhbmdl
RXZlbnQpOworICAgIGVsZW1lbnQoKS5zZXRWYWx1ZSh2YWx1ZSwgRGlzcGF0Y2hJbnB1dEFuZENo
YW5nZUV2ZW50KTsKIH0KIAogdm9pZCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlw
ZTo6ZGlkRW5kQ2hvb3NlcigpCkBAIC0xMTUsMTQgKzExMSwxMiBAQCB2b2lkIEJhc2VDaG9vc2Vy
T25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjpjbG9zZURhdGVUaW1lQ2hvb3NlcigpCiAKIHZvaWQg
QmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChL
ZXlib2FyZEV2ZW50JiBldmVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBCYXNl
Q2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KCplbGVtZW50KCks
IGV2ZW50KTsKKyAgICBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93
bkV2ZW50KGVsZW1lbnQoKSwgZXZlbnQpOwogfQogCiB2b2lkIEJhc2VDaG9vc2VyT25seURhdGVB
bmRUaW1lSW5wdXRUeXBlOjpoYW5kbGVLZXlwcmVzc0V2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50
KQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIEJhc2VDbGlja2FibGVXaXRoS2V5SW5w
dXRUeXBlOjpoYW5kbGVLZXlwcmVzc0V2ZW50KCplbGVtZW50KCksIGV2ZW50KTsKKyAgICBCYXNl
Q2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6aGFuZGxlS2V5cHJlc3NFdmVudChlbGVtZW50KCks
IGV2ZW50KTsKIH0KIAogdm9pZCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZTo6
aGFuZGxlS2V5dXBFdmVudChLZXlib2FyZEV2ZW50JiBldmVudCkKQEAgLTEzMywyMCArMTI3LDE4
IEBAIHZvaWQgQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmhhbmRsZUtleXVw
RXZlbnQoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB2b2lkIEJhc2VDaG9vc2VyT25seURhdGVBbmRU
aW1lSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kTW91c2VFdmVudHMpCiB7CiAg
ICAgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oc2VuZE1vdXNlRXZl
bnRzKTsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBCYXNlQ2xpY2thYmxlV2l0aEtleUlu
cHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKCplbGVtZW50KCksIHNlbmRNb3VzZUV2ZW50cyk7Cisg
ICAgQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbihlbGVtZW50
KCksIHNlbmRNb3VzZUV2ZW50cyk7CiB9CiAKIGJvb2wgQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRp
bWVJbnB1dFR5cGU6OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdAogewotICAgIEFTU0VSVChlbGVt
ZW50KCkpOwotICAgIHJldHVybiBlbGVtZW50KCktPmlzVGV4dEZvcm1Db250cm9sRm9jdXNhYmxl
KCk7CisgICAgcmV0dXJuIGVsZW1lbnQoKS5pc1RleHRGb3JtQ29udHJvbEZvY3VzYWJsZSgpOwog
fQogCiB2b2lkIEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjphdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiB7CiAgICAgaWYgKG5hbWUgPT0gdmFs
dWVBdHRyKSB7Ci0gICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKSB7
CisgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudFB0cigpKSB7CiAgICAg
ICAgICAgICBpZiAoIWVsZW1lbnQtPmhhc0RpcnR5VmFsdWUoKSkKICAgICAgICAgICAgICAgICB1
cGRhdGVJbm5lclRleHRWYWx1ZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0Jhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGUuY3BwCmluZGV4IDJjNGRkNTVl
OWIwMzgwNTY3Mjg3MzlhZmFhMTEyNGQxMGU1MWVkNzEuLmEyNTNmODg2YTIyZDlhNzVlZmUzNWUx
MzE3MDNhOGM0YzU4YzU3NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNs
aWNrYWJsZVdpdGhLZXlJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFz
ZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGUuY3BwCkBAIC04MCwxNCArODAsMTIgQEAgdm9pZCBC
YXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKEhUTUxJbnB1dEVs
ZW1lbnQmIGVsZW1lbnQsIGIKIAogdm9pZCBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6
aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQogewotICAgIEFTU0VSVChl
bGVtZW50KCkpOwotICAgIGhhbmRsZUtleWRvd25FdmVudCgqZWxlbWVudCgpLCBldmVudCk7Cisg
ICAgaGFuZGxlS2V5ZG93bkV2ZW50KGVsZW1lbnQoKSwgZXZlbnQpOwogfQogCiB2b2lkIEJhc2VD
bGlja2FibGVXaXRoS2V5SW5wdXRUeXBlOjpoYW5kbGVLZXlwcmVzc0V2ZW50KEtleWJvYXJkRXZl
bnQmIGV2ZW50KQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGhhbmRsZUtleXByZXNz
RXZlbnQoKmVsZW1lbnQoKSwgZXZlbnQpOworICAgIGhhbmRsZUtleXByZXNzRXZlbnQoZWxlbWVu
dCgpLCBldmVudCk7CiB9CiAKIHZvaWQgQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGU6Omhh
bmRsZUtleXVwRXZlbnQoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCkBAIC05OCw4ICs5Niw3IEBAIHZv
aWQgQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGU6OmhhbmRsZUtleXVwRXZlbnQoS2V5Ym9h
cmRFdmVudCYgZXZlbnQpCiB2b2lkIEJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlOjphY2Nl
c3NLZXlBY3Rpb24oYm9vbCBzZW5kTW91c2VFdmVudHMpCiB7CiAgICAgSW5wdXRUeXBlOjphY2Nl
c3NLZXlBY3Rpb24oc2VuZE1vdXNlRXZlbnRzKTsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAg
ICBhY2Nlc3NLZXlBY3Rpb24oKmVsZW1lbnQoKSwgc2VuZE1vdXNlRXZlbnRzKTsKKyAgICBhY2Nl
c3NLZXlBY3Rpb24oZWxlbWVudCgpLCBzZW5kTW91c2VFdmVudHMpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5k
VGltZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlu
cHV0VHlwZS5jcHAKaW5kZXggOTAzNmU3NjQ2NzY0OTAxMThiODlhODRkOWU4NjI1NTliODlhMDhj
Yy4uMGU5ZjlkYzViNjZlM2Y0Y2E1YmI3N2ViYzBjMGY2Y2E2MjJmMWRmNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcApAQCAtNTcsMjIg
KzU3LDE5IEBAIGRvdWJsZSBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnZhbHVlQXNEYXRlKCkg
Y29uc3QKIAogRXhjZXB0aW9uT3I8dm9pZD4gQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzZXRW
YWx1ZUFzRGF0ZShkb3VibGUgdmFsdWUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7
Ci0gICAgZWxlbWVudCgpLT5zZXRWYWx1ZShzZXJpYWxpemVXaXRoTWlsbGlzZWNvbmRzKHZhbHVl
KSk7CisgICAgZWxlbWVudCgpLnNldFZhbHVlKHNlcmlhbGl6ZVdpdGhNaWxsaXNlY29uZHModmFs
dWUpKTsKICAgICByZXR1cm4geyB9OwogfQogCiBkb3VibGUgQmFzZURhdGVBbmRUaW1lSW5wdXRU
eXBlOjp2YWx1ZUFzRG91YmxlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAg
ICBjb25zdCBEZWNpbWFsIHZhbHVlID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPnZhbHVlKCks
IERlY2ltYWw6Om5hbigpKTsKKyAgICBjb25zdCBEZWNpbWFsIHZhbHVlID0gcGFyc2VUb051bWJl
cihlbGVtZW50KCkudmFsdWUoKSwgRGVjaW1hbDo6bmFuKCkpOwogICAgIHJldHVybiB2YWx1ZS5p
c0Zpbml0ZSgpID8gdmFsdWUudG9Eb3VibGUoKSA6IERhdGVDb21wb25lbnRzOjppbnZhbGlkTWls
bGlzZWNvbmRzKCk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IEJhc2VEYXRlQW5kVGltZUlucHV0
VHlwZTo6c2V0VmFsdWVBc0RlY2ltYWwoY29uc3QgRGVjaW1hbCYgbmV3VmFsdWUsIFRleHRGaWVs
ZEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVu
dCgpKTsKLSAgICBlbGVtZW50KCktPnNldFZhbHVlKHNlcmlhbGl6ZShuZXdWYWx1ZSksIGV2ZW50
QmVoYXZpb3IpOworICAgIGVsZW1lbnQoKS5zZXRWYWx1ZShzZXJpYWxpemUobmV3VmFsdWUpLCBl
dmVudEJlaGF2aW9yKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC04Myw4ICs4MCw3IEBAIGJv
b2wgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2hGb3IoY29uc3QgU3RyaW5n
JiB2YWx1ZSkgY29uc3QKIAogYm9vbCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnR5cGVNaXNt
YXRjaCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIHR5cGVN
aXNtYXRjaEZvcihlbGVtZW50KCktPnZhbHVlKCkpOworICAgIHJldHVybiB0eXBlTWlzbWF0Y2hG
b3IoZWxlbWVudCgpLnZhbHVlKCkpOwogfQogCiBEZWNpbWFsIEJhc2VEYXRlQW5kVGltZUlucHV0
VHlwZTo6ZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCkgY29uc3QKQEAgLTEwMiw3ICs5OCw3IEBAIGJv
b2wgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjppc1N0ZXBwYWJsZSgpIGNvbnN0CiB2b2lkIEJh
c2VEYXRlQW5kVGltZUlucHV0VHlwZTo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lKQogewogICAgIGlmIChuYW1lID09IG1heEF0dHIgfHwgbmFtZSA9PSBtaW5BdHRy
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKQorICAgICAg
ICBpZiAoYXV0byogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnRQdHIoKSkKICAgICAgICAgICAgIGVs
ZW1lbnQtPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9CiAgICAgSW5wdXRUeXBl
OjphdHRyaWJ1dGVDaGFuZ2VkKG5hbWUpOwpAQCAtMTQwLDkgKzEzNiw4IEBAIFN0cmluZyBCYXNl
RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNlcmlhbGl6ZShjb25zdCBEZWNpbWFsJiB2YWx1ZSkgY29u
c3QKIAogU3RyaW5nIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6c2VyaWFsaXplV2l0aENvbXBv
bmVudHMoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVs
ZW1lbnQoKSk7CiAgICAgRGVjaW1hbCBzdGVwOwotICAgIGlmICghZWxlbWVudCgpLT5nZXRBbGxv
d2VkVmFsdWVTdGVwKCZzdGVwKSkKKyAgICBpZiAoIWVsZW1lbnQoKS5nZXRBbGxvd2VkVmFsdWVT
dGVwKCZzdGVwKSkKICAgICAgICAgcmV0dXJuIGRhdGUudG9TdHJpbmcoKTsKICAgICBpZiAoc3Rl
cC5yZW1haW5kZXIobXNlY1Blck1pbnV0ZSkuaXNaZXJvKCkpCiAgICAgICAgIHJldHVybiBkYXRl
LnRvU3RyaW5nKERhdGVDb21wb25lbnRzOjpOb25lKTsKQEAgLTE2MiwxNSArMTU3LDEzIEBAIFN0
cmluZyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmxvY2FsaXplVmFsdWUoY29uc3QgU3RyaW5n
JiBwcm9wb3NlZFZhbHVlKSBjb25zCiAgICAgaWYgKCFwYXJzZVRvRGF0ZUNvbXBvbmVudHMocHJv
cG9zZWRWYWx1ZSwgJmRhdGUpKQogICAgICAgICByZXR1cm4gcHJvcG9zZWRWYWx1ZTsKIAotICAg
IEFTU0VSVChlbGVtZW50KCkpOwotICAgIFN0cmluZyBsb2NhbGl6ZWQgPSBlbGVtZW50KCktPmxv
Y2FsZSgpLmZvcm1hdERhdGVUaW1lKGRhdGUpOworICAgIFN0cmluZyBsb2NhbGl6ZWQgPSBlbGVt
ZW50KCkubG9jYWxlKCkuZm9ybWF0RGF0ZVRpbWUoZGF0ZSk7CiAgICAgcmV0dXJuIGxvY2FsaXpl
ZC5pc0VtcHR5KCkgPyBwcm9wb3NlZFZhbHVlIDogbG9jYWxpemVkOwogfQogCiBTdHJpbmcgQmFz
ZURhdGVBbmRUaW1lSW5wdXRUeXBlOjp2aXNpYmxlVmFsdWUoKSBjb25zdAogewotICAgIEFTU0VS
VChlbGVtZW50KCkpOwotICAgIHJldHVybiBsb2NhbGl6ZVZhbHVlKGVsZW1lbnQoKS0+dmFsdWUo
KSk7CisgICAgcmV0dXJuIGxvY2FsaXplVmFsdWUoZWxlbWVudCgpLnZhbHVlKCkpOwogfQogCiBT
dHJpbmcgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmlu
ZyYgcHJvcG9zZWRWYWx1ZSkgY29uc3QKQEAgLTE5MCwxNSArMTgzLDEzIEBAIGJvb2wgQmFzZURh
dGVBbmRUaW1lSW5wdXRUeXBlOjpzaG91bGRSZXNwZWN0TGlzdEF0dHJpYnV0ZSgpCiAKIGJvb2wg
QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjp2YWx1ZU1pc3NpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gZWxlbWVudCgp
LT5pc1JlcXVpcmVkKCkgJiYgdmFsdWUuaXNFbXB0eSgpOworICAgIHJldHVybiBlbGVtZW50KCku
aXNSZXF1aXJlZCgpICYmIHZhbHVlLmlzRW1wdHkoKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPUykK
IGJvb2wgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJv
YXJkRXZlbnQqKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiAh
ZWxlbWVudCgpLT5pc1JlYWRPbmx5KCkgJiYgZWxlbWVudCgpLT5pc1RleHRGb3JtQ29udHJvbEZv
Y3VzYWJsZSgpOworICAgIHJldHVybiAhZWxlbWVudCgpLmlzUmVhZE9ubHkoKSAmJiBlbGVtZW50
KCkuaXNUZXh0Rm9ybUNvbnRyb2xGb2N1c2FibGUoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VUZXh0SW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUuY3BwCmluZGV4IGIzNjg1YjkxYTk5NzNiODMxMWIx
Y2E5Y2M4MDAzNWY1ZmNmZTUxZTguLjgxNWI3MTc3NTkxNzhhNTgzMDg5MTQ3NGZhYTI2NjM5NjI3
NTFkZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUuY3BwCkBAIC00
MCwxMCArNDAsOSBAQCBib29sIEJhc2VUZXh0SW5wdXRUeXBlOjppc1RleHRUeXBlKCkgY29uc3QK
IAogYm9vbCBCYXNlVGV4dElucHV0VHlwZTo6cGF0dGVybk1pc21hdGNoKGNvbnN0IFN0cmluZyYg
dmFsdWUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBleGVjdXRlIFJlZ0V4cCBwYXJzZXIgZmlyc3QgdG8gY2hlY2sgdmFsaWRpdHkgaW5z
dGVhZCBvZiBjcmVhdGluZyBhbiBhY3R1YWwgUmVndWxhckV4cHJlc3Npb24uCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MzM2MQotICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgcmF3UGF0dGVybiA9IGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihwYXR0ZXJuQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiByYXdQYXR0
ZXJuID0gZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocGF0dGVybkF0
dHIpOwogICAgIGlmIChyYXdQYXR0ZXJuLmlzTnVsbCgpIHx8IHZhbHVlLmlzRW1wdHkoKSB8fCAh
SlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbihyYXdQYXR0ZXJuLCBKU0M6OllhcnI6OlRleHRD
YXNlU2Vuc2l0aXZlLCBKU0M6OllhcnI6Ok11bHRpbGluZURpc2FibGVkLCBKU0M6OllhcnI6OlVu
aWNvZGVBd2FyZU1vZGUpLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFN0
cmluZyBwYXR0ZXJuID0gIl4oPzoiICsgcmF3UGF0dGVybiArICIpJCI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0NoZWNrYm94SW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuY3BwCmluZGV4IDg5MzdlNTMzNGRiZGJkNGNlZmI5NTdi
MTdjYTA0MGE0ZDRkOWIzMjAuLjQ5MTRkZmJjMGIyZTY2YjgxYTg1ZjRmMGYyMGRhZjQwNGM3Zjdk
NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuY3BwCkBAIC00Niw4
ICs0Niw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgQ2hlY2tib3hJbnB1dFR5cGU6OmZvcm1Db250
cm9sVHlwZSgpIGNvbnN0CiAKIGJvb2wgQ2hlY2tib3hJbnB1dFR5cGU6OnZhbHVlTWlzc2luZyhj
b25zdCBTdHJpbmcmKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVy
biBlbGVtZW50KCktPmlzUmVxdWlyZWQoKSAmJiAhZWxlbWVudCgpLT5jaGVja2VkKCk7CisgICAg
cmV0dXJuIGVsZW1lbnQoKS5pc1JlcXVpcmVkKCkgJiYgIWVsZW1lbnQoKS5jaGVja2VkKCk7CiB9
CiAKIFN0cmluZyBDaGVja2JveElucHV0VHlwZTo6dmFsdWVNaXNzaW5nVGV4dCgpIGNvbnN0CkBA
IC02NSwyNiArNjQsMjMgQEAgdm9pZCBDaGVja2JveElucHV0VHlwZTo6aGFuZGxlS2V5dXBFdmVu
dChLZXlib2FyZEV2ZW50JiBldmVudCkKIAogdm9pZCBDaGVja2JveElucHV0VHlwZTo6d2lsbERp
c3BhdGNoQ2xpY2soSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgQVNTRVJU
KGVsZW1lbnQoKSk7Ci0KICAgICAvLyBBbiBldmVudCBoYW5kbGVyIGNhbiB1c2UgcHJldmVudERl
ZmF1bHQgb3IgInJldHVybiBmYWxzZSIgdG8gcmV2ZXJzZSB0aGUgY2hlY2tpbmcgd2UgZG8gaGVy
ZS4KICAgICAvLyBUaGUgSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSBvYmplY3QgY29udGFpbnMgd2hh
dCB3ZSBuZWVkIHRvIHVuZG8gd2hhdCB3ZSBkaWQgaGVyZSBpbiBkaWREaXNwYXRjaENsaWNrLgog
Ci0gICAgc3RhdGUuY2hlY2tlZCA9IGVsZW1lbnQoKS0+Y2hlY2tlZCgpOwotICAgIHN0YXRlLmlu
ZGV0ZXJtaW5hdGUgPSBlbGVtZW50KCktPmluZGV0ZXJtaW5hdGUoKTsKKyAgICBzdGF0ZS5jaGVj
a2VkID0gZWxlbWVudCgpLmNoZWNrZWQoKTsKKyAgICBzdGF0ZS5pbmRldGVybWluYXRlID0gZWxl
bWVudCgpLmluZGV0ZXJtaW5hdGUoKTsKIAogICAgIGlmIChzdGF0ZS5pbmRldGVybWluYXRlKQot
ICAgICAgICBlbGVtZW50KCktPnNldEluZGV0ZXJtaW5hdGUoZmFsc2UpOworICAgICAgICBlbGVt
ZW50KCkuc2V0SW5kZXRlcm1pbmF0ZShmYWxzZSk7CiAKLSAgICBlbGVtZW50KCktPnNldENoZWNr
ZWQoIXN0YXRlLmNoZWNrZWQsIERpc3BhdGNoQ2hhbmdlRXZlbnQpOworICAgIGVsZW1lbnQoKS5z
ZXRDaGVja2VkKCFzdGF0ZS5jaGVja2VkLCBEaXNwYXRjaENoYW5nZUV2ZW50KTsKIH0KIAogdm9p
ZCBDaGVja2JveElucHV0VHlwZTo6ZGlkRGlzcGF0Y2hDbGljayhFdmVudCYgZXZlbnQsIGNvbnN0
IElucHV0RWxlbWVudENsaWNrU3RhdGUmIHN0YXRlKQogewogICAgIGlmIChldmVudC5kZWZhdWx0
UHJldmVudGVkKCkgfHwgZXZlbnQuZGVmYXVsdEhhbmRsZWQoKSkgewotICAgICAgICBBU1NFUlQo
ZWxlbWVudCgpKTsKLSAgICAgICAgZWxlbWVudCgpLT5zZXRJbmRldGVybWluYXRlKHN0YXRlLmlu
ZGV0ZXJtaW5hdGUpOwotICAgICAgICBlbGVtZW50KCktPnNldENoZWNrZWQoc3RhdGUuY2hlY2tl
ZCk7CisgICAgICAgIGVsZW1lbnQoKS5zZXRJbmRldGVybWluYXRlKHN0YXRlLmluZGV0ZXJtaW5h
dGUpOworICAgICAgICBlbGVtZW50KCkuc2V0Q2hlY2tlZChzdGF0ZS5jaGVja2VkKTsKICAgICB9
CiAKICAgICAvLyBUaGUgd29yayB3ZSBkaWQgaW4gd2lsbERpc3BhdGNoQ2xpY2sgd2FzIGRlZmF1
bHQgaGFuZGxpbmcuCkBAIC0xMDMsOCArOTksNyBAQCBib29sIENoZWNrYm94SW5wdXRUeXBlOjpt
YXRjaGVzSW5kZXRlcm1pbmF0ZVBzZXVkb0NsYXNzKCkgY29uc3QKIAogYm9vbCBDaGVja2JveElu
cHV0VHlwZTo6c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+aW5kZXRlcm1pbmF0ZSgpOworICAg
IHJldHVybiBlbGVtZW50KCkuaW5kZXRlcm1pbmF0ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCmluZGV4IDJhMTM1Zjk3
N2QyZDUyMGYwYzBiNzI3Nzg2ZTVhY2JlZDc2YTljNTkuLjVhZmNiOWNhZTQxMDZiMzJjZTI1ZWM4
NGNjMGJlYzAyMzg0ZGQwYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJ
bnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3Bw
CkBAIC04MywxOCArODMsMTYgQEAgQ29sb3JJbnB1dFR5cGU6On5Db2xvcklucHV0VHlwZSgpCiAK
IGJvb2wgQ29sb3JJbnB1dFR5cGU6OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdAogewotICAgIEFT
U0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBlbGVtZW50KCktPmlzVGV4dEZvcm1Db250cm9s
Rm9jdXNhYmxlKCk7CisgICAgcmV0dXJuIGVsZW1lbnQoKS5pc1RleHRGb3JtQ29udHJvbEZvY3Vz
YWJsZSgpOwogfQogCiBib29sIENvbG9ySW5wdXRUeXBlOjppc0tleWJvYXJkRm9jdXNhYmxlKEtl
eWJvYXJkRXZlbnQqKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwogI2lmIFBMQVRG
T1JNKElPUykKLSAgICBpZiAoZWxlbWVudCgpLT5pc1JlYWRPbmx5KCkpCisgICAgaWYgKGVsZW1l
bnQoKS5pc1JlYWRPbmx5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBl
bGVtZW50KCktPmlzVGV4dEZvcm1Db250cm9sRm9jdXNhYmxlKCk7CisgICAgcmV0dXJuIGVsZW1l
bnQoKS5pc1RleHRGb3JtQ29udHJvbEZvY3VzYWJsZSgpOwogI2VuZGlmCiAgICAgcmV0dXJuIGZh
bHNlOwogfQpAQCAtMTI5LDIyICsxMjcsMjAgQEAgU3RyaW5nIENvbG9ySW5wdXRUeXBlOjpzYW5p
dGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29uc3QKIAogQ29sb3IgQ29s
b3JJbnB1dFR5cGU6OnZhbHVlQXNDb2xvcigpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQo
KSk7Ci0gICAgcmV0dXJuIHBhcnNlU2ltcGxlQ29sb3JWYWx1ZShlbGVtZW50KCktPnZhbHVlKCkp
LnZhbHVlKCk7CisgICAgcmV0dXJuIHBhcnNlU2ltcGxlQ29sb3JWYWx1ZShlbGVtZW50KCkudmFs
dWUoKSkudmFsdWUoKTsKIH0KIAogdm9pZCBDb2xvcklucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3Vi
dHJlZSgpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKS0+
c2hhZG93Um9vdCgpKTsKKyAgICBBU1NFUlQoZWxlbWVudCgpLnNoYWRvd1Jvb3QoKSk7CiAKLSAg
ICBEb2N1bWVudCYgZG9jdW1lbnQgPSBlbGVtZW50KCktPmRvY3VtZW50KCk7CisgICAgRG9jdW1l
bnQmIGRvY3VtZW50ID0gZWxlbWVudCgpLmRvY3VtZW50KCk7CiAgICAgYXV0byB3cmFwcGVyRWxl
bWVudCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwogICAgIHdyYXBwZXJFbGVt
ZW50LT5zZXRQc2V1ZG8oQXRvbWljU3RyaW5nKCItd2Via2l0LWNvbG9yLXN3YXRjaC13cmFwcGVy
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwogICAgIGF1dG8gY29sb3JT
d2F0Y2ggPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICBjb2xvclN3YXRj
aC0+c2V0UHNldWRvKEF0b21pY1N0cmluZygiLXdlYmtpdC1jb2xvci1zd2F0Y2giLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAgICAgd3JhcHBlckVsZW1lbnQtPmFwcGVu
ZENoaWxkKGNvbG9yU3dhdGNoKTsKLSAgICBlbGVtZW50KCktPnVzZXJBZ2VudFNoYWRvd1Jvb3Qo
KS0+YXBwZW5kQ2hpbGQod3JhcHBlckVsZW1lbnQpOworICAgIGVsZW1lbnQoKS51c2VyQWdlbnRT
aGFkb3dSb290KCktPmFwcGVuZENoaWxkKHdyYXBwZXJFbGVtZW50KTsKIAogICAgIHVwZGF0ZUNv
bG9yU3dhdGNoKCk7CiB9CkBAIC0xNjMsOCArMTU5LDcgQEAgdm9pZCBDb2xvcklucHV0VHlwZTo6
c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCB2YWx1ZUNoYW5nZWQsIFRleHRGaWVs
ZEUKIAogdm9pZCBDb2xvcklucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCYg
ZXZlbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgaWYgKGVsZW1lbnQoKS0+aXNE
aXNhYmxlZEZvcm1Db250cm9sKCkgfHwgIWVsZW1lbnQoKS0+cmVuZGVyZXIoKSkKKyAgICBpZiAo
ZWxlbWVudCgpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpIHx8ICFlbGVtZW50KCkucmVuZGVyZXIo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFVc2VyR2VzdHVyZUluZGljYXRvcjo6cHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKCkpCkBAIC0yMDIsMTMgKzE5NywxMiBAQCBib29sIENvbG9ySW5w
dXRUeXBlOjpzaG91bGRSZXNldE9uRG9jdW1lbnRBY3RpdmF0aW9uKCkKIAogdm9pZCBDb2xvcklu
cHV0VHlwZTo6ZGlkQ2hvb3NlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIEFTU0VS
VChlbGVtZW50KCkpOwotICAgIGlmIChlbGVtZW50KCktPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgp
IHx8IGNvbG9yID09IHZhbHVlQXNDb2xvcigpKQorICAgIGlmIChlbGVtZW50KCkuaXNEaXNhYmxl
ZEZvcm1Db250cm9sKCkgfHwgY29sb3IgPT0gdmFsdWVBc0NvbG9yKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBFdmVudFF1ZXVlU2NvcGUgc2NvcGU7Ci0gICAgZWxlbWVudCgpLT5zZXRWYWx1ZUZy
b21SZW5kZXJlcihjb2xvci5zZXJpYWxpemVkKCkpOworICAgIGVsZW1lbnQoKS5zZXRWYWx1ZUZy
b21SZW5kZXJlcihjb2xvci5zZXJpYWxpemVkKCkpOwogICAgIHVwZGF0ZUNvbG9yU3dhdGNoKCk7
Ci0gICAgZWxlbWVudCgpLT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKKyAgICBl
bGVtZW50KCkuZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiB9CiAKIHZvaWQgQ29s
b3JJbnB1dFR5cGU6OmRpZEVuZENob29zZXIoKQpAQCAtMjI4LDE0ICsyMjIsMTIgQEAgdm9pZCBD
b2xvcklucHV0VHlwZTo6dXBkYXRlQ29sb3JTd2F0Y2goKQogICAgIGlmICghY29sb3JTd2F0Y2gp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGNvbG9yU3dh
dGNoLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBl
bGVtZW50KCktPnZhbHVlKCksIGZhbHNlKTsKKyAgICBjb2xvclN3YXRjaC0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgZWxlbWVudCgpLnZhbHVlKCks
IGZhbHNlKTsKIH0KIAogSFRNTEVsZW1lbnQqIENvbG9ySW5wdXRUeXBlOjpzaGFkb3dDb2xvclN3
YXRjaCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgUmVmUHRyPFNoYWRv
d1Jvb3Q+IHNoYWRvdyA9IGVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93Um9vdCgpOworICAgIFJl
ZlB0cjxTaGFkb3dSb290PiBzaGFkb3cgPSBlbGVtZW50KCkudXNlckFnZW50U2hhZG93Um9vdCgp
OwogICAgIGlmICghc2hhZG93KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMjQ4LDEw
ICsyNDAsOSBAQCBIVE1MRWxlbWVudCogQ29sb3JJbnB1dFR5cGU6OnNoYWRvd0NvbG9yU3dhdGNo
KCkgY29uc3QKIAogSW50UmVjdCBDb2xvcklucHV0VHlwZTo6ZWxlbWVudFJlY3RSZWxhdGl2ZVRv
Um9vdFZpZXcoKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGlmICghZWxl
bWVudCgpLT5yZW5kZXJlcigpKQorICAgIGlmICghZWxlbWVudCgpLnJlbmRlcmVyKCkpCiAgICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS52
aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhlbGVtZW50KCktPnJlbmRlcmVyKCktPmFic29sdXRl
Qm91bmRpbmdCb3hSZWN0KCkpOworICAgIHJldHVybiBlbGVtZW50KCkuZG9jdW1lbnQoKS52aWV3
KCktPmNvbnRlbnRzVG9Sb290VmlldyhlbGVtZW50KCkucmVuZGVyZXIoKS0+YWJzb2x1dGVCb3Vu
ZGluZ0JveFJlY3QoKSk7CiB9CiAKIENvbG9yIENvbG9ySW5wdXRUeXBlOjpjdXJyZW50Q29sb3Io
KQpAQCAtMjYyLDggKzI1Myw3IEBAIENvbG9yIENvbG9ySW5wdXRUeXBlOjpjdXJyZW50Q29sb3Io
KQogYm9vbCBDb2xvcklucHV0VHlwZTo6c2hvdWxkU2hvd1N1Z2dlc3Rpb25zKCkgY29uc3QKIHsK
ICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAg
ICByZXR1cm4gZWxlbWVudCgpLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGxp
c3RBdHRyKTsKKyAgICByZXR1cm4gZWxlbWVudCgpLmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24obGlzdEF0dHIpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKQEAg
LTI3Myw4ICsyNjMsNyBAQCBWZWN0b3I8Q29sb3I+IENvbG9ySW5wdXRUeXBlOjpzdWdnZXN0aW9u
cygpIGNvbnN0CiB7CiAgICAgVmVjdG9yPENvbG9yPiBzdWdnZXN0aW9uczsKICNpZiBFTkFCTEUo
REFUQUxJU1RfRUxFTUVOVCkKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAoYXV0byBk
YXRhTGlzdCA9IGVsZW1lbnQoKS0+ZGF0YUxpc3QoKSkgeworICAgIGlmIChhdXRvIGRhdGFMaXN0
ID0gZWxlbWVudCgpLmRhdGFMaXN0KCkpIHsKICAgICAgICAgUmVmPEhUTUxDb2xsZWN0aW9uPiBv
cHRpb25zID0gZGF0YUxpc3QtPm9wdGlvbnMoKTsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
b3B0aW9ucy0+bGVuZ3RoKCk7CiAgICAgICAgIHN1Z2dlc3Rpb25zLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0
VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuY3BwCmluZGV4IDUx
ODhhZDM0NzEwZGRmYjQ2NDBjZTE5ZTBjMjBkMTc1NTUzY2ExYTEuLjFlYjYxYjNmNzk4YzQ2Yzk3
YjY0NjliNDhkN2I5N2Q5ODZjN2ZlOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
RGF0ZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBl
LmNwcApAQCAtNjQsMTEgKzY0LDEwIEBAIFN0ZXBSYW5nZSBEYXRlSW5wdXRUeXBlOjpjcmVhdGVT
dGVwUmFuZ2UoQW55U3RlcEhhbmRsaW5nIGFueVN0ZXBIYW5kbGluZykgY29uc3QKIHsKICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RlcFJhbmdlOjpTdGVwRGVzY3JpcHRpb24+IHN0
ZXBEZXNjcmlwdGlvbihkYXRlRGVmYXVsdFN0ZXAsIGRhdGVEZWZhdWx0U3RlcEJhc2UsIGRhdGVT
dGVwU2NhbGVGYWN0b3IsIFN0ZXBSYW5nZTo6UGFyc2VkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2Vy
KTsKIAotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGNvbnN0IERlY2ltYWwgc3RlcEJhc2Ug
PSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihtaW5BdHRyKSwgMCk7Ci0gICAgY29uc3QgRGVjaW1hbCBtaW5pbXVtID0gcGFyc2VUb051bWJl
cihlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIERl
Y2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1EYXRlKCkpKTsKLSAgICBj
b25zdCBEZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+YXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihtYXhBdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRl
Q29tcG9uZW50czo6bWF4aW11bURhdGUoKSkpOwotICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IFN0
ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGluZywgc3RlcERlc2NyaXB0aW9uLCBlbGVt
ZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3RlcEF0dHIpKTsKKyAgICBj
b25zdCBEZWNpbWFsIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwgMCk7CisgICAgY29uc3QgRGVjaW1hbCBt
aW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihtaW5BdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWlu
aW11bURhdGUoKSkpOworICAgIGNvbnN0IERlY2ltYWwgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIo
ZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWF4QXR0ciksIERlY2lt
YWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1heGltdW1EYXRlKCkpKTsKKyAgICBjb25z
dCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0
ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
c3RlcEF0dHIpKTsKICAgICByZXR1cm4gU3RlcFJhbmdlKHN0ZXBCYXNlLCBSYW5nZUxpbWl0YXRp
b25zOjpWYWxpZCwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwgc3RlcERlc2NyaXB0aW9uKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5jcHAKaW5k
ZXggNzRmNTg2NmIxNzA3NDBlZmQzNjI1MTFlYjJkYzNlMTlhYTFhYmM0OS4uYmRjMzg1NzgzOTA5
ZTYxZmRhNDVhNzdkZjg5ZDFhYzJjMDI5YWI5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuY3BwCkBAIC03MiwxMSArNzIsMTAgQEAgU3RlcFJhbmdl
IERhdGVUaW1lTG9jYWxJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZShBbnlTdGVwSGFuZGxpbmcg
YW55U3RlcEhhbmRsaW4KIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RlcFJh
bmdlOjpTdGVwRGVzY3JpcHRpb24+IHN0ZXBEZXNjcmlwdGlvbihkYXRlVGltZUxvY2FsRGVmYXVs
dFN0ZXAsIGRhdGVUaW1lTG9jYWxEZWZhdWx0U3RlcEJhc2UsIGRhdGVUaW1lTG9jYWxTdGVwU2Nh
bGVGYWN0b3IsIFN0ZXBSYW5nZTo6U2NhbGVkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2VyKTsKIAot
ICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGNvbnN0IERlY2ltYWwgc3RlcEJhc2UgPSBwYXJz
ZVRvTnVtYmVyKGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5B
dHRyKSwgMCk7Ci0gICAgY29uc3QgRGVjaW1hbCBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVt
ZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIERlY2ltYWw6
OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1EYXRlVGltZSgpKSk7Ci0gICAgY29u
c3QgRGVjaW1hbCBtYXhpbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24obWF4QXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNv
bXBvbmVudHM6Om1heGltdW1EYXRlVGltZSgpKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBzdGVwID0g
U3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCBzdGVwRGVzY3JpcHRpb24sIGVs
ZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzdGVwQXR0cikpOworICAg
IGNvbnN0IERlY2ltYWwgc3RlcEJhc2UgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpLCAwKTsKKyAgICBjb25zdCBEZWNpbWFs
IG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKG1pbkF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25lbnRzOjpt
aW5pbXVtRGF0ZVRpbWUoKSkpOworICAgIGNvbnN0IERlY2ltYWwgbWF4aW11bSA9IHBhcnNlVG9O
dW1iZXIoZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWF4QXR0ciks
IERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1heGltdW1EYXRlVGltZSgpKSk7
CisgICAgY29uc3QgRGVjaW1hbCBzdGVwID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhh
bmRsaW5nLCBzdGVwRGVzY3JpcHRpb24sIGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKHN0ZXBBdHRyKSk7CiAgICAgcmV0dXJuIFN0ZXBSYW5nZShzdGVwQmFzZSwgUmFu
Z2VMaW1pdGF0aW9uczo6VmFsaWQsIG1pbmltdW0sIG1heGltdW0sIHN0ZXAsIHN0ZXBEZXNjcmlw
dGlvbik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRW1haWxJbnB1dFR5
cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9FbWFpbElucHV0VHlwZS5jcHAKaW5kZXggMGE4
NDMzOTVhMGQ2OWNlYzczNjgwMjVhY2NhN2E3YTBhZDMxMDdkMC4uN2I1OGYwZGNkYzIyM2MxOWI2
ZmU0M2YzZTM1ZjU1ZWM1MTNlNWZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9F
bWFpbElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9FbWFpbElucHV0VHlw
ZS5jcHAKQEAgLTU5LDEwICs1OSw5IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgRW1haWxJbnB1dFR5
cGU6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CiAKIGJvb2wgRW1haWxJbnB1dFR5cGU6OnR5cGVN
aXNtYXRjaEZvcihjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewotICAgIEFTU0VSVChlbGVt
ZW50KCkpOwogICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIWVsZW1lbnQoKS0+bXVsdGlwbGUoKSkKKyAgICBpZiAoIWVsZW1lbnQoKS5tdWx0
aXBsZSgpKQogICAgICAgICByZXR1cm4gIWlzVmFsaWRFbWFpbEFkZHJlc3ModmFsdWUpOwogICAg
IFZlY3RvcjxTdHJpbmc+IGFkZHJlc3NlczsKICAgICB2YWx1ZS5zcGxpdCgnLCcsIHRydWUsIGFk
ZHJlc3Nlcyk7CkBAIC03NSwxNCArNzQsMTIgQEAgYm9vbCBFbWFpbElucHV0VHlwZTo6dHlwZU1p
c21hdGNoRm9yKGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiAKIGJvb2wgRW1haWxJbnB1dFR5
cGU6OnR5cGVNaXNtYXRjaCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAg
cmV0dXJuIHR5cGVNaXNtYXRjaEZvcihlbGVtZW50KCktPnZhbHVlKCkpOworICAgIHJldHVybiB0
eXBlTWlzbWF0Y2hGb3IoZWxlbWVudCgpLnZhbHVlKCkpOwogfQogCiBTdHJpbmcgRW1haWxJbnB1
dFR5cGU6OnR5cGVNaXNtYXRjaFRleHQoKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkp
OwotICAgIHJldHVybiBlbGVtZW50KCktPm11bHRpcGxlKCkgPyB2YWxpZGF0aW9uTWVzc2FnZVR5
cGVNaXNtYXRjaEZvck11bHRpcGxlRW1haWxUZXh0KCkgOiB2YWxpZGF0aW9uTWVzc2FnZVR5cGVN
aXNtYXRjaEZvckVtYWlsVGV4dCgpOworICAgIHJldHVybiBlbGVtZW50KCkubXVsdGlwbGUoKSA/
IHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoRm9yTXVsdGlwbGVFbWFpbFRleHQoKSA6IHZh
bGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoRm9yRW1haWxUZXh0KCk7CiB9CiAKIGJvb2wgRW1h
aWxJbnB1dFR5cGU6OmlzRW1haWxGaWVsZCgpIGNvbnN0CkBAIC05OCw4ICs5NSw3IEBAIGJvb2wg
RW1haWxJbnB1dFR5cGU6OnN1cHBvcnRzU2VsZWN0aW9uQVBJKCkgY29uc3QKIFN0cmluZyBFbWFp
bElucHV0VHlwZTo6c2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUpIGNv
bnN0CiB7CiAgICAgU3RyaW5nIG5vTGluZUJyZWFrVmFsdWUgPSBwcm9wb3NlZFZhbHVlLnJlbW92
ZUNoYXJhY3RlcnMoaXNIVE1MTGluZUJyZWFrKTsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAg
ICBpZiAoIWVsZW1lbnQoKS0+bXVsdGlwbGUoKSkKKyAgICBpZiAoIWVsZW1lbnQoKS5tdWx0aXBs
ZSgpKQogICAgICAgICByZXR1cm4gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKG5v
TGluZUJyZWFrVmFsdWUpOwogICAgIFZlY3RvcjxTdHJpbmc+IGFkZHJlc3NlczsKICAgICBub0xp
bmVCcmVha1ZhbHVlLnNwbGl0KCcsJywgdHJ1ZSwgYWRkcmVzc2VzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0ZpbGVJbnB1dFR5cGUuY3BwCmluZGV4IDAzYWYzYTk2MzQ5NGZhZjAwMTJlMjFhOTM4ZjUxOTE3
ODAzMDg1MDguLjk5MzlkMmY2NDg2M2VhZDMxNzMwMGI5NWJiMjJhM2JiOWVlYjk4YmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcApAQCAtMTUzLDExICsxNTMsMTAgQEAgdm9p
ZCBGaWxlSW5wdXRUeXBlOjpyZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBGb3JtQ29udHJv
bFN0YXRlJiBzdGF0ZSkKIAogYm9vbCBGaWxlSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShET01G
b3JtRGF0YSYgZm9ybURhdGEsIGJvb2wgbXVsdGlwYXJ0KSBjb25zdAogewotICAgIEFTU0VSVChl
bGVtZW50KCkpOwotICAgIGF1dG8gZmlsZUxpc3QgPSBtYWtlUmVmUHRyKGVsZW1lbnQoKS0+Zmls
ZXMoKSk7CisgICAgYXV0byBmaWxlTGlzdCA9IG1ha2VSZWZQdHIoZWxlbWVudCgpLmZpbGVzKCkp
OwogICAgIEFTU0VSVChmaWxlTGlzdCk7CiAKLSAgICBhdXRvIG5hbWUgPSBlbGVtZW50KCktPm5h
bWUoKTsKKyAgICBhdXRvIG5hbWUgPSBlbGVtZW50KCkubmFtZSgpOwogCiAgICAgaWYgKCFtdWx0
aXBhcnQpIHsKICAgICAgICAgLy8gU2VuZCBvbmx5IHRoZSBiYXNlbmFtZXMuCkBAIC0xODcsMjAg
KzE4NiwxNyBAQCBib29sIEZpbGVJbnB1dFR5cGU6OmFwcGVuZEZvcm1EYXRhKERPTUZvcm1EYXRh
JiBmb3JtRGF0YSwgYm9vbCBtdWx0aXBhcnQpIGNvbnN0CiAKIGJvb2wgRmlsZUlucHV0VHlwZTo6
dmFsdWVNaXNzaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVs
ZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+aXNSZXF1aXJlZCgpICYmIHZhbHVlLmlz
RW1wdHkoKTsKKyAgICByZXR1cm4gZWxlbWVudCgpLmlzUmVxdWlyZWQoKSAmJiB2YWx1ZS5pc0Vt
cHR5KCk7CiB9CiAKIFN0cmluZyBGaWxlSW5wdXRUeXBlOjp2YWx1ZU1pc3NpbmdUZXh0KCkgY29u
c3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5tdWx0
aXBsZSgpID8gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JNdWx0aXBsZUZpbGVUZXh0
KCkgOiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvckZpbGVUZXh0KCk7CisgICAgcmV0
dXJuIGVsZW1lbnQoKS5tdWx0aXBsZSgpID8gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdG
b3JNdWx0aXBsZUZpbGVUZXh0KCkgOiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvckZp
bGVUZXh0KCk7CiB9CiAKIHZvaWQgRmlsZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVu
dChFdmVudCYgZXZlbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgYXV0byYgaW5w
dXQgPSAqZWxlbWVudCgpOworICAgIGF1dG8mIGlucHV0ID0gZWxlbWVudCgpOwogCiAgICAgaWYg
KGlucHV0LmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMjcs
OCArMjIzLDcgQEAgdm9pZCBGaWxlSW5wdXRUeXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2
ZW50JiBldmVudCkKIAogUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IEZpbGVJbnB1dFR5cGU6OmNy
ZWF0ZUlucHV0UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHlsZSkKIHsKLSAgICBBU1NFUlQoZWxl
bWVudCgpKTsKLSAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyRmlsZVVwbG9hZENvbnRy
b2w+KCplbGVtZW50KCksIFdURk1vdmUoc3R5bGUpKTsKKyAgICByZXR1cm4gY3JlYXRlUmVuZGVy
ZXI8UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w+KGVsZW1lbnQoKSwgV1RGTW92ZShzdHlsZSkpOwog
fQogCiBib29sIEZpbGVJbnB1dFR5cGU6OmNhblNldFN0cmluZ1ZhbHVlKCkgY29uc3QKQEAgLTI3
Miw4ICsyNjcsNyBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYs
IGJvb2wsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IpCiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBj
bGVhciB0aGUgZmlsZSBsaXN0LCBvciByZXBsYWNlIGl0IHdpdGggYSBuZXcgZW1wdHkgb25lIGhl
cmU/IFRoaXMgaXMgb2JzZXJ2YWJsZSBmcm9tIEphdmFTY3JpcHQgdGhyb3VnaCBjdXN0b20gcHJv
cGVydGllcy4KICAgICBtX2ZpbGVMaXN0LT5jbGVhcigpOwogICAgIG1faWNvbiA9IG51bGxwdHI7
Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgZWxlbWVudCgpLT5pbnZhbGlkYXRlU3R5bGVG
b3JTdWJ0cmVlKCk7CisgICAgZWxlbWVudCgpLmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsK
IH0KIAogYm9vbCBGaWxlSW5wdXRUeXBlOjppc0ZpbGVVcGxvYWQoKSBjb25zdApAQCAtMjgzLDI4
ICsyNzcsMjYgQEAgYm9vbCBGaWxlSW5wdXRUeXBlOjppc0ZpbGVVcGxvYWQoKSBjb25zdAogCiB2
b2lkIEZpbGVJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQogewotICAgIEFTU0VSVChl
bGVtZW50KCkpOwotICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvd1Jvb3QoKSk7Ci0gICAgZWxl
bWVudCgpLT51c2VyQWdlbnRTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKGVsZW1lbnQoKS0+bXVs
dGlwbGUoKSA/IFVwbG9hZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZUZvck11bHRpcGxlKGVsZW1lbnQo
KS0+ZG9jdW1lbnQoKSk6IFVwbG9hZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShlbGVtZW50KCktPmRv
Y3VtZW50KCkpKTsKKyAgICBBU1NFUlQoZWxlbWVudCgpLnNoYWRvd1Jvb3QoKSk7CisgICAgZWxl
bWVudCgpLnVzZXJBZ2VudFNoYWRvd1Jvb3QoKS0+YXBwZW5kQ2hpbGQoZWxlbWVudCgpLm11bHRp
cGxlKCkgPyBVcGxvYWRCdXR0b25FbGVtZW50OjpjcmVhdGVGb3JNdWx0aXBsZShlbGVtZW50KCku
ZG9jdW1lbnQoKSk6IFVwbG9hZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShlbGVtZW50KCkuZG9jdW1l
bnQoKSkpOwogfQogCiB2b2lkIEZpbGVJbnB1dFR5cGU6OmRpc2FibGVkU3RhdGVDaGFuZ2VkKCkK
IHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBBU1NFUlQoZWxlbWVudCgpLT5zaGFkb3dS
b290KCkpOworICAgIEFTU0VSVChlbGVtZW50KCkuc2hhZG93Um9vdCgpKTsKIAotICAgIGF1dG8g
cm9vdCA9IGVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93Um9vdCgpOworICAgIGF1dG8gcm9vdCA9
IGVsZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCk7CiAgICAgaWYgKCFyb290KQogICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgaWYgKGF1dG8gYnV0dG9uID0gbWFrZVJlZlB0cihjaGlsZHJl
bk9mVHlwZTxVcGxvYWRCdXR0b25FbGVtZW50Pigqcm9vdCkuZmlyc3QoKSkpCi0gICAgICAgIGJ1
dHRvbi0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShkaXNhYmxlZEF0dHIsIGVsZW1lbnQoKS0+aXNEaXNh
YmxlZEZvcm1Db250cm9sKCkpOworICAgICAgICBidXR0b24tPnNldEJvb2xlYW5BdHRyaWJ1dGUo
ZGlzYWJsZWRBdHRyLCBlbGVtZW50KCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpOwogfQogCiB2
b2lkIEZpbGVJbnB1dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSkKIHsKICAgICBpZiAobmFtZSA9PSBtdWx0aXBsZUF0dHIpIHsKLSAgICAgICAgaWYgKGF1
dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGVsZW1l
bnQgPSB0aGlzLT5lbGVtZW50UHRyKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50LT5z
aGFkb3dSb290KCkpOwogICAgICAgICAgICAgaWYgKGF1dG8gcm9vdCA9IGVsZW1lbnQtPnVzZXJB
Z2VudFNoYWRvd1Jvb3QoKSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvIGJ1dHRvbiA9IG1h
a2VSZWZQdHIoY2hpbGRyZW5PZlR5cGU8VXBsb2FkQnV0dG9uRWxlbWVudD4oKnJvb3QpLmZpcnN0
KCkpKQpAQCAtMzQ5LDggKzM0MSw3IEBAIGJvb2wgRmlsZUlucHV0VHlwZTo6YWxsb3dzRGlyZWN0
b3JpZXMoKSBjb25zdAogewogICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS5kaXJlY3RvcnlVcGxvYWRFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5oYXNBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHdlYmtpdGRpcmVjdG9yeUF0dHIpOworICAgIHJl
dHVybiBlbGVtZW50KCkuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih3ZWJraXRk
aXJlY3RvcnlBdHRyKTsKIH0KIAogdm9pZCBGaWxlSW5wdXRUeXBlOjpzZXRGaWxlcyhSZWZQdHI8
RmlsZUxpc3Q+JiYgZmlsZXMpCkBAIC0zNjMsOCArMzU0LDcgQEAgdm9pZCBGaWxlSW5wdXRUeXBl
OjpzZXRGaWxlcyhSZWZQdHI8RmlsZUxpc3Q+JiYgZmlsZXMsIFJlcXVlc3RJY29uIHNob3VsZFJl
cXVlc3QKICAgICBpZiAoIWZpbGVzKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoZWxl
bWVudCgpKTsKLSAgICBSZWY8SFRNTElucHV0RWxlbWVudD4gcHJvdGVjdGVkSW5wdXRFbGVtZW50
KCplbGVtZW50KCkpOworICAgIFJlZjxIVE1MSW5wdXRFbGVtZW50PiBwcm90ZWN0ZWRJbnB1dEVs
ZW1lbnQoZWxlbWVudCgpKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGZpbGVzLT5sZW5ndGgo
KTsKIApAQCAtNDM0LDggKzQyNCw3IEBAIHZvaWQgRmlsZUlucHV0VHlwZTo6aWNvbkxvYWRlZChS
ZWZQdHI8SWNvbj4mJiBpY29uKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2ljb24gPSBXVEZN
b3ZlKGljb24pOwotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGlmIChhdXRvKiByZW5kZXJl
ciA9IGVsZW1lbnQoKS0+cmVuZGVyZXIoKSkKKyAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBlbGVt
ZW50KCkucmVuZGVyZXIoKSkKICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnQoKTsKIH0KIApAQCAt
NDQ2LDggKzQzNSw3IEBAIGJvb2wgRmlsZUlucHV0VHlwZTo6cmVjZWl2ZURyb3BwZWRGaWxlcyhj
b25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgaWYgKHBhdGhzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgaWYgKGVsZW1l
bnQoKS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtdWx0aXBsZUF0dHIpKSB7
CisgICAgaWYgKGVsZW1lbnQoKS5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG11
bHRpcGxlQXR0cikpIHsKICAgICAgICAgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+IGZpbGVz
OwogICAgICAgICBmaWxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdGhzLnNpemUoKSk7CiAg
ICAgICAgIGZvciAoYXV0byYgcGF0aCA6IHBhdGhzKQpAQCAtNDcwLDggKzQ1OCw3IEBAIFN0cmlu
ZyBGaWxlSW5wdXRUeXBlOjpkZWZhdWx0VG9vbFRpcCgpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQg
bGlzdFNpemUgPSBtX2ZpbGVMaXN0LT5sZW5ndGgoKTsKICAgICBpZiAoIWxpc3RTaXplKSB7Ci0g
ICAgICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgICAgICBpZiAoZWxlbWVudCgpLT5tdWx0aXBs
ZSgpKQorICAgICAgICBpZiAoZWxlbWVudCgpLm11bHRpcGxlKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmlsZUJ1dHRvbk5vRmlsZXNTZWxlY3RlZExhYmVsKCk7CiAgICAgICAgIHJldHVybiBmaWxl
QnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSGlkZGVuSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSGlk
ZGVuSW5wdXRUeXBlLmNwcAppbmRleCBhODgyYzhmYzU5Mzk0ODMxZWM4MDRhZmEyYzljNzZiMDFl
N2JiNzY2Li42OTcwNmUyNWE4MGQyMTQyNDFjYTZjYmQyZmQ2NmRhZGEzN2VkN2MyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hpZGRlbklucHV0VHlwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IaWRkZW5JbnB1dFR5cGUuY3BwCkBAIC01MiwxNCArNTIsMTIgQEAgRm9y
bUNvbnRyb2xTdGF0ZSBIaWRkZW5JbnB1dFR5cGU6OnNhdmVGb3JtQ29udHJvbFN0YXRlKCkgY29u
c3QKIHsKICAgICAvLyB2YWx1ZUF0dHJpYnV0ZVdhc1VwZGF0ZWRBZnRlclBhcnNpbmcoKSBuZXZl
ciBiZSB0cnVlIGZvciBmb3JtIGNvbnRyb2xzIGNyZWF0ZSBieSBjcmVhdGVFbGVtZW50KCkgb3Ig
Y2xvbmVOb2RlKCkuCiAgICAgLy8gSXQncyBPSyBmb3Igbm93IGJlY2F1c2Ugd2UgcmVzdG9yZSB2
YWx1ZXMgb25seSB0byBmb3JtIGNvbnRyb2xzIGNyZWF0ZWQgYnkgcGFyc2luZy4KLSAgICBBU1NF
UlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gZWxlbWVudCgpLT52YWx1ZUF0dHJpYnV0ZVdhc1Vw
ZGF0ZWRBZnRlclBhcnNpbmcoKSA/IEZvcm1Db250cm9sU3RhdGUgeyB7IGVsZW1lbnQoKS0+dmFs
dWUoKSB9IH0gOiBGb3JtQ29udHJvbFN0YXRlIHsgfTsKKyAgICByZXR1cm4gZWxlbWVudCgpLnZh
bHVlQXR0cmlidXRlV2FzVXBkYXRlZEFmdGVyUGFyc2luZygpID8gRm9ybUNvbnRyb2xTdGF0ZSB7
IHsgZWxlbWVudCgpLnZhbHVlKCkgfSB9IDogRm9ybUNvbnRyb2xTdGF0ZSB7IH07CiB9CiAKIHZv
aWQgSGlkZGVuSW5wdXRUeXBlOjpyZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBGb3JtQ29u
dHJvbFN0YXRlJiBzdGF0ZSkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBlbGVtZW50
KCktPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24odmFsdWVBdHRyLCBzdGF0ZVsw
XSk7CisgICAgZWxlbWVudCgpLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24odmFs
dWVBdHRyLCBzdGF0ZVswXSk7CiB9CiAKIGJvb2wgSGlkZGVuSW5wdXRUeXBlOjpzdXBwb3J0c1Zh
bGlkYXRpb24oKSBjb25zdApAQCAtODksOCArODcsNyBAQCBib29sIEhpZGRlbklucHV0VHlwZTo6
c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKQogCiB2b2lkIEhpZGRlbklucHV0VHlw
ZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBzYW5pdGl6ZWRWYWx1ZSwgYm9vbCwgVGV4dEZpZWxk
RXZlbnRCZWhhdmlvcikKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBlbGVtZW50KCkt
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24odmFsdWVBdHRyLCBzYW5pdGl6ZWRW
YWx1ZSk7CisgICAgZWxlbWVudCgpLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
dmFsdWVBdHRyLCBzYW5pdGl6ZWRWYWx1ZSk7CiB9CiAKIGJvb2wgSGlkZGVuSW5wdXRUeXBlOjpp
c0hpZGRlblR5cGUoKSBjb25zdApAQCAtMTAwLDggKzk3LDcgQEAgYm9vbCBIaWRkZW5JbnB1dFR5
cGU6OmlzSGlkZGVuVHlwZSgpIGNvbnN0CiAKIGJvb2wgSGlkZGVuSW5wdXRUeXBlOjphcHBlbmRG
b3JtRGF0YShET01Gb3JtRGF0YSYgZm9ybURhdGEsIGJvb2wgaXNNdWx0aXBhcnRGb3JtKSBjb25z
dAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGF1dG8gbmFtZSA9IGVsZW1lbnQoKS0+
bmFtZSgpOworICAgIGF1dG8gbmFtZSA9IGVsZW1lbnQoKS5uYW1lKCk7CiAKICAgICBpZiAoZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCAiX2NoYXJzZXRfIikpIHsKICAgICAgICAgZm9ybURh
dGEuYXBwZW5kKG5hbWUsIFN0cmluZyB7IGZvcm1EYXRhLmVuY29kaW5nKCkubmFtZSgpIH0pOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmNwcAppbmRleCAyYjBmMWVkNjY4MjhmMTI2
YTdlMTU5YTA0YjFjYmE4YzA4YzVhYWEwLi5hYzVkNmIyNjcwZDRiZmFmMTEzNmI2YWUzZTA5NWQ5
YTUyZmU0YjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmNwcApAQCAtNTYs
MTEgKzU2LDEwIEBAIGJvb2wgSW1hZ2VJbnB1dFR5cGU6OmlzRm9ybURhdGFBcHBlbmRhYmxlKCkg
Y29uc3QKIAogYm9vbCBJbWFnZUlucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRE9NRm9ybURhdGEm
IGZvcm1EYXRhLCBib29sKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGlm
ICghZWxlbWVudCgpLT5pc0FjdGl2YXRlZFN1Ym1pdCgpKQorICAgIGlmICghZWxlbWVudCgpLmlz
QWN0aXZhdGVkU3VibWl0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIG5h
bWUgPSBlbGVtZW50KCktPm5hbWUoKTsKKyAgICBhdXRvJiBuYW1lID0gZWxlbWVudCgpLm5hbWUo
KTsKICAgICBpZiAobmFtZS5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCJ4
Il9zLCBTdHJpbmc6Om51bWJlcihtX2NsaWNrTG9jYXRpb24ueCgpKSk7CiAgICAgICAgIGZvcm1E
YXRhLmFwcGVuZCgieSJfcywgU3RyaW5nOjpudW1iZXIobV9jbGlja0xvY2F0aW9uLnkoKSkpOwpA
QCAtNzAsNyArNjksNyBAQCBib29sIEltYWdlSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShET01G
b3JtRGF0YSYgZm9ybURhdGEsIGJvb2wpIGNvbnN0CiAgICAgZm9ybURhdGEuYXBwZW5kKG1ha2VT
dHJpbmcobmFtZSwgIi54IiksIFN0cmluZzo6bnVtYmVyKG1fY2xpY2tMb2NhdGlvbi54KCkpKTsK
ICAgICBmb3JtRGF0YS5hcHBlbmQobWFrZVN0cmluZyhuYW1lLCAiLnkiKSwgU3RyaW5nOjpudW1i
ZXIobV9jbGlja0xvY2F0aW9uLnkoKSkpOwogCi0gICAgYXV0byB2YWx1ZSA9IGVsZW1lbnQoKS0+
dmFsdWUoKTsKKyAgICBhdXRvIHZhbHVlID0gZWxlbWVudCgpLnZhbHVlKCk7CiAgICAgaWYgKCF2
YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChuYW1lLCB2YWx1ZSk7CiAK
QEAgLTg0LDggKzgzLDcgQEAgYm9vbCBJbWFnZUlucHV0VHlwZTo6c3VwcG9ydHNWYWxpZGF0aW9u
KCkgY29uc3QKIAogdm9pZCBJbWFnZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVudChF
dmVudCYgZXZlbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgUmVmPEhUTUxJbnB1
dEVsZW1lbnQ+IHByb3RlY3RlZEVsZW1lbnQoKmVsZW1lbnQoKSk7CisgICAgUmVmPEhUTUxJbnB1
dEVsZW1lbnQ+IHByb3RlY3RlZEVsZW1lbnQoZWxlbWVudCgpKTsKICAgICBpZiAocHJvdGVjdGVk
RWxlbWVudC0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkgfHwgIXByb3RlY3RlZEVsZW1lbnQtPmZv
cm0oKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMTYsMjAgKzExNCwxOSBAQCB2b2lkIEltYWdl
SW5wdXRUeXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50JiBldmVudCkKIAogUmVuZGVy
UHRyPFJlbmRlckVsZW1lbnQ+IEltYWdlSW5wdXRUeXBlOjpjcmVhdGVJbnB1dFJlbmRlcmVyKFJl
bmRlclN0eWxlJiYgc3R5bGUpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJu
IGNyZWF0ZVJlbmRlcmVyPFJlbmRlckltYWdlPigqZWxlbWVudCgpLCBXVEZNb3ZlKHN0eWxlKSk7
CisgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlckltYWdlPihlbGVtZW50KCksIFdURk1v
dmUoc3R5bGUpKTsKIH0KIAogdm9pZCBJbWFnZUlucHV0VHlwZTo6YXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQogewogICAgIGlmIChuYW1lID09IGFsdEF0dHIpIHsK
LSAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpIHsKKyAgICAgICAg
aWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50UHRyKCkpIHsKICAgICAgICAgICAgIGF1
dG8qIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgIGlmIChpczxS
ZW5kZXJJbWFnZT4ocmVuZGVyZXIpKQogICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlcklt
YWdlPigqcmVuZGVyZXIpLnVwZGF0ZUFsdFRleHQoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBp
ZiAobmFtZSA9PSBzcmNBdHRyKSB7Ci0gICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gdGhpcy0+
ZWxlbWVudCgpKSB7CisgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudFB0
cigpKSB7CiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAg
ICAgICBlbGVtZW50LT5lbnN1cmVJbWFnZUxvYWRlcigpLnVwZGF0ZUZyb21FbGVtZW50SWdub3Jp
bmdQcmV2aW91c0Vycm9yKCk7CiAgICAgICAgIH0KQEAgLTE0MSwxMSArMTM4LDEwIEBAIHZvaWQg
SW1hZ2VJbnB1dFR5cGU6OmF0dGFjaCgpCiB7CiAgICAgQmFzZUJ1dHRvbklucHV0VHlwZTo6YXR0
YWNoKCk7CiAKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBIVE1MSW1hZ2VMb2FkZXImIGlt
YWdlTG9hZGVyID0gZWxlbWVudCgpLT5lbnN1cmVJbWFnZUxvYWRlcigpOworICAgIEhUTUxJbWFn
ZUxvYWRlciYgaW1hZ2VMb2FkZXIgPSBlbGVtZW50KCkuZW5zdXJlSW1hZ2VMb2FkZXIoKTsKICAg
ICBpbWFnZUxvYWRlci51cGRhdGVGcm9tRWxlbWVudCgpOwogCi0gICAgYXV0byogcmVuZGVyZXIg
PSBkb3duY2FzdDxSZW5kZXJJbWFnZT4oZWxlbWVudCgpLT5yZW5kZXJlcigpKTsKKyAgICBhdXRv
KiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckltYWdlPihlbGVtZW50KCkucmVuZGVyZXIoKSk7
CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xODgsOCArMTg0LDcg
QEAgYm9vbCBJbWFnZUlucHV0VHlwZTo6c2hvdWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cmli
dXRlcygpCiAKIHVuc2lnbmVkIEltYWdlSW5wdXRUeXBlOjpoZWlnaHQoKSBjb25zdAogewotICAg
IEFTU0VSVChlbGVtZW50KCkpOwotICAgIFJlZjxIVE1MSW5wdXRFbGVtZW50PiBlbGVtZW50KCp0
aGlzLT5lbGVtZW50KCkpOworICAgIFJlZjxIVE1MSW5wdXRFbGVtZW50PiBlbGVtZW50KHRoaXMt
PmVsZW1lbnQoKSk7CiAKICAgICBlbGVtZW50LT5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwog
CkBAIC0yMTAsOCArMjA1LDcgQEAgdW5zaWduZWQgSW1hZ2VJbnB1dFR5cGU6OmhlaWdodCgpIGNv
bnN0CiAKIHVuc2lnbmVkIEltYWdlSW5wdXRUeXBlOjp3aWR0aCgpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKGVsZW1lbnQoKSk7Ci0gICAgUmVmPEhUTUxJbnB1dEVsZW1lbnQ+IGVsZW1lbnQoKnRoaXMt
PmVsZW1lbnQoKSk7CisgICAgUmVmPEhUTUxJbnB1dEVsZW1lbnQ+IGVsZW1lbnQodGhpcy0+ZWxl
bWVudCgpKTsKIAogICAgIGVsZW1lbnQtPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSW5wdXRUeXBlLmNwcAppbmRleCA5MTY3ZmU5ZDkyMmM1MmE1Zjg1MjZjMDI0M2Vk
NmI4NDAzYzk5YjViLi44MjJiOTRhMTJhODdlYjNjZDQ5ZGRjYjNkOGU2YjkzZmI4YjhlNjc5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCkBAIC0xOTMsMzEgKzE5MywyNyBAQCBib29sIElu
cHV0VHlwZTo6c2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3QKIAog
Rm9ybUNvbnRyb2xTdGF0ZSBJbnB1dFR5cGU6OnNhdmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3QK
IHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBhdXRvIGN1cnJlbnRWYWx1ZSA9IGVsZW1l
bnQoKS0+dmFsdWUoKTsKLSAgICBpZiAoY3VycmVudFZhbHVlID09IGVsZW1lbnQoKS0+ZGVmYXVs
dFZhbHVlKCkpCisgICAgYXV0byBjdXJyZW50VmFsdWUgPSBlbGVtZW50KCkudmFsdWUoKTsKKyAg
ICBpZiAoY3VycmVudFZhbHVlID09IGVsZW1lbnQoKS5kZWZhdWx0VmFsdWUoKSkKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICByZXR1cm4geyB7IGN1cnJlbnRWYWx1ZSB9IH07CiB9CiAKIHZvaWQg
SW5wdXRUeXBlOjpyZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBGb3JtQ29udHJvbFN0YXRl
JiBzdGF0ZSkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBlbGVtZW50KCktPnNldFZh
bHVlKHN0YXRlWzBdKTsKKyAgICBlbGVtZW50KCkuc2V0VmFsdWUoc3RhdGVbMF0pOwogfQogCiBi
b29sIElucHV0VHlwZTo6aXNGb3JtRGF0YUFwcGVuZGFibGUoKSBjb25zdAogewotICAgIEFTU0VS
VChlbGVtZW50KCkpOwogICAgIC8vIFRoZXJlIGlzIG5vIGZvcm0gZGF0YSB1bmxlc3MgdGhlcmUn
cyBhIG5hbWUgZm9yIG5vbi1pbWFnZSB0eXBlcy4KLSAgICByZXR1cm4gIWVsZW1lbnQoKS0+bmFt
ZSgpLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gIWVsZW1lbnQoKS5uYW1lKCkuaXNFbXB0eSgpOwog
fQogCiBib29sIElucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRE9NRm9ybURhdGEmIGZvcm1EYXRh
LCBib29sKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwogICAgIC8vIEFsd2F5cyBz
dWNjZXNzZnVsLgotICAgIGZvcm1EYXRhLmFwcGVuZChlbGVtZW50KCktPm5hbWUoKSwgZWxlbWVu
dCgpLT52YWx1ZSgpKTsKKyAgICBmb3JtRGF0YS5hcHBlbmQoZWxlbWVudCgpLm5hbWUoKSwgZWxl
bWVudCgpLnZhbHVlKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zMjMsOCArMzE5LDcg
QEAgZG91YmxlIElucHV0VHlwZTo6bWF4aW11bSgpIGNvbnN0CiAKIGJvb2wgSW5wdXRUeXBlOjpz
aXplU2hvdWxkSW5jbHVkZURlY29yYXRpb24oaW50LCBpbnQmIHByZWZlcnJlZFNpemUpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcHJlZmVycmVkU2l6ZSA9IGVsZW1lbnQo
KS0+c2l6ZSgpOworICAgIHByZWZlcnJlZFNpemUgPSBlbGVtZW50KCkuc2l6ZSgpOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIApAQCAtMzk1LDggKzM5MCw3IEBAIFN0cmluZyBJbnB1dFR5cGU6OnZh
bHVlTWlzc2luZ1RleHQoKSBjb25zdAogCiBTdHJpbmcgSW5wdXRUeXBlOjp2YWxpZGF0aW9uTWVz
c2FnZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgU3RyaW5nIHZhbHVl
ID0gZWxlbWVudCgpLT52YWx1ZSgpOworICAgIFN0cmluZyB2YWx1ZSA9IGVsZW1lbnQoKS52YWx1
ZSgpOwogCiAgICAgLy8gVGhlIG9yZGVyIG9mIHRoZSBmb2xsb3dpbmcgY2hlY2tzIGlzIG1lYW5p
bmdmdWwuIGUuZy4gV2UnZCBsaWtlIHRvIHNob3cgdGhlCiAgICAgLy8gYmFkSW5wdXQgbWVzc2Fn
ZSBldmVuIGlmIHRoZSBjb250cm9sIGhhcyBvdGhlciB2YWxpZGF0aW9uIGVycm9ycy4KQEAgLTQx
MiwxMSArNDA2LDExIEBAIFN0cmluZyBJbnB1dFR5cGU6OnZhbGlkYXRpb25NZXNzYWdlKCkgY29u
c3QKICAgICBpZiAocGF0dGVybk1pc21hdGNoKHZhbHVlKSkKICAgICAgICAgcmV0dXJuIHZhbGlk
YXRpb25NZXNzYWdlUGF0dGVybk1pc21hdGNoVGV4dCgpOwogCi0gICAgaWYgKGVsZW1lbnQoKS0+
dG9vU2hvcnQoKSkKLSAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVG9vU2hvcnRUZXh0
KG51bUdyYXBoZW1lQ2x1c3RlcnModmFsdWUpLCBlbGVtZW50KCktPm1pbkxlbmd0aCgpKTsKKyAg
ICBpZiAoZWxlbWVudCgpLnRvb1Nob3J0KCkpCisgICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVz
c2FnZVRvb1Nob3J0VGV4dChudW1HcmFwaGVtZUNsdXN0ZXJzKHZhbHVlKSwgZWxlbWVudCgpLm1p
bkxlbmd0aCgpKTsKIAotICAgIGlmIChlbGVtZW50KCktPnRvb0xvbmcoKSkKLSAgICAgICAgcmV0
dXJuIHZhbGlkYXRpb25NZXNzYWdlVG9vTG9uZ1RleHQobnVtR3JhcGhlbWVDbHVzdGVycyh2YWx1
ZSksIGVsZW1lbnQoKS0+ZWZmZWN0aXZlTWF4TGVuZ3RoKCkpOworICAgIGlmIChlbGVtZW50KCku
dG9vTG9uZygpKQorICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUb29Mb25nVGV4dChu
dW1HcmFwaGVtZUNsdXN0ZXJzKHZhbHVlKSwgZWxlbWVudCgpLmVmZmVjdGl2ZU1heExlbmd0aCgp
KTsKIAogICAgIGlmICghaXNTdGVwcGFibGUoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7CkBAIC00ODYsMTQgKzQ4MCwxMiBAQCBib29sIElucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1w
bGljaXRseShFdmVudCYgZXZlbnQpCiAKIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBJbnB1dFR5
cGU6OmNyZWF0ZUlucHV0UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHlsZSkKIHsKLSAgICBBU1NF
UlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+KFJlbmRl
ckVsZW1lbnQ6OmNyZWF0ZUZvcigqZWxlbWVudCgpLCBXVEZNb3ZlKHN0eWxlKSkpOworICAgIHJl
dHVybiBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4oUmVuZGVyRWxlbWVudDo6Y3JlYXRlRm9yKGVs
ZW1lbnQoKSwgV1RGTW92ZShzdHlsZSkpKTsKIH0KIAogdm9pZCBJbnB1dFR5cGU6OmJsdXIoKQog
ewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGVsZW1lbnQoKS0+ZGVmYXVsdEJsdXIoKTsK
KyAgICBlbGVtZW50KCkuZGVmYXVsdEJsdXIoKTsKIH0KIAogdm9pZCBJbnB1dFR5cGU6OmNyZWF0
ZVNoYWRvd1N1YnRyZWUoKQpAQCAtNTAyLDggKzQ5NCw3IEBAIHZvaWQgSW5wdXRUeXBlOjpjcmVh
dGVTaGFkb3dTdWJ0cmVlKCkKIAogdm9pZCBJbnB1dFR5cGU6OmRlc3Ryb3lTaGFkb3dTdWJ0cmVl
KCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBSZWZQdHI8U2hhZG93Um9vdD4gcm9v
dCA9IGVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93Um9vdCgpOworICAgIFJlZlB0cjxTaGFkb3dS
b290PiByb290ID0gZWxlbWVudCgpLnVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKICAgICBpZiAoIXJv
b3QpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTQyLDE2ICs1MzMsMTQgQEAgRGF0ZUNvbXBvbmVu
dHM6OlR5cGUgSW5wdXRUeXBlOjpkYXRlVHlwZSgpIGNvbnN0CiAKIHZvaWQgSW5wdXRUeXBlOjpk
aXNwYXRjaFNpbXVsYXRlZENsaWNrSWZBY3RpdmUoS2V5Ym9hcmRFdmVudCYgZXZlbnQpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgaWYgKGVsZW1lbnQoKS0+YWN0aXZlKCkp
Ci0gICAgICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hTaW11bGF0ZWRDbGljaygmZXZlbnQpOworICAg
IGlmIChlbGVtZW50KCkuYWN0aXZlKCkpCisgICAgICAgIGVsZW1lbnQoKS5kaXNwYXRjaFNpbXVs
YXRlZENsaWNrKCZldmVudCk7CiAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAog
Q2hyb21lKiBJbnB1dFR5cGU6OmNocm9tZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQo
KSk7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBlbGVtZW50KCktPmRvY3VtZW50KCkucGFnZSgpKQor
ICAgIGlmIChQYWdlKiBwYWdlID0gZWxlbWVudCgpLmRvY3VtZW50KCkucGFnZSgpKQogICAgICAg
ICByZXR1cm4gJnBhZ2UtPmNocm9tZSgpOwogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtNTY4
LDE0ICs1NTcsMTIgQEAgYm9vbCBJbnB1dFR5cGU6Omhhc0N1c3RvbUZvY3VzTG9naWMoKSBjb25z
dAogCiBib29sIElucHV0VHlwZTo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KiBl
dmVudCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gIWVsZW1l
bnQoKS0+aXNSZWFkT25seSgpICYmIGVsZW1lbnQoKS0+aXNUZXh0Rm9ybUNvbnRyb2xLZXlib2Fy
ZEZvY3VzYWJsZShldmVudCk7CisgICAgcmV0dXJuICFlbGVtZW50KCkuaXNSZWFkT25seSgpICYm
IGVsZW1lbnQoKS5pc1RleHRGb3JtQ29udHJvbEtleWJvYXJkRm9jdXNhYmxlKGV2ZW50KTsKIH0K
IAogYm9vbCBJbnB1dFR5cGU6OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdAogewotICAgIEFTU0VS
VChlbGVtZW50KCkpOwotICAgIHJldHVybiBlbGVtZW50KCktPmlzVGV4dEZvcm1Db250cm9sTW91
c2VGb2N1c2FibGUoKTsKKyAgICByZXR1cm4gZWxlbWVudCgpLmlzVGV4dEZvcm1Db250cm9sTW91
c2VGb2N1c2FibGUoKTsKIH0KIAogYm9vbCBJbnB1dFR5cGU6OnNob3VsZFVzZUlucHV0TWV0aG9k
KCkgY29uc3QKQEAgLTU5Myw4ICs1ODAsNyBAQCB2b2lkIElucHV0VHlwZTo6aGFuZGxlQmx1ckV2
ZW50KCkKIAogdm9pZCBJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbihib29sKQogewotICAgIEFT
U0VSVChlbGVtZW50KCkpOwotICAgIGVsZW1lbnQoKS0+Zm9jdXMoZmFsc2UpOworICAgIGVsZW1l
bnQoKS5mb2N1cyhmYWxzZSk7CiB9CiAKIHZvaWQgSW5wdXRUeXBlOjphZGRTZWFyY2hSZXN1bHQo
KQpAQCAtNjY1LDE5ICs2NTEsMTggQEAgYm9vbCBJbnB1dFR5cGU6OnN0b3Jlc1ZhbHVlU2VwYXJh
dGVGcm9tQXR0cmlidXRlKCkKIAogdm9pZCBJbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmlu
ZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wgdmFsdWVDaGFuZ2VkLCBUZXh0RmllbGRFdmVudEJlaGF2
aW9yIGV2ZW50QmVoYXZpb3IpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgZWxlbWVu
dCgpLT5zZXRWYWx1ZUludGVybmFsKHNhbml0aXplZFZhbHVlLCBldmVudEJlaGF2aW9yKTsKLSAg
ICBlbGVtZW50KCktPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKKyAgICBlbGVtZW50KCku
c2V0VmFsdWVJbnRlcm5hbChzYW5pdGl6ZWRWYWx1ZSwgZXZlbnRCZWhhdmlvcik7CisgICAgZWxl
bWVudCgpLmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICBpZiAoIXZhbHVlQ2hhbmdl
ZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3dpdGNoIChldmVudEJlaGF2aW9yKSB7CiAgICAg
Y2FzZSBEaXNwYXRjaENoYW5nZUV2ZW50OgotICAgICAgICBlbGVtZW50KCktPmRpc3BhdGNoRm9y
bUNvbnRyb2xDaGFuZ2VFdmVudCgpOworICAgICAgICBlbGVtZW50KCkuZGlzcGF0Y2hGb3JtQ29u
dHJvbENoYW5nZUV2ZW50KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRGlzcGF0Y2hJbnB1
dEFuZENoYW5nZUV2ZW50OgotICAgICAgICBlbGVtZW50KCktPmRpc3BhdGNoRm9ybUNvbnRyb2xJ
bnB1dEV2ZW50KCk7Ci0gICAgICAgIGlmIChhdXRvIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkp
CisgICAgICAgIGVsZW1lbnQoKS5kaXNwYXRjaEZvcm1Db250cm9sSW5wdXRFdmVudCgpOworICAg
ICAgICBpZiAoYXV0byBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudFB0cigpKQogICAgICAgICAgICAg
ZWxlbWVudC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgRGlzcGF0Y2hOb0V2ZW50OgpAQCAtNzA1LDggKzY5MCw3IEBAIFN0cmluZyBJ
bnB1dFR5cGU6OmxvY2FsaXplVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKSBjb25z
dAogCiBTdHJpbmcgSW5wdXRUeXBlOjp2aXNpYmxlVmFsdWUoKSBjb25zdAogewotICAgIEFTU0VS
VChlbGVtZW50KCkpOwotICAgIHJldHVybiBlbGVtZW50KCktPnZhbHVlKCk7CisgICAgcmV0dXJu
IGVsZW1lbnQoKS52YWx1ZSgpOwogfQogCiBib29sIElucHV0VHlwZTo6aXNFbXB0eVZhbHVlKCkg
Y29uc3QKQEAgLTk2Miw4ICs5NDYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnB1dFR5cGU6OmFw
cGx5U3RlcChpbnQgY291bnQsIEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbgogICAgIGlm
ICghc3RlcFJhbmdlLmhhc1N0ZXAoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRTdGF0ZUVycm9yIH07CiAKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBjb25zdCBEZWNp
bWFsIGN1cnJlbnQgPSBwYXJzZVRvTnVtYmVyT3JOYU4oZWxlbWVudCgpLT52YWx1ZSgpKTsKKyAg
ICBjb25zdCBEZWNpbWFsIGN1cnJlbnQgPSBwYXJzZVRvTnVtYmVyT3JOYU4oZWxlbWVudCgpLnZh
bHVlKCkpOwogICAgIGlmICghY3VycmVudC5pc0Zpbml0ZSgpKQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKICAgICBEZWNpbWFsIG5ld1ZhbHVlID0gY3Vy
cmVudCArIHN0ZXBSYW5nZS5zdGVwKCkgKiBjb3VudDsKQEAgLTk3Niw3ICs5NTksNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBJbnB1dFR5cGU6OmFwcGx5U3RlcChpbnQgY291bnQsIEFueVN0ZXBIYW5k
bGluZyBhbnlTdGVwSGFuZGxpbgogICAgIGlmIChuZXdWYWx1ZSA8IHN0ZXBSYW5nZS5taW5pbXVt
KCkpCiAgICAgICAgIG5ld1ZhbHVlID0gc3RlcFJhbmdlLm1pbmltdW0oKTsKIAotICAgIGlmICgh
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKHN0ZXBBdHRyKSwgImFueSIpKQorICAgIGlmICghZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oc3RlcEF0dHIpLCAiYW55IikpCiAgICAgICAgIG5ld1ZhbHVlID0gc3RlcFJhbmdlLmFsaWdu
VmFsdWVGb3JTdGVwKGN1cnJlbnQsIG5ld1ZhbHVlKTsKIAogICAgIGlmIChuZXdWYWx1ZSAtIHN0
ZXBSYW5nZS5tYXhpbXVtKCkgPiBhY2NlcHRhYmxlRXJyb3JWYWx1ZSkKQEAgLTk4OCw4ICs5NzEs
OCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnB1dFR5cGU6OmFwcGx5U3RlcChpbnQgY291bnQsIEFu
eVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbgogICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBpZiAoQVhPYmplY3RDYWNoZSogY2Fj
aGUgPSBlbGVtZW50KCktPmRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCi0gICAg
ICAgIGNhY2hlLT5wb3N0Tm90aWZpY2F0aW9uKGVsZW1lbnQoKSwgQVhPYmplY3RDYWNoZTo6QVhW
YWx1ZUNoYW5nZWQpOworICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGVsZW1lbnQoKS5k
b2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQorICAgICAgICBjYWNoZS0+cG9zdE5v
dGlmaWNhdGlvbihlbGVtZW50UHRyKCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkKTsK
IAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xMDc2LDggKzEwNTksNyBAQCB2b2lkIElucHV0
VHlwZTo6c3RlcFVwRnJvbVJlbmRlcmVyKGludCBuKQogICAgIGVsc2UKICAgICAgICAgc2lnbiA9
IDA7CiAKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBTdHJpbmcgY3VycmVudFN0cmluZ1Zh
bHVlID0gZWxlbWVudCgpLT52YWx1ZSgpOworICAgIFN0cmluZyBjdXJyZW50U3RyaW5nVmFsdWUg
PSBlbGVtZW50KCkudmFsdWUoKTsKICAgICBEZWNpbWFsIGN1cnJlbnQgPSBwYXJzZVRvTnVtYmVy
T3JOYU4oY3VycmVudFN0cmluZ1ZhbHVlKTsKICAgICBpZiAoIWN1cnJlbnQuaXNGaW5pdGUoKSkg
ewogICAgICAgICBjdXJyZW50ID0gZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCk7CkBAIC0xMDkxLDcg
KzEwNzMsNyBAQCB2b2lkIElucHV0VHlwZTo6c3RlcFVwRnJvbVJlbmRlcmVyKGludCBuKQogICAg
IGlmICgoc2lnbiA+IDAgJiYgY3VycmVudCA8IHN0ZXBSYW5nZS5taW5pbXVtKCkpIHx8IChzaWdu
IDwgMCAmJiBjdXJyZW50ID4gc3RlcFJhbmdlLm1heGltdW0oKSkpCiAgICAgICAgIHNldFZhbHVl
QXNEZWNpbWFsKHNpZ24gPiAwID8gc3RlcFJhbmdlLm1pbmltdW0oKSA6IHN0ZXBSYW5nZS5tYXhp
bXVtKCksIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IGlmIChzdGVwTWlzbWF0Y2goZWxlbWVudCgpLT52YWx1ZSgpKSkgeworICAgICAgICBpZiAoc3Rl
cE1pc21hdGNoKGVsZW1lbnQoKS52YWx1ZSgpKSkgewogICAgICAgICAgICAgQVNTRVJUKCFzdGVw
LmlzWmVybygpKTsKICAgICAgICAgICAgIGNvbnN0IERlY2ltYWwgYmFzZSA9IHN0ZXBSYW5nZS5z
dGVwQmFzZSgpOwogICAgICAgICAgICAgRGVjaW1hbCBuZXdWYWx1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0
VHlwZS5oCmluZGV4IGM5OTRjY2U1MjNjYzg2YjY2Y2U5ZWE4MDIzODQ3MDYzNjI5YjJlOGQuLjhl
ZWY0OTJkZDEyMjMzYmRlYWI3YTY2NTViZDhmMDlkYTA1Mjg1MzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1
dFR5cGUuaApAQCAtMzA2LDcgKzMwNiw4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBleHBs
aWNpdCBJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkKICAgICAgICAgOiBtX2Vs
ZW1lbnQobWFrZVdlYWtQdHIoZWxlbWVudCkpIHsgfQotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0KKyAgICBIVE1MSW5wdXRF
bGVtZW50JiBlbGVtZW50KCkgY29uc3Q7CisgICAgSFRNTElucHV0RWxlbWVudCogZWxlbWVudFB0
cigpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQogICAgIENocm9tZSogY2hyb21l
KCkgY29uc3Q7CiAgICAgRGVjaW1hbCBwYXJzZVRvTnVtYmVyT3JOYU4oY29uc3QgU3RyaW5nJikg
Y29uc3Q7CiAKQEAgLTMxOCw2ICszMTksMTMgQEAgcHJpdmF0ZToKICAgICBXZWFrUHRyPEhUTUxJ
bnB1dEVsZW1lbnQ+IG1fZWxlbWVudDsKIH07CiAKK2lubGluZSBIVE1MSW5wdXRFbGVtZW50JiBJ
bnB1dFR5cGU6OmVsZW1lbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX2VsZW1lbnQuZ2V0KCkp
OworICAgIHJldHVybiAqbV9lbGVtZW50LmdldCgpOworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0lOUFVUX1RZUEUoVG9WYWx1
ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
TW9udGhJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Nb250aElucHV0VHlwZS5j
cHAKaW5kZXggNTk3N2NhYTBhYjAwMWY3NTg4MDdmNTM0OTdhN2I1M2VmNTI2ZTc0Zi4uMjJlZWFk
YTMzNWU4MDQ5NTEwYjY0MTQ2MWU5YjM3NGQ5NzYzYjg1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9Nb250aElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9N
b250aElucHV0VHlwZS5jcHAKQEAgLTU5LDkgKzU5LDggQEAgRGF0ZUNvbXBvbmVudHM6OlR5cGUg
TW9udGhJbnB1dFR5cGU6OmRhdGVUeXBlKCkgY29uc3QKIAogZG91YmxlIE1vbnRoSW5wdXRUeXBl
Ojp2YWx1ZUFzRGF0ZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAgICAgRGF0
ZUNvbXBvbmVudHMgZGF0ZTsKLSAgICBpZiAoIXBhcnNlVG9EYXRlQ29tcG9uZW50cyhlbGVtZW50
KCktPnZhbHVlKCksICZkYXRlKSkKKyAgICBpZiAoIXBhcnNlVG9EYXRlQ29tcG9uZW50cyhlbGVt
ZW50KCkudmFsdWUoKSwgJmRhdGUpKQogICAgICAgICByZXR1cm4gRGF0ZUNvbXBvbmVudHM6Omlu
dmFsaWRNaWxsaXNlY29uZHMoKTsKICAgICBkb3VibGUgbXNlYyA9IGRhdGUubWlsbGlzZWNvbmRz
U2luY2VFcG9jaCgpOwogICAgIEFTU0VSVChzdGQ6OmlzZmluaXRlKG1zZWMpKTsKQEAgLTkzLDEx
ICs5MiwxMCBAQCBTdGVwUmFuZ2UgTW9udGhJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZShBbnlT
dGVwSGFuZGxpbmcgYW55U3RlcEhhbmRsaW5nKSBjb25zdAogewogICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBTdGVwUmFuZ2U6OlN0ZXBEZXNjcmlwdGlvbj4gc3RlcERlc2NyaXB0aW9u
KG1vbnRoRGVmYXVsdFN0ZXAsIG1vbnRoRGVmYXVsdFN0ZXBCYXNlLCBtb250aFN0ZXBTY2FsZUZh
Y3RvciwgU3RlcFJhbmdlOjpQYXJzZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIpOwogCi0gICAg
QVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBzdGVwQmFzZSA9IHBhcnNlVG9O
dW1iZXIoZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIp
LCBEZWNpbWFsOjpmcm9tRG91YmxlKG1vbnRoRGVmYXVsdFN0ZXBCYXNlKSk7Ci0gICAgY29uc3Qg
RGVjaW1hbCBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBv
bmVudHM6Om1pbmltdW1Nb250aCgpKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBtYXhpbXVtID0gcGFy
c2VUb051bWJlcihlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWF4
QXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1heGltdW1Nb250aCgp
KSk7Ci0gICAgY29uc3QgRGVjaW1hbCBzdGVwID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3Rl
cEhhbmRsaW5nLCBzdGVwRGVzY3JpcHRpb24sIGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihzdGVwQXR0cikpOworICAgIGNvbnN0IERlY2ltYWwgc3RlcEJhc2UgPSBw
YXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1p
bkF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKG1vbnRoRGVmYXVsdFN0ZXBCYXNlKSk7CisgICAg
Y29uc3QgRGVjaW1hbCBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRl
Q29tcG9uZW50czo6bWluaW11bU1vbnRoKCkpKTsKKyAgICBjb25zdCBEZWNpbWFsIG1heGltdW0g
PSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KG1heEF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25lbnRzOjptYXhpbXVtTW9u
dGgoKSkpOworICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFu
eVN0ZXBIYW5kbGluZywgc3RlcERlc2NyaXB0aW9uLCBlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihzdGVwQXR0cikpOwogICAgIHJldHVybiBTdGVwUmFuZ2Uoc3RlcEJh
c2UsIFJhbmdlTGltaXRhdGlvbnM6OlZhbGlkLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBzdGVw
RGVzY3JpcHRpb24pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL051bWJl
cklucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL051bWJlcklucHV0VHlwZS5jcHAK
aW5kZXggM2E5MmFmYzFhYzgyMjk2Y2Q1ZTRkZTNlNzZkMDY3YWYyZDQ0ZTRkNC4uYWVmNDk1YzFk
MmU1ZGMxZWY3NDNmY2ViYTU1M2VhOWMxMDBmODg0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTnVt
YmVySW5wdXRUeXBlLmNwcApAQCAtOTMsMTYgKzkzLDE0IEBAIGNvbnN0IEF0b21pY1N0cmluZyYg
TnVtYmVySW5wdXRUeXBlOjpmb3JtQ29udHJvbFR5cGUoKSBjb25zdAogCiB2b2lkIE51bWJlcklu
cHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBzYW5pdGl6ZWRWYWx1ZSwgYm9vbCB2YWx1
ZUNoYW5nZWQsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKIHsKLSAgICBB
U1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAoIXZhbHVlQ2hhbmdlZCAmJiBzYW5pdGl6ZWRWYWx1
ZS5pc0VtcHR5KCkgJiYgIWVsZW1lbnQoKS0+aW5uZXJUZXh0VmFsdWUoKS5pc0VtcHR5KCkpCisg
ICAgaWYgKCF2YWx1ZUNoYW5nZWQgJiYgc2FuaXRpemVkVmFsdWUuaXNFbXB0eSgpICYmICFlbGVt
ZW50KCkuaW5uZXJUZXh0VmFsdWUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHVwZGF0ZUlubmVyVGV4
dFZhbHVlKCk7CiAgICAgVGV4dEZpZWxkSW5wdXRUeXBlOjpzZXRWYWx1ZShzYW5pdGl6ZWRWYWx1
ZSwgdmFsdWVDaGFuZ2VkLCBldmVudEJlaGF2aW9yKTsKIH0KIAogZG91YmxlIE51bWJlcklucHV0
VHlwZTo6dmFsdWVBc0RvdWJsZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0g
ICAgcmV0dXJuIHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKGVsZW1lbnQoKS0+dmFsdWUoKSk7
CisgICAgcmV0dXJuIHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKGVsZW1lbnQoKS52YWx1ZSgp
KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gTnVtYmVySW5wdXRUeXBlOjpzZXRWYWx1ZUFzRG91
YmxlKGRvdWJsZSBuZXdWYWx1ZSwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9y
KSBjb25zdApAQCAtMTExLDggKzEwOSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE51bWJlcklucHV0
VHlwZTo6c2V0VmFsdWVBc0RvdWJsZShkb3VibGUgbmV3VmFsdWUsIFRleHRGaWVsZEV2CiAgICAg
Y29uc3QgZG91YmxlIGZsb2F0TWF4ID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgp
OwogICAgIGlmIChuZXdWYWx1ZSA8IC1mbG9hdE1heCB8fCBuZXdWYWx1ZSA+IGZsb2F0TWF4KQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKLSAgICBBU1NF
UlQoZWxlbWVudCgpKTsKLSAgICBlbGVtZW50KCktPnNldFZhbHVlKHNlcmlhbGl6ZUZvck51bWJl
clR5cGUobmV3VmFsdWUpLCBldmVudEJlaGF2aW9yKTsKKyAgICBlbGVtZW50KCkuc2V0VmFsdWUo
c2VyaWFsaXplRm9yTnVtYmVyVHlwZShuZXdWYWx1ZSksIGV2ZW50QmVoYXZpb3IpOwogICAgIHJl
dHVybiB7IH07CiB9CiAKQEAgLTEyMiw4ICsxMTksNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBOdW1i
ZXJJbnB1dFR5cGU6OnNldFZhbHVlQXNEZWNpbWFsKGNvbnN0IERlY2ltYWwmIG5ld1ZhbHVlLCBU
ZQogICAgIGNvbnN0IERlY2ltYWwgZmxvYXRNYXggPSBEZWNpbWFsOjpmcm9tRG91YmxlKHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSk7CiAgICAgaWYgKG5ld1ZhbHVlIDwgLWZsb2F0
TWF4IHx8IG5ld1ZhbHVlID4gZmxvYXRNYXgpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkU3RhdGVFcnJvciB9OwotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGVsZW1lbnQo
KS0+c2V0VmFsdWUoc2VyaWFsaXplRm9yTnVtYmVyVHlwZShuZXdWYWx1ZSksIGV2ZW50QmVoYXZp
b3IpOworICAgIGVsZW1lbnQoKS5zZXRWYWx1ZShzZXJpYWxpemVGb3JOdW1iZXJUeXBlKG5ld1Zh
bHVlKSwgZXZlbnRCZWhhdmlvcik7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTM0LDggKzEz
MCw3IEBAIGJvb2wgTnVtYmVySW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2hGb3IoY29uc3QgU3RyaW5n
JiB2YWx1ZSkgY29uc3QKIAogYm9vbCBOdW1iZXJJbnB1dFR5cGU6OnR5cGVNaXNtYXRjaCgpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgQVNTRVJUKCF0eXBlTWlzbWF0Y2hG
b3IoZWxlbWVudCgpLT52YWx1ZSgpKSk7CisgICAgQVNTRVJUKCF0eXBlTWlzbWF0Y2hGb3IoZWxl
bWVudCgpLnZhbHVlKCkpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE0MywxMSArMTM4
LDEwIEBAIFN0ZXBSYW5nZSBOdW1iZXJJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZShBbnlTdGVw
SGFuZGxpbmcgYW55U3RlcEhhbmRsaW5nKSBjb25zCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPGNvbnN0IFN0ZXBSYW5nZTo6U3RlcERlc2NyaXB0aW9uPiBzdGVwRGVzY3JpcHRpb24obnVt
YmVyRGVmYXVsdFN0ZXAsIG51bWJlckRlZmF1bHRTdGVwQmFzZSwgbnVtYmVyU3RlcFNjYWxlRmFj
dG9yKTsKIAotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGNvbnN0IERlY2ltYWwgc3RlcEJh
c2UgPSBwYXJzZVRvRGVjaW1hbEZvck51bWJlclR5cGUoZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpLCBudW1iZXJEZWZhdWx0U3RlcEJhc2UpOworICAg
IGNvbnN0IERlY2ltYWwgc3RlcEJhc2UgPSBwYXJzZVRvRGVjaW1hbEZvck51bWJlclR5cGUoZWxl
bWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIG51bWJlckRl
ZmF1bHRTdGVwQmFzZSk7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB1c2UgbnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6bWF4IGZvciBudW1iZXIgaW5wdXQgdHlwZS4KICAgICBjb25zdCBEZWNpbWFs
IGZsb2F0TWF4ID0gRGVjaW1hbDo6ZnJvbURvdWJsZShzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0
Pjo6bWF4KCkpOwotICAgIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQgPSAqdGhpcy0+ZWxlbWVudCgp
OworICAgIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCk7CiAKICAgICBS
YW5nZUxpbWl0YXRpb25zIHJhbmdlTGltaXRhdGlvbnMgPSBSYW5nZUxpbWl0YXRpb25zOjpJbnZh
bGlkOwogICAgIGF1dG8gZXh0cmFjdEJvdW5kID0gWyZdIChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lLCBjb25zdCBEZWNpbWFsJiBkZWZhdWx0VmFsdWUpIC0+IERlY2ltYWwgewpA
QCAtMTcwLDE2ICsxNjQsMTUgQEAgYm9vbCBOdW1iZXJJbnB1dFR5cGU6OnNpemVTaG91bGRJbmNs
dWRlRGVjb3JhdGlvbihpbnQgZGVmYXVsdFNpemUsIGludCYgcHJlZmVycmUKIHsKICAgICBwcmVm
ZXJyZWRTaXplID0gZGVmYXVsdFNpemU7CiAKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBh
dXRvJiBzdGVwU3RyaW5nID0gZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKHN0ZXBBdHRyKTsKKyAgICBhdXRvJiBzdGVwU3RyaW5nID0gZWxlbWVudCgpLmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3RlcEF0dHIpOwogICAgIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShzdGVwU3RyaW5nLCAiYW55IikpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGNvbnN0IERlY2ltYWwgbWluaW11bSA9IHBhcnNlVG9EZWNpbWFsRm9yTnVtYmVy
VHlwZShlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0cikp
OworICAgIGNvbnN0IERlY2ltYWwgbWluaW11bSA9IHBhcnNlVG9EZWNpbWFsRm9yTnVtYmVyVHlw
ZShlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSk7CiAg
ICAgaWYgKCFtaW5pbXVtLmlzRmluaXRlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGNvbnN0IERlY2ltYWwgbWF4aW11bSA9IHBhcnNlVG9EZWNpbWFsRm9yTnVtYmVyVHlwZShlbGVt
ZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWF4QXR0cikpOworICAgIGNv
bnN0IERlY2ltYWwgbWF4aW11bSA9IHBhcnNlVG9EZWNpbWFsRm9yTnVtYmVyVHlwZShlbGVtZW50
KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtYXhBdHRyKSk7CiAgICAgaWYgKCFt
YXhpbXVtLmlzRmluaXRlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTk1LDEwICsx
ODgsOCBAQCBib29sIE51bWJlcklucHV0VHlwZTo6c2l6ZVNob3VsZEluY2x1ZGVEZWNvcmF0aW9u
KGludCBkZWZhdWx0U2l6ZSwgaW50JiBwcmVmZXJyZQogCiBmbG9hdCBOdW1iZXJJbnB1dFR5cGU6
OmRlY29yYXRpb25XaWR0aCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0KICAg
ICBmbG9hdCB3aWR0aCA9IDA7Ci0gICAgUmVmUHRyPEhUTUxFbGVtZW50PiBzcGluQnV0dG9uID0g
ZWxlbWVudCgpLT5pbm5lclNwaW5CdXR0b25FbGVtZW50KCk7CisgICAgUmVmUHRyPEhUTUxFbGVt
ZW50PiBzcGluQnV0dG9uID0gZWxlbWVudCgpLmlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKTsKICAg
ICBpZiAoUmVuZGVyQm94KiBzcGluUmVuZGVyZXIgPSBzcGluQnV0dG9uID8gc3BpbkJ1dHRvbi0+
cmVuZGVyQm94KCkgOiAwKSB7CiAgICAgICAgIHdpZHRoICs9IHNwaW5SZW5kZXJlci0+Ym9yZGVy
QW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOwogICAgICAgICAvLyBTaW5jZSB0aGUgd2lkdGggb2Yg
c3BpblJlbmRlcmVyIGlzIG5vdCBjYWxjdWxhdGVkIHlldCwgc3BpblJlbmRlcmVyLT5sb2dpY2Fs
V2lkdGgoKSByZXR1cm5zIDAuCkBAIC0yNDQsMTQgKzIzNSwxMiBAQCBTdHJpbmcgTnVtYmVySW5w
dXRUeXBlOjpsb2NhbGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29uc3QK
ICAgICAvLyBXZSBkb24ndCBsb2NhbGl6ZSBzY2llbnRpZmljIG5vdGF0aW9ucy4KICAgICBpZiAo
cHJvcG9zZWRWYWx1ZS5maW5kKGlzRSkgIT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybiBwcm9w
b3NlZFZhbHVlOwotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBlbGVtZW50KCkt
PmxvY2FsZSgpLmNvbnZlcnRUb0xvY2FsaXplZE51bWJlcihwcm9wb3NlZFZhbHVlKTsKKyAgICBy
ZXR1cm4gZWxlbWVudCgpLmxvY2FsZSgpLmNvbnZlcnRUb0xvY2FsaXplZE51bWJlcihwcm9wb3Nl
ZFZhbHVlKTsKIH0KIAogU3RyaW5nIE51bWJlcklucHV0VHlwZTo6dmlzaWJsZVZhbHVlKCkgY29u
c3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gbG9jYWxpemVWYWx1ZShl
bGVtZW50KCktPnZhbHVlKCkpOworICAgIHJldHVybiBsb2NhbGl6ZVZhbHVlKGVsZW1lbnQoKS52
YWx1ZSgpKTsKIH0KIAogU3RyaW5nIE51bWJlcklucHV0VHlwZTo6Y29udmVydEZyb21WaXNpYmxl
VmFsdWUoY29uc3QgU3RyaW5nJiB2aXNpYmxlVmFsdWUpIGNvbnN0CkBAIC0yNjEsOCArMjUwLDcg
QEAgU3RyaW5nIE51bWJlcklucHV0VHlwZTo6Y29udmVydEZyb21WaXNpYmxlVmFsdWUoY29uc3Qg
U3RyaW5nJiB2aXNpYmxlVmFsdWUpIGNvbnMKICAgICAvLyBXZSBkb24ndCBsb2NhbGl6ZSBzY2ll
bnRpZmljIG5vdGF0aW9ucy4KICAgICBpZiAodmlzaWJsZVZhbHVlLmZpbmQoaXNFKSAhPSBub3RG
b3VuZCkKICAgICAgICAgcmV0dXJuIHZpc2libGVWYWx1ZTsKLSAgICBBU1NFUlQoZWxlbWVudCgp
KTsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5sb2NhbGUoKS5jb252ZXJ0RnJvbUxvY2FsaXplZE51
bWJlcih2aXNpYmxlVmFsdWUpOworICAgIHJldHVybiBlbGVtZW50KCkubG9jYWxlKCkuY29udmVy
dEZyb21Mb2NhbGl6ZWROdW1iZXIodmlzaWJsZVZhbHVlKTsKIH0KIAogU3RyaW5nIE51bWJlcklu
cHV0VHlwZTo6c2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUpIGNvbnN0
CkBAIC0yNzQsOCArMjYyLDcgQEAgU3RyaW5nIE51bWJlcklucHV0VHlwZTo6c2FuaXRpemVWYWx1
ZShjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUpIGNvbnN0CiAKIGJvb2wgTnVtYmVySW5wdXRU
eXBlOjpoYXNCYWRJbnB1dCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAg
U3RyaW5nIHN0YW5kYXJkVmFsdWUgPSBjb252ZXJ0RnJvbVZpc2libGVWYWx1ZShlbGVtZW50KCkt
PmlubmVyVGV4dFZhbHVlKCkpOworICAgIFN0cmluZyBzdGFuZGFyZFZhbHVlID0gY29udmVydEZy
b21WaXNpYmxlVmFsdWUoZWxlbWVudCgpLmlubmVyVGV4dFZhbHVlKCkpOwogICAgIHJldHVybiAh
c3RhbmRhcmRWYWx1ZS5pc0VtcHR5KCkgJiYgIXN0ZDo6aXNmaW5pdGUocGFyc2VUb0RvdWJsZUZv
ck51bWJlclR5cGUoc3RhbmRhcmRWYWx1ZSkpOwogfQogCkBAIC0yOTYsMTUgKzI4MywxNCBAQCBi
b29sIE51bWJlcklucHV0VHlwZTo6aXNOdW1iZXJGaWVsZCgpIGNvbnN0CiAKIHZvaWQgTnVtYmVy
SW5wdXRUeXBlOjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiB7
Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAgICAgaWYgKG5hbWUgPT0gbWF4QXR0ciB8fCBuYW1l
ID09IG1pbkF0dHIpIHsKLSAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50
KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50UHRyKCkpIHsK
ICAgICAgICAgICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAg
ICAgICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCkpCiAgICAgICAg
ICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChuYW1lID09IHN0ZXBBdHRyKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKSB7CisgICAgICAgIGlmIChhdXRvKiBl
bGVtZW50ID0gdGhpcy0+ZWxlbWVudFB0cigpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byogcmVu
ZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgICAgIHJlbmRlcmVyLT5z
ZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcAppbmRleCBjMTFmNmM5NTZhMWI1NTNkMzk3OTQ2ZTdl
NzYyOTliNWM2OWJiZjYwLi43NzA1ZmU0ZGVlY2Y2NjA2NjM1NDA5NjM2YWYyMWFmNWYxNWRmMGMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcApAQCAtNDQsOCArNDQsNyBA
QCBjb25zdCBBdG9taWNTdHJpbmcmIFJhZGlvSW5wdXRUeXBlOjpmb3JtQ29udHJvbFR5cGUoKSBj
b25zdAogCiBib29sIFJhZGlvSW5wdXRUeXBlOjp2YWx1ZU1pc3NpbmcoY29uc3QgU3RyaW5nJikg
Y29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5p
c0luUmVxdWlyZWRSYWRpb0J1dHRvbkdyb3VwKCkgJiYgIWVsZW1lbnQoKS0+Y2hlY2tlZFJhZGlv
QnV0dG9uRm9yR3JvdXAoKTsKKyAgICByZXR1cm4gZWxlbWVudCgpLmlzSW5SZXF1aXJlZFJhZGlv
QnV0dG9uR3JvdXAoKSAmJiAhZWxlbWVudCgpLmNoZWNrZWRSYWRpb0J1dHRvbkZvckdyb3VwKCk7
CiB9CiAKIFN0cmluZyBSYWRpb0lucHV0VHlwZTo6dmFsdWVNaXNzaW5nVGV4dCgpIGNvbnN0CkBA
IC02NywxOSArNjYsMTggQEAgdm9pZCBSYWRpb0lucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50
KEtleWJvYXJkRXZlbnQmIGV2ZW50KQogICAgIGlmIChrZXkgIT0gIlVwIiAmJiBrZXkgIT0gIkRv
d24iICYmIGtleSAhPSAiTGVmdCIgJiYga2V5ICE9ICJSaWdodCIpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEFTU0VSVChlbGVtZW50KCkpOwogICAgIC8vIExlZnQgYW5kIHVwIG1lYW4gInByZXZp
b3VzIHJhZGlvIGJ1dHRvbiIuCiAgICAgLy8gUmlnaHQgYW5kIGRvd24gbWVhbiAibmV4dCByYWRp
byBidXR0b24iLgogICAgIC8vIFRlc3RlZCBpbiBXaW5JRSwgYW5kIGV2ZW4gZm9yIFJUTCwgbGVm
dCBzdGlsbCBtZWFucyBwcmV2aW91cyByYWRpbyBidXR0b24gKGFuZCBzbyBtb3ZlcwogICAgIC8v
IHRvIHRoZSByaWdodCkuICBTZWVtcyBzdHJhbmdlLCBidXQgd2UnbGwgbWF0Y2ggaXQuCiAgICAg
Ly8gSG93ZXZlciwgd2hlbiB1c2luZyBTcGF0aWFsIE5hdmlnYXRpb24sIHdlIG5lZWQgdG8gYmUg
YWJsZSB0byBuYXZpZ2F0ZSB3aXRob3V0IGNoYW5naW5nIHRoZSBzZWxlY3Rpb24uCi0gICAgaWYg
KGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5mcmFtZSgp
KSkKKyAgICBpZiAoaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZWxlbWVudCgpLmRvY3VtZW50
KCkuZnJhbWUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBib29sIGZvcndhcmQgPSAoa2V5ID09
ICJEb3duIiB8fCBrZXkgPT0gIlJpZ2h0Iik7CiAKICAgICAvLyBXZSBjYW4gb25seSBzdGF5IHdp
dGhpbiB0aGUgZm9ybSdzIGNoaWxkcmVuIGlmIHRoZSBmb3JtIGhhc24ndCBiZWVuIGRlbW90ZWQg
dG8gYSBsZWFmIGJlY2F1c2UKICAgICAvLyBvZiBtYWxmb3JtZWQgSFRNTC4KLSAgICBSZWZQdHI8
Tm9kZT4gbm9kZSA9IGVsZW1lbnQoKTsKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGVsZW1lbnRQ
dHIoKTsKICAgICB3aGlsZSAoKG5vZGUgPSAoZm9yd2FyZCA/IE5vZGVUcmF2ZXJzYWw6Om5leHQo
Km5vZGUpIDogTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMoKm5vZGUpKSkpIHsKICAgICAgICAgLy8g
T25jZSB3ZSBlbmNvdW50ZXIgYSBmb3JtIGVsZW1lbnQsIHdlIGtub3cgd2UncmUgdGhyb3VnaC4K
ICAgICAgICAgaWYgKGlzPEhUTUxGb3JtRWxlbWVudD4oKm5vZGUpKQpAQCAtODgsMTAgKzg2LDEw
IEBAIHZvaWQgUmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50
JiBldmVudCkKICAgICAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUuZ2V0KCkpOwotICAgICAg
ICBpZiAoaW5wdXRFbGVtZW50LT5mb3JtKCkgIT0gZWxlbWVudCgpLT5mb3JtKCkpCisgICAgICAg
IGlmIChpbnB1dEVsZW1lbnQtPmZvcm0oKSAhPSBlbGVtZW50KCkuZm9ybSgpKQogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSAmJiBp
bnB1dEVsZW1lbnQtPm5hbWUoKSA9PSBlbGVtZW50KCktPm5hbWUoKSAmJiBpbnB1dEVsZW1lbnQt
PmlzRm9jdXNhYmxlKCkpIHsKLSAgICAgICAgICAgIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5zZXRG
b2N1c2VkRWxlbWVudChpbnB1dEVsZW1lbnQuZ2V0KCkpOworICAgICAgICBpZiAoaW5wdXRFbGVt
ZW50LT5pc1JhZGlvQnV0dG9uKCkgJiYgaW5wdXRFbGVtZW50LT5uYW1lKCkgPT0gZWxlbWVudCgp
Lm5hbWUoKSAmJiBpbnB1dEVsZW1lbnQtPmlzRm9jdXNhYmxlKCkpIHsKKyAgICAgICAgICAgIGVs
ZW1lbnQoKS5kb2N1bWVudCgpLnNldEZvY3VzZWRFbGVtZW50KGlucHV0RWxlbWVudC5nZXQoKSk7
CiAgICAgICAgICAgICBpbnB1dEVsZW1lbnQtPmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soJmV2ZW50
LCBTZW5kTm9FdmVudHMsIERvTm90U2hvd1ByZXNzZWRMb29rKTsKICAgICAgICAgICAgIGV2ZW50
LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMDUsMTAgKzEw
Myw5IEBAIHZvaWQgUmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtleXVwRXZlbnQoS2V5Ym9hcmRFdmVu
dCYgZXZlbnQpCiAgICAgaWYgKGtleSAhPSAiVSswMDIwIikKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAgICAgLy8gSWYgYW4gdW5zZWxlY3RlZCByYWRpbyBpcyB0
YWJiZWQgaW50byAoYmVjYXVzZSB0aGUgZW50aXJlIGdyb3VwIGhhcyBub3RoaW5nCiAgICAgLy8g
Y2hlY2tlZCwgb3IgYmVjYXVzZSBvZiBzb21lIGV4cGxpY2l0IC5mb2N1cygpIGNhbGwpLCB0aGVu
IGFsbG93IHNwYWNlIHRvIGNoZWNrIGl0LgotICAgIGlmIChlbGVtZW50KCktPmNoZWNrZWQoKSkK
KyAgICBpZiAoZWxlbWVudCgpLmNoZWNrZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGRpc3Bh
dGNoU2ltdWxhdGVkQ2xpY2tJZkFjdGl2ZShldmVudCk7CiB9CkBAIC0xMTgsMzUgKzExNSwzMiBA
QCBib29sIFJhZGlvSW5wdXRUeXBlOjppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQq
IGV2ZW50KSBjb25zdAogICAgIGlmICghSW5wdXRUeXBlOjppc0tleWJvYXJkRm9jdXNhYmxlKGV2
ZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAg
ICAgLy8gV2hlbiB1c2luZyBTcGF0aWFsIE5hdmlnYXRpb24sIGV2ZXJ5IHJhZGlvIGJ1dHRvbiBz
aG91bGQgYmUgZm9jdXNhYmxlLgotICAgIGlmIChpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChl
bGVtZW50KCktPmRvY3VtZW50KCkuZnJhbWUoKSkpCisgICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRp
b25FbmFibGVkKGVsZW1lbnQoKS5kb2N1bWVudCgpLmZyYW1lKCkpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIC8vIE5ldmVyIGFsbG93IGtleWJvYXJkIHRhYmJpbmcgdG8gbGVhdmUgeW91
IGluIHRoZSBzYW1lIHJhZGlvIGdyb3VwLiAgQWx3YXlzCiAgICAgLy8gc2tpcCBhbnkgb3RoZXIg
ZWxlbWVudHMgaW4gdGhlIGdyb3VwLgotICAgIFJlZlB0cjxFbGVtZW50PiBjdXJyZW50Rm9jdXNl
ZE5vZGUgPSBlbGVtZW50KCktPmRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKTsKKyAgICBSZWZQ
dHI8RWxlbWVudD4gY3VycmVudEZvY3VzZWROb2RlID0gZWxlbWVudCgpLmRvY3VtZW50KCkuZm9j
dXNlZEVsZW1lbnQoKTsKICAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oY3VycmVudEZvY3Vz
ZWROb2RlKSkgewogICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBmb2N1c2VkSW5wdXQgPSBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50PigqY3VycmVudEZvY3VzZWROb2RlKTsKLSAgICAgICAgaWYg
KGZvY3VzZWRJbnB1dC5pc1JhZGlvQnV0dG9uKCkgJiYgZm9jdXNlZElucHV0LmZvcm0oKSA9PSBl
bGVtZW50KCktPmZvcm0oKSAmJiBmb2N1c2VkSW5wdXQubmFtZSgpID09IGVsZW1lbnQoKS0+bmFt
ZSgpKQorICAgICAgICBpZiAoZm9jdXNlZElucHV0LmlzUmFkaW9CdXR0b24oKSAmJiBmb2N1c2Vk
SW5wdXQuZm9ybSgpID09IGVsZW1lbnQoKS5mb3JtKCkgJiYgZm9jdXNlZElucHV0Lm5hbWUoKSA9
PSBlbGVtZW50KCkubmFtZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAog
ICAgIC8vIEFsbG93IGtleWJvYXJkIGZvY3VzIGlmIHdlJ3JlIGNoZWNrZWQgb3IgaWYgbm90aGlu
ZyBpbiB0aGUgZ3JvdXAgaXMgY2hlY2tlZC4KLSAgICByZXR1cm4gZWxlbWVudCgpLT5jaGVja2Vk
KCkgfHwgIWVsZW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9uRm9yR3JvdXAoKTsKKyAgICByZXR1
cm4gZWxlbWVudCgpLmNoZWNrZWQoKSB8fCAhZWxlbWVudCgpLmNoZWNrZWRSYWRpb0J1dHRvbkZv
ckdyb3VwKCk7CiB9CiAKIGJvb2wgUmFkaW9JbnB1dFR5cGU6OnNob3VsZFNlbmRDaGFuZ2VFdmVu
dEFmdGVyQ2hlY2tlZENoYW5nZWQoKQogewogICAgIC8vIERvbid0IHNlbmQgYSBjaGFuZ2UgZXZl
bnQgZm9yIGEgcmFkaW8gYnV0dG9uIHRoYXQncyBnZXR0aW5nIHVuY2hlY2tlZC4KICAgICAvLyBU
aGlzIHdhcyBkb25lIHRvIG1hdGNoIHRoZSBiZWhhdmlvciBvZiBvdGhlciBicm93c2Vycy4KLSAg
ICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5jaGVja2VkKCk7Cisg
ICAgcmV0dXJuIGVsZW1lbnQoKS5jaGVja2VkKCk7CiB9CiAKIHZvaWQgUmFkaW9JbnB1dFR5cGU6
OndpbGxEaXNwYXRjaENsaWNrKElucHV0RWxlbWVudENsaWNrU3RhdGUmIHN0YXRlKQogewotICAg
IEFTU0VSVChlbGVtZW50KCkpOwogICAgIC8vIEFuIGV2ZW50IGhhbmRsZXIgY2FuIHVzZSBwcmV2
ZW50RGVmYXVsdCBvciAicmV0dXJuIGZhbHNlIiB0byByZXZlcnNlIHRoZSBzZWxlY3Rpb24gd2Ug
ZG8gaGVyZS4KICAgICAvLyBUaGUgSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSBvYmplY3QgY29udGFp
bnMgd2hhdCB3ZSBuZWVkIHRvIHVuZG8gd2hhdCB3ZSBkaWQgaGVyZSBpbiBkaWREaXNwYXRjaENs
aWNrLgogCkBAIC0xNTQsMTAgKzE0OCwxMCBAQCB2b2lkIFJhZGlvSW5wdXRUeXBlOjp3aWxsRGlz
cGF0Y2hDbGljayhJbnB1dEVsZW1lbnRDbGlja1N0YXRlJiBzdGF0ZSkKICAgICAvLyBUaGVyZWZv
cmUgaWYgbm90aGluZyBpcyBjdXJyZW50bHkgc2VsZWN0ZWQsIHdlIHdvbid0IGFsbG93IHRoZSB1
cGNvbWluZyBhY3Rpb24gdG8gYmUgInVuZG9uZSIsIHNpbmNlCiAgICAgLy8gd2Ugd2FudCBzb21l
IG9iamVjdCBpbiB0aGUgcmFkaW8gZ3JvdXAgdG8gYWN0dWFsbHkgZ2V0IHNlbGVjdGVkLgogCi0g
ICAgc3RhdGUuY2hlY2tlZCA9IGVsZW1lbnQoKS0+Y2hlY2tlZCgpOwotICAgIHN0YXRlLmNoZWNr
ZWRSYWRpb0J1dHRvbiA9IGVsZW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9uRm9yR3JvdXAoKTsK
KyAgICBzdGF0ZS5jaGVja2VkID0gZWxlbWVudCgpLmNoZWNrZWQoKTsKKyAgICBzdGF0ZS5jaGVj
a2VkUmFkaW9CdXR0b24gPSBlbGVtZW50KCkuY2hlY2tlZFJhZGlvQnV0dG9uRm9yR3JvdXAoKTsK
IAotICAgIGVsZW1lbnQoKS0+c2V0Q2hlY2tlZCh0cnVlLCBEaXNwYXRjaENoYW5nZUV2ZW50KTsK
KyAgICBlbGVtZW50KCkuc2V0Q2hlY2tlZCh0cnVlLCBEaXNwYXRjaENoYW5nZUV2ZW50KTsKIH0K
IAogdm9pZCBSYWRpb0lucHV0VHlwZTo6ZGlkRGlzcGF0Y2hDbGljayhFdmVudCYgZXZlbnQsIGNv
bnN0IElucHV0RWxlbWVudENsaWNrU3RhdGUmIHN0YXRlKQpAQCAtMTY2LDggKzE2MCw3IEBAIHZv
aWQgUmFkaW9JbnB1dFR5cGU6OmRpZERpc3BhdGNoQ2xpY2soRXZlbnQmIGV2ZW50LCBjb25zdCBJ
bnB1dEVsZW1lbnRDbGlja1N0YXRlCiAgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHNl
bGVjdGVkIHJhZGlvIGJ1dHRvbiBpZiBwb3NzaWJsZS4KICAgICAgICAgLy8gTWFrZSBzdXJlIGl0
IGlzIHN0aWxsIGEgcmFkaW8gYnV0dG9uIGFuZCBvbmx5IGRvIHRoZSByZXN0b3JhdGlvbiBpZiBp
dCBzdGlsbCBiZWxvbmdzIHRvIG91ciBncm91cC4KICAgICAgICAgYXV0byYgYnV0dG9uID0gc3Rh
dGUuY2hlY2tlZFJhZGlvQnV0dG9uOwotICAgICAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICAg
ICAgaWYgKGJ1dHRvbiAmJiBidXR0b24tPmlzUmFkaW9CdXR0b24oKSAmJiBidXR0b24tPmZvcm0o
KSA9PSBlbGVtZW50KCktPmZvcm0oKSAmJiBidXR0b24tPm5hbWUoKSA9PSBlbGVtZW50KCktPm5h
bWUoKSkKKyAgICAgICAgaWYgKGJ1dHRvbiAmJiBidXR0b24tPmlzUmFkaW9CdXR0b24oKSAmJiBi
dXR0b24tPmZvcm0oKSA9PSBlbGVtZW50KCkuZm9ybSgpICYmIGJ1dHRvbi0+bmFtZSgpID09IGVs
ZW1lbnQoKS5uYW1lKCkpCiAgICAgICAgICAgICBidXR0b24tPnNldENoZWNrZWQodHJ1ZSk7CiAg
ICAgfQogCkBAIC0xODIsOCArMTc1LDcgQEAgYm9vbCBSYWRpb0lucHV0VHlwZTo6aXNSYWRpb0J1
dHRvbigpIGNvbnN0CiAKIGJvb2wgUmFkaW9JbnB1dFR5cGU6Om1hdGNoZXNJbmRldGVybWluYXRl
UHNldWRvQ2xhc3MoKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGNvbnN0
IEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQgPSAqdGhpcy0+ZWxlbWVudCgpOworICAgIGNvbnN0
IEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCk7CiAgICAgaWYgKGNv
bnN0IFJhZGlvQnV0dG9uR3JvdXBzKiByYWRpb0J1dHRvbkdyb3VwcyA9IGVsZW1lbnQucmFkaW9C
dXR0b25Hcm91cHMoKSkKICAgICAgICAgcmV0dXJuICFyYWRpb0J1dHRvbkdyb3Vwcy0+aGFzQ2hl
Y2tlZEJ1dHRvbigmZWxlbWVudCk7CiAgICAgcmV0dXJuICFlbGVtZW50LmNoZWNrZWQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAKaW5kZXggMjc1OTU1ODY4MDFmNmM3NzYy
YzA5ODNhZjk5OWU3MDAyZTlkMWEwZi4uZDNhMGExNzI2ZmI4MDZjNDY0MzkzYmVkY2RhODExMTUw
NjFjNDRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAKQEAgLTkyLDE0
ICs5MiwxMiBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFJhbmdlSW5wdXRUeXBlOjpmb3JtQ29udHJv
bFR5cGUoKSBjb25zdAogCiBkb3VibGUgUmFuZ2VJbnB1dFR5cGU6OnZhbHVlQXNEb3VibGUoKSBj
b25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBwYXJzZVRvRG91Ymxl
Rm9yTnVtYmVyVHlwZShlbGVtZW50KCktPnZhbHVlKCkpOworICAgIHJldHVybiBwYXJzZVRvRG91
YmxlRm9yTnVtYmVyVHlwZShlbGVtZW50KCkudmFsdWUoKSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZv
aWQ+IFJhbmdlSW5wdXRUeXBlOjpzZXRWYWx1ZUFzRGVjaW1hbChjb25zdCBEZWNpbWFsJiBuZXdW
YWx1ZSwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKSBjb25zdAogewotICAg
IEFTU0VSVChlbGVtZW50KCkpOwotICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUoc2VyaWFsaXplKG5l
d1ZhbHVlKSwgZXZlbnRCZWhhdmlvcik7CisgICAgZWxlbWVudCgpLnNldFZhbHVlKHNlcmlhbGl6
ZShuZXdWYWx1ZSksIGV2ZW50QmVoYXZpb3IpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTEx
NywxNyArMTE1LDE2IEBAIFN0ZXBSYW5nZSBSYW5nZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdl
KEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbmcpIGNvbnN0CiB7CiAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0ZXBSYW5nZTo6U3RlcERlc2NyaXB0aW9uPiBzdGVwRGVzY3Jp
cHRpb24ocmFuZ2VEZWZhdWx0U3RlcCwgcmFuZ2VEZWZhdWx0U3RlcEJhc2UsIHJhbmdlU3RlcFNj
YWxlRmFjdG9yKTsKIAotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGNvbnN0IERlY2ltYWwg
bWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKG1pbkF0dHIpLCByYW5nZURlZmF1bHRNaW5pbXVtKTsKLSAgICBjb25zdCBEZWNp
bWFsIG1heGltdW0gPSBlbnN1cmVNYXhpbXVtKHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5hdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1heEF0dHIpLCByYW5nZURlZmF1bHRNYXhpbXVt
KSwgbWluaW11bSwgcmFuZ2VEZWZhdWx0TWF4aW11bSk7CisgICAgY29uc3QgRGVjaW1hbCBtaW5p
bXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihtaW5BdHRyKSwgcmFuZ2VEZWZhdWx0TWluaW11bSk7CisgICAgY29uc3QgRGVjaW1hbCBt
YXhpbXVtID0gZW5zdXJlTWF4aW11bShwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKG1heEF0dHIpLCByYW5nZURlZmF1bHRNYXhpbXVtKSwgbWlu
aW11bSwgcmFuZ2VEZWZhdWx0TWF4aW11bSk7CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWNpc2lvblZhbHVlID0gZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KHByZWNpc2lvbkF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlY2lzaW9uVmFsdWUg
PSBlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwcmVjaXNpb25BdHRy
KTsKICAgICBpZiAoIXByZWNpc2lvblZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgIGNvbnN0IERl
Y2ltYWwgc3RlcCA9IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHByZWNpc2lvblZhbHVl
LCAiZmxvYXQiKSA/IERlY2ltYWw6Om5hbigpIDogMTsKICAgICAgICAgcmV0dXJuIFN0ZXBSYW5n
ZShtaW5pbXVtLCBSYW5nZUxpbWl0YXRpb25zOjpWYWxpZCwgbWluaW11bSwgbWF4aW11bSwgc3Rl
cCwgc3RlcERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBT
dGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxl
bWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHN0ZXBBdHRyKSk7CisgICAg
Y29uc3QgRGVjaW1hbCBzdGVwID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5n
LCBzdGVwRGVzY3JpcHRpb24sIGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKHN0ZXBBdHRyKSk7CiAgICAgcmV0dXJuIFN0ZXBSYW5nZShtaW5pbXVtLCBSYW5nZUxpbWl0
YXRpb25zOjpWYWxpZCwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwgc3RlcERlc2NyaXB0aW9uKTsK
IH0KIApAQCAtMTQwLDE1ICsxMzcsMTQgQEAgYm9vbCBSYW5nZUlucHV0VHlwZTo6aXNTdGVwcGFi
bGUoKSBjb25zdAogCiB2b2lkIFJhbmdlSW5wdXRUeXBlOjpoYW5kbGVNb3VzZURvd25FdmVudChN
b3VzZUV2ZW50JiBldmVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAoZWxl
bWVudCgpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKKyAgICBpZiAoZWxlbWVudCgpLmlzRGlz
YWJsZWRGb3JtQ29udHJvbCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoZXZlbnQuYnV0
dG9uKCkgIT0gTGVmdEJ1dHRvbiB8fCAhaXM8Tm9kZT4oZXZlbnQudGFyZ2V0KCkpKQogICAgICAg
ICByZXR1cm47Ci0gICAgQVNTRVJUKGVsZW1lbnQoKS0+c2hhZG93Um9vdCgpKTsKKyAgICBBU1NF
UlQoZWxlbWVudCgpLnNoYWRvd1Jvb3QoKSk7CiAgICAgYXV0byYgdGFyZ2V0Tm9kZSA9IGRvd25j
YXN0PE5vZGU+KCpldmVudC50YXJnZXQoKSk7Ci0gICAgaWYgKCZ0YXJnZXROb2RlICE9IGVsZW1l
bnQoKSAmJiAhdGFyZ2V0Tm9kZS5pc0Rlc2NlbmRhbnRPZihlbGVtZW50KCktPnVzZXJBZ2VudFNo
YWRvd1Jvb3QoKS5nZXQoKSkpCisgICAgaWYgKCZ0YXJnZXROb2RlICE9ICZlbGVtZW50KCkgJiYg
IXRhcmdldE5vZGUuaXNEZXNjZW5kYW50T2YoZWxlbWVudCgpLnVzZXJBZ2VudFNoYWRvd1Jvb3Qo
KS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhdXRvJiB0aHVtYiA9IHR5cGVkU2xpZGVy
VGh1bWJFbGVtZW50KCk7CiAgICAgaWYgKCZ0YXJnZXROb2RlID09ICZ0aHVtYikKQEAgLTE2NCw4
ICsxNjAsNyBAQCB2b2lkIFJhbmdlSW5wdXRUeXBlOjpoYW5kbGVUb3VjaEV2ZW50KFRvdWNoRXZl
bnQmIGV2ZW50KQogI2lmIFBMQVRGT1JNKElPUykKICAgICB0eXBlZFNsaWRlclRodW1iRWxlbWVu
dCgpLmhhbmRsZVRvdWNoRXZlbnQoZXZlbnQpOwogI2VsaWYgRU5BQkxFKFRPVUNIX1NMSURFUikK
LSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAoZWxlbWVudCgpLT5pc0Rpc2FibGVkRm9y
bUNvbnRyb2woKSkKKyAgICBpZiAoZWxlbWVudCgpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS50
b3VjaGVuZEV2ZW50KSB7CkBAIC0xOTgsMTMgKzE5MywxMiBAQCB2b2lkIFJhbmdlSW5wdXRUeXBl
OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCgpCiAKIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OmhhbmRsZUtl
eWRvd25FdmVudChLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgp
KTsKLSAgICBpZiAoZWxlbWVudCgpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKKyAgICBpZiAo
ZWxlbWVudCgpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBjb25zdCBTdHJpbmcmIGtleSA9IGV2ZW50LmtleUlkZW50aWZpZXIoKTsKIAotICAgIGNvbnN0
IERlY2ltYWwgY3VycmVudCA9IHBhcnNlVG9OdW1iZXJPck5hTihlbGVtZW50KCktPnZhbHVlKCkp
OworICAgIGNvbnN0IERlY2ltYWwgY3VycmVudCA9IHBhcnNlVG9OdW1iZXJPck5hTihlbGVtZW50
KCkudmFsdWUoKSk7CiAgICAgQVNTRVJUKGN1cnJlbnQuaXNGaW5pdGUoKSk7CiAKICAgICBTdGVw
UmFuZ2Ugc3RlcFJhbmdlKGNyZWF0ZVN0ZXBSYW5nZShSZWplY3RBbnkpKTsKQEAgLTIxMiwxMSAr
MjA2LDExIEBAIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2Fy
ZEV2ZW50JiBldmVudCkKIAogICAgIC8vIEZJWE1FOiBXZSBjYW4ndCB1c2Ugc3RlcFVwKCkgZm9y
IHRoZSBzdGVwIHZhbHVlICJhbnkiLiBTbywgd2UgaW5jcmVhc2UKICAgICAvLyBvciBkZWNyZWFz
ZSB0aGUgdmFsdWUgYnkgMS8xMDAgb2YgdGhlIHZhbHVlIHJhbmdlLiBJcyBpdCByZWFzb25hYmxl
PwotICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzdGVwQXR0ciksICJh
bnkiKSA/IChzdGVwUmFuZ2UubWF4aW11bSgpIC0gc3RlcFJhbmdlLm1pbmltdW0oKSkgLyAxMDAg
OiBzdGVwUmFuZ2Uuc3RlcCgpOworICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKHN0ZXBBdHRyKSwgImFueSIpID8gKHN0ZXBSYW5nZS5tYXhpbXVtKCkgLSBzdGVwUmFuZ2Uu
bWluaW11bSgpKSAvIDEwMCA6IHN0ZXBSYW5nZS5zdGVwKCk7CiAgICAgY29uc3QgRGVjaW1hbCBi
aWdTdGVwID0gc3RkOjptYXgoKHN0ZXBSYW5nZS5tYXhpbXVtKCkgLSBzdGVwUmFuZ2UubWluaW11
bSgpKSAvIDEwLCBzdGVwKTsKIAogICAgIGJvb2wgaXNWZXJ0aWNhbCA9IGZhbHNlOwotICAgIGlm
IChhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQoKS0+cmVuZGVyZXIoKSkgeworICAgIGlmIChhdXRv
KiByZW5kZXJlciA9IGVsZW1lbnQoKS5yZW5kZXJlcigpKSB7CiAgICAgICAgIENvbnRyb2xQYXJ0
IHBhcnQgPSByZW5kZXJlci0+c3R5bGUoKS5hcHBlYXJhbmNlKCk7CiAgICAgICAgIGlzVmVydGlj
YWwgPSBwYXJ0ID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xp
ZGVyUGFydDsKICAgICB9CkBAIC0yNDcsOCArMjQxLDggQEAgdm9pZCBSYW5nZUlucHV0VHlwZTo6
aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQogICAgICAgICBFdmVudFF1
ZXVlU2NvcGUgc2NvcGU7CiAgICAgICAgIHNldFZhbHVlQXNEZWNpbWFsKG5ld1ZhbHVlLCBEaXNw
YXRjaElucHV0QW5kQ2hhbmdlRXZlbnQpOwogCi0gICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBj
YWNoZSA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKLSAg
ICAgICAgICAgIGNhY2hlLT5wb3N0Tm90aWZpY2F0aW9uKGVsZW1lbnQoKSwgQVhPYmplY3RDYWNo
ZTo6QVhWYWx1ZUNoYW5nZWQpOworICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBl
bGVtZW50KCkuZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKKyAgICAgICAgICAg
IGNhY2hlLT5wb3N0Tm90aWZpY2F0aW9uKGVsZW1lbnRQdHIoKSwgQVhPYmplY3RDYWNoZTo6QVhW
YWx1ZUNoYW5nZWQpOwogICAgIH0KIAogICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CkBA
IC0yNTYsMjcgKzI1MCwyNSBAQCB2b2lkIFJhbmdlSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZl
bnQoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiAKIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OmNyZWF0ZVNo
YWRvd1N1YnRyZWUoKQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIEFTU0VSVChlbGVt
ZW50KCktPnVzZXJBZ2VudFNoYWRvd1Jvb3QoKSk7CisgICAgQVNTRVJUKGVsZW1lbnQoKS51c2Vy
QWdlbnRTaGFkb3dSb290KCkpOwogCi0gICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZWxlbWVudCgp
LT5kb2N1bWVudCgpOworICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQoKS5kb2N1bWVu
dCgpOwogICAgIGF1dG8gdHJhY2sgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsK
ICAgICB0cmFjay0+c2V0UHNldWRvKEF0b21pY1N0cmluZygiLXdlYmtpdC1zbGlkZXItcnVubmFi
bGUtdHJhY2siLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAgICAgdHJh
Y2stPmFwcGVuZENoaWxkKFNsaWRlclRodW1iRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KSk7CiAg
ICAgYXV0byBjb250YWluZXIgPSBTbGlkZXJDb250YWluZXJFbGVtZW50OjpjcmVhdGUoZG9jdW1l
bnQpOwogICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQodHJhY2spOwotICAgIGVsZW1lbnQoKS0+
dXNlckFnZW50U2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZChjb250YWluZXIpOworICAgIGVsZW1l
bnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CiB9CiAK
IEhUTUxFbGVtZW50KiBSYW5nZUlucHV0VHlwZTo6c2xpZGVyVHJhY2tFbGVtZW50KCkgY29uc3QK
IHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBBU1NFUlQoZWxlbWVudCgpLT51c2VyQWdl
bnRTaGFkb3dSb290KCkpOwotICAgIEFTU0VSVChlbGVtZW50KCktPnVzZXJBZ2VudFNoYWRvd1Jv
b3QoKS0+Zmlyc3RDaGlsZCgpKTsgLy8gY29udGFpbmVyCi0gICAgQVNTRVJUKGVsZW1lbnQoKS0+
dXNlckFnZW50U2hhZG93Um9vdCgpLT5maXJzdENoaWxkKCktPmlzSFRNTEVsZW1lbnQoKSk7Ci0g
ICAgQVNTRVJUKGVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93Um9vdCgpLT5maXJzdENoaWxkKCkt
PmZpcnN0Q2hpbGQoKSk7IC8vIHRyYWNrCisgICAgQVNTRVJUKGVsZW1lbnQoKS51c2VyQWdlbnRT
aGFkb3dSb290KCkpOworICAgIEFTU0VSVChlbGVtZW50KCkudXNlckFnZW50U2hhZG93Um9vdCgp
LT5maXJzdENoaWxkKCkpOyAvLyBjb250YWluZXIKKyAgICBBU1NFUlQoZWxlbWVudCgpLnVzZXJB
Z2VudFNoYWRvd1Jvb3QoKS0+Zmlyc3RDaGlsZCgpLT5pc0hUTUxFbGVtZW50KCkpOworICAgIEFT
U0VSVChlbGVtZW50KCkudXNlckFnZW50U2hhZG93Um9vdCgpLT5maXJzdENoaWxkKCktPmZpcnN0
Q2hpbGQoKSk7IC8vIHRyYWNrCiAKLSAgICBSZWZQdHI8U2hhZG93Um9vdD4gcm9vdCA9IGVsZW1l
bnQoKS0+dXNlckFnZW50U2hhZG93Um9vdCgpOworICAgIFJlZlB0cjxTaGFkb3dSb290PiByb290
ID0gZWxlbWVudCgpLnVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKICAgICBpZiAoIXJvb3QpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIApAQCAtMzAyLDggKzI5NCw3IEBAIEhUTUxFbGVtZW50
KiBSYW5nZUlucHV0VHlwZTo6c2xpZGVyVGh1bWJFbGVtZW50KCkgY29uc3QKIAogUmVuZGVyUHRy
PFJlbmRlckVsZW1lbnQ+IFJhbmdlSW5wdXRUeXBlOjpjcmVhdGVJbnB1dFJlbmRlcmVyKFJlbmRl
clN0eWxlJiYgc3R5bGUpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGNy
ZWF0ZVJlbmRlcmVyPFJlbmRlclNsaWRlcj4oKmVsZW1lbnQoKSwgV1RGTW92ZShzdHlsZSkpOwor
ICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTbGlkZXI+KGVsZW1lbnQoKSwgV1RGTW92
ZShzdHlsZSkpOwogfQogCiBEZWNpbWFsIFJhbmdlSW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKGNv
bnN0IFN0cmluZyYgc3JjLCBjb25zdCBEZWNpbWFsJiBkZWZhdWx0VmFsdWUpIGNvbnN0CkBAIC0z
MjMsOCArMzE0LDcgQEAgdm9pZCBSYW5nZUlucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKGJvb2wg
c2VuZE1vdXNlRXZlbnRzKQogewogICAgIElucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKHNlbmRN
b3VzZUV2ZW50cyk7CiAKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBlbGVtZW50KCktPmRp
c3BhdGNoU2ltdWxhdGVkQ2xpY2soMCwgc2VuZE1vdXNlRXZlbnRzID8gU2VuZE1vdXNlVXBEb3du
RXZlbnRzIDogU2VuZE5vRXZlbnRzKTsKKyAgICBlbGVtZW50KCkuZGlzcGF0Y2hTaW11bGF0ZWRD
bGljaygwLCBzZW5kTW91c2VFdmVudHMgPyBTZW5kTW91c2VVcERvd25FdmVudHMgOiBTZW5kTm9F
dmVudHMpOwogfQogCiB2b2lkIFJhbmdlSW5wdXRUeXBlOjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUpCkBAIC0zMzIsNyArMzIyLDcgQEAgdm9pZCBSYW5nZUlucHV0
VHlwZTo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQogICAgIC8v
IEZJWE1FOiBEb24ndCB3ZSBuZWVkIHRvIGRvIHRoaXMgd29yayBmb3IgcHJlY2lzaW9uQXR0ciB0
b28/CiAgICAgaWYgKG5hbWUgPT0gbWF4QXR0ciB8fCBuYW1lID09IG1pbkF0dHIpIHsKICAgICAg
ICAgLy8gU2FuaXRpemUgdGhlIHZhbHVlLgotICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHRo
aXMtPmVsZW1lbnQoKSkgeworICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHRoaXMtPmVsZW1l
bnRQdHIoKSkgewogICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0RpcnR5VmFsdWUoKSkKICAg
ICAgICAgICAgICAgICBlbGVtZW50LT5zZXRWYWx1ZShlbGVtZW50LT52YWx1ZSgpKTsKICAgICAg
ICAgfQpAQCAtMzQ4LDEwICszMzgsOCBAQCB2b2lkIFJhbmdlSW5wdXRUeXBlOjpzZXRWYWx1ZShj
b25zdCBTdHJpbmcmIHZhbHVlLCBib29sIHZhbHVlQ2hhbmdlZCwgVGV4dEZpZWxkRQogICAgIGlm
ICghdmFsdWVDaGFuZ2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZXZlbnRCZWhhdmlv
ciA9PSBEaXNwYXRjaE5vRXZlbnQpIHsKLSAgICAgICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAg
ICAgIGVsZW1lbnQoKS0+c2V0VGV4dEFzT2ZMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCh2YWx1
ZSk7Ci0gICAgfQorICAgIGlmIChldmVudEJlaGF2aW9yID09IERpc3BhdGNoTm9FdmVudCkKKyAg
ICAgICAgZWxlbWVudCgpLnNldFRleHRBc09mTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQodmFs
dWUpOwogCiAgICAgdHlwZWRTbGlkZXJUaHVtYkVsZW1lbnQoKS5zZXRQb3NpdGlvbkZyb21WYWx1
ZSgpOwogfQpAQCAtMzg4LDggKzM3Niw3IEBAIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OnVwZGF0ZVRp
Y2tNYXJrVmFsdWVzKCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fdGlja01hcmtWYWx1ZXMuY2xl
YXIoKTsKICAgICBtX3RpY2tNYXJrVmFsdWVzRGlydHkgPSBmYWxzZTsKLSAgICBBU1NFUlQoZWxl
bWVudCgpKTsKLSAgICBhdXRvIGRhdGFMaXN0ID0gZWxlbWVudCgpLT5kYXRhTGlzdCgpOworICAg
IGF1dG8gZGF0YUxpc3QgPSBlbGVtZW50KCkuZGF0YUxpc3QoKTsKICAgICBpZiAoIWRhdGFMaXN0
KQogICAgICAgICByZXR1cm47CiAgICAgUmVmPEhUTUxDb2xsZWN0aW9uPiBvcHRpb25zID0gZGF0
YUxpc3QtPm9wdGlvbnMoKTsKQEAgLTM5OCw3ICszODUsNyBAQCB2b2lkIFJhbmdlSW5wdXRUeXBl
Ojp1cGRhdGVUaWNrTWFya1ZhbHVlcygpCiAgICAgICAgIFJlZlB0cjxOb2RlPiBub2RlID0gb3B0
aW9ucy0+aXRlbShpKTsKICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlvbkVsZW1lbnQg
PSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKm5vZGUpOwogICAgICAgICBTdHJpbmcgb3B0
aW9uVmFsdWUgPSBvcHRpb25FbGVtZW50LnZhbHVlKCk7Ci0gICAgICAgIGlmICghZWxlbWVudCgp
LT5pc1ZhbGlkVmFsdWUob3B0aW9uVmFsdWUpKQorICAgICAgICBpZiAoIWVsZW1lbnQoKS5pc1Zh
bGlkVmFsdWUob3B0aW9uVmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG1f
dGlja01hcmtWYWx1ZXMuYXBwZW5kKHBhcnNlVG9OdW1iZXIob3B0aW9uVmFsdWUsIERlY2ltYWw6
Om5hbigpKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9SZXNldElu
cHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1Jlc2V0SW5wdXRUeXBlLmNwcAppbmRl
eCA0MDVjYjJjYzU5NGEzZDMzMTE0NmE4NTVkYmZhMTk1YjNhYjcwOTE1Li4wMTZmZTEwNGJiMjZk
MzIzZGNjNGJiMzQ1NzY4MTMwOGE5N2MwOGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1Jlc2V0SW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1Jlc2V0SW5w
dXRUeXBlLmNwcApAQCAtNTIsMTAgKzUyLDkgQEAgYm9vbCBSZXNldElucHV0VHlwZTo6c3VwcG9y
dHNWYWxpZGF0aW9uKCkgY29uc3QKIAogdm9pZCBSZXNldElucHV0VHlwZTo6aGFuZGxlRE9NQWN0
aXZhdGVFdmVudChFdmVudCYgZXZlbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAg
aWYgKGVsZW1lbnQoKS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkgfHwgIWVsZW1lbnQoKS0+Zm9y
bSgpKQorICAgIGlmIChlbGVtZW50KCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgfHwgIWVsZW1l
bnQoKS5mb3JtKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbGVtZW50KCktPmZvcm0oKS0+cmVz
ZXQoKTsKKyAgICBlbGVtZW50KCkuZm9ybSgpLT5yZXNldCgpOwogICAgIGV2ZW50LnNldERlZmF1
bHRIYW5kbGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNo
SW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmNwcApp
bmRleCA3MTI0MzkxYTMwNjNlZTVhMjYyOGU0NmQzZmNhYzg1YzYxNjhhZWVlLi5lODI5NWIzMTZl
MzhmZWM1OGMyODc4OWE4ZmY0ZGY1Zjk3Mjg1YjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL1NlYXJjaElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9TZWFy
Y2hJbnB1dFR5cGUuY3BwCkBAIC01Niw5ICs1Niw4IEBAIHZvaWQgU2VhcmNoSW5wdXRUeXBlOjph
ZGRTZWFyY2hSZXN1bHQoKQogICAgIC8vIE5vcm1hbGx5IHdlJ3ZlIGdvdCB0aGUgY29ycmVjdCBy
ZW5kZXJlciBieSB0aGUgdGltZSB3ZSBnZXQgaGVyZS4gSG93ZXZlciB3aGVuIHRoZSBpbnB1dCB0
eXBlIGNoYW5nZXMKICAgICAvLyB3ZSBkb24ndCB1cGRhdGUgdGhlIGFzc29jaWF0ZWQgcmVuZGVy
ZXJzIHVudGlsIGFmdGVyIHRoZSBuZXh0IHRyZWUgdXBkYXRlLCBzbyB3ZSBjb3VsZCBhY3R1YWxs
eSBlbmQgdXAgaGVyZQogICAgIC8vIHdpdGggYSBtaXNtYXRjaGVkIHJlbmRlcmVyIChlLmcuIHRo
cm91Z2ggZm9ybSBzdWJtaXNzaW9uKS4KLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAo
aXM8UmVuZGVyU2VhcmNoRmllbGQ+KGVsZW1lbnQoKS0+cmVuZGVyZXIoKSkpCi0gICAgICAgIGRv
d25jYXN0PFJlbmRlclNlYXJjaEZpZWxkPigqZWxlbWVudCgpLT5yZW5kZXJlcigpKS5hZGRTZWFy
Y2hSZXN1bHQoKTsKKyAgICBpZiAoaXM8UmVuZGVyU2VhcmNoRmllbGQ+KGVsZW1lbnQoKS5yZW5k
ZXJlcigpKSkKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyU2VhcmNoRmllbGQ+KCplbGVtZW50KCku
cmVuZGVyZXIoKSkuYWRkU2VhcmNoUmVzdWx0KCk7CiAjZW5kaWYKIH0KIApAQCAtNzYsNyArNzUs
NyBAQCB2b2lkIFNlYXJjaElucHV0VHlwZTo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lKQogewogICAgIGlmIChuYW1lID09IHJlc3VsdHNBdHRyKSB7CiAgICAgICAg
IGlmIChtX3Jlc3VsdHNCdXR0b24pIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0g
dGhpcy0+ZWxlbWVudCgpKQorICAgICAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5l
bGVtZW50UHRyKCkpCiAgICAgICAgICAgICAgICAgdXBkYXRlUmVzdWx0QnV0dG9uUHNldWRvVHlw
ZSgqbV9yZXN1bHRzQnV0dG9uLCBlbGVtZW50LT5tYXhSZXN1bHRzKCkpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtODUsOCArODQsNyBAQCB2b2lkIFNlYXJjaElucHV0VHlwZTo6YXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQogCiBSZW5kZXJQdHI8UmVuZGVyRWxlbWVu
dD4gU2VhcmNoSW5wdXRUeXBlOjpjcmVhdGVJbnB1dFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5
bGUpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVy
PFJlbmRlclNlYXJjaEZpZWxkPigqZWxlbWVudCgpLCBXVEZNb3ZlKHN0eWxlKSk7CisgICAgcmV0
dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNlYXJjaEZpZWxkPihlbGVtZW50KCksIFdURk1vdmUo
c3R5bGUpKTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBTZWFyY2hJbnB1dFR5cGU6OmZvcm1D
b250cm9sVHlwZSgpIGNvbnN0CkBAIC0xMTUsMTIgKzExMywxMSBAQCB2b2lkIFNlYXJjaElucHV0
VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgpCiAgICAgQVNTRVJUKGNvbnRhaW5lcik7CiAgICAg
QVNTRVJUKHRleHRXcmFwcGVyKTsKIAotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIG1fcmVz
dWx0c0J1dHRvbiA9IFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZShlbGVt
ZW50KCktPmRvY3VtZW50KCkpOwotICAgIHVwZGF0ZVJlc3VsdEJ1dHRvblBzZXVkb1R5cGUoKm1f
cmVzdWx0c0J1dHRvbiwgZWxlbWVudCgpLT5tYXhSZXN1bHRzKCkpOworICAgIG1fcmVzdWx0c0J1
dHRvbiA9IFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZShlbGVtZW50KCku
ZG9jdW1lbnQoKSk7CisgICAgdXBkYXRlUmVzdWx0QnV0dG9uUHNldWRvVHlwZSgqbV9yZXN1bHRz
QnV0dG9uLCBlbGVtZW50KCkubWF4UmVzdWx0cygpKTsKICAgICBjb250YWluZXItPmluc2VydEJl
Zm9yZSgqbV9yZXN1bHRzQnV0dG9uLCB0ZXh0V3JhcHBlci5nZXQoKSk7CiAKLSAgICBtX2NhbmNl
bEJ1dHRvbiA9IFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDo6Y3JlYXRlKGVsZW1lbnQo
KS0+ZG9jdW1lbnQoKSk7CisgICAgbV9jYW5jZWxCdXR0b24gPSBTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbkVsZW1lbnQ6OmNyZWF0ZShlbGVtZW50KCkuZG9jdW1lbnQoKSk7CiAgICAgY29udGFpbmVy
LT5pbnNlcnRCZWZvcmUoKm1fY2FuY2VsQnV0dG9uLCB0ZXh0V3JhcHBlci0+bmV4dFNpYmxpbmco
KSk7CiB9CiAKQEAgLTEzNiwxNSArMTMzLDE0IEBAIEhUTUxFbGVtZW50KiBTZWFyY2hJbnB1dFR5
cGU6OmNhbmNlbEJ1dHRvbkVsZW1lbnQoKSBjb25zdAogCiB2b2lkIFNlYXJjaElucHV0VHlwZTo6
aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQogewotICAgIEFTU0VSVChl
bGVtZW50KCkpOwotICAgIGlmIChlbGVtZW50KCktPmlzRGlzYWJsZWRPclJlYWRPbmx5KCkpIHsK
KyAgICBpZiAoZWxlbWVudCgpLmlzRGlzYWJsZWRPclJlYWRPbmx5KCkpIHsKICAgICAgICAgVGV4
dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQoZXZlbnQpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgY29uc3QgU3RyaW5nJiBrZXkgPSBldmVudC5rZXlJZGVudGlmaWVy
KCk7CiAgICAgaWYgKGtleSA9PSAiVSswMDFCIikgewotICAgICAgICBSZWY8SFRNTElucHV0RWxl
bWVudD4gcHJvdGVjdGVkSW5wdXRFbGVtZW50KCplbGVtZW50KCkpOworICAgICAgICBSZWY8SFRN
TElucHV0RWxlbWVudD4gcHJvdGVjdGVkSW5wdXRFbGVtZW50KGVsZW1lbnQoKSk7CiAgICAgICAg
IHByb3RlY3RlZElucHV0RWxlbWVudC0+c2V0VmFsdWVGb3JVc2VyKGVtcHR5U3RyaW5nKCkpOwog
ICAgICAgICBwcm90ZWN0ZWRJbnB1dEVsZW1lbnQtPm9uU2VhcmNoKCk7CiAgICAgICAgIGV2ZW50
LnNldERlZmF1bHRIYW5kbGVkKCk7CkBAIC0xNjIsOSArMTU4LDggQEAgdm9pZCBTZWFyY2hJbnB1
dFR5cGU6OmRlc3Ryb3lTaGFkb3dTdWJ0cmVlKCkKIAogdm9pZCBTZWFyY2hJbnB1dFR5cGU6OnN0
YXJ0U2VhcmNoRXZlbnRUaW1lcigpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgQVNT
RVJUKGVsZW1lbnQoKS0+cmVuZGVyZXIoKSk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gZWxlbWVu
dCgpLT5pbm5lclRleHRWYWx1ZSgpLmxlbmd0aCgpOworICAgIEFTU0VSVChlbGVtZW50KCkucmVu
ZGVyZXIoKSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZWxlbWVudCgpLmlubmVyVGV4dFZhbHVl
KCkubGVuZ3RoKCk7CiAKICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgICBtX3NlYXJjaEV2ZW50
VGltZXIuc3RhcnRPbmVTaG90KDBfbXMpOwpAQCAtMTgzLDIxICsxNzgsMTggQEAgdm9pZCBTZWFy
Y2hJbnB1dFR5cGU6OnN0b3BTZWFyY2hFdmVudFRpbWVyKCkKIAogdm9pZCBTZWFyY2hJbnB1dFR5
cGU6OnNlYXJjaEV2ZW50VGltZXJGaXJlZCgpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0g
ICAgZWxlbWVudCgpLT5vblNlYXJjaCgpOworICAgIGVsZW1lbnQoKS5vblNlYXJjaCgpOwogfQog
CiBib29sIFNlYXJjaElucHV0VHlwZTo6c2VhcmNoRXZlbnRzU2hvdWxkQmVEaXNwYXRjaGVkKCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5o
YXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGluY3JlbWVudGFsQXR0cik7CisgICAg
cmV0dXJuIGVsZW1lbnQoKS5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGluY3Jl
bWVudGFsQXR0cik7CiB9CiAKIHZvaWQgU2VhcmNoSW5wdXRUeXBlOjpkaWRTZXRWYWx1ZUJ5VXNl
ckVkaXQoKQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGlmIChtX2NhbmNlbEJ1dHRv
biAmJiBpczxSZW5kZXJTZWFyY2hGaWVsZD4oZWxlbWVudCgpLT5yZW5kZXJlcigpKSkKLSAgICAg
ICAgZG93bmNhc3Q8UmVuZGVyU2VhcmNoRmllbGQ+KCplbGVtZW50KCktPnJlbmRlcmVyKCkpLnVw
ZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoKTsKKyAgICBpZiAobV9jYW5jZWxCdXR0b24gJiYg
aXM8UmVuZGVyU2VhcmNoRmllbGQ+KGVsZW1lbnQoKS5yZW5kZXJlcigpKSkKKyAgICAgICAgZG93
bmNhc3Q8UmVuZGVyU2VhcmNoRmllbGQ+KCplbGVtZW50KCkucmVuZGVyZXIoKSkudXBkYXRlQ2Fu
Y2VsQnV0dG9uVmlzaWJpbGl0eSgpOwogICAgIC8vIElmIHRoZSBpbmNyZW1lbnRhbCBhdHRyaWJ1
dGUgaXMgc2V0LCB0aGVuIGRpc3BhdGNoIHRoZSBzZWFyY2ggZXZlbnQKICAgICBpZiAoc2VhcmNo
RXZlbnRzU2hvdWxkQmVEaXNwYXRjaGVkKCkpCiAgICAgICAgIHN0YXJ0U2VhcmNoRXZlbnRUaW1l
cigpOwpAQCAtMjA3LDggKzE5OSw3IEBAIHZvaWQgU2VhcmNoSW5wdXRUeXBlOjpkaWRTZXRWYWx1
ZUJ5VXNlckVkaXQoKQogCiBib29sIFNlYXJjaElucHV0VHlwZTo6c2l6ZVNob3VsZEluY2x1ZGVE
ZWNvcmF0aW9uKGludCwgaW50JiBwcmVmZXJyZWRTaXplKSBjb25zdAogewotICAgIEFTU0VSVChl
bGVtZW50KCkpOwotICAgIHByZWZlcnJlZFNpemUgPSBlbGVtZW50KCktPnNpemUoKTsKKyAgICBw
cmVmZXJyZWRTaXplID0gZWxlbWVudCgpLnNpemUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9TdWJtaXRJbnB1dFR5cGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9TdWJtaXRJbnB1dFR5cGUuY3BwCmluZGV4IDFiMWVhMDgwZTM4MDdh
YzY1NDJjNWNhMjQ5MTg0NWNjMGM3NTNjOWMuLjNlNWFhYzA4ODA1NmZkNmI5NGQzZTcwYTlmZmZm
MTc5N2Y2Mzg4ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvU3VibWl0SW5wdXRU
eXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1N1Ym1pdElucHV0VHlwZS5jcHAKQEAg
LTQ4LDEwICs0OCw5IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU3VibWl0SW5wdXRUeXBlOjpmb3Jt
Q29udHJvbFR5cGUoKSBjb25zdAogCiBib29sIFN1Ym1pdElucHV0VHlwZTo6YXBwZW5kRm9ybURh
dGEoRE9NRm9ybURhdGEmIGZvcm1EYXRhLCBib29sKSBjb25zdAogewotICAgIEFTU0VSVChlbGVt
ZW50KCkpOwotICAgIGlmICghZWxlbWVudCgpLT5pc0FjdGl2YXRlZFN1Ym1pdCgpKQorICAgIGlm
ICghZWxlbWVudCgpLmlzQWN0aXZhdGVkU3VibWl0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBmb3JtRGF0YS5hcHBlbmQoZWxlbWVudCgpLT5uYW1lKCksIGVsZW1lbnQoKS0+dmFsdWVX
aXRoRGVmYXVsdCgpKTsKKyAgICBmb3JtRGF0YS5hcHBlbmQoZWxlbWVudCgpLm5hbWUoKSwgZWxl
bWVudCgpLnZhbHVlV2l0aERlZmF1bHQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTYy
LDggKzYxLDcgQEAgYm9vbCBTdWJtaXRJbnB1dFR5cGU6OnN1cHBvcnRzUmVxdWlyZWQoKSBjb25z
dAogCiB2b2lkIFN1Ym1pdElucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCYg
ZXZlbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgUmVmPEhUTUxJbnB1dEVsZW1l
bnQ+IHByb3RlY3RlZEVsZW1lbnQoKmVsZW1lbnQoKSk7CisgICAgUmVmPEhUTUxJbnB1dEVsZW1l
bnQ+IHByb3RlY3RlZEVsZW1lbnQoZWxlbWVudCgpKTsKICAgICBpZiAocHJvdGVjdGVkRWxlbWVu
dC0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkgfHwgIXByb3RlY3RlZEVsZW1lbnQtPmZvcm0oKSkK
ICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRG
aWVsZElucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlw
ZS5jcHAKaW5kZXggNmZlZmZmZGI5ZTgxNDRlNzMzNzM0MDI5MGM4NWI5OTVjNjk4NDlmYi4uMTQz
Mzg3ZDEzYmI4NTA1OTJkMTg1NDFmYzk5OGY1MDY1YjU5NjZmYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcApAQCAtODMsMTggKzgzLDE2IEBAIFRleHRGaWVs
ZElucHV0VHlwZTo6flRleHRGaWVsZElucHV0VHlwZSgpCiAKIGJvb2wgVGV4dEZpZWxkSW5wdXRU
eXBlOjppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdAogewotICAgIEFT
U0VSVChlbGVtZW50KCkpOwogI2lmIFBMQVRGT1JNKElPUykKLSAgICBpZiAoZWxlbWVudCgpLT5p
c1JlYWRPbmx5KCkpCisgICAgaWYgKGVsZW1lbnQoKS5pc1JlYWRPbmx5KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICNlbmRpZgotICAgIHJldHVybiBlbGVtZW50KCktPmlzVGV4dEZvcm1Db250
cm9sRm9jdXNhYmxlKCk7CisgICAgcmV0dXJuIGVsZW1lbnQoKS5pc1RleHRGb3JtQ29udHJvbEZv
Y3VzYWJsZSgpOwogfQogCiBib29sIFRleHRGaWVsZElucHV0VHlwZTo6aXNNb3VzZUZvY3VzYWJs
ZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQo
KS0+aXNUZXh0Rm9ybUNvbnRyb2xGb2N1c2FibGUoKTsKKyAgICByZXR1cm4gZWxlbWVudCgpLmlz
VGV4dEZvcm1Db250cm9sRm9jdXNhYmxlKCk7CiB9CiAKIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBl
Ojppc1RleHRGaWVsZCgpIGNvbnN0CkBAIC0xMTYsMTcgKzExNCwxNCBAQCBib29sIFRleHRGaWVs
ZElucHV0VHlwZTo6aXNFbXB0eVZhbHVlKCkgY29uc3QKIAogYm9vbCBUZXh0RmllbGRJbnB1dFR5
cGU6OnZhbHVlTWlzc2luZyhjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewotICAgIEFTU0VS
VChlbGVtZW50KCkpOwotICAgIHJldHVybiBlbGVtZW50KCktPmlzUmVxdWlyZWQoKSAmJiB2YWx1
ZS5pc0VtcHR5KCk7CisgICAgcmV0dXJuIGVsZW1lbnQoKS5pc1JlcXVpcmVkKCkgJiYgdmFsdWUu
aXNFbXB0eSgpOwogfQogCiB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6c2V0VmFsdWUoY29uc3Qg
U3RyaW5nJiBzYW5pdGl6ZWRWYWx1ZSwgYm9vbCB2YWx1ZUNoYW5nZWQsIFRleHRGaWVsZEV2ZW50
QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLQogICAg
IC8vIEdyYWIgdGhpcyBpbnB1dCBlbGVtZW50IHRvIGtlZXAgcmVmZXJlbmNlIGV2ZW4gaWYgSlMg
ZXZlbnQgaGFuZGxlcgogICAgIC8vIGNoYW5nZXMgaW5wdXQgdHlwZS4KLSAgICBSZWY8SFRNTElu
cHV0RWxlbWVudD4gaW5wdXQoKmVsZW1lbnQoKSk7CisgICAgUmVmPEhUTUxJbnB1dEVsZW1lbnQ+
IGlucHV0KGVsZW1lbnQoKSk7CiAKICAgICAvLyBXZSBkb24ndCBhc2sgSW5wdXRUeXBlOjpzZXRW
YWx1ZSB0byBkaXNwYXRjaCBldmVudHMgYmVjYXVzZQogICAgIC8vIFRleHRGaWVsZElucHV0VHlw
ZSBkaXNwYXRjaGVzIGV2ZW50cyBkaWZmZXJlbnQgd2F5IGZyb20gSW5wdXRUeXBlLgpAQCAtMTcy
LDE1ICsxNjcsMTQgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0
cmluZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wgdmFsdWVDaGFuZ2UKICNpZiBFTkFCTEUoREFUQUxJ
U1RfRUxFTUVOVCkKIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVDbGlja0V2ZW50KE1v
dXNlRXZlbnQmKQogewotICAgIGlmIChlbGVtZW50KCktPmZvY3VzZWQoKSAmJiBlbGVtZW50KCkt
Pmxpc3QoKSkKKyAgICBpZiAoZWxlbWVudCgpLmZvY3VzZWQoKSAmJiBlbGVtZW50KCkubGlzdCgp
KQogICAgICAgICBkaXNwbGF5U3VnZ2VzdGlvbnMoRGF0YUxpc3RTdWdnZXN0aW9uQWN0aXZhdGlv
blR5cGU6OkNvbnRyb2xDbGlja2VkKTsKIH0KICNlbmRpZgogCiB2b2lkIFRleHRGaWVsZElucHV0
VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQogewotICAgIEFT
U0VSVChlbGVtZW50KCkpOwotICAgIGlmICghZWxlbWVudCgpLT5mb2N1c2VkKCkpCisgICAgaWYg
KCFlbGVtZW50KCkuZm9jdXNlZCgpKQogICAgICAgICByZXR1cm47CiAjaWYgRU5BQkxFKERBVEFM
SVNUX0VMRU1FTlQpCiAgICAgY29uc3QgU3RyaW5nJiBrZXkgPSBldmVudC5rZXlJZGVudGlmaWVy
KCk7CkBAIC0xODksMTYgKzE4MywxNSBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxl
S2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQogICAgICAgICBldmVudC5zZXREZWZh
dWx0SGFuZGxlZCgpOwogICAgIH0KICNlbmRpZgotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBl
bGVtZW50KCktPmRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+
ZWRpdG9yKCkuZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KGVsZW1lbnQoKSwgJmV2ZW50KSkK
KyAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZWxlbWVudCgpLmRvY3VtZW50KCkuZnJhbWUoKTsK
KyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+ZWRpdG9yKCkuZG9UZXh0RmllbGRDb21tYW5kRnJv
bUV2ZW50KGVsZW1lbnRQdHIoKSwgJmV2ZW50KSkKICAgICAgICAgcmV0dXJuOwogICAgIGV2ZW50
LnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CiAKIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5k
bGVLZXlkb3duRXZlbnRGb3JTcGluQnV0dG9uKEtleWJvYXJkRXZlbnQmIGV2ZW50KQogewotICAg
IEFTU0VSVChlbGVtZW50KCkpOwotICAgIGlmIChlbGVtZW50KCktPmlzRGlzYWJsZWRPclJlYWRP
bmx5KCkpCisgICAgaWYgKGVsZW1lbnQoKS5pc0Rpc2FibGVkT3JSZWFkT25seSgpKQogICAgICAg
ICByZXR1cm47CiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgaWYgKG1fc3VnZ2Vz
dGlvblBpY2tlcikKQEAgLTIyNiwxNiArMjE5LDEzIEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBl
Ojpmb3J3YXJkRXZlbnQoRXZlbnQmIGV2ZW50KQogICAgIGJvb2wgaXNCbHVyRXZlbnQgPSBldmVu
dC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudDsKICAgICBpZiAoaXNGb2N1c0V2ZW50
IHx8IGlzQmx1ckV2ZW50KQogICAgICAgICBjYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsK
LSAgICBpZiAoZXZlbnQuaXNNb3VzZUV2ZW50KCkgfHwgaXNGb2N1c0V2ZW50IHx8IGlzQmx1ckV2
ZW50KSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgICAgICBlbGVtZW50KCktPmZv
cndhcmRFdmVudChldmVudCk7Ci0gICAgfQorICAgIGlmIChldmVudC5pc01vdXNlRXZlbnQoKSB8
fCBpc0ZvY3VzRXZlbnQgfHwgaXNCbHVyRXZlbnQpCisgICAgICAgIGVsZW1lbnQoKS5mb3J3YXJk
RXZlbnQoZXZlbnQpOwogfQogCiB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJs
dXIoKQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGF1dG8qIHJlbmRlcmVyID0gZWxl
bWVudCgpLT5yZW5kZXJlcigpOworICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudCgpLnJlbmRl
cmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTgsMTcg
KzI0OCwxNSBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIoKQogCiB2
b2lkIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlRm9jdXNFdmVudChOb2RlKiBvbGRGb2N1c2Vk
Tm9kZSwgRm9jdXNEaXJlY3Rpb24pCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgQVNT
RVJUX1VOVVNFRChvbGRGb2N1c2VkTm9kZSwgb2xkRm9jdXNlZE5vZGUgIT0gZWxlbWVudCgpKTsK
LSAgICBpZiAoUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5mcmFt
ZSgpKQotICAgICAgICBmcmFtZS0+ZWRpdG9yKCkudGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKGVs
ZW1lbnQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChvbGRGb2N1c2VkTm9kZSwgb2xkRm9jdXNlZE5v
ZGUgIT0gZWxlbWVudFB0cigpKTsKKyAgICBpZiAoUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGVsZW1l
bnQoKS5kb2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAgIGZyYW1lLT5lZGl0b3IoKS50ZXh0Rmll
bGREaWRCZWdpbkVkaXRpbmcoZWxlbWVudFB0cigpKTsKIH0KIAogdm9pZCBUZXh0RmllbGRJbnB1
dFR5cGU6OmhhbmRsZUJsdXJFdmVudCgpCiB7CiAgICAgSW5wdXRUeXBlOjpoYW5kbGVCbHVyRXZl
bnQoKTsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBlbGVtZW50KCktPmVuZEVkaXRpbmco
KTsKKyAgICBlbGVtZW50KCkuZW5kRWRpdGluZygpOwogfQogCiBib29sIFRleHRGaWVsZElucHV0
VHlwZTo6c2hvdWxkU3VibWl0SW1wbGljaXRseShFdmVudCYgZXZlbnQpCkBAIC0yNzksOCArMjY3
LDcgQEAgYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoRXZl
bnQmIGV2ZW50KQogCiBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gVGV4dEZpZWxkSW5wdXRUeXBl
OjpjcmVhdGVJbnB1dFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUpCiB7Ci0gICAgQVNTRVJU
KGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZT4oKmVsZW1lbnQoKSwgV1RGTW92ZShzdHlsZSkpOworICAgIHJldHVybiBjcmVh
dGVSZW5kZXJlcjxSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU+KGVsZW1lbnQoKSwgV1RGTW92
ZShzdHlsZSkpOwogfQogCiBib29sIFRleHRGaWVsZElucHV0VHlwZTo6bmVlZHNDb250YWluZXIo
KSBjb25zdApAQCAtMjkwLDIwICsyNzcsMTcgQEAgYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6Om5l
ZWRzQ29udGFpbmVyKCkgY29uc3QKIAogYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhh
dmVTcGluQnV0dG9uKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1
cm4gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLnNob3VsZEhhdmVTcGluQnV0dG9uKCplbGVtZW50
KCkpOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuc2hvdWxkSGF2ZVNwaW5C
dXR0b24oZWxlbWVudCgpKTsKIH0KIAogYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhh
dmVDYXBzTG9ja0luZGljYXRvcigpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0g
ICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5zaG91bGRIYXZlQ2Fwc0xvY2tJbmRp
Y2F0b3IoKmVsZW1lbnQoKSk7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5z
aG91bGRIYXZlQ2Fwc0xvY2tJbmRpY2F0b3IoZWxlbWVudCgpKTsKIH0KIAogdm9pZCBUZXh0Rmll
bGRJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQogewotICAgIEFTU0VSVChlbGVtZW50
KCkpOwotICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvd1Jvb3QoKSk7CisgICAgQVNTRVJUKGVs
ZW1lbnQoKS5zaGFkb3dSb290KCkpOwogCiAgICAgQVNTRVJUKCFtX2lubmVyVGV4dCk7CiAgICAg
QVNTRVJUKCFtX2lubmVyQmxvY2spOwpAQCAtMzExLDcgKzI5NSw3IEBAIHZvaWQgVGV4dEZpZWxk
SW5wdXRUeXBlOjpjcmVhdGVTaGFkb3dTdWJ0cmVlKCkKICAgICBBU1NFUlQoIW1fY2Fwc0xvY2tJ
bmRpY2F0b3IpOwogICAgIEFTU0VSVCghbV9hdXRvRmlsbEJ1dHRvbik7CiAKLSAgICBEb2N1bWVu
dCYgZG9jdW1lbnQgPSBlbGVtZW50KCktPmRvY3VtZW50KCk7CisgICAgRG9jdW1lbnQmIGRvY3Vt
ZW50ID0gZWxlbWVudCgpLmRvY3VtZW50KCk7CiAgICAgYm9vbCBzaG91bGRIYXZlU3BpbkJ1dHRv
biA9IHRoaXMtPnNob3VsZEhhdmVTcGluQnV0dG9uKCk7CiAgICAgYm9vbCBzaG91bGRIYXZlQ2Fw
c0xvY2tJbmRpY2F0b3IgPSB0aGlzLT5zaG91bGRIYXZlQ2Fwc0xvY2tJbmRpY2F0b3IoKTsKICAg
ICBib29sIGNyZWF0ZXNDb250YWluZXIgPSBzaG91bGRIYXZlU3BpbkJ1dHRvbiB8fCBzaG91bGRI
YXZlQ2Fwc0xvY2tJbmRpY2F0b3IgfHwgbmVlZHNDb250YWluZXIoKTsKQEAgLTMxOSw3ICszMDMs
NyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgpCiAgICAg
bV9pbm5lclRleHQgPSBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVu
dCk7CiAKICAgICBpZiAoIWNyZWF0ZXNDb250YWluZXIpIHsKLSAgICAgICAgZWxlbWVudCgpLT51
c2VyQWdlbnRTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKCptX2lubmVyVGV4dCk7CisgICAgICAg
IGVsZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKCptX2lubmVyVGV4
dCk7CiAgICAgICAgIHVwZGF0ZVBsYWNlaG9sZGVyVGV4dCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMzk4LDcgKzM4Miw3IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpkZXN0cm95
U2hhZG93U3VidHJlZSgpCiB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6YXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQogewogICAgIGlmIChuYW1lID09IHZhbHVlQXR0
ciB8fCBuYW1lID09IHBsYWNlaG9sZGVyQXR0cikgewotICAgICAgICBpZiAoZWxlbWVudCgpKQor
ICAgICAgICBpZiAoZWxlbWVudFB0cigpKQogICAgICAgICAgICAgdXBkYXRlSW5uZXJUZXh0VmFs
dWUoKTsKICAgICB9CiAgICAgSW5wdXRUeXBlOjphdHRyaWJ1dGVDaGFuZ2VkKG5hbWUpOwpAQCAt
NTE3LDEzICs1MDEsMTIgQEAgU3RyaW5nIFRleHRGaWVsZElucHV0VHlwZTo6c2FuaXRpemVWYWx1
ZShjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUpIGNvbnN0CiAKIHZvaWQgVGV4dEZpZWxkSW5w
dXRUeXBlOjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChCZWZvcmVUZXh0SW5zZXJ0ZWRF
dmVudCYgZXZlbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgdGhlIHRleHQgdG8gYmUgaW5zZXJ0ZWQgd2lsbCBub3QgdmlvbGF0ZSB0aGUgbWF4TGVu
Z3RoLgogCiAgICAgLy8gV2UgdXNlIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dGV4dCgp
IGluc3RlYWQgb2YgSW5wdXRFbGVtZW50Ojp2YWx1ZSgpCiAgICAgLy8gYmVjYXVzZSB0aGV5IGNh
biBiZSBtaXNtYXRjaGVkIGJ5IHNhbml0aXplVmFsdWUoKSBpbgogICAgIC8vIEhUTUxJbnB1dEVs
ZW1lbnQ6OnN1YnRyZWVIYXNDaGFuZ2VkKCkgaW4gc29tZSBjYXNlcy4KLSAgICBTdHJpbmcgaW5u
ZXJUZXh0ID0gZWxlbWVudCgpLT5pbm5lclRleHRWYWx1ZSgpOworICAgIFN0cmluZyBpbm5lclRl
eHQgPSBlbGVtZW50KCkuaW5uZXJUZXh0VmFsdWUoKTsKICAgICB1bnNpZ25lZCBvbGRMZW5ndGgg
PSBudW1HcmFwaGVtZUNsdXN0ZXJzKGlubmVyVGV4dCk7CiAKICAgICAvLyBzZWxlY3Rpb25MZW5n
dGggcmVwcmVzZW50cyB0aGUgc2VsZWN0aW9uIGxlbmd0aCBvZiB0aGlzIHRleHQgZmllbGQgdG8g
YmUKQEAgLTUzMiwxOCArNTE1LDE4IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCYKICAgICAvLyBz
ZWxlY3Rpb24gbGVuZ3RoLiBUaGUgc2VsZWN0aW9uIGlzIHRoZSBzb3VyY2Ugb2YgdGV4dCBkcmFn
LWFuZC1kcm9wIGluCiAgICAgLy8gdGhhdCBjYXNlLCBhbmQgbm90aGluZyBpbiB0aGUgdGV4dCBm
aWVsZCB3aWxsIGJlIHJlbW92ZWQuCiAgICAgdW5zaWduZWQgc2VsZWN0aW9uTGVuZ3RoID0gMDsK
LSAgICBpZiAoZWxlbWVudCgpLT5mb2N1c2VkKCkpIHsKLSAgICAgICAgQVNTRVJUKGVuY2xvc2lu
Z1RleHRGb3JtQ29udHJvbChlbGVtZW50KCktPmRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkgPT0gZWxlbWVudCgpKTsKLSAgICAgICAgaW50IHNlbGVj
dGlvblN0YXJ0ID0gZWxlbWVudCgpLT5zZWxlY3Rpb25TdGFydCgpOwotICAgICAgICBBU1NFUlQo
c2VsZWN0aW9uU3RhcnQgPD0gZWxlbWVudCgpLT5zZWxlY3Rpb25FbmQoKSk7Ci0gICAgICAgIGlu
dCBzZWxlY3Rpb25Db2RlVW5pdENvdW50ID0gZWxlbWVudCgpLT5zZWxlY3Rpb25FbmQoKSAtIHNl
bGVjdGlvblN0YXJ0OworICAgIGlmIChlbGVtZW50KCkuZm9jdXNlZCgpKSB7CisgICAgICAgIEFT
U0VSVChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woZWxlbWVudCgpLmRvY3VtZW50KCkuZnJhbWUo
KS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkgPT0gZWxlbWVudFB0cigpKTsKKyAg
ICAgICAgaW50IHNlbGVjdGlvblN0YXJ0ID0gZWxlbWVudCgpLnNlbGVjdGlvblN0YXJ0KCk7Cisg
ICAgICAgIEFTU0VSVChzZWxlY3Rpb25TdGFydCA8PSBlbGVtZW50KCkuc2VsZWN0aW9uRW5kKCkp
OworICAgICAgICBpbnQgc2VsZWN0aW9uQ29kZVVuaXRDb3VudCA9IGVsZW1lbnQoKS5zZWxlY3Rp
b25FbmQoKSAtIHNlbGVjdGlvblN0YXJ0OwogICAgICAgICBzZWxlY3Rpb25MZW5ndGggPSBzZWxl
Y3Rpb25Db2RlVW5pdENvdW50ID8gbnVtR3JhcGhlbWVDbHVzdGVycyhTdHJpbmdWaWV3KGlubmVy
VGV4dCkuc3Vic3RyaW5nKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25Db2RlVW5pdENvdW50KSkg
OiAwOwogICAgIH0KICAgICBBU1NFUlQob2xkTGVuZ3RoID49IHNlbGVjdGlvbkxlbmd0aCk7CiAK
ICAgICAvLyBTZWxlY3RlZCBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVtb3ZlZCBieSB0aGUgbmV4dCB0
ZXh0IGV2ZW50LgogICAgIHVuc2lnbmVkIGJhc2VMZW5ndGggPSBvbGRMZW5ndGggLSBzZWxlY3Rp
b25MZW5ndGg7Ci0gICAgdW5zaWduZWQgbWF4TGVuZ3RoID0gaXNUZXh0VHlwZSgpID8gZWxlbWVu
dCgpLT5lZmZlY3RpdmVNYXhMZW5ndGgoKSA6IEhUTUxJbnB1dEVsZW1lbnQ6Om1heEVmZmVjdGl2
ZUxlbmd0aDsKKyAgICB1bnNpZ25lZCBtYXhMZW5ndGggPSBpc1RleHRUeXBlKCkgPyBlbGVtZW50
KCkuZWZmZWN0aXZlTWF4TGVuZ3RoKCkgOiBIVE1MSW5wdXRFbGVtZW50OjptYXhFZmZlY3RpdmVM
ZW5ndGg7CiAgICAgdW5zaWduZWQgYXBwZW5kYWJsZUxlbmd0aCA9IG1heExlbmd0aCA+IGJhc2VM
ZW5ndGggPyBtYXhMZW5ndGggLSBiYXNlTGVuZ3RoIDogMDsKIAogICAgIC8vIFRydW5jYXRlIHRo
ZSBpbnNlcnRlZCB0ZXh0IHRvIGF2b2lkIHZpb2xhdGluZyB0aGUgbWF4TGVuZ3RoIGFuZCBvdGhl
ciBjb25zdHJhaW50cy4KQEAgLTU3MSw4ICs1NTQsNyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlw
ZTo6dXBkYXRlUGxhY2Vob2xkZXJUZXh0KCkKIHsKICAgICBpZiAoIXN1cHBvcnRzUGxhY2Vob2xk
ZXIoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIFN0cmlu
ZyBwbGFjZWhvbGRlclRleHQgPSBlbGVtZW50KCktPnN0cmlwcGVkUGxhY2Vob2xkZXIoKTsKKyAg
ICBTdHJpbmcgcGxhY2Vob2xkZXJUZXh0ID0gZWxlbWVudCgpLnN0cmlwcGVkUGxhY2Vob2xkZXIo
KTsKICAgICBpZiAocGxhY2Vob2xkZXJUZXh0LmlzRW1wdHkoKSkgewogICAgICAgICBpZiAobV9w
bGFjZWhvbGRlcikgewogICAgICAgICAgICAgbV9wbGFjZWhvbGRlci0+cGFyZW50Tm9kZSgpLT5y
ZW1vdmVDaGlsZCgqbV9wbGFjZWhvbGRlcik7CkBAIC01ODEsOCArNTYzLDggQEAgdm9pZCBUZXh0
RmllbGRJbnB1dFR5cGU6OnVwZGF0ZVBsYWNlaG9sZGVyVGV4dCgpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaWYgKCFtX3BsYWNlaG9sZGVyKSB7Ci0gICAgICAgIG1fcGxhY2Vob2xkZXIg
PSBUZXh0Q29udHJvbFBsYWNlaG9sZGVyRWxlbWVudDo6Y3JlYXRlKGVsZW1lbnQoKS0+ZG9jdW1l
bnQoKSk7Ci0gICAgICAgIGVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93Um9vdCgpLT5pbnNlcnRC
ZWZvcmUoKm1fcGxhY2Vob2xkZXIsIG1fY29udGFpbmVyID8gbV9jb250YWluZXIuZ2V0KCkgOiBp
bm5lclRleHRFbGVtZW50KCkuZ2V0KCkpOworICAgICAgICBtX3BsYWNlaG9sZGVyID0gVGV4dENv
bnRyb2xQbGFjZWhvbGRlckVsZW1lbnQ6OmNyZWF0ZShlbGVtZW50KCkuZG9jdW1lbnQoKSk7Cisg
ICAgICAgIGVsZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCktPmluc2VydEJlZm9yZSgqbV9w
bGFjZWhvbGRlciwgbV9jb250YWluZXIgPyBtX2NvbnRhaW5lci5nZXQoKSA6IGlubmVyVGV4dEVs
ZW1lbnQoKS5nZXQoKSk7CiAgICAgfQogICAgIG1fcGxhY2Vob2xkZXItPnNldElubmVyVGV4dChw
bGFjZWhvbGRlclRleHQpOwogfQpAQCAtNTkwLDEwICs1NzIsOSBAQCB2b2lkIFRleHRGaWVsZElu
cHV0VHlwZTo6dXBkYXRlUGxhY2Vob2xkZXJUZXh0KCkKIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBl
OjphcHBlbmRGb3JtRGF0YShET01Gb3JtRGF0YSYgZm9ybURhdGEsIGJvb2wgbXVsdGlwYXJ0KSBj
b25zdAogewogICAgIElucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoZm9ybURhdGEsIG11bHRpcGFy
dCk7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgYXV0byYgZGlybmFtZUF0dHJWYWx1ZSA9
IGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihkaXJuYW1lQXR0cik7
CisgICAgYXV0byYgZGlybmFtZUF0dHJWYWx1ZSA9IGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKGRpcm5hbWVBdHRyKTsKICAgICBpZiAoIWRpcm5hbWVBdHRyVmFsdWUu
aXNOdWxsKCkpCi0gICAgICAgIGZvcm1EYXRhLmFwcGVuZChkaXJuYW1lQXR0clZhbHVlLCBlbGVt
ZW50KCktPmRpcmVjdGlvbkZvckZvcm1EYXRhKCkpOworICAgICAgICBmb3JtRGF0YS5hcHBlbmQo
ZGlybmFtZUF0dHJWYWx1ZSwgZWxlbWVudCgpLmRpcmVjdGlvbkZvckZvcm1EYXRhKCkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC02MDQsOCArNTg1LDcgQEAgU3RyaW5nIFRleHRGaWVsZElu
cHV0VHlwZTo6Y29udmVydEZyb21WaXNpYmxlVmFsdWUoY29uc3QgU3RyaW5nJiB2aXNpYmxlVmFs
dWUpIGMKIAogdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OnN1YnRyZWVIYXNDaGFuZ2VkKCkKIHsK
LSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBlbGVtZW50KCktPnNldENoYW5nZWRTaW5jZUxh
c3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KHRydWUpOworICAgIGVsZW1lbnQoKS5zZXRDaGFuZ2Vk
U2luY2VMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCh0cnVlKTsKIAogICAgIC8vIFdlIGRvbid0
IG5lZWQgdG8gY2FsbCBzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKCkgZnVuY3Rpb24gaGVyZSBiZWNh
dXNlCiAgICAgLy8gSFRNTElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZl
bnQoKSBoYXMgYWxyZWFkeSBjYWxsZWQKQEAgLTYxNywyNiArNTk3LDI1IEBAIHZvaWQgVGV4dEZp
ZWxkSW5wdXRUeXBlOjpzdWJ0cmVlSGFzQ2hhbmdlZCgpCiAgICAgLy8gdXNlciBpbnB1dCBpbiBv
cmRlciB0byByZXRhaW4gcGFyaXR5IGJldHdlZW4gd2hhdCdzIGluIHRoZSBtb2RlbCBhbmQKICAg
ICAvLyB3aGF0J3Mgb24gdGhlIHNjcmVlbi4gT3RoZXJ3aXNlLCB3ZSByZXRhaW4gdGhlIHNhbml0
aXphdGlvbiBwcm9jZXNzIGZvcgogICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAzNDYKLSAgICBTdHJpbmcgaW5u
ZXJUZXh0ID0gY29udmVydEZyb21WaXNpYmxlVmFsdWUoZWxlbWVudCgpLT5pbm5lclRleHRWYWx1
ZSgpKTsKKyAgICBTdHJpbmcgaW5uZXJUZXh0ID0gY29udmVydEZyb21WaXNpYmxlVmFsdWUoZWxl
bWVudCgpLmlubmVyVGV4dFZhbHVlKCkpOwogICAgIGlmICghc3VwcG9ydHNTZWxlY3Rpb25BUEko
KSkKICAgICAgICAgaW5uZXJUZXh0ID0gc2FuaXRpemVWYWx1ZShpbm5lclRleHQpOwotICAgIGVs
ZW1lbnQoKS0+c2V0VmFsdWVGcm9tUmVuZGVyZXIoaW5uZXJUZXh0KTsKLSAgICBlbGVtZW50KCkt
PnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSgpOworICAgIGVsZW1lbnQoKS5zZXRWYWx1ZUZy
b21SZW5kZXJlcihpbm5lclRleHQpOworICAgIGVsZW1lbnQoKS51cGRhdGVQbGFjZWhvbGRlclZp
c2liaWxpdHkoKTsKICAgICAvLyBSZWNhbGMgZm9yIDppbnZhbGlkIGNoYW5nZS4KLSAgICBlbGVt
ZW50KCktPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKKyAgICBlbGVtZW50KCkuaW52YWxp
ZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAgICAgZGlkU2V0VmFsdWVCeVVzZXJFZGl0KCk7CiB9
CiAKIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpkaWRTZXRWYWx1ZUJ5VXNlckVkaXQoKQogewot
ICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGlmICghZWxlbWVudCgpLT5mb2N1c2VkKCkpCisg
ICAgaWYgKCFlbGVtZW50KCkuZm9jdXNlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKFJl
ZlB0cjxGcmFtZT4gZnJhbWUgPSBlbGVtZW50KCktPmRvY3VtZW50KCkuZnJhbWUoKSkKLSAgICAg
ICAgZnJhbWUtPmVkaXRvcigpLnRleHREaWRDaGFuZ2VJblRleHRGaWVsZChlbGVtZW50KCkpOwor
ICAgIGlmIChSZWZQdHI8RnJhbWU+IGZyYW1lID0gZWxlbWVudCgpLmRvY3VtZW50KCkuZnJhbWUo
KSkKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLnRleHREaWRDaGFuZ2VJblRleHRGaWVsZChlbGVt
ZW50UHRyKCkpOwogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQotICAgIGlmIChlbGVtZW50
KCktPmxpc3QoKSkKKyAgICBpZiAoZWxlbWVudCgpLmxpc3QoKSkKICAgICAgICAgZGlzcGxheVN1
Z2dlc3Rpb25zKERhdGFMaXN0U3VnZ2VzdGlvbkFjdGl2YXRpb25UeXBlOjpUZXh0Q2hhbmdlZCk7
CiAjZW5kaWYKIH0KQEAgLTY1Myw0NSArNjMyLDQwIEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBl
OjpzcGluQnV0dG9uU3RlcFVwKCkKIAogdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OnVwZGF0ZUlu
bmVyVGV4dFZhbHVlKCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAoIWVsZW1l
bnQoKS0+Zm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpKSB7CisgICAgaWYgKCFlbGVt
ZW50KCkuZm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIFVw
ZGF0ZSB0aGUgcmVuZGVyZXIgdmFsdWUgaWYgdGhlIGZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVu
ZGVyZXIoKSBmbGFnIGlzIGZhbHNlLgogICAgICAgICAvLyBJdCBwcm90ZWN0cyBhbiB1bmFjY2Vw
dGFibGUgcmVuZGVyZXIgdmFsdWUgZnJvbSBiZWluZyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBET00g
dmFsdWUuCi0gICAgICAgIGVsZW1lbnQoKS0+c2V0SW5uZXJUZXh0VmFsdWUodmlzaWJsZVZhbHVl
KCkpOwotICAgICAgICBlbGVtZW50KCktPnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSgpOwor
ICAgICAgICBlbGVtZW50KCkuc2V0SW5uZXJUZXh0VmFsdWUodmlzaWJsZVZhbHVlKCkpOworICAg
ICAgICBlbGVtZW50KCkudXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KCk7CiAgICAgfQogfQog
CiB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6Zm9jdXNBbmRTZWxlY3RTcGluQnV0dG9uT3duZXIo
KQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIFJlZjxIVE1MSW5wdXRFbGVtZW50PiBp
bnB1dCgqZWxlbWVudCgpKTsKKyAgICBSZWY8SFRNTElucHV0RWxlbWVudD4gaW5wdXQoZWxlbWVu
dCgpKTsKICAgICBpbnB1dC0+Zm9jdXMoKTsKICAgICBpbnB1dC0+c2VsZWN0KCk7CiB9CiAKIGJv
b2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTcGluQnV0dG9uUmVzcG9uZFRvTW91c2VFdmVu
dHMoKQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiAhZWxlbWVudCgpLT5p
c0Rpc2FibGVkT3JSZWFkT25seSgpOworICAgIHJldHVybiAhZWxlbWVudCgpLmlzRGlzYWJsZWRP
clJlYWRPbmx5KCk7CiB9CiAKIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTcGluQnV0
dG9uUmVzcG9uZFRvV2hlZWxFdmVudHMoKQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAg
IHJldHVybiBzaG91bGRTcGluQnV0dG9uUmVzcG9uZFRvTW91c2VFdmVudHMoKSAmJiBlbGVtZW50
KCktPmZvY3VzZWQoKTsKKyAgICByZXR1cm4gc2hvdWxkU3BpbkJ1dHRvblJlc3BvbmRUb01vdXNl
RXZlbnRzKCkgJiYgZWxlbWVudCgpLmZvY3VzZWQoKTsKIH0KIAogYm9vbCBUZXh0RmllbGRJbnB1
dFR5cGU6OnNob3VsZERyYXdDYXBzTG9ja0luZGljYXRvcigpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KGVsZW1lbnQoKSk7Ci0gICAgaWYgKGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVu
dCgpICE9IGVsZW1lbnQoKSkKKyAgICBpZiAoZWxlbWVudCgpLmRvY3VtZW50KCkuZm9jdXNlZEVs
ZW1lbnQoKSAhPSBlbGVtZW50UHRyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
IChlbGVtZW50KCktPmlzRGlzYWJsZWRPclJlYWRPbmx5KCkpCisgICAgaWYgKGVsZW1lbnQoKS5p
c0Rpc2FibGVkT3JSZWFkT25seSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQ
dHI8RnJhbWU+IGZyYW1lID0gZWxlbWVudCgpLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgUmVm
UHRyPEZyYW1lPiBmcmFtZSA9IGVsZW1lbnQoKS5kb2N1bWVudCgpLmZyYW1lKCk7CiAgICAgaWYg
KCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC03MTIsMzMgKzY4NiwzMCBAQCB2
b2lkIFRleHRGaWVsZElucHV0VHlwZTo6Y2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCkKIAog
Ym9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZERyYXdBdXRvRmlsbEJ1dHRvbigpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuICFlbGVtZW50KCktPmlzRGlz
YWJsZWRPclJlYWRPbmx5KCkgJiYgZWxlbWVudCgpLT5hdXRvRmlsbEJ1dHRvblR5cGUoKSAhPSBB
dXRvRmlsbEJ1dHRvblR5cGU6Ok5vbmU7CisgICAgcmV0dXJuICFlbGVtZW50KCkuaXNEaXNhYmxl
ZE9yUmVhZE9ubHkoKSAmJiBlbGVtZW50KCkuYXV0b0ZpbGxCdXR0b25UeXBlKCkgIT0gQXV0b0Zp
bGxCdXR0b25UeXBlOjpOb25lOwogfQogCiB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6YXV0b0Zp
bGxCdXR0b25FbGVtZW50V2FzQ2xpY2tlZCgpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0g
ICAgUGFnZSogcGFnZSA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5wYWdlKCk7CisgICAgUGFnZSog
cGFnZSA9IGVsZW1lbnQoKS5kb2N1bWVudCgpLnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLmhhbmRsZUF1dG9GaWxs
QnV0dG9uQ2xpY2soKmVsZW1lbnQoKSk7CisgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuaGFu
ZGxlQXV0b0ZpbGxCdXR0b25DbGljayhlbGVtZW50KCkpOwogfQogCiB2b2lkIFRleHRGaWVsZElu
cHV0VHlwZTo6Y3JlYXRlQ29udGFpbmVyKCkKIHsKICAgICBBU1NFUlQoIW1fY29udGFpbmVyKTsK
LSAgICBBU1NFUlQoZWxlbWVudCgpKTsKIAotICAgIG1fY29udGFpbmVyID0gVGV4dENvbnRyb2xJ
bm5lckNvbnRhaW5lcjo6Y3JlYXRlKGVsZW1lbnQoKS0+ZG9jdW1lbnQoKSk7CisgICAgbV9jb250
YWluZXIgPSBUZXh0Q29udHJvbElubmVyQ29udGFpbmVyOjpjcmVhdGUoZWxlbWVudCgpLmRvY3Vt
ZW50KCkpOwogICAgIG1fY29udGFpbmVyLT5zZXRQc2V1ZG8oQXRvbWljU3RyaW5nKCItd2Via2l0
LXRleHRmaWVsZC1kZWNvcmF0aW9uLWNvbnRhaW5lciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpKTsKIAotICAgIG1faW5uZXJCbG9jayA9IFRleHRDb250cm9sSW5uZXJFbGVt
ZW50OjpjcmVhdGUoZWxlbWVudCgpLT5kb2N1bWVudCgpKTsKKyAgICBtX2lubmVyQmxvY2sgPSBU
ZXh0Q29udHJvbElubmVyRWxlbWVudDo6Y3JlYXRlKGVsZW1lbnQoKS5kb2N1bWVudCgpKTsKICAg
ICBtX2lubmVyQmxvY2stPmFwcGVuZENoaWxkKCptX2lubmVyVGV4dCk7CiAgICAgbV9jb250YWlu
ZXItPmFwcGVuZENoaWxkKCptX2lubmVyQmxvY2spOwogCi0gICAgZWxlbWVudCgpLT51c2VyQWdl
bnRTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKCptX2NvbnRhaW5lcik7CisgICAgZWxlbWVudCgp
LnVzZXJBZ2VudFNoYWRvd1Jvb3QoKS0+YXBwZW5kQ2hpbGQoKm1fY29udGFpbmVyKTsKIH0KIAog
dm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmNyZWF0ZUF1dG9GaWxsQnV0dG9uKEF1dG9GaWxsQnV0
dG9uVHlwZSBhdXRvRmlsbEJ1dHRvblR5cGUpCkBAIC03NDgsOCArNzE5LDcgQEAgdm9pZCBUZXh0
RmllbGRJbnB1dFR5cGU6OmNyZWF0ZUF1dG9GaWxsQnV0dG9uKEF1dG9GaWxsQnV0dG9uVHlwZSBh
dXRvRmlsbEJ1dHRvblQKICAgICBpZiAoYXV0b0ZpbGxCdXR0b25UeXBlID09IEF1dG9GaWxsQnV0
dG9uVHlwZTo6Tm9uZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGVsZW1lbnQoKSk7
Ci0gICAgbV9hdXRvRmlsbEJ1dHRvbiA9IEF1dG9GaWxsQnV0dG9uRWxlbWVudDo6Y3JlYXRlKGVs
ZW1lbnQoKS0+ZG9jdW1lbnQoKSwgKnRoaXMpOworICAgIG1fYXV0b0ZpbGxCdXR0b24gPSBBdXRv
RmlsbEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShlbGVtZW50KCkuZG9jdW1lbnQoKSwgKnRoaXMpOwog
ICAgIG1fYXV0b0ZpbGxCdXR0b24tPnNldFBzZXVkbyhhdXRvRmlsbEJ1dHRvblR5cGVUb0F1dG9G
aWxsQnV0dG9uUHNldWRvQ2xhc3NOYW1lKGF1dG9GaWxsQnV0dG9uVHlwZSkpOwogICAgIG1fYXV0
b0ZpbGxCdXR0b24tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocm9sZUF0dHIs
IEF0b21pY1N0cmluZygiYnV0dG9uIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCkpOwogICAgIG1fYXV0b0ZpbGxCdXR0b24tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oYXJpYV9sYWJlbEF0dHIsIGF1dG9GaWxsQnV0dG9uVHlwZVRvQWNjZXNzaWJpbGl0eUxh
YmVsKGF1dG9GaWxsQnV0dG9uVHlwZSkpOwpAQCAtNzYzLDggKzczMyw3IEBAIHZvaWQgVGV4dEZp
ZWxkSW5wdXRUeXBlOjp1cGRhdGVBdXRvRmlsbEJ1dHRvbigpCiAgICAgICAgIGlmICghbV9jb250
YWluZXIpCiAgICAgICAgICAgICBjcmVhdGVDb250YWluZXIoKTsKIAotICAgICAgICBBU1NFUlQo
ZWxlbWVudCgpKTsKLSAgICAgICAgQXV0b0ZpbGxCdXR0b25UeXBlIGF1dG9GaWxsQnV0dG9uVHlw
ZSA9IGVsZW1lbnQoKS0+YXV0b0ZpbGxCdXR0b25UeXBlKCk7CisgICAgICAgIEF1dG9GaWxsQnV0
dG9uVHlwZSBhdXRvRmlsbEJ1dHRvblR5cGUgPSBlbGVtZW50KCkuYXV0b0ZpbGxCdXR0b25UeXBl
KCk7CiAgICAgICAgIGlmICghbV9hdXRvRmlsbEJ1dHRvbikKICAgICAgICAgICAgIGNyZWF0ZUF1
dG9GaWxsQnV0dG9uKGF1dG9GaWxsQnV0dG9uVHlwZSk7CiAKQEAgLTc4NywyMyArNzU2LDIzIEBA
IHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjp1cGRhdGVBdXRvRmlsbEJ1dHRvbigpCiAKIEludFJl
Y3QgVGV4dEZpZWxkSW5wdXRUeXBlOjplbGVtZW50UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygp
IGNvbnN0CiB7Ci0gICAgaWYgKCFlbGVtZW50KCktPnJlbmRlcmVyKCkpCisgICAgaWYgKCFlbGVt
ZW50KCkucmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICByZXR1cm4g
ZWxlbWVudCgpLT5kb2N1bWVudCgpLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KGVsZW1lbnQo
KS0+cmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7CisgICAgcmV0dXJuIGVs
ZW1lbnQoKS5kb2N1bWVudCgpLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KGVsZW1lbnQoKS5y
ZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKIH0KIAogVmVjdG9yPFN0cmlu
Zz4gVGV4dEZpZWxkSW5wdXRUeXBlOjpzdWdnZXN0aW9ucygpIGNvbnN0CiB7CiAgICAgVmVjdG9y
PFN0cmluZz4gc3VnZ2VzdGlvbnM7CiAKLSAgICBpZiAoYXV0byBkYXRhTGlzdCA9IGVsZW1lbnQo
KS0+ZGF0YUxpc3QoKSkgeworICAgIGlmIChhdXRvIGRhdGFMaXN0ID0gZWxlbWVudCgpLmRhdGFM
aXN0KCkpIHsKICAgICAgICAgUmVmPEhUTUxDb2xsZWN0aW9uPiBvcHRpb25zID0gZGF0YUxpc3Qt
Pm9wdGlvbnMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgYXV0byogb3B0aW9uID0g
ZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KG9wdGlvbnMtPml0ZW0oaSkpOyArK2kpIHsKLSAg
ICAgICAgICAgIGlmICghZWxlbWVudCgpLT5pc1ZhbGlkVmFsdWUob3B0aW9uLT52YWx1ZSgpKSkK
KyAgICAgICAgICAgIGlmICghZWxlbWVudCgpLmlzVmFsaWRWYWx1ZShvcHRpb24tPnZhbHVlKCkp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBTdHJpbmcgdmFsdWUg
PSBzYW5pdGl6ZVZhbHVlKG9wdGlvbi0+dmFsdWUoKSk7Ci0gICAgICAgICAgICBpZiAoIXN1Z2dl
c3Rpb25zLmNvbnRhaW5zKHZhbHVlKSAmJiAoZWxlbWVudCgpLT52YWx1ZSgpLmlzRW1wdHkoKSB8
fCB2YWx1ZS5jb250YWluc0lnbm9yaW5nQVNDSUlDYXNlKGVsZW1lbnQoKS0+dmFsdWUoKSkpKQor
ICAgICAgICAgICAgaWYgKCFzdWdnZXN0aW9ucy5jb250YWlucyh2YWx1ZSkgJiYgKGVsZW1lbnQo
KS52YWx1ZSgpLmlzRW1wdHkoKSB8fCB2YWx1ZS5jb250YWluc0lnbm9yaW5nQVNDSUlDYXNlKGVs
ZW1lbnQoKS52YWx1ZSgpKSkpCiAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMuYXBwZW5kKHZh
bHVlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTgxMyw3ICs3ODIsNyBAQCBWZWN0b3I8U3RyaW5n
PiBUZXh0RmllbGRJbnB1dFR5cGU6OnN1Z2dlc3Rpb25zKCkgY29uc3QKIAogdm9pZCBUZXh0Rmll
bGRJbnB1dFR5cGU6OmRpZFNlbGVjdERhdGFMaXN0T3B0aW9uKGNvbnN0IFN0cmluZyYgc2VsZWN0
ZWRPcHRpb24pCiB7Ci0gICAgZWxlbWVudCgpLT5zZXRWYWx1ZShzZWxlY3RlZE9wdGlvbiwgRGlz
cGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKKyAgICBlbGVtZW50KCkuc2V0VmFsdWUoc2VsZWN0
ZWRPcHRpb24sIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCk7CiB9CiAKIHZvaWQgVGV4dEZp
ZWxkSW5wdXRUeXBlOjpkaWRDbG9zZVN1Z2dlc3Rpb25zKCkKQEAgLTgyMyw3ICs3OTIsNyBAQCB2
b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZGlkQ2xvc2VTdWdnZXN0aW9ucygpCiAKIHZvaWQgVGV4
dEZpZWxkSW5wdXRUeXBlOjpkaXNwbGF5U3VnZ2VzdGlvbnMoRGF0YUxpc3RTdWdnZXN0aW9uQWN0
aXZhdGlvblR5cGUgdHlwZSkKIHsKLSAgICBpZiAoZWxlbWVudCgpLT5pc0Rpc2FibGVkRm9ybUNv
bnRyb2woKSB8fCAhZWxlbWVudCgpLT5yZW5kZXJlcigpKQorICAgIGlmIChlbGVtZW50KCkuaXNE
aXNhYmxlZEZvcm1Db250cm9sKCkgfHwgIWVsZW1lbnQoKS5yZW5kZXJlcigpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIVVzZXJHZXN0dXJlSW5kaWNhdG9yOjpwcm9jZXNzaW5nVXNlckdl
c3R1cmUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuY3BwCmluZGV4IDA3OTkzOWNj
NjM1Y2U3NGIzMTkxOGVkZjBhY2ZmYmQ5MmE1YTdhNDMuLjRmYTQ4MWQ0ZjhlZWE1NWM1ZmNjYTVk
YjQwNDMzY2FlMDc3OTZlOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlu
cHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBlLmNwcApA
QCAtNzksMTEgKzc5LDEwIEBAIFN0ZXBSYW5nZSBUaW1lSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFu
Z2UoQW55U3RlcEhhbmRsaW5nIGFueVN0ZXBIYW5kbGluZykgY29uc3QKIHsKICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RlcFJhbmdlOjpTdGVwRGVzY3JpcHRpb24+IHN0ZXBEZXNj
cmlwdGlvbih0aW1lRGVmYXVsdFN0ZXAsIHRpbWVEZWZhdWx0U3RlcEJhc2UsIHRpbWVTdGVwU2Nh
bGVGYWN0b3IsIFN0ZXBSYW5nZTo6U2NhbGVkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2VyKTsKIAot
ICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGNvbnN0IERlY2ltYWwgc3RlcEJhc2UgPSBwYXJz
ZVRvTnVtYmVyKGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5B
dHRyKSwgMCk7Ci0gICAgY29uc3QgRGVjaW1hbCBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVt
ZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIERlY2ltYWw6
OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1UaW1lKCkpKTsKLSAgICBjb25zdCBE
ZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihtYXhBdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9u
ZW50czo6bWF4aW11bVRpbWUoKSkpOwotICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IFN0ZXBSYW5n
ZTo6cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGluZywgc3RlcERlc2NyaXB0aW9uLCBlbGVtZW50KCkt
PmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3RlcEF0dHIpKTsKKyAgICBjb25zdCBE
ZWNpbWFsIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwgMCk7CisgICAgY29uc3QgRGVjaW1hbCBtaW5pbXVt
ID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihtaW5BdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWluaW11bVRp
bWUoKSkpOworICAgIGNvbnN0IERlY2ltYWwgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVu
dCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWF4QXR0ciksIERlY2ltYWw6OmZy
b21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1heGltdW1UaW1lKCkpKTsKKyAgICBjb25zdCBEZWNp
bWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNj
cmlwdGlvbiwgZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3RlcEF0
dHIpKTsKICAgICByZXR1cm4gU3RlcFJhbmdlKHN0ZXBCYXNlLCBSYW5nZUxpbWl0YXRpb25zOjpW
YWxpZCwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwgc3RlcERlc2NyaXB0aW9uKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9VUkxJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9VUkxJbnB1dFR5cGUuY3BwCmluZGV4IDZjYTBhYzFhMjAxM2NmNmQ1ZDhkYzVj
MGVhMDNiMjExNzkyZjE5NWUuLjE4MjRhMTgxNTY4NDgzZGM3MDc2ZDU5MTE2ZjlkNDYyNjY0YzY2
YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVVJMSW5wdXRUeXBlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL1VSTElucHV0VHlwZS5jcHAKQEAgLTUyLDggKzUyLDcgQEAg
Ym9vbCBVUkxJbnB1dFR5cGU6OnR5cGVNaXNtYXRjaEZvcihjb25zdCBTdHJpbmcmIHZhbHVlKSBj
b25zdAogCiBib29sIFVSTElucHV0VHlwZTo6dHlwZU1pc21hdGNoKCkgY29uc3QKIHsKLSAgICBB
U1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gdHlwZU1pc21hdGNoRm9yKGVsZW1lbnQoKS0+
dmFsdWUoKSk7CisgICAgcmV0dXJuIHR5cGVNaXNtYXRjaEZvcihlbGVtZW50KCkudmFsdWUoKSk7
CiB9CiAKIFN0cmluZyBVUkxJbnB1dFR5cGU6OnR5cGVNaXNtYXRjaFRleHQoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9XZWVrSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvV2Vla0lucHV0VHlwZS5jcHAKaW5kZXggZDYzNzkwZGVhZDJiNjQwNjZmZmQz
NjY5Mjg2OWUyZjg1NTNlY2RmMy4uNzMxOGI1OTM2M2FmMzIxNWRmMGEzYjRkMjYzZTUzOGM1ZmU0
NDdmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9XZWVrSW5wdXRUeXBlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1dlZWtJbnB1dFR5cGUuY3BwCkBAIC01OSwxMSArNTks
MTAgQEAgU3RlcFJhbmdlIFdlZWtJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZShBbnlTdGVwSGFu
ZGxpbmcgYW55U3RlcEhhbmRsaW5nKSBjb25zdAogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBTdGVwUmFuZ2U6OlN0ZXBEZXNjcmlwdGlvbj4gc3RlcERlc2NyaXB0aW9uKHdlZWtE
ZWZhdWx0U3RlcCwgd2Vla0RlZmF1bHRTdGVwQmFzZSwgd2Vla1N0ZXBTY2FsZUZhY3RvciwgU3Rl
cFJhbmdlOjpQYXJzZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIpOwogCi0gICAgQVNTRVJUKGVs
ZW1lbnQoKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBzdGVwQmFzZSA9IHBhcnNlVG9OdW1iZXIoZWxl
bWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpLCB3ZWVrRGVm
YXVsdFN0ZXBCYXNlKTsKLSAgICBjb25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVy
KGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwgRGVj
aW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWluaW11bVdlZWsoKSkpOwotICAgIGNv
bnN0IERlY2ltYWwgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKG1heEF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVD
b21wb25lbnRzOjptYXhpbXVtV2VlaygpKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBzdGVwID0gU3Rl
cFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCBzdGVwRGVzY3JpcHRpb24sIGVsZW1l
bnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzdGVwQXR0cikpOworICAgIGNv
bnN0IERlY2ltYWwgc3RlcEJhc2UgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpLCB3ZWVrRGVmYXVsdFN0ZXBCYXNlKTsKKyAg
ICBjb25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERh
dGVDb21wb25lbnRzOjptaW5pbXVtV2VlaygpKSk7CisgICAgY29uc3QgRGVjaW1hbCBtYXhpbXVt
ID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihtYXhBdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWF4aW11bVdl
ZWsoKSkpOworICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFu
eVN0ZXBIYW5kbGluZywgc3RlcERlc2NyaXB0aW9uLCBlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihzdGVwQXR0cikpOwogICAgIHJldHVybiBTdGVwUmFuZ2Uoc3RlcEJh
c2UsIFJhbmdlTGltaXRhdGlvbnM6OlZhbGlkLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBzdGVw
RGVzY3JpcHRpb24pOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346667</attachid>
            <date>2018-08-06 17:20:59 -0700</date>
            <delta_ts>2018-08-21 16:21:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-186321-20180806172058.patch</filename>
            <type>text/plain</type>
            <size>116894</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0NjIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGQyOWY0NmE3NGQ5ZTgx
YmYyZmQwZDkzMjZjNTNiOTMxOTY4OTE5Ni4uOTI4YWQzMzUwMjVkZDhiNWFhOGI1Mjc4YTJhNDAy
MWRiY2QyMGQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMiBAQAorMjAxOC0wOC0wNiAgQnJl
bnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cHMgYWZ0
ZXIgcjIzMjQ5NiBhbmQgcjIzMjUxMQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg2MzIxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MDgyMjY3Nj4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDbGVhbiB1
cCB0aGUgc2VjdXJpdHkgY2hhbmdlcyBtYWRlIGluIHIyMzI0OTUgYW5kIHIyMzI1MTEgYXMgRGFy
aW4gc3VnZ2VzdGVkLgorICAgICAgICBUaGlzIGNoYW5nZSBpbmNsdWRlcyB0aGUgZm9sbG93aW5n
IGNoYW5nZXM6CisgICAgICAgIDEuIFJlbW92ZXMgYSBzZXQgb2YgQVNTRVJUUyBpbiB2YXJpb3Vz
IElucHV0VHlwZSBtZXRob2RzIGluIGZhdm9yIG9mIGEgc2luZ2xlIEFTU0VSVCBpbiB0aGUgYWNj
ZXNzb3IuCisgICAgICAgIDIuIENoYW5nZXMgdGhlIGFjY2Vzc29yICdlbGVtZW50KCknIHRvIHJl
dHVybiBhIHJlZmVyZW5jZSAocmF0aGVyIHRoYW4gYSBwb2ludGVyKS4KKyAgICAgICAgMy4gQWRk
IGEgbmV3IG1ldGhvZCB0aGF0IHJldHVybnMgYSBwb2ludGVyIGZvciB0aGUgaGFuZGZ1bCBvZiBj
YXNlcyB3aGVyZSB3ZSBhY3R1YWxseSBleHBlY3QKKyAgICAgICAgICAgYSBwb3NzaWJsZSBudWxs
cHRyIHJldHVybi4KKworICAgICAgICBObyBuZXcgdGVzdHMgZm9yIHRoaXMgcmVmYWN0b3Jpbmcg
Y2hhbmdlLCBhcyB0aGVyZSBzaG91bGQgbm90IGJlIGFueSBjaGFuZ2UgaW4gYmVoYXZpb3IuCisK
KyAgICAgICAgKiBodG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QmFzZUJ1dHRvbklucHV0VHlwZTo6Y3JlYXRlSW5wdXRSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpCYXNlQnV0dG9uSW5wdXRUeXBlOjpzZXRWYWx1ZSk6CisgICAgICAgICogaHRtbC9C
YXNlQ2hlY2thYmxlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDaGVja2Fi
bGVJbnB1dFR5cGU6OnNhdmVGb3JtQ29udHJvbFN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkJhc2VDaGVja2FibGVJbnB1dFR5cGU6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJhc2VDaGVja2FibGVJbnB1dFR5cGU6OmFwcGVuZEZvcm1EYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDaGVja2FibGVJbnB1dFR5cGU6OmhhbmRsZUtl
eWRvd25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjph
Y2Nlc3NLZXlBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNoZWNrYWJsZUlucHV0VHlw
ZTo6c2V0VmFsdWUpOgorICAgICAgICAqIGh0bWwvQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJ
bnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNob29zZXJPbmx5RGF0ZUFuZFRp
bWVJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
QmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUp
OgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6
OnVwZGF0ZUlubmVyVGV4dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDaG9vc2VyT25s
eURhdGVBbmRUaW1lSW5wdXRUeXBlOjpkaWRDaG9vc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBl
OjpoYW5kbGVLZXlwcmVzc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDaG9vc2VyT25s
eURhdGVBbmRUaW1lSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6QmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmlzTW91c2VGb2N1c2FibGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1
dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvQmFzZUNsaWNrYWJsZVdp
dGhLZXlJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNsaWNrYWJsZVdpdGhL
ZXlJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNl
Q2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6aGFuZGxlS2V5cHJlc3NFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9u
KToKKyAgICAgICAgKiBodG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNldFZhbHVlQXNEYXRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6dmFsdWVBc0Rv
dWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6
OnNldFZhbHVlQXNEZWNpbWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5k
VGltZUlucHV0VHlwZTo6dHlwZU1pc21hdGNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VEYXRlQW5kVGltZUlucHV0VHlwZTo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNlcmlhbGl6ZVdpdGhDb21wb25lbnRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6bG9jYWxp
emVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5
cGU6OnZpc2libGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFuZFRp
bWVJbnB1dFR5cGU6OnZhbHVlTWlzc2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNl
RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUgY29uc3QpOgorICAgICAg
ICAqIGh0bWwvQmFzZVRleHRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZVRl
eHRJbnB1dFR5cGU6OnBhdHRlcm5NaXNtYXRjaCBjb25zdCk6CisgICAgICAgICogaHRtbC9DaGVj
a2JveElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2JveElucHV0VHlwZTo6
dmFsdWVNaXNzaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrYm94SW5wdXRUeXBl
Ojp3aWxsRGlzcGF0Y2hDbGljayk6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2JveElucHV0VHlw
ZTo6ZGlkRGlzcGF0Y2hDbGljayk6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2JveElucHV0VHlw
ZTo6c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSBjb25zdCk6CisgICAgICAgICogaHRtbC9Db2xv
cklucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlwZTo6aXNNb3Vz
ZUZvY3VzYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlwZTo6aXNL
ZXlib2FyZEZvY3VzYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlw
ZTo6dmFsdWVBc0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9ySW5wdXRUeXBl
OjpjcmVhdGVTaGFkb3dTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9ySW5wdXRUeXBl
OjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9ySW5wdXRU
eXBlOjpkaWRDaG9vc2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlwZTo6
dXBkYXRlQ29sb3JTd2F0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JJbnB1dFR5cGU6OnNo
YWRvd0NvbG9yU3dhdGNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9ySW5wdXRUeXBl
OjplbGVtZW50UmVjdFJlbGF0aXZlVG9Sb290VmlldyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcklucHV0VHlwZTo6c2hvdWxkU2hvd1N1Z2dlc3Rpb25zIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9ySW5wdXRUeXBlOjpzdWdnZXN0aW9ucyBjb25zdCk6CisgICAgICAgICog
aHRtbC9EYXRlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVJbnB1dFR5cGU6
OmNyZWF0ZVN0ZXBSYW5nZSBjb25zdCk6CisgICAgICAgICogaHRtbC9EYXRlVGltZUxvY2FsSW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTG9jYWxJbnB1dFR5cGU6OmNy
ZWF0ZVN0ZXBSYW5nZSBjb25zdCk6CisgICAgICAgICogaHRtbC9FbWFpbElucHV0VHlwZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFbWFpbElucHV0VHlwZTo6dHlwZU1pc21hdGNoRm9yIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVtYWlsSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2ggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RW1haWxJbnB1dFR5cGU6OnR5cGVNaXNtYXRjaFRleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RW1haWxJbnB1dFR5cGU6OnNhbml0aXplVmFsdWUgY29u
c3QpOgorICAgICAgICAqIGh0bWwvRmlsZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlSW5wdXRUeXBlOjp2YWx1ZU1pc3NpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsZUlucHV0VHlwZTo6dmFsdWVNaXNzaW5nVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlSW5wdXRUeXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGVJbnB1dFR5cGU6OmNyZWF0ZUlucHV0UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZUlucHV0VHlwZTo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0
VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRU
eXBlOjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRU
eXBlOjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6
OmFsbG93c0RpcmVjdG9yaWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5
cGU6OnNldEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6Omljb25Mb2Fk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6cmVjZWl2ZURyb3BwZWRGaWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpkZWZhdWx0VG9vbFRpcCBjb25z
dCk6CisgICAgICAgICogaHRtbC9IaWRkZW5JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SGlkZGVuSW5wdXRUeXBlOjpzYXZlRm9ybUNvbnRyb2xTdGF0ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpIaWRkZW5JbnB1dFR5cGU6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhpZGRlbklucHV0VHlwZTo6c2V0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SGlkZGVuSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YSBjb25zdCk6CisgICAgICAgICog
aHRtbC9JbWFnZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUlucHV0VHlw
ZTo6YXBwZW5kRm9ybURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5
cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1
dFR5cGU6OmNyZWF0ZUlucHV0UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1
dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5
cGU6OmF0dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUlucHV0VHlwZTo6aGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlSW5wdXRUeXBlOjp3aWR0aCBjb25zdCk6Cisg
ICAgICAgICogaHRtbC9JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBl
OjpzYXZlRm9ybUNvbnRyb2xTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5
cGU6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlw
ZTo6aXNGb3JtRGF0YUFwcGVuZGFibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRU
eXBlOjphcHBlbmRGb3JtRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6
OnNpemVTaG91bGRJbmNsdWRlRGVjb3JhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnB1dFR5cGU6OnZhbGlkYXRpb25NZXNzYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
cHV0VHlwZTo6Y3JlYXRlSW5wdXRSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5
cGU6OmJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpkZXN0cm95U2hhZG93U3Vi
dHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmRpc3BhdGNoU2ltdWxhdGVkQ2xp
Y2tJZkFjdGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmNocm9tZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjppc01vdXNlRm9jdXNhYmxlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5wdXRUeXBlOjp2aXNpYmxlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRU
eXBlOjphcHBseVN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpzdGVwVXBGcm9t
UmVuZGVyZXIpOgorICAgICAgICAqIGh0bWwvSW5wdXRUeXBlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpJbnB1dFR5cGU6OmVsZW1lbnRQdHIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRU
eXBlOjplbGVtZW50IGNvbnN0KToKKyAgICAgICAgKiBodG1sL01vbnRoSW5wdXRUeXBlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vbnRoSW5wdXRUeXBlOjp2YWx1ZUFzRGF0ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNb250aElucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlIGNvbnN0KToK
KyAgICAgICAgKiBodG1sL051bWJlcklucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
dW1iZXJJbnB1dFR5cGU6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0
VHlwZTo6dmFsdWVBc0RvdWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1
dFR5cGU6OnNldFZhbHVlQXNEb3VibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TnVtYmVy
SW5wdXRUeXBlOjpzZXRWYWx1ZUFzRGVjaW1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpO
dW1iZXJJbnB1dFR5cGU6OnR5cGVNaXNtYXRjaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpO
dW1iZXJJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpOdW1iZXJJbnB1dFR5cGU6OnNpemVTaG91bGRJbmNsdWRlRGVjb3JhdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6OmRlY29yYXRpb25XaWR0aCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6OmxvY2FsaXplVmFsdWUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TnVtYmVySW5wdXRUeXBlOjp2aXNpYmxlVmFsdWUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TnVtYmVySW5wdXRUeXBlOjpjb252ZXJ0RnJvbVZpc2libGVW
YWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6Omhhc0JhZElu
cHV0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0VHlwZTo6YXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgICogaHRtbC9SYWRpb0lucHV0VHlwZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSYWRpb0lucHV0VHlwZTo6dmFsdWVNaXNzaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJhZGlvSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtleXVwRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmFkaW9JbnB1dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmFkaW9JbnB1dFR5cGU6OnNob3VsZFNlbmRDaGFuZ2VFdmVudEFmdGVyQ2hlY2tl
ZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9JbnB1dFR5cGU6OndpbGxEaXNwYXRj
aENsaWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvSW5wdXRUeXBlOjpkaWREaXNwYXRjaENs
aWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvSW5wdXRUeXBlOjptYXRjaGVzSW5kZXRlcm1p
bmF0ZVBzZXVkb0NsYXNzIGNvbnN0KToKKyAgICAgICAgKiBodG1sL1JhbmdlSW5wdXRUeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBlOjp2YWx1ZUFzRG91YmxlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBlOjpzZXRWYWx1ZUFzRGVjaW1hbCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBlOjpoYW5kbGVNb3VzZURv
d25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6aGFuZGxlVG91Y2hF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBlOjpjcmVhdGVTaGFkb3dTdWJ0
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBlOjpzbGlkZXJUcmFja0VsZW1l
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6OmNyZWF0ZUlucHV0
UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6OmFjY2Vzc0tleUFj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6YXR0cmlidXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6c2V0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6OnVwZGF0ZVRpY2tNYXJrVmFsdWVzKToKKyAgICAg
ICAgKiBodG1sL1Jlc2V0SW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc2V0SW5w
dXRUeXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KToKKyAgICAgICAgKiBodG1sL1NlYXJjaElu
cHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJbnB1dFR5cGU6OmFkZFNlYXJj
aFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJbnB1dFR5cGU6OmF0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5wdXRUeXBlOjpjcmVhdGVJbnB1dFJl
bmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaElucHV0VHlwZTo6Y3JlYXRlU2hhZG93
U3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJbnB1dFR5cGU6OmhhbmRsZUtleWRv
d25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJbnB1dFR5cGU6OnN0YXJ0U2VhcmNo
RXZlbnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJbnB1dFR5cGU6OnNlYXJjaEV2
ZW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJbnB1dFR5cGU6OnNlYXJj
aEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWFy
Y2hJbnB1dFR5cGU6OmRpZFNldFZhbHVlQnlVc2VyRWRpdCk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWFyY2hJbnB1dFR5cGU6OnNpemVTaG91bGRJbmNsdWRlRGVjb3JhdGlvbiBjb25zdCk6CisgICAg
ICAgICogaHRtbC9TdWJtaXRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3VibWl0
SW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdWJt
aXRJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQpOgorICAgICAgICAqIGh0bWwvVGV4
dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlw
ZTo6aXNLZXlib2FyZEZvY3VzYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Rmll
bGRJbnB1dFR5cGU6OmlzTW91c2VGb2N1c2FibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEZpZWxkSW5wdXRUeXBlOjp2YWx1ZU1pc3NpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
RmllbGRJbnB1dFR5cGU6OmhhbmRsZUNsaWNrRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnRGb3JTcGluQnV0dG9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6Zm9yd2FyZEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVGb2N1c0V2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlQmx1ckV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6Y3JlYXRlSW5wdXRSZW5kZXJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhhdmVTcGluQnV0dG9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkSGF2
ZUNhcHNMb2NrSW5kaWNhdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElu
cHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Rmll
bGRJbnB1dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZp
ZWxkSW5wdXRUeXBlOjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnVwZGF0ZVBsYWNlaG9sZGVyVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmFwcGVuZEZvcm1EYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c3VidHJlZUhhc0NoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpkaWRTZXRWYWx1ZUJ5VXNl
ckVkaXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjp1cGRhdGVJbm5l
clRleHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmZvY3Vz
QW5kU2VsZWN0U3BpbkJ1dHRvbk93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElu
cHV0VHlwZTo6c2hvdWxkU3BpbkJ1dHRvblJlc3BvbmRUb01vdXNlRXZlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkU3BpbkJ1dHRvblJlc3BvbmRUb1do
ZWVsRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxk
RHJhd0NhcHNMb2NrSW5kaWNhdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVs
ZElucHV0VHlwZTo6c2hvdWxkRHJhd0F1dG9GaWxsQnV0dG9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6YXV0b0ZpbGxCdXR0b25FbGVtZW50V2FzQ2xpY2tl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmNyZWF0ZUNvbnRhaW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmNyZWF0ZUF1dG9GaWxs
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6dXBkYXRlQXV0
b0ZpbGxCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjplbGVt
ZW50UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0RmllbGRJbnB1dFR5cGU6OnN1Z2dlc3Rpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRGaWVsZElucHV0VHlwZTo6ZGlkU2VsZWN0RGF0YUxpc3RPcHRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpkaXNwbGF5U3VnZ2VzdGlvbnMpOgorICAgICAg
ICAqIGh0bWwvVGltZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRU
eXBlOjpjcmVhdGVTdGVwUmFuZ2UgY29uc3QpOgorICAgICAgICAqIGh0bWwvVVJMSW5wdXRUeXBl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVSTElucHV0VHlwZTo6dHlwZU1pc21hdGNoIGNvbnN0
KToKKyAgICAgICAgKiBodG1sL1dlZWtJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2Vla0lucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlIGNvbnN0KToKKwogMjAxOC0wOC0wNiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92
ZSB0aGUgU1ZHIGVsZW1lbnRzJyBhdHRyaWJ1dGVzIG1hY3JvcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9CYXNlQnV0dG9uSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5jcHAKaW5kZXggMmRkYmFlYjlhNjlhODBjMWI0OWM0OTI2
OTY3ZTNlZDMwNDQ2OWYzOS4uNDI4ZTQxYTBmYmNiMWNmYjBiOTljYjM3YTg4YjlkYzBhNDA0Mjk2
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQnV0dG9uSW5wdXRUeXBlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuY3BwCkBAIC01
Myw4ICs1Myw3IEBAIGJvb2wgQmFzZUJ1dHRvbklucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRE9N
Rm9ybURhdGEmLCBib29sKSBjb25zdAogCiBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gQmFzZUJ1
dHRvbklucHV0VHlwZTo6Y3JlYXRlSW5wdXRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxlKQog
ewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5k
ZXJCdXR0b24+KCplbGVtZW50KCksIFdURk1vdmUoc3R5bGUpKTsKKyAgICByZXR1cm4gY3JlYXRl
UmVuZGVyZXI8UmVuZGVyQnV0dG9uPihlbGVtZW50KCksIFdURk1vdmUoc3R5bGUpKTsKIH0KIAog
Ym9vbCBCYXNlQnV0dG9uSW5wdXRUeXBlOjpzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0
ZSgpCkBAIC02NCw4ICs2Myw3IEBAIGJvb2wgQmFzZUJ1dHRvbklucHV0VHlwZTo6c3RvcmVzVmFs
dWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKQogCiB2b2lkIEJhc2VCdXR0b25JbnB1dFR5cGU6OnNl
dFZhbHVlKGNvbnN0IFN0cmluZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wsIFRleHRGaWVsZEV2ZW50
QmVoYXZpb3IpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgZWxlbWVudCgpLT5zZXRB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHZhbHVlQXR0ciwgc2FuaXRpemVkVmFsdWUp
OworICAgIGVsZW1lbnQoKS5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHZhbHVl
QXR0ciwgc2FuaXRpemVkVmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1dFR5cGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmNwcAppbmRleCBiYjFk
YTA4NjZiYjY5YWZhZDlkOWEyNGE4MDJhMWVhNzU3ODkwYzIwLi40MDUxYTU5NGQ2ZmI0NWIzOTc3
OWVkMGU0NDdkZmZjNTA4Y2VkZGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jh
c2VDaGVja2FibGVJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNo
ZWNrYWJsZUlucHV0VHlwZS5jcHAKQEAgLTQ1LDIyICs0NSwxOSBAQCB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCiBGb3JtQ29udHJvbFN0YXRlIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OnNh
dmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAg
ICByZXR1cm4geyBlbGVtZW50KCktPmNoZWNrZWQoKSA/ICJvbiJfcyA6ICJvZmYiX3MgfTsKKyAg
ICByZXR1cm4geyBlbGVtZW50KCkuY2hlY2tlZCgpID8gIm9uIl9zIDogIm9mZiJfcyB9OwogfQog
CiB2b2lkIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKGNv
bnN0IEZvcm1Db250cm9sU3RhdGUmIHN0YXRlKQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwot
ICAgIGVsZW1lbnQoKS0+c2V0Q2hlY2tlZChzdGF0ZVswXSA9PSAib24iKTsKKyAgICBlbGVtZW50
KCkuc2V0Q2hlY2tlZChzdGF0ZVswXSA9PSAib24iKTsKIH0KIAogYm9vbCBCYXNlQ2hlY2thYmxl
SW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShET01Gb3JtRGF0YSYgZm9ybURhdGEsIGJvb2wpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgaWYgKCFlbGVtZW50KCktPmNoZWNr
ZWQoKSkKKyAgICBpZiAoIWVsZW1lbnQoKS5jaGVja2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBmb3JtRGF0YS5hcHBlbmQoZWxlbWVudCgpLT5uYW1lKCksIGVsZW1lbnQoKS0+dmFs
dWUoKSk7CisgICAgZm9ybURhdGEuYXBwZW5kKGVsZW1lbnQoKS5uYW1lKCksIGVsZW1lbnQoKS52
YWx1ZSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNjgsOCArNjUsNyBAQCB2b2lkIEJh
c2VDaGVja2FibGVJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50JiBl
dmVudCkKIHsKICAgICBjb25zdCBTdHJpbmcmIGtleSA9IGV2ZW50LmtleUlkZW50aWZpZXIoKTsK
ICAgICBpZiAoa2V5ID09ICJVKzAwMjAiKSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50KCkpOwot
ICAgICAgICBlbGVtZW50KCktPnNldEFjdGl2ZSh0cnVlLCB0cnVlKTsKKyAgICAgICAgZWxlbWVu
dCgpLnNldEFjdGl2ZSh0cnVlLCB0cnVlKTsKICAgICAgICAgLy8gTm8gc2V0RGVmYXVsdEhhbmRs
ZWQoKSwgYmVjYXVzZSBJRSBkaXNwYXRjaGVzIGEga2V5cHJlc3MgaW4gdGhpcyBjYXNlCiAgICAg
ICAgIC8vIGFuZCB0aGUgY2FsbGVyIHdpbGwgb25seSBkaXNwYXRjaCBhIGtleXByZXNzIGlmIHdl
IGRvbid0IGNhbGwgc2V0RGVmYXVsdEhhbmRsZWQoKS4KICAgICB9CkBAIC05Myw4ICs4OSw3IEBA
IHZvaWQgQmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZE1v
dXNlRXZlbnRzKQogewogICAgIElucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKHNlbmRNb3VzZUV2
ZW50cyk7CiAKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBlbGVtZW50KCktPmRpc3BhdGNo
U2ltdWxhdGVkQ2xpY2soMCwgc2VuZE1vdXNlRXZlbnRzID8gU2VuZE1vdXNlVXBEb3duRXZlbnRz
IDogU2VuZE5vRXZlbnRzKTsKKyAgICBlbGVtZW50KCkuZGlzcGF0Y2hTaW11bGF0ZWRDbGljaygw
LCBzZW5kTW91c2VFdmVudHMgPyBTZW5kTW91c2VVcERvd25FdmVudHMgOiBTZW5kTm9FdmVudHMp
OwogfQogCiBTdHJpbmcgQmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6ZmFsbGJhY2tWYWx1ZSgpIGNv
bnN0CkBAIC0xMTAsOCArMTA1LDcgQEAgYm9vbCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjpzdG9y
ZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpCiAKIHZvaWQgQmFzZUNoZWNrYWJsZUlucHV0
VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBzYW5pdGl6ZWRWYWx1ZSwgYm9vbCwgVGV4dEZp
ZWxkRXZlbnRCZWhhdmlvcikKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBlbGVtZW50
KCktPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24odmFsdWVBdHRyLCBzYW5pdGl6
ZWRWYWx1ZSk7CisgICAgZWxlbWVudCgpLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24odmFsdWVBdHRyLCBzYW5pdGl6ZWRWYWx1ZSk7CiB9CiAKIGJvb2wgQmFzZUNoZWNrYWJsZUlu
cHV0VHlwZTo6aXNDaGVja2FibGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9C
YXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0Jhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAppbmRleCAyMWZlZGUx
MDFmYjlhMWMxM2VjZTFkNzQ4MDkyZjk3YzUyNDgyOGFlLi40N2Y3NTM5Nzk1MmEyYzQ2Mzk5Nzkw
ZDVhZGViOWE3NjU2NTVlZGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VD
aG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0Jhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcApAQCAtNDYsMTYgKzQ2
LDE1IEBAIEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjp+QmFzZUNob29zZXJP
bmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUoKQogCiB2b2lkIEJhc2VDaG9vc2VyT25seURhdGVBbmRU
aW1lSW5wdXRUeXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50JikKIHsKLSAgICBBU1NF
UlQoZWxlbWVudCgpKTsKLSAgICBpZiAoZWxlbWVudCgpLT5pc0Rpc2FibGVkT3JSZWFkT25seSgp
IHx8ICFlbGVtZW50KCktPnJlbmRlcmVyKCkgfHwgIVVzZXJHZXN0dXJlSW5kaWNhdG9yOjpwcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKSkKKyAgICBpZiAoZWxlbWVudCgpLmlzRGlzYWJsZWRPclJlYWRP
bmx5KCkgfHwgIWVsZW1lbnQoKS5yZW5kZXJlcigpIHx8ICFVc2VyR2VzdHVyZUluZGljYXRvcjo6
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2Rh
dGVUaW1lQ2hvb3NlcikKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghZWxlbWVudCgpLT5kb2N1
bWVudCgpLnBhZ2UoKSkKKyAgICBpZiAoIWVsZW1lbnQoKS5kb2N1bWVudCgpLnBhZ2UoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIERhdGVUaW1lQ2hvb3NlclBhcmFtZXRlcnMgcGFyYW1ldGVyczsK
LSAgICBpZiAoIWVsZW1lbnQoKS0+c2V0dXBEYXRlVGltZUNob29zZXJQYXJhbWV0ZXJzKHBhcmFt
ZXRlcnMpKQorICAgIGlmICghZWxlbWVudCgpLnNldHVwRGF0ZVRpbWVDaG9vc2VyUGFyYW1ldGVy
cyhwYXJhbWV0ZXJzKSkKICAgICAgICAgcmV0dXJuOwogfQogCkBAIC02MywxNyArNjIsMTUgQEAg
dm9pZCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3Vi
dHJlZSgpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdmFsdWVD
b250YWluZXJQc2V1ZG8oIi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZSIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogCi0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAg
YXV0byB2YWx1ZUNvbnRhaW5lciA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZWxlbWVudCgpLT5k
b2N1bWVudCgpKTsKKyAgICBhdXRvIHZhbHVlQ29udGFpbmVyID0gSFRNTERpdkVsZW1lbnQ6OmNy
ZWF0ZShlbGVtZW50KCkuZG9jdW1lbnQoKSk7CiAgICAgdmFsdWVDb250YWluZXItPnNldFBzZXVk
byh2YWx1ZUNvbnRhaW5lclBzZXVkbyk7Ci0gICAgZWxlbWVudCgpLT51c2VyQWdlbnRTaGFkb3dS
b290KCktPmFwcGVuZENoaWxkKHZhbHVlQ29udGFpbmVyKTsKKyAgICBlbGVtZW50KCkudXNlckFn
ZW50U2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZCh2YWx1ZUNvbnRhaW5lcik7CiAgICAgdXBkYXRl
SW5uZXJUZXh0VmFsdWUoKTsKIH0KIAogdm9pZCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlu
cHV0VHlwZTo6dXBkYXRlSW5uZXJUZXh0VmFsdWUoKQogewotICAgIEFTU0VSVChlbGVtZW50KCkp
OwotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gZWxlbWVudCgpLT51c2VyQWdlbnRTaGFkb3dSb290
KCktPmZpcnN0Q2hpbGQoKTsKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGVsZW1lbnQoKS51c2Vy
QWdlbnRTaGFkb3dSb290KCktPmZpcnN0Q2hpbGQoKTsKICAgICBpZiAoIWlzPEhUTUxFbGVtZW50
Pihub2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIFN0cmluZyBkaXNwbGF5VmFsdWUgPSB2aXNp
YmxlVmFsdWUoKTsKQEAgLTk4LDggKzk1LDcgQEAgdm9pZCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5k
VGltZUlucHV0VHlwZTo6ZGV0YWNoKCkKIAogdm9pZCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGlt
ZUlucHV0VHlwZTo6ZGlkQ2hvb3NlVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBB
U1NFUlQoZWxlbWVudCgpKTsKLSAgICBlbGVtZW50KCktPnNldFZhbHVlKHZhbHVlLCBEaXNwYXRj
aElucHV0QW5kQ2hhbmdlRXZlbnQpOworICAgIGVsZW1lbnQoKS5zZXRWYWx1ZSh2YWx1ZSwgRGlz
cGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKIH0KIAogdm9pZCBCYXNlQ2hvb3Nlck9ubHlEYXRl
QW5kVGltZUlucHV0VHlwZTo6ZGlkRW5kQ2hvb3NlcigpCkBAIC0xMTUsMTQgKzExMSwxMiBAQCB2
b2lkIEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjpjbG9zZURhdGVUaW1lQ2hv
b3NlcigpCiAKIHZvaWQgQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmhhbmRs
ZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVu
dCgpKTsKLSAgICBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2
ZW50KCplbGVtZW50KCksIGV2ZW50KTsKKyAgICBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlw
ZTo6aGFuZGxlS2V5ZG93bkV2ZW50KGVsZW1lbnQoKSwgZXZlbnQpOwogfQogCiB2b2lkIEJhc2VD
aG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjpoYW5kbGVLZXlwcmVzc0V2ZW50KEtleWJv
YXJkRXZlbnQmIGV2ZW50KQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIEJhc2VDbGlj
a2FibGVXaXRoS2V5SW5wdXRUeXBlOjpoYW5kbGVLZXlwcmVzc0V2ZW50KCplbGVtZW50KCksIGV2
ZW50KTsKKyAgICBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6aGFuZGxlS2V5cHJlc3NF
dmVudChlbGVtZW50KCksIGV2ZW50KTsKIH0KIAogdm9pZCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5k
VGltZUlucHV0VHlwZTo6aGFuZGxlS2V5dXBFdmVudChLZXlib2FyZEV2ZW50JiBldmVudCkKQEAg
LTEzMywyMCArMTI3LDE4IEBAIHZvaWQgQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5
cGU6OmhhbmRsZUtleXVwRXZlbnQoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB2b2lkIEJhc2VDaG9v
c2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kTW91
c2VFdmVudHMpCiB7CiAgICAgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rp
b24oc2VuZE1vdXNlRXZlbnRzKTsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBCYXNlQ2xp
Y2thYmxlV2l0aEtleUlucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKCplbGVtZW50KCksIHNlbmRN
b3VzZUV2ZW50cyk7CisgICAgQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGU6OmFjY2Vzc0tl
eUFjdGlvbihlbGVtZW50KCksIHNlbmRNb3VzZUV2ZW50cyk7CiB9CiAKIGJvb2wgQmFzZUNob29z
ZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdAogewot
ICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBlbGVtZW50KCktPmlzVGV4dEZvcm1D
b250cm9sRm9jdXNhYmxlKCk7CisgICAgcmV0dXJuIGVsZW1lbnQoKS5pc1RleHRGb3JtQ29udHJv
bEZvY3VzYWJsZSgpOwogfQogCiB2b2lkIEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRU
eXBlOjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiB7CiAgICAg
aWYgKG5hbWUgPT0gdmFsdWVBdHRyKSB7Ci0gICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gdGhp
cy0+ZWxlbWVudCgpKSB7CisgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVu
dFB0cigpKSB7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnQtPmhhc0RpcnR5VmFsdWUoKSkKICAg
ICAgICAgICAgICAgICB1cGRhdGVJbm5lclRleHRWYWx1ZSgpOwogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGUuY3Bw
CmluZGV4IDJjNGRkNTVlOWIwMzgwNTY3Mjg3MzlhZmFhMTEyNGQxMGU1MWVkNzEuLmEyNTNmODg2
YTIyZDlhNzVlZmUzNWUxMzE3MDNhOGM0YzU4YzU3NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGUuY3BwCkBAIC04MCwxNCAr
ODAsMTIgQEAgdm9pZCBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6YWNjZXNzS2V5QWN0
aW9uKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQsIGIKIAogdm9pZCBCYXNlQ2xpY2thYmxlV2l0
aEtleUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQog
ewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGhhbmRsZUtleWRvd25FdmVudCgqZWxlbWVu
dCgpLCBldmVudCk7CisgICAgaGFuZGxlS2V5ZG93bkV2ZW50KGVsZW1lbnQoKSwgZXZlbnQpOwog
fQogCiB2b2lkIEJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlOjpoYW5kbGVLZXlwcmVzc0V2
ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAg
IGhhbmRsZUtleXByZXNzRXZlbnQoKmVsZW1lbnQoKSwgZXZlbnQpOworICAgIGhhbmRsZUtleXBy
ZXNzRXZlbnQoZWxlbWVudCgpLCBldmVudCk7CiB9CiAKIHZvaWQgQmFzZUNsaWNrYWJsZVdpdGhL
ZXlJbnB1dFR5cGU6OmhhbmRsZUtleXVwRXZlbnQoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCkBAIC05
OCw4ICs5Niw3IEBAIHZvaWQgQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGU6OmhhbmRsZUtl
eXVwRXZlbnQoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB2b2lkIEJhc2VDbGlja2FibGVXaXRoS2V5
SW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kTW91c2VFdmVudHMpCiB7CiAgICAg
SW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oc2VuZE1vdXNlRXZlbnRzKTsKLSAgICBBU1NFUlQo
ZWxlbWVudCgpKTsKLSAgICBhY2Nlc3NLZXlBY3Rpb24oKmVsZW1lbnQoKSwgc2VuZE1vdXNlRXZl
bnRzKTsKKyAgICBhY2Nlc3NLZXlBY3Rpb24oZWxlbWVudCgpLCBzZW5kTW91c2VFdmVudHMpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jh
c2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAKaW5kZXggOTAzNmU3NjQ2NzY0OTAxMThiODlhODRk
OWU4NjI1NTliODlhMDhjYy4uMGU5ZjlkYzViNjZlM2Y0Y2E1YmI3N2ViYzBjMGY2Y2E2MjJmMWRm
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5
cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBl
LmNwcApAQCAtNTcsMjIgKzU3LDE5IEBAIGRvdWJsZSBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6
OnZhbHVlQXNEYXRlKCkgY29uc3QKIAogRXhjZXB0aW9uT3I8dm9pZD4gQmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlOjpzZXRWYWx1ZUFzRGF0ZShkb3VibGUgdmFsdWUpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKGVsZW1lbnQoKSk7Ci0gICAgZWxlbWVudCgpLT5zZXRWYWx1ZShzZXJpYWxpemVXaXRoTWls
bGlzZWNvbmRzKHZhbHVlKSk7CisgICAgZWxlbWVudCgpLnNldFZhbHVlKHNlcmlhbGl6ZVdpdGhN
aWxsaXNlY29uZHModmFsdWUpKTsKICAgICByZXR1cm4geyB9OwogfQogCiBkb3VibGUgQmFzZURh
dGVBbmRUaW1lSW5wdXRUeXBlOjp2YWx1ZUFzRG91YmxlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
ZWxlbWVudCgpKTsKLSAgICBjb25zdCBEZWNpbWFsIHZhbHVlID0gcGFyc2VUb051bWJlcihlbGVt
ZW50KCktPnZhbHVlKCksIERlY2ltYWw6Om5hbigpKTsKKyAgICBjb25zdCBEZWNpbWFsIHZhbHVl
ID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkudmFsdWUoKSwgRGVjaW1hbDo6bmFuKCkpOwogICAg
IHJldHVybiB2YWx1ZS5pc0Zpbml0ZSgpID8gdmFsdWUudG9Eb3VibGUoKSA6IERhdGVDb21wb25l
bnRzOjppbnZhbGlkTWlsbGlzZWNvbmRzKCk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IEJhc2VE
YXRlQW5kVGltZUlucHV0VHlwZTo6c2V0VmFsdWVBc0RlY2ltYWwoY29uc3QgRGVjaW1hbCYgbmV3
VmFsdWUsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikgY29uc3QKIHsKLSAg
ICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBlbGVtZW50KCktPnNldFZhbHVlKHNlcmlhbGl6ZShu
ZXdWYWx1ZSksIGV2ZW50QmVoYXZpb3IpOworICAgIGVsZW1lbnQoKS5zZXRWYWx1ZShzZXJpYWxp
emUobmV3VmFsdWUpLCBldmVudEJlaGF2aW9yKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC04
Myw4ICs4MCw3IEBAIGJvb2wgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2hG
b3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIAogYm9vbCBCYXNlRGF0ZUFuZFRpbWVJbnB1
dFR5cGU6OnR5cGVNaXNtYXRjaCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0g
ICAgcmV0dXJuIHR5cGVNaXNtYXRjaEZvcihlbGVtZW50KCktPnZhbHVlKCkpOworICAgIHJldHVy
biB0eXBlTWlzbWF0Y2hGb3IoZWxlbWVudCgpLnZhbHVlKCkpOwogfQogCiBEZWNpbWFsIEJhc2VE
YXRlQW5kVGltZUlucHV0VHlwZTo6ZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCkgY29uc3QKQEAgLTEw
Miw3ICs5OCw3IEBAIGJvb2wgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjppc1N0ZXBwYWJsZSgp
IGNvbnN0CiB2b2lkIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6YXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQogewogICAgIGlmIChuYW1lID09IG1heEF0dHIgfHwg
bmFtZSA9PSBtaW5BdHRyKSB7Ci0gICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxl
bWVudCgpKQorICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnRQdHIoKSkK
ICAgICAgICAgICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9
CiAgICAgSW5wdXRUeXBlOjphdHRyaWJ1dGVDaGFuZ2VkKG5hbWUpOwpAQCAtMTQwLDkgKzEzNiw4
IEBAIFN0cmluZyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNlcmlhbGl6ZShjb25zdCBEZWNp
bWFsJiB2YWx1ZSkgY29uc3QKIAogU3RyaW5nIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6c2Vy
aWFsaXplV2l0aENvbXBvbmVudHMoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAgICAgRGVjaW1hbCBzdGVwOwotICAgIGlmICghZWxl
bWVudCgpLT5nZXRBbGxvd2VkVmFsdWVTdGVwKCZzdGVwKSkKKyAgICBpZiAoIWVsZW1lbnQoKS5n
ZXRBbGxvd2VkVmFsdWVTdGVwKCZzdGVwKSkKICAgICAgICAgcmV0dXJuIGRhdGUudG9TdHJpbmco
KTsKICAgICBpZiAoc3RlcC5yZW1haW5kZXIobXNlY1Blck1pbnV0ZSkuaXNaZXJvKCkpCiAgICAg
ICAgIHJldHVybiBkYXRlLnRvU3RyaW5nKERhdGVDb21wb25lbnRzOjpOb25lKTsKQEAgLTE2Miwx
NSArMTU3LDEzIEBAIFN0cmluZyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmxvY2FsaXplVmFs
dWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKSBjb25zCiAgICAgaWYgKCFwYXJzZVRvRGF0
ZUNvbXBvbmVudHMocHJvcG9zZWRWYWx1ZSwgJmRhdGUpKQogICAgICAgICByZXR1cm4gcHJvcG9z
ZWRWYWx1ZTsKIAotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIFN0cmluZyBsb2NhbGl6ZWQg
PSBlbGVtZW50KCktPmxvY2FsZSgpLmZvcm1hdERhdGVUaW1lKGRhdGUpOworICAgIFN0cmluZyBs
b2NhbGl6ZWQgPSBlbGVtZW50KCkubG9jYWxlKCkuZm9ybWF0RGF0ZVRpbWUoZGF0ZSk7CiAgICAg
cmV0dXJuIGxvY2FsaXplZC5pc0VtcHR5KCkgPyBwcm9wb3NlZFZhbHVlIDogbG9jYWxpemVkOwog
fQogCiBTdHJpbmcgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjp2aXNpYmxlVmFsdWUoKSBjb25z
dAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBsb2NhbGl6ZVZhbHVlKGVs
ZW1lbnQoKS0+dmFsdWUoKSk7CisgICAgcmV0dXJuIGxvY2FsaXplVmFsdWUoZWxlbWVudCgpLnZh
bHVlKCkpOwogfQogCiBTdHJpbmcgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzYW5pdGl6ZVZh
bHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29uc3QKQEAgLTE5MCwxNSArMTgzLDEz
IEBAIGJvb2wgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzaG91bGRSZXNwZWN0TGlzdEF0dHJp
YnV0ZSgpCiAKIGJvb2wgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjp2YWx1ZU1pc3NpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBy
ZXR1cm4gZWxlbWVudCgpLT5pc1JlcXVpcmVkKCkgJiYgdmFsdWUuaXNFbXB0eSgpOworICAgIHJl
dHVybiBlbGVtZW50KCkuaXNSZXF1aXJlZCgpICYmIHZhbHVlLmlzRW1wdHkoKTsKIH0KIAogI2lm
IFBMQVRGT1JNKElPUykKIGJvb2wgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjppc0tleWJvYXJk
Rm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkp
OwotICAgIHJldHVybiAhZWxlbWVudCgpLT5pc1JlYWRPbmx5KCkgJiYgZWxlbWVudCgpLT5pc1Rl
eHRGb3JtQ29udHJvbEZvY3VzYWJsZSgpOworICAgIHJldHVybiAhZWxlbWVudCgpLmlzUmVhZE9u
bHkoKSAmJiBlbGVtZW50KCkuaXNUZXh0Rm9ybUNvbnRyb2xGb2N1c2FibGUoKTsKIH0KICNlbmRp
ZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VUZXh0SW5wdXRUeXBlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUuY3BwCmluZGV4IGIzNjg1
YjkxYTk5NzNiODMxMWIxY2E5Y2M4MDAzNWY1ZmNmZTUxZTguLjgxNWI3MTc3NTkxNzhhNTgzMDg5
MTQ3NGZhYTI2NjM5NjI3NTFkZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFz
ZVRleHRJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZVRleHRJbnB1
dFR5cGUuY3BwCkBAIC00MCwxMCArNDAsOSBAQCBib29sIEJhc2VUZXh0SW5wdXRUeXBlOjppc1Rl
eHRUeXBlKCkgY29uc3QKIAogYm9vbCBCYXNlVGV4dElucHV0VHlwZTo6cGF0dGVybk1pc21hdGNo
KGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBleGVjdXRlIFJlZ0V4cCBwYXJzZXIgZmlyc3QgdG8gY2hl
Y2sgdmFsaWRpdHkgaW5zdGVhZCBvZiBjcmVhdGluZyBhbiBhY3R1YWwgUmVndWxhckV4cHJlc3Np
b24uCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MzM2
MQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcmF3UGF0dGVybiA9IGVsZW1lbnQoKS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwYXR0ZXJuQXR0cik7CisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiByYXdQYXR0ZXJuID0gZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24ocGF0dGVybkF0dHIpOwogICAgIGlmIChyYXdQYXR0ZXJuLmlzTnVsbCgpIHx8IHZhbHVl
LmlzRW1wdHkoKSB8fCAhSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbihyYXdQYXR0ZXJuLCBK
U0M6OllhcnI6OlRleHRDYXNlU2Vuc2l0aXZlLCBKU0M6OllhcnI6Ok11bHRpbGluZURpc2FibGVk
LCBKU0M6OllhcnI6OlVuaWNvZGVBd2FyZU1vZGUpLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIFN0cmluZyBwYXR0ZXJuID0gIl4oPzoiICsgcmF3UGF0dGVybiArICIpJCI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NoZWNrYm94SW5wdXRUeXBlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuY3BwCmluZGV4IDg5MzdlNTMz
NGRiZGJkNGNlZmI5NTdiMTdjYTA0MGE0ZDRkOWIzMjAuLjQ5MTRkZmJjMGIyZTY2YjgxYTg1ZjRm
MGYyMGRhZjQwNGM3ZjdkNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2hlY2ti
b3hJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5
cGUuY3BwCkBAIC00Niw4ICs0Niw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgQ2hlY2tib3hJbnB1
dFR5cGU6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CiAKIGJvb2wgQ2hlY2tib3hJbnB1dFR5cGU6
OnZhbHVlTWlzc2luZyhjb25zdCBTdHJpbmcmKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50
KCkpOwotICAgIHJldHVybiBlbGVtZW50KCktPmlzUmVxdWlyZWQoKSAmJiAhZWxlbWVudCgpLT5j
aGVja2VkKCk7CisgICAgcmV0dXJuIGVsZW1lbnQoKS5pc1JlcXVpcmVkKCkgJiYgIWVsZW1lbnQo
KS5jaGVja2VkKCk7CiB9CiAKIFN0cmluZyBDaGVja2JveElucHV0VHlwZTo6dmFsdWVNaXNzaW5n
VGV4dCgpIGNvbnN0CkBAIC02NSwyNiArNjQsMjMgQEAgdm9pZCBDaGVja2JveElucHV0VHlwZTo6
aGFuZGxlS2V5dXBFdmVudChLZXlib2FyZEV2ZW50JiBldmVudCkKIAogdm9pZCBDaGVja2JveElu
cHV0VHlwZTo6d2lsbERpc3BhdGNoQ2xpY2soSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSYgc3RhdGUp
CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0KICAgICAvLyBBbiBldmVudCBoYW5kbGVyIGNh
biB1c2UgcHJldmVudERlZmF1bHQgb3IgInJldHVybiBmYWxzZSIgdG8gcmV2ZXJzZSB0aGUgY2hl
Y2tpbmcgd2UgZG8gaGVyZS4KICAgICAvLyBUaGUgSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSBvYmpl
Y3QgY29udGFpbnMgd2hhdCB3ZSBuZWVkIHRvIHVuZG8gd2hhdCB3ZSBkaWQgaGVyZSBpbiBkaWRE
aXNwYXRjaENsaWNrLgogCi0gICAgc3RhdGUuY2hlY2tlZCA9IGVsZW1lbnQoKS0+Y2hlY2tlZCgp
OwotICAgIHN0YXRlLmluZGV0ZXJtaW5hdGUgPSBlbGVtZW50KCktPmluZGV0ZXJtaW5hdGUoKTsK
KyAgICBzdGF0ZS5jaGVja2VkID0gZWxlbWVudCgpLmNoZWNrZWQoKTsKKyAgICBzdGF0ZS5pbmRl
dGVybWluYXRlID0gZWxlbWVudCgpLmluZGV0ZXJtaW5hdGUoKTsKIAogICAgIGlmIChzdGF0ZS5p
bmRldGVybWluYXRlKQotICAgICAgICBlbGVtZW50KCktPnNldEluZGV0ZXJtaW5hdGUoZmFsc2Up
OworICAgICAgICBlbGVtZW50KCkuc2V0SW5kZXRlcm1pbmF0ZShmYWxzZSk7CiAKLSAgICBlbGVt
ZW50KCktPnNldENoZWNrZWQoIXN0YXRlLmNoZWNrZWQsIERpc3BhdGNoQ2hhbmdlRXZlbnQpOwor
ICAgIGVsZW1lbnQoKS5zZXRDaGVja2VkKCFzdGF0ZS5jaGVja2VkLCBEaXNwYXRjaENoYW5nZUV2
ZW50KTsKIH0KIAogdm9pZCBDaGVja2JveElucHV0VHlwZTo6ZGlkRGlzcGF0Y2hDbGljayhFdmVu
dCYgZXZlbnQsIGNvbnN0IElucHV0RWxlbWVudENsaWNrU3RhdGUmIHN0YXRlKQogewogICAgIGlm
IChldmVudC5kZWZhdWx0UHJldmVudGVkKCkgfHwgZXZlbnQuZGVmYXVsdEhhbmRsZWQoKSkgewot
ICAgICAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICAgICAgZWxlbWVudCgpLT5zZXRJbmRldGVy
bWluYXRlKHN0YXRlLmluZGV0ZXJtaW5hdGUpOwotICAgICAgICBlbGVtZW50KCktPnNldENoZWNr
ZWQoc3RhdGUuY2hlY2tlZCk7CisgICAgICAgIGVsZW1lbnQoKS5zZXRJbmRldGVybWluYXRlKHN0
YXRlLmluZGV0ZXJtaW5hdGUpOworICAgICAgICBlbGVtZW50KCkuc2V0Q2hlY2tlZChzdGF0ZS5j
aGVja2VkKTsKICAgICB9CiAKICAgICAvLyBUaGUgd29yayB3ZSBkaWQgaW4gd2lsbERpc3BhdGNo
Q2xpY2sgd2FzIGRlZmF1bHQgaGFuZGxpbmcuCkBAIC0xMDMsOCArOTksNyBAQCBib29sIENoZWNr
Ym94SW5wdXRUeXBlOjptYXRjaGVzSW5kZXRlcm1pbmF0ZVBzZXVkb0NsYXNzKCkgY29uc3QKIAog
Ym9vbCBDaGVja2JveElucHV0VHlwZTo6c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+aW5kZXRl
cm1pbmF0ZSgpOworICAgIHJldHVybiBlbGVtZW50KCkuaW5kZXRlcm1pbmF0ZSgpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Nv
bG9ySW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3Bw
CmluZGV4IDJhMTM1Zjk3N2QyZDUyMGYwYzBiNzI3Nzg2ZTVhY2JlZDc2YTljNTkuLjVhZmNiOWNh
ZTQxMDZiMzJjZTI1ZWM4NGNjMGJlYzAyMzg0ZGQwYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29s
b3JJbnB1dFR5cGUuY3BwCkBAIC04MywxOCArODMsMTYgQEAgQ29sb3JJbnB1dFR5cGU6On5Db2xv
cklucHV0VHlwZSgpCiAKIGJvb2wgQ29sb3JJbnB1dFR5cGU6OmlzTW91c2VGb2N1c2FibGUoKSBj
b25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBlbGVtZW50KCktPmlz
VGV4dEZvcm1Db250cm9sRm9jdXNhYmxlKCk7CisgICAgcmV0dXJuIGVsZW1lbnQoKS5pc1RleHRG
b3JtQ29udHJvbEZvY3VzYWJsZSgpOwogfQogCiBib29sIENvbG9ySW5wdXRUeXBlOjppc0tleWJv
YXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50
KCkpOwogI2lmIFBMQVRGT1JNKElPUykKLSAgICBpZiAoZWxlbWVudCgpLT5pc1JlYWRPbmx5KCkp
CisgICAgaWYgKGVsZW1lbnQoKS5pc1JlYWRPbmx5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHJldHVybiBlbGVtZW50KCktPmlzVGV4dEZvcm1Db250cm9sRm9jdXNhYmxlKCk7Cisg
ICAgcmV0dXJuIGVsZW1lbnQoKS5pc1RleHRGb3JtQ29udHJvbEZvY3VzYWJsZSgpOwogI2VuZGlm
CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTI5LDIyICsxMjcsMjAgQEAgU3RyaW5nIENvbG9y
SW5wdXRUeXBlOjpzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29u
c3QKIAogQ29sb3IgQ29sb3JJbnB1dFR5cGU6OnZhbHVlQXNDb2xvcigpIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIHBhcnNlU2ltcGxlQ29sb3JWYWx1ZShlbGVt
ZW50KCktPnZhbHVlKCkpLnZhbHVlKCk7CisgICAgcmV0dXJuIHBhcnNlU2ltcGxlQ29sb3JWYWx1
ZShlbGVtZW50KCkudmFsdWUoKSkudmFsdWUoKTsKIH0KIAogdm9pZCBDb2xvcklucHV0VHlwZTo6
Y3JlYXRlU2hhZG93U3VidHJlZSgpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgQVNT
RVJUKGVsZW1lbnQoKS0+c2hhZG93Um9vdCgpKTsKKyAgICBBU1NFUlQoZWxlbWVudCgpLnNoYWRv
d1Jvb3QoKSk7CiAKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBlbGVtZW50KCktPmRvY3VtZW50
KCk7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZWxlbWVudCgpLmRvY3VtZW50KCk7CiAgICAg
YXV0byB3cmFwcGVyRWxlbWVudCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwog
ICAgIHdyYXBwZXJFbGVtZW50LT5zZXRQc2V1ZG8oQXRvbWljU3RyaW5nKCItd2Via2l0LWNvbG9y
LXN3YXRjaC13cmFwcGVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwog
ICAgIGF1dG8gY29sb3JTd2F0Y2ggPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsK
ICAgICBjb2xvclN3YXRjaC0+c2V0UHNldWRvKEF0b21pY1N0cmluZygiLXdlYmtpdC1jb2xvci1z
d2F0Y2giLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAgICAgd3JhcHBl
ckVsZW1lbnQtPmFwcGVuZENoaWxkKGNvbG9yU3dhdGNoKTsKLSAgICBlbGVtZW50KCktPnVzZXJB
Z2VudFNoYWRvd1Jvb3QoKS0+YXBwZW5kQ2hpbGQod3JhcHBlckVsZW1lbnQpOworICAgIGVsZW1l
bnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKHdyYXBwZXJFbGVtZW50KTsK
IAogICAgIHVwZGF0ZUNvbG9yU3dhdGNoKCk7CiB9CkBAIC0xNjMsOCArMTU5LDcgQEAgdm9pZCBD
b2xvcklucHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCB2YWx1ZUNo
YW5nZWQsIFRleHRGaWVsZEUKIAogdm9pZCBDb2xvcklucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZh
dGVFdmVudChFdmVudCYgZXZlbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgaWYg
KGVsZW1lbnQoKS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkgfHwgIWVsZW1lbnQoKS0+cmVuZGVy
ZXIoKSkKKyAgICBpZiAoZWxlbWVudCgpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpIHx8ICFlbGVt
ZW50KCkucmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFVc2VyR2VzdHVy
ZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCkBAIC0yMDIsMTMgKzE5NywxMiBA
QCBib29sIENvbG9ySW5wdXRUeXBlOjpzaG91bGRSZXNldE9uRG9jdW1lbnRBY3RpdmF0aW9uKCkK
IAogdm9pZCBDb2xvcklucHV0VHlwZTo6ZGlkQ2hvb3NlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
KQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGlmIChlbGVtZW50KCktPmlzRGlzYWJs
ZWRGb3JtQ29udHJvbCgpIHx8IGNvbG9yID09IHZhbHVlQXNDb2xvcigpKQorICAgIGlmIChlbGVt
ZW50KCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgfHwgY29sb3IgPT0gdmFsdWVBc0NvbG9yKCkp
CiAgICAgICAgIHJldHVybjsKICAgICBFdmVudFF1ZXVlU2NvcGUgc2NvcGU7Ci0gICAgZWxlbWVu
dCgpLT5zZXRWYWx1ZUZyb21SZW5kZXJlcihjb2xvci5zZXJpYWxpemVkKCkpOworICAgIGVsZW1l
bnQoKS5zZXRWYWx1ZUZyb21SZW5kZXJlcihjb2xvci5zZXJpYWxpemVkKCkpOwogICAgIHVwZGF0
ZUNvbG9yU3dhdGNoKCk7Ci0gICAgZWxlbWVudCgpLT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdl
RXZlbnQoKTsKKyAgICBlbGVtZW50KCkuZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7
CiB9CiAKIHZvaWQgQ29sb3JJbnB1dFR5cGU6OmRpZEVuZENob29zZXIoKQpAQCAtMjI4LDE0ICsy
MjIsMTIgQEAgdm9pZCBDb2xvcklucHV0VHlwZTo6dXBkYXRlQ29sb3JTd2F0Y2goKQogICAgIGlm
ICghY29sb3JTd2F0Y2gpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChlbGVtZW50KCkp
OwotICAgIGNvbG9yU3dhdGNoLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yLCBlbGVtZW50KCktPnZhbHVlKCksIGZhbHNlKTsKKyAgICBjb2xvclN3YXRj
aC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgZWxl
bWVudCgpLnZhbHVlKCksIGZhbHNlKTsKIH0KIAogSFRNTEVsZW1lbnQqIENvbG9ySW5wdXRUeXBl
OjpzaGFkb3dDb2xvclN3YXRjaCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0g
ICAgUmVmUHRyPFNoYWRvd1Jvb3Q+IHNoYWRvdyA9IGVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93
Um9vdCgpOworICAgIFJlZlB0cjxTaGFkb3dSb290PiBzaGFkb3cgPSBlbGVtZW50KCkudXNlckFn
ZW50U2hhZG93Um9vdCgpOwogICAgIGlmICghc2hhZG93KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIApAQCAtMjQ4LDEwICsyNDAsOSBAQCBIVE1MRWxlbWVudCogQ29sb3JJbnB1dFR5cGU6OnNo
YWRvd0NvbG9yU3dhdGNoKCkgY29uc3QKIAogSW50UmVjdCBDb2xvcklucHV0VHlwZTo6ZWxlbWVu
dFJlY3RSZWxhdGl2ZVRvUm9vdFZpZXcoKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkp
OwotICAgIGlmICghZWxlbWVudCgpLT5yZW5kZXJlcigpKQorICAgIGlmICghZWxlbWVudCgpLnJl
bmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQo
KS0+ZG9jdW1lbnQoKS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhlbGVtZW50KCktPnJlbmRl
cmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOworICAgIHJldHVybiBlbGVtZW50KCku
ZG9jdW1lbnQoKS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhlbGVtZW50KCkucmVuZGVyZXIo
KS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7CiB9CiAKIENvbG9yIENvbG9ySW5wdXRUeXBl
OjpjdXJyZW50Q29sb3IoKQpAQCAtMjYyLDggKzI1Myw3IEBAIENvbG9yIENvbG9ySW5wdXRUeXBl
OjpjdXJyZW50Q29sb3IoKQogYm9vbCBDb2xvcklucHV0VHlwZTo6c2hvdWxkU2hvd1N1Z2dlc3Rp
b25zKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLSAgICBBU1NFUlQo
ZWxlbWVudCgpKTsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKGxpc3RBdHRyKTsKKyAgICByZXR1cm4gZWxlbWVudCgpLmhhc0F0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obGlzdEF0dHIpOwogI2Vsc2UKICAgICByZXR1cm4gZmFs
c2U7CiAjZW5kaWYKQEAgLTI3Myw4ICsyNjMsNyBAQCBWZWN0b3I8Q29sb3I+IENvbG9ySW5wdXRU
eXBlOjpzdWdnZXN0aW9ucygpIGNvbnN0CiB7CiAgICAgVmVjdG9yPENvbG9yPiBzdWdnZXN0aW9u
czsKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsK
LSAgICBpZiAoYXV0byBkYXRhTGlzdCA9IGVsZW1lbnQoKS0+ZGF0YUxpc3QoKSkgeworICAgIGlm
IChhdXRvIGRhdGFMaXN0ID0gZWxlbWVudCgpLmRhdGFMaXN0KCkpIHsKICAgICAgICAgUmVmPEhU
TUxDb2xsZWN0aW9uPiBvcHRpb25zID0gZGF0YUxpc3QtPm9wdGlvbnMoKTsKICAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gb3B0aW9ucy0+bGVuZ3RoKCk7CiAgICAgICAgIHN1Z2dlc3Rpb25zLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5
cGUuY3BwCmluZGV4IGM4NDhhODdkYzY3MGE3OWJiOWE3ODkxOGQwMzIwMzY3MTJjZDY2OWMuLjNi
NTQ4Mzk2MDU1NDMxM2UyZTYxYTlmMTllNDliNDY5N2M5MjE0NzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9EYXRlSW5wdXRUeXBlLmNwcApAQCAtNjIsMTEgKzYyLDEwIEBAIERhdGVDb21wb25lbnRzOjpU
eXBlIERhdGVJbnB1dFR5cGU6OmRhdGVUeXBlKCkgY29uc3QKIAogU3RlcFJhbmdlIERhdGVJbnB1
dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZShBbnlTdGVwSGFuZGxpbmcgYW55U3RlcEhhbmRsaW5nKSBj
b25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGNvbnN0IERlY2ltYWwgc3RlcEJh
c2UgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihtaW5BdHRyKSwgMCk7Ci0gICAgY29uc3QgRGVjaW1hbCBtaW5pbXVtID0gcGFyc2VUb051
bWJlcihlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0ciks
IERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1EYXRlKCkpKTsKLSAg
ICBjb25zdCBEZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtYXhBdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShE
YXRlQ29tcG9uZW50czo6bWF4aW11bURhdGUoKSkpOwotICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9
IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGluZywgZGF0ZVN0ZXBEZXNjcmlwdGlv
biwgZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHN0ZXBBdHRyKSk7
CisgICAgY29uc3QgRGVjaW1hbCBzdGVwQmFzZSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIDApOworICAgIGNvbnN0IERl
Y2ltYWwgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24obWluQXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVu
dHM6Om1pbmltdW1EYXRlKCkpKTsKKyAgICBjb25zdCBEZWNpbWFsIG1heGltdW0gPSBwYXJzZVRv
TnVtYmVyKGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1heEF0dHIp
LCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25lbnRzOjptYXhpbXVtRGF0ZSgpKSk7Cisg
ICAgY29uc3QgRGVjaW1hbCBzdGVwID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRs
aW5nLCBkYXRlU3RlcERlc2NyaXB0aW9uLCBlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihzdGVwQXR0cikpOwogICAgIHJldHVybiBTdGVwUmFuZ2Uoc3RlcEJhc2UsIFJh
bmdlTGltaXRhdGlvbnM6OlZhbGlkLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBkYXRlU3RlcERl
c2NyaXB0aW9uKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRlVGlt
ZUxvY2FsSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZVRpbWVMb2NhbElu
cHV0VHlwZS5jcHAKaW5kZXggN2NhYzFkOWNiZDYzM2I5NTQxOWI4ZTFmYmYyMWI5ZTIxNjEzYzk4
ZC4uZjI4MWY0YTA2MmRlNWI0MGY4MDU2NTQyZTdkNzcwNDc4YmM1Njk0YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuY3BwCkBAIC03MCwxMSArNzAs
MTAgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRGF0ZVRpbWVMb2NhbElucHV0VHlwZTo6c2V0VmFsdWVB
c0RhdGUoZG91YmxlIHZhbHVlKSBjb25zdAogCiBTdGVwUmFuZ2UgRGF0ZVRpbWVMb2NhbElucHV0
VHlwZTo6Y3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbmcpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBzdGVwQmFz
ZSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKG1pbkF0dHIpLCAwKTsKLSAgICBjb25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRvTnVt
YmVyKGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwg
RGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWluaW11bURhdGVUaW1lKCkpKTsK
LSAgICBjb25zdCBEZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+YXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtYXhBdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJs
ZShEYXRlQ29tcG9uZW50czo6bWF4aW11bURhdGVUaW1lKCkpKTsKLSAgICBjb25zdCBEZWNpbWFs
IHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIGRhdGVUaW1lTG9j
YWxTdGVwRGVzY3JpcHRpb24sIGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihzdGVwQXR0cikpOworICAgIGNvbnN0IERlY2ltYWwgc3RlcEJhc2UgPSBwYXJzZVRvTnVt
YmVyKGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpLCAw
KTsKKyAgICBjb25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpLCBEZWNpbWFsOjpmcm9tRG91
YmxlKERhdGVDb21wb25lbnRzOjptaW5pbXVtRGF0ZVRpbWUoKSkpOworICAgIGNvbnN0IERlY2lt
YWwgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24obWF4QXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6
Om1heGltdW1EYXRlVGltZSgpKSk7CisgICAgY29uc3QgRGVjaW1hbCBzdGVwID0gU3RlcFJhbmdl
OjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCBkYXRlVGltZUxvY2FsU3RlcERlc2NyaXB0aW9u
LCBlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzdGVwQXR0cikpOwog
ICAgIHJldHVybiBTdGVwUmFuZ2Uoc3RlcEJhc2UsIFJhbmdlTGltaXRhdGlvbnM6OlZhbGlkLCBt
aW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBkYXRlVGltZUxvY2FsU3RlcERlc2NyaXB0aW9uKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9FbWFpbElucHV0VHlwZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0VtYWlsSW5wdXRUeXBlLmNwcAppbmRleCA0MjU1MzY5Mzk4OGI5
M2RkMWI1OTAzZjMyMTE4MWRmOTkyMTI5M2FlLi5kZTMyMGIzMzkyYjllNTE5ZWY5NGYzYzJmYWJk
MDRlNjgwZDA3ODNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0VtYWlsSW5wdXRU
eXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0VtYWlsSW5wdXRUeXBlLmNwcApAQCAt
NTksMTAgKzU5LDkgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBFbWFpbElucHV0VHlwZTo6Zm9ybUNv
bnRyb2xUeXBlKCkgY29uc3QKIAogYm9vbCBFbWFpbElucHV0VHlwZTo6dHlwZU1pc21hdGNoRm9y
KGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAg
ICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
ZWxlbWVudCgpLT5tdWx0aXBsZSgpKQorICAgIGlmICghZWxlbWVudCgpLm11bHRpcGxlKCkpCiAg
ICAgICAgIHJldHVybiAhaXNWYWxpZEVtYWlsQWRkcmVzcyh2YWx1ZSk7CiAgICAgZm9yIChhdXRv
JiBhZGRyZXNzIDogdmFsdWUuc3BsaXRBbGxvd2luZ0VtcHR5RW50cmllcygnLCcpKSB7CiAgICAg
ICAgIGlmICghaXNWYWxpZEVtYWlsQWRkcmVzcyhzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxT
cGFjZXMoYWRkcmVzcykpKQpAQCAtNzMsMTQgKzcyLDEyIEBAIGJvb2wgRW1haWxJbnB1dFR5cGU6
OnR5cGVNaXNtYXRjaEZvcihjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogCiBib29sIEVtYWls
SW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2goKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkp
OwotICAgIHJldHVybiB0eXBlTWlzbWF0Y2hGb3IoZWxlbWVudCgpLT52YWx1ZSgpKTsKKyAgICBy
ZXR1cm4gdHlwZU1pc21hdGNoRm9yKGVsZW1lbnQoKS52YWx1ZSgpKTsKIH0KIAogU3RyaW5nIEVt
YWlsSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2hUZXh0KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxl
bWVudCgpKTsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5tdWx0aXBsZSgpID8gdmFsaWRhdGlvbk1l
c3NhZ2VUeXBlTWlzbWF0Y2hGb3JNdWx0aXBsZUVtYWlsVGV4dCgpIDogdmFsaWRhdGlvbk1lc3Nh
Z2VUeXBlTWlzbWF0Y2hGb3JFbWFpbFRleHQoKTsKKyAgICByZXR1cm4gZWxlbWVudCgpLm11bHRp
cGxlKCkgPyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvck11bHRpcGxlRW1haWxUZXh0
KCkgOiB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvckVtYWlsVGV4dCgpOwogfQogCiBi
b29sIEVtYWlsSW5wdXRUeXBlOjppc0VtYWlsRmllbGQoKSBjb25zdApAQCAtOTYsOCArOTMsNyBA
QCBib29sIEVtYWlsSW5wdXRUeXBlOjpzdXBwb3J0c1NlbGVjdGlvbkFQSSgpIGNvbnN0CiBTdHJp
bmcgRW1haWxJbnB1dFR5cGU6OnNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZh
bHVlKSBjb25zdAogewogICAgIFN0cmluZyBub0xpbmVCcmVha1ZhbHVlID0gcHJvcG9zZWRWYWx1
ZS5yZW1vdmVDaGFyYWN0ZXJzKGlzSFRNTExpbmVCcmVhayk7Ci0gICAgQVNTRVJUKGVsZW1lbnQo
KSk7Ci0gICAgaWYgKCFlbGVtZW50KCktPm11bHRpcGxlKCkpCisgICAgaWYgKCFlbGVtZW50KCku
bXVsdGlwbGUoKSkKICAgICAgICAgcmV0dXJuIHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNw
YWNlcyhub0xpbmVCcmVha1ZhbHVlKTsKICAgICBWZWN0b3I8U3RyaW5nPiBhZGRyZXNzZXMgPSBu
b0xpbmVCcmVha1ZhbHVlLnNwbGl0QWxsb3dpbmdFbXB0eUVudHJpZXMoJywnKTsKICAgICBTdHJp
bmdCdWlsZGVyIHN0cmlwcGVkVmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0ZpbGVJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNw
cAppbmRleCAwM2FmM2E5NjM0OTRmYWYwMDEyZTIxYTkzOGY1MTkxNzgwMzA4NTA4Li45OTM5ZDJm
NjQ4NjNlYWQzMTczMDBiOTViYjIyYTNiYjllZWI5OGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRmls
ZUlucHV0VHlwZS5jcHAKQEAgLTE1MywxMSArMTUzLDEwIEBAIHZvaWQgRmlsZUlucHV0VHlwZTo6
cmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3QgRm9ybUNvbnRyb2xTdGF0ZSYgc3RhdGUpCiAK
IGJvb2wgRmlsZUlucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRE9NRm9ybURhdGEmIGZvcm1EYXRh
LCBib29sIG11bHRpcGFydCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBh
dXRvIGZpbGVMaXN0ID0gbWFrZVJlZlB0cihlbGVtZW50KCktPmZpbGVzKCkpOworICAgIGF1dG8g
ZmlsZUxpc3QgPSBtYWtlUmVmUHRyKGVsZW1lbnQoKS5maWxlcygpKTsKICAgICBBU1NFUlQoZmls
ZUxpc3QpOwogCi0gICAgYXV0byBuYW1lID0gZWxlbWVudCgpLT5uYW1lKCk7CisgICAgYXV0byBu
YW1lID0gZWxlbWVudCgpLm5hbWUoKTsKIAogICAgIGlmICghbXVsdGlwYXJ0KSB7CiAgICAgICAg
IC8vIFNlbmQgb25seSB0aGUgYmFzZW5hbWVzLgpAQCAtMTg3LDIwICsxODYsMTcgQEAgYm9vbCBG
aWxlSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShET01Gb3JtRGF0YSYgZm9ybURhdGEsIGJvb2wg
bXVsdGlwYXJ0KSBjb25zdAogCiBib29sIEZpbGVJbnB1dFR5cGU6OnZhbHVlTWlzc2luZyhjb25z
dCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJl
dHVybiBlbGVtZW50KCktPmlzUmVxdWlyZWQoKSAmJiB2YWx1ZS5pc0VtcHR5KCk7CisgICAgcmV0
dXJuIGVsZW1lbnQoKS5pc1JlcXVpcmVkKCkgJiYgdmFsdWUuaXNFbXB0eSgpOwogfQogCiBTdHJp
bmcgRmlsZUlucHV0VHlwZTo6dmFsdWVNaXNzaW5nVGV4dCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+bXVsdGlwbGUoKSA/IHZhbGlkYXRp
b25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yTXVsdGlwbGVGaWxlVGV4dCgpIDogdmFsaWRhdGlvbk1l
c3NhZ2VWYWx1ZU1pc3NpbmdGb3JGaWxlVGV4dCgpOworICAgIHJldHVybiBlbGVtZW50KCkubXVs
dGlwbGUoKSA/IHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yTXVsdGlwbGVGaWxlVGV4
dCgpIDogdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JGaWxlVGV4dCgpOwogfQogCiB2
b2lkIEZpbGVJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQmIGV2ZW50KQog
ewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGF1dG8mIGlucHV0ID0gKmVsZW1lbnQoKTsK
KyAgICBhdXRvJiBpbnB1dCA9IGVsZW1lbnQoKTsKIAogICAgIGlmIChpbnB1dC5pc0Rpc2FibGVk
Rm9ybUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjI3LDggKzIyMyw3IEBAIHZvaWQg
RmlsZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCYgZXZlbnQpCiAKIFJl
bmRlclB0cjxSZW5kZXJFbGVtZW50PiBGaWxlSW5wdXRUeXBlOjpjcmVhdGVJbnB1dFJlbmRlcmVy
KFJlbmRlclN0eWxlJiYgc3R5bGUpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0
dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlckZpbGVVcGxvYWRDb250cm9sPigqZWxlbWVudCgpLCBX
VEZNb3ZlKHN0eWxlKSk7CisgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlckZpbGVVcGxv
YWRDb250cm9sPihlbGVtZW50KCksIFdURk1vdmUoc3R5bGUpKTsKIH0KIAogYm9vbCBGaWxlSW5w
dXRUeXBlOjpjYW5TZXRTdHJpbmdWYWx1ZSgpIGNvbnN0CkBAIC0yNzIsOCArMjY3LDcgQEAgdm9p
ZCBGaWxlSW5wdXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBib29sLCBUZXh0RmllbGRF
dmVudEJlaGF2aW9yKQogICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgY2xlYXIgdGhlIGZpbGUgbGlz
dCwgb3IgcmVwbGFjZSBpdCB3aXRoIGEgbmV3IGVtcHR5IG9uZSBoZXJlPyBUaGlzIGlzIG9ic2Vy
dmFibGUgZnJvbSBKYXZhU2NyaXB0IHRocm91Z2ggY3VzdG9tIHByb3BlcnRpZXMuCiAgICAgbV9m
aWxlTGlzdC0+Y2xlYXIoKTsKICAgICBtX2ljb24gPSBudWxscHRyOwotICAgIEFTU0VSVChlbGVt
ZW50KCkpOwotICAgIGVsZW1lbnQoKS0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOworICAg
IGVsZW1lbnQoKS5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIGJvb2wgRmlsZUlu
cHV0VHlwZTo6aXNGaWxlVXBsb2FkKCkgY29uc3QKQEAgLTI4MywyOCArMjc3LDI2IEBAIGJvb2wg
RmlsZUlucHV0VHlwZTo6aXNGaWxlVXBsb2FkKCkgY29uc3QKIAogdm9pZCBGaWxlSW5wdXRUeXBl
OjpjcmVhdGVTaGFkb3dTdWJ0cmVlKCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBB
U1NFUlQoZWxlbWVudCgpLT5zaGFkb3dSb290KCkpOwotICAgIGVsZW1lbnQoKS0+dXNlckFnZW50
U2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZChlbGVtZW50KCktPm11bHRpcGxlKCkgPyBVcGxvYWRC
dXR0b25FbGVtZW50OjpjcmVhdGVGb3JNdWx0aXBsZShlbGVtZW50KCktPmRvY3VtZW50KCkpOiBV
cGxvYWRCdXR0b25FbGVtZW50OjpjcmVhdGUoZWxlbWVudCgpLT5kb2N1bWVudCgpKSk7CisgICAg
QVNTRVJUKGVsZW1lbnQoKS5zaGFkb3dSb290KCkpOworICAgIGVsZW1lbnQoKS51c2VyQWdlbnRT
aGFkb3dSb290KCktPmFwcGVuZENoaWxkKGVsZW1lbnQoKS5tdWx0aXBsZSgpID8gVXBsb2FkQnV0
dG9uRWxlbWVudDo6Y3JlYXRlRm9yTXVsdGlwbGUoZWxlbWVudCgpLmRvY3VtZW50KCkpOiBVcGxv
YWRCdXR0b25FbGVtZW50OjpjcmVhdGUoZWxlbWVudCgpLmRvY3VtZW50KCkpKTsKIH0KIAogdm9p
ZCBGaWxlSW5wdXRUeXBlOjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCgpCiB7Ci0gICAgQVNTRVJUKGVs
ZW1lbnQoKSk7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKS0+c2hhZG93Um9vdCgpKTsKKyAgICBBU1NF
UlQoZWxlbWVudCgpLnNoYWRvd1Jvb3QoKSk7CiAKLSAgICBhdXRvIHJvb3QgPSBlbGVtZW50KCkt
PnVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKKyAgICBhdXRvIHJvb3QgPSBlbGVtZW50KCkudXNlckFn
ZW50U2hhZG93Um9vdCgpOwogICAgIGlmICghcm9vdCkKICAgICAgICAgcmV0dXJuOwogICAgIAog
ICAgIGlmIChhdXRvIGJ1dHRvbiA9IG1ha2VSZWZQdHIoY2hpbGRyZW5PZlR5cGU8VXBsb2FkQnV0
dG9uRWxlbWVudD4oKnJvb3QpLmZpcnN0KCkpKQotICAgICAgICBidXR0b24tPnNldEJvb2xlYW5B
dHRyaWJ1dGUoZGlzYWJsZWRBdHRyLCBlbGVtZW50KCktPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgp
KTsKKyAgICAgICAgYnV0dG9uLT5zZXRCb29sZWFuQXR0cmlidXRlKGRpc2FibGVkQXR0ciwgZWxl
bWVudCgpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKTsKIH0KIAogdm9pZCBGaWxlSW5wdXRUeXBl
OjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiB7CiAgICAgaWYg
KG5hbWUgPT0gbXVsdGlwbGVBdHRyKSB7Ci0gICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gdGhp
cy0+ZWxlbWVudCgpKSB7CisgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVu
dFB0cigpKSB7CiAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC0+c2hhZG93Um9vdCgpKTsKICAg
ICAgICAgICAgIGlmIChhdXRvIHJvb3QgPSBlbGVtZW50LT51c2VyQWdlbnRTaGFkb3dSb290KCkp
IHsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBidXR0b24gPSBtYWtlUmVmUHRyKGNoaWxkcmVu
T2ZUeXBlPFVwbG9hZEJ1dHRvbkVsZW1lbnQ+KCpyb290KS5maXJzdCgpKSkKQEAgLTM0OSw4ICsz
NDEsNyBAQCBib29sIEZpbGVJbnB1dFR5cGU6OmFsbG93c0RpcmVjdG9yaWVzKCkgY29uc3QKIHsK
ICAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuZGlyZWN0
b3J5VXBsb2FkRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKGVs
ZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbih3ZWJraXRkaXJlY3RvcnlBdHRyKTsKKyAgICByZXR1cm4gZWxlbWVudCgpLmhh
c0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24od2Via2l0ZGlyZWN0b3J5QXR0cik7CiB9
CiAKIHZvaWQgRmlsZUlucHV0VHlwZTo6c2V0RmlsZXMoUmVmUHRyPEZpbGVMaXN0PiYmIGZpbGVz
KQpAQCAtMzYzLDggKzM1NCw3IEBAIHZvaWQgRmlsZUlucHV0VHlwZTo6c2V0RmlsZXMoUmVmUHRy
PEZpbGVMaXN0PiYmIGZpbGVzLCBSZXF1ZXN0SWNvbiBzaG91bGRSZXF1ZXN0CiAgICAgaWYgKCFm
aWxlcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgUmVm
PEhUTUxJbnB1dEVsZW1lbnQ+IHByb3RlY3RlZElucHV0RWxlbWVudCgqZWxlbWVudCgpKTsKKyAg
ICBSZWY8SFRNTElucHV0RWxlbWVudD4gcHJvdGVjdGVkSW5wdXRFbGVtZW50KGVsZW1lbnQoKSk7
CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBmaWxlcy0+bGVuZ3RoKCk7CiAKQEAgLTQzNCw4ICs0
MjQsNyBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6Omljb25Mb2FkZWQoUmVmUHRyPEljb24+JiYgaWNv
bikKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pY29uID0gV1RGTW92ZShpY29uKTsKLSAgICBB
U1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBlbGVtZW50KCktPnJl
bmRlcmVyKCkpCisgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudCgpLnJlbmRlcmVyKCkp
CiAgICAgICAgIHJlbmRlcmVyLT5yZXBhaW50KCk7CiB9CiAKQEAgLTQ0Niw4ICs0MzUsNyBAQCBi
b29sIEZpbGVJbnB1dFR5cGU6OnJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEmIGRy
YWdEYXRhKQogICAgIGlmIChwYXRocy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGlmIChlbGVtZW50KCktPmhhc0F0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obXVsdGlwbGVBdHRyKSkgeworICAgIGlmIChlbGVtZW50
KCkuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtdWx0aXBsZUF0dHIpKSB7CiAg
ICAgICAgIFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiBmaWxlczsKICAgICAgICAgZmlsZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRocy5zaXplKCkpOwogICAgICAgICBmb3IgKGF1dG8m
IHBhdGggOiBwYXRocykKQEAgLTQ3MCw4ICs0NTgsNyBAQCBTdHJpbmcgRmlsZUlucHV0VHlwZTo6
ZGVmYXVsdFRvb2xUaXAoKSBjb25zdAogewogICAgIHVuc2lnbmVkIGxpc3RTaXplID0gbV9maWxl
TGlzdC0+bGVuZ3RoKCk7CiAgICAgaWYgKCFsaXN0U2l6ZSkgewotICAgICAgICBBU1NFUlQoZWxl
bWVudCgpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQoKS0+bXVsdGlwbGUoKSkKKyAgICAgICAgaWYg
KGVsZW1lbnQoKS5tdWx0aXBsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZpbGVCdXR0b25Ob0Zp
bGVzU2VsZWN0ZWRMYWJlbCgpOwogICAgICAgICByZXR1cm4gZmlsZUJ1dHRvbk5vRmlsZVNlbGVj
dGVkTGFiZWwoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hpZGRl
bklucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hpZGRlbklucHV0VHlwZS5jcHAK
aW5kZXggYTg4MmM4ZmM1OTM5NDgzMWVjODA0YWZhMmM5Yzc2YjAxZTdiYjc2Ni4uNjk3MDZlMjVh
ODBkMjE0MjQxY2E2Y2JkMmZkNjZkYWRhMzdlZDdjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IaWRkZW5JbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSGlk
ZGVuSW5wdXRUeXBlLmNwcApAQCAtNTIsMTQgKzUyLDEyIEBAIEZvcm1Db250cm9sU3RhdGUgSGlk
ZGVuSW5wdXRUeXBlOjpzYXZlRm9ybUNvbnRyb2xTdGF0ZSgpIGNvbnN0CiB7CiAgICAgLy8gdmFs
dWVBdHRyaWJ1dGVXYXNVcGRhdGVkQWZ0ZXJQYXJzaW5nKCkgbmV2ZXIgYmUgdHJ1ZSBmb3IgZm9y
bSBjb250cm9scyBjcmVhdGUgYnkgY3JlYXRlRWxlbWVudCgpIG9yIGNsb25lTm9kZSgpLgogICAg
IC8vIEl0J3MgT0sgZm9yIG5vdyBiZWNhdXNlIHdlIHJlc3RvcmUgdmFsdWVzIG9ubHkgdG8gZm9y
bSBjb250cm9scyBjcmVhdGVkIGJ5IHBhcnNpbmcuCi0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0g
ICAgcmV0dXJuIGVsZW1lbnQoKS0+dmFsdWVBdHRyaWJ1dGVXYXNVcGRhdGVkQWZ0ZXJQYXJzaW5n
KCkgPyBGb3JtQ29udHJvbFN0YXRlIHsgeyBlbGVtZW50KCktPnZhbHVlKCkgfSB9IDogRm9ybUNv
bnRyb2xTdGF0ZSB7IH07CisgICAgcmV0dXJuIGVsZW1lbnQoKS52YWx1ZUF0dHJpYnV0ZVdhc1Vw
ZGF0ZWRBZnRlclBhcnNpbmcoKSA/IEZvcm1Db250cm9sU3RhdGUgeyB7IGVsZW1lbnQoKS52YWx1
ZSgpIH0gfSA6IEZvcm1Db250cm9sU3RhdGUgeyB9OwogfQogCiB2b2lkIEhpZGRlbklucHV0VHlw
ZTo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3QgRm9ybUNvbnRyb2xTdGF0ZSYgc3RhdGUp
CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgZWxlbWVudCgpLT5zZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKHZhbHVlQXR0ciwgc3RhdGVbMF0pOworICAgIGVsZW1lbnQo
KS5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHZhbHVlQXR0ciwgc3RhdGVbMF0p
OwogfQogCiBib29sIEhpZGRlbklucHV0VHlwZTo6c3VwcG9ydHNWYWxpZGF0aW9uKCkgY29uc3QK
QEAgLTg5LDggKzg3LDcgQEAgYm9vbCBIaWRkZW5JbnB1dFR5cGU6OnN0b3Jlc1ZhbHVlU2VwYXJh
dGVGcm9tQXR0cmlidXRlKCkKIAogdm9pZCBIaWRkZW5JbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0
IFN0cmluZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IpCiB7
Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgZWxlbWVudCgpLT5zZXRBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKHZhbHVlQXR0ciwgc2FuaXRpemVkVmFsdWUpOworICAgIGVsZW1l
bnQoKS5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHZhbHVlQXR0ciwgc2FuaXRp
emVkVmFsdWUpOwogfQogCiBib29sIEhpZGRlbklucHV0VHlwZTo6aXNIaWRkZW5UeXBlKCkgY29u
c3QKQEAgLTEwMCw4ICs5Nyw3IEBAIGJvb2wgSGlkZGVuSW5wdXRUeXBlOjppc0hpZGRlblR5cGUo
KSBjb25zdAogCiBib29sIEhpZGRlbklucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRE9NRm9ybURh
dGEmIGZvcm1EYXRhLCBib29sIGlzTXVsdGlwYXJ0Rm9ybSkgY29uc3QKIHsKLSAgICBBU1NFUlQo
ZWxlbWVudCgpKTsKLSAgICBhdXRvIG5hbWUgPSBlbGVtZW50KCktPm5hbWUoKTsKKyAgICBhdXRv
IG5hbWUgPSBlbGVtZW50KCkubmFtZSgpOwogCiAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UobmFtZSwgIl9jaGFyc2V0XyIpKSB7CiAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChuYW1lLCBT
dHJpbmcgeyBmb3JtRGF0YS5lbmNvZGluZygpLm5hbWUoKSB9KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZUlucHV0VHlwZS5jcHAKaW5kZXggMmIwZjFlZDY2ODI4ZjEyNmE3ZTE1OWEwNGIxY2JhOGMw
OGM1YWFhMC4uYWM1ZDZiMjY3MGQ0YmZhZjExMzZiNmFlM2UwOTVkOWE1MmZlNGI2NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAKQEAgLTU2LDExICs1NiwxMCBAQCBib29s
IEltYWdlSW5wdXRUeXBlOjppc0Zvcm1EYXRhQXBwZW5kYWJsZSgpIGNvbnN0CiAKIGJvb2wgSW1h
Z2VJbnB1dFR5cGU6OmFwcGVuZEZvcm1EYXRhKERPTUZvcm1EYXRhJiBmb3JtRGF0YSwgYm9vbCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAoIWVsZW1lbnQoKS0+aXNB
Y3RpdmF0ZWRTdWJtaXQoKSkKKyAgICBpZiAoIWVsZW1lbnQoKS5pc0FjdGl2YXRlZFN1Ym1pdCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBuYW1lID0gZWxlbWVudCgpLT5u
YW1lKCk7CisgICAgYXV0byYgbmFtZSA9IGVsZW1lbnQoKS5uYW1lKCk7CiAgICAgaWYgKG5hbWUu
aXNFbXB0eSgpKSB7CiAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgieCJfcywgU3RyaW5nOjpudW1i
ZXIobV9jbGlja0xvY2F0aW9uLngoKSkpOwogICAgICAgICBmb3JtRGF0YS5hcHBlbmQoInkiX3Ms
IFN0cmluZzo6bnVtYmVyKG1fY2xpY2tMb2NhdGlvbi55KCkpKTsKQEAgLTcwLDcgKzY5LDcgQEAg
Ym9vbCBJbWFnZUlucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRE9NRm9ybURhdGEmIGZvcm1EYXRh
LCBib29sKSBjb25zdAogICAgIGZvcm1EYXRhLmFwcGVuZChtYWtlU3RyaW5nKG5hbWUsICIueCIp
LCBTdHJpbmc6Om51bWJlcihtX2NsaWNrTG9jYXRpb24ueCgpKSk7CiAgICAgZm9ybURhdGEuYXBw
ZW5kKG1ha2VTdHJpbmcobmFtZSwgIi55IiksIFN0cmluZzo6bnVtYmVyKG1fY2xpY2tMb2NhdGlv
bi55KCkpKTsKIAotICAgIGF1dG8gdmFsdWUgPSBlbGVtZW50KCktPnZhbHVlKCk7CisgICAgYXV0
byB2YWx1ZSA9IGVsZW1lbnQoKS52YWx1ZSgpOwogICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKQog
ICAgICAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpOwogCkBAIC04NCw4ICs4Myw3IEBA
IGJvb2wgSW1hZ2VJbnB1dFR5cGU6OnN1cHBvcnRzVmFsaWRhdGlvbigpIGNvbnN0CiAKIHZvaWQg
SW1hZ2VJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQmIGV2ZW50KQogewot
ICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIFJlZjxIVE1MSW5wdXRFbGVtZW50PiBwcm90ZWN0
ZWRFbGVtZW50KCplbGVtZW50KCkpOworICAgIFJlZjxIVE1MSW5wdXRFbGVtZW50PiBwcm90ZWN0
ZWRFbGVtZW50KGVsZW1lbnQoKSk7CiAgICAgaWYgKHByb3RlY3RlZEVsZW1lbnQtPmlzRGlzYWJs
ZWRGb3JtQ29udHJvbCgpIHx8ICFwcm90ZWN0ZWRFbGVtZW50LT5mb3JtKCkpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMTE2LDIwICsxMTQsMTkgQEAgdm9pZCBJbWFnZUlucHV0VHlwZTo6aGFuZGxl
RE9NQWN0aXZhdGVFdmVudChFdmVudCYgZXZlbnQpCiAKIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50
PiBJbWFnZUlucHV0VHlwZTo6Y3JlYXRlSW5wdXRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxl
KQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxS
ZW5kZXJJbWFnZT4oKmVsZW1lbnQoKSwgV1RGTW92ZShzdHlsZSkpOworICAgIHJldHVybiBjcmVh
dGVSZW5kZXJlcjxSZW5kZXJJbWFnZT4oZWxlbWVudCgpLCBXVEZNb3ZlKHN0eWxlKSk7CiB9CiAK
IHZvaWQgSW1hZ2VJbnB1dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSkKIHsKICAgICBpZiAobmFtZSA9PSBhbHRBdHRyKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKSB7CisgICAgICAgIGlmIChhdXRvKiBlbGVtZW50
ID0gdGhpcy0+ZWxlbWVudFB0cigpKSB7CiAgICAgICAgICAgICBhdXRvKiByZW5kZXJlciA9IGVs
ZW1lbnQtPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBpZiAoaXM8UmVuZGVySW1hZ2U+KHJlbmRl
cmVyKSkKICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJJbWFnZT4oKnJlbmRlcmVyKS51
cGRhdGVBbHRUZXh0KCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gc3JjQXR0
cikgewotICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkgeworICAg
ICAgICBpZiAoYXV0byogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnRQdHIoKSkgewogICAgICAgICAg
ICAgaWYgKGVsZW1lbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgZWxlbWVudC0+ZW5z
dXJlSW1hZ2VMb2FkZXIoKS51cGRhdGVGcm9tRWxlbWVudElnbm9yaW5nUHJldmlvdXNFcnJvcigp
OwogICAgICAgICB9CkBAIC0xNDEsMTEgKzEzOCwxMCBAQCB2b2lkIEltYWdlSW5wdXRUeXBlOjph
dHRhY2goKQogewogICAgIEJhc2VCdXR0b25JbnB1dFR5cGU6OmF0dGFjaCgpOwogCi0gICAgQVNT
RVJUKGVsZW1lbnQoKSk7Ci0gICAgSFRNTEltYWdlTG9hZGVyJiBpbWFnZUxvYWRlciA9IGVsZW1l
bnQoKS0+ZW5zdXJlSW1hZ2VMb2FkZXIoKTsKKyAgICBIVE1MSW1hZ2VMb2FkZXImIGltYWdlTG9h
ZGVyID0gZWxlbWVudCgpLmVuc3VyZUltYWdlTG9hZGVyKCk7CiAgICAgaW1hZ2VMb2FkZXIudXBk
YXRlRnJvbUVsZW1lbnQoKTsKIAotICAgIGF1dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVy
SW1hZ2U+KGVsZW1lbnQoKS0+cmVuZGVyZXIoKSk7CisgICAgYXV0byogcmVuZGVyZXIgPSBkb3du
Y2FzdDxSZW5kZXJJbWFnZT4oZWxlbWVudCgpLnJlbmRlcmVyKCkpOwogICAgIGlmICghcmVuZGVy
ZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTg4LDggKzE4NCw3IEBAIGJvb2wgSW1hZ2VJbnB1
dFR5cGU6OnNob3VsZFJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMoKQogCiB1bnNpZ25l
ZCBJbWFnZUlucHV0VHlwZTo6aGVpZ2h0KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgp
KTsKLSAgICBSZWY8SFRNTElucHV0RWxlbWVudD4gZWxlbWVudCgqdGhpcy0+ZWxlbWVudCgpKTsK
KyAgICBSZWY8SFRNTElucHV0RWxlbWVudD4gZWxlbWVudCh0aGlzLT5lbGVtZW50KCkpOwogCiAg
ICAgZWxlbWVudC0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKIApAQCAtMjEwLDggKzIwNSw3
IEBAIHVuc2lnbmVkIEltYWdlSW5wdXRUeXBlOjpoZWlnaHQoKSBjb25zdAogCiB1bnNpZ25lZCBJ
bWFnZUlucHV0VHlwZTo6d2lkdGgoKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwot
ICAgIFJlZjxIVE1MSW5wdXRFbGVtZW50PiBlbGVtZW50KCp0aGlzLT5lbGVtZW50KCkpOworICAg
IFJlZjxIVE1MSW5wdXRFbGVtZW50PiBlbGVtZW50KHRoaXMtPmVsZW1lbnQoKSk7CiAKICAgICBl
bGVtZW50LT5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlw
ZS5jcHAKaW5kZXggOTE2N2ZlOWQ5MjJjNTJhNWY4NTI2YzAyNDNlZDZiODQwM2M5OWI1Yi4uODIy
Yjk0YTEyYTg3ZWIzY2Q0OWRkY2IzZDhlNmI5M2ZiOGI4ZTY3OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5w
dXRUeXBlLmNwcApAQCAtMTkzLDMxICsxOTMsMjcgQEAgYm9vbCBJbnB1dFR5cGU6OnNob3VsZFNh
dmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSgpIGNvbnN0CiAKIEZvcm1Db250cm9sU3RhdGUg
SW5wdXRUeXBlOjpzYXZlRm9ybUNvbnRyb2xTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVs
ZW1lbnQoKSk7Ci0gICAgYXV0byBjdXJyZW50VmFsdWUgPSBlbGVtZW50KCktPnZhbHVlKCk7Ci0g
ICAgaWYgKGN1cnJlbnRWYWx1ZSA9PSBlbGVtZW50KCktPmRlZmF1bHRWYWx1ZSgpKQorICAgIGF1
dG8gY3VycmVudFZhbHVlID0gZWxlbWVudCgpLnZhbHVlKCk7CisgICAgaWYgKGN1cnJlbnRWYWx1
ZSA9PSBlbGVtZW50KCkuZGVmYXVsdFZhbHVlKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAg
cmV0dXJuIHsgeyBjdXJyZW50VmFsdWUgfSB9OwogfQogCiB2b2lkIElucHV0VHlwZTo6cmVzdG9y
ZUZvcm1Db250cm9sU3RhdGUoY29uc3QgRm9ybUNvbnRyb2xTdGF0ZSYgc3RhdGUpCiB7Ci0gICAg
QVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgZWxlbWVudCgpLT5zZXRWYWx1ZShzdGF0ZVswXSk7Cisg
ICAgZWxlbWVudCgpLnNldFZhbHVlKHN0YXRlWzBdKTsKIH0KIAogYm9vbCBJbnB1dFR5cGU6Omlz
Rm9ybURhdGFBcHBlbmRhYmxlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKICAg
ICAvLyBUaGVyZSBpcyBubyBmb3JtIGRhdGEgdW5sZXNzIHRoZXJlJ3MgYSBuYW1lIGZvciBub24t
aW1hZ2UgdHlwZXMuCi0gICAgcmV0dXJuICFlbGVtZW50KCktPm5hbWUoKS5pc0VtcHR5KCk7Cisg
ICAgcmV0dXJuICFlbGVtZW50KCkubmFtZSgpLmlzRW1wdHkoKTsKIH0KIAogYm9vbCBJbnB1dFR5
cGU6OmFwcGVuZEZvcm1EYXRhKERPTUZvcm1EYXRhJiBmb3JtRGF0YSwgYm9vbCkgY29uc3QKIHsK
LSAgICBBU1NFUlQoZWxlbWVudCgpKTsKICAgICAvLyBBbHdheXMgc3VjY2Vzc2Z1bC4KLSAgICBm
b3JtRGF0YS5hcHBlbmQoZWxlbWVudCgpLT5uYW1lKCksIGVsZW1lbnQoKS0+dmFsdWUoKSk7Cisg
ICAgZm9ybURhdGEuYXBwZW5kKGVsZW1lbnQoKS5uYW1lKCksIGVsZW1lbnQoKS52YWx1ZSgpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzIzLDggKzMxOSw3IEBAIGRvdWJsZSBJbnB1dFR5
cGU6Om1heGltdW0oKSBjb25zdAogCiBib29sIElucHV0VHlwZTo6c2l6ZVNob3VsZEluY2x1ZGVE
ZWNvcmF0aW9uKGludCwgaW50JiBwcmVmZXJyZWRTaXplKSBjb25zdAogewotICAgIEFTU0VSVChl
bGVtZW50KCkpOwotICAgIHByZWZlcnJlZFNpemUgPSBlbGVtZW50KCktPnNpemUoKTsKKyAgICBw
cmVmZXJyZWRTaXplID0gZWxlbWVudCgpLnNpemUoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
QEAgLTM5NSw4ICszOTAsNyBAQCBTdHJpbmcgSW5wdXRUeXBlOjp2YWx1ZU1pc3NpbmdUZXh0KCkg
Y29uc3QKIAogU3RyaW5nIElucHV0VHlwZTo6dmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdAogewot
ICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIFN0cmluZyB2YWx1ZSA9IGVsZW1lbnQoKS0+dmFs
dWUoKTsKKyAgICBTdHJpbmcgdmFsdWUgPSBlbGVtZW50KCkudmFsdWUoKTsKIAogICAgIC8vIFRo
ZSBvcmRlciBvZiB0aGUgZm9sbG93aW5nIGNoZWNrcyBpcyBtZWFuaW5nZnVsLiBlLmcuIFdlJ2Qg
bGlrZSB0byBzaG93IHRoZQogICAgIC8vIGJhZElucHV0IG1lc3NhZ2UgZXZlbiBpZiB0aGUgY29u
dHJvbCBoYXMgb3RoZXIgdmFsaWRhdGlvbiBlcnJvcnMuCkBAIC00MTIsMTEgKzQwNiwxMSBAQCBT
dHJpbmcgSW5wdXRUeXBlOjp2YWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0CiAgICAgaWYgKHBhdHRl
cm5NaXNtYXRjaCh2YWx1ZSkpCiAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVBhdHRl
cm5NaXNtYXRjaFRleHQoKTsKIAotICAgIGlmIChlbGVtZW50KCktPnRvb1Nob3J0KCkpCi0gICAg
ICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVRvb1Nob3J0VGV4dChudW1HcmFwaGVtZUNsdXN0
ZXJzKHZhbHVlKSwgZWxlbWVudCgpLT5taW5MZW5ndGgoKSk7CisgICAgaWYgKGVsZW1lbnQoKS50
b29TaG9ydCgpKQorICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUb29TaG9ydFRleHQo
bnVtR3JhcGhlbWVDbHVzdGVycyh2YWx1ZSksIGVsZW1lbnQoKS5taW5MZW5ndGgoKSk7CiAKLSAg
ICBpZiAoZWxlbWVudCgpLT50b29Mb25nKCkpCi0gICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVz
c2FnZVRvb0xvbmdUZXh0KG51bUdyYXBoZW1lQ2x1c3RlcnModmFsdWUpLCBlbGVtZW50KCktPmVm
ZmVjdGl2ZU1heExlbmd0aCgpKTsKKyAgICBpZiAoZWxlbWVudCgpLnRvb0xvbmcoKSkKKyAgICAg
ICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVG9vTG9uZ1RleHQobnVtR3JhcGhlbWVDbHVzdGVy
cyh2YWx1ZSksIGVsZW1lbnQoKS5lZmZlY3RpdmVNYXhMZW5ndGgoKSk7CiAKICAgICBpZiAoIWlz
U3RlcHBhYmxlKCkpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwpAQCAtNDg2LDE0ICs0
ODAsMTIgQEAgYm9vbCBJbnB1dFR5cGU6OnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoRXZlbnQmIGV2
ZW50KQogCiBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gSW5wdXRUeXBlOjpjcmVhdGVJbnB1dFJl
bmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0g
ICAgcmV0dXJuIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PihSZW5kZXJFbGVtZW50OjpjcmVhdGVG
b3IoKmVsZW1lbnQoKSwgV1RGTW92ZShzdHlsZSkpKTsKKyAgICByZXR1cm4gUmVuZGVyUHRyPFJl
bmRlckVsZW1lbnQ+KFJlbmRlckVsZW1lbnQ6OmNyZWF0ZUZvcihlbGVtZW50KCksIFdURk1vdmUo
c3R5bGUpKSk7CiB9CiAKIHZvaWQgSW5wdXRUeXBlOjpibHVyKCkKIHsKLSAgICBBU1NFUlQoZWxl
bWVudCgpKTsKLSAgICBlbGVtZW50KCktPmRlZmF1bHRCbHVyKCk7CisgICAgZWxlbWVudCgpLmRl
ZmF1bHRCbHVyKCk7CiB9CiAKIHZvaWQgSW5wdXRUeXBlOjpjcmVhdGVTaGFkb3dTdWJ0cmVlKCkK
QEAgLTUwMiw4ICs0OTQsNyBAQCB2b2lkIElucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgp
CiAKIHZvaWQgSW5wdXRUeXBlOjpkZXN0cm95U2hhZG93U3VidHJlZSgpCiB7Ci0gICAgQVNTRVJU
KGVsZW1lbnQoKSk7Ci0gICAgUmVmUHRyPFNoYWRvd1Jvb3Q+IHJvb3QgPSBlbGVtZW50KCktPnVz
ZXJBZ2VudFNoYWRvd1Jvb3QoKTsKKyAgICBSZWZQdHI8U2hhZG93Um9vdD4gcm9vdCA9IGVsZW1l
bnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCk7CiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1
cm47CiAKQEAgLTU0MiwxNiArNTMzLDE0IEBAIERhdGVDb21wb25lbnRzOjpUeXBlIElucHV0VHlw
ZTo6ZGF0ZVR5cGUoKSBjb25zdAogCiB2b2lkIElucHV0VHlwZTo6ZGlzcGF0Y2hTaW11bGF0ZWRD
bGlja0lmQWN0aXZlKEtleWJvYXJkRXZlbnQmIGV2ZW50KSBjb25zdAogewotICAgIEFTU0VSVChl
bGVtZW50KCkpOwotICAgIGlmIChlbGVtZW50KCktPmFjdGl2ZSgpKQotICAgICAgICBlbGVtZW50
KCktPmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soJmV2ZW50KTsKKyAgICBpZiAoZWxlbWVudCgpLmFj
dGl2ZSgpKQorICAgICAgICBlbGVtZW50KCkuZGlzcGF0Y2hTaW11bGF0ZWRDbGljaygmZXZlbnQp
OwogICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CiAKIENocm9tZSogSW5wdXRUeXBl
OjpjaHJvbWUoKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGlmIChQYWdl
KiBwYWdlID0gZWxlbWVudCgpLT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICBpZiAoUGFnZSogcGFn
ZSA9IGVsZW1lbnQoKS5kb2N1bWVudCgpLnBhZ2UoKSkKICAgICAgICAgcmV0dXJuICZwYWdlLT5j
aHJvbWUoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTU2OCwxNCArNTU3LDEyIEBAIGJv
b2wgSW5wdXRUeXBlOjpoYXNDdXN0b21Gb2N1c0xvZ2ljKCkgY29uc3QKIAogYm9vbCBJbnB1dFR5
cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0CiB7Ci0g
ICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuICFlbGVtZW50KCktPmlzUmVhZE9ubHko
KSAmJiBlbGVtZW50KCktPmlzVGV4dEZvcm1Db250cm9sS2V5Ym9hcmRGb2N1c2FibGUoZXZlbnQp
OworICAgIHJldHVybiAhZWxlbWVudCgpLmlzUmVhZE9ubHkoKSAmJiBlbGVtZW50KCkuaXNUZXh0
Rm9ybUNvbnRyb2xLZXlib2FyZEZvY3VzYWJsZShldmVudCk7CiB9CiAKIGJvb2wgSW5wdXRUeXBl
Ojppc01vdXNlRm9jdXNhYmxlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAg
ICByZXR1cm4gZWxlbWVudCgpLT5pc1RleHRGb3JtQ29udHJvbE1vdXNlRm9jdXNhYmxlKCk7Cisg
ICAgcmV0dXJuIGVsZW1lbnQoKS5pc1RleHRGb3JtQ29udHJvbE1vdXNlRm9jdXNhYmxlKCk7CiB9
CiAKIGJvb2wgSW5wdXRUeXBlOjpzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0CkBAIC01OTMs
OCArNTgwLDcgQEAgdm9pZCBJbnB1dFR5cGU6OmhhbmRsZUJsdXJFdmVudCgpCiAKIHZvaWQgSW5w
dXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oYm9vbCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsK
LSAgICBlbGVtZW50KCktPmZvY3VzKGZhbHNlKTsKKyAgICBlbGVtZW50KCkuZm9jdXMoZmFsc2Up
OwogfQogCiB2b2lkIElucHV0VHlwZTo6YWRkU2VhcmNoUmVzdWx0KCkKQEAgLTY2NSwxOSArNjUx
LDE4IEBAIGJvb2wgSW5wdXRUeXBlOjpzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgp
CiAKIHZvaWQgSW5wdXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHNhbml0aXplZFZhbHVl
LCBib29sIHZhbHVlQ2hhbmdlZCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9y
KQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGVsZW1lbnQoKS0+c2V0VmFsdWVJbnRl
cm5hbChzYW5pdGl6ZWRWYWx1ZSwgZXZlbnRCZWhhdmlvcik7Ci0gICAgZWxlbWVudCgpLT5pbnZh
bGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CisgICAgZWxlbWVudCgpLnNldFZhbHVlSW50ZXJuYWwo
c2FuaXRpemVkVmFsdWUsIGV2ZW50QmVoYXZpb3IpOworICAgIGVsZW1lbnQoKS5pbnZhbGlkYXRl
U3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgaWYgKCF2YWx1ZUNoYW5nZWQpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIHN3aXRjaCAoZXZlbnRCZWhhdmlvcikgewogICAgIGNhc2UgRGlzcGF0Y2hDaGFu
Z2VFdmVudDoKLSAgICAgICAgZWxlbWVudCgpLT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZl
bnQoKTsKKyAgICAgICAgZWxlbWVudCgpLmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudDoK
LSAgICAgICAgZWxlbWVudCgpLT5kaXNwYXRjaEZvcm1Db250cm9sSW5wdXRFdmVudCgpOwotICAg
ICAgICBpZiAoYXV0byBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50
KCkuZGlzcGF0Y2hGb3JtQ29udHJvbElucHV0RXZlbnQoKTsKKyAgICAgICAgaWYgKGF1dG8gZWxl
bWVudCA9IHRoaXMtPmVsZW1lbnRQdHIoKSkKICAgICAgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNo
Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERpc3Bh
dGNoTm9FdmVudDoKQEAgLTcwNSw4ICs2OTAsNyBAQCBTdHJpbmcgSW5wdXRUeXBlOjpsb2NhbGl6
ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29uc3QKIAogU3RyaW5nIElucHV0
VHlwZTo6dmlzaWJsZVZhbHVlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAg
ICByZXR1cm4gZWxlbWVudCgpLT52YWx1ZSgpOworICAgIHJldHVybiBlbGVtZW50KCkudmFsdWUo
KTsKIH0KIAogYm9vbCBJbnB1dFR5cGU6OmlzRW1wdHlWYWx1ZSgpIGNvbnN0CkBAIC05NjIsOCAr
OTQ2LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW5wdXRUeXBlOjphcHBseVN0ZXAoaW50IGNvdW50
LCBBbnlTdGVwSGFuZGxpbmcgYW55U3RlcEhhbmRsaW4KICAgICBpZiAoIXN0ZXBSYW5nZS5oYXNT
dGVwKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9Owog
Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBjdXJyZW50ID0gcGFy
c2VUb051bWJlck9yTmFOKGVsZW1lbnQoKS0+dmFsdWUoKSk7CisgICAgY29uc3QgRGVjaW1hbCBj
dXJyZW50ID0gcGFyc2VUb051bWJlck9yTmFOKGVsZW1lbnQoKS52YWx1ZSgpKTsKICAgICBpZiAo
IWN1cnJlbnQuaXNGaW5pdGUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRT
dGF0ZUVycm9yIH07CiAgICAgRGVjaW1hbCBuZXdWYWx1ZSA9IGN1cnJlbnQgKyBzdGVwUmFuZ2Uu
c3RlcCgpICogY291bnQ7CkBAIC05NzYsNyArOTU5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW5w
dXRUeXBlOjphcHBseVN0ZXAoaW50IGNvdW50LCBBbnlTdGVwSGFuZGxpbmcgYW55U3RlcEhhbmRs
aW4KICAgICBpZiAobmV3VmFsdWUgPCBzdGVwUmFuZ2UubWluaW11bSgpKQogICAgICAgICBuZXdW
YWx1ZSA9IHN0ZXBSYW5nZS5taW5pbXVtKCk7CiAKLSAgICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihz
dGVwQXR0ciksICJhbnkiKSkKKyAgICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHN0ZXBBdHRyKSwgImFu
eSIpKQogICAgICAgICBuZXdWYWx1ZSA9IHN0ZXBSYW5nZS5hbGlnblZhbHVlRm9yU3RlcChjdXJy
ZW50LCBuZXdWYWx1ZSk7CiAKICAgICBpZiAobmV3VmFsdWUgLSBzdGVwUmFuZ2UubWF4aW11bSgp
ID4gYWNjZXB0YWJsZUVycm9yVmFsdWUpCkBAIC05ODgsOCArOTcxLDggQEAgRXhjZXB0aW9uT3I8
dm9pZD4gSW5wdXRUeXBlOjphcHBseVN0ZXAoaW50IGNvdW50LCBBbnlTdGVwSGFuZGxpbmcgYW55
U3RlcEhhbmRsaW4KICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4gcmVzdWx0OwogCi0gICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZWxlbWVudCgpLT5k
b2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQotICAgICAgICBjYWNoZS0+cG9zdE5v
dGlmaWNhdGlvbihlbGVtZW50KCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkKTsKKyAg
ICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBlbGVtZW50KCkuZG9jdW1lbnQoKS5leGlzdGlu
Z0FYT2JqZWN0Q2FjaGUoKSkKKyAgICAgICAgY2FjaGUtPnBvc3ROb3RpZmljYXRpb24oZWxlbWVu
dFB0cigpLCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hhbmdlZCk7CiAKICAgICByZXR1cm4gcmVz
dWx0OwogfQpAQCAtMTA3Niw4ICsxMDU5LDcgQEAgdm9pZCBJbnB1dFR5cGU6OnN0ZXBVcEZyb21S
ZW5kZXJlcihpbnQgbikKICAgICBlbHNlCiAgICAgICAgIHNpZ24gPSAwOwogCi0gICAgQVNTRVJU
KGVsZW1lbnQoKSk7Ci0gICAgU3RyaW5nIGN1cnJlbnRTdHJpbmdWYWx1ZSA9IGVsZW1lbnQoKS0+
dmFsdWUoKTsKKyAgICBTdHJpbmcgY3VycmVudFN0cmluZ1ZhbHVlID0gZWxlbWVudCgpLnZhbHVl
KCk7CiAgICAgRGVjaW1hbCBjdXJyZW50ID0gcGFyc2VUb051bWJlck9yTmFOKGN1cnJlbnRTdHJp
bmdWYWx1ZSk7CiAgICAgaWYgKCFjdXJyZW50LmlzRmluaXRlKCkpIHsKICAgICAgICAgY3VycmVu
dCA9IGRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgpOwpAQCAtMTA5MSw3ICsxMDczLDcgQEAgdm9pZCBJ
bnB1dFR5cGU6OnN0ZXBVcEZyb21SZW5kZXJlcihpbnQgbikKICAgICBpZiAoKHNpZ24gPiAwICYm
IGN1cnJlbnQgPCBzdGVwUmFuZ2UubWluaW11bSgpKSB8fCAoc2lnbiA8IDAgJiYgY3VycmVudCA+
IHN0ZXBSYW5nZS5tYXhpbXVtKCkpKQogICAgICAgICBzZXRWYWx1ZUFzRGVjaW1hbChzaWduID4g
MCA/IHN0ZXBSYW5nZS5taW5pbXVtKCkgOiBzdGVwUmFuZ2UubWF4aW11bSgpLCBEaXNwYXRjaElu
cHV0QW5kQ2hhbmdlRXZlbnQpOwogICAgIGVsc2UgewotICAgICAgICBpZiAoc3RlcE1pc21hdGNo
KGVsZW1lbnQoKS0+dmFsdWUoKSkpIHsKKyAgICAgICAgaWYgKHN0ZXBNaXNtYXRjaChlbGVtZW50
KCkudmFsdWUoKSkpIHsKICAgICAgICAgICAgIEFTU0VSVCghc3RlcC5pc1plcm8oKSk7CiAgICAg
ICAgICAgICBjb25zdCBEZWNpbWFsIGJhc2UgPSBzdGVwUmFuZ2Uuc3RlcEJhc2UoKTsKICAgICAg
ICAgICAgIERlY2ltYWwgbmV3VmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0lucHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAppbmRleCBjOTk0
Y2NlNTIzY2M4NmI2NmNlOWVhODAyMzg0NzA2MzYyOWIyZThkLi44ZWVmNDkyZGQxMjIzM2JkZWFi
N2E2NjU1YmQ4ZjA5ZGEwNTI4NTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lu
cHV0VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKQEAgLTMwNiw3
ICszMDYsOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgSW5wdXRUeXBlKEhU
TUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgICAgIDogbV9lbGVtZW50KG1ha2VXZWFrUHRy
KGVsZW1lbnQpKSB7IH0KLSAgICBIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9lbGVtZW50LmdldCgpOyB9CisgICAgSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCgp
IGNvbnN0OworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnRQdHIoKSBjb25zdCB7IHJldHVy
biBtX2VsZW1lbnQuZ2V0KCk7IH0KICAgICBDaHJvbWUqIGNocm9tZSgpIGNvbnN0OwogICAgIERl
Y2ltYWwgcGFyc2VUb051bWJlck9yTmFOKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCkBAIC0zMTgs
NiArMzE5LDEzIEBAIHByaXZhdGU6CiAgICAgV2Vha1B0cjxIVE1MSW5wdXRFbGVtZW50PiBtX2Vs
ZW1lbnQ7CiB9OwogCitpbmxpbmUgSFRNTElucHV0RWxlbWVudCYgSW5wdXRUeXBlOjplbGVtZW50
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9lbGVtZW50LmdldCgpKTsKKyAgICByZXR1cm4gKm1f
ZWxlbWVudC5nZXQoKTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNkZWZpbmUg
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19JTlBVVF9UWVBFKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGlj
YXRlKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL01vbnRoSW5wdXRUeXBlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTW9udGhJbnB1dFR5cGUuY3BwCmluZGV4IGY5MmIzNTUz
NWExZDZlYTIzMzY3YTY5NjA1MmYxOGEyM2YxZTI0ZTEuLjZjNmQ0Zjg0MTc2ZWY1NmU5YzA2ZGI4
YWMxODdkNjJkOTM1M2ZmMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTW9udGhJ
bnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTW9udGhJbnB1dFR5cGUuY3Bw
CkBAIC02MCw5ICs2MCw4IEBAIERhdGVDb21wb25lbnRzOjpUeXBlIE1vbnRoSW5wdXRUeXBlOjpk
YXRlVHlwZSgpIGNvbnN0CiAKIGRvdWJsZSBNb250aElucHV0VHlwZTo6dmFsdWVBc0RhdGUoKSBj
b25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwogICAgIERhdGVDb21wb25lbnRzIGRhdGU7
Ci0gICAgaWYgKCFwYXJzZVRvRGF0ZUNvbXBvbmVudHMoZWxlbWVudCgpLT52YWx1ZSgpLCAmZGF0
ZSkpCisgICAgaWYgKCFwYXJzZVRvRGF0ZUNvbXBvbmVudHMoZWxlbWVudCgpLnZhbHVlKCksICZk
YXRlKSkKICAgICAgICAgcmV0dXJuIERhdGVDb21wb25lbnRzOjppbnZhbGlkTWlsbGlzZWNvbmRz
KCk7CiAgICAgZG91YmxlIG1zZWMgPSBkYXRlLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2goKTsKICAg
ICBBU1NFUlQoc3RkOjppc2Zpbml0ZShtc2VjKSk7CkBAIC05MiwxMSArOTEsMTAgQEAgRGVjaW1h
bCBNb250aElucHV0VHlwZTo6ZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCkgY29uc3QKIAogU3RlcFJh
bmdlIE1vbnRoSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRsaW5nIGFueVN0
ZXBIYW5kbGluZykgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBjb25zdCBE
ZWNpbWFsIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUobW9udGhEZWZh
dWx0U3RlcEJhc2UpKTsKLSAgICBjb25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVy
KGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwgRGVj
aW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWluaW11bU1vbnRoKCkpKTsKLSAgICBj
b25zdCBEZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+YXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihtYXhBdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRl
Q29tcG9uZW50czo6bWF4aW11bU1vbnRoKCkpKTsKLSAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBT
dGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIG1vbnRoU3RlcERlc2NyaXB0aW9u
LCBlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3RlcEF0dHIpKTsK
KyAgICBjb25zdCBEZWNpbWFsIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJs
ZShtb250aERlZmF1bHRTdGVwQmFzZSkpOworICAgIGNvbnN0IERlY2ltYWwgbWluaW11bSA9IHBh
cnNlVG9OdW1iZXIoZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWlu
QXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1Nb250aCgp
KSk7CisgICAgY29uc3QgRGVjaW1hbCBtYXhpbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCku
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtYXhBdHRyKSwgRGVjaW1hbDo6ZnJvbURv
dWJsZShEYXRlQ29tcG9uZW50czo6bWF4aW11bU1vbnRoKCkpKTsKKyAgICBjb25zdCBEZWNpbWFs
IHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIG1vbnRoU3RlcERl
c2NyaXB0aW9uLCBlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzdGVw
QXR0cikpOwogICAgIHJldHVybiBTdGVwUmFuZ2Uoc3RlcEJhc2UsIFJhbmdlTGltaXRhdGlvbnM6
OlZhbGlkLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBtb250aFN0ZXBEZXNjcmlwdGlvbik7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRUeXBlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRUeXBlLmNwcAppbmRleCAzYTkyYWZjMWFj
ODIyOTZjZDVlNGRlM2U3NmQwNjdhZjJkNDRlNGQ0Li5hZWY0OTVjMWQyZTVkYzFlZjc0M2ZjZWJh
NTUzZWE5YzEwMGY4ODRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL051bWJlcklu
cHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3Bw
CkBAIC05MywxNiArOTMsMTQgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBOdW1iZXJJbnB1dFR5cGU6
OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CiAKIHZvaWQgTnVtYmVySW5wdXRUeXBlOjpzZXRWYWx1
ZShjb25zdCBTdHJpbmcmIHNhbml0aXplZFZhbHVlLCBib29sIHZhbHVlQ2hhbmdlZCwgVGV4dEZp
ZWxkRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQogewotICAgIEFTU0VSVChlbGVtZW50KCkp
OwotICAgIGlmICghdmFsdWVDaGFuZ2VkICYmIHNhbml0aXplZFZhbHVlLmlzRW1wdHkoKSAmJiAh
ZWxlbWVudCgpLT5pbm5lclRleHRWYWx1ZSgpLmlzRW1wdHkoKSkKKyAgICBpZiAoIXZhbHVlQ2hh
bmdlZCAmJiBzYW5pdGl6ZWRWYWx1ZS5pc0VtcHR5KCkgJiYgIWVsZW1lbnQoKS5pbm5lclRleHRW
YWx1ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgdXBkYXRlSW5uZXJUZXh0VmFsdWUoKTsKICAgICBU
ZXh0RmllbGRJbnB1dFR5cGU6OnNldFZhbHVlKHNhbml0aXplZFZhbHVlLCB2YWx1ZUNoYW5nZWQs
IGV2ZW50QmVoYXZpb3IpOwogfQogCiBkb3VibGUgTnVtYmVySW5wdXRUeXBlOjp2YWx1ZUFzRG91
YmxlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gcGFyc2VU
b0RvdWJsZUZvck51bWJlclR5cGUoZWxlbWVudCgpLT52YWx1ZSgpKTsKKyAgICByZXR1cm4gcGFy
c2VUb0RvdWJsZUZvck51bWJlclR5cGUoZWxlbWVudCgpLnZhbHVlKCkpOwogfQogCiBFeGNlcHRp
b25Pcjx2b2lkPiBOdW1iZXJJbnB1dFR5cGU6OnNldFZhbHVlQXNEb3VibGUoZG91YmxlIG5ld1Zh
bHVlLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpIGNvbnN0CkBAIC0xMTEs
OCArMTA5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gTnVtYmVySW5wdXRUeXBlOjpzZXRWYWx1ZUFz
RG91YmxlKGRvdWJsZSBuZXdWYWx1ZSwgVGV4dEZpZWxkRXYKICAgICBjb25zdCBkb3VibGUgZmxv
YXRNYXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCk7CiAgICAgaWYgKG5ld1Zh
bHVlIDwgLWZsb2F0TWF4IHx8IG5ld1ZhbHVlID4gZmxvYXRNYXgpCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwotICAgIEFTU0VSVChlbGVtZW50KCkpOwot
ICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUoc2VyaWFsaXplRm9yTnVtYmVyVHlwZShuZXdWYWx1ZSks
IGV2ZW50QmVoYXZpb3IpOworICAgIGVsZW1lbnQoKS5zZXRWYWx1ZShzZXJpYWxpemVGb3JOdW1i
ZXJUeXBlKG5ld1ZhbHVlKSwgZXZlbnRCZWhhdmlvcik7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApA
QCAtMTIyLDggKzExOSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE51bWJlcklucHV0VHlwZTo6c2V0
VmFsdWVBc0RlY2ltYWwoY29uc3QgRGVjaW1hbCYgbmV3VmFsdWUsIFRlCiAgICAgY29uc3QgRGVj
aW1hbCBmbG9hdE1heCA9IERlY2ltYWw6OmZyb21Eb3VibGUoc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46Om1heCgpKTsKICAgICBpZiAobmV3VmFsdWUgPCAtZmxvYXRNYXggfHwgbmV3VmFsdWUg
PiBmbG9hdE1heCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9y
IH07Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgZWxlbWVudCgpLT5zZXRWYWx1ZShzZXJp
YWxpemVGb3JOdW1iZXJUeXBlKG5ld1ZhbHVlKSwgZXZlbnRCZWhhdmlvcik7CisgICAgZWxlbWVu
dCgpLnNldFZhbHVlKHNlcmlhbGl6ZUZvck51bWJlclR5cGUobmV3VmFsdWUpLCBldmVudEJlaGF2
aW9yKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xMzQsOCArMTMwLDcgQEAgYm9vbCBOdW1i
ZXJJbnB1dFR5cGU6OnR5cGVNaXNtYXRjaEZvcihjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAog
CiBib29sIE51bWJlcklucHV0VHlwZTo6dHlwZU1pc21hdGNoKCkgY29uc3QKIHsKLSAgICBBU1NF
UlQoZWxlbWVudCgpKTsKLSAgICBBU1NFUlQoIXR5cGVNaXNtYXRjaEZvcihlbGVtZW50KCktPnZh
bHVlKCkpKTsKKyAgICBBU1NFUlQoIXR5cGVNaXNtYXRjaEZvcihlbGVtZW50KCkudmFsdWUoKSkp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTQzLDExICsxMzgsMTAgQEAgU3RlcFJhbmdl
IE51bWJlcklucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZyBhbnlTdGVw
SGFuZGxpbmcpIGNvbnMKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RlcFJh
bmdlOjpTdGVwRGVzY3JpcHRpb24+IHN0ZXBEZXNjcmlwdGlvbihudW1iZXJEZWZhdWx0U3RlcCwg
bnVtYmVyRGVmYXVsdFN0ZXBCYXNlLCBudW1iZXJTdGVwU2NhbGVGYWN0b3IpOwogCi0gICAgQVNT
RVJUKGVsZW1lbnQoKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBzdGVwQmFzZSA9IHBhcnNlVG9EZWNp
bWFsRm9yTnVtYmVyVHlwZShlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24obWluQXR0ciksIG51bWJlckRlZmF1bHRTdGVwQmFzZSk7CisgICAgY29uc3QgRGVjaW1hbCBz
dGVwQmFzZSA9IHBhcnNlVG9EZWNpbWFsRm9yTnVtYmVyVHlwZShlbGVtZW50KCkuYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwgbnVtYmVyRGVmYXVsdFN0ZXBCYXNlKTsK
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgg
Zm9yIG51bWJlciBpbnB1dCB0eXBlLgogICAgIGNvbnN0IERlY2ltYWwgZmxvYXRNYXggPSBEZWNp
bWFsOjpmcm9tRG91YmxlKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSk7Ci0gICAg
Y29uc3QgRWxlbWVudCYgZWxlbWVudCA9ICp0aGlzLT5lbGVtZW50KCk7CisgICAgY29uc3QgRWxl
bWVudCYgZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKTsKIAogICAgIFJhbmdlTGltaXRhdGlvbnMg
cmFuZ2VMaW1pdGF0aW9ucyA9IFJhbmdlTGltaXRhdGlvbnM6OkludmFsaWQ7CiAgICAgYXV0byBl
eHRyYWN0Qm91bmQgPSBbJl0gKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNv
bnN0IERlY2ltYWwmIGRlZmF1bHRWYWx1ZSkgLT4gRGVjaW1hbCB7CkBAIC0xNzAsMTYgKzE2NCwx
NSBAQCBib29sIE51bWJlcklucHV0VHlwZTo6c2l6ZVNob3VsZEluY2x1ZGVEZWNvcmF0aW9uKGlu
dCBkZWZhdWx0U2l6ZSwgaW50JiBwcmVmZXJyZQogewogICAgIHByZWZlcnJlZFNpemUgPSBkZWZh
dWx0U2l6ZTsKIAotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGF1dG8mIHN0ZXBTdHJpbmcg
PSBlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3RlcEF0dHIpOwor
ICAgIGF1dG8mIHN0ZXBTdHJpbmcgPSBlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihzdGVwQXR0cik7CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHN0ZXBTdHJpbmcsICJhbnkiKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3Qg
RGVjaW1hbCBtaW5pbXVtID0gcGFyc2VUb0RlY2ltYWxGb3JOdW1iZXJUeXBlKGVsZW1lbnQoKS0+
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSk7CisgICAgY29uc3QgRGVj
aW1hbCBtaW5pbXVtID0gcGFyc2VUb0RlY2ltYWxGb3JOdW1iZXJUeXBlKGVsZW1lbnQoKS5hdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpKTsKICAgICBpZiAoIW1pbmltdW0u
aXNGaW5pdGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgRGVjaW1hbCBt
YXhpbXVtID0gcGFyc2VUb0RlY2ltYWxGb3JOdW1iZXJUeXBlKGVsZW1lbnQoKS0+YXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihtYXhBdHRyKSk7CisgICAgY29uc3QgRGVjaW1hbCBtYXhp
bXVtID0gcGFyc2VUb0RlY2ltYWxGb3JOdW1iZXJUeXBlKGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKG1heEF0dHIpKTsKICAgICBpZiAoIW1heGltdW0uaXNGaW5pdGUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xOTUsMTAgKzE4OCw4IEBAIGJvb2wgTnVt
YmVySW5wdXRUeXBlOjpzaXplU2hvdWxkSW5jbHVkZURlY29yYXRpb24oaW50IGRlZmF1bHRTaXpl
LCBpbnQmIHByZWZlcnJlCiAKIGZsb2F0IE51bWJlcklucHV0VHlwZTo6ZGVjb3JhdGlvbldpZHRo
KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLQogICAgIGZsb2F0IHdpZHRoID0g
MDsKLSAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IHNwaW5CdXR0b24gPSBlbGVtZW50KCktPmlubmVy
U3BpbkJ1dHRvbkVsZW1lbnQoKTsKKyAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IHNwaW5CdXR0b24g
PSBlbGVtZW50KCkuaW5uZXJTcGluQnV0dG9uRWxlbWVudCgpOwogICAgIGlmIChSZW5kZXJCb3gq
IHNwaW5SZW5kZXJlciA9IHNwaW5CdXR0b24gPyBzcGluQnV0dG9uLT5yZW5kZXJCb3goKSA6IDAp
IHsKICAgICAgICAgd2lkdGggKz0gc3BpblJlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNh
bFdpZHRoKCk7CiAgICAgICAgIC8vIFNpbmNlIHRoZSB3aWR0aCBvZiBzcGluUmVuZGVyZXIgaXMg
bm90IGNhbGN1bGF0ZWQgeWV0LCBzcGluUmVuZGVyZXItPmxvZ2ljYWxXaWR0aCgpIHJldHVybnMg
MC4KQEAgLTI0NCwxNCArMjM1LDEyIEBAIFN0cmluZyBOdW1iZXJJbnB1dFR5cGU6OmxvY2FsaXpl
VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKSBjb25zdAogICAgIC8vIFdlIGRvbid0
IGxvY2FsaXplIHNjaWVudGlmaWMgbm90YXRpb25zLgogICAgIGlmIChwcm9wb3NlZFZhbHVlLmZp
bmQoaXNFKSAhPSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuIHByb3Bvc2VkVmFsdWU7Ci0gICAg
QVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+bG9jYWxlKCkuY29udmVy
dFRvTG9jYWxpemVkTnVtYmVyKHByb3Bvc2VkVmFsdWUpOworICAgIHJldHVybiBlbGVtZW50KCku
bG9jYWxlKCkuY29udmVydFRvTG9jYWxpemVkTnVtYmVyKHByb3Bvc2VkVmFsdWUpOwogfQogCiBT
dHJpbmcgTnVtYmVySW5wdXRUeXBlOjp2aXNpYmxlVmFsdWUoKSBjb25zdAogewotICAgIEFTU0VS
VChlbGVtZW50KCkpOwotICAgIHJldHVybiBsb2NhbGl6ZVZhbHVlKGVsZW1lbnQoKS0+dmFsdWUo
KSk7CisgICAgcmV0dXJuIGxvY2FsaXplVmFsdWUoZWxlbWVudCgpLnZhbHVlKCkpOwogfQogCiBT
dHJpbmcgTnVtYmVySW5wdXRUeXBlOjpjb252ZXJ0RnJvbVZpc2libGVWYWx1ZShjb25zdCBTdHJp
bmcmIHZpc2libGVWYWx1ZSkgY29uc3QKQEAgLTI2MSw4ICsyNTAsNyBAQCBTdHJpbmcgTnVtYmVy
SW5wdXRUeXBlOjpjb252ZXJ0RnJvbVZpc2libGVWYWx1ZShjb25zdCBTdHJpbmcmIHZpc2libGVW
YWx1ZSkgY29ucwogICAgIC8vIFdlIGRvbid0IGxvY2FsaXplIHNjaWVudGlmaWMgbm90YXRpb25z
LgogICAgIGlmICh2aXNpYmxlVmFsdWUuZmluZChpc0UpICE9IG5vdEZvdW5kKQogICAgICAgICBy
ZXR1cm4gdmlzaWJsZVZhbHVlOwotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBl
bGVtZW50KCktPmxvY2FsZSgpLmNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyKHZpc2libGVWYWx1
ZSk7CisgICAgcmV0dXJuIGVsZW1lbnQoKS5sb2NhbGUoKS5jb252ZXJ0RnJvbUxvY2FsaXplZE51
bWJlcih2aXNpYmxlVmFsdWUpOwogfQogCiBTdHJpbmcgTnVtYmVySW5wdXRUeXBlOjpzYW5pdGl6
ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29uc3QKQEAgLTI3NCw4ICsyNjIs
NyBAQCBTdHJpbmcgTnVtYmVySW5wdXRUeXBlOjpzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYg
cHJvcG9zZWRWYWx1ZSkgY29uc3QKIAogYm9vbCBOdW1iZXJJbnB1dFR5cGU6Omhhc0JhZElucHV0
KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBTdHJpbmcgc3RhbmRhcmRW
YWx1ZSA9IGNvbnZlcnRGcm9tVmlzaWJsZVZhbHVlKGVsZW1lbnQoKS0+aW5uZXJUZXh0VmFsdWUo
KSk7CisgICAgU3RyaW5nIHN0YW5kYXJkVmFsdWUgPSBjb252ZXJ0RnJvbVZpc2libGVWYWx1ZShl
bGVtZW50KCkuaW5uZXJUZXh0VmFsdWUoKSk7CiAgICAgcmV0dXJuICFzdGFuZGFyZFZhbHVlLmlz
RW1wdHkoKSAmJiAhc3RkOjppc2Zpbml0ZShwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShzdGFu
ZGFyZFZhbHVlKSk7CiB9CiAKQEAgLTI5NiwxNSArMjgzLDE0IEBAIGJvb2wgTnVtYmVySW5wdXRU
eXBlOjppc051bWJlckZpZWxkKCkgY29uc3QKIAogdm9pZCBOdW1iZXJJbnB1dFR5cGU6OmF0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKLSAgICBBU1NFUlQoZWxl
bWVudCgpKTsKICAgICBpZiAobmFtZSA9PSBtYXhBdHRyIHx8IG5hbWUgPT0gbWluQXR0cikgewot
ICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkgeworICAgICAgICBp
ZiAoYXV0byogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnRQdHIoKSkgewogICAgICAgICAgICAgZWxl
bWVudC0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICAgICAgaWYgKGF1dG8q
IHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICByZW5kZXJl
ci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgaWYgKG5hbWUgPT0gc3RlcEF0dHIpIHsKLSAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQg
PSB0aGlzLT5lbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5l
bGVtZW50UHRyKCkpIHsKICAgICAgICAgICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQt
PnJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzTGF5b3V0QW5k
UHJlZldpZHRoc1JlY2FsYygpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1
dFR5cGUuY3BwCmluZGV4IGMxMWY2Yzk1NmExYjU1M2QzOTc5NDZlN2U3NjI5OWI1YzY5YmJmNjAu
Ljc3MDVmZTRkZWVjZjY2MDY2MzU0MDk2MzZhZjIxYWY1ZjE1ZGYwYzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCkBAIC00NCw4ICs0NCw3IEBAIGNvbnN0IEF0b21pY1N0
cmluZyYgUmFkaW9JbnB1dFR5cGU6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CiAKIGJvb2wgUmFk
aW9JbnB1dFR5cGU6OnZhbHVlTWlzc2luZyhjb25zdCBTdHJpbmcmKSBjb25zdAogewotICAgIEFT
U0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBlbGVtZW50KCktPmlzSW5SZXF1aXJlZFJhZGlv
QnV0dG9uR3JvdXAoKSAmJiAhZWxlbWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25Gb3JHcm91cCgp
OworICAgIHJldHVybiBlbGVtZW50KCkuaXNJblJlcXVpcmVkUmFkaW9CdXR0b25Hcm91cCgpICYm
ICFlbGVtZW50KCkuY2hlY2tlZFJhZGlvQnV0dG9uRm9yR3JvdXAoKTsKIH0KIAogU3RyaW5nIFJh
ZGlvSW5wdXRUeXBlOjp2YWx1ZU1pc3NpbmdUZXh0KCkgY29uc3QKQEAgLTY3LDE5ICs2NiwxOCBA
QCB2b2lkIFJhZGlvSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCYg
ZXZlbnQpCiAgICAgaWYgKGtleSAhPSAiVXAiICYmIGtleSAhPSAiRG93biIgJiYga2V5ICE9ICJM
ZWZ0IiAmJiBrZXkgIT0gIlJpZ2h0IikKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGVs
ZW1lbnQoKSk7CiAgICAgLy8gTGVmdCBhbmQgdXAgbWVhbiAicHJldmlvdXMgcmFkaW8gYnV0dG9u
Ii4KICAgICAvLyBSaWdodCBhbmQgZG93biBtZWFuICJuZXh0IHJhZGlvIGJ1dHRvbiIuCiAgICAg
Ly8gVGVzdGVkIGluIFdpbklFLCBhbmQgZXZlbiBmb3IgUlRMLCBsZWZ0IHN0aWxsIG1lYW5zIHBy
ZXZpb3VzIHJhZGlvIGJ1dHRvbiAoYW5kIHNvIG1vdmVzCiAgICAgLy8gdG8gdGhlIHJpZ2h0KS4g
IFNlZW1zIHN0cmFuZ2UsIGJ1dCB3ZSdsbCBtYXRjaCBpdC4KICAgICAvLyBIb3dldmVyLCB3aGVu
IHVzaW5nIFNwYXRpYWwgTmF2aWdhdGlvbiwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIG5hdmlnYXRl
IHdpdGhvdXQgY2hhbmdpbmcgdGhlIHNlbGVjdGlvbi4KLSAgICBpZiAoaXNTcGF0aWFsTmF2aWdh
dGlvbkVuYWJsZWQoZWxlbWVudCgpLT5kb2N1bWVudCgpLmZyYW1lKCkpKQorICAgIGlmIChpc1Nw
YXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChlbGVtZW50KCkuZG9jdW1lbnQoKS5mcmFtZSgpKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGJvb2wgZm9yd2FyZCA9IChrZXkgPT0gIkRvd24iIHx8IGtleSA9
PSAiUmlnaHQiKTsKIAogICAgIC8vIFdlIGNhbiBvbmx5IHN0YXkgd2l0aGluIHRoZSBmb3JtJ3Mg
Y2hpbGRyZW4gaWYgdGhlIGZvcm0gaGFzbid0IGJlZW4gZGVtb3RlZCB0byBhIGxlYWYgYmVjYXVz
ZQogICAgIC8vIG9mIG1hbGZvcm1lZCBIVE1MLgotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gZWxl
bWVudCgpOworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gZWxlbWVudFB0cigpOwogICAgIHdoaWxl
ICgobm9kZSA9IChmb3J3YXJkID8gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkgOiBOb2RlVHJh
dmVyc2FsOjpwcmV2aW91cygqbm9kZSkpKSkgewogICAgICAgICAvLyBPbmNlIHdlIGVuY291bnRl
ciBhIGZvcm0gZWxlbWVudCwgd2Uga25vdyB3ZSdyZSB0aHJvdWdoLgogICAgICAgICBpZiAoaXM8
SFRNTEZvcm1FbGVtZW50Pigqbm9kZSkpCkBAIC04OCwxMCArODYsMTAgQEAgdm9pZCBSYWRpb0lu
cHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQogICAgICAg
ICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gaW5wdXRFbGVtZW50ID0gZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4obm9kZS5nZXQoKSk7Ci0gICAgICAgIGlmIChpbnB1dEVsZW1l
bnQtPmZvcm0oKSAhPSBlbGVtZW50KCktPmZvcm0oKSkKKyAgICAgICAgaWYgKGlucHV0RWxlbWVu
dC0+Zm9ybSgpICE9IGVsZW1lbnQoKS5mb3JtKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgaWYgKGlucHV0RWxlbWVudC0+aXNSYWRpb0J1dHRvbigpICYmIGlucHV0RWxlbWVudC0+bmFt
ZSgpID09IGVsZW1lbnQoKS0+bmFtZSgpICYmIGlucHV0RWxlbWVudC0+aXNGb2N1c2FibGUoKSkg
ewotICAgICAgICAgICAgZWxlbWVudCgpLT5kb2N1bWVudCgpLnNldEZvY3VzZWRFbGVtZW50KGlu
cHV0RWxlbWVudC5nZXQoKSk7CisgICAgICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzUmFkaW9CdXR0
b24oKSAmJiBpbnB1dEVsZW1lbnQtPm5hbWUoKSA9PSBlbGVtZW50KCkubmFtZSgpICYmIGlucHV0
RWxlbWVudC0+aXNGb2N1c2FibGUoKSkgeworICAgICAgICAgICAgZWxlbWVudCgpLmRvY3VtZW50
KCkuc2V0Rm9jdXNlZEVsZW1lbnQoaW5wdXRFbGVtZW50LmdldCgpKTsKICAgICAgICAgICAgIGlu
cHV0RWxlbWVudC0+ZGlzcGF0Y2hTaW11bGF0ZWRDbGljaygmZXZlbnQsIFNlbmROb0V2ZW50cywg
RG9Ob3RTaG93UHJlc3NlZExvb2spOwogICAgICAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRs
ZWQoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEwNSwxMCArMTAzLDkgQEAgdm9pZCBSYWRp
b0lucHV0VHlwZTo6aGFuZGxlS2V5dXBFdmVudChLZXlib2FyZEV2ZW50JiBldmVudCkKICAgICBp
ZiAoa2V5ICE9ICJVKzAwMjAiKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoZWxlbWVu
dCgpKTsKICAgICAvLyBJZiBhbiB1bnNlbGVjdGVkIHJhZGlvIGlzIHRhYmJlZCBpbnRvIChiZWNh
dXNlIHRoZSBlbnRpcmUgZ3JvdXAgaGFzIG5vdGhpbmcKICAgICAvLyBjaGVja2VkLCBvciBiZWNh
dXNlIG9mIHNvbWUgZXhwbGljaXQgLmZvY3VzKCkgY2FsbCksIHRoZW4gYWxsb3cgc3BhY2UgdG8g
Y2hlY2sgaXQuCi0gICAgaWYgKGVsZW1lbnQoKS0+Y2hlY2tlZCgpKQorICAgIGlmIChlbGVtZW50
KCkuY2hlY2tlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGlj
a0lmQWN0aXZlKGV2ZW50KTsKIH0KQEAgLTExOCwzNSArMTE1LDMyIEBAIGJvb2wgUmFkaW9JbnB1
dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0CiAg
ICAgaWYgKCFJbnB1dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUoZXZlbnQpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKICAgICAvLyBXaGVuIHVzaW5n
IFNwYXRpYWwgTmF2aWdhdGlvbiwgZXZlcnkgcmFkaW8gYnV0dG9uIHNob3VsZCBiZSBmb2N1c2Fi
bGUuCi0gICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGVsZW1lbnQoKS0+ZG9jdW1l
bnQoKS5mcmFtZSgpKSkKKyAgICBpZiAoaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZWxlbWVu
dCgpLmRvY3VtZW50KCkuZnJhbWUoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8g
TmV2ZXIgYWxsb3cga2V5Ym9hcmQgdGFiYmluZyB0byBsZWF2ZSB5b3UgaW4gdGhlIHNhbWUgcmFk
aW8gZ3JvdXAuICBBbHdheXMKICAgICAvLyBza2lwIGFueSBvdGhlciBlbGVtZW50cyBpbiB0aGUg
Z3JvdXAuCi0gICAgUmVmUHRyPEVsZW1lbnQ+IGN1cnJlbnRGb2N1c2VkTm9kZSA9IGVsZW1lbnQo
KS0+ZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpOworICAgIFJlZlB0cjxFbGVtZW50PiBjdXJy
ZW50Rm9jdXNlZE5vZGUgPSBlbGVtZW50KCkuZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpOwog
ICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihjdXJyZW50Rm9jdXNlZE5vZGUpKSB7CiAgICAg
ICAgIEhUTUxJbnB1dEVsZW1lbnQmIGZvY3VzZWRJbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KCpjdXJyZW50Rm9jdXNlZE5vZGUpOwotICAgICAgICBpZiAoZm9jdXNlZElucHV0Lmlz
UmFkaW9CdXR0b24oKSAmJiBmb2N1c2VkSW5wdXQuZm9ybSgpID09IGVsZW1lbnQoKS0+Zm9ybSgp
ICYmIGZvY3VzZWRJbnB1dC5uYW1lKCkgPT0gZWxlbWVudCgpLT5uYW1lKCkpCisgICAgICAgIGlm
IChmb2N1c2VkSW5wdXQuaXNSYWRpb0J1dHRvbigpICYmIGZvY3VzZWRJbnB1dC5mb3JtKCkgPT0g
ZWxlbWVudCgpLmZvcm0oKSAmJiBmb2N1c2VkSW5wdXQubmFtZSgpID09IGVsZW1lbnQoKS5uYW1l
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gQWxsb3cga2V5
Ym9hcmQgZm9jdXMgaWYgd2UncmUgY2hlY2tlZCBvciBpZiBub3RoaW5nIGluIHRoZSBncm91cCBp
cyBjaGVja2VkLgotICAgIHJldHVybiBlbGVtZW50KCktPmNoZWNrZWQoKSB8fCAhZWxlbWVudCgp
LT5jaGVja2VkUmFkaW9CdXR0b25Gb3JHcm91cCgpOworICAgIHJldHVybiBlbGVtZW50KCkuY2hl
Y2tlZCgpIHx8ICFlbGVtZW50KCkuY2hlY2tlZFJhZGlvQnV0dG9uRm9yR3JvdXAoKTsKIH0KIAog
Ym9vbCBSYWRpb0lucHV0VHlwZTo6c2hvdWxkU2VuZENoYW5nZUV2ZW50QWZ0ZXJDaGVja2VkQ2hh
bmdlZCgpCiB7CiAgICAgLy8gRG9uJ3Qgc2VuZCBhIGNoYW5nZSBldmVudCBmb3IgYSByYWRpbyBi
dXR0b24gdGhhdCdzIGdldHRpbmcgdW5jaGVja2VkLgogICAgIC8vIFRoaXMgd2FzIGRvbmUgdG8g
bWF0Y2ggdGhlIGJlaGF2aW9yIG9mIG90aGVyIGJyb3dzZXJzLgotICAgIEFTU0VSVChlbGVtZW50
KCkpOwotICAgIHJldHVybiBlbGVtZW50KCktPmNoZWNrZWQoKTsKKyAgICByZXR1cm4gZWxlbWVu
dCgpLmNoZWNrZWQoKTsKIH0KIAogdm9pZCBSYWRpb0lucHV0VHlwZTo6d2lsbERpc3BhdGNoQ2xp
Y2soSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQo
KSk7CiAgICAgLy8gQW4gZXZlbnQgaGFuZGxlciBjYW4gdXNlIHByZXZlbnREZWZhdWx0IG9yICJy
ZXR1cm4gZmFsc2UiIHRvIHJldmVyc2UgdGhlIHNlbGVjdGlvbiB3ZSBkbyBoZXJlLgogICAgIC8v
IFRoZSBJbnB1dEVsZW1lbnRDbGlja1N0YXRlIG9iamVjdCBjb250YWlucyB3aGF0IHdlIG5lZWQg
dG8gdW5kbyB3aGF0IHdlIGRpZCBoZXJlIGluIGRpZERpc3BhdGNoQ2xpY2suCiAKQEAgLTE1NCwx
MCArMTQ4LDEwIEBAIHZvaWQgUmFkaW9JbnB1dFR5cGU6OndpbGxEaXNwYXRjaENsaWNrKElucHV0
RWxlbWVudENsaWNrU3RhdGUmIHN0YXRlKQogICAgIC8vIFRoZXJlZm9yZSBpZiBub3RoaW5nIGlz
IGN1cnJlbnRseSBzZWxlY3RlZCwgd2Ugd29uJ3QgYWxsb3cgdGhlIHVwY29taW5nIGFjdGlvbiB0
byBiZSAidW5kb25lIiwgc2luY2UKICAgICAvLyB3ZSB3YW50IHNvbWUgb2JqZWN0IGluIHRoZSBy
YWRpbyBncm91cCB0byBhY3R1YWxseSBnZXQgc2VsZWN0ZWQuCiAKLSAgICBzdGF0ZS5jaGVja2Vk
ID0gZWxlbWVudCgpLT5jaGVja2VkKCk7Ci0gICAgc3RhdGUuY2hlY2tlZFJhZGlvQnV0dG9uID0g
ZWxlbWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25Gb3JHcm91cCgpOworICAgIHN0YXRlLmNoZWNr
ZWQgPSBlbGVtZW50KCkuY2hlY2tlZCgpOworICAgIHN0YXRlLmNoZWNrZWRSYWRpb0J1dHRvbiA9
IGVsZW1lbnQoKS5jaGVja2VkUmFkaW9CdXR0b25Gb3JHcm91cCgpOwogCi0gICAgZWxlbWVudCgp
LT5zZXRDaGVja2VkKHRydWUsIERpc3BhdGNoQ2hhbmdlRXZlbnQpOworICAgIGVsZW1lbnQoKS5z
ZXRDaGVja2VkKHRydWUsIERpc3BhdGNoQ2hhbmdlRXZlbnQpOwogfQogCiB2b2lkIFJhZGlvSW5w
dXRUeXBlOjpkaWREaXNwYXRjaENsaWNrKEV2ZW50JiBldmVudCwgY29uc3QgSW5wdXRFbGVtZW50
Q2xpY2tTdGF0ZSYgc3RhdGUpCkBAIC0xNjYsOCArMTYwLDcgQEAgdm9pZCBSYWRpb0lucHV0VHlw
ZTo6ZGlkRGlzcGF0Y2hDbGljayhFdmVudCYgZXZlbnQsIGNvbnN0IElucHV0RWxlbWVudENsaWNr
U3RhdGUKICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgc2VsZWN0ZWQgcmFkaW8gYnV0
dG9uIGlmIHBvc3NpYmxlLgogICAgICAgICAvLyBNYWtlIHN1cmUgaXQgaXMgc3RpbGwgYSByYWRp
byBidXR0b24gYW5kIG9ubHkgZG8gdGhlIHJlc3RvcmF0aW9uIGlmIGl0IHN0aWxsIGJlbG9uZ3Mg
dG8gb3VyIGdyb3VwLgogICAgICAgICBhdXRvJiBidXR0b24gPSBzdGF0ZS5jaGVja2VkUmFkaW9C
dXR0b247Ci0gICAgICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgICAgICBpZiAoYnV0dG9uICYm
IGJ1dHRvbi0+aXNSYWRpb0J1dHRvbigpICYmIGJ1dHRvbi0+Zm9ybSgpID09IGVsZW1lbnQoKS0+
Zm9ybSgpICYmIGJ1dHRvbi0+bmFtZSgpID09IGVsZW1lbnQoKS0+bmFtZSgpKQorICAgICAgICBp
ZiAoYnV0dG9uICYmIGJ1dHRvbi0+aXNSYWRpb0J1dHRvbigpICYmIGJ1dHRvbi0+Zm9ybSgpID09
IGVsZW1lbnQoKS5mb3JtKCkgJiYgYnV0dG9uLT5uYW1lKCkgPT0gZWxlbWVudCgpLm5hbWUoKSkK
ICAgICAgICAgICAgIGJ1dHRvbi0+c2V0Q2hlY2tlZCh0cnVlKTsKICAgICB9CiAKQEAgLTE4Miw4
ICsxNzUsNyBAQCBib29sIFJhZGlvSW5wdXRUeXBlOjppc1JhZGlvQnV0dG9uKCkgY29uc3QKIAog
Ym9vbCBSYWRpb0lucHV0VHlwZTo6bWF0Y2hlc0luZGV0ZXJtaW5hdGVQc2V1ZG9DbGFzcygpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgY29uc3QgSFRNTElucHV0RWxlbWVu
dCYgZWxlbWVudCA9ICp0aGlzLT5lbGVtZW50KCk7CisgICAgY29uc3QgSFRNTElucHV0RWxlbWVu
dCYgZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKTsKICAgICBpZiAoY29uc3QgUmFkaW9CdXR0b25H
cm91cHMqIHJhZGlvQnV0dG9uR3JvdXBzID0gZWxlbWVudC5yYWRpb0J1dHRvbkdyb3VwcygpKQog
ICAgICAgICByZXR1cm4gIXJhZGlvQnV0dG9uR3JvdXBzLT5oYXNDaGVja2VkQnV0dG9uKCZlbGVt
ZW50KTsKICAgICByZXR1cm4gIWVsZW1lbnQuY2hlY2tlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1Jh
bmdlSW5wdXRUeXBlLmNwcAppbmRleCA0NDYwZDcxOTgyZDY3YjZmM2M4MGY0MTljODNmYmMzMWM5
Yzg3ZmEwLi42OGY2MDQxNjI4ZmE2Y2IxNWIxNTI5ZTQ5YTU5MzJkYzgwY2QzY2JjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcApAQCAtOTIsMTQgKzkyLDEyIEBAIGNvbnN0
IEF0b21pY1N0cmluZyYgUmFuZ2VJbnB1dFR5cGU6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CiAK
IGRvdWJsZSBSYW5nZUlucHV0VHlwZTo6dmFsdWVBc0RvdWJsZSgpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKGVs
ZW1lbnQoKS0+dmFsdWUoKSk7CisgICAgcmV0dXJuIHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBl
KGVsZW1lbnQoKS52YWx1ZSgpKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2VJbnB1dFR5
cGU6OnNldFZhbHVlQXNEZWNpbWFsKGNvbnN0IERlY2ltYWwmIG5ld1ZhbHVlLCBUZXh0RmllbGRF
dmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQo
KSk7Ci0gICAgZWxlbWVudCgpLT5zZXRWYWx1ZShzZXJpYWxpemUobmV3VmFsdWUpLCBldmVudEJl
aGF2aW9yKTsKKyAgICBlbGVtZW50KCkuc2V0VmFsdWUoc2VyaWFsaXplKG5ld1ZhbHVlKSwgZXZl
bnRCZWhhdmlvcik7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTE1LDE3ICsxMTMsMTYgQEAg
Ym9vbCBSYW5nZUlucHV0VHlwZTo6c3VwcG9ydHNSZXF1aXJlZCgpIGNvbnN0CiAKIFN0ZXBSYW5n
ZSBSYW5nZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZyBhbnlTdGVw
SGFuZGxpbmcpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgY29uc3QgRGVj
aW1hbCBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24obWluQXR0ciksIHJhbmdlRGVmYXVsdE1pbmltdW0pOwotICAgIGNvbnN0
IERlY2ltYWwgbWF4aW11bSA9IGVuc3VyZU1heGltdW0ocGFyc2VUb051bWJlcihlbGVtZW50KCkt
PmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWF4QXR0ciksIHJhbmdlRGVmYXVsdE1h
eGltdW0pLCBtaW5pbXVtLCByYW5nZURlZmF1bHRNYXhpbXVtKTsKKyAgICBjb25zdCBEZWNpbWFs
IG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKG1pbkF0dHIpLCByYW5nZURlZmF1bHRNaW5pbXVtKTsKKyAgICBjb25zdCBEZWNp
bWFsIG1heGltdW0gPSBlbnN1cmVNYXhpbXVtKHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWF4QXR0ciksIHJhbmdlRGVmYXVsdE1heGltdW0p
LCBtaW5pbXVtLCByYW5nZURlZmF1bHRNYXhpbXVtKTsKIAotICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgcHJlY2lzaW9uVmFsdWUgPSBlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24ocHJlY2lzaW9uQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVjaXNpb25W
YWx1ZSA9IGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHByZWNpc2lv
bkF0dHIpOwogICAgIGlmICghcHJlY2lzaW9uVmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAgY29u
c3QgRGVjaW1hbCBzdGVwID0gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocHJlY2lzaW9u
VmFsdWUsICJmbG9hdCIpID8gRGVjaW1hbDo6bmFuKCkgOiAxOwogICAgICAgICByZXR1cm4gU3Rl
cFJhbmdlKG1pbmltdW0sIFJhbmdlTGltaXRhdGlvbnM6OlZhbGlkLCBtaW5pbXVtLCBtYXhpbXVt
LCBzdGVwLCByYW5nZVN0ZXBEZXNjcmlwdGlvbik7CiAgICAgfQogCi0gICAgY29uc3QgRGVjaW1h
bCBzdGVwID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCByYW5nZVN0ZXBE
ZXNjcmlwdGlvbiwgZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHN0
ZXBBdHRyKSk7CisgICAgY29uc3QgRGVjaW1hbCBzdGVwID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAo
YW55U3RlcEhhbmRsaW5nLCByYW5nZVN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3RlcEF0dHIpKTsKICAgICByZXR1cm4gU3RlcFJhbmdl
KG1pbmltdW0sIFJhbmdlTGltaXRhdGlvbnM6OlZhbGlkLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVw
LCByYW5nZVN0ZXBEZXNjcmlwdGlvbik7CiB9CiAKQEAgLTEzOCwxNSArMTM1LDE0IEBAIGJvb2wg
UmFuZ2VJbnB1dFR5cGU6OmlzU3RlcHBhYmxlKCkgY29uc3QKIAogdm9pZCBSYW5nZUlucHV0VHlw
ZTo6aGFuZGxlTW91c2VEb3duRXZlbnQoTW91c2VFdmVudCYgZXZlbnQpCiB7Ci0gICAgQVNTRVJU
KGVsZW1lbnQoKSk7Ci0gICAgaWYgKGVsZW1lbnQoKS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkp
CisgICAgaWYgKGVsZW1lbnQoKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9IExlZnRCdXR0b24gfHwgIWlzPE5vZGU+
KGV2ZW50LnRhcmdldCgpKSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChlbGVtZW50KCkt
PnNoYWRvd1Jvb3QoKSk7CisgICAgQVNTRVJUKGVsZW1lbnQoKS5zaGFkb3dSb290KCkpOwogICAg
IGF1dG8mIHRhcmdldE5vZGUgPSBkb3duY2FzdDxOb2RlPigqZXZlbnQudGFyZ2V0KCkpOwotICAg
IGlmICgmdGFyZ2V0Tm9kZSAhPSBlbGVtZW50KCkgJiYgIXRhcmdldE5vZGUuaXNEZXNjZW5kYW50
T2YoZWxlbWVudCgpLT51c2VyQWdlbnRTaGFkb3dSb290KCkuZ2V0KCkpKQorICAgIGlmICgmdGFy
Z2V0Tm9kZSAhPSAmZWxlbWVudCgpICYmICF0YXJnZXROb2RlLmlzRGVzY2VuZGFudE9mKGVsZW1l
bnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCkuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAgICAg
YXV0byYgdGh1bWIgPSB0eXBlZFNsaWRlclRodW1iRWxlbWVudCgpOwogICAgIGlmICgmdGFyZ2V0
Tm9kZSA9PSAmdGh1bWIpCkBAIC0xNjIsOCArMTU4LDcgQEAgdm9pZCBSYW5nZUlucHV0VHlwZTo6
aGFuZGxlVG91Y2hFdmVudChUb3VjaEV2ZW50JiBldmVudCkKICNpZiBQTEFURk9STShJT1MpCiAg
ICAgdHlwZWRTbGlkZXJUaHVtYkVsZW1lbnQoKS5oYW5kbGVUb3VjaEV2ZW50KGV2ZW50KTsKICNl
bGlmIEVOQUJMRShUT1VDSF9TTElERVIpCi0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgaWYg
KGVsZW1lbnQoKS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCisgICAgaWYgKGVsZW1lbnQoKS5p
c0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudG91Y2hlbmRFdmVudCkgewpAQCAtMTk2LDEzICsxOTEs
MTIgQEAgdm9pZCBSYW5nZUlucHV0VHlwZTo6ZGlzYWJsZWRTdGF0ZUNoYW5nZWQoKQogCiB2b2lk
IFJhbmdlSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCYgZXZlbnQp
CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgaWYgKGVsZW1lbnQoKS0+aXNEaXNhYmxl
ZEZvcm1Db250cm9sKCkpCisgICAgaWYgKGVsZW1lbnQoKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2wo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgU3RyaW5nJiBrZXkgPSBldmVudC5rZXlJ
ZGVudGlmaWVyKCk7CiAKLSAgICBjb25zdCBEZWNpbWFsIGN1cnJlbnQgPSBwYXJzZVRvTnVtYmVy
T3JOYU4oZWxlbWVudCgpLT52YWx1ZSgpKTsKKyAgICBjb25zdCBEZWNpbWFsIGN1cnJlbnQgPSBw
YXJzZVRvTnVtYmVyT3JOYU4oZWxlbWVudCgpLnZhbHVlKCkpOwogICAgIEFTU0VSVChjdXJyZW50
LmlzRmluaXRlKCkpOwogCiAgICAgU3RlcFJhbmdlIHN0ZXBSYW5nZShjcmVhdGVTdGVwUmFuZ2Uo
UmVqZWN0QW55KSk7CkBAIC0yMTAsMTEgKzIwNCwxMSBAQCB2b2lkIFJhbmdlSW5wdXRUeXBlOjpo
YW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiAKICAgICAvLyBGSVhNRTog
V2UgY2FuJ3QgdXNlIHN0ZXBVcCgpIGZvciB0aGUgc3RlcCB2YWx1ZSAiYW55Ii4gU28sIHdlIGlu
Y3JlYXNlCiAgICAgLy8gb3IgZGVjcmVhc2UgdGhlIHZhbHVlIGJ5IDEvMTAwIG9mIHRoZSB2YWx1
ZSByYW5nZS4gSXMgaXQgcmVhc29uYWJsZT8KLSAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oc3RlcEF0dHIpLCAiYW55IikgPyAoc3RlcFJhbmdlLm1heGltdW0oKSAtIHN0
ZXBSYW5nZS5taW5pbXVtKCkpIC8gMTAwIDogc3RlcFJhbmdlLnN0ZXAoKTsKKyAgICBjb25zdCBE
ZWNpbWFsIHN0ZXAgPSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShlbGVtZW50KCkuYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzdGVwQXR0ciksICJhbnkiKSA/IChzdGVwUmFu
Z2UubWF4aW11bSgpIC0gc3RlcFJhbmdlLm1pbmltdW0oKSkgLyAxMDAgOiBzdGVwUmFuZ2Uuc3Rl
cCgpOwogICAgIGNvbnN0IERlY2ltYWwgYmlnU3RlcCA9IHN0ZDo6bWF4KChzdGVwUmFuZ2UubWF4
aW11bSgpIC0gc3RlcFJhbmdlLm1pbmltdW0oKSkgLyAxMCwgc3RlcCk7CiAKICAgICBib29sIGlz
VmVydGljYWwgPSBmYWxzZTsKLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBlbGVtZW50KCktPnJl
bmRlcmVyKCkpIHsKKyAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBlbGVtZW50KCkucmVuZGVyZXIo
KSkgewogICAgICAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyZXItPnN0eWxlKCkuYXBwZWFy
YW5jZSgpOwogICAgICAgICBpc1ZlcnRpY2FsID0gcGFydCA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQg
fHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQ7CiAgICAgfQpAQCAtMjQ1LDggKzIzOSw4
IEBAIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50
JiBldmVudCkKICAgICAgICAgRXZlbnRRdWV1ZVNjb3BlIHNjb3BlOwogICAgICAgICBzZXRWYWx1
ZUFzRGVjaW1hbChuZXdWYWx1ZSwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKIAotICAg
ICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBlbGVtZW50KCktPmRvY3VtZW50KCkuZXhp
c3RpbmdBWE9iamVjdENhY2hlKCkpCi0gICAgICAgICAgICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlv
bihlbGVtZW50KCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkKTsKKyAgICAgICAgaWYg
KEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZWxlbWVudCgpLmRvY3VtZW50KCkuZXhpc3RpbmdBWE9i
amVjdENhY2hlKCkpCisgICAgICAgICAgICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlvbihlbGVtZW50
UHRyKCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkKTsKICAgICB9CiAKICAgICBldmVu
dC5zZXREZWZhdWx0SGFuZGxlZCgpOwpAQCAtMjU0LDI3ICsyNDgsMjUgQEAgdm9pZCBSYW5nZUlu
cHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQogCiB2b2lk
IFJhbmdlSW5wdXRUeXBlOjpjcmVhdGVTaGFkb3dTdWJ0cmVlKCkKIHsKLSAgICBBU1NFUlQoZWxl
bWVudCgpKTsKLSAgICBBU1NFUlQoZWxlbWVudCgpLT51c2VyQWdlbnRTaGFkb3dSb290KCkpOwor
ICAgIEFTU0VSVChlbGVtZW50KCkudXNlckFnZW50U2hhZG93Um9vdCgpKTsKIAotICAgIERvY3Vt
ZW50JiBkb2N1bWVudCA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKTsKKyAgICBEb2N1bWVudCYgZG9j
dW1lbnQgPSBlbGVtZW50KCkuZG9jdW1lbnQoKTsKICAgICBhdXRvIHRyYWNrID0gSFRNTERpdkVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAgICAgdHJhY2stPnNldFBzZXVkbyhBdG9taWNTdHJp
bmcoIi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCkpOwogICAgIHRyYWNrLT5hcHBlbmRDaGlsZChTbGlkZXJUaHVtYkVsZW1l
bnQ6OmNyZWF0ZShkb2N1bWVudCkpOwogICAgIGF1dG8gY29udGFpbmVyID0gU2xpZGVyQ29udGFp
bmVyRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICBjb250YWluZXItPmFwcGVuZENoaWxk
KHRyYWNrKTsKLSAgICBlbGVtZW50KCktPnVzZXJBZ2VudFNoYWRvd1Jvb3QoKS0+YXBwZW5kQ2hp
bGQoY29udGFpbmVyKTsKKyAgICBlbGVtZW50KCkudXNlckFnZW50U2hhZG93Um9vdCgpLT5hcHBl
bmRDaGlsZChjb250YWluZXIpOwogfQogCiBIVE1MRWxlbWVudCogUmFuZ2VJbnB1dFR5cGU6OnNs
aWRlclRyYWNrRWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAg
QVNTRVJUKGVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93Um9vdCgpKTsKLSAgICBBU1NFUlQoZWxl
bWVudCgpLT51c2VyQWdlbnRTaGFkb3dSb290KCktPmZpcnN0Q2hpbGQoKSk7IC8vIGNvbnRhaW5l
cgotICAgIEFTU0VSVChlbGVtZW50KCktPnVzZXJBZ2VudFNoYWRvd1Jvb3QoKS0+Zmlyc3RDaGls
ZCgpLT5pc0hUTUxFbGVtZW50KCkpOwotICAgIEFTU0VSVChlbGVtZW50KCktPnVzZXJBZ2VudFNo
YWRvd1Jvb3QoKS0+Zmlyc3RDaGlsZCgpLT5maXJzdENoaWxkKCkpOyAvLyB0cmFjaworICAgIEFT
U0VSVChlbGVtZW50KCkudXNlckFnZW50U2hhZG93Um9vdCgpKTsKKyAgICBBU1NFUlQoZWxlbWVu
dCgpLnVzZXJBZ2VudFNoYWRvd1Jvb3QoKS0+Zmlyc3RDaGlsZCgpKTsgLy8gY29udGFpbmVyCisg
ICAgQVNTRVJUKGVsZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCktPmZpcnN0Q2hpbGQoKS0+
aXNIVE1MRWxlbWVudCgpKTsKKyAgICBBU1NFUlQoZWxlbWVudCgpLnVzZXJBZ2VudFNoYWRvd1Jv
b3QoKS0+Zmlyc3RDaGlsZCgpLT5maXJzdENoaWxkKCkpOyAvLyB0cmFjawogCi0gICAgUmVmUHRy
PFNoYWRvd1Jvb3Q+IHJvb3QgPSBlbGVtZW50KCktPnVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKKyAg
ICBSZWZQdHI8U2hhZG93Um9vdD4gcm9vdCA9IGVsZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290
KCk7CiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKQEAgLTMw
MCw4ICsyOTIsNyBAQCBIVE1MRWxlbWVudCogUmFuZ2VJbnB1dFR5cGU6OnNsaWRlclRodW1iRWxl
bWVudCgpIGNvbnN0CiAKIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBSYW5nZUlucHV0VHlwZTo6
Y3JlYXRlSW5wdXRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxlKQogewotICAgIEFTU0VSVChl
bGVtZW50KCkpOwotICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTbGlkZXI+KCplbGVt
ZW50KCksIFdURk1vdmUoc3R5bGUpKTsKKyAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVy
U2xpZGVyPihlbGVtZW50KCksIFdURk1vdmUoc3R5bGUpKTsKIH0KIAogRGVjaW1hbCBSYW5nZUlu
cHV0VHlwZTo6cGFyc2VUb051bWJlcihjb25zdCBTdHJpbmcmIHNyYywgY29uc3QgRGVjaW1hbCYg
ZGVmYXVsdFZhbHVlKSBjb25zdApAQCAtMzIxLDggKzMxMiw3IEBAIHZvaWQgUmFuZ2VJbnB1dFR5
cGU6OmFjY2Vzc0tleUFjdGlvbihib29sIHNlbmRNb3VzZUV2ZW50cykKIHsKICAgICBJbnB1dFR5
cGU6OmFjY2Vzc0tleUFjdGlvbihzZW5kTW91c2VFdmVudHMpOwogCi0gICAgQVNTRVJUKGVsZW1l
bnQoKSk7Ci0gICAgZWxlbWVudCgpLT5kaXNwYXRjaFNpbXVsYXRlZENsaWNrKDAsIHNlbmRNb3Vz
ZUV2ZW50cyA/IFNlbmRNb3VzZVVwRG93bkV2ZW50cyA6IFNlbmROb0V2ZW50cyk7CisgICAgZWxl
bWVudCgpLmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soMCwgc2VuZE1vdXNlRXZlbnRzID8gU2VuZE1v
dXNlVXBEb3duRXZlbnRzIDogU2VuZE5vRXZlbnRzKTsKIH0KIAogdm9pZCBSYW5nZUlucHV0VHlw
ZTo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQpAQCAtMzMwLDcg
KzMyMCw3IEBAIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSkKICAgICAvLyBGSVhNRTogRG9uJ3Qgd2UgbmVlZCB0byBkbyB0aGlz
IHdvcmsgZm9yIHByZWNpc2lvbkF0dHIgdG9vPwogICAgIGlmIChuYW1lID09IG1heEF0dHIgfHwg
bmFtZSA9PSBtaW5BdHRyKSB7CiAgICAgICAgIC8vIFNhbml0aXplIHRoZSB2YWx1ZS4KLSAgICAg
ICAgaWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKGF1
dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50UHRyKCkpIHsKICAgICAgICAgICAgIGlmIChlbGVt
ZW50LT5oYXNEaXJ0eVZhbHVlKCkpCiAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0VmFsdWUo
ZWxlbWVudC0+dmFsdWUoKSk7CiAgICAgICAgIH0KQEAgLTM0NiwxMCArMzM2LDggQEAgdm9pZCBS
YW5nZUlucHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCB2YWx1ZUNo
YW5nZWQsIFRleHRGaWVsZEUKICAgICBpZiAoIXZhbHVlQ2hhbmdlZCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKGV2ZW50QmVoYXZpb3IgPT0gRGlzcGF0Y2hOb0V2ZW50KSB7Ci0gICAgICAg
IEFTU0VSVChlbGVtZW50KCkpOwotICAgICAgICBlbGVtZW50KCktPnNldFRleHRBc09mTGFzdEZv
cm1Db250cm9sQ2hhbmdlRXZlbnQodmFsdWUpOwotICAgIH0KKyAgICBpZiAoZXZlbnRCZWhhdmlv
ciA9PSBEaXNwYXRjaE5vRXZlbnQpCisgICAgICAgIGVsZW1lbnQoKS5zZXRUZXh0QXNPZkxhc3RG
b3JtQ29udHJvbENoYW5nZUV2ZW50KHZhbHVlKTsKIAogICAgIHR5cGVkU2xpZGVyVGh1bWJFbGVt
ZW50KCkuc2V0UG9zaXRpb25Gcm9tVmFsdWUoKTsKIH0KQEAgLTM4Niw4ICszNzQsNyBAQCB2b2lk
IFJhbmdlSW5wdXRUeXBlOjp1cGRhdGVUaWNrTWFya1ZhbHVlcygpCiAgICAgICAgIHJldHVybjsK
ICAgICBtX3RpY2tNYXJrVmFsdWVzLmNsZWFyKCk7CiAgICAgbV90aWNrTWFya1ZhbHVlc0RpcnR5
ID0gZmFsc2U7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgYXV0byBkYXRhTGlzdCA9IGVs
ZW1lbnQoKS0+ZGF0YUxpc3QoKTsKKyAgICBhdXRvIGRhdGFMaXN0ID0gZWxlbWVudCgpLmRhdGFM
aXN0KCk7CiAgICAgaWYgKCFkYXRhTGlzdCkKICAgICAgICAgcmV0dXJuOwogICAgIFJlZjxIVE1M
Q29sbGVjdGlvbj4gb3B0aW9ucyA9IGRhdGFMaXN0LT5vcHRpb25zKCk7CkBAIC0zOTYsNyArMzgz
LDcgQEAgdm9pZCBSYW5nZUlucHV0VHlwZTo6dXBkYXRlVGlja01hcmtWYWx1ZXMoKQogICAgICAg
ICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG9wdGlvbnMtPml0ZW0oaSk7CiAgICAgICAgIEhUTUxPcHRp
b25FbGVtZW50JiBvcHRpb25FbGVtZW50ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpu
b2RlKTsKICAgICAgICAgU3RyaW5nIG9wdGlvblZhbHVlID0gb3B0aW9uRWxlbWVudC52YWx1ZSgp
OwotICAgICAgICBpZiAoIWVsZW1lbnQoKS0+aXNWYWxpZFZhbHVlKG9wdGlvblZhbHVlKSkKKyAg
ICAgICAgaWYgKCFlbGVtZW50KCkuaXNWYWxpZFZhbHVlKG9wdGlvblZhbHVlKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBtX3RpY2tNYXJrVmFsdWVzLmFwcGVuZChwYXJzZVRvTnVt
YmVyKG9wdGlvblZhbHVlLCBEZWNpbWFsOjpuYW4oKSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvUmVzZXRJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9SZXNldElucHV0VHlwZS5jcHAKaW5kZXggNDA1Y2IyY2M1OTRhM2QzMzExNDZhODU1ZGJmYTE5
NWIzYWI3MDkxNS4uMDE2ZmUxMDRiYjI2ZDMyM2RjYzRiYjM0NTc2ODEzMDhhOTdjMDhhMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SZXNldElucHV0VHlwZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9SZXNldElucHV0VHlwZS5jcHAKQEAgLTUyLDEwICs1Miw5IEBAIGJv
b2wgUmVzZXRJbnB1dFR5cGU6OnN1cHBvcnRzVmFsaWRhdGlvbigpIGNvbnN0CiAKIHZvaWQgUmVz
ZXRJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQmIGV2ZW50KQogewotICAg
IEFTU0VSVChlbGVtZW50KCkpOwotICAgIGlmIChlbGVtZW50KCktPmlzRGlzYWJsZWRGb3JtQ29u
dHJvbCgpIHx8ICFlbGVtZW50KCktPmZvcm0oKSkKKyAgICBpZiAoZWxlbWVudCgpLmlzRGlzYWJs
ZWRGb3JtQ29udHJvbCgpIHx8ICFlbGVtZW50KCkuZm9ybSgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgZWxlbWVudCgpLT5mb3JtKCktPnJlc2V0KCk7CisgICAgZWxlbWVudCgpLmZvcm0oKS0+cmVz
ZXQoKTsKICAgICBldmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1NlYXJjaElucHV0VHlwZS5jcHAKaW5kZXggNzEyNDM5MWEzMDYzZWU1YTI2MjhlNDZkM2Zj
YWM4NWM2MTY4YWVlZS4uZTgyOTViMzE2ZTM4ZmVjNThjMjg3ODlhOGZmNGRmNWY5NzI4NWIzZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmNwcApAQCAtNTYsOSArNTYsOCBA
QCB2b2lkIFNlYXJjaElucHV0VHlwZTo6YWRkU2VhcmNoUmVzdWx0KCkKICAgICAvLyBOb3JtYWxs
eSB3ZSd2ZSBnb3QgdGhlIGNvcnJlY3QgcmVuZGVyZXIgYnkgdGhlIHRpbWUgd2UgZ2V0IGhlcmUu
IEhvd2V2ZXIgd2hlbiB0aGUgaW5wdXQgdHlwZSBjaGFuZ2VzCiAgICAgLy8gd2UgZG9uJ3QgdXBk
YXRlIHRoZSBhc3NvY2lhdGVkIHJlbmRlcmVycyB1bnRpbCBhZnRlciB0aGUgbmV4dCB0cmVlIHVw
ZGF0ZSwgc28gd2UgY291bGQgYWN0dWFsbHkgZW5kIHVwIGhlcmUKICAgICAvLyB3aXRoIGEgbWlz
bWF0Y2hlZCByZW5kZXJlciAoZS5nLiB0aHJvdWdoIGZvcm0gc3VibWlzc2lvbikuCi0gICAgQVNT
RVJUKGVsZW1lbnQoKSk7Ci0gICAgaWYgKGlzPFJlbmRlclNlYXJjaEZpZWxkPihlbGVtZW50KCkt
PnJlbmRlcmVyKCkpKQotICAgICAgICBkb3duY2FzdDxSZW5kZXJTZWFyY2hGaWVsZD4oKmVsZW1l
bnQoKS0+cmVuZGVyZXIoKSkuYWRkU2VhcmNoUmVzdWx0KCk7CisgICAgaWYgKGlzPFJlbmRlclNl
YXJjaEZpZWxkPihlbGVtZW50KCkucmVuZGVyZXIoKSkpCisgICAgICAgIGRvd25jYXN0PFJlbmRl
clNlYXJjaEZpZWxkPigqZWxlbWVudCgpLnJlbmRlcmVyKCkpLmFkZFNlYXJjaFJlc3VsdCgpOwog
I2VuZGlmCiB9CiAKQEAgLTc2LDcgKzc1LDcgQEAgdm9pZCBTZWFyY2hJbnB1dFR5cGU6OmF0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKICAgICBpZiAobmFtZSA9
PSByZXN1bHRzQXR0cikgewogICAgICAgICBpZiAobV9yZXN1bHRzQnV0dG9uKSB7Ci0gICAgICAg
ICAgICBpZiAoYXV0byogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkKKyAgICAgICAgICAgIGlm
IChhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudFB0cigpKQogICAgICAgICAgICAgICAgIHVw
ZGF0ZVJlc3VsdEJ1dHRvblBzZXVkb1R5cGUoKm1fcmVzdWx0c0J1dHRvbiwgZWxlbWVudC0+bWF4
UmVzdWx0cygpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTg1LDggKzg0LDcgQEAgdm9pZCBTZWFy
Y2hJbnB1dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkK
IAogUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFNlYXJjaElucHV0VHlwZTo6Y3JlYXRlSW5wdXRS
ZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxlKQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwot
ICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTZWFyY2hGaWVsZD4oKmVsZW1lbnQoKSwg
V1RGTW92ZShzdHlsZSkpOworICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTZWFyY2hG
aWVsZD4oZWxlbWVudCgpLCBXVEZNb3ZlKHN0eWxlKSk7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmlu
ZyYgU2VhcmNoSW5wdXRUeXBlOjpmb3JtQ29udHJvbFR5cGUoKSBjb25zdApAQCAtMTE1LDEyICsx
MTMsMTEgQEAgdm9pZCBTZWFyY2hJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQogICAg
IEFTU0VSVChjb250YWluZXIpOwogICAgIEFTU0VSVCh0ZXh0V3JhcHBlcik7CiAKLSAgICBBU1NF
UlQoZWxlbWVudCgpKTsKLSAgICBtX3Jlc3VsdHNCdXR0b24gPSBTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25FbGVtZW50OjpjcmVhdGUoZWxlbWVudCgpLT5kb2N1bWVudCgpKTsKLSAgICB1cGRhdGVS
ZXN1bHRCdXR0b25Qc2V1ZG9UeXBlKCptX3Jlc3VsdHNCdXR0b24sIGVsZW1lbnQoKS0+bWF4UmVz
dWx0cygpKTsKKyAgICBtX3Jlc3VsdHNCdXR0b24gPSBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25F
bGVtZW50OjpjcmVhdGUoZWxlbWVudCgpLmRvY3VtZW50KCkpOworICAgIHVwZGF0ZVJlc3VsdEJ1
dHRvblBzZXVkb1R5cGUoKm1fcmVzdWx0c0J1dHRvbiwgZWxlbWVudCgpLm1heFJlc3VsdHMoKSk7
CiAgICAgY29udGFpbmVyLT5pbnNlcnRCZWZvcmUoKm1fcmVzdWx0c0J1dHRvbiwgdGV4dFdyYXBw
ZXIuZ2V0KCkpOwogCi0gICAgbV9jYW5jZWxCdXR0b24gPSBTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
bkVsZW1lbnQ6OmNyZWF0ZShlbGVtZW50KCktPmRvY3VtZW50KCkpOworICAgIG1fY2FuY2VsQnV0
dG9uID0gU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50OjpjcmVhdGUoZWxlbWVudCgpLmRv
Y3VtZW50KCkpOwogICAgIGNvbnRhaW5lci0+aW5zZXJ0QmVmb3JlKCptX2NhbmNlbEJ1dHRvbiwg
dGV4dFdyYXBwZXItPm5leHRTaWJsaW5nKCkpOwogfQogCkBAIC0xMzYsMTUgKzEzMywxNCBAQCBI
VE1MRWxlbWVudCogU2VhcmNoSW5wdXRUeXBlOjpjYW5jZWxCdXR0b25FbGVtZW50KCkgY29uc3QK
IAogdm9pZCBTZWFyY2hJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50
JiBldmVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAoZWxlbWVudCgpLT5p
c0Rpc2FibGVkT3JSZWFkT25seSgpKSB7CisgICAgaWYgKGVsZW1lbnQoKS5pc0Rpc2FibGVkT3JS
ZWFkT25seSgpKSB7CiAgICAgICAgIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2
ZW50KGV2ZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGNvbnN0IFN0cmluZyYg
a2V5ID0gZXZlbnQua2V5SWRlbnRpZmllcigpOwogICAgIGlmIChrZXkgPT0gIlUrMDAxQiIpIHsK
LSAgICAgICAgUmVmPEhUTUxJbnB1dEVsZW1lbnQ+IHByb3RlY3RlZElucHV0RWxlbWVudCgqZWxl
bWVudCgpKTsKKyAgICAgICAgUmVmPEhUTUxJbnB1dEVsZW1lbnQ+IHByb3RlY3RlZElucHV0RWxl
bWVudChlbGVtZW50KCkpOwogICAgICAgICBwcm90ZWN0ZWRJbnB1dEVsZW1lbnQtPnNldFZhbHVl
Rm9yVXNlcihlbXB0eVN0cmluZygpKTsKICAgICAgICAgcHJvdGVjdGVkSW5wdXRFbGVtZW50LT5v
blNlYXJjaCgpOwogICAgICAgICBldmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwpAQCAtMTYyLDkg
KzE1OCw4IEBAIHZvaWQgU2VhcmNoSW5wdXRUeXBlOjpkZXN0cm95U2hhZG93U3VidHJlZSgpCiAK
IHZvaWQgU2VhcmNoSW5wdXRUeXBlOjpzdGFydFNlYXJjaEV2ZW50VGltZXIoKQogewotICAgIEFT
U0VSVChlbGVtZW50KCkpOwotICAgIEFTU0VSVChlbGVtZW50KCktPnJlbmRlcmVyKCkpOwotICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGVsZW1lbnQoKS0+aW5uZXJUZXh0VmFsdWUoKS5sZW5ndGgoKTsK
KyAgICBBU1NFUlQoZWxlbWVudCgpLnJlbmRlcmVyKCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGVsZW1lbnQoKS5pbm5lclRleHRWYWx1ZSgpLmxlbmd0aCgpOwogCiAgICAgaWYgKCFsZW5ndGgp
IHsKICAgICAgICAgbV9zZWFyY2hFdmVudFRpbWVyLnN0YXJ0T25lU2hvdCgwX21zKTsKQEAgLTE4
MywyMSArMTc4LDE4IEBAIHZvaWQgU2VhcmNoSW5wdXRUeXBlOjpzdG9wU2VhcmNoRXZlbnRUaW1l
cigpCiAKIHZvaWQgU2VhcmNoSW5wdXRUeXBlOjpzZWFyY2hFdmVudFRpbWVyRmlyZWQoKQogewot
ICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGVsZW1lbnQoKS0+b25TZWFyY2goKTsKKyAgICBl
bGVtZW50KCkub25TZWFyY2goKTsKIH0KIAogYm9vbCBTZWFyY2hJbnB1dFR5cGU6OnNlYXJjaEV2
ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7
Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihpbmNyZW1lbnRhbEF0dHIpOworICAgIHJldHVybiBlbGVtZW50KCkuaGFzQXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihpbmNyZW1lbnRhbEF0dHIpOwogfQogCiB2b2lkIFNlYXJjaElu
cHV0VHlwZTo6ZGlkU2V0VmFsdWVCeVVzZXJFZGl0KCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgp
KTsKLSAgICBpZiAobV9jYW5jZWxCdXR0b24gJiYgaXM8UmVuZGVyU2VhcmNoRmllbGQ+KGVsZW1l
bnQoKS0+cmVuZGVyZXIoKSkpCi0gICAgICAgIGRvd25jYXN0PFJlbmRlclNlYXJjaEZpZWxkPigq
ZWxlbWVudCgpLT5yZW5kZXJlcigpKS51cGRhdGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KCk7Cisg
ICAgaWYgKG1fY2FuY2VsQnV0dG9uICYmIGlzPFJlbmRlclNlYXJjaEZpZWxkPihlbGVtZW50KCku
cmVuZGVyZXIoKSkpCisgICAgICAgIGRvd25jYXN0PFJlbmRlclNlYXJjaEZpZWxkPigqZWxlbWVu
dCgpLnJlbmRlcmVyKCkpLnVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoKTsKICAgICAvLyBJ
ZiB0aGUgaW5jcmVtZW50YWwgYXR0cmlidXRlIGlzIHNldCwgdGhlbiBkaXNwYXRjaCB0aGUgc2Vh
cmNoIGV2ZW50CiAgICAgaWYgKHNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgpKQogICAg
ICAgICBzdGFydFNlYXJjaEV2ZW50VGltZXIoKTsKQEAgLTIwNyw4ICsxOTksNyBAQCB2b2lkIFNl
YXJjaElucHV0VHlwZTo6ZGlkU2V0VmFsdWVCeVVzZXJFZGl0KCkKIAogYm9vbCBTZWFyY2hJbnB1
dFR5cGU6OnNpemVTaG91bGRJbmNsdWRlRGVjb3JhdGlvbihpbnQsIGludCYgcHJlZmVycmVkU2l6
ZSkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBwcmVmZXJyZWRTaXplID0g
ZWxlbWVudCgpLT5zaXplKCk7CisgICAgcHJlZmVycmVkU2l6ZSA9IGVsZW1lbnQoKS5zaXplKCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
U3VibWl0SW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvU3VibWl0SW5wdXRUeXBl
LmNwcAppbmRleCAxYjFlYTA4MGUzODA3YWM2NTQyYzVjYTI0OTE4NDVjYzBjNzUzYzljLi4zZTVh
YWMwODgwNTZmZDZiOTRkM2U3MGE5ZmZmZjE3OTdmNjM4OGVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL1N1Ym1pdElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9TdWJtaXRJbnB1dFR5cGUuY3BwCkBAIC00OCwxMCArNDgsOSBAQCBjb25zdCBBdG9taWNTdHJp
bmcmIFN1Ym1pdElucHV0VHlwZTo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKIAogYm9vbCBTdWJt
aXRJbnB1dFR5cGU6OmFwcGVuZEZvcm1EYXRhKERPTUZvcm1EYXRhJiBmb3JtRGF0YSwgYm9vbCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAoIWVsZW1lbnQoKS0+aXNB
Y3RpdmF0ZWRTdWJtaXQoKSkKKyAgICBpZiAoIWVsZW1lbnQoKS5pc0FjdGl2YXRlZFN1Ym1pdCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9ybURhdGEuYXBwZW5kKGVsZW1lbnQoKS0+
bmFtZSgpLCBlbGVtZW50KCktPnZhbHVlV2l0aERlZmF1bHQoKSk7CisgICAgZm9ybURhdGEuYXBw
ZW5kKGVsZW1lbnQoKS5uYW1lKCksIGVsZW1lbnQoKS52YWx1ZVdpdGhEZWZhdWx0KCkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC02Miw4ICs2MSw3IEBAIGJvb2wgU3VibWl0SW5wdXRUeXBl
OjpzdXBwb3J0c1JlcXVpcmVkKCkgY29uc3QKIAogdm9pZCBTdWJtaXRJbnB1dFR5cGU6OmhhbmRs
ZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQmIGV2ZW50KQogewotICAgIEFTU0VSVChlbGVtZW50KCkp
OwotICAgIFJlZjxIVE1MSW5wdXRFbGVtZW50PiBwcm90ZWN0ZWRFbGVtZW50KCplbGVtZW50KCkp
OworICAgIFJlZjxIVE1MSW5wdXRFbGVtZW50PiBwcm90ZWN0ZWRFbGVtZW50KGVsZW1lbnQoKSk7
CiAgICAgaWYgKHByb3RlY3RlZEVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpIHx8ICFw
cm90ZWN0ZWRFbGVtZW50LT5mb3JtKCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCmluZGV4IDZmZWZmZmRiOWU4MTQ0ZTczMzcz
NDAyOTBjODViOTk1YzY5ODQ5ZmIuLjE0MzM4N2QxM2JiODUwNTkyZDE4NTQxZmM5OThmNTA2NWI1
OTY2ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKQEAg
LTgzLDE4ICs4MywxNiBAQCBUZXh0RmllbGRJbnB1dFR5cGU6On5UZXh0RmllbGRJbnB1dFR5cGUo
KQogCiBib29sIFRleHRGaWVsZElucHV0VHlwZTo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2Fy
ZEV2ZW50KikgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKICNpZiBQTEFURk9STShJ
T1MpCi0gICAgaWYgKGVsZW1lbnQoKS0+aXNSZWFkT25seSgpKQorICAgIGlmIChlbGVtZW50KCku
aXNSZWFkT25seSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKLSAgICByZXR1cm4g
ZWxlbWVudCgpLT5pc1RleHRGb3JtQ29udHJvbEZvY3VzYWJsZSgpOworICAgIHJldHVybiBlbGVt
ZW50KCkuaXNUZXh0Rm9ybUNvbnRyb2xGb2N1c2FibGUoKTsKIH0KIAogYm9vbCBUZXh0RmllbGRJ
bnB1dFR5cGU6OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50
KCkpOwotICAgIHJldHVybiBlbGVtZW50KCktPmlzVGV4dEZvcm1Db250cm9sRm9jdXNhYmxlKCk7
CisgICAgcmV0dXJuIGVsZW1lbnQoKS5pc1RleHRGb3JtQ29udHJvbEZvY3VzYWJsZSgpOwogfQog
CiBib29sIFRleHRGaWVsZElucHV0VHlwZTo6aXNUZXh0RmllbGQoKSBjb25zdApAQCAtMTE2LDE3
ICsxMTQsMTQgQEAgYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OmlzRW1wdHlWYWx1ZSgpIGNvbnN0
CiAKIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjp2YWx1ZU1pc3NpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gZWxlbWVu
dCgpLT5pc1JlcXVpcmVkKCkgJiYgdmFsdWUuaXNFbXB0eSgpOworICAgIHJldHVybiBlbGVtZW50
KCkuaXNSZXF1aXJlZCgpICYmIHZhbHVlLmlzRW1wdHkoKTsKIH0KIAogdm9pZCBUZXh0RmllbGRJ
bnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wgdmFs
dWVDaGFuZ2VkLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCiB7Ci0gICAg
QVNTRVJUKGVsZW1lbnQoKSk7Ci0KICAgICAvLyBHcmFiIHRoaXMgaW5wdXQgZWxlbWVudCB0byBr
ZWVwIHJlZmVyZW5jZSBldmVuIGlmIEpTIGV2ZW50IGhhbmRsZXIKICAgICAvLyBjaGFuZ2VzIGlu
cHV0IHR5cGUuCi0gICAgUmVmPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0KCplbGVtZW50KCkpOwor
ICAgIFJlZjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dChlbGVtZW50KCkpOwogCiAgICAgLy8gV2Ug
ZG9uJ3QgYXNrIElucHV0VHlwZTo6c2V0VmFsdWUgdG8gZGlzcGF0Y2ggZXZlbnRzIGJlY2F1c2UK
ICAgICAvLyBUZXh0RmllbGRJbnB1dFR5cGUgZGlzcGF0Y2hlcyBldmVudHMgZGlmZmVyZW50IHdh
eSBmcm9tIElucHV0VHlwZS4KQEAgLTE3MiwxNSArMTY3LDE0IEBAIHZvaWQgVGV4dEZpZWxkSW5w
dXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHNhbml0aXplZFZhbHVlLCBib29sIHZhbHVl
Q2hhbmdlCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiB2b2lkIFRleHRGaWVsZElucHV0
VHlwZTo6aGFuZGxlQ2xpY2tFdmVudChNb3VzZUV2ZW50JikKIHsKLSAgICBpZiAoZWxlbWVudCgp
LT5mb2N1c2VkKCkgJiYgZWxlbWVudCgpLT5saXN0KCkpCisgICAgaWYgKGVsZW1lbnQoKS5mb2N1
c2VkKCkgJiYgZWxlbWVudCgpLmxpc3QoKSkKICAgICAgICAgZGlzcGxheVN1Z2dlc3Rpb25zKERh
dGFMaXN0U3VnZ2VzdGlvbkFjdGl2YXRpb25UeXBlOjpDb250cm9sQ2xpY2tlZCk7CiB9CiAjZW5k
aWYKIAogdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2Fy
ZEV2ZW50JiBldmVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAoIWVsZW1l
bnQoKS0+Zm9jdXNlZCgpKQorICAgIGlmICghZWxlbWVudCgpLmZvY3VzZWQoKSkKICAgICAgICAg
cmV0dXJuOwogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQogICAgIGNvbnN0IFN0cmluZyYg
a2V5ID0gZXZlbnQua2V5SWRlbnRpZmllcigpOwpAQCAtMTg5LDE2ICsxODMsMTUgQEAgdm9pZCBU
ZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50JiBldmVu
dCkKICAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CiAjZW5kaWYKLSAg
ICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZWxlbWVudCgpLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0g
ICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmVkaXRvcigpLmRvVGV4dEZpZWxkQ29tbWFuZEZyb21F
dmVudChlbGVtZW50KCksICZldmVudCkpCisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGVsZW1l
bnQoKS5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmVkaXRv
cigpLmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChlbGVtZW50UHRyKCksICZldmVudCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBldmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCiB2b2lk
IFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50Rm9yU3BpbkJ1dHRvbihLZXli
b2FyZEV2ZW50JiBldmVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAoZWxl
bWVudCgpLT5pc0Rpc2FibGVkT3JSZWFkT25seSgpKQorICAgIGlmIChlbGVtZW50KCkuaXNEaXNh
YmxlZE9yUmVhZE9ubHkoKSkKICAgICAgICAgcmV0dXJuOwogI2lmIEVOQUJMRShEQVRBTElTVF9F
TEVNRU5UKQogICAgIGlmIChtX3N1Z2dlc3Rpb25QaWNrZXIpCkBAIC0yMjYsMTYgKzIxOSwxMyBA
QCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6Zm9yd2FyZEV2ZW50KEV2ZW50JiBldmVudCkKICAg
ICBib29sIGlzQmx1ckV2ZW50ID0gZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZl
bnQ7CiAgICAgaWYgKGlzRm9jdXNFdmVudCB8fCBpc0JsdXJFdmVudCkKICAgICAgICAgY2Fwc0xv
Y2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7Ci0gICAgaWYgKGV2ZW50LmlzTW91c2VFdmVudCgpIHx8
IGlzRm9jdXNFdmVudCB8fCBpc0JsdXJFdmVudCkgewotICAgICAgICBBU1NFUlQoZWxlbWVudCgp
KTsKLSAgICAgICAgZWxlbWVudCgpLT5mb3J3YXJkRXZlbnQoZXZlbnQpOwotICAgIH0KKyAgICBp
ZiAoZXZlbnQuaXNNb3VzZUV2ZW50KCkgfHwgaXNGb2N1c0V2ZW50IHx8IGlzQmx1ckV2ZW50KQor
ICAgICAgICBlbGVtZW50KCkuZm9yd2FyZEV2ZW50KGV2ZW50KTsKIH0KIAogdm9pZCBUZXh0Rmll
bGRJbnB1dFR5cGU6OmVsZW1lbnREaWRCbHVyKCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsK
LSAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKKyAgICBhdXRvKiBy
ZW5kZXJlciA9IGVsZW1lbnQoKS5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMjU4LDE3ICsyNDgsMTUgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5
cGU6OmVsZW1lbnREaWRCbHVyKCkKIAogdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUZv
Y3VzRXZlbnQoTm9kZSogb2xkRm9jdXNlZE5vZGUsIEZvY3VzRGlyZWN0aW9uKQogewotICAgIEFT
U0VSVChlbGVtZW50KCkpOwotICAgIEFTU0VSVF9VTlVTRUQob2xkRm9jdXNlZE5vZGUsIG9sZEZv
Y3VzZWROb2RlICE9IGVsZW1lbnQoKSk7Ci0gICAgaWYgKFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBl
bGVtZW50KCktPmRvY3VtZW50KCkuZnJhbWUoKSkKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLnRl
eHRGaWVsZERpZEJlZ2luRWRpdGluZyhlbGVtZW50KCkpOworICAgIEFTU0VSVF9VTlVTRUQob2xk
Rm9jdXNlZE5vZGUsIG9sZEZvY3VzZWROb2RlICE9IGVsZW1lbnRQdHIoKSk7CisgICAgaWYgKFJl
ZlB0cjxGcmFtZT4gZnJhbWUgPSBlbGVtZW50KCkuZG9jdW1lbnQoKS5mcmFtZSgpKQorICAgICAg
ICBmcmFtZS0+ZWRpdG9yKCkudGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKGVsZW1lbnRQdHIoKSk7
CiB9CiAKIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVCbHVyRXZlbnQoKQogewogICAg
IElucHV0VHlwZTo6aGFuZGxlQmx1ckV2ZW50KCk7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0g
ICAgZWxlbWVudCgpLT5lbmRFZGl0aW5nKCk7CisgICAgZWxlbWVudCgpLmVuZEVkaXRpbmcoKTsK
IH0KIAogYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoRXZl
bnQmIGV2ZW50KQpAQCAtMjc5LDggKzI2Nyw3IEBAIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpz
aG91bGRTdWJtaXRJbXBsaWNpdGx5KEV2ZW50JiBldmVudCkKIAogUmVuZGVyUHRyPFJlbmRlckVs
ZW1lbnQ+IFRleHRGaWVsZElucHV0VHlwZTo6Y3JlYXRlSW5wdXRSZW5kZXJlcihSZW5kZXJTdHls
ZSYmIHN0eWxlKQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBjcmVhdGVS
ZW5kZXJlcjxSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU+KCplbGVtZW50KCksIFdURk1vdmUo
c3R5bGUpKTsKKyAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lPihlbGVtZW50KCksIFdURk1vdmUoc3R5bGUpKTsKIH0KIAogYm9vbCBUZXh0RmllbGRJ
bnB1dFR5cGU6Om5lZWRzQ29udGFpbmVyKCkgY29uc3QKQEAgLTI5MCwyMCArMjc3LDE3IEBAIGJv
b2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpuZWVkc0NvbnRhaW5lcigpIGNvbnN0CiAKIGJvb2wgVGV4
dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRIYXZlU3BpbkJ1dHRvbigpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5zaG91
bGRIYXZlU3BpbkJ1dHRvbigqZWxlbWVudCgpKTsKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnNp
bmdsZXRvbigpLnNob3VsZEhhdmVTcGluQnV0dG9uKGVsZW1lbnQoKSk7CiB9CiAKIGJvb2wgVGV4
dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRIYXZlQ2Fwc0xvY2tJbmRpY2F0b3IoKSBjb25zdAogewot
ICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9u
KCkuc2hvdWxkSGF2ZUNhcHNMb2NrSW5kaWNhdG9yKCplbGVtZW50KCkpOworICAgIHJldHVybiBS
ZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuc2hvdWxkSGF2ZUNhcHNMb2NrSW5kaWNhdG9yKGVsZW1l
bnQoKSk7CiB9CiAKIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpjcmVhdGVTaGFkb3dTdWJ0cmVl
KCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBBU1NFUlQoZWxlbWVudCgpLT5zaGFk
b3dSb290KCkpOworICAgIEFTU0VSVChlbGVtZW50KCkuc2hhZG93Um9vdCgpKTsKIAogICAgIEFT
U0VSVCghbV9pbm5lclRleHQpOwogICAgIEFTU0VSVCghbV9pbm5lckJsb2NrKTsKQEAgLTMxMSw3
ICsyOTUsNyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgp
CiAgICAgQVNTRVJUKCFtX2NhcHNMb2NrSW5kaWNhdG9yKTsKICAgICBBU1NFUlQoIW1fYXV0b0Zp
bGxCdXR0b24pOwogCi0gICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZWxlbWVudCgpLT5kb2N1bWVu
dCgpOworICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQoKS5kb2N1bWVudCgpOwogICAg
IGJvb2wgc2hvdWxkSGF2ZVNwaW5CdXR0b24gPSB0aGlzLT5zaG91bGRIYXZlU3BpbkJ1dHRvbigp
OwogICAgIGJvb2wgc2hvdWxkSGF2ZUNhcHNMb2NrSW5kaWNhdG9yID0gdGhpcy0+c2hvdWxkSGF2
ZUNhcHNMb2NrSW5kaWNhdG9yKCk7CiAgICAgYm9vbCBjcmVhdGVzQ29udGFpbmVyID0gc2hvdWxk
SGF2ZVNwaW5CdXR0b24gfHwgc2hvdWxkSGF2ZUNhcHNMb2NrSW5kaWNhdG9yIHx8IG5lZWRzQ29u
dGFpbmVyKCk7CkBAIC0zMTksNyArMzAzLDcgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmNy
ZWF0ZVNoYWRvd1N1YnRyZWUoKQogICAgIG1faW5uZXJUZXh0ID0gVGV4dENvbnRyb2xJbm5lclRl
eHRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwogCiAgICAgaWYgKCFjcmVhdGVzQ29udGFpbmVy
KSB7Ci0gICAgICAgIGVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93Um9vdCgpLT5hcHBlbmRDaGls
ZCgqbV9pbm5lclRleHQpOworICAgICAgICBlbGVtZW50KCkudXNlckFnZW50U2hhZG93Um9vdCgp
LT5hcHBlbmRDaGlsZCgqbV9pbm5lclRleHQpOwogICAgICAgICB1cGRhdGVQbGFjZWhvbGRlclRl
eHQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM5OCw3ICszODIsNyBAQCB2b2lkIFRl
eHRGaWVsZElucHV0VHlwZTo6ZGVzdHJveVNoYWRvd1N1YnRyZWUoKQogdm9pZCBUZXh0RmllbGRJ
bnB1dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsK
ICAgICBpZiAobmFtZSA9PSB2YWx1ZUF0dHIgfHwgbmFtZSA9PSBwbGFjZWhvbGRlckF0dHIpIHsK
LSAgICAgICAgaWYgKGVsZW1lbnQoKSkKKyAgICAgICAgaWYgKGVsZW1lbnRQdHIoKSkKICAgICAg
ICAgICAgIHVwZGF0ZUlubmVyVGV4dFZhbHVlKCk7CiAgICAgfQogICAgIElucHV0VHlwZTo6YXR0
cmlidXRlQ2hhbmdlZChuYW1lKTsKQEAgLTUxNywxMyArNTAxLDEyIEBAIFN0cmluZyBUZXh0Rmll
bGRJbnB1dFR5cGU6OnNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKSBj
b25zdAogCiB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQmIGV2ZW50KQogewotICAgIEFTU0VSVChlbGVt
ZW50KCkpOwogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXh0IHRvIGJlIGluc2VydGVkIHdp
bGwgbm90IHZpb2xhdGUgdGhlIG1heExlbmd0aC4KIAogICAgIC8vIFdlIHVzZSBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnRleHQoKSBpbnN0ZWFkIG9mIElucHV0RWxlbWVudDo6dmFsdWUo
KQogICAgIC8vIGJlY2F1c2UgdGhleSBjYW4gYmUgbWlzbWF0Y2hlZCBieSBzYW5pdGl6ZVZhbHVl
KCkgaW4KICAgICAvLyBIVE1MSW5wdXRFbGVtZW50OjpzdWJ0cmVlSGFzQ2hhbmdlZCgpIGluIHNv
bWUgY2FzZXMuCi0gICAgU3RyaW5nIGlubmVyVGV4dCA9IGVsZW1lbnQoKS0+aW5uZXJUZXh0VmFs
dWUoKTsKKyAgICBTdHJpbmcgaW5uZXJUZXh0ID0gZWxlbWVudCgpLmlubmVyVGV4dFZhbHVlKCk7
CiAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbnVtR3JhcGhlbWVDbHVzdGVycyhpbm5lclRleHQp
OwogCiAgICAgLy8gc2VsZWN0aW9uTGVuZ3RoIHJlcHJlc2VudHMgdGhlIHNlbGVjdGlvbiBsZW5n
dGggb2YgdGhpcyB0ZXh0IGZpZWxkIHRvIGJlCkBAIC01MzIsMTggKzUxNSwxOCBAQCB2b2lkIFRl
eHRGaWVsZElucHV0VHlwZTo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQmCiAgICAgLy8gc2VsZWN0aW9uIGxlbmd0aC4gVGhlIHNlbGVjdGlvbiBp
cyB0aGUgc291cmNlIG9mIHRleHQgZHJhZy1hbmQtZHJvcCBpbgogICAgIC8vIHRoYXQgY2FzZSwg
YW5kIG5vdGhpbmcgaW4gdGhlIHRleHQgZmllbGQgd2lsbCBiZSByZW1vdmVkLgogICAgIHVuc2ln
bmVkIHNlbGVjdGlvbkxlbmd0aCA9IDA7Ci0gICAgaWYgKGVsZW1lbnQoKS0+Zm9jdXNlZCgpKSB7
Ci0gICAgICAgIEFTU0VSVChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woZWxlbWVudCgpLT5kb2N1
bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpID09IGVsZW1l
bnQoKSk7Ci0gICAgICAgIGludCBzZWxlY3Rpb25TdGFydCA9IGVsZW1lbnQoKS0+c2VsZWN0aW9u
U3RhcnQoKTsKLSAgICAgICAgQVNTRVJUKHNlbGVjdGlvblN0YXJ0IDw9IGVsZW1lbnQoKS0+c2Vs
ZWN0aW9uRW5kKCkpOwotICAgICAgICBpbnQgc2VsZWN0aW9uQ29kZVVuaXRDb3VudCA9IGVsZW1l
bnQoKS0+c2VsZWN0aW9uRW5kKCkgLSBzZWxlY3Rpb25TdGFydDsKKyAgICBpZiAoZWxlbWVudCgp
LmZvY3VzZWQoKSkgeworICAgICAgICBBU1NFUlQoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGVs
ZW1lbnQoKS5kb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkpID09IGVsZW1lbnRQdHIoKSk7CisgICAgICAgIGludCBzZWxlY3Rpb25TdGFydCA9IGVsZW1l
bnQoKS5zZWxlY3Rpb25TdGFydCgpOworICAgICAgICBBU1NFUlQoc2VsZWN0aW9uU3RhcnQgPD0g
ZWxlbWVudCgpLnNlbGVjdGlvbkVuZCgpKTsKKyAgICAgICAgaW50IHNlbGVjdGlvbkNvZGVVbml0
Q291bnQgPSBlbGVtZW50KCkuc2VsZWN0aW9uRW5kKCkgLSBzZWxlY3Rpb25TdGFydDsKICAgICAg
ICAgc2VsZWN0aW9uTGVuZ3RoID0gc2VsZWN0aW9uQ29kZVVuaXRDb3VudCA/IG51bUdyYXBoZW1l
Q2x1c3RlcnMoU3RyaW5nVmlldyhpbm5lclRleHQpLnN1YnN0cmluZyhzZWxlY3Rpb25TdGFydCwg
c2VsZWN0aW9uQ29kZVVuaXRDb3VudCkpIDogMDsKICAgICB9CiAgICAgQVNTRVJUKG9sZExlbmd0
aCA+PSBzZWxlY3Rpb25MZW5ndGgpOwogCiAgICAgLy8gU2VsZWN0ZWQgY2hhcmFjdGVycyB3aWxs
IGJlIHJlbW92ZWQgYnkgdGhlIG5leHQgdGV4dCBldmVudC4KICAgICB1bnNpZ25lZCBiYXNlTGVu
Z3RoID0gb2xkTGVuZ3RoIC0gc2VsZWN0aW9uTGVuZ3RoOwotICAgIHVuc2lnbmVkIG1heExlbmd0
aCA9IGlzVGV4dFR5cGUoKSA/IGVsZW1lbnQoKS0+ZWZmZWN0aXZlTWF4TGVuZ3RoKCkgOiBIVE1M
SW5wdXRFbGVtZW50OjptYXhFZmZlY3RpdmVMZW5ndGg7CisgICAgdW5zaWduZWQgbWF4TGVuZ3Ro
ID0gaXNUZXh0VHlwZSgpID8gZWxlbWVudCgpLmVmZmVjdGl2ZU1heExlbmd0aCgpIDogSFRNTElu
cHV0RWxlbWVudDo6bWF4RWZmZWN0aXZlTGVuZ3RoOwogICAgIHVuc2lnbmVkIGFwcGVuZGFibGVM
ZW5ndGggPSBtYXhMZW5ndGggPiBiYXNlTGVuZ3RoID8gbWF4TGVuZ3RoIC0gYmFzZUxlbmd0aCA6
IDA7CiAKICAgICAvLyBUcnVuY2F0ZSB0aGUgaW5zZXJ0ZWQgdGV4dCB0byBhdm9pZCB2aW9sYXRp
bmcgdGhlIG1heExlbmd0aCBhbmQgb3RoZXIgY29uc3RyYWludHMuCkBAIC01NzEsOCArNTU0LDcg
QEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OnVwZGF0ZVBsYWNlaG9sZGVyVGV4dCgpCiB7CiAg
ICAgaWYgKCFzdXBwb3J0c1BsYWNlaG9sZGVyKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NF
UlQoZWxlbWVudCgpKTsKLSAgICBTdHJpbmcgcGxhY2Vob2xkZXJUZXh0ID0gZWxlbWVudCgpLT5z
dHJpcHBlZFBsYWNlaG9sZGVyKCk7CisgICAgU3RyaW5nIHBsYWNlaG9sZGVyVGV4dCA9IGVsZW1l
bnQoKS5zdHJpcHBlZFBsYWNlaG9sZGVyKCk7CiAgICAgaWYgKHBsYWNlaG9sZGVyVGV4dC5pc0Vt
cHR5KCkpIHsKICAgICAgICAgaWYgKG1fcGxhY2Vob2xkZXIpIHsKICAgICAgICAgICAgIG1fcGxh
Y2Vob2xkZXItPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQoKm1fcGxhY2Vob2xkZXIpOwpAQCAt
NTgxLDggKzU2Myw4IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjp1cGRhdGVQbGFjZWhvbGRl
clRleHQoKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghbV9wbGFjZWhvbGRlcikg
ewotICAgICAgICBtX3BsYWNlaG9sZGVyID0gVGV4dENvbnRyb2xQbGFjZWhvbGRlckVsZW1lbnQ6
OmNyZWF0ZShlbGVtZW50KCktPmRvY3VtZW50KCkpOwotICAgICAgICBlbGVtZW50KCktPnVzZXJB
Z2VudFNoYWRvd1Jvb3QoKS0+aW5zZXJ0QmVmb3JlKCptX3BsYWNlaG9sZGVyLCBtX2NvbnRhaW5l
ciA/IG1fY29udGFpbmVyLmdldCgpIDogaW5uZXJUZXh0RWxlbWVudCgpLmdldCgpKTsKKyAgICAg
ICAgbV9wbGFjZWhvbGRlciA9IFRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50OjpjcmVhdGUo
ZWxlbWVudCgpLmRvY3VtZW50KCkpOworICAgICAgICBlbGVtZW50KCkudXNlckFnZW50U2hhZG93
Um9vdCgpLT5pbnNlcnRCZWZvcmUoKm1fcGxhY2Vob2xkZXIsIG1fY29udGFpbmVyID8gbV9jb250
YWluZXIuZ2V0KCkgOiBpbm5lclRleHRFbGVtZW50KCkuZ2V0KCkpOwogICAgIH0KICAgICBtX3Bs
YWNlaG9sZGVyLT5zZXRJbm5lclRleHQocGxhY2Vob2xkZXJUZXh0KTsKIH0KQEAgLTU5MCwxMCAr
NTcyLDkgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OnVwZGF0ZVBsYWNlaG9sZGVyVGV4dCgp
CiBib29sIFRleHRGaWVsZElucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRE9NRm9ybURhdGEmIGZv
cm1EYXRhLCBib29sIG11bHRpcGFydCkgY29uc3QKIHsKICAgICBJbnB1dFR5cGU6OmFwcGVuZEZv
cm1EYXRhKGZvcm1EYXRhLCBtdWx0aXBhcnQpOwotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAg
IGF1dG8mIGRpcm5hbWVBdHRyVmFsdWUgPSBlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oZGlybmFtZUF0dHIpOworICAgIGF1dG8mIGRpcm5hbWVBdHRyVmFsdWUgPSBl
bGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihkaXJuYW1lQXR0cik7CiAg
ICAgaWYgKCFkaXJuYW1lQXR0clZhbHVlLmlzTnVsbCgpKQotICAgICAgICBmb3JtRGF0YS5hcHBl
bmQoZGlybmFtZUF0dHJWYWx1ZSwgZWxlbWVudCgpLT5kaXJlY3Rpb25Gb3JGb3JtRGF0YSgpKTsK
KyAgICAgICAgZm9ybURhdGEuYXBwZW5kKGRpcm5hbWVBdHRyVmFsdWUsIGVsZW1lbnQoKS5kaXJl
Y3Rpb25Gb3JGb3JtRGF0YSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNjA0LDggKzU4
NSw3IEBAIFN0cmluZyBUZXh0RmllbGRJbnB1dFR5cGU6OmNvbnZlcnRGcm9tVmlzaWJsZVZhbHVl
KGNvbnN0IFN0cmluZyYgdmlzaWJsZVZhbHVlKSBjCiAKIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBl
OjpzdWJ0cmVlSGFzQ2hhbmdlZCgpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgZWxl
bWVudCgpLT5zZXRDaGFuZ2VkU2luY2VMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCh0cnVlKTsK
KyAgICBlbGVtZW50KCkuc2V0Q2hhbmdlZFNpbmNlTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQo
dHJ1ZSk7CiAKICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNhbGwgc2FuaXRpemVVc2VySW5wdXRW
YWx1ZSgpIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZQogICAgIC8vIEhUTUxJbnB1dEVsZW1lbnQ6Omhh
bmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkgaGFzIGFscmVhZHkgY2FsbGVkCkBAIC02MTcs
MjYgKzU5NywyNSBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6c3VidHJlZUhhc0NoYW5nZWQo
KQogICAgIC8vIHVzZXIgaW5wdXQgaW4gb3JkZXIgdG8gcmV0YWluIHBhcml0eSBiZXR3ZWVuIHdo
YXQncyBpbiB0aGUgbW9kZWwgYW5kCiAgICAgLy8gd2hhdCdzIG9uIHRoZSBzY3JlZW4uIE90aGVy
d2lzZSwgd2UgcmV0YWluIHRoZSBzYW5pdGl6YXRpb24gcHJvY2VzcyBmb3IKICAgICAvLyBiYWNr
d2FyZCBjb21wYXRpYmlsaXR5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUwMzQ2Ci0gICAgU3RyaW5nIGlubmVyVGV4dCA9IGNvbnZlcnRGcm9tVmlzaWJsZVZhbHVl
KGVsZW1lbnQoKS0+aW5uZXJUZXh0VmFsdWUoKSk7CisgICAgU3RyaW5nIGlubmVyVGV4dCA9IGNv
bnZlcnRGcm9tVmlzaWJsZVZhbHVlKGVsZW1lbnQoKS5pbm5lclRleHRWYWx1ZSgpKTsKICAgICBp
ZiAoIXN1cHBvcnRzU2VsZWN0aW9uQVBJKCkpCiAgICAgICAgIGlubmVyVGV4dCA9IHNhbml0aXpl
VmFsdWUoaW5uZXJUZXh0KTsKLSAgICBlbGVtZW50KCktPnNldFZhbHVlRnJvbVJlbmRlcmVyKGlu
bmVyVGV4dCk7Ci0gICAgZWxlbWVudCgpLT51cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoKTsK
KyAgICBlbGVtZW50KCkuc2V0VmFsdWVGcm9tUmVuZGVyZXIoaW5uZXJUZXh0KTsKKyAgICBlbGVt
ZW50KCkudXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KCk7CiAgICAgLy8gUmVjYWxjIGZvciA6
aW52YWxpZCBjaGFuZ2UuCi0gICAgZWxlbWVudCgpLT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVl
KCk7CisgICAgZWxlbWVudCgpLmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIAogICAgIGRp
ZFNldFZhbHVlQnlVc2VyRWRpdCgpOwogfQogCiB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZGlk
U2V0VmFsdWVCeVVzZXJFZGl0KCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAo
IWVsZW1lbnQoKS0+Zm9jdXNlZCgpKQorICAgIGlmICghZWxlbWVudCgpLmZvY3VzZWQoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGlmIChSZWZQdHI8RnJhbWU+IGZyYW1lID0gZWxlbWVudCgpLT5k
b2N1bWVudCgpLmZyYW1lKCkpCi0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS50ZXh0RGlkQ2hhbmdl
SW5UZXh0RmllbGQoZWxlbWVudCgpKTsKKyAgICBpZiAoUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGVs
ZW1lbnQoKS5kb2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAgIGZyYW1lLT5lZGl0b3IoKS50ZXh0
RGlkQ2hhbmdlSW5UZXh0RmllbGQoZWxlbWVudFB0cigpKTsKICNpZiBFTkFCTEUoREFUQUxJU1Rf
RUxFTUVOVCkKLSAgICBpZiAoZWxlbWVudCgpLT5saXN0KCkpCisgICAgaWYgKGVsZW1lbnQoKS5s
aXN0KCkpCiAgICAgICAgIGRpc3BsYXlTdWdnZXN0aW9ucyhEYXRhTGlzdFN1Z2dlc3Rpb25BY3Rp
dmF0aW9uVHlwZTo6VGV4dENoYW5nZWQpOwogI2VuZGlmCiB9CkBAIC02NTMsNDUgKzYzMiw0MCBA
QCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6c3BpbkJ1dHRvblN0ZXBVcCgpCiAKIHZvaWQgVGV4
dEZpZWxkSW5wdXRUeXBlOjp1cGRhdGVJbm5lclRleHRWYWx1ZSgpCiB7Ci0gICAgQVNTRVJUKGVs
ZW1lbnQoKSk7Ci0gICAgaWYgKCFlbGVtZW50KCktPmZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVu
ZGVyZXIoKSkgeworICAgIGlmICghZWxlbWVudCgpLmZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVu
ZGVyZXIoKSkgewogICAgICAgICAvLyBVcGRhdGUgdGhlIHJlbmRlcmVyIHZhbHVlIGlmIHRoZSBm
b3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgZmxhZyBpcyBmYWxzZS4KICAgICAgICAg
Ly8gSXQgcHJvdGVjdHMgYW4gdW5hY2NlcHRhYmxlIHJlbmRlcmVyIHZhbHVlIGZyb20gYmVpbmcg
b3ZlcndyaXR0ZW4gd2l0aCB0aGUgRE9NIHZhbHVlLgotICAgICAgICBlbGVtZW50KCktPnNldElu
bmVyVGV4dFZhbHVlKHZpc2libGVWYWx1ZSgpKTsKLSAgICAgICAgZWxlbWVudCgpLT51cGRhdGVQ
bGFjZWhvbGRlclZpc2liaWxpdHkoKTsKKyAgICAgICAgZWxlbWVudCgpLnNldElubmVyVGV4dFZh
bHVlKHZpc2libGVWYWx1ZSgpKTsKKyAgICAgICAgZWxlbWVudCgpLnVwZGF0ZVBsYWNlaG9sZGVy
VmlzaWJpbGl0eSgpOwogICAgIH0KIH0KIAogdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmZvY3Vz
QW5kU2VsZWN0U3BpbkJ1dHRvbk93bmVyKCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAg
ICBSZWY8SFRNTElucHV0RWxlbWVudD4gaW5wdXQoKmVsZW1lbnQoKSk7CisgICAgUmVmPEhUTUxJ
bnB1dEVsZW1lbnQ+IGlucHV0KGVsZW1lbnQoKSk7CiAgICAgaW5wdXQtPmZvY3VzKCk7CiAgICAg
aW5wdXQtPnNlbGVjdCgpOwogfQogCiBib29sIFRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkU3Bp
bkJ1dHRvblJlc3BvbmRUb01vdXNlRXZlbnRzKCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsK
LSAgICByZXR1cm4gIWVsZW1lbnQoKS0+aXNEaXNhYmxlZE9yUmVhZE9ubHkoKTsKKyAgICByZXR1
cm4gIWVsZW1lbnQoKS5pc0Rpc2FibGVkT3JSZWFkT25seSgpOwogfQogCiBib29sIFRleHRGaWVs
ZElucHV0VHlwZTo6c2hvdWxkU3BpbkJ1dHRvblJlc3BvbmRUb1doZWVsRXZlbnRzKCkKIHsKLSAg
ICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gc2hvdWxkU3BpbkJ1dHRvblJlc3BvbmRU
b01vdXNlRXZlbnRzKCkgJiYgZWxlbWVudCgpLT5mb2N1c2VkKCk7CisgICAgcmV0dXJuIHNob3Vs
ZFNwaW5CdXR0b25SZXNwb25kVG9Nb3VzZUV2ZW50cygpICYmIGVsZW1lbnQoKS5mb2N1c2VkKCk7
CiB9CiAKIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0
b3IoKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGlmIChlbGVtZW50KCkt
PmRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKSAhPSBlbGVtZW50KCkpCisgICAgaWYgKGVsZW1l
bnQoKS5kb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCkgIT0gZWxlbWVudFB0cigpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudCgpLT5pc0Rpc2FibGVkT3JSZWFkT25s
eSgpKQorICAgIGlmIChlbGVtZW50KCkuaXNEaXNhYmxlZE9yUmVhZE9ubHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGVsZW1lbnQoKS0+ZG9j
dW1lbnQoKS5mcmFtZSgpOworICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBlbGVtZW50KCkuZG9j
dW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtNzEyLDMzICs2ODYsMzAgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmNhcHNMb2Nr
U3RhdGVNYXlIYXZlQ2hhbmdlZCgpCiAKIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRE
cmF3QXV0b0ZpbGxCdXR0b24oKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAg
IHJldHVybiAhZWxlbWVudCgpLT5pc0Rpc2FibGVkT3JSZWFkT25seSgpICYmIGVsZW1lbnQoKS0+
YXV0b0ZpbGxCdXR0b25UeXBlKCkgIT0gQXV0b0ZpbGxCdXR0b25UeXBlOjpOb25lOworICAgIHJl
dHVybiAhZWxlbWVudCgpLmlzRGlzYWJsZWRPclJlYWRPbmx5KCkgJiYgZWxlbWVudCgpLmF1dG9G
aWxsQnV0dG9uVHlwZSgpICE9IEF1dG9GaWxsQnV0dG9uVHlwZTo6Tm9uZTsKIH0KIAogdm9pZCBU
ZXh0RmllbGRJbnB1dFR5cGU6OmF1dG9GaWxsQnV0dG9uRWxlbWVudFdhc0NsaWNrZWQoKQogewot
ICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIFBhZ2UqIHBhZ2UgPSBlbGVtZW50KCktPmRvY3Vt
ZW50KCkucGFnZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBlbGVtZW50KCkuZG9jdW1lbnQoKS5wYWdl
KCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBwYWdlLT5jaHJvbWUo
KS5jbGllbnQoKS5oYW5kbGVBdXRvRmlsbEJ1dHRvbkNsaWNrKCplbGVtZW50KCkpOworICAgIHBh
Z2UtPmNocm9tZSgpLmNsaWVudCgpLmhhbmRsZUF1dG9GaWxsQnV0dG9uQ2xpY2soZWxlbWVudCgp
KTsKIH0KIAogdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmNyZWF0ZUNvbnRhaW5lcigpCiB7CiAg
ICAgQVNTRVJUKCFtX2NvbnRhaW5lcik7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAKLSAgICBt
X2NvbnRhaW5lciA9IFRleHRDb250cm9sSW5uZXJDb250YWluZXI6OmNyZWF0ZShlbGVtZW50KCkt
PmRvY3VtZW50KCkpOworICAgIG1fY29udGFpbmVyID0gVGV4dENvbnRyb2xJbm5lckNvbnRhaW5l
cjo6Y3JlYXRlKGVsZW1lbnQoKS5kb2N1bWVudCgpKTsKICAgICBtX2NvbnRhaW5lci0+c2V0UHNl
dWRvKEF0b21pY1N0cmluZygiLXdlYmtpdC10ZXh0ZmllbGQtZGVjb3JhdGlvbi1jb250YWluZXIi
LCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAKLSAgICBtX2lubmVyQmxv
Y2sgPSBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6Y3JlYXRlKGVsZW1lbnQoKS0+ZG9jdW1lbnQo
KSk7CisgICAgbV9pbm5lckJsb2NrID0gVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OmNyZWF0ZShl
bGVtZW50KCkuZG9jdW1lbnQoKSk7CiAgICAgbV9pbm5lckJsb2NrLT5hcHBlbmRDaGlsZCgqbV9p
bm5lclRleHQpOwogICAgIG1fY29udGFpbmVyLT5hcHBlbmRDaGlsZCgqbV9pbm5lckJsb2NrKTsK
IAotICAgIGVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZCgqbV9j
b250YWluZXIpOworICAgIGVsZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCktPmFwcGVuZENo
aWxkKCptX2NvbnRhaW5lcik7CiB9CiAKIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpjcmVhdGVB
dXRvRmlsbEJ1dHRvbihBdXRvRmlsbEJ1dHRvblR5cGUgYXV0b0ZpbGxCdXR0b25UeXBlKQpAQCAt
NzQ4LDggKzcxOSw3IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpjcmVhdGVBdXRvRmlsbEJ1
dHRvbihBdXRvRmlsbEJ1dHRvblR5cGUgYXV0b0ZpbGxCdXR0b25UCiAgICAgaWYgKGF1dG9GaWxs
QnV0dG9uVHlwZSA9PSBBdXRvRmlsbEJ1dHRvblR5cGU6Ok5vbmUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIG1fYXV0b0ZpbGxCdXR0b24gPSBBdXRvRmls
bEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShlbGVtZW50KCktPmRvY3VtZW50KCksICp0aGlzKTsKKyAg
ICBtX2F1dG9GaWxsQnV0dG9uID0gQXV0b0ZpbGxCdXR0b25FbGVtZW50OjpjcmVhdGUoZWxlbWVu
dCgpLmRvY3VtZW50KCksICp0aGlzKTsKICAgICBtX2F1dG9GaWxsQnV0dG9uLT5zZXRQc2V1ZG8o
YXV0b0ZpbGxCdXR0b25UeXBlVG9BdXRvRmlsbEJ1dHRvblBzZXVkb0NsYXNzTmFtZShhdXRvRmls
bEJ1dHRvblR5cGUpKTsKICAgICBtX2F1dG9GaWxsQnV0dG9uLT5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKHJvbGVBdHRyLCBBdG9taWNTdHJpbmcoImJ1dHRvbiIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKICAgICBtX2F1dG9GaWxsQnV0dG9uLT5zZXRB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFyaWFfbGFiZWxBdHRyLCBhdXRvRmlsbEJ1
dHRvblR5cGVUb0FjY2Vzc2liaWxpdHlMYWJlbChhdXRvRmlsbEJ1dHRvblR5cGUpKTsKQEAgLTc2
Myw4ICs3MzMsNyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6dXBkYXRlQXV0b0ZpbGxCdXR0
b24oKQogICAgICAgICBpZiAoIW1fY29udGFpbmVyKQogICAgICAgICAgICAgY3JlYXRlQ29udGFp
bmVyKCk7CiAKLSAgICAgICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgICAgIEF1dG9GaWxsQnV0
dG9uVHlwZSBhdXRvRmlsbEJ1dHRvblR5cGUgPSBlbGVtZW50KCktPmF1dG9GaWxsQnV0dG9uVHlw
ZSgpOworICAgICAgICBBdXRvRmlsbEJ1dHRvblR5cGUgYXV0b0ZpbGxCdXR0b25UeXBlID0gZWxl
bWVudCgpLmF1dG9GaWxsQnV0dG9uVHlwZSgpOwogICAgICAgICBpZiAoIW1fYXV0b0ZpbGxCdXR0
b24pCiAgICAgICAgICAgICBjcmVhdGVBdXRvRmlsbEJ1dHRvbihhdXRvRmlsbEJ1dHRvblR5cGUp
OwogCkBAIC03ODcsMjMgKzc1NiwyMyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6dXBkYXRl
QXV0b0ZpbGxCdXR0b24oKQogCiBJbnRSZWN0IFRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudFJl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKSBjb25zdAogewotICAgIGlmICghZWxlbWVudCgpLT5y
ZW5kZXJlcigpKQorICAgIGlmICghZWxlbWVudCgpLnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVy
biBJbnRSZWN0KCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS52aWV3KCktPmNv
bnRlbnRzVG9Sb290VmlldyhlbGVtZW50KCktPnJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdC
b3hSZWN0KCkpOworICAgIHJldHVybiBlbGVtZW50KCkuZG9jdW1lbnQoKS52aWV3KCktPmNvbnRl
bnRzVG9Sb290VmlldyhlbGVtZW50KCkucmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJl
Y3QoKSk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IFRleHRGaWVsZElucHV0VHlwZTo6c3VnZ2VzdGlv
bnMoKSBjb25zdAogewogICAgIFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwogCi0gICAgaWYg
KGF1dG8gZGF0YUxpc3QgPSBlbGVtZW50KCktPmRhdGFMaXN0KCkpIHsKKyAgICBpZiAoYXV0byBk
YXRhTGlzdCA9IGVsZW1lbnQoKS5kYXRhTGlzdCgpKSB7CiAgICAgICAgIFJlZjxIVE1MQ29sbGVj
dGlvbj4gb3B0aW9ucyA9IGRhdGFMaXN0LT5vcHRpb25zKCk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGF1dG8qIG9wdGlvbiA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PihvcHRp
b25zLT5pdGVtKGkpKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIWVsZW1lbnQoKS0+aXNWYWxp
ZFZhbHVlKG9wdGlvbi0+dmFsdWUoKSkpCisgICAgICAgICAgICBpZiAoIWVsZW1lbnQoKS5pc1Zh
bGlkVmFsdWUob3B0aW9uLT52YWx1ZSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAog
ICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gc2FuaXRpemVWYWx1ZShvcHRpb24tPnZhbHVlKCkp
OwotICAgICAgICAgICAgaWYgKCFzdWdnZXN0aW9ucy5jb250YWlucyh2YWx1ZSkgJiYgKGVsZW1l
bnQoKS0+dmFsdWUoKS5pc0VtcHR5KCkgfHwgdmFsdWUuY29udGFpbnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShlbGVtZW50KCktPnZhbHVlKCkpKSkKKyAgICAgICAgICAgIGlmICghc3VnZ2VzdGlvbnMuY29u
dGFpbnModmFsdWUpICYmIChlbGVtZW50KCkudmFsdWUoKS5pc0VtcHR5KCkgfHwgdmFsdWUuY29u
dGFpbnNJZ25vcmluZ0FTQ0lJQ2FzZShlbGVtZW50KCkudmFsdWUoKSkpKQogICAgICAgICAgICAg
ICAgIHN1Z2dlc3Rpb25zLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC04MTMs
NyArNzgyLDcgQEAgVmVjdG9yPFN0cmluZz4gVGV4dEZpZWxkSW5wdXRUeXBlOjpzdWdnZXN0aW9u
cygpIGNvbnN0CiAKIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpkaWRTZWxlY3REYXRhTGlzdE9w
dGlvbihjb25zdCBTdHJpbmcmIHNlbGVjdGVkT3B0aW9uKQogewotICAgIGVsZW1lbnQoKS0+c2V0
VmFsdWUoc2VsZWN0ZWRPcHRpb24sIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCk7CisgICAg
ZWxlbWVudCgpLnNldFZhbHVlKHNlbGVjdGVkT3B0aW9uLCBEaXNwYXRjaElucHV0QW5kQ2hhbmdl
RXZlbnQpOwogfQogCiB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZGlkQ2xvc2VTdWdnZXN0aW9u
cygpCkBAIC04MjMsNyArNzkyLDcgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmRpZENsb3Nl
U3VnZ2VzdGlvbnMoKQogCiB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZGlzcGxheVN1Z2dlc3Rp
b25zKERhdGFMaXN0U3VnZ2VzdGlvbkFjdGl2YXRpb25UeXBlIHR5cGUpCiB7Ci0gICAgaWYgKGVs
ZW1lbnQoKS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkgfHwgIWVsZW1lbnQoKS0+cmVuZGVyZXIo
KSkKKyAgICBpZiAoZWxlbWVudCgpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpIHx8ICFlbGVtZW50
KCkucmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFVc2VyR2VzdHVyZUlu
ZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1RpbWVJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5w
dXRUeXBlLmNwcAppbmRleCA0MmMzOTExZWRlMjJiZjEyN2Y5YzJjOWFkYWVlZDFkZTM2OWUyNTc3
Li5lZGI0NGMyMTMzZGZhMTY3ZmFlM2JhMzdlNjlkZDYxNDMxYWEzMzAxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvVGltZUlucHV0VHlwZS5jcHAKQEAgLTc3LDExICs3NywxMCBAQCBEZWNpbWFsIFRpbWVJ
bnB1dFR5cGU6OmRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgpIGNvbnN0CiAKIFN0ZXBSYW5nZSBUaW1l
SW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRsaW5nIGFueVN0ZXBIYW5kbGlu
ZykgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBjb25zdCBEZWNpbWFsIHN0
ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24obWluQXR0ciksIDApOwotICAgIGNvbnN0IERlY2ltYWwgbWluaW11bSA9IHBhcnNl
VG9OdW1iZXIoZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0
dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25lbnRzOjptaW5pbXVtVGltZSgpKSk7
Ci0gICAgY29uc3QgRGVjaW1hbCBtYXhpbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWF4QXR0ciksIERlY2ltYWw6OmZyb21Eb3Vi
bGUoRGF0ZUNvbXBvbmVudHM6Om1heGltdW1UaW1lKCkpKTsKLSAgICBjb25zdCBEZWNpbWFsIHN0
ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHRpbWVTdGVwRGVzY3Jp
cHRpb24sIGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzdGVwQXR0
cikpOworICAgIGNvbnN0IERlY2ltYWwgc3RlcEJhc2UgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQo
KS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpLCAwKTsKKyAgICBjb25z
dCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21w
b25lbnRzOjptaW5pbXVtVGltZSgpKSk7CisgICAgY29uc3QgRGVjaW1hbCBtYXhpbXVtID0gcGFy
c2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtYXhB
dHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWF4aW11bVRpbWUoKSkp
OworICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBI
YW5kbGluZywgdGltZVN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oc3RlcEF0dHIpKTsKICAgICByZXR1cm4gU3RlcFJhbmdlKHN0ZXBCYXNl
LCBSYW5nZUxpbWl0YXRpb25zOjpWYWxpZCwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwgdGltZVN0
ZXBEZXNjcmlwdGlvbik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVVJM
SW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVVJMSW5wdXRUeXBlLmNwcAppbmRl
eCA2Y2EwYWMxYTIwMTNjZjZkNWQ4ZGM1YzBlYTAzYjIxMTc5MmYxOTVlLi4xODI0YTE4MTU2ODQ4
M2RjNzA3NmQ1OTExNmY5ZDQ2MjY2NGM2NmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1VSTElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9VUkxJbnB1dFR5
cGUuY3BwCkBAIC01Miw4ICs1Miw3IEBAIGJvb2wgVVJMSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2hG
b3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIAogYm9vbCBVUkxJbnB1dFR5cGU6OnR5cGVN
aXNtYXRjaCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIHR5
cGVNaXNtYXRjaEZvcihlbGVtZW50KCktPnZhbHVlKCkpOworICAgIHJldHVybiB0eXBlTWlzbWF0
Y2hGb3IoZWxlbWVudCgpLnZhbHVlKCkpOwogfQogCiBTdHJpbmcgVVJMSW5wdXRUeXBlOjp0eXBl
TWlzbWF0Y2hUZXh0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvV2Vl
a0lucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1dlZWtJbnB1dFR5cGUuY3BwCmlu
ZGV4IGJjYjZhZjJjYWFkNWU1ZjNiZWE5NDU0YTUxMDNlYjk1MWNkNDNkNjIuLjlhZmY0ZjZmYmRh
NzdkNjlmOGE0OThjNzVlMWExYWQwOTU4OTYwZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvV2Vla0lucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9XZWVrSW5w
dXRUeXBlLmNwcApAQCAtNTcsMTEgKzU3LDEwIEBAIERhdGVDb21wb25lbnRzOjpUeXBlIFdlZWtJ
bnB1dFR5cGU6OmRhdGVUeXBlKCkgY29uc3QKIAogU3RlcFJhbmdlIFdlZWtJbnB1dFR5cGU6OmNy
ZWF0ZVN0ZXBSYW5nZShBbnlTdGVwSGFuZGxpbmcgYW55U3RlcEhhbmRsaW5nKSBjb25zdAogewot
ICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGNvbnN0IERlY2ltYWwgc3RlcEJhc2UgPSBwYXJz
ZVRvTnVtYmVyKGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5B
dHRyKSwgd2Vla0RlZmF1bHRTdGVwQmFzZSk7Ci0gICAgY29uc3QgRGVjaW1hbCBtaW5pbXVtID0g
cGFyc2VUb051bWJlcihlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
bWluQXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1XZWVr
KCkpKTsKLSAgICBjb25zdCBEZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQo
KS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtYXhBdHRyKSwgRGVjaW1hbDo6ZnJv
bURvdWJsZShEYXRlQ29tcG9uZW50czo6bWF4aW11bVdlZWsoKSkpOwotICAgIGNvbnN0IERlY2lt
YWwgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGluZywgd2Vla1N0ZXBE
ZXNjcmlwdGlvbiwgZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHN0
ZXBBdHRyKSk7CisgICAgY29uc3QgRGVjaW1hbCBzdGVwQmFzZSA9IHBhcnNlVG9OdW1iZXIoZWxl
bWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIHdlZWtEZWZh
dWx0U3RlcEJhc2UpOworICAgIGNvbnN0IERlY2ltYWwgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIo
ZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIERlY2lt
YWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1XZWVrKCkpKTsKKyAgICBjb25z
dCBEZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKG1heEF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21w
b25lbnRzOjptYXhpbXVtV2VlaygpKSk7CisgICAgY29uc3QgRGVjaW1hbCBzdGVwID0gU3RlcFJh
bmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCB3ZWVrU3RlcERlc2NyaXB0aW9uLCBlbGVt
ZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzdGVwQXR0cikpOwogICAgIHJl
dHVybiBTdGVwUmFuZ2Uoc3RlcEJhc2UsIFJhbmdlTGltaXRhdGlvbnM6OlZhbGlkLCBtaW5pbXVt
LCBtYXhpbXVtLCBzdGVwLCB3ZWVrU3RlcERlc2NyaXB0aW9uKTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>