<?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>31867</bug_id>
          
          <creation_ts>2009-11-25 06:08:45 -0800</creation_ts>
          <short_desc>[Android] WebCore/History code needs upstreaming.</short_desc>
          <delta_ts>2009-12-03 04:39:54 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Android</rep_platform>
          <op_sys>Android</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>
          <dependson>31913</dependson>
    
    <dependson>31914</dependson>
    
    <dependson>31915</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ben Murdoch">benm</reporter>
          <assigned_to name="Ben Murdoch">benm</assigned_to>
          <cc>android-webkit-unforking</cc>
    
    <cc>beidson</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>166411</commentid>
    <comment_count>0</comment_count>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2009-11-25 06:08:45 -0800</bug_when>
    <thetext>This patch adds the WebCore/history/android directory which contains some Android specific history implementation.

We also require calls to the notifyHistoryItemChanged function at points that other platforms do not, and vice versa so this patch adds an extra enum parameter to that function so we can determine what action has caused the history to be changed. Then in the platform specific implementation of the function we can switch on that enum value to determine whether or not the history should be updated. Currently as far as I can tell Mac is the only other port that redefines notifyHistoryItemChanged and I&apos;ve updated it&apos;s logic so there should be no change in functionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166420</commentid>
    <comment_count>1</comment_count>
      <attachid>43840</attachid>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2009-11-25 07:03:55 -0800</bug_when>
    <thetext>Created attachment 43840
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166436</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-25 07:41:44 -0800</bug_when>
    <thetext>This change needs more explanation.  I&apos;m not sure what you&apos;re trying to accomplish here and why these notifications are needed for Andriod but not any other port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166452</commentid>
    <comment_count>3</comment_count>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2009-11-25 08:01:04 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; This change needs more explanation.  I&apos;m not sure what you&apos;re trying to
&gt; accomplish here and why these notifications are needed for Andriod but not any
&gt; other port.

The notfication mechanism at the moment is only used by the Mac port and the difference is that on Android we consider the history to have changed in different circumstances to when the Mac does. This is to help us work around some difficult issues relating to accessing the desktop version of a website that then goes through various redirects to forward Android to a mobile version of the site whilst still maintaining a useful history.

Instead of littering the code in HistoryItem with #if PLATFORM(ANDROID), I thought it would be a nicer solution to allow each platform that uses this notification mechanism to decide in it&apos;s platform specific callback whether to respond to the notification. The changes to WebKit/mac/WebHistoryItem.mm should reflect this on the Mac and the Android callback will be upstreamed when we send the code in WebKit/android.

I hope this helps to clarify the changes.

Thanks, Ben</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166564</commentid>
    <comment_count>4</comment_count>
      <attachid>43840</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-11-25 15:36:27 -0800</bug_when>
    <thetext>Comment on attachment 43840
Patch.

r-

The title of this bug doesn&apos;t actually say what this bug is about, and the comments don&apos;t actually say what *precise* problem you&apos;re trying to solve.

As a result, I see a patch that seems to overreach and not have a clear purpose.

Are you trying to be notified with the back/forward list changes?

Other apps all seem to handle this without a specific notification.  Safari and Chrome both manage to refresh their back/forward buttons at appropriate times based on other delegate callbacks.  

That said, I can see the value in having these callbacks.  If this is the problem you&apos;re trying to solve, then only the FrameLoaderClient changes are needed.

Of those changes, dispatchDidRemoveHistoryItem() confuses me.  It has an int parameter, but the parameter is always 0.  What is it for...?

New methods added to FrameLoaderClient should be pure virtual, with empty implementations added to all of the implementations.  I know there&apos;s a few empty/default implementations in FrameLoaderClient.h but they are incorrect and should have been rejected.

I like adding the HistoryItem parameter to notifyHistoryItemChanged - that will actually help us fulfill an API contract that we&apos;ve basically been ignoring for awhile by not including the WebHistoryItem that changed.

But, do you actually need to be notified of the individual KIND of mutation on a HistoryItem?  What is the use-case here?

Also, adding new notifications for things like document state, target item, and children items seems misguided.  These are all about state internal to WebCore.  Is there a reason your client needs to know about them?  Also, these things change A LOT more often than the other ones.  Rarely does a history item have it&apos;s title or URL changed, for example, but OFTEN might it have child items added during a navigation.  This could cause a flurry of notifications that are a pointless performance hit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166567</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-11-25 15:45:27 -0800</bug_when>
    <thetext>More thoughts, also:

dispatchDidAddHistoryItem() and dispatchDidRemoveHistoryItem() are too generic of names.  We&apos;ve been fighting confusion of what is &quot;History&quot; for the entire run of the project, and we shouldn&apos;t add more confusion.  They should be renamed to make it clear that the HistoryItem represents a back/forward entry and was added/removed from a BackForwardList.

Similarly, dispatchDidChangeHistoryIndex() could probably be called dispatchDidChangeBackForwardIndex()

Also, dispatchDidChangeHistoryIndex() includes a BackForwardList parameter, but didAdd/Remove do not.  As it turns out, the parameter isn&apos;t required.

Either all 3 should include the parameter, or not of them should.  My vote goes for none of them.  Most (all?) FrameLoaderClient implementations know which Frame/Page they represent, and as such they don&apos;t need to be told which BackForwardList was affected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166736</commentid>
    <comment_count>6</comment_count>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2009-11-26 08:09:22 -0800</bug_when>
    <thetext>Hi Brady,

First thank you very much for the thorough review and comments. To make sure I can address each of your points (and make life easier for both of us :)) I propose that I split this patch up into more manageable chunks (with a new bug for each), and use this bug as a &quot;master bug&quot; to track overall progress.

I think we could proceed in this order:
1) A patch to add the Android specific files to history/android, and the code protected by PLATFORM(ANDROID) in history/HistoryItem.h

2) A patch to add the BackForwardList callbacks to FrameLoaderClient (pure virtual) and default code to each of the implementations of FrameLoaderClient, and also the changes to BackForwardList.cpp to call those callbacks.

3) The changes to notifyHistoryItemChanged and the points where it is called from in HistoryItem.cpp, and any changes to current usage of the notifyHistoryItemChanged function in platform code for example the changes to WebKit/mac/History/WebHistoryItem.mm

I&apos;ll update this bug with the bug numbers of the smaller patches and address your comments in the relevant bugs.

Thanks, Ben</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166740</commentid>
    <comment_count>7</comment_count>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2009-11-26 08:30:29 -0800</bug_when>
    <thetext>Sub-bugs:

1) https://bugs.webkit.org/show_bug.cgi?id=31913
2) https://bugs.webkit.org/show_bug.cgi?id=31914
3) https://bugs.webkit.org/show_bug.cgi?id=31915</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167271</commentid>
    <comment_count>8</comment_count>
      <attachid>43840</attachid>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2009-11-30 09:20:03 -0800</bug_when>
    <thetext>Comment on attachment 43840
Patch.

Marking the original large patch obsolete as I have split it up into smaller parts in each of the sub bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168360</commentid>
    <comment_count>9</comment_count>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2009-12-03 04:39:54 -0800</bug_when>
    <thetext>Patches for each of the sub bugs have landed so closing this bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43840</attachid>
            <date>2009-11-25 07:03:55 -0800</date>
            <delta_ts>2009-11-30 09:20:02 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>webcore-history-patch-to-upload.txt</filename>
            <type>text/plain</type>
            <size>18662</size>
            <attacher name="Ben Murdoch">benm</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTM4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDktMTEtMjUgIEJlbiBNdXJkb2NoICA8YmVubUBnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtBbmRy
b2lkXSBXZWJDb3JlL0hpc3RvcnkgY29kZSBuZWVkcyB1cHN0cmVhbWluZy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxODY3CisKKyAgICAgICAgTm8g
Y2hhbmdlIGluIGZ1bmN0aW9uYWxpdHkgc28gbm8gbmV3IHRlc3RzIHJlcXVpcmVkLgorCisgICAg
ICAgICogaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwOiBBZGQgY2FsbGJhY2tzIHRvIHRoZSBG
cmFtZUxvYWRlckNsaWVudCB0byBub3RpZnkgdGhhdCB0aGUgaGlzdG9yeSBoYXMgYmVlbiBjaGFu
Z2VkLgorICAgICAgICAoV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKTogQWRkIGNh
bGxiYWNrcyB0byB0aGUgRnJhbWVMb2FkZXJDbGllbnQgdG8gbm90aWZ5IGEgaGlzdG9yeSBpdGVt
IGhhcyBiZWVuIGFkZGVkL3JlbW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpCYWNrRm9yd2FyZExp
c3Q6OmdvQmFjayk6IENhbGxiYWNrIHRvIHRoZSBGcmFtZUxvYWRlckNsaWVudCB0byBub3RpZnkg
dGhhdCB0aGUgaGlzdG9yeSBpbmRleCBoYXMgY2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJh
Y2tGb3J3YXJkTGlzdDo6Z29Gb3J3YXJkKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpCYWNr
Rm9yd2FyZExpc3Q6OmdvVG9JdGVtKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpCYWNrRm9y
d2FyZExpc3Q6OnNldENhcGFjaXR5KTogZGl0dG8uCisgICAgICAgICogaGlzdG9yeS9IaXN0b3J5
SXRlbS5jcHA6IFVwc3RyZWFtIEFuZHJvaWQgY2hhbmdlcyB0byB0aGlzIGZpbGUuCisgICAgICAg
IChXZWJDb3JlOjpkZWZhdWx0Tm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2VkKTogVXBkYXRlIGZ1bmN0
aW9uIHNpZ25hdHVyZSB0byBjb250YWluIGEgcG9pbnRlciB0byB0aGUgSGlzdG9yeUl0ZW0gdGhh
dCBjaGFuZ2VkIGFuZCB0aGUgdHlwZSBvZiBhY3Rpb24gdGhhdCBjYXVzZWQgdGhlIGl0ZW0gdG8g
Y2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OnNldEFsdGVybmF0ZVRpdGxl
KTogVXBkYXRlIGNhbGwgdG8gbm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2VkIHRvIG1hdGNoIG5ldyBz
aWduYXR1cmUuCisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6c2V0VVJMU3RyaW5nKTog
ZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6c2V0T3JpZ2luYWxVUkxTdHJp
bmcpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpzZXRSZWZlcnJlcik6
IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OnNldFRpdGxlKTogZGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6c2V0VGFyZ2V0KTogZGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6c2V0RG9jdW1lbnRTdGF0ZSk6IGRpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OmNsZWFyRG9jdW1lbnRTdGF0ZSk6IGRpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OnNldElzVGFyZ2V0SXRlbSk6IGRpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OmFkZENoaWxkSXRlbSk6IGRpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OnNldEZvcm1JbmZvRnJvbVJlcXVlc3QpOiBkaXR0
by4KKyAgICAgICAgKiBoaXN0b3J5L0hpc3RvcnlJdGVtLmg6IFVwZGF0ZSB0aGUgc2lnbmF0dXJl
IG9mIHRoZSBub3RpZnlIaXN0b3J5SXRlbUNoYW5nZWQgZnVuY3Rpb24gcG9pbnRlciBhbmQgYWRk
IEFuZHJvaWQgc3BlY2lmaWMgc3RhdGUgbWVtYmVyIHZhcmlhYmxlIHRvIEhpc3RvcnlJdGVtLgor
ICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBoaXN0b3J5L2FuZHJvaWQ6IEFkZGVkLgor
ICAgICAgICAqIGhpc3RvcnkvYW5kcm9pZC9BbmRyb2lkV2ViSGlzdG9yeUJyaWRnZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBoaXN0b3J5L2FuZHJvaWQvSGlzdG9yeUl0ZW1BbmRyb2lkLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6YnJpZGdlKTogQWRkZWQgQW5kcm9p
ZCBzcGVjaWZpYyBmdW5jdGlvbiBmb3Igc2F2aW5nIHN0YXRlIHdpdGggdGhlIEhpc3RvcnkgSXRl
bS4KKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpzZXRCcmlkZ2UpOiBkaXR0by4KKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDogQWRkZWQgZGVmYXVsdCBlbXB0eSBp
bXBsZW1lbnRhdGlvbnMgb2YgY2FsbGJhY2tzIHRvIG5vdGlmeSB0aGF0IHRoZSBoaXN0b3J5IGhh
cyBiZWVuIGNoYW5nZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEaWRBZGRIaXN0b3J5SXRlbSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVtb3ZlSGlzdG9yeUl0ZW0pOiBkaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENoYW5nZUhpc3RvcnlJ
bmRleCk6IGRpdHRvLgorCiAyMDA5LTExLTI1ICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0
YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBM
b3Blei4KSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCShyZXZpc2lvbiA1MTM4
MCkKKysrIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw4ICsyNywxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkJhY2tG
b3J3YXJkTGlzdC5oIgogCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0
ZW0uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBhZ2VDYWNoZS5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtNzcsMjUgKzgxLDMxIEBA
IHZvaWQgQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFBhc3NSZWZQdHIKICAgICAgICAgbV9lbnRy
eUhhc2gucmVtb3ZlKGl0ZW0pOwogICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0ZW0uZ2V0
KCkpOwogICAgICAgICBtX2N1cnJlbnQtLTsKKyAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+
bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERpZFJlbW92ZUhpc3RvcnlJdGVtKGl0ZW0uZ2V0
KCksIDApOwogICAgIH0KICAgICAKICAgICBtX2VudHJpZXMuYXBwZW5kKHBycEl0ZW0pOwogICAg
IG1fZW50cnlIYXNoLmFkZChtX2VudHJpZXMubGFzdCgpKTsKICAgICBtX2N1cnJlbnQrKzsKKyAg
ICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNoRGlkQWRk
SGlzdG9yeUl0ZW0oY3VycmVudEl0ZW0oKSk7CiB9CiAKIHZvaWQgQmFja0ZvcndhcmRMaXN0Ojpn
b0JhY2soKQogewogICAgIEFTU0VSVChtX2N1cnJlbnQgPiAwKTsKLSAgICBpZiAobV9jdXJyZW50
ID4gMCkKKyAgICBpZiAobV9jdXJyZW50ID4gMCkgewogICAgICAgICBtX2N1cnJlbnQtLTsKKyAg
ICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERp
ZENoYW5nZUhpc3RvcnlJbmRleCh0aGlzKTsKKyAgICB9CiB9CiAKIHZvaWQgQmFja0ZvcndhcmRM
aXN0Ojpnb0ZvcndhcmQoKQogewogICAgIEFTU0VSVChtX2N1cnJlbnQgPCBtX2VudHJpZXMuc2l6
ZSgpIC0gMSk7Ci0gICAgaWYgKG1fY3VycmVudCA8IG1fZW50cmllcy5zaXplKCkgLSAxKQorICAg
IGlmIChtX2N1cnJlbnQgPCBtX2VudHJpZXMuc2l6ZSgpIC0gMSkgewogICAgICAgICBtX2N1cnJl
bnQrKzsKKyAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5k
aXNwYXRjaERpZENoYW5nZUhpc3RvcnlJbmRleCh0aGlzKTsKKyAgICB9CiB9CiAKIHZvaWQgQmFj
a0ZvcndhcmRMaXN0Ojpnb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSkKQEAgLTEwNyw4ICsxMTcs
MTAgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmdvVG9JdGVtKEhpc3RvcnlJdAogICAgIGZvciAo
OyBpbmRleCA8IG1fZW50cmllcy5zaXplKCk7ICsraW5kZXgpCiAgICAgICAgIGlmIChtX2VudHJp
ZXNbaW5kZXhdID09IGl0ZW0pCiAgICAgICAgICAgICBicmVhazsKLSAgICBpZiAoaW5kZXggPCBt
X2VudHJpZXMuc2l6ZSgpKQorICAgIGlmIChpbmRleCA8IG1fZW50cmllcy5zaXplKCkpIHsKICAg
ICAgICAgbV9jdXJyZW50ID0gaW5kZXg7CisgICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPmxv
YWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0Y2hEaWRDaGFuZ2VIaXN0b3J5SW5kZXgodGhpcyk7Cisg
ICAgfQogfQogCiBIaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0OjpiYWNrSXRlbSgpCkBAIC0x
NzQsOSArMTg2LDEwIEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0OjpzZXRDYXBhY2l0eShpbnQgc2kK
IAogICAgIGlmICghc2l6ZSkKICAgICAgICAgbV9jdXJyZW50ID0gTm9DdXJyZW50SXRlbUluZGV4
OwotICAgIGVsc2UgaWYgKG1fY3VycmVudCA+IG1fZW50cmllcy5zaXplKCkgLSAxKQorICAgIGVs
c2UgaWYgKG1fY3VycmVudCA+IG1fZW50cmllcy5zaXplKCkgLSAxKSB7CiAgICAgICAgIG1fY3Vy
cmVudCA9IG1fZW50cmllcy5zaXplKCkgLSAxOwotICAgICAgICAKKyAgICAgICAgbV9wYWdlLT5t
YWluRnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERpZENoYW5nZUhpc3RvcnlJ
bmRleCh0aGlzKTsKKyAgICB9CiAgICAgbV9jYXBhY2l0eSA9IHNpemU7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0
b3J5L0hpc3RvcnlJdGVtLmNwcAkocmV2aXNpb24gNTEzODApCisrKyBXZWJDb3JlL2hpc3Rvcnkv
SGlzdG9yeUl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsMTEgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdm9pZCBkZWZhdWx0Tm90aWZ5SGlzdG9yeUl0ZW1D
aGFuZ2VkKCkKK3N0YXRpYyB2b2lkIGRlZmF1bHROb3RpZnlIaXN0b3J5SXRlbUNoYW5nZWQoSGlz
dG9yeUl0ZW0qLCBIaXN0b3J5SXRlbUNoYW5nZVR5cGUpCiB7CiB9CiAKLXZvaWQgKCpub3RpZnlI
aXN0b3J5SXRlbUNoYW5nZWQpKCkgPSBkZWZhdWx0Tm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2VkOwor
dm9pZCAoKm5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZCkoSGlzdG9yeUl0ZW0qLCBIaXN0b3J5SXRl
bUNoYW5nZVR5cGUpID0gZGVmYXVsdE5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZDsKIAogSGlzdG9y
eUl0ZW06Okhpc3RvcnlJdGVtKCkKICAgICA6IG1fbGFzdFZpc2l0ZWRUaW1lKDApCkBAIC0xOTgs
NyArMTk4LDcgQEAgY29uc3QgU3RyaW5nJiBIaXN0b3J5SXRlbTo6cGFyZW50KCkgY29ucwogdm9p
ZCBIaXN0b3J5SXRlbTo6c2V0QWx0ZXJuYXRlVGl0bGUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdGVU
aXRsZSkKIHsKICAgICBtX2Rpc3BsYXlUaXRsZSA9IGFsdGVybmF0ZVRpdGxlOwotICAgIG5vdGlm
eUhpc3RvcnlJdGVtQ2hhbmdlZCgpOworICAgIG5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZCh0aGlz
LCBTZXRBbHRlcm5hdGVUaXRsZSk7CiB9CiAKIHZvaWQgSGlzdG9yeUl0ZW06OnNldFVSTFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHVybFN0cmluZykKQEAgLTIwOSw3ICsyMDksNyBAQCB2b2lkIEhpc3Rv
cnlJdGVtOjpzZXRVUkxTdHJpbmcoY29uc3QgU3RyCiAgICAgICAgIGljb25EYXRhYmFzZSgpLT5y
ZXRhaW5JY29uRm9yUGFnZVVSTChtX3VybFN0cmluZyk7CiAgICAgfQogICAgIAotICAgIG5vdGlm
eUhpc3RvcnlJdGVtQ2hhbmdlZCgpOworICAgIG5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZCh0aGlz
LCBTZXRVUkxTdHJpbmcpOwogfQogCiB2b2lkIEhpc3RvcnlJdGVtOjpzZXRVUkwoY29uc3QgS1VS
TCYgdXJsKQpAQCAtMjIyLDI1ICsyMjIsMjUgQEAgdm9pZCBIaXN0b3J5SXRlbTo6c2V0VVJMKGNv
bnN0IEtVUkwmIHVybAogdm9pZCBIaXN0b3J5SXRlbTo6c2V0T3JpZ2luYWxVUkxTdHJpbmcoY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcpCiB7CiAgICAgbV9vcmlnaW5hbFVSTFN0cmluZyA9IHVybFN0
cmluZzsKLSAgICBub3RpZnlIaXN0b3J5SXRlbUNoYW5nZWQoKTsKKyAgICBub3RpZnlIaXN0b3J5
SXRlbUNoYW5nZWQodGhpcywgU2V0T3JpZ2luYWxVUkxTdHJpbmcpOwogfQogCiB2b2lkIEhpc3Rv
cnlJdGVtOjpzZXRSZWZlcnJlcihjb25zdCBTdHJpbmcmIHJlZmVycmVyKQogewogICAgIG1fcmVm
ZXJyZXIgPSByZWZlcnJlcjsKLSAgICBub3RpZnlIaXN0b3J5SXRlbUNoYW5nZWQoKTsKKyAgICBu
b3RpZnlIaXN0b3J5SXRlbUNoYW5nZWQodGhpcywgU2V0UmVmZXJyZXIpOwogfQogCiB2b2lkIEhp
c3RvcnlJdGVtOjpzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKQogewogICAgIG1fdGl0bGUg
PSB0aXRsZTsKLSAgICBub3RpZnlIaXN0b3J5SXRlbUNoYW5nZWQoKTsKKyAgICBub3RpZnlIaXN0
b3J5SXRlbUNoYW5nZWQodGhpcywgU2V0VGl0bGUpOwogfQogCiB2b2lkIEhpc3RvcnlJdGVtOjpz
ZXRUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXQpCiB7CiAgICAgbV90YXJnZXQgPSB0YXJnZXQ7
Ci0gICAgbm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2VkKCk7CisgICAgbm90aWZ5SGlzdG9yeUl0ZW1D
aGFuZ2VkKHRoaXMsIFNldFRhcmdldCk7CiB9CiAKIHZvaWQgSGlzdG9yeUl0ZW06OnNldFBhcmVu
dChjb25zdCBTdHJpbmcmIHBhcmVudCkKQEAgLTM1Niw2ICszNTYsNyBAQCB2b2lkIEhpc3RvcnlJ
dGVtOjpjbGVhclNjcm9sbFBvaW50KCkKIHZvaWQgSGlzdG9yeUl0ZW06OnNldERvY3VtZW50U3Rh
dGUoY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0YXRlKQogewogICAgIG1fZG9jdW1lbnRTdGF0ZSA9
IHN0YXRlOworICAgIG5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZCh0aGlzLCBTZXREb2N1bWVudFN0
YXRlKTsKIH0KIAogY29uc3QgVmVjdG9yPFN0cmluZz4mIEhpc3RvcnlJdGVtOjpkb2N1bWVudFN0
YXRlKCkgY29uc3QKQEAgLTM2Niw2ICszNjcsNyBAQCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgSGlz
dG9yeUl0ZW06OmRvY3VtCiB2b2lkIEhpc3RvcnlJdGVtOjpjbGVhckRvY3VtZW50U3RhdGUoKQog
ewogICAgIG1fZG9jdW1lbnRTdGF0ZS5jbGVhcigpOworICAgIG5vdGlmeUhpc3RvcnlJdGVtQ2hh
bmdlZCh0aGlzLCBDbGVhckRvY3VtZW50U3RhdGUpOwogfQogCiBib29sIEhpc3RvcnlJdGVtOjpp
c1RhcmdldEl0ZW0oKSBjb25zdApAQCAtMzc2LDEyICszNzgsMTQgQEAgYm9vbCBIaXN0b3J5SXRl
bTo6aXNUYXJnZXRJdGVtKCkgY29uc3QKIHZvaWQgSGlzdG9yeUl0ZW06OnNldElzVGFyZ2V0SXRl
bShib29sIGZsYWcpCiB7CiAgICAgbV9pc1RhcmdldEl0ZW0gPSBmbGFnOworICAgIG5vdGlmeUhp
c3RvcnlJdGVtQ2hhbmdlZCh0aGlzLCBTZXRJc1RhcmdldEl0ZW0pOwogfQogCiB2b2lkIEhpc3Rv
cnlJdGVtOjphZGRDaGlsZEl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gY2hpbGQpCiB7CiAg
ICAgQVNTRVJUKCFjaGlsZEl0ZW1XaXRoVGFyZ2V0KGNoaWxkLT50YXJnZXQoKSkpOwogICAgIG1f
Y2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICBub3RpZnlIaXN0b3J5SXRlbUNoYW5nZWQodGhp
cywgQWRkQ2hpbGRJdGVtKTsKIH0KIAogdm9pZCBIaXN0b3J5SXRlbTo6c2V0Q2hpbGRJdGVtKFBh
c3NSZWZQdHI8SGlzdG9yeUl0ZW0+IGNoaWxkKQpAQCAtNDYwLDYgKzQ2NCw3IEBAIHZvaWQgSGlz
dG9yeUl0ZW06OnNldEZvcm1JbmZvRnJvbVJlcXVlc3QKICAgICAgICAgbV9mb3JtRGF0YSA9IDA7
CiAgICAgICAgIG1fZm9ybUNvbnRlbnRUeXBlID0gU3RyaW5nKCk7CiAgICAgfQorICAgIG5vdGlm
eUhpc3RvcnlJdGVtQ2hhbmdlZCh0aGlzLCBTZXRGb3JtSW5mb0Zyb21SZXF1ZXN0KTsKIH0KIAog
dm9pZCBIaXN0b3J5SXRlbTo6c2V0Rm9ybURhdGEoUGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURh
dGEpCkluZGV4OiBXZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uaAkocmV2aXNpb24gNTEzODApCisrKyBXZWJDb3Jl
L2hpc3RvcnkvSGlzdG9yeUl0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTAgQEAg
dHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QqIGlkOwogI2luY2x1ZGUgPFFEYXRhU3RyZWFtPgog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShBTkRST0lEKQorI2luY2x1ZGUgIkFuZHJvaWRXZWJIaXN0
b3J5QnJpZGdlLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYWNo
ZWRQYWdlOwpAQCAtNTQsMTMgKzU4LDI4IEBAIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIAogdHlw
ZWRlZiBWZWN0b3I8UmVmUHRyPEhpc3RvcnlJdGVtPiA+IEhpc3RvcnlJdGVtVmVjdG9yOwogCi1l
eHRlcm4gdm9pZCAoKm5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZCkoKTsKLQogZW51bSBWaXNpdENv
dW50QmVoYXZpb3IgewogICAgIEluY3JlYXNlVmlzaXRDb3VudCwKICAgICBEb05vdEluY3JlYXNl
VmlzaXRDb3VudAogfTsKIAorZW51bSBIaXN0b3J5SXRlbUNoYW5nZVR5cGUgeworICAgIFNldEFs
dGVybmF0ZVRpdGxlLAorICAgIFNldFVSTFN0cmluZywKKyAgICBTZXRPcmlnaW5hbFVSTFN0cmlu
ZywKKyAgICBTZXRSZWZlcnJlciwKKyAgICBTZXRUaXRsZSwKKyAgICBTZXRUYXJnZXQsCisgICAg
U2V0RG9jdW1lbnRTdGF0ZSwKKyAgICBDbGVhckRvY3VtZW50U3RhdGUsCisgICAgU2V0SXNUYXJn
ZXRJdGVtLAorICAgIEFkZENoaWxkSXRlbSwKKyAgICBTZXRGb3JtSW5mb0Zyb21SZXF1ZXN0LAor
ICAgIFNhdmVWaWV3U3RhdGUKK307CisKK2V4dGVybiB2b2lkICgqbm90aWZ5SGlzdG9yeUl0ZW1D
aGFuZ2VkKShIaXN0b3J5SXRlbSosIEhpc3RvcnlJdGVtQ2hhbmdlVHlwZSk7CisKIGNsYXNzIEhp
c3RvcnlJdGVtIDogcHVibGljIFJlZkNvdW50ZWQ8SGlzdG9yeUl0ZW0+IHsKICAgICBmcmllbmQg
Y2xhc3MgUGFnZUNhY2hlOwogCkBAIC0xNzUsNiArMTk0LDExIEBAIHB1YmxpYzogCiAgICAgUURh
dGFTdHJlYW0mIHNhdmVTdGF0ZShRRGF0YVN0cmVhbSYgb3V0LCBpbnQgdmVyc2lvbikgY29uc3Q7
CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEFORFJPSUQpCisgICAgdm9pZCBzZXRCcmlkZ2UoQW5k
cm9pZFdlYkhpc3RvcnlCcmlkZ2UqIGJyaWRnZSk7CisgICAgQW5kcm9pZFdlYkhpc3RvcnlCcmlk
Z2UqIGJyaWRnZSgpIGNvbnN0OworI2VuZGlmCisKICNpZm5kZWYgTkRFQlVHCiAgICAgaW50IHNo
b3dUcmVlKCkgY29uc3Q7CiAgICAgaW50IHNob3dUcmVlV2l0aEluZGVudCh1bnNpZ25lZCBpbmRl
bnRMZXZlbCkgY29uc3Q7CkBAIC0yNDMsNiArMjY3LDExIEBAIHByaXZhdGU6CiAjaWYgUExBVEZP
Uk0oUVQpCiAgICAgUVZhcmlhbnQgbV91c2VyRGF0YTsKICNlbmRpZgorCisjaWYgUExBVEZPUk0o
QU5EUk9JRCkKKyAgICBSZWZQdHI8QW5kcm9pZFdlYkhpc3RvcnlCcmlkZ2U+IG1fYnJpZGdlOwor
I2VuZGlmCisKIH07IC8vY2xhc3MgSGlzdG9yeUl0ZW0KIAogfSAvL25hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2hpc3RvcnkvYW5kcm9pZC9BbmRyb2lkV2ViSGlzdG9yeUJyaWRnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9hbmRyb2lkL0FuZHJvaWRXZWJIaXN0b3J5
QnJpZGdlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2hpc3RvcnkvYW5kcm9pZC9BbmRyb2lk
V2ViSGlzdG9yeUJyaWRnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxIEBACisvKgorICog
Q29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIg
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEFuZHJvaWRXZWJIaXN0b3J5QnJpZGdlX2gKKyNkZWZpbmUgQW5kcm9pZFdlYkhpc3Rv
cnlCcmlkZ2VfaAorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBIaXN0b3J5SXRlbTsKKworY2xhc3MgQW5kcm9pZFdlYkhpc3RvcnlC
cmlkZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxBbmRyb2lkV2ViSGlzdG9yeUJyaWRnZT4geworcHVi
bGljOgorICAgIEFuZHJvaWRXZWJIaXN0b3J5QnJpZGdlKCkKKyAgICAgICAgOiBtX3NjYWxlKDEw
MCkKKyAgICAgICAgLCBtX3NjcmVlbldpZHRoU2NhbGUoMTAwKQorICAgICAgICAsIG1fYWN0aXZl
KGZhbHNlKQorICAgICAgICAsIG1faGlzdG9yeUl0ZW0oMCkgeyB9CisgICAgdmlydHVhbCB+QW5k
cm9pZFdlYkhpc3RvcnlCcmlkZ2UoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSGlzdG9y
eUl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pID0gMDsKKworICAgIHZvaWQgc2V0U2NhbGUoaW50IHMp
IHsgbV9zY2FsZSA9IHM7IH0KKyAgICB2b2lkIHNldFNjcmVlbldpZHRoU2NhbGUoaW50IHMpIHsg
bV9zY3JlZW5XaWR0aFNjYWxlID0gczsgfQorICAgIGludCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2NhbGU7IH0KKyAgICBpbnQgc2NyZWVuV2lkdGhTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2NyZWVuV2lkdGhTY2FsZTsgfQorICAgIEhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSgpIGNvbnN0
IHsgcmV0dXJuIG1faGlzdG9yeUl0ZW07IH0KKyAgICB2b2lkIHNldEFjdGl2ZSgpIHsgbV9hY3Rp
dmUgPSB0cnVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBpbnQgbV9zY2FsZTsKKyAgICBpbnQgbV9z
Y3JlZW5XaWR0aFNjYWxlOworICAgIGJvb2wgbV9hY3RpdmU7CisgICAgSGlzdG9yeUl0ZW0qIG1f
aGlzdG9yeUl0ZW07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBB
bmRyb2lkV2ViSGlzdG9yeUJyaWRnZV9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2hp
c3RvcnkvYW5kcm9pZC9BbmRyb2lkV2ViSGlzdG9yeUJyaWRnZS5oCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTog
c3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9hbmRyb2lk
L0hpc3RvcnlJdGVtQW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5L2Fu
ZHJvaWQvSGlzdG9yeUl0ZW1BbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaGlz
dG9yeS9hbmRyb2lkL0hpc3RvcnlJdGVtQW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2Ug
UHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIaXN0b3J5SXRl
bS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFuZHJvaWRXZWJIaXN0b3J5QnJp
ZGdlOworCitBbmRyb2lkV2ViSGlzdG9yeUJyaWRnZSogSGlzdG9yeUl0ZW06OmJyaWRnZSgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2JyaWRnZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IG1fYnJpZGdlLmdldCgpOworfQorCit2b2lkIEhpc3RvcnlJdGVtOjpzZXRCcmlkZ2UoQW5kcm9p
ZFdlYkhpc3RvcnlCcmlkZ2UqIGJyaWRnZSkKK3sKKyAgICBtX2JyaWRnZSA9IGFkb3B0UmVmKGJy
aWRnZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwoKUHJvcGVydHkgY2hhbmdlcyBv
bjogV2ViQ29yZS9oaXN0b3J5L2FuZHJvaWQvSGlzdG9yeUl0ZW1BbmRyb2lkLmNwcApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDUxMzgwKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBjbGFzcyBOU1Zp
ZXc7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTsKKyAgICBjbGFzcyBCYWNrRm9yd2FyZExpc3Q7CiAgICAgY2xhc3MgQ2FjaGVkRnJhbWU7
CiAgICAgY2xhc3MgQ29sb3I7CiAgICAgY2xhc3MgRE9NV3JhcHBlcldvcmxkOwpAQCAtMTY2LDYg
KzE2Nyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKCkgPSAwOwogCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRHb1RvSGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qKSBjb25zdCA9IDA7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEFkZEhpc3RvcnlJdGVtKEhpc3RvcnlJdGVtKikgY29u
c3QgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlbW92ZUhpc3RvcnlJdGVt
KEhpc3RvcnlJdGVtKiwgaW50KSBjb25zdCB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoRGlkQ2hhbmdlSGlzdG9yeUluZGV4KEJhY2tGb3J3YXJkTGlzdCopIGNvbnN0IHsgfQogCiAg
ICAgICAgIC8vIFRoaXMgZnJhbWUgaGFzIGRpc3BsYXllZCBpbmFjdGl2ZSBjb250ZW50IChzdWNo
IGFzIGFuIGltYWdlKSBmcm9tIGFuCiAgICAgICAgIC8vIGluc2VjdXJlIHNvdXJjZS4gIEluYWN0
aXZlIGNvbnRlbnQgY2Fubm90IHNwcmVhZCB0byBvdGhlciBmcmFtZXMuCkluZGV4OiBXZWJLaXQv
bWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNp
b24gNTEzODApCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE0IEBACisyMDA5LTExLTI1ICBCZW4gTXVyZG9jaCAgPGJlbm1AZ29vZ2xlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbQW5kcm9pZF0g
V2ViQ29yZS9IaXN0b3J5IGNvZGUgbmVlZHMgdXBzdHJlYW1pbmcuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTg2NworCisgICAgICAgICogSGlzdG9y
eS9XZWJIaXN0b3J5SXRlbS5tbToKKyAgICAgICAgKFdLTm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2Vk
KTogVXNlIHRoZSBuZXcgSGlzdG9yeUl0ZW1DaGFuZ2VUeXBlIHBhcmFtZXRlciB0byBkZWNpZGUg
d2hldGhlciB0byBmaXJlIHRoZSBjaGFuZ2Ugbm90aWZpY2F0aW9uLgorICAgICAgICAqIEhpc3Rv
cnkvV2ViSGlzdG9yeUl0ZW1JbnRlcm5hbC5oOiBVcGRhdGUgbWV0aG9kIHNpZ25hdHVyZSBvZiBX
S05vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZCB0byBtYXRjaCBjaGFuZ2VzIHRvIFdlYkNvcmU6Om5v
dGlmeUhpc3RvcnlJdGVtQ2hhbmdlZC4KKwogMjAwOS0xMS0yNCAgRG1pdHJ5IFRpdG92ICA8ZGlt
aWNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5k
ZXg6IFdlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SXRlbS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeUl0ZW0ubW0JKHJldmlzaW9uIDUxMzgwKQorKysg
V2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJdGVtLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04
NCwxMCArODQsMjAgQEAgc3RhdGljIEhpc3RvcnlJdGVtTWFwJiBoaXN0b3J5SXRlbVdyYXBwZQog
ICAgIHJldHVybiBoaXN0b3J5SXRlbVdyYXBwZXJzOwogfQogCi12b2lkIFdLTm90aWZ5SGlzdG9y
eUl0ZW1DaGFuZ2VkKCkKK3ZvaWQgV0tOb3RpZnlIaXN0b3J5SXRlbUNoYW5nZWQoSGlzdG9yeUl0
ZW0qLCBIaXN0b3J5SXRlbUNoYW5nZVR5cGUgdHlwZSkKIHsKLSAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdCi0gICAgICAgIHBvc3ROb3RpZmljYXRpb25OYW1lOldlYkhp
c3RvcnlJdGVtQ2hhbmdlZE5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsIHVzZXJJbmZvOm5pbF07Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgU2V0QWx0ZXJuYXRlVGl0bGU6CisgICAg
ICAgIGNhc2UgU2V0VVJMU3RyaW5nOgorICAgICAgICBjYXNlIFNldE9yaWdpbmFsVVJMU3RyaW5n
OgorICAgICAgICBjYXNlIFNldFJlZmVycmVyOgorICAgICAgICBjYXNlIFNldFRpdGxlOgorICAg
ICAgICBjYXNlIFNldFRhcmdldDoKKyAgICAgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0KKyAgICAgICAgICAgICAgICBwb3N0Tm90aWZpY2F0aW9uTmFtZTpXZWJI
aXN0b3J5SXRlbUNoYW5nZWROb3RpZmljYXRpb24gb2JqZWN0Om5pbCB1c2VySW5mbzpuaWxdOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KIH0KIAog
QGltcGxlbWVudGF0aW9uIFdlYkhpc3RvcnlJdGVtCkluZGV4OiBXZWJLaXQvbWFjL0hpc3Rvcnkv
V2ViSGlzdG9yeUl0ZW1JbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvSGlzdG9y
eS9XZWJIaXN0b3J5SXRlbUludGVybmFsLmgJKHJldmlzaW9uIDUxMzgwKQorKysgV2ViS2l0L21h
Yy9IaXN0b3J5L1dlYkhpc3RvcnlJdGVtSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
MTYgKzI4LDEzIEBACiAKICNpbXBvcnQgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgogI2ltcG9ydCAi
V2ViSGlzdG9yeUl0ZW1Qcml2YXRlLmgiCisjaW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlJdGVtLmg+
CiAjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xh
c3MgSGlzdG9yeUl0ZW07Ci19Ci0KIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBjb3JlKFdlYkhpc3Rv
cnlJdGVtICppdGVtKTsKIFdlYkhpc3RvcnlJdGVtICpraXQoV2ViQ29yZTo6SGlzdG9yeUl0ZW0q
IGl0ZW0pOwogCi1leHRlcm4gdm9pZCBXS05vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZCgpOworZXh0
ZXJuIHZvaWQgV0tOb3RpZnlIaXN0b3J5SXRlbUNoYW5nZWQoV2ViQ29yZTo6SGlzdG9yeUl0ZW0q
LCBXZWJDb3JlOjpIaXN0b3J5SXRlbUNoYW5nZVR5cGUpOwogCiBAaW50ZXJmYWNlIFdlYkhpc3Rv
cnlJdGVtIChXZWJJbnRlcm5hbCkKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>