<?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>74099</bug_id>
          
          <creation_ts>2011-12-08 09:46:44 -0800</creation_ts>
          <short_desc>There should be a way to count the number of nodes held by undo stack</short_desc>
          <delta_ts>2011-12-10 15:46:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</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>
          
          <blocked>74059</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enrica</cc>
    
    <cc>gregsimon</cc>
    
    <cc>gustavo</cc>
    
    <cc>ojan</cc>
    
    <cc>sullivan</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>517486</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 09:46:44 -0800</bug_when>
    <thetext>To accurately measure and analyze the memory impact of undo stack, we should add some mechanism to count the numer of nodes (+ document) held by undo stack in debug builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517702</commentid>
    <comment_count>1</comment_count>
      <attachid>118453</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 12:49:33 -0800</bug_when>
    <thetext>Created attachment 118453
Adds a debug-only member function to EditCommandComposition and SimpleEditCommand</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517714</commentid>
    <comment_count>2</comment_count>
      <attachid>118453</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-12-08 13:02:58 -0800</bug_when>
    <thetext>Comment on attachment 118453
Adds a debug-only member function to EditCommandComposition and SimpleEditCommand

Attachment 118453 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10807356</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517745</commentid>
    <comment_count>3</comment_count>
      <attachid>118453</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-12-08 13:41:10 -0800</bug_when>
    <thetext>Comment on attachment 118453
Adds a debug-only member function to EditCommandComposition and SimpleEditCommand

Attachment 118453 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10807369</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517746</commentid>
    <comment_count>4</comment_count>
      <attachid>118453</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 13:42:17 -0800</bug_when>
    <thetext>Comment on attachment 118453
Adds a debug-only member function to EditCommandComposition and SimpleEditCommand

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

&gt; Source/WebCore/editing/EditCommand.cpp:258
&gt; +void SimpleEditCommand::addNodeAndDescedents(Node* startNode, HashSet&lt;Node*&gt;&amp; nodes)
&gt; +{
&gt; +    for (Node* node = startNode; node; node = node-&gt;traverseNextNode(startNode))
&gt; +        nodes.add(node);
&gt; +}

Oops I need to wrap this in ifndef. Will do once this patch is reviewed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517752</commentid>
    <comment_count>5</comment_count>
      <attachid>118453</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-12-08 13:47:10 -0800</bug_when>
    <thetext>Comment on attachment 118453
Adds a debug-only member function to EditCommandComposition and SimpleEditCommand

Attachment 118453 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10809390</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517804</commentid>
    <comment_count>6</comment_count>
      <attachid>118453</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-08 14:34:05 -0800</bug_when>
    <thetext>Comment on attachment 118453
Adds a debug-only member function to EditCommandComposition and SimpleEditCommand

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

Can we come up with some kind of trick to do this during doApply and use a global variable so we don’t have to add all these ifdefs and all these additional functions?

&gt; Source/WebCore/editing/EditCommand.h:111
&gt; +    void addNodeAndDescedents(Node*, HashSet&lt;Node*&gt;&amp;);

Spelling mistake here. The word is “descendants”.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517821</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 14:53:22 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 118453 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118453&amp;action=review
&gt; 
&gt; Can we come up with some kind of trick to do this during doApply and use a global variable so we don’t have to add all these ifdefs and all these additional functions?

Yeah, I&apos;ve tried to come with a way but it&apos;s hard to override an assignment to RefPtr... I mean I could wrap RefPtr&lt;&gt; but that seemed like a too much trouble.

&gt; &gt; Source/WebCore/editing/EditCommand.h:111
&gt; &gt; +    void addNodeAndDescedents(Node*, HashSet&lt;Node*&gt;&amp;);
&gt; 
&gt; Spelling mistake here. The word is “descendants”.

Oops. Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517824</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-08 14:55:34 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Can we come up with some kind of trick to do this during doApply and use a global variable so we don’t have to add all these ifdefs and all these additional functions?
&gt; 
&gt; Yeah, I&apos;ve tried to come with a way but it&apos;s hard to override an assignment to RefPtr... I mean I could wrap RefPtr&lt;&gt; but that seemed like a too much trouble.

I think maybe you’re misunderstanding my suggestion.

I just meant that we’d add code at the end of each doApply that would add the nodes to a global collection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517832</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 15:05:07 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; I think maybe you’re misunderstanding my suggestion.
&gt; 
&gt; I just meant that we’d add code at the end of each doApply that would add the nodes to a global collection.

Oh I see. But we might over count if we do that since some ports limit the depth of undo stack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517884</commentid>
    <comment_count>10</comment_count>
      <attachid>118453</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-08 16:15:52 -0800</bug_when>
    <thetext>Comment on attachment 118453
Adds a debug-only member function to EditCommandComposition and SimpleEditCommand

Looks good to me with the spelling correction Darin pointed out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517888</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-08 16:21:29 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; I think maybe you’re misunderstanding my suggestion.
&gt; &gt; 
&gt; &gt; I just meant that we’d add code at the end of each doApply that would add the nodes to a global collection.
&gt; 
&gt; Oh I see. But we might over count if we do that since some ports limit the depth of undo stack.

Sure, but I was thinking the housekeeping would be done by some code managing the edit commands to try to associate the nodes with the right commands. But without having to add a function to every edit command class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517893</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 16:25:00 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Sure, but I was thinking the housekeeping would be done by some code managing the edit commands to try to associate the nodes with the right commands. But without having to add a function to every edit command class.

I don&apos;t think I&apos;m following you here. The interesting data is the number of nodes kept alive in the undo stack, and to figure that out, we&apos;d have to call getNodesInCommand on all editing commands that are in the undo stack. e.g. if same nodes are kept by multiple editing commands, then we don&apos;t want to count them twice. Similarly, if some editing commands go way, then we&apos;d have to recompute the number.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517894</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 16:26:59 -0800</bug_when>
    <thetext>An alternative approach we can take is to use HashMap&lt;Node*, unsigned&gt; where the second value indicates the number of edit commands that holds onto this node. We can then decrement the counter in the destructor of simple edit commands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517924</commentid>
    <comment_count>14</comment_count>
      <attachid>118453</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-08 16:57:36 -0800</bug_when>
    <thetext>Comment on attachment 118453
Adds a debug-only member function to EditCommandComposition and SimpleEditCommand

Attachment 118453 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10809454</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518442</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-09 13:19:26 -0800</bug_when>
    <thetext>Anyway, I think this is a valuable patch as is. We can always improve or even revert this and implement another approach once we find a better way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518822</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-10 13:35:13 -0800</bug_when>
    <thetext>Committed r102527: &lt;http://trac.webkit.org/changeset/102527&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518833</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-10 15:46:42 -0800</bug_when>
    <thetext>Build fixes in http://trac.webkit.org/changeset/102529 and http://trac.webkit.org/changeset/102531</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118453</attachid>
            <date>2011-12-08 12:49:33 -0800</date>
            <delta_ts>2011-12-08 16:57:36 -0800</delta_ts>
            <desc>Adds a debug-only member function to EditCommandComposition and SimpleEditCommand</desc>
            <filename>bug-74099-20111208124932.patch</filename>
            <type>text/plain</type>
            <size>22933</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBACisyMDExLTEyLTA4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFRoZXJlIHNob3VsZCBiZSBhIHdh
eSB0byBjb3VudCB0aGUgbnVtYmVyIG9mIG5vZGVzIGhlbGQgYnkgdW5kbyBzdGFjaworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwOTkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZ2V0Tm9kZXNJbkNv
bW1hbmQgdG8gYWxsIFNpbXBsZUVkaXRDb21tYW5kcyBhbmQgRWRpdENvbW1hbmRDb21wb3NpdGlv
biBpbiBkZWJ1ZyBidWlsZHMuCisgICAgICAgIFdlIGNhbiBlYXNpbHkgYWdncmVnYXRlIHRoZSBu
dW1iZXIgb2Ygbm9kZXMgaGVsZCBieSB0aGUgdW5kbyBzdGFjayBieSBjYWxsaW5nCisgICAgICAg
IHRoaXMgZnVuY3Rpb24gb24gZWFjaCBpdGVtIGluIHRoZSB1bmRvIHN0YWNrLgorCisgICAgICAg
ICogZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBl
bmROb2RlQ29tbWFuZDo6Z2V0Tm9kZXNJbkNvbW1hbmQpOgorICAgICAgICAqIGVkaXRpbmcvQXBw
ZW5kTm9kZUNvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OmdldE5vZGVz
SW5Db21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmg6Cisg
ICAgICAgICogZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmdldE5vZGVzSW5Db21tYW5kKToK
KyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuaDoKKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUVkaXRD
b21tYW5kOjphZGROb2RlQW5kRGVzY2VkZW50cyk6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29t
bWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6YXBwbGllZEVkaXRpbmcpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0SW50b1Rl
eHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kOjpnZXROb2Rlc0luQ29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6Z2V0
Tm9kZXNJbkNvbW1hbmQpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0Tm9kZUJlZm9yZUNvbW1h
bmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpnZXRO
b2Rlc0luQ29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRz
Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZDo6Z2V0Tm9kZXNJ
bkNvbW1hbmQpOgorICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmg6
CisgICAgICAgICogZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW1vdmVOb2RlQ29tbWFuZDo6Z2V0Tm9kZXNJbkNvbW1hbmQpOgorICAgICAgICAqIGVk
aXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VOb2Rl
V2l0aFNwYW5Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VOb2RlV2l0aFNw
YW5Db21tYW5kOjpnZXROb2Rlc0luQ29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNl
Tm9kZVdpdGhTcGFuQ29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0
ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQ6
OmdldE5vZGVzSW5Db21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVD
b21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmg6CisgICAg
ICAgICogZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNwbGl0RWxlbWVudENvbW1hbmQ6OmdldE5vZGVzSW5Db21tYW5kKToKKyAgICAgICAgKiBlZGl0
aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL1NwbGl0VGV4dE5v
ZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4dE5vZGVDb21tYW5kOjpn
ZXROb2Rlc0luQ29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFu
ZC5oOgorICAgICAgICAqIGVkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZDo6Z2V0
Tm9kZXNJbkNvbW1hbmQpOgorICAgICAgICAqIGVkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNw
YW5Db21tYW5kLmg6CisKIDIwMTEtMTItMDggIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29n
bGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJldHVybiBub2RlIGNvdW50cyBvbiB0
aGUgZG9jdW1lbnQgLyBkZXRhY2hlZCByb290IGJhc2lzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTAyMzU2KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc5LDQgKzc5LDEyIEBAIHZvaWQgQXBwZW5kTm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgpCiAg
ICAgbV9ub2RlLT5yZW1vdmUoZWMpOwogfQogCisjaWZuZGVmIE5ERUJVRwordm9pZCBBcHBlbmRO
b2RlQ29tbWFuZDo6Z2V0Tm9kZXNJbkNvbW1hbmQoSGFzaFNldDxOb2RlKj4mIG5vZGVzKQorewor
ICAgIGFkZE5vZGVBbmREZXNjZWRlbnRzKG1fcGFyZW50LmdldCgpLCBub2Rlcyk7CisgICAgYWRk
Tm9kZUFuZERlc2NlZGVudHMobV9ub2RlLmdldCgpLCBub2Rlcyk7Cit9CisjZW5kaWYKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBlbmRO
b2RlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwZW5k
Tm9kZUNvbW1hbmQuaAkocmV2aXNpb24gMTAyMzU2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBlbmROb2RlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCwxMiBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEFwcGVuZE5vZGVDb21tYW5kKFBhc3NSZWZQdHI8Q29udGFp
bmVyTm9kZT4gcGFyZW50LCBQYXNzUmVmUHRyPE5vZGU+KTsKIAotICAgIHZpcnR1YWwgdm9pZCBk
b0FwcGx5KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpOworICAgIHZpcnR1YWwgdm9p
ZCBkb0FwcGx5KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpIE9WRVJS
SURFOworCisjaWZuZGVmIE5ERUJVRworICAgIHZpcnR1YWwgdm9pZCBnZXROb2Rlc0luQ29tbWFu
ZChIYXNoU2V0PE5vZGUqPiYpIE9WRVJSSURFOworI2VuZGlmCiAKICAgICBSZWZQdHI8Q29udGFp
bmVyTm9kZT4gbV9wYXJlbnQ7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lv
biAxMDIzNTcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxNSBAQCB2b2lkIEVkaXRDb21tYW5k
Q29tcG9zaXRpb246OmFwcGVuZChTaW1wCiAgICAgbV9jb21tYW5kcy5hcHBlbmQoY29tbWFuZCk7
CiB9CiAKKyNpZm5kZWYgTkRFQlVHCit2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246OmdldE5v
ZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9kZSo+JiBub2RlcykKK3sKKyAgICBzaXplX3Qgc2l6ZSA9
IG1fY29tbWFuZHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQorICAgICAgICBtX2NvbW1hbmRzW2ldLT5nZXROb2Rlc0luQ29tbWFuZChub2Rlcyk7Cit9Cisj
ZW5kaWYKKwogQ29tcG9zaXRlRWRpdENvbW1hbmQ6OkNvbXBvc2l0ZUVkaXRDb21tYW5kKERvY3Vt
ZW50ICpkb2N1bWVudCkKICAgICA6IEVkaXRDb21tYW5kKGRvY3VtZW50KQogewpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAkocmV2aXNpb24g
MTAyMzU3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGRvUmVhcHBseSgpIE9WRVJSSURFOwogICAgIHZvaWQgYXBwZW5kKFNpbXBsZUVkaXRDb21t
YW5kKik7CiAKKyNpZm5kZWYgTkRFQlVHCisgICAgdmlydHVhbCB2b2lkIGdldE5vZGVzSW5Db21t
YW5kKEhhc2hTZXQ8Tm9kZSo+JikgT1ZFUlJJREU7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBF
ZGl0Q29tbWFuZENvbXBvc2l0aW9uKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGlu
Z1NlbGVjdGlvbikKICAgICAgICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCwgc3RhcnRpbmdTZWxl
Y3Rpb24sIGVuZGluZ1NlbGVjdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVs
ZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTAyMzU2KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzYsNCArNzYsMTEgQEAgdm9pZCBEZWxldGVGcm9tVGV4dE5vZGVD
b21tYW5kOjpkb1VuYXBwbAogICAgICAgICBkb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPm5v
ZGVUZXh0Q2hhbmdlTm90aWZpY2F0aW9uKG1fbm9kZS0+cmVuZGVyZXIoKSwgQVhPYmplY3RDYWNo
ZTo6QVhUZXh0SW5zZXJ0ZWQsIG1fb2Zmc2V0LCBtX3RleHQpOwogfQogCisjaWZuZGVmIE5ERUJV
Rwordm9pZCBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kOjpnZXROb2Rlc0luQ29tbWFuZChIYXNo
U2V0PE5vZGUqPiYgbm9kZXMpCit7CisgICAgYWRkTm9kZUFuZERlc2NlZGVudHMobV9ub2RlLmdl
dCgpLCBub2Rlcyk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5k
LmgJKHJldmlzaW9uIDEwMjM1NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJv
bVRleHROb2RlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0MiwxMyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQoUGFzc1JlZlB0cjxU
ZXh0PiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCk7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgZG9BcHBseSgpOwotICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKLQorICAgIHZpcnR1
YWwgdm9pZCBkb0FwcGx5KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgp
IE9WRVJSSURFOworICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0Tm9k
ZXNJbkNvbW1hbmQoSGFzaFNldDxOb2RlKj4mKSBPVkVSUklERTsKKyNlbmRpZgorICAgIAogICAg
IFJlZlB0cjxUZXh0PiBtX25vZGU7CiAgICAgdW5zaWduZWQgbV9vZmZzZXQ7CiAgICAgdW5zaWdu
ZWQgbV9jb3VudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCShy
ZXZpc2lvbiAxMDIzNTcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDYgKzI1MSwxMiBAQCB2b2lkIEVkaXRDb21tYW5kOjpz
ZXRQYXJlbnQoQ29tcG9zaXRlRWRpCiAgICAgfQogfQogCit2b2lkIFNpbXBsZUVkaXRDb21tYW5k
OjphZGROb2RlQW5kRGVzY2VkZW50cyhOb2RlKiBzdGFydE5vZGUsIEhhc2hTZXQ8Tm9kZSo+JiBu
b2RlcykKK3sKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7IG5vZGU7IG5vZGUgPSBu
b2RlLT50cmF2ZXJzZU5leHROb2RlKHN0YXJ0Tm9kZSkpCisgICAgICAgIG5vZGVzLmFkZChub2Rl
KTsKK30KKwogdm9pZCBhcHBseUNvbW1hbmQoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY29tbWFu
ZCkKIHsKICAgICBjb21tYW5kLT5hcHBseSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0Q29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dENvbW1hbmQuaAkocmV2aXNpb24gMTAyMzU3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxMCBAQAogI2luY2x1ZGUg
IkVkaXRBY3Rpb24uaCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCiAKKyNpZm5kZWYg
TkRFQlVHCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIENvbXBvc2l0ZUVkaXRDb21tYW5kOwpAQCAtOTQsOCArOTgsMTkgQEAg
cHJpdmF0ZToKIH07CiAKIGNsYXNzIFNpbXBsZUVkaXRDb21tYW5kIDogcHVibGljIEVkaXRDb21t
YW5kIHsKK3B1YmxpYzoKKworI2lmbmRlZiBOREVCVUcKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0Tm9k
ZXNJbkNvbW1hbmQoSGFzaFNldDxOb2RlKj4mKSA9IDA7CisjZW5kaWYKKwogcHJvdGVjdGVkOgog
ICAgIFNpbXBsZUVkaXRDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCkgOiBFZGl0Q29tbWFuZChk
b2N1bWVudCkgeyB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBhZGROb2RlQW5kRGVzY2Vk
ZW50cyhOb2RlKiwgSGFzaFNldDxOb2RlKj4mKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCBpc1NpbXBsZUVkaXRDb21tYW5kKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
dHJ1ZTsgfQogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDEw
MjM1NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODkwLDYgKzg5MCw3IEBAIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGluZyhQYXNzUmVm
UHRyPEMKICAgICAgICAgaWYgKGNsaWVudCgpKQogICAgICAgICAgICAgY2xpZW50KCktPnJlZ2lz
dGVyQ29tbWFuZEZvclVuZG8odG9Db21wb3NpdGVFZGl0Q29tbWFuZChtX2xhc3RFZGl0Q29tbWFu
ZC5nZXQoKSktPmVuc3VyZUNvbXBvc2l0aW9uKCkpOwogICAgIH0KKwogICAgIHJlc3BvbmRUb0No
YW5nZWRDb250ZW50cyhuZXdTZWxlY3Rpb24pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9u
IDEwMjM1NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDQgKzc2LDExIEBAIHZvaWQgSW5zZXJ0SW50
b1RleHROb2RlQ29tbWFuZDo6ZG9VbmFwcGwKICAgICBtX25vZGUtPmRlbGV0ZURhdGEobV9vZmZz
ZXQsIG1fdGV4dC5sZW5ndGgoKSwgZWMpOwogfQogCisjaWZuZGVmIE5ERUJVRwordm9pZCBJbnNl
cnRJbnRvVGV4dE5vZGVDb21tYW5kOjpnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYg
bm9kZXMpCit7CisgICAgYWRkTm9kZUFuZERlc2NlZGVudHMobV9ub2RlLmdldCgpLCBub2Rlcyk7
Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmgJKHJldmlzaW9u
IDEwMjM1NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29t
bWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0MiwxMyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQoUGFzc1JlZlB0cjxUZXh0PiBub2RlLCB1
bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
ZG9BcHBseSgpOwotICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKLQorICAgIHZpcnR1YWwg
dm9pZCBkb0FwcGx5KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpIE9W
RVJSSURFOworICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0Tm9kZXNJ
bkNvbW1hbmQoSGFzaFNldDxOb2RlKj4mKSBPVkVSUklERTsKKyNlbmRpZgorICAgIAogICAgIFJl
ZlB0cjxUZXh0PiBtX25vZGU7CiAgICAgdW5zaWduZWQgbV9vZmZzZXQ7CiAgICAgU3RyaW5nIG1f
dGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0Tm9kZUJlZm9yZUNvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0Tm9kZUJl
Zm9yZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDIzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNCAr
NzEsMTIgQEAgdm9pZCBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6ZG9VbmFwcGx5KAogICAgIG1f
aW5zZXJ0Q2hpbGQtPnJlbW92ZShlYyk7CiB9CiAKKyNpZm5kZWYgTkRFQlVHCit2b2lkIEluc2Vy
dE5vZGVCZWZvcmVDb21tYW5kOjpnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYgbm9k
ZXMpCit7CisgICAgYWRkTm9kZUFuZERlc2NlZGVudHMobV9pbnNlcnRDaGlsZC5nZXQoKSwgbm9k
ZXMpOworICAgIGFkZE5vZGVBbmREZXNjZWRlbnRzKG1fcmVmQ2hpbGQuZ2V0KCksIG5vZGVzKTsK
K30KKyNlbmRpZgorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydE5vZGVC
ZWZvcmVDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnROb2RlQmVmb3JlQ29tbWFuZC5oCShyZXZpc2lvbiAxMDIzNTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDkgKzQwLDEzIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1h
bmQoUGFzc1JlZlB0cjxOb2RlPiBjaGlsZFRvSW5zZXJ0LCBQYXNzUmVmUHRyPE5vZGU+IGNoaWxk
VG9JbnNlcnRCZWZvcmUpOwogCi0gICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZG9VbmFwcGx5KCk7Ci0KKyAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKSBPVkVSUklERTsKKyAgICAKKyNpZm5k
ZWYgTkRFQlVHCisgICAgdmlydHVhbCB2b2lkIGdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9k
ZSo+JikgT1ZFUlJJREU7CisjZW5kaWYKKyAgICAKICAgICBSZWZQdHI8Tm9kZT4gbV9pbnNlcnRD
aGlsZDsKICAgICBSZWZQdHI8Tm9kZT4gbV9yZWZDaGlsZDsgCiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFu
ZC5jcHAJKHJldmlzaW9uIDEwMjM1NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWVyZ2VJ
ZGVudGljYWxFbGVtZW50c0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw0ICs4Niwx
MiBAQCB2b2lkIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb1VuCiAgICAgICAgIG1f
ZWxlbWVudDEtPmFwcGVuZENoaWxkKGNoaWxkcmVuW2ldLnJlbGVhc2UoKSwgZWMpOwogfQogCisj
aWZuZGVmIE5ERUJVRwordm9pZCBNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZDo6Z2V0Tm9k
ZXNJbkNvbW1hbmQoSGFzaFNldDxOb2RlKj4mIG5vZGVzKQoreworICAgIGFkZE5vZGVBbmREZXNj
ZWRlbnRzKG1fZWxlbWVudDEuZ2V0KCksIG5vZGVzKTsKKyAgICBhZGROb2RlQW5kRGVzY2VkZW50
cyhtX2VsZW1lbnQyLmdldCgpLCBub2Rlcyk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1l
bnRzQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWVyZ2VJ
ZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaAkocmV2aXNpb24gMTAyMzU2KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw5ICs0MCwxMyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIE1lcmdlSWRlbnRp
Y2FsRWxlbWVudHNDb21tYW5kKFBhc3NSZWZQdHI8RWxlbWVudD4sIFBhc3NSZWZQdHI8RWxlbWVu
dD4pOwogCi0gICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9V
bmFwcGx5KCk7Ci0KKyAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBkb1VuYXBwbHkoKSBPVkVSUklERTsKKyAgICAKKyNpZm5kZWYgTkRFQlVHCisg
ICAgdmlydHVhbCB2b2lkIGdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9kZSo+JikgT1ZFUlJJ
REU7CisjZW5kaWYKKyAgICAKICAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50MTsKICAgICBS
ZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50MjsKICAgICBSZWZQdHI8Tm9kZT4gbV9hdENoaWxkOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlD
b21tYW5kLmNwcAkocmV2aXNpb24gMTAyMzU2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw0ICs1NCwx
MSBAQCB2b2lkIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZDo6ZG9VbmFwcGx5CiAgICAgc3R5bGUt
PnNldFByb3BlcnR5KG1fcHJvcGVydHksIG1fb2xkVmFsdWUsIG1faW1wb3J0YW50KTsKIH0KIAor
I2lmbmRlZiBOREVCVUcKK3ZvaWQgUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kOjpnZXROb2Rlc0lu
Q29tbWFuZChIYXNoU2V0PE5vZGUqPiYgbm9kZXMpCit7CisgICAgYWRkTm9kZUFuZERlc2NlZGVu
dHMobV9lbGVtZW50LmdldCgpLCBub2Rlcyk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNv
bW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1By
b3BlcnR5Q29tbWFuZC5oCShyZXZpc2lvbiAxMDIzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0
MiwxMyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZChE
b2N1bWVudCosIFBhc3NSZWZQdHI8U3R5bGVkRWxlbWVudD4sIENTU1Byb3BlcnR5SUQgcHJvcGVy
dHkpOwogCi0gICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9V
bmFwcGx5KCk7Ci0KKyAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBkb1VuYXBwbHkoKSBPVkVSUklERTsKKyAgICAKKyNpZm5kZWYgTkRFQlVHCisg
ICAgdmlydHVhbCB2b2lkIGdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9kZSo+JikgT1ZFUlJJ
REU7CisjZW5kaWYKKyAgICAKICAgICBSZWZQdHI8U3R5bGVkRWxlbWVudD4gbV9lbGVtZW50Owog
ICAgIENTU1Byb3BlcnR5SUQgbV9wcm9wZXJ0eTsKICAgICBTdHJpbmcgbV9vbGRWYWx1ZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuY3BwCShyZXZp
c2lvbiAxMDIzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNCArNjMsMTMgQEAgdm9pZCBSZW1vdmVOb2RlQ29t
bWFuZDo6ZG9VbmFwcGx5KCkKICAgICBwYXJlbnQtPmluc2VydEJlZm9yZShtX25vZGUuZ2V0KCks
IHJlZkNoaWxkLmdldCgpLCBlYyk7CiB9CiAKKyNpZm5kZWYgTkRFQlVHCit2b2lkIFJlbW92ZU5v
ZGVDb21tYW5kOjpnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYgbm9kZXMpCit7Cisg
ICAgYWRkTm9kZUFuZERlc2NlZGVudHMobV9wYXJlbnQuZ2V0KCksIG5vZGVzKTsKKyAgICBhZGRO
b2RlQW5kRGVzY2VkZW50cyhtX3JlZkNoaWxkLmdldCgpLCBub2Rlcyk7CisgICAgYWRkTm9kZUFu
ZERlc2NlZGVudHMobV9ub2RlLmdldCgpLCBub2Rlcyk7Cit9CisjZW5kaWYKKwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuaAkocmV2aXNpb24gMTAy
MzU2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw4ICs0MCwxMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFJlbW92
ZU5vZGVDb21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4pOwogCi0gICAgdmlydHVhbCB2b2lkIGRvQXBw
bHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CisgICAgdmlydHVhbCB2b2lkIGRv
QXBwbHkoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCkgT1ZFUlJJREU7
CisKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5v
ZGUqPiYpIE9WRVJSSURFOworI2VuZGlmCiAKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwogICAg
IFJlZlB0cjxDb250YWluZXJOb2RlPiBtX3BhcmVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwCShyZXZpc2lv
biAxMDIzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5D
b21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNCArODUsMTIgQEAgdm9pZCBSZXBsYWNl
Tm9kZVdpdGhTcGFuQ29tbWFuZDo6ZG9VbmFwcAogICAgIHN3YXBJbk5vZGVQcmVzZXJ2aW5nQXR0
cmlidXRlc0FuZENoaWxkcmVuKG1fZWxlbWVudFRvUmVwbGFjZS5nZXQoKSwgbV9zcGFuRWxlbWVu
dC5nZXQoKSk7CiB9CiAKKyNpZm5kZWYgTkRFQlVHCit2b2lkIFJlcGxhY2VOb2RlV2l0aFNwYW5D
b21tYW5kOjpnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYgbm9kZXMpCit7CisgICAg
YWRkTm9kZUFuZERlc2NlZGVudHMobV9lbGVtZW50VG9SZXBsYWNlLmdldCgpLCBub2Rlcyk7Cisg
ICAgYWRkTm9kZUFuZERlc2NlZGVudHMobV9zcGFuRWxlbWVudC5nZXQoKSwgbm9kZXMpOworfQor
I2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmgJKHJldmlzaW9uIDEw
MjM1NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1h
bmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsMTIgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZChQYXNzUmVmUHRyPEhUTUxFbGVtZW50Pik7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwotICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBw
bHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBkb1VuYXBwbHkoKSBPVkVSUklERTsKKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdmly
dHVhbCB2b2lkIGdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9kZSo+JikgT1ZFUlJJREU7Cisj
ZW5kaWYKIAogICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbV9lbGVtZW50VG9SZXBsYWNlOwogICAg
IFJlZlB0cjxIVE1MRWxlbWVudD4gbV9zcGFuRWxlbWVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAx
MDIzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNCArNTQsMTEgQEAgdm9pZCBTZXROb2RlQXR0cmli
dXRlQ29tbWFuZDo6ZG9VbmFwcGx5KAogICAgIG1fb2xkVmFsdWUgPSBudWxsU3RyaW5nOwogfQog
CisjaWZuZGVmIE5ERUJVRwordm9pZCBTZXROb2RlQXR0cmlidXRlQ29tbWFuZDo6Z2V0Tm9kZXNJ
bkNvbW1hbmQoSGFzaFNldDxOb2RlKj4mIG5vZGVzKQoreworICAgIGFkZE5vZGVBbmREZXNjZWRl
bnRzKG1fZWxlbWVudC5nZXQoKSwgbm9kZXMpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNv
bW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldE5vZGVBdHRy
aWJ1dGVDb21tYW5kLmgJKHJldmlzaW9uIDEwMjM1NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEs
MTIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTZXROb2RlQXR0cmlidXRlQ29tbWFuZChQYXNz
UmVmUHRyPEVsZW1lbnQ+LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUpOwogCi0gICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CisgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCkgT1ZFUlJJREU7CisKKyNpZm5kZWYg
TkRFQlVHCisgICAgdmlydHVhbCB2b2lkIGdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9kZSo+
JikgT1ZFUlJJREU7CisjZW5kaWYKIAogICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7CiAg
ICAgUXVhbGlmaWVkTmFtZSBtX2F0dHJpYnV0ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5oCShyZXZpc2lvbiAxMDIzNTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsOCArNDAsMTMgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFNldFNlbGVjdGlvbkNvbW1h
bmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25P
cHRpb25zKTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwotICAgIHZpcnR1YWwgdm9pZCBk
b1VuYXBwbHkoKTsKKworICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGRvVW5hcHBseSgpIE9WRVJSSURFOworCisjaWZuZGVmIE5ERUJVRworICAg
IHZpcnR1YWwgdm9pZCBnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYpIE9WRVJSSURF
IHsgfQorI2VuZGlmCiAKICAgICBGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyBt
X29wdGlvbnM7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBtX3NlbGVjdGlvblRvU2V0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCShyZXZp
c2lvbiAxMDIzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNSArMTA3LDE0IEBAIHZvaWQgU3BsaXRFbGVt
ZW50Q29tbWFuZDo6ZG9SZWFwcGx5KCkKICAgICAKICAgICBleGVjdXRlQXBwbHkoKTsKIH0KKwor
I2lmbmRlZiBOREVCVUcKK3ZvaWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6Z2V0Tm9kZXNJbkNvbW1h
bmQoSGFzaFNldDxOb2RlKj4mIG5vZGVzKQoreworICAgIGFkZE5vZGVBbmREZXNjZWRlbnRzKG1f
ZWxlbWVudDEuZ2V0KCksIG5vZGVzKTsKKyAgICBhZGROb2RlQW5kRGVzY2VkZW50cyhtX2VsZW1l
bnQyLmdldCgpLCBub2Rlcyk7CisgICAgYWRkTm9kZUFuZERlc2NlZGVudHMobV9hdENoaWxkLmdl
dCgpLCBub2Rlcyk7Cit9CisjZW5kaWYKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5oCShyZXZp
c2lvbiAxMDIzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1h
bmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTEgKzQwLDE1IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgU3BsaXRFbGVtZW50Q29tbWFuZChQYXNzUmVmUHRyPEVsZW1lbnQ+LCBQYXNzUmVmUHRy
PE5vZGU+IHNwbGl0UG9pbnRDaGlsZCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwot
ICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5
KCk7CisgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZG9VbmFwcGx5KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRvUmVhcHBseSgpIE9W
RVJSSURFOwogICAgIHZvaWQgZXhlY3V0ZUFwcGx5KCk7CiAKKyNpZm5kZWYgTkRFQlVHCisgICAg
dmlydHVhbCB2b2lkIGdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9kZSo+JikgT1ZFUlJJREU7
CisjZW5kaWYKKwogICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQxOwogICAgIFJlZlB0cjxF
bGVtZW50PiBtX2VsZW1lbnQyOwogICAgIFJlZlB0cjxOb2RlPiBtX2F0Q2hpbGQ7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAkocmV2
aXNpb24gMTAyMzU2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw1ICsxMDMsMTMgQEAgdm9pZCBTcGxpdFRl
eHROb2RlQ29tbWFuZDo6aW5zZXJ0VGV4dDFBbgogICAgICAgICByZXR1cm47CiAgICAgbV90ZXh0
Mi0+ZGVsZXRlRGF0YSgwLCBtX29mZnNldCwgZWMpOwogfQorCisjaWZuZGVmIE5ERUJVRwordm9p
ZCBTcGxpdFRleHROb2RlQ29tbWFuZDo6Z2V0Tm9kZXNJbkNvbW1hbmQoSGFzaFNldDxOb2RlKj4m
IG5vZGVzKQoreworICAgIGFkZE5vZGVBbmREZXNjZWRlbnRzKG1fdGV4dDEuZ2V0KCksIG5vZGVz
KTsKKyAgICBhZGROb2RlQW5kRGVzY2VkZW50cyhtX3RleHQyLmdldCgpLCBub2Rlcyk7Cit9Cisj
ZW5kaWYKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmgJKHJldmlzaW9uIDEwMjM1NikKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIsMTAgKzQyLDE0IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU3BsaXRUZXh0
Tm9kZUNvbW1hbmQoUGFzc1JlZlB0cjxUZXh0PiwgaW50IG9mZnNldCk7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgZG9BcHBseSgpOwotICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZG9SZWFwcGx5KCk7CisgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGRvUmVhcHBseSgpIE9WRVJSSURFOwogICAgIHZvaWQgaW5zZXJ0VGV4dDFBbmRUcmltVGV4
dDIoKTsKKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdmlydHVhbCB2b2lkIGdldE5vZGVzSW5D
b21tYW5kKEhhc2hTZXQ8Tm9kZSo+JikgT1ZFUlJJREU7CisjZW5kaWYKIAogICAgIFJlZlB0cjxU
ZXh0PiBtX3RleHQxOwogICAgIFJlZlB0cjxUZXh0PiBtX3RleHQyOwpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9XcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21t
YW5kLmNwcAkocmV2aXNpb24gMTAyMzU2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9XcmFw
Q29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw1ICs4
OSwxMyBAQCB2b2lkIFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZDo6ZG9SCiAKICAgICBl
eGVjdXRlQXBwbHkoKTsKIH0KKworI2lmbmRlZiBOREVCVUcKK3ZvaWQgV3JhcENvbnRlbnRzSW5E
dW1teVNwYW5Db21tYW5kOjpnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYgbm9kZXMp
Cit7CisgICAgYWRkTm9kZUFuZERlc2NlZGVudHMobV9lbGVtZW50LmdldCgpLCBub2Rlcyk7Cisg
ICAgYWRkTm9kZUFuZERlc2NlZGVudHMobV9kdW1teVNwYW4uZ2V0KCksIG5vZGVzKTsKK30KKyNl
bmRpZgogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9XcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5oCShy
ZXZpc2lvbiAxMDIzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dyYXBDb250ZW50c0lu
RHVtbXlTcGFuQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsMTUgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQoUGFzc1Jl
ZlB0cjxFbGVtZW50Pik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwotICAgIHZpcnR1
YWwgdm9pZCBkb1VuYXBwbHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5KCk7CisgICAg
dmlydHVhbCB2b2lkIGRvQXBwbHkoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9VbmFw
cGx5KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRvUmVhcHBseSgpIE9WRVJSSURFOwog
ICAgIHZvaWQgZXhlY3V0ZUFwcGx5KCk7CiAKKyNpZm5kZWYgTkRFQlVHCisgICAgdmlydHVhbCB2
b2lkIGdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9kZSo+JikgT1ZFUlJJREU7CisjZW5kaWYK
KwogICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7CiAgICAgUmVmUHRyPEhUTUxFbGVtZW50
PiBtX2R1bW15U3BhbjsKIH07Cg==
</data>
<flag name="review"
          id="118211"
          type_id="1"
          status="+"
          setter="enrica"
    />
    <flag name="commit-queue"
          id="118214"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>