<?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>127521</bug_id>
          
          <creation_ts>2014-01-23 16:25:38 -0800</creation_ts>
          <short_desc>Sideways &apos;wobble&apos; when scrolling with trackpad on Mavericks</short_desc>
          <delta_ts>2014-01-31 11:26:18 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>OS X 10.9</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jonlee</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>971386</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-01-23 16:25:38 -0800</bug_when>
    <thetext>Scrolling Safari on Mavericks is wobbly. We are receiving scroll events with a lot more horizontal deltas (when the user is trying to primarily scroll vertically).

&lt;rdar://problem/14137306&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971396</commentid>
    <comment_count>1</comment_count>
      <attachid>222042</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-01-23 16:40:54 -0800</bug_when>
    <thetext>Created attachment 222042
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971737</commentid>
    <comment_count>2</comment_count>
      <attachid>222042</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-24 13:45:49 -0800</bug_when>
    <thetext>Comment on attachment 222042
Patch

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

&gt; Source/WebCore/platform/PlatformWheelEvent.h:129
&gt; +        void ignoreHorizontalDelta() { m_deltaX = 0; }
&gt; +        void ignoreVerticalDelta() { m_deltaY = 0; }

Is there a way to do this without mutating the platform event? Over the years, I have been trying to make these immutable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971753</commentid>
    <comment_count>3</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-01-24 14:09:32 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 222042 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222042&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/PlatformWheelEvent.h:129
&gt; &gt; +        void ignoreHorizontalDelta() { m_deltaX = 0; }
&gt; &gt; +        void ignoreVerticalDelta() { m_deltaY = 0; }
&gt; 
&gt; Is there a way to do this without mutating the platform event? Over the years, I have been trying to make these immutable.

We might be able to put the tracker down in the ElasticityController instead when we are handing the wheel event there, and that might allow us to avoid mutating the event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971756</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-01-24 14:15:55 -0800</bug_when>
    <thetext>Or we can just clone the event to avoid mutation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974076</commentid>
    <comment_count>5</comment_count>
      <attachid>222754</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-01-30 16:07:15 -0800</bug_when>
    <thetext>Created attachment 222754
Patch

Okay, scrollperf is wonky, and this does not appear to be a regression after all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974079</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-30 16:17:03 -0800</bug_when>
    <thetext>Attachment 222754 did not pass style-queue:


ERROR: Source/WebCore/page/WheelEventDeltaTracker.cpp:28:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974084</commentid>
    <comment_count>7</comment_count>
      <attachid>222754</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-01-30 16:24:38 -0800</bug_when>
    <thetext>Comment on attachment 222754
Patch

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

&gt; Source/WebCore/page/WheelEventDeltaTracker.h:57
&gt; +    Deque&lt;FloatSize&gt; m_recentWheelEventDeltas;

This should probably have some inline capacity, matching recentEventCount.

&gt; Source/WebKit2/WebProcess/WebPage/EventDispatcher.cpp:115
&gt; +        // This is a little crazy because it is working around &lt;rdar://problem/14758615&gt;, which is a bug in a
&gt; +        // lower-level component. While that bug is still unresolved, this will help to reduce some of the noise
&gt; +        // we are seeing with lots of small horizontal deltas when a user is scrolling in primarily vertical
&gt; +        // direction and vice versa.

I think just // Work around &lt;rdar://problem/14758615&gt;
would be sufficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974366</commentid>
    <comment_count>8</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-01-31 11:00:23 -0800</bug_when>
    <thetext>Committed with http://trac.webkit.org/changeset/163180

I added the new files to all of the other projects which will hopeful fix all of the builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974386</commentid>
    <comment_count>9</comment_count>
      <attachid>222754</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-01-31 11:26:18 -0800</bug_when>
    <thetext>Comment on attachment 222754
Patch

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

&gt; Source/WebCore/page/EventHandler.h:517
&gt; +    OwnPtr&lt;WheelEventDeltaTracker&gt; m_recentWheelEventDeltaTracker;

Why not std::unique_ptr instead of OwnPtr?

&gt; Source/WebKit2/WebProcess/WebPage/EventDispatcher.h:81
&gt; +    OwnPtr&lt;WebCore::WheelEventDeltaTracker&gt; m_recentWheelEventDeltaTracker;

Why not std::unique_ptr instead of OwnPtr?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222042</attachid>
            <date>2014-01-23 16:40:54 -0800</date>
            <delta_ts>2014-01-30 16:07:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wobble-fr.txt</filename>
            <type>text/plain</type>
            <size>26315</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDE0LTAxLTIzICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTaWRld2F5cyAnd29iYmxlJyB3aGVu
IHNjcm9sbGluZyB3aXRoIHRyYWNrcGFkIG9uIE1hdmVyaWNrcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NTIxCisgICAgICAgIC1hbmQgY29ycmVz
cG9uZGluZy0KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE0MTM3MzA2PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggdGFrZXMgaHR0
cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTU0NTM1IHdoaWNoIGludHJvZHVjZWQgCisg
ICAgICAgIGZpbHRlcmluZyB3aGVlbCBldmVudHMgZm9yIG92ZXJmbG93IGFyZWFzIHRvIHRyeSB0
byBtYWtlIHRoZW0gbGVzcyBzZW5zaXRpdmUgdG8gWCAKKyAgICAgICAgZGVsYXlzIHdoZW4gc2Ny
b2xsaW5nIGluIGEgcHJpbWFyaWx5IFkgZGlyZWN0aW9uLCBhbmQgaXQgZmFjdG9ycyB0aGF0IGNv
ZGUgb3V0IAorICAgICAgICBpbnRvIGl0cyBvd24gY2xhc3MsIG5vdyBjYWxsZWQgV2hlZWxFdmVu
dERlbHRhVHJhY2tlci4gU28gbm93IHRoaXMgbmV3IGNsYXNzIGNhbiAKKyAgICAgICAgdXNlIHRo
ZSBzYW1lIGNvZGUgdG8gZmlsdGVyIGV2ZW50cyBmb3IgV2ViS2l0IDLigJlzIEV2ZW50RGlzcGF0
Y2hlci4KKworICAgICAgICBXSzIgd2lsbCBuZWVkIHRoZXNlIG5ldyBXaGVlbEV2ZW50RGVsdGFU
cmFja2VyIGZ1bmN0aW9ucy4KKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKworICAgICAgICBG
aWxlcyBmb3IgV2hlZWxFdmVudERlbHRhVHJhY2tlci4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgTW92ZSBhIGJ1bmNoIG9mIGNvZGUgb3Zl
ciB0byBXaGVlbEV2ZW50RGVsdGFUcmFja2VyIGFuZCB1c2UgbV8gCisgICAgICAgIHJlY2VudFdo
ZWVsRXZlbnREZWx0YVRyYWNrZXIgdG8gc2VydmUgdGhlIHNhbWUgcHVycG9zZS4KKyAgICAgICAg
KiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OkV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZVdo
ZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkZWZhdWx0V2hlZWxF
dmVudEhhbmRsZXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisKKyAgICAgICAg
QWxsb3cgaG9yaXpvbnRhbCBydWJiZXItYmFuZGluZyBub3cgdGhhdCB3ZSBoYXZlIHNvbWUgZXZl
bnQgZmlsdGVyaW5nIGluIHBsYWNlLgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6RnJhbWVWaWV3KToKKworICAgICAgICBOZXcgZmls
ZXMuIE1vc3Qgb2YgdGhpcyBjb2RlIGlzIGp1c3QgY29waWVkIGZyb20gRXZlbnRIYW5kbGVyLgor
ICAgICAgICAqIHBhZ2UvV2hlZWxFdmVudERlbHRhVHJhY2tlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2hlZWxFdmVudERlbHRhVHJhY2tlcjo6V2hlZWxFdmVudERlbHRhVHJhY2tl
cik6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEV2ZW50RGVsdGFUcmFja2VyOjp+V2hlZWxFdmVu
dERlbHRhVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEV2ZW50RGVsdGFUcmFja2Vy
OjpiZWdpblRyYWNraW5nRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6OldoZWVsRXZlbnREZWx0
YVRyYWNrZXI6OmVuZFRyYWNraW5nRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6OldoZWVsRXZl
bnREZWx0YVRyYWNrZXI6OnJlY29yZFdoZWVsRXZlbnREZWx0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpkZWx0YUlzUHJlZG9taW5hbnRseVZlcnRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OldoZWVs
RXZlbnREZWx0YVRyYWNrZXI6OmRvbWluYW50U2Nyb2xsR2VzdHVyZURpcmVjdGlvbik6CisgICAg
ICAgICogcGFnZS9XaGVlbEV2ZW50RGVsdGFUcmFja2VyLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V2hlZWxFdmVudERlbHRhVHJhY2tlcjo6aXNUcmFja2luZ0RlbHRhcyk6CisKKyAgICAg
ICAgTmV3IGZ1bmN0aW9ucyBvbiBQbGF0Zm9ybVdoZWVsRXZlbnQgd2lsbCB6ZXJvIG91dCBlaXRo
ZXIgbV9kZWx0YVggb3IgbV9kZWx0YVkuCisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVl
bEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6Omlnbm9yZUhv
cml6b250YWxEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6Omln
bm9yZVZlcnRpY2FsRGVsdGEpOgorCiAyMDE0LTAxLTIwICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1t
YXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICBUdXJuIHRleHQtZGVjb3JhdGlvbi1za2lwOiBp
bmsgb24gZm9yIGFsbCB1bmRlcmxpbmVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNp
b24gMTYyNjQzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29w
eSkKQEAgLTg2OCw2ICs4NjgsMTAgQEAgX19aTjdXZWJDb3JlMjJleHRlcm5hbFJlcHJlc2VudGF0
aW9uRVBOUwogX19aTjdXZWJDb3JlMjJleHRlcm5hbFJlcHJlc2VudGF0aW9uRVBOU183RWxlbWVu
dEVqCiBfX1pON1dlYkNvcmUyMnN5c3RlbU1hcmtldGluZ1ZlcnNpb25FdgogX19aTjdXZWJDb3Jl
MjJ1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzRXYKK19fWk43V2ViQ29yZTIyV2hlZWxFdmVudERlbHRh
VHJhY2tlcjE3ZW5kVHJhY2tpbmdEZWx0YXNFdgorX19aTjdXZWJDb3JlMjJXaGVlbEV2ZW50RGVs
dGFUcmFja2VyMTliZWdpblRyYWNraW5nRGVsdGFzRXYKK19fWk43V2ViQ29yZTIyV2hlZWxFdmVu
dERlbHRhVHJhY2tlcjIxcmVjb3JkV2hlZWxFdmVudERlbHRhRVJLTlNfMThQbGF0Zm9ybVdoZWVs
RXZlbnRFCitfX1pON1dlYkNvcmUyMldoZWVsRXZlbnREZWx0YVRyYWNrZXJDMUV2CiBfX1pON1dl
YkNvcmUyM0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlMTRzZXRNYXhpbXVtU2l6ZUV4CiBfX1pON1dl
YkNvcmUyM0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlMTZkZWxldGVBbGxFbnRyaWVzRXYKIF9fWk43
V2ViQ29yZTIzQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UxNnN0b3JlQ29weU9mQ2FjaGVFUktOM1dU
RjZTdHJpbmdFUE5TXzIwQXBwbGljYXRpb25DYWNoZUhvc3RFCkBAIC0xNjU5LDYgKzE2NjMsNyBA
QCBfX1pOSzdXZWJDb3JlMjFOZXR3b3JrU3RvcmFnZVNlc3Npb24xM2NvCiBfX1pOSzdXZWJDb3Jl
MjFSZW5kZXJMYXllckNvbXBvc2l0b3IxMXNjcm9sbExheWVyRXYKIF9fWk5LN1dlYkNvcmUyMVJl
bmRlckxheWVyQ29tcG9zaXRvcjE1cm9vdFJlbmRlckxheWVyRXYKIF9fWk5LN1dlYkNvcmUyMVVz
ZXJDb250ZW50VVJMUGF0dGVybjdtYXRjaGVzRVJLTlNfM1VSTEUKK19fWk5LN1dlYkNvcmUyMldo
ZWVsRXZlbnREZWx0YVRyYWNrZXIzMGRvbWluYW50U2Nyb2xsR2VzdHVyZURpcmVjdGlvbkV2CiBf
X1pOSzdXZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTExbWF4aW11bVNpemVFdgogX19a
Tks3V2ViQ29yZTIzQXV0aGVudGljYXRpb25DaGFsbGVuZ2UyMGF1dGhlbnRpY2F0aW9uQ2xpZW50
RXYKIF9fWk5LN1dlYkNvcmUyM0ZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lMTVmaXJzdExheW91dERv
bmVFdgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTYyNjQzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQ0LDYgKzMyNDQs
OCBAQAogCQk5M0VCMTY5NTA5Rjg4MEIwMDA5MUY4RkYgLyogV2ViQ29yZVN5c3RlbUludGVyZmFj
ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRUIx
Njk0MDlGODgwQjAwMDkxRjhGRiAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLm1tICovOyB9Owog
CQk5M0VCMTY5NzA5Rjg4MEMwMDA5MUY4RkYgLyogV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFQjE2OTYwOUY4
ODBDMDAwOTFGOEZGIC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0VCMzU1RjA5RTM3RkQ2MDBGNDM3
OTkgLyogTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0VCMzU1RTA5RTM3RkQ2MDBGNDM3OTkgLyog
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAgKi87IH07CisJCTkzRUM0NEExMTg4RjRC
QjgwMDY2MURGMSAvKiBXaGVlbEV2ZW50RGVsdGFUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRUM0NDlGMTg4RjRCQjgwMDY2MURGMSAv
KiBXaGVlbEV2ZW50RGVsdGFUcmFja2VyLmNwcCAqLzsgfTsKKwkJOTNFQzQ0QTIxODhGNEJCODAw
NjYxREYxIC8qIFdoZWVsRXZlbnREZWx0YVRyYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRUM0NEEwMTg4RjRCQjgwMDY2MURGMSAvKiBXaGVl
bEV2ZW50RGVsdGFUcmFja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTNGMTk4RTUwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxEb2N1bWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyM0Mw
MkRFNDM5NjAxODYzNUNBIC8qIEhUTUxEb2N1bWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjE5OEU2MDgyNDVFNTkwMDFFOUFCQyAvKiBI
VE1MRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjUyM0QyM0YwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxFbGVtZW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk4RjYwODI0NUU1OTAw
MUU5QUJDIC8qIFRleHRSZXNvdXJjZURlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjc5MDJERTQzRDcwMTg2MzVDQSAvKiBUZXh0UmVz
b3VyY2VEZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTEwMjUzLDYgKzEwMjU1LDggQEAKIAkJOTNFQjE2OTQwOUY4ODBCMDAwOTFGOEZG
IC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5M0VCMTY5NjA5Rjg4MEMwMDA5MUY4RkYgLyogV2ViQ29yZVN5c3RlbUlu
dGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlU3lzdGVt
SW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRUIzNTVFMDlFMzdG
RDYwMEY0Mzc5OSAvKiBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0VDNDQ5RjE4OEY0QkI4MDA2NjFE
RjEgLyogV2hlZWxFdmVudERlbHRhVHJhY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXaGVlbEV2ZW50RGVsdGFUcmFja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTNFQzQ0QTAxODhGNEJCODAwNjYxREYxIC8qIFdoZWVsRXZlbnREZWx0
YVRyYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2hlZWxFdmVudERl
bHRhVHJhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0VFQzFFNTA5QzI4
Nzc3MDBDNTE1RDEgLyogQXR0ci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQXR0ci5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRUVDMUU2MDlDMjg3NzcwMEM1MTVEMSAv
KiBDaGFyYWN0ZXJEYXRhLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDaGFyYWN0ZXJEYXRh
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFRUMxRTgwOUMyODc3NzAwQzUx
NUQxIC8qIERvY3VtZW50VHlwZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRG9jdW1lbnRU
eXBlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MzQzLDYgKzE2MzQ3LDgg
QEAKIAkJCQlCRTk4M0Q5NTA1MkEyRTBBMDA4OTJEODUgLyogV2ViQ29yZUtleWJvYXJkVUlNb2Rl
LmggKi8sCiAJCQkJNDk0QkQ3OTMwRjU1QzhFRTAwNzQ3ODI4IC8qIFdlYktpdFBvaW50LmggKi8s
CiAJCQkJNDk0QkQ3OTQwRjU1QzhFRTAwNzQ3ODI4IC8qIFdlYktpdFBvaW50LmlkbCAqLywKKwkJ
CQk5M0VDNDQ5RjE4OEY0QkI4MDA2NjFERjEgLyogV2hlZWxFdmVudERlbHRhVHJhY2tlci5jcHAg
Ki8sCisJCQkJOTNFQzQ0QTAxODhGNEJCODAwNjYxREYxIC8qIFdoZWVsRXZlbnREZWx0YVRyYWNr
ZXIuaCAqLywKIAkJCQlCQzgyNDNFNjBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMu
Y3BwICovLAogCQkJCUJDODI0M0U3MEQwQ0ZENzUwMDQ2MEM4RiAvKiBXaW5kb3dGZWF0dXJlcy5o
ICovLAogCQkJCTdFOTlBRjUyMEIxMzg0NjQ2OEZCMDFBNSAvKiBXaW5kb3dGb2N1c0FsbG93ZWRJ
bmRpY2F0b3IuY3BwICovLApAQCAtMjM5NDUsNiArMjM5NTEsNyBAQAogCQkJCTc3QTE3QTdCMTJG
Mjg5MEIwMDRFMDJGNiAvKiBHcmFwaGljc1R5cGVzM0QuaCBpbiBIZWFkZXJzICovLAogCQkJCUEx
MjcwNUMzMTY1NkJENjUwMEMyRTI3QyAvKiBHcmlkUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUExMkExMDUwMTY2NDQ0RkQwMDhGQTMxMSAvKiBHcmlkVHJhY2tTaXplLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5M0VDNDRBMjE4OEY0QkI4MDA2NjFERjEgLyogV2hlZWxFdmVudERlbHRhVHJh
Y2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzUwQjU2MTcxMjExOUQyMzAwOEI0NkUwIC8qIEdy
b3VwU2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRkY4RjY1MTgwNzQ1RDgwMDEzMjY3
NCAvKiBKU1N1YnRsZUNyeXB0by5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5NDAxN0QxNkUx
QzAwNDIwQUExIC8qIFJUQ0ljZUNhbmRpZGF0ZURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLApA
QCAtMjc0NTMsNiArMjc0NjAsNyBAQAogCQkJCUE4NzFEQjJEMEExNTBCRDYwMEIxMkE2OCAvKiBI
VE1MVGFibGVQYXJ0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODcxREIzMDBBMTUw
QkQ2MDBCMTJBNjggLyogSFRNTFRhYmxlUm93RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MzQ0MkNBMDBEMkIzMzYwMDAzMzhGRjkgLyogSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJOTNFQzQ0QTExODhGNEJCODAwNjYxREYxIC8qIFdoZWVsRXZl
bnREZWx0YVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg3MURCMjYwQTE1MEJENjAw
QjEyQTY4IC8qIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUUxOUFDM0YwMTgyNERDNzkwMDM0OTQyNiAvKiBDcnlwdG9BbGdvcml0aG1TSEEyNTYuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTExRUYyQ0IxN0YwRkQzNTAwRTRGQTE2IC8qIEpTSURCVmVyc2lv
bkNoYW5nZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMTYyNjQzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsNyArMzUzLDcgQEAgRXZlbnRI
YW5kbGVyOjpFdmVudEhhbmRsZXIoRnJhbWUmIGZyYW1lKQogI2VuZGlmCiAgICAgLCBtX21vdXNl
UG9zaXRpb25Jc1Vua25vd24odHJ1ZSkKICAgICAsIG1fbW91c2VEb3duVGltZXN0YW1wKDApCi0g
ICAgLCBtX2luVHJhY2tpbmdTY3JvbGxHZXN0dXJlUGhhc2UoZmFsc2UpCisgICAgLCBtX3JlY2Vu
dFdoZWVsRXZlbnREZWx0YVRyYWNrZXIoYWRvcHRQdHIobmV3IFdoZWVsRXZlbnREZWx0YVRyYWNr
ZXIpKQogICAgICwgbV93aWRnZXRJc0xhdGNoZWQoZmFsc2UpCiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgICwgbV9tb3VzZURvd25WaWV3KG5pbCkKQEAgLTI0NjksNDEgKzI0NjksNiBAQCBib29sIEV2
ZW50SGFuZGxlcjo6c2hvdWxkVHVyblZlcnRpY2FsVGljCiB9CiAjZW5kaWYKIAotdm9pZCBFdmVu
dEhhbmRsZXI6OnJlY29yZFdoZWVsRXZlbnREZWx0YShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
IGV2ZW50KQotewotICAgIGNvbnN0IHNpemVfdCByZWNlbnRFdmVudENvdW50ID0gMzsKLSAgICAK
LSAgICBtX3JlY2VudFdoZWVsRXZlbnREZWx0YXMuYXBwZW5kKEZsb2F0U2l6ZShldmVudC5kZWx0
YVgoKSwgZXZlbnQuZGVsdGFZKCkpKTsKLSAgICBpZiAobV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFz
LnNpemUoKSA+IHJlY2VudEV2ZW50Q291bnQpCi0gICAgICAgIG1fcmVjZW50V2hlZWxFdmVudERl
bHRhcy5yZW1vdmVGaXJzdCgpOwotfQotCi1zdGF0aWMgYm9vbCBkZWx0YUlzUHJlZG9taW5hbnRs
eVZlcnRpY2FsKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCi17Ci0gICAgcmV0dXJuIGZhYnMoZGVs
dGEuaGVpZ2h0KCkpID4gZmFicyhkZWx0YS53aWR0aCgpKTsKLX0KLQotRXZlbnRIYW5kbGVyOjpE
b21pbmFudFNjcm9sbEdlc3R1cmVEaXJlY3Rpb24gRXZlbnRIYW5kbGVyOjpkb21pbmFudFNjcm9s
bEdlc3R1cmVEaXJlY3Rpb24oKSBjb25zdAotewotICAgIGJvb2wgYWxsVmVydGljYWwgPSBtX3Jl
Y2VudFdoZWVsRXZlbnREZWx0YXMuc2l6ZSgpOwotICAgIGJvb2wgYWxsSG9yaXpvbnRhbCA9IG1f
cmVjZW50V2hlZWxFdmVudERlbHRhcy5zaXplKCk7Ci0KLSAgICBEZXF1ZTxGbG9hdFNpemU+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3JlY2VudFdoZWVsRXZlbnREZWx0YXMuZW5kKCk7Ci0gICAg
Zm9yIChEZXF1ZTxGbG9hdFNpemU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVjZW50V2hlZWxF
dmVudERlbHRhcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgYm9vbCBpc1Zl
cnRpY2FsID0gZGVsdGFJc1ByZWRvbWluYW50bHlWZXJ0aWNhbCgqaXQpOwotICAgICAgICBhbGxW
ZXJ0aWNhbCAmPSBpc1ZlcnRpY2FsOwotICAgICAgICBhbGxIb3Jpem9udGFsICY9ICFpc1ZlcnRp
Y2FsOwotICAgIH0KLSAgICAKLSAgICBpZiAoYWxsVmVydGljYWwpCi0gICAgICAgIHJldHVybiBE
b21pbmFudFNjcm9sbERpcmVjdGlvblZlcnRpY2FsOwotCi0gICAgaWYgKGFsbEhvcml6b250YWwp
Ci0gICAgICAgIHJldHVybiBEb21pbmFudFNjcm9sbERpcmVjdGlvbkhvcml6b250YWw7Ci0gICAg
Ci0gICAgcmV0dXJuIERvbWluYW50U2Nyb2xsRGlyZWN0aW9uTm9uZTsKLX0KLQogYm9vbCBFdmVu
dEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBlKQog
ewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKTsKQEAgLTI1NTcs
MTggKzI1MjIsMTcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoY29ucwog
I2lmIFBMQVRGT1JNKE1BQykKICAgICBzd2l0Y2ggKGV2ZW50LnBoYXNlKCkpIHsKICAgICBjYXNl
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW46Ci0gICAgICAgIG1fcmVjZW50V2hlZWxFdmVu
dERlbHRhcy5jbGVhcigpOwotICAgICAgICBtX2luVHJhY2tpbmdTY3JvbGxHZXN0dXJlUGhhc2Ug
PSB0cnVlOworICAgICAgICBtX3JlY2VudFdoZWVsRXZlbnREZWx0YVRyYWNrZXItPmJlZ2luVHJh
Y2tpbmdEZWx0YXMoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZl
bnRQaGFzZUVuZGVkOgotICAgICAgICBtX2luVHJhY2tpbmdTY3JvbGxHZXN0dXJlUGhhc2UgPSBm
YWxzZTsKKyAgICAgICAgbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFUcmFja2VyLT5lbmRUcmFja2lu
Z0RlbHRhcygpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsK
ICAgICB9CiAjZW5kaWYKIAotICAgIHJlY29yZFdoZWVsRXZlbnREZWx0YShldmVudCk7CisgICAg
bV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFUcmFja2VyLT5yZWNvcmRXaGVlbEV2ZW50RGVsdGEoZXZl
bnQpOwogCiAgICAgaWYgKGVsZW1lbnQpIHsKICAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCB2
aWV3IHRvIHNlbmQgdGhlIGV2ZW50IHRvLgpAQCAtMjYwNCwxNyArMjU2OCwyMCBAQCB2b2lkIEV2
ZW50SGFuZGxlcjo6ZGVmYXVsdFdoZWVsRXZlbnRIYW5kCiAgICAgRWxlbWVudCogc3RvcEVsZW1l
bnQgPSBtX3ByZXZpb3VzV2hlZWxTY3JvbGxlZEVsZW1lbnQuZ2V0KCk7CiAgICAgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHkgPSB3aGVlbEdyYW51bGFyaXR5VG9TY3JvbGxHcmFudWxhcml0
eSh3aGVlbEV2ZW50LT5kZWx0YU1vZGUoKSk7CiAgICAgCi0gICAgRG9taW5hbnRTY3JvbGxHZXN0
dXJlRGlyZWN0aW9uIGRvbWluYW50RGlyZWN0aW9uID0gRG9taW5hbnRTY3JvbGxEaXJlY3Rpb25O
b25lOwotICAgIC8vIFdvcmthcm91bmQgZm9yIHNjcm9sbGluZyBpc3N1ZXMgaW4gaVR1bmVzICg8
cmRhcjovL3Byb2JsZW0vMTQ3NTg2MTU+KS4KLSAgICBpZiAobV9pblRyYWNraW5nU2Nyb2xsR2Vz
dHVyZVBoYXNlICYmIGFwcGxpY2F0aW9uSXNJVHVuZXMoKSkKLSAgICAgICAgZG9taW5hbnREaXJl
Y3Rpb24gPSBkb21pbmFudFNjcm9sbEdlc3R1cmVEaXJlY3Rpb24oKTsKKyAgICBEb21pbmFudFNj
cm9sbEdlc3R1cmVEaXJlY3Rpb24gZG9taW5hbnREaXJlY3Rpb24gPSBEb21pbmFudFNjcm9sbEdl
c3R1cmVEaXJlY3Rpb246Ok5vbmU7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgLy8gV29ya2Fy
b3VuZCBmb3Igc2Nyb2xsaW5nIGlzc3VlcyAoPHJkYXI6Ly9wcm9ibGVtLzE0NzU4NjE1PiApLgor
ICAgIGlmIChtX3JlY2VudFdoZWVsRXZlbnREZWx0YVRyYWNrZXItPmlzVHJhY2tpbmdEZWx0YXMo
KSkKKyAgICAgICAgZG9taW5hbnREaXJlY3Rpb24gPSBtX3JlY2VudFdoZWVsRXZlbnREZWx0YVRy
YWNrZXItPmRvbWluYW50U2Nyb2xsR2VzdHVyZURpcmVjdGlvbigpOworI2VuZGlmCiAgICAgCiAg
ICAgLy8gQnJlYWsgdXAgaW50byB0d28gc2Nyb2xscyBpZiB3ZSBuZWVkIHRvLiAgRGlhZ29uYWwg
bW92ZW1lbnQgb24gCiAgICAgLy8gYSBNYWNCb29rIHBybyBpcyBhbiBleGFtcGxlIG9mIGEgMi1k
aW1lbnNpb25hbCBtb3VzZSB3aGVlbCBldmVudCAod2hlcmUgYm90aCBkZWx0YVggYW5kIGRlbHRh
WSBjYW4gYmUgc2V0KS4KLSAgICBpZiAoZG9taW5hbnREaXJlY3Rpb24gIT0gRG9taW5hbnRTY3Jv
bGxEaXJlY3Rpb25WZXJ0aWNhbCAmJiBzY3JvbGxOb2RlKHdoZWVsRXZlbnQtPmRlbHRhWCgpLCBn
cmFudWxhcml0eSwgU2Nyb2xsUmlnaHQsIFNjcm9sbExlZnQsIHN0YXJ0Tm9kZSwgJnN0b3BFbGVt
ZW50KSkKKyAgICBpZiAoZG9taW5hbnREaXJlY3Rpb24gIT0gRG9taW5hbnRTY3JvbGxHZXN0dXJl
RGlyZWN0aW9uOjpWZXJ0aWNhbCAmJiBzY3JvbGxOb2RlKHdoZWVsRXZlbnQtPmRlbHRhWCgpLCBn
cmFudWxhcml0eSwgU2Nyb2xsUmlnaHQsIFNjcm9sbExlZnQsIHN0YXJ0Tm9kZSwgJnN0b3BFbGVt
ZW50KSkKICAgICAgICAgd2hlZWxFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAKLSAg
ICBpZiAoZG9taW5hbnREaXJlY3Rpb24gIT0gRG9taW5hbnRTY3JvbGxEaXJlY3Rpb25Ib3Jpem9u
dGFsICYmIHNjcm9sbE5vZGUod2hlZWxFdmVudC0+ZGVsdGFZKCksIGdyYW51bGFyaXR5LCBTY3Jv
bGxEb3duLCBTY3JvbGxVcCwgc3RhcnROb2RlLCAmc3RvcEVsZW1lbnQpKQorICAgIGlmIChkb21p
bmFudERpcmVjdGlvbiAhPSBEb21pbmFudFNjcm9sbEdlc3R1cmVEaXJlY3Rpb246Okhvcml6b250
YWwgJiYgc2Nyb2xsTm9kZSh3aGVlbEV2ZW50LT5kZWx0YVkoKSwgZ3JhbnVsYXJpdHksIFNjcm9s
bERvd24sIFNjcm9sbFVwLCBzdGFydE5vZGUsICZzdG9wRWxlbWVudCkpCiAgICAgICAgIHdoZWVs
RXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgCiAgICAgaWYgKCFtX2xhdGNoZWRXaGVl
bEV2ZW50RWxlbWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNp
b24gMTYyNjQzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgIlRleHRFdmVudElucHV0VHlwZS5o
IgogI2luY2x1ZGUgIlRleHRHcmFudWxhcml0eS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5j
bHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSAiV2hlZWxFdmVudERlbHRhVHJhY2tlci5oIgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTMyOSwxMyArMzI5LDYgQEAgcHJpdmF0ZToKICAgICBib29s
IGxvZ2ljYWxTY3JvbGxPdmVyZmxvdyhTY3JvbGxMb2dpY2FsRGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSwgTm9kZSogc3RhcnRpbmdOb2RlID0gMCk7CiAgICAgCiAgICAgYm9vbCBzaG91bGRU
dXJuVmVydGljYWxUaWNrc0ludG9Ib3Jpem9udGFsKGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25zdDsKLSAgICB2b2lkIHJlY29yZFdoZWVsRXZlbnRE
ZWx0YShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKLSAgICBlbnVtIERvbWluYW50U2Nyb2xs
R2VzdHVyZURpcmVjdGlvbiB7Ci0gICAgICAgIERvbWluYW50U2Nyb2xsRGlyZWN0aW9uTm9uZSwK
LSAgICAgICAgRG9taW5hbnRTY3JvbGxEaXJlY3Rpb25WZXJ0aWNhbCwKLSAgICAgICAgRG9taW5h
bnRTY3JvbGxEaXJlY3Rpb25Ib3Jpem9udGFsCi0gICAgfTsKLSAgICBEb21pbmFudFNjcm9sbEdl
c3R1cmVEaXJlY3Rpb24gZG9taW5hbnRTY3JvbGxHZXN0dXJlRGlyZWN0aW9uKCkgY29uc3Q7CiAg
ICAgCiAgICAgYm9vbCBtb3VzZURvd25NYXlTdGFydFNlbGVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bW91c2VEb3duTWF5U3RhcnRTZWxlY3Q7IH0KIApAQCAtNTIxLDkgKzUxNCw4IEBAIHByaXZhdGU6
CiAgICAgZG91YmxlIG1fbW91c2VEb3duVGltZXN0YW1wOwogICAgIFBsYXRmb3JtTW91c2VFdmVu
dCBtX21vdXNlRG93bjsKIAotICAgIERlcXVlPEZsb2F0U2l6ZT4gbV9yZWNlbnRXaGVlbEV2ZW50
RGVsdGFzOworICAgIE93blB0cjxXaGVlbEV2ZW50RGVsdGFUcmFja2VyPiBtX3JlY2VudFdoZWVs
RXZlbnREZWx0YVRyYWNrZXI7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fbGF0Y2hlZFdoZWVsRXZl
bnRFbGVtZW50OwotICAgIGJvb2wgbV9pblRyYWNraW5nU2Nyb2xsR2VzdHVyZVBoYXNlOwogICAg
IGJvb2wgbV93aWRnZXRJc0xhdGNoZWQ7CiAKICAgICBSZWZQdHI8RWxlbWVudD4gbV9wcmV2aW91
c1doZWVsU2Nyb2xsZWRFbGVtZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAko
cmV2aXNpb24gMTYyNjQzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjMsNyArMjIzLDcgQEAgRnJhbWVWaWV3OjpGcmFtZVZpZXcoRnJh
bWUmIGZyYW1lKQogCiAgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpIHsKICAgICAgICAgU2Ny
b2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5
QWxsb3dlZCk7Ci0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxh
c3RpY2l0eShTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljKTsKKyAgICAgICAgU2Nyb2xsYWJsZUFy
ZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlBbGxvd2Vk
KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2hlZWxFdmVudERlbHRh
VHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9XaGVlbEV2ZW50
RGVsdGFUcmFja2VyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2hl
ZWxFdmVudERlbHRhVHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldoZWVsRXZlbnRE
ZWx0YVRyYWNrZXIuaCIKKworI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtV2hlZWxFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1doZWVsRXZlbnREZWx0
YVRyYWNrZXI6OldoZWVsRXZlbnREZWx0YVRyYWNrZXIoKQorICAgIDogbV9pc1RyYWNraW5nRGVs
dGFzKGZhbHNlKQoreworfQorCitXaGVlbEV2ZW50RGVsdGFUcmFja2VyOjp+V2hlZWxFdmVudERl
bHRhVHJhY2tlcigpCit7Cit9CisKK3ZvaWQgV2hlZWxFdmVudERlbHRhVHJhY2tlcjo6YmVnaW5U
cmFja2luZ0RlbHRhcygpCit7CisgICAgbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFzLmNsZWFyKCk7
CisgICAgbV9pc1RyYWNraW5nRGVsdGFzID0gdHJ1ZTsKK30KKwordm9pZCBXaGVlbEV2ZW50RGVs
dGFUcmFja2VyOjplbmRUcmFja2luZ0RlbHRhcygpCit7CisgICAgbV9pc1RyYWNraW5nRGVsdGFz
ID0gZmFsc2U7Cit9CisKK3ZvaWQgV2hlZWxFdmVudERlbHRhVHJhY2tlcjo6cmVjb3JkV2hlZWxF
dmVudERlbHRhKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQpCit7CisgICAgY29uc3Qg
c2l6ZV90IHJlY2VudEV2ZW50Q291bnQgPSAzOworICAgIAorICAgIG1fcmVjZW50V2hlZWxFdmVu
dERlbHRhcy5hcHBlbmQoRmxvYXRTaXplKGV2ZW50LmRlbHRhWCgpLCBldmVudC5kZWx0YVkoKSkp
OworICAgIGlmIChtX3JlY2VudFdoZWVsRXZlbnREZWx0YXMuc2l6ZSgpID4gcmVjZW50RXZlbnRD
b3VudCkKKyAgICAgICAgbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFzLnJlbW92ZUZpcnN0KCk7Cit9
CisKK3N0YXRpYyBib29sIGRlbHRhSXNQcmVkb21pbmFudGx5VmVydGljYWwoY29uc3QgRmxvYXRT
aXplJiBkZWx0YSkKK3sKKyAgICByZXR1cm4gZmFicyhkZWx0YS5oZWlnaHQoKSkgPiBmYWJzKGRl
bHRhLndpZHRoKCkpOworfQorCitEb21pbmFudFNjcm9sbEdlc3R1cmVEaXJlY3Rpb24gV2hlZWxF
dmVudERlbHRhVHJhY2tlcjo6ZG9taW5hbnRTY3JvbGxHZXN0dXJlRGlyZWN0aW9uKCkgY29uc3QK
K3sKKyAgICBib29sIGFsbFZlcnRpY2FsID0gbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFzLnNpemUo
KTsKKyAgICBib29sIGFsbEhvcml6b250YWwgPSBtX3JlY2VudFdoZWVsRXZlbnREZWx0YXMuc2l6
ZSgpOworCisgICAgRGVxdWU8RmxvYXRTaXplPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZWNl
bnRXaGVlbEV2ZW50RGVsdGFzLmVuZCgpOworICAgIGZvciAoRGVxdWU8RmxvYXRTaXplPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3JlY2VudFdoZWVsRXZlbnREZWx0YXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgIGJvb2wgaXNWZXJ0aWNhbCA9IGRlbHRhSXNQcmVkb21pbmFu
dGx5VmVydGljYWwoKml0KTsKKyAgICAgICAgYWxsVmVydGljYWwgJj0gaXNWZXJ0aWNhbDsKKyAg
ICAgICAgYWxsSG9yaXpvbnRhbCAmPSAhaXNWZXJ0aWNhbDsKKyAgICB9CisgICAgCisgICAgaWYg
KGFsbFZlcnRpY2FsKQorICAgICAgICByZXR1cm4gRG9taW5hbnRTY3JvbGxHZXN0dXJlRGlyZWN0
aW9uOjpWZXJ0aWNhbDsKKworICAgIGlmIChhbGxIb3Jpem9udGFsKQorICAgICAgICByZXR1cm4g
RG9taW5hbnRTY3JvbGxHZXN0dXJlRGlyZWN0aW9uOjpIb3Jpem9udGFsOworICAgIAorICAgIHJl
dHVybiBEb21pbmFudFNjcm9sbEdlc3R1cmVEaXJlY3Rpb246Ok5vbmU7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2hlZWxFdmVudERlbHRh
VHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2hlZWxFdmVudERl
bHRhVHJhY2tlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9XaGVlbEV2
ZW50RGVsdGFUcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKworI2lmbmRlZiBXaGVlbEV2ZW50RGVsdGFUcmFja2VyX2gKKyNkZWZpbmUgV2hlZWxF
dmVudERlbHRhVHJhY2tlcl9oCisKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFNpemU7CitjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7
CisKK2VudW0gY2xhc3MgRG9taW5hbnRTY3JvbGxHZXN0dXJlRGlyZWN0aW9uIHsKKyAgICBOb25l
LAorICAgIFZlcnRpY2FsLAorICAgIEhvcml6b250YWwKK307CisKK2NsYXNzIFdoZWVsRXZlbnRE
ZWx0YVRyYWNrZXIgeworcHVibGljOgorICAgIFdoZWVsRXZlbnREZWx0YVRyYWNrZXIoKTsKKyAg
ICB2aXJ0dWFsIH5XaGVlbEV2ZW50RGVsdGFUcmFja2VyKCk7CisKKyAgICB2b2lkIGJlZ2luVHJh
Y2tpbmdEZWx0YXMoKTsKKyAgICB2b2lkIGVuZFRyYWNraW5nRGVsdGFzKCk7CisKKyAgICBib29s
IGlzVHJhY2tpbmdEZWx0YXMoKSBjb25zdCB7IHJldHVybiBtX2lzVHJhY2tpbmdEZWx0YXM7IH0K
KworICAgIHZvaWQgcmVjb3JkV2hlZWxFdmVudERlbHRhKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVu
dCYpOworICAgIERvbWluYW50U2Nyb2xsR2VzdHVyZURpcmVjdGlvbiBkb21pbmFudFNjcm9sbEdl
c3R1cmVEaXJlY3Rpb24oKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBEZXF1ZTxGbG9hdFNpemU+
IG1fcmVjZW50V2hlZWxFdmVudERlbHRhczsKKyAgICBib29sIG1faXNUcmFja2luZ0RlbHRhczsK
KworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2hlZWxFdmVudERl
bHRhVHJhY2tlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVs
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdo
ZWVsRXZlbnQuaAkocmV2aXNpb24gMTYyNjQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1XaGVlbEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw2ICsxMjUsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGZsb2F0IGRlbHRhWCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVsdGFYOyB9CiAgICAgICAgIGZsb2F0IGRlbHRhWSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVs
dGFZOyB9CiAKKyAgICAgICAgdm9pZCBpZ25vcmVIb3Jpem9udGFsRGVsdGEoKSB7IG1fZGVsdGFY
ID0gMDsgfQorICAgICAgICB2b2lkIGlnbm9yZVZlcnRpY2FsRGVsdGEoKSB7IG1fZGVsdGFZID0g
MDsgfQorCiAgICAgICAgIGZsb2F0IHdoZWVsVGlja3NYKCkgY29uc3QgeyByZXR1cm4gbV93aGVl
bFRpY2tzWDsgfQogICAgICAgICBmbG9hdCB3aGVlbFRpY2tzWSgpIGNvbnN0IHsgcmV0dXJuIG1f
d2hlZWxUaWNrc1k7IH0KIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyNjYzKQorKysgU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIw
MTQtMDEtMjMgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFNpZGV3
YXlzICd3b2JibGUnIHdoZW4gc2Nyb2xsaW5nIHdpdGggdHJhY2twYWQgb24gTWF2ZXJpY2tzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc1MjEKKyAg
ICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTQxMzcz
MDY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Rh
cnQgdXNpbmcgV2ViQ29yZTo6V2hlZWxFdmVudERlbHRhVHJhY2tlciB0byBmaWx0ZXIgZXZlbnRz
LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpFdmVudERpc3BhdGNoZXI6OkV2ZW50RGlzcGF0Y2hlcik6CisgICAgICAg
IChXZWJLaXQ6OkV2ZW50RGlzcGF0Y2hlcjo6d2hlZWxFdmVudCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oOgorCiAyMDE0LTAxLTIzICBTaW1vbiBGcmFz
ZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgdmlzaWJsZUNvbnRl
bnRSZWN0KCkgcmV0dXJuIGFjdHVhbFZpc2libGVDb250ZW50UmVjdCgpIG9uIGlPUyBtb3N0IG9m
IHRoZSB0aW1lCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnRE
aXNwYXRjaGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAkocmV2aXNpb24gMTYyNjQzKQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDYgKzUzLDcgQEAgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNoZXI+IEV2ZW50RGlz
cGF0YwogCiBFdmVudERpc3BhdGNoZXI6OkV2ZW50RGlzcGF0Y2hlcigpCiAgICAgOiBtX3F1ZXVl
KFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LkV2ZW50RGlzcGF0Y2hlciIpKQor
ICAgICwgbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFUcmFja2VyKGFkb3B0UHRyKG5ldyBXaGVlbEV2
ZW50RGVsdGFUcmFja2VyKSkKIHsKIH0KIApAQCAtODgsMTEgKzg5LDM5IEBAIHZvaWQgRXZlbnRE
aXNwYXRjaGVyOjppbml0aWFsaXplQ29ubmVjdGkKIAogdm9pZCBFdmVudERpc3BhdGNoZXI6Ondo
ZWVsRXZlbnQodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVlbEV2ZW50
LCBib29sIGNhblJ1YmJlckJhbmRBdExlZnQsIGJvb2wgY2FuUnViYmVyQmFuZEF0UmlnaHQsIGJv
b2wgY2FuUnViYmVyQmFuZEF0VG9wLCBib29sIGNhblJ1YmJlckJhbmRBdEJvdHRvbSkKIHsKKyAg
ICBQbGF0Zm9ybVdoZWVsRXZlbnQgcGxhdGZvcm1XaGVlbEV2ZW50ID0gcGxhdGZvcm0od2hlZWxF
dmVudCk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgc3dpdGNoIChwbGF0Zm9ybVdoZWVsRXZl
bnQucGhhc2UoKSkgeworICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VCZWdhbjoKKyAg
ICAgICAgbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFUcmFja2VyLT5iZWdpblRyYWNraW5nRGVsdGFz
KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRl
ZDoKKyAgICAgICAgbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFUcmFja2VyLT5lbmRUcmFja2luZ0Rl
bHRhcygpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBtX3JlY2VudFdoZWVsRXZlbnREZWx0YVRyYWNrZXItPnJlY29yZFdoZWVsRXZl
bnREZWx0YShwbGF0Zm9ybVdoZWVsRXZlbnQpOworCisgICAgRG9taW5hbnRTY3JvbGxHZXN0dXJl
RGlyZWN0aW9uIGRvbWluYW50RGlyZWN0aW9uID0gRG9taW5hbnRTY3JvbGxHZXN0dXJlRGlyZWN0
aW9uOjpOb25lOworICAgIGlmIChtX3JlY2VudFdoZWVsRXZlbnREZWx0YVRyYWNrZXItPmlzVHJh
Y2tpbmdEZWx0YXMoKSkKKyAgICAgICAgZG9taW5hbnREaXJlY3Rpb24gPSBtX3JlY2VudFdoZWVs
RXZlbnREZWx0YVRyYWNrZXItPmRvbWluYW50U2Nyb2xsR2VzdHVyZURpcmVjdGlvbigpOworCisg
ICAgLy8gVGhpcyBpcyBhIGxpdHRsZSBjcmF6eSBiZWNhdXNlIGl0IGlzIHdvcmtpbmcgYXJvdW5k
IDxyZGFyOi8vcHJvYmxlbS8xNDc1ODYxNT4sIHdoaWNoIGlzIGEgYnVnIGluIGEKKyAgICAvLyBs
b3dlci1sZXZlbCBjb21wb25lbnQuIFdoaWxlIHRoYXQgYnVnIGlzIHN0aWxsIHVucmVzb2x2ZWQs
IHRoaXMgd2lsbCBoZWxwIHRvIHJlZHVjZSBzb21lIG9mIHRoZSBub2lzZQorICAgIC8vIHdlIGFy
ZSBzZWVpbmcgd2l0aCBsb3RzIG9mIHNtYWxsIGhvcml6b250YWwgZGVsdGFzIHdoZW4gYSB1c2Vy
IGlzIHNjcm9sbGluZyBpbiBwcmltYXJpbHkgdmVydGljYWwKKyAgICAvLyBkaXJlY3Rpb24gYW5k
IHZpY2UgdmVyc2EuCisgICAgaWYgKGRvbWluYW50RGlyZWN0aW9uID09IERvbWluYW50U2Nyb2xs
R2VzdHVyZURpcmVjdGlvbjo6VmVydGljYWwgJiYgcGxhdGZvcm1XaGVlbEV2ZW50LmRlbHRhWCgp
KQorICAgICAgICBwbGF0Zm9ybVdoZWVsRXZlbnQuaWdub3JlSG9yaXpvbnRhbERlbHRhKCk7Cisg
ICAgZWxzZSBpZiAoZG9taW5hbnREaXJlY3Rpb24gPT0gRG9taW5hbnRTY3JvbGxHZXN0dXJlRGly
ZWN0aW9uOjpIb3Jpem9udGFsICYmIHBsYXRmb3JtV2hlZWxFdmVudC5kZWx0YVkoKSkKKyAgICAg
ICAgcGxhdGZvcm1XaGVlbEV2ZW50Lmlnbm9yZVZlcnRpY2FsRGVsdGEoKTsKKyNlbmRpZgorCiAj
aWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAgICBNdXRleExvY2tlciBsb2NrZXIobV9zY3Jv
bGxpbmdUcmVlc011dGV4KTsKICAgICBpZiAoVGhyZWFkZWRTY3JvbGxpbmdUcmVlKiBzY3JvbGxp
bmdUcmVlID0gbV9zY3JvbGxpbmdUcmVlcy5nZXQocGFnZUlEKSkgewotICAgICAgICBQbGF0Zm9y
bVdoZWVsRXZlbnQgcGxhdGZvcm1XaGVlbEV2ZW50ID0gcGxhdGZvcm0od2hlZWxFdmVudCk7Ci0K
ICAgICAgICAgLy8gRklYTUU6IEl0J3MgcHJldHR5IGhvcnJpYmxlIHRoYXQgd2UncmUgdXBkYXRp
bmcgdGhlIGJhY2svZm9yd2FyZCBzdGF0ZSBoZXJlLgogICAgICAgICAvLyBXZWJDb3JlIHNob3Vs
ZCBhbHdheXMga25vdyB0aGUgY3VycmVudCBzdGF0ZSBhbmQga25vdyB3aGVuIGl0IGNoYW5nZXMg
c28gdGhlCiAgICAgICAgIC8vIHNjcm9sbGluZyB0cmVlIGNhbiBiZSBub3RpZmllZC4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRj
aGVyLmgJKHJldmlzaW9uIDE2MjY0MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9FdmVudERpc3BhdGNoZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAog
I2RlZmluZSBFdmVudERpc3BhdGNoZXJfaAogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorCisj
aW5jbHVkZSA8V2ViQ29yZS9XaGVlbEV2ZW50RGVsdGFUcmFja2VyLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CkBAIC03Niw2ICs3OCw3IEBAIHByaXZhdGU6CiAgICAgTXV0ZXggbV9zY3JvbGxp
bmdUcmVlc011dGV4OwogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJDb3JlOjpUaHJl
YWRlZFNjcm9sbGluZ1RyZWU+PiBtX3Njcm9sbGluZ1RyZWVzOwogI2VuZGlmCisgICAgT3duUHRy
PFdlYkNvcmU6OldoZWVsRXZlbnREZWx0YVRyYWNrZXI+IG1fcmVjZW50V2hlZWxFdmVudERlbHRh
VHJhY2tlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222754</attachid>
            <date>2014-01-30 16:07:15 -0800</date>
            <delta_ts>2014-01-31 11:26:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>26821</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzEzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDE0LTAxLTMwICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTaWRld2F5cyAnd29iYmxlJyB3aGVu
IHNjcm9sbGluZyB3aXRoIHRyYWNrcGFkIG9uIE1hdmVyaWNrcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NTIxCisgICAgICAgIC1hbmQgY29ycmVz
cG9uZGluZy0KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE0MTM3MzA2PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggdGFrZXMgaHR0
cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTU0NTM1IHdoaWNoIGludHJvZHVjZWQgCisg
ICAgICAgIGZpbHRlcmluZyB3aGVlbCBldmVudHMgZm9yIG92ZXJmbG93IGFyZWFzIHRvIHRyeSB0
byBtYWtlIHRoZW0gbGVzcyBzZW5zaXRpdmUgdG8gWCAKKyAgICAgICAgZGVsdGFzIHdoZW4gc2Ny
b2xsaW5nIGluIGEgcHJpbWFyaWx5IFkgZGlyZWN0aW9uLCBhbmQgaXQgZmFjdG9ycyB0aGF0IGNv
ZGUgb3V0IAorICAgICAgICBpbnRvIGl0cyBvd24gY2xhc3MsIG5vdyBjYWxsZWQgV2hlZWxFdmVu
dERlbHRhVHJhY2tlci4gU28gbm93IHRoaXMgbmV3IGNsYXNzIGNhbiAKKyAgICAgICAgdXNlIHRo
ZSBzYW1lIGNvZGUgdG8gZmlsdGVyIGV2ZW50cyBmb3IgV2ViS2l0MuKAmXMgRXZlbnREaXNwYXRj
aGVyLgorCisgICAgICAgIFdLMiBuZWVkcyB0aGVzZSBuZXcgV2hlZWxFdmVudERlbHRhVHJhY2tl
ciBmdW5jdGlvbnMuCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisKKyAgICAgICAgRmlsZXMg
Zm9yIFdoZWVsRXZlbnREZWx0YVRyYWNrZXIuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgIE1vdmUgYSBidW5jaCBvZiBjb2RlIG92ZXIgdG8g
V2hlZWxFdmVudERlbHRhVHJhY2tlciBhbmQgdXNlCisgICAgICAgIG1fcmVjZW50V2hlZWxFdmVu
dFRyYWNrZXIgdG8gc2VydmUgdGhlIHNhbWUgcHVycG9zZS4KKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OkV2ZW50SGFuZGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkZWZhdWx0V2hlZWxFdmVudEhhbmRsZXIp
OgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisKKyAgICAgICAgQWxsb3cgaG9yaXpv
bnRhbCBydWJiZXIgYmFuZGluZyBub3cgdGhhdCB3ZSBoYXZlIHNvbWUgZXZlbnQgZmlsdGVyaW5n
IGluIHBsYWNlLgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6RnJhbWVWaWV3KToKKworICAgICAgICBOZXcgZmlsZXMuIE1vc3Qgb2Yg
dGhpcyBjb2RlIHdhcyBmcm9tIEV2ZW50SGFuZGxlci4KKyAgICAgICAgKiBwYWdlL1doZWVsRXZl
bnREZWx0YVRyYWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldoZWVsRXZlbnRE
ZWx0YVRyYWNrZXI6OldoZWVsRXZlbnREZWx0YVRyYWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2hlZWxFdmVudERlbHRhVHJhY2tlcjo6fldoZWVsRXZlbnREZWx0YVRyYWNrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2hlZWxFdmVudERlbHRhVHJhY2tlcjo6YmVnaW5UcmFja2luZ0RlbHRhcyk6
CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEV2ZW50RGVsdGFUcmFja2VyOjplbmRUcmFja2luZ0Rl
bHRhcyk6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEV2ZW50RGVsdGFUcmFja2VyOjpyZWNvcmRX
aGVlbEV2ZW50RGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsdGFJc1ByZWRvbWluYW50bHlW
ZXJ0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEV2ZW50RGVsdGFUcmFja2VyOjpkb21p
bmFudFNjcm9sbEdlc3R1cmVEaXJlY3Rpb24pOgorICAgICAgICAqIHBhZ2UvV2hlZWxFdmVudERl
bHRhVHJhY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldoZWVsRXZlbnREZWx0YVRy
YWNrZXI6OmlzVHJhY2tpbmdEZWx0YXMpOgorCisgICAgICAgIE5ldyBmdW5jdGlvbiB0byBjbG9u
ZSBldmVudHMgd2hpbGUgemVyby1pbmcgb3V0IGNlcnRhaW4gZGVsdGFzLgorICAgICAgICAqIHBs
YXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1X
aGVlbEV2ZW50Ojpjb3B5SWdub3JpbmdIb3Jpem9udGFsRGVsdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1XaGVlbEV2ZW50Ojpjb3B5SWdub3JpbmdWZXJ0aWNhbERlbHRhKToKKwogMjAx
NC0wMS0zMCAgUm9nZXIgRm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YkdMIGxvYWQgcG9saWN5IHNob3VsZCBiZSBxdWVyaWVkIGZvciB0aGUgdG9wIGxldmVsIGRvY3Vt
ZW50LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE2MzEzMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC04NjgsNiArODY4LDEw
IEBAIF9fWk43V2ViQ29yZTIyZXh0ZXJuYWxSZXByZXNlbnRhdGlvbkVQTlMKIF9fWk43V2ViQ29y
ZTIyZXh0ZXJuYWxSZXByZXNlbnRhdGlvbkVQTlNfN0VsZW1lbnRFagogX19aTjdXZWJDb3JlMjJz
eXN0ZW1NYXJrZXRpbmdWZXJzaW9uRXYKIF9fWk43V2ViQ29yZTIydXNlclByZWZlcnJlZExhbmd1
YWdlc0V2CitfX1pON1dlYkNvcmUyMldoZWVsRXZlbnREZWx0YVRyYWNrZXIxN2VuZFRyYWNraW5n
RGVsdGFzRXYKK19fWk43V2ViQ29yZTIyV2hlZWxFdmVudERlbHRhVHJhY2tlcjE5YmVnaW5UcmFj
a2luZ0RlbHRhc0V2CitfX1pON1dlYkNvcmUyMldoZWVsRXZlbnREZWx0YVRyYWNrZXIyMXJlY29y
ZFdoZWVsRXZlbnREZWx0YUVSS05TXzE4UGxhdGZvcm1XaGVlbEV2ZW50RQorX19aTjdXZWJDb3Jl
MjJXaGVlbEV2ZW50RGVsdGFUcmFja2VyQzFFdgogX19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTE0c2V0TWF4aW11bVNpemVFeAogX19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTE2ZGVsZXRlQWxsRW50cmllc0V2CiBfX1pON1dlYkNvcmUyM0FwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlMTZzdG9yZUNvcHlPZkNhY2hlRVJLTjNXVEY2U3RyaW5nRVBOU18yMEFwcGxp
Y2F0aW9uQ2FjaGVIb3N0RQpAQCAtMTY2MCw2ICsxNjY0LDcgQEAgX19aTks3V2ViQ29yZTIxTmV0
d29ya1N0b3JhZ2VTZXNzaW9uMTNjbwogX19aTks3V2ViQ29yZTIxUmVuZGVyTGF5ZXJDb21wb3Np
dG9yMTFzY3JvbGxMYXllckV2CiBfX1pOSzdXZWJDb3JlMjFSZW5kZXJMYXllckNvbXBvc2l0b3Ix
NXJvb3RSZW5kZXJMYXllckV2CiBfX1pOSzdXZWJDb3JlMjFVc2VyQ29udGVudFVSTFBhdHRlcm43
bWF0Y2hlc0VSS05TXzNVUkxFCitfX1pOSzdXZWJDb3JlMjJXaGVlbEV2ZW50RGVsdGFUcmFja2Vy
MzBkb21pbmFudFNjcm9sbEdlc3R1cmVEaXJlY3Rpb25FdgogX19aTks3V2ViQ29yZTIzQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UxMW1heGltdW1TaXplRXYKIF9fWk5LN1dlYkNvcmUyM0F1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlMjBhdXRoZW50aWNhdGlvbkNsaWVudEV2CiBfX1pOSzdXZWJDb3JlMjNG
cmFtZUxvYWRlclN0YXRlTWFjaGluZTE1Zmlyc3RMYXlvdXREb25lRXYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDE2MzEzMSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIwMiw2ICszMjAyLDggQEAKIAkJOTNFQjE2OTUwOUY4
ODBCMDAwOTFGOEZGIC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0VCMTY5NDA5Rjg4MEIwMDA5MUY4RkYg
LyogV2ViQ29yZVN5c3RlbUludGVyZmFjZS5tbSAqLzsgfTsKIAkJOTNFQjE2OTcwOUY4ODBDMDAw
OTFGOEZGIC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRUIxNjk2MDlGODgwQzAwMDkxRjhGRiAvKiBXZWJD
b3JlU3lzdGVtSW50ZXJmYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTNFQjM1NUYwOUUzN0ZENjAwRjQzNzk5IC8qIE1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNFQjM1NUUwOUUzN0ZENjAwRjQzNzk5IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVz
dFJlc3VsdHMuY3BwICovOyB9OworCQk5M0VDNDRBMTE4OEY0QkI4MDA2NjFERjEgLyogV2hlZWxF
dmVudERlbHRhVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0VDNDQ5RjE4OEY0QkI4MDA2NjFERjEgLyogV2hlZWxFdmVudERlbHRhVHJh
Y2tlci5jcHAgKi87IH07CisJCTkzRUM0NEEyMTg4RjRCQjgwMDY2MURGMSAvKiBXaGVlbEV2ZW50
RGVsdGFUcmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5M0VDNDRBMDE4OEY0QkI4MDA2NjFERjEgLyogV2hlZWxFdmVudERlbHRhVHJhY2tlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjE5
OEU1MDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNDMDJERTQzOTYwMTg2MzVDQSAvKiBI
VE1MRG9jdW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk5M0YxOThFNjA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTEVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNGMDJERTQzOTYw
MTg2MzVDQSAvKiBIVE1MRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTkzRjE5OEY2MDgyNDVFNTkwMDFFOUFCQyAvKiBUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNTIzRDI3OTAyREU0M0Q3MDE4NjM1Q0EgLyogVGV4dFJlc291cmNlRGVjb2Rlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDE0Miw2ICsx
MDE0NCw4IEBACiAJCTkzRUIxNjk0MDlGODgwQjAwMDkxRjhGRiAvKiBXZWJDb3JlU3lzdGVtSW50
ZXJmYWNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFQjE2
OTYwOUY4ODBDMDAwOTFGOEZGIC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5M0VCMzU1RTA5RTM3RkQ2MDBGNDM3OTkgLyogTW91c2VF
dmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTNFQzQ0OUYxODhGNEJCODAwNjYxREYxIC8qIFdoZWVsRXZlbnREZWx0
YVRyYWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2hlZWxF
dmVudERlbHRhVHJhY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRUM0
NEEwMTg4RjRCQjgwMDY2MURGMSAvKiBXaGVlbEV2ZW50RGVsdGFUcmFja2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdoZWVsRXZlbnREZWx0YVRyYWNrZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFRUMxRTUwOUMyODc3NzAwQzUxNUQxIC8qIEF0dHIu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEF0dHIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5M0VFQzFFNjA5QzI4Nzc3MDBDNTE1RDEgLyogQ2hhcmFjdGVyRGF0YS5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ2hhcmFjdGVyRGF0YS5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTkzRUVDMUU4MDlDMjg3NzcwMEM1MTVEMSAvKiBEb2N1bWVudFR5cGUu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERvY3VtZW50VHlwZS5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNjIwNyw2ICsxNjIxMSw4IEBACiAJCQkJQkU5ODNEOTUwNTJB
MkUwQTAwODkyRDg1IC8qIFdlYkNvcmVLZXlib2FyZFVJTW9kZS5oICovLAogCQkJCTQ5NEJENzkz
MEY1NUM4RUUwMDc0NzgyOCAvKiBXZWJLaXRQb2ludC5oICovLAogCQkJCTQ5NEJENzk0MEY1NUM4
RUUwMDc0NzgyOCAvKiBXZWJLaXRQb2ludC5pZGwgKi8sCisJCQkJOTNFQzQ0OUYxODhGNEJCODAw
NjYxREYxIC8qIFdoZWVsRXZlbnREZWx0YVRyYWNrZXIuY3BwICovLAorCQkJCTkzRUM0NEEwMTg4
RjRCQjgwMDY2MURGMSAvKiBXaGVlbEV2ZW50RGVsdGFUcmFja2VyLmggKi8sCiAJCQkJQkM4MjQz
RTYwRDBDRkQ3NTAwNDYwQzhGIC8qIFdpbmRvd0ZlYXR1cmVzLmNwcCAqLywKIAkJCQlCQzgyNDNF
NzBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMuaCAqLywKIAkJCQk3RTk5QUY1MjBC
MTM4NDY0NjhGQjAxQTUgLyogV2luZG93Rm9jdXNBbGxvd2VkSW5kaWNhdG9yLmNwcCAqLywKQEAg
LTIzNzA5LDYgKzIzNzE1LDcgQEAKIAkJCQk3N0ExN0E3QjEyRjI4OTBCMDA0RTAyRjYgLyogR3Jh
cGhpY3NUeXBlczNELmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTI3MDVDMzE2NTZCRDY1MDBDMkUy
N0MgLyogR3JpZFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTJBMTA1MDE2NjQ0NEZE
MDA4RkEzMTEgLyogR3JpZFRyYWNrU2l6ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNFQzQ0QTIx
ODhGNEJCODAwNjYxREYxIC8qIFdoZWVsRXZlbnREZWx0YVRyYWNrZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUM1MEI1NjE3MTIxMTlEMjMwMDhCNDZFMCAvKiBHcm91cFNldHRpbmdzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMUZGOEY2NTE4MDc0NUQ4MDAxMzI2NzQgLyogSlNTdWJ0bGVDcnlwdG8u
aCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUwOTQwMTdEMTZFMUMwMDQyMEFBMSAvKiBSVENJY2VD
YW5kaWRhdGVEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTI3MTg3LDYgKzI3MTk0LDcg
QEAKIAkJCQlBODcxREIyRDBBMTUwQkQ2MDBCMTJBNjggLyogSFRNTFRhYmxlUGFydEVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg3MURCMzAwQTE1MEJENjAwQjEyQTY4IC8qIEhUTUxU
YWJsZVJvd0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM0NDJDQTAwRDJCMzM2MDAw
MzM4RkY5IC8qIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTkzRUM0NEExMTg4RjRCQjgwMDY2MURGMSAvKiBXaGVlbEV2ZW50RGVsdGFUcmFja2VyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4NzFEQjI2MEExNTBCRDYwMEIxMkE2OCAvKiBIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTlBQzNGMDE4MjREQzc5MDAz
NDk0MjYgLyogQ3J5cHRvQWxnb3JpdGhtU0hBMjU2LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
MUVGMkNCMTdGMEZEMzUwMEU0RkExNiAvKiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlz
aW9uIDE2MzEzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzU1LDcgKzM1NSw3IEBAIEV2ZW50SGFuZGxlcjo6RXZlbnRIYW5kbGVy
KEZyYW1lJiBmcmFtZSkKICNlbmRpZgogICAgICwgbV9tb3VzZVBvc2l0aW9uSXNVbmtub3duKHRy
dWUpCiAgICAgLCBtX21vdXNlRG93blRpbWVzdGFtcCgwKQotICAgICwgbV9pblRyYWNraW5nU2Ny
b2xsR2VzdHVyZVBoYXNlKGZhbHNlKQorICAgICwgbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFUcmFj
a2VyKGFkb3B0UHRyKG5ldyBXaGVlbEV2ZW50RGVsdGFUcmFja2VyKSkKICAgICAsIG1fd2lkZ2V0
SXNMYXRjaGVkKGZhbHNlKQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1fbW91c2VEb3duVmll
dyhuaWwpCkBAIC0yNDY3LDQxICsyNDY3LDYgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNob3VsZFR1
cm5WZXJ0aWNhbFRpYwogfQogI2VuZGlmCiAKLXZvaWQgRXZlbnRIYW5kbGVyOjpyZWNvcmRXaGVl
bEV2ZW50RGVsdGEoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkKLXsKLSAgICBjb25z
dCBzaXplX3QgcmVjZW50RXZlbnRDb3VudCA9IDM7Ci0gICAgCi0gICAgbV9yZWNlbnRXaGVlbEV2
ZW50RGVsdGFzLmFwcGVuZChGbG9hdFNpemUoZXZlbnQuZGVsdGFYKCksIGV2ZW50LmRlbHRhWSgp
KSk7Ci0gICAgaWYgKG1fcmVjZW50V2hlZWxFdmVudERlbHRhcy5zaXplKCkgPiByZWNlbnRFdmVu
dENvdW50KQotICAgICAgICBtX3JlY2VudFdoZWVsRXZlbnREZWx0YXMucmVtb3ZlRmlyc3QoKTsK
LX0KLQotc3RhdGljIGJvb2wgZGVsdGFJc1ByZWRvbWluYW50bHlWZXJ0aWNhbChjb25zdCBGbG9h
dFNpemUmIGRlbHRhKQotewotICAgIHJldHVybiBmYWJzKGRlbHRhLmhlaWdodCgpKSA+IGZhYnMo
ZGVsdGEud2lkdGgoKSk7Ci19Ci0KLUV2ZW50SGFuZGxlcjo6RG9taW5hbnRTY3JvbGxHZXN0dXJl
RGlyZWN0aW9uIEV2ZW50SGFuZGxlcjo6ZG9taW5hbnRTY3JvbGxHZXN0dXJlRGlyZWN0aW9uKCkg
Y29uc3QKLXsKLSAgICBib29sIGFsbFZlcnRpY2FsID0gbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFz
LnNpemUoKTsKLSAgICBib29sIGFsbEhvcml6b250YWwgPSBtX3JlY2VudFdoZWVsRXZlbnREZWx0
YXMuc2l6ZSgpOwotCi0gICAgRGVxdWU8RmxvYXRTaXplPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFzLmVuZCgpOwotICAgIGZvciAoRGVxdWU8RmxvYXRTaXpl
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3JlY2VudFdoZWVsRXZlbnREZWx0YXMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGJvb2wgaXNWZXJ0aWNhbCA9IGRlbHRhSXNQcmVk
b21pbmFudGx5VmVydGljYWwoKml0KTsKLSAgICAgICAgYWxsVmVydGljYWwgJj0gaXNWZXJ0aWNh
bDsKLSAgICAgICAgYWxsSG9yaXpvbnRhbCAmPSAhaXNWZXJ0aWNhbDsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKGFsbFZlcnRpY2FsKQotICAgICAgICByZXR1cm4gRG9taW5hbnRTY3JvbGxEaXJlY3Rp
b25WZXJ0aWNhbDsKLQotICAgIGlmIChhbGxIb3Jpem9udGFsKQotICAgICAgICByZXR1cm4gRG9t
aW5hbnRTY3JvbGxEaXJlY3Rpb25Ib3Jpem9udGFsOwotICAgIAotICAgIHJldHVybiBEb21pbmFu
dFNjcm9sbERpcmVjdGlvbk5vbmU7Ci19Ci0KIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVl
bEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKIHsKICAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50KCk7CkBAIC0yNTU1LDE4ICsyNTIwLDE3IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnMKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgc3dpdGNoIChldmVudC5waGFzZSgpKSB7CiAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQ
aGFzZUJlZ2FuOgotICAgICAgICBtX3JlY2VudFdoZWVsRXZlbnREZWx0YXMuY2xlYXIoKTsKLSAg
ICAgICAgbV9pblRyYWNraW5nU2Nyb2xsR2VzdHVyZVBoYXNlID0gdHJ1ZTsKKyAgICAgICAgbV9y
ZWNlbnRXaGVlbEV2ZW50RGVsdGFUcmFja2VyLT5iZWdpblRyYWNraW5nRGVsdGFzKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZDoKLSAgICAg
ICAgbV9pblRyYWNraW5nU2Nyb2xsR2VzdHVyZVBoYXNlID0gZmFsc2U7CisgICAgICAgIG1fcmVj
ZW50V2hlZWxFdmVudERlbHRhVHJhY2tlci0+ZW5kVHJhY2tpbmdEZWx0YXMoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQogI2VuZGlmCiAKLSAg
ICByZWNvcmRXaGVlbEV2ZW50RGVsdGEoZXZlbnQpOworICAgIG1fcmVjZW50V2hlZWxFdmVudERl
bHRhVHJhY2tlci0+cmVjb3JkV2hlZWxFdmVudERlbHRhKGV2ZW50KTsKIAogICAgIGlmIChlbGVt
ZW50KSB7CiAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdmlldyB0byBzZW5kIHRoZSBldmVu
dCB0by4KQEAgLTI2MDEsMTggKzI1NjUsMjAgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRX
aGVlbEV2ZW50SGFuZAogICAgIAogICAgIEVsZW1lbnQqIHN0b3BFbGVtZW50ID0gbV9wcmV2aW91
c1doZWVsU2Nyb2xsZWRFbGVtZW50LmdldCgpOwogICAgIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5ID0gd2hlZWxHcmFudWxhcml0eVRvU2Nyb2xsR3JhbnVsYXJpdHkod2hlZWxFdmVudC0+
ZGVsdGFNb2RlKCkpOwotICAgIAotICAgIERvbWluYW50U2Nyb2xsR2VzdHVyZURpcmVjdGlvbiBk
b21pbmFudERpcmVjdGlvbiA9IERvbWluYW50U2Nyb2xsRGlyZWN0aW9uTm9uZTsKLSAgICAvLyBX
b3JrYXJvdW5kIGZvciBzY3JvbGxpbmcgaXNzdWVzIGluIGlUdW5lcyAoPHJkYXI6Ly9wcm9ibGVt
LzE0NzU4NjE1PikuCi0gICAgaWYgKG1faW5UcmFja2luZ1Njcm9sbEdlc3R1cmVQaGFzZSAmJiBh
cHBsaWNhdGlvbklzSVR1bmVzKCkpCi0gICAgICAgIGRvbWluYW50RGlyZWN0aW9uID0gZG9taW5h
bnRTY3JvbGxHZXN0dXJlRGlyZWN0aW9uKCk7CisgICAgRG9taW5hbnRTY3JvbGxHZXN0dXJlRGly
ZWN0aW9uIGRvbWluYW50RGlyZWN0aW9uID0gRG9taW5hbnRTY3JvbGxHZXN0dXJlRGlyZWN0aW9u
OjpOb25lOworCisgICAgLy8gV29ya2Fyb3VuZCBmb3Igc2Nyb2xsaW5nIGlzc3VlcyA8cmRhcjov
L3Byb2JsZW0vMTQ3NTg2MTU+LgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAobV9yZWNlbnRX
aGVlbEV2ZW50RGVsdGFUcmFja2VyLT5pc1RyYWNraW5nRGVsdGFzKCkpCisgICAgICAgIGRvbWlu
YW50RGlyZWN0aW9uID0gbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFUcmFja2VyLT5kb21pbmFudFNj
cm9sbEdlc3R1cmVEaXJlY3Rpb24oKTsKKyNlbmRpZgogICAgIAogICAgIC8vIEJyZWFrIHVwIGlu
dG8gdHdvIHNjcm9sbHMgaWYgd2UgbmVlZCB0by4gIERpYWdvbmFsIG1vdmVtZW50IG9uIAogICAg
IC8vIGEgTWFjQm9vayBwcm8gaXMgYW4gZXhhbXBsZSBvZiBhIDItZGltZW5zaW9uYWwgbW91c2Ug
d2hlZWwgZXZlbnQgKHdoZXJlIGJvdGggZGVsdGFYIGFuZCBkZWx0YVkgY2FuIGJlIHNldCkuCi0g
ICAgaWYgKGRvbWluYW50RGlyZWN0aW9uICE9IERvbWluYW50U2Nyb2xsRGlyZWN0aW9uVmVydGlj
YWwgJiYgc2Nyb2xsTm9kZSh3aGVlbEV2ZW50LT5kZWx0YVgoKSwgZ3JhbnVsYXJpdHksIFNjcm9s
bFJpZ2h0LCBTY3JvbGxMZWZ0LCBzdGFydE5vZGUsICZzdG9wRWxlbWVudCwgcm91bmRlZEludFBv
aW50KHdoZWVsRXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSkpKQorICAgIGlmIChkb21pbmFudERp
cmVjdGlvbiAhPSBEb21pbmFudFNjcm9sbEdlc3R1cmVEaXJlY3Rpb246OlZlcnRpY2FsICYmIHNj
cm9sbE5vZGUod2hlZWxFdmVudC0+ZGVsdGFYKCksIGdyYW51bGFyaXR5LCBTY3JvbGxSaWdodCwg
U2Nyb2xsTGVmdCwgc3RhcnROb2RlLCAmc3RvcEVsZW1lbnQsIHJvdW5kZWRJbnRQb2ludCh3aGVl
bEV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkpKSkKICAgICAgICAgd2hlZWxFdmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKICAgICAKLSAgICBpZiAoZG9taW5hbnREaXJlY3Rpb24gIT0gRG9taW5h
bnRTY3JvbGxEaXJlY3Rpb25Ib3Jpem9udGFsICYmIHNjcm9sbE5vZGUod2hlZWxFdmVudC0+ZGVs
dGFZKCksIGdyYW51bGFyaXR5LCBTY3JvbGxEb3duLCBTY3JvbGxVcCwgc3RhcnROb2RlLCAmc3Rv
cEVsZW1lbnQsIHJvdW5kZWRJbnRQb2ludCh3aGVlbEV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkp
KSkKKyAgICBpZiAoZG9taW5hbnREaXJlY3Rpb24gIT0gRG9taW5hbnRTY3JvbGxHZXN0dXJlRGly
ZWN0aW9uOjpIb3Jpem9udGFsICYmIHNjcm9sbE5vZGUod2hlZWxFdmVudC0+ZGVsdGFZKCksIGdy
YW51bGFyaXR5LCBTY3JvbGxEb3duLCBTY3JvbGxVcCwgc3RhcnROb2RlLCAmc3RvcEVsZW1lbnQs
IHJvdW5kZWRJbnRQb2ludCh3aGVlbEV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkpKSkKICAgICAg
ICAgd2hlZWxFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAKICAgICBpZiAoIW1fbGF0
Y2hlZFdoZWVsRXZlbnRFbGVtZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
CShyZXZpc2lvbiAxNjMxMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAiVGV4dEV2ZW50SW5w
dXRUeXBlLmgiCiAjaW5jbHVkZSAiVGV4dEdyYW51bGFyaXR5LmgiCiAjaW5jbHVkZSAiVGltZXIu
aCIKLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlICJXaGVlbEV2ZW50RGVsdGFUcmFj
a2VyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMzI5LDEzICszMjksNiBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbG9naWNhbFNjcm9sbE92ZXJmbG93KFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBOb2RlKiBzdGFydGluZ05vZGUgPSAwKTsKICAgICAKICAgICBib29s
IHNob3VsZFR1cm5WZXJ0aWNhbFRpY2tzSW50b0hvcml6b250YWwoY29uc3QgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0OwotICAgIHZvaWQgcmVjb3JkV2hl
ZWxFdmVudERlbHRhKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwotICAgIGVudW0gRG9taW5h
bnRTY3JvbGxHZXN0dXJlRGlyZWN0aW9uIHsKLSAgICAgICAgRG9taW5hbnRTY3JvbGxEaXJlY3Rp
b25Ob25lLAotICAgICAgICBEb21pbmFudFNjcm9sbERpcmVjdGlvblZlcnRpY2FsLAotICAgICAg
ICBEb21pbmFudFNjcm9sbERpcmVjdGlvbkhvcml6b250YWwKLSAgICB9OwotICAgIERvbWluYW50
U2Nyb2xsR2VzdHVyZURpcmVjdGlvbiBkb21pbmFudFNjcm9sbEdlc3R1cmVEaXJlY3Rpb24oKSBj
b25zdDsKICAgICAKICAgICBib29sIG1vdXNlRG93bk1heVN0YXJ0U2VsZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9tb3VzZURvd25NYXlTdGFydFNlbGVjdDsgfQogCkBAIC01MjEsOSArNTE0LDggQEAg
cHJpdmF0ZToKICAgICBkb3VibGUgbV9tb3VzZURvd25UaW1lc3RhbXA7CiAgICAgUGxhdGZvcm1N
b3VzZUV2ZW50IG1fbW91c2VEb3duOwogCi0gICAgRGVxdWU8RmxvYXRTaXplPiBtX3JlY2VudFdo
ZWVsRXZlbnREZWx0YXM7CisgICAgT3duUHRyPFdoZWVsRXZlbnREZWx0YVRyYWNrZXI+IG1fcmVj
ZW50V2hlZWxFdmVudERlbHRhVHJhY2tlcjsKICAgICBSZWZQdHI8RWxlbWVudD4gbV9sYXRjaGVk
V2hlZWxFdmVudEVsZW1lbnQ7Ci0gICAgYm9vbCBtX2luVHJhY2tpbmdTY3JvbGxHZXN0dXJlUGhh
c2U7CiAgICAgYm9vbCBtX3dpZGdldElzTGF0Y2hlZDsKIAogICAgIFJlZlB0cjxFbGVtZW50PiBt
X3ByZXZpb3VzV2hlZWxTY3JvbGxlZEVsZW1lbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCShyZXZpc2lvbiAxNjMxMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBGcmFtZVZpZXc6OkZyYW1l
VmlldyhGcmFtZSYgZnJhbWUpCiAKICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkgewogICAg
ICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVs
YXN0aWNpdHlBbGxvd2VkKTsKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxT
Y3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMpOworICAgICAgICBTY3Jv
bGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0
eUFsbG93ZWQpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9XaGVlbEV2
ZW50RGVsdGFUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1do
ZWVsRXZlbnREZWx0YVRyYWNrZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9XaGVlbEV2ZW50RGVsdGFUcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2hl
ZWxFdmVudERlbHRhVHJhY2tlci5oIgorCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2hlZWxF
dmVudERlbHRhVHJhY2tlcjo6V2hlZWxFdmVudERlbHRhVHJhY2tlcigpCisgICAgOiBtX2lzVHJh
Y2tpbmdEZWx0YXMoZmFsc2UpCit7Cit9CisKK1doZWVsRXZlbnREZWx0YVRyYWNrZXI6On5XaGVl
bEV2ZW50RGVsdGFUcmFja2VyKCkKK3sKK30KKwordm9pZCBXaGVlbEV2ZW50RGVsdGFUcmFja2Vy
OjpiZWdpblRyYWNraW5nRGVsdGFzKCkKK3sKKyAgICBtX3JlY2VudFdoZWVsRXZlbnREZWx0YXMu
Y2xlYXIoKTsKKyAgICBtX2lzVHJhY2tpbmdEZWx0YXMgPSB0cnVlOworfQorCit2b2lkIFdoZWVs
RXZlbnREZWx0YVRyYWNrZXI6OmVuZFRyYWNraW5nRGVsdGFzKCkKK3sKKyAgICBtX2lzVHJhY2tp
bmdEZWx0YXMgPSBmYWxzZTsKK30KKwordm9pZCBXaGVlbEV2ZW50RGVsdGFUcmFja2VyOjpyZWNv
cmRXaGVlbEV2ZW50RGVsdGEoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkKK3sKKyAg
ICBjb25zdCBzaXplX3QgcmVjZW50RXZlbnRDb3VudCA9IDM7CisgICAgCisgICAgbV9yZWNlbnRX
aGVlbEV2ZW50RGVsdGFzLmFwcGVuZChGbG9hdFNpemUoZXZlbnQuZGVsdGFYKCksIGV2ZW50LmRl
bHRhWSgpKSk7CisgICAgaWYgKG1fcmVjZW50V2hlZWxFdmVudERlbHRhcy5zaXplKCkgPiByZWNl
bnRFdmVudENvdW50KQorICAgICAgICBtX3JlY2VudFdoZWVsRXZlbnREZWx0YXMucmVtb3ZlRmly
c3QoKTsKK30KKworc3RhdGljIGJvb2wgZGVsdGFJc1ByZWRvbWluYW50bHlWZXJ0aWNhbChjb25z
dCBGbG9hdFNpemUmIGRlbHRhKQoreworICAgIHJldHVybiBmYWJzKGRlbHRhLmhlaWdodCgpKSA+
IGZhYnMoZGVsdGEud2lkdGgoKSk7Cit9CisKK0RvbWluYW50U2Nyb2xsR2VzdHVyZURpcmVjdGlv
biBXaGVlbEV2ZW50RGVsdGFUcmFja2VyOjpkb21pbmFudFNjcm9sbEdlc3R1cmVEaXJlY3Rpb24o
KSBjb25zdAoreworICAgIGJvb2wgYWxsVmVydGljYWwgPSBtX3JlY2VudFdoZWVsRXZlbnREZWx0
YXMuc2l6ZSgpOworICAgIGJvb2wgYWxsSG9yaXpvbnRhbCA9IG1fcmVjZW50V2hlZWxFdmVudERl
bHRhcy5zaXplKCk7CisKKyAgICBEZXF1ZTxGbG9hdFNpemU+Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3JlY2VudFdoZWVsRXZlbnREZWx0YXMuZW5kKCk7CisgICAgZm9yIChEZXF1ZTxGbG9hdFNp
emU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVjZW50V2hlZWxFdmVudERlbHRhcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgYm9vbCBpc1ZlcnRpY2FsID0gZGVsdGFJc1By
ZWRvbWluYW50bHlWZXJ0aWNhbCgqaXQpOworICAgICAgICBhbGxWZXJ0aWNhbCAmPSBpc1ZlcnRp
Y2FsOworICAgICAgICBhbGxIb3Jpem9udGFsICY9ICFpc1ZlcnRpY2FsOworICAgIH0KKyAgICAK
KyAgICBpZiAoYWxsVmVydGljYWwpCisgICAgICAgIHJldHVybiBEb21pbmFudFNjcm9sbEdlc3R1
cmVEaXJlY3Rpb246OlZlcnRpY2FsOworCisgICAgaWYgKGFsbEhvcml6b250YWwpCisgICAgICAg
IHJldHVybiBEb21pbmFudFNjcm9sbEdlc3R1cmVEaXJlY3Rpb246Okhvcml6b250YWw7CisgICAg
CisgICAgcmV0dXJuIERvbWluYW50U2Nyb2xsR2VzdHVyZURpcmVjdGlvbjo6Tm9uZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9XaGVlbEV2
ZW50RGVsdGFUcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9XaGVl
bEV2ZW50RGVsdGFUcmFja2VyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L1doZWVsRXZlbnREZWx0YVRyYWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworCisjaWZuZGVmIFdoZWVsRXZlbnREZWx0YVRyYWNrZXJfaAorI2RlZmlu
ZSBXaGVlbEV2ZW50RGVsdGFUcmFja2VyX2gKKworI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIFBsYXRmb3JtV2hl
ZWxFdmVudDsKKworZW51bSBjbGFzcyBEb21pbmFudFNjcm9sbEdlc3R1cmVEaXJlY3Rpb24gewor
ICAgIE5vbmUsCisgICAgVmVydGljYWwsCisgICAgSG9yaXpvbnRhbAorfTsKKworY2xhc3MgV2hl
ZWxFdmVudERlbHRhVHJhY2tlciB7CitwdWJsaWM6CisgICAgV2hlZWxFdmVudERlbHRhVHJhY2tl
cigpOworICAgIHZpcnR1YWwgfldoZWVsRXZlbnREZWx0YVRyYWNrZXIoKTsKKworICAgIHZvaWQg
YmVnaW5UcmFja2luZ0RlbHRhcygpOworICAgIHZvaWQgZW5kVHJhY2tpbmdEZWx0YXMoKTsKKwor
ICAgIGJvb2wgaXNUcmFja2luZ0RlbHRhcygpIGNvbnN0IHsgcmV0dXJuIG1faXNUcmFja2luZ0Rl
bHRhczsgfQorCisgICAgdm9pZCByZWNvcmRXaGVlbEV2ZW50RGVsdGEoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50Jik7CisgICAgRG9taW5hbnRTY3JvbGxHZXN0dXJlRGlyZWN0aW9uIGRvbWluYW50
U2Nyb2xsR2VzdHVyZURpcmVjdGlvbigpIGNvbnN0OworCitwcml2YXRlOgorICAgIERlcXVlPEZs
b2F0U2l6ZT4gbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFzOworICAgIGJvb2wgbV9pc1RyYWNraW5n
RGVsdGFzOworCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBXaGVl
bEV2ZW50RGVsdGFUcmFja2VyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtV2hlZWxFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtV2hlZWxFdmVudC5oCShyZXZpc2lvbiAxNjMxMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzEx
OSwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gY29weTsKICAg
ICAgICAgfQogCisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudCBjb3B5SWdub3JpbmdIb3Jpem9u
dGFsRGVsdGEoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBQbGF0Zm9ybVdoZWVsRXZl
bnQgY29weSA9ICp0aGlzOworICAgICAgICAgICAgY29weS5tX2RlbHRhWCA9IDA7CisgICAgICAg
ICAgICByZXR1cm4gY29weTsKKyAgICAgICAgfQorCisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVu
dCBjb3B5SWdub3JpbmdWZXJ0aWNhbERlbHRhKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgUGxhdGZvcm1XaGVlbEV2ZW50IGNvcHkgPSAqdGhpczsKKyAgICAgICAgICAgIGNvcHkubV9k
ZWx0YVkgPSAwOworICAgICAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgICAgIH0KKwogICAgICAg
ICBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9
IC8vIFBsYXRmb3JtV2luZG93IGNvb3JkaW5hdGVzLgogICAgICAgICBjb25zdCBJbnRQb2ludCYg
Z2xvYmFsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbFBvc2l0aW9uOyB9IC8vIFNj
cmVlbiBjb29yZGluYXRlcy4KIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMTMxKQorKysg
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTQtMDEtMzAgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFNp
ZGV3YXlzICd3b2JibGUnIHdoZW4gc2Nyb2xsaW5nIHdpdGggdHJhY2twYWQgb24gTWF2ZXJpY2tz
DQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NTIx
DQorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctDQorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MTQxMzczMDY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgU3RhcnQgdXNpbmcgV2ViQ29yZTo6V2hlZWxFdmVudERlbHRhVHJhY2tlciB0byBmaWx0ZXIg
ZXZlbnRzLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpFdmVudERpc3BhdGNoZXI6OkV2ZW50RGlzcGF0Y2hlcik6Cisg
ICAgICAgIChXZWJLaXQ6OkV2ZW50RGlzcGF0Y2hlcjo6d2hlZWxFdmVudCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oOgorCiAyMDE0LTAxLTMwICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBJREI6IEltcGxlbWVudCBJ
REJPYmplY3RTdG9yZS5jb3VudCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAkocmV2aXNpb24gMTYzMTMxKQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNo
ZXI+IEV2ZW50RGlzcGF0YwogCiBFdmVudERpc3BhdGNoZXI6OkV2ZW50RGlzcGF0Y2hlcigpCiAg
ICAgOiBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LkV2ZW50RGlz
cGF0Y2hlciIpKQorICAgICwgbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFUcmFja2VyKGFkb3B0UHRy
KG5ldyBXaGVlbEV2ZW50RGVsdGFUcmFja2VyKSkKIHsKIH0KIApAQCAtODgsMTEgKzg5LDQwIEBA
IHZvaWQgRXZlbnREaXNwYXRjaGVyOjppbml0aWFsaXplQ29ubmVjdGkKIAogdm9pZCBFdmVudERp
c3BhdGNoZXI6OndoZWVsRXZlbnQodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJXaGVlbEV2ZW50
JiB3aGVlbEV2ZW50LCBib29sIGNhblJ1YmJlckJhbmRBdExlZnQsIGJvb2wgY2FuUnViYmVyQmFu
ZEF0UmlnaHQsIGJvb2wgY2FuUnViYmVyQmFuZEF0VG9wLCBib29sIGNhblJ1YmJlckJhbmRBdEJv
dHRvbSkKIHsKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgcGxhdGZvcm1XaGVlbEV2ZW50ID0gcGxh
dGZvcm0od2hlZWxFdmVudCk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgc3dpdGNoICh3aGVl
bEV2ZW50LnBoYXNlKCkpIHsKKyAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW46
CisgICAgICAgIG1fcmVjZW50V2hlZWxFdmVudERlbHRhVHJhY2tlci0+YmVnaW5UcmFja2luZ0Rl
bHRhcygpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
RW5kZWQ6CisgICAgICAgIG1fcmVjZW50V2hlZWxFdmVudERlbHRhVHJhY2tlci0+ZW5kVHJhY2tp
bmdEZWx0YXMoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgaWYgKG1fcmVjZW50V2hlZWxFdmVudERlbHRhVHJhY2tlci0+aXNUcmFj
a2luZ0RlbHRhcygpKSB7CisgICAgICAgIG1fcmVjZW50V2hlZWxFdmVudERlbHRhVHJhY2tlci0+
cmVjb3JkV2hlZWxFdmVudERlbHRhKHBsYXRmb3JtV2hlZWxFdmVudCk7CisKKyAgICAgICAgRG9t
aW5hbnRTY3JvbGxHZXN0dXJlRGlyZWN0aW9uIGRvbWluYW50RGlyZWN0aW9uID0gRG9taW5hbnRT
Y3JvbGxHZXN0dXJlRGlyZWN0aW9uOjpOb25lOworICAgICAgICBkb21pbmFudERpcmVjdGlvbiA9
IG1fcmVjZW50V2hlZWxFdmVudERlbHRhVHJhY2tlci0+ZG9taW5hbnRTY3JvbGxHZXN0dXJlRGly
ZWN0aW9uKCk7CisKKyAgICAgICAgLy8gVGhpcyBpcyBhIGxpdHRsZSBjcmF6eSBiZWNhdXNlIGl0
IGlzIHdvcmtpbmcgYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS8xNDc1ODYxNT4sIHdoaWNoIGlzIGEg
YnVnIGluIGEKKyAgICAgICAgLy8gbG93ZXItbGV2ZWwgY29tcG9uZW50LiBXaGlsZSB0aGF0IGJ1
ZyBpcyBzdGlsbCB1bnJlc29sdmVkLCB0aGlzIHdpbGwgaGVscCB0byByZWR1Y2Ugc29tZSBvZiB0
aGUgbm9pc2UKKyAgICAgICAgLy8gd2UgYXJlIHNlZWluZyB3aXRoIGxvdHMgb2Ygc21hbGwgaG9y
aXpvbnRhbCBkZWx0YXMgd2hlbiBhIHVzZXIgaXMgc2Nyb2xsaW5nIGluIHByaW1hcmlseSB2ZXJ0
aWNhbAorICAgICAgICAvLyBkaXJlY3Rpb24gYW5kIHZpY2UgdmVyc2EuCisgICAgICAgIGlmIChk
b21pbmFudERpcmVjdGlvbiA9PSBEb21pbmFudFNjcm9sbEdlc3R1cmVEaXJlY3Rpb246OlZlcnRp
Y2FsICYmIHBsYXRmb3JtV2hlZWxFdmVudC5kZWx0YVgoKSkKKyAgICAgICAgICAgIHBsYXRmb3Jt
V2hlZWxFdmVudCA9IHBsYXRmb3JtV2hlZWxFdmVudC5jb3B5SWdub3JpbmdIb3Jpem9udGFsRGVs
dGEoKTsKKyAgICAgICAgZWxzZSBpZiAoZG9taW5hbnREaXJlY3Rpb24gPT0gRG9taW5hbnRTY3Jv
bGxHZXN0dXJlRGlyZWN0aW9uOjpIb3Jpem9udGFsICYmIHBsYXRmb3JtV2hlZWxFdmVudC5kZWx0
YVkoKSkKKyAgICAgICAgICAgIHBsYXRmb3JtV2hlZWxFdmVudCA9IHBsYXRmb3JtV2hlZWxFdmVu
dC5jb3B5SWdub3JpbmdWZXJ0aWNhbERlbHRhKCk7CisgICAgfQorI2VuZGlmCisKICNpZiBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKQogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Njcm9sbGluZ1Ry
ZWVzTXV0ZXgpOwogICAgIGlmIChUaHJlYWRlZFNjcm9sbGluZ1RyZWUqIHNjcm9sbGluZ1RyZWUg
PSBtX3Njcm9sbGluZ1RyZWVzLmdldChwYWdlSUQpKSB7Ci0gICAgICAgIFBsYXRmb3JtV2hlZWxF
dmVudCBwbGF0Zm9ybVdoZWVsRXZlbnQgPSBwbGF0Zm9ybSh3aGVlbEV2ZW50KTsKLQogICAgICAg
ICAvLyBGSVhNRTogSXQncyBwcmV0dHkgaG9ycmlibGUgdGhhdCB3ZSdyZSB1cGRhdGluZyB0aGUg
YmFjay9mb3J3YXJkIHN0YXRlIGhlcmUuCiAgICAgICAgIC8vIFdlYkNvcmUgc2hvdWxkIGFsd2F5
cyBrbm93IHRoZSBjdXJyZW50IHN0YXRlIGFuZCBrbm93IHdoZW4gaXQgY2hhbmdlcyBzbyB0aGUK
ICAgICAgICAgLy8gc2Nyb2xsaW5nIHRyZWUgY2FuIGJlIG5vdGlmaWVkLgpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuaAko
cmV2aXNpb24gMTYzMTMxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2
ZW50RGlzcGF0Y2hlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAjZGVmaW5l
IEV2ZW50RGlzcGF0Y2hlcl9oCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisKKyNpbmNsdWRl
IDxXZWJDb3JlL1doZWVsRXZlbnREZWx0YVRyYWNrZXIuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KQEAgLTc2LDYgKzc4LDcgQEAgcHJpdmF0ZToKICAgICBNdXRleCBtX3Njcm9sbGluZ1RyZWVz
TXV0ZXg7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYkNvcmU6OlRocmVhZGVkU2Ny
b2xsaW5nVHJlZT4+IG1fc2Nyb2xsaW5nVHJlZXM7CiAjZW5kaWYKKyAgICBPd25QdHI8V2ViQ29y
ZTo6V2hlZWxFdmVudERlbHRhVHJhY2tlcj4gbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFUcmFja2Vy
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="246769"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>