<?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>194873</bug_id>
          
          <creation_ts>2019-02-20 14:59:54 -0800</creation_ts>
          <short_desc>[iOS] Callout menu overlaps in-page controls when editing a comment in github.com&apos;s issue tracker</short_desc>
          <delta_ts>2019-02-22 20:38:55 -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>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1508285</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-02-20 14:59:54 -0800</bug_when>
    <thetext>1. Go to a repository on https://github.com.
2. Open a new issue and insert a paragraph of text.
3. Select some text near the end of the first line.

Observed: black callout bar appears, obscuring header/bold/italic/quotation/code snippet/link buttons.
Expected: it would be great if I could still access these controls...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508442</commentid>
    <comment_count>1</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-02-20 21:29:54 -0800</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #0)
&gt; 1. Go to a repository on https://github.com.

Step 0: Use an iPad</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508447</commentid>
    <comment_count>2</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-02-20 21:41:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/46701974&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508448</commentid>
    <comment_count>3</comment_count>
      <attachid>362590</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-02-20 21:45:42 -0800</bug_when>
    <thetext>Created attachment 362590
Work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508452</commentid>
    <comment_count>4</comment_count>
      <attachid>362592</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-02-20 21:56:28 -0800</bug_when>
    <thetext>Created attachment 362592
Work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508535</commentid>
    <comment_count>5</comment_count>
      <attachid>362612</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-02-21 09:00:27 -0800</bug_when>
    <thetext>Created attachment 362612
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509098</commentid>
    <comment_count>6</comment_count>
      <attachid>362612</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-02-22 12:03:59 -0800</bug_when>
    <thetext>Comment on attachment 362612
Patch

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

&gt; Source/WebKit/Shared/WebPreferences.yaml:1562
&gt; +SmartCalloutBarPositioningEnabled:

Do we really need a pref for this?

&gt; Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm:1122
&gt; +void WebPageProxy::requestEvasionRectsAboveSelection(CompletionHandler&lt;void(const Vector&lt;WebCore::FloatRect&gt;&amp;)&gt;&amp;&amp; callback)

This is &quot;above&quot; because above is where we want to put it by default. Can we get evasion rects below too and end up presenting the callout bar to the left or right?

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:1560
&gt; +    const Vector&lt;FloatPoint, 5&gt; offsetsForHitTesting {{ -30, -51 }, { 31, -50 }, { -60, -34 }, { 60, -36 }, { 0, -20 }};

This is based on popover geometry? (it&apos;s in WebPageIOS, so I guess that&apos;s OK?)

Why are the numbers all a little fuzzy (where do the 1s and 4s and 6s come from?)

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:1563
&gt; +        if (auto* hitNode = clickableNonEditableNode(centerTopInRootViewCoordinates + offset))

I peeked and I think this /does/ update layout, so you should be OK?

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:1581
&gt; +    auto contextMenuElementSizeLimit = factorOfContentArea * pageScaleFactor() * m_page-&gt;mainFrame().view()-&gt;unobscuredContentRect().size();

You already have pageScaleFactor() as scaleFactor.

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:1588
&gt; +        RefPtr&lt;Element&gt; element;
&gt; +        if (is&lt;Element&gt;(node))
&gt; +            element = downcast&lt;Element&gt;(node.ptr());
&gt; +        else
&gt; +            element = node-&gt;parentElement();

Weird, I would have expected this to be a thing node can do (nearest element).

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:1594
&gt; +        if (bounds.width() &gt; contextMenuElementSizeLimit.width() || bounds.height() &gt; contextMenuElementSizeLimit.height())

Should this be area-based instead, so we can have long skinny bars?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509151</commentid>
    <comment_count>7</comment_count>
      <attachid>362612</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-02-22 13:28:49 -0800</bug_when>
    <thetext>Comment on attachment 362612
Patch

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

&gt;&gt; Source/WebKit/Shared/WebPreferences.yaml:1562
&gt;&gt; +SmartCalloutBarPositioningEnabled:
&gt; 
&gt; Do we really need a pref for this?

It&apos;s not necessary, but it might help for demoing and testing!

Perhaps that&apos;s not a good reason though, so I&apos;ll remove this.

&gt;&gt; Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm:1122
&gt;&gt; +void WebPageProxy::requestEvasionRectsAboveSelection(CompletionHandler&lt;void(const Vector&lt;WebCore::FloatRect&gt;&amp;)&gt;&amp;&amp; callback)
&gt; 
&gt; This is &quot;above&quot; because above is where we want to put it by default. Can we get evasion rects below too and end up presenting the callout bar to the left or right?

Yes, as of now, we only hit-test &quot;above&quot; because that&apos;s where the bar goes by default. We could additionally do more hit-testing below to force the bar to present on the left or right sides, but I refrained from doing that here because (1) I didn&apos;t find any websites that actually did this, and (2) hit-testing is fairly expensive, so without knowing specific websites that would benefit from getting evasion rects below the selection, I&apos;d prefer to limit the amount of hit-testing that needs to happen here :/

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:1560
&gt;&gt; +    const Vector&lt;FloatPoint, 5&gt; offsetsForHitTesting {{ -30, -51 }, { 31, -50 }, { -60, -34 }, { 60, -36 }, { 0, -20 }};
&gt; 
&gt; This is based on popover geometry? (it&apos;s in WebPageIOS, so I guess that&apos;s OK?)
&gt; 
&gt; Why are the numbers all a little fuzzy (where do the 1s and 4s and 6s come from?)

Yes, it&apos;s based on callout bar geometry, and is therefore specific to iOS. I originally hit-tested a grid-aligned lattice of points above the selection, but then chose to perturb some of the locations a tiny bit (±1, ±1) to ensure that we don&apos;t fail detection if a row of points happen to land on a divider or something.

...but now that I think about this some more, it shouldn&apos;t be necessary because nodeRespondingToClickEvents is already fuzzy. So I&apos;ll un-fuzz these offsets.

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:1563
&gt;&gt; +        if (auto* hitNode = clickableNonEditableNode(centerTopInRootViewCoordinates + offset))
&gt; 
&gt; I peeked and I think this /does/ update layout, so you should be OK?

Sure! Also, the call to VisibleSelection::toNormalizedRange() above should have already updated layout.

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:1581
&gt;&gt; +    auto contextMenuElementSizeLimit = factorOfContentArea * pageScaleFactor() * m_page-&gt;mainFrame().view()-&gt;unobscuredContentRect().size();
&gt; 
&gt; You already have pageScaleFactor() as scaleFactor.

Good catch!

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:1588
&gt;&gt; +            element = node-&gt;parentElement();
&gt; 
&gt; Weird, I would have expected this to be a thing node can do (nearest element).

This comment made me realize that I shouldn&apos;t even need to go from Node -&gt; Element; getting the bounds of the renderer and then converting to root view coordinates should suffice. I&apos;ll change the logic here to do this.

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:1594
&gt;&gt; +        if (bounds.width() &gt; contextMenuElementSizeLimit.width() || bounds.height() &gt; contextMenuElementSizeLimit.height())
&gt; 
&gt; Should this be area-based instead, so we can have long skinny bars?

Good call, I&apos;ll make this area-based instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509190</commentid>
    <comment_count>8</comment_count>
      <attachid>362769</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-02-22 15:21:58 -0800</bug_when>
    <thetext>Created attachment 362769
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509239</commentid>
    <comment_count>9</comment_count>
      <attachid>362769</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-22 16:48:23 -0800</bug_when>
    <thetext>Comment on attachment 362769
Patch for EWS

Clearing flags on attachment: 362769

Committed r241971: &lt;https://trac.webkit.org/changeset/241971&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362590</attachid>
            <date>2019-02-20 21:45:42 -0800</date>
            <delta_ts>2019-02-20 21:48:27 -0800</delta_ts>
            <desc>Work in progress</desc>
            <filename>bug-194873-20190220214541.patch</filename>
            <type>text/plain</type>
            <size>31467</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxNzU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYyNTZjOGFmMGVkZDk1NjU2
NjZlOWRmMzczZDE2N2I1NWU3NGFkMGMuLjE3MGYwNmI5ZDY3YzU3MWM5MzgxZDE3ZDQyNTZkMDZl
MTlkMDY0NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTktMDItMjAgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQ2FsbG91dCBt
ZW51IG92ZXJsYXBzIGluLXBhZ2UgY29udHJvbHMgd2hlbiBlZGl0aW5nIGEgY29tbWVudCBpbiBn
aXRodWIuY29tJ3MgaXNzdWUgdHJhY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk0ODczCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NjcwMTk3
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0
OiBlZGl0aW5nL3NlbGVjdGlvbi9pb3MvYXZvaWQtc2hvd2luZy1jYWxsb3V0LW1lbnUtb3Zlci1j
b250cm9scy5odG1sCisKKyAgICAgICAgKiBQbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmg6Cisg
ICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWw6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfc21hcnRDYWxs
b3V0QmFyUG9zaXRpb25pbmdFbmFibGVkXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyByZXF1ZXN0QXV0b2NvcnJlY3Rpb25SZWN0c0ZvclN0
cmluZzp3aXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcg
cmVxdWVzdFJlY3RzVG9FdmFkZUZvclNlbGVjdGlvbkNvbW1hbmRzV2l0aENvbXBsZXRpb25IYW5k
bGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHJlcXVlc3RBdXRvY29ycmVjdGlvbkNv
bnRleHRXaXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9X
ZWJQYWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVxdWVz
dEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3Nh
Z2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVxdWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0
aW9uKToKKwogMjAxOS0wMi0xOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJldmVydCBmdW5jdGlvbmFsIHBhcnQgb2YgcjI0MTQ1MQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmggYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAppbmRleCAzOTRmZmUxZGJkOGY1
M2Q3NmRhNTgxYTBkMjMxNDJhYmY1NmU5MzRkLi5mMGFhMTJjN2NmZjQ3MWU3MjYyMDFhYjgzNzRi
YzYwNzYwMWRmODM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3Mv
VUlLaXRTUEkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEku
aApAQCAtOTg3LDYgKzk4Nyw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBVSURy
YWdPcGVyYXRpb24pCiAjZW5kaWYKIAogQGludGVyZmFjZSBVSUNhbGxvdXRCYXIgOiBVSVZpZXcK
KysgKFVJQ2FsbG91dEJhciAqKWFjdGl2ZUNhbGxvdXRCYXI7CiArICh2b2lkKWZhZGVTaGFyZWRD
YWxsb3V0QmFyOwogQGVuZAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQ
cmVmZXJlbmNlcy55YW1sIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFt
bAppbmRleCA3NGExMjJjNWI3N2ZjNWQ0MWEyODg5MWNhMGE1M2RmNWRlYzlmYWZlLi44NzBmNDll
YmQ0OTNlZDAwMzNiMWIyMDUwMGEyZDgwZGRjYjczMmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYlByZWZlcmVuY2VzLnlhbWwKQEAgLTE1NTksNiArMTU1OSwxNCBAQCBNb3VzZW1vdmVFdmVu
dEhhbmRsaW5nUHJldmVudHNEZWZhdWx0RW5hYmxlZDoKICAgY2F0ZWdvcnk6IGludGVybmFsCiAg
IGNvbmRpdGlvbjogRU5BQkxFKFRPVUNIX0VWRU5UUykKIAorU21hcnRDYWxsb3V0QmFyUG9zaXRp
b25pbmdFbmFibGVkOgorICB0eXBlOiBib29sCisgIGRlZmF1bHRWYWx1ZTogdHJ1ZQorICBodW1h
blJlYWRhYmxlTmFtZTogIlNtYXJ0IENhbGxvdXQgQmFyIFBvc2l0aW9uaW5nIgorICBodW1hblJl
YWRhYmxlRGVzY3JpcHRpb246ICJBdm9pZCBjb250ZXh0IG1lbnVzIHdoZW4gc2hvd2luZyB0aGUg
Y2FsbG91dCBiYXIiCisgIGNhdGVnb3J5OiBpbnRlcm5hbAorICB3ZWJjb3JlQmluZGluZzogbm9u
ZQorCiAjIERlcHJlY2F0ZWQKIAogSUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IDc1MmEz
YTQ5YmIzODhjYTRmMTZkMWI5ZjM3YWNlMDNjMTc4Y2U5YWUuLjY3NzA0YmRmNTE4YmMzY2RmYzFh
MzViMzljOTliOWViOTc1N2RkMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlldy5tbQpAQCAtNDc1LDYgKzQ3NSwxMSBAQCAtIChCT09MKV9pc1JldGFp
bmluZ0FjdGl2ZUZvY3VzZWRTdGF0ZQogICAgIHJldHVybiBfZm9jdXNQcmVzZXJ2YXRpb25Db3Vu
dCB8fCBfYWN0aXZlRm9jdXNlZFN0YXRlUmV0YWluQ291bnQ7CiB9CiAKKy0gKEJPT0wpX3NtYXJ0
Q2FsbG91dEJhclBvc2l0aW9uaW5nRW5hYmxlZAoreworICAgIHJldHVybiBbX2NvbmZpZ3VyYXRp
b24gcHJlZmVyZW5jZXNdLT5fcHJlZmVyZW5jZXMtPnNtYXJ0Q2FsbG91dEJhclBvc2l0aW9uaW5n
RW5hYmxlZCgpOworfQorCiAjZW5kaWYKIAogI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50
ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRl
cm5hbC5oCmluZGV4IGFmMTZmYzM4YmUzODQwOWMxM2JkZGEyMTE3ZjZlMTNkMzYyYzcyYTguLmFl
NTNlMTk2MTZkMWY3OWQ4OTEyNTNlNDc3MDlmYTI3NzA3NmEyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCkBAIC0x
NjgsNiArMTY4LDcgQEAgc3RydWN0IFByaW50SW5mbzsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkb25seSkgVUlFZGdlSW5zZXRzIF9jb21wdXRlZE9ic2N1cmVkSW5zZXQ7CiBAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIFVJRWRnZUluc2V0cyBfY29tcHV0ZWRVbm9ic2N1cmVkU2Fm
ZUFyZWFJbnNldDsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgZ2V0dGVyPV9pc1Jl
dGFpbmluZ0FjdGl2ZUZvY3VzZWRTdGF0ZSkgQk9PTCBfcmV0YWluaW5nQWN0aXZlRm9jdXNlZFN0
YXRlOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9zbWFydENhbGxvdXRC
YXJQb3NpdGlvbmluZ0VuYWJsZWQ7CiAjZW5kaWYKIAogI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9T
REspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IGIyYjBlODVkMmUw
ZDE1OWIwOGQwOWIzMzgxN2M4ZmMxMjZjMGQ4NGYuLjY4NzdmNWFjYTcwOGNjNjFhNWFlYzYyZjQ2
NzcyNzUyMzBmMGRiMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBA
IC02ODcsNiArNjg3LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2FuY2VsQXV0b3Njcm9sbCgpOwog
ICAgIHZvaWQgaGFyZHdhcmVLZXlib2FyZEF2YWlsYWJpbGl0eUNoYW5nZWQoKTsKICAgICBib29s
IGlzU2Nyb2xsaW5nT3Jab29taW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc1Njcm9sbGluZ09yWm9v
bWluZzsgfQorICAgIHZvaWQgcmVxdWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mKT4mJik7
CiAjaWYgRU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCiAgICAgdm9pZCBkaWRIYW5kbGVEcmFnU3Rh
cnRSZXF1ZXN0KGJvb2wgc3RhcnRlZCk7CiAgICAgdm9pZCBkaWRIYW5kbGVBZGRpdGlvbmFsRHJh
Z0l0ZW1zUmVxdWVzdChib29sIGFkZGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IDdiZDgwZmRkODI2
Y2EzNjQyOTRhY2U3MjU0ZDRmMDdjOWZmZDRkZjguLmVlMTNmMGJkMGMzOWZlZGI4M2IxMGMxZWE4
ZTIzZmE0Njc3OGEzYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtMzMyOSw5ICszMzI5LDEzIEBAIC0g
KGNvbnN0IFdlYktpdDo6V0tBdXRvQ29ycmVjdGlvbkRhdGEmKWF1dG9jb3JyZWN0aW9uRGF0YQog
Ly8gVGhlIGNvbXBsZXRpb24gaGFuZGxlciBjYW4gcGFzcyBuaWwgaWYgaW5wdXQgZG9lcyBub3Qg
bWF0Y2ggdGhlIGFjdHVhbCB0ZXh0IHByZWNlZGluZyB0aGUgaW5zZXJ0aW9uIHBvaW50LgogLSAo
dm9pZClyZXF1ZXN0QXV0b2NvcnJlY3Rpb25SZWN0c0ZvclN0cmluZzooTlNTdHJpbmcgKilpbnB1
dCB3aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFVJV0tBdXRvY29ycmVjdGlvblJlY3Rz
ICpyZWN0c0ZvcklucHV0KSljb21wbGV0aW9uSGFuZGxlcgogeworICAgIGlmICghY29tcGxldGlv
bkhhbmRsZXIpIHsKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50
RXhjZXB0aW9uIGZvcm1hdDpAIkV4cGVjdGVkIGEgbm9ubnVsbCBjb21wbGV0aW9uIGhhbmRsZXIg
aW4gJXMuIiwgX19QUkVUVFlfRlVOQ1RJT05fX107CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBpZiAoIWlucHV0IHx8ICFbaW5wdXQgbGVuZ3RoXSkgewotICAgICAgICBpZiAoY29tcGxl
dGlvbkhhbmRsZXIpCi0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihuaWwpOworICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihuaWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0z
MzQ5LDggKzMzNTMsNDcgQEAgLSAodm9pZClyZXF1ZXN0QXV0b2NvcnJlY3Rpb25SZWN0c0ZvclN0
cmluZzooTlNTdHJpbmcgKilpbnB1dCB3aXRoQ29tcGxldGlvbkhhbmQKICAgICAgICAgdmlldy0+
X2F1dG9jb3JyZWN0aW9uRGF0YS50ZXh0Rmlyc3RSZWN0ID0gZmlyc3RSZWN0OwogICAgICAgICB2
aWV3LT5fYXV0b2NvcnJlY3Rpb25EYXRhLnRleHRMYXN0UmVjdCA9IGxhc3RSZWN0OwogCi0gICAg
ICAgIGlmIChjb21wbGV0aW9uKQotICAgICAgICAgICAgY29tcGxldGlvbihyZWN0cy5zaXplKCkg
PyBbV0tBdXRvY29ycmVjdGlvblJlY3RzIGF1dG9jb3JyZWN0aW9uUmVjdHNXaXRoUmVjdHM6Zmly
c3RSZWN0IGxhc3RSZWN0Omxhc3RSZWN0XSA6IG5pbCk7CisgICAgICAgIGNvbXBsZXRpb24ocmVj
dHMuc2l6ZSgpID8gW1dLQXV0b2NvcnJlY3Rpb25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0
aFJlY3RzOmZpcnN0UmVjdCBsYXN0UmVjdDpsYXN0UmVjdF0gOiBuaWwpOworICAgIH0pOworfQor
CistICh2b2lkKXJlcXVlc3RSZWN0c1RvRXZhZGVGb3JTZWxlY3Rpb25Db21tYW5kc1dpdGhDb21w
bGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PE5TVmFsdWUgKj4gKnJlY3RzKSljb21wbGV0
aW9uSGFuZGxlcgoreworICAgIGlmICghY29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICAgICAgW05T
RXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkV4cGVj
dGVkIGEgbm9ubnVsbCBjb21wbGV0aW9uIGhhbmRsZXIgaW4gJXMuIiwgX19QUkVUVFlfRlVOQ1RJ
T05fX107CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoW3NlbGYgX3Nob3VsZFN1
cHByZXNzU2VsZWN0aW9uQ29tbWFuZHNdIHx8ICFfd2ViVmlldy5fc21hcnRDYWxsb3V0QmFyUG9z
aXRpb25pbmdFbmFibGVkIHx8IF93ZWJWaWV3Ll9lZGl0YWJsZSkgeworICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihAWyBdKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChfZm9j
dXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSAhPSBXZWJLaXQ6OklucHV0VHlwZTo6
Q29udGVudEVkaXRhYmxlICYmIF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmVsZW1lbnRUeXBl
ICE9IFdlYktpdDo6SW5wdXRUeXBlOjpUZXh0QXJlYSkgeworICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihAWyBdKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEdpdmUgdGhlIHBh
Z2Ugc29tZSB0aW1lIHRvIHByZXNlbnQgY3VzdG9tIGVkaXRpbmcgVUkgYmVmb3JlIGF0dGVtcHRp
bmcgdG8gZGV0ZWN0IGFuZCBldmFkZSBpdC4KKyAgICBhdXRvIGRlbGF5QmVmb3JlU2hvd2luZ0Nh
bGxvdXRCYXIgPSAoMC4yNV9zKS5uYW5vc2Vjb25kcygpOworICAgIGRpc3BhdGNoX2FmdGVyKGRp
c3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIGRlbGF5QmVmb3JlU2hvd2luZ0NhbGxvdXRC
YXIpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbY29tcGxldGlvbiA9IG1ha2VCbG9ja1B0
cihjb21wbGV0aW9uSGFuZGxlciksIHdlYWtTZWxmID0gV2Vha09iakNQdHI8V0tDb250ZW50Vmll
dz4oc2VsZildICgpIG11dGFibGUgeworICAgICAgICBpZiAoIXdlYWtTZWxmKSB7CisgICAgICAg
ICAgICBjb21wbGV0aW9uKEBbIF0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgYXV0byBzdHJvbmdTZWxmID0gd2Vha1NlbGYuZ2V0KCk7CisgICAgICAgIGlmICgh
c3Ryb25nU2VsZi0+X3BhZ2UpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb24oQFsgXSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzdHJvbmdTZWxmLT5fcGFnZS0+
cmVxdWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKFtjb21wbGV0aW9uID0gV1RGTW92ZShj
b21wbGV0aW9uKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiByZWN0cykgewor
ICAgICAgICAgICAgYXV0byByZWN0c0FzVmFsdWVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnJlY3RzLnNpemUoKV0pOworICAgICAgICAgICAgZm9y
IChhdXRvJiBmbG9hdFJlY3QgOiByZWN0cykKKyAgICAgICAgICAgICAgICBbcmVjdHNBc1ZhbHVl
cyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OmZsb2F0UmVjdF1dOworICAgICAg
ICAgICAgY29tcGxldGlvbihyZWN0c0FzVmFsdWVzLmdldCgpKTsKKyAgICAgICAgfSk7CiAgICAg
fSk7CiB9CiAKQEAgLTM1MTMsOCArMzU1NiwxMCBAQCAtICh2b2lkKWFwcGx5QXV0b2NvcnJlY3Rp
b246KE5TU3RyaW5nICopY29ycmVjdGlvbiB0b1N0cmluZzooTlNTdHJpbmcgKilpbnB1dCB3aQog
CiAtICh2b2lkKXJlcXVlc3RBdXRvY29ycmVjdGlvbkNvbnRleHRXaXRoQ29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKFVJV0tBdXRvY29ycmVjdGlvbkNvbnRleHQgKmF1dG9jb3JyZWN0aW9uQ29u
dGV4dCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBpZiAoIWNvbXBsZXRpb25IYW5kbGVyKQor
ICAgIGlmICghY29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNl
Ok5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkV4cGVjdGVkIGEgbm9ubnVsbCBj
b21wbGV0aW9uIGhhbmRsZXIgaW4gJXMuIiwgX19QUkVUVFlfRlVOQ1RJT05fX107CiAgICAgICAg
IHJldHVybjsKKyAgICB9CiAKICNpZiBVU0UoVUlLSVRfS0VZQk9BUkRfQURESVRJT05TKQogICAg
IGlmIChbc2VsZiBfZGlzYWJsZUF1dG9tYXRpY0tleWJvYXJkVUldKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQppbmRleCBlNTAwNmVkZTViNTA0
MjI4MTQzNzE2YWRjN2E0MDU4MzhmMzQzOTQzLi4yYmIxY2M5ZjZlZTNkZWI1MGQ5NzUyZDhjYWY2
MDdmZmY3OTBiMGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2Vi
UGFnZVByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdl
UHJveHlJT1MubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQog
CiAjaW1wb3J0ICJBUElVSUNsaWVudC5oIgorI2ltcG9ydCAiQ29ubmVjdGlvbi5oIgogI2ltcG9y
dCAiRGF0YVJlZmVyZW5jZS5oIgogI2ltcG9ydCAiRWRpdGluZ1JhbmdlLmgiCiAjaW1wb3J0ICJH
bG9iYWxGaW5kSW5QYWdlU3RhdGUuaCIKQEAgLTExMTgsNiArMTExOSwxNiBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6aGFyZHdhcmVLZXlib2FyZEF2YWlsYWJpbGl0eUNoYW5nZWQoKQogICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGFyZHdhcmVLZXlib2FyZEF2YWlsYWJpbGl0
eUNoYW5nZWQoKSwgbV9wYWdlSUQpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVxdWVzdEV2
YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mKT4mJiBjYWxsYmFjaykKK3sKKyAgICBpZiAoIWlzVmFs
aWQoKSkgeworICAgICAgICBjYWxsYmFjayh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViUGFnZTo6UmVxdWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKCksIFdURk1vdmUo
Y2FsbGJhY2spLCBtX3BhZ2VJRCk7Cit9CisKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikK
IAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZEhhbmRsZURyYWdTdGFydFJlcXVlc3QoYm9vbCBzdGFy
dGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDFk
ZDJiZjdkNGI1YWRmNDdlZmM5YTE2ZDYwZDcyYmFmMmNjNDk3NzguLjllODdjMTk5ZTNlZmRmOGUz
OWY3OGIwMDJkN2MyODJhN2Y2NzE0ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgKQEAgLTY2NCw2ICs2NjQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdG9y
ZVNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkoYm9vbCk7CiAgICAgdm9pZCBzdGFydEF1dG9zY3Jv
bGxBdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKICAgICB2b2lkIGNhbmNl
bEF1dG9zY3JvbGwoKTsKKyAgICB2b2lkIHJlcXVlc3RFdmFzaW9uUmVjdHNBYm92ZVNlbGVjdGlv
bihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+
Jik+JiYpOwogCiAgICAgdm9pZCBjb250ZW50U2l6ZUNhdGVnb3J5RGlkQ2hhbmdlKGNvbnN0IFN0
cmluZyYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbgppbmRleCAyZDViN2I1YTZiY2QwOTMwNzE4M2Y0NDlmYWQxNmMyN2Nk
NjRiNjgxLi5hNTJiYjIzYjliM2E1YWJhNWMwNTRjYTUzOWY4YzI4OWU4ZGM5ZGIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmlu
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW4KQEAgLTgwLDYgKzgwLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7
CiAgICAgU3luY0FwcGx5QXV0b2NvcnJlY3Rpb24oU3RyaW5nIGNvcnJlY3Rpb24sIFN0cmluZyBv
cmlnaW5hbFRleHQpIC0+IChib29sIGF1dG9jb3JyZWN0aW9uQXBwbGllZCkgRGVsYXllZAogICAg
IFJlcXVlc3RBdXRvY29ycmVjdGlvbkNvbnRleHQoV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNr
SUQpCiAgICAgQXV0b2NvcnJlY3Rpb25Db250ZXh0U3luYygpIC0+IChzdHJ1Y3QgV2ViS2l0OjpX
ZWJBdXRvY29ycmVjdGlvbkNvbnRleHQgY29udGV4dCkgRGVsYXllZAorICAgIFJlcXVlc3RFdmFz
aW9uUmVjdHNBYm92ZVNlbGVjdGlvbigpIC0+IChWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiBy
ZWN0cykgQXN5bmMKICAgICBHZXRQb3NpdGlvbkluZm9ybWF0aW9uKHN0cnVjdCBXZWJLaXQ6Oklu
dGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1ZXN0IHJlcXVlc3QpIC0+IChzdHJ1Y3QgV2ViS2l0OjpJ
bnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiBpbmZvcm1hdGlvbikgRGVsYXllZAogICAg
IFJlcXVlc3RQb3NpdGlvbkluZm9ybWF0aW9uKHN0cnVjdCBXZWJLaXQ6OkludGVyYWN0aW9uSW5m
b3JtYXRpb25SZXF1ZXN0IHJlcXVlc3QpCiAgICAgU3RhcnRJbnRlcmFjdGlvbldpdGhFbGVtZW50
QXRQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2ludCBwb2ludCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggZTE1ZTc5YmUxNTM1
NmQyMGQxYjU4MmYwZDdjZjRhYWIzM2VhOWVkZi4uODVkNzE4MTQyZjY1NTU1MzY0N2ZhMDdlMjIx
ZmE0ZjgxNzkzM2NiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTE1MDQsNiArMTUwNCwxMDcgQEAgdm9pZCBXZWJQYWdl
OjpjYW5jZWxBdXRvc2Nyb2xsKCkKICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxl
cigpLmNhbmNlbFNlbGVjdGlvbkF1dG9zY3JvbGwoKTsKIH0KIAordm9pZCBXZWJQYWdlOjpyZXF1
ZXN0RXZhc2lvblJlY3RzQWJvdmVTZWxlY3Rpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYpPiYmIHJlcGx5KQoreworICAgIGF1dG8mIGZy
YW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAg
ICBhdXRvIGZyYW1lVmlldyA9IG1ha2VSZWZQdHIoZnJhbWUudmlldygpKTsKKyAgICBpZiAoIWZy
YW1lVmlldykgeworICAgICAgICByZXBseSh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkgeworICAgICAgICByZXBseSh7IH0pOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFzZWxlY3RlZFJhbmdlKSB7CisgICAgICAgIHJl
cGx5KHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fZm9jdXNlZEVs
ZW1lbnQgfHwgIW1fZm9jdXNlZEVsZW1lbnQtPnJlbmRlcmVyKCkgfHwgbV9mb2N1c2VkRWxlbWVu
dC0+cmVuZGVyZXIoKS0+aXNUcmFuc3BhcmVudE9yRnVsbHlDbGlwcGVkUmVzcGVjdGluZ1BhcmVu
dEZyYW1lcygpKSB7CisgICAgICAgIHJlcGx5KHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRzSW5Sb290Vmlld0Nvb3JkaW5hdGVzOwor
ICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKQorICAgICAgICBzZWxlY3Rpb25Cb3VuZHNJblJv
b3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhzZWxlY3Rl
ZFJhbmdlLT5hYnNvbHV0ZUJvdW5kaW5nQm94KCkpOworICAgIGVsc2UKKyAgICAgICAgc2VsZWN0
aW9uQm91bmRzSW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gZnJhbWVWaWV3LT5jb250ZW50c1RvUm9v
dFZpZXcoZnJhbWUuc2VsZWN0aW9uKCkuYWJzb2x1dGVDYXJldEJvdW5kcygpKTsKKworICAgIGF1
dG8gY2VudGVyT2ZUYXJnZXRCb3VuZHMgPSBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRp
bmF0ZXMuY2VudGVyKCk7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBjZW50ZXJUb3BJblJvb3RW
aWV3Q29vcmRpbmF0ZXMgeyBjZW50ZXJPZlRhcmdldEJvdW5kcy54KCksIHNlbGVjdGlvbkJvdW5k
c0luUm9vdFZpZXdDb29yZGluYXRlcy55KCkgfTsKKworICAgIGF1dG8gY2xpY2thYmxlTm9uRWRp
dGFibGVOb2RlID0gWyZdIChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhdGlvbkluUm9v
dFZpZXdDb29yZGluYXRlcykgLT4gTm9kZSogeworICAgICAgICBGbG9hdFBvaW50IGFkanVzdGVk
UG9pbnQ7CisgICAgICAgIGF1dG8qIGhpdE5vZGUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLm5vZGVS
ZXNwb25kaW5nVG9DbGlja0V2ZW50cyhsb2NhdGlvbkluUm9vdFZpZXdDb29yZGluYXRlcywgYWRq
dXN0ZWRQb2ludCk7CisgICAgICAgIGlmICghaGl0Tm9kZSB8fCBpczxIVE1MQm9keUVsZW1lbnQ+
KGhpdE5vZGUpIHx8IGlzPERvY3VtZW50PihoaXROb2RlKSB8fCBoaXROb2RlLT5oYXNFZGl0YWJs
ZVN0eWxlKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4g
aGl0Tm9kZTsKKyAgICB9OworCisgICAgYXV0byBzY2FsZUZhY3RvciA9IHBhZ2VTY2FsZUZhY3Rv
cigpOworCisgICAgLy8gVGhpcyBoZXVyaXN0aWMgYXR0ZW1wdHMgdG8gZmluZCBhIGxpc3Qgb2Yg
cmVjdHMgdG8gYXZvaWQgd2hlbiBzaG93aW5nIHRoZSBjYWxsb3V0IG1lbnUgb24gaU9TLgorICAg
IC8vIEZpcnN0LCBoaXQtdGVzdCBzZXZlcmFsIHBvaW50cyBhYm92ZSB0aGUgYm91bmRzIG9mIHRo
ZSBzZWxlY3Rpb24gcmVjdCBpbiBzZWFyY2ggb2YgY2xpY2thYmxlIG5vZGVzIHRoYXQgYXJlIG5v
dCBlZGl0YWJsZS4KKyAgICAvLyBTZWNvbmRseSwgaGl0LXRlc3Qgc2V2ZXJhbCBwb2ludHMgYXJv
dW5kIHRoZSBlZGdlcyBvZiB0aGUgc2VsZWN0aW9uIHJlY3QgYW5kIGV4Y2x1ZGUgYW55IG5vZGVz
IGZvdW5kIGluIHRoZSBmaXJzdCByb3VuZCBvZgorICAgIC8vIGhpdC10ZXN0aW5nIGlmIHRoZXNl
IG5vZGVzIGFyZSBhbHNvIHJlYWNoYWJsZSBieSBtb3Zpbmcgb3V0d2FyZHMgZnJvbSB0aGUgbGVm
dCwgcmlnaHQsIG9yIGJvdHRvbSBlZGdlcyBvZiB0aGUgc2VsZWN0aW9uLgorICAgIC8vIEFkZGl0
aW9uYWxseSwgZXhjbHVkZSBhbnkgaGl0LXRlc3RlZCBub2RlcyB0aGF0IGFyZSBlaXRoZXIgdmVy
eSBsYXJnZSByZWxhdGl2ZSB0byB0aGUgc2l6ZSBvZiB0aGUgcm9vdCB2aWV3LCBvciBjb21wbGV0
ZWx5CisgICAgLy8gZW5jb21wYXNzIHRoZSBzZWxlY3Rpb24gYm91bmRzLiBUaGUgcmVzdWx0aW5n
IHJlY3RzIGFyZSB0aGUgYm91bmRzIG9mIHRoZXNlIGhpdC10ZXN0ZWQgbm9kZXMgaW4gcm9vdCB2
aWV3IGNvb3JkaW5hdGVzLgorICAgIEhhc2hTZXQ8UmVmPE5vZGU+PiBoaXRUZXN0ZWROb2RlczsK
KyAgICBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiByZWN0c1RvQXZvaWRJblJvb3RWaWV3Q29v
cmRpbmF0ZXM7CisgICAgY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQsIDU+IG9mZnNldHNGb3JIaXRU
ZXN0aW5nIHt7IC0zMCwgLTUxIH0sIHsgMzEsIC01MCB9LCB7IC02MCwgLTM0IH0sIHsgNjAsIC0z
NiB9LCB7IDAsIC0yMCB9fTsKKyAgICBmb3IgKGF1dG8mIG9mZnNldCA6IG9mZnNldHNGb3JIaXRU
ZXN0aW5nKSB7CisgICAgICAgIGF1dG8gaGl0VGVzdExvY2F0aW9uID0gY2VudGVyVG9wSW5Sb290
Vmlld0Nvb3JkaW5hdGVzOworICAgICAgICBoaXRUZXN0TG9jYXRpb24ubW92ZUJ5KG9mZnNldCAv
IHNjYWxlRmFjdG9yKTsKKyAgICAgICAgaWYgKGF1dG8qIGhpdE5vZGUgPSBjbGlja2FibGVOb25F
ZGl0YWJsZU5vZGUoaGl0VGVzdExvY2F0aW9uKSkKKyAgICAgICAgICAgIGhpdFRlc3RlZE5vZGVz
LmFkZCgqaGl0Tm9kZSk7CisgICAgfQorCisgICAgY29uc3QgZmxvYXQgbWFyZ2luRm9ySGl0VGVz
dGluZ1N1cnJvdW5kaW5nTm9kZXMgPSA4MCAvIHNjYWxlRmFjdG9yOworICAgIFZlY3RvcjxGbG9h
dFBvaW50LCAzPiBleGNsdXNpb25IaXRUZXN0TG9jYXRpb25zIHsKKyAgICAgICAgeyBzZWxlY3Rp
b25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMueCgpIC0gbWFyZ2luRm9ySGl0VGVzdGluZ1N1
cnJvdW5kaW5nTm9kZXMsIGNlbnRlck9mVGFyZ2V0Qm91bmRzLnkoKSB9LAorICAgICAgICB7IGNl
bnRlck9mVGFyZ2V0Qm91bmRzLngoKSwgc2VsZWN0aW9uQm91bmRzSW5Sb290Vmlld0Nvb3JkaW5h
dGVzLm1heFkoKSArIG1hcmdpbkZvckhpdFRlc3RpbmdTdXJyb3VuZGluZ05vZGVzIH0sCisgICAg
ICAgIHsgc2VsZWN0aW9uQm91bmRzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLm1heFgoKSArIG1hcmdp
bkZvckhpdFRlc3RpbmdTdXJyb3VuZGluZ05vZGVzLCBjZW50ZXJPZlRhcmdldEJvdW5kcy55KCkg
fQorICAgIH07CisKKyAgICBmb3IgKGF1dG8mIGxvY2F0aW9uIDogZXhjbHVzaW9uSGl0VGVzdExv
Y2F0aW9ucykgeworICAgICAgICBpZiAoYXV0byogbm9kZVRvRXhjbHVkZSA9IGNsaWNrYWJsZU5v
bkVkaXRhYmxlTm9kZShsb2NhdGlvbikpCisgICAgICAgICAgICBoaXRUZXN0ZWROb2Rlcy5yZW1v
dmUoKm5vZGVUb0V4Y2x1ZGUpOworICAgIH0KKworICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIHRv
byBsYXJnZSwgZG9uJ3QgY29uc2lkZXIgaXQgdG8gYmUgYSBwb3RlbnRpYWwgZWxlbWVudCBpbiBh
IGNvbnRleHQgbWVudSBvciB0b29sYmFyIG9uIHRoZSBwYWdlLgorICAgIGNvbnN0IGRvdWJsZSBm
YWN0b3JPZkNvbnRlbnRBcmVhID0gMC43NTsKKyAgICBhdXRvIGNvbnRleHRNZW51RWxlbWVudFNp
emVMaW1pdCA9IGZhY3Rvck9mQ29udGVudEFyZWEgKiBwYWdlU2NhbGVGYWN0b3IoKSAqIG1fcGFn
ZS0+bWFpbkZyYW1lKCkudmlldygpLT51bm9ic2N1cmVkQ29udGVudFJlY3QoKS5zaXplKCk7CisK
KyAgICBmb3IgKGF1dG8mIG5vZGUgOiBoaXRUZXN0ZWROb2RlcykgeworICAgICAgICBSZWZQdHI8
RWxlbWVudD4gZWxlbWVudDsKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAg
ICAgICAgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUucHRyKCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBlbGVtZW50ID0gbm9kZS0+cGFyZW50RWxlbWVudCgpOworCisgICAg
ICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8g
Ym91bmRzID0gZWxlbWVudC0+Ym91bmRzSW5Sb290Vmlld1NwYWNlKCk7CisgICAgICAgIGlmIChi
b3VuZHMud2lkdGgoKSA+IGNvbnRleHRNZW51RWxlbWVudFNpemVMaW1pdC53aWR0aCgpIHx8IGJv
dW5kcy5oZWlnaHQoKSA+IGNvbnRleHRNZW51RWxlbWVudFNpemVMaW1pdC5oZWlnaHQoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChib3VuZHMuY29udGFpbnMoZW5jbG9z
aW5nSW50UmVjdChzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMpKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJlY3RzVG9Bdm9pZEluUm9vdFZpZXdDb29yZGlu
YXRlcy5hcHBlbmQoV1RGTW92ZShib3VuZHMpKTsKKyAgICB9CisKKyAgICByZXBseShXVEZNb3Zl
KHJlY3RzVG9Bdm9pZEluUm9vdFZpZXdDb29yZGluYXRlcykpOworfQorCiB2b2lkIFdlYlBhZ2U6
OmdldFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0KHVpbnQzMl90IGdyYW51
bGFyaXR5LCBpbnQzMl90IG9mZnNldCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIEZy
YW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1l
KCk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
MDRjZmY1Y2RhMjAyMjIwMWZmMDZjNDNkNjM1NDdlNmNiOGY2MTA4OS4uNTY1NDhlYjVkMjZmOGU5
NjBjMjAzOTFlMjNiZWJjMGI4MzllYWIxNSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE5LTAyLTIwICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIENhbGxvdXQg
bWVudSBvdmVybGFwcyBpbi1wYWdlIGNvbnRyb2xzIHdoZW4gZWRpdGluZyBhIGNvbW1lbnQgaW4g
Z2l0aHViLmNvbSdzIGlzc3VlIHRyYWNrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NDg3MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDY3MDE5
NzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RS
OjpVSVNjcmlwdENvbnRyb2xsZXI6Om1lbnVSZWN0IGNvbnN0KToKKyAgICAgICAgKFdUUjo6VUlT
Y3JpcHRDb250cm9sbGVyOjppc1Nob3dpbmdNZW51IGNvbnN0KToKKyAgICAgICAgKiBUZXN0UnVu
bmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRs
OgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6bWVudVJlY3Qg
Y29uc3QpOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OmlzU2hvd2luZ01lbnUg
Y29uc3QpOgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2Ny
aXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1
bm5lcldLV2ViVmlldy5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0
Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjpyZWN0
Rm9yTWVudUFjdGlvbiBjb25zdCk6CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6
bWVudVJlY3QgY29uc3QpOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OmlzU2hv
d2luZ01lbnUgY29uc3QpOgorICAgICAgICAoV1RSOjpmaW5kVmlld0luSGllcmFyY2h5T2ZUeXBl
KTogRGVsZXRlZC4KKwogMjAxOS0wMi0xOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIFJFR1JFU1NJT04gKFBTT04pOiBDYW4ndCBhY2Nlc3Mgb3B0dW1iYW5rLmNv
bSBmcm9tIG15dWhjLmNvbQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJ
U2NyaXB0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MubW0KaW5kZXggZmZiNGRlYTZhMmM3ZTBiMGJiNTY3MTBlZTQzM2RkMTFj
MDk3MTY0MC4uZjQwOGNjYTE3N2NjNDNiNzc3MDZiMmNkZjczNTQ2Mjg1ZDA0YWJjZSAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCkBA
IC0zMzcsNiArMzM3LDE2IEBAIEpTT2JqZWN0UmVmIFVJU2NyaXB0Q29udHJvbGxlcjo6cmVjdEZv
ck1lbnVBY3Rpb24oSlNTdHJpbmdSZWYpIGNvbnN0CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
K0pTT2JqZWN0UmVmIFVJU2NyaXB0Q29udHJvbGxlcjo6bWVudVJlY3QoKSBjb25zdAoreworICAg
IHJldHVybiBudWxscHRyOworfQorCitib29sIFVJU2NyaXB0Q29udHJvbGxlcjo6aXNTaG93aW5n
TWVudSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIFVJU2NyaXB0Q29u
dHJvbGxlcjo6cGxhdGZvcm1TZXREaWRFbmRTY3JvbGxpbmdDYWxsYmFjaygpCiB7CiB9CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9V
SVNjcmlwdENvbnRyb2xsZXIuaWRsIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENv
bnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbAppbmRleCAzYTljM2UyOWI5YzEy
MmY0NzYyM2MwMmNhMWU4ZjM2ZTI5YTY1NzZhLi41ZWM5MTkxYWZiMGYzMDc1NDI0ZTcyNmE2OTM5
ZjI5NzFmODM1MTE0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0
Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsCisrKyBiL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5p
ZGwKQEAgLTIyNSw2ICsyMjUsOCBAQCBpbnRlcmZhY2UgVUlTY3JpcHRDb250cm9sbGVyIHsKIAog
ICAgIGF0dHJpYnV0ZSBvYmplY3QgZGlkU2hvd01lbnVDYWxsYmFjazsKICAgICBhdHRyaWJ1dGUg
b2JqZWN0IGRpZEhpZGVNZW51Q2FsbGJhY2s7CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xl
YW4gaXNTaG93aW5nTWVudTsKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgb2JqZWN0IG1lbnVSZWN0
OwogICAgIG9iamVjdCByZWN0Rm9yTWVudUFjdGlvbihET01TdHJpbmcgYWN0aW9uKTsKIAogICAg
IGF0dHJpYnV0ZSBvYmplY3Qgd2lsbEJlZ2luWm9vbWluZ0NhbGxiYWNrOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVy
LmNwcCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dHJvbGxlci5jcHAKaW5kZXggYjk0NzJkMGZkMTc3NjllYjhhZGZhZjRiZjNjYmM3OTZiM2RlOGM2
MC4uNjEyZWE5YzgzYmFmZGFkNDAyYTZiMDY2ZDRiYjg5YTdjOTM2ODFjYiAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVy
LmNwcAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlw
dENvbnRyb2xsZXIuY3BwCkBAIC01MzIsMTEgKzUzMiwyMSBAQCB2b2lkIFVJU2NyaXB0Q29udHJv
bGxlcjo6cGxhdGZvcm1TZXREaWRIaWRlTWVudUNhbGxiYWNrKCkKIHsKIH0KIAorSlNPYmplY3RS
ZWYgVUlTY3JpcHRDb250cm9sbGVyOjptZW51UmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKIEpTT2JqZWN0UmVmIFVJU2NyaXB0Q29udHJvbGxlcjo6cmVjdEZvck1lbnVB
Y3Rpb24oSlNTdHJpbmdSZWYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK2Jv
b2wgVUlTY3JpcHRDb250cm9sbGVyOjppc1Nob3dpbmdNZW51KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpwbGF0Zm9ybUNsZWFyQWxs
Q2FsbGJhY2tzKCkKIHsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlT
Y3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJl
ZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKaW5kZXggNWYzMzVlZDIxMzk5
ZjE4YjAyNGIxZjY3OGNiYmQwYmU0ZGI0NmUxZC4uY2UzNTg0MTcwYTljNDg3NjExNTBmNzRmOWRm
NTUyNmJiNjQ2N2ZlNyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlw
dENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJl
ZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKQEAgLTE2NCw3ICsxNjQsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXREaWRTaG93TWVudUNhbGxiYWNrKEpTVmFsdWVSZWYpOwog
ICAgIEpTVmFsdWVSZWYgZGlkU2hvd01lbnVDYWxsYmFjaygpIGNvbnN0OwogCisgICAgYm9vbCBp
c1Nob3dpbmdNZW51KCkgY29uc3Q7CiAgICAgSlNPYmplY3RSZWYgcmVjdEZvck1lbnVBY3Rpb24o
SlNTdHJpbmdSZWYgYWN0aW9uKSBjb25zdDsKKyAgICBKU09iamVjdFJlZiBtZW51UmVjdCgpIGNv
bnN0OwogCiAgICAgdm9pZCBzZXREaWRFbmRTY3JvbGxpbmdDYWxsYmFjayhKU1ZhbHVlUmVmKTsK
ICAgICBKU1ZhbHVlUmVmIGRpZEVuZFNjcm9sbGluZ0NhbGxiYWNrKCkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcuaCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5oCmluZGV4
IDI4ZDU3YWMyYTY2Y2ViMTBlNjE1MGUxMWI2OGRhMGMyYzlhZTc2ODguLjFkM2ExOGM1NmE4YTIw
MjhlNWI0NzFmYTM4NzE0NmUyNDgzN2ZhODQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5oCkBAIC01Niw2ICs1Niw3IEBACiBAcHJv
cGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBVSUVkZ2VJbnNldHMgb3ZlcnJpZGVTYWZlQXJlYUlu
c2V0czsKIAogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXI9aXNTaG93aW5n
S2V5Ym9hcmQpIEJPT0wgc2hvd2luZ0tleWJvYXJkOworQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5LCBnZXR0ZXI9aXNTaG93aW5nTWVudSkgQk9PTCBzaG93aW5nTWVudTsKIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBhc3NpZ24pIEJPT0wgdXNlc1NhZmFyaUxpa2VSb3RhdGlvbjsKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgZ2V0dGVyPWlzSW50ZXJhY3RpbmdXaXRoRm9ybUNv
bnRyb2wpIEJPT0wgaW50ZXJhY3RpbmdXaXRoRm9ybUNvbnRyb2w7CiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQppbmRleCAwOTg3
ZDJmMjdiZDdkMTY2YzVkN2ZhYmRiMDQ1Yjg4NzRlMmFmOTBjLi43Y2M0OTc2NmViZGMwMGFlZDc4
OGYxMjkxMzJkOTc4MDBlNWY1NGU1IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCkBAIC0xMTcsMTkgKzExNyw2IEBAIHN0YXRp
YyBCT09MIGZvckVhY2hWaWV3SW5IaWVyYXJjaHkoVUlWaWV3ICp2aWV3LCB2b2lkKF5tYXBGdW5j
dGlvbikoVUlWaWV3ICpzdWJ2CiAgICAgcmV0dXJuIHN0b3A7CiB9CiAKLXN0YXRpYyBVSVZpZXcg
KmZpbmRWaWV3SW5IaWVyYXJjaHlPZlR5cGUoVUlWaWV3ICp2aWV3LCBDbGFzcyB2aWV3Q2xhc3Mp
Ci17Ci0gICAgX19ibG9jayBSZXRhaW5QdHI8VUlWaWV3PiBmb3VuZFZpZXc7Ci0gICAgZm9yRWFj
aFZpZXdJbkhpZXJhcmNoeSh2aWV3LCBeKFVJVmlldyAqc3VidmlldywgQk9PTCAqc3RvcCkgewot
ICAgICAgICBpZiAoIVtzdWJ2aWV3IGlzS2luZE9mQ2xhc3M6dmlld0NsYXNzXSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBmb3VuZFZpZXcgPSBzdWJ2aWV3OwotICAgICAgICAqc3Rv
cCA9IFlFUzsKLSAgICB9KTsKLSAgICByZXR1cm4gZm91bmRWaWV3LmF1dG9yZWxlYXNlKCk7Ci19
Ci0KIHN0YXRpYyBOU0FycmF5PFVJVmlldyAqPiAqZmluZEFsbFZpZXdzSW5IaWVyYXJjaHlPZlR5
cGUoVUlWaWV3ICp2aWV3LCBDbGFzcyB2aWV3Q2xhc3MpCiB7CiAgICAgX19ibG9jayBSZXRhaW5Q
dHI8TlNNdXRhYmxlQXJyYXk+IHZpZXdzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0XSk7CkBAIC04ODMsMjUgKzg3MCwyMSBAQCBKU09iamVjdFJlZiBVSVNjcmlwdENvbnRy
b2xsZXI6OnJlY3RGb3JNZW51QWN0aW9uKEpTU3RyaW5nUmVmIGpzQWN0aW9uKSBjb25zdAogCiAg
ICAgVUlXaW5kb3cgKndpbmRvd0ZvckJ1dHRvbiA9IG5pbDsKICAgICBVSUJ1dHRvbiAqYnV0dG9u
Rm9yQWN0aW9uID0gbmlsOwotICAgIGZvciAoVUlXaW5kb3cgKndpbmRvdyBpbiBVSUFwcGxpY2F0
aW9uLnNoYXJlZEFwcGxpY2F0aW9uLndpbmRvd3MpIHsKLSAgICAgICAgaWYgKCFbd2luZG93IGlz
S2luZE9mQ2xhc3M6VUlUZXh0RWZmZWN0c1dpbmRvdy5jbGFzc10pCi0gICAgICAgICAgICBjb250
aW51ZTsKKyAgICBVSVZpZXcgKmNhbGxvdXRCYXIgPSBVSUNhbGxvdXRCYXIuYWN0aXZlQ2FsbG91
dEJhcjsKKyAgICBpZiAoIWNhbGxvdXRCYXIud2luZG93KQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgICAgICBVSVZpZXcgKmNhbGxvdXRCYXIgPSBmaW5kVmlld0luSGllcmFyY2h5T2ZU
eXBlKHdpbmRvdywgVUlDYWxsb3V0QmFyLmNsYXNzKTsKLSAgICAgICAgaWYgKCFjYWxsb3V0QmFy
KQorICAgIGZvciAoVUlCdXR0b24gKmJ1dHRvbiBpbiBmaW5kQWxsVmlld3NJbkhpZXJhcmNoeU9m
VHlwZShjYWxsb3V0QmFyLCBVSUJ1dHRvbi5jbGFzcykpIHsKKyAgICAgICAgTlNTdHJpbmcgKmJ1
dHRvblRpdGxlID0gW2J1dHRvbiB0aXRsZUZvclN0YXRlOlVJQ29udHJvbFN0YXRlTm9ybWFsXTsK
KyAgICAgICAgaWYgKCFidXR0b25UaXRsZS5sZW5ndGgpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICBmb3IgKFVJQnV0dG9uICpidXR0b24gaW4gZmluZEFsbFZpZXdzSW5IaWVyYXJj
aHlPZlR5cGUoY2FsbG91dEJhciwgVUlCdXR0b24uY2xhc3MpKSB7Ci0gICAgICAgICAgICBOU1N0
cmluZyAqYnV0dG9uVGl0bGUgPSBbYnV0dG9uIHRpdGxlRm9yU3RhdGU6VUlDb250cm9sU3RhdGVO
b3JtYWxdOwotICAgICAgICAgICAgaWYgKCFidXR0b25UaXRsZS5sZW5ndGgpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICghW2J1dHRvblRpdGxlIGlzRXF1YWxU
b1N0cmluZzooX19icmlkZ2UgTlNTdHJpbmcgKilhY3Rpb24uZ2V0KCldKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIVtidXR0b25UaXRsZSBpc0VxdWFsVG9TdHJpbmc6
KF9fYnJpZGdlIE5TU3RyaW5nICopYWN0aW9uLmdldCgpXSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgICAgICBidXR0b25Gb3JBY3Rpb24gPSBidXR0b247Ci0gICAgICAgICAgICB3
aW5kb3dGb3JCdXR0b24gPSB3aW5kb3c7Ci0gICAgICAgIH0KKyAgICAgICAgYnV0dG9uRm9yQWN0
aW9uID0gYnV0dG9uOworICAgICAgICB3aW5kb3dGb3JCdXR0b24gPSBjYWxsb3V0QmFyLndpbmRv
dzsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKCFidXR0b25Gb3JBY3Rpb24pCkBA
IC05MTEsNiArODk0LDIxIEBAIEpTT2JqZWN0UmVmIFVJU2NyaXB0Q29udHJvbGxlcjo6cmVjdEZv
ck1lbnVBY3Rpb24oSlNTdHJpbmdSZWYganNBY3Rpb24pIGNvbnN0CiAgICAgcmV0dXJuIG1fY29u
dGV4dC0+b2JqZWN0RnJvbVJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0KHJlY3RJblJvb3RWaWV3Q29v
cmRpbmF0ZXMub3JpZ2luLngsIHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMub3JpZ2luLnksIHJl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMuc2l6ZS53aWR0aCwgcmVjdEluUm9vdFZpZXdDb29yZGlu
YXRlcy5zaXplLmhlaWdodCkpOwogfQogCitKU09iamVjdFJlZiBVSVNjcmlwdENvbnRyb2xsZXI6
Om1lbnVSZWN0KCkgY29uc3QKK3sKKyAgICBVSVZpZXcgKmNhbGxvdXRCYXIgPSBVSUNhbGxvdXRC
YXIuYWN0aXZlQ2FsbG91dEJhcjsKKyAgICBpZiAoIWNhbGxvdXRCYXIud2luZG93KQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIENHUmVjdCByZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVz
ID0gW2NhbGxvdXRCYXIgY29udmVydFJlY3Q6Y2FsbG91dEJhci5ib3VuZHMgdG9WaWV3OnBsYXRm
b3JtQ29udGVudFZpZXcoKV07CisgICAgcmV0dXJuIG1fY29udGV4dC0+b2JqZWN0RnJvbVJlY3Qo
V2ViQ29yZTo6RmxvYXRSZWN0KHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMub3JpZ2luLngsIHJl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMub3JpZ2luLnksIHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0
ZXMuc2l6ZS53aWR0aCwgcmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy5zaXplLmhlaWdodCkpOwor
fQorCitib29sIFVJU2NyaXB0Q29udHJvbGxlcjo6aXNTaG93aW5nTWVudSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wbGF0
Zm9ybVZpZXcoKS5zaG93aW5nTWVudTsKK30KKwogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnBs
YXRmb3JtU2V0RGlkRW5kU2Nyb2xsaW5nQ2FsbGJhY2soKQogewogICAgIFRlc3RSdW5uZXJXS1dl
YlZpZXcgKndlYlZpZXcgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXco
KS0+cGxhdGZvcm1WaWV3KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzhkNjhhZTk2Yjc1OTViNWRjMWVjYjhjMzI4ODhl
YjIwM2Q1ZWE0MC4uZjNlMzEwNjU1YWI5OGM3ZDVmODdlOTM4MDI5MWM1ZjI4OGZlOGNlMiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE5IEBACisyMDE5LTAyLTIwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNp
ZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIENhbGxvdXQgbWVudSBvdmVybGFwcyBpbi1w
YWdlIGNvbnRyb2xzIHdoZW4gZWRpdGluZyBhIGNvbW1lbnQgaW4gZ2l0aHViLmNvbSdzIGlzc3Vl
IHRyYWNrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5NDg3MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDY3MDE5NzQ+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9p
b3MvYXZvaWQtc2hvd2luZy1jYWxsb3V0LW1lbnUtb3Zlci1jb250cm9scy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL2lvcy9hdm9pZC1zaG93aW5nLWNh
bGxvdXQtbWVudS1vdmVyLWNvbnRyb2xzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHJlc291cmNl
cy91aS1oZWxwZXIuanM6CisgICAgICAgICh3aW5kb3cuVUlIZWxwZXIud2FpdEZvck1lbnVUb1No
b3cucmV0dXJuLm5ldy5Qcm9taXNlKToKKyAgICAgICAgKHdpbmRvdy5VSUhlbHBlci53YWl0Rm9y
TWVudVRvU2hvdyk6CisgICAgICAgICh3aW5kb3cuVUlIZWxwZXIubWVudVJlY3QpOgorICAgICAg
ICAod2luZG93LlVJSGVscGVyKToKKwogMjAxOS0wMi0xOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFj
aHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmVydCBmdW5jdGlvbmFsIHBhcnQg
b2YgcjI0MTQ1MQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaW9z
L2F2b2lkLXNob3dpbmctY2FsbG91dC1tZW51LW92ZXItY29udHJvbHMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaW9zL2F2b2lkLXNob3dpbmctY2FsbG91dC1t
ZW51LW92ZXItY29udHJvbHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1ZDkwMmIxMGU0Y2Rl
ZWQ4YzE5ODllNzdhNDM3MzM3ZTEwZTExM2MKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9lZGl0aW5nL3NlbGVjdGlvbi9pb3MvYXZvaWQtc2hvd2luZy1jYWxsb3V0LW1lbnUtb3Zlci1j
b250cm9scy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorICAgICAgICAgICAgICAKKwor
VmVyaWZpZXMgdGhhdCB3ZSBkb24ndCBzaG93IHRoZSBzeXN0ZW0gY2FsbG91dCBtZW51IG92ZXIg
Y29udHJvbHMuIFRvIHRlc3QgbWFudWFsbHk6IGZvY3VzIHRoZSBlZGl0YWJsZSBkb2N1bWVudCBp
biB0aGUgaWZyYW1lLCBzZWxlY3Qgc29tZSB0ZXh0LCBhbmQgY29uZmlybSB0aGF0IHRoZSBjYWxs
b3V0IGJhciBpcyBzaG93biBiZW5lYXRoIHRoZSBzZWxlY3Rpb24gaW5zdGVhZCBvZiBhYm92ZSB0
aGUgc2VsZWN0aW9uLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBjZW50
ZXJZKGdyYWJiZXJSZWN0KSA8IGNlbnRlclkobWVudVJlY3QpIGlzIHRydWUKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9pb3MvYXZvaWQtc2hvd2luZy1jYWxsb3V0LW1lbnUt
b3Zlci1jb250cm9scy5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaW9zL2F2
b2lkLXNob3dpbmctY2FsbG91dC1tZW51LW92ZXItY29udHJvbHMuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
OGJiOTI5MDU3ODZmZjdkMTFlOWQ2OWMxMTg3MzdkYzRlYWQxMzZjCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaW9zL2F2b2lkLXNob3dpbmctY2FsbG91
dC1tZW51LW92ZXItY29udHJvbHMuaHRtbApAQCAtMCwwICsxLDc3IEBACis8IURPQ1RZUEUgaHRt
bD4gPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyB1c2VGbGV4aWJsZVZpZXdwb3J0PXRydWUgXSAt
LT4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy91aS1oZWxw
ZXIuanMiPjwvc2NyaXB0PgorPG1ldGEgbmFtZT12aWV3cG9ydCBjb250ZW50PSJ3aWR0aD1kZXZp
Y2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+Cis8c3R5bGU+Citib2R5LCBodG1sIHsKKyAgICB3
aWR0aDogMTAwJTsKKyAgICBoZWlnaHQ6IDEwMCU7CisgICAgbWFyZ2luOiAwOworfQorCitpZnJh
bWUgeworICAgIHdpZHRoOiAzMjBweDsKKyAgICBoZWlnaHQ6IDEwMHB4OworfQorCisjY29udHJv
bHMgeworICAgIG1hcmdpbi10b3A6IDIwcHg7CisgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKK30K
KworaW5wdXRbdHlwZT1idXR0b25dIHsKKyAgICBoZWlnaHQ6IDFlbTsKK30KKzwvc3R5bGU+Cis8
c2NyaXB0PgoranNUZXN0SXNBc3luYyA9IHRydWU7CisKK2Z1bmN0aW9uIGNlbnRlclgocmVjdCkg
eworICAgIHJldHVybiByZWN0LmxlZnQgKyByZWN0LndpZHRoIC8gMjsKK30KKworZnVuY3Rpb24g
Y2VudGVyWShyZWN0KSB7CisgICAgcmV0dXJuIHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyAyOwor
fQorCithc3luYyBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGRlc2NyaXB0aW9uKCJWZXJpZmll
cyB0aGF0IHdlIGRvbid0IHNob3cgdGhlIHN5c3RlbSBjYWxsb3V0IG1lbnUgb3ZlciBjb250cm9s
cy4gVG8gdGVzdCBtYW51YWxseTogZm9jdXMgdGhlIGVkaXRhYmxlIGRvY3VtZW50IGluIHRoZSBp
ZnJhbWUsIHNlbGVjdCBzb21lIHRleHQsIGFuZCBjb25maXJtIHRoYXQgdGhlIGNhbGxvdXQgYmFy
IGlzIHNob3duIGJlbmVhdGggdGhlIHNlbGVjdGlvbiBpbnN0ZWFkIG9mIGFib3ZlIHRoZSBzZWxl
Y3Rpb24uIik7CisKKyAgICBhd2FpdCBVSUhlbHBlci5hY3RpdmF0ZUFuZFdhaXRGb3JJbnB1dFNl
c3Npb25BdCgxNjAsIDEwMCk7CisKKyAgICBjb25zdCBpZnJhbWVEb2N1bWVudCA9IGRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3IoImlmcmFtZSIpLmNvbnRlbnREb2N1bWVudDsKKyAgICBpZnJhbWVEb2N1
bWVudC5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihpZnJhbWVEb2N1bWVudC5ib2R5
KTsKKworICAgIGdyYWJiZXJSZWN0ID0ge307CisgICAgd2hpbGUgKCFncmFiYmVyUmVjdC53aWR0
aCAmJiAhZ3JhYmJlclJlY3QuaGVpZ2h0KQorICAgICAgICBncmFiYmVyUmVjdCA9IGF3YWl0IFVJ
SGVscGVyLmdldFNlbGVjdGlvbkVuZEdyYWJiZXJWaWV3UmVjdCgpOworCisgICAgYXdhaXQgVUlI
ZWxwZXIuYWN0aXZhdGVBdChjZW50ZXJYKGdyYWJiZXJSZWN0KSwgY2VudGVyWShncmFiYmVyUmVj
dCkpOworICAgIGF3YWl0IFVJSGVscGVyLndhaXRGb3JNZW51VG9TaG93KCk7CisgICAgbWVudVJl
Y3QgPSBhd2FpdCBVSUhlbHBlci5tZW51UmVjdCgpOworCisgICAgc2hvdWxkQmUoImNlbnRlclko
Z3JhYmJlclJlY3QpIDwgY2VudGVyWShtZW51UmVjdCkiLCAidHJ1ZSIpOworICAgIGZpbmlzaEpT
VGVzdCgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+
Cis8ZGl2IGlkPSJjb250cm9scyI+CisgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjEi
PjwvaW5wdXQ+CisgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjIiPjwvaW5wdXQ+Cisg
ICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjMiPjwvaW5wdXQ+CisgICAgPGlucHV0IHR5
cGU9ImJ1dHRvbiIgdmFsdWU9IjQiPjwvaW5wdXQ+CisgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIg
dmFsdWU9IjUiPjwvaW5wdXQ+CisgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjYiPjwv
aW5wdXQ+CisgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjciPjwvaW5wdXQ+CisgICAg
PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjgiPjwvaW5wdXQ+Cis8L2Rpdj4KKzxkaXY+Cisg
ICAgPGlmcmFtZSBzcmNkb2M9Ijxib2R5IGNvbnRlbnRlZGl0YWJsZT5Mb3JlbSBpcHN1bSBkb2xv
ciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2Qu
PC9ib2R5PiI+PC9pZnJhbWU+Cis8L2Rpdj4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPHAg
aWQ9ImNvbnNvbGUiPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9yZXNvdXJjZXMvdWktaGVscGVyLmpzIGIv
TGF5b3V0VGVzdHMvcmVzb3VyY2VzL3VpLWhlbHBlci5qcwppbmRleCA0ZGUwZDE0ZWEyYTgyODc3
NDE5YjAxMTlkNDRhNWU3NTE0MDc2YThhLi45ZTVmY2JlMGRmNjAwMmEyZDMzNzE3MGQ5OTJiNWZj
ZmMwMDlkYmE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9yZXNvdXJjZXMvdWktaGVscGVyLmpz
CisrKyBiL0xheW91dFRlc3RzL3Jlc291cmNlcy91aS1oZWxwZXIuanMKQEAgLTY2NSw0ICs2NjUs
MjQgQEAgd2luZG93LlVJSGVscGVyID0gY2xhc3MgVUlIZWxwZXIgewogICAgICAgICBjb25zdCBz
Y3JpcHQgPSAiSlNPTi5zdHJpbmdpZnkoW3VpQ29udHJvbGxlci5sYXN0VW5kb0xhYmVsLCB1aUNv
bnRyb2xsZXIuZmlyc3RSZWRvTGFiZWxdKSI7CiAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShy
ZXNvbHZlID0+IHRlc3RSdW5uZXIucnVuVUlTY3JpcHQoc2NyaXB0LCByZXN1bHQgPT4gcmVzb2x2
ZShKU09OLnBhcnNlKHJlc3VsdCkpKSk7CiAgICAgfQorCisgICAgc3RhdGljIHdhaXRGb3JNZW51
VG9TaG93KCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsK
KyAgICAgICAgICAgIHRlc3RSdW5uZXIucnVuVUlTY3JpcHQoYAorICAgICAgICAgICAgICAgIChm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF1aUNvbnRyb2xsZXIuaXNTaG93
aW5nTWVudSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci5kaWRTaG93TWVu
dUNhbGxiYWNrID0gKCkgPT4gdWlDb250cm9sbGVyLnVpU2NyaXB0Q29tcGxldGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sbGVy
LnVpU2NyaXB0Q29tcGxldGUoKTsKKyAgICAgICAgICAgICAgICB9KSgpYCwgcmVzb2x2ZSk7Cisg
ICAgICAgIH0pOworICAgIH0KKworICAgIHN0YXRpYyBtZW51UmVjdCgpCisgICAgeworICAgICAg
ICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAgICAgICAgICB0ZXN0UnVubmVy
LnJ1blVJU2NyaXB0KCJKU09OLnN0cmluZ2lmeSh1aUNvbnRyb2xsZXIubWVudVJlY3QpIiwgcmVz
dWx0ID0+IHJlc29sdmUoSlNPTi5wYXJzZShyZXN1bHQpKSk7CisgICAgICAgIH0pOworICAgIH0K
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362592</attachid>
            <date>2019-02-20 21:56:28 -0800</date>
            <delta_ts>2019-02-21 09:00:26 -0800</delta_ts>
            <desc>Work in progress</desc>
            <filename>bug-194873-20190220215628.patch</filename>
            <type>text/plain</type>
            <size>31466</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxNzU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYyNTZjOGFmMGVkZDk1NjU2
NjZlOWRmMzczZDE2N2I1NWU3NGFkMGMuLjE3MGYwNmI5ZDY3YzU3MWM5MzgxZDE3ZDQyNTZkMDZl
MTlkMDY0NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTktMDItMjAgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQ2FsbG91dCBt
ZW51IG92ZXJsYXBzIGluLXBhZ2UgY29udHJvbHMgd2hlbiBlZGl0aW5nIGEgY29tbWVudCBpbiBn
aXRodWIuY29tJ3MgaXNzdWUgdHJhY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk0ODczCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NjcwMTk3
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0
OiBlZGl0aW5nL3NlbGVjdGlvbi9pb3MvYXZvaWQtc2hvd2luZy1jYWxsb3V0LW1lbnUtb3Zlci1j
b250cm9scy5odG1sCisKKyAgICAgICAgKiBQbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmg6Cisg
ICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWw6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfc21hcnRDYWxs
b3V0QmFyUG9zaXRpb25pbmdFbmFibGVkXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyByZXF1ZXN0QXV0b2NvcnJlY3Rpb25SZWN0c0ZvclN0
cmluZzp3aXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcg
cmVxdWVzdFJlY3RzVG9FdmFkZUZvclNlbGVjdGlvbkNvbW1hbmRzV2l0aENvbXBsZXRpb25IYW5k
bGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHJlcXVlc3RBdXRvY29ycmVjdGlvbkNv
bnRleHRXaXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9X
ZWJQYWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVxdWVz
dEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3Nh
Z2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVxdWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0
aW9uKToKKwogMjAxOS0wMi0xOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJldmVydCBmdW5jdGlvbmFsIHBhcnQgb2YgcjI0MTQ1MQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmggYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAppbmRleCAzOTRmZmUxZGJkOGY1
M2Q3NmRhNTgxYTBkMjMxNDJhYmY1NmU5MzRkLi5mMGFhMTJjN2NmZjQ3MWU3MjYyMDFhYjgzNzRi
YzYwNzYwMWRmODM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3Mv
VUlLaXRTUEkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEku
aApAQCAtOTg3LDYgKzk4Nyw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBVSURy
YWdPcGVyYXRpb24pCiAjZW5kaWYKIAogQGludGVyZmFjZSBVSUNhbGxvdXRCYXIgOiBVSVZpZXcK
KysgKFVJQ2FsbG91dEJhciAqKWFjdGl2ZUNhbGxvdXRCYXI7CiArICh2b2lkKWZhZGVTaGFyZWRD
YWxsb3V0QmFyOwogQGVuZAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQ
cmVmZXJlbmNlcy55YW1sIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFt
bAppbmRleCA3NGExMjJjNWI3N2ZjNWQ0MWEyODg5MWNhMGE1M2RmNWRlYzlmYWZlLi5jNGU4OGZm
NWQ3NzA1YmRjY2Q1Mzc1OWY5OGU4MzMxNTMwNmZkNmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYlByZWZlcmVuY2VzLnlhbWwKQEAgLTE1NTksNiArMTU1OSwxNCBAQCBNb3VzZW1vdmVFdmVu
dEhhbmRsaW5nUHJldmVudHNEZWZhdWx0RW5hYmxlZDoKICAgY2F0ZWdvcnk6IGludGVybmFsCiAg
IGNvbmRpdGlvbjogRU5BQkxFKFRPVUNIX0VWRU5UUykKIAorU21hcnRDYWxsb3V0QmFyUG9zaXRp
b25pbmdFbmFibGVkOgorICB0eXBlOiBib29sCisgIGRlZmF1bHRWYWx1ZTogdHJ1ZQorICBodW1h
blJlYWRhYmxlTmFtZTogIlNtYXJ0IENhbGxvdXQgQmFyIFBvc2l0aW9uaW5nIgorICBodW1hblJl
YWRhYmxlRGVzY3JpcHRpb246ICJBdm9pZCBpbnRlcmFjdGlibGUgY29udGVudCB3aGVuIHNob3dp
bmcgdGhlIGNhbGxvdXQgYmFyIgorICBjYXRlZ29yeTogaW50ZXJuYWwKKyAgd2ViY29yZUJpbmRp
bmc6IG5vbmUKKwogIyBEZXByZWNhdGVkCiAKIElDRUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQ6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQppbmRl
eCA3NTJhM2E0OWJiMzg4Y2E0ZjE2ZDFiOWYzN2FjZTAzYzE3OGNlOWFlLi42NzcwNGJkZjUxOGJj
M2NkZmMxYTM1YjM5Yzk5YjllYjk3NTdkZDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KQEAgLTQ3NSw2ICs0NzUsMTEgQEAgLSAoQk9PTClf
aXNSZXRhaW5pbmdBY3RpdmVGb2N1c2VkU3RhdGUKICAgICByZXR1cm4gX2ZvY3VzUHJlc2VydmF0
aW9uQ291bnQgfHwgX2FjdGl2ZUZvY3VzZWRTdGF0ZVJldGFpbkNvdW50OwogfQogCistIChCT09M
KV9zbWFydENhbGxvdXRCYXJQb3NpdGlvbmluZ0VuYWJsZWQKK3sKKyAgICByZXR1cm4gW19jb25m
aWd1cmF0aW9uIHByZWZlcmVuY2VzXS0+X3ByZWZlcmVuY2VzLT5zbWFydENhbGxvdXRCYXJQb3Np
dGlvbmluZ0VuYWJsZWQoKTsKK30KKwogI2VuZGlmCiAKICNpZiBVU0UoQVBQTEVfSU5URVJOQUxf
U0RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlld0ludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3SW50ZXJuYWwuaAppbmRleCBhZjE2ZmMzOGJlMzg0MDljMTNiZGRhMjExN2Y2ZTEzZDM2MmM3
MmE4Li5hZTUzZTE5NjE2ZDFmNzlkODkxMjUzZTQ3NzA5ZmEyNzcwNzZhMjlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwu
aApAQCAtMTY4LDYgKzE2OCw3IEBAIHN0cnVjdCBQcmludEluZm87CiBAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIFVJRWRnZUluc2V0cyBfY29tcHV0ZWRPYnNjdXJlZEluc2V0OwogQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBVSUVkZ2VJbnNldHMgX2NvbXB1dGVkVW5vYnNj
dXJlZFNhZmVBcmVhSW5zZXQ7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRl
cj1faXNSZXRhaW5pbmdBY3RpdmVGb2N1c2VkU3RhdGUpIEJPT0wgX3JldGFpbmluZ0FjdGl2ZUZv
Y3VzZWRTdGF0ZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfc21hcnRD
YWxsb3V0QmFyUG9zaXRpb25pbmdFbmFibGVkOwogI2VuZGlmCiAKICNpZiBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBiMmIw
ZTg1ZDJlMGQxNTliMDhkMDliMzM4MTdjOGZjMTI2YzBkODRmLi42ODc3ZjVhY2E3MDhjYzYxYTVh
ZWM2MmY0Njc3Mjc1MjMwZjBkYjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaApAQCAtNjg3LDYgKzY4Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbmNlbEF1dG9zY3Jv
bGwoKTsKICAgICB2b2lkIGhhcmR3YXJlS2V5Ym9hcmRBdmFpbGFiaWxpdHlDaGFuZ2VkKCk7CiAg
ICAgYm9vbCBpc1Njcm9sbGluZ09yWm9vbWluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNTY3JvbGxp
bmdPclpvb21pbmc7IH0KKyAgICB2b2lkIHJlcXVlc3RFdmFzaW9uUmVjdHNBYm92ZVNlbGVjdGlv
bihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+
Jik+JiYpOwogI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQogICAgIHZvaWQgZGlkSGFuZGxl
RHJhZ1N0YXJ0UmVxdWVzdChib29sIHN0YXJ0ZWQpOwogICAgIHZvaWQgZGlkSGFuZGxlQWRkaXRp
b25hbERyYWdJdGVtc1JlcXVlc3QoYm9vbCBhZGRlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCA3YmQ4
MGZkZDgyNmNhMzY0Mjk0YWNlNzI1NGQ0ZjA3YzlmZmQ0ZGY4Li5lZTEzZjBiZDBjMzlmZWRiODNi
MTBjMWVhOGUyM2ZhNDY3NzhhM2FlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTMzMjksOSArMzMyOSwx
MyBAQCAtIChjb25zdCBXZWJLaXQ6OldLQXV0b0NvcnJlY3Rpb25EYXRhJilhdXRvY29ycmVjdGlv
bkRhdGEKIC8vIFRoZSBjb21wbGV0aW9uIGhhbmRsZXIgY2FuIHBhc3MgbmlsIGlmIGlucHV0IGRv
ZXMgbm90IG1hdGNoIHRoZSBhY3R1YWwgdGV4dCBwcmVjZWRpbmcgdGhlIGluc2VydGlvbiBwb2lu
dC4KIC0gKHZvaWQpcmVxdWVzdEF1dG9jb3JyZWN0aW9uUmVjdHNGb3JTdHJpbmc6KE5TU3RyaW5n
ICopaW5wdXQgd2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShVSVdLQXV0b2NvcnJlY3Rp
b25SZWN0cyAqcmVjdHNGb3JJbnB1dCkpY29tcGxldGlvbkhhbmRsZXIKIHsKKyAgICBpZiAoIWNv
bXBsZXRpb25IYW5kbGVyKSB7CisgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRB
cmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJFeHBlY3RlZCBhIG5vbm51bGwgY29tcGxldGlvbiBo
YW5kbGVyIGluICVzLiIsIF9fUFJFVFRZX0ZVTkNUSU9OX19dOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCiAgICAgaWYgKCFpbnB1dCB8fCAhW2lucHV0IGxlbmd0aF0pIHsKLSAgICAgICAgaWYg
KGNvbXBsZXRpb25IYW5kbGVyKQotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMzM0OSw4ICszMzUzLDQ3IEBAIC0gKHZvaWQpcmVxdWVzdEF1dG9jb3JyZWN0aW9uUmVj
dHNGb3JTdHJpbmc6KE5TU3RyaW5nICopaW5wdXQgd2l0aENvbXBsZXRpb25IYW5kCiAgICAgICAg
IHZpZXctPl9hdXRvY29ycmVjdGlvbkRhdGEudGV4dEZpcnN0UmVjdCA9IGZpcnN0UmVjdDsKICAg
ICAgICAgdmlldy0+X2F1dG9jb3JyZWN0aW9uRGF0YS50ZXh0TGFzdFJlY3QgPSBsYXN0UmVjdDsK
IAotICAgICAgICBpZiAoY29tcGxldGlvbikKLSAgICAgICAgICAgIGNvbXBsZXRpb24ocmVjdHMu
c2l6ZSgpID8gW1dLQXV0b2NvcnJlY3Rpb25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJl
Y3RzOmZpcnN0UmVjdCBsYXN0UmVjdDpsYXN0UmVjdF0gOiBuaWwpOworICAgICAgICBjb21wbGV0
aW9uKHJlY3RzLnNpemUoKSA/IFtXS0F1dG9jb3JyZWN0aW9uUmVjdHMgYXV0b2NvcnJlY3Rpb25S
ZWN0c1dpdGhSZWN0czpmaXJzdFJlY3QgbGFzdFJlY3Q6bGFzdFJlY3RdIDogbmlsKTsKKyAgICB9
KTsKK30KKworLSAodm9pZClyZXF1ZXN0UmVjdHNUb0V2YWRlRm9yU2VsZWN0aW9uQ29tbWFuZHNX
aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNBcnJheTxOU1ZhbHVlICo+ICpyZWN0cykp
Y29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBpZiAoIWNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAg
ICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6
QCJFeHBlY3RlZCBhIG5vbm51bGwgY29tcGxldGlvbiBoYW5kbGVyIGluICVzLiIsIF9fUFJFVFRZ
X0ZVTkNUSU9OX19dOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFtzZWxmIF9z
aG91bGRTdXBwcmVzc1NlbGVjdGlvbkNvbW1hbmRzXSB8fCAhX3dlYlZpZXcuX3NtYXJ0Q2FsbG91
dEJhclBvc2l0aW9uaW5nRW5hYmxlZCB8fCBfd2ViVmlldy5fZWRpdGFibGUpIHsKKyAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQFsgXSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uZWxlbWVudFR5cGUgIT0gV2ViS2l0OjpJbnB1
dFR5cGU6OkNvbnRlbnRFZGl0YWJsZSAmJiBfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVt
ZW50VHlwZSAhPSBXZWJLaXQ6OklucHV0VHlwZTo6VGV4dEFyZWEpIHsKKyAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQFsgXSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBHaXZl
IHRoZSBwYWdlIHNvbWUgdGltZSB0byBwcmVzZW50IGN1c3RvbSBlZGl0aW5nIFVJIGJlZm9yZSBh
dHRlbXB0aW5nIHRvIGRldGVjdCBhbmQgZXZhZGUgaXQuCisgICAgYXV0byBkZWxheUJlZm9yZVNo
b3dpbmdDYWxsb3V0QmFyID0gKDAuMjVfcykubmFub3NlY29uZHMoKTsKKyAgICBkaXNwYXRjaF9h
ZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9XLCBkZWxheUJlZm9yZVNob3dpbmdD
YWxsb3V0QmFyKSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW2NvbXBsZXRpb24gPSBtYWtl
QmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpLCB3ZWFrU2VsZiA9IFdlYWtPYmpDUHRyPFdLQ29u
dGVudFZpZXc+KHNlbGYpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCF3ZWFrU2VsZikgewor
ICAgICAgICAgICAgY29tcGxldGlvbihAWyBdKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGF1dG8gc3Ryb25nU2VsZiA9IHdlYWtTZWxmLmdldCgpOworICAgICAg
ICBpZiAoIXN0cm9uZ1NlbGYtPl9wYWdlKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uKEBbIF0p
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3Ryb25nU2VsZi0+
X3BhZ2UtPnJlcXVlc3RFdmFzaW9uUmVjdHNBYm92ZVNlbGVjdGlvbihbY29tcGxldGlvbiA9IFdU
Rk1vdmUoY29tcGxldGlvbildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYgcmVj
dHMpIHsKKyAgICAgICAgICAgIGF1dG8gcmVjdHNBc1ZhbHVlcyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpyZWN0cy5zaXplKCldKTsKKyAgICAgICAg
ICAgIGZvciAoYXV0byYgZmxvYXRSZWN0IDogcmVjdHMpCisgICAgICAgICAgICAgICAgW3JlY3Rz
QXNWYWx1ZXMgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpmbG9hdFJlY3RdXTsK
KyAgICAgICAgICAgIGNvbXBsZXRpb24ocmVjdHNBc1ZhbHVlcy5nZXQoKSk7CisgICAgICAgIH0p
OwogICAgIH0pOwogfQogCkBAIC0zNTEzLDggKzM1NTYsMTAgQEAgLSAodm9pZClhcHBseUF1dG9j
b3JyZWN0aW9uOihOU1N0cmluZyAqKWNvcnJlY3Rpb24gdG9TdHJpbmc6KE5TU3RyaW5nICopaW5w
dXQgd2kKIAogLSAodm9pZClyZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250ZXh0V2l0aENvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShVSVdLQXV0b2NvcnJlY3Rpb25Db250ZXh0ICphdXRvY29ycmVj
dGlvbkNvbnRleHQpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgaWYgKCFjb21wbGV0aW9uSGFu
ZGxlcikKKyAgICBpZiAoIWNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgICAgIFtOU0V4Y2VwdGlv
biByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJFeHBlY3RlZCBhIG5v
bm51bGwgY29tcGxldGlvbiBoYW5kbGVyIGluICVzLiIsIF9fUFJFVFRZX0ZVTkNUSU9OX19dOwog
ICAgICAgICByZXR1cm47CisgICAgfQogCiAjaWYgVVNFKFVJS0lUX0tFWUJPQVJEX0FERElUSU9O
UykKICAgICBpZiAoW3NlbGYgX2Rpc2FibGVBdXRvbWF0aWNLZXlib2FyZFVJXSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5kZXggZTUwMDZl
ZGU1YjUwNDIyODE0MzcxNmFkYzdhNDA1ODM4ZjM0Mzk0My4uMmJiMWNjOWY2ZWUzZGViNTBkOTc1
MmQ4Y2FmNjA3ZmZmNzkwYjBiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dlYlBhZ2VQcm94eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V2ViUGFnZVByb3h5SU9TLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKIAogI2ltcG9ydCAiQVBJVUlDbGllbnQuaCIKKyNpbXBvcnQgIkNvbm5lY3Rpb24uaCIK
ICNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKICNpbXBvcnQgIkVkaXRpbmdSYW5nZS5oIgogI2lt
cG9ydCAiR2xvYmFsRmluZEluUGFnZVN0YXRlLmgiCkBAIC0xMTE4LDYgKzExMTksMTYgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmhhcmR3YXJlS2V5Ym9hcmRBdmFpbGFiaWxpdHlDaGFuZ2VkKCkKICAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhhcmR3YXJlS2V5Ym9hcmRBdmFp
bGFiaWxpdHlDaGFuZ2VkKCksIG1fcGFnZUlEKTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OnJl
cXVlc3RFdmFzaW9uUmVjdHNBYm92ZVNlbGVjdGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+Jik+JiYgY2FsbGJhY2spCit7CisgICAgaWYg
KCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgY2FsbGJhY2soeyB9KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYlBhZ2U6OlJlcXVlc3RFdmFzaW9uUmVjdHNBYm92ZVNlbGVjdGlvbigpLCBX
VEZNb3ZlKGNhbGxiYWNrKSwgbV9wYWdlSUQpOworfQorCiAjaWYgRU5BQkxFKERBVEFfSU5URVJB
Q1RJT04pCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRIYW5kbGVEcmFnU3RhcnRSZXF1ZXN0KGJv
b2wgc3RhcnRlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApp
bmRleCAxZGQyYmY3ZDRiNWFkZjQ3ZWZjOWExNmQ2MGQ3MmJhZjJjYzQ5Nzc4Li45ZTg3YzE5OWUz
ZWZkZjhlMzlmNzhiMDAyZDdjMjgyYTdmNjcxNGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC02NjQsNiArNjY0LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc3RvcmVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KGJvb2wpOwogICAgIHZvaWQgc3RhcnRB
dXRvc2Nyb2xsQXRQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CiAgICAgdm9p
ZCBjYW5jZWxBdXRvc2Nyb2xsKCk7CisgICAgdm9pZCByZXF1ZXN0RXZhc2lvblJlY3RzQWJvdmVT
ZWxlY3Rpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Rmxv
YXRSZWN0PiYpPiYmKTsKIAogICAgIHZvaWQgY29udGVudFNpemVDYXRlZ29yeURpZENoYW5nZShj
b25zdCBTdHJpbmcmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggMmQ1YjdiNWE2YmNkMDkzMDcxODNmNDQ5ZmFk
MTZjMjdjZDY0YjY4MS4uYTUyYmIyM2I5YjNhNWFiYTVjMDU0Y2E1MzlmOGMyODllOGRjOWRiMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNz
YWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluCkBAIC04MCw2ICs4MCw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVj
ZWl2ZXIgewogICAgIFN5bmNBcHBseUF1dG9jb3JyZWN0aW9uKFN0cmluZyBjb3JyZWN0aW9uLCBT
dHJpbmcgb3JpZ2luYWxUZXh0KSAtPiAoYm9vbCBhdXRvY29ycmVjdGlvbkFwcGxpZWQpIERlbGF5
ZWQKICAgICBSZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250ZXh0KFdlYktpdDo6Q2FsbGJhY2tJRCBj
YWxsYmFja0lEKQogICAgIEF1dG9jb3JyZWN0aW9uQ29udGV4dFN5bmMoKSAtPiAoc3RydWN0IFdl
YktpdDo6V2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0IGNvbnRleHQpIERlbGF5ZWQKKyAgICBSZXF1
ZXN0RXZhc2lvblJlY3RzQWJvdmVTZWxlY3Rpb24oKSAtPiAoVmVjdG9yPFdlYkNvcmU6OkZsb2F0
UmVjdD4gcmVjdHMpIEFzeW5jCiAgICAgR2V0UG9zaXRpb25JbmZvcm1hdGlvbihzdHJ1Y3QgV2Vi
S2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uUmVxdWVzdCByZXF1ZXN0KSAtPiAoc3RydWN0IFdl
YktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gaW5mb3JtYXRpb24pIERlbGF5
ZWQKICAgICBSZXF1ZXN0UG9zaXRpb25JbmZvcm1hdGlvbihzdHJ1Y3QgV2ViS2l0OjpJbnRlcmFj
dGlvbkluZm9ybWF0aW9uUmVxdWVzdCByZXF1ZXN0KQogICAgIFN0YXJ0SW50ZXJhY3Rpb25XaXRo
RWxlbWVudEF0UG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGUxNWU3
OWJlMTUzNTZkMjBkMWI1ODJmMGQ3Y2Y0YWFiMzNlYTllZGYuLjI5OWQwNzIyNTE0ZTk4OTQ0NDBl
OTg0MGQ2MWExNDQ3ZjI2MTE1ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0xNTA0LDYgKzE1MDQsMTA2IEBAIHZvaWQg
V2ViUGFnZTo6Y2FuY2VsQXV0b3Njcm9sbCgpCiAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVu
dEhhbmRsZXIoKS5jYW5jZWxTZWxlY3Rpb25BdXRvc2Nyb2xsKCk7CiB9CiAKK3ZvaWQgV2ViUGFn
ZTo6cmVxdWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mKT4mJiByZXBseSkKK3sKKyAgICBh
dXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1l
KCk7CisgICAgYXV0byBmcmFtZVZpZXcgPSBtYWtlUmVmUHRyKGZyYW1lLnZpZXcoKSk7CisgICAg
aWYgKCFmcmFtZVZpZXcpIHsKKyAgICAgICAgcmVwbHkoeyB9KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOworICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpIHsKKyAgICAgICAgcmVwbHkoeyB9KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghc2VsZWN0ZWRSYW5nZSkgeworICAg
ICAgICByZXBseSh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2Zv
Y3VzZWRFbGVtZW50IHx8ICFtX2ZvY3VzZWRFbGVtZW50LT5yZW5kZXJlcigpIHx8IG1fZm9jdXNl
ZEVsZW1lbnQtPnJlbmRlcmVyKCktPmlzVHJhbnNwYXJlbnRPckZ1bGx5Q2xpcHBlZFJlc3BlY3Rp
bmdQYXJlbnRGcmFtZXMoKSkgeworICAgICAgICByZXBseSh7IH0pOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5kc0luUm9vdFZpZXdDb29yZGlu
YXRlczsKKyAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkKKyAgICAgICAgc2VsZWN0aW9uQm91
bmRzSW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gZnJhbWVWaWV3LT5jb250ZW50c1RvUm9vdFZpZXco
c2VsZWN0ZWRSYW5nZS0+YWJzb2x1dGVCb3VuZGluZ0JveCgpKTsKKyAgICBlbHNlCisgICAgICAg
IHNlbGVjdGlvbkJvdW5kc0luUm9vdFZpZXdDb29yZGluYXRlcyA9IGZyYW1lVmlldy0+Y29udGVu
dHNUb1Jvb3RWaWV3KGZyYW1lLnNlbGVjdGlvbigpLmFic29sdXRlQ2FyZXRCb3VuZHMoKSk7CisK
KyAgICBhdXRvIGNlbnRlck9mVGFyZ2V0Qm91bmRzID0gc2VsZWN0aW9uQm91bmRzSW5Sb290Vmll
d0Nvb3JkaW5hdGVzLmNlbnRlcigpOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgY2VudGVyVG9w
SW5Sb290Vmlld0Nvb3JkaW5hdGVzIHsgY2VudGVyT2ZUYXJnZXRCb3VuZHMueCgpLCBzZWxlY3Rp
b25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMueSgpIH07CisKKyAgICBhdXRvIGNsaWNrYWJs
ZU5vbkVkaXRhYmxlTm9kZSA9IFsmXSAoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYXRp
b25JblJvb3RWaWV3Q29vcmRpbmF0ZXMpIC0+IE5vZGUqIHsKKyAgICAgICAgRmxvYXRQb2ludCBh
ZGp1c3RlZFBvaW50OworICAgICAgICBhdXRvKiBoaXROb2RlID0gbV9wYWdlLT5tYWluRnJhbWUo
KS5ub2RlUmVzcG9uZGluZ1RvQ2xpY2tFdmVudHMobG9jYXRpb25JblJvb3RWaWV3Q29vcmRpbmF0
ZXMsIGFkanVzdGVkUG9pbnQpOworICAgICAgICBpZiAoIWhpdE5vZGUgfHwgaXM8SFRNTEJvZHlF
bGVtZW50PihoaXROb2RlKSB8fCBpczxEb2N1bWVudD4oaGl0Tm9kZSkgfHwgaGl0Tm9kZS0+aGFz
RWRpdGFibGVTdHlsZSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAg
cmV0dXJuIGhpdE5vZGU7CisgICAgfTsKKworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gcGFnZVNj
YWxlRmFjdG9yKCk7CisgICAgLy8gVGhpcyBoZXVyaXN0aWMgYXR0ZW1wdHMgdG8gZmluZCBhIGxp
c3Qgb2YgcmVjdHMgdG8gYXZvaWQgd2hlbiBzaG93aW5nIHRoZSBjYWxsb3V0IG1lbnUgb24gaU9T
LgorICAgIC8vIEZpcnN0LCBoaXQtdGVzdCBzZXZlcmFsIHBvaW50cyBhYm92ZSB0aGUgYm91bmRz
IG9mIHRoZSBzZWxlY3Rpb24gcmVjdCBpbiBzZWFyY2ggb2YgY2xpY2thYmxlIG5vZGVzIHRoYXQg
YXJlIG5vdCBlZGl0YWJsZS4KKyAgICAvLyBTZWNvbmRseSwgaGl0LXRlc3Qgc2V2ZXJhbCBwb2lu
dHMgYXJvdW5kIHRoZSBlZGdlcyBvZiB0aGUgc2VsZWN0aW9uIHJlY3QgYW5kIGV4Y2x1ZGUgYW55
IG5vZGVzIGZvdW5kIGluIHRoZSBmaXJzdCByb3VuZCBvZgorICAgIC8vIGhpdC10ZXN0aW5nIGlm
IHRoZXNlIG5vZGVzIGFyZSBhbHNvIHJlYWNoYWJsZSBieSBtb3Zpbmcgb3V0d2FyZHMgZnJvbSB0
aGUgbGVmdCwgcmlnaHQsIG9yIGJvdHRvbSBlZGdlcyBvZiB0aGUgc2VsZWN0aW9uLgorICAgIC8v
IEFkZGl0aW9uYWxseSwgZXhjbHVkZSBhbnkgaGl0LXRlc3RlZCBub2RlcyB0aGF0IGFyZSBlaXRo
ZXIgdmVyeSBsYXJnZSByZWxhdGl2ZSB0byB0aGUgc2l6ZSBvZiB0aGUgcm9vdCB2aWV3LCBvciBj
b21wbGV0ZWx5CisgICAgLy8gZW5jb21wYXNzIHRoZSBzZWxlY3Rpb24gYm91bmRzLiBUaGUgcmVz
dWx0aW5nIHJlY3RzIGFyZSB0aGUgYm91bmRzIG9mIHRoZXNlIGhpdC10ZXN0ZWQgbm9kZXMgaW4g
cm9vdCB2aWV3IGNvb3JkaW5hdGVzLgorICAgIEhhc2hTZXQ8UmVmPE5vZGU+PiBoaXRUZXN0ZWRO
b2RlczsKKyAgICBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiByZWN0c1RvQXZvaWRJblJvb3RW
aWV3Q29vcmRpbmF0ZXM7CisgICAgY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQsIDU+IG9mZnNldHNG
b3JIaXRUZXN0aW5nIHt7IC0zMCwgLTUxIH0sIHsgMzEsIC01MCB9LCB7IC02MCwgLTM0IH0sIHsg
NjAsIC0zNiB9LCB7IDAsIC0yMCB9fTsKKyAgICBmb3IgKGF1dG8gb2Zmc2V0IDogb2Zmc2V0c0Zv
ckhpdFRlc3RpbmcpIHsKKyAgICAgICAgb2Zmc2V0LnNjYWxlKDEgLyBzY2FsZUZhY3Rvcik7Cisg
ICAgICAgIGF1dG8gaGl0VGVzdExvY2F0aW9uID0gY2VudGVyVG9wSW5Sb290Vmlld0Nvb3JkaW5h
dGVzICsgb2Zmc2V0OworICAgICAgICBpZiAoYXV0byogaGl0Tm9kZSA9IGNsaWNrYWJsZU5vbkVk
aXRhYmxlTm9kZShoaXRUZXN0TG9jYXRpb24pKQorICAgICAgICAgICAgaGl0VGVzdGVkTm9kZXMu
YWRkKCpoaXROb2RlKTsKKyAgICB9CisKKyAgICBjb25zdCBmbG9hdCBtYXJnaW5Gb3JIaXRUZXN0
aW5nU3Vycm91bmRpbmdOb2RlcyA9IDgwIC8gc2NhbGVGYWN0b3I7CisgICAgVmVjdG9yPEZsb2F0
UG9pbnQsIDM+IGV4Y2x1c2lvbkhpdFRlc3RMb2NhdGlvbnMgeworICAgICAgICB7IHNlbGVjdGlv
bkJvdW5kc0luUm9vdFZpZXdDb29yZGluYXRlcy54KCkgLSBtYXJnaW5Gb3JIaXRUZXN0aW5nU3Vy
cm91bmRpbmdOb2RlcywgY2VudGVyT2ZUYXJnZXRCb3VuZHMueSgpIH0sCisgICAgICAgIHsgY2Vu
dGVyT2ZUYXJnZXRCb3VuZHMueCgpLCBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0
ZXMubWF4WSgpICsgbWFyZ2luRm9ySGl0VGVzdGluZ1N1cnJvdW5kaW5nTm9kZXMgfSwKKyAgICAg
ICAgeyBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMubWF4WCgpICsgbWFyZ2lu
Rm9ySGl0VGVzdGluZ1N1cnJvdW5kaW5nTm9kZXMsIGNlbnRlck9mVGFyZ2V0Qm91bmRzLnkoKSB9
CisgICAgfTsKKworICAgIGZvciAoYXV0byYgbG9jYXRpb24gOiBleGNsdXNpb25IaXRUZXN0TG9j
YXRpb25zKSB7CisgICAgICAgIGlmIChhdXRvKiBub2RlVG9FeGNsdWRlID0gY2xpY2thYmxlTm9u
RWRpdGFibGVOb2RlKGxvY2F0aW9uKSkKKyAgICAgICAgICAgIGhpdFRlc3RlZE5vZGVzLnJlbW92
ZSgqbm9kZVRvRXhjbHVkZSk7CisgICAgfQorCisgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgdG9v
IGxhcmdlLCBkb24ndCBjb25zaWRlciBpdCB0byBiZSBhIHBvdGVudGlhbCBlbGVtZW50IGluIGEg
Y29udGV4dCBtZW51IG9yIHRvb2xiYXIgb24gdGhlIHBhZ2UuCisgICAgY29uc3QgZG91YmxlIGZh
Y3Rvck9mQ29udGVudEFyZWEgPSAwLjc1OworICAgIGF1dG8gY29udGV4dE1lbnVFbGVtZW50U2l6
ZUxpbWl0ID0gZmFjdG9yT2ZDb250ZW50QXJlYSAqIHBhZ2VTY2FsZUZhY3RvcigpICogbV9wYWdl
LT5tYWluRnJhbWUoKS52aWV3KCktPnVub2JzY3VyZWRDb250ZW50UmVjdCgpLnNpemUoKTsKKwor
ICAgIGZvciAoYXV0byYgbm9kZSA6IGhpdFRlc3RlZE5vZGVzKSB7CisgICAgICAgIFJlZlB0cjxF
bGVtZW50PiBlbGVtZW50OworICAgICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAg
ICAgICBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZS5wdHIoKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGVsZW1lbnQgPSBub2RlLT5wYXJlbnRFbGVtZW50KCk7CisKKyAgICAg
ICAgaWYgKCFlbGVtZW50KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXV0byBi
b3VuZHMgPSBlbGVtZW50LT5ib3VuZHNJblJvb3RWaWV3U3BhY2UoKTsKKyAgICAgICAgaWYgKGJv
dW5kcy53aWR0aCgpID4gY29udGV4dE1lbnVFbGVtZW50U2l6ZUxpbWl0LndpZHRoKCkgfHwgYm91
bmRzLmhlaWdodCgpID4gY29udGV4dE1lbnVFbGVtZW50U2l6ZUxpbWl0LmhlaWdodCgpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGJvdW5kcy5jb250YWlucyhlbmNsb3Np
bmdJbnRSZWN0KHNlbGVjdGlvbkJvdW5kc0luUm9vdFZpZXdDb29yZGluYXRlcykpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgcmVjdHNUb0F2b2lkSW5Sb290Vmlld0Nvb3JkaW5h
dGVzLmFwcGVuZChXVEZNb3ZlKGJvdW5kcykpOworICAgIH0KKworICAgIHJlcGx5KFdURk1vdmUo
cmVjdHNUb0F2b2lkSW5Sb290Vmlld0Nvb3JkaW5hdGVzKSk7Cit9CisKIHZvaWQgV2ViUGFnZTo6
Z2V0UmVjdHNGb3JHcmFudWxhcml0eVdpdGhTZWxlY3Rpb25PZmZzZXQodWludDMyX3QgZ3JhbnVs
YXJpdHksIGludDMyX3Qgb2Zmc2V0LCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgRnJh
bWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAw
NGNmZjVjZGEyMDIyMjAxZmYwNmM0M2Q2MzU0N2U2Y2I4ZjYxMDg5Li41NjU0OGViNWQyNmY4ZTk2
MGMyMDM5MWUyM2JlYmMwYjgzOWVhYjE1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTktMDItMjAgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQ2FsbG91dCBt
ZW51IG92ZXJsYXBzIGluLXBhZ2UgY29udHJvbHMgd2hlbiBlZGl0aW5nIGEgY29tbWVudCBpbiBn
aXRodWIuY29tJ3MgaXNzdWUgdHJhY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk0ODczCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NjcwMTk3
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6
OlVJU2NyaXB0Q29udHJvbGxlcjo6bWVudVJlY3QgY29uc3QpOgorICAgICAgICAoV1RSOjpVSVNj
cmlwdENvbnRyb2xsZXI6OmlzU2hvd2luZ01lbnUgY29uc3QpOgorICAgICAgICAqIFRlc3RSdW5u
ZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGw6
CisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjptZW51UmVjdCBj
b25zdCk6CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6aXNTaG93aW5nTWVudSBj
b25zdCk6CisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3Jp
cHRDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVu
bmVyV0tXZWJWaWV3Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRD
b250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnJlY3RG
b3JNZW51QWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjpt
ZW51UmVjdCBjb25zdCk6CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6aXNTaG93
aW5nTWVudSBjb25zdCk6CisgICAgICAgIChXVFI6OmZpbmRWaWV3SW5IaWVyYXJjaHlPZlR5cGUp
OiBEZWxldGVkLgorCiAyMDE5LTAyLTE4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+
CiAKICAgICAgICAgUkVHUkVTU0lPTiAoUFNPTik6IENhbid0IGFjY2VzcyBvcHR1bWJhbmsuY29t
IGZyb20gbXl1aGMuY29tCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvVUlT
Y3JpcHRDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJU2NyaXB0
Q29udHJvbGxlcklPUy5tbQppbmRleCBmZmI0ZGVhNmEyYzdlMGIwYmI1NjcxMGVlNDMzZGQxMWMw
OTcxNjQwLi5mNDA4Y2NhMTc3Y2M0M2I3NzcwNmIyY2RmNzM1NDYyODVkMDRhYmNlIDEwMDY0NAot
LS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KQEAg
LTMzNyw2ICszMzcsMTYgQEAgSlNPYmplY3RSZWYgVUlTY3JpcHRDb250cm9sbGVyOjpyZWN0Rm9y
TWVudUFjdGlvbihKU1N0cmluZ1JlZikgY29uc3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAor
SlNPYmplY3RSZWYgVUlTY3JpcHRDb250cm9sbGVyOjptZW51UmVjdCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wgVUlTY3JpcHRDb250cm9sbGVyOjppc1Nob3dpbmdN
ZW51KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgVUlTY3JpcHRDb250
cm9sbGVyOjpwbGF0Zm9ybVNldERpZEVuZFNjcm9sbGluZ0NhbGxiYWNrKCkKIHsKIH0KZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJ
U2NyaXB0Q29udHJvbGxlci5pZGwgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29u
dGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsCmluZGV4IDNhOWMzZTI5YjljMTIy
ZjQ3NjIzYzAyY2ExZThmMzZlMjlhNjU3NmEuLjVlYzkxOTFhZmIwZjMwNzU0MjRlNzI2YTY5Mzlm
Mjk3MWY4MzUxMTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRD
b250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwKKysrIGIvVG9vbHMvVGVzdFJ1
bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlk
bApAQCAtMjI1LDYgKzIyNSw4IEBAIGludGVyZmFjZSBVSVNjcmlwdENvbnRyb2xsZXIgewogCiAg
ICAgYXR0cmlidXRlIG9iamVjdCBkaWRTaG93TWVudUNhbGxiYWNrOwogICAgIGF0dHJpYnV0ZSBv
YmplY3QgZGlkSGlkZU1lbnVDYWxsYmFjazsKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVh
biBpc1Nob3dpbmdNZW51OworICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBvYmplY3QgbWVudVJlY3Q7
CiAgICAgb2JqZWN0IHJlY3RGb3JNZW51QWN0aW9uKERPTVN0cmluZyBhY3Rpb24pOwogCiAgICAg
YXR0cmlidXRlIG9iamVjdCB3aWxsQmVnaW5ab29taW5nQ2FsbGJhY2s7CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIu
Y3BwIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250
cm9sbGVyLmNwcAppbmRleCBiOTQ3MmQwZmQxNzc2OWViOGFkZmFmNGJmM2NiYzc5NmIzZGU4YzYw
Li42MTJlYTljODNiYWZkYWQ0MDJhNmIwNjZkNGJiODlhN2M5MzY4MWNiIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIu
Y3BwCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0
Q29udHJvbGxlci5jcHAKQEAgLTUzMiwxMSArNTMyLDIxIEBAIHZvaWQgVUlTY3JpcHRDb250cm9s
bGVyOjpwbGF0Zm9ybVNldERpZEhpZGVNZW51Q2FsbGJhY2soKQogewogfQogCitKU09iamVjdFJl
ZiBVSVNjcmlwdENvbnRyb2xsZXI6Om1lbnVSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwogSlNPYmplY3RSZWYgVUlTY3JpcHRDb250cm9sbGVyOjpyZWN0Rm9yTWVudUFj
dGlvbihKU1N0cmluZ1JlZikgY29uc3QKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorYm9v
bCBVSVNjcmlwdENvbnRyb2xsZXI6OmlzU2hvd2luZ01lbnUoKSBjb25zdAoreworICAgIHJldHVy
biBmYWxzZTsKK30KKwogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnBsYXRmb3JtQ2xlYXJBbGxD
YWxsYmFja3MoKQogewogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNj
cmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaAppbmRleCA1ZjMzNWVkMjEzOTlm
MThiMDI0YjFmNjc4Y2JiZDBiZTRkYjQ2ZTFkLi5jZTM1ODQxNzBhOWM0ODc2MTE1MGY3NGY5ZGY1
NTI2YmI2NDY3ZmU3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0
Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaApAQCAtMTY0LDcgKzE2NCw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldERpZFNob3dNZW51Q2FsbGJhY2soSlNWYWx1ZVJlZik7CiAg
ICAgSlNWYWx1ZVJlZiBkaWRTaG93TWVudUNhbGxiYWNrKCkgY29uc3Q7CiAKKyAgICBib29sIGlz
U2hvd2luZ01lbnUoKSBjb25zdDsKICAgICBKU09iamVjdFJlZiByZWN0Rm9yTWVudUFjdGlvbihK
U1N0cmluZ1JlZiBhY3Rpb24pIGNvbnN0OworICAgIEpTT2JqZWN0UmVmIG1lbnVSZWN0KCkgY29u
c3Q7CiAKICAgICB2b2lkIHNldERpZEVuZFNjcm9sbGluZ0NhbGxiYWNrKEpTVmFsdWVSZWYpOwog
ICAgIEpTVmFsdWVSZWYgZGlkRW5kU2Nyb2xsaW5nQ2FsbGJhY2soKSBjb25zdDsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5oIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3LmgKaW5kZXgg
MjhkNTdhYzJhNjZjZWIxMGU2MTUwZTExYjY4ZGEwYzJjOWFlNzY4OC4uMWQzYTE4YzU2YThhMjAy
OGU1YjQ3MWZhMzg3MTQ2ZTI0ODM3ZmE4NCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3LmgKQEAgLTU2LDYgKzU2LDcgQEAKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFVJRWRnZUluc2V0cyBvdmVycmlkZVNhZmVBcmVhSW5z
ZXRzOwogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1pc1Nob3dpbmdL
ZXlib2FyZCkgQk9PTCBzaG93aW5nS2V5Ym9hcmQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHksIGdldHRlcj1pc1Nob3dpbmdNZW51KSBCT09MIHNob3dpbmdNZW51OwogQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbikgQk9PTCB1c2VzU2FmYXJpTGlrZVJvdGF0aW9uOwogQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXI9aXNJbnRlcmFjdGluZ1dpdGhGb3JtQ29u
dHJvbCkgQk9PTCBpbnRlcmFjdGluZ1dpdGhGb3JtQ29udHJvbDsKIApkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCmluZGV4IDA5ODdk
MmYyN2JkN2QxNjZjNWQ3ZmFiZGIwNDViODg3NGUyYWY5MGMuLjdjYzQ5NzY2ZWJkYzAwYWVkNzg4
ZjEyOTEzMmQ5NzgwMGU1ZjU0ZTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
aW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KQEAgLTExNywxOSArMTE3LDYgQEAgc3RhdGlj
IEJPT0wgZm9yRWFjaFZpZXdJbkhpZXJhcmNoeShVSVZpZXcgKnZpZXcsIHZvaWQoXm1hcEZ1bmN0
aW9uKShVSVZpZXcgKnN1YnYKICAgICByZXR1cm4gc3RvcDsKIH0KIAotc3RhdGljIFVJVmlldyAq
ZmluZFZpZXdJbkhpZXJhcmNoeU9mVHlwZShVSVZpZXcgKnZpZXcsIENsYXNzIHZpZXdDbGFzcykK
LXsKLSAgICBfX2Jsb2NrIFJldGFpblB0cjxVSVZpZXc+IGZvdW5kVmlldzsKLSAgICBmb3JFYWNo
Vmlld0luSGllcmFyY2h5KHZpZXcsIF4oVUlWaWV3ICpzdWJ2aWV3LCBCT09MICpzdG9wKSB7Ci0g
ICAgICAgIGlmICghW3N1YnZpZXcgaXNLaW5kT2ZDbGFzczp2aWV3Q2xhc3NdKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGZvdW5kVmlldyA9IHN1YnZpZXc7Ci0gICAgICAgICpzdG9w
ID0gWUVTOwotICAgIH0pOwotICAgIHJldHVybiBmb3VuZFZpZXcuYXV0b3JlbGVhc2UoKTsKLX0K
LQogc3RhdGljIE5TQXJyYXk8VUlWaWV3ICo+ICpmaW5kQWxsVmlld3NJbkhpZXJhcmNoeU9mVHlw
ZShVSVZpZXcgKnZpZXcsIENsYXNzIHZpZXdDbGFzcykKIHsKICAgICBfX2Jsb2NrIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gdmlld3MgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRdKTsKQEAgLTg4MywyNSArODcwLDIxIEBAIEpTT2JqZWN0UmVmIFVJU2NyaXB0Q29udHJv
bGxlcjo6cmVjdEZvck1lbnVBY3Rpb24oSlNTdHJpbmdSZWYganNBY3Rpb24pIGNvbnN0CiAKICAg
ICBVSVdpbmRvdyAqd2luZG93Rm9yQnV0dG9uID0gbmlsOwogICAgIFVJQnV0dG9uICpidXR0b25G
b3JBY3Rpb24gPSBuaWw7Ci0gICAgZm9yIChVSVdpbmRvdyAqd2luZG93IGluIFVJQXBwbGljYXRp
b24uc2hhcmVkQXBwbGljYXRpb24ud2luZG93cykgewotICAgICAgICBpZiAoIVt3aW5kb3cgaXNL
aW5kT2ZDbGFzczpVSVRleHRFZmZlY3RzV2luZG93LmNsYXNzXSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOworICAgIFVJVmlldyAqY2FsbG91dEJhciA9IFVJQ2FsbG91dEJhci5hY3RpdmVDYWxsb3V0
QmFyOworICAgIGlmICghY2FsbG91dEJhci53aW5kb3cpCisgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgICAgIFVJVmlldyAqY2FsbG91dEJhciA9IGZpbmRWaWV3SW5IaWVyYXJjaHlPZlR5
cGUod2luZG93LCBVSUNhbGxvdXRCYXIuY2xhc3MpOwotICAgICAgICBpZiAoIWNhbGxvdXRCYXIp
CisgICAgZm9yIChVSUJ1dHRvbiAqYnV0dG9uIGluIGZpbmRBbGxWaWV3c0luSGllcmFyY2h5T2ZU
eXBlKGNhbGxvdXRCYXIsIFVJQnV0dG9uLmNsYXNzKSkgeworICAgICAgICBOU1N0cmluZyAqYnV0
dG9uVGl0bGUgPSBbYnV0dG9uIHRpdGxlRm9yU3RhdGU6VUlDb250cm9sU3RhdGVOb3JtYWxdOwor
ICAgICAgICBpZiAoIWJ1dHRvblRpdGxlLmxlbmd0aCkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIGZvciAoVUlCdXR0b24gKmJ1dHRvbiBpbiBmaW5kQWxsVmlld3NJbkhpZXJhcmNo
eU9mVHlwZShjYWxsb3V0QmFyLCBVSUJ1dHRvbi5jbGFzcykpIHsKLSAgICAgICAgICAgIE5TU3Ry
aW5nICpidXR0b25UaXRsZSA9IFtidXR0b24gdGl0bGVGb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5v
cm1hbF07Ci0gICAgICAgICAgICBpZiAoIWJ1dHRvblRpdGxlLmxlbmd0aCkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKCFbYnV0dG9uVGl0bGUgaXNFcXVhbFRv
U3RyaW5nOihfX2JyaWRnZSBOU1N0cmluZyAqKWFjdGlvbi5nZXQoKV0pCi0gICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIGlmICghW2J1dHRvblRpdGxlIGlzRXF1YWxUb1N0cmluZzoo
X19icmlkZ2UgTlNTdHJpbmcgKilhY3Rpb24uZ2V0KCldKQorICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgICAgIGJ1dHRvbkZvckFjdGlvbiA9IGJ1dHRvbjsKLSAgICAgICAgICAgIHdp
bmRvd0ZvckJ1dHRvbiA9IHdpbmRvdzsKLSAgICAgICAgfQorICAgICAgICBidXR0b25Gb3JBY3Rp
b24gPSBidXR0b247CisgICAgICAgIHdpbmRvd0ZvckJ1dHRvbiA9IGNhbGxvdXRCYXIud2luZG93
OworICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAoIWJ1dHRvbkZvckFjdGlvbikKQEAg
LTkxMSw2ICs4OTQsMjEgQEAgSlNPYmplY3RSZWYgVUlTY3JpcHRDb250cm9sbGVyOjpyZWN0Rm9y
TWVudUFjdGlvbihKU1N0cmluZ1JlZiBqc0FjdGlvbikgY29uc3QKICAgICByZXR1cm4gbV9jb250
ZXh0LT5vYmplY3RGcm9tUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QocmVjdEluUm9vdFZpZXdDb29y
ZGluYXRlcy5vcmlnaW4ueCwgcmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy5vcmlnaW4ueSwgcmVj
dEluUm9vdFZpZXdDb29yZGluYXRlcy5zaXplLndpZHRoLCByZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzLnNpemUuaGVpZ2h0KSk7CiB9CiAKK0pTT2JqZWN0UmVmIFVJU2NyaXB0Q29udHJvbGxlcjo6
bWVudVJlY3QoKSBjb25zdAoreworICAgIFVJVmlldyAqY2FsbG91dEJhciA9IFVJQ2FsbG91dEJh
ci5hY3RpdmVDYWxsb3V0QmFyOworICAgIGlmICghY2FsbG91dEJhci53aW5kb3cpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgQ0dSZWN0IHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMg
PSBbY2FsbG91dEJhciBjb252ZXJ0UmVjdDpjYWxsb3V0QmFyLmJvdW5kcyB0b1ZpZXc6cGxhdGZv
cm1Db250ZW50VmlldygpXTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5vYmplY3RGcm9tUmVjdChX
ZWJDb3JlOjpGbG9hdFJlY3QocmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy5vcmlnaW4ueCwgcmVj
dEluUm9vdFZpZXdDb29yZGluYXRlcy5vcmlnaW4ueSwgcmVjdEluUm9vdFZpZXdDb29yZGluYXRl
cy5zaXplLndpZHRoLCByZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLnNpemUuaGVpZ2h0KSk7Cit9
CisKK2Jvb2wgVUlTY3JpcHRDb250cm9sbGVyOjppc1Nob3dpbmdNZW51KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBsYXRm
b3JtVmlldygpLnNob3dpbmdNZW51OworfQorCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6cGxh
dGZvcm1TZXREaWRFbmRTY3JvbGxpbmdDYWxsYmFjaygpCiB7CiAgICAgVGVzdFJ1bm5lcldLV2Vi
VmlldyAqd2ViVmlldyA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wbGF0Zm9ybVZpZXcoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3OGQ2OGFlOTZiNzU5NWI1ZGMxZWNiOGMzMjg4OGVi
MjAzZDVlYTQwLi5mM2UzMTA2NTVhYjk4YzdkNWY4N2U5MzgwMjkxYzVmMjg4ZmU4Y2UyIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTkgQEAKKzIwMTktMDItMjAgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2ll
aEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQ2FsbG91dCBtZW51IG92ZXJsYXBzIGluLXBh
Z2UgY29udHJvbHMgd2hlbiBlZGl0aW5nIGEgY29tbWVudCBpbiBnaXRodWIuY29tJ3MgaXNzdWUg
dHJhY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk0ODczCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NjcwMTk3ND4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL2lv
cy9hdm9pZC1zaG93aW5nLWNhbGxvdXQtbWVudS1vdmVyLWNvbnRyb2xzLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vaW9zL2F2b2lkLXNob3dpbmctY2Fs
bG91dC1tZW51LW92ZXItY29udHJvbHMuaHRtbDogQWRkZWQuCisgICAgICAgICogcmVzb3VyY2Vz
L3VpLWhlbHBlci5qczoKKyAgICAgICAgKHdpbmRvdy5VSUhlbHBlci53YWl0Rm9yTWVudVRvU2hv
dy5yZXR1cm4ubmV3LlByb21pc2UpOgorICAgICAgICAod2luZG93LlVJSGVscGVyLndhaXRGb3JN
ZW51VG9TaG93KToKKyAgICAgICAgKHdpbmRvdy5VSUhlbHBlci5tZW51UmVjdCk6CisgICAgICAg
ICh3aW5kb3cuVUlIZWxwZXIpOgorCiAyMDE5LTAyLTE4ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2ZXJ0IGZ1bmN0aW9uYWwgcGFydCBv
ZiByMjQxNDUxCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9pb3Mv
YXZvaWQtc2hvd2luZy1jYWxsb3V0LW1lbnUtb3Zlci1jb250cm9scy1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9pb3MvYXZvaWQtc2hvd2luZy1jYWxsb3V0LW1l
bnUtb3Zlci1jb250cm9scy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTVkOTAyYjEwZTRjZGVl
ZDhjMTk4OWU3N2E0MzczMzdlMTBlMTEzYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2VkaXRpbmcvc2VsZWN0aW9uL2lvcy9hdm9pZC1zaG93aW5nLWNhbGxvdXQtbWVudS1vdmVyLWNv
bnRyb2xzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACisgICAgICAgICAgICAgIAorCitW
ZXJpZmllcyB0aGF0IHdlIGRvbid0IHNob3cgdGhlIHN5c3RlbSBjYWxsb3V0IG1lbnUgb3ZlciBj
b250cm9scy4gVG8gdGVzdCBtYW51YWxseTogZm9jdXMgdGhlIGVkaXRhYmxlIGRvY3VtZW50IGlu
IHRoZSBpZnJhbWUsIHNlbGVjdCBzb21lIHRleHQsIGFuZCBjb25maXJtIHRoYXQgdGhlIGNhbGxv
dXQgYmFyIGlzIHNob3duIGJlbmVhdGggdGhlIHNlbGVjdGlvbiBpbnN0ZWFkIG9mIGFib3ZlIHRo
ZSBzZWxlY3Rpb24uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGNlbnRl
clkoZ3JhYmJlclJlY3QpIDwgY2VudGVyWShtZW51UmVjdCkgaXMgdHJ1ZQorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2lvcy9hdm9pZC1zaG93aW5nLWNhbGxvdXQtbWVudS1v
dmVyLWNvbnRyb2xzLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9pb3MvYXZv
aWQtc2hvd2luZy1jYWxsb3V0LW1lbnUtb3Zlci1jb250cm9scy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4
YmI5MjkwNTc4NmZmN2QxMWU5ZDY5YzExODczN2RjNGVhZDEzNmMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9pb3MvYXZvaWQtc2hvd2luZy1jYWxsb3V0
LW1lbnUtb3Zlci1jb250cm9scy5odG1sCkBAIC0wLDAgKzEsNzcgQEAKKzwhRE9DVFlQRSBodG1s
PiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIHVzZUZsZXhpYmxlVmlld3BvcnQ9dHJ1ZSBdIC0t
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL3VpLWhlbHBl
ci5qcyI+PC9zY3JpcHQ+Cis8bWV0YSBuYW1lPXZpZXdwb3J0IGNvbnRlbnQ9IndpZHRoPWRldmlj
ZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KKzxzdHlsZT4KK2JvZHksIGh0bWwgeworICAgIHdp
ZHRoOiAxMDAlOworICAgIGhlaWdodDogMTAwJTsKKyAgICBtYXJnaW46IDA7Cit9CisKK2lmcmFt
ZSB7CisgICAgd2lkdGg6IDMyMHB4OworICAgIGhlaWdodDogMTAwcHg7Cit9CisKKyNjb250cm9s
cyB7CisgICAgbWFyZ2luLXRvcDogMjBweDsKKyAgICBtYXJnaW4tYm90dG9tOiAxMHB4OworfQor
CitpbnB1dFt0eXBlPWJ1dHRvbl0geworICAgIGhlaWdodDogMWVtOworfQorPC9zdHlsZT4KKzxz
Y3JpcHQ+Citqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworZnVuY3Rpb24gY2VudGVyWChyZWN0KSB7
CisgICAgcmV0dXJuIHJlY3QubGVmdCArIHJlY3Qud2lkdGggLyAyOworfQorCitmdW5jdGlvbiBj
ZW50ZXJZKHJlY3QpIHsKKyAgICByZXR1cm4gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDI7Cit9
CisKK2FzeW5jIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgZGVzY3JpcHRpb24oIlZlcmlmaWVz
IHRoYXQgd2UgZG9uJ3Qgc2hvdyB0aGUgc3lzdGVtIGNhbGxvdXQgbWVudSBvdmVyIGNvbnRyb2xz
LiBUbyB0ZXN0IG1hbnVhbGx5OiBmb2N1cyB0aGUgZWRpdGFibGUgZG9jdW1lbnQgaW4gdGhlIGlm
cmFtZSwgc2VsZWN0IHNvbWUgdGV4dCwgYW5kIGNvbmZpcm0gdGhhdCB0aGUgY2FsbG91dCBiYXIg
aXMgc2hvd24gYmVuZWF0aCB0aGUgc2VsZWN0aW9uIGluc3RlYWQgb2YgYWJvdmUgdGhlIHNlbGVj
dGlvbi4iKTsKKworICAgIGF3YWl0IFVJSGVscGVyLmFjdGl2YXRlQW5kV2FpdEZvcklucHV0U2Vz
c2lvbkF0KDE2MCwgMTAwKTsKKworICAgIGNvbnN0IGlmcmFtZURvY3VtZW50ID0gZG9jdW1lbnQu
cXVlcnlTZWxlY3RvcigiaWZyYW1lIikuY29udGVudERvY3VtZW50OworICAgIGlmcmFtZURvY3Vt
ZW50LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGlmcmFtZURvY3VtZW50LmJvZHkp
OworCisgICAgZ3JhYmJlclJlY3QgPSB7fTsKKyAgICB3aGlsZSAoIWdyYWJiZXJSZWN0LndpZHRo
ICYmICFncmFiYmVyUmVjdC5oZWlnaHQpCisgICAgICAgIGdyYWJiZXJSZWN0ID0gYXdhaXQgVUlI
ZWxwZXIuZ2V0U2VsZWN0aW9uRW5kR3JhYmJlclZpZXdSZWN0KCk7CisKKyAgICBhd2FpdCBVSUhl
bHBlci5hY3RpdmF0ZUF0KGNlbnRlclgoZ3JhYmJlclJlY3QpLCBjZW50ZXJZKGdyYWJiZXJSZWN0
KSk7CisgICAgYXdhaXQgVUlIZWxwZXIud2FpdEZvck1lbnVUb1Nob3coKTsKKyAgICBtZW51UmVj
dCA9IGF3YWl0IFVJSGVscGVyLm1lbnVSZWN0KCk7CisKKyAgICBzaG91bGRCZSgiY2VudGVyWShn
cmFiYmVyUmVjdCkgPCBjZW50ZXJZKG1lbnVSZWN0KSIsICJ0cnVlIik7CisgICAgZmluaXNoSlNU
ZXN0KCk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4K
KzxkaXYgaWQ9ImNvbnRyb2xzIj4KKyAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iMSI+
PC9pbnB1dD4KKyAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iMiI+PC9pbnB1dD4KKyAg
ICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iMyI+PC9pbnB1dD4KKyAgICA8aW5wdXQgdHlw
ZT0iYnV0dG9uIiB2YWx1ZT0iNCI+PC9pbnB1dD4KKyAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2
YWx1ZT0iNSI+PC9pbnB1dD4KKyAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iNiI+PC9p
bnB1dD4KKyAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iNyI+PC9pbnB1dD4KKyAgICA8
aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iOCI+PC9pbnB1dD4KKzwvZGl2PgorPGRpdj4KKyAg
ICA8aWZyYW1lIHNyY2RvYz0iPGJvZHkgY29udGVudGVkaXRhYmxlPkxvcmVtIGlwc3VtIGRvbG9y
IHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZC48
L2JvZHk+Ij48L2lmcmFtZT4KKzwvZGl2PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8cCBp
ZD0iY29uc29sZSI+PC9wPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Jlc291cmNlcy91aS1oZWxwZXIuanMgYi9M
YXlvdXRUZXN0cy9yZXNvdXJjZXMvdWktaGVscGVyLmpzCmluZGV4IDRkZTBkMTRlYTJhODI4Nzc0
MTliMDExOWQ0NGE1ZTc1MTQwNzZhOGEuLjllNWZjYmUwZGY2MDAyYTJkMzM3MTcwZDk5MmI1ZmNm
YzAwOWRiYTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Jlc291cmNlcy91aS1oZWxwZXIuanMK
KysrIGIvTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3VpLWhlbHBlci5qcwpAQCAtNjY1LDQgKzY2NSwy
NCBAQCB3aW5kb3cuVUlIZWxwZXIgPSBjbGFzcyBVSUhlbHBlciB7CiAgICAgICAgIGNvbnN0IHNj
cmlwdCA9ICJKU09OLnN0cmluZ2lmeShbdWlDb250cm9sbGVyLmxhc3RVbmRvTGFiZWwsIHVpQ29u
dHJvbGxlci5maXJzdFJlZG9MYWJlbF0pIjsKICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJl
c29sdmUgPT4gdGVzdFJ1bm5lci5ydW5VSVNjcmlwdChzY3JpcHQsIHJlc3VsdCA9PiByZXNvbHZl
KEpTT04ucGFyc2UocmVzdWx0KSkpKTsKICAgICB9CisKKyAgICBzdGF0aWMgd2FpdEZvck1lbnVU
b1Nob3coKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gewor
ICAgICAgICAgICAgdGVzdFJ1bm5lci5ydW5VSVNjcmlwdChgCisgICAgICAgICAgICAgICAgKGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXVpQ29udHJvbGxlci5pc1Nob3dp
bmdNZW51KQorICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLmRpZFNob3dNZW51
Q2FsbGJhY2sgPSAoKSA9PiB1aUNvbnRyb2xsZXIudWlTY3JpcHRDb21wbGV0ZSgpOworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIu
dWlTY3JpcHRDb21wbGV0ZSgpOworICAgICAgICAgICAgICAgIH0pKClgLCByZXNvbHZlKTsKKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgc3RhdGljIG1lbnVSZWN0KCkKKyAgICB7CisgICAgICAg
IHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIu
cnVuVUlTY3JpcHQoIkpTT04uc3RyaW5naWZ5KHVpQ29udHJvbGxlci5tZW51UmVjdCkiLCByZXN1
bHQgPT4gcmVzb2x2ZShKU09OLnBhcnNlKHJlc3VsdCkpKTsKKyAgICAgICAgfSk7CisgICAgfQog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362612</attachid>
            <date>2019-02-21 09:00:27 -0800</date>
            <delta_ts>2019-02-22 12:03:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194873-20190221090026.patch</filename>
            <type>text/plain</type>
            <size>34452</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxODY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDM3MDU0ZWExOGQ4NWQ4ZjYy
MDEwMWY2ZTI5ZjE1MGVmZmEzOTNjYWQuLjNjMGVmMDRmYzI2NmUwN2M3NTAwZjdhZGFiNzUyNzcz
OGQwYzMzZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYgQEAKKzIwMTktMDItMjAgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQ2FsbG91dCBt
ZW51IG92ZXJsYXBzIGluLXBhZ2UgY29udHJvbHMgd2hlbiBlZGl0aW5nIGEgY29tbWVudCBpbiBn
aXRodWIuY29tJ3MgaXNzdWUgdHJhY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk0ODczCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NjcwMTk3
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPbiB0
aGUgdG9waWMgb2Ygc3VwcG9ydGluZyB3ZWItYmFzZWQgcmljaCB0ZXh0IGVkaXRvcnMgb24gaU9T
LCBvbmUgcHJvYmxlbWF0aWMgYXJlYSBoYXMgYWx3YXlzIGJlZW4gaGFuZGxpbmcKKyAgICAgICAg
Y29uZmxpY3RzIGJldHdlZW4gcGxhdGZvcm0gVUkgKGkuZS4sIHRoZSBzeXN0ZW0gY2FsbG91dCBt
ZW51KSBhbmQgaW4tcGFnZSB0ZXh0IGVkaXRpbmcgY29udHJvbHMuIFRoaXMgaXNzdWUKKyAgICAg
ICAgY29tZXMgdXAgaW4gd2Vic2l0ZXMgdGhhdCBkb24ndCB1c2UgdGhlICJoaWRkZW4gY29udGVu
dGVkaXRhYmxlIiBhcHByb2FjaCB0byByaWNoIHRleHQgZWRpdGluZywgYnV0IGFsc28gc2hvdwor
ICAgICAgICBhZGRpdGlvbmFsIGNvbnRyb2xzIGluIGEgdG9vbGJhciBvciBjb250ZXh0dWFsIG1l
bnUgYWJvdmUgdGhlIHNlbGVjdGlvbi4gSW4gdGhlc2UgY2FzZXMsIHdoYXQgb2Z0ZW4gaGFwcGVu
cyBpcworICAgICAgICB0aGF0IHN5c3RlbSBjb250cm9scyBvdmVybGFwIGNvbnRyb2xzIGluIHRo
ZSBwYWdlLgorCisgICAgICAgIEx1Y2tpbHksIHRoZSBpT1MgY2FsbG91dCBtZW51IChpLmUuIHRo
ZSBwcml2YXRlIFVJQ2FsbG91dEJhcikgaXMgY2FwYWJsZSBvZiBwcmVzZW50aW5nIHdpdGggYSBs
aXN0IG9mICJldmFzaW9uCisgICAgICAgIHJlY3RzIiB0byBhdm9pZDsgaWYgdGhlIGNhbGxvdXQg
YmFyIHdvdWxkIG5vcm1hbGx5IGludGVyc2VjdCB3aXRoIG9uZSBvZiB0aGVzZSByZWN0cywgdGhl
biBhIGRpZmZlcmVudAorICAgICAgICBvcmllbnRhdGlvbiB0aGF0IGRvZXMgbm90IGludGVyc2Vj
dCB3aXRoIG9uZSBvZiB0aGVzZSByZWN0cyBpcyBjaG9zZW4gaW5zdGVhZC4gQ3VycmVudGx5LCB0
aGUgb25seSByZWN0IGFkZGVkCisgICAgICAgIGhlcmUgYnkgVUlLaXQgd2hlbiBwcmVzZW50aW5n
IHRoZSBjYWxsb3V0IG1lbnUgaXMgdGhlIGJvdW5kaW5nIHJlY3Qgb2YgdGhlIG9uLXNjcmVlbiBr
ZXlib2FyZCwgYnV0IGFmdGVyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80ODEyODMzNz4sIHdl
IG5vdyBoYXZlIGEgZ2VuZXJhbGl6ZWQgbWVjaGFuaXNtIGZvciBvZmZlcmluZyBhZGRpdGlvbmFs
IGV2YXNpb24gcmVjdHMgYmVmb3JlCisgICAgICAgIFVJS2l0IHByZXNlbnRzIHRoZSBjYWxsb3V0
IG1lbnUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZG9wdHMgdGhlIG1lY2hhbmlzbSBpbnRyb2R1
Y2VkIGluIDxyZGFyOi8vcHJvYmxlbS80ODEyODMzNz4sIGFuZCBpbnRyb2R1Y2VzIGEgaGV1cmlz
dGljIGZvcgorICAgICAgICBkZXRlcm1pbmluZyB0aGUgYXBwcm94aW1hdGUgbG9jYXRpb24gb2Yg
Y29udHJvbHMgaW4gdGhlIHBhZ2Ugd2hpY2ggbWlnaHQgb3ZlcmxhcCB0aGUgY2FsbG91dCBtZW51
LiBUaGlzCisgICAgICAgIGhldXJpc3RpYyB3b3JrcyBieSBoaXQtdGVzdGluZyBmb3IgY2xpY2th
YmxlIChidXQgbm9uLWVkaXRhYmxlKSBub2RlcyBhYm92ZSB0aGUgYm91bmRzIG9mIHRoZSBzZWxl
Y3Rpb24sIHdoaWNoCisgICAgICAgIGFyZSBhZGRpdGlvbmFsbHkgbm90IGhpdC10ZXN0ZWQgYnkg
YWR2YW5jaW5nIG91dHdhcmRzIGZyb20gYW55IG9mIHRoZSBvdGhlciBlZGdlcyBvZiB0aGUgc2Vs
ZWN0aW9uIGJvdW5kcy4KKyAgICAgICAgQWRkaXRpb25hbGx5LCBhbnkgaGl0LXRlc3RlZCBub2Rl
cyB3aG9zZSBib3VuZGluZyByZWN0cyBhcmUgdmVyeSBsYXJnZSAocmVsYXRpdmUgdG8gdGhlIGNv
bnRlbnQgdmlldyBzaXplKSBhcmUKKyAgICAgICAgaWdub3JlZCAodGhpcyBkZWFscyB3aXRoIHNj
ZW5hcmlvcyB3aGVyZSB0aGUgYm9keSBvciBhIGxhcmdlIGNvbnRhaW5lciBlbGVtZW50IGhhcyBh
IGNsaWNrIGhhbmRsZXIpLiBXZSB0aGVuIGFkZAorICAgICAgICB0aGUgYm91bmRpbmcgcmVjdHMg
b2YgZWFjaCBvZiB0aGUgbm9kZXMgdGhhdCBmaXQgdGhpcyBjcml0ZXJpYSB0byB0aGUgbGlzdCBv
ZiByZWN0cyBmb3IgVUlLaXQgdG8gYXZvaWQgd2hlbgorICAgICAgICBwcmVzZW50aW5nIHRoZSBz
eXN0ZW0gY2FsbG91dCBtZW51LgorCisgICAgICAgIFRoZSByZXN1bHQgaXMgdGhhdCBXZWJLaXQg
d2lsbCwgYnkgZGVmYXVsdCwgYXZvaWQgb3ZlcmxhcHBpbmcgYW55dGhpbmcgdGhhdCBsb29rcyBs
aWtlIGNvbnRyb2xzIGluIHRoZSBwYWdlIHdoZW4KKyAgICAgICAgc2hvd2luZyBhIGNhbGxvdXQg
bWVudSBpbiBlZGl0YWJsZSBjb250ZW50LiBJbiBwcmFjdGljZSwgdGhpcyBmaXhlcyBvdmVybGFw
cGluZyBjb250cm9scyBvbiBtb3N0IHdlYnNpdGVzIHRoYXQKKyAgICAgICAgcm9sbCB0aGVpciBv
d24gY29udGV4dCBtZW51IG9yIHRvb2xiYXIgaW4gdGhlaXIgcmljaCB0ZXh0IGVkaXRvci4KKwor
ICAgICAgICBUZXN0OiBlZGl0aW5nL3NlbGVjdGlvbi9pb3MvYXZvaWQtc2hvd2luZy1jYWxsb3V0
LW1lbnUtb3Zlci1jb250cm9scy5odG1sCisKKyAgICAgICAgKiBQbGF0Zm9ybS9zcGkvaW9zL1VJ
S2l0U1BJLmg6CisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWw6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmll
dyBfc21hcnRDYWxsb3V0QmFyUG9zaXRpb25pbmdFbmFibGVkXSk6CisKKyAgICAgICAgR2F0ZSB0
aGlzIG5ldyBiZWhhdmlvciBvbiBhIHJ1bnRpbWUtZW5hYmxlZCBpbnRlcm5hbCBmZWF0dXJlIGZs
YWcuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmg6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRW
aWV3IHJlcXVlc3RBdXRvY29ycmVjdGlvblJlY3RzRm9yU3RyaW5nOndpdGhDb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyByZXF1ZXN0UmVjdHNUb0V2YWRlRm9y
U2VsZWN0aW9uQ29tbWFuZHNXaXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgcmVxdWVzdEF1dG9jb3JyZWN0aW9uQ29udGV4dFdpdGhDb21wbGV0aW9uSGFu
ZGxlcjpdKToKKworICAgICAgICBEcml2ZS1ieTogaGFuZGxlIG51bGwgY29tcGxldGlvbiBoYW5k
bGVyIGFyZ3VtZW50cyBtb3JlIGdyYWNlZnVsbHksIGJ5IHJhaXNpbmcgYW4gTlNFeGNlcHRpb24g
YW5kIGJhaWxpbmcgYmVmb3JlCisgICAgICAgIGF0dGVtcHRpbmcgdG8gaW52b2tlIGEgbmlsIGJs
b2NrLgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW06CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVxdWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0
aW9uKToKKworICAgICAgICBTZWUgYWJvdmUgZm9yIG1vcmUgZGV0YWlsLgorCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3RFdmFzaW9u
UmVjdHNBYm92ZVNlbGVjdGlvbik6CisKIDIwMTktMDItMjEgIEFudG9pbmUgUXVpbnQgIDxncmFv
dXRzQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVj
b2duaXplci5hY3RpdmVUb3VjaGVzQnlJZGVudGlmaWVyIHRvIFNQSQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmggYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAppbmRleCA2ZDRjMTk1ZDM5ZDE5ODUxYjNiZTVlMDdk
NTU3YmFmNGQ1MTNlMTkxLi42ZDg3NDEwY2VlNjU1YzdjODI4MmM3MjM1MWRlMDdiOTA5OGEwODJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaApAQCAtOTg4LDYg
Kzk4OCw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBVSURyYWdPcGVyYXRpb24p
CiAjZW5kaWYKIAogQGludGVyZmFjZSBVSUNhbGxvdXRCYXIgOiBVSVZpZXcKKysgKFVJQ2FsbG91
dEJhciAqKWFjdGl2ZUNhbGxvdXRCYXI7CiArICh2b2lkKWZhZGVTaGFyZWRDYWxsb3V0QmFyOwog
QGVuZAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55
YW1sIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAppbmRleCA3NGEx
MjJjNWI3N2ZjNWQ0MWEyODg5MWNhMGE1M2RmNWRlYzlmYWZlLi5jNGU4OGZmNWQ3NzA1YmRjY2Q1
Mzc1OWY5OGU4MzMxNTMwNmZkNmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJQcmVmZXJlbmNlcy55YW1sCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVu
Y2VzLnlhbWwKQEAgLTE1NTksNiArMTU1OSwxNCBAQCBNb3VzZW1vdmVFdmVudEhhbmRsaW5nUHJl
dmVudHNEZWZhdWx0RW5hYmxlZDoKICAgY2F0ZWdvcnk6IGludGVybmFsCiAgIGNvbmRpdGlvbjog
RU5BQkxFKFRPVUNIX0VWRU5UUykKIAorU21hcnRDYWxsb3V0QmFyUG9zaXRpb25pbmdFbmFibGVk
OgorICB0eXBlOiBib29sCisgIGRlZmF1bHRWYWx1ZTogdHJ1ZQorICBodW1hblJlYWRhYmxlTmFt
ZTogIlNtYXJ0IENhbGxvdXQgQmFyIFBvc2l0aW9uaW5nIgorICBodW1hblJlYWRhYmxlRGVzY3Jp
cHRpb246ICJBdm9pZCBpbnRlcmFjdGlibGUgY29udGVudCB3aGVuIHNob3dpbmcgdGhlIGNhbGxv
dXQgYmFyIgorICBjYXRlZ29yeTogaW50ZXJuYWwKKyAgd2ViY29yZUJpbmRpbmc6IG5vbmUKKwog
IyBEZXByZWNhdGVkCiAKIElDRUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQ6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQppbmRleCA3NTJhM2E0OWJi
Mzg4Y2E0ZjE2ZDFiOWYzN2FjZTAzYzE3OGNlOWFlLi42NzcwNGJkZjUxOGJjM2NkZmMxYTM1YjM5
Yzk5YjllYjk3NTdkZDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXcubW0KQEAgLTQ3NSw2ICs0NzUsMTEgQEAgLSAoQk9PTClfaXNSZXRhaW5pbmdB
Y3RpdmVGb2N1c2VkU3RhdGUKICAgICByZXR1cm4gX2ZvY3VzUHJlc2VydmF0aW9uQ291bnQgfHwg
X2FjdGl2ZUZvY3VzZWRTdGF0ZVJldGFpbkNvdW50OwogfQogCistIChCT09MKV9zbWFydENhbGxv
dXRCYXJQb3NpdGlvbmluZ0VuYWJsZWQKK3sKKyAgICByZXR1cm4gW19jb25maWd1cmF0aW9uIHBy
ZWZlcmVuY2VzXS0+X3ByZWZlcmVuY2VzLT5zbWFydENhbGxvdXRCYXJQb3NpdGlvbmluZ0VuYWJs
ZWQoKTsKK30KKwogI2VuZGlmCiAKICNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFs
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwu
aAppbmRleCBhZjE2ZmMzOGJlMzg0MDljMTNiZGRhMjExN2Y2ZTEzZDM2MmM3MmE4Li5hZTUzZTE5
NjE2ZDFmNzlkODkxMjUzZTQ3NzA5ZmEyNzcwNzZhMjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaApAQCAtMTY4LDYg
KzE2OCw3IEBAIHN0cnVjdCBQcmludEluZm87CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHkpIFVJRWRnZUluc2V0cyBfY29tcHV0ZWRPYnNjdXJlZEluc2V0OwogQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBVSUVkZ2VJbnNldHMgX2NvbXB1dGVkVW5vYnNjdXJlZFNhZmVBcmVh
SW5zZXQ7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1faXNSZXRhaW5p
bmdBY3RpdmVGb2N1c2VkU3RhdGUpIEJPT0wgX3JldGFpbmluZ0FjdGl2ZUZvY3VzZWRTdGF0ZTsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfc21hcnRDYWxsb3V0QmFyUG9z
aXRpb25pbmdFbmFibGVkOwogI2VuZGlmCiAKICNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBmYWFhNWI3MjFkZjVlZmZm
NWIxMjFhNzEyNmEwOWYwYTFlODRlOGJhLi5hMTkzN2JlZjlhZWFmMjg1ZjIxZjRkNjNkM2MxZTY3
MzUwODAxMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNjg3
LDYgKzY4Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbmNlbEF1dG9zY3JvbGwoKTsKICAgICB2
b2lkIGhhcmR3YXJlS2V5Ym9hcmRBdmFpbGFiaWxpdHlDaGFuZ2VkKCk7CiAgICAgYm9vbCBpc1Nj
cm9sbGluZ09yWm9vbWluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNTY3JvbGxpbmdPclpvb21pbmc7
IH0KKyAgICB2b2lkIHJlcXVlc3RFdmFzaW9uUmVjdHNBYm92ZVNlbGVjdGlvbihDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+Jik+JiYpOwogI2lm
IEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQogICAgIHZvaWQgZGlkSGFuZGxlRHJhZ1N0YXJ0UmVx
dWVzdChib29sIHN0YXJ0ZWQpOwogICAgIHZvaWQgZGlkSGFuZGxlQWRkaXRpb25hbERyYWdJdGVt
c1JlcXVlc3QoYm9vbCBhZGRlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCBiNjBkYTc0Y2M4N2M4OTZi
MzYyODlhMzdiZjE5MzZkMzE1NmNjYmU4Li5jYWFlMjVmOWExZTQ1NjQwZTBlZmFhMjQ0YzZkMGVj
YjMyZWI1NDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTMzNTQsOSArMzM1NCwxMyBAQCAtIChjb25z
dCBXZWJLaXQ6OldLQXV0b0NvcnJlY3Rpb25EYXRhJilhdXRvY29ycmVjdGlvbkRhdGEKIC8vIFRo
ZSBjb21wbGV0aW9uIGhhbmRsZXIgY2FuIHBhc3MgbmlsIGlmIGlucHV0IGRvZXMgbm90IG1hdGNo
IHRoZSBhY3R1YWwgdGV4dCBwcmVjZWRpbmcgdGhlIGluc2VydGlvbiBwb2ludC4KIC0gKHZvaWQp
cmVxdWVzdEF1dG9jb3JyZWN0aW9uUmVjdHNGb3JTdHJpbmc6KE5TU3RyaW5nICopaW5wdXQgd2l0
aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShVSVdLQXV0b2NvcnJlY3Rpb25SZWN0cyAqcmVj
dHNGb3JJbnB1dCkpY29tcGxldGlvbkhhbmRsZXIKIHsKKyAgICBpZiAoIWNvbXBsZXRpb25IYW5k
bGVyKSB7CisgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2Vw
dGlvbiBmb3JtYXQ6QCJFeHBlY3RlZCBhIG5vbm51bGwgY29tcGxldGlvbiBoYW5kbGVyIGluICVz
LiIsIF9fUFJFVFRZX0ZVTkNUSU9OX19dOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
aWYgKCFpbnB1dCB8fCAhW2lucHV0IGxlbmd0aF0pIHsKLSAgICAgICAgaWYgKGNvbXBsZXRpb25I
YW5kbGVyKQotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIobmlsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzM3NCw4
ICszMzc4LDQ3IEBAIC0gKHZvaWQpcmVxdWVzdEF1dG9jb3JyZWN0aW9uUmVjdHNGb3JTdHJpbmc6
KE5TU3RyaW5nICopaW5wdXQgd2l0aENvbXBsZXRpb25IYW5kCiAgICAgICAgIHZpZXctPl9hdXRv
Y29ycmVjdGlvbkRhdGEudGV4dEZpcnN0UmVjdCA9IGZpcnN0UmVjdDsKICAgICAgICAgdmlldy0+
X2F1dG9jb3JyZWN0aW9uRGF0YS50ZXh0TGFzdFJlY3QgPSBsYXN0UmVjdDsKIAotICAgICAgICBp
ZiAoY29tcGxldGlvbikKLSAgICAgICAgICAgIGNvbXBsZXRpb24ocmVjdHMuc2l6ZSgpID8gW1dL
QXV0b2NvcnJlY3Rpb25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJlY3RzOmZpcnN0UmVj
dCBsYXN0UmVjdDpsYXN0UmVjdF0gOiBuaWwpOworICAgICAgICBjb21wbGV0aW9uKHJlY3RzLnNp
emUoKSA/IFtXS0F1dG9jb3JyZWN0aW9uUmVjdHMgYXV0b2NvcnJlY3Rpb25SZWN0c1dpdGhSZWN0
czpmaXJzdFJlY3QgbGFzdFJlY3Q6bGFzdFJlY3RdIDogbmlsKTsKKyAgICB9KTsKK30KKworLSAo
dm9pZClyZXF1ZXN0UmVjdHNUb0V2YWRlRm9yU2VsZWN0aW9uQ29tbWFuZHNXaXRoQ29tcGxldGlv
bkhhbmRsZXI6KHZvaWQoXikoTlNBcnJheTxOU1ZhbHVlICo+ICpyZWN0cykpY29tcGxldGlvbkhh
bmRsZXIKK3sKKyAgICBpZiAoIWNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgICAgIFtOU0V4Y2Vw
dGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJFeHBlY3RlZCBh
IG5vbm51bGwgY29tcGxldGlvbiBoYW5kbGVyIGluICVzLiIsIF9fUFJFVFRZX0ZVTkNUSU9OX19d
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFtzZWxmIF9zaG91bGRTdXBwcmVz
c1NlbGVjdGlvbkNvbW1hbmRzXSB8fCAhX3dlYlZpZXcuX3NtYXJ0Q2FsbG91dEJhclBvc2l0aW9u
aW5nRW5hYmxlZCB8fCBfd2ViVmlldy5fZWRpdGFibGUpIHsKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQFsgXSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoX2ZvY3VzZWRF
bGVtZW50SW5mb3JtYXRpb24uZWxlbWVudFR5cGUgIT0gV2ViS2l0OjpJbnB1dFR5cGU6OkNvbnRl
bnRFZGl0YWJsZSAmJiBfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSAhPSBX
ZWJLaXQ6OklucHV0VHlwZTo6VGV4dEFyZWEpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
QFsgXSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBHaXZlIHRoZSBwYWdlIHNv
bWUgdGltZSB0byBwcmVzZW50IGN1c3RvbSBlZGl0aW5nIFVJIGJlZm9yZSBhdHRlbXB0aW5nIHRv
IGRldGVjdCBhbmQgZXZhZGUgaXQuCisgICAgYXV0byBkZWxheUJlZm9yZVNob3dpbmdDYWxsb3V0
QmFyID0gKDAuMjVfcykubmFub3NlY29uZHMoKTsKKyAgICBkaXNwYXRjaF9hZnRlcihkaXNwYXRj
aF90aW1lKERJU1BBVENIX1RJTUVfTk9XLCBkZWxheUJlZm9yZVNob3dpbmdDYWxsb3V0QmFyKSwg
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW2NvbXBsZXRpb24gPSBtYWtlQmxvY2tQdHIoY29t
cGxldGlvbkhhbmRsZXIpLCB3ZWFrU2VsZiA9IFdlYWtPYmpDUHRyPFdLQ29udGVudFZpZXc+KHNl
bGYpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCF3ZWFrU2VsZikgeworICAgICAgICAgICAg
Y29tcGxldGlvbihAWyBdKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGF1dG8gc3Ryb25nU2VsZiA9IHdlYWtTZWxmLmdldCgpOworICAgICAgICBpZiAoIXN0cm9u
Z1NlbGYtPl9wYWdlKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uKEBbIF0pOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3Ryb25nU2VsZi0+X3BhZ2UtPnJlcXVl
c3RFdmFzaW9uUmVjdHNBYm92ZVNlbGVjdGlvbihbY29tcGxldGlvbiA9IFdURk1vdmUoY29tcGxl
dGlvbildIChhdXRvJiByZWN0cykgeworICAgICAgICAgICAgYXV0byByZWN0c0FzVmFsdWVzID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnJlY3RzLnNp
emUoKV0pOworICAgICAgICAgICAgZm9yIChhdXRvJiBmbG9hdFJlY3QgOiByZWN0cykKKyAgICAg
ICAgICAgICAgICBbcmVjdHNBc1ZhbHVlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dS
ZWN0OmZsb2F0UmVjdF1dOworICAgICAgICAgICAgY29tcGxldGlvbihyZWN0c0FzVmFsdWVzLmdl
dCgpKTsKKyAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTM1MzgsOCArMzU4MSwxMCBAQCAt
ICh2b2lkKWFwcGx5QXV0b2NvcnJlY3Rpb246KE5TU3RyaW5nICopY29ycmVjdGlvbiB0b1N0cmlu
ZzooTlNTdHJpbmcgKilpbnB1dCB3aQogCiAtICh2b2lkKXJlcXVlc3RBdXRvY29ycmVjdGlvbkNv
bnRleHRXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFVJV0tBdXRvY29ycmVjdGlvbkNv
bnRleHQgKmF1dG9jb3JyZWN0aW9uQ29udGV4dCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBp
ZiAoIWNvbXBsZXRpb25IYW5kbGVyKQorICAgIGlmICghY29tcGxldGlvbkhhbmRsZXIpIHsKKyAg
ICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1h
dDpAIkV4cGVjdGVkIGEgbm9ubnVsbCBjb21wbGV0aW9uIGhhbmRsZXIgaW4gJXMuIiwgX19QUkVU
VFlfRlVOQ1RJT05fX107CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICNpZiBVU0UoVUlLSVRf
S0VZQk9BUkRfQURESVRJT05TKQogICAgIGlmIChbc2VsZiBfZGlzYWJsZUF1dG9tYXRpY0tleWJv
YXJkVUldKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFn
ZVByb3h5SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlP
Uy5tbQppbmRleCBlNTAwNmVkZTViNTA0MjI4MTQzNzE2YWRjN2E0MDU4MzhmMzQzOTQzLi4yYmIx
Y2M5ZjZlZTNkZWI1MGQ5NzUyZDhjYWY2MDdmZmY3OTBiMGJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQogCiAjaW1wb3J0ICJBUElVSUNsaWVudC5oIgorI2ltcG9y
dCAiQ29ubmVjdGlvbi5oIgogI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5oIgogI2ltcG9ydCAiRWRp
dGluZ1JhbmdlLmgiCiAjaW1wb3J0ICJHbG9iYWxGaW5kSW5QYWdlU3RhdGUuaCIKQEAgLTExMTgs
NiArMTExOSwxNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aGFyZHdhcmVLZXlib2FyZEF2YWlsYWJp
bGl0eUNoYW5nZWQoKQogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGFy
ZHdhcmVLZXlib2FyZEF2YWlsYWJpbGl0eUNoYW5nZWQoKSwgbV9wYWdlSUQpOwogfQogCit2b2lk
IFdlYlBhZ2VQcm94eTo6cmVxdWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mKT4mJiBjYWxs
YmFjaykKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkgeworICAgICAgICBjYWxsYmFjayh7IH0pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6UmVxdWVzdEV2YXNpb25SZWN0c0Fi
b3ZlU2VsZWN0aW9uKCksIFdURk1vdmUoY2FsbGJhY2spLCBtX3BhZ2VJRCk7Cit9CisKICNpZiBF
TkFCTEUoREFUQV9JTlRFUkFDVElPTikKIAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZEhhbmRsZURy
YWdTdGFydFJlcXVlc3QoYm9vbCBzdGFydGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCmluZGV4IDFkZDJiZjdkNGI1YWRmNDdlZmM5YTE2ZDYwZDcyYmFmMmNj
NDk3NzguLjllODdjMTk5ZTNlZmRmOGUzOWY3OGIwMDJkN2MyODJhN2Y2NzE0ZGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTY2NCw2ICs2NjQsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzdG9yZVNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkoYm9vbCk7
CiAgICAgdm9pZCBzdGFydEF1dG9zY3JvbGxBdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmKTsKICAgICB2b2lkIGNhbmNlbEF1dG9zY3JvbGwoKTsKKyAgICB2b2lkIHJlcXVlc3RF
dmFzaW9uUmVjdHNBYm92ZVNlbGVjdGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+Jik+JiYpOwogCiAgICAgdm9pZCBjb250ZW50U2l6ZUNh
dGVnb3J5RGlkQ2hhbmdlKGNvbnN0IFN0cmluZyYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCAyZDViN2I1YTZi
Y2QwOTMwNzE4M2Y0NDlmYWQxNmMyN2NkNjRiNjgxLi5hNTJiYjIzYjliM2E1YWJhNWMwNTRjYTUz
OWY4YzI4OWU4ZGM5ZGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTgwLDYgKzgwLDcgQEAgbWVzc2FnZXMgLT4g
V2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgU3luY0FwcGx5QXV0b2NvcnJlY3Rpb24oU3Ry
aW5nIGNvcnJlY3Rpb24sIFN0cmluZyBvcmlnaW5hbFRleHQpIC0+IChib29sIGF1dG9jb3JyZWN0
aW9uQXBwbGllZCkgRGVsYXllZAogICAgIFJlcXVlc3RBdXRvY29ycmVjdGlvbkNvbnRleHQoV2Vi
S2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgQXV0b2NvcnJlY3Rpb25Db250ZXh0U3lu
YygpIC0+IChzdHJ1Y3QgV2ViS2l0OjpXZWJBdXRvY29ycmVjdGlvbkNvbnRleHQgY29udGV4dCkg
RGVsYXllZAorICAgIFJlcXVlc3RFdmFzaW9uUmVjdHNBYm92ZVNlbGVjdGlvbigpIC0+IChWZWN0
b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiByZWN0cykgQXN5bmMKICAgICBHZXRQb3NpdGlvbkluZm9y
bWF0aW9uKHN0cnVjdCBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1ZXN0IHJlcXVl
c3QpIC0+IChzdHJ1Y3QgV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiBp
bmZvcm1hdGlvbikgRGVsYXllZAogICAgIFJlcXVlc3RQb3NpdGlvbkluZm9ybWF0aW9uKHN0cnVj
dCBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1ZXN0IHJlcXVlc3QpCiAgICAgU3Rh
cnRJbnRlcmFjdGlvbldpdGhFbGVtZW50QXRQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2ludCBwb2lu
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW0KaW5kZXggZTE1ZTc5YmUxNTM1NmQyMGQxYjU4MmYwZDdjZjRhYWIzM2VhOWVkZi4uNjNk
YWQyMjAzYjgxMGUxZjQ1NmNhY2RhNjVlMTg1MjYyOTI3NzY1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTE1MDQsNiAr
MTUwNCwxMDUgQEAgdm9pZCBXZWJQYWdlOjpjYW5jZWxBdXRvc2Nyb2xsKCkKICAgICBtX3BhZ2Ut
Pm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmNhbmNlbFNlbGVjdGlvbkF1dG9zY3JvbGwoKTsK
IH0KIAordm9pZCBXZWJQYWdlOjpyZXF1ZXN0RXZhc2lvblJlY3RzQWJvdmVTZWxlY3Rpb24oQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYpPiYm
IHJlcGx5KQoreworICAgIGF1dG8mIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5m
b2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBhdXRvIGZyYW1lVmlldyA9IG1ha2VSZWZQdHIoZnJh
bWUudmlldygpKTsKKyAgICBpZiAoIWZyYW1lVmlldykgeworICAgICAgICByZXBseSh7IH0pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkgeworICAg
ICAgICByZXBseSh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBzZWxl
Y3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFzZWxl
Y3RlZFJhbmdlKSB7CisgICAgICAgIHJlcGx5KHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIW1fZm9jdXNlZEVsZW1lbnQgfHwgIW1fZm9jdXNlZEVsZW1lbnQtPnJlbmRl
cmVyKCkgfHwgbV9mb2N1c2VkRWxlbWVudC0+cmVuZGVyZXIoKS0+aXNUcmFuc3BhcmVudE9yRnVs
bHlDbGlwcGVkUmVzcGVjdGluZ1BhcmVudEZyYW1lcygpKSB7CisgICAgICAgIHJlcGx5KHsgfSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRz
SW5Sb290Vmlld0Nvb3JkaW5hdGVzOworICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKQorICAg
ICAgICBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFtZVZpZXctPmNv
bnRlbnRzVG9Sb290VmlldyhzZWxlY3RlZFJhbmdlLT5hYnNvbHV0ZUJvdW5kaW5nQm94KCkpOwor
ICAgIGVsc2UKKyAgICAgICAgc2VsZWN0aW9uQm91bmRzSW5Sb290Vmlld0Nvb3JkaW5hdGVzID0g
ZnJhbWVWaWV3LT5jb250ZW50c1RvUm9vdFZpZXcoZnJhbWUuc2VsZWN0aW9uKCkuYWJzb2x1dGVD
YXJldEJvdW5kcygpKTsKKworICAgIGF1dG8gY2VudGVyT2ZUYXJnZXRCb3VuZHMgPSBzZWxlY3Rp
b25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMuY2VudGVyKCk7CisgICAgV2ViQ29yZTo6Rmxv
YXRQb2ludCBjZW50ZXJUb3BJblJvb3RWaWV3Q29vcmRpbmF0ZXMgeyBjZW50ZXJPZlRhcmdldEJv
dW5kcy54KCksIHNlbGVjdGlvbkJvdW5kc0luUm9vdFZpZXdDb29yZGluYXRlcy55KCkgfTsKKwor
ICAgIGF1dG8gY2xpY2thYmxlTm9uRWRpdGFibGVOb2RlID0gWyZdIChjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBsb2NhdGlvbkluUm9vdFZpZXdDb29yZGluYXRlcykgLT4gTm9kZSogeworICAg
ICAgICBGbG9hdFBvaW50IGFkanVzdGVkUG9pbnQ7CisgICAgICAgIGF1dG8qIGhpdE5vZGUgPSBt
X3BhZ2UtPm1haW5GcmFtZSgpLm5vZGVSZXNwb25kaW5nVG9DbGlja0V2ZW50cyhsb2NhdGlvbklu
Um9vdFZpZXdDb29yZGluYXRlcywgYWRqdXN0ZWRQb2ludCk7CisgICAgICAgIGlmICghaGl0Tm9k
ZSB8fCBpczxIVE1MQm9keUVsZW1lbnQ+KGhpdE5vZGUpIHx8IGlzPERvY3VtZW50PihoaXROb2Rl
KSB8fCBoaXROb2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgICAgICByZXR1cm4gaGl0Tm9kZTsKKyAgICB9OworCisgICAgZmxvYXQgc2Nh
bGVGYWN0b3IgPSBwYWdlU2NhbGVGYWN0b3IoKTsKKyAgICAvLyBUaGlzIGhldXJpc3RpYyBhdHRl
bXB0cyB0byBmaW5kIGEgbGlzdCBvZiByZWN0cyB0byBhdm9pZCB3aGVuIHNob3dpbmcgdGhlIGNh
bGxvdXQgbWVudSBvbiBpT1MuCisgICAgLy8gRmlyc3QsIGhpdC10ZXN0IHNldmVyYWwgcG9pbnRz
IGFib3ZlIHRoZSBib3VuZHMgb2YgdGhlIHNlbGVjdGlvbiByZWN0IGluIHNlYXJjaCBvZiBjbGlj
a2FibGUgbm9kZXMgdGhhdCBhcmUgbm90IGVkaXRhYmxlLgorICAgIC8vIFNlY29uZGx5LCBoaXQt
dGVzdCBzZXZlcmFsIHBvaW50cyBhcm91bmQgdGhlIGVkZ2VzIG9mIHRoZSBzZWxlY3Rpb24gcmVj
dCBhbmQgZXhjbHVkZSBhbnkgbm9kZXMgZm91bmQgaW4gdGhlIGZpcnN0IHJvdW5kIG9mCisgICAg
Ly8gaGl0LXRlc3RpbmcgaWYgdGhlc2Ugbm9kZXMgYXJlIGFsc28gcmVhY2hhYmxlIGJ5IG1vdmlu
ZyBvdXR3YXJkcyBmcm9tIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90dG9tIGVkZ2VzIG9mIHRoZSBz
ZWxlY3Rpb24uCisgICAgLy8gQWRkaXRpb25hbGx5LCBleGNsdWRlIGFueSBoaXQtdGVzdGVkIG5v
ZGVzIHRoYXQgYXJlIGVpdGhlciB2ZXJ5IGxhcmdlIHJlbGF0aXZlIHRvIHRoZSBzaXplIG9mIHRo
ZSByb290IHZpZXcsIG9yIGNvbXBsZXRlbHkKKyAgICAvLyBlbmNvbXBhc3MgdGhlIHNlbGVjdGlv
biBib3VuZHMuIFRoZSByZXN1bHRpbmcgcmVjdHMgYXJlIHRoZSBib3VuZHMgb2YgdGhlc2UgaGl0
LXRlc3RlZCBub2RlcyBpbiByb290IHZpZXcgY29vcmRpbmF0ZXMuCisgICAgSGFzaFNldDxSZWY8
Tm9kZT4+IGhpdFRlc3RlZE5vZGVzOworICAgIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHJl
Y3RzVG9Bdm9pZEluUm9vdFZpZXdDb29yZGluYXRlczsKKyAgICBjb25zdCBWZWN0b3I8RmxvYXRQ
b2ludCwgNT4gb2Zmc2V0c0ZvckhpdFRlc3Rpbmcge3sgLTMwLCAtNTEgfSwgeyAzMSwgLTUwIH0s
IHsgLTYwLCAtMzQgfSwgeyA2MCwgLTM2IH0sIHsgMCwgLTIwIH19OworICAgIGZvciAoYXV0byBv
ZmZzZXQgOiBvZmZzZXRzRm9ySGl0VGVzdGluZykgeworICAgICAgICBvZmZzZXQuc2NhbGUoMSAv
IHNjYWxlRmFjdG9yKTsKKyAgICAgICAgaWYgKGF1dG8qIGhpdE5vZGUgPSBjbGlja2FibGVOb25F
ZGl0YWJsZU5vZGUoY2VudGVyVG9wSW5Sb290Vmlld0Nvb3JkaW5hdGVzICsgb2Zmc2V0KSkKKyAg
ICAgICAgICAgIGhpdFRlc3RlZE5vZGVzLmFkZCgqaGl0Tm9kZSk7CisgICAgfQorCisgICAgY29u
c3QgZmxvYXQgbWFyZ2luRm9ySGl0VGVzdGluZ1N1cnJvdW5kaW5nTm9kZXMgPSA4MCAvIHNjYWxl
RmFjdG9yOworICAgIFZlY3RvcjxGbG9hdFBvaW50LCAzPiBleGNsdXNpb25IaXRUZXN0TG9jYXRp
b25zIHsKKyAgICAgICAgeyBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMueCgp
IC0gbWFyZ2luRm9ySGl0VGVzdGluZ1N1cnJvdW5kaW5nTm9kZXMsIGNlbnRlck9mVGFyZ2V0Qm91
bmRzLnkoKSB9LAorICAgICAgICB7IGNlbnRlck9mVGFyZ2V0Qm91bmRzLngoKSwgc2VsZWN0aW9u
Qm91bmRzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLm1heFkoKSArIG1hcmdpbkZvckhpdFRlc3RpbmdT
dXJyb3VuZGluZ05vZGVzIH0sCisgICAgICAgIHsgc2VsZWN0aW9uQm91bmRzSW5Sb290Vmlld0Nv
b3JkaW5hdGVzLm1heFgoKSArIG1hcmdpbkZvckhpdFRlc3RpbmdTdXJyb3VuZGluZ05vZGVzLCBj
ZW50ZXJPZlRhcmdldEJvdW5kcy55KCkgfQorICAgIH07CisKKyAgICBmb3IgKGF1dG8mIGxvY2F0
aW9uIDogZXhjbHVzaW9uSGl0VGVzdExvY2F0aW9ucykgeworICAgICAgICBpZiAoYXV0byogbm9k
ZVRvRXhjbHVkZSA9IGNsaWNrYWJsZU5vbkVkaXRhYmxlTm9kZShsb2NhdGlvbikpCisgICAgICAg
ICAgICBoaXRUZXN0ZWROb2Rlcy5yZW1vdmUoKm5vZGVUb0V4Y2x1ZGUpOworICAgIH0KKworICAg
IC8vIElmIHRoZSBlbGVtZW50IGlzIHRvbyBsYXJnZSwgZG9uJ3QgY29uc2lkZXIgaXQgdG8gYmUg
YSBwb3RlbnRpYWwgZWxlbWVudCBpbiBhIGNvbnRleHQgbWVudSBvciB0b29sYmFyIG9uIHRoZSBw
YWdlLgorICAgIGNvbnN0IGRvdWJsZSBmYWN0b3JPZkNvbnRlbnRBcmVhID0gMC43NTsKKyAgICBh
dXRvIGNvbnRleHRNZW51RWxlbWVudFNpemVMaW1pdCA9IGZhY3Rvck9mQ29udGVudEFyZWEgKiBw
YWdlU2NhbGVGYWN0b3IoKSAqIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT51bm9ic2N1cmVk
Q29udGVudFJlY3QoKS5zaXplKCk7CisKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBoaXRUZXN0ZWRO
b2RlcykgeworICAgICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudDsKKyAgICAgICAgaWYgKGlz
PEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICAgICAgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+
KG5vZGUucHRyKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbGVtZW50ID0gbm9kZS0+
cGFyZW50RWxlbWVudCgpOworCisgICAgICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGF1dG8gYm91bmRzID0gZWxlbWVudC0+Ym91bmRzSW5Sb290Vmll
d1NwYWNlKCk7CisgICAgICAgIGlmIChib3VuZHMud2lkdGgoKSA+IGNvbnRleHRNZW51RWxlbWVu
dFNpemVMaW1pdC53aWR0aCgpIHx8IGJvdW5kcy5oZWlnaHQoKSA+IGNvbnRleHRNZW51RWxlbWVu
dFNpemVMaW1pdC5oZWlnaHQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlm
IChib3VuZHMuY29udGFpbnMoZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rpb25Cb3VuZHNJblJvb3RW
aWV3Q29vcmRpbmF0ZXMpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJlY3Rz
VG9Bdm9pZEluUm9vdFZpZXdDb29yZGluYXRlcy5hcHBlbmQoV1RGTW92ZShib3VuZHMpKTsKKyAg
ICB9CisKKyAgICByZXBseShXVEZNb3ZlKHJlY3RzVG9Bdm9pZEluUm9vdFZpZXdDb29yZGluYXRl
cykpOworfQorCiB2b2lkIFdlYlBhZ2U6OmdldFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0
aW9uT2Zmc2V0KHVpbnQzMl90IGdyYW51bGFyaXR5LCBpbnQzMl90IG9mZnNldCwgQ2FsbGJhY2tJ
RCBjYWxsYmFja0lEKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGYzMmIzN2Y2MGFmMWU1MTY1MjhmZTVkYTg4ZjRjMWRk
YTM1NDMxMC4uMTllNGJhZWU2NTlkZDcxNjZkMzJjOGNlMGIwYTNmYjkzNzU5ZmZjZiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0
IEBACisyMDE5LTAyLTIwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgor
CisgICAgICAgIFtpT1NdIENhbGxvdXQgbWVudSBvdmVybGFwcyBpbi1wYWdlIGNvbnRyb2xzIHdo
ZW4gZWRpdGluZyBhIGNvbW1lbnQgaW4gZ2l0aHViLmNvbSdzIGlzc3VlIHRyYWNrZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDg3MworICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNDY3MDE5NzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgY291cGxlIG9mIFVJU2NyaXB0Q29udHJvbGxlciBt
ZXRob2RzIHRvIG1ha2UgY2FsbG91dCBtZW51IHRlc3Rpbmcgb24gaU9TIGVhc2llciAoc2VlIGJl
bG93KS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJ
T1MubW06CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6bWVudVJlY3QgY29uc3Qp
OgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OmlzU2hvd2luZ01lbnUgY29uc3Qp
OgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJ
U2NyaXB0Q29udHJvbGxlci5pZGw6CisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlw
dENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRD
b250cm9sbGVyOjptZW51UmVjdCBjb25zdCk6CisKKyAgICAgICAgQWRkIGEgZnVuY3Rpb24gdG8g
cXVlcnkgdGhlIGJvdW5kcyBvZiB0aGUgY2FsbG91dCBtZW51IGluIGNvbnRlbnQgY29vcmRpbmF0
ZXMuCisKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjppc1Nob3dpbmdNZW51IGNv
bnN0KToKKworICAgICAgICBBZGQgYSBmdW5jdGlvbiB0byBxdWVyeSB3aGV0aGVyIHRoZSBjYWxs
b3V0IG1lbnUgaXMgc2hvd24gKGkuZS4sIGhhcyBmaW5pc2hlZCBpdHMgYXBwZWFyYW5jZSBhbmlt
YXRpb24pLgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlT
Y3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0
UnVubmVyV0tXZWJWaWV3Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3Jp
cHRDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnJl
Y3RGb3JNZW51QWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVy
OjptZW51UmVjdCBjb25zdCk6CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6aXNT
aG93aW5nTWVudSBjb25zdCk6CisgICAgICAgIChXVFI6OmZpbmRWaWV3SW5IaWVyYXJjaHlPZlR5
cGUpOiBEZWxldGVkLgorCiAyMDE5LTAyLTIxICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+
CiAKICAgICAgICAgVXBkYXRlIE1JTUUgdHlwZSBwYXJzZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0gYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCmluZGV4IGZmYjRkZWE2YTJjN2Uw
YjBiYjU2NzEwZWU0MzNkZDExYzA5NzE2NDAuLmY0MDhjY2ExNzdjYzQzYjc3NzA2YjJjZGY3MzU0
NjI4NWQwNGFiY2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJU2NyaXB0
Q29udHJvbGxlcklPUy5tbQpAQCAtMzM3LDYgKzMzNywxNiBAQCBKU09iamVjdFJlZiBVSVNjcmlw
dENvbnRyb2xsZXI6OnJlY3RGb3JNZW51QWN0aW9uKEpTU3RyaW5nUmVmKSBjb25zdAogICAgIHJl
dHVybiBudWxscHRyOwogfQogCitKU09iamVjdFJlZiBVSVNjcmlwdENvbnRyb2xsZXI6Om1lbnVS
ZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworYm9vbCBVSVNjcmlwdENv
bnRyb2xsZXI6OmlzU2hvd2luZ01lbnUoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
Kwogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnBsYXRmb3JtU2V0RGlkRW5kU2Nyb2xsaW5nQ2Fs
bGJhY2soKQogewogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlw
dENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbCBiL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwK
aW5kZXggM2E5YzNlMjliOWMxMjJmNDc2MjNjMDJjYTFlOGYzNmUyOWE2NTc2YS4uNWVjOTE5MWFm
YjBmMzA3NTQyNGU3MjZhNjkzOWYyOTcxZjgzNTExNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1
bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlk
bAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9V
SVNjcmlwdENvbnRyb2xsZXIuaWRsCkBAIC0yMjUsNiArMjI1LDggQEAgaW50ZXJmYWNlIFVJU2Ny
aXB0Q29udHJvbGxlciB7CiAKICAgICBhdHRyaWJ1dGUgb2JqZWN0IGRpZFNob3dNZW51Q2FsbGJh
Y2s7CiAgICAgYXR0cmlidXRlIG9iamVjdCBkaWRIaWRlTWVudUNhbGxiYWNrOworICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBib29sZWFuIGlzU2hvd2luZ01lbnU7CisgICAgcmVhZG9ubHkgYXR0cmli
dXRlIG9iamVjdCBtZW51UmVjdDsKICAgICBvYmplY3QgcmVjdEZvck1lbnVBY3Rpb24oRE9NU3Ry
aW5nIGFjdGlvbik7CiAKICAgICBhdHRyaWJ1dGUgb2JqZWN0IHdpbGxCZWdpblpvb21pbmdDYWxs
YmFjazsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0
L1VJU2NyaXB0Q29udHJvbGxlci5jcHAgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0
Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IGI5NDcyZDBmZDE3NzY5ZWI4YWRm
YWY0YmYzY2JjNzk2YjNkZThjNjAuLjYxMmVhOWM4M2JhZmRhZDQwMmE2YjA2NmQ0YmI4OWE3Yzkz
NjgxY2IgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0
L1VJU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNj
cmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcApAQCAtNTMyLDExICs1MzIsMjEgQEAg
dm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnBsYXRmb3JtU2V0RGlkSGlkZU1lbnVDYWxsYmFjaygp
CiB7CiB9CiAKK0pTT2JqZWN0UmVmIFVJU2NyaXB0Q29udHJvbGxlcjo6bWVudVJlY3QoKSBjb25z
dAoreworICAgIHJldHVybiBudWxscHRyOworfQorCiBKU09iamVjdFJlZiBVSVNjcmlwdENvbnRy
b2xsZXI6OnJlY3RGb3JNZW51QWN0aW9uKEpTU3RyaW5nUmVmKSBjb25zdAogewogICAgIHJldHVy
biBudWxscHRyOwogfQogCitib29sIFVJU2NyaXB0Q29udHJvbGxlcjo6aXNTaG93aW5nTWVudSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxl
cjo6cGxhdGZvcm1DbGVhckFsbENhbGxiYWNrcygpCiB7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaCBiL1Rv
b2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5o
CmluZGV4IDVmMzM1ZWQyMTM5OWYxOGIwMjRiMWY2NzhjYmJkMGJlNGRiNDZlMWQuLmNlMzU4NDE3
MGE5YzQ4NzYxMTUwZjc0ZjlkZjU1MjZiYjY0NjdmZTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1Rv
b2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5o
CkBAIC0xNjQsNyArMTY0LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RGlkU2hvd01lbnVDYWxs
YmFjayhKU1ZhbHVlUmVmKTsKICAgICBKU1ZhbHVlUmVmIGRpZFNob3dNZW51Q2FsbGJhY2soKSBj
b25zdDsKIAorICAgIGJvb2wgaXNTaG93aW5nTWVudSgpIGNvbnN0OwogICAgIEpTT2JqZWN0UmVm
IHJlY3RGb3JNZW51QWN0aW9uKEpTU3RyaW5nUmVmIGFjdGlvbikgY29uc3Q7CisgICAgSlNPYmpl
Y3RSZWYgbWVudVJlY3QoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RGlkRW5kU2Nyb2xsaW5nQ2Fs
bGJhY2soSlNWYWx1ZVJlZik7CiAgICAgSlNWYWx1ZVJlZiBkaWRFbmRTY3JvbGxpbmdDYWxsYmFj
aygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0
UnVubmVyV0tXZWJWaWV3LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5u
ZXJXS1dlYlZpZXcuaAppbmRleCAyOGQ1N2FjMmE2NmNlYjEwZTYxNTBlMTFiNjhkYTBjMmM5YWU3
Njg4Li4xZDNhMThjNTZhOGEyMDI4ZTViNDcxZmEzODcxNDZlMjQ4MzdmYTg0IDEwMDY0NAotLS0g
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcuaAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcuaApAQCAt
NTYsNiArNTYsNyBAQAogQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVUlFZGdlSW5zZXRz
IG92ZXJyaWRlU2FmZUFyZWFJbnNldHM7CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSwgZ2V0dGVyPWlzU2hvd2luZ0tleWJvYXJkKSBCT09MIHNob3dpbmdLZXlib2FyZDsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgZ2V0dGVyPWlzU2hvd2luZ01lbnUpIEJPT0wgc2hv
d2luZ01lbnU7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBCT09MIHVzZXNTYWZhcmlM
aWtlUm90YXRpb247CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1pc0lu
dGVyYWN0aW5nV2l0aEZvcm1Db250cm9sKSBCT09MIGludGVyYWN0aW5nV2l0aEZvcm1Db250cm9s
OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRy
b2xsZXJJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xs
ZXJJT1MubW0KaW5kZXggMDk4N2QyZjI3YmQ3ZDE2NmM1ZDdmYWJkYjA0NWI4ODc0ZTJhZjkwYy4u
N2NjNDk3NjZlYmRjMDBhZWQ3ODhmMTI5MTMyZDk3ODAwZTVmNTRlNSAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQpAQCAtMTE3
LDE5ICsxMTcsNiBAQCBzdGF0aWMgQk9PTCBmb3JFYWNoVmlld0luSGllcmFyY2h5KFVJVmlldyAq
dmlldywgdm9pZChebWFwRnVuY3Rpb24pKFVJVmlldyAqc3VidgogICAgIHJldHVybiBzdG9wOwog
fQogCi1zdGF0aWMgVUlWaWV3ICpmaW5kVmlld0luSGllcmFyY2h5T2ZUeXBlKFVJVmlldyAqdmll
dywgQ2xhc3Mgdmlld0NsYXNzKQotewotICAgIF9fYmxvY2sgUmV0YWluUHRyPFVJVmlldz4gZm91
bmRWaWV3OwotICAgIGZvckVhY2hWaWV3SW5IaWVyYXJjaHkodmlldywgXihVSVZpZXcgKnN1YnZp
ZXcsIEJPT0wgKnN0b3ApIHsKLSAgICAgICAgaWYgKCFbc3VidmlldyBpc0tpbmRPZkNsYXNzOnZp
ZXdDbGFzc10pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZm91bmRWaWV3ID0gc3Vi
dmlldzsKLSAgICAgICAgKnN0b3AgPSBZRVM7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIGZvdW5kVmll
dy5hdXRvcmVsZWFzZSgpOwotfQotCiBzdGF0aWMgTlNBcnJheTxVSVZpZXcgKj4gKmZpbmRBbGxW
aWV3c0luSGllcmFyY2h5T2ZUeXBlKFVJVmlldyAqdmlldywgQ2xhc3Mgdmlld0NsYXNzKQogewog
ICAgIF9fYmxvY2sgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB2aWV3cyA9IGFkb3B0TlMoW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwpAQCAtODgzLDI1ICs4NzAsMjEgQEAgSlNPYmpl
Y3RSZWYgVUlTY3JpcHRDb250cm9sbGVyOjpyZWN0Rm9yTWVudUFjdGlvbihKU1N0cmluZ1JlZiBq
c0FjdGlvbikgY29uc3QKIAogICAgIFVJV2luZG93ICp3aW5kb3dGb3JCdXR0b24gPSBuaWw7CiAg
ICAgVUlCdXR0b24gKmJ1dHRvbkZvckFjdGlvbiA9IG5pbDsKLSAgICBmb3IgKFVJV2luZG93ICp3
aW5kb3cgaW4gVUlBcHBsaWNhdGlvbi5zaGFyZWRBcHBsaWNhdGlvbi53aW5kb3dzKSB7Ci0gICAg
ICAgIGlmICghW3dpbmRvdyBpc0tpbmRPZkNsYXNzOlVJVGV4dEVmZmVjdHNXaW5kb3cuY2xhc3Nd
KQotICAgICAgICAgICAgY29udGludWU7CisgICAgVUlWaWV3ICpjYWxsb3V0QmFyID0gVUlDYWxs
b3V0QmFyLmFjdGl2ZUNhbGxvdXRCYXI7CisgICAgaWYgKCFjYWxsb3V0QmFyLndpbmRvdykKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgVUlWaWV3ICpjYWxsb3V0QmFyID0gZmlu
ZFZpZXdJbkhpZXJhcmNoeU9mVHlwZSh3aW5kb3csIFVJQ2FsbG91dEJhci5jbGFzcyk7Ci0gICAg
ICAgIGlmICghY2FsbG91dEJhcikKKyAgICBmb3IgKFVJQnV0dG9uICpidXR0b24gaW4gZmluZEFs
bFZpZXdzSW5IaWVyYXJjaHlPZlR5cGUoY2FsbG91dEJhciwgVUlCdXR0b24uY2xhc3MpKSB7Cisg
ICAgICAgIE5TU3RyaW5nICpidXR0b25UaXRsZSA9IFtidXR0b24gdGl0bGVGb3JTdGF0ZTpVSUNv
bnRyb2xTdGF0ZU5vcm1hbF07CisgICAgICAgIGlmICghYnV0dG9uVGl0bGUubGVuZ3RoKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgZm9yIChVSUJ1dHRvbiAqYnV0dG9uIGluIGZp
bmRBbGxWaWV3c0luSGllcmFyY2h5T2ZUeXBlKGNhbGxvdXRCYXIsIFVJQnV0dG9uLmNsYXNzKSkg
ewotICAgICAgICAgICAgTlNTdHJpbmcgKmJ1dHRvblRpdGxlID0gW2J1dHRvbiB0aXRsZUZvclN0
YXRlOlVJQ29udHJvbFN0YXRlTm9ybWFsXTsKLSAgICAgICAgICAgIGlmICghYnV0dG9uVGl0bGUu
bGVuZ3RoKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAoIVti
dXR0b25UaXRsZSBpc0VxdWFsVG9TdHJpbmc6KF9fYnJpZGdlIE5TU3RyaW5nICopYWN0aW9uLmdl
dCgpXSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFbYnV0dG9uVGl0
bGUgaXNFcXVhbFRvU3RyaW5nOihfX2JyaWRnZSBOU1N0cmluZyAqKWFjdGlvbi5nZXQoKV0pCisg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgYnV0dG9uRm9yQWN0aW9uID0gYnV0
dG9uOwotICAgICAgICAgICAgd2luZG93Rm9yQnV0dG9uID0gd2luZG93OwotICAgICAgICB9Cisg
ICAgICAgIGJ1dHRvbkZvckFjdGlvbiA9IGJ1dHRvbjsKKyAgICAgICAgd2luZG93Rm9yQnV0dG9u
ID0gY2FsbG91dEJhci53aW5kb3c7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGlmICgh
YnV0dG9uRm9yQWN0aW9uKQpAQCAtOTExLDYgKzg5NCwyMSBAQCBKU09iamVjdFJlZiBVSVNjcmlw
dENvbnRyb2xsZXI6OnJlY3RGb3JNZW51QWN0aW9uKEpTU3RyaW5nUmVmIGpzQWN0aW9uKSBjb25z
dAogICAgIHJldHVybiBtX2NvbnRleHQtPm9iamVjdEZyb21SZWN0KFdlYkNvcmU6OkZsb2F0UmVj
dChyZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLm9yaWdpbi54LCByZWN0SW5Sb290Vmlld0Nvb3Jk
aW5hdGVzLm9yaWdpbi55LCByZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLnNpemUud2lkdGgsIHJl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMuc2l6ZS5oZWlnaHQpKTsKIH0KIAorSlNPYmplY3RSZWYg
VUlTY3JpcHRDb250cm9sbGVyOjptZW51UmVjdCgpIGNvbnN0Cit7CisgICAgVUlWaWV3ICpjYWxs
b3V0QmFyID0gVUlDYWxsb3V0QmFyLmFjdGl2ZUNhbGxvdXRCYXI7CisgICAgaWYgKCFjYWxsb3V0
QmFyLndpbmRvdykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDR1JlY3QgcmVjdElu
Um9vdFZpZXdDb29yZGluYXRlcyA9IFtjYWxsb3V0QmFyIGNvbnZlcnRSZWN0OmNhbGxvdXRCYXIu
Ym91bmRzIHRvVmlldzpwbGF0Zm9ybUNvbnRlbnRWaWV3KCldOworICAgIHJldHVybiBtX2NvbnRl
eHQtPm9iamVjdEZyb21SZWN0KFdlYkNvcmU6OkZsb2F0UmVjdChyZWN0SW5Sb290Vmlld0Nvb3Jk
aW5hdGVzLm9yaWdpbi54LCByZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLm9yaWdpbi55LCByZWN0
SW5Sb290Vmlld0Nvb3JkaW5hdGVzLnNpemUud2lkdGgsIHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0
ZXMuc2l6ZS5oZWlnaHQpKTsKK30KKworYm9vbCBVSVNjcmlwdENvbnRyb2xsZXI6OmlzU2hvd2lu
Z01lbnUoKSBjb25zdAoreworICAgIHJldHVybiBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkuc2hvd2luZ01lbnU7Cit9CisKIHZvaWQgVUlT
Y3JpcHRDb250cm9sbGVyOjpwbGF0Zm9ybVNldERpZEVuZFNjcm9sbGluZ0NhbGxiYWNrKCkKIHsK
ICAgICBUZXN0UnVubmVyV0tXZWJWaWV3ICp3ZWJWaWV3ID0gVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDZjOWQzNDEwYTIw
OTUzZDZkYTdjYzA0ZDExYmUwZTA4YjRiNDI0YjkuLmI0NzA3NDFlYTQwZjhlMGUwYjNkZGE1MDgz
MzZmM2ZkNDliYWVhMzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxOS0wMi0yMCAgV2Vuc29u
IEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBDYWxsb3V0
IG1lbnUgb3ZlcmxhcHMgaW4tcGFnZSBjb250cm9scyB3aGVuIGVkaXRpbmcgYSBjb21tZW50IGlu
IGdpdGh1Yi5jb20ncyBpc3N1ZSB0cmFja2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQ4NzMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ2NzAx
OTc0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBhIHRlc3QgdG8gZW5zdXJlIHRoYXQgdGhlIHdlIGRvZGdlIGNsaWNrYWJsZSBlbGVtZW50cyB3
aGVuIHNob3dpbmcgdGhlIGNhbGxvdXQgYmFyLgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rp
b24vaW9zL2F2b2lkLXNob3dpbmctY2FsbG91dC1tZW51LW92ZXItY29udHJvbHMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9pb3MvYXZvaWQtc2hvd2lu
Zy1jYWxsb3V0LW1lbnUtb3Zlci1jb250cm9scy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiByZXNv
dXJjZXMvdWktaGVscGVyLmpzOgorICAgICAgICAod2luZG93LlVJSGVscGVyLndhaXRGb3JNZW51
VG9TaG93LnJldHVybi5uZXcuUHJvbWlzZSk6CisgICAgICAgICh3aW5kb3cuVUlIZWxwZXIud2Fp
dEZvck1lbnVUb1Nob3cpOgorICAgICAgICAod2luZG93LlVJSGVscGVyLm1lbnVSZWN0KToKKyAg
ICAgICAgKHdpbmRvdy5VSUhlbHBlcik6CisKIDIwMTktMDItMjEgIERpZWdvIFBpbm8gR2FyY2lh
ICA8ZHBpbm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBHYXJkZW5pbmcgZm9yIHVuZXhw
ZWN0ZWQgcGFzc2VzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9p
b3MvYXZvaWQtc2hvd2luZy1jYWxsb3V0LW1lbnUtb3Zlci1jb250cm9scy1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9pb3MvYXZvaWQtc2hvd2luZy1jYWxsb3V0
LW1lbnUtb3Zlci1jb250cm9scy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTVkOTAyYjEwZTRj
ZGVlZDhjMTk4OWU3N2E0MzczMzdlMTBlMTEzYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2VkaXRpbmcvc2VsZWN0aW9uL2lvcy9hdm9pZC1zaG93aW5nLWNhbGxvdXQtbWVudS1vdmVy
LWNvbnRyb2xzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACisgICAgICAgICAgICAgIAor
CitWZXJpZmllcyB0aGF0IHdlIGRvbid0IHNob3cgdGhlIHN5c3RlbSBjYWxsb3V0IG1lbnUgb3Zl
ciBjb250cm9scy4gVG8gdGVzdCBtYW51YWxseTogZm9jdXMgdGhlIGVkaXRhYmxlIGRvY3VtZW50
IGluIHRoZSBpZnJhbWUsIHNlbGVjdCBzb21lIHRleHQsIGFuZCBjb25maXJtIHRoYXQgdGhlIGNh
bGxvdXQgYmFyIGlzIHNob3duIGJlbmVhdGggdGhlIHNlbGVjdGlvbiBpbnN0ZWFkIG9mIGFib3Zl
IHRoZSBzZWxlY3Rpb24uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGNl
bnRlclkoZ3JhYmJlclJlY3QpIDwgY2VudGVyWShtZW51UmVjdCkgaXMgdHJ1ZQorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2lvcy9hdm9pZC1zaG93aW5nLWNhbGxvdXQtbWVu
dS1vdmVyLWNvbnRyb2xzLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9pb3Mv
YXZvaWQtc2hvd2luZy1jYWxsb3V0LW1lbnUtb3Zlci1jb250cm9scy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmJlNWQ0MzdkZjVlOTllNmYyZTcwZGJkNjhkY2U5MzAwODY0ZWE2NTAKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9pb3MvYXZvaWQtc2hvd2luZy1jYWxs
b3V0LW1lbnUtb3Zlci1jb250cm9scy5odG1sCkBAIC0wLDAgKzEsNzYgQEAKKzwhRE9DVFlQRSBo
dG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIHVzZUZsZXhpYmxlVmlld3BvcnQ9dHJ1ZSBd
IC0tPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL3VpLWhl
bHBlci5qcyI+PC9zY3JpcHQ+Cis8bWV0YSBuYW1lPXZpZXdwb3J0IGNvbnRlbnQ9IndpZHRoPWRl
dmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KKzxzdHlsZT4KK2JvZHksIGh0bWwgeworICAg
IHdpZHRoOiAxMDAlOworICAgIGhlaWdodDogMTAwJTsKKyAgICBtYXJnaW46IDA7Cit9CisKK2lm
cmFtZSB7CisgICAgd2lkdGg6IDMyMHB4OworICAgIGhlaWdodDogMTAwcHg7Cit9CisKKyNjb250
cm9scyB7CisgICAgbWFyZ2luLXRvcDogMjBweDsKKyAgICBtYXJnaW4tYm90dG9tOiAxMHB4Owor
fQorCitpbnB1dFt0eXBlPWJ1dHRvbl0geworICAgIGhlaWdodDogMWVtOworfQorPC9zdHlsZT4K
KzxzY3JpcHQ+Citqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworYXN5bmMgZnVuY3Rpb24gcnVuVGVz
dCgpIHsKKyAgICBkZXNjcmlwdGlvbigiVmVyaWZpZXMgdGhhdCB3ZSBkb24ndCBzaG93IHRoZSBz
eXN0ZW0gY2FsbG91dCBtZW51IG92ZXIgY29udHJvbHMuIFRvIHRlc3QgbWFudWFsbHk6IGZvY3Vz
IHRoZSBlZGl0YWJsZSBkb2N1bWVudCBpbiB0aGUgaWZyYW1lLCBzZWxlY3Qgc29tZSB0ZXh0LCBh
bmQgY29uZmlybSB0aGF0IHRoZSBjYWxsb3V0IGJhciBpcyBzaG93biBiZW5lYXRoIHRoZSBzZWxl
Y3Rpb24gaW5zdGVhZCBvZiBhYm92ZSB0aGUgc2VsZWN0aW9uLiIpOworCisgICAgY2VudGVyWCA9
IHJlY3QgPT4gcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDI7CisgICAgY2VudGVyWSA9IHJlY3Qg
PT4gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDI7CisKKyAgICBhd2FpdCBVSUhlbHBlci5hY3Rp
dmF0ZUFuZFdhaXRGb3JJbnB1dFNlc3Npb25BdCgxNjAsIDEwMCk7CisKKyAgICBjb25zdCBpZnJh
bWVEb2N1bWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImlmcmFtZSIpLmNvbnRlbnREb2N1
bWVudDsKKyAgICBpZnJhbWVEb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJl
bihpZnJhbWVEb2N1bWVudC5ib2R5KTsKKworICAgIGdyYWJiZXJSZWN0ID0ge307CisgICAgd2hp
bGUgKCFncmFiYmVyUmVjdC53aWR0aCAmJiAhZ3JhYmJlclJlY3QuaGVpZ2h0KQorICAgICAgICBn
cmFiYmVyUmVjdCA9IGF3YWl0IFVJSGVscGVyLmdldFNlbGVjdGlvbkVuZEdyYWJiZXJWaWV3UmVj
dCgpOworCisgICAgYXdhaXQgVUlIZWxwZXIuYWN0aXZhdGVBdChjZW50ZXJYKGdyYWJiZXJSZWN0
KSwgY2VudGVyWShncmFiYmVyUmVjdCkpOworICAgIGF3YWl0IFVJSGVscGVyLndhaXRGb3JNZW51
VG9TaG93KCk7CisgICAgbWVudVJlY3QgPSBhd2FpdCBVSUhlbHBlci5tZW51UmVjdCgpOworCisg
ICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7CisKKyAgICBzaG91bGRCZSgiY2VudGVy
WShncmFiYmVyUmVjdCkgPCBjZW50ZXJZKG1lbnVSZWN0KSIsICJ0cnVlIik7CisgICAgZmluaXNo
SlNUZXN0KCk7Cit9CisKK2FkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBydW5UZXN0KTsKKzwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJjb250cm9scyI+CisgICAgPGlucHV0IHR5
cGU9ImJ1dHRvbiIgdmFsdWU9IjEiPjwvaW5wdXQ+CisgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIg
dmFsdWU9IjIiPjwvaW5wdXQ+CisgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjMiPjwv
aW5wdXQ+CisgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjQiPjwvaW5wdXQ+CisgICAg
PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjUiPjwvaW5wdXQ+CisgICAgPGlucHV0IHR5cGU9
ImJ1dHRvbiIgdmFsdWU9IjYiPjwvaW5wdXQ+CisgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFs
dWU9IjciPjwvaW5wdXQ+CisgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjgiPjwvaW5w
dXQ+Cis8L2Rpdj4KKzxkaXY+CisgICAgPGlmcmFtZSBzcmNkb2M9Ijxib2R5IGNvbnRlbnRlZGl0
YWJsZT5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcg
ZWxpdCwgc2VkIGRvIGVpdXNtb2QuPC9ib2R5PiI+PC9pZnJhbWU+Cis8L2Rpdj4KKzxwIGlkPSJk
ZXNjcmlwdGlvbiI+PC9wPgorPHAgaWQ9ImNvbnNvbGUiPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9yZXNv
dXJjZXMvdWktaGVscGVyLmpzIGIvTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3VpLWhlbHBlci5qcwpp
bmRleCA0ZGUwZDE0ZWEyYTgyODc3NDE5YjAxMTlkNDRhNWU3NTE0MDc2YThhLi45ZTVmY2JlMGRm
NjAwMmEyZDMzNzE3MGQ5OTJiNWZjZmMwMDlkYmE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9y
ZXNvdXJjZXMvdWktaGVscGVyLmpzCisrKyBiL0xheW91dFRlc3RzL3Jlc291cmNlcy91aS1oZWxw
ZXIuanMKQEAgLTY2NSw0ICs2NjUsMjQgQEAgd2luZG93LlVJSGVscGVyID0gY2xhc3MgVUlIZWxw
ZXIgewogICAgICAgICBjb25zdCBzY3JpcHQgPSAiSlNPTi5zdHJpbmdpZnkoW3VpQ29udHJvbGxl
ci5sYXN0VW5kb0xhYmVsLCB1aUNvbnRyb2xsZXIuZmlyc3RSZWRvTGFiZWxdKSI7CiAgICAgICAg
IHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHRlc3RSdW5uZXIucnVuVUlTY3JpcHQoc2Ny
aXB0LCByZXN1bHQgPT4gcmVzb2x2ZShKU09OLnBhcnNlKHJlc3VsdCkpKSk7CiAgICAgfQorCisg
ICAgc3RhdGljIHdhaXRGb3JNZW51VG9TaG93KCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcg
UHJvbWlzZShyZXNvbHZlID0+IHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIucnVuVUlTY3JpcHQo
YAorICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCF1aUNvbnRyb2xsZXIuaXNTaG93aW5nTWVudSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVp
Q29udHJvbGxlci5kaWRTaG93TWVudUNhbGxiYWNrID0gKCkgPT4gdWlDb250cm9sbGVyLnVpU2Ny
aXB0Q29tcGxldGUoKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgdWlDb250cm9sbGVyLnVpU2NyaXB0Q29tcGxldGUoKTsKKyAgICAgICAgICAgICAg
ICB9KSgpYCwgcmVzb2x2ZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHN0YXRpYyBtZW51
UmVjdCgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7Cisg
ICAgICAgICAgICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KCJKU09OLnN0cmluZ2lmeSh1aUNvbnRy
b2xsZXIubWVudVJlY3QpIiwgcmVzdWx0ID0+IHJlc29sdmUoSlNPTi5wYXJzZShyZXN1bHQpKSk7
CisgICAgICAgIH0pOworICAgIH0KIH0K
</data>
<flag name="review"
          id="379226"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362769</attachid>
            <date>2019-02-22 15:21:58 -0800</date>
            <delta_ts>2019-02-22 16:48:23 -0800</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>bug-194873-20190222152157.patch</filename>
            <type>text/plain</type>
            <size>32082</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxOTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDI4NmQwNTVjMzlkOGVkYTZi
MzQyNzAwMzYyNmY5NWQ5MDIxYmEzMmQuLjgyMGQyMDFiYTc3ZTVlZmY5YTEyOGFkMmZiYjlmMDRl
OGQ2ZTJlY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTktMDItMjIgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQ2FsbG91dCBt
ZW51IG92ZXJsYXBzIGluLXBhZ2UgY29udHJvbHMgd2hlbiBlZGl0aW5nIGEgY29tbWVudCBpbiBn
aXRodWIuY29tJ3MgaXNzdWUgdHJhY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk0ODczCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NjcwMTk3
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAgIE9uIHRoZSB0
b3BpYyBvZiBzdXBwb3J0aW5nIHdlYi1iYXNlZCByaWNoIHRleHQgZWRpdG9ycyBvbiBpT1MsIG9u
ZSBwcm9ibGVtYXRpYyBhcmVhIGhhcyBhbHdheXMgYmVlbiBoYW5kbGluZworICAgICAgICBjb25m
bGljdHMgYmV0d2VlbiBwbGF0Zm9ybSBVSSAoaS5lLiwgdGhlIHN5c3RlbSBjYWxsb3V0IG1lbnUp
IGFuZCBpbi1wYWdlIHRleHQgZWRpdGluZyBjb250cm9scy4gVGhpcyBpc3N1ZQorICAgICAgICBj
b21lcyB1cCBpbiB3ZWJzaXRlcyB0aGF0IGRvbid0IHVzZSB0aGUgImhpZGRlbiBjb250ZW50ZWRp
dGFibGUiIGFwcHJvYWNoIHRvIHJpY2ggdGV4dCBlZGl0aW5nLCBidXQgYWxzbyBzaG93CisgICAg
ICAgIGFkZGl0aW9uYWwgY29udHJvbHMgaW4gYSB0b29sYmFyIG9yIGNvbnRleHR1YWwgbWVudSBh
Ym92ZSB0aGUgc2VsZWN0aW9uLiBJbiB0aGVzZSBjYXNlcywgd2hhdCBvZnRlbiBoYXBwZW5zIGlz
CisgICAgICAgIHRoYXQgc3lzdGVtIGNvbnRyb2xzIG92ZXJsYXAgY29udHJvbHMgaW4gdGhlIHBh
Z2UuCisKKyAgICAgICAgTHVja2lseSwgdGhlIGlPUyBjYWxsb3V0IG1lbnUgKGkuZS4gdGhlIHBy
aXZhdGUgVUlDYWxsb3V0QmFyKSBpcyBjYXBhYmxlIG9mIHByZXNlbnRpbmcgd2l0aCBhIGxpc3Qg
b2YgImV2YXNpb24KKyAgICAgICAgcmVjdHMiIHRvIGF2b2lkOyBpZiB0aGUgY2FsbG91dCBiYXIg
d291bGQgbm9ybWFsbHkgaW50ZXJzZWN0IHdpdGggb25lIG9mIHRoZXNlIHJlY3RzLCB0aGVuIGEg
ZGlmZmVyZW50CisgICAgICAgIG9yaWVudGF0aW9uIHRoYXQgZG9lcyBub3QgaW50ZXJzZWN0IHdp
dGggb25lIG9mIHRoZXNlIHJlY3RzIGlzIGNob3NlbiBpbnN0ZWFkLiBDdXJyZW50bHksIHRoZSBv
bmx5IHJlY3QgYWRkZWQKKyAgICAgICAgaGVyZSBieSBVSUtpdCB3aGVuIHByZXNlbnRpbmcgdGhl
IGNhbGxvdXQgbWVudSBpcyB0aGUgYm91bmRpbmcgcmVjdCBvZiB0aGUgb24tc2NyZWVuIGtleWJv
YXJkLCBidXQgYWZ0ZXIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ4MTI4MzM3Piwgd2Ugbm93
IGhhdmUgYSBnZW5lcmFsaXplZCBtZWNoYW5pc20gZm9yIG9mZmVyaW5nIGFkZGl0aW9uYWwgZXZh
c2lvbiByZWN0cyBiZWZvcmUKKyAgICAgICAgVUlLaXQgcHJlc2VudHMgdGhlIGNhbGxvdXQgbWVu
dS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkb3B0cyB0aGUgbWVjaGFuaXNtIGludHJvZHVjZWQg
aW4gPHJkYXI6Ly9wcm9ibGVtLzQ4MTI4MzM3PiwgYW5kIGludHJvZHVjZXMgYSBoZXVyaXN0aWMg
Zm9yCisgICAgICAgIGRldGVybWluaW5nIHRoZSBhcHByb3hpbWF0ZSBsb2NhdGlvbiBvZiBjb250
cm9scyBpbiB0aGUgcGFnZSB3aGljaCBtaWdodCBvdmVybGFwIHRoZSBjYWxsb3V0IG1lbnUuIFRo
aXMKKyAgICAgICAgaGV1cmlzdGljIHdvcmtzIGJ5IGhpdC10ZXN0aW5nIGZvciBjbGlja2FibGUg
KGJ1dCBub24tZWRpdGFibGUpIG5vZGVzIGFib3ZlIHRoZSBib3VuZHMgb2YgdGhlIHNlbGVjdGlv
biwgd2hpY2gKKyAgICAgICAgYXJlIGFkZGl0aW9uYWxseSBub3QgaGl0LXRlc3RlZCBieSBhZHZh
bmNpbmcgb3V0d2FyZHMgZnJvbSBhbnkgb2YgdGhlIG90aGVyIGVkZ2VzIG9mIHRoZSBzZWxlY3Rp
b24gYm91bmRzLgorICAgICAgICBBZGRpdGlvbmFsbHksIGFueSBoaXQtdGVzdGVkIG5vZGVzIHdo
b3NlIGJvdW5kaW5nIHJlY3RzIGFyZSB2ZXJ5IGxhcmdlIChyZWxhdGl2ZSB0byB0aGUgY29udGVu
dCB2aWV3IHNpemUpIGFyZQorICAgICAgICBpZ25vcmVkICh0aGlzIGRlYWxzIHdpdGggc2NlbmFy
aW9zIHdoZXJlIHRoZSBib2R5IG9yIGEgbGFyZ2UgY29udGFpbmVyIGVsZW1lbnQgaGFzIGEgY2xp
Y2sgaGFuZGxlcikuIFdlIHRoZW4gYWRkCisgICAgICAgIHRoZSBib3VuZGluZyByZWN0cyBvZiBl
YWNoIG9mIHRoZSBub2RlcyB0aGF0IGZpdCB0aGlzIGNyaXRlcmlhIHRvIHRoZSBsaXN0IG9mIHJl
Y3RzIGZvciBVSUtpdCB0byBhdm9pZCB3aGVuCisgICAgICAgIHByZXNlbnRpbmcgdGhlIHN5c3Rl
bSBjYWxsb3V0IG1lbnUuCisKKyAgICAgICAgVGhlIHJlc3VsdCBpcyB0aGF0IFdlYktpdCB3aWxs
LCBieSBkZWZhdWx0LCBhdm9pZCBvdmVybGFwcGluZyBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2Ug
Y29udHJvbHMgaW4gdGhlIHBhZ2Ugd2hlbgorICAgICAgICBzaG93aW5nIGEgY2FsbG91dCBtZW51
IGluIGVkaXRhYmxlIGNvbnRlbnQuIEluIHByYWN0aWNlLCB0aGlzIGZpeGVzIG92ZXJsYXBwaW5n
IGNvbnRyb2xzIG9uIG1vc3Qgd2Vic2l0ZXMgdGhhdAorICAgICAgICByb2xsIHRoZWlyIG93biBj
b250ZXh0IG1lbnUgb3IgdG9vbGJhciBpbiB0aGVpciByaWNoIHRleHQgZWRpdG9yLgorCisgICAg
ICAgIFRlc3Q6IGVkaXRpbmcvc2VsZWN0aW9uL2lvcy9hdm9pZC1zaG93aW5nLWNhbGxvdXQtbWVu
dS1vdmVyLWNvbnRyb2xzLmh0bWwKKworICAgICAgICAqIFBsYXRmb3JtL3NwaS9pb3MvVUlLaXRT
UEkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgcmVxdWVzdEF1dG9jb3JyZWN0aW9uUmVjdHNGb3JTdHJpbmc6d2l0aENvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHJlcXVlc3RSZWN0c1RvRXZh
ZGVGb3JTZWxlY3Rpb25Db21tYW5kc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAg
KC1bV0tDb250ZW50VmlldyByZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250ZXh0V2l0aENvbXBsZXRp
b25IYW5kbGVyOl0pOgorCisgICAgICAgIERyaXZlLWJ5OiBoYW5kbGUgbnVsbCBjb21wbGV0aW9u
IGhhbmRsZXIgYXJndW1lbnRzIG1vcmUgZ3JhY2VmdWxseSwgYnkgcmFpc2luZyBhbiBOU0V4Y2Vw
dGlvbiBhbmQgYmFpbGluZyBiZWZvcmUKKyAgICAgICAgYXR0ZW1wdGluZyB0byBpbnZva2UgYSBu
aWwgYmxvY2suCisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXF1ZXN0RXZhc2lvblJlY3RzQWJvdmVT
ZWxlY3Rpb24pOgorCisgICAgICAgIFNlZSBhYm92ZSBmb3IgbW9yZSBkZXRhaWwuCisKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVxdWVzdEV2
YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKToKKwogMjAxOS0wMi0yMSAgQWRyaWFuIFBlcmV6IGRl
IENhc3RybyAgPGFwZXJlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXUEVdW0dUS10gTm8gQVBJ
IGRvY3VtZW50YXRpb24gZ2VuZXJhdGVkIGZvciBXZWJLaXRVc2VyQ29udGVudEZpbHRlclN0b3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaCBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCmluZGV4IDZkNGMxOTVk
MzlkMTk4NTFiM2JlNWUwN2Q1NTdiYWY0ZDUxM2UxOTEuLjZkODc0MTBjZWU2NTVjN2M4MjgyYzcy
MzUxZGUwN2I5MDk4YTA4MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3Bp
L2lvcy9VSUtpdFNQSS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtp
dFNQSS5oCkBAIC05ODgsNiArOTg4LDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIs
IFVJRHJhZ09wZXJhdGlvbikKICNlbmRpZgogCiBAaW50ZXJmYWNlIFVJQ2FsbG91dEJhciA6IFVJ
VmlldworKyAoVUlDYWxsb3V0QmFyICopYWN0aXZlQ2FsbG91dEJhcjsKICsgKHZvaWQpZmFkZVNo
YXJlZENhbGxvdXRCYXI7CiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmgKaW5kZXggNzBlODFkNTJlOGUwYTY1ODg4NjY1M2NjZjBiMzJlY2NlZjYyOGY3YS4uYTc2MDM0
MTRkYmYwNjE4ODMwN2M0OTZmMTA5ZDFjZDU1MWU2NGYzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKQEAgLTY4Nyw2ICs2ODcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
YW5jZWxBdXRvc2Nyb2xsKCk7CiAgICAgdm9pZCBoYXJkd2FyZUtleWJvYXJkQXZhaWxhYmlsaXR5
Q2hhbmdlZCgpOwogICAgIGJvb2wgaXNTY3JvbGxpbmdPclpvb21pbmcoKSBjb25zdCB7IHJldHVy
biBtX2lzU2Nyb2xsaW5nT3Jab29taW5nOyB9CisgICAgdm9pZCByZXF1ZXN0RXZhc2lvblJlY3Rz
QWJvdmVTZWxlY3Rpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6RmxvYXRSZWN0PiYpPiYmKTsKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKICAgICB2
b2lkIGRpZEhhbmRsZURyYWdTdGFydFJlcXVlc3QoYm9vbCBzdGFydGVkKTsKICAgICB2b2lkIGRp
ZEhhbmRsZUFkZGl0aW9uYWxEcmFnSXRlbXNSZXF1ZXN0KGJvb2wgYWRkZWQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
bW0KaW5kZXggYTJlZTllNWU3YzE3OThiYjQ5ZWI3YjhhODE2NTcxOGVhMWRiMzNlMC4uOGI4Yzcy
ZDA0NDRlYjhlZTE5YTc0MjFhZGI1ZWVkNmFiNjA0Mjc3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0z
MzUzLDkgKzMzNTMsMTMgQEAgLSAoY29uc3QgV2ViS2l0OjpXS0F1dG9Db3JyZWN0aW9uRGF0YSYp
YXV0b2NvcnJlY3Rpb25EYXRhCiAvLyBUaGUgY29tcGxldGlvbiBoYW5kbGVyIGNhbiBwYXNzIG5p
bCBpZiBpbnB1dCBkb2VzIG5vdCBtYXRjaCB0aGUgYWN0dWFsIHRleHQgcHJlY2VkaW5nIHRoZSBp
bnNlcnRpb24gcG9pbnQuCiAtICh2b2lkKXJlcXVlc3RBdXRvY29ycmVjdGlvblJlY3RzRm9yU3Ry
aW5nOihOU1N0cmluZyAqKWlucHV0IHdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoVUlX
S0F1dG9jb3JyZWN0aW9uUmVjdHMgKnJlY3RzRm9ySW5wdXQpKWNvbXBsZXRpb25IYW5kbGVyCiB7
CisgICAgaWYgKCFjb21wbGV0aW9uSGFuZGxlcikgeworICAgICAgICBbTlNFeGNlcHRpb24gcmFp
c2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiRXhwZWN0ZWQgYSBub25udWxs
IGNvbXBsZXRpb24gaGFuZGxlciBpbiAlcy4iLCBfX1BSRVRUWV9GVU5DVElPTl9fXTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmICghaW5wdXQgfHwgIVtpbnB1dCBsZW5ndGhdKSB7
Ci0gICAgICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikKLSAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKG5pbCk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5pbCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTMzNzMsOCArMzM3Nyw0NyBAQCAtICh2b2lkKXJlcXVlc3RBdXRv
Y29ycmVjdGlvblJlY3RzRm9yU3RyaW5nOihOU1N0cmluZyAqKWlucHV0IHdpdGhDb21wbGV0aW9u
SGFuZAogICAgICAgICB2aWV3LT5fYXV0b2NvcnJlY3Rpb25EYXRhLnRleHRGaXJzdFJlY3QgPSBm
aXJzdFJlY3Q7CiAgICAgICAgIHZpZXctPl9hdXRvY29ycmVjdGlvbkRhdGEudGV4dExhc3RSZWN0
ID0gbGFzdFJlY3Q7CiAKLSAgICAgICAgaWYgKGNvbXBsZXRpb24pCi0gICAgICAgICAgICBjb21w
bGV0aW9uKHJlY3RzLnNpemUoKSA/IFtXS0F1dG9jb3JyZWN0aW9uUmVjdHMgYXV0b2NvcnJlY3Rp
b25SZWN0c1dpdGhSZWN0czpmaXJzdFJlY3QgbGFzdFJlY3Q6bGFzdFJlY3RdIDogbmlsKTsKKyAg
ICAgICAgY29tcGxldGlvbihyZWN0cy5zaXplKCkgPyBbV0tBdXRvY29ycmVjdGlvblJlY3RzIGF1
dG9jb3JyZWN0aW9uUmVjdHNXaXRoUmVjdHM6Zmlyc3RSZWN0IGxhc3RSZWN0Omxhc3RSZWN0XSA6
IG5pbCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpcmVxdWVzdFJlY3RzVG9FdmFkZUZvclNlbGVj
dGlvbkNvbW1hbmRzV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TQXJyYXk8TlNWYWx1
ZSAqPiAqcmVjdHMpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgaWYgKCFjb21wbGV0aW9uSGFu
ZGxlcikgeworICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNl
cHRpb24gZm9ybWF0OkAiRXhwZWN0ZWQgYSBub25udWxsIGNvbXBsZXRpb24gaGFuZGxlciBpbiAl
cy4iLCBfX1BSRVRUWV9GVU5DVElPTl9fXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChbc2VsZiBfc2hvdWxkU3VwcHJlc3NTZWxlY3Rpb25Db21tYW5kc10gfHwgX3dlYlZpZXcu
X2VkaXRhYmxlKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEBbIF0pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmVsZW1l
bnRUeXBlICE9IFdlYktpdDo6SW5wdXRUeXBlOjpDb250ZW50RWRpdGFibGUgJiYgX2ZvY3VzZWRF
bGVtZW50SW5mb3JtYXRpb24uZWxlbWVudFR5cGUgIT0gV2ViS2l0OjpJbnB1dFR5cGU6OlRleHRB
cmVhKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEBbIF0pOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gR2l2ZSB0aGUgcGFnZSBzb21lIHRpbWUgdG8gcHJlc2VudCBjdXN0
b20gZWRpdGluZyBVSSBiZWZvcmUgYXR0ZW1wdGluZyB0byBkZXRlY3QgYW5kIGV2YWRlIGl0Lgor
ICAgIGF1dG8gZGVsYXlCZWZvcmVTaG93aW5nQ2FsbG91dEJhciA9ICgwLjI1X3MpLm5hbm9zZWNv
bmRzKCk7CisgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05P
VywgZGVsYXlCZWZvcmVTaG93aW5nQ2FsbG91dEJhciksIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIFtjb21wbGV0aW9uID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKSwgd2Vha1Nl
bGYgPSBXZWFrT2JqQ1B0cjxXS0NvbnRlbnRWaWV3PihzZWxmKV0gKCkgbXV0YWJsZSB7CisgICAg
ICAgIGlmICghd2Vha1NlbGYpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb24oQFsgXSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHN0cm9uZ1NlbGYgPSB3
ZWFrU2VsZi5nZXQoKTsKKyAgICAgICAgaWYgKCFzdHJvbmdTZWxmLT5fcGFnZSkgeworICAgICAg
ICAgICAgY29tcGxldGlvbihAWyBdKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIHN0cm9uZ1NlbGYtPl9wYWdlLT5yZXF1ZXN0RXZhc2lvblJlY3RzQWJvdmVTZWxl
Y3Rpb24oW2NvbXBsZXRpb24gPSBXVEZNb3ZlKGNvbXBsZXRpb24pXSAoYXV0byYgcmVjdHMpIHsK
KyAgICAgICAgICAgIGF1dG8gcmVjdHNBc1ZhbHVlcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpyZWN0cy5zaXplKCldKTsKKyAgICAgICAgICAgIGZv
ciAoYXV0byYgZmxvYXRSZWN0IDogcmVjdHMpCisgICAgICAgICAgICAgICAgW3JlY3RzQXNWYWx1
ZXMgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpmbG9hdFJlY3RdXTsKKyAgICAg
ICAgICAgIGNvbXBsZXRpb24ocmVjdHNBc1ZhbHVlcy5nZXQoKSk7CisgICAgICAgIH0pOwogICAg
IH0pOwogfQogCkBAIC0zNTM3LDggKzM1ODAsMTAgQEAgLSAodm9pZClhcHBseUF1dG9jb3JyZWN0
aW9uOihOU1N0cmluZyAqKWNvcnJlY3Rpb24gdG9TdHJpbmc6KE5TU3RyaW5nICopaW5wdXQgd2kK
IAogLSAodm9pZClyZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250ZXh0V2l0aENvbXBsZXRpb25IYW5k
bGVyOih2b2lkICheKShVSVdLQXV0b2NvcnJlY3Rpb25Db250ZXh0ICphdXRvY29ycmVjdGlvbkNv
bnRleHQpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgaWYgKCFjb21wbGV0aW9uSGFuZGxlcikK
KyAgICBpZiAoIWNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlz
ZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJFeHBlY3RlZCBhIG5vbm51bGwg
Y29tcGxldGlvbiBoYW5kbGVyIGluICVzLiIsIF9fUFJFVFRZX0ZVTkNUSU9OX19dOwogICAgICAg
ICByZXR1cm47CisgICAgfQogCiAjaWYgVVNFKFVJS0lUX0tFWUJPQVJEX0FERElUSU9OUykKICAg
ICBpZiAoW3NlbGYgX2Rpc2FibGVBdXRvbWF0aWNLZXlib2FyZFVJXSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5kZXggZmZlMzk5NTJhMzgw
MGU3M2Y1MGUxZTgxYTEzNTNkZTk3NTlmOGI2Yi4uYzJjZDhmMDc1NzM1MTAxODBhMGNiN2M1NjA1
NDJlOWM3ZjFmMGM5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dl
YlBhZ2VQcm94eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFn
ZVByb3h5SU9TLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
IAogI2ltcG9ydCAiQVBJVUlDbGllbnQuaCIKKyNpbXBvcnQgIkNvbm5lY3Rpb24uaCIKICNpbXBv
cnQgIkRhdGFSZWZlcmVuY2UuaCIKICNpbXBvcnQgIkVkaXRpbmdSYW5nZS5oIgogI2ltcG9ydCAi
R2xvYmFsRmluZEluUGFnZVN0YXRlLmgiCkBAIC0xMTEyLDYgKzExMTMsMTYgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmhhcmR3YXJlS2V5Ym9hcmRBdmFpbGFiaWxpdHlDaGFuZ2VkKCkKICAgICBtX3By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhhcmR3YXJlS2V5Ym9hcmRBdmFpbGFiaWxp
dHlDaGFuZ2VkKCksIG1fcGFnZUlEKTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RF
dmFzaW9uUmVjdHNBYm92ZVNlbGVjdGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+Jik+JiYgY2FsbGJhY2spCit7CisgICAgaWYgKCFpc1Zh
bGlkKCkpIHsKKyAgICAgICAgY2FsbGJhY2soeyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlJlcXVlc3RFdmFzaW9uUmVjdHNBYm92ZVNlbGVjdGlvbigpLCBXVEZNb3Zl
KGNhbGxiYWNrKSwgbV9wYWdlSUQpOworfQorCiAjaWYgRU5BQkxFKERBVEFfSU5URVJBQ1RJT04p
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRIYW5kbGVEcmFnU3RhcnRSZXF1ZXN0KGJvb2wgc3Rh
cnRlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCAx
ZGQyYmY3ZDRiNWFkZjQ3ZWZjOWExNmQ2MGQ3MmJhZjJjYzQ5Nzc4Li45ZTg3YzE5OWUzZWZkZjhl
MzlmNzhiMDAyZDdjMjgyYTdmNjcxNGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCkBAIC02NjQsNiArNjY0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3Rv
cmVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KGJvb2wpOwogICAgIHZvaWQgc3RhcnRBdXRvc2Ny
b2xsQXRQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CiAgICAgdm9pZCBjYW5j
ZWxBdXRvc2Nyb2xsKCk7CisgICAgdm9pZCByZXF1ZXN0RXZhc2lvblJlY3RzQWJvdmVTZWxlY3Rp
b24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0
PiYpPiYmKTsKIAogICAgIHZvaWQgY29udGVudFNpemVDYXRlZ29yeURpZENoYW5nZShjb25zdCBT
dHJpbmcmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggMmQ1YjdiNWE2YmNkMDkzMDcxODNmNDQ5ZmFkMTZjMjdj
ZDY0YjY4MS4uYTUyYmIyM2I5YjNhNWFiYTVjMDU0Y2E1MzlmOGMyODllOGRjOWRiMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluCkBAIC04MCw2ICs4MCw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIg
ewogICAgIFN5bmNBcHBseUF1dG9jb3JyZWN0aW9uKFN0cmluZyBjb3JyZWN0aW9uLCBTdHJpbmcg
b3JpZ2luYWxUZXh0KSAtPiAoYm9vbCBhdXRvY29ycmVjdGlvbkFwcGxpZWQpIERlbGF5ZWQKICAg
ICBSZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250ZXh0KFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFj
a0lEKQogICAgIEF1dG9jb3JyZWN0aW9uQ29udGV4dFN5bmMoKSAtPiAoc3RydWN0IFdlYktpdDo6
V2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0IGNvbnRleHQpIERlbGF5ZWQKKyAgICBSZXF1ZXN0RXZh
c2lvblJlY3RzQWJvdmVTZWxlY3Rpb24oKSAtPiAoVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4g
cmVjdHMpIEFzeW5jCiAgICAgR2V0UG9zaXRpb25JbmZvcm1hdGlvbihzdHJ1Y3QgV2ViS2l0OjpJ
bnRlcmFjdGlvbkluZm9ybWF0aW9uUmVxdWVzdCByZXF1ZXN0KSAtPiAoc3RydWN0IFdlYktpdDo6
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gaW5mb3JtYXRpb24pIERlbGF5ZWQKICAg
ICBSZXF1ZXN0UG9zaXRpb25JbmZvcm1hdGlvbihzdHJ1Y3QgV2ViS2l0OjpJbnRlcmFjdGlvbklu
Zm9ybWF0aW9uUmVxdWVzdCByZXF1ZXN0KQogICAgIFN0YXJ0SW50ZXJhY3Rpb25XaXRoRWxlbWVu
dEF0UG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IDUwZjg1YzFhZGZi
MWEzMGM1YzNjYjM5MWU3MDZmMjEzYWFlMGE4YmMuLmEyN2QxMmZkYzIyOWEwNDQ1ODdkNDZiOTFh
YjA0MzVjMDU1ZmQxMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0xNTA0LDYgKzE1MDQsMTA3IEBAIHZvaWQgV2ViUGFn
ZTo6Y2FuY2VsQXV0b3Njcm9sbCgpCiAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRs
ZXIoKS5jYW5jZWxTZWxlY3Rpb25BdXRvc2Nyb2xsKCk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6cmVx
dWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mKT4mJiByZXBseSkKK3sKKyAgICBhdXRvJiBmcmFtZSA9IG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgYXV0byBm
cmFtZVZpZXcgPSBtYWtlUmVmUHRyKGZyYW1lLnZpZXcoKSk7CisgICAgaWYgKCFmcmFtZVZpZXcp
IHsKKyAgICAgICAgcmVwbHkoeyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1
dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGlmIChz
ZWxlY3Rpb24uaXNOb25lKCkpIHsKKyAgICAgICAgcmVwbHkoeyB9KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpOworICAgIGlmICghc2VsZWN0ZWRSYW5nZSkgeworICAgICAgICByZXBseSh7IH0p
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2ZvY3VzZWRFbGVtZW50IHx8
ICFtX2ZvY3VzZWRFbGVtZW50LT5yZW5kZXJlcigpIHx8IG1fZm9jdXNlZEVsZW1lbnQtPnJlbmRl
cmVyKCktPmlzVHJhbnNwYXJlbnRPckZ1bGx5Q2xpcHBlZFJlc3BlY3RpbmdQYXJlbnRGcmFtZXMo
KSkgeworICAgICAgICByZXBseSh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
ZmxvYXQgc2NhbGVGYWN0b3IgPSBwYWdlU2NhbGVGYWN0b3IoKTsKKyAgICBjb25zdCBkb3VibGUg
ZmFjdG9yT2ZDb250ZW50QXJlYSA9IDAuNTsKKyAgICBhdXRvIHVub2JzY3VyZWRDb250ZW50QXJl
YSA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT51bm9ic2N1cmVkQ29udGVudFJlY3QoKS5h
cmVhKCk7CisgICAgaWYgKHVub2JzY3VyZWRDb250ZW50QXJlYS5oYXNPdmVyZmxvd2VkKCkpIHsK
KyAgICAgICAgcmVwbHkoeyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRvdWJs
ZSBjb250ZXh0TWVudUFyZWFMaW1pdCA9IGZhY3Rvck9mQ29udGVudEFyZWEgKiBzY2FsZUZhY3Rv
ciAqIHVub2JzY3VyZWRDb250ZW50QXJlYS51bnNhZmVHZXQoKTsKKworICAgIEZsb2F0UmVjdCBz
ZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXM7CisgICAgaWYgKHNlbGVjdGlvbi5p
c1JhbmdlKCkpCisgICAgICAgIHNlbGVjdGlvbkJvdW5kc0luUm9vdFZpZXdDb29yZGluYXRlcyA9
IGZyYW1lVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHNlbGVjdGVkUmFuZ2UtPmFic29sdXRlQm91
bmRpbmdCb3goKSk7CisgICAgZWxzZQorICAgICAgICBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3
Q29vcmRpbmF0ZXMgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhmcmFtZS5zZWxlY3Rp
b24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpOworCisgICAgYXV0byBjZW50ZXJPZlRhcmdldEJv
dW5kcyA9IHNlbGVjdGlvbkJvdW5kc0luUm9vdFZpZXdDb29yZGluYXRlcy5jZW50ZXIoKTsKKyAg
ICBGbG9hdFBvaW50IGNlbnRlclRvcEluUm9vdFZpZXdDb29yZGluYXRlcyB7IGNlbnRlck9mVGFy
Z2V0Qm91bmRzLngoKSwgc2VsZWN0aW9uQm91bmRzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLnkoKSB9
OworCisgICAgYXV0byBjbGlja2FibGVOb25FZGl0YWJsZU5vZGUgPSBbJl0gKGNvbnN0IEZsb2F0
UG9pbnQmIGxvY2F0aW9uSW5Sb290Vmlld0Nvb3JkaW5hdGVzKSAtPiBOb2RlKiB7CisgICAgICAg
IEZsb2F0UG9pbnQgYWRqdXN0ZWRQb2ludDsKKyAgICAgICAgYXV0byogaGl0Tm9kZSA9IG1fcGFn
ZS0+bWFpbkZyYW1lKCkubm9kZVJlc3BvbmRpbmdUb0NsaWNrRXZlbnRzKGxvY2F0aW9uSW5Sb290
Vmlld0Nvb3JkaW5hdGVzLCBhZGp1c3RlZFBvaW50KTsKKyAgICAgICAgaWYgKCFoaXROb2RlIHx8
IGlzPEhUTUxCb2R5RWxlbWVudD4oaGl0Tm9kZSkgfHwgaXM8RG9jdW1lbnQ+KGhpdE5vZGUpIHx8
IGhpdE5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgICAgIHJldHVybiBoaXROb2RlOworICAgIH07CisKKyAgICAvLyBUaGlzIGhldXJp
c3RpYyBhdHRlbXB0cyB0byBmaW5kIGEgbGlzdCBvZiByZWN0cyB0byBhdm9pZCB3aGVuIHNob3dp
bmcgdGhlIGNhbGxvdXQgbWVudSBvbiBpT1MuCisgICAgLy8gRmlyc3QsIGhpdC10ZXN0IHNldmVy
YWwgcG9pbnRzIGFib3ZlIHRoZSBib3VuZHMgb2YgdGhlIHNlbGVjdGlvbiByZWN0IGluIHNlYXJj
aCBvZiBjbGlja2FibGUgbm9kZXMgdGhhdCBhcmUgbm90IGVkaXRhYmxlLgorICAgIC8vIFNlY29u
ZGx5LCBoaXQtdGVzdCBzZXZlcmFsIHBvaW50cyBhcm91bmQgdGhlIGVkZ2VzIG9mIHRoZSBzZWxl
Y3Rpb24gcmVjdCBhbmQgZXhjbHVkZSBhbnkgbm9kZXMgZm91bmQgaW4gdGhlIGZpcnN0IHJvdW5k
IG9mCisgICAgLy8gaGl0LXRlc3RpbmcgaWYgdGhlc2Ugbm9kZXMgYXJlIGFsc28gcmVhY2hhYmxl
IGJ5IG1vdmluZyBvdXR3YXJkcyBmcm9tIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90dG9tIGVkZ2Vz
IG9mIHRoZSBzZWxlY3Rpb24uCisgICAgLy8gQWRkaXRpb25hbGx5LCBleGNsdWRlIGFueSBoaXQt
dGVzdGVkIG5vZGVzIHRoYXQgYXJlIGVpdGhlciB2ZXJ5IGxhcmdlIHJlbGF0aXZlIHRvIHRoZSBz
aXplIG9mIHRoZSByb290IHZpZXcsIG9yIGNvbXBsZXRlbHkKKyAgICAvLyBlbmNvbXBhc3MgdGhl
IHNlbGVjdGlvbiBib3VuZHMuIFRoZSByZXN1bHRpbmcgcmVjdHMgYXJlIHRoZSBib3VuZHMgb2Yg
dGhlc2UgaGl0LXRlc3RlZCBub2RlcyBpbiByb290IHZpZXcgY29vcmRpbmF0ZXMuCisgICAgSGFz
aFNldDxSZWY8Tm9kZT4+IGhpdFRlc3RlZE5vZGVzOworICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHJl
Y3RzVG9Bdm9pZEluUm9vdFZpZXdDb29yZGluYXRlczsKKyAgICBjb25zdCBWZWN0b3I8RmxvYXRQ
b2ludCwgNT4gb2Zmc2V0c0ZvckhpdFRlc3Rpbmcge3sgLTMwLCAtNTAgfSwgeyAzMCwgLTUwIH0s
IHsgLTYwLCAtMzUgfSwgeyA2MCwgLTM1IH0sIHsgMCwgLTIwIH19OworICAgIGZvciAoYXV0byBv
ZmZzZXQgOiBvZmZzZXRzRm9ySGl0VGVzdGluZykgeworICAgICAgICBvZmZzZXQuc2NhbGUoMSAv
IHNjYWxlRmFjdG9yKTsKKyAgICAgICAgaWYgKGF1dG8qIGhpdE5vZGUgPSBjbGlja2FibGVOb25F
ZGl0YWJsZU5vZGUoY2VudGVyVG9wSW5Sb290Vmlld0Nvb3JkaW5hdGVzICsgb2Zmc2V0KSkKKyAg
ICAgICAgICAgIGhpdFRlc3RlZE5vZGVzLmFkZCgqaGl0Tm9kZSk7CisgICAgfQorCisgICAgY29u
c3QgZmxvYXQgbWFyZ2luRm9ySGl0VGVzdGluZ1N1cnJvdW5kaW5nTm9kZXMgPSA4MCAvIHNjYWxl
RmFjdG9yOworICAgIFZlY3RvcjxGbG9hdFBvaW50LCAzPiBleGNsdXNpb25IaXRUZXN0TG9jYXRp
b25zIHsKKyAgICAgICAgeyBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMueCgp
IC0gbWFyZ2luRm9ySGl0VGVzdGluZ1N1cnJvdW5kaW5nTm9kZXMsIGNlbnRlck9mVGFyZ2V0Qm91
bmRzLnkoKSB9LAorICAgICAgICB7IGNlbnRlck9mVGFyZ2V0Qm91bmRzLngoKSwgc2VsZWN0aW9u
Qm91bmRzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLm1heFkoKSArIG1hcmdpbkZvckhpdFRlc3RpbmdT
dXJyb3VuZGluZ05vZGVzIH0sCisgICAgICAgIHsgc2VsZWN0aW9uQm91bmRzSW5Sb290Vmlld0Nv
b3JkaW5hdGVzLm1heFgoKSArIG1hcmdpbkZvckhpdFRlc3RpbmdTdXJyb3VuZGluZ05vZGVzLCBj
ZW50ZXJPZlRhcmdldEJvdW5kcy55KCkgfQorICAgIH07CisKKyAgICBmb3IgKGF1dG8mIGxvY2F0
aW9uIDogZXhjbHVzaW9uSGl0VGVzdExvY2F0aW9ucykgeworICAgICAgICBpZiAoYXV0byogbm9k
ZVRvRXhjbHVkZSA9IGNsaWNrYWJsZU5vbkVkaXRhYmxlTm9kZShsb2NhdGlvbikpCisgICAgICAg
ICAgICBoaXRUZXN0ZWROb2Rlcy5yZW1vdmUoKm5vZGVUb0V4Y2x1ZGUpOworICAgIH0KKworICAg
IGZvciAoYXV0byYgbm9kZSA6IGhpdFRlc3RlZE5vZGVzKSB7CisgICAgICAgIGF1dG8gZnJhbWVW
aWV3ID0gbWFrZVJlZlB0cihub2RlLT5kb2N1bWVudCgpLnZpZXcoKSk7CisgICAgICAgIGF1dG8q
IHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFyZW5kZXJlciB8fCAh
ZnJhbWVWaWV3KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXV0byBib3VuZHMg
PSBmcmFtZVZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGlu
Z0JveFJlY3QoKSk7CisgICAgICAgIGF1dG8gYXJlYSA9IGJvdW5kcy5hcmVhKCk7CisgICAgICAg
IGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSB8fCBhcmVhLnVuc2FmZUdldCgpID4gY29udGV4dE1l
bnVBcmVhTGltaXQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoYm91bmRz
LmNvbnRhaW5zKGVuY2xvc2luZ0ludFJlY3Qoc2VsZWN0aW9uQm91bmRzSW5Sb290Vmlld0Nvb3Jk
aW5hdGVzKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByZWN0c1RvQXZvaWRJ
blJvb3RWaWV3Q29vcmRpbmF0ZXMuYXBwZW5kKFdURk1vdmUoYm91bmRzKSk7CisgICAgfQorCisg
ICAgcmVwbHkoV1RGTW92ZShyZWN0c1RvQXZvaWRJblJvb3RWaWV3Q29vcmRpbmF0ZXMpKTsKK30K
Kwogdm9pZCBXZWJQYWdlOjpnZXRSZWN0c0ZvckdyYW51bGFyaXR5V2l0aFNlbGVjdGlvbk9mZnNl
dCh1aW50MzJfdCBncmFudWxhcml0eSwgaW50MzJfdCBvZmZzZXQsIENhbGxiYWNrSUQgY2FsbGJh
Y2tJRCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZv
Y3VzZWRPck1haW5GcmFtZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IDEwMDVhMjVlYTgxOTZmMTk2NzNiYTdhZmM1YjQ3M2ZhZWQ3ZGVmNTku
LjYxNGM2OGJmZTFmZjgwM2UyMjI3OWI0ZThhYzZkZjkzYzQ3NjliZmUgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAx
OS0wMi0yMiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAg
ICBbaU9TXSBDYWxsb3V0IG1lbnUgb3ZlcmxhcHMgaW4tcGFnZSBjb250cm9scyB3aGVuIGVkaXRp
bmcgYSBjb21tZW50IGluIGdpdGh1Yi5jb20ncyBpc3N1ZSB0cmFja2VyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQ4NzMKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzQ2NzAxOTc0PgorCisgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIb3J0b24uCisK
KyAgICAgICAgQWRkIGEgY291cGxlIG9mIFVJU2NyaXB0Q29udHJvbGxlciBtZXRob2RzIHRvIG1h
a2UgY2FsbG91dCBtZW51IHRlc3Rpbmcgb24gaU9TIGVhc2llciAoc2VlIGJlbG93KS4KKworICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW06CisgICAg
ICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6bWVudVJlY3QgY29uc3QpOgorICAgICAgICAo
V1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OmlzU2hvd2luZ01lbnUgY29uc3QpOgorICAgICAgICAq
IFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJv
bGxlci5pZGw6CisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlT
Y3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjpt
ZW51UmVjdCBjb25zdCk6CisKKyAgICAgICAgQWRkIGEgZnVuY3Rpb24gdG8gcXVlcnkgdGhlIGJv
dW5kcyBvZiB0aGUgY2FsbG91dCBtZW51IGluIGNvbnRlbnQgY29vcmRpbmF0ZXMuCisKKyAgICAg
ICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjppc1Nob3dpbmdNZW51IGNvbnN0KToKKworICAg
ICAgICBBZGQgYSBmdW5jdGlvbiB0byBxdWVyeSB3aGV0aGVyIHRoZSBjYWxsb3V0IG1lbnUgaXMg
c2hvd24gKGkuZS4sIGhhcyBmaW5pc2hlZCBpdHMgYXBwZWFyYW5jZSBhbmltYXRpb24pLgorCisg
ICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9s
bGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJW
aWV3Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVy
SU9TLm1tOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnJlY3RGb3JNZW51QWN0
aW9uIGNvbnN0KToKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjptZW51UmVjdCBj
b25zdCk6CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6aXNTaG93aW5nTWVudSBj
b25zdCk6CisgICAgICAgIChXVFI6OmZpbmRWaWV3SW5IaWVyYXJjaHlPZlR5cGUpOiBEZWxldGVk
LgorCiAyMDE5LTAyLTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgZGlzYWJsZSBBUEkgdGVzdCBhZGRlZCBpbiByMjQxOTI4IG9uIGlPUy4K
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJ
T1MubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1t
CmluZGV4IGZmYjRkZWE2YTJjN2UwYjBiYjU2NzEwZWU0MzNkZDExYzA5NzE2NDAuLmY0MDhjY2Ex
NzdjYzQzYjc3NzA2YjJjZGY3MzU0NjI4NWQwNGFiY2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQpAQCAtMzM3LDYgKzMzNywxNiBA
QCBKU09iamVjdFJlZiBVSVNjcmlwdENvbnRyb2xsZXI6OnJlY3RGb3JNZW51QWN0aW9uKEpTU3Ry
aW5nUmVmKSBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCitKU09iamVjdFJlZiBVSVNj
cmlwdENvbnRyb2xsZXI6Om1lbnVSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworYm9vbCBVSVNjcmlwdENvbnRyb2xsZXI6OmlzU2hvd2luZ01lbnUoKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnBsYXRmb3Jt
U2V0RGlkRW5kU2Nyb2xsaW5nQ2FsbGJhY2soKQogewogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVy
LmlkbCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJ
U2NyaXB0Q29udHJvbGxlci5pZGwKaW5kZXggM2E5YzNlMjliOWMxMjJmNDc2MjNjMDJjYTFlOGYz
NmUyOWE2NTc2YS4uNWVjOTE5MWFmYjBmMzA3NTQyNGU3MjZhNjkzOWYyOTcxZjgzNTExNCAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3Mv
VUlTY3JpcHRDb250cm9sbGVyLmlkbAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2Ny
aXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsCkBAIC0yMjUsNiArMjI1
LDggQEAgaW50ZXJmYWNlIFVJU2NyaXB0Q29udHJvbGxlciB7CiAKICAgICBhdHRyaWJ1dGUgb2Jq
ZWN0IGRpZFNob3dNZW51Q2FsbGJhY2s7CiAgICAgYXR0cmlidXRlIG9iamVjdCBkaWRIaWRlTWVu
dUNhbGxiYWNrOworICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGlzU2hvd2luZ01lbnU7
CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIG9iamVjdCBtZW51UmVjdDsKICAgICBvYmplY3QgcmVj
dEZvck1lbnVBY3Rpb24oRE9NU3RyaW5nIGFjdGlvbik7CiAKICAgICBhdHRyaWJ1dGUgb2JqZWN0
IHdpbGxCZWdpblpvb21pbmdDYWxsYmFjazsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJT
aGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHAgYi9Ub29scy9UZXN0
UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4
IGI5NDcyZDBmZDE3NzY5ZWI4YWRmYWY0YmYzY2JjNzk2YjNkZThjNjAuLjYxMmVhOWM4M2JhZmRh
ZDQwMmE2YjA2NmQ0YmI4OWE3YzkzNjgxY2IgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJT
aGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMv
VGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcApA
QCAtNTMyLDExICs1MzIsMjEgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnBsYXRmb3JtU2V0
RGlkSGlkZU1lbnVDYWxsYmFjaygpCiB7CiB9CiAKK0pTT2JqZWN0UmVmIFVJU2NyaXB0Q29udHJv
bGxlcjo6bWVudVJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBudWxscHRyOworfQorCiBKU09i
amVjdFJlZiBVSVNjcmlwdENvbnRyb2xsZXI6OnJlY3RGb3JNZW51QWN0aW9uKEpTU3RyaW5nUmVm
KSBjb25zdAogewogICAgIHJldHVybiBudWxscHRyOwogfQogCitib29sIFVJU2NyaXB0Q29udHJv
bGxlcjo6aXNTaG93aW5nTWVudSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2
b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6cGxhdGZvcm1DbGVhckFsbENhbGxiYWNrcygpCiB7CiB9
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNj
cmlwdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0
L1VJU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IDVmMzM1ZWQyMTM5OWYxOGIwMjRiMWY2NzhjYmJk
MGJlNGRiNDZlMWQuLmNlMzU4NDE3MGE5YzQ4NzYxMTUwZjc0ZjlkZjU1MjZiYjY0NjdmZTcgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0
Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0
L1VJU2NyaXB0Q29udHJvbGxlci5oCkBAIC0xNjQsNyArMTY0LDkgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0RGlkU2hvd01lbnVDYWxsYmFjayhKU1ZhbHVlUmVmKTsKICAgICBKU1ZhbHVlUmVmIGRp
ZFNob3dNZW51Q2FsbGJhY2soKSBjb25zdDsKIAorICAgIGJvb2wgaXNTaG93aW5nTWVudSgpIGNv
bnN0OwogICAgIEpTT2JqZWN0UmVmIHJlY3RGb3JNZW51QWN0aW9uKEpTU3RyaW5nUmVmIGFjdGlv
bikgY29uc3Q7CisgICAgSlNPYmplY3RSZWYgbWVudVJlY3QoKSBjb25zdDsKIAogICAgIHZvaWQg
c2V0RGlkRW5kU2Nyb2xsaW5nQ2FsbGJhY2soSlNWYWx1ZVJlZik7CiAgICAgSlNWYWx1ZVJlZiBk
aWRFbmRTY3JvbGxpbmdDYWxsYmFjaygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3LmggYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcuaAppbmRleCAyOGQ1N2FjMmE2NmNlYjEw
ZTYxNTBlMTFiNjhkYTBjMmM5YWU3Njg4Li4xZDNhMThjNTZhOGEyMDI4ZTViNDcxZmEzODcxNDZl
MjQ4MzdmYTg0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RS
dW5uZXJXS1dlYlZpZXcuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RS
dW5uZXJXS1dlYlZpZXcuaApAQCAtNTYsNiArNTYsNyBAQAogQHByb3BlcnR5IChub25hdG9taWMs
IGFzc2lnbikgVUlFZGdlSW5zZXRzIG92ZXJyaWRlU2FmZUFyZWFJbnNldHM7CiAKIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSwgZ2V0dGVyPWlzU2hvd2luZ0tleWJvYXJkKSBCT09MIHNo
b3dpbmdLZXlib2FyZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgZ2V0dGVyPWlz
U2hvd2luZ01lbnUpIEJPT0wgc2hvd2luZ01lbnU7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNz
aWduKSBCT09MIHVzZXNTYWZhcmlMaWtlUm90YXRpb247CiBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHksIGdldHRlcj1pc0ludGVyYWN0aW5nV2l0aEZvcm1Db250cm9sKSBCT09MIGludGVy
YWN0aW5nV2l0aEZvcm1Db250cm9sOwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KaW5kZXggMDk4N2QyZjI3YmQ3ZDE2NmM1ZDdm
YWJkYjA0NWI4ODc0ZTJhZjkwYy4uN2NjNDk3NjZlYmRjMDBhZWQ3ODhmMTI5MTMyZDk3ODAwZTVm
NTRlNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250
cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29u
dHJvbGxlcklPUy5tbQpAQCAtMTE3LDE5ICsxMTcsNiBAQCBzdGF0aWMgQk9PTCBmb3JFYWNoVmll
d0luSGllcmFyY2h5KFVJVmlldyAqdmlldywgdm9pZChebWFwRnVuY3Rpb24pKFVJVmlldyAqc3Vi
dgogICAgIHJldHVybiBzdG9wOwogfQogCi1zdGF0aWMgVUlWaWV3ICpmaW5kVmlld0luSGllcmFy
Y2h5T2ZUeXBlKFVJVmlldyAqdmlldywgQ2xhc3Mgdmlld0NsYXNzKQotewotICAgIF9fYmxvY2sg
UmV0YWluUHRyPFVJVmlldz4gZm91bmRWaWV3OwotICAgIGZvckVhY2hWaWV3SW5IaWVyYXJjaHko
dmlldywgXihVSVZpZXcgKnN1YnZpZXcsIEJPT0wgKnN0b3ApIHsKLSAgICAgICAgaWYgKCFbc3Vi
dmlldyBpc0tpbmRPZkNsYXNzOnZpZXdDbGFzc10pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgZm91bmRWaWV3ID0gc3VidmlldzsKLSAgICAgICAgKnN0b3AgPSBZRVM7Ci0gICAgfSk7
Ci0gICAgcmV0dXJuIGZvdW5kVmlldy5hdXRvcmVsZWFzZSgpOwotfQotCiBzdGF0aWMgTlNBcnJh
eTxVSVZpZXcgKj4gKmZpbmRBbGxWaWV3c0luSGllcmFyY2h5T2ZUeXBlKFVJVmlldyAqdmlldywg
Q2xhc3Mgdmlld0NsYXNzKQogewogICAgIF9fYmxvY2sgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiB2aWV3cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwpAQCAtODgz
LDI1ICs4NzAsMjEgQEAgSlNPYmplY3RSZWYgVUlTY3JpcHRDb250cm9sbGVyOjpyZWN0Rm9yTWVu
dUFjdGlvbihKU1N0cmluZ1JlZiBqc0FjdGlvbikgY29uc3QKIAogICAgIFVJV2luZG93ICp3aW5k
b3dGb3JCdXR0b24gPSBuaWw7CiAgICAgVUlCdXR0b24gKmJ1dHRvbkZvckFjdGlvbiA9IG5pbDsK
LSAgICBmb3IgKFVJV2luZG93ICp3aW5kb3cgaW4gVUlBcHBsaWNhdGlvbi5zaGFyZWRBcHBsaWNh
dGlvbi53aW5kb3dzKSB7Ci0gICAgICAgIGlmICghW3dpbmRvdyBpc0tpbmRPZkNsYXNzOlVJVGV4
dEVmZmVjdHNXaW5kb3cuY2xhc3NdKQotICAgICAgICAgICAgY29udGludWU7CisgICAgVUlWaWV3
ICpjYWxsb3V0QmFyID0gVUlDYWxsb3V0QmFyLmFjdGl2ZUNhbGxvdXRCYXI7CisgICAgaWYgKCFj
YWxsb3V0QmFyLndpbmRvdykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgVUlW
aWV3ICpjYWxsb3V0QmFyID0gZmluZFZpZXdJbkhpZXJhcmNoeU9mVHlwZSh3aW5kb3csIFVJQ2Fs
bG91dEJhci5jbGFzcyk7Ci0gICAgICAgIGlmICghY2FsbG91dEJhcikKKyAgICBmb3IgKFVJQnV0
dG9uICpidXR0b24gaW4gZmluZEFsbFZpZXdzSW5IaWVyYXJjaHlPZlR5cGUoY2FsbG91dEJhciwg
VUlCdXR0b24uY2xhc3MpKSB7CisgICAgICAgIE5TU3RyaW5nICpidXR0b25UaXRsZSA9IFtidXR0
b24gdGl0bGVGb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07CisgICAgICAgIGlmICghYnV0
dG9uVGl0bGUubGVuZ3RoKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgZm9yIChV
SUJ1dHRvbiAqYnV0dG9uIGluIGZpbmRBbGxWaWV3c0luSGllcmFyY2h5T2ZUeXBlKGNhbGxvdXRC
YXIsIFVJQnV0dG9uLmNsYXNzKSkgewotICAgICAgICAgICAgTlNTdHJpbmcgKmJ1dHRvblRpdGxl
ID0gW2J1dHRvbiB0aXRsZUZvclN0YXRlOlVJQ29udHJvbFN0YXRlTm9ybWFsXTsKLSAgICAgICAg
ICAgIGlmICghYnV0dG9uVGl0bGUubGVuZ3RoKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICBpZiAoIVtidXR0b25UaXRsZSBpc0VxdWFsVG9TdHJpbmc6KF9fYnJpZGdl
IE5TU3RyaW5nICopYWN0aW9uLmdldCgpXSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgaWYgKCFbYnV0dG9uVGl0bGUgaXNFcXVhbFRvU3RyaW5nOihfX2JyaWRnZSBOU1N0cmlu
ZyAqKWFjdGlvbi5nZXQoKV0pCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAg
YnV0dG9uRm9yQWN0aW9uID0gYnV0dG9uOwotICAgICAgICAgICAgd2luZG93Rm9yQnV0dG9uID0g
d2luZG93OwotICAgICAgICB9CisgICAgICAgIGJ1dHRvbkZvckFjdGlvbiA9IGJ1dHRvbjsKKyAg
ICAgICAgd2luZG93Rm9yQnV0dG9uID0gY2FsbG91dEJhci53aW5kb3c7CisgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIGlmICghYnV0dG9uRm9yQWN0aW9uKQpAQCAtOTExLDYgKzg5NCwyMSBA
QCBKU09iamVjdFJlZiBVSVNjcmlwdENvbnRyb2xsZXI6OnJlY3RGb3JNZW51QWN0aW9uKEpTU3Ry
aW5nUmVmIGpzQWN0aW9uKSBjb25zdAogICAgIHJldHVybiBtX2NvbnRleHQtPm9iamVjdEZyb21S
ZWN0KFdlYkNvcmU6OkZsb2F0UmVjdChyZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLm9yaWdpbi54
LCByZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLm9yaWdpbi55LCByZWN0SW5Sb290Vmlld0Nvb3Jk
aW5hdGVzLnNpemUud2lkdGgsIHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMuc2l6ZS5oZWlnaHQp
KTsKIH0KIAorSlNPYmplY3RSZWYgVUlTY3JpcHRDb250cm9sbGVyOjptZW51UmVjdCgpIGNvbnN0
Cit7CisgICAgVUlWaWV3ICpjYWxsb3V0QmFyID0gVUlDYWxsb3V0QmFyLmFjdGl2ZUNhbGxvdXRC
YXI7CisgICAgaWYgKCFjYWxsb3V0QmFyLndpbmRvdykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBDR1JlY3QgcmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IFtjYWxsb3V0QmFyIGNv
bnZlcnRSZWN0OmNhbGxvdXRCYXIuYm91bmRzIHRvVmlldzpwbGF0Zm9ybUNvbnRlbnRWaWV3KCld
OworICAgIHJldHVybiBtX2NvbnRleHQtPm9iamVjdEZyb21SZWN0KFdlYkNvcmU6OkZsb2F0UmVj
dChyZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLm9yaWdpbi54LCByZWN0SW5Sb290Vmlld0Nvb3Jk
aW5hdGVzLm9yaWdpbi55LCByZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLnNpemUud2lkdGgsIHJl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMuc2l6ZS5oZWlnaHQpKTsKK30KKworYm9vbCBVSVNjcmlw
dENvbnRyb2xsZXI6OmlzU2hvd2luZ01lbnUoKSBjb25zdAoreworICAgIHJldHVybiBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkuc2hvd2lu
Z01lbnU7Cit9CisKIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpwbGF0Zm9ybVNldERpZEVuZFNj
cm9sbGluZ0NhbGxiYWNrKCkKIHsKICAgICBUZXN0UnVubmVyV0tXZWJWaWV3ICp3ZWJWaWV3ID0g
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDkyOWI5NTViZDcwOTE2MzAzZmJiODRmZmRmMTQ3ZTBjMDQ1MzE1MDUuLjhkY2Qz
Yjg2ZjFhZTk4MDVmMmQ2NjU0N2QwNWExOWI0ODFlMmJmYjggMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBA
QAorMjAxOS0wMi0yMiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbaU9TXSBDYWxsb3V0IG1lbnUgb3ZlcmxhcHMgaW4tcGFnZSBjb250cm9scyB3aGVu
IGVkaXRpbmcgYSBjb21tZW50IGluIGdpdGh1Yi5jb20ncyBpc3N1ZSB0cmFja2VyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQ4NzMKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzQ2NzAxOTc0PgorCisgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIb3J0
b24uCisKKyAgICAgICAgQWRkIGEgdGVzdCB0byBlbnN1cmUgdGhhdCB0aGUgd2UgZG9kZ2UgY2xp
Y2thYmxlIGVsZW1lbnRzIHdoZW4gc2hvd2luZyB0aGUgY2FsbG91dCBiYXIuCisKKyAgICAgICAg
KiBlZGl0aW5nL3NlbGVjdGlvbi9pb3MvYXZvaWQtc2hvd2luZy1jYWxsb3V0LW1lbnUtb3Zlci1j
b250cm9scy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9u
L2lvcy9hdm9pZC1zaG93aW5nLWNhbGxvdXQtbWVudS1vdmVyLWNvbnRyb2xzLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHJlc291cmNlcy91aS1oZWxwZXIuanM6CisgICAgICAgICh3aW5kb3cuVUlI
ZWxwZXIud2FpdEZvck1lbnVUb1Nob3cucmV0dXJuLm5ldy5Qcm9taXNlKToKKyAgICAgICAgKHdp
bmRvdy5VSUhlbHBlci53YWl0Rm9yTWVudVRvU2hvdyk6CisgICAgICAgICh3aW5kb3cuVUlIZWxw
ZXIubWVudVJlY3QpOgorICAgICAgICAod2luZG93LlVJSGVscGVyKToKKwogMjAxOS0wMi0yMiAg
V2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBJbnB1dCB0
eXBlICJmb3JtYXRTZXRJbmxpbmVUZXh0RGlyZWN0aW9uIiBpcyBkaXNwYXRjaGVkIHdoZW4gY2hh
bmdpbmcgcGFyYWdyYXBoLWxldmVsIHRleHQgZGlyZWN0aW9uCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9pb3MvYXZvaWQtc2hvd2luZy1jYWxsb3V0LW1lbnUtb3Zl
ci1jb250cm9scy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9p
b3MvYXZvaWQtc2hvd2luZy1jYWxsb3V0LW1lbnUtb3Zlci1jb250cm9scy1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTVkOTAyYjEwZTRjZGVlZDhjMTk4OWU3N2E0MzczMzdlMTBlMTEzYwotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2lvcy9hdm9pZC1z
aG93aW5nLWNhbGxvdXQtbWVudS1vdmVyLWNvbnRyb2xzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDEyIEBACisgICAgICAgICAgICAgIAorCitWZXJpZmllcyB0aGF0IHdlIGRvbid0IHNob3cgdGhl
IHN5c3RlbSBjYWxsb3V0IG1lbnUgb3ZlciBjb250cm9scy4gVG8gdGVzdCBtYW51YWxseTogZm9j
dXMgdGhlIGVkaXRhYmxlIGRvY3VtZW50IGluIHRoZSBpZnJhbWUsIHNlbGVjdCBzb21lIHRleHQs
IGFuZCBjb25maXJtIHRoYXQgdGhlIGNhbGxvdXQgYmFyIGlzIHNob3duIGJlbmVhdGggdGhlIHNl
bGVjdGlvbiBpbnN0ZWFkIG9mIGFib3ZlIHRoZSBzZWxlY3Rpb24uCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIGNlbnRlclkoZ3JhYmJlclJlY3QpIDwgY2VudGVyWShtZW51
UmVjdCkgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2lvcy9h
dm9pZC1zaG93aW5nLWNhbGxvdXQtbWVudS1vdmVyLWNvbnRyb2xzLmh0bWwgYi9MYXlvdXRUZXN0
cy9lZGl0aW5nL3NlbGVjdGlvbi9pb3MvYXZvaWQtc2hvd2luZy1jYWxsb3V0LW1lbnUtb3Zlci1j
b250cm9scy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlNWQ0MzdkZjVlOTllNmYyZTcwZGJkNjhkY2U5MzAw
ODY0ZWE2NTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlv
bi9pb3MvYXZvaWQtc2hvd2luZy1jYWxsb3V0LW1lbnUtb3Zlci1jb250cm9scy5odG1sCkBAIC0w
LDAgKzEsNzYgQEAKKzwhRE9DVFlQRSBodG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIHVz
ZUZsZXhpYmxlVmlld3BvcnQ9dHJ1ZSBdIC0tPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vcmVzb3VyY2VzL3VpLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8bWV0YSBuYW1lPXZp
ZXdwb3J0IGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KKzxz
dHlsZT4KK2JvZHksIGh0bWwgeworICAgIHdpZHRoOiAxMDAlOworICAgIGhlaWdodDogMTAwJTsK
KyAgICBtYXJnaW46IDA7Cit9CisKK2lmcmFtZSB7CisgICAgd2lkdGg6IDMyMHB4OworICAgIGhl
aWdodDogMTAwcHg7Cit9CisKKyNjb250cm9scyB7CisgICAgbWFyZ2luLXRvcDogMjBweDsKKyAg
ICBtYXJnaW4tYm90dG9tOiAxMHB4OworfQorCitpbnB1dFt0eXBlPWJ1dHRvbl0geworICAgIGhl
aWdodDogMWVtOworfQorPC9zdHlsZT4KKzxzY3JpcHQ+Citqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsK
KworYXN5bmMgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBkZXNjcmlwdGlvbigiVmVyaWZpZXMg
dGhhdCB3ZSBkb24ndCBzaG93IHRoZSBzeXN0ZW0gY2FsbG91dCBtZW51IG92ZXIgY29udHJvbHMu
IFRvIHRlc3QgbWFudWFsbHk6IGZvY3VzIHRoZSBlZGl0YWJsZSBkb2N1bWVudCBpbiB0aGUgaWZy
YW1lLCBzZWxlY3Qgc29tZSB0ZXh0LCBhbmQgY29uZmlybSB0aGF0IHRoZSBjYWxsb3V0IGJhciBp
cyBzaG93biBiZW5lYXRoIHRoZSBzZWxlY3Rpb24gaW5zdGVhZCBvZiBhYm92ZSB0aGUgc2VsZWN0
aW9uLiIpOworCisgICAgY2VudGVyWCA9IHJlY3QgPT4gcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAv
IDI7CisgICAgY2VudGVyWSA9IHJlY3QgPT4gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDI7CisK
KyAgICBhd2FpdCBVSUhlbHBlci5hY3RpdmF0ZUFuZFdhaXRGb3JJbnB1dFNlc3Npb25BdCgxNjAs
IDEwMCk7CisKKyAgICBjb25zdCBpZnJhbWVEb2N1bWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0
b3IoImlmcmFtZSIpLmNvbnRlbnREb2N1bWVudDsKKyAgICBpZnJhbWVEb2N1bWVudC5nZXRTZWxl
Y3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihpZnJhbWVEb2N1bWVudC5ib2R5KTsKKworICAgIGdy
YWJiZXJSZWN0ID0ge307CisgICAgd2hpbGUgKCFncmFiYmVyUmVjdC53aWR0aCAmJiAhZ3JhYmJl
clJlY3QuaGVpZ2h0KQorICAgICAgICBncmFiYmVyUmVjdCA9IGF3YWl0IFVJSGVscGVyLmdldFNl
bGVjdGlvbkVuZEdyYWJiZXJWaWV3UmVjdCgpOworCisgICAgYXdhaXQgVUlIZWxwZXIuYWN0aXZh
dGVBdChjZW50ZXJYKGdyYWJiZXJSZWN0KSwgY2VudGVyWShncmFiYmVyUmVjdCkpOworICAgIGF3
YWl0IFVJSGVscGVyLndhaXRGb3JNZW51VG9TaG93KCk7CisgICAgbWVudVJlY3QgPSBhd2FpdCBV
SUhlbHBlci5tZW51UmVjdCgpOworCisgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7
CisKKyAgICBzaG91bGRCZSgiY2VudGVyWShncmFiYmVyUmVjdCkgPCBjZW50ZXJZKG1lbnVSZWN0
KSIsICJ0cnVlIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2FkZEV2ZW50TGlzdGVuZXIo
ImxvYWQiLCBydW5UZXN0KTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJj
b250cm9scyI+CisgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjEiPjwvaW5wdXQ+Cisg
ICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjIiPjwvaW5wdXQ+CisgICAgPGlucHV0IHR5
cGU9ImJ1dHRvbiIgdmFsdWU9IjMiPjwvaW5wdXQ+CisgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIg
dmFsdWU9IjQiPjwvaW5wdXQ+CisgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjUiPjwv
aW5wdXQ+CisgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjYiPjwvaW5wdXQ+CisgICAg
PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjciPjwvaW5wdXQ+CisgICAgPGlucHV0IHR5cGU9
ImJ1dHRvbiIgdmFsdWU9IjgiPjwvaW5wdXQ+Cis8L2Rpdj4KKzxkaXY+CisgICAgPGlmcmFtZSBz
cmNkb2M9Ijxib2R5IGNvbnRlbnRlZGl0YWJsZT5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwg
Y29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QuPC9ib2R5PiI+PC9p
ZnJhbWU+Cis8L2Rpdj4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPHAgaWQ9ImNvbnNvbGUi
PjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9yZXNvdXJjZXMvdWktaGVscGVyLmpzIGIvTGF5b3V0VGVzdHMv
cmVzb3VyY2VzL3VpLWhlbHBlci5qcwppbmRleCA0ZGUwZDE0ZWEyYTgyODc3NDE5YjAxMTlkNDRh
NWU3NTE0MDc2YThhLi45ZTVmY2JlMGRmNjAwMmEyZDMzNzE3MGQ5OTJiNWZjZmMwMDlkYmE2IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9yZXNvdXJjZXMvdWktaGVscGVyLmpzCisrKyBiL0xheW91
dFRlc3RzL3Jlc291cmNlcy91aS1oZWxwZXIuanMKQEAgLTY2NSw0ICs2NjUsMjQgQEAgd2luZG93
LlVJSGVscGVyID0gY2xhc3MgVUlIZWxwZXIgewogICAgICAgICBjb25zdCBzY3JpcHQgPSAiSlNP
Ti5zdHJpbmdpZnkoW3VpQ29udHJvbGxlci5sYXN0VW5kb0xhYmVsLCB1aUNvbnRyb2xsZXIuZmly
c3RSZWRvTGFiZWxdKSI7CiAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHRl
c3RSdW5uZXIucnVuVUlTY3JpcHQoc2NyaXB0LCByZXN1bHQgPT4gcmVzb2x2ZShKU09OLnBhcnNl
KHJlc3VsdCkpKSk7CiAgICAgfQorCisgICAgc3RhdGljIHdhaXRGb3JNZW51VG9TaG93KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsKKyAgICAgICAgICAg
IHRlc3RSdW5uZXIucnVuVUlTY3JpcHQoYAorICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCF1aUNvbnRyb2xsZXIuaXNTaG93aW5nTWVudSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci5kaWRTaG93TWVudUNhbGxiYWNrID0g
KCkgPT4gdWlDb250cm9sbGVyLnVpU2NyaXB0Q29tcGxldGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnVpU2NyaXB0Q29t
cGxldGUoKTsKKyAgICAgICAgICAgICAgICB9KSgpYCwgcmVzb2x2ZSk7CisgICAgICAgIH0pOwor
ICAgIH0KKworICAgIHN0YXRpYyBtZW51UmVjdCgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3
IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAgICAgICAgICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0
KCJKU09OLnN0cmluZ2lmeSh1aUNvbnRyb2xsZXIubWVudVJlY3QpIiwgcmVzdWx0ID0+IHJlc29s
dmUoSlNPTi5wYXJzZShyZXN1bHQpKSk7CisgICAgICAgIH0pOworICAgIH0KIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>