<?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>129024</bug_id>
          
          <creation_ts>2014-02-18 20:57:46 -0800</creation_ts>
          <short_desc>Changing selection shouldn&apos;t synchronously update editor UI components</short_desc>
          <delta_ts>2014-02-21 00:10:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>127832</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>g.czajkowski</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>982225</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-02-18 20:57:46 -0800</bug_when>
    <thetext>Right now, editor UI controller such as spellchecker, alternative text controller, and delete button controller
are all updated synchronously upon selection change.

We shouldn&apos;t do that at least for programatic selection changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982238</commentid>
    <comment_count>1</comment_count>
      <attachid>224592</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-02-18 21:50:56 -0800</bug_when>
    <thetext>Created attachment 224592
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982246</commentid>
    <comment_count>2</comment_count>
      <attachid>224595</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-02-18 22:37:00 -0800</bug_when>
    <thetext>Created attachment 224595
Fixes Windows build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982458</commentid>
    <comment_count>3</comment_count>
      <attachid>224595</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-02-19 11:18:09 -0800</bug_when>
    <thetext>Comment on attachment 224595
Fixes Windows build

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

A couple of minor nits to consider, but r=me.

&gt; Source/WebCore/testing/Internals.cpp:1318
&gt; +    // FIXME: We shouldn&apos;t pollute the id namespace with this name.

Should we file a bug to track this FIXME?

&gt; LayoutTests/platform/mac/editing/deleting/id-in-deletebutton.html:14
&gt; +    shouldBeNonNull(&apos;internals.findEditingDeleteButton(); document.getElementById(&quot;WebKit-Editing-Delete-Button&quot;)&apos;);

I don&apos;t feel like this is clearer than the original code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982596</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-02-19 16:10:01 -0800</bug_when>
    <thetext>Committed r164401: &lt;http://trac.webkit.org/changeset/164401&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982599</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-02-19 16:12:12 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 224595 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=224595&amp;action=review
&gt; 
&gt; A couple of minor nits to consider, but r=me.
&gt; 
&gt; &gt; Source/WebCore/testing/Internals.cpp:1318
&gt; &gt; +    // FIXME: We shouldn&apos;t pollute the id namespace with this name.
&gt; 
&gt; Should we file a bug to track this FIXME?

Filed https://bugs.webkit.org/show_bug.cgi?id=129072.

&gt; 
&gt; &gt; LayoutTests/platform/mac/editing/deleting/id-in-deletebutton.html:14
&gt; &gt; +    shouldBeNonNull(&apos;internals.findEditingDeleteButton(); document.getElementById(&quot;WebKit-Editing-Delete-Button&quot;)&apos;);
&gt; 
&gt; I don&apos;t feel like this is clearer than the original code.

This is to make expected result more self explanatory.  The old expected result didn&apos;t tell us how we were finding the delete button controller at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982618</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-02-19 17:12:03 -0800</bug_when>
    <thetext>Removed a bogus assertion in http://trac.webkit.org/changeset/164404.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983133</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-02-21 00:10:20 -0800</bug_when>
    <thetext>Looks like this had ~1.5% performance impact on DoYouEvenBench:
https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22mac-mavericks%22%2C%22DoYouEvenBench%2FFull%3ATime%3ATotal%22%5D%5D</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224592</attachid>
            <date>2014-02-18 21:50:56 -0800</date>
            <delta_ts>2014-02-18 22:36:58 -0800</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-129024-20140218215118.patch</filename>
            <type>text/plain</type>
            <size>28397</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NDM1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE0LTAyLTE4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIENoYW5naW5nIHNlbGVjdGlvbiBz
aG91bGRuJ3Qgc3luY2hyb25vdXNseSB1cGRhdGUgZWRpdG9yIFVJIGNvbXBvbmVudHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTAyNAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgdXBkYXRlcyB0
byBzcGVsbGNoZWNrZXIsIGFsdGVybmF0aXZlIHRleHQgY29udHJvbGxlciAoY29ycmVjdGlvbiBw
YW5lKSwgYW5kIGRlbGV0ZSBidXR0b24gY29udHJvbGxlcgorICAgICAgICBhc3luY2hyb25vdXMg
Zm9yIHByb2dyYW1tYXRpY2FsbHkgdHJpZ2dlcmVkIHNlbGVjdGlvbiBjaGFuZ2VzLgorCisgICAg
ICAgIFdlIGNvbnRpbnVlIHRvIHVwZGF0ZSB0aGVpciBzdGF0ZXMgc3luY2hyb25vdXNseSBpbW1l
ZGlhdGVseSBhZnRlciB3ZSBoYXZlIGFwcGxpZWQsIHVuYXBwbGllZCwgb3IgcmVhcHBsaWVkCisg
ICAgICAgIGVkaXRpbmcgY29tbWFuZHMgdG8ga2VlcCBzdGF0ZXMgaW4gc3BlbGwgY2hlY2tlciBh
bmQgYWx0ZXJuYXRpdmUgdGV4dCBjb250cm9sbGVyIGNvbnNpc3RlbnQuIFdlIHNob3VsZCBiZQor
ICAgICAgICBhYmxlIHRvIG1ha2UgdGhlbSBhc3luY2hyb25vdXMgYXMgd2VsbCBpbiB0aGUgZnV0
dXJlIGJ1dCB0aGF0IHNob3VsZCBiZSBkb25lIGluIGEgc2VwYXJhdGUgcGF0Y2guCisKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6IFRoaXMgZnVuY3Rpb24gdXNlZCB0byBlbnVt
ZXJhdGUgYWxsIGRvY3VtZW50CisgICAgICAgIG1ha2VycyBhbmQgY2FsbCByZXNwb25kVG9NYXJr
ZXJBdEVuZE9mV29yZCBvbiBlYWNoIG9uZSBvZiB0aGVtIG9ubHkgdG8gZXhpdCBlYXJseSB3aGVu
IFNldFNlbGVjdGlvbk9wdGlvbnMKKyAgICAgICAgaGFkIERpY3RhdGlvblRyaWdnZXJlZC4gVGhp
cyBjb25kaXRpb24gaXMgbm93IGNoZWNrZWQgaW4gRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2Vs
ZWN0aW9uIHRvIGF2b2lkIGFsbCB0aGUKKyAgICAgICAgdW5uZWNlc3Nhcnkgd29yayBhbmQgcmVt
b3ZlIHRoZSBkZXBlbmRlbmN5IG9uIFNldFNlbGVjdGlvbk9wdGlvbnMuCisgICAgICAgIChXZWJD
b3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29y
ZCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5o
OgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjphcHBsaWVkRWRpdGluZyk6IENhbGxzIHVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQg
YmVmb3JlIGNhbGxpbmcgcmVzcG9uZFRvQXBwbGllZEVkaXRpbmcKKyAgICAgICAgb24gdGhlIGFs
dGVybmF0aXZlIHRleHQgY29udHJvbGxlci4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5h
cHBsaWVkRWRpdGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZWFwcGxp
ZWRFZGl0aW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkVkaXRvcik6IElu
aXRpYWxpemVzIG5ld2x5IGFkZGVkIGJvb2xlYW5zLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKTogQ29udGludWUgdG8gY2FsbCByZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uIChmb3IgQVBJIGNvbnNpc3RlbmN5KQorICAgICAgICBhbmQgc2V0U3Rh
cnROZXdLaWxsUmluZ1NlcXVlbmNlIGJ1dCBkZWZlciB0aGUgImVkaXRvciBVSSB1cGRhdGVzIiB0
byBzcGVsbGNoZWNrZXIsIGFsdGVybmF0aXZlIHRleHQgY29udHJvbGxlcgorICAgICAgICBhbmQg
ZGVsZXRlIGJ1dHRvbiBjb250cm9sbGVyIGJ5IGZpcmluZyBhIG5ld2x5IGFkZGVkIG9uZSBzaG90
IHRpbWVyLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVFZGl0b3JVSU5vd0lmU2No
ZWR1bGVkKTogU3luY2hyb25vdXNseSB1cGRhdGUgdGhlIHBlbmRpbmcgZWRpdG9yIFVJIHVwZGF0
ZXMuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCk6
IEV4dHJhY3RlZCBmcm9tIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24uCisgICAgICAgICogZWRp
dGluZy9FZGl0b3IuaDoKKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkludGVybmFsczo6bWFya2VyQ291bnRGb3JOb2RlKTogQ2FsbHMgdXBkYXRl
RWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpIHRvIHVwZGF0ZSBkb2N1bWVudCBtYXJrZXJzLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjptYXJrZXJBdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjp1cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmZpbmRFZGl0aW5nRGVsZXRlQnV0dG9uKTogQWRk
ZWQuIFVwZGF0ZXMgZGVsZXRlIGJ1dHRvbiBjb250cm9sbGVyIHN5bmNocm9ub3VzbHkuCisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6Omhhc1NwZWxsaW5nTWFya2VyKTogQ2FsbHMgdXBkYXRl
RWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpIHRvIHVwZGF0ZSBkb2N1bWVudCBtYXJrZXJzLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpoYXNBdXRvY29ycmVjdGVkTWFya2VyKTogRGl0dG8u
CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVy
bmFscy5pZGw6CisKIDIwMTQtMDItMTcgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hA
YXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBmYXN0IG1hcHBpbmcgZnJvbSBTdHJpbmdJbXBsIHRv
IEpTU3RyaW5nCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTY0MzMwKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTExMTYsNiAr
MTExNiw3IEBAIF9fWk43V2ViQ29yZTZFZGl0b3IyNmluY3JlYXNlU2VsZWN0aW9uTGkKIF9fWk43
V2ViQ29yZTZFZGl0b3IyNnRvZ2dsZU92ZXJ3cml0ZU1vZGVFbmFibGVkRXYKIF9fWk43V2ViQ29y
ZTZFZGl0b3IyNndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkRVJOU18xMFBhc3RlYm9hcmRFCiBf
X1pON1dlYkNvcmU2RWRpdG9yMjhyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50RU4zV1RGMTBQ
YXNzUmVmUHRySU5TXzE2RG9jdW1lbnRGcmFnbWVudEVFRWJiYgorX19aTjdXZWJDb3JlNkVkaXRv
cjI4dXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjlj
YW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjljYW5J
bmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjloYW5kbGVB
bHRlcm5hdGl2ZVRleHRVSVJlc3VsdEVSS04zV1RGNlN0cmluZ0UKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMTY0MzMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQwLDcgKzQ0MCw3IEBAIEZsb2F0UmVj
dCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb28KICAgICByZXR1cm4gdmlldy0+Y29udGVu
dHNUb1Jvb3RWaWV3KEludFJlY3QoYm91bmRpbmdSZWN0KSk7CiB9ICAgICAgICAKIAotdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVj
dGlvbk9wdGlvbnMgb3B0aW9ucykKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rp
b24pCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIC8vIFdoZW4gdXNlciBtb3ZlcyBjYXJldCB0byB0
aGUgZW5kIG9mIGF1dG9jb3JyZWN0ZWQgd29yZCBhbmQgcGF1c2VzLCB3ZSBzaG93IHRoZSBwYW5l
bApAQCAtNDczLDcgKzQ3Myw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVz
cG9uZFQKICAgICAgICAgaWYgKCFtYXJrZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBpZiAocmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoKm1hcmtlciwgcG9zaXRpb24sIG9w
dGlvbnMpKQorICAgICAgICBpZiAocmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoKm1hcmtlciwg
cG9zaXRpb24pKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtNjI1LDEwICs2MjUs
OCBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnNob3VsZFN0CiAgICAgcmV0dXJu
ICgoKG1hcmtlci50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50ICYmICFtYXJr
ZXIuZGVzY3JpcHRpb24oKS5pc051bGwoKSkgfHwgbWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1h
cmtlcjo6U3BlbGxpbmcgfHwgbWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6RGljdGF0
aW9uQWx0ZXJuYXRpdmVzKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQoKSkg
PT0gZW5kT2Zmc2V0KTsKIH0KIAotYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNw
b25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyLCBjb25z
dCBQb3NpdGlvbiYgZW5kT2ZXb3JkUG9zaXRpb24sIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rp
b25PcHRpb25zIG9wdGlvbnMpCitib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3Bv
bmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0
IFBvc2l0aW9uJiBlbmRPZldvcmRQb3NpdGlvbikKIHsKLSAgICBpZiAob3B0aW9ucyAmIEZyYW1l
U2VsZWN0aW9uOjpEaWN0YXRpb25UcmlnZ2VyZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpZiAoIXNob3VsZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZldvcmRQb3NpdGlvbi5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBOb2RlKiBu
b2RlID0gZW5kT2ZXb3JkUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgJKHJldmlz
aW9uIDE2NDMzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgcHVibGljOgogICAg
IHZvaWQgcmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9u
KSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShjb3JyZWN0ZWQpOyBVTlVTRURfUEFSQU0o
Y29ycmVjdGlvbik7IH0pCiAgICAgdm9pZCByZXNwb25kVG9BcHBsaWVkRWRpdGluZyhDb21wb3Np
dGVFZGl0Q29tbWFuZCopIFVOTEVTU19FTkFCTEVEKHsgfSkKICAgICB2b2lkIHJlc3BvbmRUb1Vu
YXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbiopIFVOTEVTU19FTkFCTEVEKHsg
fSkKLSAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgb2xkU2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucykg
VU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ob2xkU2VsZWN0aW9uKTsgfSkKKyAgICB2b2lk
IHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2Vs
ZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShvbGRTZWxlY3Rpb24pOyB9KQog
CiAgICAgdm9pZCBzdG9wUGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
b2xkU2VsZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShvbGRTZWxlY3Rpb24p
OyB9KQogICAgIHZvaWQgYXBwbHlQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0o
c2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOyB9KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHByaXZhdGU6CiAg
ICAgU3RyaW5nIG1hcmtlckRlc2NyaXB0aW9uRm9yQXBwbGllZEFsdGVybmF0aXZlVGV4dChBbHRl
cm5hdGl2ZVRleHRUeXBlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSk7CiAKICAgICBib29s
IHNob3VsZFN0YXJ0VGltZXJGb3IoY29uc3QgRG9jdW1lbnRNYXJrZXImLCBpbnQgZW5kT2Zmc2V0
KSBjb25zdDsKLSAgICBib29sIHJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3Vt
ZW50TWFya2VyJiwgY29uc3QgUG9zaXRpb24mIGVuZE9mV29yZFBvc2l0aW9uLCBGcmFtZVNlbGVj
dGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyk7CisgICAgYm9vbCByZXNwb25kVG9NYXJrZXJBdEVu
ZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYsIGNvbnN0IFBvc2l0aW9uJiBlbmRPZldvcmRQ
b3NpdGlvbik7CiAKICAgICBBbHRlcm5hdGl2ZVRleHRDbGllbnQqIGFsdGVybmF0aXZlVGV4dENs
aWVudCgpOwogICAgIEVkaXRvckNsaWVudCogZWRpdG9yQ2xpZW50KCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAxNjQzMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNjYsOCArMTA2Niw2IEBAIHZv
aWQgRWRpdG9yOjphcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEMKICAgICBBU1NFUlQoY29tcG9z
aXRpb24pOwogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNtZC0+ZW5kaW5nU2Vs
ZWN0aW9uKCkpOwogCi0gICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9B
cHBsaWVkRWRpdGluZyhjbWQuZ2V0KCkpOwotCiAgICAgbm90aWZ5VGV4dEZyb21Db250cm9scyhj
b21wb3NpdGlvbi0+c3RhcnRpbmdSb290RWRpdGFibGVFbGVtZW50KCksIGNvbXBvc2l0aW9uLT5l
bmRpbmdSb290RWRpdGFibGVFbGVtZW50KCkpOwogCiAgICAgLy8gRG9uJ3QgY2xlYXIgdGhlIHR5
cGluZyBzdHlsZSB3aXRoIHRoaXMgc2VsZWN0aW9uIGNoYW5nZS4gIFdlIGRvIHRob3NlIHRoaW5n
cyBlbHNld2hlcmUgaWYgbmVjZXNzYXJ5LgpAQCAtMTA3NSw2ICsxMDczLDEwIEBAIHZvaWQgRWRp
dG9yOjphcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEMKICAgICBjaGFuZ2VTZWxlY3Rpb25BZnRl
ckNvbW1hbmQobmV3U2VsZWN0aW9uLCBvcHRpb25zKTsKICAgICBkaXNwYXRjaEVkaXRhYmxlQ29u
dGVudENoYW5nZWRFdmVudHMoY29tcG9zaXRpb24tPnN0YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVu
dCgpLCBjb21wb3NpdGlvbi0+ZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKIAorICAgIHVw
ZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQoKTsKKyAgICAKKyAgICBtX2FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXItPnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKGNtZC5nZXQoKSk7CisKICAgICBp
ZiAoIWNtZC0+cHJlc2VydmVzVHlwaW5nU3R5bGUoKSkKICAgICAgICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAKQEAgLTExMDIsNiArMTEwNCw4IEBAIHZvaWQgRWRp
dG9yOjp1bmFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHIKICAgICBjaGFuZ2VTZWxlY3Rpb25BZnRl
ckNvbW1hbmQobmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlv
bk9wdGlvbnMoKSk7CiAgICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRzKGNt
ZC0+c3RhcnRpbmdSb290RWRpdGFibGVFbGVtZW50KCksIGNtZC0+ZW5kaW5nUm9vdEVkaXRhYmxl
RWxlbWVudCgpKTsKIAorICAgIHVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQoKTsKKwogICAg
IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhj
bWQuZ2V0KCkpOwogCiAgICAgbV9sYXN0RWRpdENvbW1hbmQgPSAwOwpAQCAtMTExOSw2ICsxMTIz
LDggQEAgdm9pZCBFZGl0b3I6OnJlYXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cgogICAgIFZpc2li
bGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNtZC0+ZW5kaW5nU2VsZWN0aW9uKCkpOwogICAgIGNo
YW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpk
ZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpKTsKICAgICBkaXNwYXRjaEVkaXRhYmxlQ29udGVu
dENoYW5nZWRFdmVudHMoY21kLT5zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSwgY21kLT5l
bmRpbmdSb290RWRpdGFibGVFbGVtZW50KCkpOworICAgIAorICAgIHVwZGF0ZUVkaXRvclVJTm93
SWZTY2hlZHVsZWQoKTsKIAogICAgIG1fbGFzdEVkaXRDb21tYW5kID0gMDsKICAgICBpZiAoY2xp
ZW50KCkpCkBAIC0xMTQxLDYgKzExNDcsOSBAQCBFZGl0b3I6OkVkaXRvcihGcmFtZSYgZnJhbWUp
CiAgICAgLCBtX2FyZU1hcmtlZFRleHRNYXRjaGVzSGlnaGxpZ2h0ZWQoZmFsc2UpCiAgICAgLCBt
X2RlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3IoRWRpdG9yUGFyYWdyYXBoU2VwYXJhdG9ySXNEaXYp
CiAgICAgLCBtX292ZXJ3cml0ZU1vZGVFbmFibGVkKGZhbHNlKQorICAgICwgbV9lZGl0b3JVSVVw
ZGF0ZVRpbWVyKHRoaXMsICZFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCkKKyAgICAs
IG1fZWRpdG9yVUlVcGRhdGVUaW1lclNob3VsZENoZWNrU3BlbGxpbmdBbmRHcmFtbWFyKGZhbHNl
KQorICAgICwgbV9lZGl0b3JVSVVwZGF0ZVRpbWVyV2FzVHJpZ2dlcmVkQnlEaWN0YXRpb24oZmFs
c2UpCiB7CiB9CiAKQEAgLTMyOTQsNyArMzMwMyw3IEBAIHZvaWQgRWRpdG9yOjpzZXRNYXJrZWRU
ZXh0TWF0Y2hlc0FyZUhpZ2gKICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZXBhaW50TWFya2Vy
cyhEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKIH0KIAotdm9pZCBFZGl0b3I6OnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBG
cmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQordm9pZCBFZGl0b3I6
OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIEZyYW1l
U2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMpCiB7CiAjaWYgUExBVEZPUk0o
SU9TKQogICAgIC8vIEZJWE1FOiBTaG91bGQgc3VwcHJlc3Mgc2VsZWN0aW9uIGNoYW5nZSBub3Rp
ZmljYXRpb25zIGR1cmluZyBhIGNvbXBvc2l0aW9uIGNoYW5nZSA8aHR0cHM6Ly93ZWJraXQub3Jn
L2IvMzg4MzA+IApAQCAtMzMwMiw5ICszMzExLDM0IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKGMKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICBtX2FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXItPnN0b3BQZW5kaW5nQ29ycmVjdGlvbihvbGRTZWxlY3Rpb24p
OworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRT
ZWxlY3Rpb24oJm1fZnJhbWUpOworICAgIHNldFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZSh0cnVl
KTsKKworICAgIGlmIChtX2VkaXRvclVJVXBkYXRlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gRG9uJ3QgY2hlY2sgc3BlbGxpbmcgYW5kIGdyYW1tYXIgaWYgdGhl
IGNoYW5nZSBvZiBzZWxlY3Rpb24gaXMgdHJpZ2dlcmVkIGJ5IHNwZWxsaW5nIGNvcnJlY3Rpb24g
aXRzZWxmLgorICAgIG1fZWRpdG9yVUlVcGRhdGVUaW1lclNob3VsZENoZWNrU3BlbGxpbmdBbmRH
cmFtbWFyID0gb3B0aW9ucyAmIEZyYW1lU2VsZWN0aW9uOjpDbG9zZVR5cGluZworICAgICAgICAm
JiAhKG9wdGlvbnMgJiBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsK
KyAgICBtX2VkaXRvclVJVXBkYXRlVGltZXJXYXNUcmlnZ2VyZWRCeURpY3RhdGlvbiA9IG9wdGlv
bnMgJiBGcmFtZVNlbGVjdGlvbjo6RGljdGF0aW9uVHJpZ2dlcmVkOworICAgIG1fZWRpdG9yVUlV
cGRhdGVUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgRWRpdG9yOjp1cGRhdGVFZGl0
b3JVSU5vd0lmU2NoZWR1bGVkKCkKK3sKKyAgICBpZiAoIW1fZWRpdG9yVUlVcGRhdGVUaW1lci5p
c0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9lZGl0b3JVSVVwZGF0ZVRpbWVyLnN0
b3AoKTsKKyAgICBlZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQobV9lZGl0b3JVSVVwZGF0ZVRpbWVy
KTsKK30KKwordm9pZCBFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZChUaW1lcjxFZGl0
b3I+JikKK3sKKyAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IG1fb2xkU2VsZWN0
aW9uRm9yRWRpdG9yVUlVcGRhdGU7CiAKLSAgICBib29sIGNsb3NlVHlwaW5nID0gb3B0aW9ucyAm
IEZyYW1lU2VsZWN0aW9uOjpDbG9zZVR5cGluZzsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXItPnN0b3BQZW5kaW5nQ29ycmVjdGlvbihvbGRTZWxlY3Rpb24pOworICAgIAogICAgIGJv
b2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSB0aGlzLT5pc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCgpOwogICAgIGJvb2wgaXNDb250aW51b3VzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkICYmIGlzR3JhbW1h
ckNoZWNraW5nRW5hYmxlZCgpOwogICAgIGlmIChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCkgewpAQCAtMzMzMSwxMyArMzM2NSwxMCBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hh
bmdlZFNlbGVjdGlvbihjCiAgICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRTZW50ZW5jZSA9IFZp
c2libGVTZWxlY3Rpb24oc3RhcnRPZlNlbnRlbmNlKG5ld1N0YXJ0KSwgZW5kT2ZTZW50ZW5jZShu
ZXdTdGFydCkpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gRG9uJ3QgY2hlY2sgc3BlbGxpbmcg
YW5kIGdyYW1tYXIgaWYgdGhlIGNoYW5nZSBvZiBzZWxlY3Rpb24gaXMgdHJpZ2dlcmVkIGJ5IHNw
ZWxsaW5nIGNvcnJlY3Rpb24gaXRzZWxmLgotICAgICAgICBib29sIHNob3VsZENoZWNrU3BlbGxp
bmdBbmRHcmFtbWFyID0gIShvcHRpb25zICYgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlv
blRyaWdnZXJlZCk7Ci0KICAgICAgICAgLy8gV2hlbiB0eXBpbmcgd2UgY2hlY2sgc3BlbGxpbmcg
ZWxzZXdoZXJlLCBzbyBkb24ndCByZWRvIGl0IGhlcmUuCiAgICAgICAgIC8vIElmIHRoaXMgaXMg
YSBjaGFuZ2UgaW4gc2VsZWN0aW9uIHJlc3VsdGluZyBmcm9tIGEgZGVsZXRlIG9wZXJhdGlvbiwK
ICAgICAgICAgLy8gb2xkU2VsZWN0aW9uIG1heSBubyBsb25nZXIgYmUgaW4gdGhlIGRvY3VtZW50
LgotICAgICAgICBpZiAoc2hvdWxkQ2hlY2tTcGVsbGluZ0FuZEdyYW1tYXIgJiYgY2xvc2VUeXBp
bmcgJiYgb2xkU2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgJiYgb2xkU2VsZWN0aW9uLnN0
YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSAmJiBvbGRTZWxlY3Rpb24uc3RhcnQoKS5hbmNob3JOb2Rl
KCktPmluRG9jdW1lbnQoKSkgeworICAgICAgICBpZiAobV9lZGl0b3JVSVVwZGF0ZVRpbWVyU2hv
dWxkQ2hlY2tTcGVsbGluZ0FuZEdyYW1tYXIgJiYgb2xkU2VsZWN0aW9uLmlzQ29udGVudEVkaXRh
YmxlKCkgJiYgb2xkU2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSAmJiBvbGRTZWxl
Y3Rpb24uc3RhcnQoKS5hbmNob3JOb2RlKCktPmluRG9jdW1lbnQoKSkgewogICAgICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIG9sZFN0YXJ0KG9sZFNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSk7CiAg
ICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZEFkamFjZW50V29yZHMgPSBWaXNpYmxlU2Vs
ZWN0aW9uKHN0YXJ0T2ZXb3JkKG9sZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9m
V29yZChvbGRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CiAgICAgICAgICAgICBpZiAo
b2xkQWRqYWNlbnRXb3JkcyAhPSBuZXdBZGphY2VudFdvcmRzKSB7CkBAIC0zMzY1LDEzICszMzk2
LDEzIEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGMKICAgICBpZiAo
IWlzQ29udGludW91c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpCiAgICAgICAgIGRvY3VtZW50KCku
bWFya2VycygpLnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwogCi0gICAg
aWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bigmbV9mcmFtZSk7Ci0gICAgc2V0U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKHRydWUpOwogI2lm
IEVOQUJMRShERUxFVElPTl9VSSkKICAgICBtX2RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXItPnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKICNlbmRpZgotICAgIG1fYWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rp
b24sIG9wdGlvbnMpOworICAgIGlmIChtX2VkaXRvclVJVXBkYXRlVGltZXJXYXNUcmlnZ2VyZWRC
eURpY3RhdGlvbikKKyAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7CisKKyAgICBtX29sZFNlbGVjdGlvbkZv
ckVkaXRvclVJVXBkYXRlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIH0KIAog
c3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmgJKHJldmlzaW9uIDE2NDMzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Miw2ICszNjIsNyBAQCBwdWJsaWM6CiAg
ICAgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSopIGNvbnN0OwogCiAgICAgdm9pZCBy
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVj
dGlvbiwgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbnMpOworICAgIHZvaWQgdXBk
YXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOwogICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNv
bnN0OwogICAgIHVuc2lnbmVkIGNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiwgUmFu
Z2UqLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMsIFZlY3Rv
cjxSZWZQdHI8UmFuZ2U+PiopOwogICAgIGJvb2wgbWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGln
aHRlZCgpIGNvbnN0OwpAQCAtNDY0LDYgKzQ2NSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNo
YW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxl
Y3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zKTsKIAorICAgIHZvaWQg
ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKFRpbWVyPEVkaXRvcj4mKTsKKwogICAgIE5vZGUqIGZp
bmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdDsKIAogICAgIGJvb2wgdW5pZmllZFRl
eHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0OwpAQCAtNDk1LDYgKzQ5OCwxMSBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVkOwogICAgIEVkaXRvclBh
cmFncmFwaFNlcGFyYXRvciBtX2RlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3I7CiAgICAgYm9vbCBt
X292ZXJ3cml0ZU1vZGVFbmFibGVkOworCisgICAgVmlzaWJsZVNlbGVjdGlvbiBtX29sZFNlbGVj
dGlvbkZvckVkaXRvclVJVXBkYXRlOworICAgIFRpbWVyPEVkaXRvcj4gbV9lZGl0b3JVSVVwZGF0
ZVRpbWVyOworICAgIGJvb2wgbV9lZGl0b3JVSVVwZGF0ZVRpbWVyU2hvdWxkQ2hlY2tTcGVsbGlu
Z0FuZEdyYW1tYXI7CisgICAgYm9vbCBtX2VkaXRvclVJVXBkYXRlVGltZXJXYXNUcmlnZ2VyZWRC
eURpY3RhdGlvbjsKIH07CiAKIGlubGluZSB2b2lkIEVkaXRvcjo6c2V0U3RhcnROZXdLaWxsUmlu
Z1NlcXVlbmNlKGJvb2wgZmxhZykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAJKHJldmlzaW9uIDE2NDMzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ4LDYgKzc0OCw4IEBAIHVuc2lnbmVkIEludGVybmFs
czo6bWFya2VyQ291bnRGb3JOb2RlKE4KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCisgICAg
bm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5lZGl0b3IoKS51cGRhdGVFZGl0b3JVSU5vd0lmU2No
ZWR1bGVkKCk7CisKICAgICByZXR1cm4gbm9kZS0+ZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vy
c0Zvcihub2RlLCBtYXJrZXJUeXBlcykuc2l6ZSgpOwogfQogCkBAIC03NjUsNiArNzY3LDggQEAg
RG9jdW1lbnRNYXJrZXIqIEludGVybmFsczo6bWFya2VyQXQoTm9kZQogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKKyAgICBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCktPmVkaXRvcigpLnVwZGF0
ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQoKTsKKwogICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+
IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKG5vZGUsIG1h
cmtlclR5cGVzKTsKICAgICBpZiAobWFya2Vycy5zaXplKCkgPD0gaW5kZXgpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMTI5NSwxMiArMTI5OSwzNCBAQCB2b2lkIEludGVybmFsczo6c2V0RGV2aWNl
UHJveGltaXR5KGNvbnN0CiAjZW5kaWYKIH0KIAordm9pZCBJbnRlcm5hbHM6OnVwZGF0ZUVkaXRv
clVJTm93SWZTY2hlZHVsZWQoKQoreworICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBjb250
ZXh0RG9jdW1lbnQoKSkgeworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCkpCisgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCkudXBkYXRlRWRpdG9yVUlOb3dJZlNj
aGVkdWxlZCgpOworICAgIH0KK30KKworTm9kZSogSW50ZXJuYWxzOjpmaW5kRWRpdGluZ0RlbGV0
ZUJ1dHRvbigpCit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7
CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgdXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOworCisgICAgLy8gRklY
TUU6IFdlIHNob3VsZG4ndCBwb2xsdXRlIHRoZSBpZCBuYW1lc3BhY2Ugd2l0aCB0aGlzIG5hbWUu
CisgICAgcmV0dXJuIGRvY3VtZW50LT5nZXRFbGVtZW50QnlJZCgiV2ViS2l0LUVkaXRpbmctRGVs
ZXRlLUJ1dHRvbiIpOworfQorCiBib29sIEludGVybmFsczo6aGFzU3BlbGxpbmdNYXJrZXIoaW50
IGZyb20sIGludCBsZW5ndGgsIEV4Y2VwdGlvbkNvZGUmKQogewogICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50
LT5mcmFtZSgpKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIHVwZGF0ZUVkaXRvclVJTm93SWZT
Y2hlZHVsZWQoKTsKKwogICAgIHJldHVybiBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCkuc2Vs
ZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBmcm9tLCBs
ZW5ndGgpOwogfQogICAgIApAQCAtMTMwOSw3ICsxMzM1LDkgQEAgYm9vbCBJbnRlcm5hbHM6Omhh
c0F1dG9jb3JyZWN0ZWRNYXJrZXIoaQogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHRE
b2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICAKKworICAgIHVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQo
KTsKKwogICAgIHJldHVybiBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCkuc2VsZWN0aW9uU3Rh
cnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIGZyb20sIGxlbmd0
aCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkocmV2aXNpb24gMTY0
MzMwKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTY5LDYgKzE2OSw5IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBwYXJzZXJNZXRhRGF0
YShEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSA9IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCkpOwog
CisgICAgTm9kZSogZmluZEVkaXRpbmdEZWxldGVCdXR0b24oKTsKKyAgICB2b2lkIHVwZGF0ZUVk
aXRvclVJTm93SWZTY2hlZHVsZWQoKTsKKwogICAgIGJvb2wgaGFzU3BlbGxpbmdNYXJrZXIoaW50
IGZyb20sIGludCBsZW5ndGgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGhhc0dyYW1tYXJN
YXJrZXIoaW50IGZyb20sIGludCBsZW5ndGgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGhh
c0F1dG9jb3JyZWN0ZWRNYXJrZXIoaW50IGZyb20sIGludCBsZW5ndGgsIEV4Y2VwdGlvbkNvZGUm
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHJldmlzaW9uIDE2NDMz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkod29ya2luZyBjb3B5
KQpAQCAtMTI5LDYgKzEyOSwxMCBAQAogICAgIC8vIENhbGxpbmcgcGFyc2VyTWV0YURhdGEoKSB3
aXRoIG5vIGFyZ3VtZW50cyBnZXRzIHRoZSBtZXRhZGF0YSBmb3IgdGhlIHNjcmlwdCBvZiB0aGUg
Y3VycmVudCBzY29wZS4KICAgICBET01TdHJpbmcgcGFyc2VyTWV0YURhdGEob3B0aW9uYWwgYW55
IGZ1bmMpOwogCisgICAgdm9pZCB1cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7CisKKyAg
ICBOb2RlIGZpbmRFZGl0aW5nRGVsZXRlQnV0dG9uKCk7CisKICAgICBbUmFpc2VzRXhjZXB0aW9u
XSBib29sZWFuIGhhc1NwZWxsaW5nTWFya2VyKGxvbmcgZnJvbSwgbG9uZyBsZW5ndGgpOwogICAg
IFtSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gaGFzR3JhbW1hck1hcmtlcihsb25nIGZyb20sIGxv
bmcgbGVuZ3RoKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIGhhc0F1dG9jb3JyZWN0
ZWRNYXJrZXIobG9uZyBmcm9tLCBsb25nIGxlbmd0aCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjQz
NTIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
MCBAQAorMjAxNC0wMi0xOCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAg
ICAgICBDaGFuZ2luZyBzZWxlY3Rpb24gc2hvdWxkbid0IHN5bmNocm9ub3VzbHkgdXBkYXRlIGVk
aXRvciBVSSBjb21wb25lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjkwMjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBNYW55IHRlc3RzIG5vdyBjYWxscyBpbnRlcm5hbHMudXBkYXRlRWRpdG9yVUlO
b3dJZlNjaGVkdWxlZCgpIHRvIHVwZGF0ZSB0aGUgc3BlbGxjaGVja2VyIHN0YXRlcywgYW5kIHVz
ZXMKKyAgICAgICAgc2V0VGltZW91dCgpIHRvIG1ha2UgdGhpbmdzIHRlc3RhYmxlIGluIHRoZSBi
cm93c2VyLgorCisgICAgICAgICogZWRpdGluZy9zcGVsbGluZy9zY3JpcHQtdGVzdHMvc3BlbGxp
bmctYmFja3NwYWNlLWJldHdlZW4tbGluZXMuanM6CisgICAgICAgICh0ZXN0VHdvTGluZXNNaXNz
cGVsbGluZ3MpOiBVc2VzIHVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQgYW5kIHNldFRpbWVv
dXQgdG8gbWFrZSBzcGVsbGNoZWNrZXIgcmVjb2duaXplCisgICAgICAgIHR3byBzZWxlY3Rpb24g
Y2hhbmdlcy4gVGhpcyBpcyBva2F5IHNpbmNlIHRoZSB1c2VyIG5ldmVyIG1vdmVzIHNlbGVjdGlv
biBtdWx0aXBsZSB0aW1lcyBpbiBhIHNpbmdsZSB0YXNrLgorICAgICAgICAqIGVkaXRpbmcvc3Bl
bGxpbmcvc3BlbGxjaGVjay1hdHRyaWJ1dGUuaHRtbDogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvZWRpdGluZy9kZWxldGluZy9kZWxldGlvblVJLWNsaWNrLW9uLWRlbGV0ZS1idXR0
b24uaHRtbDogVXNlIGludGVuYWxzLmZpbmRFZGl0aW5nRGVsZXRlQnV0dG9uCisgICAgICAgIHdo
aWNoIHVwZGF0ZXMgZGVsZXRlIGJ1dHRvbiBjb250cm9sbGVyIHN0YXRlcyBzeW5jaHJvbm91c2x5
IGluc3RlYWQgb2YgZ2V0RWxlbWVudEJ5SWQgd2hpY2ggZG9lc24ndCBkbyB0aGF0LgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9lZGl0aW5nL2RlbGV0aW5nL2lkLWluLWRlbGV0ZWJ1dHRvbi1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2VkaXRpbmcvZGVsZXRpbmcvaWQtaW4t
ZGVsZXRlYnV0dG9uLmh0bWw6IERpdHRvLiBBbHNvIGRpZCBzb21lIGNsZWFudXBzLgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9lZGl0aW5nL2RlbGV0aW5nL3Jlc291cmNlcy9kZWxldGlvblVJLWhl
bHBlcnMuanM6CisgICAgICAgIChkZWxldGlvblVJRGVsZXRlQnV0dG9uRm9yRWxlbWVudCk6IERp
dHRvLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL2VkaXRpbmcvc3BlbGxpbmcvZWRpdGluZy13
b3JkLXdpdGgtbWFya2VyLTEuaHRtbDogQWdhaW4sIHdlIG11c3Qgbm90aWZ5IHRoZSBzcGVsbGNo
ZWNrZXIKKyAgICAgICAgc3luY2hyb25vdXNseSBoZXJlIGJlY2F1c2Ugd2UncmUgZXhwZWN0aW5n
IHNwZWxsY2hlY2tlciB0byB1c2UgdGhlIG9sZCBzZWxlY3Rpb24gc2V0IGJ5IHNldFNlbGVjdGlv
blJhbmdlCisgICAgICAgIGluIEVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkIHRyaWdn
ZXJlZCBieSB0aGUgcGFzdGluZyBjb21tYW5kLiBUaGlzIGlzLCBhZ2Fpbiwgbm90IGEgcHJvYmxl
bSBpbgorICAgICAgICBwcmFjdGljZSBzaW5jZSB1c2VyIG5ldmVyIHBhc3RlcyBjb250ZW50IHN5
bmNocm9ub3VzbHkgYWZ0ZXIgY2hhbmdpbmcgc2VsZWN0aW9uIGxpa2UgdGhpcyBpbiBhIHNpbmds
ZSB0YXNrLgorCiAyMDE0LTAyLTE4ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29t
PgogCiAgICAgICAgIE1vcmUgV2luZG93cyB0ZXN0IGdhcmRlbmluZyB0byBnZXQgdGhlIGJvdHMg
Z3JlZW4uCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stYXR0
cmlidXRlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9z
cGVsbGNoZWNrLWF0dHJpYnV0ZS5odG1sCShyZXZpc2lvbiAxNjQzMzApCisrKyBMYXlvdXRUZXN0
cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stYXR0cmlidXRlLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDE0ICs0OCwxOCBAQCBmdW5jdGlvbiB0ZXN0TWFya2VyRm9yTWlzc3BlbGxlZFdv
cmQocGFyCiAgICAgdmFyIGlucHV0ID0gYWRkSW5wdXRFbGVtZW50KHBhcmVudElkLCBpZCwgdHlw
ZSwgc3BlbGxjaGVjayk7CiAgICAgaW5wdXQuZm9jdXMoKTsKICAgICAvLyBBY3RpdmF0ZSBzcGVs
bGNoZWNraW5nLgotICAgIG1vdmVTZWxlY3Rpb25Gb3J3YXJkQnlXb3JkQ29tbWFuZCgpOworICAg
IGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICBpbnRlcm5hbHMudXBkYXRlRWRpdG9yVUlO
b3dJZlNjaGVkdWxlZCgpOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICBt
b3ZlU2VsZWN0aW9uRm9yd2FyZEJ5V29yZENvbW1hbmQoKTsKIAotICAgIGxvZ01hcmt1cChpZCwg
c3BlbGxjaGVjaywgdHJ1ZSk7CisgICAgICAgIGxvZ01hcmt1cChpZCwgc3BlbGxjaGVjaywgdHJ1
ZSk7CiAKLSAgICBpZiAod2luZG93LmludGVybmFscykKLSAgICAgICAgc2hvdWxkQmVjb21lRXF1
YWwoJ2ludGVybmFscy5oYXNTcGVsbGluZ01hcmtlcigwLCAyKScsIHNob3VsZEJlTWlzc3BlbGxl
ZCA/ICd0cnVlJyA6ICdmYWxzZScsIGRvbmUpOwotICAgIGVsc2UKLSAgICAgICAgZG9uZSgpOwor
ICAgICAgICBpZiAod2luZG93LmludGVybmFscykKKyAgICAgICAgICAgIHNob3VsZEJlY29tZUVx
dWFsKCdpbnRlcm5hbHMuaGFzU3BlbGxpbmdNYXJrZXIoMCwgMiknLCBzaG91bGRCZU1pc3NwZWxs
ZWQgPyAndHJ1ZScgOiAnZmFsc2UnLCBkb25lKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZG9uZSgpOworICAgIH0sIDEwKTsKIH0KIAogZnVuY3Rpb24gbG9nTWFya3VwKGlkLCBzcGVsbGNo
ZWNrVmFsdWUsIHNob3VsZENsb3NlVGFnKQpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVs
bGluZy9zY3JpcHQtdGVzdHMvc3BlbGxpbmctYmFja3NwYWNlLWJldHdlZW4tbGluZXMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zY3JpcHQtdGVzdHMvc3Bl
bGxpbmctYmFja3NwYWNlLWJldHdlZW4tbGluZXMuanMJKHJldmlzaW9uIDE2NDMzMCkKKysrIExh
eW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc2NyaXB0LXRlc3RzL3NwZWxsaW5nLWJhY2tzcGFj
ZS1iZXR3ZWVuLWxpbmVzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNSArMzMsMTkgQEAgZnVu
Y3Rpb24gdGVzdFR3b0xpbmVzTWlzc3BlbGxpbmdzKCkKICAgICB3aW5kb3cuc2VsID0gc2V0dXAo
InRhcmdldDEiKTsgLy8gXk9LCiAKICAgICBzZWwubW9kaWZ5KCJtb3ZlIiwgImZvcndhcmQiLCAi
bGluZSIpOyAvLyBeT0sgenogT0sKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykKLSAg
ICAgICAgc2VsLm1vZGlmeSgibW92ZSIsICJmb3J3YXJkIiwgIndvcmQiKTsKLQotICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygiZmlyc3RMaW5lVGV4dCgndGFyZ2V0MScpIiwgIk9LIik7Ci0gICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJzZWwuYW5jaG9yTm9kZS5kYXRhIiwgIk9LIHp6IE9LIik7
CiAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCi0gICAgICAgIHNob3VsZEJlY29tZUVxdWFsKCJp
bnRlcm5hbHMuaGFzU3BlbGxpbmdNYXJrZXIoMywgMikiLCAidHJ1ZSIsIGRvbmUpOwotICAgIGVs
c2UKLSAgICAgICAgZG9uZSgpOworICAgICAgICBpbnRlcm5hbHMudXBkYXRlRWRpdG9yVUlOb3dJ
ZlNjaGVkdWxlZCgpOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDM7IGkrKykKKyAgICAgICAgICAgIHNlbC5tb2RpZnkoIm1vdmUiLCAi
Zm9yd2FyZCIsICJ3b3JkIik7CisKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJmaXJz
dExpbmVUZXh0KCd0YXJnZXQxJykiLCAiT0siKTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJzZWwuYW5jaG9yTm9kZS5kYXRhIiwgIk9LIHp6IE9LIik7CisgICAgICAgIGlmICh3aW5k
b3cuaW50ZXJuYWxzKQorICAgICAgICAgICAgc2hvdWxkQmVjb21lRXF1YWwoImludGVybmFscy5o
YXNTcGVsbGluZ01hcmtlcigzLCAyKSIsICJ0cnVlIiwgZG9uZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGRvbmUoKTsKKyAgICB9LCAxMDApOwogfQogCiBmdW5jdGlvbiB0ZXN0TWlzc3Bl
bGxpbmdzQWZ0ZXJMaW5lTWVyZ2VVc2luZ0RlbGV0ZSgpCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvZWRpdGluZy9kZWxldGluZy9kZWxldGlvblVJLWNsaWNrLW9uLWRlbGV0ZS1idXR0
b24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9k
ZWxldGluZy9kZWxldGlvblVJLWNsaWNrLW9uLWRlbGV0ZS1idXR0b24uaHRtbAkocmV2aXNpb24g
MTY0MzMwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvZGVsZXRpbmcvZGVs
ZXRpb25VSS1jbGljay1vbi1kZWxldGUtYnV0dG9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE0
LDEzICsxNCwxMyBAQCBsaSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsaSIpOwogc2VsLnNl
dFBvc2l0aW9uKGxpLCAwKTsKIAogaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7Ci0gICAgZGVsZXRl
QnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIldlYktpdC1FZGl0aW5nLURlbGV0ZS1C
dXR0b24iKTsKKyAgICBkZWxldGVCdXR0b24gPSBpbnRlcm5hbHMuZmluZEVkaXRpbmdEZWxldGVC
dXR0b24oKTsKICAgICB4ID0gZGVsZXRlQnV0dG9uLm9mZnNldFBhcmVudC5vZmZzZXRMZWZ0ICsg
ZGVsZXRlQnV0dG9uLm9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQub2Zmc2V0TGVmdCArIGRlbGV0
ZUJ1dHRvbi5vZmZzZXRMZWZ0ICsgZGVsZXRlQnV0dG9uLm9mZnNldFdpZHRoIC8gMjsKICAgICB5
ID0gZGVsZXRlQnV0dG9uLm9mZnNldFBhcmVudC5vZmZzZXRUb3AgKyBkZWxldGVCdXR0b24ub2Zm
c2V0UGFyZW50Lm9mZnNldFBhcmVudC5vZmZzZXRUb3AgKyBkZWxldGVCdXR0b24ub2Zmc2V0VG9w
ICsgZGVsZXRlQnV0dG9uLm9mZnNldEhlaWdodCAvIDI7CiAgICAgZXZlbnRTZW5kZXIubW91c2VN
b3ZlVG8oeCwgeSk7CiAgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CiAgICAgZXZlbnRTZW5k
ZXIubW91c2VVcCgpOwotICAgIGRlbGV0ZUJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJXZWJLaXQtRWRpdGluZy1EZWxldGUtQnV0dG9uIik7CisgICAgZGVsZXRlQnV0dG9uID0gaW50
ZXJuYWxzLmZpbmRFZGl0aW5nRGVsZXRlQnV0dG9uKCk7CiAgICAgdGVzdENvbnRhaW5lciA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0Iik7CiAgICAgTWFya3VwLmRlc2NyaXB0aW9uKCJU
aGVyZSBzaG91bGQgYmUgbm8gdmlzaWJsZSBjb250ZW50IGluIHRoZSBtYXJrdXAgYmVsb3cuIFRo
aXMgdGVzdCBpcyBmb3IgYSBidWcgd2hlcmUgdGhlIGRlbGV0ZSBidXR0b24gd291bGRuJ3Qgd29y
ayBiZWNhdXNlIGl0IGhhZCAtd2Via2l0LXVzZXItc2VsZWN0Om5vbmUgaW5zdGVhZCBvZiAtd2Vi
a2l0LXVzZXItc2VsZWN0Omlnbm9yZS4iKTsKICAgICBpZiAoZGVsZXRlQnV0dG9uKQpJbmRleDog
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvZGVsZXRpbmcvaWQtaW4tZGVsZXRlYnV0
dG9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
ZWRpdGluZy9kZWxldGluZy9pZC1pbi1kZWxldGVidXR0b24tZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAxNjQzMzApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9kZWxldGluZy9p
ZC1pbi1kZWxldGVidXR0b24tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMs
NyBAQCBUZXN0IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJXZWJLaXQtRWRpCiBPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCiAKIAotUEFTUyBkZWxldGVCdXR0b24gaXMgbm9uLW51bGwuCitQQVNT
IGludGVybmFscy5maW5kRWRpdGluZ0RlbGV0ZUJ1dHRvbigpOyBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiV2ViS2l0LUVkaXRpbmctRGVsZXRlLUJ1dHRvbiIpIGlzIG5vbi1udWxsLgogUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9kZWxldGluZy9pZC1pbi1kZWxldGVidXR0b24uaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9kZWxldGlu
Zy9pZC1pbi1kZWxldGVidXR0b24uaHRtbAkocmV2aXNpb24gMTY0MzMwKQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvZGVsZXRpbmcvaWQtaW4tZGVsZXRlYnV0dG9uLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTIgKzEsOCBAQAogPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQg
c3JjPSIuLi8uLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9o
ZWFkPgogPGJvZHk+Ci0KIDxkaXYgY29udGVudGVkaXRhYmxlPSJ0cnVlIj4KIDx1bCBjbGFzcz0i
bmVlZHNEZWxldGlvblVJIj48bGk+MTwvbGk+PGxpIGlkPSJsaSI+MjwvbGk+PC91bD4KLQorPHNj
cmlwdCBzcmM9Ii4uLy4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0PgogZGVzY3JpcHRpb24oJ1Rlc3QgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIldl
YktpdC1FZGl0aW5nLURlbGV0ZS1CdXR0b24iKScpOwogCkBAIC0xNCwxMCArMTAsMTEgQEAgc2Vs
ID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogbGkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
bGkiKTsKIHNlbC5zZXRQb3NpdGlvbihsaSwgMCk7CiAKLWlmICh3aW5kb3cudGVzdFJ1bm5lcikg
ewotICAgIGRlbGV0ZUJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJXZWJLaXQtRWRp
dGluZy1EZWxldGUtQnV0dG9uIik7Ci0gICAgc2hvdWxkQmVOb25OdWxsKCdkZWxldGVCdXR0b24n
KTsKLX0KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICBzaG91bGRCZU5vbk51bGwoJ2ludGVy
bmFscy5maW5kRWRpdGluZ0RlbGV0ZUJ1dHRvbigpOyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
V2ViS2l0LUVkaXRpbmctRGVsZXRlLUJ1dHRvbiIpJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOworCiA8L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KIDwvYm9keT4KSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9lZGl0aW5nL2RlbGV0aW5nL3Jlc291cmNlcy9kZWxldGlvblVJLWhlbHBl
cnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvZGVs
ZXRpbmcvcmVzb3VyY2VzL2RlbGV0aW9uVUktaGVscGVycy5qcwkocmV2aXNpb24gMTY0MzMwKQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvZGVsZXRpbmcvcmVzb3VyY2VzL2Rl
bGV0aW9uVUktaGVscGVycy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTAsMTEgKzEwLDEyIEBAIGZ1
bmN0aW9uIGRlYnVnKG1zZykKIAogZnVuY3Rpb24gZGVsZXRpb25VSURlbGV0ZUJ1dHRvbkZvckVs
ZW1lbnQoaWQpCiB7CisgICAgaWYgKCF3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICByZXR1cm4g
bnVsbDsKICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgIHZhciBzZWxF
bGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgIHNlbC5zZXRQb3NpdGlv
bihzZWxFbGVtZW50LCAwKTsKLSAgICB2YXIgZGVsZXRlQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoIldlYktpdC1FZGl0aW5nLURlbGV0ZS1CdXR0b24iKTsKLSAgICByZXR1cm4gZGVs
ZXRlQnV0dG9uOworICAgIHJldHVybiBpbnRlcm5hbHMuZmluZEVkaXRpbmdEZWxldGVCdXR0b24o
KTsKIH0KIAogZnVuY3Rpb24gZGV0ZXJtaW5lRGVsZXRpb25VSUV4aXN0ZW5jZShpZCkKSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3NwZWxsaW5nL2VkaXRpbmctd29yZC13
aXRoLW1hcmtlci0xLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2VkaXRpbmcvc3BlbGxpbmcvZWRpdGluZy13b3JkLXdpdGgtbWFya2VyLTEuaHRtbAkocmV2aXNp
b24gMTY0MzMwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvc3BlbGxpbmcv
ZWRpdGluZy13b3JkLXdpdGgtbWFya2VyLTEuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDYg
KzE0OCw4IEBAIHRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QKIHRleHRh
cmVhLnNldFNlbGVjdGlvblJhbmdlKDAsNCk7CiBleGVjQ29weUNvbW1hbmQoKTsKIHRleHRhcmVh
LnNldFNlbGVjdGlvblJhbmdlKDE1LCAxNSk7CitpZiAod2luZG93LmludGVybmFscykKKyAgICBp
bnRlcm5hbHMudXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOwogZXhlY1Bhc3RlQ29tbWFu
ZCgpOwogaWYgKHdpbmRvdy5pbnRlcm5hbHMgJiYgd2luZG93LmludGVybmFscy5oYXNTcGVsbGlu
Z01hcmtlcikgewogICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzLmhhc1NwZWxsaW5nTWFya2VyKDcs
OCkgPT0gMCkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224595</attachid>
            <date>2014-02-18 22:37:00 -0800</date>
            <delta_ts>2014-02-19 11:18:09 -0800</delta_ts>
            <desc>Fixes Windows build</desc>
            <filename>bug-129024-20140218223721.patch</filename>
            <type>text/plain</type>
            <size>31445</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NDM1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE0LTAyLTE4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIENoYW5naW5nIHNlbGVjdGlvbiBz
aG91bGRuJ3Qgc3luY2hyb25vdXNseSB1cGRhdGUgZWRpdG9yIFVJIGNvbXBvbmVudHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTAyNAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgdXBkYXRlcyB0
byBzcGVsbGNoZWNrZXIsIGFsdGVybmF0aXZlIHRleHQgY29udHJvbGxlciAoY29ycmVjdGlvbiBw
YW5lKSwgYW5kIGRlbGV0ZSBidXR0b24gY29udHJvbGxlcgorICAgICAgICBhc3luY2hyb25vdXMg
Zm9yIHByb2dyYW1tYXRpY2FsbHkgdHJpZ2dlcmVkIHNlbGVjdGlvbiBjaGFuZ2VzLgorCisgICAg
ICAgIFdlIGNvbnRpbnVlIHRvIHVwZGF0ZSB0aGVpciBzdGF0ZXMgc3luY2hyb25vdXNseSBpbW1l
ZGlhdGVseSBhZnRlciB3ZSBoYXZlIGFwcGxpZWQsIHVuYXBwbGllZCwgb3IgcmVhcHBsaWVkCisg
ICAgICAgIGVkaXRpbmcgY29tbWFuZHMgdG8ga2VlcCBzdGF0ZXMgaW4gc3BlbGwgY2hlY2tlciBh
bmQgYWx0ZXJuYXRpdmUgdGV4dCBjb250cm9sbGVyIGNvbnNpc3RlbnQuIFdlIHNob3VsZCBiZQor
ICAgICAgICBhYmxlIHRvIG1ha2UgdGhlbSBhc3luY2hyb25vdXMgYXMgd2VsbCBpbiB0aGUgZnV0
dXJlIGJ1dCB0aGF0IHNob3VsZCBiZSBkb25lIGluIGEgc2VwYXJhdGUgcGF0Y2guCisKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6IFRoaXMgZnVuY3Rpb24gdXNlZCB0byBlbnVt
ZXJhdGUgYWxsIGRvY3VtZW50CisgICAgICAgIG1ha2VycyBhbmQgY2FsbCByZXNwb25kVG9NYXJr
ZXJBdEVuZE9mV29yZCBvbiBlYWNoIG9uZSBvZiB0aGVtIG9ubHkgdG8gZXhpdCBlYXJseSB3aGVu
IFNldFNlbGVjdGlvbk9wdGlvbnMKKyAgICAgICAgaGFkIERpY3RhdGlvblRyaWdnZXJlZC4gVGhp
cyBjb25kaXRpb24gaXMgbm93IGNoZWNrZWQgaW4gRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2Vs
ZWN0aW9uIHRvIGF2b2lkIGFsbCB0aGUKKyAgICAgICAgdW5uZWNlc3Nhcnkgd29yayBhbmQgcmVt
b3ZlIHRoZSBkZXBlbmRlbmN5IG9uIFNldFNlbGVjdGlvbk9wdGlvbnMuCisgICAgICAgIChXZWJD
b3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29y
ZCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5o
OgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjphcHBsaWVkRWRpdGluZyk6IENhbGxzIHVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQg
YmVmb3JlIGNhbGxpbmcgcmVzcG9uZFRvQXBwbGllZEVkaXRpbmcKKyAgICAgICAgb24gdGhlIGFs
dGVybmF0aXZlIHRleHQgY29udHJvbGxlci4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5h
cHBsaWVkRWRpdGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZWFwcGxp
ZWRFZGl0aW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkVkaXRvcik6IElu
aXRpYWxpemVzIG5ld2x5IGFkZGVkIGJvb2xlYW5zLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKTogQ29udGludWUgdG8gY2FsbCByZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uIChmb3IgQVBJIGNvbnNpc3RlbmN5KQorICAgICAgICBhbmQgc2V0U3Rh
cnROZXdLaWxsUmluZ1NlcXVlbmNlIGJ1dCBkZWZlciB0aGUgImVkaXRvciBVSSB1cGRhdGVzIiB0
byBzcGVsbGNoZWNrZXIsIGFsdGVybmF0aXZlIHRleHQgY29udHJvbGxlcgorICAgICAgICBhbmQg
ZGVsZXRlIGJ1dHRvbiBjb250cm9sbGVyIGJ5IGZpcmluZyBhIG5ld2x5IGFkZGVkIG9uZSBzaG90
IHRpbWVyLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVFZGl0b3JVSU5vd0lmU2No
ZWR1bGVkKTogU3luY2hyb25vdXNseSB1cGRhdGUgdGhlIHBlbmRpbmcgZWRpdG9yIFVJIHVwZGF0
ZXMuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCk6
IEV4dHJhY3RlZCBmcm9tIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24uCisgICAgICAgICogZWRp
dGluZy9FZGl0b3IuaDoKKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkludGVybmFsczo6bWFya2VyQ291bnRGb3JOb2RlKTogQ2FsbHMgdXBkYXRl
RWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpIHRvIHVwZGF0ZSBkb2N1bWVudCBtYXJrZXJzLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjptYXJrZXJBdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjp1cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmZpbmRFZGl0aW5nRGVsZXRlQnV0dG9uKTogQWRk
ZWQuIFVwZGF0ZXMgZGVsZXRlIGJ1dHRvbiBjb250cm9sbGVyIHN5bmNocm9ub3VzbHkuCisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6Omhhc1NwZWxsaW5nTWFya2VyKTogQ2FsbHMgdXBkYXRl
RWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpIHRvIHVwZGF0ZSBkb2N1bWVudCBtYXJrZXJzLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpoYXNBdXRvY29ycmVjdGVkTWFya2VyKTogRGl0dG8u
CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVy
bmFscy5pZGw6CisKIDIwMTQtMDItMTcgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hA
YXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBmYXN0IG1hcHBpbmcgZnJvbSBTdHJpbmdJbXBsIHRv
IEpTU3RyaW5nCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTY0MzMwKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTExMTYsNiAr
MTExNiw3IEBAIF9fWk43V2ViQ29yZTZFZGl0b3IyNmluY3JlYXNlU2VsZWN0aW9uTGkKIF9fWk43
V2ViQ29yZTZFZGl0b3IyNnRvZ2dsZU92ZXJ3cml0ZU1vZGVFbmFibGVkRXYKIF9fWk43V2ViQ29y
ZTZFZGl0b3IyNndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkRVJOU18xMFBhc3RlYm9hcmRFCiBf
X1pON1dlYkNvcmU2RWRpdG9yMjhyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50RU4zV1RGMTBQ
YXNzUmVmUHRySU5TXzE2RG9jdW1lbnRGcmFnbWVudEVFRWJiYgorX19aTjdXZWJDb3JlNkVkaXRv
cjI4dXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjlj
YW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjljYW5J
bmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjloYW5kbGVB
bHRlcm5hdGl2ZVRleHRVSVJlc3VsdEVSS04zV1RGNlN0cmluZ0UKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMTY0MzMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQwLDcgKzQ0MCw3IEBAIEZsb2F0UmVj
dCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb28KICAgICByZXR1cm4gdmlldy0+Y29udGVu
dHNUb1Jvb3RWaWV3KEludFJlY3QoYm91bmRpbmdSZWN0KSk7CiB9ICAgICAgICAKIAotdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVj
dGlvbk9wdGlvbnMgb3B0aW9ucykKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rp
b24pCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIC8vIFdoZW4gdXNlciBtb3ZlcyBjYXJldCB0byB0
aGUgZW5kIG9mIGF1dG9jb3JyZWN0ZWQgd29yZCBhbmQgcGF1c2VzLCB3ZSBzaG93IHRoZSBwYW5l
bApAQCAtNDczLDcgKzQ3Myw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVz
cG9uZFQKICAgICAgICAgaWYgKCFtYXJrZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBpZiAocmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoKm1hcmtlciwgcG9zaXRpb24sIG9w
dGlvbnMpKQorICAgICAgICBpZiAocmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoKm1hcmtlciwg
cG9zaXRpb24pKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtNjI1LDEwICs2MjUs
OCBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnNob3VsZFN0CiAgICAgcmV0dXJu
ICgoKG1hcmtlci50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50ICYmICFtYXJr
ZXIuZGVzY3JpcHRpb24oKS5pc051bGwoKSkgfHwgbWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1h
cmtlcjo6U3BlbGxpbmcgfHwgbWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6RGljdGF0
aW9uQWx0ZXJuYXRpdmVzKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQoKSkg
PT0gZW5kT2Zmc2V0KTsKIH0KIAotYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNw
b25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyLCBjb25z
dCBQb3NpdGlvbiYgZW5kT2ZXb3JkUG9zaXRpb24sIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rp
b25PcHRpb25zIG9wdGlvbnMpCitib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3Bv
bmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0
IFBvc2l0aW9uJiBlbmRPZldvcmRQb3NpdGlvbikKIHsKLSAgICBpZiAob3B0aW9ucyAmIEZyYW1l
U2VsZWN0aW9uOjpEaWN0YXRpb25UcmlnZ2VyZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpZiAoIXNob3VsZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZldvcmRQb3NpdGlvbi5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBOb2RlKiBu
b2RlID0gZW5kT2ZXb3JkUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgJKHJldmlz
aW9uIDE2NDMzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgcHVibGljOgogICAg
IHZvaWQgcmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9u
KSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShjb3JyZWN0ZWQpOyBVTlVTRURfUEFSQU0o
Y29ycmVjdGlvbik7IH0pCiAgICAgdm9pZCByZXNwb25kVG9BcHBsaWVkRWRpdGluZyhDb21wb3Np
dGVFZGl0Q29tbWFuZCopIFVOTEVTU19FTkFCTEVEKHsgfSkKICAgICB2b2lkIHJlc3BvbmRUb1Vu
YXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbiopIFVOTEVTU19FTkFCTEVEKHsg
fSkKLSAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgb2xkU2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucykg
VU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ob2xkU2VsZWN0aW9uKTsgfSkKKyAgICB2b2lk
IHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2Vs
ZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShvbGRTZWxlY3Rpb24pOyB9KQog
CiAgICAgdm9pZCBzdG9wUGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
b2xkU2VsZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShvbGRTZWxlY3Rpb24p
OyB9KQogICAgIHZvaWQgYXBwbHlQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0o
c2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOyB9KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHByaXZhdGU6CiAg
ICAgU3RyaW5nIG1hcmtlckRlc2NyaXB0aW9uRm9yQXBwbGllZEFsdGVybmF0aXZlVGV4dChBbHRl
cm5hdGl2ZVRleHRUeXBlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSk7CiAKICAgICBib29s
IHNob3VsZFN0YXJ0VGltZXJGb3IoY29uc3QgRG9jdW1lbnRNYXJrZXImLCBpbnQgZW5kT2Zmc2V0
KSBjb25zdDsKLSAgICBib29sIHJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3Vt
ZW50TWFya2VyJiwgY29uc3QgUG9zaXRpb24mIGVuZE9mV29yZFBvc2l0aW9uLCBGcmFtZVNlbGVj
dGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyk7CisgICAgYm9vbCByZXNwb25kVG9NYXJrZXJBdEVu
ZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYsIGNvbnN0IFBvc2l0aW9uJiBlbmRPZldvcmRQ
b3NpdGlvbik7CiAKICAgICBBbHRlcm5hdGl2ZVRleHRDbGllbnQqIGFsdGVybmF0aXZlVGV4dENs
aWVudCgpOwogICAgIEVkaXRvckNsaWVudCogZWRpdG9yQ2xpZW50KCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAxNjQzMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNjYsOCArMTA2Niw2IEBAIHZv
aWQgRWRpdG9yOjphcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEMKICAgICBBU1NFUlQoY29tcG9z
aXRpb24pOwogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNtZC0+ZW5kaW5nU2Vs
ZWN0aW9uKCkpOwogCi0gICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9B
cHBsaWVkRWRpdGluZyhjbWQuZ2V0KCkpOwotCiAgICAgbm90aWZ5VGV4dEZyb21Db250cm9scyhj
b21wb3NpdGlvbi0+c3RhcnRpbmdSb290RWRpdGFibGVFbGVtZW50KCksIGNvbXBvc2l0aW9uLT5l
bmRpbmdSb290RWRpdGFibGVFbGVtZW50KCkpOwogCiAgICAgLy8gRG9uJ3QgY2xlYXIgdGhlIHR5
cGluZyBzdHlsZSB3aXRoIHRoaXMgc2VsZWN0aW9uIGNoYW5nZS4gIFdlIGRvIHRob3NlIHRoaW5n
cyBlbHNld2hlcmUgaWYgbmVjZXNzYXJ5LgpAQCAtMTA3NSw2ICsxMDczLDEwIEBAIHZvaWQgRWRp
dG9yOjphcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEMKICAgICBjaGFuZ2VTZWxlY3Rpb25BZnRl
ckNvbW1hbmQobmV3U2VsZWN0aW9uLCBvcHRpb25zKTsKICAgICBkaXNwYXRjaEVkaXRhYmxlQ29u
dGVudENoYW5nZWRFdmVudHMoY29tcG9zaXRpb24tPnN0YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVu
dCgpLCBjb21wb3NpdGlvbi0+ZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKIAorICAgIHVw
ZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQoKTsKKyAgICAKKyAgICBtX2FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXItPnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKGNtZC5nZXQoKSk7CisKICAgICBp
ZiAoIWNtZC0+cHJlc2VydmVzVHlwaW5nU3R5bGUoKSkKICAgICAgICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAKQEAgLTExMDIsNiArMTEwNCw4IEBAIHZvaWQgRWRp
dG9yOjp1bmFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHIKICAgICBjaGFuZ2VTZWxlY3Rpb25BZnRl
ckNvbW1hbmQobmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlv
bk9wdGlvbnMoKSk7CiAgICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRzKGNt
ZC0+c3RhcnRpbmdSb290RWRpdGFibGVFbGVtZW50KCksIGNtZC0+ZW5kaW5nUm9vdEVkaXRhYmxl
RWxlbWVudCgpKTsKIAorICAgIHVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQoKTsKKwogICAg
IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhj
bWQuZ2V0KCkpOwogCiAgICAgbV9sYXN0RWRpdENvbW1hbmQgPSAwOwpAQCAtMTExOSw2ICsxMTIz
LDggQEAgdm9pZCBFZGl0b3I6OnJlYXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cgogICAgIFZpc2li
bGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNtZC0+ZW5kaW5nU2VsZWN0aW9uKCkpOwogICAgIGNo
YW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpk
ZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpKTsKICAgICBkaXNwYXRjaEVkaXRhYmxlQ29udGVu
dENoYW5nZWRFdmVudHMoY21kLT5zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSwgY21kLT5l
bmRpbmdSb290RWRpdGFibGVFbGVtZW50KCkpOworICAgIAorICAgIHVwZGF0ZUVkaXRvclVJTm93
SWZTY2hlZHVsZWQoKTsKIAogICAgIG1fbGFzdEVkaXRDb21tYW5kID0gMDsKICAgICBpZiAoY2xp
ZW50KCkpCkBAIC0xMTQxLDYgKzExNDcsOSBAQCBFZGl0b3I6OkVkaXRvcihGcmFtZSYgZnJhbWUp
CiAgICAgLCBtX2FyZU1hcmtlZFRleHRNYXRjaGVzSGlnaGxpZ2h0ZWQoZmFsc2UpCiAgICAgLCBt
X2RlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3IoRWRpdG9yUGFyYWdyYXBoU2VwYXJhdG9ySXNEaXYp
CiAgICAgLCBtX292ZXJ3cml0ZU1vZGVFbmFibGVkKGZhbHNlKQorICAgICwgbV9lZGl0b3JVSVVw
ZGF0ZVRpbWVyKHRoaXMsICZFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCkKKyAgICAs
IG1fZWRpdG9yVUlVcGRhdGVUaW1lclNob3VsZENoZWNrU3BlbGxpbmdBbmRHcmFtbWFyKGZhbHNl
KQorICAgICwgbV9lZGl0b3JVSVVwZGF0ZVRpbWVyV2FzVHJpZ2dlcmVkQnlEaWN0YXRpb24oZmFs
c2UpCiB7CiB9CiAKQEAgLTMyOTQsNyArMzMwMyw3IEBAIHZvaWQgRWRpdG9yOjpzZXRNYXJrZWRU
ZXh0TWF0Y2hlc0FyZUhpZ2gKICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZXBhaW50TWFya2Vy
cyhEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKIH0KIAotdm9pZCBFZGl0b3I6OnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBG
cmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQordm9pZCBFZGl0b3I6
OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIEZyYW1l
U2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMpCiB7CiAjaWYgUExBVEZPUk0o
SU9TKQogICAgIC8vIEZJWE1FOiBTaG91bGQgc3VwcHJlc3Mgc2VsZWN0aW9uIGNoYW5nZSBub3Rp
ZmljYXRpb25zIGR1cmluZyBhIGNvbXBvc2l0aW9uIGNoYW5nZSA8aHR0cHM6Ly93ZWJraXQub3Jn
L2IvMzg4MzA+IApAQCAtMzMwMiw5ICszMzExLDM0IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKGMKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICBtX2FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXItPnN0b3BQZW5kaW5nQ29ycmVjdGlvbihvbGRTZWxlY3Rpb24p
OworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRT
ZWxlY3Rpb24oJm1fZnJhbWUpOworICAgIHNldFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZSh0cnVl
KTsKKworICAgIGlmIChtX2VkaXRvclVJVXBkYXRlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gRG9uJ3QgY2hlY2sgc3BlbGxpbmcgYW5kIGdyYW1tYXIgaWYgdGhl
IGNoYW5nZSBvZiBzZWxlY3Rpb24gaXMgdHJpZ2dlcmVkIGJ5IHNwZWxsaW5nIGNvcnJlY3Rpb24g
aXRzZWxmLgorICAgIG1fZWRpdG9yVUlVcGRhdGVUaW1lclNob3VsZENoZWNrU3BlbGxpbmdBbmRH
cmFtbWFyID0gb3B0aW9ucyAmIEZyYW1lU2VsZWN0aW9uOjpDbG9zZVR5cGluZworICAgICAgICAm
JiAhKG9wdGlvbnMgJiBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsK
KyAgICBtX2VkaXRvclVJVXBkYXRlVGltZXJXYXNUcmlnZ2VyZWRCeURpY3RhdGlvbiA9IG9wdGlv
bnMgJiBGcmFtZVNlbGVjdGlvbjo6RGljdGF0aW9uVHJpZ2dlcmVkOworICAgIG1fZWRpdG9yVUlV
cGRhdGVUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgRWRpdG9yOjp1cGRhdGVFZGl0
b3JVSU5vd0lmU2NoZWR1bGVkKCkKK3sKKyAgICBpZiAoIW1fZWRpdG9yVUlVcGRhdGVUaW1lci5p
c0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9lZGl0b3JVSVVwZGF0ZVRpbWVyLnN0
b3AoKTsKKyAgICBlZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQobV9lZGl0b3JVSVVwZGF0ZVRpbWVy
KTsKK30KKwordm9pZCBFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZChUaW1lcjxFZGl0
b3I+JikKK3sKKyAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IG1fb2xkU2VsZWN0
aW9uRm9yRWRpdG9yVUlVcGRhdGU7CiAKLSAgICBib29sIGNsb3NlVHlwaW5nID0gb3B0aW9ucyAm
IEZyYW1lU2VsZWN0aW9uOjpDbG9zZVR5cGluZzsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXItPnN0b3BQZW5kaW5nQ29ycmVjdGlvbihvbGRTZWxlY3Rpb24pOworICAgIAogICAgIGJv
b2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSB0aGlzLT5pc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCgpOwogICAgIGJvb2wgaXNDb250aW51b3VzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkICYmIGlzR3JhbW1h
ckNoZWNraW5nRW5hYmxlZCgpOwogICAgIGlmIChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCkgewpAQCAtMzMzMSwxMyArMzM2NSwxMCBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hh
bmdlZFNlbGVjdGlvbihjCiAgICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRTZW50ZW5jZSA9IFZp
c2libGVTZWxlY3Rpb24oc3RhcnRPZlNlbnRlbmNlKG5ld1N0YXJ0KSwgZW5kT2ZTZW50ZW5jZShu
ZXdTdGFydCkpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gRG9uJ3QgY2hlY2sgc3BlbGxpbmcg
YW5kIGdyYW1tYXIgaWYgdGhlIGNoYW5nZSBvZiBzZWxlY3Rpb24gaXMgdHJpZ2dlcmVkIGJ5IHNw
ZWxsaW5nIGNvcnJlY3Rpb24gaXRzZWxmLgotICAgICAgICBib29sIHNob3VsZENoZWNrU3BlbGxp
bmdBbmRHcmFtbWFyID0gIShvcHRpb25zICYgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlv
blRyaWdnZXJlZCk7Ci0KICAgICAgICAgLy8gV2hlbiB0eXBpbmcgd2UgY2hlY2sgc3BlbGxpbmcg
ZWxzZXdoZXJlLCBzbyBkb24ndCByZWRvIGl0IGhlcmUuCiAgICAgICAgIC8vIElmIHRoaXMgaXMg
YSBjaGFuZ2UgaW4gc2VsZWN0aW9uIHJlc3VsdGluZyBmcm9tIGEgZGVsZXRlIG9wZXJhdGlvbiwK
ICAgICAgICAgLy8gb2xkU2VsZWN0aW9uIG1heSBubyBsb25nZXIgYmUgaW4gdGhlIGRvY3VtZW50
LgotICAgICAgICBpZiAoc2hvdWxkQ2hlY2tTcGVsbGluZ0FuZEdyYW1tYXIgJiYgY2xvc2VUeXBp
bmcgJiYgb2xkU2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgJiYgb2xkU2VsZWN0aW9uLnN0
YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSAmJiBvbGRTZWxlY3Rpb24uc3RhcnQoKS5hbmNob3JOb2Rl
KCktPmluRG9jdW1lbnQoKSkgeworICAgICAgICBpZiAobV9lZGl0b3JVSVVwZGF0ZVRpbWVyU2hv
dWxkQ2hlY2tTcGVsbGluZ0FuZEdyYW1tYXIgJiYgb2xkU2VsZWN0aW9uLmlzQ29udGVudEVkaXRh
YmxlKCkgJiYgb2xkU2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSAmJiBvbGRTZWxl
Y3Rpb24uc3RhcnQoKS5hbmNob3JOb2RlKCktPmluRG9jdW1lbnQoKSkgewogICAgICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIG9sZFN0YXJ0KG9sZFNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSk7CiAg
ICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZEFkamFjZW50V29yZHMgPSBWaXNpYmxlU2Vs
ZWN0aW9uKHN0YXJ0T2ZXb3JkKG9sZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9m
V29yZChvbGRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CiAgICAgICAgICAgICBpZiAo
b2xkQWRqYWNlbnRXb3JkcyAhPSBuZXdBZGphY2VudFdvcmRzKSB7CkBAIC0zMzY1LDEzICszMzk2
LDEzIEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGMKICAgICBpZiAo
IWlzQ29udGludW91c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpCiAgICAgICAgIGRvY3VtZW50KCku
bWFya2VycygpLnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwogCi0gICAg
aWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bigmbV9mcmFtZSk7Ci0gICAgc2V0U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKHRydWUpOwogI2lm
IEVOQUJMRShERUxFVElPTl9VSSkKICAgICBtX2RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXItPnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKICNlbmRpZgotICAgIG1fYWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rp
b24sIG9wdGlvbnMpOworICAgIGlmIChtX2VkaXRvclVJVXBkYXRlVGltZXJXYXNUcmlnZ2VyZWRC
eURpY3RhdGlvbikKKyAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7CisKKyAgICBtX29sZFNlbGVjdGlvbkZv
ckVkaXRvclVJVXBkYXRlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIH0KIAog
c3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmgJKHJldmlzaW9uIDE2NDMzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Miw2ICszNjIsNyBAQCBwdWJsaWM6CiAg
ICAgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSopIGNvbnN0OwogCiAgICAgdm9pZCBy
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVj
dGlvbiwgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbnMpOworICAgIHZvaWQgdXBk
YXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOwogICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNv
bnN0OwogICAgIHVuc2lnbmVkIGNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiwgUmFu
Z2UqLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMsIFZlY3Rv
cjxSZWZQdHI8UmFuZ2U+PiopOwogICAgIGJvb2wgbWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGln
aHRlZCgpIGNvbnN0OwpAQCAtNDY0LDYgKzQ2NSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNo
YW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxl
Y3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zKTsKIAorICAgIHZvaWQg
ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKFRpbWVyPEVkaXRvcj4mKTsKKwogICAgIE5vZGUqIGZp
bmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdDsKIAogICAgIGJvb2wgdW5pZmllZFRl
eHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0OwpAQCAtNDk1LDYgKzQ5OCwxMSBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVkOwogICAgIEVkaXRvclBh
cmFncmFwaFNlcGFyYXRvciBtX2RlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3I7CiAgICAgYm9vbCBt
X292ZXJ3cml0ZU1vZGVFbmFibGVkOworCisgICAgVmlzaWJsZVNlbGVjdGlvbiBtX29sZFNlbGVj
dGlvbkZvckVkaXRvclVJVXBkYXRlOworICAgIFRpbWVyPEVkaXRvcj4gbV9lZGl0b3JVSVVwZGF0
ZVRpbWVyOworICAgIGJvb2wgbV9lZGl0b3JVSVVwZGF0ZVRpbWVyU2hvdWxkQ2hlY2tTcGVsbGlu
Z0FuZEdyYW1tYXI7CisgICAgYm9vbCBtX2VkaXRvclVJVXBkYXRlVGltZXJXYXNUcmlnZ2VyZWRC
eURpY3RhdGlvbjsKIH07CiAKIGlubGluZSB2b2lkIEVkaXRvcjo6c2V0U3RhcnROZXdLaWxsUmlu
Z1NlcXVlbmNlKGJvb2wgZmxhZykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAJKHJldmlzaW9uIDE2NDMzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ4LDYgKzc0OCw4IEBAIHVuc2lnbmVkIEludGVybmFs
czo6bWFya2VyQ291bnRGb3JOb2RlKE4KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCisgICAg
bm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5lZGl0b3IoKS51cGRhdGVFZGl0b3JVSU5vd0lmU2No
ZWR1bGVkKCk7CisKICAgICByZXR1cm4gbm9kZS0+ZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vy
c0Zvcihub2RlLCBtYXJrZXJUeXBlcykuc2l6ZSgpOwogfQogCkBAIC03NjUsNiArNzY3LDggQEAg
RG9jdW1lbnRNYXJrZXIqIEludGVybmFsczo6bWFya2VyQXQoTm9kZQogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKKyAgICBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCktPmVkaXRvcigpLnVwZGF0
ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQoKTsKKwogICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+
IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKG5vZGUsIG1h
cmtlclR5cGVzKTsKICAgICBpZiAobWFya2Vycy5zaXplKCkgPD0gaW5kZXgpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMTI5NSwxMiArMTI5OSwzNCBAQCB2b2lkIEludGVybmFsczo6c2V0RGV2aWNl
UHJveGltaXR5KGNvbnN0CiAjZW5kaWYKIH0KIAordm9pZCBJbnRlcm5hbHM6OnVwZGF0ZUVkaXRv
clVJTm93SWZTY2hlZHVsZWQoKQoreworICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBjb250
ZXh0RG9jdW1lbnQoKSkgeworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCkpCisgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCkudXBkYXRlRWRpdG9yVUlOb3dJZlNj
aGVkdWxlZCgpOworICAgIH0KK30KKworTm9kZSogSW50ZXJuYWxzOjpmaW5kRWRpdGluZ0RlbGV0
ZUJ1dHRvbigpCit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7
CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgdXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOworCisgICAgLy8gRklY
TUU6IFdlIHNob3VsZG4ndCBwb2xsdXRlIHRoZSBpZCBuYW1lc3BhY2Ugd2l0aCB0aGlzIG5hbWUu
CisgICAgcmV0dXJuIGRvY3VtZW50LT5nZXRFbGVtZW50QnlJZCgiV2ViS2l0LUVkaXRpbmctRGVs
ZXRlLUJ1dHRvbiIpOworfQorCiBib29sIEludGVybmFsczo6aGFzU3BlbGxpbmdNYXJrZXIoaW50
IGZyb20sIGludCBsZW5ndGgsIEV4Y2VwdGlvbkNvZGUmKQogewogICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50
LT5mcmFtZSgpKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIHVwZGF0ZUVkaXRvclVJTm93SWZT
Y2hlZHVsZWQoKTsKKwogICAgIHJldHVybiBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCkuc2Vs
ZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBmcm9tLCBs
ZW5ndGgpOwogfQogICAgIApAQCAtMTMwOSw3ICsxMzM1LDkgQEAgYm9vbCBJbnRlcm5hbHM6Omhh
c0F1dG9jb3JyZWN0ZWRNYXJrZXIoaQogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHRE
b2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICAKKworICAgIHVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQo
KTsKKwogICAgIHJldHVybiBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCkuc2VsZWN0aW9uU3Rh
cnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIGZyb20sIGxlbmd0
aCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkocmV2aXNpb24gMTY0
MzMwKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTY5LDYgKzE2OSw5IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBwYXJzZXJNZXRhRGF0
YShEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSA9IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCkpOwog
CisgICAgTm9kZSogZmluZEVkaXRpbmdEZWxldGVCdXR0b24oKTsKKyAgICB2b2lkIHVwZGF0ZUVk
aXRvclVJTm93SWZTY2hlZHVsZWQoKTsKKwogICAgIGJvb2wgaGFzU3BlbGxpbmdNYXJrZXIoaW50
IGZyb20sIGludCBsZW5ndGgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGhhc0dyYW1tYXJN
YXJrZXIoaW50IGZyb20sIGludCBsZW5ndGgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGhh
c0F1dG9jb3JyZWN0ZWRNYXJrZXIoaW50IGZyb20sIGludCBsZW5ndGgsIEV4Y2VwdGlvbkNvZGUm
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHJldmlzaW9uIDE2NDMz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkod29ya2luZyBjb3B5
KQpAQCAtMTI5LDYgKzEyOSwxMCBAQAogICAgIC8vIENhbGxpbmcgcGFyc2VyTWV0YURhdGEoKSB3
aXRoIG5vIGFyZ3VtZW50cyBnZXRzIHRoZSBtZXRhZGF0YSBmb3IgdGhlIHNjcmlwdCBvZiB0aGUg
Y3VycmVudCBzY29wZS4KICAgICBET01TdHJpbmcgcGFyc2VyTWV0YURhdGEob3B0aW9uYWwgYW55
IGZ1bmMpOwogCisgICAgdm9pZCB1cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7CisKKyAg
ICBOb2RlIGZpbmRFZGl0aW5nRGVsZXRlQnV0dG9uKCk7CisKICAgICBbUmFpc2VzRXhjZXB0aW9u
XSBib29sZWFuIGhhc1NwZWxsaW5nTWFya2VyKGxvbmcgZnJvbSwgbG9uZyBsZW5ndGgpOwogICAg
IFtSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gaGFzR3JhbW1hck1hcmtlcihsb25nIGZyb20sIGxv
bmcgbGVuZ3RoKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIGhhc0F1dG9jb3JyZWN0
ZWRNYXJrZXIobG9uZyBmcm9tLCBsb25nIGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24g
MTY0MzU3KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNCBAQAorMjAxNC0wMi0xOCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
KworICAgICAgICBDaGFuZ2luZyBzZWxlY3Rpb24gc2hvdWxkbid0IHN5bmNocm9ub3VzbHkgdXBk
YXRlIGVkaXRvciBVSSBjb21wb25lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjkwMjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBzeW1ib2xzIGZvciBpbnRlcm5hbHMuCisKKyAgICAgICAg
KiBXZWJLaXQudmN4cHJvai9XZWJLaXRFeHBvcnRHZW5lcmF0b3IvV2ViS2l0RXhwb3J0cy5kZWYu
aW46CisKIDIwMTQtMDItMTcgIFNlcmdpbyBDb3JyZWlhICA8c2VyZ2lvLmNvcnJlaWFAb3BlbmJv
c3NhLm9yZz4KIAogICAgICAgICBSZXBsYWNlIHVzZXMgb2YgUGFzc093blB0ci9Pd25QdHIgd2l0
aCBzdGQ6OnVuaXF1ZV9wdHIgaW4gV2ViQ29yZS9pbnNwZWN0b3IKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0RXhwb3J0R2VuZXJhdG9yL1dlYktpdEV4cG9ydHMuZGVm
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0RXhw
b3J0R2VuZXJhdG9yL1dlYktpdEV4cG9ydHMuZGVmLmluCShyZXZpc2lvbiAxNjQzMzApCisrKyBT
b3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdEV4cG9ydEdlbmVyYXRvci9XZWJLaXRF
eHBvcnRzLmRlZi5pbgkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCw3IEBAIEVYUE9SVFMK
ICAgICAgICAgc3ltYm9sV2l0aFBvaW50ZXIoP2dhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJj
ZXNAQ2FjaGVkUmVzb3VyY2VMb2FkZXJAV2ViQ29yZUBAUUFFWFhaLCA/Z2FyYmFnZUNvbGxlY3RE
b2N1bWVudFJlc291cmNlc0BDYWNoZWRSZXNvdXJjZUxvYWRlckBXZWJDb3JlQEBRRUFBWFhaKQog
ICAgICAgICBzeW1ib2xXaXRoUG9pbnRlcig/Z2V0Q2FjaGVkRE9NU3RydWN0dXJlQFdlYkNvcmVA
QFlBUEFWU3RydWN0dXJlQEpTQ0BAUEFWSlNET01HbG9iYWxPYmplY3RAMUBQQlVDbGFzc0luZm9A
M0BAWiwgP2dldENhY2hlZERPTVN0cnVjdHVyZUBXZWJDb3JlQEBZQVBFQVZTdHJ1Y3R1cmVASlND
QEBQRUFWSlNET01HbG9iYWxPYmplY3RAMUBQRUJVQ2xhc3NJbmZvQDNAQFopCiAgICAgICAgIHN5
bWJvbFdpdGhQb2ludGVyKD9nZXREYXRhMTZTbG93Q2FzZUBTdHJpbmdJbXBsQFdURkBAQUJFUEJf
V1haLCA/Z2V0RGF0YTE2U2xvd0Nhc2VAU3RyaW5nSW1wbEBXVEZAQEFFQkFQRUJfV1haKQorICAg
ICAgICBzeW1ib2xXaXRoUG9pbnRlcig/Z2V0RWxlbWVudEJ5SWRAVHJlZVNjb3BlQFdlYkNvcmVA
QFFCRVBBVkVsZW1lbnRAMkBBQlZBdG9taWNTdHJpbmdAV1RGQEBAWikKICAgICAgICAgc3ltYm9s
V2l0aFBvaW50ZXIoP2dldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlQFRleHRJdGVyYXRvckBX
ZWJDb3JlQEBTQV9OUEFWTm9kZUAyQFBCVlJhbmdlQDJAQUFJMkBaLCA/Z2V0TG9jYXRpb25BbmRM
ZW5ndGhGcm9tUmFuZ2VAVGV4dEl0ZXJhdG9yQFdlYkNvcmVAQFNBX05QRUFWTm9kZUAyQFBFQlZS
YW5nZUAyQEFFQV9LMkBaKQogICAgICAgICBzeW1ib2xXaXRoUG9pbnRlcig/aGl0VGVzdEBSZW5k
ZXJWaWV3QFdlYkNvcmVAQFFBRV9OQUJWSGl0VGVzdFJlcXVlc3RAMkBBQVZIaXRUZXN0UmVzdWx0
QDJAQFosID9oaXRUZXN0QFJlbmRlclZpZXdAV2ViQ29yZUBAUUVBQV9OQUVCVkhpdFRlc3RSZXF1
ZXN0QDJAQUVBVkhpdFRlc3RSZXN1bHRAMkBAWikKICAgICAgICAgP2lucHV0VGFnQEhUTUxOYW1l
c0BXZWJDb3JlQEAzVlF1YWxpZmllZE5hbWVAMkBCCkBAIC0zMjMsNiArMzI0LDcgQEAgRVhQT1JU
UwogICAgICAgICBzeW1ib2xXaXRoUG9pbnRlcig/dG9KU0BXZWJDb3JlQEBZQT9BVkpTVmFsdWVA
SlNDQEBQQVZFeGVjU3RhdGVAM0BQQVZKU0RPTUdsb2JhbE9iamVjdEAxQFBBVk5vZGVMaXN0QDFA
QFosID90b0pTQFdlYkNvcmVAQFlBP0FWSlNWYWx1ZUBKU0NAQFBFQVZFeGVjU3RhdGVAM0BQRUFW
SlNET01HbG9iYWxPYmplY3RAMUBQRUFWTm9kZUxpc3RAMUBAWikKICAgICAgICAgc3ltYm9sV2l0
aFBvaW50ZXIoP3RvUmFuZ2VAV2ViQ29yZUBAWUFQQVZSYW5nZUAxQFZKU1ZhbHVlQEpTQ0BAQFos
ID90b1JhbmdlQFdlYkNvcmVAQFlBUEVBVlJhbmdlQDFAVkpTVmFsdWVASlNDQEBAWikKICAgICAg
ICAgc3ltYm9sV2l0aFBvaW50ZXIoP2lzVHJlZVNjb3BlQE5vZGVAV2ViQ29yZUBAUUJFX05YWiwg
P2lzVHJlZVNjb3BlQE5vZGVAV2ViQ29yZUBAUUVCQV9OWFopCisgICAgICAgIHN5bWJvbFdpdGhQ
b2ludGVyKD91cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkQEVkaXRvckBXZWJDb3JlQEBRQUVY
WFopCiAgICAgICAgIHN5bWJvbFdpdGhQb2ludGVyKD91cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5n
U3R5bGVzaGVldHNARG9jdW1lbnRAV2ViQ29yZUBAUUFFWFhaLCA/dXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzQERvY3VtZW50QFdlYkNvcmVAQFFFQUFYWFopCiAgICAgICAgIHN5
bWJvbFdpdGhQb2ludGVyKD91cGRhdGVTdHlsZUlmTmVlZGVkQERvY3VtZW50QFdlYkNvcmVAQFFB
RVhYWiwgP3VwZGF0ZVN0eWxlSWZOZWVkZWRARG9jdW1lbnRAV2ViQ29yZUBAUUVBQVhYWikKICAg
ICAgICAgc3ltYm9sV2l0aFBvaW50ZXIoP3ZpZXdARG9jdW1lbnRAV2ViQ29yZUBAUUJFUEFWRnJh
bWVWaWV3QDJAWFosID92aWV3QERvY3VtZW50QFdlYkNvcmVAQFFFQkFQRUFWRnJhbWVWaWV3QDJA
WFopCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjQzNTIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMCBAQAorMjAxNC0wMi0xOCAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBDaGFuZ2luZyBzZWxlY3Rpb24gc2hvdWxk
bid0IHN5bmNocm9ub3VzbHkgdXBkYXRlIGVkaXRvciBVSSBjb21wb25lbnRzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkwMjQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYW55IHRlc3RzIG5vdyBjYWxs
cyBpbnRlcm5hbHMudXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpIHRvIHVwZGF0ZSB0aGUg
c3BlbGxjaGVja2VyIHN0YXRlcywgYW5kIHVzZXMKKyAgICAgICAgc2V0VGltZW91dCgpIHRvIG1h
a2UgdGhpbmdzIHRlc3RhYmxlIGluIHRoZSBicm93c2VyLgorCisgICAgICAgICogZWRpdGluZy9z
cGVsbGluZy9zY3JpcHQtdGVzdHMvc3BlbGxpbmctYmFja3NwYWNlLWJldHdlZW4tbGluZXMuanM6
CisgICAgICAgICh0ZXN0VHdvTGluZXNNaXNzcGVsbGluZ3MpOiBVc2VzIHVwZGF0ZUVkaXRvclVJ
Tm93SWZTY2hlZHVsZWQgYW5kIHNldFRpbWVvdXQgdG8gbWFrZSBzcGVsbGNoZWNrZXIgcmVjb2du
aXplCisgICAgICAgIHR3byBzZWxlY3Rpb24gY2hhbmdlcy4gVGhpcyBpcyBva2F5IHNpbmNlIHRo
ZSB1c2VyIG5ldmVyIG1vdmVzIHNlbGVjdGlvbiBtdWx0aXBsZSB0aW1lcyBpbiBhIHNpbmdsZSB0
YXNrLgorICAgICAgICAqIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1hdHRyaWJ1dGUuaHRt
bDogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZWRpdGluZy9kZWxldGluZy9kZWxl
dGlvblVJLWNsaWNrLW9uLWRlbGV0ZS1idXR0b24uaHRtbDogVXNlIGludGVuYWxzLmZpbmRFZGl0
aW5nRGVsZXRlQnV0dG9uCisgICAgICAgIHdoaWNoIHVwZGF0ZXMgZGVsZXRlIGJ1dHRvbiBjb250
cm9sbGVyIHN0YXRlcyBzeW5jaHJvbm91c2x5IGluc3RlYWQgb2YgZ2V0RWxlbWVudEJ5SWQgd2hp
Y2ggZG9lc24ndCBkbyB0aGF0LgorICAgICAgICAqIHBsYXRmb3JtL21hYy9lZGl0aW5nL2RlbGV0
aW5nL2lkLWluLWRlbGV0ZWJ1dHRvbi1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0v
bWFjL2VkaXRpbmcvZGVsZXRpbmcvaWQtaW4tZGVsZXRlYnV0dG9uLmh0bWw6IERpdHRvLiBBbHNv
IGRpZCBzb21lIGNsZWFudXBzLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9lZGl0aW5nL2RlbGV0
aW5nL3Jlc291cmNlcy9kZWxldGlvblVJLWhlbHBlcnMuanM6CisgICAgICAgIChkZWxldGlvblVJ
RGVsZXRlQnV0dG9uRm9yRWxlbWVudCk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vbWFj
L2VkaXRpbmcvc3BlbGxpbmcvZWRpdGluZy13b3JkLXdpdGgtbWFya2VyLTEuaHRtbDogQWdhaW4s
IHdlIG11c3Qgbm90aWZ5IHRoZSBzcGVsbGNoZWNrZXIKKyAgICAgICAgc3luY2hyb25vdXNseSBo
ZXJlIGJlY2F1c2Ugd2UncmUgZXhwZWN0aW5nIHNwZWxsY2hlY2tlciB0byB1c2UgdGhlIG9sZCBz
ZWxlY3Rpb24gc2V0IGJ5IHNldFNlbGVjdGlvblJhbmdlCisgICAgICAgIGluIEVkaXRvcjo6ZWRp
dG9yVUlVcGRhdGVUaW1lckZpcmVkIHRyaWdnZXJlZCBieSB0aGUgcGFzdGluZyBjb21tYW5kLiBU
aGlzIGlzLCBhZ2Fpbiwgbm90IGEgcHJvYmxlbSBpbgorICAgICAgICBwcmFjdGljZSBzaW5jZSB1
c2VyIG5ldmVyIHBhc3RlcyBjb250ZW50IHN5bmNocm9ub3VzbHkgYWZ0ZXIgY2hhbmdpbmcgc2Vs
ZWN0aW9uIGxpa2UgdGhpcyBpbiBhIHNpbmdsZSB0YXNrLgorCiAyMDE0LTAyLTE4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIE1vcmUgV2luZG93cyB0ZXN0
IGdhcmRlbmluZyB0byBnZXQgdGhlIGJvdHMgZ3JlZW4uCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0
aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stYXR0cmlidXRlLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLWF0dHJpYnV0ZS5odG1sCShyZXZp
c2lvbiAxNjQzMzApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2st
YXR0cmlidXRlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDE0ICs0OCwxOCBAQCBmdW5jdGlv
biB0ZXN0TWFya2VyRm9yTWlzc3BlbGxlZFdvcmQocGFyCiAgICAgdmFyIGlucHV0ID0gYWRkSW5w
dXRFbGVtZW50KHBhcmVudElkLCBpZCwgdHlwZSwgc3BlbGxjaGVjayk7CiAgICAgaW5wdXQuZm9j
dXMoKTsKICAgICAvLyBBY3RpdmF0ZSBzcGVsbGNoZWNraW5nLgotICAgIG1vdmVTZWxlY3Rpb25G
b3J3YXJkQnlXb3JkQ29tbWFuZCgpOworICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAg
ICBpbnRlcm5hbHMudXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOworICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24gKCkgeworICAgICAgICBtb3ZlU2VsZWN0aW9uRm9yd2FyZEJ5V29yZENvbW1h
bmQoKTsKIAotICAgIGxvZ01hcmt1cChpZCwgc3BlbGxjaGVjaywgdHJ1ZSk7CisgICAgICAgIGxv
Z01hcmt1cChpZCwgc3BlbGxjaGVjaywgdHJ1ZSk7CiAKLSAgICBpZiAod2luZG93LmludGVybmFs
cykKLSAgICAgICAgc2hvdWxkQmVjb21lRXF1YWwoJ2ludGVybmFscy5oYXNTcGVsbGluZ01hcmtl
cigwLCAyKScsIHNob3VsZEJlTWlzc3BlbGxlZCA/ICd0cnVlJyA6ICdmYWxzZScsIGRvbmUpOwot
ICAgIGVsc2UKLSAgICAgICAgZG9uZSgpOworICAgICAgICBpZiAod2luZG93LmludGVybmFscykK
KyAgICAgICAgICAgIHNob3VsZEJlY29tZUVxdWFsKCdpbnRlcm5hbHMuaGFzU3BlbGxpbmdNYXJr
ZXIoMCwgMiknLCBzaG91bGRCZU1pc3NwZWxsZWQgPyAndHJ1ZScgOiAnZmFsc2UnLCBkb25lKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZG9uZSgpOworICAgIH0sIDEwKTsKIH0KIAogZnVu
Y3Rpb24gbG9nTWFya3VwKGlkLCBzcGVsbGNoZWNrVmFsdWUsIHNob3VsZENsb3NlVGFnKQpJbmRl
eDogTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zY3JpcHQtdGVzdHMvc3BlbGxpbmctYmFj
a3NwYWNlLWJldHdlZW4tbGluZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGlu
Zy9zcGVsbGluZy9zY3JpcHQtdGVzdHMvc3BlbGxpbmctYmFja3NwYWNlLWJldHdlZW4tbGluZXMu
anMJKHJldmlzaW9uIDE2NDMzMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc2Ny
aXB0LXRlc3RzL3NwZWxsaW5nLWJhY2tzcGFjZS1iZXR3ZWVuLWxpbmVzLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0zMywxNSArMzMsMTkgQEAgZnVuY3Rpb24gdGVzdFR3b0xpbmVzTWlzc3BlbGxpbmdz
KCkKICAgICB3aW5kb3cuc2VsID0gc2V0dXAoInRhcmdldDEiKTsgLy8gXk9LCiAKICAgICBzZWwu
bW9kaWZ5KCJtb3ZlIiwgImZvcndhcmQiLCAibGluZSIpOyAvLyBeT0sgenogT0sKLSAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDM7IGkrKykKLSAgICAgICAgc2VsLm1vZGlmeSgibW92ZSIsICJmb3J3
YXJkIiwgIndvcmQiKTsKLQotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiZmlyc3RMaW5lVGV4
dCgndGFyZ2V0MScpIiwgIk9LIik7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJzZWwuYW5j
aG9yTm9kZS5kYXRhIiwgIk9LIHp6IE9LIik7CiAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCi0g
ICAgICAgIHNob3VsZEJlY29tZUVxdWFsKCJpbnRlcm5hbHMuaGFzU3BlbGxpbmdNYXJrZXIoMywg
MikiLCAidHJ1ZSIsIGRvbmUpOwotICAgIGVsc2UKLSAgICAgICAgZG9uZSgpOworICAgICAgICBp
bnRlcm5hbHMudXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOworICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykKKyAgICAg
ICAgICAgIHNlbC5tb2RpZnkoIm1vdmUiLCAiZm9yd2FyZCIsICJ3b3JkIik7CisKKyAgICAgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJmaXJzdExpbmVUZXh0KCd0YXJnZXQxJykiLCAiT0siKTsK
KyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJzZWwuYW5jaG9yTm9kZS5kYXRhIiwgIk9L
IHp6IE9LIik7CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICAgICAgc2hv
dWxkQmVjb21lRXF1YWwoImludGVybmFscy5oYXNTcGVsbGluZ01hcmtlcigzLCAyKSIsICJ0cnVl
IiwgZG9uZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRvbmUoKTsKKyAgICB9LCAxMDAp
OwogfQogCiBmdW5jdGlvbiB0ZXN0TWlzc3BlbGxpbmdzQWZ0ZXJMaW5lTWVyZ2VVc2luZ0RlbGV0
ZSgpCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9kZWxldGluZy9kZWxl
dGlvblVJLWNsaWNrLW9uLWRlbGV0ZS1idXR0b24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9kZWxldGluZy9kZWxldGlvblVJLWNsaWNrLW9uLWRl
bGV0ZS1idXR0b24uaHRtbAkocmV2aXNpb24gMTY0MzMwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2VkaXRpbmcvZGVsZXRpbmcvZGVsZXRpb25VSS1jbGljay1vbi1kZWxldGUtYnV0dG9u
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE0LDEzICsxNCwxMyBAQCBsaSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJsaSIpOwogc2VsLnNldFBvc2l0aW9uKGxpLCAwKTsKIAogaWYgKHdpbmRv
dy50ZXN0UnVubmVyKSB7Ci0gICAgZGVsZXRlQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoIldlYktpdC1FZGl0aW5nLURlbGV0ZS1CdXR0b24iKTsKKyAgICBkZWxldGVCdXR0b24gPSBp
bnRlcm5hbHMuZmluZEVkaXRpbmdEZWxldGVCdXR0b24oKTsKICAgICB4ID0gZGVsZXRlQnV0dG9u
Lm9mZnNldFBhcmVudC5vZmZzZXRMZWZ0ICsgZGVsZXRlQnV0dG9uLm9mZnNldFBhcmVudC5vZmZz
ZXRQYXJlbnQub2Zmc2V0TGVmdCArIGRlbGV0ZUJ1dHRvbi5vZmZzZXRMZWZ0ICsgZGVsZXRlQnV0
dG9uLm9mZnNldFdpZHRoIC8gMjsKICAgICB5ID0gZGVsZXRlQnV0dG9uLm9mZnNldFBhcmVudC5v
ZmZzZXRUb3AgKyBkZWxldGVCdXR0b24ub2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudC5vZmZzZXRU
b3AgKyBkZWxldGVCdXR0b24ub2Zmc2V0VG9wICsgZGVsZXRlQnV0dG9uLm9mZnNldEhlaWdodCAv
IDI7CiAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oeCwgeSk7CiAgICAgZXZlbnRTZW5kZXIu
bW91c2VEb3duKCk7CiAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOwotICAgIGRlbGV0ZUJ1dHRv
biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJXZWJLaXQtRWRpdGluZy1EZWxldGUtQnV0dG9u
Iik7CisgICAgZGVsZXRlQnV0dG9uID0gaW50ZXJuYWxzLmZpbmRFZGl0aW5nRGVsZXRlQnV0dG9u
KCk7CiAgICAgdGVzdENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0Iik7
CiAgICAgTWFya3VwLmRlc2NyaXB0aW9uKCJUaGVyZSBzaG91bGQgYmUgbm8gdmlzaWJsZSBjb250
ZW50IGluIHRoZSBtYXJrdXAgYmVsb3cuIFRoaXMgdGVzdCBpcyBmb3IgYSBidWcgd2hlcmUgdGhl
IGRlbGV0ZSBidXR0b24gd291bGRuJ3Qgd29yayBiZWNhdXNlIGl0IGhhZCAtd2Via2l0LXVzZXIt
c2VsZWN0Om5vbmUgaW5zdGVhZCBvZiAtd2Via2l0LXVzZXItc2VsZWN0Omlnbm9yZS4iKTsKICAg
ICBpZiAoZGVsZXRlQnV0dG9uKQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRp
bmcvZGVsZXRpbmcvaWQtaW4tZGVsZXRlYnV0dG9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9kZWxldGluZy9pZC1pbi1kZWxldGVi
dXR0b24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNjQzMzApCisrKyBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvZWRpdGluZy9kZWxldGluZy9pZC1pbi1kZWxldGVidXR0b24tZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQCBUZXN0IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJXZWJLaXQtRWRpCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotUEFTUyBkZWxl
dGVCdXR0b24gaXMgbm9uLW51bGwuCitQQVNTIGludGVybmFscy5maW5kRWRpdGluZ0RlbGV0ZUJ1
dHRvbigpOyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiV2ViS2l0LUVkaXRpbmctRGVsZXRlLUJ1
dHRvbiIpIGlzIG5vbi1udWxsLgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBU
RVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9kZWxl
dGluZy9pZC1pbi1kZWxldGVidXR0b24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvZWRpdGluZy9kZWxldGluZy9pZC1pbi1kZWxldGVidXR0b24uaHRtbAkocmV2
aXNpb24gMTY0MzMwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvZGVsZXRp
bmcvaWQtaW4tZGVsZXRlYnV0dG9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIgKzEsOCBA
QAogPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgogPGJvZHk+Ci0KIDxkaXYgY29udGVudGVk
aXRhYmxlPSJ0cnVlIj4KIDx1bCBjbGFzcz0ibmVlZHNEZWxldGlvblVJIj48bGk+MTwvbGk+PGxp
IGlkPSJsaSI+MjwvbGk+PC91bD4KLQorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogZGVzY3JpcHRpb24oJ1Rlc3Qg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIldlYktpdC1FZGl0aW5nLURlbGV0ZS1CdXR0b24iKScp
OwogCkBAIC0xNCwxMCArMTAsMTEgQEAgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogbGkg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibGkiKTsKIHNlbC5zZXRQb3NpdGlvbihsaSwgMCk7
CiAKLWlmICh3aW5kb3cudGVzdFJ1bm5lcikgewotICAgIGRlbGV0ZUJ1dHRvbiA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJXZWJLaXQtRWRpdGluZy1EZWxldGUtQnV0dG9uIik7Ci0gICAgc2hv
dWxkQmVOb25OdWxsKCdkZWxldGVCdXR0b24nKTsKLX0KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICBzaG91bGRCZU5vbk51bGwoJ2ludGVybmFscy5maW5kRWRpdGluZ0RlbGV0ZUJ1dHRvbigp
OyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiV2ViS2l0LUVkaXRpbmctRGVsZXRlLUJ1dHRvbiIp
Jyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCiA8L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSIuLi8uLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
IDwvYm9keT4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL2RlbGV0aW5n
L3Jlc291cmNlcy9kZWxldGlvblVJLWhlbHBlcnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvZGVsZXRpbmcvcmVzb3VyY2VzL2RlbGV0aW9uVUktaGVs
cGVycy5qcwkocmV2aXNpb24gMTY0MzMwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Vk
aXRpbmcvZGVsZXRpbmcvcmVzb3VyY2VzL2RlbGV0aW9uVUktaGVscGVycy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTAsMTEgKzEwLDEyIEBAIGZ1bmN0aW9uIGRlYnVnKG1zZykKIAogZnVuY3Rpb24g
ZGVsZXRpb25VSURlbGV0ZUJ1dHRvbkZvckVsZW1lbnQoaWQpCiB7CisgICAgaWYgKCF3aW5kb3cu
aW50ZXJuYWxzKQorICAgICAgICByZXR1cm4gbnVsbDsKICAgICB2YXIgc2VsID0gd2luZG93Lmdl
dFNlbGVjdGlvbigpOwogICAgIHZhciBzZWxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoaWQpOwogICAgIHNlbC5zZXRQb3NpdGlvbihzZWxFbGVtZW50LCAwKTsKLSAgICB2YXIgZGVs
ZXRlQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIldlYktpdC1FZGl0aW5nLURlbGV0
ZS1CdXR0b24iKTsKLSAgICByZXR1cm4gZGVsZXRlQnV0dG9uOworICAgIHJldHVybiBpbnRlcm5h
bHMuZmluZEVkaXRpbmdEZWxldGVCdXR0b24oKTsKIH0KIAogZnVuY3Rpb24gZGV0ZXJtaW5lRGVs
ZXRpb25VSUV4aXN0ZW5jZShpZCkKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0
aW5nL3NwZWxsaW5nL2VkaXRpbmctd29yZC13aXRoLW1hcmtlci0xLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvc3BlbGxpbmcvZWRpdGluZy13b3Jk
LXdpdGgtbWFya2VyLTEuaHRtbAkocmV2aXNpb24gMTY0MzMwKQorKysgTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL2VkaXRpbmcvc3BlbGxpbmcvZWRpdGluZy13b3JkLXdpdGgtbWFya2VyLTEuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDYgKzE0OCw4IEBAIHRleHRhcmVhID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3Rlc3QKIHRleHRhcmVhLnNldFNlbGVjdGlvblJhbmdlKDAsNCk7CiBl
eGVjQ29weUNvbW1hbmQoKTsKIHRleHRhcmVhLnNldFNlbGVjdGlvblJhbmdlKDE1LCAxNSk7Citp
ZiAod2luZG93LmludGVybmFscykKKyAgICBpbnRlcm5hbHMudXBkYXRlRWRpdG9yVUlOb3dJZlNj
aGVkdWxlZCgpOwogZXhlY1Bhc3RlQ29tbWFuZCgpOwogaWYgKHdpbmRvdy5pbnRlcm5hbHMgJiYg
d2luZG93LmludGVybmFscy5oYXNTcGVsbGluZ01hcmtlcikgewogICAgIGlmICh3aW5kb3cuaW50
ZXJuYWxzLmhhc1NwZWxsaW5nTWFya2VyKDcsOCkgPT0gMCkgewo=
</data>
<flag name="review"
          id="248691"
          type_id="1"
          status="+"
          setter="bfulgham"
    />
          </attachment>
      

    </bug>

</bugzilla>