<?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>120248</bug_id>
          
          <creation_ts>2013-08-24 09:33:46 -0700</creation_ts>
          <short_desc>Element child and descendant iterators</short_desc>
          <delta_ts>2013-08-25 14:30:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>darin</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>philn</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>920593</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-24 09:33:46 -0700</bug_when>
    <thetext>Better approach to iterating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920628</commentid>
    <comment_count>1</comment_count>
      <attachid>209551</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-24 12:39:52 -0700</bug_when>
    <thetext>Created attachment 209551
maybe something along these lines</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920629</commentid>
    <comment_count>2</comment_count>
      <attachid>209551</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-08-24 12:50:13 -0700</bug_when>
    <thetext>Comment on attachment 209551
maybe something along these lines

I think this would be absolutely magical with C++11 range-based for loops.

I also think get() should return an Element&amp; and we can have something like getPtr() for Element*. (This to encourage ourselves to use references.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920650</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-24 14:46:17 -0700</bug_when>
    <thetext>Will look nice in C++11 for loops.

When we use element pointers, it’s well defined what happens if the document changes while we are iterating. For iterators, we’d want to define what happens in that case. What our hash tables do with iterators is that in debug versions they invalidate iterators when changes are made to the underlying data structure. Maybe we could do some variation on that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920651</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-24 14:46:55 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I also think get() should return an Element&amp; and we can have something like getPtr() for Element*. (This to encourage ourselves to use references.)

C++ iterators normally use *iterator, not iterator.get().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920652</commentid>
    <comment_count>5</comment_count>
      <attachid>209551</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-08-24 14:48:53 -0700</bug_when>
    <thetext>Comment on attachment 209551
maybe something along these lines

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

&gt; Source/WebCore/dom/ElementTraversal.h:107
&gt; +    bool operator!=(const ElementDescendantIterator&amp; other) const { return m_current != other.m_current; }

This method could assert that both iterators have the same root.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920716</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-24 23:43:49 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Will look nice in C++11 for loops.
&gt; 
&gt; When we use element pointers, it’s well defined what happens if the document changes while we are iterating. For iterators, we’d want to define what happens in that case. What our hash tables do with iterators is that in debug versions they invalidate iterators when changes are made to the underlying data structure. Maybe we could do some variation on that.

Yeah. I think we should assert that there are no tree mutations during iteration. Not just in the current subtree, in the entire tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920718</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-24 23:49:25 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Yeah. I think we should assert that there are no tree mutations during iteration. Not just in the current subtree, in the entire tree.

Should probably go further and also assert that no DOM events were dispatched. An event handler could have mutated the tree; just because it didn’t actually happen does not mean the code is OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920805</commentid>
    <comment_count>8</comment_count>
      <attachid>209595</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-25 11:48:09 -0700</bug_when>
    <thetext>Created attachment 209595
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920806</commentid>
    <comment_count>9</comment_count>
      <attachid>209596</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-25 11:51:54 -0700</bug_when>
    <thetext>Created attachment 209596
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920807</commentid>
    <comment_count>10</comment_count>
      <attachid>209596</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-25 11:59:38 -0700</bug_when>
    <thetext>Comment on attachment 209596
another

Attachment 209596 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1564277</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920808</commentid>
    <comment_count>11</comment_count>
      <attachid>209596</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-25 12:01:53 -0700</bug_when>
    <thetext>Comment on attachment 209596
another

Attachment 209596 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1561584</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920811</commentid>
    <comment_count>12</comment_count>
      <attachid>209596</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-25 12:07:56 -0700</bug_when>
    <thetext>Comment on attachment 209596
another

Attachment 209596 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1544952</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920815</commentid>
    <comment_count>13</comment_count>
      <attachid>209596</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-25 12:14:15 -0700</bug_when>
    <thetext>Comment on attachment 209596
another

Attachment 209596 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1562424</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920820</commentid>
    <comment_count>14</comment_count>
      <attachid>209596</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-08-25 12:56:17 -0700</bug_when>
    <thetext>Comment on attachment 209596
another

Attachment 209596 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1564290</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920829</commentid>
    <comment_count>15</comment_count>
      <attachid>209596</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-08-25 13:35:16 -0700</bug_when>
    <thetext>Comment on attachment 209596
another

Attachment 209596 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1559658</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920837</commentid>
    <comment_count>16</comment_count>
      <attachid>209603</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-25 13:56:06 -0700</bug_when>
    <thetext>Created attachment 209603
yet another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920839</commentid>
    <comment_count>17</comment_count>
      <attachid>209603</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-08-25 14:00:49 -0700</bug_when>
    <thetext>Comment on attachment 209603
yet another

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

&gt; Source/WebCore/WebCore.vcxproj/WebCore.vcxproj:-1
&gt; -ï»¿&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;

Removing this was probably a mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920854</commentid>
    <comment_count>18</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-25 14:30:37 -0700</bug_when>
    <thetext>https://trac.webkit.org/r154581</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209551</attachid>
            <date>2013-08-24 12:39:52 -0700</date>
            <delta_ts>2013-08-25 11:48:09 -0700</delta_ts>
            <desc>maybe something along these lines</desc>
            <filename>element-iterators.patch</filename>
            <type>text/plain</type>
            <size>9578</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAxNTQ1MzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDE3LDcgKzQxNyw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhbnZh
c0hhc0YKICAgICAvLyBJZiBpdCBoYXMgYW55IGNoaWxkcmVuIHRoYXQgYXJlIGVsZW1lbnRzLCB3
ZSdsbCBhc3N1bWUgaXQgbWlnaHQgYmUgZmFsbGJhY2sKICAgICAvLyBjb250ZW50LiBJZiBpdCBo
YXMgbm8gY2hpbGRyZW4gb3IgaXRzIG9ubHkgY2hpbGRyZW4gYXJlIG5vdCBlbGVtZW50cwogICAg
IC8vIChlLmcuIGp1c3QgdGV4dCBub2RlcyksIGl0IGRvZXNuJ3QgaGF2ZSBmYWxsYmFjayBjb250
ZW50LgotICAgIHJldHVybiAhIUVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0Q2hpbGQobm9kZSk7Cisg
ICAgcmV0dXJuICEhZWxlbWVudENoaWxkcmVuKG5vZGUpLmZpcnN0KCk7CiB9CiAKIGJvb2wgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzSW1hZ2VCdXR0b24oKSBjb25zdApAQCAtMTEyMiwxMCAr
MTEyMiwxMCBAQCBzdGF0aWMgRWxlbWVudCogc2libGluZ1dpdGhBcmlhUm9sZShTdHJpCiAgICAg
aWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIGZvciAoRWxlbWVudCog
c2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0Q2hpbGQocGFyZW50KTsgc2libGluZzsg
c2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKHNpYmxpbmcpKSB7CisgICAg
Zm9yIChhdXRvIHNpYmxpbmcgPSBlbGVtZW50Q2hpbGRyZW4ocGFyZW50KS5iZWdpbigpOyBzaWJs
aW5nOyArK3NpYmxpbmcpIHsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzaWJsaW5nQXJp
YVJvbGUgPSBzaWJsaW5nLT5mYXN0R2V0QXR0cmlidXRlKHJvbGVBdHRyKTsKICAgICAgICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKHNpYmxpbmdBcmlhUm9sZSwgcm9sZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gc2libGluZzsKKyAgICAgICAgICAgIHJldHVybiBzaWJsaW5nLmdldCgpOwogICAgIH0K
IAogICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRUcmF2ZXJz
YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFRyYXZlcnNhbC5o
CShyZXZpc2lvbiAxNTQ1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFRyYXZlcnNh
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCw4NCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IEVsZW1lbnQqIHBzZXVkb0F3YXJlUHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUqKTsKIH07CiAK
K3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KK2NsYXNzIEVsZW1lbnREZXNjZW5kYW50
SXRlcmF0b3IgeworcHVibGljOgorICAgIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IoKSA6IG1f
cm9vdChudWxscHRyKSwgbV9jdXJyZW50KG51bGxwdHIpIHsgfQorICAgIEVsZW1lbnREZXNjZW5k
YW50SXRlcmF0b3IoQ29udGFpbmVyTm9kZSogcm9vdCwgRWxlbWVudFR5cGUqIGN1cnJlbnQpIDog
bV9yb290KHJvb3QpLCBtX2N1cnJlbnQoY3VycmVudCkgeyB9CisgICAgRWxlbWVudERlc2NlbmRh
bnRJdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgbV9jdXJyZW50ID0gVHJhdmVyc2FsPEVsZW1lbnRU
eXBlPjo6bmV4dChtX2N1cnJlbnQsIG1fcm9vdCk7IHJldHVybiAqdGhpczsgfQorICAgIEVsZW1l
bnRUeXBlJiBvcGVyYXRvciooKSB7IHJldHVybiAqbV9jdXJyZW50OyB9CisgICAgRWxlbWVudFR5
cGUqIG9wZXJhdG9yLT4oKSB7IHJldHVybiBtX2N1cnJlbnQ7IH0KKyAgICBFbGVtZW50VHlwZSog
Z2V0KCkgeyByZXR1cm4gbV9jdXJyZW50OyB9CisgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJu
ICEhbV9jdXJyZW50OyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEVsZW1lbnREZXNjZW5k
YW50SXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnQgIT0gb3RoZXIubV9j
dXJyZW50OyB9CisKK3ByaXZhdGU6CisgICAgQ29udGFpbmVyTm9kZSogbV9yb290OworICAgIEVs
ZW1lbnRUeXBlKiBtX2N1cnJlbnQ7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5
cGU+CitjbGFzcyBFbGVtZW50Q2hpbGRJdGVyYXRvciB7CitwdWJsaWM6CisgICAgRWxlbWVudENo
aWxkSXRlcmF0b3IoKSA6IG1fY3VycmVudChudWxscHRyKSB7IH0KKyAgICBFbGVtZW50Q2hpbGRJ
dGVyYXRvcihFbGVtZW50VHlwZSogY3VycmVudCkgOiBtX2N1cnJlbnQoY3VycmVudCkgeyB9Cisg
ICAgRWxlbWVudENoaWxkSXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7IG1fY3VycmVudCA9IFRyYXZl
cnNhbDxFbGVtZW50VHlwZT46Om5leHRTaWJsaW5nKG1fY3VycmVudCk7IHJldHVybiAqdGhpczsg
fQorICAgIEVsZW1lbnRUeXBlJiBvcGVyYXRvciooKSB7IHJldHVybiAqbV9jdXJyZW50OyB9Cisg
ICAgRWxlbWVudFR5cGUqIG9wZXJhdG9yLT4oKSB7IHJldHVybiBtX2N1cnJlbnQ7IH0KKyAgICBF
bGVtZW50VHlwZSogZ2V0KCkgeyByZXR1cm4gbV9jdXJyZW50OyB9CisgICAgb3BlcmF0b3IgYm9v
bCgpIHsgcmV0dXJuICEhbV9jdXJyZW50OyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEVs
ZW1lbnRDaGlsZEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50ICE9IG90
aGVyLm1fY3VycmVudDsgfQorCitwcml2YXRlOgorICAgIEVsZW1lbnRUeXBlKiBtX2N1cnJlbnQ7
Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGUsIHR5cGVuYW1lIENvbnRhaW5l
clR5cGU+CitjbGFzcyBFbGVtZW50RGVzY2VuZGFudEFkYXB0ZXIgeworcHVibGljOgorICAgIEVs
ZW1lbnREZXNjZW5kYW50QWRhcHRlcihDb250YWluZXJUeXBlKiByb290KSA6IG1fcm9vdChyb290
KSB7IH0KKyAgICBFbGVtZW50VHlwZSogZmlyc3QoKSB7IHJldHVybiBUcmF2ZXJzYWw8RWxlbWVu
dFR5cGU+OjpmaXJzdFdpdGhpbihtX3Jvb3QpOyB9CisgICAgRWxlbWVudFR5cGUqIGxhc3QoKSB7
IHJldHVybiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpsYXN0V2l0aGluKG1fcm9vdCk7IH0KKyAg
ICBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBiZWdpbigpCisgICAgewor
ICAgICAgICBpZiAoIW1fcm9vdC0+aXNDb250YWluZXJOb2RlKCkpCisgICAgICAgICAgICByZXR1
cm4gRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4oKTsKKyAgICAgICAgcmV0
dXJuIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcm9vdCwgVHJhdmVy
c2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RXaXRoaW4oc3RhdGljX2Nhc3Q8Q29udGFpbmVyTm9kZSo+
KG1fcm9vdCkpKTsKKyAgICB9CisgICAgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50
VHlwZT4gZW5kKCkgeyByZXR1cm4gRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlw
ZT4oKTsgfQorCitwcml2YXRlOgorICAgIENvbnRhaW5lclR5cGUqIG1fcm9vdDsKK307CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZSwgdHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KK2Ns
YXNzIEVsZW1lbnRDaGlsZEFkYXB0ZXIgeworcHVibGljOgorICAgIEVsZW1lbnRDaGlsZEFkYXB0
ZXIoQ29udGFpbmVyVHlwZSogcm9vdCkgOiBtX3Jvb3Qocm9vdCkgeyB9CisgICAgRWxlbWVudFR5
cGUqIGZpcnN0KCkgeyByZXR1cm4gVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RDaGlsZCht
X3Jvb3QpOyB9CisgICAgRWxlbWVudFR5cGUqIGxhc3QoKSB7IHJldHVybiBUcmF2ZXJzYWw8RWxl
bWVudFR5cGU+OjpsYXN0Q2hpbGQobV9yb290KTsgfQorICAgIEVsZW1lbnRDaGlsZEl0ZXJhdG9y
PEVsZW1lbnRUeXBlPiBiZWdpbigpIHsgcmV0dXJuIEVsZW1lbnRDaGlsZEl0ZXJhdG9yPEVsZW1l
bnRUeXBlPihUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdENoaWxkKG1fcm9vdCkpOyB9Cisg
ICAgRWxlbWVudENoaWxkSXRlcmF0b3I8RWxlbWVudFR5cGU+IGVuZCgpIHsgcmV0dXJuIEVsZW1l
bnRDaGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPigpOyB9CisKK3ByaXZhdGU6CisgICAgQ29udGFp
bmVyVHlwZSogbV9yb290OworfTsKKworaW5saW5lIEVsZW1lbnRDaGlsZEFkYXB0ZXI8RWxlbWVu
dCwgQ29udGFpbmVyTm9kZT4gZWxlbWVudENoaWxkcmVuKENvbnRhaW5lck5vZGUqIHJvb3QpIHsg
cmV0dXJuIEVsZW1lbnRDaGlsZEFkYXB0ZXI8RWxlbWVudCwgQ29udGFpbmVyTm9kZT4ocm9vdCk7
IH0KK2lubGluZSBFbGVtZW50RGVzY2VuZGFudEFkYXB0ZXI8RWxlbWVudCwgQ29udGFpbmVyTm9k
ZT4gZWxlbWVudERlc2NlbmRhbnRzKENvbnRhaW5lck5vZGUqIHJvb3QpIHsgcmV0dXJuIEVsZW1l
bnREZXNjZW5kYW50QWRhcHRlcjxFbGVtZW50LCBDb250YWluZXJOb2RlPihyb290KTsgfQoraW5s
aW5lIEVsZW1lbnRDaGlsZEFkYXB0ZXI8RWxlbWVudCwgTm9kZT4gZWxlbWVudENoaWxkcmVuKE5v
ZGUqIHJvb3QpIHsgcmV0dXJuIEVsZW1lbnRDaGlsZEFkYXB0ZXI8RWxlbWVudCwgTm9kZT4ocm9v
dCk7IH0KK2lubGluZSBFbGVtZW50RGVzY2VuZGFudEFkYXB0ZXI8RWxlbWVudCwgTm9kZT4gZWxl
bWVudERlc2NlbmRhbnRzKE5vZGUqIHJvb3QpIHsgcmV0dXJuIEVsZW1lbnREZXNjZW5kYW50QWRh
cHRlcjxFbGVtZW50LCBOb2RlPihyb290KTsgfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVu
dFR5cGU+CitpbmxpbmUgRWxlbWVudENoaWxkQWRhcHRlcjxFbGVtZW50VHlwZSwgQ29udGFpbmVy
Tm9kZT4gY2hpbGRyZW5PZlR5cGUoQ29udGFpbmVyTm9kZSogcm9vdCkgeyByZXR1cm4gRWxlbWVu
dENoaWxkQWRhcHRlcjxFbGVtZW50VHlwZSwgQ29udGFpbmVyTm9kZT4ocm9vdCk7IH0KK3RlbXBs
YXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KK2lubGluZSBFbGVtZW50Q2hpbGRBZGFwdGVyPEVs
ZW1lbnRUeXBlLCBOb2RlPiBjaGlsZHJlbk9mVHlwZShOb2RlKiByb290KSB7IHJldHVybiBFbGVt
ZW50Q2hpbGRBZGFwdGVyPEVsZW1lbnRUeXBlLCBOb2RlPihyb290KTsgfQordGVtcGxhdGUgPHR5
cGVuYW1lIEVsZW1lbnRUeXBlPgoraW5saW5lIEVsZW1lbnREZXNjZW5kYW50QWRhcHRlcjxFbGVt
ZW50VHlwZSwgQ29udGFpbmVyTm9kZT4gZGVzY2VuZGFudHNPZlR5cGUoQ29udGFpbmVyTm9kZSog
cm9vdCkgeyByZXR1cm4gRWxlbWVudERlc2NlbmRhbnRBZGFwdGVyPEVsZW1lbnRUeXBlLCBDb250
YWluZXJOb2RlPihyb290KTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgoraW5s
aW5lIEVsZW1lbnREZXNjZW5kYW50QWRhcHRlcjxFbGVtZW50VHlwZSwgTm9kZT4gZGVzY2VuZGFu
dHNPZlR5cGUoTm9kZSogcm9vdCkgeyByZXR1cm4gRWxlbWVudERlc2NlbmRhbnRBZGFwdGVyPEVs
ZW1lbnRUeXBlLCBOb2RlPihyb290KTsgfQorCiAvLyBTcGVjaWFsaXplZCBmb3IgcHVyZSBFbGVt
ZW50IHRvIGV4cGxvaXQgdGhlIGZhY3QgdGhhdCBFbGVtZW50cyBwYXJlbnQgaXMgYWx3YXlzIGVp
dGhlciBhbm90aGVyIEVsZW1lbnQgb3IgdGhlIHJvb3QuCiB0ZW1wbGF0ZSA8PgogdGVtcGxhdGUg
PHR5cGVuYW1lIEN1cnJlbnRUeXBlPgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJr
dXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAko
cmV2aXNpb24gMTU0NTM5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDEsMTQgKzEwMSwxNCBAQCBzdGF0aWMgdm9pZCBjb21wbGV0ZVVS
THMoRG9jdW1lbnRGcmFnbWVuCiAKICAgICBLVVJMIHBhcnNlZEJhc2VVUkwoUGFyc2VkVVJMU3Ry
aW5nLCBiYXNlVVJMKTsKIAotICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IEVsZW1lbnRUcmF2
ZXJzYWw6OmZpcnN0V2l0aGluKGZyYWdtZW50KTsgZWxlbWVudDsgZWxlbWVudCA9IEVsZW1lbnRU
cmF2ZXJzYWw6Om5leHQoZWxlbWVudCwgZnJhZ21lbnQpKSB7CisgICAgZm9yIChhdXRvIGVsZW1l
bnQgPSBlbGVtZW50RGVzY2VuZGFudHMoZnJhZ21lbnQpLmJlZ2luKCk7IGVsZW1lbnQ7ICsrZWxl
bWVudCkgewogICAgICAgICBpZiAoIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBlbGVtZW50LT5hdHRyaWJ1
dGVDb3VudCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKICAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlID0gZWxlbWVudC0+YXR0
cmlidXRlQXQoaSk7CiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNVUkxBdHRyaWJ1dGUoYXR0
cmlidXRlKSAmJiAhYXR0cmlidXRlLnZhbHVlKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAg
IGNoYW5nZXMuYXBwZW5kKEF0dHJpYnV0ZUNoYW5nZShlbGVtZW50LCBhdHRyaWJ1dGUubmFtZSgp
LCBLVVJMKHBhcnNlZEJhc2VVUkwsIGF0dHJpYnV0ZS52YWx1ZSgpKS5zdHJpbmcoKSkpOworICAg
ICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKEF0dHJpYnV0ZUNoYW5nZShlbGVtZW50LmdldCgp
LCBhdHRyaWJ1dGUubmFtZSgpLCBLVVJMKHBhcnNlZEJhc2VVUkwsIGF0dHJpYnV0ZS52YWx1ZSgp
KS5zdHJpbmcoKSkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTU0NTM5KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNiwxMCArMzA2LDEy
IEBAIEFMV0FZU19JTkxJTkUgTm9kZSogTGl2ZU5vZGVMaXN0QmFzZTo6aXQKIHRlbXBsYXRlIDxj
bGFzcyBOb2RlTGlzdFR5cGU+CiBpbmxpbmUgRWxlbWVudCogZmlyc3RNYXRjaGluZ0VsZW1lbnQo
Y29uc3QgTm9kZUxpc3RUeXBlKiBub2RlTGlzdCwgQ29udGFpbmVyTm9kZSogcm9vdCkKIHsKLSAg
ICBFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4ocm9vdCk7
Ci0gICAgd2hpbGUgKGVsZW1lbnQgJiYgIWlzTWF0Y2hpbmdFbGVtZW50KG5vZGVMaXN0LCBlbGVt
ZW50KSkKLSAgICAgICAgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCwg
cm9vdCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgYXV0byBlbGVtZW50ID0gZWxlbWVudERl
c2NlbmRhbnRzKHJvb3QpLmJlZ2luKCk7CisgICAgZm9yICg7IGVsZW1lbnQ7ICsrZWxlbWVudCkg
eworICAgICAgICBpZiAoaXNNYXRjaGluZ0VsZW1lbnQobm9kZUxpc3QsIGVsZW1lbnQuZ2V0KCkp
KQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0KCk7CisgICAgfQorICAgIHJldHVybiAw
OwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgTm9kZUxpc3RUeXBlPgpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTQ1MzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Mjcs
OSArOTI3LDkgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJlc291cgogICAg
ICAgICAvLyBPdGhlcndpc2UsIGlmIHRoZSBtZWRpYSBlbGVtZW50IGRvZXMgbm90IGhhdmUgYSBz
cmMgYXR0cmlidXRlIGJ1dCBoYXMgYSBzb3VyY2UgCiAgICAgICAgIC8vIGVsZW1lbnQgY2hpbGQs
IHRoZW4gbGV0IG1vZGUgYmUgY2hpbGRyZW4gYW5kIGxldCBjYW5kaWRhdGUgYmUgdGhlIGZpcnN0
IHN1Y2ggCiAgICAgICAgIC8vIHNvdXJjZSBlbGVtZW50IGNoaWxkIGluIHRyZWUgb3JkZXIuCi0g
ICAgICAgIGlmIChhdXRvIHNvdXJjZUVsZW1lbnQgPSBUcmF2ZXJzYWw8SFRNTFNvdXJjZUVsZW1l
bnQ+OjpmaXJzdENoaWxkKHRoaXMpKSB7CisgICAgICAgIGlmIChhdXRvIHNvdXJjZSA9IGNoaWxk
cmVuT2ZUeXBlPEhUTUxTb3VyY2VFbGVtZW50Pih0aGlzKS5maXJzdCgpKSB7CiAgICAgICAgICAg
ICBtb2RlID0gY2hpbGRyZW47Ci0gICAgICAgICAgICBtX25leHRDaGlsZE5vZGVUb0NvbnNpZGVy
ID0gc291cmNlRWxlbWVudDsKKyAgICAgICAgICAgIG1fbmV4dENoaWxkTm9kZVRvQ29uc2lkZXIg
PSBzb3VyY2U7CiAgICAgICAgICAgICBtX2N1cnJlbnRTb3VyY2VOb2RlID0gMDsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGUgbWVkaWEgZWxlbWVudCBoYXMg
bmVpdGhlciBhIHNyYyBhdHRyaWJ1dGUgbm9yIGEgc291cmNlIGVsZW1lbnQgCkBAIC0xNDE3LDcg
KzE0MTcsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja01vZGVDaGFuCiAgICAg
Ym9vbCB0cmFja0lzTG9hZGVkID0gdHJ1ZTsKICAgICBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09
IFRleHRUcmFjazo6VHJhY2tFbGVtZW50KSB7CiAgICAgICAgIHRyYWNrSXNMb2FkZWQgPSBmYWxz
ZTsKLSAgICAgICAgZm9yIChhdXRvIHRyYWNrRWxlbWVudCA9IFRyYXZlcnNhbDxIVE1MVHJhY2tF
bGVtZW50Pjo6Zmlyc3RDaGlsZCh0aGlzKTsgdHJhY2tFbGVtZW50OyB0cmFja0VsZW1lbnQgPSBU
cmF2ZXJzYWw8SFRNTFRyYWNrRWxlbWVudD46Om5leHRTaWJsaW5nKHRyYWNrRWxlbWVudCkpIHsK
KyAgICAgICAgZm9yIChhdXRvIHRyYWNrRWxlbWVudCA9IGNoaWxkcmVuT2ZUeXBlPEhUTUxUcmFj
a0VsZW1lbnQ+KHRoaXMpLmJlZ2luKCk7IHRyYWNrRWxlbWVudDsgKyt0cmFja0VsZW1lbnQpIHsK
ICAgICAgICAgICAgIGlmICh0cmFja0VsZW1lbnQtPnRyYWNrKCkgPT0gdHJhY2spIHsKICAgICAg
ICAgICAgICAgICBpZiAodHJhY2tFbGVtZW50LT5yZWFkeVN0YXRlKCkgPT0gSFRNTFRyYWNrRWxl
bWVudDo6TE9BRElORyB8fCB0cmFja0VsZW1lbnQtPnJlYWR5U3RhdGUoKSA9PSBIVE1MVHJhY2tF
bGVtZW50OjpMT0FERUQpCiAgICAgICAgICAgICAgICAgICAgIHRyYWNrSXNMb2FkZWQgPSB0cnVl
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209595</attachid>
            <date>2013-08-25 11:48:09 -0700</date>
            <delta_ts>2013-08-25 11:51:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>element-iterators-3.patch</filename>
            <type>text/plain</type>
            <size>32565</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBACisyMDEzLTA4LTI1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBFbGVtZW50IGNoaWxkIGFuZCBk
ZXNjZW5kYW50IGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTIwMjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIGl0ZXJhdG9ycyBmb3IgRWxlbWVudCBjaGlsZHJlbiBhbmQgZGVzY2Vu
ZGFudHMuCisgICAgICAgIAorICAgICAgICBUbyBpdGVyYXRlIG92ZXIgZWxlbWVudCBjaGlsZHJl
bjoKKyAgICAgICAgCisgICAgICAgICNpbmNsdWRlICJDaGlsZEl0ZXJhdG9yLmgiCisgICAgICAg
IAorICAgICAgICBhdXRvIGVuZCA9IGVsZW1lbnRDaGlsZHJlbih0aGlzKS5lbmQoKTsKKyAgICAg
ICAgZm9yIChhdXRvIGl0ID0gZWxlbWVudENoaWxkcmVuKHRoaXMpLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9ICppdDsKKyAgICAgICAg
ICAgIC4uLgorCisgICAgICAgIGF1dG8gZW5kID0gY2hpbGRyZW5PZlR5cGU8SFRNTEFyZWFFbGVt
ZW50Pih0aGlzKS5lbmQoKTsKKyAgICAgICAgZm9yIChhdXRvIGl0ID0gY2hpbGRyZW5PZlR5cGU8
SFRNTEFyZWFFbGVtZW50Pih0aGlzKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgICAgIEhUTUxBcmVhRWxlbWVudCYgYXJlYSA9ICppdDsKKyAgICAgICAgICAgIC4uLgorCisg
ICAgICAgIFRvIGl0ZXJhdGF0ZSBvdmVyIGVsZW1lbnQgZGVzY2VuZGFudHMgaW4gcHJlLW9yZGVy
OgorICAgICAgICAKKyAgICAgICAgI2luY2x1ZGUgIkRlc2NlbmRhbnRJdGVyYXRvci5oIgorICAg
ICAgICAKKyAgICAgICAgYXV0byBlbmQgPSBlbGVtZW50RGVzY2VuZGFudHModGhpcykuZW5kKCk7
CisgICAgICAgIGZvciAoYXV0byBpdCA9IGVsZW1lbnREZXNjZW5kYW50cyh0aGlzKS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSAqaXQ7
CisgICAgICAgICAgICAuLi4KKworICAgICAgICBhdXRvIGVuZCA9IGRlc2NlbmRhbnRzT2ZUeXBl
PEhUTUxBcmVhRWxlbWVudD4odGhpcykuZW5kKCk7CisgICAgICAgIGZvciAoYXV0byBpdCA9IGRl
c2NlbmRhbnRzT2ZUeXBlPEhUTUxBcmVhRWxlbWVudD4odGhpcykuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgICAgICBIVE1MQXJlYUVsZW1lbnQmIGFyZWE9ICppdDsKKyAgICAg
ICAgICAgIC4uLgorICAgICAgICAgICAgCisgICAgICAgIFRoZXNlIGl0ZXJhdG9ycyBhcmUgY29t
cGF0aWJsZSB3aXRoIEMrKzExIHJhbmdlLWJhc2VkIGZvciBsb29wcy4gSW4gdGhlIGZ1dHVyZSB3
ZSBjYW4gdXNlCisgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50
Q2hpbGRyZW4odGhpcykpCisgICAgICAgICAgICAuLi4KKworICAgICAgICBldGMuCisgICAgICAg
IAorICAgICAgICBUaGUgcGF0Y2ggYWxsIHVzZXMgdGhlIG5ldyBpdGVyYXRvcnMgaW4gYSBmZXcg
cGxhY2VzLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhbnZhc0hhc0ZhbGxiYWNr
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpzaWJsaW5nV2l0aEFyaWFSb2xlKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6aXNEYXRhVGFibGUpOgorICAgICAgICAqIGRvbS9DaGls
ZEl0ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRJdGVyYXRvcjo6b3Bl
cmF0b3IqKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkSXRlcmF0b3I6Om9wZXJhdG9yLT4pOgor
ICAgICAgICAoV2ViQ29yZTo6OjpDaGlsZEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6
b3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6PSk6CisgICAgICAgIChXZWJDb3JlOjo6OkNo
aWxkSXRlcmF0b3JBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6YmVnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6OjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6ZWxlbWVudENoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OmNoaWxkcmVuT2ZUeXBlKToKKyAgICAgICAgKiBkb20vRGVzY2Vu
ZGFudEl0ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGVzY2VuZGFudEl0ZXJh
dG9yOjpvcGVyYXRvciopOgorICAgICAgICAoV2ViQ29yZTo6RGVzY2VuZGFudEl0ZXJhdG9yOjpv
cGVyYXRvci0+KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6RGVzY2VuZGFudEl0ZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6Ojo6b3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6PSk6CisgICAg
ICAgIChXZWJDb3JlOjo6OkRlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6OjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjo6OmVuZCk6CisgICAgICAgIChXZWJD
b3JlOjplbGVtZW50RGVzY2VuZGFudHMpOgorICAgICAgICAoV2ViQ29yZTo6ZGVzY2VuZGFudHNP
ZlR5cGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6YnVpbGRBY2Nlc3NLZXlNYXApOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YXR0YWNoKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkZXRhY2gpOgorICAgICAgICAqIGVkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1h
bmQ6OmNsZWFudXBVbnN0eWxlZEFwcGxlU3R5bGVTcGFucyk6CisgICAgICAgICogZWRpdGluZy9t
YXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGxldGVVUkxzKToKKyAgICAgICAgKiBo
dG1sL0hUTUxNYXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNYXBFbGVtZW50
OjptYXBNb3VzZUV2ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TWVkaWFSZXNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tNb2RlQ2hhbmdl
ZCk6CisKIDIwMTMtMDgtMjUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIE1ha2UgSmF2YVNjcmlwdCBiaW5kaW5nIGZvciBDbGlwYm9hcmQ6OnR5cGVzIG1vcmUgbm9y
bWFsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAxNTQ1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU0ODcsNiArNTQ4Nyw4
IEBACiAJCUU0NTM5MDFFMEVBRkNBQ0EwMDM2OTVDOCAvKiBQYXN0ZWJvYXJkSU9TLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1MzkwMTkwRUFGQ0FD
QTAwMzY5NUM4IC8qIFBhc3RlYm9hcmRJT1MubW0gKi87IH07CiAJCUU0NTM5MDQ2MEVBRkQ2Mzcw
MDM2OTVDOCAvKiBTaGFyZWRUaW1lcklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5MDM1MEVBRkQ2MzcwMDM2OTVDOCAvKiBTaGFyZWRUaW1l
cklPUy5tbSAqLzsgfTsKIAkJRTQ2MkE0QTExMTNFNzFCRTAwNEE0MjIwIC8qIEludFBvaW50SGFz
aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2MkE0
QTAxMTNFNzFCRTAwNEE0MjIwIC8qIEludFBvaW50SGFzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUU0NkEyQjFDMTdDQTY1QjkwMDBEQkNEOCAv
KiBEZXNjZW5kYW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0NkEyQjFCMTdDQTY1QjkwMDBEQkNEOCAvKiBEZXNjZW5kYW50SXRlcmF0
b3IuaCAqLzsgfTsKKwkJRTQ2QTJCMUUxN0NBNzZCMTAwMERCQ0Q4IC8qIENoaWxkSXRlcmF0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NkEyQjFE
MTdDQTc2QjEwMDBEQkNEOCAvKiBDaGlsZEl0ZXJhdG9yLmggKi87IH07CiAJCUU0NzEyN0NBMTYz
NDM4QTEwMEVENkY1QSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0E5N0NFMTYzMDU5RkMwMDVE
Q0Q5OSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCAqLzsgfTsKIAkJRTQ3MTI3Q0Ix
NjM0MzhBRTAwRUQ2RjVBIC8qIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0E5N0NGMTYzMDU5RkMwMDVE
Q0Q5OSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmggKi87IH07CiAJCUU0Nzc4QjdGMTE1
QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0Nzc4QjdEMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1
c3RvbUV2ZW50LmNwcCAqLzsgfTsKQEAgLTEyMjU1LDYgKzEyMjU3LDggQEAKIAkJRTQ1MzkwMTkw
RUFGQ0FDQTAwMzY5NUM4IC8qIFBhc3RlYm9hcmRJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBQYXN0ZWJvYXJkSU9TLm1tOyBwYXRoID0gaW9zL1Bhc3RlYm9h
cmRJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NTM5MDM1MEVBRkQ2Mzcw
MDM2OTVDOCAvKiBTaGFyZWRUaW1lcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IFNoYXJlZFRpbWVySU9TLm1tOyBwYXRoID0gaW9zL1NoYXJlZFRpbWVySU9T
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDYyQTRBMDExM0U3MUJFMDA0QTQy
MjAgLyogSW50UG9pbnRIYXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
dFBvaW50SGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDZBMkIxQjE3Q0E2
NUI5MDAwREJDRDggLyogRGVzY2VuZGFudEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlc2NlbmRhbnRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFNDZBMkIxRDE3Q0E3NkIxMDAwREJDRDggLyogQ2hpbGRJdGVyYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGlsZEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUU0Nzc4QjdEMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3VzdG9tRXZl
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDc3OEI3RTExNUE1ODFBMDBC
NUQzNzIgLyogSlNDdXN0b21FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0N1c3RvbUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0E5N0NF
MTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAwOTcsNiArMjAxMDEsNyBAQAog
CQkJCTkzRUVDMUU2MDlDMjg3NzcwMEM1MTVEMSAvKiBDaGFyYWN0ZXJEYXRhLmlkbCAqLywKIAkJ
CQk5M0Y5MjU0MjBGN0VGNUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAgKi8s
CiAJCQkJOTNGOTI1NDEwRjdFRjVCODAwN0UzN0M5IC8qIENoZWNrZWRSYWRpb0J1dHRvbnMuaCAq
LywKKwkJCQlFNDZBMkIxRDE3Q0E3NkIxMDAwREJDRDggLyogQ2hpbGRJdGVyYXRvci5oICovLAog
CQkJCUQ2MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNw
cCAqLywKIAkJCQlENjE5QTMwNjE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25T
Y29wZS5oICovLAogCQkJCUE4MTg3MjFBMDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0
LmNwcCAqLywKQEAgLTIwMTQzLDYgKzIwMTQ4LDcgQEAKIAkJCQk4MUFDNUFFOTEzMTYzOTJFMDAw
OUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbUxpc3QuaWRsICovLAogCQkJCUE4QzIyOEEwMTFENTcy
MkUwMEQ1QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmNwcCAqLywKIAkJCQlBOEMy
Mjg5RjExRDU3MjJFMDBENUE3RDMgLyogRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5oICovLAor
CQkJCUU0NkEyQjFCMTdDQTY1QjkwMDBEQkNEOCAvKiBEZXNjZW5kYW50SXRlcmF0b3IuaCAqLywK
IAkJCQkzMUZCMUE0RjEyMEE1RDA2MDBEQzAyQTAgLyogRGV2aWNlTW90aW9uQ2xpZW50LmggKi8s
CiAJCQkJMzFGQjFBNTAxMjBBNUQwNjAwREMwMkEwIC8qIERldmljZU1vdGlvbkNvbnRyb2xsZXIu
Y3BwICovLAogCQkJCTMxRkIxQTUxMTIwQTVEMDYwMERDMDJBMCAvKiBEZXZpY2VNb3Rpb25Db250
cm9sbGVyLmggKi8sCkBAIC0yMTE1Nyw2ICsyMTE2Myw3IEBACiAJCQkJQTgwRTZDRTYwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU1ByaW1pdGl2ZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUVE
OEFDMzBDQzQ5QkUwMDBCRkM1NTcgLyogQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTgwRTZDRkYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlFNDZBMkIxRTE3Q0E3NkIxMDAwREJDRDggLyogQ2hpbGRJdGVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzhEMDJCQzYxNTRBMThERjAwQjYyRDA1IC8qIENT
U1Byb3BlcnR5QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTY1ODBGNDA5RDEyQjIw
MDAwRTYxRDcgLyogQ1NTUHJvcGVydHlOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODJFM0Q4
REYxMjJFQTBEMTAwM0FFNUJDIC8qIENTU1Byb3BlcnR5U291cmNlRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yMjg4MSw2ICsyMjg4OCw3IEBACiAJCQkJMzcxRTY1Q0MxMzY2MUVEQzAwQkVFREIw
IC8qIFBhZ2VTZXJpYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzE5N0YyNDE3NTY4OUM0
MDA3Qjk0NDIgLyogUGFnZVRocm90dGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyODRBRTEx
MDQ0N0Q0NTAwRUFFQjUyIC8qIFBhZ2VUcmFuc2l0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAor
CQkJCUU0NkEyQjFDMTdDQTY1QjkwMDBEQkNEOCAvKiBEZXNjZW5kYW50SXRlcmF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxRTFFQ0MzMEM5MUM5MDQwMERDMjU1QiAvKiBQYWdlVVJMUmVjb3Jk
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRkQ1Qjk3QjEzNUNDOTc4MDBENUU5MkEgLyogUGFnZVZp
c2liaWxpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM3N0FCQTAxNURFRkVFRjAwMzFG
RDA0IC8qIFBhZ2luYXRpb24uaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJ
KHJldmlzaW9uIDE1NDUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAj
aW5jbHVkZSAiQWNjZXNzaWJpbGl0eUxpc3RCb3guaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
U3BpbkJ1dHRvbi5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZS5oIgotI2luY2x1ZGUg
IkVsZW1lbnRUcmF2ZXJzYWwuaCIKKyNpbmNsdWRlICJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCkBAIC00MTcsNyArNDE3LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2Fu
dmFzSGFzRgogICAgIC8vIElmIGl0IGhhcyBhbnkgY2hpbGRyZW4gdGhhdCBhcmUgZWxlbWVudHMs
IHdlJ2xsIGFzc3VtZSBpdCBtaWdodCBiZSBmYWxsYmFjawogICAgIC8vIGNvbnRlbnQuIElmIGl0
IGhhcyBubyBjaGlsZHJlbiBvciBpdHMgb25seSBjaGlsZHJlbiBhcmUgbm90IGVsZW1lbnRzCiAg
ICAgLy8gKGUuZy4ganVzdCB0ZXh0IG5vZGVzKSwgaXQgZG9lc24ndCBoYXZlIGZhbGxiYWNrIGNv
bnRlbnQuCi0gICAgcmV0dXJuICEhRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RDaGlsZChub2RlKTsK
KyAgICByZXR1cm4gZWxlbWVudENoaWxkcmVuKG5vZGUpLmJlZ2luKCkgIT0gZWxlbWVudENoaWxk
cmVuKG5vZGUpLmVuZCgpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0lt
YWdlQnV0dG9uKCkgY29uc3QKQEAgLTExMjEsMTEgKzExMjEsMTIgQEAgc3RhdGljIEVsZW1lbnQq
IHNpYmxpbmdXaXRoQXJpYVJvbGUoU3RyaQogICAgIE5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVu
dE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAg
Zm9yIChFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RDaGlsZChwYXJl
bnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoc2li
bGluZykpIHsKKworICAgIGF1dG8gZW5kID0gZWxlbWVudENoaWxkcmVuKHBhcmVudCkuZW5kKCk7
CisgICAgZm9yIChhdXRvIHNpYmxpbmcgPSBlbGVtZW50Q2hpbGRyZW4ocGFyZW50KS5iZWdpbigp
OyBzaWJsaW5nICE9IGVuZDsgKytzaWJsaW5nKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgc2libGluZ0FyaWFSb2xlID0gc2libGluZy0+ZmFzdEdldEF0dHJpYnV0ZShyb2xlQXR0cik7
CiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShzaWJsaW5nQXJpYVJvbGUsIHJvbGUpKQot
ICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmc7CisgICAgICAgICAgICByZXR1cm4gJipzaWJsaW5n
OwogICAgIH0KIAogICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZp
c2lvbiAxNTQ1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw2IEBACiAjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eVRhYmxlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNp
bmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCiAjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5VGFibGUuY3BwCShyZXZpc2lvbiAxNTQ1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaCIKICNpbmNsdWRl
ICJBY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuaCIKICNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5VGFibGVSb3cuaCIKLSNpbmNsdWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCisjaW5jbHVk
ZSAiQ2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhU
TUxUYWJsZUNhcHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQu
aCIKQEAgLTEyNSw3ICsxMjUsOCBAQCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNEYXRhVGFi
bGUoKSBjCiAgICAgICAgIHJldHVybiB0cnVlOyAgICAKIAogICAgIC8vIGlmIHRoZXJlJ3MgYSBj
b2xncm91cCBvciBjb2wgZWxlbWVudCwgaXQncyBwcm9iYWJseSBhIGRhdGEgdGFibGUuCi0gICAg
Zm9yIChFbGVtZW50KiBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0Q2hpbGQodGFibGVF
bGVtZW50KTsgY2hpbGQ7IGNoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoY2hp
bGQpKSB7CisgICAgYXV0byBlbmQgPSBlbGVtZW50Q2hpbGRyZW4odGFibGVFbGVtZW50KS5lbmQo
KTsKKyAgICBmb3IgKGF1dG8gY2hpbGQgPSBlbGVtZW50Q2hpbGRyZW4odGFibGVFbGVtZW50KS5i
ZWdpbigpOyBjaGlsZCAhPSBlbmQ7ICsrY2hpbGQpIHsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNU
YWdOYW1lKGNvbFRhZykgfHwgY2hpbGQtPmhhc1RhZ05hbWUoY29sZ3JvdXBUYWcpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NoaWxk
SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRJdGVyYXRv
ci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkSXRlcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ2hpbGRJdGVyYXRvcl9oCisjZGVmaW5lIENo
aWxkSXRlcmF0b3JfaAorCisjaW5jbHVkZSAiRWxlbWVudFRyYXZlcnNhbC5oIgorCisjaWZuZGVm
IE5ERUJVRworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CitjbGFzcyBDaGlsZEl0ZXJh
dG9yIHsKK3B1YmxpYzoKKyAgICBDaGlsZEl0ZXJhdG9yKCk7CisgICAgQ2hpbGRJdGVyYXRvcihF
bGVtZW50VHlwZSogY3VycmVudCk7CisgICAgQ2hpbGRJdGVyYXRvciYgb3BlcmF0b3IrKygpOwor
ICAgIEVsZW1lbnRUeXBlJiBvcGVyYXRvciooKSB7IHJldHVybiAqbV9jdXJyZW50OyB9CisgICAg
RWxlbWVudFR5cGUqIG9wZXJhdG9yLT4oKSB7IHJldHVybiBtX2N1cnJlbnQ7IH0KKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgQ2hpbGRJdGVyYXRvciYgb3RoZXIpIGNvbnN0OworCitwcml2YXRl
OgorICAgIEVsZW1lbnRUeXBlKiBtX2N1cnJlbnQ7CisjaWZuZGVmIE5ERUJVRworICAgIE93blB0
cjxOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24+IG1fbm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOwor
ICAgIHVpbnQ2NF90IG1faW5pdGlhbERPTVRyZWVWZXJzaW9uOworI2VuZGlmCit9OworCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGUsIHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CitjbGFz
cyBDaGlsZEl0ZXJhdG9yQWRhcHRlciB7CitwdWJsaWM6CisgICAgQ2hpbGRJdGVyYXRvckFkYXB0
ZXIoQ29udGFpbmVyVHlwZSogcm9vdCk7CisgICAgQ2hpbGRJdGVyYXRvcjxFbGVtZW50VHlwZT4g
YmVnaW4oKTsKKyAgICBDaGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBlbmQoKTsKKworcHJpdmF0
ZToKKyAgICBjb25zdCBDb250YWluZXJUeXBlKiBtX3Jvb3Q7Cit9OworCitDaGlsZEl0ZXJhdG9y
QWRhcHRlcjxFbGVtZW50LCBDb250YWluZXJOb2RlPiBlbGVtZW50Q2hpbGRyZW4oQ29udGFpbmVy
Tm9kZSogcm9vdCk7CitDaGlsZEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50LCBOb2RlPiBlbGVtZW50
Q2hpbGRyZW4oTm9kZSogcm9vdCk7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+IENo
aWxkSXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlLCBDb250YWluZXJOb2RlPiBjaGlsZHJlbk9m
VHlwZShDb250YWluZXJOb2RlKiByb290KTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlw
ZT4gQ2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGUsIE5vZGU+IGNoaWxkcmVuT2ZUeXBl
KE5vZGUqIHJvb3QpOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CitpbmxpbmUg
Q2hpbGRJdGVyYXRvcjxFbGVtZW50VHlwZT46OkNoaWxkSXRlcmF0b3IoKQorICAgIDogbV9jdXJy
ZW50KG51bGxwdHIpCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9pbml0aWFsRE9NVHJlZVZlcnNp
b24oMCkKKyNlbmRpZgoreworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Citp
bmxpbmUgQ2hpbGRJdGVyYXRvcjxFbGVtZW50VHlwZT46OkNoaWxkSXRlcmF0b3IoRWxlbWVudFR5
cGUqIGN1cnJlbnQpCisgICAgOiBtX2N1cnJlbnQoY3VycmVudCkKKyNpZm5kZWYgTkRFQlVHCisg
ICAgLCBtX25vRXZlbnREaXNwYXRjaEFzc2VydGlvbihhZG9wdFB0cihuZXcgTm9FdmVudERpc3Bh
dGNoQXNzZXJ0aW9uKSkKKyAgICAsIG1faW5pdGlhbERPTVRyZWVWZXJzaW9uKG1fY3VycmVudCA/
IG1fY3VycmVudC0+ZG9jdW1lbnQoKS0+ZG9tVHJlZVZlcnNpb24oKSA6IDApCisjZW5kaWYKK3sK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgoraW5saW5lIENoaWxkSXRlcmF0
b3I8RWxlbWVudFR5cGU+JiBDaGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6b3BlcmF0b3IrKygp
Cit7CisgICAgQVNTRVJUKG1fY3VycmVudCk7CisgICAgQVNTRVJUKG1fY3VycmVudC0+ZG9jdW1l
bnQoKS0+ZG9tVHJlZVZlcnNpb24oKSA9PSBtX2luaXRpYWxET01UcmVlVmVyc2lvbik7CisgICAg
bV9jdXJyZW50ID0gVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6bmV4dFNpYmxpbmcobV9jdXJyZW50
KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlw
ZT4KK2lubGluZSBib29sIENoaWxkSXRlcmF0b3I8RWxlbWVudFR5cGU+OjpvcGVyYXRvciE9KGNv
bnN0IENoaWxkSXRlcmF0b3ImIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX2N1cnJlbnQg
IT0gb3RoZXIubV9jdXJyZW50OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGUs
IHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CitpbmxpbmUgQ2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxl
bWVudFR5cGUsIENvbnRhaW5lclR5cGU+OjpDaGlsZEl0ZXJhdG9yQWRhcHRlcihDb250YWluZXJU
eXBlKiByb290KQorICAgIDogbV9yb290KHJvb3QpCit7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBFbGVtZW50VHlwZSwgdHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KK2lubGluZSBDaGlsZEl0ZXJh
dG9yPEVsZW1lbnRUeXBlPiBDaGlsZEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZSwgQ29udGFp
bmVyVHlwZT46OmJlZ2luKCkKK3sKKyAgICByZXR1cm4gQ2hpbGRJdGVyYXRvcjxFbGVtZW50VHlw
ZT4oVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RDaGlsZChtX3Jvb3QpKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlLCB0eXBlbmFtZSBDb250YWluZXJUeXBlPgoraW5s
aW5lIENoaWxkSXRlcmF0b3I8RWxlbWVudFR5cGU+IENoaWxkSXRlcmF0b3JBZGFwdGVyPEVsZW1l
bnRUeXBlLCBDb250YWluZXJUeXBlPjo6ZW5kKCkKK3sKKyAgICByZXR1cm4gQ2hpbGRJdGVyYXRv
cjxFbGVtZW50VHlwZT4oKTsKK30KKworaW5saW5lIENoaWxkSXRlcmF0b3JBZGFwdGVyPEVsZW1l
bnQsIENvbnRhaW5lck5vZGU+IGVsZW1lbnRDaGlsZHJlbihDb250YWluZXJOb2RlKiByb290KQor
eworICAgIHJldHVybiBDaGlsZEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50LCBDb250YWluZXJOb2Rl
Pihyb290KTsKK30KKworaW5saW5lIENoaWxkSXRlcmF0b3JBZGFwdGVyPEVsZW1lbnQsIE5vZGU+
IGVsZW1lbnRDaGlsZHJlbihOb2RlKiByb290KQoreworICAgIHJldHVybiBDaGlsZEl0ZXJhdG9y
QWRhcHRlcjxFbGVtZW50LCBOb2RlPihyb290KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEVs
ZW1lbnRUeXBlPgoraW5saW5lIENoaWxkSXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlLCBDb250
YWluZXJOb2RlPiBjaGlsZHJlbk9mVHlwZShDb250YWluZXJOb2RlKiByb290KQoreworICAgIHJl
dHVybiBDaGlsZEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZSwgQ29udGFpbmVyTm9kZT4ocm9v
dCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KK2lubGluZSBDaGlsZEl0
ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZSwgTm9kZT4gY2hpbGRyZW5PZlR5cGUoTm9kZSogcm9v
dCkKK3sKKyAgICByZXR1cm4gQ2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGUsIE5vZGU+
KHJvb3QpOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Rlc2Nl
bmRhbnRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXNjZW5k
YW50SXRlcmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXNjZW5k
YW50SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGVzY2VuZGFudEl0
ZXJhdG9yX2gKKyNkZWZpbmUgRGVzY2VuZGFudEl0ZXJhdG9yX2gKKworI2luY2x1ZGUgIkVsZW1l
bnRUcmF2ZXJzYWwuaCIKKworI2lmbmRlZiBOREVCVUcKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1l
bnRUeXBlPgorY2xhc3MgRGVzY2VuZGFudEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBEZXNjZW5k
YW50SXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSogcm9vdCk7CisgICAgRGVzY2VuZGFudEl0
ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHJvb3QsIEVsZW1lbnRUeXBlKiBjdXJyZW50KTsK
KyAgICBEZXNjZW5kYW50SXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKyAgICBFbGVtZW50VHlwZSYg
b3BlcmF0b3IqKCkgeyByZXR1cm4gKm1fY3VycmVudDsgfQorICAgIEVsZW1lbnRUeXBlKiBvcGVy
YXRvci0+KCkgeyByZXR1cm4gbV9jdXJyZW50OyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IERlc2NlbmRhbnRJdGVyYXRvciYgb3RoZXIpIGNvbnN0OworCitwcml2YXRlOgorICAgIGNvbnN0
IENvbnRhaW5lck5vZGUqIG1fcm9vdDsKKyAgICBFbGVtZW50VHlwZSogbV9jdXJyZW50OworI2lm
bmRlZiBOREVCVUcKKyAgICBPd25QdHI8Tm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uPiBtX25vRXZl
bnREaXNwYXRjaEFzc2VydGlvbjsKKyAgICB1aW50NjRfdCBtX2luaXRpYWxET01UcmVlVmVyc2lv
bjsKKyNlbmRpZgorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlLCB0eXBlbmFt
ZSBDb250YWluZXJUeXBlPgorY2xhc3MgRGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlciB7CitwdWJs
aWM6CisgICAgRGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcihDb250YWluZXJUeXBlKiByb290KTsK
KyAgICBEZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+IGJlZ2luKCk7CisgICAgRGVzY2Vu
ZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBlbmQoKTsKKworcHJpdmF0ZToKKyAgICBDb250YWlu
ZXJUeXBlKiBtX3Jvb3Q7Cit9OworCitEZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnQs
IENvbnRhaW5lck5vZGU+IGVsZW1lbnREZXNjZW5kYW50cyhDb250YWluZXJOb2RlKiByb290KTsK
K0Rlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudCwgTm9kZT4gZWxlbWVudERlc2NlbmRh
bnRzKE5vZGUqIHJvb3QpOwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPiBEZXNjZW5k
YW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlLCBDb250YWluZXJOb2RlPiBkZXNjZW5kYW50
c09mVHlwZShDb250YWluZXJOb2RlKiByb290KTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50
VHlwZT4gRGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZSwgTm9kZT4gZGVzY2Vu
ZGFudHNPZlR5cGUoTm9kZSogcm9vdCk7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlw
ZT4KK2lubGluZSBEZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpEZXNjZW5kYW50SXRl
cmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSogcm9vdCkKKyAgICA6IG1fcm9vdChyb290KQorICAg
ICwgbV9jdXJyZW50KG51bGxwdHIpCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9pbml0aWFsRE9N
VHJlZVZlcnNpb24oMCkKKyNlbmRpZgoreworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVu
dFR5cGU+CitpbmxpbmUgRGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6RGVzY2VuZGFu
dEl0ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHJvb3QsIEVsZW1lbnRUeXBlKiBjdXJyZW50
KQorICAgIDogbV9yb290KHJvb3QpCisgICAgLCBtX2N1cnJlbnQoY3VycmVudCkKKyNpZm5kZWYg
TkRFQlVHCisgICAgLCBtX25vRXZlbnREaXNwYXRjaEFzc2VydGlvbihhZG9wdFB0cihuZXcgTm9F
dmVudERpc3BhdGNoQXNzZXJ0aW9uKSkKKyAgICAsIG1faW5pdGlhbERPTVRyZWVWZXJzaW9uKG1f
Y3VycmVudCA/IG1fY3VycmVudC0+ZG9jdW1lbnQoKS0+ZG9tVHJlZVZlcnNpb24oKSA6IDApCisj
ZW5kaWYKK3sKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgoraW5saW5lIERl
c2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4mIERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50
VHlwZT46Om9wZXJhdG9yKysoKQoreworICAgIEFTU0VSVChtX2N1cnJlbnQpOworICAgIEFTU0VS
VChtX2N1cnJlbnQtPmRvY3VtZW50KCktPmRvbVRyZWVWZXJzaW9uKCkgPT0gbV9pbml0aWFsRE9N
VHJlZVZlcnNpb24pOworICAgIG1fY3VycmVudCA9IFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Om5l
eHQobV9jdXJyZW50LCBtX3Jvb3QpOworICAgIHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIEVsZW1lbnRUeXBlPgoraW5saW5lIGJvb2wgRGVzY2VuZGFudEl0ZXJhdG9yPEVs
ZW1lbnRUeXBlPjo6b3BlcmF0b3IhPShjb25zdCBEZXNjZW5kYW50SXRlcmF0b3ImIG90aGVyKSBj
b25zdAoreworICAgIEFTU0VSVChtX3Jvb3QgPT0gb3RoZXIubV9yb290KTsKKyAgICByZXR1cm4g
bV9jdXJyZW50ICE9IG90aGVyLm1fY3VycmVudDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEVs
ZW1lbnRUeXBlLCB0eXBlbmFtZSBDb250YWluZXJUeXBlPgoraW5saW5lIERlc2NlbmRhbnRJdGVy
YXRvckFkYXB0ZXI8RWxlbWVudFR5cGUsIENvbnRhaW5lclR5cGU+OjpEZXNjZW5kYW50SXRlcmF0
b3JBZGFwdGVyKENvbnRhaW5lclR5cGUqIHJvb3QpCisgICAgOiBtX3Jvb3Qocm9vdCkKK3sKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlLCB0eXBlbmFtZSBDb250YWluZXJUeXBl
PgoraW5saW5lIERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4gRGVzY2VuZGFudEl0ZXJh
dG9yQWRhcHRlcjxFbGVtZW50VHlwZSwgQ29udGFpbmVyVHlwZT46OmJlZ2luKCkKK3sKKyAgICBp
ZiAoIW1fcm9vdC0+aXNDb250YWluZXJOb2RlKCkpCisgICAgICAgIHJldHVybiBEZXNjZW5kYW50
SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcm9vdCk7CisgICAgcmV0dXJuIERlc2NlbmRhbnRJdGVy
YXRvcjxFbGVtZW50VHlwZT4obV9yb290LCBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdFdp
dGhpbihzdGF0aWNfY2FzdDxDb250YWluZXJOb2RlKj4obV9yb290KSkpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGUsIHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CitpbmxpbmUg
RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBEZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVy
PEVsZW1lbnRUeXBlLCBDb250YWluZXJUeXBlPjo6ZW5kKCkKK3sKKyAgICByZXR1cm4gRGVzY2Vu
ZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3Jvb3QpOworfQorCitpbmxpbmUgRGVzY2VuZGFu
dEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50LCBDb250YWluZXJOb2RlPiBlbGVtZW50RGVzY2VuZGFu
dHMoQ29udGFpbmVyTm9kZSogcm9vdCkKK3sKKyAgICByZXR1cm4gRGVzY2VuZGFudEl0ZXJhdG9y
QWRhcHRlcjxFbGVtZW50LCBDb250YWluZXJOb2RlPihyb290KTsKK30KKworaW5saW5lIERlc2Nl
bmRhbnRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudCwgTm9kZT4gZWxlbWVudERlc2NlbmRhbnRzKE5v
ZGUqIHJvb3QpCit7CisgICAgcmV0dXJuIERlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXI8RWxlbWVu
dCwgTm9kZT4ocm9vdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KK2lu
bGluZSBEZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlLCBDb250YWluZXJOb2Rl
PiBkZXNjZW5kYW50c09mVHlwZShDb250YWluZXJOb2RlKiByb290KQoreworICAgIHJldHVybiBE
ZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlLCBDb250YWluZXJOb2RlPihyb290
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgoraW5saW5lIERlc2NlbmRh
bnRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGUsIE5vZGU+IGRlc2NlbmRhbnRzT2ZUeXBlKE5v
ZGUqIHJvb3QpCit7CisgICAgcmV0dXJuIERlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXI8RWxlbWVu
dFR5cGUsIE5vZGU+KHJvb3QpOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiAxNTQ1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiQ1NTU3R5
bGVTaGVldC5oIgogI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkNoaWxkSXRlcmF0b3IuaCIKICNpbmNs
dWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDb21t
ZW50LmgiCkBAIC00OSw2ICs1MCw3IEBACiAjaW5jbHVkZSAiRE9NTmFtZWRGbG93Q29sbGVjdGlv
bi5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgi
CisjaW5jbHVkZSAiRGVzY2VuZGFudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRGljdGlvbmFyeS5o
IgogI2luY2x1ZGUgIkRvY3VtZW50RXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJh
Z21lbnQuaCIKQEAgLTU5LDcgKzYxLDYgQEAKICNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKICNp
bmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRWxlbWVu
dFRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIkVudGl0eVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkV2
ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRGYWN0b3J5LmgiCkBAIC02NzUsMTAgKzY3NiwxMSBAQCB2
b2lkIERvY3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcChUcmVlU2NvCiB7CiAgICAgQVNTRVJUKHNj
b3BlKTsKICAgICBDb250YWluZXJOb2RlKiByb290Tm9kZSA9IHNjb3BlLT5yb290Tm9kZSgpOwot
ICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGlu
KHJvb3ROb2RlKTsgZWxlbWVudDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxl
bWVudCwgcm9vdE5vZGUpKSB7CisgICAgYXV0byBlbmQgPSBlbGVtZW50RGVzY2VuZGFudHMocm9v
dE5vZGUpLmVuZCgpOworICAgIGZvciAoYXV0byBlbGVtZW50ID0gZWxlbWVudERlc2NlbmRhbnRz
KHJvb3ROb2RlKS5iZWdpbigpOyBlbGVtZW50ICE9IGVuZDsgKytlbGVtZW50KSB7CiAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgYWNjZXNzS2V5ID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0
ZShhY2Nlc3NrZXlBdHRyKTsKICAgICAgICAgaWYgKCFhY2Nlc3NLZXkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgbV9lbGVtZW50c0J5QWNjZXNzS2V5LnNldChhY2Nlc3NLZXkuaW1wbCgpLCBlbGVt
ZW50KTsKKyAgICAgICAgICAgIG1fZWxlbWVudHNCeUFjY2Vzc0tleS5zZXQoYWNjZXNzS2V5Lmlt
cGwoKSwgJiplbGVtZW50KTsKIAogICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IGVsZW1l
bnQtPnNoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgIGJ1aWxkQWNjZXNzS2V5TWFwKHJvb3QpOwpA
QCAtNzc0LDcgKzc3Niw3IEBAIHZvaWQgRG9jdW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNo
YW4KIHsKICAgICBDb250YWluZXJOb2RlOjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2Vy
LCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOwogICAgIAotICAg
IEVsZW1lbnQqIG5ld0RvY3VtZW50RWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0
aGluKHRoaXMpOworICAgIEVsZW1lbnQqIG5ld0RvY3VtZW50RWxlbWVudCA9ICYqZWxlbWVudENo
aWxkcmVuKHRoaXMpLmJlZ2luKCk7CiAgICAgaWYgKG5ld0RvY3VtZW50RWxlbWVudCA9PSBtX2Rv
Y3VtZW50RWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fZG9jdW1lbnRFbGVtZW50ID0g
bmV3RG9jdW1lbnRFbGVtZW50OwpAQCAtMTk4MCw4ICsxOTgyLDkgQEAgdm9pZCBEb2N1bWVudDo6
YXR0YWNoKCkKIAogICAgIHJlY2FsY1N0eWxlKFN0eWxlOjpGb3JjZSk7CiAKLSAgICBmb3IgKEVs
ZW1lbnQqIGNoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4odGhpcyk7IGNoaWxk
OyBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGNoaWxkKSkKLSAgICAgICAg
U3R5bGU6OmF0dGFjaFJlbmRlclRyZWUoY2hpbGQpOworICAgIGF1dG8gZW5kID0gZWxlbWVudERl
c2NlbmRhbnRzKHRoaXMpLmVuZCgpOworICAgIGZvciAoYXV0byBjaGlsZCA9IGVsZW1lbnREZXNj
ZW5kYW50cyh0aGlzKS5iZWdpbigpOyBjaGlsZCAhPSBlbmQ7ICsrY2hpbGQpCisgICAgICAgIFN0
eWxlOjphdHRhY2hSZW5kZXJUcmVlKCYqY2hpbGQpOwogCiAgICAgc2V0QXR0YWNoZWQodHJ1ZSk7
CiB9CkBAIC0yMDM3LDggKzIwNDAsOSBAQCB2b2lkIERvY3VtZW50OjpkZXRhY2goKQogICAgIG1f
Zm9jdXNlZEVsZW1lbnQgPSAwOwogICAgIG1fYWN0aXZlRWxlbWVudCA9IDA7CiAKLSAgICBmb3Ig
KEVsZW1lbnQqIGNoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4odGhpcyk7IGNo
aWxkOyBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGNoaWxkKSkKLSAgICAg
ICAgU3R5bGU6OmRldGFjaFJlbmRlclRyZWUoY2hpbGQpOworICAgIGF1dG8gZW5kID0gZWxlbWVu
dERlc2NlbmRhbnRzKHRoaXMpLmVuZCgpOworICAgIGZvciAoYXV0byBjaGlsZCA9IGVsZW1lbnRE
ZXNjZW5kYW50cyh0aGlzKS5iZWdpbigpOyBjaGlsZCAhPSBlbmQ7ICsrY2hpbGQpCisgICAgICAg
IFN0eWxlOjpkZXRhY2hSZW5kZXJUcmVlKCYqY2hpbGQpOwogCiAgICAgY2xlYXJDaGlsZE5lZWRz
U3R5bGVSZWNhbGMoKTsKICAgICBzZXRBdHRhY2hlZChmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTU0NTM5KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDEwICszMSwxMCBAQAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
ICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgi
CisjaW5jbHVkZSAiQ2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCi0jaW5jbHVkZSAiRWxl
bWVudFRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEZvbnRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEludGVyY2hhbmdlLmgiCkBAIC00NDIsMTIgKzQ0Miwx
NSBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpjbGVhbnVwVW5zdHlsZWRBCiAgICAgLy8gY2Fu
IGJlIHByb3BhZ2F0ZWQsIHdoaWNoIGNhbiByZXN1bHQgaW4gbW9yZSBzcGxpdHRpbmcuIElmIGEg
ZHVtbXkgc3BhbiBnZXRzCiAgICAgLy8gY2xvbmVkL3NwbGl0LCB0aGUgbmV3IG5vZGUgaXMgYWx3
YXlzIGEgc2libGluZyBvZiBpdC4gVGhlcmVmb3JlLCB3ZSBzY2FuCiAgICAgLy8gYWxsIHRoZSBj
aGlsZHJlbiBvZiB0aGUgZHVtbXkncyBwYXJlbnQKLSAgICBFbGVtZW50KiBuZXh0OwotICAgIGZv
ciAoRWxlbWVudCogZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKGR1bW15
U3BhbkFuY2VzdG9yKTsgZWxlbWVudDsgZWxlbWVudCA9IG5leHQpIHsKLSAgICAgICAgbmV4dCA9
IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGVsZW1lbnQpOwotICAgICAgICBpZiAoaXNT
cGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVkU3R5bGVTcGFuKGVsZW1lbnQpKQotICAgICAg
ICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtZW50KTsKKworICAgIFZlY3Rv
cjxFbGVtZW50Kj4gdG9SZW1vdmU7CisgICAgYXV0byBlbmQgPSBlbGVtZW50Q2hpbGRyZW4oZHVt
bXlTcGFuQW5jZXN0b3IpLmVuZCgpOworICAgIGZvciAoYXV0byBjaGlsZCA9IGVsZW1lbnRDaGls
ZHJlbihkdW1teVNwYW5BbmNlc3RvcikuYmVnaW4oKTsgY2hpbGQgIT0gZW5kOyArK2NoaWxkKSB7
CisgICAgICAgIGlmIChpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4o
JipjaGlsZCkpCisgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoJipjaGlsZCk7CiAgICAgfQor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b1JlbW92ZS5zaXplKCk7ICsraSkKKyAgICAg
ICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbih0b1JlbW92ZVtpXSk7CiB9CiAKIEhUTUxF
bGVtZW50KiBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRBbmNlc3RvcnNXaXRoVW5pY29kZUJpZGko
Tm9kZSogbm9kZSwgYm9vbCBiZWZvcmUsIFdyaXRpbmdEaXJlY3Rpb24gYWxsb3dlZERpcmVjdGlv
bikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDE1NDUzOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzks
OSArMzksOSBAQAogI2lmIEVOQUJMRShERUxFVElPTl9VSSkKICNpbmNsdWRlICJEZWxldGVCdXR0
b25Db250cm9sbGVyLmgiCiAjZW5kaWYKKyNpbmNsdWRlICJEZXNjZW5kYW50SXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCi0jaW5j
bHVkZSAiRWxlbWVudFRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNp
bmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpA
QCAtMTAxLDE0ICsxMDEsMTUgQEAgc3RhdGljIHZvaWQgY29tcGxldGVVUkxzKERvY3VtZW50RnJh
Z21lbgogCiAgICAgS1VSTCBwYXJzZWRCYXNlVVJMKFBhcnNlZFVSTFN0cmluZywgYmFzZVVSTCk7
CiAKLSAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdp
dGhpbihmcmFnbWVudCk7IGVsZW1lbnQ7IGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0
KGVsZW1lbnQsIGZyYWdtZW50KSkgeworICAgIGF1dG8gZW5kID0gZWxlbWVudERlc2NlbmRhbnRz
KGZyYWdtZW50KS5lbmQoKTsKKyAgICBmb3IgKGF1dG8gZWxlbWVudCA9IGVsZW1lbnREZXNjZW5k
YW50cyhmcmFnbWVudCkuYmVnaW4oKTsgZWxlbWVudCAhPSBlbmQ7ICsrZWxlbWVudCkgewogICAg
ICAgICBpZiAoIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBlbGVtZW50LT5hdHRyaWJ1dGVDb3VudCgpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAg
ICAgIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlID0gZWxlbWVudC0+YXR0cmlidXRlQXQoaSk7
CiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNVUkxBdHRyaWJ1dGUoYXR0cmlidXRlKSAmJiAh
YXR0cmlidXRlLnZhbHVlKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBw
ZW5kKEF0dHJpYnV0ZUNoYW5nZShlbGVtZW50LCBhdHRyaWJ1dGUubmFtZSgpLCBLVVJMKHBhcnNl
ZEJhc2VVUkwsIGF0dHJpYnV0ZS52YWx1ZSgpKS5zdHJpbmcoKSkpOworICAgICAgICAgICAgICAg
IGNoYW5nZXMuYXBwZW5kKEF0dHJpYnV0ZUNoYW5nZSgmKmVsZW1lbnQsIGF0dHJpYnV0ZS5uYW1l
KCksIEtVUkwocGFyc2VkQmFzZVVSTCwgYXR0cmlidXRlLnZhbHVlKCkpLnN0cmluZygpKSk7CiAg
ICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNTQ1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogI2luY2x1ZGUgIkhUTUxN
YXBFbGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJEZXNjZW5k
YW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVsZW1lbnRU
cmF2ZXJzYWwuaCIKICNpbmNsdWRlICJIVE1MQXJlYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKQEAgLTYyLDEwICs2
MiwxMiBAQCBIVE1MTWFwRWxlbWVudDo6fkhUTUxNYXBFbGVtZW50KCkKIGJvb2wgSFRNTE1hcEVs
ZW1lbnQ6Om1hcE1vdXNlRXZlbnQoTGF5b3V0UG9pbnQgbG9jYXRpb24sIGNvbnN0IExheW91dFNp
emUmIHNpemUsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKIHsKICAgICBIVE1MQXJlYUVsZW1lbnQq
IGRlZmF1bHRBcmVhID0gMDsKLSAgICBmb3IgKEhUTUxBcmVhRWxlbWVudCogYXJlYSA9IFRyYXZl
cnNhbDxIVE1MQXJlYUVsZW1lbnQ+OjpmaXJzdFdpdGhpbih0aGlzKTsgYXJlYTsgYXJlYSA9IFRy
YXZlcnNhbDxIVE1MQXJlYUVsZW1lbnQ+OjpuZXh0KGFyZWEsIHRoaXMpKSB7CisKKyAgICBhdXRv
IGVuZCA9IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxBcmVhRWxlbWVudD4odGhpcykuZW5kKCk7Cisg
ICAgZm9yIChhdXRvIGFyZWEgPSBkZXNjZW5kYW50c09mVHlwZTxIVE1MQXJlYUVsZW1lbnQ+KHRo
aXMpLmJlZ2luKCk7IGFyZWEgIT0gZW5kOyArK2FyZWEpIHsKICAgICAgICAgaWYgKGFyZWEtPmlz
RGVmYXVsdCgpKSB7CiAgICAgICAgICAgICBpZiAoIWRlZmF1bHRBcmVhKQotICAgICAgICAgICAg
ICAgIGRlZmF1bHRBcmVhID0gYXJlYTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0QXJlYSA9ICYq
YXJlYTsKICAgICAgICAgfSBlbHNlIGlmIChhcmVhLT5tYXBNb3VzZUV2ZW50KGxvY2F0aW9uLCBz
aXplLCByZXN1bHQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTQ1MzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKICNp
bmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJBdHRyaWJ1dGUu
aCIKKyNpbmNsdWRlICJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5j
bHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2xpZW50UmVjdC5oIgpAQCAtNDAsNyAr
NDEsNiBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJEaWFnbm9z
dGljTG9nZ2luZ0tleXMuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUg
IkVsZW1lbnRUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50
TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCkBAIC05MjcsOSArOTI3LDEwIEBA
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TWVkaWFSZXNvdXIKICAgICAgICAgLy8gT3Ro
ZXJ3aXNlLCBpZiB0aGUgbWVkaWEgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgc3JjIGF0dHJpYnV0
ZSBidXQgaGFzIGEgc291cmNlIAogICAgICAgICAvLyBlbGVtZW50IGNoaWxkLCB0aGVuIGxldCBt
b2RlIGJlIGNoaWxkcmVuIGFuZCBsZXQgY2FuZGlkYXRlIGJlIHRoZSBmaXJzdCBzdWNoIAogICAg
ICAgICAvLyBzb3VyY2UgZWxlbWVudCBjaGlsZCBpbiB0cmVlIG9yZGVyLgotICAgICAgICBpZiAo
YXV0byBzb3VyY2VFbGVtZW50ID0gVHJhdmVyc2FsPEhUTUxTb3VyY2VFbGVtZW50Pjo6Zmlyc3RD
aGlsZCh0aGlzKSkgeworICAgICAgICBhdXRvIHNvdXJjZSA9IGNoaWxkcmVuT2ZUeXBlPEhUTUxT
b3VyY2VFbGVtZW50Pih0aGlzKS5iZWdpbigpOworICAgICAgICBpZiAoc291cmNlICE9IGNoaWxk
cmVuT2ZUeXBlPEhUTUxTb3VyY2VFbGVtZW50Pih0aGlzKS5lbmQoKSkgewogICAgICAgICAgICAg
bW9kZSA9IGNoaWxkcmVuOwotICAgICAgICAgICAgbV9uZXh0Q2hpbGROb2RlVG9Db25zaWRlciA9
IHNvdXJjZUVsZW1lbnQ7CisgICAgICAgICAgICBtX25leHRDaGlsZE5vZGVUb0NvbnNpZGVyID0g
Jipzb3VyY2U7CiAgICAgICAgICAgICBtX2N1cnJlbnRTb3VyY2VOb2RlID0gMDsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGUgbWVkaWEgZWxlbWVudCBoYXMg
bmVpdGhlciBhIHNyYyBhdHRyaWJ1dGUgbm9yIGEgc291cmNlIGVsZW1lbnQgCkBAIC0xNDE3LDcg
KzE0MTgsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja01vZGVDaGFuCiAgICAg
Ym9vbCB0cmFja0lzTG9hZGVkID0gdHJ1ZTsKICAgICBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09
IFRleHRUcmFjazo6VHJhY2tFbGVtZW50KSB7CiAgICAgICAgIHRyYWNrSXNMb2FkZWQgPSBmYWxz
ZTsKLSAgICAgICAgZm9yIChhdXRvIHRyYWNrRWxlbWVudCA9IFRyYXZlcnNhbDxIVE1MVHJhY2tF
bGVtZW50Pjo6Zmlyc3RDaGlsZCh0aGlzKTsgdHJhY2tFbGVtZW50OyB0cmFja0VsZW1lbnQgPSBU
cmF2ZXJzYWw8SFRNTFRyYWNrRWxlbWVudD46Om5leHRTaWJsaW5nKHRyYWNrRWxlbWVudCkpIHsK
KyAgICAgICAgYXV0byBlbmQgPSBjaGlsZHJlbk9mVHlwZTxIVE1MVHJhY2tFbGVtZW50Pih0aGlz
KS5lbmQoKTsKKyAgICAgICAgZm9yIChhdXRvIHRyYWNrRWxlbWVudCA9IGNoaWxkcmVuT2ZUeXBl
PEhUTUxUcmFja0VsZW1lbnQ+KHRoaXMpLmJlZ2luKCk7IHRyYWNrRWxlbWVudCAhPSBlbmQ7ICsr
dHJhY2tFbGVtZW50KSB7CiAgICAgICAgICAgICBpZiAodHJhY2tFbGVtZW50LT50cmFjaygpID09
IHRyYWNrKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRyYWNrRWxlbWVudC0+cmVhZHlTdGF0ZSgp
ID09IEhUTUxUcmFja0VsZW1lbnQ6OkxPQURJTkcgfHwgdHJhY2tFbGVtZW50LT5yZWFkeVN0YXRl
KCkgPT0gSFRNTFRyYWNrRWxlbWVudDo6TE9BREVEKQogICAgICAgICAgICAgICAgICAgICB0cmFj
a0lzTG9hZGVkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209596</attachid>
            <date>2013-08-25 11:51:54 -0700</date>
            <delta_ts>2013-08-25 13:56:06 -0700</delta_ts>
            <desc>another</desc>
            <filename>element-iterators-4.patch</filename>
            <type>text/plain</type>
            <size>32650</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBACisyMDEzLTA4LTI1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBFbGVtZW50IGNoaWxkIGFuZCBk
ZXNjZW5kYW50IGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTIwMjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIGl0ZXJhdG9ycyBmb3IgRWxlbWVudCBjaGlsZHJlbiBhbmQgZGVzY2Vu
ZGFudHMuCisgICAgICAgIAorICAgICAgICBUbyBpdGVyYXRlIG92ZXIgZWxlbWVudCBjaGlsZHJl
bjoKKyAgICAgICAgCisgICAgICAgICNpbmNsdWRlICJDaGlsZEl0ZXJhdG9yLmgiCisgICAgICAg
IAorICAgICAgICBhdXRvIGVuZCA9IGVsZW1lbnRDaGlsZHJlbih0aGlzKS5lbmQoKTsKKyAgICAg
ICAgZm9yIChhdXRvIGl0ID0gZWxlbWVudENoaWxkcmVuKHRoaXMpLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9ICppdDsKKyAgICAgICAg
ICAgIC4uLgorCisgICAgICAgIGF1dG8gZW5kID0gY2hpbGRyZW5PZlR5cGU8SFRNTEFyZWFFbGVt
ZW50Pih0aGlzKS5lbmQoKTsKKyAgICAgICAgZm9yIChhdXRvIGl0ID0gY2hpbGRyZW5PZlR5cGU8
SFRNTEFyZWFFbGVtZW50Pih0aGlzKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgICAgIEhUTUxBcmVhRWxlbWVudCYgYXJlYSA9ICppdDsKKyAgICAgICAgICAgIC4uLgorCisg
ICAgICAgIFRvIGl0ZXJhdGF0ZSBvdmVyIGVsZW1lbnQgZGVzY2VuZGFudHMgaW4gcHJlLW9yZGVy
OgorICAgICAgICAKKyAgICAgICAgI2luY2x1ZGUgIkRlc2NlbmRhbnRJdGVyYXRvci5oIgorICAg
ICAgICAKKyAgICAgICAgYXV0byBlbmQgPSBlbGVtZW50RGVzY2VuZGFudHModGhpcykuZW5kKCk7
CisgICAgICAgIGZvciAoYXV0byBpdCA9IGVsZW1lbnREZXNjZW5kYW50cyh0aGlzKS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSAqaXQ7
CisgICAgICAgICAgICAuLi4KKworICAgICAgICBhdXRvIGVuZCA9IGRlc2NlbmRhbnRzT2ZUeXBl
PEhUTUxBcmVhRWxlbWVudD4odGhpcykuZW5kKCk7CisgICAgICAgIGZvciAoYXV0byBpdCA9IGRl
c2NlbmRhbnRzT2ZUeXBlPEhUTUxBcmVhRWxlbWVudD4odGhpcykuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgICAgICBIVE1MQXJlYUVsZW1lbnQmIGFyZWE9ICppdDsKKyAgICAg
ICAgICAgIC4uLgorICAgICAgICAgICAgCisgICAgICAgIFRoZXNlIGl0ZXJhdG9ycyBhcmUgY29t
cGF0aWJsZSB3aXRoIEMrKzExIHJhbmdlLWJhc2VkIGZvciBsb29wcy4gSW4gdGhlIGZ1dHVyZSB3
ZSBjYW4gdXNlCisgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50
Q2hpbGRyZW4odGhpcykpCisgICAgICAgICAgICAuLi4KKworICAgICAgICBldGMuCisgICAgICAg
IAorICAgICAgICBUaGUgcGF0Y2ggYWxsIHVzZXMgdGhlIG5ldyBpdGVyYXRvcnMgaW4gYSBmZXcg
cGxhY2VzLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhbnZhc0hhc0ZhbGxiYWNr
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpzaWJsaW5nV2l0aEFyaWFSb2xlKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6aXNEYXRhVGFibGUpOgorICAgICAgICAqIGRvbS9DaGls
ZEl0ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRJdGVyYXRvcjo6b3Bl
cmF0b3IqKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkSXRlcmF0b3I6Om9wZXJhdG9yLT4pOgor
ICAgICAgICAoV2ViQ29yZTo6OjpDaGlsZEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6
b3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6PSk6CisgICAgICAgIChXZWJDb3JlOjo6OkNo
aWxkSXRlcmF0b3JBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6YmVnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6OjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6ZWxlbWVudENoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OmNoaWxkcmVuT2ZUeXBlKToKKyAgICAgICAgKiBkb20vRGVzY2Vu
ZGFudEl0ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGVzY2VuZGFudEl0ZXJh
dG9yOjpvcGVyYXRvciopOgorICAgICAgICAoV2ViQ29yZTo6RGVzY2VuZGFudEl0ZXJhdG9yOjpv
cGVyYXRvci0+KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6RGVzY2VuZGFudEl0ZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6Ojo6b3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6PSk6CisgICAg
ICAgIChXZWJDb3JlOjo6OkRlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6OjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjo6OmVuZCk6CisgICAgICAgIChXZWJD
b3JlOjplbGVtZW50RGVzY2VuZGFudHMpOgorICAgICAgICAoV2ViQ29yZTo6ZGVzY2VuZGFudHNP
ZlR5cGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6YnVpbGRBY2Nlc3NLZXlNYXApOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YXR0YWNoKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkZXRhY2gpOgorICAgICAgICAqIGVkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1h
bmQ6OmNsZWFudXBVbnN0eWxlZEFwcGxlU3R5bGVTcGFucyk6CisgICAgICAgICogZWRpdGluZy9t
YXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGxldGVVUkxzKToKKyAgICAgICAgKiBo
dG1sL0hUTUxNYXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNYXBFbGVtZW50
OjptYXBNb3VzZUV2ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TWVkaWFSZXNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tNb2RlQ2hhbmdl
ZCk6CisKIDIwMTMtMDgtMjUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIE1ha2UgSmF2YVNjcmlwdCBiaW5kaW5nIGZvciBDbGlwYm9hcmQ6OnR5cGVzIG1vcmUgbm9y
bWFsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAxNTQ1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU0ODcsNiArNTQ4Nyw4
IEBACiAJCUU0NTM5MDFFMEVBRkNBQ0EwMDM2OTVDOCAvKiBQYXN0ZWJvYXJkSU9TLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1MzkwMTkwRUFGQ0FD
QTAwMzY5NUM4IC8qIFBhc3RlYm9hcmRJT1MubW0gKi87IH07CiAJCUU0NTM5MDQ2MEVBRkQ2Mzcw
MDM2OTVDOCAvKiBTaGFyZWRUaW1lcklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5MDM1MEVBRkQ2MzcwMDM2OTVDOCAvKiBTaGFyZWRUaW1l
cklPUy5tbSAqLzsgfTsKIAkJRTQ2MkE0QTExMTNFNzFCRTAwNEE0MjIwIC8qIEludFBvaW50SGFz
aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2MkE0
QTAxMTNFNzFCRTAwNEE0MjIwIC8qIEludFBvaW50SGFzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUU0NkEyQjFDMTdDQTY1QjkwMDBEQkNEOCAv
KiBEZXNjZW5kYW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0NkEyQjFCMTdDQTY1QjkwMDBEQkNEOCAvKiBEZXNjZW5kYW50SXRlcmF0
b3IuaCAqLzsgfTsKKwkJRTQ2QTJCMUUxN0NBNzZCMTAwMERCQ0Q4IC8qIENoaWxkSXRlcmF0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NkEyQjFE
MTdDQTc2QjEwMDBEQkNEOCAvKiBDaGlsZEl0ZXJhdG9yLmggKi87IH07CiAJCUU0NzEyN0NBMTYz
NDM4QTEwMEVENkY1QSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0E5N0NFMTYzMDU5RkMwMDVE
Q0Q5OSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCAqLzsgfTsKIAkJRTQ3MTI3Q0Ix
NjM0MzhBRTAwRUQ2RjVBIC8qIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0E5N0NGMTYzMDU5RkMwMDVE
Q0Q5OSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmggKi87IH07CiAJCUU0Nzc4QjdGMTE1
QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0Nzc4QjdEMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1
c3RvbUV2ZW50LmNwcCAqLzsgfTsKQEAgLTEyMjU1LDYgKzEyMjU3LDggQEAKIAkJRTQ1MzkwMTkw
RUFGQ0FDQTAwMzY5NUM4IC8qIFBhc3RlYm9hcmRJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBQYXN0ZWJvYXJkSU9TLm1tOyBwYXRoID0gaW9zL1Bhc3RlYm9h
cmRJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NTM5MDM1MEVBRkQ2Mzcw
MDM2OTVDOCAvKiBTaGFyZWRUaW1lcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IFNoYXJlZFRpbWVySU9TLm1tOyBwYXRoID0gaW9zL1NoYXJlZFRpbWVySU9T
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDYyQTRBMDExM0U3MUJFMDA0QTQy
MjAgLyogSW50UG9pbnRIYXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
dFBvaW50SGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDZBMkIxQjE3Q0E2
NUI5MDAwREJDRDggLyogRGVzY2VuZGFudEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlc2NlbmRhbnRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFNDZBMkIxRDE3Q0E3NkIxMDAwREJDRDggLyogQ2hpbGRJdGVyYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGlsZEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUU0Nzc4QjdEMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3VzdG9tRXZl
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDc3OEI3RTExNUE1ODFBMDBC
NUQzNzIgLyogSlNDdXN0b21FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0N1c3RvbUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0E5N0NF
MTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAwOTYsNiArMjAxMDAsNyBAQAog
CQkJCTkzRUVDMUU2MDlDMjg3NzcwMEM1MTVEMSAvKiBDaGFyYWN0ZXJEYXRhLmlkbCAqLywKIAkJ
CQk5M0Y5MjU0MjBGN0VGNUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAgKi8s
CiAJCQkJOTNGOTI1NDEwRjdFRjVCODAwN0UzN0M5IC8qIENoZWNrZWRSYWRpb0J1dHRvbnMuaCAq
LywKKwkJCQlFNDZBMkIxRDE3Q0E3NkIxMDAwREJDRDggLyogQ2hpbGRJdGVyYXRvci5oICovLAog
CQkJCUQ2MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNw
cCAqLywKIAkJCQlENjE5QTMwNjE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25T
Y29wZS5oICovLAogCQkJCUE4MTg3MjFBMDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0
LmNwcCAqLywKQEAgLTIwMTQzLDYgKzIwMTQ4LDcgQEAKIAkJCQk4MUFDNUFFOTEzMTYzOTJFMDAw
OUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbUxpc3QuaWRsICovLAogCQkJCUE4QzIyOEEwMTFENTcy
MkUwMEQ1QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmNwcCAqLywKIAkJCQlBOEMy
Mjg5RjExRDU3MjJFMDBENUE3RDMgLyogRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5oICovLAor
CQkJCUU0NkEyQjFCMTdDQTY1QjkwMDBEQkNEOCAvKiBEZXNjZW5kYW50SXRlcmF0b3IuaCAqLywK
IAkJCQkzMUZCMUE0RjEyMEE1RDA2MDBEQzAyQTAgLyogRGV2aWNlTW90aW9uQ2xpZW50LmggKi8s
CiAJCQkJMzFGQjFBNTAxMjBBNUQwNjAwREMwMkEwIC8qIERldmljZU1vdGlvbkNvbnRyb2xsZXIu
Y3BwICovLAogCQkJCTMxRkIxQTUxMTIwQTVEMDYwMERDMDJBMCAvKiBEZXZpY2VNb3Rpb25Db250
cm9sbGVyLmggKi8sCkBAIC0yMTE1Nyw2ICsyMTE2Myw3IEBACiAJCQkJQTgwRTZDRTYwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU1ByaW1pdGl2ZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUVE
OEFDMzBDQzQ5QkUwMDBCRkM1NTcgLyogQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTgwRTZDRkYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlFNDZBMkIxRTE3Q0E3NkIxMDAwREJDRDggLyogQ2hpbGRJdGVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzhEMDJCQzYxNTRBMThERjAwQjYyRDA1IC8qIENT
U1Byb3BlcnR5QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTY1ODBGNDA5RDEyQjIw
MDAwRTYxRDcgLyogQ1NTUHJvcGVydHlOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODJFM0Q4
REYxMjJFQTBEMTAwM0FFNUJDIC8qIENTU1Byb3BlcnR5U291cmNlRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yMjg4MSw2ICsyMjg4OCw3IEBACiAJCQkJMzcxRTY1Q0MxMzY2MUVEQzAwQkVFREIw
IC8qIFBhZ2VTZXJpYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzE5N0YyNDE3NTY4OUM0
MDA3Qjk0NDIgLyogUGFnZVRocm90dGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyODRBRTEx
MDQ0N0Q0NTAwRUFFQjUyIC8qIFBhZ2VUcmFuc2l0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAor
CQkJCUU0NkEyQjFDMTdDQTY1QjkwMDBEQkNEOCAvKiBEZXNjZW5kYW50SXRlcmF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxRTFFQ0MzMEM5MUM5MDQwMERDMjU1QiAvKiBQYWdlVVJMUmVjb3Jk
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRkQ1Qjk3QjEzNUNDOTc4MDBENUU5MkEgLyogUGFnZVZp
c2liaWxpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM3N0FCQTAxNURFRkVFRjAwMzFG
RDA0IC8qIFBhZ2luYXRpb24uaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJ
KHJldmlzaW9uIDE1NDU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAj
aW5jbHVkZSAiQWNjZXNzaWJpbGl0eUxpc3RCb3guaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
U3BpbkJ1dHRvbi5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZS5oIgotI2luY2x1ZGUg
IkVsZW1lbnRUcmF2ZXJzYWwuaCIKKyNpbmNsdWRlICJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCkBAIC00MTcsNyArNDE3LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2Fu
dmFzSGFzRgogICAgIC8vIElmIGl0IGhhcyBhbnkgY2hpbGRyZW4gdGhhdCBhcmUgZWxlbWVudHMs
IHdlJ2xsIGFzc3VtZSBpdCBtaWdodCBiZSBmYWxsYmFjawogICAgIC8vIGNvbnRlbnQuIElmIGl0
IGhhcyBubyBjaGlsZHJlbiBvciBpdHMgb25seSBjaGlsZHJlbiBhcmUgbm90IGVsZW1lbnRzCiAg
ICAgLy8gKGUuZy4ganVzdCB0ZXh0IG5vZGVzKSwgaXQgZG9lc24ndCBoYXZlIGZhbGxiYWNrIGNv
bnRlbnQuCi0gICAgcmV0dXJuICEhRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RDaGlsZChub2RlKTsK
KyAgICByZXR1cm4gZWxlbWVudENoaWxkcmVuKG5vZGUpLmJlZ2luKCkgIT0gZWxlbWVudENoaWxk
cmVuKG5vZGUpLmVuZCgpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0lt
YWdlQnV0dG9uKCkgY29uc3QKQEAgLTExMjEsMTEgKzExMjEsMTIgQEAgc3RhdGljIEVsZW1lbnQq
IHNpYmxpbmdXaXRoQXJpYVJvbGUoU3RyaQogICAgIE5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVu
dE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAg
Zm9yIChFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RDaGlsZChwYXJl
bnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoc2li
bGluZykpIHsKKworICAgIGF1dG8gZW5kID0gZWxlbWVudENoaWxkcmVuKHBhcmVudCkuZW5kKCk7
CisgICAgZm9yIChhdXRvIHNpYmxpbmcgPSBlbGVtZW50Q2hpbGRyZW4ocGFyZW50KS5iZWdpbigp
OyBzaWJsaW5nICE9IGVuZDsgKytzaWJsaW5nKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgc2libGluZ0FyaWFSb2xlID0gc2libGluZy0+ZmFzdEdldEF0dHJpYnV0ZShyb2xlQXR0cik7
CiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShzaWJsaW5nQXJpYVJvbGUsIHJvbGUpKQot
ICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmc7CisgICAgICAgICAgICByZXR1cm4gJipzaWJsaW5n
OwogICAgIH0KIAogICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZp
c2lvbiAxNTQ1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw2IEBACiAjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eVRhYmxlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNp
bmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCiAjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5VGFibGUuY3BwCShyZXZpc2lvbiAxNTQ1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaCIKICNpbmNsdWRl
ICJBY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuaCIKICNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5VGFibGVSb3cuaCIKLSNpbmNsdWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCisjaW5jbHVk
ZSAiQ2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhU
TUxUYWJsZUNhcHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQu
aCIKQEAgLTEyNSw3ICsxMjUsOCBAQCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNEYXRhVGFi
bGUoKSBjCiAgICAgICAgIHJldHVybiB0cnVlOyAgICAKIAogICAgIC8vIGlmIHRoZXJlJ3MgYSBj
b2xncm91cCBvciBjb2wgZWxlbWVudCwgaXQncyBwcm9iYWJseSBhIGRhdGEgdGFibGUuCi0gICAg
Zm9yIChFbGVtZW50KiBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0Q2hpbGQodGFibGVF
bGVtZW50KTsgY2hpbGQ7IGNoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoY2hp
bGQpKSB7CisgICAgYXV0byBlbmQgPSBlbGVtZW50Q2hpbGRyZW4odGFibGVFbGVtZW50KS5lbmQo
KTsKKyAgICBmb3IgKGF1dG8gY2hpbGQgPSBlbGVtZW50Q2hpbGRyZW4odGFibGVFbGVtZW50KS5i
ZWdpbigpOyBjaGlsZCAhPSBlbmQ7ICsrY2hpbGQpIHsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNU
YWdOYW1lKGNvbFRhZykgfHwgY2hpbGQtPmhhc1RhZ05hbWUoY29sZ3JvdXBUYWcpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NoaWxk
SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRJdGVyYXRv
ci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkSXRlcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ2hpbGRJdGVyYXRvcl9oCisjZGVmaW5lIENo
aWxkSXRlcmF0b3JfaAorCisjaW5jbHVkZSAiRWxlbWVudFRyYXZlcnNhbC5oIgorCisjaWZuZGVm
IE5ERUJVRworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CitjbGFzcyBDaGlsZEl0ZXJh
dG9yIHsKK3B1YmxpYzoKKyAgICBDaGlsZEl0ZXJhdG9yKCk7CisgICAgQ2hpbGRJdGVyYXRvcihF
bGVtZW50VHlwZSogY3VycmVudCk7CisgICAgQ2hpbGRJdGVyYXRvciYgb3BlcmF0b3IrKygpOwor
ICAgIEVsZW1lbnRUeXBlJiBvcGVyYXRvciooKSB7IHJldHVybiAqbV9jdXJyZW50OyB9CisgICAg
RWxlbWVudFR5cGUqIG9wZXJhdG9yLT4oKSB7IHJldHVybiBtX2N1cnJlbnQ7IH0KKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgQ2hpbGRJdGVyYXRvciYgb3RoZXIpIGNvbnN0OworCitwcml2YXRl
OgorICAgIEVsZW1lbnRUeXBlKiBtX2N1cnJlbnQ7CisjaWZuZGVmIE5ERUJVRworICAgIE93blB0
cjxOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24+IG1fbm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOwor
ICAgIHVpbnQ2NF90IG1faW5pdGlhbERPTVRyZWVWZXJzaW9uOworI2VuZGlmCit9OworCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGUsIHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CitjbGFz
cyBDaGlsZEl0ZXJhdG9yQWRhcHRlciB7CitwdWJsaWM6CisgICAgQ2hpbGRJdGVyYXRvckFkYXB0
ZXIoQ29udGFpbmVyVHlwZSogcm9vdCk7CisgICAgQ2hpbGRJdGVyYXRvcjxFbGVtZW50VHlwZT4g
YmVnaW4oKTsKKyAgICBDaGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBlbmQoKTsKKworcHJpdmF0
ZToKKyAgICBjb25zdCBDb250YWluZXJUeXBlKiBtX3Jvb3Q7Cit9OworCitDaGlsZEl0ZXJhdG9y
QWRhcHRlcjxFbGVtZW50LCBDb250YWluZXJOb2RlPiBlbGVtZW50Q2hpbGRyZW4oQ29udGFpbmVy
Tm9kZSogcm9vdCk7CitDaGlsZEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50LCBOb2RlPiBlbGVtZW50
Q2hpbGRyZW4oTm9kZSogcm9vdCk7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+IENo
aWxkSXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlLCBDb250YWluZXJOb2RlPiBjaGlsZHJlbk9m
VHlwZShDb250YWluZXJOb2RlKiByb290KTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlw
ZT4gQ2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGUsIE5vZGU+IGNoaWxkcmVuT2ZUeXBl
KE5vZGUqIHJvb3QpOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CitpbmxpbmUg
Q2hpbGRJdGVyYXRvcjxFbGVtZW50VHlwZT46OkNoaWxkSXRlcmF0b3IoKQorICAgIDogbV9jdXJy
ZW50KG51bGxwdHIpCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9pbml0aWFsRE9NVHJlZVZlcnNp
b24oMCkKKyNlbmRpZgoreworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Citp
bmxpbmUgQ2hpbGRJdGVyYXRvcjxFbGVtZW50VHlwZT46OkNoaWxkSXRlcmF0b3IoRWxlbWVudFR5
cGUqIGN1cnJlbnQpCisgICAgOiBtX2N1cnJlbnQoY3VycmVudCkKKyNpZm5kZWYgTkRFQlVHCisg
ICAgLCBtX25vRXZlbnREaXNwYXRjaEFzc2VydGlvbihhZG9wdFB0cihuZXcgTm9FdmVudERpc3Bh
dGNoQXNzZXJ0aW9uKSkKKyAgICAsIG1faW5pdGlhbERPTVRyZWVWZXJzaW9uKG1fY3VycmVudCA/
IG1fY3VycmVudC0+ZG9jdW1lbnQoKS0+ZG9tVHJlZVZlcnNpb24oKSA6IDApCisjZW5kaWYKK3sK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgoraW5saW5lIENoaWxkSXRlcmF0
b3I8RWxlbWVudFR5cGU+JiBDaGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6b3BlcmF0b3IrKygp
Cit7CisgICAgQVNTRVJUKG1fY3VycmVudCk7CisgICAgQVNTRVJUKG1fY3VycmVudC0+ZG9jdW1l
bnQoKS0+ZG9tVHJlZVZlcnNpb24oKSA9PSBtX2luaXRpYWxET01UcmVlVmVyc2lvbik7CisgICAg
bV9jdXJyZW50ID0gVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6bmV4dFNpYmxpbmcobV9jdXJyZW50
KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlw
ZT4KK2lubGluZSBib29sIENoaWxkSXRlcmF0b3I8RWxlbWVudFR5cGU+OjpvcGVyYXRvciE9KGNv
bnN0IENoaWxkSXRlcmF0b3ImIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX2N1cnJlbnQg
IT0gb3RoZXIubV9jdXJyZW50OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGUs
IHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CitpbmxpbmUgQ2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxl
bWVudFR5cGUsIENvbnRhaW5lclR5cGU+OjpDaGlsZEl0ZXJhdG9yQWRhcHRlcihDb250YWluZXJU
eXBlKiByb290KQorICAgIDogbV9yb290KHJvb3QpCit7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBFbGVtZW50VHlwZSwgdHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KK2lubGluZSBDaGlsZEl0ZXJh
dG9yPEVsZW1lbnRUeXBlPiBDaGlsZEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZSwgQ29udGFp
bmVyVHlwZT46OmJlZ2luKCkKK3sKKyAgICByZXR1cm4gQ2hpbGRJdGVyYXRvcjxFbGVtZW50VHlw
ZT4oVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RDaGlsZChtX3Jvb3QpKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlLCB0eXBlbmFtZSBDb250YWluZXJUeXBlPgoraW5s
aW5lIENoaWxkSXRlcmF0b3I8RWxlbWVudFR5cGU+IENoaWxkSXRlcmF0b3JBZGFwdGVyPEVsZW1l
bnRUeXBlLCBDb250YWluZXJUeXBlPjo6ZW5kKCkKK3sKKyAgICByZXR1cm4gQ2hpbGRJdGVyYXRv
cjxFbGVtZW50VHlwZT4oKTsKK30KKworaW5saW5lIENoaWxkSXRlcmF0b3JBZGFwdGVyPEVsZW1l
bnQsIENvbnRhaW5lck5vZGU+IGVsZW1lbnRDaGlsZHJlbihDb250YWluZXJOb2RlKiByb290KQor
eworICAgIHJldHVybiBDaGlsZEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50LCBDb250YWluZXJOb2Rl
Pihyb290KTsKK30KKworaW5saW5lIENoaWxkSXRlcmF0b3JBZGFwdGVyPEVsZW1lbnQsIE5vZGU+
IGVsZW1lbnRDaGlsZHJlbihOb2RlKiByb290KQoreworICAgIHJldHVybiBDaGlsZEl0ZXJhdG9y
QWRhcHRlcjxFbGVtZW50LCBOb2RlPihyb290KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEVs
ZW1lbnRUeXBlPgoraW5saW5lIENoaWxkSXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlLCBDb250
YWluZXJOb2RlPiBjaGlsZHJlbk9mVHlwZShDb250YWluZXJOb2RlKiByb290KQoreworICAgIHJl
dHVybiBDaGlsZEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZSwgQ29udGFpbmVyTm9kZT4ocm9v
dCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KK2lubGluZSBDaGlsZEl0
ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZSwgTm9kZT4gY2hpbGRyZW5PZlR5cGUoTm9kZSogcm9v
dCkKK3sKKyAgICByZXR1cm4gQ2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGUsIE5vZGU+
KHJvb3QpOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Rlc2Nl
bmRhbnRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXNjZW5k
YW50SXRlcmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXNjZW5k
YW50SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGVzY2VuZGFudEl0
ZXJhdG9yX2gKKyNkZWZpbmUgRGVzY2VuZGFudEl0ZXJhdG9yX2gKKworI2luY2x1ZGUgIkVsZW1l
bnRUcmF2ZXJzYWwuaCIKKworI2lmbmRlZiBOREVCVUcKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1l
bnRUeXBlPgorY2xhc3MgRGVzY2VuZGFudEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBEZXNjZW5k
YW50SXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSogcm9vdCk7CisgICAgRGVzY2VuZGFudEl0
ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHJvb3QsIEVsZW1lbnRUeXBlKiBjdXJyZW50KTsK
KyAgICBEZXNjZW5kYW50SXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKyAgICBFbGVtZW50VHlwZSYg
b3BlcmF0b3IqKCkgeyByZXR1cm4gKm1fY3VycmVudDsgfQorICAgIEVsZW1lbnRUeXBlKiBvcGVy
YXRvci0+KCkgeyByZXR1cm4gbV9jdXJyZW50OyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IERlc2NlbmRhbnRJdGVyYXRvciYgb3RoZXIpIGNvbnN0OworCitwcml2YXRlOgorICAgIGNvbnN0
IENvbnRhaW5lck5vZGUqIG1fcm9vdDsKKyAgICBFbGVtZW50VHlwZSogbV9jdXJyZW50OworI2lm
bmRlZiBOREVCVUcKKyAgICBPd25QdHI8Tm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uPiBtX25vRXZl
bnREaXNwYXRjaEFzc2VydGlvbjsKKyAgICB1aW50NjRfdCBtX2luaXRpYWxET01UcmVlVmVyc2lv
bjsKKyNlbmRpZgorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlLCB0eXBlbmFt
ZSBDb250YWluZXJUeXBlPgorY2xhc3MgRGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlciB7CitwdWJs
aWM6CisgICAgRGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcihDb250YWluZXJUeXBlKiByb290KTsK
KyAgICBEZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+IGJlZ2luKCk7CisgICAgRGVzY2Vu
ZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBlbmQoKTsKKworcHJpdmF0ZToKKyAgICBDb250YWlu
ZXJUeXBlKiBtX3Jvb3Q7Cit9OworCitEZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnQs
IENvbnRhaW5lck5vZGU+IGVsZW1lbnREZXNjZW5kYW50cyhDb250YWluZXJOb2RlKiByb290KTsK
K0Rlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudCwgTm9kZT4gZWxlbWVudERlc2NlbmRh
bnRzKE5vZGUqIHJvb3QpOwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPiBEZXNjZW5k
YW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlLCBDb250YWluZXJOb2RlPiBkZXNjZW5kYW50
c09mVHlwZShDb250YWluZXJOb2RlKiByb290KTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50
VHlwZT4gRGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZSwgTm9kZT4gZGVzY2Vu
ZGFudHNPZlR5cGUoTm9kZSogcm9vdCk7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlw
ZT4KK2lubGluZSBEZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpEZXNjZW5kYW50SXRl
cmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSogcm9vdCkKKyAgICA6IG1fcm9vdChyb290KQorICAg
ICwgbV9jdXJyZW50KG51bGxwdHIpCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9pbml0aWFsRE9N
VHJlZVZlcnNpb24oMCkKKyNlbmRpZgoreworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVu
dFR5cGU+CitpbmxpbmUgRGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6RGVzY2VuZGFu
dEl0ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHJvb3QsIEVsZW1lbnRUeXBlKiBjdXJyZW50
KQorICAgIDogbV9yb290KHJvb3QpCisgICAgLCBtX2N1cnJlbnQoY3VycmVudCkKKyNpZm5kZWYg
TkRFQlVHCisgICAgLCBtX25vRXZlbnREaXNwYXRjaEFzc2VydGlvbihhZG9wdFB0cihuZXcgTm9F
dmVudERpc3BhdGNoQXNzZXJ0aW9uKSkKKyAgICAsIG1faW5pdGlhbERPTVRyZWVWZXJzaW9uKG1f
Y3VycmVudCA/IG1fY3VycmVudC0+ZG9jdW1lbnQoKS0+ZG9tVHJlZVZlcnNpb24oKSA6IDApCisj
ZW5kaWYKK3sKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgoraW5saW5lIERl
c2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4mIERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50
VHlwZT46Om9wZXJhdG9yKysoKQoreworICAgIEFTU0VSVChtX2N1cnJlbnQpOworICAgIEFTU0VS
VChtX2N1cnJlbnQtPmRvY3VtZW50KCktPmRvbVRyZWVWZXJzaW9uKCkgPT0gbV9pbml0aWFsRE9N
VHJlZVZlcnNpb24pOworICAgIG1fY3VycmVudCA9IFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Om5l
eHQobV9jdXJyZW50LCBtX3Jvb3QpOworICAgIHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIEVsZW1lbnRUeXBlPgoraW5saW5lIGJvb2wgRGVzY2VuZGFudEl0ZXJhdG9yPEVs
ZW1lbnRUeXBlPjo6b3BlcmF0b3IhPShjb25zdCBEZXNjZW5kYW50SXRlcmF0b3ImIG90aGVyKSBj
b25zdAoreworICAgIEFTU0VSVChtX3Jvb3QgPT0gb3RoZXIubV9yb290KTsKKyAgICByZXR1cm4g
bV9jdXJyZW50ICE9IG90aGVyLm1fY3VycmVudDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEVs
ZW1lbnRUeXBlLCB0eXBlbmFtZSBDb250YWluZXJUeXBlPgoraW5saW5lIERlc2NlbmRhbnRJdGVy
YXRvckFkYXB0ZXI8RWxlbWVudFR5cGUsIENvbnRhaW5lclR5cGU+OjpEZXNjZW5kYW50SXRlcmF0
b3JBZGFwdGVyKENvbnRhaW5lclR5cGUqIHJvb3QpCisgICAgOiBtX3Jvb3Qocm9vdCkKK3sKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlLCB0eXBlbmFtZSBDb250YWluZXJUeXBl
PgoraW5saW5lIERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4gRGVzY2VuZGFudEl0ZXJh
dG9yQWRhcHRlcjxFbGVtZW50VHlwZSwgQ29udGFpbmVyVHlwZT46OmJlZ2luKCkKK3sKKyAgICBp
ZiAoIW1fcm9vdC0+aXNDb250YWluZXJOb2RlKCkpCisgICAgICAgIHJldHVybiBEZXNjZW5kYW50
SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcm9vdCk7CisgICAgcmV0dXJuIERlc2NlbmRhbnRJdGVy
YXRvcjxFbGVtZW50VHlwZT4obV9yb290LCBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdFdp
dGhpbihzdGF0aWNfY2FzdDxDb250YWluZXJOb2RlKj4obV9yb290KSkpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGUsIHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CitpbmxpbmUg
RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBEZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVy
PEVsZW1lbnRUeXBlLCBDb250YWluZXJUeXBlPjo6ZW5kKCkKK3sKKyAgICByZXR1cm4gRGVzY2Vu
ZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3Jvb3QpOworfQorCitpbmxpbmUgRGVzY2VuZGFu
dEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50LCBDb250YWluZXJOb2RlPiBlbGVtZW50RGVzY2VuZGFu
dHMoQ29udGFpbmVyTm9kZSogcm9vdCkKK3sKKyAgICByZXR1cm4gRGVzY2VuZGFudEl0ZXJhdG9y
QWRhcHRlcjxFbGVtZW50LCBDb250YWluZXJOb2RlPihyb290KTsKK30KKworaW5saW5lIERlc2Nl
bmRhbnRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudCwgTm9kZT4gZWxlbWVudERlc2NlbmRhbnRzKE5v
ZGUqIHJvb3QpCit7CisgICAgcmV0dXJuIERlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXI8RWxlbWVu
dCwgTm9kZT4ocm9vdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KK2lu
bGluZSBEZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlLCBDb250YWluZXJOb2Rl
PiBkZXNjZW5kYW50c09mVHlwZShDb250YWluZXJOb2RlKiByb290KQoreworICAgIHJldHVybiBE
ZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlLCBDb250YWluZXJOb2RlPihyb290
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgoraW5saW5lIERlc2NlbmRh
bnRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGUsIE5vZGU+IGRlc2NlbmRhbnRzT2ZUeXBlKE5v
ZGUqIHJvb3QpCit7CisgICAgcmV0dXJuIERlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXI8RWxlbWVu
dFR5cGUsIE5vZGU+KHJvb3QpOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiAxNTQ1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiQ1NTU3R5
bGVTaGVldC5oIgogI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkNoaWxkSXRlcmF0b3IuaCIKICNpbmNs
dWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDb21t
ZW50LmgiCkBAIC00OSw2ICs1MCw3IEBACiAjaW5jbHVkZSAiRE9NTmFtZWRGbG93Q29sbGVjdGlv
bi5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgi
CisjaW5jbHVkZSAiRGVzY2VuZGFudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRGljdGlvbmFyeS5o
IgogI2luY2x1ZGUgIkRvY3VtZW50RXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJh
Z21lbnQuaCIKQEAgLTU5LDcgKzYxLDYgQEAKICNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKICNp
bmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRWxlbWVu
dFRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIkVudGl0eVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkV2
ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRGYWN0b3J5LmgiCkBAIC02NzcsMTAgKzY3OCwxMSBAQCB2
b2lkIERvY3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcChUcmVlU2NvCiB7CiAgICAgQVNTRVJUKHNj
b3BlKTsKICAgICBDb250YWluZXJOb2RlKiByb290Tm9kZSA9IHNjb3BlLT5yb290Tm9kZSgpOwot
ICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGlu
KHJvb3ROb2RlKTsgZWxlbWVudDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxl
bWVudCwgcm9vdE5vZGUpKSB7CisgICAgYXV0byBlbmQgPSBlbGVtZW50RGVzY2VuZGFudHMocm9v
dE5vZGUpLmVuZCgpOworICAgIGZvciAoYXV0byBlbGVtZW50ID0gZWxlbWVudERlc2NlbmRhbnRz
KHJvb3ROb2RlKS5iZWdpbigpOyBlbGVtZW50ICE9IGVuZDsgKytlbGVtZW50KSB7CiAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgYWNjZXNzS2V5ID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0
ZShhY2Nlc3NrZXlBdHRyKTsKICAgICAgICAgaWYgKCFhY2Nlc3NLZXkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgbV9lbGVtZW50c0J5QWNjZXNzS2V5LnNldChhY2Nlc3NLZXkuaW1wbCgpLCBlbGVt
ZW50KTsKKyAgICAgICAgICAgIG1fZWxlbWVudHNCeUFjY2Vzc0tleS5zZXQoYWNjZXNzS2V5Lmlt
cGwoKSwgJiplbGVtZW50KTsKIAogICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IGVsZW1l
bnQtPnNoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgIGJ1aWxkQWNjZXNzS2V5TWFwKHJvb3QpOwpA
QCAtNzc2LDcgKzc3OCw3IEBAIHZvaWQgRG9jdW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNo
YW4KIHsKICAgICBDb250YWluZXJOb2RlOjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2Vy
LCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOwogICAgIAotICAg
IEVsZW1lbnQqIG5ld0RvY3VtZW50RWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0
aGluKHRoaXMpOworICAgIEVsZW1lbnQqIG5ld0RvY3VtZW50RWxlbWVudCA9ICYqZWxlbWVudENo
aWxkcmVuKHRoaXMpLmJlZ2luKCk7CiAgICAgaWYgKG5ld0RvY3VtZW50RWxlbWVudCA9PSBtX2Rv
Y3VtZW50RWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fZG9jdW1lbnRFbGVtZW50ID0g
bmV3RG9jdW1lbnRFbGVtZW50OwpAQCAtMTk3Niw4ICsxOTc4LDkgQEAgdm9pZCBEb2N1bWVudDo6
Y3JlYXRlUmVuZGVyVHJlZSgpCiAKICAgICByZWNhbGNTdHlsZShTdHlsZTo6Rm9yY2UpOwogCi0g
ICAgZm9yIChFbGVtZW50KiBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHRo
aXMpOyBjaGlsZDsgY2hpbGQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhjaGlsZCkp
Ci0gICAgICAgIFN0eWxlOjphdHRhY2hSZW5kZXJUcmVlKGNoaWxkKTsKKyAgICBhdXRvIGVuZCA9
IGVsZW1lbnREZXNjZW5kYW50cyh0aGlzKS5lbmQoKTsKKyAgICBmb3IgKGF1dG8gY2hpbGQgPSBl
bGVtZW50RGVzY2VuZGFudHModGhpcykuYmVnaW4oKTsgY2hpbGQgIT0gZW5kOyArK2NoaWxkKQor
ICAgICAgICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJlZSgmKmNoaWxkKTsKIAogICAgIHNldEF0dGFj
aGVkKHRydWUpOwogfQpAQCAtMjA3Niw4ICsyMDc5LDkgQEAgdm9pZCBEb2N1bWVudDo6ZGV0YWNo
KCkKIAogICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBjaGFuZ2UobV9yZW5kZXJUcmVlQmVpbmdE
ZXN0cm95ZWQsIHRydWUpOwogCi0gICAgZm9yIChFbGVtZW50KiBjaGlsZCA9IEVsZW1lbnRUcmF2
ZXJzYWw6OmZpcnN0V2l0aGluKHRoaXMpOyBjaGlsZDsgY2hpbGQgPSBFbGVtZW50VHJhdmVyc2Fs
OjpuZXh0U2libGluZyhjaGlsZCkpCi0gICAgICAgIFN0eWxlOjpkZXRhY2hSZW5kZXJUcmVlKGNo
aWxkKTsKKyAgICBhdXRvIGVuZCA9IGVsZW1lbnREZXNjZW5kYW50cyh0aGlzKS5lbmQoKTsKKyAg
ICBmb3IgKGF1dG8gY2hpbGQgPSBlbGVtZW50RGVzY2VuZGFudHModGhpcykuYmVnaW4oKTsgY2hp
bGQgIT0gZW5kOyArK2NoaWxkKQorICAgICAgICBTdHlsZTo6ZGV0YWNoUmVuZGVyVHJlZSgmKmNo
aWxkKTsKIAogICAgIGNsZWFyQ2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgc2V0QXR0YWNo
ZWQoZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHAJKHJldmlzaW9uIDE1NDU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsMTAgQEAKICNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5o
IgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgorI2luY2x1ZGUgIkNoaWxkSXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVkaXRpbmdTdHlsZS5oIgogI2luY2x1
ZGUgIkVkaXRvci5oIgotI2luY2x1ZGUgIkVsZW1lbnRUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkhUTUxGb250RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnRl
cmNoYW5nZS5oIgpAQCAtNDQyLDEyICs0NDIsMTUgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6
Y2xlYW51cFVuc3R5bGVkQQogICAgIC8vIGNhbiBiZSBwcm9wYWdhdGVkLCB3aGljaCBjYW4gcmVz
dWx0IGluIG1vcmUgc3BsaXR0aW5nLiBJZiBhIGR1bW15IHNwYW4gZ2V0cwogICAgIC8vIGNsb25l
ZC9zcGxpdCwgdGhlIG5ldyBub2RlIGlzIGFsd2F5cyBhIHNpYmxpbmcgb2YgaXQuIFRoZXJlZm9y
ZSwgd2Ugc2NhbgogICAgIC8vIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGR1bW15J3MgcGFyZW50
Ci0gICAgRWxlbWVudCogbmV4dDsKLSAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50
VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihkdW1teVNwYW5BbmNlc3Rvcik7IGVsZW1lbnQ7IGVsZW1l
bnQgPSBuZXh0KSB7Ci0gICAgICAgIG5leHQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGlu
ZyhlbGVtZW50KTsKLSAgICAgICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxl
ZFN0eWxlU3BhbihlbGVtZW50KSkKLSAgICAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hp
bGRyZW4oZWxlbWVudCk7CisKKyAgICBWZWN0b3I8RWxlbWVudCo+IHRvUmVtb3ZlOworICAgIGF1
dG8gZW5kID0gZWxlbWVudENoaWxkcmVuKGR1bW15U3BhbkFuY2VzdG9yKS5lbmQoKTsKKyAgICBm
b3IgKGF1dG8gY2hpbGQgPSBlbGVtZW50Q2hpbGRyZW4oZHVtbXlTcGFuQW5jZXN0b3IpLmJlZ2lu
KCk7IGNoaWxkICE9IGVuZDsgKytjaGlsZCkgeworICAgICAgICBpZiAoaXNTcGFuV2l0aG91dEF0
dHJpYnV0ZXNPclVuc3R5bGVkU3R5bGVTcGFuKCYqY2hpbGQpKQorICAgICAgICAgICAgdG9SZW1v
dmUuYXBwZW5kKCYqY2hpbGQpOwogICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dG9SZW1vdmUuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW4odG9SZW1vdmVbaV0pOwogfQogCiBIVE1MRWxlbWVudCogQXBwbHlTdHlsZUNvbW1hbmQ6OnNw
bGl0QW5jZXN0b3JzV2l0aFVuaWNvZGVCaWRpKE5vZGUqIG5vZGUsIGJvb2wgYmVmb3JlLCBXcml0
aW5nRGlyZWN0aW9uIGFsbG93ZWREaXJlY3Rpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJr
dXAuY3BwCShyZXZpc2lvbiAxNTQ1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEwICszNiwxMCBAQAogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDaGlsZExpc3RNdXRhdGlvblNjb3BlLmgiCiAjaW5j
bHVkZSAiQ29udGV4dEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiRGVzY2VuZGFudEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5o
IgogI2luY2x1ZGUgIkVkaXRvci5oIgotI2luY2x1ZGUgIkVsZW1lbnRUcmF2ZXJzYWwuaCIKICNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9s
ZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTEwMywxNCArMTAzLDE1IEBAIHN0YXRpYyB2
b2lkIGNvbXBsZXRlVVJMcyhEb2N1bWVudEZyYWdtZW4KIAogICAgIEtVUkwgcGFyc2VkQmFzZVVS
TChQYXJzZWRVUkxTdHJpbmcsIGJhc2VVUkwpOwogCi0gICAgZm9yIChFbGVtZW50KiBlbGVtZW50
ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4oZnJhZ21lbnQpOyBlbGVtZW50OyBlbGVt
ZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50LCBmcmFnbWVudCkpIHsKKyAgICBh
dXRvIGVuZCA9IGVsZW1lbnREZXNjZW5kYW50cyhmcmFnbWVudCkuZW5kKCk7CisgICAgZm9yIChh
dXRvIGVsZW1lbnQgPSBlbGVtZW50RGVzY2VuZGFudHMoZnJhZ21lbnQpLmJlZ2luKCk7IGVsZW1l
bnQgIT0gZW5kOyArK2VsZW1lbnQpIHsKICAgICAgICAgaWYgKCFlbGVtZW50LT5oYXNBdHRyaWJ1
dGVzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
ZWxlbWVudC0+YXR0cmlidXRlQ291bnQoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0
ZSA9IGVsZW1lbnQtPmF0dHJpYnV0ZUF0KGkpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmlz
VVJMQXR0cmlidXRlKGF0dHJpYnV0ZSkgJiYgIWF0dHJpYnV0ZS52YWx1ZSgpLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChBdHRyaWJ1dGVDaGFuZ2UoZWxlbWVudCwg
YXR0cmlidXRlLm5hbWUoKSwgS1VSTChwYXJzZWRCYXNlVVJMLCBhdHRyaWJ1dGUudmFsdWUoKSku
c3RyaW5nKCkpKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChBdHRyaWJ1dGVDaGFu
Z2UoJiplbGVtZW50LCBhdHRyaWJ1dGUubmFtZSgpLCBLVVJMKHBhcnNlZEJhc2VVUkwsIGF0dHJp
YnV0ZS52YWx1ZSgpKS5zdHJpbmcoKSkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkocmV2aXNpb24gMTU0NTc4KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDggKzIzLDggQEAKICNpbmNsdWRlICJIVE1MTWFwRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiQXR0
cmlidXRlLmgiCisjaW5jbHVkZSAiRGVzY2VuZGFudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiSFRNTEFy
ZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1M
SW1hZ2VFbGVtZW50LmgiCkBAIC02MiwxMCArNjIsMTIgQEAgSFRNTE1hcEVsZW1lbnQ6On5IVE1M
TWFwRWxlbWVudCgpCiBib29sIEhUTUxNYXBFbGVtZW50OjptYXBNb3VzZUV2ZW50KExheW91dFBv
aW50IGxvY2F0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBzaXplLCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQpCiB7CiAgICAgSFRNTEFyZWFFbGVtZW50KiBkZWZhdWx0QXJlYSA9IDA7Ci0gICAgZm9yIChI
VE1MQXJlYUVsZW1lbnQqIGFyZWEgPSBUcmF2ZXJzYWw8SFRNTEFyZWFFbGVtZW50Pjo6Zmlyc3RX
aXRoaW4odGhpcyk7IGFyZWE7IGFyZWEgPSBUcmF2ZXJzYWw8SFRNTEFyZWFFbGVtZW50Pjo6bmV4
dChhcmVhLCB0aGlzKSkgeworCisgICAgYXV0byBlbmQgPSBkZXNjZW5kYW50c09mVHlwZTxIVE1M
QXJlYUVsZW1lbnQ+KHRoaXMpLmVuZCgpOworICAgIGZvciAoYXV0byBhcmVhID0gZGVzY2VuZGFu
dHNPZlR5cGU8SFRNTEFyZWFFbGVtZW50Pih0aGlzKS5iZWdpbigpOyBhcmVhICE9IGVuZDsgKyth
cmVhKSB7CiAgICAgICAgIGlmIChhcmVhLT5pc0RlZmF1bHQoKSkgewogICAgICAgICAgICAgaWYg
KCFkZWZhdWx0QXJlYSkKLSAgICAgICAgICAgICAgICBkZWZhdWx0QXJlYSA9IGFyZWE7CisgICAg
ICAgICAgICAgICAgZGVmYXVsdEFyZWEgPSAmKmFyZWE7CiAgICAgICAgIH0gZWxzZSBpZiAoYXJl
YS0+bWFwTW91c2VFdmVudChsb2NhdGlvbiwgc2l6ZSwgcmVzdWx0KSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTU0NTc4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUg
IkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVJlc291
cmNlLmgiCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiQ2hpbGRJdGVyYXRvci5o
IgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1
ZGUgIkNsaWVudFJlY3QuaCIKQEAgLTQwLDcgKzQxLDYgQEAKICNpbmNsdWRlICJDU1NWYWx1ZUtl
eXdvcmRzLmgiCiAjaW5jbHVkZSAiRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCiAjaW5jbHVk
ZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgpAQCAtOTI3LDkgKzkyNywxMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVj
dE1lZGlhUmVzb3VyCiAgICAgICAgIC8vIE90aGVyd2lzZSwgaWYgdGhlIG1lZGlhIGVsZW1lbnQg
ZG9lcyBub3QgaGF2ZSBhIHNyYyBhdHRyaWJ1dGUgYnV0IGhhcyBhIHNvdXJjZSAKICAgICAgICAg
Ly8gZWxlbWVudCBjaGlsZCwgdGhlbiBsZXQgbW9kZSBiZSBjaGlsZHJlbiBhbmQgbGV0IGNhbmRp
ZGF0ZSBiZSB0aGUgZmlyc3Qgc3VjaCAKICAgICAgICAgLy8gc291cmNlIGVsZW1lbnQgY2hpbGQg
aW4gdHJlZSBvcmRlci4KLSAgICAgICAgaWYgKGF1dG8gc291cmNlRWxlbWVudCA9IFRyYXZlcnNh
bDxIVE1MU291cmNlRWxlbWVudD46OmZpcnN0Q2hpbGQodGhpcykpIHsKKyAgICAgICAgYXV0byBz
b3VyY2UgPSBjaGlsZHJlbk9mVHlwZTxIVE1MU291cmNlRWxlbWVudD4odGhpcykuYmVnaW4oKTsK
KyAgICAgICAgaWYgKHNvdXJjZSAhPSBjaGlsZHJlbk9mVHlwZTxIVE1MU291cmNlRWxlbWVudD4o
dGhpcykuZW5kKCkpIHsKICAgICAgICAgICAgIG1vZGUgPSBjaGlsZHJlbjsKLSAgICAgICAgICAg
IG1fbmV4dENoaWxkTm9kZVRvQ29uc2lkZXIgPSBzb3VyY2VFbGVtZW50OworICAgICAgICAgICAg
bV9uZXh0Q2hpbGROb2RlVG9Db25zaWRlciA9ICYqc291cmNlOwogICAgICAgICAgICAgbV9jdXJy
ZW50U291cmNlTm9kZSA9IDA7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBPdGhl
cndpc2UgdGhlIG1lZGlhIGVsZW1lbnQgaGFzIG5laXRoZXIgYSBzcmMgYXR0cmlidXRlIG5vciBh
IHNvdXJjZSBlbGVtZW50IApAQCAtMTQxNyw3ICsxNDE4LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojp0ZXh0VHJhY2tNb2RlQ2hhbgogICAgIGJvb2wgdHJhY2tJc0xvYWRlZCA9IHRydWU7CiAg
ICAgaWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6OlRyYWNrRWxlbWVudCkgewog
ICAgICAgICB0cmFja0lzTG9hZGVkID0gZmFsc2U7Ci0gICAgICAgIGZvciAoYXV0byB0cmFja0Vs
ZW1lbnQgPSBUcmF2ZXJzYWw8SFRNTFRyYWNrRWxlbWVudD46OmZpcnN0Q2hpbGQodGhpcyk7IHRy
YWNrRWxlbWVudDsgdHJhY2tFbGVtZW50ID0gVHJhdmVyc2FsPEhUTUxUcmFja0VsZW1lbnQ+Ojpu
ZXh0U2libGluZyh0cmFja0VsZW1lbnQpKSB7CisgICAgICAgIGF1dG8gZW5kID0gY2hpbGRyZW5P
ZlR5cGU8SFRNTFRyYWNrRWxlbWVudD4odGhpcykuZW5kKCk7CisgICAgICAgIGZvciAoYXV0byB0
cmFja0VsZW1lbnQgPSBjaGlsZHJlbk9mVHlwZTxIVE1MVHJhY2tFbGVtZW50Pih0aGlzKS5iZWdp
bigpOyB0cmFja0VsZW1lbnQgIT0gZW5kOyArK3RyYWNrRWxlbWVudCkgewogICAgICAgICAgICAg
aWYgKHRyYWNrRWxlbWVudC0+dHJhY2soKSA9PSB0cmFjaykgewogICAgICAgICAgICAgICAgIGlm
ICh0cmFja0VsZW1lbnQtPnJlYWR5U3RhdGUoKSA9PSBIVE1MVHJhY2tFbGVtZW50OjpMT0FESU5H
IHx8IHRyYWNrRWxlbWVudC0+cmVhZHlTdGF0ZSgpID09IEhUTUxUcmFja0VsZW1lbnQ6OkxPQURF
RCkKICAgICAgICAgICAgICAgICAgICAgdHJhY2tJc0xvYWRlZCA9IHRydWU7Cg==
</data>
<flag name="commit-queue"
          id="231640"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209603</attachid>
            <date>2013-08-25 13:56:06 -0700</date>
            <delta_ts>2013-08-25 14:07:07 -0700</delta_ts>
            <desc>yet another</desc>
            <filename>element-iterators-6.patch</filename>
            <type>text/plain</type>
            <size>37128</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBACisyMDEzLTA4LTI1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBFbGVtZW50IGNoaWxkIGFuZCBk
ZXNjZW5kYW50IGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTIwMjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIGl0ZXJhdG9ycyBmb3IgRWxlbWVudCBjaGlsZHJlbiBhbmQgZGVzY2Vu
ZGFudHMuCisgICAgICAgIAorICAgICAgICBUbyBpdGVyYXRlIG92ZXIgZWxlbWVudCBjaGlsZHJl
bjoKKyAgICAgICAgCisgICAgICAgICNpbmNsdWRlICJDaGlsZEl0ZXJhdG9yLmgiCisgICAgICAg
IAorICAgICAgICBmb3IgKGF1dG8gaXQgPSBlbGVtZW50Q2hpbGRyZW4odGhpcykuYmVnaW4oKSwg
ZW5kID0gZWxlbWVudENoaWxkcmVuKHRoaXMpLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSAqaXQ7CisgICAgICAgICAgICAuLi4KKworICAg
ICAgICBmb3IgKGF1dG8gaXQgPSBjaGlsZHJlbk9mVHlwZTxIVE1MQXJlYUVsZW1lbnQ+KHRoaXMp
LmJlZ2luKCksIGVuZCA9IGNoaWxkcmVuT2ZUeXBlPEhUTUxBcmVhRWxlbWVudD4odGhpcykuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgSFRNTEFyZWFFbGVtZW50JiBhcmVh
ID0gKml0OworICAgICAgICAgICAgLi4uCisKKyAgICAgICAgVG8gaXRlcmF0YXRlIG92ZXIgZWxl
bWVudCBkZXNjZW5kYW50cyBpbiBwcmUtb3JkZXI6CisgICAgICAgIAorICAgICAgICAjaW5jbHVk
ZSAiRGVzY2VuZGFudEl0ZXJhdG9yLmgiCisgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8gaXQg
PSBlbGVtZW50RGVzY2VuZGFudHModGhpcykuYmVnaW4oKSwgZW5kID0gZWxlbWVudERlc2NlbmRh
bnRzKHRoaXMpLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEVsZW1lbnQm
IGVsZW1lbnQgPSAqaXQ7CisgICAgICAgICAgICAuLi4KKworICAgICAgICBmb3IgKGF1dG8gaXQg
PSBkZXNjZW5kYW50c09mVHlwZTxIVE1MQXJlYUVsZW1lbnQ+KHRoaXMpLmJlZ2luKCksIGVuZCA9
IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxBcmVhRWxlbWVudD4odGhpcykuZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICAgICAgSFRNTEFyZWFFbGVtZW50JiBhcmVhPSAqaXQ7CisgICAg
ICAgICAgICAuLi4KKyAgICAgICAgICAgIAorICAgICAgICBUaGVzZSBpdGVyYXRvcnMgYXJlIGNv
bXBhdGlibGUgd2l0aCBDKysxMSByYW5nZS1iYXNlZCBmb3IgbG9vcHMuIEluIHRoZSBmdXR1cmUg
d2UgY2FuIHVzZQorICAgICAgICAKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVu
dENoaWxkcmVuKHRoaXMpKQorICAgICAgICAgICAgLi4uCisKKyAgICAgICAgZXRjLgorICAgICAg
ICAKKyAgICAgICAgVGhlIHBhdGNoIGFsbCB1c2VzIHRoZSBuZXcgaXRlcmF0b3JzIGluIGEgZmV3
IHBsYWNlcy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjYW52YXNIYXNGYWxsYmFj
a0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6c2libGluZ1dpdGhBcmlhUm9sZSk6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlKToKKyAgICAgICAgKiBkb20vQ2hp
bGRJdGVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkSXRlcmF0b3I6Om9w
ZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZEl0ZXJhdG9yOjpvcGVyYXRvci0+KToK
KyAgICAgICAgKFdlYkNvcmU6Ojo6Q2hpbGRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjo6
Om9wZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oj0pOgorICAgICAgICAoV2ViQ29yZTo6OjpD
aGlsZEl0ZXJhdG9yQWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjo6OmJlZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6Ojo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmVsZW1lbnRDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpjaGlsZHJlbk9mVHlwZSk6CisgICAgICAgICogZG9tL0Rlc2Nl
bmRhbnRJdGVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRlc2NlbmRhbnRJdGVy
YXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdlYkNvcmU6OkRlc2NlbmRhbnRJdGVyYXRvcjo6
b3BlcmF0b3ItPik6CisgICAgICAgIChXZWJDb3JlOjo6OkRlc2NlbmRhbnRJdGVyYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oj0pOgorICAg
ICAgICAoV2ViQ29yZTo6OjpEZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ojo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6OjplbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6ZWxlbWVudERlc2NlbmRhbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2NlbmRhbnRz
T2ZUeXBlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmJ1aWxkQWNjZXNzS2V5TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmF0dGFjaCk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGV0YWNoKToKKyAgICAgICAgKiBlZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21t
YW5kOjpjbGVhbnVwVW5zdHlsZWRBcHBsZVN0eWxlU3BhbnMpOgorICAgICAgICAqIGVkaXRpbmcv
bWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBsZXRlVVJMcyk6CisgICAgICAgICog
aHRtbC9IVE1MTWFwRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVu
dDo6bWFwTW91c2VFdmVudCk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVzb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrTW9kZUNoYW5n
ZWQpOgorCiAyMDEzLTA4LTI1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAg
ICAgICBNYWtlIEphdmFTY3JpcHQgYmluZGluZyBmb3IgQ2xpcGJvYXJkOjp0eXBlcyBtb3JlIG5v
cm1hbApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNTQ1Nzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzcxLDYgKzI3NzEsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L2RvbS9DaGFyYWN0ZXJEYXRhLmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9C
dXR0b25zLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaCBc
CisJU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkSXRlcmF0b3IuaCBcCiAJU291cmNlL1dlYkNvcmUv
ZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vQ2hp
bGRMaXN0TXV0YXRpb25TY29wZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlz
dC5jcHAgXApAQCAtMjgxNSw2ICsyODE2LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvV2ViQ29yZS9kb20vRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL2RvbS9kZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmggXAorCVNv
dXJjZS9XZWJDb3JlL2RvbS9EZXNjZW5kYW50SXRlcmF0b3IuaCBcCiAJU291cmNlL1dlYkNvcmUv
ZG9tL0RldmljZU1vdGlvbkNsaWVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90
aW9uQ29udHJvbGxlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250
cm9sbGVyLmggXApJbmRleDogU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxNTQ1NzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xNTc1LDYgKzE1NzUsNyBAQCBI
RUFERVJTICs9IFwKICAgICBkb20vQ0RBVEFTZWN0aW9uLmggXAogICAgIGRvbS9DaGFyYWN0ZXJE
YXRhLmggXAogICAgIGRvbS9DaGVja2VkUmFkaW9CdXR0b25zLmggXAorICAgIGRvbS9DaGlsZEl0
ZXJhdG9yLmggXAogICAgIGRvbS9DaGlsZE5vZGVMaXN0LmggXAogICAgIGRvbS9DbGFzc05vZGVM
aXN0LmggXAogICAgIGRvbS9DbGllbnRSZWN0LmggXApAQCAtMTU4OCw2ICsxNTg5LDcgQEAgSEVB
REVSUyArPSBcCiAgICAgZG9tL0NvbnRleHRGZWF0dXJlcy5oIFwKICAgICBkb20vQ3VzdG9tRXZl
bnQuaCBcCiAgICAgZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCBcCisg
ICAgZG9tL0Rlc2NlbmRhbnRJdGVyYXRvci5oIFwKICAgICBkb20vRGV2aWNlTW90aW9uQ2xpZW50
LmggXAogICAgIGRvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmggXAogICAgIGRvbS9EZXZpY2VN
b3Rpb25EYXRhLmggXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTQ1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBA
QAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzw/eG1sIHZlcnNp
b249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiA8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVp
bGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNv
bS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENv
bmZpZ3VyYXRpb25zIj4KICAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWdT
dWZmaXh8V2luMzIiPgpAQCAtMjAyMDMsNiArMjAyMDMsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZG9tXENEQVRBU2VjdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZG9tXENoYXJhY3RlckRhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRv
bVxDaGVja2VkUmFkaW9CdXR0b25zLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
b21cQ2hpbGRJdGVyYXRvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZG9tXENo
aWxkTGlzdE11dGF0aW9uU2NvcGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRv
bVxDaGlsZE5vZGVMaXN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkb21cQ2xh
c3NOb2RlTGlzdC5oIiAvPgpAQCAtMjAyMjIsNiArMjAyMjMsNyBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZG9tXERhdGFUcmFuc2Zlckl0ZW0uaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRvbVxEYXRhVHJhbnNmZXJJdGVtTGlzdC5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZG9tXERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRvbVxEZXNjZW5kYW50SXRlcmF0b3IuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRvbVxEZXZpY2VNb3Rpb25DbGllbnQuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRvbVxEZXZpY2VNb3Rpb25Db250cm9sbGVyLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkb21cRGV2aWNlTW90aW9uRGF0YS5oIiAvPgpJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTU0NTc4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NDg3LDYgKzU0ODcsOCBAQAogCQlFNDUz
OTAxRTBFQUZDQUNBMDAzNjk1QzggLyogUGFzdGVib2FyZElPUy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5MDE5MEVBRkNBQ0EwMDM2OTVDOCAv
KiBQYXN0ZWJvYXJkSU9TLm1tICovOyB9OwogCQlFNDUzOTA0NjBFQUZENjM3MDAzNjk1QzggLyog
U2hhcmVkVGltZXJJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDUzOTAzNTBFQUZENjM3MDAzNjk1QzggLyogU2hhcmVkVGltZXJJT1MubW0gKi87
IH07CiAJCUU0NjJBNEExMTEzRTcxQkUwMDRBNDIyMCAvKiBJbnRQb2ludEhhc2guaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjJBNEEwMTEzRTcxQkUw
MDRBNDIyMCAvKiBJbnRQb2ludEhhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlFNDZBMkIxQzE3Q0E2NUI5MDAwREJDRDggLyogRGVzY2VuZGFu
dEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDZBMkIxQjE3Q0E2NUI5MDAwREJDRDggLyogRGVzY2VuZGFudEl0ZXJhdG9yLmggKi87IH07
CisJCUU0NkEyQjFFMTdDQTc2QjEwMDBEQkNEOCAvKiBDaGlsZEl0ZXJhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDZBMkIxRDE3Q0E3NkIxMDAw
REJDRDggLyogQ2hpbGRJdGVyYXRvci5oICovOyB9OwogCQlFNDcxMjdDQTE2MzQzOEExMDBFRDZG
NUEgLyogU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdBOTdDRTE2MzA1OUZDMDA1RENEOTkgLyogU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAgKi87IH07CiAJCUU0NzEyN0NCMTYzNDM4QUUwMEVE
NkY1QSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdBOTdDRjE2MzA1OUZDMDA1RENEOTkgLyogU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oICovOyB9OwogCQlFNDc3OEI3RjExNUE1ODFBMDBCNUQz
NzIgLyogSlNDdXN0b21FdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDc3OEI3RDExNUE1ODFBMDBCNUQzNzIgLyogSlNDdXN0b21FdmVudC5j
cHAgKi87IH07CkBAIC0xMjI1NSw2ICsxMjI1Nyw4IEBACiAJCUU0NTM5MDE5MEVBRkNBQ0EwMDM2
OTVDOCAvKiBQYXN0ZWJvYXJkSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gUGFzdGVib2FyZElPUy5tbTsgcGF0aCA9IGlvcy9QYXN0ZWJvYXJkSU9TLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDUzOTAzNTBFQUZENjM3MDAzNjk1QzggLyog
U2hhcmVkVGltZXJJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBTaGFyZWRUaW1lcklPUy5tbTsgcGF0aCA9IGlvcy9TaGFyZWRUaW1lcklPUy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ2MkE0QTAxMTNFNzFCRTAwNEE0MjIwIC8qIEludFBv
aW50SGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRQb2ludEhhc2gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ2QTJCMUIxN0NBNjVCOTAwMERCQ0Q4
IC8qIERlc2NlbmRhbnRJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEZXNjZW5kYW50SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ2
QTJCMUQxN0NBNzZCMTAwMERCQ0Q4IC8qIENoaWxkSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ2hpbGRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNDc3OEI3RDExNUE1ODFBMDBCNUQzNzIgLyogSlNDdXN0b21FdmVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0N1c3RvbUV2ZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3NzhCN0UxMTVBNTgxQTAwQjVEMzcyIC8qIEpT
Q3VzdG9tRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDdXN0b21F
dmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdBOTdDRTE2MzA1OUZDMDA1
RENEOTkgLyogU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMDk2LDYgKzIwMTAwLDcgQEAKIAkJCQk5M0VFQzFF
NjA5QzI4Nzc3MDBDNTE1RDEgLyogQ2hhcmFjdGVyRGF0YS5pZGwgKi8sCiAJCQkJOTNGOTI1NDIw
RjdFRjVCODAwN0UzN0M5IC8qIENoZWNrZWRSYWRpb0J1dHRvbnMuY3BwICovLAogCQkJCTkzRjky
NTQxMEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0b25zLmggKi8sCisJCQkJRTQ2
QTJCMUQxN0NBNzZCMTAwMERCQ0Q4IC8qIENoaWxkSXRlcmF0b3IuaCAqLywKIAkJCQlENjE5QTMw
NTE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgKi8sCiAJCQkJ
RDYxOUEzMDYxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCAqLywK
IAkJCQlBODE4NzIxQTA5NzdEM0MwMDA1ODI2RDkgLyogQ2hpbGROb2RlTGlzdC5jcHAgKi8sCkBA
IC0yMDE0Myw2ICsyMDE0OCw3IEBACiAJCQkJODFBQzVBRTkxMzE2MzkyRTAwMDlBN0UwIC8qIERh
dGFUcmFuc2Zlckl0ZW1MaXN0LmlkbCAqLywKIAkJCQlBOEMyMjhBMDExRDU3MjJFMDBENUE3RDMg
LyogRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5jcHAgKi8sCiAJCQkJQThDMjI4OUYxMUQ1NzIy
RTAwRDVBN0QzIC8qIERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuaCAqLywKKwkJCQlFNDZBMkIx
QjE3Q0E2NUI5MDAwREJDRDggLyogRGVzY2VuZGFudEl0ZXJhdG9yLmggKi8sCiAJCQkJMzFGQjFB
NEYxMjBBNUQwNjAwREMwMkEwIC8qIERldmljZU1vdGlvbkNsaWVudC5oICovLAogCQkJCTMxRkIx
QTUwMTIwQTVEMDYwMERDMDJBMCAvKiBEZXZpY2VNb3Rpb25Db250cm9sbGVyLmNwcCAqLywKIAkJ
CQkzMUZCMUE1MTEyMEE1RDA2MDBEQzAyQTAgLyogRGV2aWNlTW90aW9uQ29udHJvbGxlci5oICov
LApAQCAtMjExNTcsNiArMjExNjMsNyBAQAogCQkJCUE4MEU2Q0U2MEExOTg5Q0EwMDdGQjhDNSAv
KiBDU1NQcmltaXRpdmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFFRDhBQzMwQ0M0OUJF
MDAwQkZDNTU3IC8qIENTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4MEU2Q0ZGMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcm9wZXJ0eS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRTQ2QTJCMUUxN0NBNzZCMTAwMERCQ0Q4IC8qIENoaWxkSXRlcmF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTc4RDAyQkM2MTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFu
aW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2NTgwRjQwOUQxMkIyMDAwMEU2MUQ3IC8q
IENTU1Byb3BlcnR5TmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTgyRTNEOERGMTIyRUEwRDEw
MDNBRTVCQyAvKiBDU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMjI4
ODEsNiArMjI4ODgsNyBAQAogCQkJCTM3MUU2NUNDMTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2Vy
aWFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcxOTdGMjQxNzU2ODlDNDAwN0I5NDQyIC8q
IFBhZ2VUaHJvdHRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMjg0QUUxMTA0NDdENDUwMEVB
RUI1MiAvKiBQYWdlVHJhbnNpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDZBMkIx
QzE3Q0E2NUI5MDAwREJDRDggLyogRGVzY2VuZGFudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MUUxRUNDMzBDOTFDOTA0MDBEQzI1NUIgLyogUGFnZVVSTFJlY29yZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkZENUI5N0IxMzVDQzk3ODAwRDVFOTJBIC8qIFBhZ2VWaXNpYmlsaXR5U3Rh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNzdBQkEwMTVERUZFRUYwMDMxRkQwNCAvKiBQYWdp
bmF0aW9uLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAx
NTQ1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkFj
Y2Vzc2liaWxpdHlMaXN0Qm94LmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24u
aCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKLSNpbmNsdWRlICJFbGVtZW50VHJh
dmVyc2FsLmgiCisjaW5jbHVkZSAiQ2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtNDE3
LDcgKzQxNyw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhbnZhc0hhc0YKICAg
ICAvLyBJZiBpdCBoYXMgYW55IGNoaWxkcmVuIHRoYXQgYXJlIGVsZW1lbnRzLCB3ZSdsbCBhc3N1
bWUgaXQgbWlnaHQgYmUgZmFsbGJhY2sKICAgICAvLyBjb250ZW50LiBJZiBpdCBoYXMgbm8gY2hp
bGRyZW4gb3IgaXRzIG9ubHkgY2hpbGRyZW4gYXJlIG5vdCBlbGVtZW50cwogICAgIC8vIChlLmcu
IGp1c3QgdGV4dCBub2RlcyksIGl0IGRvZXNuJ3QgaGF2ZSBmYWxsYmFjayBjb250ZW50LgotICAg
IHJldHVybiAhIUVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0Q2hpbGQobm9kZSk7CisgICAgcmV0dXJu
IGVsZW1lbnRDaGlsZHJlbihub2RlKS5iZWdpbigpICE9IGVsZW1lbnRDaGlsZHJlbihub2RlKS5l
bmQoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNJbWFnZUJ1dHRvbigp
IGNvbnN0CkBAIC0xMTIxLDExICsxMTIxLDExIEBAIHN0YXRpYyBFbGVtZW50KiBzaWJsaW5nV2l0
aEFyaWFSb2xlKFN0cmkKICAgICBOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAg
ICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiAwOwotICAgIAotICAgIGZvciAoRWxlbWVu
dCogc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0Q2hpbGQocGFyZW50KTsgc2libGlu
Zzsgc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKHNpYmxpbmcpKSB7CisK
KyAgICBmb3IgKGF1dG8gc2libGluZyA9IGVsZW1lbnRDaGlsZHJlbihwYXJlbnQpLmJlZ2luKCks
IGVuZCA9IGVsZW1lbnRDaGlsZHJlbihwYXJlbnQpLmVuZCgpOyBzaWJsaW5nICE9IGVuZDsgKytz
aWJsaW5nKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2libGluZ0FyaWFSb2xlID0g
c2libGluZy0+ZmFzdEdldEF0dHJpYnV0ZShyb2xlQXR0cik7CiAgICAgICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShzaWJsaW5nQXJpYVJvbGUsIHJvbGUpKQotICAgICAgICAgICAgcmV0dXJuIHNp
Ymxpbmc7CisgICAgICAgICAgICByZXR1cm4gJipzaWJsaW5nOwogICAgIH0KIAogICAgIHJldHVy
biAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxNTQ1NzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVRh
YmxlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKLSNp
bmNsdWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCisjaW5jbHVkZSAiRGVzY2VuZGFudEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCkBAIC0yNzQ5LDE4ICsyNzQ5LDE4IEBAIHZvaWQgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6YWRkSW1hZ2UKICAgICBpZiAoIW1hcCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZm9yIChIVE1MQXJlYUVsZW1lbnQqIGN1cnJlbnQgPSBUcmF2ZXJzYWw8SFRNTEFyZWFF
bGVtZW50Pjo6Zmlyc3RXaXRoaW4obWFwKTsgY3VycmVudDsgY3VycmVudCA9IFRyYXZlcnNhbDxI
VE1MQXJlYUVsZW1lbnQ+OjpuZXh0KGN1cnJlbnQsIG1hcCkpIHsKKyAgICBmb3IgKGF1dG8gYXJl
YSA9IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxBcmVhRWxlbWVudD4obWFwKS5iZWdpbigpLCBlbmQg
PSBkZXNjZW5kYW50c09mVHlwZTxIVE1MQXJlYUVsZW1lbnQ+KG1hcCkuZW5kKCkgOyBhcmVhICE9
IGVuZDsgKythcmVhKSB7CiAgICAgICAgIC8vIGFkZCBhbiA8YXJlYT4gZWxlbWVudCBmb3IgdGhp
cyBjaGlsZCBpZiBpdCBoYXMgYSBsaW5rCi0gICAgICAgIGlmIChjdXJyZW50LT5pc0xpbmsoKSkg
ewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluayogYXJlYU9iamVjdCA9IHN0
YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsqPihheE9iamVjdENhY2hlKCktPmdl
dE9yQ3JlYXRlKEltYWdlTWFwTGlua1JvbGUpKTsKLSAgICAgICAgICAgIGFyZWFPYmplY3QtPnNl
dEhUTUxBcmVhRWxlbWVudCh0b0hUTUxBcmVhRWxlbWVudChjdXJyZW50KSk7Ci0gICAgICAgICAg
ICBhcmVhT2JqZWN0LT5zZXRIVE1MTWFwRWxlbWVudChtYXApOwotICAgICAgICAgICAgYXJlYU9i
amVjdC0+c2V0UGFyZW50KHRoaXMpOwotICAgICAgICAgICAgaWYgKCFhcmVhT2JqZWN0LT5hY2Nl
c3NpYmlsaXR5SXNJZ25vcmVkKCkpCi0gICAgICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQo
YXJlYU9iamVjdCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXhPYmplY3RD
YWNoZSgpLT5yZW1vdmUoYXJlYU9iamVjdC0+YXhPYmplY3RJRCgpKTsKLSAgICAgICAgfQorICAg
ICAgICBpZiAoIWFyZWEtPmlzTGluaygpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsqIGFyZWFPYmplY3QgPSBzdGF0aWNfY2FzdDxBY2Nl
c3NpYmlsaXR5SW1hZ2VNYXBMaW5rKj4oYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShJbWFn
ZU1hcExpbmtSb2xlKSk7CisgICAgICAgIGFyZWFPYmplY3QtPnNldEhUTUxBcmVhRWxlbWVudCgm
KmFyZWEpOworICAgICAgICBhcmVhT2JqZWN0LT5zZXRIVE1MTWFwRWxlbWVudChtYXApOworICAg
ICAgICBhcmVhT2JqZWN0LT5zZXRQYXJlbnQodGhpcyk7CisgICAgICAgIGlmICghYXJlYU9iamVj
dC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQorICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBl
bmQoYXJlYU9iamVjdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGF4T2JqZWN0Q2FjaGUo
KS0+cmVtb3ZlKGFyZWFPYmplY3QtPmF4T2JqZWN0SUQoKSk7CiAgICAgfQogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUu
Y3BwCShyZXZpc2lvbiAxNTQ1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNp
bmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaCIKICNpbmNsdWRlICJBY2Nlc3NpYmls
aXR5VGFibGVIZWFkZXJDb250YWluZXIuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVS
b3cuaCIKLSNpbmNsdWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCisjaW5jbHVkZSAiQ2hpbGRJdGVy
YXRvci5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxUYWJsZUNhcHRp
b25FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKQEAgLTEyNSw3
ICsxMjUsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNEYXRhVGFibGUoKSBjCiAgICAg
ICAgIHJldHVybiB0cnVlOyAgICAKIAogICAgIC8vIGlmIHRoZXJlJ3MgYSBjb2xncm91cCBvciBj
b2wgZWxlbWVudCwgaXQncyBwcm9iYWJseSBhIGRhdGEgdGFibGUuCi0gICAgZm9yIChFbGVtZW50
KiBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0Q2hpbGQodGFibGVFbGVtZW50KTsgY2hp
bGQ7IGNoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoY2hpbGQpKSB7CisgICAg
Zm9yIChhdXRvIGNoaWxkID0gZWxlbWVudENoaWxkcmVuKHRhYmxlRWxlbWVudCkuYmVnaW4oKSwg
ZW5kID0gZWxlbWVudENoaWxkcmVuKHRhYmxlRWxlbWVudCkuZW5kKCk7IGNoaWxkICE9IGVuZDsg
KytjaGlsZCkgewogICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoY29sVGFnKSB8fCBjaGls
ZC0+aGFzVGFnTmFtZShjb2xncm91cFRhZykpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRJdGVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZEl0ZXJhdG9yLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDaGlsZEl0ZXJhdG9yX2gKKyNkZWZpbmUgQ2hpbGRJdGVyYXRvcl9oCisKKyNpbmNs
dWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCisKKyNpZm5kZWYgTkRFQlVHCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBFbGVtZW50VHlwZT4KK2NsYXNzIENoaWxkSXRlcmF0b3IgeworcHVibGljOgorICAgIENo
aWxkSXRlcmF0b3IoKTsKKyAgICBDaGlsZEl0ZXJhdG9yKEVsZW1lbnRUeXBlKiBjdXJyZW50KTsK
KyAgICBDaGlsZEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CisgICAgRWxlbWVudFR5cGUmIG9wZXJh
dG9yKigpIHsgcmV0dXJuICptX2N1cnJlbnQ7IH0KKyAgICBFbGVtZW50VHlwZSogb3BlcmF0b3It
PigpIHsgcmV0dXJuIG1fY3VycmVudDsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDaGls
ZEl0ZXJhdG9yJiBvdGhlcikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRWxlbWVudFR5cGUqIG1f
Y3VycmVudDsKKyNpZm5kZWYgTkRFQlVHCisgICAgT3duUHRyPE5vRXZlbnREaXNwYXRjaEFzc2Vy
dGlvbj4gbV9ub0V2ZW50RGlzcGF0Y2hBc3NlcnRpb247CisgICAgdWludDY0X3QgbV9pbml0aWFs
RE9NVHJlZVZlcnNpb247CisjZW5kaWYKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50
VHlwZSwgdHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KK2NsYXNzIENoaWxkSXRlcmF0b3JBZGFwdGVy
IHsKK3B1YmxpYzoKKyAgICBDaGlsZEl0ZXJhdG9yQWRhcHRlcihDb250YWluZXJUeXBlKiByb290
KTsKKyAgICBDaGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBiZWdpbigpOworICAgIENoaWxkSXRl
cmF0b3I8RWxlbWVudFR5cGU+IGVuZCgpOworCitwcml2YXRlOgorICAgIGNvbnN0IENvbnRhaW5l
clR5cGUqIG1fcm9vdDsKK307CisKK0NoaWxkSXRlcmF0b3JBZGFwdGVyPEVsZW1lbnQsIENvbnRh
aW5lck5vZGU+IGVsZW1lbnRDaGlsZHJlbihDb250YWluZXJOb2RlKiByb290KTsKK0NoaWxkSXRl
cmF0b3JBZGFwdGVyPEVsZW1lbnQsIE5vZGU+IGVsZW1lbnRDaGlsZHJlbihOb2RlKiByb290KTsK
K3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4gQ2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxl
bWVudFR5cGUsIENvbnRhaW5lck5vZGU+IGNoaWxkcmVuT2ZUeXBlKENvbnRhaW5lck5vZGUqIHJv
b3QpOwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPiBDaGlsZEl0ZXJhdG9yQWRhcHRl
cjxFbGVtZW50VHlwZSwgTm9kZT4gY2hpbGRyZW5PZlR5cGUoTm9kZSogcm9vdCk7CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KK2lubGluZSBDaGlsZEl0ZXJhdG9yPEVsZW1lbnRU
eXBlPjo6Q2hpbGRJdGVyYXRvcigpCisgICAgOiBtX2N1cnJlbnQobnVsbHB0cikKKyNpZm5kZWYg
TkRFQlVHCisgICAgLCBtX2luaXRpYWxET01UcmVlVmVyc2lvbigwKQorI2VuZGlmCit7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KK2lubGluZSBDaGlsZEl0ZXJhdG9yPEVs
ZW1lbnRUeXBlPjo6Q2hpbGRJdGVyYXRvcihFbGVtZW50VHlwZSogY3VycmVudCkKKyAgICA6IG1f
Y3VycmVudChjdXJyZW50KQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1fbm9FdmVudERpc3BhdGNo
QXNzZXJ0aW9uKGFkb3B0UHRyKG5ldyBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24pKQorICAgICwg
bV9pbml0aWFsRE9NVHJlZVZlcnNpb24obV9jdXJyZW50ID8gbV9jdXJyZW50LT5kb2N1bWVudCgp
LT5kb21UcmVlVmVyc2lvbigpIDogMCkKKyNlbmRpZgoreworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgRWxlbWVudFR5cGU+CitpbmxpbmUgQ2hpbGRJdGVyYXRvcjxFbGVtZW50VHlwZT4mIENoaWxk
SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpvcGVyYXRvcisrKCkKK3sKKyAgICBBU1NFUlQobV9jdXJy
ZW50KTsKKyAgICBBU1NFUlQobV9jdXJyZW50LT5kb2N1bWVudCgpLT5kb21UcmVlVmVyc2lvbigp
ID09IG1faW5pdGlhbERPTVRyZWVWZXJzaW9uKTsKKyAgICBtX2N1cnJlbnQgPSBUcmF2ZXJzYWw8
RWxlbWVudFR5cGU+OjpuZXh0U2libGluZyhtX2N1cnJlbnQpOworICAgIHJldHVybiAqdGhpczsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgoraW5saW5lIGJvb2wgQ2hpbGRJ
dGVyYXRvcjxFbGVtZW50VHlwZT46Om9wZXJhdG9yIT0oY29uc3QgQ2hpbGRJdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3VycmVudCAhPSBvdGhlci5tX2N1cnJlbnQ7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZSwgdHlwZW5hbWUgQ29udGFpbmVyVHlw
ZT4KK2lubGluZSBDaGlsZEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZSwgQ29udGFpbmVyVHlw
ZT46OkNoaWxkSXRlcmF0b3JBZGFwdGVyKENvbnRhaW5lclR5cGUqIHJvb3QpCisgICAgOiBtX3Jv
b3Qocm9vdCkKK3sKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlLCB0eXBlbmFt
ZSBDb250YWluZXJUeXBlPgoraW5saW5lIENoaWxkSXRlcmF0b3I8RWxlbWVudFR5cGU+IENoaWxk
SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlLCBDb250YWluZXJUeXBlPjo6YmVnaW4oKQorewor
ICAgIHJldHVybiBDaGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihUcmF2ZXJzYWw8RWxlbWVudFR5
cGU+OjpmaXJzdENoaWxkKG1fcm9vdCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVu
dFR5cGUsIHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CitpbmxpbmUgQ2hpbGRJdGVyYXRvcjxFbGVt
ZW50VHlwZT4gQ2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGUsIENvbnRhaW5lclR5cGU+
OjplbmQoKQoreworICAgIHJldHVybiBDaGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPigpOworfQor
CitpbmxpbmUgQ2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudCwgQ29udGFpbmVyTm9kZT4gZWxl
bWVudENoaWxkcmVuKENvbnRhaW5lck5vZGUqIHJvb3QpCit7CisgICAgcmV0dXJuIENoaWxkSXRl
cmF0b3JBZGFwdGVyPEVsZW1lbnQsIENvbnRhaW5lck5vZGU+KHJvb3QpOworfQorCitpbmxpbmUg
Q2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudCwgTm9kZT4gZWxlbWVudENoaWxkcmVuKE5vZGUq
IHJvb3QpCit7CisgICAgcmV0dXJuIENoaWxkSXRlcmF0b3JBZGFwdGVyPEVsZW1lbnQsIE5vZGU+
KHJvb3QpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CitpbmxpbmUgQ2hp
bGRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGUsIENvbnRhaW5lck5vZGU+IGNoaWxkcmVuT2ZU
eXBlKENvbnRhaW5lck5vZGUqIHJvb3QpCit7CisgICAgcmV0dXJuIENoaWxkSXRlcmF0b3JBZGFw
dGVyPEVsZW1lbnRUeXBlLCBDb250YWluZXJOb2RlPihyb290KTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIEVsZW1lbnRUeXBlPgoraW5saW5lIENoaWxkSXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRU
eXBlLCBOb2RlPiBjaGlsZHJlbk9mVHlwZShOb2RlKiByb290KQoreworICAgIHJldHVybiBDaGls
ZEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZSwgTm9kZT4ocm9vdCk7Cit9CisKK30KKworI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRGVzY2VuZGFudEl0ZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Rlc2NlbmRhbnRJdGVyYXRvci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Rlc2NlbmRhbnRJdGVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBEZXNjZW5kYW50SXRlcmF0b3JfaAorI2RlZmluZSBEZXNj
ZW5kYW50SXRlcmF0b3JfaAorCisjaW5jbHVkZSAiRWxlbWVudFRyYXZlcnNhbC5oIgorCisjaWZu
ZGVmIE5ERUJVRworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CitjbGFzcyBEZXNjZW5k
YW50SXRlcmF0b3IgeworcHVibGljOgorICAgIERlc2NlbmRhbnRJdGVyYXRvcihjb25zdCBDb250
YWluZXJOb2RlKiByb290KTsKKyAgICBEZXNjZW5kYW50SXRlcmF0b3IoY29uc3QgQ29udGFpbmVy
Tm9kZSogcm9vdCwgRWxlbWVudFR5cGUqIGN1cnJlbnQpOworICAgIERlc2NlbmRhbnRJdGVyYXRv
ciYgb3BlcmF0b3IrKygpOworICAgIEVsZW1lbnRUeXBlJiBvcGVyYXRvciooKSB7IHJldHVybiAq
bV9jdXJyZW50OyB9CisgICAgRWxlbWVudFR5cGUqIG9wZXJhdG9yLT4oKSB7IHJldHVybiBtX2N1
cnJlbnQ7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzY2VuZGFudEl0ZXJhdG9yJiBv
dGhlcikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9yb290
OworICAgIEVsZW1lbnRUeXBlKiBtX2N1cnJlbnQ7CisjaWZuZGVmIE5ERUJVRworICAgIE93blB0
cjxOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24+IG1fbm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOwor
ICAgIHVpbnQ2NF90IG1faW5pdGlhbERPTVRyZWVWZXJzaW9uOworI2VuZGlmCit9OworCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGUsIHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CitjbGFz
cyBEZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyIHsKK3B1YmxpYzoKKyAgICBEZXNjZW5kYW50SXRl
cmF0b3JBZGFwdGVyKENvbnRhaW5lclR5cGUqIHJvb3QpOworICAgIERlc2NlbmRhbnRJdGVyYXRv
cjxFbGVtZW50VHlwZT4gYmVnaW4oKTsKKyAgICBEZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5
cGU+IGVuZCgpOworCitwcml2YXRlOgorICAgIENvbnRhaW5lclR5cGUqIG1fcm9vdDsKK307CisK
K0Rlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudCwgQ29udGFpbmVyTm9kZT4gZWxlbWVu
dERlc2NlbmRhbnRzKENvbnRhaW5lck5vZGUqIHJvb3QpOworRGVzY2VuZGFudEl0ZXJhdG9yQWRh
cHRlcjxFbGVtZW50LCBOb2RlPiBlbGVtZW50RGVzY2VuZGFudHMoTm9kZSogcm9vdCk7Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+IERlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXI8RWxl
bWVudFR5cGUsIENvbnRhaW5lck5vZGU+IGRlc2NlbmRhbnRzT2ZUeXBlKENvbnRhaW5lck5vZGUq
IHJvb3QpOwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPiBEZXNjZW5kYW50SXRlcmF0
b3JBZGFwdGVyPEVsZW1lbnRUeXBlLCBOb2RlPiBkZXNjZW5kYW50c09mVHlwZShOb2RlKiByb290
KTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgoraW5saW5lIERlc2NlbmRhbnRJ
dGVyYXRvcjxFbGVtZW50VHlwZT46OkRlc2NlbmRhbnRJdGVyYXRvcihjb25zdCBDb250YWluZXJO
b2RlKiByb290KQorICAgIDogbV9yb290KHJvb3QpCisgICAgLCBtX2N1cnJlbnQobnVsbHB0cikK
KyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2luaXRpYWxET01UcmVlVmVyc2lvbigwKQorI2VuZGlm
Cit7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KK2lubGluZSBEZXNjZW5k
YW50SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpEZXNjZW5kYW50SXRlcmF0b3IoY29uc3QgQ29udGFp
bmVyTm9kZSogcm9vdCwgRWxlbWVudFR5cGUqIGN1cnJlbnQpCisgICAgOiBtX3Jvb3Qocm9vdCkK
KyAgICAsIG1fY3VycmVudChjdXJyZW50KQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1fbm9FdmVu
dERpc3BhdGNoQXNzZXJ0aW9uKGFkb3B0UHRyKG5ldyBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24p
KQorICAgICwgbV9pbml0aWFsRE9NVHJlZVZlcnNpb24obV9jdXJyZW50ID8gbV9jdXJyZW50LT5k
b2N1bWVudCgpLT5kb21UcmVlVmVyc2lvbigpIDogMCkKKyNlbmRpZgoreworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CitpbmxpbmUgRGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1l
bnRUeXBlPiYgRGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6b3BlcmF0b3IrKygpCit7
CisgICAgQVNTRVJUKG1fY3VycmVudCk7CisgICAgQVNTRVJUKG1fY3VycmVudC0+ZG9jdW1lbnQo
KS0+ZG9tVHJlZVZlcnNpb24oKSA9PSBtX2luaXRpYWxET01UcmVlVmVyc2lvbik7CisgICAgbV9j
dXJyZW50ID0gVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6bmV4dChtX2N1cnJlbnQsIG1fcm9vdCk7
CisgICAgcmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+
CitpbmxpbmUgYm9vbCBEZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpvcGVyYXRvciE9
KGNvbnN0IERlc2NlbmRhbnRJdGVyYXRvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
cm9vdCA9PSBvdGhlci5tX3Jvb3QpOworICAgIHJldHVybiBtX2N1cnJlbnQgIT0gb3RoZXIubV9j
dXJyZW50OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGUsIHR5cGVuYW1lIENv
bnRhaW5lclR5cGU+CitpbmxpbmUgRGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlw
ZSwgQ29udGFpbmVyVHlwZT46OkRlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXIoQ29udGFpbmVyVHlw
ZSogcm9vdCkKKyAgICA6IG1fcm9vdChyb290KQoreworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
RWxlbWVudFR5cGUsIHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CitpbmxpbmUgRGVzY2VuZGFudEl0
ZXJhdG9yPEVsZW1lbnRUeXBlPiBEZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBl
LCBDb250YWluZXJUeXBlPjo6YmVnaW4oKQoreworICAgIGlmICghbV9yb290LT5pc0NvbnRhaW5l
ck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4o
bV9yb290KTsKKyAgICByZXR1cm4gRGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3Jv
b3QsIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46OmZpcnN0V2l0aGluKHN0YXRpY19jYXN0PENvbnRh
aW5lck5vZGUqPihtX3Jvb3QpKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlw
ZSwgdHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KK2lubGluZSBEZXNjZW5kYW50SXRlcmF0b3I8RWxl
bWVudFR5cGU+IERlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGUsIENvbnRhaW5l
clR5cGU+OjplbmQoKQoreworICAgIHJldHVybiBEZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5
cGU+KG1fcm9vdCk7Cit9CisKK2lubGluZSBEZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1l
bnQsIENvbnRhaW5lck5vZGU+IGVsZW1lbnREZXNjZW5kYW50cyhDb250YWluZXJOb2RlKiByb290
KQoreworICAgIHJldHVybiBEZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnQsIENvbnRh
aW5lck5vZGU+KHJvb3QpOworfQorCitpbmxpbmUgRGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcjxF
bGVtZW50LCBOb2RlPiBlbGVtZW50RGVzY2VuZGFudHMoTm9kZSogcm9vdCkKK3sKKyAgICByZXR1
cm4gRGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50LCBOb2RlPihyb290KTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgoraW5saW5lIERlc2NlbmRhbnRJdGVyYXRv
ckFkYXB0ZXI8RWxlbWVudFR5cGUsIENvbnRhaW5lck5vZGU+IGRlc2NlbmRhbnRzT2ZUeXBlKENv
bnRhaW5lck5vZGUqIHJvb3QpCit7CisgICAgcmV0dXJuIERlc2NlbmRhbnRJdGVyYXRvckFkYXB0
ZXI8RWxlbWVudFR5cGUsIENvbnRhaW5lck5vZGU+KHJvb3QpOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRWxlbWVudFR5cGU+CitpbmxpbmUgRGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcjxFbGVt
ZW50VHlwZSwgTm9kZT4gZGVzY2VuZGFudHNPZlR5cGUoTm9kZSogcm9vdCkKK3sKKyAgICByZXR1
cm4gRGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZSwgTm9kZT4ocm9vdCk7Cit9
CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE1
NDU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAi
Q2FjaGVkQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgi
CisjaW5jbHVkZSAiQ2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1
ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkNvbW1lbnQuaCIKQEAgLTQ5LDYgKzUwLDcg
QEAKICNpbmNsdWRlICJET01OYW1lZEZsb3dDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRE9NV2lu
ZG93LmgiCiAjaW5jbHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJEZXNjZW5kYW50
SXRlcmF0b3IuaCIKICNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRF
dmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgpAQCAtNTksNyArNjEs
NiBAQAogI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCiAjaW5jbHVk
ZSAiRW50aXR5UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVu
dEZhY3RvcnkuaCIKQEAgLTY3NywxMCArNjc4LDEwIEBAIHZvaWQgRG9jdW1lbnQ6OmJ1aWxkQWNj
ZXNzS2V5TWFwKFRyZWVTY28KIHsKICAgICBBU1NFUlQoc2NvcGUpOwogICAgIENvbnRhaW5lck5v
ZGUqIHJvb3ROb2RlID0gc2NvcGUtPnJvb3ROb2RlKCk7Ci0gICAgZm9yIChFbGVtZW50KiBlbGVt
ZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4ocm9vdE5vZGUpOyBlbGVtZW50OyBl
bGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50LCByb290Tm9kZSkpIHsKKyAg
ICBmb3IgKGF1dG8gZWxlbWVudCA9IGVsZW1lbnREZXNjZW5kYW50cyhyb290Tm9kZSkuYmVnaW4o
KSwgZW5kID0gZWxlbWVudERlc2NlbmRhbnRzKHJvb3ROb2RlKS5lbmQoKTsgZWxlbWVudCAhPSBl
bmQ7ICsrZWxlbWVudCkgewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFjY2Vzc0tleSA9
IGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoYWNjZXNza2V5QXR0cik7CiAgICAgICAgIGlmICgh
YWNjZXNzS2V5LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fZWxlbWVudHNCeUFjY2Vzc0tleS5z
ZXQoYWNjZXNzS2V5LmltcGwoKSwgZWxlbWVudCk7CisgICAgICAgICAgICBtX2VsZW1lbnRzQnlB
Y2Nlc3NLZXkuc2V0KGFjY2Vzc0tleS5pbXBsKCksICYqZWxlbWVudCk7CiAKICAgICAgICAgaWYg
KFNoYWRvd1Jvb3QqIHJvb3QgPSBlbGVtZW50LT5zaGFkb3dSb290KCkpCiAgICAgICAgICAgICBi
dWlsZEFjY2Vzc0tleU1hcChyb290KTsKQEAgLTc3Niw3ICs3NzcsNyBAQCB2b2lkIERvY3VtZW50
OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuCiB7CiAgICAgQ29udGFpbmVyTm9kZTo6Y2hpbGRy
ZW5DaGFuZ2VkKGNoYW5nZWRCeVBhcnNlciwgYmVmb3JlQ2hhbmdlLCBhZnRlckNoYW5nZSwgY2hp
bGRDb3VudERlbHRhKTsKICAgICAKLSAgICBFbGVtZW50KiBuZXdEb2N1bWVudEVsZW1lbnQgPSBF
bGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbih0aGlzKTsKKyAgICBFbGVtZW50KiBuZXdEb2N1
bWVudEVsZW1lbnQgPSAmKmVsZW1lbnRDaGlsZHJlbih0aGlzKS5iZWdpbigpOwogICAgIGlmIChu
ZXdEb2N1bWVudEVsZW1lbnQgPT0gbV9kb2N1bWVudEVsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
ICAgICBtX2RvY3VtZW50RWxlbWVudCA9IG5ld0RvY3VtZW50RWxlbWVudDsKQEAgLTE5NzYsOCAr
MTk3Nyw4IEBAIHZvaWQgRG9jdW1lbnQ6OmNyZWF0ZVJlbmRlclRyZWUoKQogCiAgICAgcmVjYWxj
U3R5bGUoU3R5bGU6OkZvcmNlKTsKIAotICAgIGZvciAoRWxlbWVudCogY2hpbGQgPSBFbGVtZW50
VHJhdmVyc2FsOjpmaXJzdFdpdGhpbih0aGlzKTsgY2hpbGQ7IGNoaWxkID0gRWxlbWVudFRyYXZl
cnNhbDo6bmV4dFNpYmxpbmcoY2hpbGQpKQotICAgICAgICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJl
ZShjaGlsZCk7CisgICAgZm9yIChhdXRvIGNoaWxkID0gZWxlbWVudERlc2NlbmRhbnRzKHRoaXMp
LmJlZ2luKCksIGVuZCA9IGVsZW1lbnREZXNjZW5kYW50cyh0aGlzKS5lbmQoKTsgY2hpbGQgIT0g
ZW5kOyArK2NoaWxkKQorICAgICAgICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJlZSgmKmNoaWxkKTsK
IAogICAgIHNldEF0dGFjaGVkKHRydWUpOwogfQpAQCAtMjA3Niw4ICsyMDc3LDggQEAgdm9pZCBE
b2N1bWVudDo6ZGV0YWNoKCkKIAogICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBjaGFuZ2UobV9y
ZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQsIHRydWUpOwogCi0gICAgZm9yIChFbGVtZW50KiBjaGls
ZCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHRoaXMpOyBjaGlsZDsgY2hpbGQgPSBF
bGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhjaGlsZCkpCi0gICAgICAgIFN0eWxlOjpkZXRh
Y2hSZW5kZXJUcmVlKGNoaWxkKTsKKyAgICBmb3IgKGF1dG8gY2hpbGQgPSBlbGVtZW50RGVzY2Vu
ZGFudHModGhpcykuYmVnaW4oKSwgZW5kID0gZWxlbWVudERlc2NlbmRhbnRzKHRoaXMpLmVuZCgp
OyBjaGlsZCAhPSBlbmQ7ICsrY2hpbGQpCisgICAgICAgIFN0eWxlOjpkZXRhY2hSZW5kZXJUcmVl
KCYqY2hpbGQpOwogCiAgICAgY2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICBzZXRB
dHRhY2hlZChmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTU0NTc4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICszMSwxMCBA
QAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdv
cmRzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCisjaW5jbHVkZSAiQ2hpbGRJdGVyYXRv
ci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgiCiAj
aW5jbHVkZSAiRWRpdG9yLmgiCi0jaW5jbHVkZSAiRWxlbWVudFRyYXZlcnNhbC5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEZvbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TEludGVyY2hhbmdlLmgiCkBAIC00NDIsMTIgKzQ0MiwxNCBAQCB2b2lkIEFwcGx5U3R5bGVDb21t
YW5kOjpjbGVhbnVwVW5zdHlsZWRBCiAgICAgLy8gY2FuIGJlIHByb3BhZ2F0ZWQsIHdoaWNoIGNh
biByZXN1bHQgaW4gbW9yZSBzcGxpdHRpbmcuIElmIGEgZHVtbXkgc3BhbiBnZXRzCiAgICAgLy8g
Y2xvbmVkL3NwbGl0LCB0aGUgbmV3IG5vZGUgaXMgYWx3YXlzIGEgc2libGluZyBvZiBpdC4gVGhl
cmVmb3JlLCB3ZSBzY2FuCiAgICAgLy8gYWxsIHRoZSBjaGlsZHJlbiBvZiB0aGUgZHVtbXkncyBw
YXJlbnQKLSAgICBFbGVtZW50KiBuZXh0OwotICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IEVs
ZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKGR1bW15U3BhbkFuY2VzdG9yKTsgZWxlbWVudDsg
ZWxlbWVudCA9IG5leHQpIHsKLSAgICAgICAgbmV4dCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRT
aWJsaW5nKGVsZW1lbnQpOwotICAgICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVu
c3R5bGVkU3R5bGVTcGFuKGVsZW1lbnQpKQotICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZp
bmdDaGlsZHJlbihlbGVtZW50KTsKKworICAgIFZlY3RvcjxFbGVtZW50Kj4gdG9SZW1vdmU7Cisg
ICAgZm9yIChhdXRvIGNoaWxkID0gZWxlbWVudENoaWxkcmVuKGR1bW15U3BhbkFuY2VzdG9yKS5i
ZWdpbigpLCBlbmQgPSBlbGVtZW50Q2hpbGRyZW4oZHVtbXlTcGFuQW5jZXN0b3IpLmVuZCgpOyBj
aGlsZCAhPSBlbmQ7ICsrY2hpbGQpIHsKKyAgICAgICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1
dGVzT3JVbnN0eWxlZFN0eWxlU3BhbigmKmNoaWxkKSkKKyAgICAgICAgICAgIHRvUmVtb3ZlLmFw
cGVuZCgmKmNoaWxkKTsKICAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvUmVt
b3ZlLnNpemUoKTsgKytpKQorICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKHRv
UmVtb3ZlW2ldKTsKIH0KIAogSFRNTEVsZW1lbnQqIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdEFu
Y2VzdG9yc1dpdGhVbmljb2RlQmlkaShOb2RlKiBub2RlLCBib29sIGJlZm9yZSwgV3JpdGluZ0Rp
cmVjdGlvbiBhbGxvd2VkRGlyZWN0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNw
cAkocmV2aXNpb24gMTU0NTc4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMCArMzYsMTAgQEAKICNpbmNsdWRlICJDU1NWYWx1ZUtl
eXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oIgogI2luY2x1ZGUg
IkNvbnRleHRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIkRlc2NlbmRhbnRJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKICNp
bmNsdWRlICJFZGl0b3IuaCIKLSNpbmNsdWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0xMDMsMTQgKzEwMywxNCBAQCBzdGF0aWMgdm9pZCBj
b21wbGV0ZVVSTHMoRG9jdW1lbnRGcmFnbWVuCiAKICAgICBLVVJMIHBhcnNlZEJhc2VVUkwoUGFy
c2VkVVJMU3RyaW5nLCBiYXNlVVJMKTsKIAotICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IEVs
ZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKGZyYWdtZW50KTsgZWxlbWVudDsgZWxlbWVudCA9
IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCwgZnJhZ21lbnQpKSB7CisgICAgZm9yIChh
dXRvIGVsZW1lbnQgPSBlbGVtZW50RGVzY2VuZGFudHMoZnJhZ21lbnQpLmJlZ2luKCksIGVuZCA9
IGVsZW1lbnREZXNjZW5kYW50cyhmcmFnbWVudCkuZW5kKCk7IGVsZW1lbnQgIT0gZW5kOyArK2Vs
ZW1lbnQpIHsKICAgICAgICAgaWYgKCFlbGVtZW50LT5oYXNBdHRyaWJ1dGVzKCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gZWxlbWVudC0+YXR0cmli
dXRlQ291bnQoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CiAgICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGVsZW1lbnQtPmF0
dHJpYnV0ZUF0KGkpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmlzVVJMQXR0cmlidXRlKGF0
dHJpYnV0ZSkgJiYgIWF0dHJpYnV0ZS52YWx1ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICBjaGFuZ2VzLmFwcGVuZChBdHRyaWJ1dGVDaGFuZ2UoZWxlbWVudCwgYXR0cmlidXRlLm5hbWUo
KSwgS1VSTChwYXJzZWRCYXNlVVJMLCBhdHRyaWJ1dGUudmFsdWUoKSkuc3RyaW5nKCkpKTsKKyAg
ICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChBdHRyaWJ1dGVDaGFuZ2UoJiplbGVtZW50LCBh
dHRyaWJ1dGUubmFtZSgpLCBLVVJMKHBhcnNlZEJhc2VVUkwsIGF0dHJpYnV0ZS52YWx1ZSgpKS5z
dHJpbmcoKSkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNYXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNYXBFbGVtZW50LmNwcAkocmV2aXNpb24gMTU0NTc4KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICNp
bmNsdWRlICJIVE1MTWFwRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCisjaW5j
bHVkZSAiRGVzY2VuZGFudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiSFRNTEFyZWFFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50Lmgi
CkBAIC02MiwxMCArNjIsMTEgQEAgSFRNTE1hcEVsZW1lbnQ6On5IVE1MTWFwRWxlbWVudCgpCiBi
b29sIEhUTUxNYXBFbGVtZW50OjptYXBNb3VzZUV2ZW50KExheW91dFBvaW50IGxvY2F0aW9uLCBj
b25zdCBMYXlvdXRTaXplJiBzaXplLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCiB7CiAgICAgSFRN
TEFyZWFFbGVtZW50KiBkZWZhdWx0QXJlYSA9IDA7Ci0gICAgZm9yIChIVE1MQXJlYUVsZW1lbnQq
IGFyZWEgPSBUcmF2ZXJzYWw8SFRNTEFyZWFFbGVtZW50Pjo6Zmlyc3RXaXRoaW4odGhpcyk7IGFy
ZWE7IGFyZWEgPSBUcmF2ZXJzYWw8SFRNTEFyZWFFbGVtZW50Pjo6bmV4dChhcmVhLCB0aGlzKSkg
eworCisgICAgZm9yIChhdXRvIGFyZWEgPSBkZXNjZW5kYW50c09mVHlwZTxIVE1MQXJlYUVsZW1l
bnQ+KHRoaXMpLmJlZ2luKCksIGVuZCA9IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxBcmVhRWxlbWVu
dD4odGhpcykuZW5kKCk7IGFyZWEgIT0gZW5kOyArK2FyZWEpIHsKICAgICAgICAgaWYgKGFyZWEt
PmlzRGVmYXVsdCgpKSB7CiAgICAgICAgICAgICBpZiAoIWRlZmF1bHRBcmVhKQotICAgICAgICAg
ICAgICAgIGRlZmF1bHRBcmVhID0gYXJlYTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0QXJlYSA9
ICYqYXJlYTsKICAgICAgICAgfSBlbHNlIGlmIChhcmVhLT5tYXBNb3VzZUV2ZW50KGxvY2F0aW9u
LCBzaXplLCByZXN1bHQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTQ1Nzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIK
ICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJBdHRyaWJ1
dGUuaCIKKyNpbmNsdWRlICJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAj
aW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2xpZW50UmVjdC5oIgpAQCAtNDAs
NyArNDEsNiBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJEaWFn
bm9zdGljTG9nZ2luZ0tleXMuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1
ZGUgIkVsZW1lbnRUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCkBAIC05MjcsOSArOTI3LDEw
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TWVkaWFSZXNvdXIKICAgICAgICAgLy8g
T3RoZXJ3aXNlLCBpZiB0aGUgbWVkaWEgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgc3JjIGF0dHJp
YnV0ZSBidXQgaGFzIGEgc291cmNlIAogICAgICAgICAvLyBlbGVtZW50IGNoaWxkLCB0aGVuIGxl
dCBtb2RlIGJlIGNoaWxkcmVuIGFuZCBsZXQgY2FuZGlkYXRlIGJlIHRoZSBmaXJzdCBzdWNoIAog
ICAgICAgICAvLyBzb3VyY2UgZWxlbWVudCBjaGlsZCBpbiB0cmVlIG9yZGVyLgotICAgICAgICBp
ZiAoYXV0byBzb3VyY2VFbGVtZW50ID0gVHJhdmVyc2FsPEhUTUxTb3VyY2VFbGVtZW50Pjo6Zmly
c3RDaGlsZCh0aGlzKSkgeworICAgICAgICBhdXRvIHNvdXJjZSA9IGNoaWxkcmVuT2ZUeXBlPEhU
TUxTb3VyY2VFbGVtZW50Pih0aGlzKS5iZWdpbigpOworICAgICAgICBpZiAoc291cmNlICE9IGNo
aWxkcmVuT2ZUeXBlPEhUTUxTb3VyY2VFbGVtZW50Pih0aGlzKS5lbmQoKSkgewogICAgICAgICAg
ICAgbW9kZSA9IGNoaWxkcmVuOwotICAgICAgICAgICAgbV9uZXh0Q2hpbGROb2RlVG9Db25zaWRl
ciA9IHNvdXJjZUVsZW1lbnQ7CisgICAgICAgICAgICBtX25leHRDaGlsZE5vZGVUb0NvbnNpZGVy
ID0gJipzb3VyY2U7CiAgICAgICAgICAgICBtX2N1cnJlbnRTb3VyY2VOb2RlID0gMDsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGUgbWVkaWEgZWxlbWVudCBo
YXMgbmVpdGhlciBhIHNyYyBhdHRyaWJ1dGUgbm9yIGEgc291cmNlIGVsZW1lbnQgCkBAIC0xNDE3
LDcgKzE0MTgsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja01vZGVDaGFuCiAg
ICAgYm9vbCB0cmFja0lzTG9hZGVkID0gdHJ1ZTsKICAgICBpZiAodHJhY2stPnRyYWNrVHlwZSgp
ID09IFRleHRUcmFjazo6VHJhY2tFbGVtZW50KSB7CiAgICAgICAgIHRyYWNrSXNMb2FkZWQgPSBm
YWxzZTsKLSAgICAgICAgZm9yIChhdXRvIHRyYWNrRWxlbWVudCA9IFRyYXZlcnNhbDxIVE1MVHJh
Y2tFbGVtZW50Pjo6Zmlyc3RDaGlsZCh0aGlzKTsgdHJhY2tFbGVtZW50OyB0cmFja0VsZW1lbnQg
PSBUcmF2ZXJzYWw8SFRNTFRyYWNrRWxlbWVudD46Om5leHRTaWJsaW5nKHRyYWNrRWxlbWVudCkp
IHsKKyAgICAgICAgYXV0byBlbmQgPSBjaGlsZHJlbk9mVHlwZTxIVE1MVHJhY2tFbGVtZW50Pih0
aGlzKS5lbmQoKTsKKyAgICAgICAgZm9yIChhdXRvIHRyYWNrRWxlbWVudCA9IGNoaWxkcmVuT2ZU
eXBlPEhUTUxUcmFja0VsZW1lbnQ+KHRoaXMpLmJlZ2luKCk7IHRyYWNrRWxlbWVudCAhPSBlbmQ7
ICsrdHJhY2tFbGVtZW50KSB7CiAgICAgICAgICAgICBpZiAodHJhY2tFbGVtZW50LT50cmFjaygp
ID09IHRyYWNrKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRyYWNrRWxlbWVudC0+cmVhZHlTdGF0
ZSgpID09IEhUTUxUcmFja0VsZW1lbnQ6OkxPQURJTkcgfHwgdHJhY2tFbGVtZW50LT5yZWFkeVN0
YXRlKCkgPT0gSFRNTFRyYWNrRWxlbWVudDo6TE9BREVEKQogICAgICAgICAgICAgICAgICAgICB0
cmFja0lzTG9hZGVkID0gdHJ1ZTsK
</data>
<flag name="review"
          id="231650"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>