<?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>219769</bug_id>
          
          <creation_ts>2020-12-10 23:07:44 -0800</creation_ts>
          <short_desc>Infrastructure to store and restore AppHighlights</short_desc>
          <delta_ts>2020-12-13 08:56:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Megan Gardner">megan_gardner</reporter>
          <assigned_to name="Megan Gardner">megan_gardner</assigned_to>
          <cc>cdumez</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>hi</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>thorton</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1713830</commentid>
    <comment_count>0</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2020-12-10 23:07:44 -0800</bug_when>
    <thetext>Infrustructure to store and restore AppHighlights</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713833</commentid>
    <comment_count>1</comment_count>
      <attachid>415971</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2020-12-10 23:17:27 -0800</bug_when>
    <thetext>Created attachment 415971
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714119</commentid>
    <comment_count>2</comment_count>
      <attachid>415971</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-12-11 15:34:32 -0800</bug_when>
    <thetext>Comment on attachment 415971
Patch

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

&gt; Source/WebCore/Modules/highlight/AppHighlightStorageController.cpp:172
&gt; +    if (m_document) {

Early return instead?

&gt; Source/WebCore/Modules/highlight/AppHighlightStorageController.cpp:190
&gt; +

Weird double newline. Also, the early return thing.
Also, maybe you want to strong-ify document in each of these before checking it? Is it possible any of the things you do cause the last ref to drop? It vaguely looks like &quot;probably not&quot; but the set of things happening under these might be wider than it first appears.

&gt; Source/WebCore/dom/Document.h:97
&gt; +class AppHighlightStorageController;

This name is kind of wordy. Do we need &quot;controller&quot; at all, really?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714132</commentid>
    <comment_count>3</comment_count>
      <attachid>415971</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-12-11 15:45:12 -0800</bug_when>
    <thetext>Comment on attachment 415971
Patch

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

&gt; Source/WebCore/Modules/highlight/AppHighlightStorageController.h:49
&gt; +

Nit - extra newline here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714134</commentid>
    <comment_count>4</comment_count>
      <attachid>415971</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-12-11 15:50:33 -0800</bug_when>
    <thetext>Comment on attachment 415971
Patch

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

&gt;&gt; Source/WebCore/Modules/highlight/AppHighlightStorageController.cpp:190
&gt;&gt; +
&gt; 
&gt; Weird double newline. Also, the early return thing.
&gt; Also, maybe you want to strong-ify document in each of these before checking it? Is it possible any of the things you do cause the last ref to drop? It vaguely looks like &quot;probably not&quot; but the set of things happening under these might be wider than it first appears.

Good catch — findRangeBySearchingText() is going to do TextIterator-y (and VisiblePosition-y) things which can trigger layout, so we need to be careful here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714135</commentid>
    <comment_count>5</comment_count>
      <attachid>415971</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-12-11 15:51:20 -0800</bug_when>
    <thetext>Comment on attachment 415971
Patch

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

&gt; Source/WebCore/Modules/highlight/AppHighlightListData.h:107
&gt; +

(Nit - extra newline here as well)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714150</commentid>
    <comment_count>6</comment_count>
      <attachid>415971</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-12-11 16:14:42 -0800</bug_when>
    <thetext>Comment on attachment 415971
Patch

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

&gt; Source/WebCore/Modules/highlight/AppHighlightListData.cpp:56
&gt; +        is&lt;Element&gt;(node) ? downcast&lt;Element&gt;(node).getIdAttribute().string() : String { },

`nullString()`?

&gt; Source/WebCore/Modules/highlight/AppHighlightStorageController.cpp:134
&gt; +    for (auto iterator = range.endContainer().rbegin(), end = range.endContainer().rend(); iterator != end; ++iterator) {

Should one of these be `startContainer()`?  If not, maybe worth a comment as to why?

&gt; Source/WebCore/Modules/highlight/AppHighlightStorageController.cpp:188
&gt; +    Vector&lt;AppHighlightRangeData&gt; restoredRanges;

Is this variable needed?  All you ever seem to do is append to it.

&gt; Source/WebCore/Modules/highlight/AppHighlightStorageController.h:40
&gt; +    WTF_MAKE_FAST_ALLOCATED;

NIT: `WTF_MAKE_NONCOPYABLE` too?  In my experience if one is added usually the other is too (especially for `RefCounted`).

&gt; Source/WebCore/dom/Document.h:1585
&gt; +    AppHighlightStorageController* appHighlightStorageControllerIfExists() const { return m_appHighlightStorageController.get(); };

NIT: This is never used.  I realize the style guide suggests to create an `*IfExists` method, but I don&apos;t think it meant that as &quot;you must create an `*IfExists` if there is another function without it&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714183</commentid>
    <comment_count>7</comment_count>
      <attachid>416072</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2020-12-11 17:00:03 -0800</bug_when>
    <thetext>Created attachment 416072
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714209</commentid>
    <comment_count>8</comment_count>
      <attachid>416082</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2020-12-11 18:22:18 -0800</bug_when>
    <thetext>Created attachment 416082
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714220</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-12-11 19:20:07 -0800</bug_when>
    <thetext>Committed r270729: &lt;https://trac.webkit.org/changeset/270729&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 416082.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714221</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-12-11 19:21:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/72248110&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714252</commentid>
    <comment_count>11</comment_count>
      <attachid>415971</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-12-12 08:19:54 -0800</bug_when>
    <thetext>Comment on attachment 415971
Patch

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

&gt;&gt; Source/WebCore/Modules/highlight/AppHighlightStorageController.cpp:134
&gt;&gt; +    for (auto iterator = range.endContainer().rbegin(), end = range.endContainer().rend(); iterator != end; ++iterator) {
&gt; 
&gt; Should one of these be `startContainer()`?  If not, maybe worth a comment as to why?

Both of these should be endContainer(). This code is trying to find the deepest common ancestor in the XPath that has an ID attribute, so we iterate backwards through the end container&apos;s XPath here and bail when we find the first match.

I think a comment might be good, or perhaps `foundElement` should be named something more descriptive, like `deepestCommonIdentifiableAncestor`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714320</commentid>
    <comment_count>12</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2020-12-13 08:56:23 -0800</bug_when>
    <thetext>Follow up to fix non-unified builds after this patch is at https://bugs.webkit.org/show_bug.cgi?id=219834</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415971</attachid>
            <date>2020-12-10 23:17:27 -0800</date>
            <delta_ts>2020-12-11 18:22:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219769-20201210231727.patch</filename>
            <type>text/plain</type>
            <size>38040</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwNjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjI4MDU2NmVmYzRhYzMy
OGJkYzY1ZWUwZjRlNzY0ZDM0Zjc3MTA3Ni4uZGRjYjI3MzIwYTc1YzU2Mjk1NDg0MjY2OTVmMWY4
MGUzMTQxZGFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDIwLTEyLTEwICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgSW5mcmFzdHJ1
Y3R1cmUgdG8gc3RvcmUgYW5kIHJlc3RvcmUgQXBwSGlnaGxpZ2h0cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5NzY5CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS83MDI5NzY5OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBcHBIaWdobGlnaHRzIGNhbiBiZSBwdWxsZWQgb3V0IG9mIHRoZWlyIEhpZ2hs
aWdodFJlZ2lzdGVyIGFuZCBlbmNvZGVkIGZvciBzdG9yYWdlIGJ5IHRoZSBhcHAuCisgICAgICAg
IEFsc28sIGFuIGVuY29kZWQgYnVmZmVyIGNhbiBiZSB1bnBhY2tlZCBpbiByYW5nZXMgYWRkZWQg
YmFjayBpbnRvIHRoZSBIaWdobGlnaHRSZWdpc3Rlci4gCisgICAgICAgIEZhbGxiYWNrcyBmb3Ig
cmFuZ2VzIHRoYXQgYXJlIG5vdCBmb3VuZCBhcmUgbm90IGRlc2lnbmVkIHlldCwgc28gY3VycmVu
dGx5IHRoZXkgd2lsbCBqdXN0IGJlIHN0b3JlZAorICAgICAgICB3aXRoIHRoZSBpbnRlbnRpb24g
dG8gY29tbXVuaWNhdGUgYmFjayB0byB0aGUgYXBwIHRoYXQgdGhleSB3ZXJlIG5vdCBmb3VuZCBp
biB0aGUgY3VycmVudCB2ZXJzaW9uIG9mCisgICAgICAgIHRoZSBkb2N1bWVudC4gVGhlIEFQSSB0
byBpbnRlcmFjdCB3aXRoIHRoZSBjbGllbnQgaXMgbm90IGRlc2lnbmVkIHlldCwgc28gY3VycmVu
dGx5IHRoaXMgZW5jb2RlZCBkYXRhIGRvZXMgbm90IGdldAorICAgICAgICBzaHV0dGxlIGFueXdo
ZXJlIGJ1dCB0aGF0IHBsdW1iaW5nIHdpbGwgYmUgYWRkZWQgaW4gYSBsYXRlciBwYXRjaC4KKwor
ICAgICAgICAqIE1vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodExpc3REYXRhLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlUGF0aEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZU5vZGVQYXRoQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VOb2Rl
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBcHBIaWdsaWdodFJhbmdlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHRMaXN0RGF0YTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcEhpZ2hsaWdodExpc3REYXRhOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAq
IE1vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodExpc3REYXRhLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjpOb2RlUGF0aENvbXBvbmVudDo6Tm9k
ZVBhdGhDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0UmFuZ2VEYXRh
OjpOb2RlUGF0aENvbXBvbmVudDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBIaWdobGlnaHRSYW5nZURhdGE6Ok5vZGVQYXRoQ29tcG9uZW50OjpvcGVyYXRvciE9IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6QXBwSGlnaGxp
Z2h0UmFuZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHRSYW5nZURhdGE6OnN0
YXJ0Q29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdl
RGF0YTo6c3RhcnRPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0
UmFuZ2VEYXRhOjplbmRDb250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGln
aGxpZ2h0UmFuZ2VEYXRhOjplbmRPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
SGlnaGxpZ2h0TGlzdERhdGE6OkFwcEhpZ2hsaWdodExpc3REYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcEhpZ2hsaWdodExpc3REYXRhOjpyYW5nZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwSGlnaGxpZ2h0TGlzdERhdGE6OnNldFJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBIaWdobGlnaHRMaXN0RGF0YTo6YWRkUmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhp
Z2hsaWdodExpc3REYXRhOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hs
aWdodExpc3REYXRhOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hs
aWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBIaWdobGlnaHRSYW5nZURhdGE6Ok5vZGVQYXRoQ29tcG9uZW50OjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0TGlzdERhdGE6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHRMaXN0RGF0YTo6ZGVjb2RlKToKKyAgICAgICAg
KiBNb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRTdG9yYWdlQ29udHJvbGxlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZmluZE5vZGVCeVBhdGhJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpmaW5kTm9kZVN0YXJ0aW5nQXRQYXRoQ29tcG9uZW50SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6ZmluZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFJhbmdlQnlJZGVudGlm
eWluZ1N0YXJ0QW5kRW5kUG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRSYW5nZUJ5
U2VhcmNoaW5nVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwSGlnaGxpZ2h0U3RvcmFnZUNvbnRyb2xsZXI6OkFwcEhpZ2hsaWdodFN0b3Jh
Z2VDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodFN0b3JhZ2VDb250
cm9sbGVyOjpjcmVhdGVBcHBIaWdobGlnaHRMaXN0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBIaWdobGlnaHRTdG9yYWdlQ29udHJvbGxlcjo6cmVzdG9yZUFwcEhpZ2hsaWdodHMpOgorICAg
ICAgICAqIE1vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFN0b3JhZ2VDb250cm9sbGVyLmg6
IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU2NyaXB0VHJhbnNm
b3JtLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFNjcmlwdFRyYW5z
Zm9ybS5oOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFwcEhpZ2hsaWdodFN0b3JhZ2VDb250cm9sbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1cGRhdGVIaWdobGlnaHRQb3NpdGlvbnMpOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFwcEhp
Z2hsaWdodFN0b3JhZ2VDb250cm9sbGVySWZFeGlzdHMgY29uc3QpOgorCiAyMDIwLTEyLTEwICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW0dQVVByb2Nlc3NdIEN1
dCBpbiBoYWxmIGFtb3VudCBvZiBJUEMgbmVlZGVkIHRvIGRvIFdlYkF1ZGlvCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRMaXN0RGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRMaXN0RGF0
YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMDUyOWU1ODU0YTgxZWUyNGJkY2I0OWNlMjE2MWNhYzJkOGYwMmY4
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0Fw
cEhpZ2hsaWdodExpc3REYXRhLmNwcApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFwcEhpZ2hsaWdodExpc3REYXRhLmgiCisKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5o
IgorI2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNs
dWRlICJSZW5kZXJlZERvY3VtZW50TWFya2VyLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CisjaW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIKKyNpbmNsdWRlICJTdGF0aWNSYW5nZS5oIgorI2lu
Y2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0
ZW50Q29kZXJzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHVuc2lnbmVkIGNv
bXB1dGVQYXRoSW5kZXgoY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICBTdHJpbmcgbm9kZU5hbWUg
PSBub2RlLm5vZGVOYW1lKCk7CisgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIGZvciAoYXV0
byogcHJldmlvdXNTaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmcoKTsgcHJldmlvdXNTaWJs
aW5nOyBwcmV2aW91c1NpYmxpbmcgPSBwcmV2aW91c1NpYmxpbmctPnByZXZpb3VzU2libGluZygp
KSB7CisgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmctPm5vZGVOYW1lKCkgPT0gbm9kZU5hbWUp
CisgICAgICAgICAgICBpbmRleCsrOworICAgIH0KKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3N0
YXRpYyBBcHBIaWdobGlnaHRSYW5nZURhdGE6Ok5vZGVQYXRoQ29tcG9uZW50IGNyZWF0ZU5vZGVQ
YXRoQ29tcG9uZW50KGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAg
aXM8RWxlbWVudD4obm9kZSkgPyBkb3duY2FzdDxFbGVtZW50Pihub2RlKS5nZXRJZEF0dHJpYnV0
ZSgpLnN0cmluZygpIDogU3RyaW5nIHsgfSwKKyAgICAgICAgbm9kZS5ub2RlTmFtZSgpLAorICAg
ICAgICBpczxDaGFyYWN0ZXJEYXRhPihub2RlKSA/IGRvd25jYXN0PENoYXJhY3RlckRhdGE+KG5v
ZGUpLmRhdGEoKSA6IFN0cmluZyB7IH0sCisgICAgICAgIGNvbXB1dGVQYXRoSW5kZXgobm9kZSkK
KyAgICB9OworfQorCitzdGF0aWMgQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjpOb2RlUGF0aCBtYWtl
Tm9kZVBhdGgoUmVmUHRyPE5vZGU+JiYgbm9kZSkKK3sKKyAgICBBcHBIaWdobGlnaHRSYW5nZURh
dGE6Ok5vZGVQYXRoIGNvbXBvbmVudHM7CisgICAgYXV0byBib2R5ID0gbm9kZS0+ZG9jdW1lbnQo
KS5ib2R5KCk7CisgICAgZm9yIChhdXRvIGFuY2VzdG9yID0gbm9kZTsgYW5jZXN0b3IgJiYgYW5j
ZXN0b3IgIT0gYm9keTsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpKQorICAgICAg
ICBjb21wb25lbnRzLmFwcGVuZChjcmVhdGVOb2RlUGF0aENvbXBvbmVudCgqYW5jZXN0b3IpKTsK
KyAgICBjb21wb25lbnRzLnJldmVyc2UoKTsKKyAgICByZXR1cm4geyBjb21wb25lbnRzIH07Cit9
CisKK3N0YXRpYyBBcHBIaWdobGlnaHRSYW5nZURhdGEgY3JlYXRlQXBwSGlnbGlnaHRSYW5nZURh
dGEoY29uc3QgU3RhdGljUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiB7CisgICAgICAgIHBs
YWluVGV4dChyYW5nZSksCisgICAgICAgIG1ha2VOb2RlUGF0aCgmcmFuZ2Uuc3RhcnRDb250YWlu
ZXIoKSksCisgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0KCksCisgICAgICAgIG1ha2VOb2RlUGF0
aCgmcmFuZ2UuZW5kQ29udGFpbmVyKCkpLAorICAgICAgICByYW5nZS5lbmRPZmZzZXQoKQorICAg
IH07Cit9CisKK0FwcEhpZ2hsaWdodExpc3REYXRhIEFwcEhpZ2hsaWdodExpc3REYXRhOjpjcmVh
dGUoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCit7CisgICAgYXV0byBkZWNvZGVyID0gYnVm
ZmVyLmRlY29kZXIoKTsKKyAgICBPcHRpb25hbDxBcHBIaWdobGlnaHRMaXN0RGF0YT4gZGF0YTsK
KyAgICBkZWNvZGVyID4+IGRhdGE7CisgICAgcmV0dXJuIGRhdGEgPyAqZGF0YSA6IEFwcEhpZ2hs
aWdodExpc3REYXRhIHt7IH19OworfQorCitSZWY8U2hhcmVkQnVmZmVyPiBBcHBIaWdobGlnaHRM
aXN0RGF0YTo6dG9EYXRhKCkgY29uc3QKK3sKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVy
IGVuY29kZXI7CisgICAgZW5jb2RlciA8PCAqdGhpczsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVy
OjpjcmVhdGUoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2hpZ2hsaWdodC9BcHBIaWdobGlnaHRMaXN0RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0TGlzdERhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYTY4NjI4ZTVk
NGFmYmU3YzQ4YTk0OGU1MzljODIwOThiMzhmYzg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0TGlzdERhdGEuaApAQCAtMCww
ICsxLDIzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBBcHBIaWdobGlnaHRSYW5nZURh
dGEgeworcHVibGljOgorICAgIHN0cnVjdCBOb2RlUGF0aENvbXBvbmVudCB7CisgICAgICAgIFN0
cmluZyBpZGVudGlmaWVyOworICAgICAgICBTdHJpbmcgbm9kZU5hbWU7CisgICAgICAgIFN0cmlu
ZyB0ZXh0RGF0YTsKKyAgICAgICAgdW5zaWduZWQgcGF0aEluZGV4IHsgMCB9OworCisgICAgICAg
IE5vZGVQYXRoQ29tcG9uZW50KFN0cmluZyYmIGVsZW1lbnRJZGVudGlmaWVyLCBTdHJpbmcmJiBu
YW1lLCBTdHJpbmcmJiBkYXRhLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogaWRlbnRp
ZmllcihXVEZNb3ZlKGVsZW1lbnRJZGVudGlmaWVyKSkKKyAgICAgICAgICAgICwgbm9kZU5hbWUo
V1RGTW92ZShuYW1lKSkKKyAgICAgICAgICAgICwgdGV4dERhdGEoV1RGTW92ZShkYXRhKSkKKyAg
ICAgICAgICAgICwgcGF0aEluZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBOb2RlUGF0aENvbXBvbmVudChjb25zdCBTdHJpbmcmIGVsZW1lbnRJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGF0YSwgdW5zaWduZWQgaW5kZXgpCisg
ICAgICAgICAgICA6IGlkZW50aWZpZXIoZWxlbWVudElkZW50aWZpZXIpCisgICAgICAgICAgICAs
IG5vZGVOYW1lKG5hbWUpCisgICAgICAgICAgICAsIHRleHREYXRhKGRhdGEpCisgICAgICAgICAg
ICAsIHBhdGhJbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IE5vZGVQYXRoQ29tcG9uZW50JiBvdGhlcikgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIgPT0gb3RoZXIuaWRlbnRpZmllciAm
JiBub2RlTmFtZSA9PSBvdGhlci5ub2RlTmFtZSAmJiB0ZXh0RGF0YSA9PSBvdGhlci50ZXh0RGF0
YSAmJiBwYXRoSW5kZXggPT0gb3RoZXIucGF0aEluZGV4OworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IE5vZGVQYXRoQ29tcG9uZW50JiBvdGhlcikgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9
CisKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
Tm9kZVBhdGhDb21wb25lbnQ+IGRlY29kZShEZWNvZGVyJik7CisgICAgfTsKKworICAgIHVzaW5n
IE5vZGVQYXRoID0gVmVjdG9yPE5vZGVQYXRoQ29tcG9uZW50PjsKKworICAgIEFwcEhpZ2hsaWdo
dFJhbmdlRGF0YShjb25zdCBBcHBIaWdobGlnaHRSYW5nZURhdGEmKSA9IGRlZmF1bHQ7CisgICAg
QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhKCkgPSBkZWZhdWx0OworICAgIEFwcEhpZ2hsaWdodFJhbmdl
RGF0YShTdHJpbmcmJiB0ZXh0LCBOb2RlUGF0aCYmIHN0YXJ0Q29udGFpbmVyLCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgTm9kZVBhdGgmJiBlbmRDb250YWluZXIsIHVuc2lnbmVkIGVuZE9mZnNldCkK
KyAgICAgICAgOiBtX3RleHQoV1RGTW92ZSh0ZXh0KSkKKyAgICAgICAgLCBtX3N0YXJ0Q29udGFp
bmVyKFdURk1vdmUoc3RhcnRDb250YWluZXIpKQorICAgICAgICAsIG1fc3RhcnRPZmZzZXQoc3Rh
cnRPZmZzZXQpCisgICAgICAgICwgbV9lbmRDb250YWluZXIoV1RGTW92ZShlbmRDb250YWluZXIp
KQorICAgICAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKKyAgICB7CisgICAgfQorCisgICAg
QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgTm9kZVBhdGgm
IHN0YXJ0Q29udGFpbmVyLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgY29uc3QgTm9kZVBhdGgmIGVu
ZENvbnRhaW5lciwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAgICAgICA6IG1fdGV4dCh0ZXh0KQor
ICAgICAgICAsIG1fc3RhcnRDb250YWluZXIoc3RhcnRDb250YWluZXIpCisgICAgICAgICwgbV9z
dGFydE9mZnNldChzdGFydE9mZnNldCkKKyAgICAgICAgLCBtX2VuZENvbnRhaW5lcihlbmRDb250
YWluZXIpCisgICAgICAgICwgbV9lbmRPZmZzZXQoZW5kT2Zmc2V0KQorICAgIHsKKyAgICB9CisK
KyAgICBjb25zdCBTdHJpbmcmIHRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHQ7IH0KKyAgICBj
b25zdCBOb2RlUGF0aCYgc3RhcnRDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0Q29u
dGFpbmVyOyB9CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0
YXJ0T2Zmc2V0OyB9CisgICAgY29uc3QgTm9kZVBhdGgmIGVuZENvbnRhaW5lcigpIGNvbnN0IHsg
cmV0dXJuIG1fZW5kQ29udGFpbmVyOyB9CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9lbmRPZmZzZXQ7IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhPiBkZWNvZGUoRGVjb2RlciYpOwor
Citwcml2YXRlOgorCisgICAgU3RyaW5nIG1fdGV4dDsKKyAgICBOb2RlUGF0aCBtX3N0YXJ0Q29u
dGFpbmVyOworICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZzZXQgeyAwIH07CisgICAgTm9kZVBhdGgg
bV9lbmRDb250YWluZXI7CisgICAgdW5zaWduZWQgbV9lbmRPZmZzZXQgeyAwIH07Cit9OworCitj
bGFzcyBBcHBIaWdobGlnaHRMaXN0RGF0YSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEFwcEhpZ2hsaWdodExpc3REYXRh
IGNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImKTsKKworICAgIEFwcEhpZ2hsaWdodExpc3REYXRh
KGNvbnN0IEFwcEhpZ2hsaWdodExpc3REYXRhJikgPSBkZWZhdWx0OworICAgIEFwcEhpZ2hsaWdo
dExpc3REYXRhKCkgPSBkZWZhdWx0OworICAgIEFwcEhpZ2hsaWdodExpc3REYXRhKFZlY3RvcjxB
cHBIaWdobGlnaHRSYW5nZURhdGE+JiYgYW5ub3RhdGlvblJhbmdlcykKKyAgICAgICAgOiBtX2Fu
bm90YXRpb25SYW5nZXMoV1RGTW92ZShhbm5vdGF0aW9uUmFuZ2VzKSkKKyAgICB7CisgICAgfQor
CisgICAgY29uc3QgVmVjdG9yPEFwcEhpZ2hsaWdodFJhbmdlRGF0YT4mIHJhbmdlcygpIGNvbnN0
IHsgcmV0dXJuIG1fYW5ub3RhdGlvblJhbmdlczsgfQorICAgIHZvaWQgc2V0UmFuZ2VzKFZlY3Rv
cjxBcHBIaWdobGlnaHRSYW5nZURhdGE+JiYgcmFuZ2VzKSB7IG1fYW5ub3RhdGlvblJhbmdlcyA9
IFdURk1vdmUocmFuZ2VzKTsgfQorICAgIHZvaWQgYWRkUmFuZ2VzKFZlY3RvcjxBcHBIaWdobGln
aHRSYW5nZURhdGE+JiYgcmFuZ2VzKSB7IG1fYW5ub3RhdGlvblJhbmdlcy5hcHBlbmRWZWN0b3Io
V1RGTW92ZShyYW5nZXMpKTsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgUmVmPFNoYXJlZEJ1ZmZl
cj4gdG9EYXRhKCkgY29uc3Q7CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YW5ub3RhdGlvblJhbmdlcy5zaXplKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX2Fubm90YXRpb25SYW5nZXMuaXNFbXB0eSgpOyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEFwcEhpZ2hsaWdodExpc3REYXRhPiBkZWNvZGUo
RGVjb2RlciYpOworCitwcml2YXRlOgorCisgICAgVmVjdG9yPEFwcEhpZ2hsaWdodFJhbmdlRGF0
YT4gbV9hbm5vdGF0aW9uUmFuZ2VzOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBBcHBIaWdobGlnaHRSYW5nZURhdGE6Ok5vZGVQYXRoQ29tcG9uZW50OjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IGlkZW50aWZpZXI7CisgICAgZW5j
b2RlciA8PCBub2RlTmFtZTsKKyAgICBlbmNvZGVyIDw8IHRleHREYXRhOworICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHBhdGhJbmRleCk7Cit9CisKK3RlbXBsYXRlPGNsYXNz
IERlY29kZXI+IE9wdGlvbmFsPEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25l
bnQ+IEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPFN0cmluZz4gaWRlbnRpZmllcjsKKyAgICBk
ZWNvZGVyID4+IGlkZW50aWZpZXI7CisgICAgaWYgKCFpZGVudGlmaWVyKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8U3RyaW5nPiBub2RlTmFtZTsKKyAgICBk
ZWNvZGVyID4+IG5vZGVOYW1lOworICAgIGlmICghbm9kZU5hbWUpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxTdHJpbmc+IHRleHREYXRhOworICAgIGRlY29k
ZXIgPj4gdGV4dERhdGE7CisgICAgaWYgKCF0ZXh0RGF0YSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBwYXRoSW5kZXg7CisgICAgZGVjb2Rl
ciA+PiBwYXRoSW5kZXg7CisgICAgaWYgKCFwYXRoSW5kZXgpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqaWRlbnRpZmllciksIFdURk1vdmUo
Km5vZGVOYW1lKSwgV1RGTW92ZSgqdGV4dERhdGEpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKnBh
dGhJbmRleCkgfX07Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgQXBwSGlnaGxp
Z2h0UmFuZ2VEYXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNv
ZGVyIDw8IG1fdGV4dDsKKyAgICBlbmNvZGVyIDw8IG1fc3RhcnRDb250YWluZXI7CisgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV9zdGFydE9mZnNldCk7CisgICAgZW5jb2Rl
ciA8PCBtX2VuZENvbnRhaW5lcjsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihtX2VuZE9mZnNldCk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+IE9wdGlvbmFsPEFw
cEhpZ2hsaWdodFJhbmdlRGF0YT4gQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxTdHJpbmc+IHRleHQ7CisgICAgZGVjb2RlciA+
PiB0ZXh0OworICAgIGlmICghdGV4dCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgIE9wdGlvbmFsPE5vZGVQYXRoPiBzdGFydENvbnRhaW5lcjsKKyAgICBkZWNvZGVyID4+IHN0
YXJ0Q29udGFpbmVyOworICAgIGlmICghc3RhcnRDb250YWluZXIpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDx1aW50NjRfdD4gc3RhcnRPZmZzZXQ7CisgICAg
ZGVjb2RlciA+PiBzdGFydE9mZnNldDsKKyAgICBpZiAoIXN0YXJ0T2Zmc2V0KQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8Tm9kZVBhdGg+IGVuZENvbnRhaW5l
cjsKKyAgICBkZWNvZGVyID4+IGVuZENvbnRhaW5lcjsKKyAgICBpZiAoIWVuZENvbnRhaW5lcikK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBl
bmRPZmZzZXQ7CisgICAgZGVjb2RlciA+PiBlbmRPZmZzZXQ7CisgICAgaWYgKCFlbmRPZmZzZXQp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKworICAgIHJldHVybiB7eworICAgICAg
ICBXVEZNb3ZlKCp0ZXh0KSwKKyAgICAgICAgV1RGTW92ZSgqc3RhcnRDb250YWluZXIpLAorICAg
ICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKnN0YXJ0T2Zmc2V0KSwKKyAgICAgICAgV1RGTW92
ZSgqZW5kQ29udGFpbmVyKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCplbmRPZmZz
ZXQpLAorICAgIH19OworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIEFwcEhpZ2hs
aWdodExpc3REYXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNv
ZGVyIDw8IG1fYW5ub3RhdGlvblJhbmdlczsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
T3B0aW9uYWw8QXBwSGlnaGxpZ2h0TGlzdERhdGE+IEFwcEhpZ2hsaWdodExpc3REYXRhOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxWZWN0b3I8QXBwSGlnaGxpZ2h0
UmFuZ2VEYXRhPj4gYW5ub3RhdGlvblJhbmdlczsKKyAgICBkZWNvZGVyID4+IGFubm90YXRpb25S
YW5nZXM7CisgICAgaWYgKCFhbm5vdGF0aW9uUmFuZ2VzKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgcmV0dXJuIHt7IFdURk1vdmUoKmFubm90YXRpb25SYW5nZXMpIH19Owor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRTdG9yYWdlQ29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRTdG9yYWdlQ29udHJvbGxl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOWNiMTE5NWU0ZmM3YmU1YTc2NzFkYTdhMTM4ZmZkMzVlODMzZGQw
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0Fw
cEhpZ2hsaWdodFN0b3JhZ2VDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFwcEhpZ2hsaWdodFN0b3Jh
Z2VDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJBcHBIaWdobGlnaHRMaXN0RGF0YS5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgi
CisjaW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCisjaW5jbHVkZSAiSGlnaGxpZ2h0UmVnaXN0
ZXIuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiUG9zaXRpb24uaCIKKyNpbmNsdWRl
ICJSZW5kZXJlZERvY3VtZW50TWFya2VyLmgiCisjaW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIKKyNp
bmNsdWRlICJTdGF0aWNSYW5nZS5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgorCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFJlZlB0cjxOb2RlPiBmaW5kTm9kZUJ5UGF0aElu
ZGV4KGNvbnN0IE5vZGUmIHBhcmVudCwgdW5zaWduZWQgcGF0aEluZGV4LCBjb25zdCBTdHJpbmcm
IG5vZGVOYW1lKQoreworICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4ocGFyZW50KSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBmb3IgKGF1dG8qIGNoaWxkID0gZG93bmNhc3Q8Q29u
dGFpbmVyTm9kZT4ocGFyZW50KS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChub2RlTmFtZSAhPSBjaGlsZC0+bm9kZU5hbWUo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghcGF0aEluZGV4LS0pCisg
ICAgICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQor
CitzdGF0aWMgc3RkOjpwYWlyPFJlZlB0cjxOb2RlPiwgc2l6ZV90PiBmaW5kTm9kZVN0YXJ0aW5n
QXRQYXRoQ29tcG9uZW50SW5kZXgoY29uc3QgQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjpOb2RlUGF0
aCYgcGF0aCwgTm9kZSYgaW5pdGlhbE5vZGUsIHNpemVfdCBpbml0aWFsSW5kZXhUb0ZvbGxvdykK
K3sKKyAgICBpZiAoaW5pdGlhbEluZGV4VG9Gb2xsb3cgPj0gcGF0aC5zaXplKCkpCisgICAgICAg
IHJldHVybiB7IG51bGxwdHIsIGluaXRpYWxJbmRleFRvRm9sbG93IH07CisKKyAgICBhdXRvIGN1
cnJlbnROb2RlID0gbWFrZVJlZlB0cihpbml0aWFsTm9kZSk7CisgICAgc2l6ZV90IGN1cnJlbnRQ
YXRoSW5kZXggPSBpbml0aWFsSW5kZXhUb0ZvbGxvdzsKKyAgICBmb3IgKDsgY3VycmVudFBhdGhJ
bmRleCA8IHBhdGguc2l6ZSgpOyArK2N1cnJlbnRQYXRoSW5kZXgpIHsKKyAgICAgICAgYXV0byYg
Y29tcG9uZW50ID0gcGF0aFtjdXJyZW50UGF0aEluZGV4XTsKKyAgICAgICAgYXV0byBuZXh0Tm9k
ZSA9IGZpbmROb2RlQnlQYXRoSW5kZXgoKmN1cnJlbnROb2RlLCBjb21wb25lbnQucGF0aEluZGV4
LCBjb21wb25lbnQubm9kZU5hbWUpOworICAgICAgICBpZiAoIW5leHROb2RlKQorICAgICAgICAg
ICAgcmV0dXJuIHsgbnVsbHB0ciwgY3VycmVudFBhdGhJbmRleCB9OworCisgICAgICAgIGlmIChp
czxDaGFyYWN0ZXJEYXRhPigqbmV4dE5vZGUpICYmIGRvd25jYXN0PENoYXJhY3RlckRhdGE+KCpu
ZXh0Tm9kZSkuZGF0YSgpICE9IGNvbXBvbmVudC50ZXh0RGF0YSkKKyAgICAgICAgICAgIHJldHVy
biB7IG51bGxwdHIsIGN1cnJlbnRQYXRoSW5kZXggfTsKKworICAgICAgICBjdXJyZW50Tm9kZSA9
IFdURk1vdmUobmV4dE5vZGUpOworICAgIH0KKyAgICByZXR1cm4geyBjdXJyZW50Tm9kZSwgY3Vy
cmVudFBhdGhJbmRleCB9OworfQorCitzdGF0aWMgUmVmUHRyPE5vZGU+IGZpbmROb2RlKGNvbnN0
IEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGgmIHBhdGgsIERvY3VtZW50JiBkb2N1bWVu
dCkKK3sKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkgfHwgIWRvY3VtZW50LmJvZHkoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIFtmb3VuZE5vZGUsIG5leHRJbmRleF0gPSBm
aW5kTm9kZVN0YXJ0aW5nQXRQYXRoQ29tcG9uZW50SW5kZXgocGF0aCwgKmRvY3VtZW50LmJvZHko
KSwgMCk7CisgICAgaWYgKGZvdW5kTm9kZSkKKyAgICAgICAgcmV0dXJuIGZvdW5kTm9kZTsKKwor
ICAgIHdoaWxlIChuZXh0SW5kZXggPCBwYXRoLnNpemUoKSkgeworICAgICAgICBhdXRvJiBjb21w
b25lbnQgPSBwYXRoW25leHRJbmRleCsrXTsKKyAgICAgICAgaWYgKGNvbXBvbmVudC5pZGVudGlm
aWVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8gZWxl
bWVudFdpdGhJZGVudGlmaWVyID0gbWFrZVJlZlB0cihkb2N1bWVudC5nZXRFbGVtZW50QnlJZChj
b21wb25lbnQuaWRlbnRpZmllcikpOworICAgICAgICBpZiAoIWVsZW1lbnRXaXRoSWRlbnRpZmll
ciB8fCBlbGVtZW50V2l0aElkZW50aWZpZXItPm5vZGVOYW1lKCkgIT0gY29tcG9uZW50Lm5vZGVO
YW1lKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc3RkOjp0aWUoZm91bmROb2Rl
LCBuZXh0SW5kZXgpID0gZmluZE5vZGVTdGFydGluZ0F0UGF0aENvbXBvbmVudEluZGV4KHBhdGgs
ICplbGVtZW50V2l0aElkZW50aWZpZXIsIG5leHRJbmRleCk7CisgICAgICAgIGlmIChmb3VuZE5v
ZGUpCisgICAgICAgICAgICByZXR1cm4gZm91bmROb2RlOworICAgIH0KKworICAgIHJldHVybiBu
dWxscHRyOworfQorCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGZpbmRSYW5nZUJ5SWRl
bnRpZnlpbmdTdGFydEFuZEVuZFBvc2l0aW9ucyhjb25zdCBBcHBIaWdobGlnaHRSYW5nZURhdGEm
IHJhbmdlLCBEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgYXV0byBzdGFydENvbnRhaW5lciA9
IGZpbmROb2RlKHJhbmdlLnN0YXJ0Q29udGFpbmVyKCksIGRvY3VtZW50KTsKKyAgICBpZiAoIXN0
YXJ0Q29udGFpbmVyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBl
bmRDb250YWluZXIgPSBmaW5kTm9kZShyYW5nZS5lbmRDb250YWluZXIoKSwgZG9jdW1lbnQpOwor
ICAgIGlmICghZW5kQ29udGFpbmVyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisg
ICAgYXV0byBzdGFydCA9IG1ha2VDb250YWluZXJPZmZzZXRQb3NpdGlvbihzdGFydENvbnRhaW5l
ci5nZXQoKSwgcmFuZ2Uuc3RhcnRPZmZzZXQoKSk7CisgICAgYXV0byBlbmQgPSBtYWtlQ29udGFp
bmVyT2Zmc2V0UG9zaXRpb24oZW5kQ29udGFpbmVyLmdldCgpLCByYW5nZS5lbmRPZmZzZXQoKSk7
CisgICAgaWYgKHN0YXJ0LmlzT3JwaGFuKCkgfHwgZW5kLmlzT3JwaGFuKCkpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBl
bmQpOworfQorCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGZpbmRSYW5nZUJ5U2VhcmNo
aW5nVGV4dChjb25zdCBBcHBIaWdobGlnaHRSYW5nZURhdGEmIHJhbmdlLCBEb2N1bWVudCYgZG9j
dW1lbnQpCit7CisgICAgSGFzaFNldDxTdHJpbmc+IGlkZW50aWZpZXJzSW5TdGFydFBhdGg7Cisg
ICAgZm9yIChhdXRvJiBjb21wb25lbnQgOiByYW5nZS5zdGFydENvbnRhaW5lcigpKSB7CisgICAg
ICAgIGlmICghY29tcG9uZW50LmlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgaWRl
bnRpZmllcnNJblN0YXJ0UGF0aC5hZGQoY29tcG9uZW50LmlkZW50aWZpZXIpOworICAgIH0KKwor
ICAgIFJlZlB0cjxFbGVtZW50PiBmb3VuZEVsZW1lbnQgPSBkb2N1bWVudC5ib2R5KCk7CisgICAg
Zm9yIChhdXRvIGl0ZXJhdG9yID0gcmFuZ2UuZW5kQ29udGFpbmVyKCkucmJlZ2luKCksIGVuZCA9
IHJhbmdlLmVuZENvbnRhaW5lcigpLnJlbmQoKTsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9y
KSB7CisgICAgICAgIGF1dG8gZWxlbWVudElkZW50aWZpZXIgPSBpdGVyYXRvci0+aWRlbnRpZmll
cjsKKyAgICAgICAgaWYgKGVsZW1lbnRJZGVudGlmaWVyLmlzRW1wdHkoKSB8fCAhaWRlbnRpZmll
cnNJblN0YXJ0UGF0aC5jb250YWlucyhlbGVtZW50SWRlbnRpZmllcikpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBmb3VuZEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZChlbGVtZW50SWRlbnRpZmllcik7CisgICAgICAgIGlmIChmb3VuZEVsZW1lbnQpCisgICAgICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIWZvdW5kRWxlbWVudCkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gZm91bmRFbGVtZW50UmFuZ2UgPSBtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmZvdW5kRWxlbWVudCk7CisgICAgYXV0byBmb3VuZFRl
eHQgPSBwbGFpblRleHQoZm91bmRFbGVtZW50UmFuZ2UpOworICAgIGlmIChhdXRvIGluZGV4ID0g
Zm91bmRUZXh0LmZpbmQocmFuZ2UudGV4dCgpKTsgaW5kZXggIT0gbm90Rm91bmQgJiYgaW5kZXgg
PT0gZm91bmRUZXh0LnJldmVyc2VGaW5kKHJhbmdlLnRleHQoKSkpCisgICAgICAgIHJldHVybiBy
ZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoZm91bmRFbGVtZW50UmFuZ2UsIHsgaW5kZXgsIHJhbmdlLnRl
eHQoKS5sZW5ndGgoKSB9KTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3N0YXRp
YyBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZmluZFJhbmdlKGNvbnN0IEFwcEhpZ2hsaWdodFJhbmdl
RGF0YSYgcmFuZ2UsIERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBpZiAoYXV0byBmb3VuZFJh
bmdlID0gZmluZFJhbmdlQnlJZGVudGlmeWluZ1N0YXJ0QW5kRW5kUG9zaXRpb25zKHJhbmdlLCBk
b2N1bWVudCkpCisgICAgICAgIHJldHVybiBmb3VuZFJhbmdlOworCisgICAgcmV0dXJuIGZpbmRS
YW5nZUJ5U2VhcmNoaW5nVGV4dChyYW5nZSwgZG9jdW1lbnQpOworfQorCitBcHBIaWdobGlnaHRT
dG9yYWdlQ29udHJvbGxlcjo6QXBwSGlnaGxpZ2h0U3RvcmFnZUNvbnRyb2xsZXIoRG9jdW1lbnQm
IGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVudChtYWtlV2Vha1B0cihkb2N1bWVudCkpCit7Cit9
CisKK0FwcEhpZ2hsaWdodExpc3REYXRhIEFwcEhpZ2hsaWdodFN0b3JhZ2VDb250cm9sbGVyOjpj
cmVhdGVBcHBIaWdobGlnaHRMaXN0RGF0YSgpCit7CisgICAgVmVjdG9yPEFwcEhpZ2hsaWdodFJh
bmdlRGF0YT4gZGF0YTsKKworICAgIGlmIChtX2RvY3VtZW50KSB7CisgICAgICAgIGlmIChhdXRv
IGFwcEhpZ2hsaWdodFJlZ2lzdGVyID0gbV9kb2N1bWVudC0+YXBwSGlnaGxpZ2h0UmVnaXN0ZXJJ
ZkV4aXN0cygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IGFwcEhpZ2hs
aWdodFJlZ2lzdGVyLT5tYXAoKSkgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcmFuZ2VE
YXRhIDogaGlnaGxpZ2h0LnZhbHVlLT5yYW5nZXNEYXRhKCkpCisgICAgICAgICAgICAgICAgICAg
IGRhdGEuYXBwZW5kKGNyZWF0ZUFwcEhpZ2xpZ2h0UmFuZ2VEYXRhKHJhbmdlRGF0YS0+cmFuZ2Up
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7IFdURk1v
dmUoZGF0YSkgfTsKK30KKworVmVjdG9yPEFwcEhpZ2hsaWdodFJhbmdlRGF0YT4gQXBwSGlnaGxp
Z2h0U3RvcmFnZUNvbnRyb2xsZXI6OnJlc3RvcmVBcHBIaWdobGlnaHRzKFJlZjxTaGFyZWRCdWZm
ZXI+JiYgYnVmZmVyKQoreworICAgIGF1dG8gYXBwSGlnaGxpZ2h0TGlzdERhdGEgPSBBcHBIaWdo
bGlnaHRMaXN0RGF0YTo6Y3JlYXRlKGJ1ZmZlcik7CisgICAgVmVjdG9yPEFwcEhpZ2hsaWdodFJh
bmdlRGF0YT4gdW5yZXN0b3JlZFJhbmdlczsKKyAgICBWZWN0b3I8QXBwSGlnaGxpZ2h0UmFuZ2VE
YXRhPiByZXN0b3JlZFJhbmdlczsKKworCisgICAgaWYgKG1fZG9jdW1lbnQpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBhcHBIaWdobGlnaHRMaXN0RGF0YSA6IGFwcEhpZ2hsaWdodExpc3REYXRhLnJh
bmdlcygpKSB7CisgICAgICAgICAgICBhdXRvIHJhbmdlID0gZmluZFJhbmdlKGFwcEhpZ2hsaWdo
dExpc3REYXRhLCAqbV9kb2N1bWVudC5nZXQoKSk7CisgICAgICAgICAgICBpZiAoIXJhbmdlKSB7
CisgICAgICAgICAgICAgICAgdW5yZXN0b3JlZFJhbmdlcy5hcHBlbmQoYXBwSGlnaGxpZ2h0TGlz
dERhdGEpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXN0b3JlZFJhbmdlcy5hcHBlbmQoYXBwSGlnaGxpZ2h0TGlzdERhdGEpOworICAg
ICAgICAgICAgbV9kb2N1bWVudC0+YXBwSGlnaGxpZ2h0UmVnaXN0ZXIoKS5hZGRBcHBIaWdobGln
aHQoU3RhdGljUmFuZ2U6OmNyZWF0ZSgqcmFuZ2UpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gdW5yZXN0b3JlZFJhbmdlczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0U3Rv
cmFnZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhp
Z2hsaWdodFN0b3JhZ2VDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjBkZGFiODA2OWJlNWIzZGVi
YzViY2QxNmI5OGQ4MjAxZDllYzY3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFN0b3JhZ2VDb250cm9sbGVyLmgKQEAgLTAs
MCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEFwcEhpZ2hsaWdodExpc3REYXRhOworCitjbGFzcyBBcHBIaWdobGlnaHRT
dG9yYWdlQ29udHJvbGxlciA6IFJlZkNvdW50ZWQ8QXBwSGlnaGxpZ2h0U3RvcmFnZUNvbnRyb2xs
ZXI+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBBcHBIaWdo
bGlnaHRTdG9yYWdlQ29udHJvbGxlcihEb2N1bWVudCYpOworCisgICAgQXBwSGlnaGxpZ2h0TGlz
dERhdGEgY3JlYXRlQXBwSGlnaGxpZ2h0TGlzdERhdGEoKTsKKyAgICBWZWN0b3I8QXBwSGlnaGxp
Z2h0UmFuZ2VEYXRhPiByZXN0b3JlQXBwSGlnaGxpZ2h0cyhSZWY8U2hhcmVkQnVmZmVyPiYmKTsK
KworcHJpdmF0ZToKKyAgICBXZWFrUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OworCit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ1J0cFNjcmlwdFRyYW5zZm9ybS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFNjcmlwdFRyYW5zZm9ybS5jcHAKaW5kZXggNjc3MzYw
NzVkZWQ3NzZiMmY3NjljZDVlOTg0YjU3ZjM1OWQyMTVhNi4uZjI2OWQxZWJkNzdlZDlhOTZmZTU0
OTM0ZjEzMzgwMjc1YWI5YWFhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9SVENSdHBTY3JpcHRUcmFuc2Zvcm0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU2NyaXB0VHJhbnNmb3JtLmNwcApAQCAtMzUsNiAr
MzUsNyBAQAogI2luY2x1ZGUgIlJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQuaCIKICNpbmNsdWRlICJX
b3JrZXIuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBTY3JpcHRUcmFuc2Zvcm0uaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU2NyaXB0VHJhbnNmb3JtLmgK
aW5kZXggNDRkY2ViNWY0MGZmNTdmZDVmYTNjYzA3OTNhNjEwOGU4NTU2ZTY5Ni4uZWM1NDY4YWJl
YTBiMDE3OTIzMDBkMTUzNTk0NDZkNWUzOWEyYWQ4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBTY3JpcHRUcmFuc2Zvcm0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFNjcmlwdFRyYW5zZm9ybS5oCkBA
IC0yNyw3ICsyNyw5IEBACiAKICNpZiBFTkFCTEUoV0VCX1JUQykKIAorI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiTWVzc2Fn
ZVBvcnQuaCIKICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGE0OWYzNjgyYTJmMmRlNDkwNTg5Mzgy
YWUzMTc3MzY4MTZiZTIzNjEuLmVmYTY3YjhlYWJjOTY1YmY0MDk2MzI2OGFhOGM2YjY3MDUwMDIz
ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC02NCw2ICs2NCw4IEBAIE1vZHVsZXMvZ2VvbG9jYXRpb24v
R2VvbG9jYXRpb24uY3BwCiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxl
ci5jcHAKIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db29yZGluYXRlcy5jcHAKIE1v
ZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uY3BwCitNb2R1bGVzL2hpZ2hs
aWdodC9BcHBIaWdobGlnaHRMaXN0RGF0YS5jcHAKK01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hs
aWdodFN0b3JhZ2VDb250cm9sbGVyLmNwcAogTW9kdWxlcy9oaWdobGlnaHQvSGlnaGxpZ2h0UmVn
aXN0ZXIuY3BwCiBNb2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHQuY3BwCiBNb2R1bGVzL2luZGV4
ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTIyYWMyMzAzZGRiYjAwNDM3
OTI0NDgyYjBkNTZkNzA3ZGUxMzM4ZS4uNzU5M2ZjODY1Mjk3NDZkZjZlOWI2ZWQxZjc4ZWQ5YzY4
NzA0OWM3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTIxMSw2ICsxMjExLDcgQEAKIAkJNDNFREQ2N0YxQjQ4NURCRjAwNjQw
RTc1IC8qIENvbWJpbmVkRmlsdGVyc0FscGhhYmV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0M0VERDY3RDFCNDg1REJGMDA2NDBFNzUgLyogQ29tYmlu
ZWRGaWx0ZXJzQWxwaGFiZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk0NDBFREJEMTI1NUUxMTZDMDAzMDBCQTcgLyogTG9jYWxpemFibGUuc3Ry
aW5ncyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ2
RUU0RTgyNTVFMEQ5MjAwNDU0NDYzIC8qIExvY2FsaXphYmxlLnN0cmluZ3MgKi87IH07CiAJCTQ0
MTUyOTJFMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDE1MjkyQzBFMUFFOEEw
MDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQ0MjUwNzA5MjU4MjlBMjcwMEMwOTM2OCAv
KiBBcHBIaWdobGlnaHRTdG9yYWdlQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQyNTA3MDcyNTgyOUExNDAwQzA5MzY4IC8qIEFwcEhp
Z2hsaWdodFN0b3JhZ2VDb250cm9sbGVyLmggKi87IH07CiAJCTQ0MzBEMDBCMjU3NUE4M0UwMDQ2
RDQwMSAvKiBIaWdobGlnaHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0RTg4RTUxMjM2QTVDOEQwMDlCNDg0NyAvKiBIaWdobGlnaHQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDMwRDAwRDI1NzVB
OEE1MDA0NkQ0MDEgLyogSGlnaGxpZ2h0UmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0RTg4RTUwMjM2QTU2QUMwMDlCNDg0NyAvKiBIaWdo
bGlnaHRSZWdpc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTQ0NTc3NUU1MjA0NzJGNzMwMDhEQ0U1RCAvKiBMb2NhbERlZmF1bHRTeXN0ZW1B
cHBlYXJhbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NDU3NzVFNDIwNDcyRjczMDA4RENFNUQgLyogTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5j
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0x
MjI2LDYgKzEyMjcsNyBAQAogCQk0NEEyMERCOTBGODQxNjZDMDBCM0UxRkUgLyogV2ViQ29yZVVS
TFJlc3BvbnNlSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0NEEyMERCODBGODQxNjZDMDBCM0UxRkUgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDRBMjhB
QUMxMkRGQjhBQzAwQUU5MjNCIC8qIE1hdGhNTEVsZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEEyOEFBQjEyREZCOEFDMDBBRTky
M0IgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuaCAqLzsgfTsKIAkJNDRBMjhBQUYxMkRGQjhCRjAw
QUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NEEyOEFBRTEyREZCOEJGMDBBRTkyM0IgLyogTWF0aE1MTmFtZXMuaCAq
LzsgfTsKKwkJNDRBRTA0NUMyNTc5Q0ZGQjAwQzQyRTY1IC8qIEFwcEhpZ2hsaWdodExpc3REYXRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEFFMDQ1
QTI1NzlDRkZCMDBDNDJFNjUgLyogQXBwSGlnaGxpZ2h0TGlzdERhdGEuaCAqLzsgfTsKIAkJNDRD
OTkxODYwRjNEMUVCRTAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9TLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEM5OTE4NTBGM0QxRUJFMDA1ODY2
NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCAqLzsgfTsKIAkJNDRDOTkxOUYwRjNEMjEwRTAwNTg2
NjcwIC8qIFRoZW1lSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NEM5OTE5RDBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MuaCAqLzsgfTsKIAkJ
NDRFMzQ5RjkyNDZGNEUxOTAwNjg0NzlDIC8qIExpYldlYlJUQ0VudW1UcmFpdHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0RTM0OUY3MjQ2RjREQzcw
MDY4NDc5QyAvKiBMaWJXZWJSVENFbnVtVHJhaXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgwNjgsNiArODA3MCw4IEBACiAJCTQzRURENjdE
MUI0ODVEQkYwMDY0MEU3NSAvKiBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0NDE1MjkyQzBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBs
dWdJbkltYWdlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0MTUy
OTJEMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NDI1MDcwNjI1ODI5QTE0MDBDMDkzNjgg
LyogQXBwSGlnaGxpZ2h0U3RvcmFnZUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QXBwSGlnaGxpZ2h0U3RvcmFnZUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0NDI1MDcwNzI1ODI5QTE0MDBDMDkzNjggLyogQXBwSGlnaGxpZ2h0U3RvcmFnZUNv
bnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwSGlnaGxpZ2h0U3RvcmFnZUNvbnRyb2xsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQyOTU2Q0EyMThBNkQzMDAwODBEQjU0
IC8qIERpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEaWN0
aW9uYXJ5TG9va3VwTGVnYWN5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDM3
QzRBNzI0RTJBRTVGMDAwOTUxMjggLyogTGF6eUxvYWRGcmFtZU9ic2VydmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExhenlMb2FkRnJhbWVPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0NDM3QzRBOTI0RTJBRTVGMDAwOTUxMjggLyogTGF6eUxvYWRGcmFtZU9ic2VydmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExhenlMb2FkRnJhbWVPYnNlcnZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDkyLDYgKzgwOTYsOCBAQAogCQk0NEEyMERCODBGODQx
NjZDMDBCM0UxRkUgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0NEEyOEFBQjEyREZCOEFDMDBBRTkyM0IgLyogTWF0aE1MRWxlbWVudEZh
Y3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWF0aE1MRWxlbWVudEZh
Y3RvcnkuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvTWF0aE1MRWxlbWVudEZhY3Rv
cnkuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNDRBMjhBQUUxMkRG
QjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IE1hdGhNTE5hbWVzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL01hdGhN
TE5hbWVzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTQ0QUUwNDU4
MjU3OUNGRkIwMEM0MkU2NSAvKiBBcHBIaWdobGlnaHRMaXN0RGF0YS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcHBIaWdobGlnaHRMaXN0RGF0YS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ0QUUwNDVBMjU3OUNGRkIwMEM0MkU2NSAvKiBBcHBI
aWdobGlnaHRMaXN0RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBI
aWdobGlnaHRMaXN0RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEIzOEJG
NDI1MzY5MDFBMDBBNDQ1OEQgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlbGVjdGlvblJhbmdlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0NEIzOEJGOTI1MzY5QTg4MDBBNDQ1OEQgLyogU2VsZWN0aW9uUmFuZ2VE
YXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdGlvblJh
bmdlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0QkQyQjM2MjUyNzc5
NzgwMDU1RDk1QSAvKiBHbG9iYWxFdmVudEhhbmRsZXJzK1NlbGVjdGlvbi5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gIkds
b2JhbEV2ZW50SGFuZGxlcnMrU2VsZWN0aW9uLmlkbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xOTc0NCw2ICsxOTc1MCwxMCBAQAogCQk0NEU4OEU0NzIzNjhERjBGMDA5QjQ4NDcg
LyogaGlnaGxpZ2h0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQk0NEFFMDQ1ODI1NzlDRkZCMDBDNDJFNjUgLyogQXBwSGlnaGxpZ2h0TGlzdERhdGEuY3Bw
ICovLAorCQkJCTQ0QUUwNDVBMjU3OUNGRkIwMEM0MkU2NSAvKiBBcHBIaWdobGlnaHRMaXN0RGF0
YS5oICovLAorCQkJCTQ0MjUwNzA2MjU4MjlBMTQwMEMwOTM2OCAvKiBBcHBIaWdobGlnaHRTdG9y
YWdlQ29udHJvbGxlci5jcHAgKi8sCisJCQkJNDQyNTA3MDcyNTgyOUExNDAwQzA5MzY4IC8qIEFw
cEhpZ2hsaWdodFN0b3JhZ2VDb250cm9sbGVyLmggKi8sCiAJCQkJNDRFODhFNTQyMzZBNjZBMTAw
OUI0ODQ3IC8qIEhpZ2hsaWdodC5jcHAgKi8sCiAJCQkJNDRFODhFNTEyMzZBNUM4RDAwOUI0ODQ3
IC8qIEhpZ2hsaWdodC5oICovLAogCQkJCTQ0RTg4RTREMjM2OTEyOEIwMDlCNDg0NyAvKiBIaWdo
bGlnaHQuaWRsICovLApAQCAtMzEwMTQsNiArMzEwMjQsOCBAQAogCQkJCTU3MTUyQjVBMjFDQjNF
ODgwMDBDMzdDQSAvKiBBcGR1Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTcxNTJCNUMy
MUNDMTkwMjAwMEMzN0NBIC8qIEFwZHVSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMz
MDlERDcwOTlFNjQ5MjAwNTZFNTgxIC8qIEFwcGVuZE5vZGVDb21tYW5kLmggaW4gSGVhZGVycyAq
LywKKwkJCQk0NEFFMDQ1QzI1NzlDRkZCMDBDNDJFNjUgLyogQXBwSGlnaGxpZ2h0TGlzdERhdGEu
aCBpbiBIZWFkZXJzICovLAorCQkJCTQ0MjUwNzA5MjU4MjlBMjcwMEMwOTM2OCAvKiBBcHBIaWdo
bGlnaHRTdG9yYWdlQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTExM0UwMkUyMzMx
QTEzNDAwOUMzM0EwIC8qIEFwcGxlUGF5Q2FuY2VsRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExREY1QTk0MUY3RUM0MzIwMDU4QTQ3NyAvKiBBcHBsZVBheUNvbnRhY3RGaWVsZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTEyQzU5RUUyMDM1RkM5QjAwMTIyMzZCIC8qIEFwcGxlUGF5RXJyb3Iu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggZGI4N2ZhMTM0N2Q0
N2VhMzI1YzkxYTllODc1NDZiMzgyZDVlOTY1OS4uYmIwMTU2ZGMyM2RhMWM5ZjM3YWEyY2ZkMWFk
Y2IzY2Q0Y2JmOWQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0yOSw2ICsyOSw4IEBA
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKIAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNp
bmNsdWRlICJBcHBIaWdobGlnaHRMaXN0RGF0YS5oIgorI2luY2x1ZGUgIkFwcEhpZ2hsaWdodFN0
b3JhZ2VDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkJlZm9yZVVu
bG9hZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgiCkBAIC0yNzg2LDYgKzI3ODgs
MTMgQEAgSGlnaGxpZ2h0UmVnaXN0ZXImIERvY3VtZW50OjphcHBIaWdobGlnaHRSZWdpc3Rlcigp
CiAgICAgcmV0dXJuICptX2FwcEhpZ2hsaWdodFJlZ2lzdGVyOwogfQogCitBcHBIaWdobGlnaHRT
dG9yYWdlQ29udHJvbGxlciYgRG9jdW1lbnQ6OmFwcEhpZ2hsaWdodFN0b3JhZ2VDb250cm9sbGVy
KCkKK3sKKyAgICBpZiAoIW1fYXBwSGlnaGxpZ2h0U3RvcmFnZUNvbnRyb2xsZXIpCisgICAgICAg
IG1fYXBwSGlnaGxpZ2h0U3RvcmFnZUNvbnRyb2xsZXIgPSBtYWtlVW5pcXVlPEFwcEhpZ2hsaWdo
dFN0b3JhZ2VDb250cm9sbGVyPigqdGhpcyk7CisgICAgcmV0dXJuICptX2FwcEhpZ2hsaWdodFN0
b3JhZ2VDb250cm9sbGVyOworfQorCiB2b2lkIERvY3VtZW50Ojpjb2xsZWN0UmFuZ2VEYXRhRnJv
bVJlZ2lzdGVyKFZlY3RvcjxXZWFrUHRyPEhpZ2hsaWdodFJhbmdlRGF0YT4+JiByYW5nZXNEYXRh
LCBjb25zdCBIaWdobGlnaHRSZWdpc3RlciYgaGlnaGxpZ2h0UmVnaXN0ZXIpCiB7CiAgICAgZm9y
IChhdXRvJiBoaWdobGlnaHQgOiBoaWdobGlnaHRSZWdpc3Rlci5tYXAoKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAppbmRleCBlZTAzZjVmNGJmZmE5YzM2ZWMyODRiMzk5MDk0ZTNjNWU4ZTE5ODhiLi43
MzI1ODE2YWEwOTU3OTVkYWY1ZmM1ZTIyM2I2MzVlNjdhYjBmYzcwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaApAQCAtOTQsNiArOTQsNyBAQCBjbGFzcyBJbnB1dEN1cnNvcjsKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQVhPYmplY3RDYWNoZTsKK2NsYXNzIEFwcEhpZ2hsaWdodFN0b3JhZ2VD
b250cm9sbGVyOwogY2xhc3MgQXR0cjsKIGNsYXNzIENEQVRBU2VjdGlvbjsKIGNsYXNzIENTU0N1
c3RvbVByb3BlcnR5VmFsdWU7CkBAIC0xNTgwLDYgKzE1ODEsOSBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgSGlnaGxpZ2h0UmVnaXN0ZXImIGFwcEhpZ2hsaWdodFJlZ2lzdGVyKCk7CiAg
ICAgdm9pZCB1cGRhdGVIaWdobGlnaHRQb3NpdGlvbnMoKTsKIAorICAgIEFwcEhpZ2hsaWdodFN0
b3JhZ2VDb250cm9sbGVyJiBhcHBIaWdobGlnaHRTdG9yYWdlQ29udHJvbGxlcigpOworICAgIEFw
cEhpZ2hsaWdodFN0b3JhZ2VDb250cm9sbGVyKiBhcHBIaWdobGlnaHRTdG9yYWdlQ29udHJvbGxl
cklmRXhpc3RzKCkgY29uc3QgeyByZXR1cm4gbV9hcHBIaWdobGlnaHRTdG9yYWdlQ29udHJvbGxl
ci5nZXQoKTsgfTsKKwogICAgIGJvb2wgYWxsb3dzQ29udGVudEphdmFTY3JpcHQoKSBjb25zdDsK
IAogICAgIExhenlMb2FkSW1hZ2VPYnNlcnZlciYgbGF6eUxvYWRJbWFnZU9ic2VydmVyKCk7CkBA
IC0xOTM5LDYgKzE5NDMsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxIaWdobGlnaHRSZWdpc3Rl
cj4gbV9oaWdobGlnaHRSZWdpc3RlcjsKICAgICBSZWZQdHI8SGlnaGxpZ2h0UmVnaXN0ZXI+IG1f
YXBwSGlnaGxpZ2h0UmVnaXN0ZXI7CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QXBwSGlnaGxpZ2h0
U3RvcmFnZUNvbnRyb2xsZXI+IG1fYXBwSGlnaGxpZ2h0U3RvcmFnZUNvbnRyb2xsZXI7CisKICAg
ICBUaW1lciBtX3Zpc3VhbFVwZGF0ZXNTdXBwcmVzc2lvblRpbWVyOwogCiAgICAgdm9pZCBjbGVh
clNoYXJlZE9iamVjdFBvb2woKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416072</attachid>
            <date>2020-12-11 17:00:03 -0800</date>
            <delta_ts>2020-12-11 18:22:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219769-20201211170002.patch</filename>
            <type>text/plain</type>
            <size>37694</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwNjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjI4MDU2NmVmYzRhYzMy
OGJkYzY1ZWUwZjRlNzY0ZDM0Zjc3MTA3Ni4uZGRjYjI3MzIwYTc1YzU2Mjk1NDg0MjY2OTVmMWY4
MGUzMTQxZGFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDIwLTEyLTEwICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgSW5mcmFzdHJ1
Y3R1cmUgdG8gc3RvcmUgYW5kIHJlc3RvcmUgQXBwSGlnaGxpZ2h0cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5NzY5CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS83MDI5NzY5OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBcHBIaWdobGlnaHRzIGNhbiBiZSBwdWxsZWQgb3V0IG9mIHRoZWlyIEhpZ2hs
aWdodFJlZ2lzdGVyIGFuZCBlbmNvZGVkIGZvciBzdG9yYWdlIGJ5IHRoZSBhcHAuCisgICAgICAg
IEFsc28sIGFuIGVuY29kZWQgYnVmZmVyIGNhbiBiZSB1bnBhY2tlZCBpbiByYW5nZXMgYWRkZWQg
YmFjayBpbnRvIHRoZSBIaWdobGlnaHRSZWdpc3Rlci4gCisgICAgICAgIEZhbGxiYWNrcyBmb3Ig
cmFuZ2VzIHRoYXQgYXJlIG5vdCBmb3VuZCBhcmUgbm90IGRlc2lnbmVkIHlldCwgc28gY3VycmVu
dGx5IHRoZXkgd2lsbCBqdXN0IGJlIHN0b3JlZAorICAgICAgICB3aXRoIHRoZSBpbnRlbnRpb24g
dG8gY29tbXVuaWNhdGUgYmFjayB0byB0aGUgYXBwIHRoYXQgdGhleSB3ZXJlIG5vdCBmb3VuZCBp
biB0aGUgY3VycmVudCB2ZXJzaW9uIG9mCisgICAgICAgIHRoZSBkb2N1bWVudC4gVGhlIEFQSSB0
byBpbnRlcmFjdCB3aXRoIHRoZSBjbGllbnQgaXMgbm90IGRlc2lnbmVkIHlldCwgc28gY3VycmVu
dGx5IHRoaXMgZW5jb2RlZCBkYXRhIGRvZXMgbm90IGdldAorICAgICAgICBzaHV0dGxlIGFueXdo
ZXJlIGJ1dCB0aGF0IHBsdW1iaW5nIHdpbGwgYmUgYWRkZWQgaW4gYSBsYXRlciBwYXRjaC4KKwor
ICAgICAgICAqIE1vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodExpc3REYXRhLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlUGF0aEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZU5vZGVQYXRoQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VOb2Rl
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBcHBIaWdsaWdodFJhbmdlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHRMaXN0RGF0YTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcEhpZ2hsaWdodExpc3REYXRhOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAq
IE1vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodExpc3REYXRhLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjpOb2RlUGF0aENvbXBvbmVudDo6Tm9k
ZVBhdGhDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0UmFuZ2VEYXRh
OjpOb2RlUGF0aENvbXBvbmVudDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBIaWdobGlnaHRSYW5nZURhdGE6Ok5vZGVQYXRoQ29tcG9uZW50OjpvcGVyYXRvciE9IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6QXBwSGlnaGxp
Z2h0UmFuZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHRSYW5nZURhdGE6OnN0
YXJ0Q29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdl
RGF0YTo6c3RhcnRPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0
UmFuZ2VEYXRhOjplbmRDb250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGln
aGxpZ2h0UmFuZ2VEYXRhOjplbmRPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
SGlnaGxpZ2h0TGlzdERhdGE6OkFwcEhpZ2hsaWdodExpc3REYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcEhpZ2hsaWdodExpc3REYXRhOjpyYW5nZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwSGlnaGxpZ2h0TGlzdERhdGE6OnNldFJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBIaWdobGlnaHRMaXN0RGF0YTo6YWRkUmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhp
Z2hsaWdodExpc3REYXRhOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hs
aWdodExpc3REYXRhOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hs
aWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBIaWdobGlnaHRSYW5nZURhdGE6Ok5vZGVQYXRoQ29tcG9uZW50OjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0TGlzdERhdGE6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHRMaXN0RGF0YTo6ZGVjb2RlKToKKyAgICAgICAg
KiBNb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRTdG9yYWdlQ29udHJvbGxlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZmluZE5vZGVCeVBhdGhJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpmaW5kTm9kZVN0YXJ0aW5nQXRQYXRoQ29tcG9uZW50SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6ZmluZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFJhbmdlQnlJZGVudGlm
eWluZ1N0YXJ0QW5kRW5kUG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRSYW5nZUJ5
U2VhcmNoaW5nVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwSGlnaGxpZ2h0U3RvcmFnZUNvbnRyb2xsZXI6OkFwcEhpZ2hsaWdodFN0b3Jh
Z2VDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodFN0b3JhZ2VDb250
cm9sbGVyOjpjcmVhdGVBcHBIaWdobGlnaHRMaXN0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBIaWdobGlnaHRTdG9yYWdlQ29udHJvbGxlcjo6cmVzdG9yZUFwcEhpZ2hsaWdodHMpOgorICAg
ICAgICAqIE1vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFN0b3JhZ2VDb250cm9sbGVyLmg6
IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU2NyaXB0VHJhbnNm
b3JtLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFNjcmlwdFRyYW5z
Zm9ybS5oOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFwcEhpZ2hsaWdodFN0b3JhZ2VDb250cm9sbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1cGRhdGVIaWdobGlnaHRQb3NpdGlvbnMpOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFwcEhp
Z2hsaWdodFN0b3JhZ2VDb250cm9sbGVySWZFeGlzdHMgY29uc3QpOgorCiAyMDIwLTEyLTEwICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW0dQVVByb2Nlc3NdIEN1
dCBpbiBoYWxmIGFtb3VudCBvZiBJUEMgbmVlZGVkIHRvIGRvIFdlYkF1ZGlvCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRMaXN0RGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRMaXN0RGF0
YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjAyZDg2NTkzN2U5MzgwMDFlNWFmZDZlMmJlNzA3MDE0OWExYTA1
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0Fw
cEhpZ2hsaWdodExpc3REYXRhLmNwcApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFwcEhpZ2hsaWdodExpc3REYXRhLmgiCisKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5o
IgorI2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNs
dWRlICJSZW5kZXJlZERvY3VtZW50TWFya2VyLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CisjaW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIKKyNpbmNsdWRlICJTdGF0aWNSYW5nZS5oIgorI2lu
Y2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0
ZW50Q29kZXJzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHVuc2lnbmVkIGNv
bXB1dGVQYXRoSW5kZXgoY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICBTdHJpbmcgbm9kZU5hbWUg
PSBub2RlLm5vZGVOYW1lKCk7CisgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIGZvciAoYXV0
byogcHJldmlvdXNTaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmcoKTsgcHJldmlvdXNTaWJs
aW5nOyBwcmV2aW91c1NpYmxpbmcgPSBwcmV2aW91c1NpYmxpbmctPnByZXZpb3VzU2libGluZygp
KSB7CisgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmctPm5vZGVOYW1lKCkgPT0gbm9kZU5hbWUp
CisgICAgICAgICAgICBpbmRleCsrOworICAgIH0KKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3N0
YXRpYyBBcHBIaWdobGlnaHRSYW5nZURhdGE6Ok5vZGVQYXRoQ29tcG9uZW50IGNyZWF0ZU5vZGVQ
YXRoQ29tcG9uZW50KGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAg
aXM8RWxlbWVudD4obm9kZSkgPyBkb3duY2FzdDxFbGVtZW50Pihub2RlKS5nZXRJZEF0dHJpYnV0
ZSgpLnN0cmluZygpIDogbnVsbFN0cmluZygpLAorICAgICAgICBub2RlLm5vZGVOYW1lKCksCisg
ICAgICAgIGlzPENoYXJhY3RlckRhdGE+KG5vZGUpID8gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4o
bm9kZSkuZGF0YSgpIDogbnVsbFN0cmluZygpLAorICAgICAgICBjb21wdXRlUGF0aEluZGV4KG5v
ZGUpCisgICAgfTsKK30KKworc3RhdGljIEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGgg
bWFrZU5vZGVQYXRoKFJlZlB0cjxOb2RlPiYmIG5vZGUpCit7CisgICAgQXBwSGlnaGxpZ2h0UmFu
Z2VEYXRhOjpOb2RlUGF0aCBjb21wb25lbnRzOworICAgIGF1dG8gYm9keSA9IG5vZGUtPmRvY3Vt
ZW50KCkuYm9keSgpOworICAgIGZvciAoYXV0byBhbmNlc3RvciA9IG5vZGU7IGFuY2VzdG9yICYm
IGFuY2VzdG9yICE9IGJvZHk7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKSkKKyAg
ICAgICAgY29tcG9uZW50cy5hcHBlbmQoY3JlYXRlTm9kZVBhdGhDb21wb25lbnQoKmFuY2VzdG9y
KSk7CisgICAgY29tcG9uZW50cy5yZXZlcnNlKCk7CisgICAgcmV0dXJuIHsgY29tcG9uZW50cyB9
OworfQorCitzdGF0aWMgQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhIGNyZWF0ZUFwcEhpZ2xpZ2h0UmFu
Z2VEYXRhKGNvbnN0IFN0YXRpY1JhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4geworICAgICAg
ICBwbGFpblRleHQocmFuZ2UpLAorICAgICAgICBtYWtlTm9kZVBhdGgoJnJhbmdlLnN0YXJ0Q29u
dGFpbmVyKCkpLAorICAgICAgICByYW5nZS5zdGFydE9mZnNldCgpLAorICAgICAgICBtYWtlTm9k
ZVBhdGgoJnJhbmdlLmVuZENvbnRhaW5lcigpKSwKKyAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0KCkK
KyAgICB9OworfQorCitBcHBIaWdobGlnaHRMaXN0RGF0YSBBcHBIaWdobGlnaHRMaXN0RGF0YTo6
Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQoreworICAgIGF1dG8gZGVjb2RlciA9
IGJ1ZmZlci5kZWNvZGVyKCk7CisgICAgT3B0aW9uYWw8QXBwSGlnaGxpZ2h0TGlzdERhdGE+IGRh
dGE7CisgICAgZGVjb2RlciA+PiBkYXRhOworICAgIHJldHVybiBkYXRhID8gKmRhdGEgOiBBcHBI
aWdobGlnaHRMaXN0RGF0YSB7eyB9fTsKK30KKworUmVmPFNoYXJlZEJ1ZmZlcj4gQXBwSGlnaGxp
Z2h0TGlzdERhdGE6OnRvRGF0YSgpIGNvbnN0Cit7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5j
b2RlciBlbmNvZGVyOworICAgIGVuY29kZXIgPDwgKnRoaXM7CisgICAgcmV0dXJuIFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0TGlzdERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodExpc3REYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjZjMjE4
ZTJlZWYxMTRjYjYyNjRlZjU2ZjAyNjllODUwMzc4MzY0OQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodExpc3REYXRhLmgKQEAg
LTAsMCArMSwyMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgQXBwSGlnaGxpZ2h0UmFu
Z2VEYXRhIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgTm9kZVBhdGhDb21wb25lbnQgeworICAgICAg
ICBTdHJpbmcgaWRlbnRpZmllcjsKKyAgICAgICAgU3RyaW5nIG5vZGVOYW1lOworICAgICAgICBT
dHJpbmcgdGV4dERhdGE7CisgICAgICAgIHVuc2lnbmVkIHBhdGhJbmRleCB7IDAgfTsKKworICAg
ICAgICBOb2RlUGF0aENvbXBvbmVudChTdHJpbmcmJiBlbGVtZW50SWRlbnRpZmllciwgU3RyaW5n
JiYgbmFtZSwgU3RyaW5nJiYgZGF0YSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IGlk
ZW50aWZpZXIoV1RGTW92ZShlbGVtZW50SWRlbnRpZmllcikpCisgICAgICAgICAgICAsIG5vZGVO
YW1lKFdURk1vdmUobmFtZSkpCisgICAgICAgICAgICAsIHRleHREYXRhKFdURk1vdmUoZGF0YSkp
CisgICAgICAgICAgICAsIHBhdGhJbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgTm9kZVBhdGhDb21wb25lbnQoY29uc3QgU3RyaW5nJiBlbGVtZW50SWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRhdGEsIHVuc2lnbmVkIGluZGV4
KQorICAgICAgICAgICAgOiBpZGVudGlmaWVyKGVsZW1lbnRJZGVudGlmaWVyKQorICAgICAgICAg
ICAgLCBub2RlTmFtZShuYW1lKQorICAgICAgICAgICAgLCB0ZXh0RGF0YShkYXRhKQorICAgICAg
ICAgICAgLCBwYXRoSW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBOb2RlUGF0aENvbXBvbmVudCYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyID09IG90aGVyLmlkZW50aWZp
ZXIgJiYgbm9kZU5hbWUgPT0gb3RoZXIubm9kZU5hbWUgJiYgdGV4dERhdGEgPT0gb3RoZXIudGV4
dERhdGEgJiYgcGF0aEluZGV4ID09IG90aGVyLnBhdGhJbmRleDsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBOb2RlUGF0aENvbXBvbmVudCYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPE5vZGVQYXRoQ29tcG9uZW50PiBkZWNvZGUoRGVjb2RlciYpOworICAgIH07CisKKyAgICB1
c2luZyBOb2RlUGF0aCA9IFZlY3RvcjxOb2RlUGF0aENvbXBvbmVudD47CisKKyAgICBBcHBIaWdo
bGlnaHRSYW5nZURhdGEoY29uc3QgQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhJikgPSBkZWZhdWx0Owor
ICAgIEFwcEhpZ2hsaWdodFJhbmdlRGF0YSgpID0gZGVmYXVsdDsKKyAgICBBcHBIaWdobGlnaHRS
YW5nZURhdGEoU3RyaW5nJiYgdGV4dCwgTm9kZVBhdGgmJiBzdGFydENvbnRhaW5lciwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIE5vZGVQYXRoJiYgZW5kQ29udGFpbmVyLCB1bnNpZ25lZCBlbmRPZmZz
ZXQpCisgICAgICAgIDogbV90ZXh0KFdURk1vdmUodGV4dCkpCisgICAgICAgICwgbV9zdGFydENv
bnRhaW5lcihXVEZNb3ZlKHN0YXJ0Q29udGFpbmVyKSkKKyAgICAgICAgLCBtX3N0YXJ0T2Zmc2V0
KHN0YXJ0T2Zmc2V0KQorICAgICAgICAsIG1fZW5kQ29udGFpbmVyKFdURk1vdmUoZW5kQ29udGFp
bmVyKSkKKyAgICAgICAgLCBtX2VuZE9mZnNldChlbmRPZmZzZXQpCisgICAgeworICAgIH0KKwor
ICAgIEFwcEhpZ2hsaWdodFJhbmdlRGF0YShjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IE5vZGVQ
YXRoJiBzdGFydENvbnRhaW5lciwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGNvbnN0IE5vZGVQYXRo
JiBlbmRDb250YWluZXIsIHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICAgICAgOiBtX3RleHQodGV4
dCkKKyAgICAgICAgLCBtX3N0YXJ0Q29udGFpbmVyKHN0YXJ0Q29udGFpbmVyKQorICAgICAgICAs
IG1fc3RhcnRPZmZzZXQoc3RhcnRPZmZzZXQpCisgICAgICAgICwgbV9lbmRDb250YWluZXIoZW5k
Q29udGFpbmVyKQorICAgICAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKKyAgICB7CisgICAg
fQorCisgICAgY29uc3QgU3RyaW5nJiB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0OyB9Cisg
ICAgY29uc3QgTm9kZVBhdGgmIHN0YXJ0Q29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV9zdGFy
dENvbnRhaW5lcjsgfQorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zdGFydE9mZnNldDsgfQorICAgIGNvbnN0IE5vZGVQYXRoJiBlbmRDb250YWluZXIoKSBjb25z
dCB7IHJldHVybiBtX2VuZENvbnRhaW5lcjsgfQorICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fZW5kT2Zmc2V0OyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPEFwcEhpZ2hsaWdodFJhbmdlRGF0YT4gZGVjb2RlKERlY29kZXIm
KTsKKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV90ZXh0OworICAgIE5vZGVQYXRoIG1fc3RhcnRD
b250YWluZXI7CisgICAgdW5zaWduZWQgbV9zdGFydE9mZnNldCB7IDAgfTsKKyAgICBOb2RlUGF0
aCBtX2VuZENvbnRhaW5lcjsKKyAgICB1bnNpZ25lZCBtX2VuZE9mZnNldCB7IDAgfTsKK307CisK
K2NsYXNzIEFwcEhpZ2hsaWdodExpc3REYXRhIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgQXBwSGlnaGxpZ2h0TGlzdERh
dGEgY3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOworCisgICAgQXBwSGlnaGxpZ2h0TGlzdERh
dGEoY29uc3QgQXBwSGlnaGxpZ2h0TGlzdERhdGEmKSA9IGRlZmF1bHQ7CisgICAgQXBwSGlnaGxp
Z2h0TGlzdERhdGEoKSA9IGRlZmF1bHQ7CisgICAgQXBwSGlnaGxpZ2h0TGlzdERhdGEoVmVjdG9y
PEFwcEhpZ2hsaWdodFJhbmdlRGF0YT4mJiBhbm5vdGF0aW9uUmFuZ2VzKQorICAgICAgICA6IG1f
YW5ub3RhdGlvblJhbmdlcyhXVEZNb3ZlKGFubm90YXRpb25SYW5nZXMpKQorICAgIHsKKyAgICB9
CisKKyAgICBjb25zdCBWZWN0b3I8QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhPiYgcmFuZ2VzKCkgY29u
c3QgeyByZXR1cm4gbV9hbm5vdGF0aW9uUmFuZ2VzOyB9CisgICAgdm9pZCBzZXRSYW5nZXMoVmVj
dG9yPEFwcEhpZ2hsaWdodFJhbmdlRGF0YT4mJiByYW5nZXMpIHsgbV9hbm5vdGF0aW9uUmFuZ2Vz
ID0gV1RGTW92ZShyYW5nZXMpOyB9CisgICAgdm9pZCBhZGRSYW5nZXMoVmVjdG9yPEFwcEhpZ2hs
aWdodFJhbmdlRGF0YT4mJiByYW5nZXMpIHsgbV9hbm5vdGF0aW9uUmFuZ2VzLmFwcGVuZFZlY3Rv
cihXVEZNb3ZlKHJhbmdlcykpOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWY8U2hhcmVkQnVm
ZmVyPiB0b0RhdGEoKSBjb25zdDsKKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9hbm5vdGF0aW9uUmFuZ2VzLnNpemUoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fYW5ub3RhdGlvblJhbmdlcy5pc0VtcHR5KCk7IH0KKworICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8QXBwSGlnaGxpZ2h0TGlzdERhdGE+IGRlY29k
ZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisKKyAgICBWZWN0b3I8QXBwSGlnaGxpZ2h0UmFuZ2VE
YXRhPiBtX2Fubm90YXRpb25SYW5nZXM7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgaWRlbnRpZmllcjsKKyAgICBl
bmNvZGVyIDw8IG5vZGVOYW1lOworICAgIGVuY29kZXIgPDwgdGV4dERhdGE7CisgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocGF0aEluZGV4KTsKK30KKwordGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gT3B0aW9uYWw8QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjpOb2RlUGF0aENvbXBv
bmVudD4gQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjpOb2RlUGF0aENvbXBvbmVudDo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8U3RyaW5nPiBpZGVudGlmaWVyOworICAg
IGRlY29kZXIgPj4gaWRlbnRpZmllcjsKKyAgICBpZiAoIWlkZW50aWZpZXIpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxTdHJpbmc+IG5vZGVOYW1lOworICAg
IGRlY29kZXIgPj4gbm9kZU5hbWU7CisgICAgaWYgKCFub2RlTmFtZSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPFN0cmluZz4gdGV4dERhdGE7CisgICAgZGVj
b2RlciA+PiB0ZXh0RGF0YTsKKyAgICBpZiAoIXRleHREYXRhKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8dWludDY0X3Q+IHBhdGhJbmRleDsKKyAgICBkZWNv
ZGVyID4+IHBhdGhJbmRleDsKKyAgICBpZiAoIXBhdGhJbmRleCkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgIHJldHVybiB7eyBXVEZNb3ZlKCppZGVudGlmaWVyKSwgV1RGTW92
ZSgqbm9kZU5hbWUpLCBXVEZNb3ZlKCp0ZXh0RGF0YSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPigq
cGF0aEluZGV4KSB9fTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBBcHBIaWdo
bGlnaHRSYW5nZURhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVu
Y29kZXIgPDwgbV90ZXh0OworICAgIGVuY29kZXIgPDwgbV9zdGFydENvbnRhaW5lcjsKKyAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3N0YXJ0T2Zmc2V0KTsKKyAgICBlbmNv
ZGVyIDw8IG1fZW5kQ29udGFpbmVyOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KG1fZW5kT2Zmc2V0KTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gT3B0aW9uYWw8
QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhPiBBcHBIaWdobGlnaHRSYW5nZURhdGE6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPFN0cmluZz4gdGV4dDsKKyAgICBkZWNvZGVy
ID4+IHRleHQ7CisgICAgaWYgKCF0ZXh0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgT3B0aW9uYWw8Tm9kZVBhdGg+IHN0YXJ0Q29udGFpbmVyOworICAgIGRlY29kZXIgPj4g
c3RhcnRDb250YWluZXI7CisgICAgaWYgKCFzdGFydENvbnRhaW5lcikKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBzdGFydE9mZnNldDsKKyAg
ICBkZWNvZGVyID4+IHN0YXJ0T2Zmc2V0OworICAgIGlmICghc3RhcnRPZmZzZXQpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxOb2RlUGF0aD4gZW5kQ29udGFp
bmVyOworICAgIGRlY29kZXIgPj4gZW5kQ29udGFpbmVyOworICAgIGlmICghZW5kQ29udGFpbmVy
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8dWludDY0X3Q+
IGVuZE9mZnNldDsKKyAgICBkZWNvZGVyID4+IGVuZE9mZnNldDsKKyAgICBpZiAoIWVuZE9mZnNl
dCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworCisgICAgcmV0dXJuIHt7CisgICAg
ICAgIFdURk1vdmUoKnRleHQpLAorICAgICAgICBXVEZNb3ZlKCpzdGFydENvbnRhaW5lciksCisg
ICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPigqc3RhcnRPZmZzZXQpLAorICAgICAgICBXVEZN
b3ZlKCplbmRDb250YWluZXIpLAorICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKmVuZE9m
ZnNldCksCisgICAgfX07Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgQXBwSGln
aGxpZ2h0TGlzdERhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVu
Y29kZXIgPDwgbV9hbm5vdGF0aW9uUmFuZ2VzOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBPcHRpb25hbDxBcHBIaWdobGlnaHRMaXN0RGF0YT4gQXBwSGlnaGxpZ2h0TGlzdERhdGE6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPFZlY3RvcjxBcHBIaWdobGln
aHRSYW5nZURhdGE+PiBhbm5vdGF0aW9uUmFuZ2VzOworICAgIGRlY29kZXIgPj4gYW5ub3RhdGlv
blJhbmdlczsKKyAgICBpZiAoIWFubm90YXRpb25SYW5nZXMpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqYW5ub3RhdGlvblJhbmdlcykgfX07
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0U3RvcmFnZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Mjk1MWVkYzBhMzg0YjhiNmIzYmRjOWUzN2Q4ZmNhMDQzOTc1OTY2NQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFN0b3JhZ2Uu
Y3BwCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQXBwSGlnaGxpZ2h0U3RvcmFnZS5oIgorCisjaW5jbHVkZSAiQXBwSGlnaGxp
Z2h0TGlzdERhdGEuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
TWFya2VyQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgorI2luY2x1
ZGUgIkhpZ2hsaWdodFJlZ2lzdGVyLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlBv
c2l0aW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIgorI2luY2x1ZGUg
IlNpbXBsZVJhbmdlLmgiCisjaW5jbHVkZSAiU3RhdGljUmFuZ2UuaCIKKyNpbmNsdWRlICJUZXh0
SXRlcmF0b3IuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBSZWZQdHI8Tm9k
ZT4gZmluZE5vZGVCeVBhdGhJbmRleChjb25zdCBOb2RlJiBwYXJlbnQsIHVuc2lnbmVkIHBhdGhJ
bmRleCwgY29uc3QgU3RyaW5nJiBub2RlTmFtZSkKK3sKKyAgICBpZiAoIWlzPENvbnRhaW5lck5v
ZGU+KHBhcmVudCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZm9yIChhdXRvKiBj
aGlsZCA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KHBhcmVudCkuZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAobm9kZU5hbWUg
IT0gY2hpbGQtPm5vZGVOYW1lKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBp
ZiAoIXBhdGhJbmRleC0tKQorICAgICAgICAgICAgcmV0dXJuIGNoaWxkOworICAgIH0KKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIHN0ZDo6cGFpcjxSZWZQdHI8Tm9kZT4sIHNpemVf
dD4gZmluZE5vZGVTdGFydGluZ0F0UGF0aENvbXBvbmVudEluZGV4KGNvbnN0IEFwcEhpZ2hsaWdo
dFJhbmdlRGF0YTo6Tm9kZVBhdGgmIHBhdGgsIE5vZGUmIGluaXRpYWxOb2RlLCBzaXplX3QgaW5p
dGlhbEluZGV4VG9Gb2xsb3cpCit7CisgICAgaWYgKGluaXRpYWxJbmRleFRvRm9sbG93ID49IHBh
dGguc2l6ZSgpKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBpbml0aWFsSW5kZXhUb0ZvbGxv
dyB9OworCisgICAgYXV0byBjdXJyZW50Tm9kZSA9IG1ha2VSZWZQdHIoaW5pdGlhbE5vZGUpOwor
ICAgIHNpemVfdCBjdXJyZW50UGF0aEluZGV4ID0gaW5pdGlhbEluZGV4VG9Gb2xsb3c7CisgICAg
Zm9yICg7IGN1cnJlbnRQYXRoSW5kZXggPCBwYXRoLnNpemUoKTsgKytjdXJyZW50UGF0aEluZGV4
KSB7CisgICAgICAgIGF1dG8mIGNvbXBvbmVudCA9IHBhdGhbY3VycmVudFBhdGhJbmRleF07Cisg
ICAgICAgIGF1dG8gbmV4dE5vZGUgPSBmaW5kTm9kZUJ5UGF0aEluZGV4KCpjdXJyZW50Tm9kZSwg
Y29tcG9uZW50LnBhdGhJbmRleCwgY29tcG9uZW50Lm5vZGVOYW1lKTsKKyAgICAgICAgaWYgKCFu
ZXh0Tm9kZSkKKyAgICAgICAgICAgIHJldHVybiB7IG51bGxwdHIsIGN1cnJlbnRQYXRoSW5kZXgg
fTsKKworICAgICAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oKm5leHROb2RlKSAmJiBkb3duY2Fz
dDxDaGFyYWN0ZXJEYXRhPigqbmV4dE5vZGUpLmRhdGEoKSAhPSBjb21wb25lbnQudGV4dERhdGEp
CisgICAgICAgICAgICByZXR1cm4geyBudWxscHRyLCBjdXJyZW50UGF0aEluZGV4IH07CisKKyAg
ICAgICAgY3VycmVudE5vZGUgPSBXVEZNb3ZlKG5leHROb2RlKTsKKyAgICB9CisgICAgcmV0dXJu
IHsgY3VycmVudE5vZGUsIGN1cnJlbnRQYXRoSW5kZXggfTsKK30KKworc3RhdGljIFJlZlB0cjxO
b2RlPiBmaW5kTm9kZShjb25zdCBBcHBIaWdobGlnaHRSYW5nZURhdGE6Ok5vZGVQYXRoJiBwYXRo
LCBEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpIHx8ICFkb2N1
bWVudC5ib2R5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBbZm91bmRO
b2RlLCBuZXh0SW5kZXhdID0gZmluZE5vZGVTdGFydGluZ0F0UGF0aENvbXBvbmVudEluZGV4KHBh
dGgsICpkb2N1bWVudC5ib2R5KCksIDApOworICAgIGlmIChmb3VuZE5vZGUpCisgICAgICAgIHJl
dHVybiBmb3VuZE5vZGU7CisKKyAgICB3aGlsZSAobmV4dEluZGV4IDwgcGF0aC5zaXplKCkpIHsK
KyAgICAgICAgYXV0byYgY29tcG9uZW50ID0gcGF0aFtuZXh0SW5kZXgrK107CisgICAgICAgIGlm
IChjb21wb25lbnQuaWRlbnRpZmllci5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBhdXRvIGVsZW1lbnRXaXRoSWRlbnRpZmllciA9IG1ha2VSZWZQdHIoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoY29tcG9uZW50LmlkZW50aWZpZXIpKTsKKyAgICAgICAgaWYgKCFl
bGVtZW50V2l0aElkZW50aWZpZXIgfHwgZWxlbWVudFdpdGhJZGVudGlmaWVyLT5ub2RlTmFtZSgp
ICE9IGNvbXBvbmVudC5ub2RlTmFtZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IHN0ZDo6dGllKGZvdW5kTm9kZSwgbmV4dEluZGV4KSA9IGZpbmROb2RlU3RhcnRpbmdBdFBhdGhD
b21wb25lbnRJbmRleChwYXRoLCAqZWxlbWVudFdpdGhJZGVudGlmaWVyLCBuZXh0SW5kZXgpOwor
ICAgICAgICBpZiAoZm91bmROb2RlKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kTm9kZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBmaW5kUmFuZ2VCeUlkZW50aWZ5aW5nU3RhcnRBbmRFbmRQb3NpdGlvbnMoY29uc3QgQXBw
SGlnaGxpZ2h0UmFuZ2VEYXRhJiByYW5nZSwgRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIGF1
dG8gc3RhcnRDb250YWluZXIgPSBmaW5kTm9kZShyYW5nZS5zdGFydENvbnRhaW5lcigpLCBkb2N1
bWVudCk7CisgICAgaWYgKCFzdGFydENvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIGF1dG8gZW5kQ29udGFpbmVyID0gZmluZE5vZGUocmFuZ2UuZW5kQ29udGFp
bmVyKCksIGRvY3VtZW50KTsKKyAgICBpZiAoIWVuZENvbnRhaW5lcikKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gc3RhcnQgPSBtYWtlQ29udGFpbmVyT2Zmc2V0UG9z
aXRpb24oc3RhcnRDb250YWluZXIuZ2V0KCksIHJhbmdlLnN0YXJ0T2Zmc2V0KCkpOworICAgIGF1
dG8gZW5kID0gbWFrZUNvbnRhaW5lck9mZnNldFBvc2l0aW9uKGVuZENvbnRhaW5lci5nZXQoKSwg
cmFuZ2UuZW5kT2Zmc2V0KCkpOworICAgIGlmIChzdGFydC5pc09ycGhhbigpIHx8IGVuZC5pc09y
cGhhbigpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIG1ha2VT
aW1wbGVSYW5nZShzdGFydCwgZW5kKTsKK30KKworc3RhdGljIE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiBmaW5kUmFuZ2VCeVNlYXJjaGluZ1RleHQoY29uc3QgQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhJiBy
YW5nZSwgRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIEhhc2hTZXQ8U3RyaW5nPiBpZGVudGlm
aWVyc0luU3RhcnRQYXRoOworICAgIGZvciAoYXV0byYgY29tcG9uZW50IDogcmFuZ2Uuc3RhcnRD
b250YWluZXIoKSkgeworICAgICAgICBpZiAoIWNvbXBvbmVudC5pZGVudGlmaWVyLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIGlkZW50aWZpZXJzSW5TdGFydFBhdGguYWRkKGNvbXBvbmVudC5pZGVu
dGlmaWVyKTsKKyAgICB9CisKKyAgICBSZWZQdHI8RWxlbWVudD4gZm91bmRFbGVtZW50ID0gZG9j
dW1lbnQuYm9keSgpOworICAgIGZvciAoYXV0byBpdGVyYXRvciA9IHJhbmdlLmVuZENvbnRhaW5l
cigpLnJiZWdpbigpLCBlbmQgPSByYW5nZS5lbmRDb250YWluZXIoKS5yZW5kKCk7IGl0ZXJhdG9y
ICE9IGVuZDsgKytpdGVyYXRvcikgeworICAgICAgICBhdXRvIGVsZW1lbnRJZGVudGlmaWVyID0g
aXRlcmF0b3ItPmlkZW50aWZpZXI7CisgICAgICAgIGlmIChlbGVtZW50SWRlbnRpZmllci5pc0Vt
cHR5KCkgfHwgIWlkZW50aWZpZXJzSW5TdGFydFBhdGguY29udGFpbnMoZWxlbWVudElkZW50aWZp
ZXIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm91bmRFbGVtZW50ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkZW50aWZpZXIpOworICAgICAgICBpZiAoZm91
bmRFbGVtZW50KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFmb3VuZEVs
ZW1lbnQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGZvdW5kRWxl
bWVudFJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpmb3VuZEVsZW1lbnQp
OworICAgIGF1dG8gZm91bmRUZXh0ID0gcGxhaW5UZXh0KGZvdW5kRWxlbWVudFJhbmdlKTsKKyAg
ICBpZiAoYXV0byBpbmRleCA9IGZvdW5kVGV4dC5maW5kKHJhbmdlLnRleHQoKSk7IGluZGV4ICE9
IG5vdEZvdW5kICYmIGluZGV4ID09IGZvdW5kVGV4dC5yZXZlcnNlRmluZChyYW5nZS50ZXh0KCkp
KQorICAgICAgICByZXR1cm4gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKGZvdW5kRWxlbWVudFJhbmdl
LCB7IGluZGV4LCByYW5nZS50ZXh0KCkubGVuZ3RoKCkgfSk7CisKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworfQorCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGZpbmRSYW5nZShjb25z
dCBBcHBIaWdobGlnaHRSYW5nZURhdGEmIHJhbmdlLCBEb2N1bWVudCYgZG9jdW1lbnQpCit7Cisg
ICAgaWYgKGF1dG8gZm91bmRSYW5nZSA9IGZpbmRSYW5nZUJ5SWRlbnRpZnlpbmdTdGFydEFuZEVu
ZFBvc2l0aW9ucyhyYW5nZSwgZG9jdW1lbnQpKQorICAgICAgICByZXR1cm4gZm91bmRSYW5nZTsK
KworICAgIHJldHVybiBmaW5kUmFuZ2VCeVNlYXJjaGluZ1RleHQocmFuZ2UsIGRvY3VtZW50KTsK
K30KKworQXBwSGlnaGxpZ2h0U3RvcmFnZTo6QXBwSGlnaGxpZ2h0U3RvcmFnZShEb2N1bWVudCYg
ZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KG1ha2VXZWFrUHRyKGRvY3VtZW50KSkKK3sKK30K
KworQXBwSGlnaGxpZ2h0TGlzdERhdGEgQXBwSGlnaGxpZ2h0U3RvcmFnZTo6Y3JlYXRlQXBwSGln
aGxpZ2h0TGlzdERhdGEoKQoreworICAgIFZlY3RvcjxBcHBIaWdobGlnaHRSYW5nZURhdGE+IGRh
dGE7CisKKyAgICBpZiAoIW1fZG9jdW1lbnQpCisgICAgICAgIHJldHVybiB7IFdURk1vdmUoZGF0
YSkgfTsKKworICAgIGlmIChhdXRvIGFwcEhpZ2hsaWdodFJlZ2lzdGVyID0gbV9kb2N1bWVudC0+
YXBwSGlnaGxpZ2h0UmVnaXN0ZXJJZkV4aXN0cygpKSB7CisgICAgICAgIGZvciAoYXV0byYgaGln
aGxpZ2h0IDogYXBwSGlnaGxpZ2h0UmVnaXN0ZXItPm1hcCgpKSB7CisgICAgICAgICAgICBmb3Ig
KGF1dG8mIHJhbmdlRGF0YSA6IGhpZ2hsaWdodC52YWx1ZS0+cmFuZ2VzRGF0YSgpKQorICAgICAg
ICAgICAgICAgIGRhdGEuYXBwZW5kKGNyZWF0ZUFwcEhpZ2xpZ2h0UmFuZ2VEYXRhKHJhbmdlRGF0
YS0+cmFuZ2UpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7IFdURk1vdmUoZGF0
YSkgfTsKK30KKworVmVjdG9yPEFwcEhpZ2hsaWdodFJhbmdlRGF0YT4gQXBwSGlnaGxpZ2h0U3Rv
cmFnZTo6cmVzdG9yZUFwcEhpZ2hsaWdodHMoUmVmPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpCit7
CisgICAgYXV0byBhcHBIaWdobGlnaHRMaXN0RGF0YSA9IEFwcEhpZ2hsaWdodExpc3REYXRhOjpj
cmVhdGUoYnVmZmVyKTsKKyAgICBWZWN0b3I8QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhPiB1bnJlc3Rv
cmVkUmFuZ2VzOworICAgIFZlY3RvcjxBcHBIaWdobGlnaHRSYW5nZURhdGE+IHJlc3RvcmVkUmFu
Z2VzOworCisgICAgaWYgKCFtX2RvY3VtZW50KQorICAgICAgICByZXR1cm4gdW5yZXN0b3JlZFJh
bmdlczsKKworICAgIGF1dG8gc3Ryb25nRG9jdW1lbnQgPSBtX2RvY3VtZW50LmdldCgpOworCisg
ICAgZm9yIChhdXRvJiBhcHBIaWdobGlnaHRMaXN0RGF0YSA6IGFwcEhpZ2hsaWdodExpc3REYXRh
LnJhbmdlcygpKSB7CisgICAgICAgIGF1dG8gcmFuZ2UgPSBmaW5kUmFuZ2UoYXBwSGlnaGxpZ2h0
TGlzdERhdGEsICpzdHJvbmdEb2N1bWVudCk7CisgICAgICAgIGlmICghcmFuZ2UpIHsKKyAgICAg
ICAgICAgIHVucmVzdG9yZWRSYW5nZXMuYXBwZW5kKGFwcEhpZ2hsaWdodExpc3REYXRhKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgcmVzdG9yZWRSYW5nZXMu
YXBwZW5kKGFwcEhpZ2hsaWdodExpc3REYXRhKTsKKyAgICAgICAgc3Ryb25nRG9jdW1lbnQtPmFw
cEhpZ2hsaWdodFJlZ2lzdGVyKCkuYWRkQXBwSGlnaGxpZ2h0KFN0YXRpY1JhbmdlOjpjcmVhdGUo
KnJhbmdlKSk7CisgICAgfQorICAgIHJldHVybiB1bnJlc3RvcmVkUmFuZ2VzOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hp
Z2hsaWdodC9BcHBIaWdobGlnaHRTdG9yYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hp
Z2hsaWdodC9BcHBIaWdobGlnaHRTdG9yYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjlhYzgwODdmNDFkNjIz
MmQ2NjBlYzA1MmRiMWJkNjRmZGI2Y2QyZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFN0b3JhZ2UuaApAQCAtMCwwICsxLDUx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQXBwSGlnaGxpZ2h0TGlzdERhdGE7CisKK2NsYXNzIEFwcEhpZ2hsaWdodFN0b3JhZ2Ug
OiBSZWZDb3VudGVkPEFwcEhpZ2hsaWdodFN0b3JhZ2U+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBBcHBIaWdobGlnaHRTdG9yYWdlKERvY3VtZW50Jik7CisK
KyAgICBBcHBIaWdobGlnaHRMaXN0RGF0YSBjcmVhdGVBcHBIaWdobGlnaHRMaXN0RGF0YSgpOwor
ICAgIFZlY3RvcjxBcHBIaWdobGlnaHRSYW5nZURhdGE+IHJlc3RvcmVBcHBIaWdobGlnaHRzKFJl
ZjxTaGFyZWRCdWZmZXI+JiYpOworCitwcml2YXRlOgorICAgIFdlYWtQdHI8RG9jdW1lbnQ+IG1f
ZG9jdW1lbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFNjcmlwdFRyYW5zZm9ybS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFNjcmlwdFRyYW5zZm9y
bS5jcHAKaW5kZXggNjc3MzYwNzVkZWQ3NzZiMmY3NjljZDVlOTg0YjU3ZjM1OWQyMTVhNi4uZjI2
OWQxZWJkNzdlZDlhOTZmZTU0OTM0ZjEzMzgwMjc1YWI5YWFhMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBTY3JpcHRUcmFuc2Zvcm0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU2NyaXB0VHJhbnNm
b3JtLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlJUQ1J0cFRyYW5zZm9ybUJhY2tl
bmQuaCIKICNpbmNsdWRlICJXb3JrZXIuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5l
cy5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBTY3Jp
cHRUcmFuc2Zvcm0uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRw
U2NyaXB0VHJhbnNmb3JtLmgKaW5kZXggNDRkY2ViNWY0MGZmNTdmZDVmYTNjYzA3OTNhNjEwOGU4
NTU2ZTY5Ni4uZWM1NDY4YWJlYTBiMDE3OTIzMDBkMTUzNTk0NDZkNWUzOWEyYWQ4YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBTY3JpcHRUcmFu
c2Zvcm0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFNj
cmlwdFRyYW5zZm9ybS5oCkBAIC0yNyw3ICsyNyw5IEBACiAKICNpZiBFTkFCTEUoV0VCX1JUQykK
IAorI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0Lmgi
CisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGE0OWYz
NjgyYTJmMmRlNDkwNTg5MzgyYWUzMTc3MzY4MTZiZTIzNjEuLmFmMmRiZTYwOWQ4NThmNDI3NDBl
ZGZkMzhhMmNlZDU3NDJmMzliOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC02NCw2ICs2NCw4IEBAIE1v
ZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwCiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dl
b2xvY2F0aW9uQ29udHJvbGxlci5jcHAKIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25D
b29yZGluYXRlcy5jcHAKIE1vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24u
Y3BwCitNb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRMaXN0RGF0YS5jcHAKK01vZHVsZXMv
aGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFN0b3JhZ2UuY3BwCiBNb2R1bGVzL2hpZ2hsaWdodC9IaWdo
bGlnaHRSZWdpc3Rlci5jcHAKIE1vZHVsZXMvaGlnaGxpZ2h0L0hpZ2hsaWdodC5jcHAKIE1vZHVs
ZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1MjJhYzIzMDNk
ZGJiMDA0Mzc5MjQ0ODJiMGQ1NmQ3MDdkZTEzMzhlLi43MDM3OWUxN2Q5YmQyMzhiNmUxMWQ0NGRl
MzkyZGM5YzE5NDk0YmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjExLDYgKzEyMTEsNyBAQAogCQk0M0VERDY3RjFCNDg1
REJGMDA2NDBFNzUgLyogQ29tYmluZWRGaWx0ZXJzQWxwaGFiZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzRURENjdEMUI0ODVEQkYwMDY0MEU3NSAv
KiBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTQ0MEVEQkQxMjU1RTExNkMwMDMwMEJBNyAvKiBMb2NhbGl6
YWJsZS5zdHJpbmdzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0NDZFRTRFODI1NUUwRDkyMDA0NTQ0NjMgLyogTG9jYWxpemFibGUuc3RyaW5ncyAqLzsg
fTsKIAkJNDQxNTI5MkUwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MTUyOTJD
MEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNDQyNTA3MDkyNTgyOUEyNzAw
QzA5MzY4IC8qIEFwcEhpZ2hsaWdodFN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MjUwNzA3MjU4MjlBMTQwMEMwOTM2OCAvKiBBcHBIaWdo
bGlnaHRTdG9yYWdlLmggKi87IH07CiAJCTQ0MzBEMDBCMjU3NUE4M0UwMDQ2RDQwMSAvKiBIaWdo
bGlnaHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0
RTg4RTUxMjM2QTVDOEQwMDlCNDg0NyAvKiBIaWdobGlnaHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDMwRDAwRDI1NzVBOEE1MDA0NkQ0MDEg
LyogSGlnaGxpZ2h0UmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ0RTg4RTUwMjM2QTU2QUMwMDlCNDg0NyAvKiBIaWdobGlnaHRSZWdpc3Rl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ0
NTc3NUU1MjA0NzJGNzMwMDhEQ0U1RCAvKiBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDU3NzVFNDIw
NDcyRjczMDA4RENFNUQgLyogTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMjI2LDYgKzEyMjcs
NyBAQAogCQk0NEEyMERCOTBGODQxNjZDMDBCM0UxRkUgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9T
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEEyMERC
ODBGODQxNjZDMDBCM0UxRkUgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDRBMjhBQUMxMkRGQjhBQzAw
QUU5MjNCIC8qIE1hdGhNTEVsZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEEyOEFBQjEyREZCOEFDMDBBRTkyM0IgLyogTWF0aE1M
RWxlbWVudEZhY3RvcnkuaCAqLzsgfTsKIAkJNDRBMjhBQUYxMkRGQjhCRjAwQUU5MjNCIC8qIE1h
dGhNTE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NEEyOEFBRTEyREZCOEJGMDBBRTkyM0IgLyogTWF0aE1MTmFtZXMuaCAqLzsgfTsKKwkJNDRB
RTA0NUMyNTc5Q0ZGQjAwQzQyRTY1IC8qIEFwcEhpZ2hsaWdodExpc3REYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEFFMDQ1QTI1NzlDRkZCMDBD
NDJFNjUgLyogQXBwSGlnaGxpZ2h0TGlzdERhdGEuaCAqLzsgfTsKIAkJNDRDOTkxODYwRjNEMUVC
RTAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEM5OTE4NTBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xs
YmFyVGhlbWVJT1MuaCAqLzsgfTsKIAkJNDRDOTkxOUYwRjNEMjEwRTAwNTg2NjcwIC8qIFRoZW1l
SU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEM5
OTE5RDBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MuaCAqLzsgfTsKIAkJNDRFMzQ5RjkyNDZG
NEUxOTAwNjg0NzlDIC8qIExpYldlYlJUQ0VudW1UcmFpdHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0RTM0OUY3MjQ2RjREQzcwMDY4NDc5QyAvKiBM
aWJXZWJSVENFbnVtVHJhaXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTgwNjgsNiArODA3MCw4IEBACiAJCTQzRURENjdEMUI0ODVEQkYwMDY0
MEU3NSAvKiBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0NDE1MjkyQzBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0MTUyOTJEMEUxQUU4QTAw
MEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0NDI1MDcwNjI1ODI5QTE0MDBDMDkzNjggLyogQXBwSGlnaGxp
Z2h0U3RvcmFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcHBIaWdobGlnaHRTdG9yYWdlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDQyNTA3MDcyNTgyOUExNDAwQzA5MzY4
IC8qIEFwcEhpZ2hsaWdodFN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwSGlnaGxpZ2h0U3Rv
cmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDI5NTZDQTIxOEE2RDMwMDA4
MERCNTQgLyogRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IERpY3Rpb25hcnlMb29rdXBMZWdhY3kubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ0MzdDNEE3MjRFMkFFNUYwMDA5NTEyOCAvKiBMYXp5TG9hZEZyYW1lT2JzZXJ2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTGF6eUxvYWRGcmFtZU9ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ0MzdDNEE5MjRFMkFFNUYwMDA5NTEyOCAvKiBMYXp5TG9hZEZyYW1lT2JzZXJ2
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF6eUxvYWRGcmFtZU9ic2VydmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgwOTIsNiArODA5Niw4IEBACiAJCTQ0QTIwREI4
MEY4NDE2NkMwMEIzRTFGRSAvKiBXZWJDb3JlVVJMUmVzcG9uc2VJT1MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ0QTI4QUFCMTJERkI4QUMwMEFFOTIzQiAvKiBNYXRoTUxFbGVt
ZW50RmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNYXRoTUxFbGVt
ZW50RmFjdG9yeS5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9NYXRoTUxFbGVtZW50
RmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk0NEEyOEFB
RTEyREZCOEJGMDBBRTkyM0IgLyogTWF0aE1MTmFtZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gTWF0aE1MTmFtZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
TWF0aE1MTmFtZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJNDRB
RTA0NTgyNTc5Q0ZGQjAwQzQyRTY1IC8qIEFwcEhpZ2hsaWdodExpc3REYXRhLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFwcEhpZ2hsaWdodExpc3REYXRhLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDRBRTA0NUEyNTc5Q0ZGQjAwQzQyRTY1IC8q
IEFwcEhpZ2hsaWdodExpc3REYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFwcEhpZ2hsaWdodExpc3REYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0
QjM4QkY0MjUzNjkwMUEwMEE0NDU4RCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0aW9uUmFuZ2VEYXRhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ0QjM4QkY5MjUzNjlBODgwMEE0NDU4RCAvKiBTZWxlY3Rpb25S
YW5nZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VsZWN0
aW9uUmFuZ2VEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRCRDJCMzYy
NTI3Nzk3ODAwNTVEOTVBIC8qIEdsb2JhbEV2ZW50SGFuZGxlcnMrU2VsZWN0aW9uLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSAiR2xvYmFsRXZlbnRIYW5kbGVycytTZWxlY3Rpb24uaWRsIjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE5NzQ0LDYgKzE5NzUwLDEwIEBACiAJCTQ0RTg4RTQ3MjM2OERGMEYwMDlC
NDg0NyAvKiBoaWdobGlnaHQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTQ0QUUwNDU4MjU3OUNGRkIwMEM0MkU2NSAvKiBBcHBIaWdobGlnaHRMaXN0RGF0
YS5jcHAgKi8sCisJCQkJNDRBRTA0NUEyNTc5Q0ZGQjAwQzQyRTY1IC8qIEFwcEhpZ2hsaWdodExp
c3REYXRhLmggKi8sCisJCQkJNDQyNTA3MDYyNTgyOUExNDAwQzA5MzY4IC8qIEFwcEhpZ2hsaWdo
dFN0b3JhZ2UuY3BwICovLAorCQkJCTQ0MjUwNzA3MjU4MjlBMTQwMEMwOTM2OCAvKiBBcHBIaWdo
bGlnaHRTdG9yYWdlLmggKi8sCiAJCQkJNDRFODhFNTQyMzZBNjZBMTAwOUI0ODQ3IC8qIEhpZ2hs
aWdodC5jcHAgKi8sCiAJCQkJNDRFODhFNTEyMzZBNUM4RDAwOUI0ODQ3IC8qIEhpZ2hsaWdodC5o
ICovLAogCQkJCTQ0RTg4RTREMjM2OTEyOEIwMDlCNDg0NyAvKiBIaWdobGlnaHQuaWRsICovLApA
QCAtMzEwMTQsNiArMzEwMjQsOCBAQAogCQkJCTU3MTUyQjVBMjFDQjNFODgwMDBDMzdDQSAvKiBB
cGR1Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTcxNTJCNUMyMUNDMTkwMjAwMEMzN0NB
IC8qIEFwZHVSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERDcwOTlFNjQ5MjAw
NTZFNTgxIC8qIEFwcGVuZE5vZGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk0NEFFMDQ1
QzI1NzlDRkZCMDBDNDJFNjUgLyogQXBwSGlnaGxpZ2h0TGlzdERhdGEuaCBpbiBIZWFkZXJzICov
LAorCQkJCTQ0MjUwNzA5MjU4MjlBMjcwMEMwOTM2OCAvKiBBcHBIaWdobGlnaHRTdG9yYWdlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBMTEzRTAyRTIzMzFBMTM0MDA5QzMzQTAgLyogQXBwbGVQYXlD
YW5jZWxFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFERjVBOTQxRjdFQzQzMjAwNThBNDc3
IC8qIEFwcGxlUGF5Q29udGFjdEZpZWxkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTJDNTlFRTIw
MzVGQzlCMDAxMjIzNkIgLyogQXBwbGVQYXlFcnJvci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAppbmRleCBkYjg3ZmExMzQ3ZDQ3ZWEzMjVjOTFhOWU4NzU0NmIzODJkNWU5
NjU5Li5jMGNiMjY4NGMxNGQ4NWNlMWUyMmFmOTg5MTg0MDVkZmM3ZThlNDRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
CiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkFwcEhpZ2hsaWdodExpc3RE
YXRhLmgiCisjaW5jbHVkZSAiQXBwSGlnaGxpZ2h0U3RvcmFnZS5oIgogI2luY2x1ZGUgIkF0dHIu
aCIKICNpbmNsdWRlICJCZWZvcmVVbmxvYWRFdmVudC5oIgogI2luY2x1ZGUgIkNEQVRBU2VjdGlv
bi5oIgpAQCAtMjc4Niw2ICsyNzg4LDEzIEBAIEhpZ2hsaWdodFJlZ2lzdGVyJiBEb2N1bWVudDo6
YXBwSGlnaGxpZ2h0UmVnaXN0ZXIoKQogICAgIHJldHVybiAqbV9hcHBIaWdobGlnaHRSZWdpc3Rl
cjsKIH0KIAorQXBwSGlnaGxpZ2h0U3RvcmFnZSYgRG9jdW1lbnQ6OmFwcEhpZ2hsaWdodFN0b3Jh
Z2UoKQoreworICAgIGlmICghbV9hcHBIaWdobGlnaHRTdG9yYWdlKQorICAgICAgICBtX2FwcEhp
Z2hsaWdodFN0b3JhZ2UgPSBtYWtlVW5pcXVlPEFwcEhpZ2hsaWdodFN0b3JhZ2U+KCp0aGlzKTsK
KyAgICByZXR1cm4gKm1fYXBwSGlnaGxpZ2h0U3RvcmFnZTsKK30KKwogdm9pZCBEb2N1bWVudDo6
Y29sbGVjdFJhbmdlRGF0YUZyb21SZWdpc3RlcihWZWN0b3I8V2Vha1B0cjxIaWdobGlnaHRSYW5n
ZURhdGE+PiYgcmFuZ2VzRGF0YSwgY29uc3QgSGlnaGxpZ2h0UmVnaXN0ZXImIGhpZ2hsaWdodFJl
Z2lzdGVyKQogewogICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogaGlnaGxpZ2h0UmVnaXN0ZXIu
bWFwKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggZWUwM2Y1ZjRiZmZhOWMzNmVjMjg0YjM5
OTA5NGUzYzVlOGUxOTg4Yi4uNTdlNmRhNzdlMGFiY2E3MDUxMGQ3MGE1ZTFjZTE3NTkzODY5ZmM2
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTk0LDYgKzk0LDcgQEAgY2xhc3MgSW5wdXRDdXJz
b3I7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFYT2JqZWN0Q2FjaGU7CitjbGFzcyBB
cHBIaWdobGlnaHRTdG9yYWdlOwogY2xhc3MgQXR0cjsKIGNsYXNzIENEQVRBU2VjdGlvbjsKIGNs
YXNzIENTU0N1c3RvbVByb3BlcnR5VmFsdWU7CkBAIC0xNTgwLDYgKzE1ODEsOSBAQCBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgSGlnaGxpZ2h0UmVnaXN0ZXImIGFwcEhpZ2hsaWdodFJlZ2lz
dGVyKCk7CiAgICAgdm9pZCB1cGRhdGVIaWdobGlnaHRQb3NpdGlvbnMoKTsKIAorICAgIEFwcEhp
Z2hsaWdodFN0b3JhZ2UmIGFwcEhpZ2hsaWdodFN0b3JhZ2UoKTsKKyAgICBBcHBIaWdobGlnaHRT
dG9yYWdlKiBhcHBIaWdobGlnaHRTdG9yYWdlSWZFeGlzdHMoKSBjb25zdCB7IHJldHVybiBtX2Fw
cEhpZ2hsaWdodFN0b3JhZ2UuZ2V0KCk7IH07CisKICAgICBib29sIGFsbG93c0NvbnRlbnRKYXZh
U2NyaXB0KCkgY29uc3Q7CiAKICAgICBMYXp5TG9hZEltYWdlT2JzZXJ2ZXImIGxhenlMb2FkSW1h
Z2VPYnNlcnZlcigpOwpAQCAtMTkzOSw2ICsxOTQzLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8
SGlnaGxpZ2h0UmVnaXN0ZXI+IG1faGlnaGxpZ2h0UmVnaXN0ZXI7CiAgICAgUmVmUHRyPEhpZ2hs
aWdodFJlZ2lzdGVyPiBtX2FwcEhpZ2hsaWdodFJlZ2lzdGVyOwogCisgICAgc3RkOjp1bmlxdWVf
cHRyPEFwcEhpZ2hsaWdodFN0b3JhZ2U+IG1fYXBwSGlnaGxpZ2h0U3RvcmFnZTsKKwogICAgIFRp
bWVyIG1fdmlzdWFsVXBkYXRlc1N1cHByZXNzaW9uVGltZXI7CiAKICAgICB2b2lkIGNsZWFyU2hh
cmVkT2JqZWN0UG9vbCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416082</attachid>
            <date>2020-12-11 18:22:18 -0800</date>
            <delta_ts>2020-12-11 19:20:07 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-219769-20201211182217.patch</filename>
            <type>text/plain</type>
            <size>37690</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwNjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjI4MDU2NmVmYzRhYzMy
OGJkYzY1ZWUwZjRlNzY0ZDM0Zjc3MTA3Ni4uMjIxNzgyNDEyODVlYTBkOWY1MzI5OGMyOGQ4NmM1
MjU2Nzk2NDY2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDIwLTEyLTEwICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgSW5mcmFzdHJ1
Y3R1cmUgdG8gc3RvcmUgYW5kIHJlc3RvcmUgQXBwSGlnaGxpZ2h0cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5NzY5CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS83MDI5NzY5OT4KKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisg
ICAgICAgIEFwcEhpZ2hsaWdodHMgY2FuIGJlIHB1bGxlZCBvdXQgb2YgdGhlaXIgSGlnaGxpZ2h0
UmVnaXN0ZXIgYW5kIGVuY29kZWQgZm9yIHN0b3JhZ2UgYnkgdGhlIGFwcC4KKyAgICAgICAgQWxz
bywgYW4gZW5jb2RlZCBidWZmZXIgY2FuIGJlIHVucGFja2VkIGluIHJhbmdlcyBhZGRlZCBiYWNr
IGludG8gdGhlIEhpZ2hsaWdodFJlZ2lzdGVyLiAKKyAgICAgICAgRmFsbGJhY2tzIGZvciByYW5n
ZXMgdGhhdCBhcmUgbm90IGZvdW5kIGFyZSBub3QgZGVzaWduZWQgeWV0LCBzbyBjdXJyZW50bHkg
dGhleSB3aWxsIGp1c3QgYmUgc3RvcmVkCisgICAgICAgIHdpdGggdGhlIGludGVudGlvbiB0byBj
b21tdW5pY2F0ZSBiYWNrIHRvIHRoZSBhcHAgdGhhdCB0aGV5IHdlcmUgbm90IGZvdW5kIGluIHRo
ZSBjdXJyZW50IHZlcnNpb24gb2YKKyAgICAgICAgdGhlIGRvY3VtZW50LiBUaGUgQVBJIHRvIGlu
dGVyYWN0IHdpdGggdGhlIGNsaWVudCBpcyBub3QgZGVzaWduZWQgeWV0LCBzbyBjdXJyZW50bHkg
dGhpcyBlbmNvZGVkIGRhdGEgZG9lcyBub3QgZ2V0CisgICAgICAgIHNodXR0bGUgYW55d2hlcmUg
YnV0IHRoYXQgcGx1bWJpbmcgd2lsbCBiZSBhZGRlZCBpbiBhIGxhdGVyIHBhdGNoLgorCisgICAg
ICAgICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0TGlzdERhdGEuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVQYXRoSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlTm9kZVBhdGhDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZU5vZGVQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFwcEhpZ2xpZ2h0UmFuZ2VEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodExpc3REYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwSGlnaGxpZ2h0TGlzdERhdGE6OnRvRGF0YSBjb25zdCk6CisgICAgICAgICogTW9k
dWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0TGlzdERhdGEuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpBcHBIaWdobGlnaHRSYW5nZURhdGE6Ok5vZGVQYXRoQ29tcG9uZW50OjpOb2RlUGF0
aENvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHRSYW5nZURhdGE6Ok5v
ZGVQYXRoQ29tcG9uZW50OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6Om9wZXJhdG9yIT0gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjpBcHBIaWdobGlnaHRS
YW5nZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjp0ZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6c3RhcnRD
b250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0UmFuZ2VEYXRh
OjpzdGFydE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHRSYW5n
ZURhdGE6OmVuZENvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGln
aHRSYW5nZURhdGE6OmVuZE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdo
bGlnaHRMaXN0RGF0YTo6QXBwSGlnaGxpZ2h0TGlzdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwSGlnaGxpZ2h0TGlzdERhdGE6OnJhbmdlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBIaWdobGlnaHRMaXN0RGF0YTo6c2V0UmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhp
Z2hsaWdodExpc3REYXRhOjphZGRSYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxp
Z2h0TGlzdERhdGE6OnNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0
TGlzdERhdGE6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0
UmFuZ2VEYXRhOjpOb2RlUGF0aENvbXBvbmVudDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQ6OmRlY29kZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHRSYW5nZURhdGE6OmVuY29kZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHRSYW5nZURhdGE6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBIaWdobGlnaHRMaXN0RGF0YTo6ZW5jb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcEhpZ2hsaWdodExpc3REYXRhOjpkZWNvZGUpOgorICAgICAgICAqIE1v
ZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFN0b3JhZ2VDb250cm9sbGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpmaW5kTm9kZUJ5UGF0aEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OmZpbmROb2RlU3RhcnRpbmdBdFBhdGhDb21wb25lbnRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpmaW5kTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kUmFuZ2VCeUlkZW50aWZ5aW5n
U3RhcnRBbmRFbmRQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFJhbmdlQnlTZWFy
Y2hpbmdUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBIaWdobGlnaHRTdG9yYWdlQ29udHJvbGxlcjo6QXBwSGlnaGxpZ2h0U3RvcmFnZUNv
bnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0U3RvcmFnZUNvbnRyb2xs
ZXI6OmNyZWF0ZUFwcEhpZ2hsaWdodExpc3REYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcEhp
Z2hsaWdodFN0b3JhZ2VDb250cm9sbGVyOjpyZXN0b3JlQXBwSGlnaGxpZ2h0cyk6CisgICAgICAg
ICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0U3RvcmFnZUNvbnRyb2xsZXIuaDogQWRk
ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBTY3JpcHRUcmFuc2Zvcm0u
Y3BwOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU2NyaXB0VHJhbnNmb3Jt
Lmg6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6YXBwSGlnaGxpZ2h0U3RvcmFnZUNvbnRyb2xsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUhpZ2hsaWdodFBvc2l0aW9ucyk6CisgICAgICAg
ICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YXBwSGlnaGxp
Z2h0U3RvcmFnZUNvbnRyb2xsZXJJZkV4aXN0cyBjb25zdCk6CisKIDIwMjAtMTItMTAgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVUHJvY2Vzc10gQ3V0IGlu
IGhhbGYgYW1vdW50IG9mIElQQyBuZWVkZWQgdG8gZG8gV2ViQXVkaW8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodExpc3REYXRhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodExpc3REYXRhLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yMDJkODY1OTM3ZTkzODAwMWU1YWZkNmUyYmU3MDcwMTQ5YTFhMDU5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGln
aGxpZ2h0TGlzdERhdGEuY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXBwSGlnaGxpZ2h0TGlzdERhdGEuaCIKKworI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCisj
aW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUg
IlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNp
bmNsdWRlICJTaW1wbGVSYW5nZS5oIgorI2luY2x1ZGUgIlN0YXRpY1JhbmdlLmgiCisjaW5jbHVk
ZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRD
b2RlcnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdW5zaWduZWQgY29tcHV0
ZVBhdGhJbmRleChjb25zdCBOb2RlJiBub2RlKQoreworICAgIFN0cmluZyBub2RlTmFtZSA9IG5v
ZGUubm9kZU5hbWUoKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgZm9yIChhdXRvKiBw
cmV2aW91c1NpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGluZygpOyBwcmV2aW91c1NpYmxpbmc7
IHByZXZpb3VzU2libGluZyA9IHByZXZpb3VzU2libGluZy0+cHJldmlvdXNTaWJsaW5nKCkpIHsK
KyAgICAgICAgaWYgKHByZXZpb3VzU2libGluZy0+bm9kZU5hbWUoKSA9PSBub2RlTmFtZSkKKyAg
ICAgICAgICAgIGluZGV4Kys7CisgICAgfQorICAgIHJldHVybiBpbmRleDsKK30KKworc3RhdGlj
IEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGhDb21wb25lbnQgY3JlYXRlTm9kZVBhdGhD
b21wb25lbnQoY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICByZXR1cm4geworICAgICAgICBpczxF
bGVtZW50Pihub2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLmdldElkQXR0cmlidXRlKCku
c3RyaW5nKCkgOiBudWxsU3RyaW5nKCksCisgICAgICAgIG5vZGUubm9kZU5hbWUoKSwKKyAgICAg
ICAgaXM8Q2hhcmFjdGVyRGF0YT4obm9kZSkgPyBkb3duY2FzdDxDaGFyYWN0ZXJEYXRhPihub2Rl
KS5kYXRhKCkgOiBudWxsU3RyaW5nKCksCisgICAgICAgIGNvbXB1dGVQYXRoSW5kZXgobm9kZSkK
KyAgICB9OworfQorCitzdGF0aWMgQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjpOb2RlUGF0aCBtYWtl
Tm9kZVBhdGgoUmVmUHRyPE5vZGU+JiYgbm9kZSkKK3sKKyAgICBBcHBIaWdobGlnaHRSYW5nZURh
dGE6Ok5vZGVQYXRoIGNvbXBvbmVudHM7CisgICAgYXV0byBib2R5ID0gbm9kZS0+ZG9jdW1lbnQo
KS5ib2R5KCk7CisgICAgZm9yIChhdXRvIGFuY2VzdG9yID0gbm9kZTsgYW5jZXN0b3IgJiYgYW5j
ZXN0b3IgIT0gYm9keTsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpKQorICAgICAg
ICBjb21wb25lbnRzLmFwcGVuZChjcmVhdGVOb2RlUGF0aENvbXBvbmVudCgqYW5jZXN0b3IpKTsK
KyAgICBjb21wb25lbnRzLnJldmVyc2UoKTsKKyAgICByZXR1cm4geyBjb21wb25lbnRzIH07Cit9
CisKK3N0YXRpYyBBcHBIaWdobGlnaHRSYW5nZURhdGEgY3JlYXRlQXBwSGlnbGlnaHRSYW5nZURh
dGEoY29uc3QgU3RhdGljUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiB7CisgICAgICAgIHBs
YWluVGV4dChyYW5nZSksCisgICAgICAgIG1ha2VOb2RlUGF0aCgmcmFuZ2Uuc3RhcnRDb250YWlu
ZXIoKSksCisgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0KCksCisgICAgICAgIG1ha2VOb2RlUGF0
aCgmcmFuZ2UuZW5kQ29udGFpbmVyKCkpLAorICAgICAgICByYW5nZS5lbmRPZmZzZXQoKQorICAg
IH07Cit9CisKK0FwcEhpZ2hsaWdodExpc3REYXRhIEFwcEhpZ2hsaWdodExpc3REYXRhOjpjcmVh
dGUoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCit7CisgICAgYXV0byBkZWNvZGVyID0gYnVm
ZmVyLmRlY29kZXIoKTsKKyAgICBPcHRpb25hbDxBcHBIaWdobGlnaHRMaXN0RGF0YT4gZGF0YTsK
KyAgICBkZWNvZGVyID4+IGRhdGE7CisgICAgcmV0dXJuIGRhdGEgPyAqZGF0YSA6IEFwcEhpZ2hs
aWdodExpc3REYXRhIHt7IH19OworfQorCitSZWY8U2hhcmVkQnVmZmVyPiBBcHBIaWdobGlnaHRM
aXN0RGF0YTo6dG9EYXRhKCkgY29uc3QKK3sKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVy
IGVuY29kZXI7CisgICAgZW5jb2RlciA8PCAqdGhpczsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVy
OjpjcmVhdGUoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2hpZ2hsaWdodC9BcHBIaWdobGlnaHRMaXN0RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0TGlzdERhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNmMyMThlMmVl
ZjExNGNiNjI2NGVmNTZmMDI2OWU4NTAzNzgzNjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0TGlzdERhdGEuaApAQCAtMCww
ICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBBcHBIaWdobGlnaHRSYW5nZURh
dGEgeworcHVibGljOgorICAgIHN0cnVjdCBOb2RlUGF0aENvbXBvbmVudCB7CisgICAgICAgIFN0
cmluZyBpZGVudGlmaWVyOworICAgICAgICBTdHJpbmcgbm9kZU5hbWU7CisgICAgICAgIFN0cmlu
ZyB0ZXh0RGF0YTsKKyAgICAgICAgdW5zaWduZWQgcGF0aEluZGV4IHsgMCB9OworCisgICAgICAg
IE5vZGVQYXRoQ29tcG9uZW50KFN0cmluZyYmIGVsZW1lbnRJZGVudGlmaWVyLCBTdHJpbmcmJiBu
YW1lLCBTdHJpbmcmJiBkYXRhLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogaWRlbnRp
ZmllcihXVEZNb3ZlKGVsZW1lbnRJZGVudGlmaWVyKSkKKyAgICAgICAgICAgICwgbm9kZU5hbWUo
V1RGTW92ZShuYW1lKSkKKyAgICAgICAgICAgICwgdGV4dERhdGEoV1RGTW92ZShkYXRhKSkKKyAg
ICAgICAgICAgICwgcGF0aEluZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBOb2RlUGF0aENvbXBvbmVudChjb25zdCBTdHJpbmcmIGVsZW1lbnRJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGF0YSwgdW5zaWduZWQgaW5kZXgpCisg
ICAgICAgICAgICA6IGlkZW50aWZpZXIoZWxlbWVudElkZW50aWZpZXIpCisgICAgICAgICAgICAs
IG5vZGVOYW1lKG5hbWUpCisgICAgICAgICAgICAsIHRleHREYXRhKGRhdGEpCisgICAgICAgICAg
ICAsIHBhdGhJbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IE5vZGVQYXRoQ29tcG9uZW50JiBvdGhlcikgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIgPT0gb3RoZXIuaWRlbnRpZmllciAm
JiBub2RlTmFtZSA9PSBvdGhlci5ub2RlTmFtZSAmJiB0ZXh0RGF0YSA9PSBvdGhlci50ZXh0RGF0
YSAmJiBwYXRoSW5kZXggPT0gb3RoZXIucGF0aEluZGV4OworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IE5vZGVQYXRoQ29tcG9uZW50JiBvdGhlcikgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9
CisKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
Tm9kZVBhdGhDb21wb25lbnQ+IGRlY29kZShEZWNvZGVyJik7CisgICAgfTsKKworICAgIHVzaW5n
IE5vZGVQYXRoID0gVmVjdG9yPE5vZGVQYXRoQ29tcG9uZW50PjsKKworICAgIEFwcEhpZ2hsaWdo
dFJhbmdlRGF0YShjb25zdCBBcHBIaWdobGlnaHRSYW5nZURhdGEmKSA9IGRlZmF1bHQ7CisgICAg
QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhKCkgPSBkZWZhdWx0OworICAgIEFwcEhpZ2hsaWdodFJhbmdl
RGF0YShTdHJpbmcmJiB0ZXh0LCBOb2RlUGF0aCYmIHN0YXJ0Q29udGFpbmVyLCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgTm9kZVBhdGgmJiBlbmRDb250YWluZXIsIHVuc2lnbmVkIGVuZE9mZnNldCkK
KyAgICAgICAgOiBtX3RleHQoV1RGTW92ZSh0ZXh0KSkKKyAgICAgICAgLCBtX3N0YXJ0Q29udGFp
bmVyKFdURk1vdmUoc3RhcnRDb250YWluZXIpKQorICAgICAgICAsIG1fc3RhcnRPZmZzZXQoc3Rh
cnRPZmZzZXQpCisgICAgICAgICwgbV9lbmRDb250YWluZXIoV1RGTW92ZShlbmRDb250YWluZXIp
KQorICAgICAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKKyAgICB7CisgICAgfQorCisgICAg
QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgTm9kZVBhdGgm
IHN0YXJ0Q29udGFpbmVyLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgY29uc3QgTm9kZVBhdGgmIGVu
ZENvbnRhaW5lciwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAgICAgICA6IG1fdGV4dCh0ZXh0KQor
ICAgICAgICAsIG1fc3RhcnRDb250YWluZXIoc3RhcnRDb250YWluZXIpCisgICAgICAgICwgbV9z
dGFydE9mZnNldChzdGFydE9mZnNldCkKKyAgICAgICAgLCBtX2VuZENvbnRhaW5lcihlbmRDb250
YWluZXIpCisgICAgICAgICwgbV9lbmRPZmZzZXQoZW5kT2Zmc2V0KQorICAgIHsKKyAgICB9CisK
KyAgICBjb25zdCBTdHJpbmcmIHRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHQ7IH0KKyAgICBj
b25zdCBOb2RlUGF0aCYgc3RhcnRDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0Q29u
dGFpbmVyOyB9CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0
YXJ0T2Zmc2V0OyB9CisgICAgY29uc3QgTm9kZVBhdGgmIGVuZENvbnRhaW5lcigpIGNvbnN0IHsg
cmV0dXJuIG1fZW5kQ29udGFpbmVyOyB9CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9lbmRPZmZzZXQ7IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhPiBkZWNvZGUoRGVjb2RlciYpOwor
Citwcml2YXRlOgorICAgIFN0cmluZyBtX3RleHQ7CisgICAgTm9kZVBhdGggbV9zdGFydENvbnRh
aW5lcjsKKyAgICB1bnNpZ25lZCBtX3N0YXJ0T2Zmc2V0IHsgMCB9OworICAgIE5vZGVQYXRoIG1f
ZW5kQ29udGFpbmVyOworICAgIHVuc2lnbmVkIG1fZW5kT2Zmc2V0IHsgMCB9OworfTsKKworY2xh
c3MgQXBwSGlnaGxpZ2h0TGlzdERhdGEgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBBcHBIaWdobGlnaHRMaXN0RGF0YSBj
cmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJik7CisKKyAgICBBcHBIaWdobGlnaHRMaXN0RGF0YShj
b25zdCBBcHBIaWdobGlnaHRMaXN0RGF0YSYpID0gZGVmYXVsdDsKKyAgICBBcHBIaWdobGlnaHRM
aXN0RGF0YSgpID0gZGVmYXVsdDsKKyAgICBBcHBIaWdobGlnaHRMaXN0RGF0YShWZWN0b3I8QXBw
SGlnaGxpZ2h0UmFuZ2VEYXRhPiYmIGFubm90YXRpb25SYW5nZXMpCisgICAgICAgIDogbV9hbm5v
dGF0aW9uUmFuZ2VzKFdURk1vdmUoYW5ub3RhdGlvblJhbmdlcykpCisgICAgeworICAgIH0KKwor
ICAgIGNvbnN0IFZlY3RvcjxBcHBIaWdobGlnaHRSYW5nZURhdGE+JiByYW5nZXMoKSBjb25zdCB7
IHJldHVybiBtX2Fubm90YXRpb25SYW5nZXM7IH0KKyAgICB2b2lkIHNldFJhbmdlcyhWZWN0b3I8
QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhPiYmIHJhbmdlcykgeyBtX2Fubm90YXRpb25SYW5nZXMgPSBX
VEZNb3ZlKHJhbmdlcyk7IH0KKyAgICB2b2lkIGFkZFJhbmdlcyhWZWN0b3I8QXBwSGlnaGxpZ2h0
UmFuZ2VEYXRhPiYmIHJhbmdlcykgeyBtX2Fubm90YXRpb25SYW5nZXMuYXBwZW5kVmVjdG9yKFdU
Rk1vdmUocmFuZ2VzKSk7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxTaGFyZWRCdWZmZXI+
IHRvRGF0YSgpIGNvbnN0OworCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Fu
bm90YXRpb25SYW5nZXMuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV9hbm5vdGF0aW9uUmFuZ2VzLmlzRW1wdHkoKTsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxBcHBIaWdobGlnaHRMaXN0RGF0YT4gZGVjb2RlKERl
Y29kZXImKTsKKworcHJpdmF0ZToKKworICAgIFZlY3RvcjxBcHBIaWdobGlnaHRSYW5nZURhdGE+
IG1fYW5ub3RhdGlvblJhbmdlczsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhOjpOb2RlUGF0aENvbXBvbmVudDo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBpZGVudGlmaWVyOworICAgIGVuY29k
ZXIgPDwgbm9kZU5hbWU7CisgICAgZW5jb2RlciA8PCB0ZXh0RGF0YTsKKyAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihwYXRoSW5kZXgpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBPcHRpb25hbDxBcHBIaWdobGlnaHRSYW5nZURhdGE6Ok5vZGVQYXRoQ29tcG9uZW50
PiBBcHBIaWdobGlnaHRSYW5nZURhdGE6Ok5vZGVQYXRoQ29tcG9uZW50OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxTdHJpbmc+IGlkZW50aWZpZXI7CisgICAgZGVj
b2RlciA+PiBpZGVudGlmaWVyOworICAgIGlmICghaWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPFN0cmluZz4gbm9kZU5hbWU7CisgICAgZGVj
b2RlciA+PiBub2RlTmFtZTsKKyAgICBpZiAoIW5vZGVOYW1lKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8U3RyaW5nPiB0ZXh0RGF0YTsKKyAgICBkZWNvZGVy
ID4+IHRleHREYXRhOworICAgIGlmICghdGV4dERhdGEpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICBPcHRpb25hbDx1aW50NjRfdD4gcGF0aEluZGV4OworICAgIGRlY29kZXIg
Pj4gcGF0aEluZGV4OworICAgIGlmICghcGF0aEluZGV4KQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgcmV0dXJuIHt7IFdURk1vdmUoKmlkZW50aWZpZXIpLCBXVEZNb3ZlKCpu
b2RlTmFtZSksIFdURk1vdmUoKnRleHREYXRhKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCpwYXRo
SW5kZXgpIH19OworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIEFwcEhpZ2hsaWdo
dFJhbmdlRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rl
ciA8PCBtX3RleHQ7CisgICAgZW5jb2RlciA8PCBtX3N0YXJ0Q29udGFpbmVyOworICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fc3RhcnRPZmZzZXQpOworICAgIGVuY29kZXIg
PDwgbV9lbmRDb250YWluZXI7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
bV9lbmRPZmZzZXQpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBPcHRpb25hbDxBcHBI
aWdobGlnaHRSYW5nZURhdGE+IEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8U3RyaW5nPiB0ZXh0OworICAgIGRlY29kZXIgPj4g
dGV4dDsKKyAgICBpZiAoIXRleHQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICBPcHRpb25hbDxOb2RlUGF0aD4gc3RhcnRDb250YWluZXI7CisgICAgZGVjb2RlciA+PiBzdGFy
dENvbnRhaW5lcjsKKyAgICBpZiAoIXN0YXJ0Q29udGFpbmVyKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8dWludDY0X3Q+IHN0YXJ0T2Zmc2V0OworICAgIGRl
Y29kZXIgPj4gc3RhcnRPZmZzZXQ7CisgICAgaWYgKCFzdGFydE9mZnNldCkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPE5vZGVQYXRoPiBlbmRDb250YWluZXI7
CisgICAgZGVjb2RlciA+PiBlbmRDb250YWluZXI7CisgICAgaWYgKCFlbmRDb250YWluZXIpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDx1aW50NjRfdD4gZW5k
T2Zmc2V0OworICAgIGRlY29kZXIgPj4gZW5kT2Zmc2V0OworICAgIGlmICghZW5kT2Zmc2V0KQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisKKyAgICByZXR1cm4ge3sKKyAgICAgICAg
V1RGTW92ZSgqdGV4dCksCisgICAgICAgIFdURk1vdmUoKnN0YXJ0Q29udGFpbmVyKSwKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCpzdGFydE9mZnNldCksCisgICAgICAgIFdURk1vdmUo
KmVuZENvbnRhaW5lciksCisgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPigqZW5kT2Zmc2V0
KSwKKyAgICB9fTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBBcHBIaWdobGln
aHRMaXN0RGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rl
ciA8PCBtX2Fubm90YXRpb25SYW5nZXM7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+IE9w
dGlvbmFsPEFwcEhpZ2hsaWdodExpc3REYXRhPiBBcHBIaWdobGlnaHRMaXN0RGF0YTo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8VmVjdG9yPEFwcEhpZ2hsaWdodFJh
bmdlRGF0YT4+IGFubm90YXRpb25SYW5nZXM7CisgICAgZGVjb2RlciA+PiBhbm5vdGF0aW9uUmFu
Z2VzOworICAgIGlmICghYW5ub3RhdGlvblJhbmdlcykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIHJldHVybiB7eyBXVEZNb3ZlKCphbm5vdGF0aW9uUmFuZ2VzKSB9fTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0U3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRTdG9yYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOTUx
ZWRjMGEzODRiOGI2YjNiZGM5ZTM3ZDhmY2EwNDM5NzU5NjY1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0U3RvcmFnZS5jcHAK
QEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJBcHBIaWdobGlnaHRTdG9yYWdlLmgiCisKKyNpbmNsdWRlICJBcHBIaWdobGlnaHRM
aXN0RGF0YS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCisjaW5jbHVkZSAi
SGlnaGxpZ2h0UmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiUG9zaXRp
b24uaCIKKyNpbmNsdWRlICJSZW5kZXJlZERvY3VtZW50TWFya2VyLmgiCisjaW5jbHVkZSAiU2lt
cGxlUmFuZ2UuaCIKKyNpbmNsdWRlICJTdGF0aWNSYW5nZS5oIgorI2luY2x1ZGUgIlRleHRJdGVy
YXRvci5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFJlZlB0cjxOb2RlPiBm
aW5kTm9kZUJ5UGF0aEluZGV4KGNvbnN0IE5vZGUmIHBhcmVudCwgdW5zaWduZWQgcGF0aEluZGV4
LCBjb25zdCBTdHJpbmcmIG5vZGVOYW1lKQoreworICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4o
cGFyZW50KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBmb3IgKGF1dG8qIGNoaWxk
ID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4ocGFyZW50KS5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChub2RlTmFtZSAhPSBj
aGlsZC0+bm9kZU5hbWUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICgh
cGF0aEluZGV4LS0pCisgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgfQorICAgIHJldHVy
biBudWxscHRyOworfQorCitzdGF0aWMgc3RkOjpwYWlyPFJlZlB0cjxOb2RlPiwgc2l6ZV90PiBm
aW5kTm9kZVN0YXJ0aW5nQXRQYXRoQ29tcG9uZW50SW5kZXgoY29uc3QgQXBwSGlnaGxpZ2h0UmFu
Z2VEYXRhOjpOb2RlUGF0aCYgcGF0aCwgTm9kZSYgaW5pdGlhbE5vZGUsIHNpemVfdCBpbml0aWFs
SW5kZXhUb0ZvbGxvdykKK3sKKyAgICBpZiAoaW5pdGlhbEluZGV4VG9Gb2xsb3cgPj0gcGF0aC5z
aXplKCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIGluaXRpYWxJbmRleFRvRm9sbG93IH07
CisKKyAgICBhdXRvIGN1cnJlbnROb2RlID0gbWFrZVJlZlB0cihpbml0aWFsTm9kZSk7CisgICAg
c2l6ZV90IGN1cnJlbnRQYXRoSW5kZXggPSBpbml0aWFsSW5kZXhUb0ZvbGxvdzsKKyAgICBmb3Ig
KDsgY3VycmVudFBhdGhJbmRleCA8IHBhdGguc2l6ZSgpOyArK2N1cnJlbnRQYXRoSW5kZXgpIHsK
KyAgICAgICAgYXV0byYgY29tcG9uZW50ID0gcGF0aFtjdXJyZW50UGF0aEluZGV4XTsKKyAgICAg
ICAgYXV0byBuZXh0Tm9kZSA9IGZpbmROb2RlQnlQYXRoSW5kZXgoKmN1cnJlbnROb2RlLCBjb21w
b25lbnQucGF0aEluZGV4LCBjb21wb25lbnQubm9kZU5hbWUpOworICAgICAgICBpZiAoIW5leHRO
b2RlKQorICAgICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgY3VycmVudFBhdGhJbmRleCB9Owor
CisgICAgICAgIGlmIChpczxDaGFyYWN0ZXJEYXRhPigqbmV4dE5vZGUpICYmIGRvd25jYXN0PENo
YXJhY3RlckRhdGE+KCpuZXh0Tm9kZSkuZGF0YSgpICE9IGNvbXBvbmVudC50ZXh0RGF0YSkKKyAg
ICAgICAgICAgIHJldHVybiB7IG51bGxwdHIsIGN1cnJlbnRQYXRoSW5kZXggfTsKKworICAgICAg
ICBjdXJyZW50Tm9kZSA9IFdURk1vdmUobmV4dE5vZGUpOworICAgIH0KKyAgICByZXR1cm4geyBj
dXJyZW50Tm9kZSwgY3VycmVudFBhdGhJbmRleCB9OworfQorCitzdGF0aWMgUmVmUHRyPE5vZGU+
IGZpbmROb2RlKGNvbnN0IEFwcEhpZ2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGgmIHBhdGgsIERv
Y3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkgfHwgIWRvY3VtZW50
LmJvZHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIFtmb3VuZE5vZGUs
IG5leHRJbmRleF0gPSBmaW5kTm9kZVN0YXJ0aW5nQXRQYXRoQ29tcG9uZW50SW5kZXgocGF0aCwg
KmRvY3VtZW50LmJvZHkoKSwgMCk7CisgICAgaWYgKGZvdW5kTm9kZSkKKyAgICAgICAgcmV0dXJu
IGZvdW5kTm9kZTsKKworICAgIHdoaWxlIChuZXh0SW5kZXggPCBwYXRoLnNpemUoKSkgeworICAg
ICAgICBhdXRvJiBjb21wb25lbnQgPSBwYXRoW25leHRJbmRleCsrXTsKKyAgICAgICAgaWYgKGNv
bXBvbmVudC5pZGVudGlmaWVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIGF1dG8gZWxlbWVudFdpdGhJZGVudGlmaWVyID0gbWFrZVJlZlB0cihkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChjb21wb25lbnQuaWRlbnRpZmllcikpOworICAgICAgICBpZiAoIWVsZW1l
bnRXaXRoSWRlbnRpZmllciB8fCBlbGVtZW50V2l0aElkZW50aWZpZXItPm5vZGVOYW1lKCkgIT0g
Y29tcG9uZW50Lm5vZGVOYW1lKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc3Rk
Ojp0aWUoZm91bmROb2RlLCBuZXh0SW5kZXgpID0gZmluZE5vZGVTdGFydGluZ0F0UGF0aENvbXBv
bmVudEluZGV4KHBhdGgsICplbGVtZW50V2l0aElkZW50aWZpZXIsIG5leHRJbmRleCk7CisgICAg
ICAgIGlmIChmb3VuZE5vZGUpCisgICAgICAgICAgICByZXR1cm4gZm91bmROb2RlOworICAgIH0K
KworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IGZpbmRSYW5nZUJ5SWRlbnRpZnlpbmdTdGFydEFuZEVuZFBvc2l0aW9ucyhjb25zdCBBcHBIaWdo
bGlnaHRSYW5nZURhdGEmIHJhbmdlLCBEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgYXV0byBz
dGFydENvbnRhaW5lciA9IGZpbmROb2RlKHJhbmdlLnN0YXJ0Q29udGFpbmVyKCksIGRvY3VtZW50
KTsKKyAgICBpZiAoIXN0YXJ0Q29udGFpbmVyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgYXV0byBlbmRDb250YWluZXIgPSBmaW5kTm9kZShyYW5nZS5lbmRDb250YWluZXIo
KSwgZG9jdW1lbnQpOworICAgIGlmICghZW5kQ29udGFpbmVyKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgYXV0byBzdGFydCA9IG1ha2VDb250YWluZXJPZmZzZXRQb3NpdGlv
bihzdGFydENvbnRhaW5lci5nZXQoKSwgcmFuZ2Uuc3RhcnRPZmZzZXQoKSk7CisgICAgYXV0byBl
bmQgPSBtYWtlQ29udGFpbmVyT2Zmc2V0UG9zaXRpb24oZW5kQ29udGFpbmVyLmdldCgpLCByYW5n
ZS5lbmRPZmZzZXQoKSk7CisgICAgaWYgKHN0YXJ0LmlzT3JwaGFuKCkgfHwgZW5kLmlzT3JwaGFu
KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gbWFrZVNpbXBs
ZVJhbmdlKHN0YXJ0LCBlbmQpOworfQorCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGZp
bmRSYW5nZUJ5U2VhcmNoaW5nVGV4dChjb25zdCBBcHBIaWdobGlnaHRSYW5nZURhdGEmIHJhbmdl
LCBEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgSGFzaFNldDxTdHJpbmc+IGlkZW50aWZpZXJz
SW5TdGFydFBhdGg7CisgICAgZm9yIChhdXRvJiBjb21wb25lbnQgOiByYW5nZS5zdGFydENvbnRh
aW5lcigpKSB7CisgICAgICAgIGlmICghY29tcG9uZW50LmlkZW50aWZpZXIuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgaWRlbnRpZmllcnNJblN0YXJ0UGF0aC5hZGQoY29tcG9uZW50LmlkZW50aWZp
ZXIpOworICAgIH0KKworICAgIFJlZlB0cjxFbGVtZW50PiBmb3VuZEVsZW1lbnQgPSBkb2N1bWVu
dC5ib2R5KCk7CisgICAgZm9yIChhdXRvIGl0ZXJhdG9yID0gcmFuZ2UuZW5kQ29udGFpbmVyKCku
cmJlZ2luKCksIGVuZCA9IHJhbmdlLmVuZENvbnRhaW5lcigpLnJlbmQoKTsgaXRlcmF0b3IgIT0g
ZW5kOyArK2l0ZXJhdG9yKSB7CisgICAgICAgIGF1dG8gZWxlbWVudElkZW50aWZpZXIgPSBpdGVy
YXRvci0+aWRlbnRpZmllcjsKKyAgICAgICAgaWYgKGVsZW1lbnRJZGVudGlmaWVyLmlzRW1wdHko
KSB8fCAhaWRlbnRpZmllcnNJblN0YXJ0UGF0aC5jb250YWlucyhlbGVtZW50SWRlbnRpZmllcikp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmb3VuZEVsZW1lbnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWRlbnRpZmllcik7CisgICAgICAgIGlmIChmb3VuZEVs
ZW1lbnQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIWZvdW5kRWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gZm91bmRFbGVtZW50
UmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmZvdW5kRWxlbWVudCk7Cisg
ICAgYXV0byBmb3VuZFRleHQgPSBwbGFpblRleHQoZm91bmRFbGVtZW50UmFuZ2UpOworICAgIGlm
IChhdXRvIGluZGV4ID0gZm91bmRUZXh0LmZpbmQocmFuZ2UudGV4dCgpKTsgaW5kZXggIT0gbm90
Rm91bmQgJiYgaW5kZXggPT0gZm91bmRUZXh0LnJldmVyc2VGaW5kKHJhbmdlLnRleHQoKSkpCisg
ICAgICAgIHJldHVybiByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoZm91bmRFbGVtZW50UmFuZ2UsIHsg
aW5kZXgsIHJhbmdlLnRleHQoKS5sZW5ndGgoKSB9KTsKKworICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZmluZFJhbmdlKGNvbnN0IEFw
cEhpZ2hsaWdodFJhbmdlRGF0YSYgcmFuZ2UsIERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBp
ZiAoYXV0byBmb3VuZFJhbmdlID0gZmluZFJhbmdlQnlJZGVudGlmeWluZ1N0YXJ0QW5kRW5kUG9z
aXRpb25zKHJhbmdlLCBkb2N1bWVudCkpCisgICAgICAgIHJldHVybiBmb3VuZFJhbmdlOworCisg
ICAgcmV0dXJuIGZpbmRSYW5nZUJ5U2VhcmNoaW5nVGV4dChyYW5nZSwgZG9jdW1lbnQpOworfQor
CitBcHBIaWdobGlnaHRTdG9yYWdlOjpBcHBIaWdobGlnaHRTdG9yYWdlKERvY3VtZW50JiBkb2N1
bWVudCkKKyAgICA6IG1fZG9jdW1lbnQobWFrZVdlYWtQdHIoZG9jdW1lbnQpKQoreworfQorCitB
cHBIaWdobGlnaHRMaXN0RGF0YSBBcHBIaWdobGlnaHRTdG9yYWdlOjpjcmVhdGVBcHBIaWdobGln
aHRMaXN0RGF0YSgpCit7CisgICAgVmVjdG9yPEFwcEhpZ2hsaWdodFJhbmdlRGF0YT4gZGF0YTsK
KworICAgIGlmICghbV9kb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShkYXRhKSB9
OworCisgICAgaWYgKGF1dG8gYXBwSGlnaGxpZ2h0UmVnaXN0ZXIgPSBtX2RvY3VtZW50LT5hcHBI
aWdobGlnaHRSZWdpc3RlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBoaWdobGln
aHQgOiBhcHBIaWdobGlnaHRSZWdpc3Rlci0+bWFwKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0
byYgcmFuZ2VEYXRhIDogaGlnaGxpZ2h0LnZhbHVlLT5yYW5nZXNEYXRhKCkpCisgICAgICAgICAg
ICAgICAgZGF0YS5hcHBlbmQoY3JlYXRlQXBwSGlnbGlnaHRSYW5nZURhdGEocmFuZ2VEYXRhLT5y
YW5nZSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsgV1RGTW92ZShkYXRhKSB9
OworfQorCitWZWN0b3I8QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhPiBBcHBIaWdobGlnaHRTdG9yYWdl
OjpyZXN0b3JlQXBwSGlnaGxpZ2h0cyhSZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKK3sKKyAg
ICBhdXRvIGFwcEhpZ2hsaWdodExpc3REYXRhID0gQXBwSGlnaGxpZ2h0TGlzdERhdGE6OmNyZWF0
ZShidWZmZXIpOworICAgIFZlY3RvcjxBcHBIaWdobGlnaHRSYW5nZURhdGE+IHVucmVzdG9yZWRS
YW5nZXM7CisgICAgVmVjdG9yPEFwcEhpZ2hsaWdodFJhbmdlRGF0YT4gcmVzdG9yZWRSYW5nZXM7
CisKKyAgICBpZiAoIW1fZG9jdW1lbnQpCisgICAgICAgIHJldHVybiB1bnJlc3RvcmVkUmFuZ2Vz
OworCisgICAgYXV0byBzdHJvbmdEb2N1bWVudCA9IG1fZG9jdW1lbnQuZ2V0KCk7CisKKyAgICBm
b3IgKGF1dG8mIGFwcEhpZ2hsaWdodExpc3REYXRhIDogYXBwSGlnaGxpZ2h0TGlzdERhdGEucmFu
Z2VzKCkpIHsKKyAgICAgICAgYXV0byByYW5nZSA9IGZpbmRSYW5nZShhcHBIaWdobGlnaHRMaXN0
RGF0YSwgKnN0cm9uZ0RvY3VtZW50KTsKKyAgICAgICAgaWYgKCFyYW5nZSkgeworICAgICAgICAg
ICAgdW5yZXN0b3JlZFJhbmdlcy5hcHBlbmQoYXBwSGlnaGxpZ2h0TGlzdERhdGEpOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICByZXN0b3JlZFJhbmdlcy5hcHBl
bmQoYXBwSGlnaGxpZ2h0TGlzdERhdGEpOworICAgICAgICBzdHJvbmdEb2N1bWVudC0+YXBwSGln
aGxpZ2h0UmVnaXN0ZXIoKS5hZGRBcHBIaWdobGlnaHQoU3RhdGljUmFuZ2U6OmNyZWF0ZSgqcmFu
Z2UpKTsKKyAgICB9CisgICAgcmV0dXJuIHVucmVzdG9yZWRSYW5nZXM7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxp
Z2h0L0FwcEhpZ2hsaWdodFN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxp
Z2h0L0FwcEhpZ2hsaWdodFN0b3JhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOWFjODA4N2Y0MWQ2MjMyZDY2
MGVjMDUyZGIxYmQ2NGZkYjZjZDJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0U3RvcmFnZS5oCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Cisj
aW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBBcHBIaWdobGlnaHRMaXN0RGF0YTsKKworY2xhc3MgQXBwSGlnaGxpZ2h0U3RvcmFnZSA6IFJl
ZkNvdW50ZWQ8QXBwSGlnaGxpZ2h0U3RvcmFnZT4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIEFwcEhpZ2hsaWdodFN0b3JhZ2UoRG9jdW1lbnQmKTsKKworICAg
IEFwcEhpZ2hsaWdodExpc3REYXRhIGNyZWF0ZUFwcEhpZ2hsaWdodExpc3REYXRhKCk7CisgICAg
VmVjdG9yPEFwcEhpZ2hsaWdodFJhbmdlRGF0YT4gcmVzdG9yZUFwcEhpZ2hsaWdodHMoUmVmPFNo
YXJlZEJ1ZmZlcj4mJik7CisKK3ByaXZhdGU6CisgICAgV2Vha1B0cjxEb2N1bWVudD4gbV9kb2N1
bWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU2NyaXB0VHJhbnNmb3JtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU2NyaXB0VHJhbnNmb3JtLmNw
cAppbmRleCA2NzczNjA3NWRlZDc3NmIyZjc2OWNkNWU5ODRiNTdmMzU5ZDIxNWE2Li5mMjY5ZDFl
YmQ3N2VkOWE5NmZlNTQ5MzRmMTMzODAyNzVhYjlhYWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFNjcmlwdFRyYW5zZm9ybS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBTY3JpcHRUcmFuc2Zvcm0u
Y3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiUlRDUnRwVHJhbnNmb3JtQmFja2VuZC5o
IgogI2luY2x1ZGUgIldvcmtlci5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+
CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFNjcmlwdFRy
YW5zZm9ybS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBTY3Jp
cHRUcmFuc2Zvcm0uaAppbmRleCA0NGRjZWI1ZjQwZmY1N2ZkNWZhM2NjMDc5M2E2MTA4ZTg1NTZl
Njk2Li5lYzU0NjhhYmVhMGIwMTc5MjMwMGQxNTM1OTQ0NmQ1ZTM5YTJhZDhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFNjcmlwdFRyYW5zZm9y
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU2NyaXB0
VHJhbnNmb3JtLmgKQEAgLTI3LDcgKzI3LDkgQEAKIAogI2lmIEVOQUJMRShXRUJfUlRDKQogCisj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNp
bmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYTQ5ZjM2ODJh
MmYyZGU0OTA1ODkzODJhZTMxNzczNjgxNmJlMjM2MS4uYWYyZGJlNjA5ZDg1OGY0Mjc0MGVkZmQz
OGEyY2VkNTc0MmYzOWI5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTY0LDYgKzY0LDggQEAgTW9kdWxl
cy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9j
YXRpb25Db250cm9sbGVyLmNwcAogTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvb3Jk
aW5hdGVzLmNwcAogTW9kdWxlcy9nZW9sb2NhdGlvbi9OYXZpZ2F0b3JHZW9sb2NhdGlvbi5jcHAK
K01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodExpc3REYXRhLmNwcAorTW9kdWxlcy9oaWdo
bGlnaHQvQXBwSGlnaGxpZ2h0U3RvcmFnZS5jcHAKIE1vZHVsZXMvaGlnaGxpZ2h0L0hpZ2hsaWdo
dFJlZ2lzdGVyLmNwcAogTW9kdWxlcy9oaWdobGlnaHQvSGlnaGxpZ2h0LmNwcAogTW9kdWxlcy9p
bmRleGVkZGIvRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDUyMmFjMjMwM2RkYmIw
MDQzNzkyNDQ4MmIwZDU2ZDcwN2RlMTMzOGUuLjcwMzc5ZTE3ZDliZDIzOGI2ZTExZDQ0ZGUzOTJk
YzljMTk0OTRiZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTEyMTEsNiArMTIxMSw3IEBACiAJCTQzRURENjdGMUI0ODVEQkYw
MDY0MEU3NSAvKiBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNFREQ2N0QxQjQ4NURCRjAwNjQwRTc1IC8qIENv
bWJpbmVkRmlsdGVyc0FscGhhYmV0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNDQwRURCRDEyNTVFMTE2QzAwMzAwQkE3IC8qIExvY2FsaXphYmxl
LnN0cmluZ3MgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ0NkVFNEU4MjU1RTBEOTIwMDQ1NDQ2MyAvKiBMb2NhbGl6YWJsZS5zdHJpbmdzICovOyB9Owog
CQk0NDE1MjkyRTBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQxNTI5MkMwRTFB
RThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0NDI1MDcwOTI1ODI5QTI3MDBDMDkz
NjggLyogQXBwSGlnaGxpZ2h0U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDQyNTA3MDcyNTgyOUExNDAwQzA5MzY4IC8qIEFwcEhpZ2hsaWdo
dFN0b3JhZ2UuaCAqLzsgfTsKIAkJNDQzMEQwMEIyNTc1QTgzRTAwNDZENDAxIC8qIEhpZ2hsaWdo
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRFODhF
NTEyMzZBNUM4RDAwOUI0ODQ3IC8qIEhpZ2hsaWdodC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ0MzBEMDBEMjU3NUE4QTUwMDQ2RDQwMSAvKiBI
aWdobGlnaHRSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDRFODhFNTAyMzZBNTZBQzAwOUI0ODQ3IC8qIEhpZ2hsaWdodFJlZ2lzdGVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDQ1Nzc1
RTUyMDQ3MkY3MzAwOERDRTVEIC8qIExvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0NTc3NUU0MjA0NzJG
NzMwMDhEQ0U1RCAvKiBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEyMjYsNiArMTIyNyw3IEBA
CiAJCTQ0QTIwREI5MEY4NDE2NkMwMEIzRTFGRSAvKiBXZWJDb3JlVVJMUmVzcG9uc2VJT1MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QTIwREI4MEY4
NDE2NkMwMEIzRTFGRSAvKiBXZWJDb3JlVVJMUmVzcG9uc2VJT1MuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NEEyOEFBQzEyREZCOEFDMDBBRTky
M0IgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QTI4QUFCMTJERkI4QUMwMEFFOTIzQiAvKiBNYXRoTUxFbGVt
ZW50RmFjdG9yeS5oICovOyB9OwogCQk0NEEyOEFBRjEyREZCOEJGMDBBRTkyM0IgLyogTWF0aE1M
TmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0
QTI4QUFFMTJERkI4QkYwMEFFOTIzQiAvKiBNYXRoTUxOYW1lcy5oICovOyB9OworCQk0NEFFMDQ1
QzI1NzlDRkZCMDBDNDJFNjUgLyogQXBwSGlnaGxpZ2h0TGlzdERhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QUUwNDVBMjU3OUNGRkIwMEM0MkU2
NSAvKiBBcHBIaWdobGlnaHRMaXN0RGF0YS5oICovOyB9OwogCQk0NEM5OTE4NjBGM0QxRUJFMDA1
ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Qzk5MTg1MEYzRDFFQkUwMDU4NjY3MCAvKiBTY3JvbGxiYXJU
aGVtZUlPUy5oICovOyB9OwogCQk0NEM5OTE5RjBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Qzk5MTlE
MEYzRDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlPUy5oICovOyB9OwogCQk0NEUzNDlGOTI0NkY0RTE5
MDA2ODQ3OUMgLyogTGliV2ViUlRDRW51bVRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRFMzQ5RjcyNDZGNERDNzAwNjg0NzlDIC8qIExpYldl
YlJUQ0VudW1UcmFpdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtODA2OCw2ICs4MDcwLDggQEAKIAkJNDNFREQ2N0QxQjQ4NURCRjAwNjQwRTc1
IC8qIENvbWJpbmVkRmlsdGVyc0FscGhhYmV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvbWJpbmVkRmlsdGVyc0FscGhhYmV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ0MTUyOTJDMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5MkQwRTFBRThBMDAwQzRB
MkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQ0MjUwNzA2MjU4MjlBMTQwMEMwOTM2OCAvKiBBcHBIaWdobGlnaHRT
dG9yYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFwcEhpZ2hsaWdodFN0b3JhZ2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NDI1MDcwNzI1ODI5QTE0MDBDMDkzNjggLyog
QXBwSGlnaGxpZ2h0U3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBIaWdobGlnaHRTdG9yYWdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0Mjk1NkNBMjE4QTZEMzAwMDgwREI1
NCAvKiBEaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGlj
dGlvbmFyeUxvb2t1cExlZ2FjeS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQz
N0M0QTcyNEUyQUU1RjAwMDk1MTI4IC8qIExhenlMb2FkRnJhbWVPYnNlcnZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMYXp5TG9hZEZyYW1lT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDQzN0M0QTkyNEUyQUU1RjAwMDk1MTI4IC8qIExhenlMb2FkRnJhbWVPYnNlcnZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXp5TG9hZEZyYW1lT2JzZXJ2ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtODA5Miw2ICs4MDk2LDggQEAKIAkJNDRBMjBEQjgwRjg0
MTY2QzAwQjNFMUZFIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlPUy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVVJMUmVzcG9uc2VJT1MuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDRBMjhBQUIxMkRGQjhBQzAwQUU5MjNCIC8qIE1hdGhNTEVsZW1lbnRG
YWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1hdGhNTEVsZW1lbnRG
YWN0b3J5Lmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL01hdGhNTEVsZW1lbnRGYWN0
b3J5Lmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTQ0QTI4QUFFMTJE
RkI4QkYwMEFFOTIzQiAvKiBNYXRoTUxOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBNYXRoTUxOYW1lcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9NYXRo
TUxOYW1lcy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQk0NEFFMDQ1
ODI1NzlDRkZCMDBDNDJFNjUgLyogQXBwSGlnaGxpZ2h0TGlzdERhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXBwSGlnaGxpZ2h0TGlzdERhdGEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NEFFMDQ1QTI1NzlDRkZCMDBDNDJFNjUgLyogQXBw
SGlnaGxpZ2h0TGlzdERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBw
SGlnaGxpZ2h0TGlzdERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRCMzhC
RjQyNTM2OTAxQTAwQTQ0NThEIC8qIFNlbGVjdGlvblJhbmdlRGF0YS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTZWxlY3Rpb25SYW5nZURhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDRCMzhCRjkyNTM2OUE4ODAwQTQ0NThEIC8qIFNlbGVjdGlvblJhbmdl
RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxlY3Rpb25S
YW5nZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEJEMkIzNjI1Mjc3
OTc4MDA1NUQ5NUEgLyogR2xvYmFsRXZlbnRIYW5kbGVycytTZWxlY3Rpb24uaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9ICJH
bG9iYWxFdmVudEhhbmRsZXJzK1NlbGVjdGlvbi5pZGwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTk3NDQsNiArMTk3NTAsMTAgQEAKIAkJNDRFODhFNDcyMzY4REYwRjAwOUI0ODQ3
IC8qIGhpZ2hsaWdodCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJNDRBRTA0NTgyNTc5Q0ZGQjAwQzQyRTY1IC8qIEFwcEhpZ2hsaWdodExpc3REYXRhLmNw
cCAqLywKKwkJCQk0NEFFMDQ1QTI1NzlDRkZCMDBDNDJFNjUgLyogQXBwSGlnaGxpZ2h0TGlzdERh
dGEuaCAqLywKKwkJCQk0NDI1MDcwNjI1ODI5QTE0MDBDMDkzNjggLyogQXBwSGlnaGxpZ2h0U3Rv
cmFnZS5jcHAgKi8sCisJCQkJNDQyNTA3MDcyNTgyOUExNDAwQzA5MzY4IC8qIEFwcEhpZ2hsaWdo
dFN0b3JhZ2UuaCAqLywKIAkJCQk0NEU4OEU1NDIzNkE2NkExMDA5QjQ4NDcgLyogSGlnaGxpZ2h0
LmNwcCAqLywKIAkJCQk0NEU4OEU1MTIzNkE1QzhEMDA5QjQ4NDcgLyogSGlnaGxpZ2h0LmggKi8s
CiAJCQkJNDRFODhFNEQyMzY5MTI4QjAwOUI0ODQ3IC8qIEhpZ2hsaWdodC5pZGwgKi8sCkBAIC0z
MTAxNCw2ICszMTAyNCw4IEBACiAJCQkJNTcxNTJCNUEyMUNCM0U4ODAwMEMzN0NBIC8qIEFwZHVD
b21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzE1MkI1QzIxQ0MxOTAyMDAwQzM3Q0EgLyog
QXBkdVJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURENzA5OUU2NDkyMDA1NkU1
ODEgLyogQXBwZW5kTm9kZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ0QUUwNDVDMjU3
OUNGRkIwMEM0MkU2NSAvKiBBcHBIaWdobGlnaHRMaXN0RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNDQyNTA3MDkyNTgyOUEyNzAwQzA5MzY4IC8qIEFwcEhpZ2hsaWdodFN0b3JhZ2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExMTNFMDJFMjMzMUExMzQwMDlDMzNBMCAvKiBBcHBsZVBheUNhbmNl
bEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMURGNUE5NDFGN0VDNDMyMDA1OEE0NzcgLyog
QXBwbGVQYXlDb250YWN0RmllbGQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMkM1OUVFMjAzNUZD
OUIwMDEyMjM2QiAvKiBBcHBsZVBheUVycm9yLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCmluZGV4IGRiODdmYTEzNDdkNDdlYTMyNWM5MWE5ZTg3NTQ2YjM4MmQ1ZTk2NTku
LmMwY2IyNjg0YzE0ZDg1Y2UxZTIyYWY5ODkxODQwNWRmYzdlOGU0NGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcApAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAKICNp
bmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiQXBwSGlnaGxpZ2h0TGlzdERhdGEu
aCIKKyNpbmNsdWRlICJBcHBIaWdobGlnaHRTdG9yYWdlLmgiCiAjaW5jbHVkZSAiQXR0ci5oIgog
I2luY2x1ZGUgIkJlZm9yZVVubG9hZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgi
CkBAIC0yNzg2LDYgKzI3ODgsMTMgQEAgSGlnaGxpZ2h0UmVnaXN0ZXImIERvY3VtZW50OjphcHBI
aWdobGlnaHRSZWdpc3RlcigpCiAgICAgcmV0dXJuICptX2FwcEhpZ2hsaWdodFJlZ2lzdGVyOwog
fQogCitBcHBIaWdobGlnaHRTdG9yYWdlJiBEb2N1bWVudDo6YXBwSGlnaGxpZ2h0U3RvcmFnZSgp
Cit7CisgICAgaWYgKCFtX2FwcEhpZ2hsaWdodFN0b3JhZ2UpCisgICAgICAgIG1fYXBwSGlnaGxp
Z2h0U3RvcmFnZSA9IG1ha2VVbmlxdWU8QXBwSGlnaGxpZ2h0U3RvcmFnZT4oKnRoaXMpOworICAg
IHJldHVybiAqbV9hcHBIaWdobGlnaHRTdG9yYWdlOworfQorCiB2b2lkIERvY3VtZW50Ojpjb2xs
ZWN0UmFuZ2VEYXRhRnJvbVJlZ2lzdGVyKFZlY3RvcjxXZWFrUHRyPEhpZ2hsaWdodFJhbmdlRGF0
YT4+JiByYW5nZXNEYXRhLCBjb25zdCBIaWdobGlnaHRSZWdpc3RlciYgaGlnaGxpZ2h0UmVnaXN0
ZXIpCiB7CiAgICAgZm9yIChhdXRvJiBoaWdobGlnaHQgOiBoaWdobGlnaHRSZWdpc3Rlci5tYXAo
KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCBlZTAzZjVmNGJmZmE5YzM2ZWMyODRiMzk5MDk0
ZTNjNWU4ZTE5ODhiLi41N2U2ZGE3N2UwYWJjYTcwNTEwZDcwYTVlMWNlMTc1OTM4NjlmYzZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaApAQCAtOTQsNiArOTQsNyBAQCBjbGFzcyBJbnB1dEN1cnNvcjsK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQVhPYmplY3RDYWNoZTsKK2NsYXNzIEFwcEhp
Z2hsaWdodFN0b3JhZ2U7CiBjbGFzcyBBdHRyOwogY2xhc3MgQ0RBVEFTZWN0aW9uOwogY2xhc3Mg
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTsKQEAgLTE1ODAsNiArMTU4MSw5IEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCBIaWdobGlnaHRSZWdpc3RlciYgYXBwSGlnaGxpZ2h0UmVnaXN0ZXIo
KTsKICAgICB2b2lkIHVwZGF0ZUhpZ2hsaWdodFBvc2l0aW9ucygpOwogCisgICAgQXBwSGlnaGxp
Z2h0U3RvcmFnZSYgYXBwSGlnaGxpZ2h0U3RvcmFnZSgpOworICAgIEFwcEhpZ2hsaWdodFN0b3Jh
Z2UqIGFwcEhpZ2hsaWdodFN0b3JhZ2VJZkV4aXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fYXBwSGln
aGxpZ2h0U3RvcmFnZS5nZXQoKTsgfTsKKwogICAgIGJvb2wgYWxsb3dzQ29udGVudEphdmFTY3Jp
cHQoKSBjb25zdDsKIAogICAgIExhenlMb2FkSW1hZ2VPYnNlcnZlciYgbGF6eUxvYWRJbWFnZU9i
c2VydmVyKCk7CkBAIC0xOTM5LDYgKzE5NDMsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxIaWdo
bGlnaHRSZWdpc3Rlcj4gbV9oaWdobGlnaHRSZWdpc3RlcjsKICAgICBSZWZQdHI8SGlnaGxpZ2h0
UmVnaXN0ZXI+IG1fYXBwSGlnaGxpZ2h0UmVnaXN0ZXI7CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QXBwSGlnaGxpZ2h0U3RvcmFnZT4gbV9hcHBIaWdobGlnaHRTdG9yYWdlOworCiAgICAgVGltZXIg
bV92aXN1YWxVcGRhdGVzU3VwcHJlc3Npb25UaW1lcjsKIAogICAgIHZvaWQgY2xlYXJTaGFyZWRP
YmplY3RQb29sKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>