<?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>176247</bug_id>
          
          <creation_ts>2017-09-01 15:29:13 -0700</creation_ts>
          <short_desc>AX: Provide a way for Accessibility to cache the selection while retrieving rects for speak selection</short_desc>
          <delta_ts>2017-10-19 16:34:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Nan Wang">n_wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>enrica</cc>
    
    <cc>n_wang</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1344616</commentid>
    <comment_count>0</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-09-01 15:29:13 -0700</bug_when>
    <thetext>_accessibilityRetrieveRectsAtSelectionOffset:withText: is problematic for speak selection since it would use the current selection as the search range. The rects would be wrong when a speak session is active and the user tries to select some other text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344617</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-01 15:29:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/34217143&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344649</commentid>
    <comment_count>2</comment_count>
      <attachid>319665</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-09-01 16:23:04 -0700</bug_when>
    <thetext>Created attachment 319665
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361020</commentid>
    <comment_count>3</comment_count>
      <attachid>323958</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-10-16 16:58:14 -0700</bug_when>
    <thetext>Created attachment 323958
patch

merge with TOT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361239</commentid>
    <comment_count>4</comment_count>
      <attachid>323958</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-10-17 08:39:12 -0700</bug_when>
    <thetext>Comment on attachment 323958
patch

Can someone take a look? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362006</commentid>
    <comment_count>5</comment_count>
      <attachid>323958</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-18 18:55:56 -0700</bug_when>
    <thetext>Comment on attachment 323958
patch

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

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:1893
&gt; +void WebPage::cacheSelectionForAccessibility(bool shouldCache)

I don&apos;t think we should call this a &quot;cache&quot; since what we&apos;re doing here is to save the selection at the time of invocation.
A better name might be like storeSelectionForAccessibility or freezeSelectionForAccessibility.

There is an alternative approach which is to expose some sort of opaque object like WKWebViewSelection
and then add a new variant of getRectsForGranularityWithSelectionOffset which takes that opaque object
and computes the correct rect but that might be a bit of an overkill for this particular bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362007</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-18 18:57:03 -0700</bug_when>
    <thetext>By the way, feel free to email my webkit.org or apple.com email address if you need a code review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362153</commentid>
    <comment_count>7</comment_count>
      <attachid>323958</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-10-19 08:42:51 -0700</bug_when>
    <thetext>Comment on attachment 323958
patch

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

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:1893
&gt;&gt; +void WebPage::cacheSelectionForAccessibility(bool shouldCache)
&gt; 
&gt; I don&apos;t think we should call this a &quot;cache&quot; since what we&apos;re doing here is to save the selection at the time of invocation.
&gt; A better name might be like storeSelectionForAccessibility or freezeSelectionForAccessibility.
&gt; 
&gt; There is an alternative approach which is to expose some sort of opaque object like WKWebViewSelection
&gt; and then add a new variant of getRectsForGranularityWithSelectionOffset which takes that opaque object
&gt; and computes the correct rect but that might be a bit of an overkill for this particular bug.

Thanks for the alternative approach! But for this particular bug I think it&apos;s more straightforward to go with the current approach and it&apos;s easier for the iOS assistive technology to adapt the changes.
I will rename them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362154</commentid>
    <comment_count>8</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-10-19 08:43:08 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #6)
&gt; By the way, feel free to email my webkit.org or apple.com email address if
&gt; you need a code review.

Sure! Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362170</commentid>
    <comment_count>9</comment_count>
      <attachid>324241</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-10-19 09:31:06 -0700</bug_when>
    <thetext>Created attachment 324241
patch

rename</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362289</commentid>
    <comment_count>10</comment_count>
      <attachid>324241</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-19 13:29:30 -0700</bug_when>
    <thetext>Comment on attachment 324241
patch

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

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:2313
&gt; +- (void)_accessibilityStoreSelection:(BOOL)shouldStore
&gt; +{
&gt; +    _page-&gt;storeSelectionForAccessibility(shouldStore);
&gt; +}

Maybe it&apos;s better to add _accessibilityClearSelection instead of making this method take a bool
It&apos;s kind of weird to say _accessibilityStoreSelection: FALSE.
It sounds as if we&apos;re going to not store selection in the future instead of the call directly clearing what&apos;s already been stored.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362300</commentid>
    <comment_count>11</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-10-19 13:41:21 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #10)
&gt; Comment on attachment 324241 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=324241&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:2313
&gt; &gt; +- (void)_accessibilityStoreSelection:(BOOL)shouldStore
&gt; &gt; +{
&gt; &gt; +    _page-&gt;storeSelectionForAccessibility(shouldStore);
&gt; &gt; +}
&gt; 
&gt; Maybe it&apos;s better to add _accessibilityClearSelection instead of making this
&gt; method take a bool
&gt; It&apos;s kind of weird to say _accessibilityStoreSelection: FALSE.
&gt; It sounds as if we&apos;re going to not store selection in the future instead of
&gt; the call directly clearing what&apos;s already been stored.

Ok I will make another patch to address this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362360</commentid>
    <comment_count>12</comment_count>
      <attachid>324294</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-10-19 14:43:51 -0700</bug_when>
    <thetext>Created attachment 324294
patch to land

update from review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362361</commentid>
    <comment_count>13</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-10-19 14:45:10 -0700</bug_when>
    <thetext>I want to make sure tests are still passing. 
Ryosuke, can you take a quick look again? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362440</commentid>
    <comment_count>14</comment_count>
      <attachid>324294</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-19 16:34:20 -0700</bug_when>
    <thetext>Comment on attachment 324294
patch to land

Clearing flags on attachment: 324294

Committed r223726: &lt;https://trac.webkit.org/changeset/223726&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362441</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-19 16:34:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319665</attachid>
            <date>2017-09-01 16:23:04 -0700</date>
            <delta_ts>2017-10-16 16:58:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>13560</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjE0NjEpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE3LTA5LTAxICBOYW4gV2FuZyAg
PG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFByb3ZpZGUgYSB3YXkgZm9yIEFjY2Vz
c2liaWxpdHkgdG8gY2FjaGUgdGhlIHNlbGVjdGlvbiB3aGlsZSByZXRyaWV2aW5nIHJlY3RzIGZv
ciBzcGVhayBzZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NjI0NworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzQyMTcxNDM+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBnZXR0aW5n
IHRoZSByZWN0cyBmb3IgaGlnaGxpZ2h0aW5nIHRoZSBzcG9rZW4gdGV4dCB3aXRoaW4gYSBzZWxl
Y3Rpb24gcmFuZ2Ugb24gaU9TLCB3ZSBjYW4gZ2V0IGEKKyAgICAgICAgbGlzdCBvZiB0b3RhbGx5
IHdyb25nIHJlY3RzIGlmIHRoZSB1c2VyIGNoYW5nZWQgdGhlIHNlbGVjdGlvbiB0byBzb21lIG90
aGVyIHRleHQuIFRoaXMgaXMgYmVjYXVzZSB0aGUgCisgICAgICAgIGNhbGN1bGF0aW9uIGlzIGJh
c2VkIG9uIHRoZSBjdXJyZW50IHNlbGVjdGlvbiByYW5nZS4gVGhlcmVmb3JlLCB3ZSBuZWVkIHRv
IHByb3ZpZGUgYSB3YXkgZm9yIGFjY2Vzc2liaWxpdHkKKyAgICAgICAgY29kZXBhdGggdG8gY2Fj
aGUgdGhlIHNlbGVjdGlvbiBkdXJpbmcgYSBzcGVha2luZyBzZXNzaW9uLgorCisgICAgICAgIFRl
c3RzOiBBY2Nlc3NpYmlsaXR5VGVzdHMuQ2FjaGVTZWxlY3Rpb24KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FjY2Vz
c2liaWxpdHlDYWNoZVNlbGVjdGlvbjpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlld1ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAg
ICAgKC1bV0tDb250ZW50VmlldyBfYWNjZXNzaWJpbGl0eUNhY2hlU2VsZWN0aW9uOl0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmNhY2hlU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFJlY3RzRm9y
R3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6Y2FjaGVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6Z2V0UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhUZXh0KToKKwogMjAxNy0wOC0zMSAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIChlbnRpcmVs
eSBpbmNvcnJlY3QpIGZldGNoaW5nIG9mIFNlcnZpY2VXb3JrZXIgc2NyaXB0cy4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyMjE0NjEpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
NTU4LDYgKzU1OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzU2Nyb2xsaW5nT3Jab29taW5n
KGJvb2wpOwogICAgIHZvaWQgcmVxdWVzdFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9u
T2Zmc2V0KFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwgdWludDMyX3Qgb2Zmc2V0LCBXVEY6OkZ1
bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiwgQ2FsbGJh
Y2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZvaWQgcmVxdWVzdFJlY3RzQXRTZWxlY3Rpb25PZmZz
ZXRXaXRoVGV4dChpbnQzMl90IG9mZnNldCwgY29uc3QgU3RyaW5nJiwgV1RGOjpGdW5jdGlvbjx2
b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYsIENhbGxiYWNrQmFzZTo6
RXJyb3IpPiYmKTsKKyAgICB2b2lkIGNhY2hlU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eShib29s
KTsKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKICAgICB2b2lkIGRpZFBlcmZvcm1EYXRh
SW50ZXJhY3Rpb25Db250cm9sbGVyT3BlcmF0aW9uKGJvb2wgaGFuZGxlZCk7CiAgICAgdm9pZCBk
aWRIYW5kbGVTdGFydERhdGFJbnRlcmFjdGlvblJlcXVlc3QoYm9vbCBzdGFydGVkKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkocmV2
aXNpb24gMjIxNDYxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTQyNiw2ICs1NDI2LDExIEBAIC0gKHZvaWQpX2Fj
Y2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWwKICAgICB9XTsKIH0KIAorLSAodm9pZClfYWNj
ZXNzaWJpbGl0eUNhY2hlU2VsZWN0aW9uOihCT09MKXNob3VsZENhY2hlCit7CisgICAgW19jb250
ZW50VmlldyBfYWNjZXNzaWJpbGl0eUNhY2hlU2VsZWN0aW9uOnNob3VsZENhY2hlXTsKK30KKwog
LSAoQ0dSZWN0KV9jb250ZW50VmlzaWJsZVJlY3QKIHsKICAgICByZXR1cm4gW3NlbGYgY29udmVy
dFJlY3Q6W3NlbGYgYm91bmRzXSB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
d1ByaXZhdGUuaAkocmV2aXNpb24gMjIxNDYxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzc4LDYgKzM3
OCw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0ltbWVkaWF0ZUEKIAogLSAodm9p
ZClfcmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRBdFBvc2l0aW9uOihDR1BvaW50KXBvc2l0aW9uIGNv
bXBsZXRpb25CbG9jazoodm9pZCAoXikoX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKikpYmxvY2sg
V0tfQVBJX0FWQUlMQUJMRShpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfYWNjZXNzaWJpbGl0
eVJldHJpZXZlUmVjdHNBdFNlbGVjdGlvbk9mZnNldDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4
dDooTlNTdHJpbmcgKil0ZXh0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PE5T
VmFsdWUgKj4gKnJlY3RzKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKGlvcyhX
S19JT1NfVEJBKSk7CistICh2b2lkKV9hY2Nlc3NpYmlsaXR5Q2FjaGVTZWxlY3Rpb246KEJPT0wp
c2hvdWxkQ2FjaGUgV0tfQVBJX0FWQUlMQUJMRShpb3MoV0tfSU9TX1RCQSkpOwogCiAjZW5kaWYg
Ly8gVEFSR0VUX09TX0lQSE9ORQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCShyZXZpc2lvbiAyMjE0NjEp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzNSw2ICszMzUsNyBAQCBGT1JfRUFDSF9XS0NPTlRFTlRW
SUVXX0FDVElPTihERUNMQVJFX1dLCiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0
c0VuY2xvc2luZ1NlbGVjdGlvbk9mZnNldDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoR3JhbnVsYXJp
dHk6KFVJVGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5OwogLSAodm9pZClfYWNjZXNzaWJpbGl0
eVJldHJpZXZlUmVjdHNBdFNlbGVjdGlvbk9mZnNldDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4
dDooTlNTdHJpbmcgKil0ZXh0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShjb25zdCBWZWN0
b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4mIHJlY3RzKSljb21wbGV0aW9uSGFuZGxlcjsKIC0g
KHZvaWQpX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6KE5TSW50
ZWdlcilvZmZzZXQgd2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dDsKKy0gKHZvaWQpX2FjY2Vzc2li
aWxpdHlDYWNoZVNlbGVjdGlvbjooQk9PTClzaG91bGRDYWNoZTsKIAogQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
IGN1cnJlbnRQb3NpdGlvbkluZm9ybWF0aW9uOwogLSAodm9pZClkb0FmdGVyUG9zaXRpb25JbmZv
cm1hdGlvblVwZGF0ZToodm9pZCAoXikoV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbikpYWN0aW9uIGZvclJlcXVlc3Q6KFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlv
blJlcXVlc3QpcmVxdWVzdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQkocmV2aXNpb24gMjIxNDYxKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjMwNyw2ICsyMzA3LDExIEBAIC0gKHZvaWQpX2FjY2Vzc2li
aWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWwKICAgICB9KTsKIH0KIAorLSAodm9pZClfYWNjZXNzaWJp
bGl0eUNhY2hlU2VsZWN0aW9uOihCT09MKXNob3VsZENhY2hlCit7CisgICAgX3BhZ2UtPmNhY2hl
U2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eShzaG91bGRDYWNoZSk7Cit9CisKIC8vIFVJV0tJbnRl
cmFjdGlvblZpZXdQcm90b2NvbAogCiBzdGF0aWMgaW5saW5lIEdlc3R1cmVUeXBlIHRvR2VzdHVy
ZVR5cGUoVUlXS0dlc3R1cmVUeXBlIGdlc3R1cmVUeXBlKQpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCShyZXZpc2lvbiAyMjE0NjEpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC03MjMsNiArNzIzLDExIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0UmVj
dHNBdFNlbGVjdGkKICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldFJl
Y3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChvZmZzZXQsIHRleHQsIGNhbGxiYWNrSUQpLCBt
X3BhZ2VJRCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpjYWNoZVNlbGVjdGlvbkZvckFjY2Vz
c2liaWxpdHkoYm9vbCBzaG91bGRDYWNoZSkKK3sKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkNhY2hlU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eShzaG91bGRDYWNoZSks
IG1fcGFnZUlEKTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6Om1vdmVTZWxlY3Rpb25CeU9mZnNl
dChpbnQzMl90IG9mZnNldCwgV1RGOjpGdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9y
KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewogICAgIGlmICghaXNWYWxpZCgpKSB7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiAyMjE0
NjEpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTk1LDYgKzk1LDcgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CisjaW5jbHVkZSA8V2ViQ29yZS9WaXNpYmxlU2VsZWN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgogT0JKQ19DTEFTUyBDQUxheWVyOwogT0JKQ19DTEFTUyBOU0FycmF5OwpAQCAt
MTM2LDcgKzEzNyw2IEBAIGNsYXNzIFN1YnN0aXR1dGVEYXRhOwogY2xhc3MgVGV4dENoZWNraW5n
UmVxdWVzdDsKIGNsYXNzIFVSTDsKIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKLWNsYXNzIFZpc2li
bGVTZWxlY3Rpb247CiBlbnVtIGNsYXNzIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0
aW9uIDogdWludDhfdDsKIGVudW0gU3ludGhldGljQ2xpY2tUeXBlIDogaW50OF90Owogc3RydWN0
IENvbXBvc2l0aW9uVW5kZXJsaW5lOwpAQCAtNTgyLDYgKzU4Miw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGhhbmRsZVR3b0ZpbmdlclRhcEF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1
aW50NjRfdCByZXF1ZXN0SUQpOwogICAgIHZvaWQgZ2V0UmVjdHNGb3JHcmFudWxhcml0eVdpdGhT
ZWxlY3Rpb25PZmZzZXQodWludDMyX3QsIGludDMyX3QsIENhbGxiYWNrSUQpOwogICAgIHZvaWQg
Z2V0UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhUZXh0KGludDMyX3QsIGNvbnN0IFN0cmluZyYs
IENhbGxiYWNrSUQpOworICAgIHZvaWQgY2FjaGVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KGJv
b2wpOwogI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQogICAgIHZvaWQgZGlzcGF0Y2hBc3lu
Y2hyb25vdXNUb3VjaEV2ZW50cyhjb25zdCBWZWN0b3I8V2ViVG91Y2hFdmVudCwgMT4mIHF1ZXVl
KTsKICNlbmRpZgpAQCAtMTUxOCw2ICsxNTE5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYWxs
b3dzQmxvY2tTZWxlY3Rpb24geyBmYWxzZSB9OwogCiAgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdl
PiBtX2luaXRpYWxTZWxlY3Rpb247CisgICAgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiBtX2Nh
Y2hlZFNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkgeyBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9u
KCkgfTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fYmxvY2tTZWxlY3Rpb25EZXNpcmVkU2l6ZTsK
ICAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9tYXhpbXVtVW5vYnNjdXJlZFNpemU7CiAgICAgaW50
MzJfdCBtX2RldmljZU9yaWVudGF0aW9uIHsgMCB9OwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAy
MjE0NjEpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3Nh
Z2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC05Niw4ICs5Niw5IEBAIG1lc3NhZ2VzIC0+IFdlYlBh
Z2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIFNldEFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5
YmFjayhib29sIGFsbG93cykKICAgICBIYW5kbGVUd29GaW5nZXJUYXBBdFBvaW50KFdlYkNvcmU6
OkludFBvaW50IHBvaW50LCB1aW50NjRfdCByZXF1ZXN0SUQpCiAgICAgU2V0Rm9yY2VBbHdheXNV
c2VyU2NhbGFibGUoYm9vbCB1c2VyU2NhbGFibGUpCi0gICAgR2V0UmVjdHNGb3JHcmFudWxhcml0
eVdpdGhTZWxlY3Rpb25PZmZzZXQodWludDMyX3QgZ3JhbnVsYXJpdHksIGludDMyX3Qgb2Zmc2V0
LCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCk7Ci0gICAgR2V0UmVjdHNBdFNlbGVjdGlv
bk9mZnNldFdpdGhUZXh0KGludDMyX3Qgb2Zmc2V0LCBTdHJpbmcgdGV4dCwgV2ViS2l0OjpDYWxs
YmFja0lEIGNhbGxiYWNrSUQpOworICAgIEdldFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0
aW9uT2Zmc2V0KHVpbnQzMl90IGdyYW51bGFyaXR5LCBpbnQzMl90IG9mZnNldCwgV2ViS2l0OjpD
YWxsYmFja0lEIGNhbGxiYWNrSUQpCisgICAgR2V0UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhU
ZXh0KGludDMyX3Qgb2Zmc2V0LCBTdHJpbmcgdGV4dCwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxi
YWNrSUQpCisgICAgQ2FjaGVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KGJvb2wgc2hvdWxkQ2Fj
aGUpCiAjZW5kaWYKIAogICAgIFNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oYm9vbCBjb250cm9s
bGVkKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0JKHJldmlzaW9uIDIyMTQ2MSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODI5LDcg
KzE4MjksNyBAQCB2b2lkIFdlYlBhZ2U6Om1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQzCiB2b2lk
IFdlYlBhZ2U6OmdldFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0KHVpbnQz
Ml90IGdyYW51bGFyaXR5LCBpbnQzMl90IG9mZnNldCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQog
ewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9y
TWFpbkZyYW1lKCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1f
Y2FjaGVkU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eS5pc05vbmUoKSA/IGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpIDogbV9jYWNoZWRTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5OwogICAg
IFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQo
KTsKIAogICAgIGlmIChzZWxlY3Rpb25TdGFydC5pc051bGwoKSkgewpAQCAtMTg1Miw2ICsxODUy
LDE2IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UmVjdHNGb3JHcmFudWxhcml0eVdpdGgKICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbGVjdGlvblJlY3RzQ2FsbGJhY2soc2VsZWN0aW9u
UmVjdHMsIGNhbGxiYWNrSUQpKTsKIH0KIAordm9pZCBXZWJQYWdlOjpjYWNoZVNlbGVjdGlvbkZv
ckFjY2Vzc2liaWxpdHkoYm9vbCBzaG91bGRDYWNoZSkKK3sKKyAgICBpZiAoIXNob3VsZENhY2hl
KQorICAgICAgICBtX2NhY2hlZFNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkgPSBWaXNpYmxlU2Vs
ZWN0aW9uKCk7CisgICAgZWxzZSB7CisgICAgICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9j
dXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgICAgIG1fY2FjaGVkU2Vs
ZWN0aW9uRm9yQWNjZXNzaWJpbGl0eSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwor
ICAgIH0KK30KKwogc3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVz
VGV4dChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBSZWZQdHI8UmFuZ2U+IG9yaWdp
bmFsUmFuZ2UsIGNvbnN0IFN0cmluZyYgbWF0Y2hUZXh0LCBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlv
blJhbmdlKQogewogICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHNlbGVjdGlvblJhbmdl
LT5vd25lckRvY3VtZW50KCksIHNlbGVjdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0
aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwpAQCAtMTg2
Myw3ICsxODczLDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0Vwog
ewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9y
TWFpbkZyYW1lKCk7CiAgICAgdWludDMyX3QgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKLSAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9jYWNoZWRTZWxlY3Rpb25Gb3JB
Y2Nlc3NpYmlsaXR5LmlzTm9uZSgpID8gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkgOiBt
X2NhY2hlZFNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHNl
bGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogICAgIFZpc2libGVQb3Np
dGlvbiBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwogCkluZGV4OiBUb29s
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjE1
MDUpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAor
MjAxNy0wOS0wMSAgTmFuIFdhbmcgIDxuX3dhbmdAYXBwbGUuY29tPgorCisgICAgICAgIEFYOiBQ
cm92aWRlIGEgd2F5IGZvciBBY2Nlc3NpYmlsaXR5IHRvIGNhY2hlIHRoZSBzZWxlY3Rpb24gd2hp
bGUgcmV0cmlldmluZyByZWN0cyBmb3Igc3BlYWsgc2VsZWN0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYyNDcKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzM0MjE3MTQzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWNjZXNzaWJpbGl0eVRlc3RzSU9T
Lm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTctMDktMDEgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW5hbWUg
V2ViS2l0MiBBUEkgdGVzdHMgYWZ0ZXIgZGlyZWN0b3J5IHJlbmFtZQpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9pb3MvQWNjZXNzaWJpbGl0eVRlc3RzSU9TLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjY2Vzc2liaWxpdHlUZXN0c0lPUy5t
bQkocmV2aXNpb24gMjIxNDYxKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWNj
ZXNzaWJpbGl0eVRlc3RzSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5NiwyNCBAQCBU
RVNUKEFjY2Vzc2liaWxpdHlUZXN0cywgUmVjdHNGb3JTcGVha2luCiAgICAgRVhQRUNUX1dLX1NU
UkVRKCIiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0
aW9uKCkudG9TdHJpbmcoKSJdKTsKIH0KIAorVEVTVChBY2Nlc3NpYmlsaXR5VGVzdHMsIENhY2hl
U2VsZWN0aW9uKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPG1ldGEgbmFtZT0ndmlld3Bv
cnQnIGNvbnRlbnQ9J3dpZHRoPWRldmljZS13aWR0aCxpbml0aWFsLXNjYWxlPTEnPjxzcGFuIGlk
PSdmaXJzdCc+Zmlyc3Q8L3NwYW4+PGJyPjxzcGFuIGlkPSdzZWNvbmQnPmZpcnN0PC9zcGFuPiJd
OworICAgIAorICAgIC8vIFNlbGVjdCBmaXJzdCBub2RlIGFuZCBjYWNoZSB0aGUgc2VsZWN0aW9u
CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlv
bigpLnNldEJhc2VBbmRFeHRlbnQoZmlyc3QsIDAsIGZpcnN0LCAxKSJdOworICAgIFt3ZWJWaWV3
IF9hY2Nlc3NpYmlsaXR5Q2FjaGVTZWxlY3Rpb246WUVTXTsKKyAgICBjaGVja0NHUmVjdFZhbHVl
QXRJbmRleChbd2ViVmlldyByZWN0c0F0U2VsZWN0aW9uT2Zmc2V0OjAgd2l0aFRleHQ6QCJmaXJz
dCJdLCBDR1JlY3RNYWtlKDgsIDgsIDI2LCAxOSksIDApOworICAgIC8vIE5vdyBzZWxlY3QgdGhl
IHNlY29uZCBub2RlLCB3ZSBzaG91bGQgdXNlIHRoZSBjYWNoZWQgc2VsZWN0aW9uIHRvIHJldHJp
ZXZlIHJlY3RzCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdl
dFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQoc2Vjb25kLCAwLCBzZWNvbmQsIDEpIl07Cisg
ICAgY2hlY2tDR1JlY3RWYWx1ZUF0SW5kZXgoW3dlYlZpZXcgcmVjdHNBdFNlbGVjdGlvbk9mZnNl
dDowIHdpdGhUZXh0OkAiZmlyc3QiXSwgQ0dSZWN0TWFrZSg4LCA4LCAyNiwgMTkpLCAwKTsKKyAg
ICAKKyAgICAvLyBSZXNldCB0aGUgc2VsZWN0aW9uIGNhY2hlCisgICAgW3dlYlZpZXcgX2FjY2Vz
c2liaWxpdHlDYWNoZVNlbGVjdGlvbjpOT107CisgICAgY2hlY2tDR1JlY3RWYWx1ZUF0SW5kZXgo
W3dlYlZpZXcgcmVjdHNBdFNlbGVjdGlvbk9mZnNldDowIHdpdGhUZXh0OkAiZmlyc3QiXSwgQ0dS
ZWN0TWFrZSg4LCAyNywgMjYsIDIwKSwgMCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkKIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgJiYgV0tfQVBJX0VOQUJMRUQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323958</attachid>
            <date>2017-10-16 16:58:14 -0700</date>
            <delta_ts>2017-10-19 09:31:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>13762</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjM0NDYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE3LTEwLTE2ICBOYW4gV2FuZyAg
PG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFByb3ZpZGUgYSB3YXkgZm9yIEFjY2Vz
c2liaWxpdHkgdG8gY2FjaGUgdGhlIHNlbGVjdGlvbiB3aGlsZSByZXRyaWV2aW5nIHJlY3RzIGZv
ciBzcGVhayBzZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NjI0NworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzQyMTcxNDM+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBnZXR0aW5n
IHRoZSByZWN0cyBmb3IgaGlnaGxpZ2h0aW5nIHRoZSBzcG9rZW4gdGV4dCB3aXRoaW4gYSBzZWxl
Y3Rpb24gcmFuZ2Ugb24gaU9TLCB3ZSBjYW4gZ2V0IGEKKyAgICAgICAgbGlzdCBvZiB0b3RhbGx5
IHdyb25nIHJlY3RzIGlmIHRoZSB1c2VyIGNoYW5nZWQgdGhlIHNlbGVjdGlvbiB0byBzb21lIG90
aGVyIHRleHQuIFRoaXMgaXMgYmVjYXVzZSB0aGUgCisgICAgICAgIGNhbGN1bGF0aW9uIGlzIGJh
c2VkIG9uIHRoZSBjdXJyZW50IHNlbGVjdGlvbiByYW5nZS4gVGhlcmVmb3JlLCB3ZSBuZWVkIHRv
IHByb3ZpZGUgYSB3YXkgZm9yIGFjY2Vzc2liaWxpdHkKKyAgICAgICAgY29kZXBhdGggdG8gY2Fj
aGUgdGhlIHNlbGVjdGlvbiBkdXJpbmcgYSBzcGVha2luZyBzZXNzaW9uLgorCisgICAgICAgIFRl
c3RzOiBBY2Nlc3NpYmlsaXR5VGVzdHMuQ2FjaGVTZWxlY3Rpb24KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FjY2Vz
c2liaWxpdHlDYWNoZVNlbGVjdGlvbjpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlld1ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAg
ICAgKC1bV0tDb250ZW50VmlldyBfYWNjZXNzaWJpbGl0eUNhY2hlU2VsZWN0aW9uOl0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmNhY2hlU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFJlY3RzRm9y
R3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6Y2FjaGVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6Z2V0UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhUZXh0KToKKwogMjAxNy0xMC0xNiAg
VGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBTYWZhcmkg
Y3Jhc2hlcyBhZnRlciBzZWFyY2hpbmcgUERGICh1bmRlciBbV0tQREZWaWV3IHpvb206dG86YXRQ
b2ludDpraW5kOl0pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAko
cmV2aXNpb24gMjIzNDQ2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2Miw2ICs1NjIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZXF1ZXN0UmVjdHNGb3JHcmFudWxhcml0eVdpdGhTZWxlY3Rpb25PZmZzZXQoV2ViQ29yZTo6VGV4
dEdyYW51bGFyaXR5LCB1aW50MzJfdCBvZmZzZXQsIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4mLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7
CiAgICAgdm9pZCByZXF1ZXN0UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhUZXh0KGludDMyX3Qg
b2Zmc2V0LCBjb25zdCBTdHJpbmcmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OlNlbGVjdGlvblJlY3Q+JiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZv
aWQgYXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKGNvbnN0IFN0cmluZyYgdXNlcm5hbWUsIGNvbnN0
IFN0cmluZyYgcGFzc3dvcmQpOworICAgIHZvaWQgY2FjaGVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmls
aXR5KGJvb2wpOwogI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQogICAgIHZvaWQgZGlkUGVy
Zm9ybURhdGFJbnRlcmFjdGlvbkNvbnRyb2xsZXJPcGVyYXRpb24oYm9vbCBoYW5kbGVkKTsKICAg
ICB2b2lkIGRpZEhhbmRsZVN0YXJ0RGF0YUludGVyYWN0aW9uUmVxdWVzdChib29sIHN0YXJ0ZWQp
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tCShyZXZpc2lvbiAyMjM0NDYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NTMxLDYgKzU1MzEsMTEgQEAgLSAo
dm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNlbAogICAgIH1dOwogfQogCistICh2
b2lkKV9hY2Nlc3NpYmlsaXR5Q2FjaGVTZWxlY3Rpb246KEJPT0wpc2hvdWxkQ2FjaGUKK3sKKyAg
ICBbX2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmlsaXR5Q2FjaGVTZWxlY3Rpb246c2hvdWxkQ2FjaGVd
OworfQorCiAtIChDR1JlY3QpX2NvbnRlbnRWaXNpYmxlUmVjdAogewogICAgIHJldHVybiBbc2Vs
ZiBjb252ZXJ0UmVjdDpbc2VsZiBib3VuZHNdIHRvVmlldzpzZWxmLl9jdXJyZW50Q29udGVudFZp
ZXddOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1By
aXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAyMjM0NDYpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTIsNiArMzkyLDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TSW50ZWdlciwgX1dLUmVjdEVkZwog
CiAtICh2b2lkKV9yZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEF0UG9zaXRpb246KENHUG9pbnQpcG9z
aXRpb24gY29tcGxldGlvbkJsb2NrOih2b2lkICheKShfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAq
KSlibG9jayBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7CiAtICh2b2lkKV9hY2Nlc3NpYmls
aXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0OihOU0ludGVnZXIpb2Zmc2V0IHdpdGhU
ZXh0OihOU1N0cmluZyAqKXRleHQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJyYXk8
TlNWYWx1ZSAqPiAqcmVjdHMpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9z
KFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlDYWNoZVNlbGVjdGlvbjooQk9P
TClzaG91bGRDYWNoZSBXS19BUElfQVZBSUxBQkxFKGlvcyhXS19JT1NfVEJBKSk7CiAKICNlbHNl
CiAtICh2b2lkKV9kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3N4KFdLX01BQ19UQkEpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgJKHJldmlzaW9uIDIy
MzQ0NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJh
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDYgKzMxMiw3IEBAIEZPUl9FQUNIX1dLQ09O
VEVOVFZJRVdfQUNUSU9OKERFQ0xBUkVfV0sKIC0gKHZvaWQpX2FjY2Vzc2liaWxpdHlSZXRyaWV2
ZVJlY3RzRW5jbG9zaW5nU2VsZWN0aW9uT2Zmc2V0OihOU0ludGVnZXIpb2Zmc2V0IHdpdGhHcmFu
dWxhcml0eTooVUlUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHk7CiAtICh2b2lkKV9hY2Nlc3Np
YmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0OihOU0ludGVnZXIpb2Zmc2V0IHdp
dGhUZXh0OihOU1N0cmluZyAqKXRleHQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYgcmVjdHMpKWNvbXBsZXRpb25IYW5kbGVy
OwogLSAodm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNlbGVjdGlvbk9mZnNldDoo
TlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0OworLSAodm9pZClfYWNj
ZXNzaWJpbGl0eUNhY2hlU2VsZWN0aW9uOihCT09MKXNob3VsZENhY2hlOwogCiBAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9z
aXRpb24gY3VycmVudFBvc2l0aW9uSW5mb3JtYXRpb247CiAtICh2b2lkKWRvQWZ0ZXJQb3NpdGlv
bkluZm9ybWF0aW9uVXBkYXRlOih2b2lkICheKShXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRp
b25BdFBvc2l0aW9uKSlhY3Rpb24gZm9yUmVxdWVzdDooV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9y
bWF0aW9uUmVxdWVzdClyZXF1ZXN0OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCShyZXZpc2lvbiAyMjM0
NDYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMzA3LDYgKzIzMDcsMTEgQEAgLSAodm9pZClfYWNj
ZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNlbAogICAgIH0pOwogfQogCistICh2b2lkKV9hY2Nl
c3NpYmlsaXR5Q2FjaGVTZWxlY3Rpb246KEJPT0wpc2hvdWxkQ2FjaGUKK3sKKyAgICBfcGFnZS0+
Y2FjaGVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KHNob3VsZENhY2hlKTsKK30KKwogLy8gVUlX
S0ludGVyYWN0aW9uVmlld1Byb3RvY29sCiAKIHN0YXRpYyBpbmxpbmUgR2VzdHVyZVR5cGUgdG9H
ZXN0dXJlVHlwZShVSVdLR2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHJldmlzaW9uIDIyMzQ0
NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHdv
cmtpbmcgY29weSkKQEAgLTcyMyw2ICs3MjMsMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlcXVl
c3RSZWN0c0F0U2VsZWN0aQogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
R2V0UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhUZXh0KG9mZnNldCwgdGV4dCwgY2FsbGJhY2tJ
RCksIG1fcGFnZUlEKTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OmNhY2hlU2VsZWN0aW9uRm9y
QWNjZXNzaWJpbGl0eShib29sIHNob3VsZENhY2hlKQoreworICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6Q2FjaGVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KHNob3VsZENh
Y2hlKSwgbV9wYWdlSUQpOworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6bW92ZVNlbGVjdGlvbkJ5
T2Zmc2V0KGludDMyX3Qgb2Zmc2V0LCBXVEY6OkZ1bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6
RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9u
IDIyMzQ0NikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsNyBAQAogI2VuZGlmCiAKICNpZiBQTEFURk9STShD
T0NPQSkKKyNpbmNsdWRlIDxXZWJDb3JlL1Zpc2libGVTZWxlY3Rpb24uaD4KICNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CiBPQkpDX0NMQVNTIENBTGF5ZXI7CiBPQkpDX0NMQVNTIE5TQXJyYXk7
CkBAIC0xMzcsNyArMTM4LDYgQEAgY2xhc3MgU3Vic3RpdHV0ZURhdGE7CiBjbGFzcyBUZXh0Q2hl
Y2tpbmdSZXF1ZXN0OwogY2xhc3MgVVJMOwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwotY2xhc3Mg
VmlzaWJsZVNlbGVjdGlvbjsKIGVudW0gY2xhc3MgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRy
YW5zaXRpb24gOiB1aW50OF90OwogZW51bSBTeW50aGV0aWNDbGlja1R5cGUgOiBpbnQ4X3Q7CiBz
dHJ1Y3QgQ29tcG9zaXRpb25VbmRlcmxpbmU7CkBAIC01ODYsNiArNTg2LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgaGFuZGxlVHdvRmluZ2VyVGFwQXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYsIHVpbnQ2NF90IHJlcXVlc3RJRCk7CiAgICAgdm9pZCBnZXRSZWN0c0ZvckdyYW51bGFyaXR5
V2l0aFNlbGVjdGlvbk9mZnNldCh1aW50MzJfdCwgaW50MzJfdCwgQ2FsbGJhY2tJRCk7CiAgICAg
dm9pZCBnZXRSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0V2l0aFRleHQoaW50MzJfdCwgY29uc3QgU3Ry
aW5nJiwgQ2FsbGJhY2tJRCk7CisgICAgdm9pZCBjYWNoZVNlbGVjdGlvbkZvckFjY2Vzc2liaWxp
dHkoYm9vbCk7CiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiAgICAgdm9pZCBkaXNwYXRj
aEFzeW5jaHJvbm91c1RvdWNoRXZlbnRzKGNvbnN0IFZlY3RvcjxXZWJUb3VjaEV2ZW50LCAxPiYg
cXVldWUpOwogI2VuZGlmCkBAIC0xNTI3LDYgKzE1MjgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9hbGxvd3NCbG9ja1NlbGVjdGlvbiB7IGZhbHNlIH07CiAKICAgICBSZWZQdHI8V2ViQ29yZTo6
UmFuZ2U+IG1faW5pdGlhbFNlbGVjdGlvbjsKKyAgICBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9u
IG1fY2FjaGVkU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eSB7IFdlYkNvcmU6OlZpc2libGVTZWxl
Y3Rpb24oKSB9OwogICAgIFdlYkNvcmU6OkludFNpemUgbV9ibG9ja1NlbGVjdGlvbkRlc2lyZWRT
aXplOwogICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX21heGltdW1Vbm9ic2N1cmVkU2l6ZTsKICAg
ICBpbnQzMl90IG1fZGV2aWNlT3JpZW50YXRpb24geyAwIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlz
aW9uIDIyMzQ0NikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTk3LDggKzk3LDkgQEAgbWVzc2FnZXMgLT4g
V2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgU2V0QWxsb3dzTWVkaWFEb2N1bWVudElubGlu
ZVBsYXliYWNrKGJvb2wgYWxsb3dzKQogICAgIEhhbmRsZVR3b0ZpbmdlclRhcEF0UG9pbnQoV2Vi
Q29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQ2NF90IHJlcXVlc3RJRCkKICAgICBTZXRGb3JjZUFs
d2F5c1VzZXJTY2FsYWJsZShib29sIHVzZXJTY2FsYWJsZSkKLSAgICBHZXRSZWN0c0ZvckdyYW51
bGFyaXR5V2l0aFNlbGVjdGlvbk9mZnNldCh1aW50MzJfdCBncmFudWxhcml0eSwgaW50MzJfdCBv
ZmZzZXQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKTsKLSAgICBHZXRSZWN0c0F0U2Vs
ZWN0aW9uT2Zmc2V0V2l0aFRleHQoaW50MzJfdCBvZmZzZXQsIFN0cmluZyB0ZXh0LCBXZWJLaXQ6
OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCk7CisgICAgR2V0UmVjdHNGb3JHcmFudWxhcml0eVdpdGhT
ZWxlY3Rpb25PZmZzZXQodWludDMyX3QgZ3JhbnVsYXJpdHksIGludDMyX3Qgb2Zmc2V0LCBXZWJL
aXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKKyAgICBHZXRSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0
V2l0aFRleHQoaW50MzJfdCBvZmZzZXQsIFN0cmluZyB0ZXh0LCBXZWJLaXQ6OkNhbGxiYWNrSUQg
Y2FsbGJhY2tJRCkKKyAgICBDYWNoZVNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkoYm9vbCBzaG91
bGRDYWNoZSkKICNlbmRpZgogCiAgICAgU2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbihib29sIGNv
bnRyb2xsZWQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2Vi
UGFnZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbQkocmV2aXNpb24gMjIzNDQ2KQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4
NjcsNyArMTg2Nyw3IEBAIHZvaWQgV2ViUGFnZTo6bW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KGludDMK
IHZvaWQgV2ViUGFnZTo6Z2V0UmVjdHNGb3JHcmFudWxhcml0eVdpdGhTZWxlY3Rpb25PZmZzZXQo
dWludDMyX3QgZ3JhbnVsYXJpdHksIGludDMyX3Qgb2Zmc2V0LCBDYWxsYmFja0lEIGNhbGxiYWNr
SUQpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9u
ID0gbV9jYWNoZWRTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5LmlzTm9uZSgpID8gZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkgOiBtX2NhY2hlZFNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHk7
CiAgICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVT
dGFydCgpOwogCiAgICAgaWYgKHNlbGVjdGlvblN0YXJ0LmlzTnVsbCgpKSB7CkBAIC0xODkwLDYg
KzE4OTAsMTYgQEAgdm9pZCBXZWJQYWdlOjpnZXRSZWN0c0ZvckdyYW51bGFyaXR5V2l0aAogICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VsZWN0aW9uUmVjdHNDYWxsYmFjayhzZWxl
Y3Rpb25SZWN0cywgY2FsbGJhY2tJRCkpOwogfQogCit2b2lkIFdlYlBhZ2U6OmNhY2hlU2VsZWN0
aW9uRm9yQWNjZXNzaWJpbGl0eShib29sIHNob3VsZENhY2hlKQoreworICAgIGlmICghc2hvdWxk
Q2FjaGUpCisgICAgICAgIG1fY2FjaGVkU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eSA9IFZpc2li
bGVTZWxlY3Rpb24oKTsKKyAgICBlbHNlIHsKKyAgICAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICAgICAgbV9jYWNo
ZWRTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5ID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CisgICAgfQorfQorCiBzdGF0aWMgUmVmUHRyPFJhbmdlPiByYW5nZU5lYXJQb3NpdGlvbk1h
dGNoZXNUZXh0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIFJlZlB0cjxSYW5nZT4g
b3JpZ2luYWxSYW5nZSwgY29uc3QgU3RyaW5nJiBtYXRjaFRleHQsIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0aW9uUmFuZ2UpCiB7CiAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoc2VsZWN0aW9u
UmFuZ2UtPm93bmVyRG9jdW1lbnQoKSwgc2VsZWN0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwg
cG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CkBA
IC0xOTAxLDcgKzE5MTEsNyBAQCB2b2lkIFdlYlBhZ2U6OmdldFJlY3RzQXRTZWxlY3Rpb25PZmZz
ZXRXCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKICAgICB1aW50MzJfdCBsZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwot
ICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2NhY2hlZFNlbGVjdGlv
bkZvckFjY2Vzc2liaWxpdHkuaXNOb25lKCkgPyBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSA6IG1fY2FjaGVkU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eTsKICAgICBWaXNpYmxlUG9zaXRp
b24gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CiAgICAgVmlzaWJs
ZVBvc2l0aW9uIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CiAKSW5kZXg6
IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIyMzQ0NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0
IEBACisyMDE3LTEwLTE2ICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
QVg6IFByb3ZpZGUgYSB3YXkgZm9yIEFjY2Vzc2liaWxpdHkgdG8gY2FjaGUgdGhlIHNlbGVjdGlv
biB3aGlsZSByZXRyaWV2aW5nIHJlY3RzIGZvciBzcGVhayBzZWxlY3Rpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjI0NworICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMzQyMTcxNDM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY2Nlc3NpYmlsaXR5VGVz
dHNJT1MubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNy0xMC0xNiAg
TWF1cmVlbiBEYXVtICA8bWRhdW1AYXBwbGUuY29tPgogCiAgICAgICAgIElmIGFuIG9yaWdpbiBk
b2Vzbid0IGhhdmUgZGF0YWJhc2VzIGluIHRoZSBEYXRhYmFzZXMgdGFibGUgd2Ugc2hvdWxkIHN0
aWxsIHJlbW92ZSBpdHMgaW5mb3JtYXRpb24gZnJvbSBkaXNrIGluIERhdGFiYXNlVHJhY2tlcjo6
ZGVsZXRlT3JpZ2luKCkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjY2Vz
c2liaWxpdHlUZXN0c0lPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL2lvcy9BY2Nlc3NpYmlsaXR5VGVzdHNJT1MubW0JKHJldmlzaW9uIDIyMzQ0NikKKysrIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjY2Vzc2liaWxpdHlUZXN0c0lPUy5tbQkod29y
a2luZyBjb3B5KQpAQCAtOTYsNiArOTYsMjQgQEAgVEVTVChBY2Nlc3NpYmlsaXR5VGVzdHMsIFJl
Y3RzRm9yU3BlYWtpbgogICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkiXSk7CiB9CiAK
K1RFU1QoQWNjZXNzaWJpbGl0eVRlc3RzLCBDYWNoZVNlbGVjdGlvbikKK3sKKyAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
SFRNTFN0cmluZzpAIjxtZXRhIG5hbWU9J3ZpZXdwb3J0JyBjb250ZW50PSd3aWR0aD1kZXZpY2Ut
d2lkdGgsaW5pdGlhbC1zY2FsZT0xJz48c3BhbiBpZD0nZmlyc3QnPmZpcnN0PC9zcGFuPjxicj48
c3BhbiBpZD0nc2Vjb25kJz5maXJzdDwvc3Bhbj4iXTsKKyAgICAKKyAgICAvLyBTZWxlY3QgZmly
c3Qgbm9kZSBhbmQgY2FjaGUgdGhlIHNlbGVjdGlvbgorICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KGZpcnN0
LCAwLCBmaXJzdCwgMSkiXTsKKyAgICBbd2ViVmlldyBfYWNjZXNzaWJpbGl0eUNhY2hlU2VsZWN0
aW9uOllFU107CisgICAgY2hlY2tDR1JlY3RWYWx1ZUF0SW5kZXgoW3dlYlZpZXcgcmVjdHNBdFNl
bGVjdGlvbk9mZnNldDowIHdpdGhUZXh0OkAiZmlyc3QiXSwgQ0dSZWN0TWFrZSg4LCA4LCAyNiwg
MTkpLCAwKTsKKyAgICAvLyBOb3cgc2VsZWN0IHRoZSBzZWNvbmQgbm9kZSwgd2Ugc2hvdWxkIHVz
ZSB0aGUgY2FjaGVkIHNlbGVjdGlvbiB0byByZXRyaWV2ZSByZWN0cworICAgIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0
ZW50KHNlY29uZCwgMCwgc2Vjb25kLCAxKSJdOworICAgIGNoZWNrQ0dSZWN0VmFsdWVBdEluZGV4
KFt3ZWJWaWV3IHJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6MCB3aXRoVGV4dDpAImZpcnN0Il0sIENH
UmVjdE1ha2UoOCwgOCwgMjYsIDE5KSwgMCk7CisgICAgCisgICAgLy8gUmVzZXQgdGhlIHNlbGVj
dGlvbiBjYWNoZQorICAgIFt3ZWJWaWV3IF9hY2Nlc3NpYmlsaXR5Q2FjaGVTZWxlY3Rpb246Tk9d
OworICAgIGNoZWNrQ0dSZWN0VmFsdWVBdEluZGV4KFt3ZWJWaWV3IHJlY3RzQXRTZWxlY3Rpb25P
ZmZzZXQ6MCB3aXRoVGV4dDpAImZpcnN0Il0sIENHUmVjdE1ha2UoOCwgMjcsIDI2LCAyMCksIDAp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRpZiAvLyBQTEFURk9S
TShJT1MpICYmIFdLX0FQSV9FTkFCTEVECg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324241</attachid>
            <date>2017-10-19 09:31:06 -0700</date>
            <delta_ts>2017-10-19 14:44:31 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>13603</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjM2MzQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE3LTEwLTE5ICBOYW4gV2FuZyAg
PG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFByb3ZpZGUgYSB3YXkgZm9yIEFjY2Vz
c2liaWxpdHkgdG8gY2FjaGUgdGhlIHNlbGVjdGlvbiB3aGlsZSByZXRyaWV2aW5nIHJlY3RzIGZv
ciBzcGVhayBzZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NjI0NworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzQyMTcxNDM+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBnZXR0aW5n
IHRoZSByZWN0cyBmb3IgaGlnaGxpZ2h0aW5nIHRoZSBzcG9rZW4gdGV4dCB3aXRoaW4gYSBzZWxl
Y3Rpb24gcmFuZ2Ugb24gaU9TLCB3ZSBjYW4gZ2V0IGEKKyAgICAgICAgbGlzdCBvZiB0b3RhbGx5
IHdyb25nIHJlY3RzIGlmIHRoZSB1c2VyIGNoYW5nZWQgdGhlIHNlbGVjdGlvbiB0byBzb21lIG90
aGVyIHRleHQuIFRoaXMgaXMgYmVjYXVzZSB0aGUgCisgICAgICAgIGNhbGN1bGF0aW9uIGlzIGJh
c2VkIG9uIHRoZSBjdXJyZW50IHNlbGVjdGlvbiByYW5nZS4gVGhlcmVmb3JlLCB3ZSBuZWVkIHRv
IHByb3ZpZGUgYSB3YXkgZm9yIGFjY2Vzc2liaWxpdHkKKyAgICAgICAgY29kZXBhdGggdG8gc3Rv
cmUgdGhlIHNlbGVjdGlvbiBkdXJpbmcgYSBzcGVha2luZyBzZXNzaW9uLgorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBf
YWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0aW9uOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9hY2Nlc3NpYmlsaXR5U3RvcmVTZWxlY3Rpb246XSk6
CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW06CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3RvcmVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UmVj
dHNGb3JHcmFudWxhcml0eVdpdGhTZWxlY3Rpb25PZmZzZXQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpzdG9yZVNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpnZXRSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0V2l0aFRleHQpOgorCiAyMDE3LTEw
LTE4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW1NlcnZpY2Ug
V29ya2VyXSBBZGQgc3R1YnMgZm9yIENsaWVudCAvIFdpbmRvd0NsaWVudCAvIENsaWVudHMKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyMjM2MzQp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5
KQpAQCAtNTYyLDYgKzU2Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcXVlc3RSZWN0c0Zvckdy
YW51bGFyaXR5V2l0aFNlbGVjdGlvbk9mZnNldChXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHksIHVp
bnQzMl90IG9mZnNldCwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpT
ZWxlY3Rpb25SZWN0PiYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKICAgICB2b2lkIHJlcXVl
c3RSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0V2l0aFRleHQoaW50MzJfdCBvZmZzZXQsIGNvbnN0IFN0
cmluZyYsIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9u
UmVjdD4mLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CiAgICAgdm9pZCBhdXRvZmlsbExvZ2lu
Q3JlZGVudGlhbHMoY29uc3QgU3RyaW5nJiB1c2VybmFtZSwgY29uc3QgU3RyaW5nJiBwYXNzd29y
ZCk7CisgICAgdm9pZCBzdG9yZVNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkoYm9vbCk7CiAjaWYg
RU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCiAgICAgdm9pZCBkaWRQZXJmb3JtRGF0YUludGVyYWN0
aW9uQ29udHJvbGxlck9wZXJhdGlvbihib29sIGhhbmRsZWQpOwogICAgIHZvaWQgZGlkSGFuZGxl
U3RhcnREYXRhSW50ZXJhY3Rpb25SZXF1ZXN0KGJvb2wgc3RhcnRlZCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHJldmlzaW9uIDIy
MzYzNCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0J
KHdvcmtpbmcgY29weSkKQEAgLTU1MzEsNiArNTUzMSwxMSBAQCAtICh2b2lkKV9hY2Nlc3NpYmls
aXR5UmV0cmlldmVSZWN0c0F0U2VsCiAgICAgfV07CiB9CiAKKy0gKHZvaWQpX2FjY2Vzc2liaWxp
dHlTdG9yZVNlbGVjdGlvbjooQk9PTClzaG91bGRTdG9yZQoreworICAgIFtfY29udGVudFZpZXcg
X2FjY2Vzc2liaWxpdHlTdG9yZVNlbGVjdGlvbjpzaG91bGRTdG9yZV07Cit9CisKIC0gKENHUmVj
dClfY29udGVudFZpc2libGVSZWN0CiB7CiAgICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0Oltz
ZWxmIGJvdW5kc10gdG9WaWV3OnNlbGYuX2N1cnJlbnRDb250ZW50Vmlld107CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRl
LmgJKHJldmlzaW9uIDIyMzYzNCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5Miw2ICszOTIsNyBAQCB0
eXBlZGVmIE5TX09QVElPTlMoTlNJbnRlZ2VyLCBfV0tSZWN0RWRnCiAKIC0gKHZvaWQpX3JlcXVl
c3RBY3RpdmF0ZWRFbGVtZW50QXRQb3NpdGlvbjooQ0dQb2ludClwb3NpdGlvbiBjb21wbGV0aW9u
QmxvY2s6KHZvaWQgKF4pKF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvICopKWJsb2NrIFdLX0FQSV9B
VkFJTEFCTEUoaW9zKDExLjApKTsKIC0gKHZvaWQpX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3Rz
QXRTZWxlY3Rpb25PZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQgd2l0aFRleHQ6KE5TU3RyaW5nICop
dGV4dCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJheTxOU1ZhbHVlICo+ICpyZWN0
cykpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShpb3MoV0tfSU9TX1RCQSkpOwor
LSAodm9pZClfYWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0aW9uOihCT09MKXNob3VsZFN0b3JlIFdL
X0FQSV9BVkFJTEFCTEUoaW9zKFdLX0lPU19UQkEpKTsKIAogI2Vsc2UKIC0gKHZvaWQpX2Rpc21p
c3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tf
TUFDX1RCQSkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAkocmV2aXNpb24gMjIzNjM0KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTIsNiArMzEyLDcgQEAgRk9SX0VBQ0hfV0tDT05URU5UVklFV19BQ1RJT04o
REVDTEFSRV9XSwogLSAodm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNFbmNsb3NpbmdT
ZWxlY3Rpb25PZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQgd2l0aEdyYW51bGFyaXR5OihVSVRleHRH
cmFudWxhcml0eSlncmFudWxhcml0eTsKIC0gKHZvaWQpX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJl
Y3RzQXRTZWxlY3Rpb25PZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQgd2l0aFRleHQ6KE5TU3RyaW5n
ICopdGV4dCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OlNlbGVjdGlvblJlY3Q+JiByZWN0cykpY29tcGxldGlvbkhhbmRsZXI7CiAtICh2b2lkKV9hY2Nl
c3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0OihOU0ludGVnZXIpb2Zmc2V0
IHdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQ7CistICh2b2lkKV9hY2Nlc3NpYmlsaXR5U3RvcmVT
ZWxlY3Rpb246KEJPT0wpc2hvdWxkU3RvcmU7CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiBjdXJyZW50UG9z
aXRpb25JbmZvcm1hdGlvbjsKIC0gKHZvaWQpZG9BZnRlclBvc2l0aW9uSW5mb3JtYXRpb25VcGRh
dGU6KHZvaWQgKF4pKFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24pKWFj
dGlvbiBmb3JSZXF1ZXN0OihXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1ZXN0KXJl
cXVlc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0lu
dGVyYWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0JKHJldmlzaW9uIDIyMzYzNCkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTIzMDcsNiArMjMwNywxMSBAQCAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmV0cmll
dmVSZWN0c0F0U2VsCiAgICAgfSk7CiB9CiAKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTdG9yZVNl
bGVjdGlvbjooQk9PTClzaG91bGRTdG9yZQoreworICAgIF9wYWdlLT5zdG9yZVNlbGVjdGlvbkZv
ckFjY2Vzc2liaWxpdHkoc2hvdWxkU3RvcmUpOworfQorCiAvLyBVSVdLSW50ZXJhY3Rpb25WaWV3
UHJvdG9jb2wKIAogc3RhdGljIGlubGluZSBHZXN0dXJlVHlwZSB0b0dlc3R1cmVUeXBlKFVJV0tH
ZXN0dXJlVHlwZSBnZXN0dXJlVHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XZWJQYWdlUHJveHlJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkocmV2aXNpb24gMjIzNjM0KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NzIzLDYgKzcyMywxMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVxdWVzdFJlY3RzQXRTZWxlY3Rp
CiAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRSZWN0c0F0U2VsZWN0
aW9uT2Zmc2V0V2l0aFRleHQob2Zmc2V0LCB0ZXh0LCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOwog
fQogCit2b2lkIFdlYlBhZ2VQcm94eTo6c3RvcmVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KGJv
b2wgc2hvdWxkU3RvcmUpCit7CisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTdG9yZVNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkoc2hvdWxkU3RvcmUpLCBtX3BhZ2VJRCk7
Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5Ojptb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50MzJfdCBv
ZmZzZXQsIFdURjo6RnVuY3Rpb248dm9pZCAoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJh
Y2tGdW5jdGlvbikKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkgewpJbmRleDogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMjIzNjM0KQorKysgU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC05Niw2ICs5Niw3IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUg
PFdlYkNvcmUvVmlzaWJsZVNlbGVjdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
IE9CSkNfQ0xBU1MgQ0FMYXllcjsKIE9CSkNfQ0xBU1MgTlNBcnJheTsKQEAgLTEzNyw3ICsxMzgs
NiBAQCBjbGFzcyBTdWJzdGl0dXRlRGF0YTsKIGNsYXNzIFRleHRDaGVja2luZ1JlcXVlc3Q7CiBj
bGFzcyBVUkw7CiBjbGFzcyBWaXNpYmxlUG9zaXRpb247Ci1jbGFzcyBWaXNpYmxlU2VsZWN0aW9u
OwogZW51bSBjbGFzcyBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiA6IHVpbnQ4
X3Q7CiBlbnVtIFN5bnRoZXRpY0NsaWNrVHlwZSA6IGludDhfdDsKIHN0cnVjdCBDb21wb3NpdGlv
blVuZGVybGluZTsKQEAgLTU4Niw2ICs1ODYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVU
d29GaW5nZXJUYXBBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDY0X3QgcmVx
dWVzdElEKTsKICAgICB2b2lkIGdldFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zm
c2V0KHVpbnQzMl90LCBpbnQzMl90LCBDYWxsYmFja0lEKTsKICAgICB2b2lkIGdldFJlY3RzQXRT
ZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChpbnQzMl90LCBjb25zdCBTdHJpbmcmLCBDYWxsYmFja0lE
KTsKKyAgICB2b2lkIHN0b3JlU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eShib29sKTsKICNpZiBF
TkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKICAgICB2b2lkIGRpc3BhdGNoQXN5bmNocm9ub3VzVG91
Y2hFdmVudHMoY29uc3QgVmVjdG9yPFdlYlRvdWNoRXZlbnQsIDE+JiBxdWV1ZSk7CiAjZW5kaWYK
QEAgLTE1MjcsNiArMTUyOCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2FsbG93c0Jsb2NrU2Vs
ZWN0aW9uIHsgZmFsc2UgfTsKIAogICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbV9pbml0aWFs
U2VsZWN0aW9uOworICAgIFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24gbV9zdG9yZWRTZWxlY3Rp
b25Gb3JBY2Nlc3NpYmlsaXR5IHsgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbigpIH07CiAgICAg
V2ViQ29yZTo6SW50U2l6ZSBtX2Jsb2NrU2VsZWN0aW9uRGVzaXJlZFNpemU7CiAgICAgV2ViQ29y
ZTo6RmxvYXRTaXplIG1fbWF4aW11bVVub2JzY3VyZWRTaXplOwogICAgIGludDMyX3QgbV9kZXZp
Y2VPcmllbnRhdGlvbiB7IDAgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjIzNjM0KQorKysg
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29y
a2luZyBjb3B5KQpAQCAtOTcsOCArOTcsOSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJl
Y2VpdmVyIHsKICAgICBTZXRBbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2soYm9vbCBh
bGxvd3MpCiAgICAgSGFuZGxlVHdvRmluZ2VyVGFwQXRQb2ludChXZWJDb3JlOjpJbnRQb2ludCBw
b2ludCwgdWludDY0X3QgcmVxdWVzdElEKQogICAgIFNldEZvcmNlQWx3YXlzVXNlclNjYWxhYmxl
KGJvb2wgdXNlclNjYWxhYmxlKQotICAgIEdldFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0
aW9uT2Zmc2V0KHVpbnQzMl90IGdyYW51bGFyaXR5LCBpbnQzMl90IG9mZnNldCwgV2ViS2l0OjpD
YWxsYmFja0lEIGNhbGxiYWNrSUQpOwotICAgIEdldFJlY3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRo
VGV4dChpbnQzMl90IG9mZnNldCwgU3RyaW5nIHRleHQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxs
YmFja0lEKTsKKyAgICBHZXRSZWN0c0ZvckdyYW51bGFyaXR5V2l0aFNlbGVjdGlvbk9mZnNldCh1
aW50MzJfdCBncmFudWxhcml0eSwgaW50MzJfdCBvZmZzZXQsIFdlYktpdDo6Q2FsbGJhY2tJRCBj
YWxsYmFja0lEKQorICAgIEdldFJlY3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChpbnQzMl90
IG9mZnNldCwgU3RyaW5nIHRleHQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQorICAg
IFN0b3JlU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eShib29sIHNob3VsZFN0b3JlKQogI2VuZGlm
CiAKICAgICBTZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGJvb2wgY29udHJvbGxlZCkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tCShyZXZpc2lvbiAyMjM2MzQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTg2Nyw3ICsxODY3LDcgQEAg
dm9pZCBXZWJQYWdlOjptb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50Mwogdm9pZCBXZWJQYWdlOjpn
ZXRSZWN0c0ZvckdyYW51bGFyaXR5V2l0aFNlbGVjdGlvbk9mZnNldCh1aW50MzJfdCBncmFudWxh
cml0eSwgaW50MzJfdCBvZmZzZXQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBGcmFt
ZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgp
OwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX3N0b3JlZFNlbGVj
dGlvbkZvckFjY2Vzc2liaWxpdHkuaXNOb25lKCkgPyBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSA6IG1fc3RvcmVkU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eTsKICAgICBWaXNpYmxlUG9z
aXRpb24gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CiAKICAgICBp
ZiAoc2VsZWN0aW9uU3RhcnQuaXNOdWxsKCkpIHsKQEAgLTE4OTAsNiArMTg5MCwxNiBAQCB2b2lk
IFdlYlBhZ2U6OmdldFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoCiAgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpTZWxlY3Rpb25SZWN0c0NhbGxiYWNrKHNlbGVjdGlvblJlY3RzLCBjYWxs
YmFja0lEKSk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6c3RvcmVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmls
aXR5KGJvb2wgc2hvdWxkU3RvcmUpCit7CisgICAgaWYgKCFzaG91bGRTdG9yZSkKKyAgICAgICAg
bV9zdG9yZWRTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5ID0gVmlzaWJsZVNlbGVjdGlvbigpOwor
ICAgIGVsc2UgeworICAgICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgICAgICBtX3N0b3JlZFNlbGVjdGlvbkZvckFj
Y2Vzc2liaWxpdHkgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICB9Cit9CisK
IHN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlTmVhclBvc2l0aW9uTWF0Y2hlc1RleHQoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgUmVmUHRyPFJhbmdlPiBvcmlnaW5hbFJhbmdlLCBj
b25zdCBTdHJpbmcmIG1hdGNoVGV4dCwgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSkKIHsK
ICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzZWxlY3Rpb25SYW5nZS0+b3duZXJEb2N1
bWVudCgpLCBzZWxlY3Rpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbi5kZWVwRXF1
aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKQEAgLTE5MDEsNyArMTkxMSw3
IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UmVjdHNBdFNlbGVjdGlvbk9mZnNldFcKIHsKICAgICBGcmFt
ZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgp
OwogICAgIHVpbnQzMl90IGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7Ci0gICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fc3RvcmVkU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0
eS5pc05vbmUoKSA/IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpIDogbV9zdG9yZWRTZWxl
Y3Rpb25Gb3JBY2Nlc3NpYmlsaXR5OwogICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFy
dCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKICAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0
aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjIzNjkwKQorKysgVG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMTAtMTkg
IE5hbiBXYW5nICA8bl93YW5nQGFwcGxlLmNvbT4KKworICAgICAgICBBWDogUHJvdmlkZSBhIHdh
eSBmb3IgQWNjZXNzaWJpbGl0eSB0byBjYWNoZSB0aGUgc2VsZWN0aW9uIHdoaWxlIHJldHJpZXZp
bmcgcmVjdHMgZm9yIHNwZWFrIHNlbGVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjQ3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNDIx
NzE0Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjY2Vzc2liaWxpdHlUZXN0c0lPUy5tbToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE3LTEwLTE4ICBSeW9zdWtlIE5pd2EgIDxy
bml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIERvbid0IGV4cG9zZSByYXcgSFRNTCBpbiBwYXN0
ZWJvYXJkIHRvIHRoZSB3ZWIgY29udGVudApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9pb3MvQWNjZXNzaWJpbGl0eVRlc3RzSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvaW9zL0FjY2Vzc2liaWxpdHlUZXN0c0lPUy5tbQkocmV2aXNpb24gMjIz
NjM0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWNjZXNzaWJpbGl0eVRlc3Rz
SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5NiwyNCBAQCBURVNUKEFjY2Vzc2liaWxp
dHlUZXN0cywgUmVjdHNGb3JTcGVha2luCiAgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmco
KSJdKTsKIH0KIAorVEVTVChBY2Nlc3NpYmlsaXR5VGVzdHMsIFN0b3JlU2VsZWN0aW9uKQorewor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPG1ldGEgbmFtZT0ndmlld3BvcnQnIGNvbnRlbnQ9J3dp
ZHRoPWRldmljZS13aWR0aCxpbml0aWFsLXNjYWxlPTEnPjxzcGFuIGlkPSdmaXJzdCc+Zmlyc3Q8
L3NwYW4+PGJyPjxzcGFuIGlkPSdzZWNvbmQnPmZpcnN0PC9zcGFuPiJdOworICAgIAorICAgIC8v
IFNlbGVjdCBmaXJzdCBub2RlIGFuZCBzdG9yZSB0aGUgc2VsZWN0aW9uCisgICAgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRF
eHRlbnQoZmlyc3QsIDAsIGZpcnN0LCAxKSJdOworICAgIFt3ZWJWaWV3IF9hY2Nlc3NpYmlsaXR5
U3RvcmVTZWxlY3Rpb246WUVTXTsKKyAgICBjaGVja0NHUmVjdFZhbHVlQXRJbmRleChbd2ViVmll
dyByZWN0c0F0U2VsZWN0aW9uT2Zmc2V0OjAgd2l0aFRleHQ6QCJmaXJzdCJdLCBDR1JlY3RNYWtl
KDgsIDgsIDI2LCAxOSksIDApOworICAgIC8vIE5vdyBzZWxlY3QgdGhlIHNlY29uZCBub2RlLCB3
ZSBzaG91bGQgdXNlIHRoZSBjYWNoZWQgc2VsZWN0aW9uIHRvIHJldHJpZXZlIHJlY3RzCisgICAg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnNl
dEJhc2VBbmRFeHRlbnQoc2Vjb25kLCAwLCBzZWNvbmQsIDEpIl07CisgICAgY2hlY2tDR1JlY3RW
YWx1ZUF0SW5kZXgoW3dlYlZpZXcgcmVjdHNBdFNlbGVjdGlvbk9mZnNldDowIHdpdGhUZXh0OkAi
Zmlyc3QiXSwgQ0dSZWN0TWFrZSg4LCA4LCAyNiwgMTkpLCAwKTsKKyAgICAKKyAgICAvLyBSZXNl
dCB0aGUgc3RvcmVkIHNlbGVjdGlvbgorICAgIFt3ZWJWaWV3IF9hY2Nlc3NpYmlsaXR5U3RvcmVT
ZWxlY3Rpb246Tk9dOworICAgIGNoZWNrQ0dSZWN0VmFsdWVBdEluZGV4KFt3ZWJWaWV3IHJlY3Rz
QXRTZWxlY3Rpb25PZmZzZXQ6MCB3aXRoVGV4dDpAImZpcnN0Il0sIENHUmVjdE1ha2UoOCwgMjcs
IDI2LCAyMCksIDApOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRp
ZiAvLyBQTEFURk9STShJT1MpICYmIFdLX0FQSV9FTkFCTEVECg==
</data>
<flag name="review"
          id="343888"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324294</attachid>
            <date>2017-10-19 14:43:51 -0700</date>
            <delta_ts>2017-10-19 16:34:20 -0700</delta_ts>
            <desc>patch to land</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>13976</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjM2MzQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE3LTEwLTE5ICBOYW4gV2FuZyAg
PG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFByb3ZpZGUgYSB3YXkgZm9yIEFjY2Vz
c2liaWxpdHkgdG8gY2FjaGUgdGhlIHNlbGVjdGlvbiB3aGlsZSByZXRyaWV2aW5nIHJlY3RzIGZv
ciBzcGVhayBzZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NjI0NworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzQyMTcxNDM+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBnZXR0aW5n
IHRoZSByZWN0cyBmb3IgaGlnaGxpZ2h0aW5nIHRoZSBzcG9rZW4gdGV4dCB3aXRoaW4gYSBzZWxl
Y3Rpb24gcmFuZ2Ugb24gaU9TLCB3ZSBjYW4gZ2V0IGEKKyAgICAgICAgbGlzdCBvZiB0b3RhbGx5
IHdyb25nIHJlY3RzIGlmIHRoZSB1c2VyIGNoYW5nZWQgdGhlIHNlbGVjdGlvbiB0byBzb21lIG90
aGVyIHRleHQuIFRoaXMgaXMgYmVjYXVzZSB0aGUKKyAgICAgICAgY2FsY3VsYXRpb24gaXMgYmFz
ZWQgb24gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHJhbmdlLiBUaGVyZWZvcmUsIHdlIG5lZWQgdG8g
cHJvdmlkZSBhIHdheSBmb3IgYWNjZXNzaWJpbGl0eQorICAgICAgICBjb2RlcGF0aCB0byBzdG9y
ZSB0aGUgc2VsZWN0aW9uIGR1cmluZyBhIHNwZWFraW5nIHNlc3Npb24uCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9h
Y2Nlc3NpYmlsaXR5U3RvcmVTZWxlY3Rpb25dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hY2Nl
c3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb25dKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlld1ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAg
ICAgKC1bV0tDb250ZW50VmlldyBfYWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0aW9uXSk6CisgICAg
ICAgICgtW1dLQ29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlvbl0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnN0b3JlU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFJlY3RzRm9y
R3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6c3RvcmVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6Z2V0UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhUZXh0KToKKwogMjAxNy0xMC0xOCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtTZXJ2aWNlIFdvcmtl
cl0gQWRkIHN0dWJzIGZvciBDbGllbnQgLyBXaW5kb3dDbGllbnQgLyBDbGllbnRzCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjIzNjM0KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU2Miw2ICs1NjIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXF1ZXN0UmVjdHNGb3JHcmFudWxh
cml0eVdpdGhTZWxlY3Rpb25PZmZzZXQoV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCB1aW50MzJf
dCBvZmZzZXQsIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0
aW9uUmVjdD4mLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CiAgICAgdm9pZCByZXF1ZXN0UmVj
dHNBdFNlbGVjdGlvbk9mZnNldFdpdGhUZXh0KGludDMyX3Qgb2Zmc2V0LCBjb25zdCBTdHJpbmcm
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+
JiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZvaWQgYXV0b2ZpbGxMb2dpbkNyZWRl
bnRpYWxzKGNvbnN0IFN0cmluZyYgdXNlcm5hbWUsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpOwor
ICAgIHZvaWQgc3RvcmVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KGJvb2wpOwogI2lmIEVOQUJM
RShEQVRBX0lOVEVSQUNUSU9OKQogICAgIHZvaWQgZGlkUGVyZm9ybURhdGFJbnRlcmFjdGlvbkNv
bnRyb2xsZXJPcGVyYXRpb24oYm9vbCBoYW5kbGVkKTsKICAgICB2b2lkIGRpZEhhbmRsZVN0YXJ0
RGF0YUludGVyYWN0aW9uUmVxdWVzdChib29sIHN0YXJ0ZWQpOwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyMjM2MzQp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NTMxLDYgKzU1MzEsMTYgQEAgLSAodm9pZClfYWNjZXNzaWJpbGl0eVJl
dHJpZXZlUmVjdHNBdFNlbAogICAgIH1dOwogfQogCistICh2b2lkKV9hY2Nlc3NpYmlsaXR5U3Rv
cmVTZWxlY3Rpb24KK3sKKyAgICBbX2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmlsaXR5U3RvcmVTZWxl
Y3Rpb25dOworfQorCistICh2b2lkKV9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb24KK3sKKyAg
ICBbX2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb25dOworfQorCiAtIChD
R1JlY3QpX2NvbnRlbnRWaXNpYmxlUmVjdAogewogICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UmVj
dDpbc2VsZiBib3VuZHNdIHRvVmlldzpzZWxmLl9jdXJyZW50Q29udGVudFZpZXddOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJp
dmF0ZS5oCShyZXZpc2lvbiAyMjM2MzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTIsNiArMzkyLDgg
QEAgdHlwZWRlZiBOU19PUFRJT05TKE5TSW50ZWdlciwgX1dLUmVjdEVkZwogCiAtICh2b2lkKV9y
ZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEF0UG9zaXRpb246KENHUG9pbnQpcG9zaXRpb24gY29tcGxl
dGlvbkJsb2NrOih2b2lkICheKShfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKSlibG9jayBXS19B
UElfQVZBSUxBQkxFKGlvcygxMS4wKSk7CiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmV0cmlldmVS
ZWN0c0F0U2VsZWN0aW9uT2Zmc2V0OihOU0ludGVnZXIpb2Zmc2V0IHdpdGhUZXh0OihOU1N0cmlu
ZyAqKXRleHQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJyYXk8TlNWYWx1ZSAqPiAq
cmVjdHMpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKFdLX0lPU19UQkEp
KTsKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTdG9yZVNlbGVjdGlvbiBXS19BUElfQVZBSUxBQkxF
KGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb24g
V0tfQVBJX0FWQUlMQUJMRShpb3MoV0tfSU9TX1RCQSkpOwogCiAjZWxzZQogLSAodm9pZClfZGlz
bWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93cyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChX
S19NQUNfVEJBKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCShyZXZpc2lvbiAyMjM2MzQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxMiw2ICszMTIsOCBAQCBGT1JfRUFDSF9XS0NPTlRFTlRWSUVXX0FDVElP
TihERUNMQVJFX1dLCiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0c0VuY2xvc2lu
Z1NlbGVjdGlvbk9mZnNldDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoR3JhbnVsYXJpdHk6KFVJVGV4
dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5OwogLSAodm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZl
UmVjdHNBdFNlbGVjdGlvbk9mZnNldDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4dDooTlNTdHJp
bmcgKil0ZXh0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6U2VsZWN0aW9uUmVjdD4mIHJlY3RzKSljb21wbGV0aW9uSGFuZGxlcjsKIC0gKHZvaWQpX2Fj
Y2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6KE5TSW50ZWdlcilvZmZz
ZXQgd2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dDsKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTdG9y
ZVNlbGVjdGlvbjsKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlvbjsKIAogQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRp
b25BdFBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbkluZm9ybWF0aW9uOwogLSAodm9pZClkb0FmdGVy
UG9zaXRpb25JbmZvcm1hdGlvblVwZGF0ZToodm9pZCAoXikoV2ViS2l0OjpJbnRlcmFjdGlvbklu
Zm9ybWF0aW9uQXRQb3NpdGlvbikpYWN0aW9uIGZvclJlcXVlc3Q6KFdlYktpdDo6SW50ZXJhY3Rp
b25JbmZvcm1hdGlvblJlcXVlc3QpcmVxdWVzdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQkocmV2aXNp
b24gMjIzNjM0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMjMwNyw2ICsyMzA3LDE2IEBAIC0gKHZv
aWQpX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWwKICAgICB9KTsKIH0KIAorLSAodm9p
ZClfYWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0aW9uCit7CisgICAgX3BhZ2UtPnN0b3JlU2VsZWN0
aW9uRm9yQWNjZXNzaWJpbGl0eSh0cnVlKTsKK30KKworLSAodm9pZClfYWNjZXNzaWJpbGl0eUNs
ZWFyU2VsZWN0aW9uCit7CisgICAgX3BhZ2UtPnN0b3JlU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0
eShmYWxzZSk7Cit9CisKIC8vIFVJV0tJbnRlcmFjdGlvblZpZXdQcm90b2NvbAogCiBzdGF0aWMg
aW5saW5lIEdlc3R1cmVUeXBlIHRvR2VzdHVyZVR5cGUoVUlXS0dlc3R1cmVUeXBlIGdlc3R1cmVU
eXBlKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5
SU9TLm1tCShyZXZpc2lvbiAyMjM2MzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V2ViUGFnZVByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MjMsNiArNzIzLDExIEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0UmVjdHNBdFNlbGVjdGkKICAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldFJlY3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChv
ZmZzZXQsIHRleHQsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpzdG9yZVNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkoYm9vbCBzaG91bGRTdG9yZSkKK3sK
KyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN0b3JlU2VsZWN0aW9uRm9y
QWNjZXNzaWJpbGl0eShzaG91bGRTdG9yZSksIG1fcGFnZUlEKTsKK30KKwogdm9pZCBXZWJQYWdl
UHJveHk6Om1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQzMl90IG9mZnNldCwgV1RGOjpGdW5jdGlv
bjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewogICAg
IGlmICghaXNWYWxpZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oCShyZXZpc2lvbiAyMjM2MzQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDcgQEAKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSA8V2ViQ29yZS9WaXNpYmxlU2Vs
ZWN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogT0JKQ19DTEFTUyBDQUxheWVy
OwogT0JKQ19DTEFTUyBOU0FycmF5OwpAQCAtMTM3LDcgKzEzOCw2IEBAIGNsYXNzIFN1YnN0aXR1
dGVEYXRhOwogY2xhc3MgVGV4dENoZWNraW5nUmVxdWVzdDsKIGNsYXNzIFVSTDsKIGNsYXNzIFZp
c2libGVQb3NpdGlvbjsKLWNsYXNzIFZpc2libGVTZWxlY3Rpb247CiBlbnVtIGNsYXNzIFRleHRJ
bmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIDogdWludDhfdDsKIGVudW0gU3ludGhldGlj
Q2xpY2tUeXBlIDogaW50OF90Owogc3RydWN0IENvbXBvc2l0aW9uVW5kZXJsaW5lOwpAQCAtNTg2
LDYgKzU4Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGhhbmRsZVR3b0ZpbmdlclRhcEF0UG9pbnQo
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50NjRfdCByZXF1ZXN0SUQpOwogICAgIHZvaWQg
Z2V0UmVjdHNGb3JHcmFudWxhcml0eVdpdGhTZWxlY3Rpb25PZmZzZXQodWludDMyX3QsIGludDMy
X3QsIENhbGxiYWNrSUQpOwogICAgIHZvaWQgZ2V0UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhU
ZXh0KGludDMyX3QsIGNvbnN0IFN0cmluZyYsIENhbGxiYWNrSUQpOworICAgIHZvaWQgc3RvcmVT
ZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KGJvb2wpOwogI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZF
TlRTKQogICAgIHZvaWQgZGlzcGF0Y2hBc3luY2hyb25vdXNUb3VjaEV2ZW50cyhjb25zdCBWZWN0
b3I8V2ViVG91Y2hFdmVudCwgMT4mIHF1ZXVlKTsKICNlbmRpZgpAQCAtMTUyNyw2ICsxNTI4LDcg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fYWxsb3dzQmxvY2tTZWxlY3Rpb24geyBmYWxzZSB9Owog
CiAgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBtX2luaXRpYWxTZWxlY3Rpb247CisgICAgV2Vi
Q29yZTo6VmlzaWJsZVNlbGVjdGlvbiBtX3N0b3JlZFNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkg
eyBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKCkgfTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1f
YmxvY2tTZWxlY3Rpb25EZXNpcmVkU2l6ZTsKICAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9tYXhp
bXVtVW5vYnNjdXJlZFNpemU7CiAgICAgaW50MzJfdCBtX2RldmljZU9yaWVudGF0aW9uIHsgMCB9
OwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyMjM2MzQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw4
ICs5Nyw5IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIFNldEFs
bG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjayhib29sIGFsbG93cykKICAgICBIYW5kbGVU
d29GaW5nZXJUYXBBdFBvaW50KFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50NjRfdCByZXF1
ZXN0SUQpCiAgICAgU2V0Rm9yY2VBbHdheXNVc2VyU2NhbGFibGUoYm9vbCB1c2VyU2NhbGFibGUp
Ci0gICAgR2V0UmVjdHNGb3JHcmFudWxhcml0eVdpdGhTZWxlY3Rpb25PZmZzZXQodWludDMyX3Qg
Z3JhbnVsYXJpdHksIGludDMyX3Qgb2Zmc2V0LCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJ
RCk7Ci0gICAgR2V0UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhUZXh0KGludDMyX3Qgb2Zmc2V0
LCBTdHJpbmcgdGV4dCwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpOworICAgIEdldFJl
Y3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0KHVpbnQzMl90IGdyYW51bGFyaXR5
LCBpbnQzMl90IG9mZnNldCwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCisgICAgR2V0
UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhUZXh0KGludDMyX3Qgb2Zmc2V0LCBTdHJpbmcgdGV4
dCwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCisgICAgU3RvcmVTZWxlY3Rpb25Gb3JB
Y2Nlc3NpYmlsaXR5KGJvb2wgc2hvdWxkU3RvcmUpCiAjZW5kaWYKIAogICAgIFNldENvbnRyb2xs
ZWRCeUF1dG9tYXRpb24oYm9vbCBjb250cm9sbGVkKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHJldmlzaW9uIDIyMzYz
NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xODY3LDcgKzE4NjcsNyBAQCB2b2lkIFdlYlBhZ2U6Om1vdmVT
ZWxlY3Rpb25CeU9mZnNldChpbnQzCiB2b2lkIFdlYlBhZ2U6OmdldFJlY3RzRm9yR3JhbnVsYXJp
dHlXaXRoU2VsZWN0aW9uT2Zmc2V0KHVpbnQzMl90IGdyYW51bGFyaXR5LCBpbnQzMl90IG9mZnNl
dCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fc3RvcmVkU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0
eS5pc05vbmUoKSA/IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpIDogbV9zdG9yZWRTZWxl
Y3Rpb25Gb3JBY2Nlc3NpYmlsaXR5OwogICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFy
dCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKIAogICAgIGlmIChzZWxlY3Rpb25TdGFydC5p
c051bGwoKSkgewpAQCAtMTg5MCw2ICsxODkwLDE2IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UmVjdHNG
b3JHcmFudWxhcml0eVdpdGgKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbGVj
dGlvblJlY3RzQ2FsbGJhY2soc2VsZWN0aW9uUmVjdHMsIGNhbGxiYWNrSUQpKTsKIH0KIAordm9p
ZCBXZWJQYWdlOjpzdG9yZVNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkoYm9vbCBzaG91bGRTdG9y
ZSkKK3sKKyAgICBpZiAoIXNob3VsZFN0b3JlKQorICAgICAgICBtX3N0b3JlZFNlbGVjdGlvbkZv
ckFjY2Vzc2liaWxpdHkgPSBWaXNpYmxlU2VsZWN0aW9uKCk7CisgICAgZWxzZSB7CisgICAgICAg
IEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZy
YW1lKCk7CisgICAgICAgIG1fc3RvcmVkU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eSA9IGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIH0KK30KKwogc3RhdGljIFJlZlB0cjxSYW5n
ZT4gcmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVzVGV4dChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBv
c2l0aW9uLCBSZWZQdHI8UmFuZ2U+IG9yaWdpbmFsUmFuZ2UsIGNvbnN0IFN0cmluZyYgbWF0Y2hU
ZXh0LCBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlKQogewogICAgIGF1dG8gcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKHNlbGVjdGlvblJhbmdlLT5vd25lckRvY3VtZW50KCksIHNlbGVjdGlvblJh
bmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5j
aG9yZWRFcXVpdmFsZW50KCkpOwpAQCAtMTkwMSw3ICsxOTExLDcgQEAgdm9pZCBXZWJQYWdlOjpn
ZXRSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0VwogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgdWludDMyX3QgbGVu
Z3RoID0gdGV4dC5sZW5ndGgoKTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uID0gbV9zdG9yZWRTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5LmlzTm9uZSgpID8gZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkgOiBtX3N0b3JlZFNlbGVjdGlvbkZvckFjY2Vzc2liaWxp
dHk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2li
bGVTdGFydCgpOwogICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24u
dmlzaWJsZUVuZCgpOwogCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjM3MTMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNy0xMC0xOSAgTmFuIFdhbmcgIDxuX3dhbmdA
YXBwbGUuY29tPgorCisgICAgICAgIEFYOiBQcm92aWRlIGEgd2F5IGZvciBBY2Nlc3NpYmlsaXR5
IHRvIGNhY2hlIHRoZSBzZWxlY3Rpb24gd2hpbGUgcmV0cmlldmluZyByZWN0cyBmb3Igc3BlYWsg
c2VsZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzYyNDcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM0MjE3MTQzPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9pb3MvQWNjZXNzaWJpbGl0eVRlc3RzSU9TLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
VEVTVCk6CisKIDIwMTctMTAtMTkgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAK
ICAgICAgICAgVHVybiBwb2x5IHByb3RvIGJhY2sgb24gYnkgZGVmYXVsdCBhbmQgcmVtb3ZlIHRo
ZSBvcHRpb24KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjY2Vzc2liaWxp
dHlUZXN0c0lPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lv
cy9BY2Nlc3NpYmlsaXR5VGVzdHNJT1MubW0JKHJldmlzaW9uIDIyMzYzNCkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjY2Vzc2liaWxpdHlUZXN0c0lPUy5tbQkod29ya2luZyBj
b3B5KQpAQCAtOTYsNiArOTYsMjQgQEAgVEVTVChBY2Nlc3NpYmlsaXR5VGVzdHMsIFJlY3RzRm9y
U3BlYWtpbgogICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkiXSk7CiB9CiAKK1RFU1Qo
QWNjZXNzaWJpbGl0eVRlc3RzLCBTdG9yZVNlbGVjdGlvbikKK3sKKyAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtl
KDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0
cmluZzpAIjxtZXRhIG5hbWU9J3ZpZXdwb3J0JyBjb250ZW50PSd3aWR0aD1kZXZpY2Utd2lkdGgs
aW5pdGlhbC1zY2FsZT0xJz48c3BhbiBpZD0nZmlyc3QnPmZpcnN0PC9zcGFuPjxicj48c3BhbiBp
ZD0nc2Vjb25kJz5maXJzdDwvc3Bhbj4iXTsKKyAgICAKKyAgICAvLyBTZWxlY3QgZmlyc3Qgbm9k
ZSBhbmQgc3RvcmUgdGhlIHNlbGVjdGlvbgorICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KGZpcnN0LCAwLCBm
aXJzdCwgMSkiXTsKKyAgICBbd2ViVmlldyBfYWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0aW9uXTsK
KyAgICBjaGVja0NHUmVjdFZhbHVlQXRJbmRleChbd2ViVmlldyByZWN0c0F0U2VsZWN0aW9uT2Zm
c2V0OjAgd2l0aFRleHQ6QCJmaXJzdCJdLCBDR1JlY3RNYWtlKDgsIDgsIDI2LCAxOSksIDApOwor
ICAgIC8vIE5vdyBzZWxlY3QgdGhlIHNlY29uZCBub2RlLCB3ZSBzaG91bGQgdXNlIHRoZSBzdG9y
ZWQgc2VsZWN0aW9uIHRvIHJldHJpZXZlIHJlY3RzCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQoc2Vjb25k
LCAwLCBzZWNvbmQsIDEpIl07CisgICAgY2hlY2tDR1JlY3RWYWx1ZUF0SW5kZXgoW3dlYlZpZXcg
cmVjdHNBdFNlbGVjdGlvbk9mZnNldDowIHdpdGhUZXh0OkAiZmlyc3QiXSwgQ0dSZWN0TWFrZSg4
LCA4LCAyNiwgMTkpLCAwKTsKKyAgICAKKyAgICAvLyBDbGVhciB0aGUgc3RvcmVkIHNlbGVjdGlv
biwgd2Ugc2hvdWxkIHVzZSB0aGUgY3VycmVudCBzZWxlY3Rpb24gdG8gcmV0cmlldmUgcmVjdHMK
KyAgICBbd2ViVmlldyBfYWNjZXNzaWJpbGl0eUNsZWFyU2VsZWN0aW9uXTsKKyAgICBjaGVja0NH
UmVjdFZhbHVlQXRJbmRleChbd2ViVmlldyByZWN0c0F0U2VsZWN0aW9uT2Zmc2V0OjAgd2l0aFRl
eHQ6QCJmaXJzdCJdLCBDR1JlY3RNYWtlKDgsIDI3LCAyNiwgMjApLCAwKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSAmJiBXS19B
UElfRU5BQkxFRAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>