<?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>212548</bug_id>
          
          <creation_ts>2020-05-29 14:44:40 -0700</creation_ts>
          <short_desc>TextManipulationController should put one Node in only one paragraph</short_desc>
          <delta_ts>2020-06-01 16:55:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>mifenton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1657443</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-05-29 14:44:40 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657454</commentid>
    <comment_count>1</comment_count>
      <attachid>400622</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-05-29 14:51:24 -0700</bug_when>
    <thetext>Created attachment 400622
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657822</commentid>
    <comment_count>2</comment_count>
      <attachid>400717</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-05-31 20:45:56 -0700</bug_when>
    <thetext>Created attachment 400717
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657983</commentid>
    <comment_count>3</comment_count>
      <attachid>400742</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-06-01 11:31:18 -0700</bug_when>
    <thetext>Created attachment 400742
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658037</commentid>
    <comment_count>4</comment_count>
      <attachid>400742</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-06-01 13:49:49 -0700</bug_when>
    <thetext>Comment on attachment 400742
Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        When TextManipulationController manipulates the the first paragraph, it removes all the Nodes in its range and 

Nit - “the the”

&gt; Source/WebCore/ChangeLog:13
&gt; +        and fails to replace. Also, TextManipulationController does not reserve line breaks in text, which can be an

Nit - do you mean “does not preserve”?

&gt; Source/WebCore/editing/TextManipulationController.cpp:208
&gt; +        while (!m_iterator.atEnd() &amp;&amp; m_iteratorNode == m_node) {

I think you can factor out this (!m_iterator.atEnd() &amp;&amp; m_iteratorNode == m_node) check into a private helper method (maybe something like shouldAdvanceIteratorPastCurrentNode), and then use it both here and in the advance() function by early returning !shouldAdvanceIteratorPastCurrentNode().

&gt; Source/WebCore/editing/TextManipulationController.h:158
&gt; +        bool containsOnlyHTMLSpace;
&gt; +        bool containsLineBreak;
&gt; +        bool firstTokenContainsLineBreak;
&gt; +        bool lastTokenContainsLineBreak;

Nit - probably a good idea to give these an initial value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658106</commentid>
    <comment_count>5</comment_count>
      <attachid>400767</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-06-01 16:28:03 -0700</bug_when>
    <thetext>Created attachment 400767
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658114</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-01 16:54:38 -0700</bug_when>
    <thetext>Committed r262398: &lt;https://trac.webkit.org/changeset/262398&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 400767.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658115</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-01 16:55:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/63850127&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400622</attachid>
            <date>2020-05-29 14:51:24 -0700</date>
            <delta_ts>2020-05-31 20:45:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212548-20200529145122.patch</filename>
            <type>text/plain</type>
            <size>47476</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTQzYTBjNzE4ZDNjNzg4
MmFjMWMxYmUwYTJmNmI0ZDM0NWExZTY2NS4uMDljYjI2NTMxYWMwYzJmYmM3ZTI4N2FkOGNmOTJj
Yzg3MDNjZjI0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDIwLTA1LTI5ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyIHNob3VsZCBwdXQgdGV4dCBpbiBzYW1lIG5vZGUgaW4gdGhlIHNhbWUgcGFyYWdy
YXBoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI1
NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFyYWdyYXBoTm9kZUl0ZXJhdG9yOjpQ
YXJhZ3JhcGhOb2RlSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UGFyYWdyYXBoTm9kZUl0
ZXJhdG9yOjptX2VuZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFyYWdyYXBoTm9kZUl0ZXJh
dG9yOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFncmFwaE5vZGVJdGVyYXRvcjo6
Y3VycmVudENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFyYWdyYXBoTm9kZUl0ZXJhdG9y
OjphdEVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXJhZ3JhcGhOb2RlSXRlcmF0b3I6
OmFkdmFuY2VOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFncmFwaE5vZGVJdGVyYXRvcjo6
YWR2YW5jZUl0ZXJhdG9yTm9kZUFuZFVwZGF0ZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6aXNF
bmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6b2JzZXJ2ZVBhcmFncmFwaHMpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmFkZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
UGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yOjpQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3IpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yOjptX3Bhc3RF
bmROb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhcmFncmFwaENvbnRlbnRJdGVy
YXRvcjo6YWR2YW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXJhZ3JhcGhDb250
ZW50SXRlcmF0b3I6OmN1cnJlbnRDb250ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlBhcmFncmFwaENvbnRlbnRJdGVyYXRvcjo6c3RhcnRQb3NpdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3I6OmVuZFBvc2l0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhcmFncmFwaENvbnRlbnRJdGVyYXRvcjo6YXRFbmQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFyYWdyYXBoQ29udGVudEl0ZXJh
dG9yOjptb3ZlQ3VycmVudE5vZGVGb3J3YXJkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmNvbnRhaW5zT25seUhUTUxTcGFjZXMpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaDoKKwogMjAyMC0wNS0yOSAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBnZW5lcmF0ZS11bmlmaWVkLXNvdXJjZXMu
c2ggbm90IGRlcGVuZCBvbiBmZWF0dXJlcyBiZWluZyBsaXN0ZWQgaW4gRkVBVFVSRV9ERUZJTkVT
IGVudmlyb25tZW50IHZhcmlhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGUwZWUxZDJkYTA4OTFiMTdiYjVl
ZjNmY2ZjM2Q1N2Y2NWZlYzk3M2IuLjQ5Y2JhYTRhODZjN2EwOWQ2ODFjY2RjNjY5NzY3Y2ZiOWI3
NTQyZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0xNDIsMzMgKzE0MiwyNiBAQCB2b2lkIFRleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyOjpzdGFydE9ic2VydmluZ1BhcmFncmFwaHMoTWFuaXB1bGF0aW9uSXRl
bUNhbGxiYQogICAgIGZsdXNoUGVuZGluZ0l0ZW1zRm9yQ2FsbGJhY2soKTsKIH0KIAotY2xhc3Mg
UGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yIHsKK2NsYXNzIFBhcmFncmFwaE5vZGVJdGVyYXRvciB7
CiBwdWJsaWM6Ci0gICAgUGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yKGNvbnN0IFBvc2l0aW9uJiBz
dGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKKyAgICBQYXJhZ3JhcGhOb2RlSXRlcmF0b3IoY29u
c3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogICAgICAgICA6IG1faXRl
cmF0b3IoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5k
KSB9LCBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5KQogICAgICAgICAsIG1faXRl
cmF0b3JOb2RlKG1faXRlcmF0b3IuYXRFbmQoKSA/IG51bGxwdHIgOiBjcmVhdGVMaXZlUmFuZ2Uo
bV9pdGVyYXRvci5yYW5nZSgpKS0+Zmlyc3ROb2RlKCkpCi0gICAgICAgICwgbV9jdXJyZW50Tm9k
ZUZvckZpbmRpbmdJbnZpc2libGVDb250ZW50KHN0YXJ0LmZpcnN0Tm9kZSgpKQotICAgICAgICAs
IG1fcGFzdEVuZE5vZGUoZW5kLmZpcnN0Tm9kZSgpKQorICAgICAgICAsIG1fbm9kZShzdGFydC5m
aXJzdE5vZGUoKSkKKyAgICAgICAgLCBtX2VuZE5vZGUoZW5kLmZpcnN0Tm9kZSgpKQogICAgIHsK
KyAgICAgICAgaWYgKG1fbm9kZSA9PSBtX2l0ZXJhdG9yTm9kZSkKKyAgICAgICAgICAgIGFkdmFu
Y2VJdGVyYXRvck5vZGVBbmRVcGRhdGVUZXh0KCk7CiAgICAgfQogCiAgICAgdm9pZCBhZHZhbmNl
KCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgYSBub2RlIGNhbGxiYWNrIHRvIFRleHRJ
dGVyYXRvciBpbnN0ZWFkIG9mIHRyYXZlcnNpbmcgdGhlIG5vZGUgdHJlZSB0d2ljZSBsaWtlIHRo
aXMuCi0gICAgICAgIGlmIChtX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJsZUNvbnRlbnQg
IT0gbV9pdGVyYXRvck5vZGUgJiYgbV9jdXJyZW50Tm9kZUZvckZpbmRpbmdJbnZpc2libGVDb250
ZW50ICE9IG1fcGFzdEVuZE5vZGUpIHsKLSAgICAgICAgICAgIG1vdmVDdXJyZW50Tm9kZUZvcndh
cmQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX2l0
ZXJhdG9yLmF0RW5kKCkpCisgICAgICAgIG1fdGV4dCA9IFdURjo6bnVsbG9wdDsKKyAgICAgICAg
YWR2YW5jZU5vZGUoKTsKKyAgICAgICAgaWYgKG1faXRlcmF0b3IuYXRFbmQoKSB8fCBtX25vZGUg
IT0gbV9pdGVyYXRvck5vZGUpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYXV0byBw
cmV2aW91c0l0ZXJhdG9yTm9kZSA9IG1faXRlcmF0b3JOb2RlOwotCi0gICAgICAgIG1faXRlcmF0
b3IuYWR2YW5jZSgpOwotICAgICAgICBtX2l0ZXJhdG9yTm9kZSA9IG1faXRlcmF0b3IuYXRFbmQo
KSA/IG51bGxwdHIgOiBjcmVhdGVMaXZlUmFuZ2UobV9pdGVyYXRvci5yYW5nZSgpKS0+Zmlyc3RO
b2RlKCk7Ci0gICAgICAgIGlmIChwcmV2aW91c0l0ZXJhdG9yTm9kZSAhPSBtX2l0ZXJhdG9yTm9k
ZSkKLSAgICAgICAgICAgIG1vdmVDdXJyZW50Tm9kZUZvcndhcmQoKTsKKyAgICAgICAgYWR2YW5j
ZUl0ZXJhdG9yTm9kZUFuZFVwZGF0ZVRleHQoKTsKICAgICB9CiAKICAgICBzdHJ1Y3QgQ3VycmVu
dENvbnRlbnQgewpAQCAtMTgwLDExICsxNzMsNyBAQCBwdWJsaWM6CiAKICAgICBDdXJyZW50Q29u
dGVudCBjdXJyZW50Q29udGVudCgpCiAgICAgewotICAgICAgICBDdXJyZW50Q29udGVudCBjb250
ZW50OwotICAgICAgICBpZiAobV9jdXJyZW50Tm9kZUZvckZpbmRpbmdJbnZpc2libGVDb250ZW50
ICYmIG1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudCAhPSBtX2l0ZXJhdG9y
Tm9kZSkKLSAgICAgICAgICAgIGNvbnRlbnQgPSB7IG1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52
aXNpYmxlQ29udGVudC5jb3B5UmVmKCksIFN0cmluZ1ZpZXcgeyB9IH07Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGNvbnRlbnQgPSB7IG1faXRlcmF0b3Iubm9kZSgpLCBtX2l0ZXJhdG9yLnRl
eHQoKSwgdHJ1ZSB9OworICAgICAgICBDdXJyZW50Q29udGVudCBjb250ZW50ID0geyBtX25vZGUu
Y29weVJlZigpLCBtX3RleHQgPyBtX3RleHQudmFsdWUoKSA6IFN0cmluZ1ZpZXcgeyB9LCAhIW1f
dGV4dCB9OwogICAgICAgICBpZiAoY29udGVudC5ub2RlKSB7CiAgICAgICAgICAgICBpZiAoYXV0
byogcmVuZGVyZXIgPSBjb250ZW50Lm5vZGUtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAocmVuZGVyZXItPmlzUmVuZGVyUmVwbGFjZWQoKSkgewpAQCAtMTk2LDMzICsxODUsMzkg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gY29udGVudDsKICAgICB9CiAKLSAgICBQb3NpdGlv
biBzdGFydFBvc2l0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24obV9pdGVyYXRvci5yYW5nZSgpLnN0YXJ0KTsKLSAgICB9CisgICAgYm9vbCBh
dEVuZCgpIGNvbnN0IHsgcmV0dXJuICFtX3RleHQgJiYgbV9pdGVyYXRvci5hdEVuZCgpICYmIG1f
bm9kZSA9PSBtX2VuZE5vZGU7IH0KIAotICAgIFBvc2l0aW9uIGVuZFBvc2l0aW9uKCkKK3ByaXZh
dGU6CisgICAgdm9pZCBhZHZhbmNlTm9kZSgpCiAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRl
TGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1faXRlcmF0b3IucmFuZ2UoKS5lbmQpOwotICAgIH0KKyAg
ICAgICAgaWYgKG1fbm9kZSA9PSBtX2VuZE5vZGUpCisgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvci5hdEVuZCgpICYmIG1fY3Vy
cmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudCA9PSBtX3Bhc3RFbmROb2RlOyB9Cisg
ICAgICAgIG1fbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm1fbm9kZSk7CisgICAgICAgIGlm
ICghbV9ub2RlKQorICAgICAgICAgICAgbV9ub2RlID0gbV9lbmROb2RlOworICAgIH0KIAotcHJp
dmF0ZToKLSAgICB2b2lkIG1vdmVDdXJyZW50Tm9kZUZvcndhcmQoKQorICAgIHZvaWQgYWR2YW5j
ZUl0ZXJhdG9yTm9kZUFuZFVwZGF0ZVRleHQoKQogICAgIHsKLSAgICAgICAgaWYgKG1fY3VycmVu
dE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudCA9PSBtX3Bhc3RFbmROb2RlKQorICAgICAg
ICBpZiAobV9pdGVyYXRvci5hdEVuZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IG1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudCA9IE5vZGVUcmF2ZXJzYWw6
Om5leHQoKm1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudCk7Ci0gICAgICAg
IGlmICghbV9jdXJyZW50Tm9kZUZvckZpbmRpbmdJbnZpc2libGVDb250ZW50KQotICAgICAgICAg
ICAgbV9jdXJyZW50Tm9kZUZvckZpbmRpbmdJbnZpc2libGVDb250ZW50ID0gbV9wYXN0RW5kTm9k
ZTsKKyAgICAgICAgQVNTRVJUKG1fbm9kZSA9PSBtX2l0ZXJhdG9yTm9kZSk7CisgICAgICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICAgICAgd2hpbGUgKCFtX2l0ZXJhdG9yLmF0
RW5kKCkgJiYgbV9pdGVyYXRvck5vZGUgPT0gbV9ub2RlKSB7CisgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtX2l0ZXJhdG9yLnRleHQoKSk7CisgICAgICAgICAgICBtX2l0ZXJhdG9y
LmFkdmFuY2UoKTsKKyAgICAgICAgICAgIG1faXRlcmF0b3JOb2RlID0gbV9pdGVyYXRvci5hdEVu
ZCgpID8gbnVsbHB0ciA6IGNyZWF0ZUxpdmVSYW5nZShtX2l0ZXJhdG9yLnJhbmdlKCkpLT5maXJz
dE5vZGUoKTsKKyAgICAgICAgfQorICAgICAgICBtX3RleHQgPSB7IHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKSB9OwogICAgIH0KIAogICAgIFRleHRJdGVyYXRvciBtX2l0ZXJhdG9yOwogICAgIFJl
ZlB0cjxOb2RlPiBtX2l0ZXJhdG9yTm9kZTsKLSAgICBSZWZQdHI8Tm9kZT4gbV9jdXJyZW50Tm9k
ZUZvckZpbmRpbmdJbnZpc2libGVDb250ZW50OwotICAgIFJlZlB0cjxOb2RlPiBtX3Bhc3RFbmRO
b2RlOworICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CisgICAgUmVmUHRyPE5vZGU+IG1fZW5kTm9k
ZTsKKyAgICBPcHRpb25hbDxTdHJpbmc+IG1fdGV4dDsKIH07CiAKIHN0YXRpYyBib29sIGlzQXR0
cmlidXRlRm9yVGV4dE1hbmlwdWxhdGlvbihjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lVG9DaGVjaykKQEAgLTI1MywxNiArMjQ4LDYgQEAgc3RhdGljIGJv
b2wgY2FuUGVyZm9ybVRleHRNYW5pcHVsYXRpb25CeVJlcGxhY2luZ0VudGlyZVRleHRDb250ZW50
KGNvbnN0IEVsZW1lbnQKICAgICByZXR1cm4gZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGl0bGVUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvblRhZyk7CiB9
CiAKLXN0YXRpYyBib29sIGNvbnRhaW5zT25seUhUTUxTcGFjZXMoU3RyaW5nVmlldyB0ZXh0KQot
ewotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHRleHQubGVuZ3RoKCk7ICsr
aW5kZXgpIHsKLSAgICAgICAgaWYgKGlzTm90SFRNTFNwYWNlKHRleHRbaW5kZXhdKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3Rh
dGljIE9wdGlvbmFsPFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tl
bkluZm8+IHRva2VuSW5mbyhOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKQEAgLTI3OCw2
ICsyNjMsODMgQEAgc3RhdGljIE9wdGlvbmFsPFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpN
YW5pcHVsYXRpb25Ub2tlbkluZm8+IHRva2VuSW5mbyhOb2QKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCitzdGF0aWMgYm9vbCBpc0VuY2xvc2luZ0l0ZW1Cb3VuZGFyeUVsZW1lbnQoY29uc3QgRWxl
bWVudCYgZWxlbWVudCkKK3sKKyAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIo
KTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
IHJvbGUgPSBbXShjb25zdCBFbGVtZW50JiBlbGVtZW50KSAtPiBBY2Nlc3NpYmlsaXR5Um9sZSB7
CisgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhUm9sZVRvV2ViQ29yZVJv
bGUoZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6cm9s
ZUF0dHIpKTsKKyAgICB9OworCisgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6
OmJ1dHRvblRhZykgfHwgcm9sZShlbGVtZW50KSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6QnV0dG9u
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpsaVRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YVRhZykpIHsK
KyAgICAgICAgYXV0byBkaXNwbGF5VHlwZSA9IHJlbmRlcmVyLT5zdHlsZSgpLmRpc3BsYXkoKTsK
KyAgICAgICAgaWYgKGRpc3BsYXlUeXBlID09IERpc3BsYXlUeXBlOjpCbG9jayB8fCBkaXNwbGF5
VHlwZSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lQmxvY2spCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgICAgICBmb3IgKGF1dG8gcGFyZW50ID0gbWFrZVJlZlB0cihlbGVtZW50LnBhcmVu
dEVsZW1lbnQoKSk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRFbGVtZW50KCkpIHsK
KyAgICAgICAgICAgIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpuYXZUYWcpIHx8
IHJvbGUoKnBhcmVudCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkxhbmRtYXJrTmF2aWdhdGlvbikK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlv
blRva2VucyBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cGFyc2UoU3RyaW5nVmlldyB0ZXh0
LCBOb2RlKiB0ZXh0Tm9kZSkKK3sKKyAgICBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+IHRva2Vu
czsKKyAgICBFeGNsdXNpb25SdWxlTWF0Y2hlciBleGNsdXNpb25SdWxlTWF0Y2hlcihtX2V4Y2x1
c2lvblJ1bGVzKTsKKyAgICBzaXplX3QgcG9zaXRpb25PZkxhc3ROb25IVE1MU3BhY2UgPSBXVEY6
Om5vdEZvdW5kOworICAgIHNpemVfdCBzdGFydFBvc2l0aW9uT2ZDdXJyZW50VG9rZW4gPSAwOwor
ICAgIGJvb2wgY29udGFpbnNPbmx5SFRNTFNwYWNlID0gdHJ1ZTsKKyAgICBib29sIGNvbnRhaW5z
TGluZUJyZWFrID0gZmFsc2U7CisgICAgYm9vbCBmaXJzdFRva2VuQ29udGFpbnNMaW5lQnJlYWsg
PSBmYWxzZTsKKyAgICBib29sIGxhc3RUb2tlbkNvbnRhaW5zTGluZUJyZWFrID0gZmFsc2U7CisK
KyAgICBzaXplX3QgaW5kZXggPSAwOworICAgIGZvciAoOyBpbmRleCA8IHRleHQubGVuZ3RoKCk7
ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSB0ZXh0W2luZGV4XTsKKyAgICAg
ICAgaWYgKGlzTm90SFRNTFNwYWNlKGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIGNvbnRhaW5z
T25seUhUTUxTcGFjZSA9IGZhbHNlOworICAgICAgICAgICAgcG9zaXRpb25PZkxhc3ROb25IVE1M
U3BhY2UgPSBpbmRleDsKKyAgICAgICAgfSBlbHNlIGlmIChpc0hUTUxMaW5lQnJlYWsoY2hhcmFj
dGVyKSkgeworICAgICAgICAgICAgY29udGFpbnNMaW5lQnJlYWsgPSB0cnVlOworICAgICAgICAg
ICAgaWYgKHBvc2l0aW9uT2ZMYXN0Tm9uSFRNTFNwYWNlICE9IFdURjo6bm90Rm91bmQgJiYgc3Rh
cnRQb3NpdGlvbk9mQ3VycmVudFRva2VuIDw9IHBvc2l0aW9uT2ZMYXN0Tm9uSFRNTFNwYWNlKSB7
CisgICAgICAgICAgICAgICAgYXV0byB0b2tlblN0cmluZyA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0
UG9zaXRpb25PZkN1cnJlbnRUb2tlbiwgcG9zaXRpb25PZkxhc3ROb25IVE1MU3BhY2UgKyAxIC0g
c3RhcnRQb3NpdGlvbk9mQ3VycmVudFRva2VuKS50b1N0cmluZygpOworICAgICAgICAgICAgICAg
IHRva2Vucy5hcHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5l
cmF0ZSgpLCB0b2tlblN0cmluZywgdG9rZW5JbmZvKHRleHROb2RlKSwgZXhjbHVzaW9uUnVsZU1h
dGNoZXIuaXNFeGNsdWRlZCh0ZXh0Tm9kZSkgfSk7CisgICAgICAgICAgICAgICAgc3RhcnRQb3Np
dGlvbk9mQ3VycmVudFRva2VuID0gcG9zaXRpb25PZkxhc3ROb25IVE1MU3BhY2UgKyAxOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCB0ZXh0Lmxlbmd0aCgpICYm
ICFpc05vdEhUTUxTcGFjZSh0ZXh0W2luZGV4XSkpCisgICAgICAgICAgICAgICAgKytpbmRleDsK
KworICAgICAgICAgICAgLS1pbmRleDsKKworICAgICAgICAgICAgYXV0byBsaW5lQnJlYWtUb2tl
blN0cmluZyA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0UG9zaXRpb25PZkN1cnJlbnRUb2tlbiwgaW5k
ZXggKyAxIC0gc3RhcnRQb3NpdGlvbk9mQ3VycmVudFRva2VuKS50b1N0cmluZygpOworICAgICAg
ICAgICAgaWYgKHRva2Vucy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZmlyc3RUb2tlbkNv
bnRhaW5zTGluZUJyZWFrID0gdHJ1ZTsKKyAgICAgICAgICAgIHRva2Vucy5hcHBlbmQoTWFuaXB1
bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5lcmF0ZSgpLCBsaW5lQnJlYWtUb2tl
blN0cmluZywgdG9rZW5JbmZvKHRleHROb2RlKSwgdHJ1ZSB9KTsKKyAgICAgICAgICAgIHN0YXJ0
UG9zaXRpb25PZkN1cnJlbnRUb2tlbiA9IGluZGV4ICsgMTsKKyAgICAgICAgICAgIGxhc3RUb2tl
bkNvbnRhaW5zTGluZUJyZWFrID0gdHJ1ZTsKKworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3RhcnRQb3NpdGlvbk9mQ3VycmVudFRva2VuIDwgdGV4
dC5sZW5ndGgoKSkgeworICAgICAgICBhdXRvIHRva2VuU3RyaW5nID0gdGV4dC5zdWJzdHJpbmco
c3RhcnRQb3NpdGlvbk9mQ3VycmVudFRva2VuLCBpbmRleCArIDEgLSBzdGFydFBvc2l0aW9uT2ZD
dXJyZW50VG9rZW4pLnRvU3RyaW5nKCk7CisgICAgICAgIHRva2Vucy5hcHBlbmQoTWFuaXB1bGF0
aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5lcmF0ZSgpLCB0b2tlblN0cmluZywgdG9r
ZW5JbmZvKHRleHROb2RlKSwgZXhjbHVzaW9uUnVsZU1hdGNoZXIuaXNFeGNsdWRlZCh0ZXh0Tm9k
ZSkgfSk7CisgICAgICAgIGxhc3RUb2tlbkNvbnRhaW5zTGluZUJyZWFrID0gZmFsc2U7CisgICAg
fQorCisgICAgcmV0dXJuIHsgV1RGTW92ZSh0b2tlbnMpLCBjb250YWluc09ubHlIVE1MU3BhY2Us
IGNvbnRhaW5zTGluZUJyZWFrLCBmaXJzdFRva2VuQ29udGFpbnNMaW5lQnJlYWssIGxhc3RUb2tl
bkNvbnRhaW5zTGluZUJyZWFrIH07Cit9CisKIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRp
b24mIGVuZCkKIHsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQpAQCAt
Mjg1LDEzMiArMzQ3LDgwIEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Om9ic2Vy
dmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QKIAogICAgIGF1dG8gZG9j
dW1lbnQgPSBtYWtlUmVmUHRyKHN0YXJ0LmRvY3VtZW50KCkpOwogICAgIEFTU0VSVChkb2N1bWVu
dCk7Ci0gICAgUGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yIGl0ZXJhdG9yIHsgc3RhcnQsIGVuZCB9
OwotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQgPSBzdGFydDsKLSAgICBWaXNpYmxl
UG9zaXRpb24gdmlzaWJsZUVuZCA9IGVuZDsKKyAgICBQYXJhZ3JhcGhOb2RlSXRlcmF0b3IgaXRl
cmF0b3IgeyBzdGFydCwgZW5kIH07CiAgICAgaWYgKGRvY3VtZW50ICE9IHN0YXJ0LmRvY3VtZW50
KCkgfHwgZG9jdW1lbnQgIT0gZW5kLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsgLy8gVGV4
dEl0ZXJhdG9yJ3MgY29uc3RydWN0b3IgbWF5IGhhdmUgdXBkYXRlZCB0aGUgbGF5b3V0IGFuZCBl
eGVjdXRlZCBhcmJpdHJhcnkgc2NyaXB0cy4KKyAgICAgICAgcmV0dXJuOwogCiAgICAgRXhjbHVz
aW9uUnVsZU1hdGNoZXIgZXhjbHVzaW9uUnVsZU1hdGNoZXIobV9leGNsdXNpb25SdWxlcyk7Ci0g
ICAgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGg7CiAg
ICAgUG9zaXRpb24gc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGg7CiAgICAgUG9zaXRpb24gZW5kT2ZD
dXJyZW50UGFyYWdyYXBoOworICAgIFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zSW5D
dXJyZW50UGFyYWdyYXBoOwogICAgIFJlZlB0cjxFbGVtZW50PiBlbmNsb3NpbmdJdGVtQm91bmRh
cnlFbGVtZW50OwogCi0gICAgYXV0byBpc0VuY2xvc2luZ0l0ZW1Cb3VuZGFyeUVsZW1lbnQgPSBb
XShjb25zdCBFbGVtZW50JiBlbGVtZW50KSB7Ci0gICAgICAgIGF1dG8qIHJlbmRlcmVyID0gZWxl
bWVudC5yZW5kZXJlcigpOwotICAgICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIGF1dG8gcm9sZSA9IFtdKGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQpIC0+IEFjY2Vzc2liaWxpdHlSb2xlIHsKLSAgICAgICAgICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5T2JqZWN0OjphcmlhUm9sZVRvV2ViQ29yZVJvbGUoZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6cm9sZUF0dHIpKTsKLSAgICAgICAgfTsKLQotICAg
ICAgICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnV0dG9uVGFnKSB8fCByb2xl
KGVsZW1lbnQpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpCdXR0b24pCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlU
YWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmFUYWcpKSB7Ci0gICAgICAgICAg
ICBhdXRvIGRpc3BsYXlUeXBlID0gcmVuZGVyZXItPnN0eWxlKCkuZGlzcGxheSgpOwotICAgICAg
ICAgICAgaWYgKGRpc3BsYXlUeXBlID09IERpc3BsYXlUeXBlOjpCbG9jayB8fCBkaXNwbGF5VHlw
ZSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lQmxvY2spCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgZm9yICg7ICFpdGVyYXRvci5hdEVuZCgpOyBpdGVyYXRvci5hZHZhbmNlKCkpIHsK
KyAgICAgICAgYXV0byBjb250ZW50ID0gaXRlcmF0b3IuY3VycmVudENvbnRlbnQoKTsKKyAgICAg
ICAgYXV0byogY29udGVudE5vZGUgPSBjb250ZW50Lm5vZGUuZ2V0KCk7CisgICAgICAgIEFTU0VS
VChjb250ZW50Tm9kZSk7CiAKLSAgICAgICAgICAgIGZvciAoYXV0byBwYXJlbnQgPSBtYWtlUmVm
UHRyKGVsZW1lbnQucGFyZW50RWxlbWVudCgpKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBh
cmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpuYXZUYWcpIHx8IHJvbGUoKnBhcmVudCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6
OkxhbmRtYXJrTmF2aWdhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICB9CisgICAgICAgIGlmIChlbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50ICYm
ICFlbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50LT5jb250YWlucyhjb250ZW50Tm9kZSkpIHsK
KyAgICAgICAgICAgIGlmICghdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgc3RhcnRPZkN1cnJl
bnRQYXJhZ3JhcGgsIGVuZE9mQ3VycmVudFBhcmFncmFwaCwgbnVsbHB0ciwgbnVsbFFOYW1lKCks
IHN0ZDo6ZXhjaGFuZ2UodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLCB7IH0pIH0pOworICAgICAg
ICAgICAgZW5jbG9zaW5nSXRlbUJvdW5kYXJ5RWxlbWVudCA9IG51bGxwdHI7CiAgICAgICAgIH0K
IAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLQotICAgIGZvciAoOyAhaXRlcmF0b3Iu
YXRFbmQoKTsgaXRlcmF0b3IuYWR2YW5jZSgpKSB7Ci0gICAgICAgIGF1dG8gY29udGVudCA9IGl0
ZXJhdG9yLmN1cnJlbnRDb250ZW50KCk7Ci0gICAgICAgIGlmIChjb250ZW50Lm5vZGUpIHsKLSAg
ICAgICAgICAgIGlmIChlbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50ICYmICFlbmNsb3NpbmdJ
dGVtQm91bmRhcnlFbGVtZW50LT5jb250YWlucyhjb250ZW50Lm5vZGUuZ2V0KCkpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCF0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgc3RhcnRPZkN1
cnJlbnRQYXJhZ3JhcGgsIGVuZE9mQ3VycmVudFBhcmFncmFwaCwgbnVsbHB0ciwgbnVsbFFOYW1l
KCksIHN0ZDo6ZXhjaGFuZ2UodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLCB7IH0pIH0pOwotICAg
ICAgICAgICAgICAgIGVuY2xvc2luZ0l0ZW1Cb3VuZGFyeUVsZW1lbnQgPSBudWxscHRyOwotICAg
ICAgICAgICAgfQorICAgICAgICBpZiAoUmVmUHRyPEVsZW1lbnQ+IGN1cnJlbnRFbGVtZW50QW5j
ZXN0b3IgPSBpczxFbGVtZW50PigqY29udGVudE5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4oY29u
dGVudE5vZGUpIDogY29udGVudE5vZGUtPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKSkgewor
ICAgICAgICAgICAgLy8gV2UgY2FuIGV4aXQgZWFybHkgaGVyZSBiZWNhdXNlIHNjaGVkdWxlT2Jz
ZXJ2YXRpb25VcGRhdGUgY2FsbHMgdGhpcyBmdW5jdGlvbiBvbiBlYWNoIHBhcmFncmFwaCBzZXBh
cmF0ZWx5LgorICAgICAgICAgICAgaWYgKGlzSW5NYW5pcHVsYXRlZEVsZW1lbnQoKmN1cnJlbnRF
bGVtZW50QW5jZXN0b3IpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAoUmVmUHRyPEVsZW1lbnQ+IGN1cnJlbnRFbGVtZW50QW5jZXN0b3IgPSBp
czxFbGVtZW50PigqY29udGVudC5ub2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KGNvbnRlbnQubm9k
ZS5nZXQoKSkgOiBjb250ZW50Lm5vZGUtPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKSkgewot
ICAgICAgICAgICAgICAgIGlmIChpc0luTWFuaXB1bGF0ZWRFbGVtZW50KCpjdXJyZW50RWxlbWVu
dEFuY2VzdG9yKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBXZSBjYW4gZXhpdCBl
YXJseSBoZXJlIGJlY2F1c2Ugc2NoZWR1bGVPYnNlcnZhcnRpb25VcGRhdGUgY2FsbHMgdGhpcyBm
dW5jdGlvbiBvbiBlYWNoIHBhcmFncmFwaCBzZXBhcmF0ZWx5LgotICAgICAgICAgICAgfQorICAg
ICAgICBpZiAoaXM8RWxlbWVudD4oKmNvbnRlbnROb2RlKSkgeworICAgICAgICAgICAgYXV0byYg
Y3VycmVudEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqY29udGVudE5vZGUpOworICAgICAg
ICAgICAgaWYgKCFjb250ZW50LmlzVGV4dENvbnRlbnQgJiYgY2FuUGVyZm9ybVRleHRNYW5pcHVs
YXRpb25CeVJlcGxhY2luZ0VudGlyZVRleHRDb250ZW50KGN1cnJlbnRFbGVtZW50KSkKKyAgICAg
ICAgICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgUG9zaXRpb24oKSwgUG9z
aXRpb24oKSwgbWFrZVdlYWtQdHIoY3VycmVudEVsZW1lbnQpLCBudWxsUU5hbWUoKSwgeyBNYW5p
cHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIGN1cnJlbnRFbGVt
ZW50LnRleHRDb250ZW50KCksIHRva2VuSW5mbygmY3VycmVudEVsZW1lbnQpIH0gfSB9KTsKIAot
ICAgICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpjb250ZW50Lm5vZGUpKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byYgY3VycmVudEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqY29udGVudC5u
b2RlKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnQuaXNUZXh0Q29udGVudCAmJiBjYW5Q
ZXJmb3JtVGV4dE1hbmlwdWxhdGlvbkJ5UmVwbGFjaW5nRW50aXJlVGV4dENvbnRlbnQoY3VycmVu
dEVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZEl0ZW0oTWFuaXB1bGF0aW9uSXRl
bURhdGEgeyBQb3NpdGlvbigpLCBQb3NpdGlvbigpLCBtYWtlV2Vha1B0cihjdXJyZW50RWxlbWVu
dCksIG51bGxRTmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgeyBNYW5pcHVsYXRpb25U
b2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIGN1cnJlbnRFbGVtZW50LnRleHRD
b250ZW50KCksIHRva2VuSW5mbygmY3VycmVudEVsZW1lbnQpIH0gfSB9KTsKKyAgICAgICAgICAg
IGlmIChjdXJyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGN1cnJlbnRFbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0F0dHJpYnV0ZUZvclRleHRNYW5pcHVsYXRp
b24oY3VycmVudEVsZW1lbnQsIGF0dHJpYnV0ZS5uYW1lKCkpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkSXRlbShNYW5pcHVsYXRpb25JdGVtRGF0YSB7IFBvc2l0aW9uKCksIFBvc2l0aW9u
KCksIG1ha2VXZWFrUHRyKGN1cnJlbnRFbGVtZW50KSwgYXR0cmlidXRlLm5hbWUoKSwgeyBNYW5p
cHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIGF0dHJpYnV0ZS52
YWx1ZSgpLCB0b2tlbkluZm8oJmN1cnJlbnRFbGVtZW50KSB9IH0gfSk7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUgOiBjdXJyZW50RWxl
bWVudC5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGlzQXR0cmlidXRlRm9yVGV4dE1hbmlwdWxhdGlvbihjdXJyZW50RWxlbWVudCwgYXR0cmlidXRl
Lm5hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtKE1hbmlwdWxh
dGlvbkl0ZW1EYXRhIHsgUG9zaXRpb24oKSwgUG9zaXRpb24oKSwgbWFrZVdlYWtQdHIoY3VycmVu
dEVsZW1lbnQpLCBhdHRyaWJ1dGUubmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7IE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwg
YXR0cmlidXRlLnZhbHVlKCksIHRva2VuSW5mbygmY3VycmVudEVsZW1lbnQpIH0gfSB9KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWVuY2xvc2luZ0l0ZW1Cb3VuZGFyeUVsZW1l
bnQgJiYgaXNFbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50KGN1cnJlbnRFbGVtZW50KSkKLSAg
ICAgICAgICAgICAgICAgICAgZW5jbG9zaW5nSXRlbUJvdW5kYXJ5RWxlbWVudCA9ICZjdXJyZW50
RWxlbWVudDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZW5jbG9zaW5nSXRlbUJv
dW5kYXJ5RWxlbWVudCAmJiBpc0VuY2xvc2luZ0l0ZW1Cb3VuZGFyeUVsZW1lbnQoY3VycmVudEVs
ZW1lbnQpKQorICAgICAgICAgICAgICAgIGVuY2xvc2luZ0l0ZW1Cb3VuZGFyeUVsZW1lbnQgPSAm
Y3VycmVudEVsZW1lbnQ7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY29udGVudC5pc1JlcGxh
Y2VkQ29udGVudCkgewotICAgICAgICAgICAgaWYgKHRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5p
c0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGF1dG8g
Y3VycmVudEVuZE9mQ3VycmVudFBhcmFncmFwaCA9IHBvc2l0aW9uQWZ0ZXJOb2RlKGNvbnRlbnQu
bm9kZS5nZXQoKSk7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGF0IHRoZSBzYW1lIE5vZGUgYXMg
bGFzdCB0b2tlbiwgc28gaXQgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBjdXJyZW50IHJhbmdlLgot
ICAgICAgICAgICAgaWYgKCFpczxUZXh0Pihjb250ZW50Lm5vZGUpICYmIGN1cnJlbnRFbmRPZkN1
cnJlbnRQYXJhZ3JhcGguZXF1YWxzKGVuZE9mQ3VycmVudFBhcmFncmFwaCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IGN1
cnJlbnRFbmRPZkN1cnJlbnRQYXJhZ3JhcGg7Ci0gICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRQ
YXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2Vu
ZXJhdGUoKSwgIltdIiwgdG9rZW5JbmZvKGNvbnRlbnQubm9kZS5nZXQoKSksIHRydWUgfSk7Ci0K
KyAgICAgICAgICAgIGlmICghdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5hcHBlbmQoTWFuaXB1bGF0
aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5lcmF0ZSgpLCAiW10iLCB0b2tlbkluZm8o
Y29udGVudC5ub2RlLmdldCgpKSwgdHJ1ZSB9KTsKKyAgICAgICAgICAgICAgICBlbmRPZkN1cnJl
bnRQYXJhZ3JhcGggPSBwb3NpdGlvbkFmdGVyTm9kZShjb250ZW50Tm9kZSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghY29u
dGVudC5pc1RleHRDb250ZW50KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc2l6
ZV90IHN0YXJ0T2ZDdXJyZW50TGluZSA9IDA7Ci0gICAgICAgIHNpemVfdCBvZmZzZXRPZk5leHRO
ZXdMaW5lID0gMDsKLSAgICAgICAgU3RyaW5nVmlldyBjdXJyZW50VGV4dCA9IGNvbnRlbnQudGV4
dDsKLSAgICAgICAgd2hpbGUgKChvZmZzZXRPZk5leHROZXdMaW5lID0gY3VycmVudFRleHQuZmlu
ZCgnXG4nLCBzdGFydE9mQ3VycmVudExpbmUpKSAhPSBub3RGb3VuZCkgewotICAgICAgICAgICAg
aWYgKGlzPFRleHQ+KGNvbnRlbnQubm9kZSkgJiYgc3RhcnRPZkN1cnJlbnRMaW5lIDwgb2Zmc2V0
T2ZOZXh0TmV3TGluZSkgewotICAgICAgICAgICAgICAgIGF1dG8gc3RyaW5nVW50aWxFbmRPZkxp
bmUgPSBjdXJyZW50VGV4dC5zdWJzdHJpbmcoc3RhcnRPZkN1cnJlbnRMaW5lLCBvZmZzZXRPZk5l
eHROZXdMaW5lIC0gc3RhcnRPZkN1cnJlbnRMaW5lKS50b1N0cmluZygpOwotICAgICAgICAgICAg
ICAgIGF1dG8mIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKmNvbnRlbnQubm9kZSk7Ci0gICAg
ICAgICAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gUG9zaXRpb24oJnRleHROb2RlLCBv
ZmZzZXRPZk5leHROZXdMaW5lKTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW5zSW5DdXJyZW50
UGFyYWdyYXBoLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRQ
YXJhZ3JhcGggPSBQb3NpdGlvbigmdGV4dE5vZGUsIHN0YXJ0T2ZDdXJyZW50TGluZSk7Ci0KLSAg
ICAgICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlv
blRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgc3RyaW5nVW50aWxFbmRPZkxp
bmUsIHRva2VuSW5mbygmdGV4dE5vZGUpLCBleGNsdXNpb25SdWxlTWF0Y2hlci5pc0V4Y2x1ZGVk
KGNvbnRlbnQubm9kZS5nZXQoKSkgfSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGF1dG8gdG9r
ZW5zSW5DdXJyZW50Tm9kZSA9IHBhcnNlKGNvbnRlbnQudGV4dCwgY29udGVudE5vZGUpOworICAg
ICAgICBpZiAoIXRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkgJiYgdG9rZW5zSW5D
dXJyZW50Tm9kZS5maXJzdFRva2VuQ29udGFpbnNMaW5lQnJlYWspCisgICAgICAgICAgICBhZGRJ
dGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgsIGVuZE9m
Q3VycmVudFBhcmFncmFwaCwgbnVsbHB0ciwgbnVsbFFOYW1lKCksIHN0ZDo6ZXhjaGFuZ2UodG9r
ZW5zSW5DdXJyZW50UGFyYWdyYXBoLCB7IH0pIH0pOwogCi0gICAgICAgICAgICBpZiAoIXRva2Vu
c0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXM8
SFRNTEJSRWxlbWVudD4oY29udGVudC5ub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgZW5kT2ZD
dXJyZW50UGFyYWdyYXBoID0gcG9zaXRpb25BZnRlck5vZGUoY29udGVudC5ub2RlLmdldCgpKTsK
LSAgICAgICAgICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgc3RhcnRPZkN1
cnJlbnRQYXJhZ3JhcGgsIGVuZE9mQ3VycmVudFBhcmFncmFwaCwgbnVsbHB0ciwgbnVsbFFOYW1l
KCksIHN0ZDo6ZXhjaGFuZ2UodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLCB7IH0pIH0pOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRMaW5lID0gb2Zmc2V0T2ZOZXh0
TmV3TGluZSArIDE7CisgICAgICAgIGlmICh0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBpZiAodG9rZW5zSW5DdXJyZW50Tm9kZS5jb250YWluc09ubHlI
VE1MU3BhY2UpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBzdGFydE9m
Q3VycmVudFBhcmFncmFwaCA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShjb250ZW50Tm9k
ZSk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIHJlbWFpbmluZ1RleHQgPSBjdXJyZW50VGV4
dC5zdWJzdHJpbmcoc3RhcnRPZkN1cnJlbnRMaW5lKTsKLSAgICAgICAgaWYgKCFjb250YWluc09u
bHlIVE1MU3BhY2VzKHJlbWFpbmluZ1RleHQpKSB7Ci0gICAgICAgICAgICBpZiAodG9rZW5zSW5D
dXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGlmIChzdGFydE9m
Q3VycmVudExpbmUgJiYgaXM8VGV4dD4oY29udGVudC5ub2RlKSkKLSAgICAgICAgICAgICAgICAg
ICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBQb3NpdGlvbigmZG93bmNhc3Q8VGV4dD4oKmNv
bnRlbnQubm9kZSksIHN0YXJ0T2ZDdXJyZW50TGluZSk7Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBzdGFydE9mQ3VycmVudFBhcmFncmFwaCA9IGl0ZXJhdG9yLnN0
YXJ0UG9zaXRpb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVuZE9mQ3VycmVudFBh
cmFncmFwaCA9IGl0ZXJhdG9yLmVuZFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICB0b2tlbnNJbkN1
cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZp
ZXIuZ2VuZXJhdGUoKSwgcmVtYWluaW5nVGV4dC50b1N0cmluZygpLCB0b2tlbkluZm8oY29udGVu
dC5ub2RlLmdldCgpKSwgZXhjbHVzaW9uUnVsZU1hdGNoZXIuaXNFeGNsdWRlZChjb250ZW50Lm5v
ZGUuZ2V0KCkpIH0pOworICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kVmVj
dG9yKHRva2Vuc0luQ3VycmVudE5vZGUudG9rZW5zKTsKKyAgICAgICAgZW5kT2ZDdXJyZW50UGFy
YWdyYXBoID0gcG9zaXRpb25BZnRlck5vZGUoY29udGVudE5vZGUpOworCisgICAgICAgIGlmICgh
dG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSAmJiB0b2tlbnNJbkN1cnJlbnROb2Rl
Lmxhc3RUb2tlbkNvbnRhaW5zTGluZUJyZWFrKSB7CisgICAgICAgICAgICBBU1NFUlQoIXRva2Vu
c0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpOworICAgICAgICAgICAgYWRkSXRlbShNYW5p
cHVsYXRpb25JdGVtRGF0YSB7IHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLCBlbmRPZkN1cnJlbnRQ
YXJhZ3JhcGgsIG51bGxwdHIsIG51bGxRTmFtZSgpLCBzdGQ6OmV4Y2hhbmdlKHRva2Vuc0luQ3Vy
cmVudFBhcmFncmFwaCwgeyB9KSB9KTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghdG9r
ZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkKLSAgICAgICAgYWRkSXRlbShNYW5pcHVs
YXRpb25JdGVtRGF0YSB7IHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLCBlbmRPZkN1cnJlbnRQYXJh
Z3JhcGgsIG51bGxwdHIsIG51bGxRTmFtZSgpLCBXVEZNb3ZlKHRva2Vuc0luQ3VycmVudFBhcmFn
cmFwaCkgfSk7CisgICAgICAgIGFkZEl0ZW0oTWFuaXB1bGF0aW9uSXRlbURhdGEgeyBzdGFydE9m
Q3VycmVudFBhcmFncmFwaCwgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBudWxscHRyLCBudWxsUU5h
bWUoKSwgc3RkOjpleGNoYW5nZSh0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGgsIHsgfSkgfSk7CiB9
CiAKIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmRpZENyZWF0ZVJlbmRlcmVyRm9y
RWxlbWVudChFbGVtZW50JiBlbGVtZW50KQpAQCAtNDg5LDYgKzQ5OSw3IEBAIHZvaWQgVGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6OmFkZEl0ZW0oTWFuaXB1bGF0aW9uSXRlbURhdGEmJiBpdGVt
RGF0YSkKICAgICBjb25zdCB1bnNpZ25lZCBpdGVtQ2FsbGJhY2tCYXRjaGluZ1NpemUgPSAxMjg7
CiAKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CisgICAgQVNTRVJUKCFpdGVtRGF0YS50b2tlbnMu
aXNFbXB0eSgpKTsKICAgICBhdXRvIG5ld0lEID0gbV9pdGVtSWRlbnRpZmllci5nZW5lcmF0ZSgp
OwogICAgIG1fcGVuZGluZ0l0ZW1zRm9yQ2FsbGJhY2suYXBwZW5kKE1hbmlwdWxhdGlvbkl0ZW0g
ewogICAgICAgICBuZXdJRCwKQEAgLTU1Niw5ICs1NjcsNiBAQCBhdXRvIFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpyZXBsYWNlKGNvbnN0IE1hbmlwdWxhdGlvbkl0ZW1EYXRhJiBpdGVtLCBj
b25zdAogICAgIGlmIChpdGVtLnN0YXJ0LmlzT3JwaGFuKCkgfHwgaXRlbS5lbmQuaXNPcnBoYW4o
KSkKICAgICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpDb250ZW50Q2hhbmdl
ZDsKIAotICAgIHNpemVfdCBjdXJyZW50VG9rZW5JbmRleCA9IDA7Ci0gICAgSGFzaE1hcDxUb2tl
bklkZW50aWZpZXIsIFRva2VuRXhjaGFuZ2VEYXRhPiB0b2tlbkV4Y2hhbmdlTWFwOwotCiAgICAg
aWYgKGl0ZW0uc3RhcnQuaXNOdWxsKCkgfHwgaXRlbS5lbmQuaXNOdWxsKCkpIHsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaXRlbS50b2tlbnMuc2l6ZSgpID09IDEpOwogICAgICAgICBhdXRvIGVs
ZW1lbnQgPSBtYWtlUmVmUHRyKGl0ZW0uZWxlbWVudC5nZXQoKSk7CkBAIC01ODIsMTIzICs1OTAs
MTY3IEBAIGF1dG8gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UoY29uc3QgTWFu
aXB1bGF0aW9uSXRlbURhdGEmIGl0ZW0sIGNvbnN0CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgfQogCisgICAgc2l6ZV90IGN1cnJlbnRUb2tlbkluZGV4ID0gMDsKKyAgICBIYXNo
TWFwPFRva2VuSWRlbnRpZmllciwgVG9rZW5FeGNoYW5nZURhdGE+IHRva2VuRXhjaGFuZ2VNYXA7
CiAgICAgUmVmUHRyPE5vZGU+IGNvbW1vbkFuY2VzdG9yOwogICAgIFJlZlB0cjxOb2RlPiBmaXJz
dENvbnRlbnROb2RlOwotICAgIFBhcmFncmFwaENvbnRlbnRJdGVyYXRvciBpdGVyYXRvciB7IGl0
ZW0uc3RhcnQsIGl0ZW0uZW5kIH07Ci0gICAgSGFzaFNldDxSZWY8Tm9kZT4+IGV4Y2x1ZGVkTm9k
ZXM7CisgICAgUmVmUHRyPE5vZGU+IGxhc3RDaGlsZE9mQW5jZXN0b3I7CiAgICAgSGFzaFNldDxS
ZWY8Tm9kZT4+IG5vZGVzVG9SZW1vdmU7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGVUb0luc2VydEJh
Y2tBdEVuZDsKKyAgICBQYXJhZ3JhcGhOb2RlSXRlcmF0b3IgaXRlcmF0b3IgeyBpdGVtLnN0YXJ0
LCBpdGVtLmVuZCB9OwogICAgIGZvciAoOyAhaXRlcmF0b3IuYXRFbmQoKTsgaXRlcmF0b3IuYWR2
YW5jZSgpKSB7CiAgICAgICAgIGF1dG8gY29udGVudCA9IGl0ZXJhdG9yLmN1cnJlbnRDb250ZW50
KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29udGVudC5ub2RlKQotICAgICAgICAgICAgbm9k
ZXNUb1JlbW92ZS5hZGQoKmNvbnRlbnQubm9kZSk7CisgICAgICAgIEFTU0VSVChjb250ZW50Lm5v
ZGUpOworCisgICAgICAgIGxhc3RDaGlsZE9mQW5jZXN0b3IgPSBjb250ZW50Lm5vZGU7CisgICAg
ICAgIG5vZGVzVG9SZW1vdmUuYWRkKCpjb250ZW50Lm5vZGUpOwogCiAgICAgICAgIGlmICghY29u
dGVudC5pc1JlcGxhY2VkQ29udGVudCAmJiAhY29udGVudC5pc1RleHRDb250ZW50KQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGN1cnJlbnRUb2tlbkluZGV4ID49IGl0ZW0u
dG9rZW5zLnNpemUoKSkgewotICAgICAgICAgICAgaWYgKGNvbnRlbnQubm9kZSAmJiAhbm9kZVRv
SW5zZXJ0QmFja0F0RW5kICYmIGNvbnRlbnQuaXNUZXh0Q29udGVudCAmJiBjb250ZW50LnRleHQg
PT0gIlxuIikgeyAvLyBicgotICAgICAgICAgICAgICAgIG5vZGVUb0luc2VydEJhY2tBdEVuZCA9
IGNvbnRlbnQubm9kZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTo6Q29udGVudENoYW5n
ZWQ7Ci0gICAgICAgIH0KKyAgICAgICAgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiB0b2tlbnNJ
bkN1cnJlbnROb2RlOworICAgICAgICBpZiAoY29udGVudC5pc1JlcGxhY2VkQ29udGVudCkKKyAg
ICAgICAgICAgIHRva2Vuc0luQ3VycmVudE5vZGUuYXBwZW5kKGl0ZW0udG9rZW5zW2N1cnJlbnRU
b2tlbkluZGV4XSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudE5v
ZGUgPSBwYXJzZShjb250ZW50LnRleHQsIGNvbnRlbnQubm9kZS5nZXQoKSkudG9rZW5zOwogCi0g
ICAgICAgIGlmIChjb250ZW50LmlzVGV4dENvbnRlbnQgJiYgY29udGFpbnNPbmx5SFRNTFNwYWNl
cyhjb250ZW50LnRleHQpKSB7Ci0gICAgICAgICAgICAvLyA8YnI+IHNob3VsZCBub3QgZXhpc3Qg
aW4gdGhlIG1pZGRsZSBvZiBhIHBhcmFncmFwaC4KLSAgICAgICAgICAgIGlmIChpczxIVE1MQlJF
bGVtZW50Pihjb250ZW50Lm5vZGUpKQorICAgICAgICBib29sIGlzTm9kZUluY2x1ZGVkID0gV1RG
OjphbnlPZih0b2tlbnNJbkN1cnJlbnROb2RlLCBbXSAoYXV0byYgdG9rZW4pIHsKKyAgICAgICAg
ICAgIHJldHVybiAhdG9rZW4uaXNFeGNsdWRlZDsKKyAgICAgICAgfSk7CisgICAgICAgIGZvciAo
YXV0byYgdG9rZW4gOiB0b2tlbnNJbkN1cnJlbnROb2RlKSB7CisgICAgICAgICAgICBpZiAoY3Vy
cmVudFRva2VuSW5kZXggPiBpdGVtLnRva2Vucy5zaXplKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpDb250ZW50Q2hhbmdlZDsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9CiAKLSAgICAgICAgYXV0byYgY3VycmVudFRva2VuID0gaXRl
bS50b2tlbnNbY3VycmVudFRva2VuSW5kZXhdOwotICAgICAgICBpZiAoIWNvbnRlbnQuaXNSZXBs
YWNlZENvbnRlbnQgJiYgY29udGVudC50ZXh0ICE9IGN1cnJlbnRUb2tlbi5jb250ZW50KQotICAg
ICAgICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpDb250ZW50Q2hhbmdlZDsK
KyAgICAgICAgICAgIGF1dG8mIGN1cnJlbnRUb2tlbiA9IGl0ZW0udG9rZW5zW2N1cnJlbnRUb2tl
bkluZGV4KytdOworICAgICAgICAgICAgaWYgKCFjb250ZW50LmlzUmVwbGFjZWRDb250ZW50ICYm
IGN1cnJlbnRUb2tlbi5jb250ZW50ICE9IHRva2VuLmNvbnRlbnQpCisgICAgICAgICAgICAgICAg
cmV0dXJuIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpDb250ZW50Q2hhbmdlZDsKKworICAgICAg
ICAgICAgdG9rZW5FeGNoYW5nZU1hcC5zZXQoY3VycmVudFRva2VuLmlkZW50aWZpZXIsIFRva2Vu
RXhjaGFuZ2VEYXRhIHsgY29udGVudC5ub2RlLmNvcHlSZWYoKSwgY3VycmVudFRva2VuLmNvbnRl
bnQsICFpc05vZGVJbmNsdWRlZCB9KTsKKyAgICAgICAgfQogCi0gICAgICAgIHRva2VuRXhjaGFu
Z2VNYXAuc2V0KGN1cnJlbnRUb2tlbi5pZGVudGlmaWVyLCBUb2tlbkV4Y2hhbmdlRGF0YSB7IGNv
bnRlbnQubm9kZS5jb3B5UmVmKCksIGN1cnJlbnRUb2tlbi5jb250ZW50LCBjdXJyZW50VG9rZW4u
aXNFeGNsdWRlZCB9KTsKLSAgICAgICAgKytjdXJyZW50VG9rZW5JbmRleDsKLSAgICAgICAgCiAg
ICAgICAgIGlmICghZmlyc3RDb250ZW50Tm9kZSkKICAgICAgICAgICAgIGZpcnN0Q29udGVudE5v
ZGUgPSBjb250ZW50Lm5vZGU7CiAKLSAgICAgICAgLy8gRklYTUU6IFRha2UgY2FyZSBvZiB3aGVu
IGN1cnJlbnROb2RlIGlzIG51bGxwdHIuCi0gICAgICAgIGlmIChSZWZQdHI8Tm9kZT4gcGFyZW50
ID0gY29udGVudC5ub2RlID8gY29udGVudC5ub2RlLT5wYXJlbnROb2RlKCkgOiBudWxscHRyKSB7
Ci0gICAgICAgICAgICBpZiAoIWNvbW1vbkFuY2VzdG9yKQotICAgICAgICAgICAgICAgIGNvbW1v
bkFuY2VzdG9yID0gcGFyZW50OwotICAgICAgICAgICAgZWxzZSBpZiAoIXBhcmVudC0+aXNEZXNj
ZW5kYW50T2YoY29tbW9uQW5jZXN0b3IuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgY29tbW9u
QW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqY29tbW9uQW5jZXN0b3IsICpwYXJl
bnQpOwotICAgICAgICAgICAgICAgIEFTU0VSVChjb21tb25BbmNlc3Rvcik7Ci0gICAgICAgICAg
ICB9CisgICAgICAgIGF1dG8gcGFyZW50Tm9kZSA9IGNvbnRlbnQubm9kZS0+cGFyZW50Tm9kZSgp
OworICAgICAgICBpZiAoIWNvbW1vbkFuY2VzdG9yKQorICAgICAgICAgICAgY29tbW9uQW5jZXN0
b3IgPSBwYXJlbnROb2RlOworICAgICAgICBlbHNlIGlmICghcGFyZW50Tm9kZS0+aXNEZXNjZW5k
YW50T2YoY29tbW9uQW5jZXN0b3IuZ2V0KCkpKSB7CisgICAgICAgICAgICBjb21tb25BbmNlc3Rv
ciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKCpjb21tb25BbmNlc3RvciwgKnBhcmVudE5vZGUp
OworICAgICAgICAgICAgQVNTRVJUKGNvbW1vbkFuY2VzdG9yKTsKICAgICAgICAgfQogICAgIH0K
IAorICAgIHdoaWxlIChsYXN0Q2hpbGRPZkFuY2VzdG9yICYmIGxhc3RDaGlsZE9mQW5jZXN0b3It
PnBhcmVudE5vZGUoKSAhPSBjb21tb25BbmNlc3RvcikKKyAgICAgICAgbGFzdENoaWxkT2ZBbmNl
c3RvciA9IGxhc3RDaGlsZE9mQW5jZXN0b3ItPnBhcmVudE5vZGUoKTsKKwogICAgIGZvciAoYXV0
byBub2RlID0gY29tbW9uQW5jZXN0b3I7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkp
CiAgICAgICAgIG5vZGVzVG9SZW1vdmUucmVtb3ZlKCpub2RlKTsKIAotICAgIFZlY3RvcjxSZWY8
Tm9kZT4+IGN1cnJlbnRFbGVtZW50U3RhY2s7CiAgICAgSGFzaFNldDxSZWY8Tm9kZT4+IHJldXNl
ZE9yaWdpbmFsTm9kZXM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWY8Tm9kZT4sIFJlZjxOb2Rl
Pj4+IGxhc3RUb3BEb3duUGF0aDsKICAgICBWZWN0b3I8Tm9kZUluc2VydGlvbj4gaW5zZXJ0aW9u
czsKLSAgICBmb3IgKGF1dG8mIG5ld1Rva2VuIDogcmVwbGFjZW1lbnRUb2tlbnMpIHsKLSAgICAg
ICAgYXV0byBpdCA9IHRva2VuRXhjaGFuZ2VNYXAuZmluZChuZXdUb2tlbi5pZGVudGlmaWVyKTsK
KyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcmVwbGFjZW1lbnRUb2tlbnMuc2l6
ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGF1dG8mIHJlcGxhY2VtZW50VG9rZW4gPSByZXBsYWNl
bWVudFRva2Vuc1tpbmRleF07CisgICAgICAgIGF1dG8gaXQgPSB0b2tlbkV4Y2hhbmdlTWFwLmZp
bmQocmVwbGFjZW1lbnRUb2tlbi5pZGVudGlmaWVyKTsKICAgICAgICAgaWYgKGl0ID09IHRva2Vu
RXhjaGFuZ2VNYXAuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gTWFuaXB1bGF0aW9uRmFpbHVy
ZVR5cGU6OkludmFsaWRUb2tlbjsKIAogICAgICAgICBhdXRvJiBleGNoYW5nZURhdGEgPSBpdC0+
dmFsdWU7CisgICAgICAgIGF1dG8qIG9yaWdpbmFsTm9kZSA9IGV4Y2hhbmdlRGF0YS5ub2RlLmdl
dCgpOworICAgICAgICBBU1NFUlQob3JpZ2luYWxOb2RlKTsKIAotICAgICAgICBSZWZQdHI8Tm9k
ZT4gY29udGVudE5vZGU7CisgICAgICAgIGF1dG8gcmVwbGFjZW1lbnRUZXh0ID0gcmVwbGFjZW1l
bnRUb2tlbi5jb250ZW50OworCisgICAgICAgIEV4Y2x1c2lvblJ1bGVNYXRjaGVyIGV4Y2x1c2lv
blJ1bGVNYXRjaGVyKG1fZXhjbHVzaW9uUnVsZXMpOworICAgICAgICBSZWZQdHI8Tm9kZT4gcmVw
bGFjZW1lbnROb2RlOwogICAgICAgICBpZiAoZXhjaGFuZ2VEYXRhLmlzRXhjbHVkZWQpIHsKICAg
ICAgICAgICAgIGlmIChleGNoYW5nZURhdGEuaXNDb25zdW1lZCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gTWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU6OkV4Y2x1c2lvblZpb2xhdGlvbjsKICAgICAg
ICAgICAgIGV4Y2hhbmdlRGF0YS5pc0NvbnN1bWVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmICgh
bmV3VG9rZW4uY29udGVudC5pc051bGwoKSAmJiBuZXdUb2tlbi5jb250ZW50ICE9IGV4Y2hhbmdl
RGF0YS5vcmlnaW5hbENvbnRlbnQpCisKKyAgICAgICAgICAgIGlmICghcmVwbGFjZW1lbnRUb2tl
bi5jb250ZW50LmlzTnVsbCgpICYmIHJlcGxhY2VtZW50VG9rZW4uY29udGVudCAhPSBleGNoYW5n
ZURhdGEub3JpZ2luYWxDb250ZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBNYW5pcHVsYXRp
b25GYWlsdXJlVHlwZTo6RXhjbHVzaW9uVmlvbGF0aW9uOwotICAgICAgICAgICAgY29udGVudE5v
ZGUgPSBleGNoYW5nZURhdGEubm9kZTsKLSAgICAgICAgICAgIGZvciAoUmVmUHRyPE5vZGU+IGN1
cnJlbnREZXNjZW5kZW50Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKmNvbnRlbnROb2RlLCBj
b250ZW50Tm9kZS5nZXQoKSk7IGN1cnJlbnREZXNjZW5kZW50Tm9kZTsgY3VycmVudERlc2NlbmRl
bnROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqY3VycmVudERlc2NlbmRlbnROb2RlLCBjb250
ZW50Tm9kZS5nZXQoKSkpCi0gICAgICAgICAgICAgICAgbm9kZXNUb1JlbW92ZS5yZW1vdmUoKmN1
cnJlbnREZXNjZW5kZW50Tm9kZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY29udGVu
dE5vZGUgPSBUZXh0OjpjcmVhdGUoY29tbW9uQW5jZXN0b3ItPmRvY3VtZW50KCksIG5ld1Rva2Vu
LmNvbnRlbnQpOwogCi0gICAgICAgIGF1dG8mIG9yaWdpbmFsTm9kZSA9IGV4Y2hhbmdlRGF0YS5u
b2RlID8gKmV4Y2hhbmdlRGF0YS5ub2RlIDogKmNvbW1vbkFuY2VzdG9yOwotICAgICAgICBSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gY3VycmVudE5vZGUgPSBpczxDb250YWluZXJOb2RlPihvcmlnaW5h
bE5vZGUpID8gJmRvd25jYXN0PENvbnRhaW5lck5vZGU+KG9yaWdpbmFsTm9kZSkgOiBvcmlnaW5h
bE5vZGUucGFyZW50Tm9kZSgpOworICAgICAgICAgICAgcmVwbGFjZW1lbnROb2RlID0gb3JpZ2lu
YWxOb2RlOworICAgICAgICAgICAgZm9yIChSZWZQdHI8Tm9kZT4gZGVzY2VuZGVudE5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KCpvcmlnaW5hbE5vZGUsIG9yaWdpbmFsTm9kZSk7IGRlc2NlbmRl
bnROb2RlOyBkZXNjZW5kZW50Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKmRlc2NlbmRlbnRO
b2RlLCBvcmlnaW5hbE5vZGUpKQorICAgICAgICAgICAgICAgIG5vZGVzVG9SZW1vdmUucmVtb3Zl
KCpkZXNjZW5kZW50Tm9kZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVwbGFjZW1l
bnROb2RlID0gVGV4dDo6Y3JlYXRlKGNvbW1vbkFuY2VzdG9yLT5kb2N1bWVudCgpLCByZXBsYWNl
bWVudFRleHQpOwogCi0gICAgICAgIFZlY3RvcjxSZWY8Tm9kZT4+IGN1cnJlbnRBbmNlc3RvcnM7
Ci0gICAgICAgIGZvciAoOyBjdXJyZW50Tm9kZSAmJiBjdXJyZW50Tm9kZSAhPSBjb21tb25BbmNl
c3RvcjsgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+cGFyZW50Tm9kZSgpKQotICAgICAgICAg
ICAgY3VycmVudEFuY2VzdG9ycy5hcHBlbmQoKmN1cnJlbnROb2RlKTsKLSAgICAgICAgY3VycmVu
dEFuY2VzdG9ycy5yZXZlcnNlKCk7CisgICAgICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBjb250
YWluZXJOb2RlID0gaXM8Q29udGFpbmVyTm9kZT4oKm9yaWdpbmFsTm9kZSkgPyAmZG93bmNhc3Q8
Q29udGFpbmVyTm9kZT4oKm9yaWdpbmFsTm9kZSkgOiBvcmlnaW5hbE5vZGUtPnBhcmVudE5vZGUo
KTsKKyAgICAgICAgVmVjdG9yPFJlZjxOb2RlPj4gdG9wRG93blBhdGg7CisgICAgICAgIGZvciAo
OyBjb250YWluZXJOb2RlICYmIGNvbnRhaW5lck5vZGUgIT0gY29tbW9uQW5jZXN0b3I7IGNvbnRh
aW5lck5vZGUgPSBjb250YWluZXJOb2RlLT5wYXJlbnROb2RlKCkpCisgICAgICAgICAgICB0b3BE
b3duUGF0aC5hcHBlbmQoKmNvbnRhaW5lck5vZGUpOworICAgICAgICB0b3BEb3duUGF0aC5yZXZl
cnNlKCk7CiAKICAgICAgICAgc2l6ZV90IGkgPTA7Ci0gICAgICAgIHdoaWxlIChpIDwgY3VycmVu
dEVsZW1lbnRTdGFjay5zaXplKCkgJiYgaSA8IGN1cnJlbnRBbmNlc3RvcnMuc2l6ZSgpICYmIGN1
cnJlbnRFbGVtZW50U3RhY2tbaV0ucHRyKCkgPT0gY3VycmVudEFuY2VzdG9yc1tpXS5wdHIoKSkK
KyAgICAgICAgd2hpbGUgKGkgPCBsYXN0VG9wRG93blBhdGguc2l6ZSgpICYmIGkgPCB0b3BEb3du
UGF0aC5zaXplKCkgJiYgbGFzdFRvcERvd25QYXRoW2ldLnNlY29uZC5wdHIoKSA9PSB0b3BEb3du
UGF0aFtpXS5wdHIoKSkKICAgICAgICAgICAgICsraTsKIAotICAgICAgICBpZiAoaSA9PSBjdXJy
ZW50RWxlbWVudFN0YWNrLnNpemUoKSAmJiBpID09IGN1cnJlbnRBbmNlc3RvcnMuc2l6ZSgpKQot
ICAgICAgICAgICAgaW5zZXJ0aW9ucy5hcHBlbmQoTm9kZUluc2VydGlvbiB7IGN1cnJlbnRFbGVt
ZW50U3RhY2suc2l6ZSgpID8gY3VycmVudEVsZW1lbnRTdGFjay5sYXN0KCkucHRyKCkgOiBudWxs
cHRyLCBjb250ZW50Tm9kZS5yZWxlYXNlTm9uTnVsbCgpIH0pOworICAgICAgICBpZiAoaSA9PSBs
YXN0VG9wRG93blBhdGguc2l6ZSgpICYmIGkgPT0gdG9wRG93blBhdGguc2l6ZSgpKQorICAgICAg
ICAgICAgaW5zZXJ0aW9ucy5hcHBlbmQoTm9kZUluc2VydGlvbiB7IGxhc3RUb3BEb3duUGF0aC5z
aXplKCkgPyBsYXN0VG9wRG93blBhdGgubGFzdCgpLnNlY29uZC5wdHIoKSA6IG51bGxwdHIsIHJl
cGxhY2VtZW50Tm9kZS5yZWxlYXNlTm9uTnVsbCgpIH0pOwogICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGlmIChpIDwgY3VycmVudEVsZW1lbnRTdGFjay5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgY3VycmVudEVsZW1lbnRTdGFjay5zaHJpbmsoaSk7Ci0gICAgICAgICAgICBmb3IgKDtpIDwg
Y3VycmVudEFuY2VzdG9ycy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIFJlZjxOb2Rl
PiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRBbmNlc3RvcnNbaV0uY29weVJlZigpOwotICAgICAgICAg
ICAgICAgIGlmICghcmV1c2VkT3JpZ2luYWxOb2Rlcy5hZGQoY3VycmVudE5vZGUuY29weVJlZigp
KS5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY2xvbmVkTm9kZSA9IGN1
cnJlbnROb2RlLT5jbG9uZU5vZGVJbnRlcm5hbChjdXJyZW50Tm9kZS0+ZG9jdW1lbnQoKSwgTm9k
ZTo6Q2xvbmluZ09wZXJhdGlvbjo6T25seVNlbGYpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
YXV0byogZGF0YSA9IGN1cnJlbnROb2RlLT5ldmVudFRhcmdldERhdGEoKSkKKyAgICAgICAgICAg
IGlmIChpIDwgbGFzdFRvcERvd25QYXRoLnNpemUoKSkKKyAgICAgICAgICAgICAgICBsYXN0VG9w
RG93blBhdGguc2hyaW5rKGkpOworCisgICAgICAgICAgICBmb3IgKDtpIDwgdG9wRG93blBhdGgu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBSZWY8Tm9kZT4gbm9kZSA9IHRvcERvd25Q
YXRoW2ldLmNvcHlSZWYoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJldXNlZE9yaWdpbmFsTm9k
ZXMuYWRkKG5vZGUuY29weVJlZigpKS5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAgICAgICAg
IGF1dG8gY2xvbmVkTm9kZSA9IG5vZGUtPmNsb25lTm9kZUludGVybmFsKG5vZGUtPmRvY3VtZW50
KCksIE5vZGU6OkNsb25pbmdPcGVyYXRpb246Ok9ubHlTZWxmKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIGRhdGEgPSBub2RlLT5ldmVudFRhcmdldERhdGEoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGEtPmV2ZW50TGlzdGVuZXJNYXAuY29weUV2ZW50TGlzdGVuZXJzTm90
Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldChjbG9uZWROb2RlLnB0cigpKTsKLSAgICAgICAgICAg
ICAgICAgICAgY3VycmVudE5vZGUgPSBXVEZNb3ZlKGNsb25lZE5vZGUpOworICAgICAgICAgICAg
ICAgICAgICBub2RlID0gV1RGTW92ZShjbG9uZWROb2RlKTsKICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaW5zZXJ0aW9ucy5hcHBlbmQoTm9kZUluc2VydGlvbiB7IGxhc3RUb3BE
b3duUGF0aC5zaXplKCkgPyBsYXN0VG9wRG93blBhdGgubGFzdCgpLnNlY29uZC5wdHIoKSA6IG51
bGxwdHIsIG5vZGUuY29weVJlZigpIH0pOworICAgICAgICAgICAgICAgIGxhc3RUb3BEb3duUGF0
aC5hcHBlbmQoeyB0b3BEb3duUGF0aFtpXS5jb3B5UmVmKCksIFdURk1vdmUobm9kZSkgfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpbnNlcnRpb25zLmFwcGVuZChOb2RlSW5zZXJ0aW9u
IHsgbGFzdFRvcERvd25QYXRoLnNpemUoKSA/IGxhc3RUb3BEb3duUGF0aC5sYXN0KCkuc2Vjb25k
LnB0cigpIDogbnVsbHB0ciwgcmVwbGFjZW1lbnROb2RlLnJlbGVhc2VOb25OdWxsKCkgfSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBZGQgYmFjayByZW1vdmVkIG5vZGVzIHRoYXQgYXJl
IG5vdCBpbiB0aGUgaXRlbSByYW5nZS4KKyAgICBhdXRvIGVuZCA9IGxhc3RDaGlsZE9mQW5jZXN0
b3IgPyBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKGxhc3RDaGlsZE9mQW5jZXN0b3IuZ2V0KCkp
IDogcG9zaXRpb25BZnRlck5vZGUoY29tbW9uQW5jZXN0b3IuZ2V0KCkpOworICAgIFJlZlB0cjxO
b2RlPiBub2RlID0gaXRlbS5lbmQuZmlyc3ROb2RlKCk7CisgICAgUmVmUHRyPE5vZGU+IGVuZE5v
ZGUgPSBlbmQuZmlyc3ROb2RlKCk7CisgICAgaWYgKG5vZGUgJiYgbm9kZSAhPSBlbmROb2RlKSB7
CisgICAgICAgIFJlZlB0cjxOb2RlPiBjb250YWluZXJOb2RlID0gbm9kZS0+cGFyZW50Tm9kZSgp
OworICAgICAgICBWZWN0b3I8UmVmPE5vZGU+PiB0b3BEb3duUGF0aDsKKyAgICAgICAgZm9yICg7
IGNvbnRhaW5lck5vZGUgJiYgY29udGFpbmVyTm9kZSAhPSBjb21tb25BbmNlc3RvcjsgY29udGFp
bmVyTm9kZSA9IGNvbnRhaW5lck5vZGUtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIHRvcERv
d25QYXRoLmFwcGVuZCgqY29udGFpbmVyTm9kZSk7CisgICAgICAgIHRvcERvd25QYXRoLnJldmVy
c2UoKTsKIAotICAgICAgICAgICAgICAgIGluc2VydGlvbnMuYXBwZW5kKE5vZGVJbnNlcnRpb24g
eyBjdXJyZW50RWxlbWVudFN0YWNrLnNpemUoKSA/IGN1cnJlbnRFbGVtZW50U3RhY2subGFzdCgp
LnB0cigpIDogbnVsbHB0ciwgY3VycmVudE5vZGUuY29weVJlZigpIH0pOwotICAgICAgICAgICAg
ICAgIGN1cnJlbnRFbGVtZW50U3RhY2suYXBwZW5kKFdURk1vdmUoY3VycmVudE5vZGUpKTsKKyAg
ICAgICAgc2l6ZV90IGkgPTA7CisgICAgICAgIHdoaWxlIChpIDwgbGFzdFRvcERvd25QYXRoLnNp
emUoKSAmJiBpIDwgdG9wRG93blBhdGguc2l6ZSgpICYmIGxhc3RUb3BEb3duUGF0aFtpXS5zZWNv
bmQucHRyKCkgPT0gdG9wRG93blBhdGhbaV0ucHRyKCkpCisgICAgICAgICAgICArK2k7CisKKyAg
ICAgICAgaWYgKGkgPCBsYXN0VG9wRG93blBhdGguc2l6ZSgpKQorICAgICAgICAgICAgbGFzdFRv
cERvd25QYXRoLnNocmluayhpKTsKKworICAgICAgICBmb3IgKDtpIDwgdG9wRG93blBhdGguc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gbm9kZSA9IHRvcERvd25QYXRoW2ldOworICAg
ICAgICAgICAgaWYgKCFyZXVzZWRPcmlnaW5hbE5vZGVzLmFkZChub2RlLmNvcHlSZWYoKSkuaXNO
ZXdFbnRyeSkgeworICAgICAgICAgICAgICAgIGF1dG8gY2xvbmVkTm9kZSA9IG5vZGUtPmNsb25l
Tm9kZUludGVybmFsKG5vZGUtPmRvY3VtZW50KCksIE5vZGU6OkNsb25pbmdPcGVyYXRpb246Ok9u
bHlTZWxmKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogZGF0YSA9IG5vZGUtPmV2ZW50VGFy
Z2V0RGF0YSgpKQorICAgICAgICAgICAgICAgICAgICBkYXRhLT5ldmVudExpc3RlbmVyTWFwLmNv
cHlFdmVudExpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQoY2xvbmVkTm9kZS5w
dHIoKSk7CisgICAgICAgICAgICAgICAgbm9kZSA9IFdURk1vdmUoY2xvbmVkTm9kZSk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpbnNlcnRpb25zLmFwcGVuZChOb2RlSW5zZXJ0aW9uIHsg
Y3VycmVudEVsZW1lbnRTdGFjay5zaXplKCkgPyBjdXJyZW50RWxlbWVudFN0YWNrLmxhc3QoKS5w
dHIoKSA6IG51bGxwdHIsIGNvbnRlbnROb2RlLnJlbGVhc2VOb25OdWxsKCkgfSk7CisgICAgICAg
ICAgICBpbnNlcnRpb25zLmFwcGVuZChOb2RlSW5zZXJ0aW9uIHsgbGFzdFRvcERvd25QYXRoLnNp
emUoKSA/IGxhc3RUb3BEb3duUGF0aC5sYXN0KCkuc2Vjb25kLnB0cigpIDogbnVsbHB0ciwgbm9k
ZS5jb3B5UmVmKCkgfSk7CisgICAgICAgICAgICBsYXN0VG9wRG93blBhdGguYXBwZW5kKHsgdG9w
RG93blBhdGhbaV0uY29weVJlZigpLCBXVEZNb3ZlKG5vZGUpIH0pOwogICAgICAgICB9CiAgICAg
fQotICAgIGlmIChub2RlVG9JbnNlcnRCYWNrQXRFbmQpCi0gICAgICAgIGluc2VydGlvbnMuYXBw
ZW5kKE5vZGVJbnNlcnRpb24geyBudWxscHRyLCBub2RlVG9JbnNlcnRCYWNrQXRFbmQucmVsZWFz
ZU5vbk51bGwoKSB9KTsKKworICAgIHdoaWxlIChub2RlICE9IGVuZE5vZGUpIHsKKyAgICAgICAg
UmVmPE5vZGU+IHBhcmVudE5vZGUgPSAqbm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICB3aGls
ZSAoIWxhc3RUb3BEb3duUGF0aC5pc0VtcHR5KCkgJiYgbGFzdFRvcERvd25QYXRoLmxhc3QoKS5m
aXJzdC5wdHIoKSAhPSBwYXJlbnROb2RlLnB0cigpKQorICAgICAgICAgICAgbGFzdFRvcERvd25Q
YXRoLnJlbW92ZUxhc3QoKTsKKworICAgICAgICBpbnNlcnRpb25zLmFwcGVuZChOb2RlSW5zZXJ0
aW9uIHsgbGFzdFRvcERvd25QYXRoLnNpemUoKSA/IGxhc3RUb3BEb3duUGF0aC5sYXN0KCkuc2Vj
b25kLnB0cigpIDogbnVsbHB0ciwgKm5vZGUgfSk7CisgICAgICAgIGxhc3RUb3BEb3duUGF0aC5h
cHBlbmQoeyAqbm9kZSwgKm5vZGUgfSk7CisgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KCpub2RlKTsKKyAgICB9CiAKICAgICBQb3NpdGlvbiBpbnNlcnRpb25Qb2ludCA9IHBvc2l0
aW9uQmVmb3JlTm9kZShmaXJzdENvbnRlbnROb2RlLmdldCgpKS5wYXJlbnRBbmNob3JlZEVxdWl2
YWxlbnQoKTsKICAgICB3aGlsZSAoaW5zZXJ0aW9uUG9pbnQuY29udGFpbmVyTm9kZSgpICE9IGNv
bW1vbkFuY2VzdG9yKQogICAgICAgICBpbnNlcnRpb25Qb2ludCA9IHBvc2l0aW9uSW5QYXJlbnRC
ZWZvcmVOb2RlKGluc2VydGlvblBvaW50LmNvbnRhaW5lck5vZGUoKSk7Ci0gICAgQVNTRVJUKCFp
bnNlcnRpb25Qb2ludC5pc051bGwoKSk7Ci0gICAgQVNTRVJUKCFpbnNlcnRpb25Qb2ludC5pc09y
cGhhbigpKTsKIAogICAgIGZvciAoYXV0byYgbm9kZSA6IG5vZGVzVG9SZW1vdmUpCiAgICAgICAg
IG5vZGUtPnJlbW92ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlci5oCmluZGV4IGI1ZDNhNjlkMGZmOTFkZjcyZTBlNTlhMDY1YzU3
ZDBjNWE3NjI2OTIuLjI4NTg4MjUxYzQyYTJkN2I2ZTA0ZDVmZDE0YWNhZmMyOWQxZjE5ZjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyLmgKQEAgLTEzOCw2ICsxMzgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgaXNJ
bk1hbmlwdWxhdGVkRWxlbWVudChFbGVtZW50Jik7CiAgICAgdm9pZCBvYnNlcnZlUGFyYWdyYXBo
cyhjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOworICAgIHZvaWQg
b2JzZXJ2ZVBhcmFncmFwaHNPdmVyd3JpdGUoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQ
b3NpdGlvbiYgZW5kKTsKICAgICB2b2lkIHNjaGVkdWxlT2JzZXJ2YXRpb25VcGRhdGUoKTsKIAog
ICAgIHN0cnVjdCBNYW5pcHVsYXRpb25JdGVtRGF0YSB7CkBAIC0xNTAsOSArMTUxLDE5IEBAIHBy
aXZhdGU6CiAgICAgICAgIFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zOwogICAgIH07
CiAKKyAgICBzdHJ1Y3QgTWFuaXB1bGF0aW9uVG9rZW5zIHsKKyAgICAgICAgVmVjdG9yPE1hbmlw
dWxhdGlvblRva2VuPiB0b2tlbnM7CisgICAgICAgIGJvb2wgY29udGFpbnNPbmx5SFRNTFNwYWNl
OworICAgICAgICBib29sIGNvbnRhaW5zTGluZUJyZWFrOworICAgICAgICBib29sIGZpcnN0VG9r
ZW5Db250YWluc0xpbmVCcmVhazsKKyAgICAgICAgYm9vbCBsYXN0VG9rZW5Db250YWluc0xpbmVC
cmVhazsKKyAgICB9OworICAgIE1hbmlwdWxhdGlvblRva2VucyBwYXJzZShTdHJpbmdWaWV3IHRl
eHQsIE5vZGUqIHRleHROb2RlKTsKKwogICAgIHZvaWQgYWRkSXRlbShNYW5pcHVsYXRpb25JdGVt
RGF0YSYmKTsKICAgICB2b2lkIGZsdXNoUGVuZGluZ0l0ZW1zRm9yQ2FsbGJhY2soKTsKICAgICBP
cHRpb25hbDxNYW5pcHVsYXRpb25GYWlsdXJlVHlwZT4gcmVwbGFjZShjb25zdCBNYW5pcHVsYXRp
b25JdGVtRGF0YSYsIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mKTsKKyAgICBPcHRp
b25hbDxNYW5pcHVsYXRpb25GYWlsdXJlVHlwZT4gcmVwbGFjZU92ZXJ3cml0ZShjb25zdCBNYW5p
cHVsYXRpb25JdGVtRGF0YSYsIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mKTsKIAog
ICAgIFdlYWtQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgV2Vha0hhc2hTZXQ8RWxlbWVu
dD4gbV9lbGVtZW50c1dpdGhOZXdSZW5kZXJlcjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3M2VmNTM4MzQ3NzU5NTg0MWUwYTY2NmU0NjczNGM4
ZDAxMjQyZDNmLi5hODM1MmQxZDEzZjk4MTNkNjJhYWFkNDAzNjdiNTI1NWVhOTljMmE5IDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMjAtMDUtMjkgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAg
ICAgICAgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgc2hvdWxkIHB1dCB0ZXh0IGluIHNhbWUg
bm9kZSBpbiB0aGUgc2FtZSBwYXJhZ3JhcGgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMjU0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0
TWFuaXB1bGF0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMjAt
MDUtMjkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgZ2Vu
ZXJhdGUtdW5pZmllZC1zb3VyY2VzLnNoIG5vdCBkZXBlbmQgb24gZmVhdHVyZXMgYmVpbmcgbGlz
dGVkIGluIEZFQVRVUkVfREVGSU5FUyBlbnZpcm9ubWVudCB2YXJpYWJsZQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9u
Lm1tCmluZGV4IGY2NGI2ZTM5M2ZjOTMxNTNhOWMxMTg4Y2RkMDgwN2Q2N2VlOWVmZjcuLjFhMjkz
MDJkMWRjNmIwNjlkNGIzMzI2OGY4ZWJjMmRkMGZhZDU0YTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0K
QEAgLTE3OSwxNSArMTc5LDEzIEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFu
aXB1bGF0aW9uRmluZE11bHRpcGxlUGFyYWdyYXBoc0luU2luZ2xlVGV4dE5vCiAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIAogICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRl
IGl0ZW1zXTsKLSAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDNVTCk7Ci0gICAgRVhQRUNUX0VR
KGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQs
IDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgNVVMKTsKICAgICBF
WFBFQ1RfU1RSRVEoImhlbGxvIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmlu
Zyk7Ci0KLSAgICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCAxVUwpOwotICAgIEVY
UEVDVF9TVFJFUSgid29ybGQiLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5n
KTsKLQotICAgIEVYUEVDVF9FUShpdGVtc1syXS50b2tlbnMuY291bnQsIDFVTCk7Ci0gICAgRVhQ
RUNUX1NUUkVRKCJXZWJLaXQiLCBpdGVtc1syXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5n
KTsKKyAgICBFWFBFQ1RfU1RSRVEoIlxuIiwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRG
OFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJ3b3JsZCIsIGl0ZW1zWzBdLnRva2Vuc1syXS5j
b250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiXG4iLCBpdGVtc1swXS50b2tl
bnNbM10uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIldlYktpdCIsIGl0
ZW1zWzBdLnRva2Vuc1s0XS5jb250ZW50LlVURjhTdHJpbmcpOwogfQogCiBURVNUKFRleHRNYW5p
cHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkZpbmRQYXJhZ3JhcGhzV2l0aE11bHRpbGVU
b2tlbnMpCkBAIC0xMDY0LDcgKzEwNjIsNyBAQCBURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBs
ZXRlVGV4dE1hbmlwdWxhdGlvblJlcGxhY2VQYXJhZ3JhcGhzU2VwYXJhdGVkQnlXcmFwcAogICAg
ICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOwotICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+PGI+SGVsbG8sIDwvYj5Xb3JsZDxicj5X
ZWJLaXQ8L3A+IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3Vt
ZW50LmJvZHkuaW5uZXJIVE1MIl0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+PGI+SGVsbG8s
IDwvYj5Xb3JsZDxiPjxicj48L2I+V2ViS2l0PC9wPiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCJdKTsKIH0KIAogVEVTVChU
ZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25GYWlsV2hlbkJSSXNJbnNl
cnRlZCkKQEAgLTIzMDQsNiArMjMwMiwxODYgQEAgc3RhdGljIFJldGFpblB0cjxfV0tUZXh0TWFu
aXB1bGF0aW9uVG9rZW4+IGNyZWF0ZVRleHRNYW5pcHVsYXRpb25Ub2tlbihOU1N0cmluZwogICAg
IHJldHVybiB0b2tlbjsKIH0KIAorVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBTdGFydFRleHRNYW5p
cHVsYXRpb25FeHRyYWN0c1Zpc2libGVMaW5lQnJlYWtzSW5UZXh0QXNFeGNsdWRlZFRva2VucykK
K3sKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0
ZSBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApXSk7Cisg
ICAgW3dlYlZpZXcgX3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07
CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUg
aHRtbD4iCisgICAgICAgICI8Ym9keT4iCisgICAgICAgICI8c3BhbiBzdHlsZT0nd2hpdGUtc3Bh
Y2U6cHJlOyc+JiMxMDsgb25lJiMxMDsgIHR3bzwvc3Bhbj4iCisgICAgICAgICI8c3BhbiBzdHls
ZT0nd2hpdGUtc3BhY2U6cHJlOyc+JiMxMDs8L3NwYW4+IgorICAgICAgICAiPHNwYW4+JiMxMDsg
dGhyZWUmIzEwOyAgZm91ciYjMTA7PC9zcGFuPiIKKyAgICAgICAgIjwvYm9keT4iXTsKKworICAg
IGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhD
b25maWd1cmF0aW9uOm5pbCBjb21wbGV0aW9uOl57CisgICAgICAgIGRvbmUgPSB0cnVlOworICAg
IH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvIGl0
ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJVTCk7
CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgNFVMKTsKKyAgICBFWFBFQ1Rf
U1RSRVEoIlxuICIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAg
IEVYUEVDVF9UUlVFKGl0ZW1zWzBdLnRva2Vuc1swXS5pc0V4Y2x1ZGVkKTsKKyAgICBFWFBFQ1Rf
U1RSRVEoIm9uZSIsIGl0ZW1zWzBdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworICAg
IEVYUEVDVF9GQUxTRShpdGVtc1swXS50b2tlbnNbMV0uaXNFeGNsdWRlZCk7CisgICAgRVhQRUNU
X1NUUkVRKCJcbiAgIiwgaXRlbXNbMF0udG9rZW5zWzJdLmNvbnRlbnQuVVRGOFN0cmluZyk7Cisg
ICAgRVhQRUNUX1RSVUUoaXRlbXNbMF0udG9rZW5zWzJdLmlzRXhjbHVkZWQpOworICAgIEVYUEVD
VF9TVFJFUSgidHdvIiwgaXRlbXNbMF0udG9rZW5zWzNdLmNvbnRlbnQuVVRGOFN0cmluZyk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGl0ZW1zWzBdLnRva2Vuc1szXS5pc0V4Y2x1ZGVkKTsKKyAgICBFWFBF
Q1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9TVFJFUSgidGhy
ZWUgZm91ciIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworfQorCitU
RVNUKFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkV4dHJhY3RzVmFsdWVz
QnlOb2RlKQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQw
MCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRl
LmdldCgpXTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwh
RE9DVFlQRSBodG1sPiIKKyAgICAgICAgIjxib2R5PiIKKyAgICAgICAgIjxzcGFuPm9uZTwvc3Bh
bj48c3BhbiBzdHlsZT0nd2hpdGUtc3BhY2U6cHJlOyc+dHdvICYjMTA7IHRocmVlPC9zcGFuPjxz
cGFuPmZvdXI8L3NwYW4+IgorICAgICAgICAiPHNwYW4gc3R5bGU9J3doaXRlLXNwYWNlOnByZTsn
PiYjMTA7Zml2ZTwvc3Bhbj4iCisgICAgICAgICI8L2JvZHk+Il07CisKKyAgICBkb25lID0gZmFs
c2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlv
bjpuaWwgY29tcGxldGlvbjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0byBpdGVtcyA9IFtkZWxl
Z2F0ZSBpdGVtc107CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAyVUwpOworICAgIEVYUEVD
VF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDVVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJvbmUi
LCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RS
RVEoInR3byIsIGl0ZW1zWzBdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVY
UEVDVF9TVFJFUSgiIFxuICIsIGl0ZW1zWzBdLnRva2Vuc1syXS5jb250ZW50LlVURjhTdHJpbmcp
OworICAgIEVYUEVDVF9TVFJFUSgidGhyZWUiLCBpdGVtc1swXS50b2tlbnNbM10uY29udGVudC5V
VEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoImZvdXIiLCBpdGVtc1swXS50b2tlbnNbNF0u
Y29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50
LCAyVUwpOworICAgIEVYUEVDVF9TVFJFUSgiXG4iLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVu
dC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoImZpdmUiLCBpdGVtc1sxXS50b2tlbnNb
MV0uY29udGVudC5VVEY4U3RyaW5nKTsKK30KKworVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21w
bGV0ZVRleHRNYW5pcHVsYXRpb25DYW5NZXJnZUNvbnRlbnRBbmRQcmVzZXJ2ZUxpbmVCcmVha3Mp
Cit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdh
dGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOwor
ICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCld
OworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBF
IGh0bWw+IgorICAgICAgICAiPGJvZHk+IgorICAgICAgICAiPHNwYW4gc3R5bGU9J3doaXRlLXNw
YWNlOnByZTsnPm9uZSAmIzEwOyB0d28gJiMxMDs8L3NwYW4+IgorICAgICAgICAiPC9ib2R5PiJd
OworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRp
b25zV2l0aENvbmZpZ3VyYXRpb246bmlsIGNvbXBsZXRpb246XnsKKyAgICAgICAgZG9uZSA9IHRy
dWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAg
IGF1dG8gaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNdOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3Vu
dCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCA0VUwpOworICAg
IEVYUEVDVF9TVFJFUSgib25lIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmlu
Zyk7CisgICAgRVhQRUNUX1NUUkVRKCIgXG4gIiwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQu
VVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJ0d28iLCBpdGVtc1swXS50b2tlbnNbMl0u
Y29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIiBcbiIsIGl0ZW1zWzBdLnRv
a2Vuc1szXS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgYXV0byByZXBsYWNlbWVudEl0ZW1z
ID0gcmV0YWluUHRyKEBbCisgICAgICAgIGNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwg
eyB7IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAIk9ORSIgfSwgeyBpdGVtc1swXS50
b2tlbnNbMV0uaWRlbnRpZmllciwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQgfSwgeyBpdGVt
c1swXS50b2tlbnNbMl0uaWRlbnRpZmllciwgQCJUV08iIH0sIHsgaXRlbXNbMF0udG9rZW5zWzNd
LmlkZW50aWZpZXIsIGl0ZW1zWzBdLnRva2Vuc1szXS5jb250ZW50IH0gfSkuYXV0b3JlbGVhc2Uo
KSwKKyAgICBdKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVU
ZXh0TWFuaXB1bGF0aW9uRm9ySXRlbXM6cmVwbGFjZW1lbnRJdGVtcy5nZXQoKSBjb21wbGV0aW9u
Ol4oTlNBcnJheTxOU0Vycm9yICo+ICplcnJvcnMpIHsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9y
cywgbmlsKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiPHNwYW4gc3R5bGU9
XCJ3aGl0ZS1zcGFjZTpwcmU7XCI+T05FIFxuIFRXTyBcbjwvc3Bhbj4iLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7Cit9
CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uU2hvdWxk
UHJlc2VydmVOb2Rlc0FmdGVyUGFyYWdyYXBoUmFuZ2UpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9
IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+IgorICAgICAgICAiPGJvZHk+
IgorICAgICAgICAiPHA+aGVsbG88Yj53b3JsZDxicj48YnI+PGk+ZnJvbTwvaT48L2I+PC9wPiIK
KyAgICAgICAgIjwvYm9keT4iXTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBf
c3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOm5pbCBjb21wbGV0aW9uOl57
CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZSk7CisKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJVTCk7CisgICAgRVhQ
RUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMlVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhl
bGxvIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNU
X1NUUkVRKCJ3b3JsZCIsIGl0ZW1zWzBdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOwor
ICAgIEVYUEVDVF9FUShpdGVtc1sxXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX1NU
UkVRKCJmcm9tIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAg
ICBhdXRvIHJlcGxhY2VtZW50SXRlbXMgPSByZXRhaW5QdHIoQFsKKyAgICAgICAgY3JlYXRlSXRl
bShpdGVtc1swXS5pZGVudGlmaWVyLCB7IHsgaXRlbXNbMF0udG9rZW5zWzBdLmlkZW50aWZpZXIs
IEAiSGVsbG8iIH0sIHsgaXRlbXNbMF0udG9rZW5zWzFdLmlkZW50aWZpZXIsIEAiV29ybGQiIH0g
fSkuYXV0b3JlbGVhc2UoKSwKKyAgICAgICAgY3JlYXRlSXRlbShpdGVtc1sxXS5pZGVudGlmaWVy
LCB7IHsgaXRlbXNbMV0udG9rZW5zWzBdLmlkZW50aWZpZXIsIEAiRnJvbSBXZWJLaXQiIH0gfSku
YXV0b3JlbGVhc2UoKSwKKyAgICBdKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmll
dyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uRm9ySXRlbXM6cmVwbGFjZW1lbnRJdGVtcy5nZXQo
KSBjb21wbGV0aW9uOl4oTlNBcnJheTxOU0Vycm9yICo+ICplcnJvcnMpIHsKKyAgICAgICAgRVhQ
RUNUX0VRKGVycm9ycywgbmlsKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgi
PHA+SGVsbG88Yj5Xb3JsZDxicj48YnI+PGk+RnJvbSBXZWJLaXQ8L2k+PC9iPjwvcD4iLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhU
TUwiXSk7Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0
aW9uU1ByZXNlcnZlTm9kZXNCZWZvcmVQYXJhZ3JhcGhSYW5nZSkKK3sKKyAgICBhdXRvIGRlbGVn
YXRlID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgW3dlYlZpZXcgX3NldFRl
eHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD4iCisgICAgICAgICI8
Ym9keT4iCisgICAgICAgICI8cD48Yj48YnI+PGJyPmhlbGxvPGk+d29ybGQ8L2k+PC9iPmZyb208
L3A+IgorICAgICAgICAiPC9ib2R5PiJdOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJW
aWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246bmlsIGNvbXBsZXRp
b246XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNdOwor
ICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0u
dG9rZW5zLmNvdW50LCAzVUwpOworICAgIEVYUEVDVF9TVFJFUSgiaGVsbG8iLCBpdGVtc1swXS50
b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIndvcmxkIiwg
aXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVR
KCJmcm9tIiwgaXRlbXNbMF0udG9rZW5zWzJdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBh
dXRvIHJlcGxhY2VtZW50SXRlbXMgPSByZXRhaW5QdHIoQFsKKyAgICAgICAgY3JlYXRlSXRlbShp
dGVtc1swXS5pZGVudGlmaWVyLCB7IHsgaXRlbXNbMF0udG9rZW5zWzBdLmlkZW50aWZpZXIsIEAi
SGVsbG8iIH0sIHsgaXRlbXNbMF0udG9rZW5zWzFdLmlkZW50aWZpZXIsIEAiV29ybGQiIH0sIHsg
aXRlbXNbMF0udG9rZW5zWzJdLmlkZW50aWZpZXIsIEAiRnJvbSBXZWJLaXQiIH0gfSkuYXV0b3Jl
bGVhc2UoKQorICAgIF0pOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9jb21w
bGV0ZVRleHRNYW5pcHVsYXRpb25Gb3JJdGVtczpyZXBsYWNlbWVudEl0ZW1zLmdldCgpIGNvbXBs
ZXRpb246XihOU0FycmF5PE5TRXJyb3IgKj4gKmVycm9ycykgeworICAgICAgICBFWFBFQ1RfRVEo
ZXJyb3JzLCBuaWwpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCI8cD48Yj48
YnI+PGJyPkhlbGxvPGk+V29ybGQ8L2k+PC9iPkZyb20gV2ViS2l0PC9wPiIsIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCJdKTsK
K30KIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgVGV4dE1hbmlwdWxhdGlvbkl0ZW1EZWJ1Z0Rlc2Ny
aXB0aW9uKQogewogICAgIGF1dG8gdG9rZW5BID0gY3JlYXRlVGV4dE1hbmlwdWxhdGlvblRva2Vu
KEAicHVibGljX2lkZW50aWZpZXJfQSIsIE5PLCBAInByaXZhdGVfY29udGVudF9BIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400717</attachid>
            <date>2020-05-31 20:45:56 -0700</date>
            <delta_ts>2020-06-01 11:31:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212548-20200531204555.patch</filename>
            <type>text/plain</type>
            <size>49152</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMzUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJhYjQ3Nzk3NzliNzli
ZDQ0NmVhMmQ4MWE4ZTM2MjQzY2RiZDE3ZC4uMDQ2ZTY1YzU1OGYzYzM5MWRhY2VjY2VjODc3NmM3
NGU1YzQ4NjRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDIwLTA1LTMxICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyIHNob3VsZCBwdXQgb25lIE5vZGUgaW4gb25seSBvbmUgcGFyYWdyYXBoCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI1NDgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlciBtYWlubHkgdXNlcyBsaW5lIGJyZWFrIGFzIGRlbGltaXRlciB0byBzcGxp
dCBwYXJhZ3JhcGhzLiBJbiBvdXIgY3VycmVudCAKKyAgICAgICAgaW1wbGVtZW50YXRpb24sIGlm
IHRleHQgb2YgYSBOb2RlIGhhcyBsaW5lIGJyZWFrLCB0aGUgcGFydCBiZWZvcmUgdGhlIHRoZSBs
aW5lIGJyZWFrIGlzIGluIG9uZSBwYXJhZ3JhcGggYW5kIHRoZQorICAgICAgICBwYXJ0IGFmdGVy
IHRoZSBsaW5lIGJyZWFrIGlzIGluIGFub3RoZXIgcGFyYWdyYXBoLCB3aGljaCBtZWFucyB0aGUg
Tm9kZSBpcyBpbiB0aGUgcmFuZ2Ugb2YgdHdvIHBhcmFncmFwaHMuCisgICAgICAgIFdoZW4gVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgbWFuaXB1bGF0ZXMgdGhlIHRoZSBmaXJzdCBwYXJhZ3Jh
cGgsIGl0IHJlbW92ZXMgYWxsIHRoZSBOb2RlcyBpbiBpdHMgcmFuZ2UgYW5kIAorICAgICAgICBy
ZXBsYWNlcyBpdCB3aXRoIG5ldyBOb2Rlcy4gVGhlbiB3aGVuIGl0IG1hbmlwdWxhdGVzIHRoZSBz
ZWNvbmQgcGFyYWdyYXBoLCBpZiB3aWxsIGZpbmQgdGhlIE5vZGUgZG9lcyBub3QgZXhpc3QKKyAg
ICAgICAgYW5kIGZhaWxzIHRvIHJlcGxhY2UuIEFsc28sIFRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyIGRvZXMgbm90IHJlc2VydmUgbGluZSBicmVha3MgaW4gdGV4dCwgd2hpY2ggY2FuIGJlIGFu
CisgICAgICAgIGlzc3VlIGlmIHRoZSBsaW5lIGJyZWFrcyBhcmUgdmlzaWJsZS4gCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBtYWtlcyB0aGUgUGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yIGl0ZXJhdGUg
b3ZlciBOb2RlcyBpbnN0ZWFkIG9mIHRleHQsIHNvIGEgTm9kZSBjYW4gb25seSBiZSBpbiB0aGUg
CisgICAgICAgIHJhbmdlIG9uZSBwYXJhZ3JhcGguIFRvIGRvIHRoaXMsIGl0IG1ha2VzIGxpbmUg
YnJlYWsgYW5kIHdoaXRlIHNwYWNlcyBhcm91bmQgaXQgYXMgYSBzcGVjaWFsIGV4Y2x1ZGVkIHRv
a2VuLgorICAgICAgICBIZXJlIGFyZSB0aGUgcnVsZXMgZm9yIHNwbGl0dGluZyBwYXJhZ3JhcGhz
IGJ5IGxpbmUgYnJlYWsgbm93OgorICAgICAgICAxLiBJZiB0aGUgc3BlY2lhbCB0b2tlbiBpcyB0
aGUgZmlyc3QgdG9rZW4gaW4gYSBOb2RlLCB0ZXh0IGluIE5vZGVzIGJlZm9yZSB0aGUgTm9kZSB3
aWxsIG1ha2UgYSBwYXJhZ3JhcGguIAorICAgICAgICAyLiBJZiB0aGUgc3BlY2lhbCB0b2tlbiBp
cyB0aGUgbGFzdCB0b2tlbiBpbiBhIE5vZGUsIHRleHQgaW4gTm9kZXMgYmVmb3JlIHRoZSBOb2Rl
IGFuZCB0aGUgTm9kZSB3aWxsIG1ha2UgYSAKKyAgICAgICAgcGFyYWdyYXBoLgorICAgICAgICAz
LiBJZiB0aGUgc3BlY2lhbCB0b2tlbiBpbiB0aGUgbWlkZGxlIG9mIHRva2VucyBpbiBhIE5vZGUs
IHRoZW4gd2UgZG9uJ3QgbWFrZSBhIG5ldyBwYXJhZ3JhcGggdW50aWwgbmV4dCBzcGVjaWFsCisg
ICAgICAgIHRva2VuIG1lZXRzIGNvbmRpdGlvbiAxIG9yIDIuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBhbHNvIGZpeGVzIHRoZSBpc3N1ZSB0aGF0IGEgTm9kZSBvdXQgb2YgdGhlIHBhcmFncmFwaCBy
YW5nZSBpcyByZW1vdmVkIGR1ZSB0byB0aGUgcHJlb3JkZXIgTm9kZQorICAgICAgICB0cmF2ZXJz
YWwsIGJ5IGZpbmRpbmcgYW5kIGFkZGluZyB0aG9zZSBOb2RlcyBiYWNrLgorCisgICAgICAgIFRl
c3Q6IFRleHRNYW5pcHVsYXRpb24uU3RhcnRUZXh0TWFuaXB1bGF0aW9uRXh0cmFjdHNWaXNpYmxl
TGluZUJyZWFrc0luVGV4dEFzRXhjbHVkZWRUb2tlbnMKKyAgICAgICAgICAgICAgVGV4dE1hbmlw
dWxhdGlvbi5TdGFydFRleHRNYW5pcHVsYXRpb25FeHRyYWN0c1ZhbHVlc0J5Tm9kZQorICAgICAg
ICAgICAgICBUZXh0TWFuaXB1bGF0aW9uLkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkNhbk1lcmdl
Q29udGVudEFuZFByZXNlcnZlTGluZUJyZWFrcworICAgICAgICAgICAgICBUZXh0TWFuaXB1bGF0
aW9uLkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvblNob3VsZFByZXNlcnZlTm9kZXNBZnRlclBhcmFn
cmFwaFJhbmdlCisgICAgICAgICAgICAgIFRleHRNYW5pcHVsYXRpb24uQ29tcGxldGVUZXh0TWFu
aXB1bGF0aW9uU1ByZXNlcnZlTm9kZXNCZWZvcmVQYXJhZ3JhcGhSYW5nZQorCisgICAgICAgICog
ZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQYXJhZ3JhcGhOb2RlSXRlcmF0b3I6OlBhcmFncmFwaE5vZGVJdGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpQYXJhZ3JhcGhOb2RlSXRlcmF0b3I6Om1fZW5kTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXJhZ3JhcGhOb2RlSXRlcmF0b3I6OmFkdmFuY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFyYWdyYXBoTm9kZUl0ZXJhdG9yOjpjdXJyZW50Q29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpQYXJhZ3JhcGhOb2RlSXRlcmF0b3I6OmF0RW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBhcmFncmFwaE5vZGVJdGVyYXRvcjo6YWR2YW5jZU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFyYWdyYXBoTm9kZUl0ZXJhdG9yOjphZHZhbmNlSXRlcmF0b3JOb2RlQW5kVXBkYXRlVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjppc0VuY2xvc2luZ0l0ZW1Cb3VuZGFyeUVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnBhcnNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdy
YXBocyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6YWRk
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVw
bGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3I6OlBhcmFn
cmFwaENvbnRlbnRJdGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXJhZ3Jh
cGhDb250ZW50SXRlcmF0b3I6Om1fcGFzdEVuZE5vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yOjphZHZhbmNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlBhcmFncmFwaENvbnRlbnRJdGVyYXRvcjo6Y3VycmVudENvbnRlbnQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yOjpzdGFy
dFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhcmFncmFwaENvbnRlbnRJ
dGVyYXRvcjo6ZW5kUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFyYWdy
YXBoQ29udGVudEl0ZXJhdG9yOjphdEVuZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3I6Om1vdmVDdXJyZW50Tm9kZUZvcndhcmQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29udGFpbnNPbmx5SFRNTFNwYWNlcyk6IERlbGV0
ZWQuCisgICAgICAgICogZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oOgorCiAy
MDIwLTA1LTMwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBFeHRl
bmRlZCBDb2xvcjogQWRkaXRpb25hbCBjb2xvciBjbGVhbnVwcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcAppbmRleCBlMGVl
MWQyZGEwODkxYjE3YmI1ZWYzZmNmYzNkNTdmNjVmZWM5NzNiLi4zMGI4NWM1OGI5NDkxNDY5NjM3
ZjBhNzVhNzZiYTM0MTFkNzk5NjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcApAQCAtMTQ3LDI4ICsxNDcsMjEgQEAg
cHVibGljOgogICAgIFBhcmFncmFwaENvbnRlbnRJdGVyYXRvcihjb25zdCBQb3NpdGlvbiYgc3Rh
cnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiAgICAgICAgIDogbV9pdGVyYXRvcih7ICptYWtlQm91
bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRhcnlQb2ludChlbmQpIH0sIFRleHRJdGVyYXRv
cklnbm9yZXNTdHlsZVZpc2liaWxpdHkpCiAgICAgICAgICwgbV9pdGVyYXRvck5vZGUobV9pdGVy
YXRvci5hdEVuZCgpID8gbnVsbHB0ciA6IGNyZWF0ZUxpdmVSYW5nZShtX2l0ZXJhdG9yLnJhbmdl
KCkpLT5maXJzdE5vZGUoKSkKLSAgICAgICAgLCBtX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlz
aWJsZUNvbnRlbnQoc3RhcnQuZmlyc3ROb2RlKCkpCisgICAgICAgICwgbV9ub2RlKHN0YXJ0LmZp
cnN0Tm9kZSgpKQogICAgICAgICAsIG1fcGFzdEVuZE5vZGUoZW5kLmZpcnN0Tm9kZSgpKQogICAg
IHsKKyAgICAgICAgaWYgKG1fbm9kZSA9PSBtX2l0ZXJhdG9yTm9kZSkKKyAgICAgICAgICAgIGFk
dmFuY2VJdGVyYXRvck5vZGVBbmRVcGRhdGVUZXh0KCk7CiAgICAgfQogCiAgICAgdm9pZCBhZHZh
bmNlKCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgYSBub2RlIGNhbGxiYWNrIHRvIFRl
eHRJdGVyYXRvciBpbnN0ZWFkIG9mIHRyYXZlcnNpbmcgdGhlIG5vZGUgdHJlZSB0d2ljZSBsaWtl
IHRoaXMuCi0gICAgICAgIGlmIChtX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJsZUNvbnRl
bnQgIT0gbV9pdGVyYXRvck5vZGUgJiYgbV9jdXJyZW50Tm9kZUZvckZpbmRpbmdJbnZpc2libGVD
b250ZW50ICE9IG1fcGFzdEVuZE5vZGUpIHsKLSAgICAgICAgICAgIG1vdmVDdXJyZW50Tm9kZUZv
cndhcmQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICht
X2l0ZXJhdG9yLmF0RW5kKCkpCisgICAgICAgIG1fdGV4dCA9IFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgYWR2YW5jZU5vZGUoKTsKKyAgICAgICAgaWYgKG1faXRlcmF0b3IuYXRFbmQoKSB8fCBtX25v
ZGUgIT0gbV9pdGVyYXRvck5vZGUpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYXV0
byBwcmV2aW91c0l0ZXJhdG9yTm9kZSA9IG1faXRlcmF0b3JOb2RlOwotCi0gICAgICAgIG1faXRl
cmF0b3IuYWR2YW5jZSgpOwotICAgICAgICBtX2l0ZXJhdG9yTm9kZSA9IG1faXRlcmF0b3IuYXRF
bmQoKSA/IG51bGxwdHIgOiBjcmVhdGVMaXZlUmFuZ2UobV9pdGVyYXRvci5yYW5nZSgpKS0+Zmly
c3ROb2RlKCk7Ci0gICAgICAgIGlmIChwcmV2aW91c0l0ZXJhdG9yTm9kZSAhPSBtX2l0ZXJhdG9y
Tm9kZSkKLSAgICAgICAgICAgIG1vdmVDdXJyZW50Tm9kZUZvcndhcmQoKTsKKyAgICAgICAgYWR2
YW5jZUl0ZXJhdG9yTm9kZUFuZFVwZGF0ZVRleHQoKTsKICAgICB9CiAKICAgICBzdHJ1Y3QgQ3Vy
cmVudENvbnRlbnQgewpAQCAtMTgwLDExICsxNzMsNyBAQCBwdWJsaWM6CiAKICAgICBDdXJyZW50
Q29udGVudCBjdXJyZW50Q29udGVudCgpCiAgICAgewotICAgICAgICBDdXJyZW50Q29udGVudCBj
b250ZW50OwotICAgICAgICBpZiAobV9jdXJyZW50Tm9kZUZvckZpbmRpbmdJbnZpc2libGVDb250
ZW50ICYmIG1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudCAhPSBtX2l0ZXJh
dG9yTm9kZSkKLSAgICAgICAgICAgIGNvbnRlbnQgPSB7IG1fY3VycmVudE5vZGVGb3JGaW5kaW5n
SW52aXNpYmxlQ29udGVudC5jb3B5UmVmKCksIFN0cmluZ1ZpZXcgeyB9IH07Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGNvbnRlbnQgPSB7IG1faXRlcmF0b3Iubm9kZSgpLCBtX2l0ZXJhdG9y
LnRleHQoKSwgdHJ1ZSB9OworICAgICAgICBDdXJyZW50Q29udGVudCBjb250ZW50ID0geyBtX25v
ZGUuY29weVJlZigpLCBtX3RleHQgPyBtX3RleHQudmFsdWUoKSA6IFN0cmluZ1ZpZXcgeyB9LCAh
IW1fdGV4dCB9OwogICAgICAgICBpZiAoY29udGVudC5ub2RlKSB7CiAgICAgICAgICAgICBpZiAo
YXV0byogcmVuZGVyZXIgPSBjb250ZW50Lm5vZGUtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAg
ICAgICBpZiAocmVuZGVyZXItPmlzUmVuZGVyUmVwbGFjZWQoKSkgewpAQCAtMTk2LDMzICsxODUs
MzkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY29udGVudDsKICAgICB9CiAKLSAgICBQb3Np
dGlvbiBzdGFydFBvc2l0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24obV9pdGVyYXRvci5yYW5nZSgpLnN0YXJ0KTsKLSAgICB9CisgICAgYm9v
bCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuICFtX3RleHQgJiYgbV9pdGVyYXRvci5hdEVuZCgpICYm
IG1fbm9kZSA9PSBtX3Bhc3RFbmROb2RlOyB9CiAKLSAgICBQb3NpdGlvbiBlbmRQb3NpdGlvbigp
Citwcml2YXRlOgorICAgIHZvaWQgYWR2YW5jZU5vZGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX2l0ZXJhdG9yLnJhbmdlKCkuZW5kKTsKLSAg
ICB9CisgICAgICAgIGlmIChtX25vZGUgPT0gbV9wYXN0RW5kTm9kZSkKKyAgICAgICAgICAgIHJl
dHVybjsKIAotICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9yLmF0RW5k
KCkgJiYgbV9jdXJyZW50Tm9kZUZvckZpbmRpbmdJbnZpc2libGVDb250ZW50ID09IG1fcGFzdEVu
ZE5vZGU7IH0KKyAgICAgICAgbV9ub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbV9ub2RlKTsK
KyAgICAgICAgaWYgKCFtX25vZGUpCisgICAgICAgICAgICBtX25vZGUgPSBtX3Bhc3RFbmROb2Rl
OworICAgIH0KIAotcHJpdmF0ZToKLSAgICB2b2lkIG1vdmVDdXJyZW50Tm9kZUZvcndhcmQoKQor
ICAgIHZvaWQgYWR2YW5jZUl0ZXJhdG9yTm9kZUFuZFVwZGF0ZVRleHQoKQogICAgIHsKLSAgICAg
ICAgaWYgKG1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudCA9PSBtX3Bhc3RF
bmROb2RlKQorICAgICAgICBpZiAobV9pdGVyYXRvci5hdEVuZCgpKQogICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgIG1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudCA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29u
dGVudCk7Ci0gICAgICAgIGlmICghbV9jdXJyZW50Tm9kZUZvckZpbmRpbmdJbnZpc2libGVDb250
ZW50KQotICAgICAgICAgICAgbV9jdXJyZW50Tm9kZUZvckZpbmRpbmdJbnZpc2libGVDb250ZW50
ID0gbV9wYXN0RW5kTm9kZTsKKyAgICAgICAgQVNTRVJUKG1fbm9kZSA9PSBtX2l0ZXJhdG9yTm9k
ZSk7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICAgICAgd2hpbGUg
KCFtX2l0ZXJhdG9yLmF0RW5kKCkgJiYgbV9pdGVyYXRvck5vZGUgPT0gbV9ub2RlKSB7CisgICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtX2l0ZXJhdG9yLnRleHQoKSk7CisgICAgICAg
ICAgICBtX2l0ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICAgICAgICAgIG1faXRlcmF0b3JOb2RlID0g
bV9pdGVyYXRvci5hdEVuZCgpID8gbnVsbHB0ciA6IGNyZWF0ZUxpdmVSYW5nZShtX2l0ZXJhdG9y
LnJhbmdlKCkpLT5maXJzdE5vZGUoKTsKKyAgICAgICAgfQorICAgICAgICBtX3RleHQgPSB7IHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKSB9OwogICAgIH0KIAogICAgIFRleHRJdGVyYXRvciBtX2l0
ZXJhdG9yOwogICAgIFJlZlB0cjxOb2RlPiBtX2l0ZXJhdG9yTm9kZTsKLSAgICBSZWZQdHI8Tm9k
ZT4gbV9jdXJyZW50Tm9kZUZvckZpbmRpbmdJbnZpc2libGVDb250ZW50OworICAgIFJlZlB0cjxO
b2RlPiBtX25vZGU7CiAgICAgUmVmUHRyPE5vZGU+IG1fcGFzdEVuZE5vZGU7CisgICAgT3B0aW9u
YWw8U3RyaW5nPiBtX3RleHQ7CiB9OwogCiBzdGF0aWMgYm9vbCBpc0F0dHJpYnV0ZUZvclRleHRN
YW5pcHVsYXRpb24oY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZVRvQ2hlY2spCkBAIC0yNTMsMTYgKzI0OCw2IEBAIHN0YXRpYyBib29sIGNhblBlcmZvcm1U
ZXh0TWFuaXB1bGF0aW9uQnlSZXBsYWNpbmdFbnRpcmVUZXh0Q29udGVudChjb25zdCBFbGVtZW50
CiAgICAgcmV0dXJuIGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnRpdGxlVGFnKSB8fCBl
bGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb25UYWcpOwogfQogCi1zdGF0aWMgYm9v
bCBjb250YWluc09ubHlIVE1MU3BhY2VzKFN0cmluZ1ZpZXcgdGV4dCkKLXsKLSAgICBmb3IgKHVu
c2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCB0ZXh0Lmxlbmd0aCgpOyArK2luZGV4KSB7Ci0gICAg
ICAgIGlmIChpc05vdEhUTUxTcGFjZSh0ZXh0W2luZGV4XSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyBPcHRpb25hbDxU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW5JbmZvPiB0b2tlbklu
Zm8oTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCkBAIC0yNzgsNiArMjYzLDgzIEBAIHN0
YXRpYyBPcHRpb25hbDxUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9r
ZW5JbmZvPiB0b2tlbkluZm8oTm9kCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGJv
b2wgaXNFbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
Cit7CisgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CisgICAgaWYgKCFy
ZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byByb2xlID0gW10oY29u
c3QgRWxlbWVudCYgZWxlbWVudCkgLT4gQWNjZXNzaWJpbGl0eVJvbGUgeworICAgICAgICByZXR1
cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYVJvbGVUb1dlYkNvcmVSb2xlKGVsZW1lbnQuYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnJvbGVBdHRyKSk7CisgICAg
fTsKKworICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpidXR0b25UYWcpIHx8
IHJvbGUoZWxlbWVudCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkJ1dHRvbikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlUYWcp
IHx8IGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmFUYWcpKSB7CisgICAgICAgIGF1dG8g
ZGlzcGxheVR5cGUgPSByZW5kZXJlci0+c3R5bGUoKS5kaXNwbGF5KCk7CisgICAgICAgIGlmIChk
aXNwbGF5VHlwZSA9PSBEaXNwbGF5VHlwZTo6QmxvY2sgfHwgZGlzcGxheVR5cGUgPT0gRGlzcGxh
eVR5cGU6OklubGluZUJsb2NrKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAg
Zm9yIChhdXRvIHBhcmVudCA9IG1ha2VSZWZQdHIoZWxlbWVudC5wYXJlbnRFbGVtZW50KCkpOyBw
YXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBp
ZiAocGFyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bmF2VGFnKSB8fCByb2xlKCpwYXJlbnQp
ID09IEFjY2Vzc2liaWxpdHlSb2xlOjpMYW5kbWFya05hdmlnYXRpb24pCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbnMgVGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6OnBhcnNlKFN0cmluZ1ZpZXcgdGV4dCwgTm9kZSogdGV4dE5v
ZGUpCit7CisgICAgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiB0b2tlbnM7CisgICAgRXhjbHVz
aW9uUnVsZU1hdGNoZXIgZXhjbHVzaW9uUnVsZU1hdGNoZXIobV9leGNsdXNpb25SdWxlcyk7Cisg
ICAgc2l6ZV90IHBvc2l0aW9uT2ZMYXN0Tm9uSFRNTFNwYWNlID0gV1RGOjpub3RGb3VuZDsKKyAg
ICBzaXplX3Qgc3RhcnRQb3NpdGlvbk9mQ3VycmVudFRva2VuID0gMDsKKyAgICBib29sIGNvbnRh
aW5zT25seUhUTUxTcGFjZSA9IHRydWU7CisgICAgYm9vbCBjb250YWluc0xpbmVCcmVhayA9IGZh
bHNlOworICAgIGJvb2wgZmlyc3RUb2tlbkNvbnRhaW5zTGluZUJyZWFrID0gZmFsc2U7CisgICAg
Ym9vbCBsYXN0VG9rZW5Db250YWluc0xpbmVCcmVhayA9IGZhbHNlOworCisgICAgc2l6ZV90IGlu
ZGV4ID0gMDsKKyAgICBmb3IgKDsgaW5kZXggPCB0ZXh0Lmxlbmd0aCgpOyArK2luZGV4KSB7Cisg
ICAgICAgIGF1dG8gY2hhcmFjdGVyID0gdGV4dFtpbmRleF07CisgICAgICAgIGlmIChpc05vdEhU
TUxTcGFjZShjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICBjb250YWluc09ubHlIVE1MU3BhY2Ug
PSBmYWxzZTsKKyAgICAgICAgICAgIHBvc2l0aW9uT2ZMYXN0Tm9uSFRNTFNwYWNlID0gaW5kZXg7
CisgICAgICAgIH0gZWxzZSBpZiAoaXNIVE1MTGluZUJyZWFrKGNoYXJhY3RlcikpIHsKKyAgICAg
ICAgICAgIGNvbnRhaW5zTGluZUJyZWFrID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChwb3NpdGlv
bk9mTGFzdE5vbkhUTUxTcGFjZSAhPSBXVEY6Om5vdEZvdW5kICYmIHN0YXJ0UG9zaXRpb25PZkN1
cnJlbnRUb2tlbiA8PSBwb3NpdGlvbk9mTGFzdE5vbkhUTUxTcGFjZSkgeworICAgICAgICAgICAg
ICAgIGF1dG8gdG9rZW5TdHJpbmcgPSB0ZXh0LnN1YnN0cmluZyhzdGFydFBvc2l0aW9uT2ZDdXJy
ZW50VG9rZW4sIHBvc2l0aW9uT2ZMYXN0Tm9uSFRNTFNwYWNlICsgMSAtIHN0YXJ0UG9zaXRpb25P
ZkN1cnJlbnRUb2tlbikudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICB0b2tlbnMuYXBwZW5k
KE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgdG9rZW5T
dHJpbmcsIHRva2VuSW5mbyh0ZXh0Tm9kZSksIGV4Y2x1c2lvblJ1bGVNYXRjaGVyLmlzRXhjbHVk
ZWQodGV4dE5vZGUpIH0pOworICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb25PZkN1cnJlbnRU
b2tlbiA9IHBvc2l0aW9uT2ZMYXN0Tm9uSFRNTFNwYWNlICsgMTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgdGV4dC5sZW5ndGgoKSAmJiAhaXNOb3RIVE1MU3Bh
Y2UodGV4dFtpbmRleF0pKQorICAgICAgICAgICAgICAgICsraW5kZXg7CisKKyAgICAgICAgICAg
IC0taW5kZXg7CisKKyAgICAgICAgICAgIGF1dG8gbGluZUJyZWFrVG9rZW5TdHJpbmcgPSB0ZXh0
LnN1YnN0cmluZyhzdGFydFBvc2l0aW9uT2ZDdXJyZW50VG9rZW4sIGluZGV4ICsgMSAtIHN0YXJ0
UG9zaXRpb25PZkN1cnJlbnRUb2tlbikudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICh0b2tl
bnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGZpcnN0VG9rZW5Db250YWluc0xpbmVCcmVh
ayA9IHRydWU7CisgICAgICAgICAgICB0b2tlbnMuYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsg
bV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgbGluZUJyZWFrVG9rZW5TdHJpbmcsIHRva2Vu
SW5mbyh0ZXh0Tm9kZSksIHRydWUgfSk7CisgICAgICAgICAgICBzdGFydFBvc2l0aW9uT2ZDdXJy
ZW50VG9rZW4gPSBpbmRleCArIDE7CisgICAgICAgICAgICBsYXN0VG9rZW5Db250YWluc0xpbmVC
cmVhayA9IHRydWU7CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKHN0YXJ0UG9zaXRpb25PZkN1cnJlbnRUb2tlbiA8IHRleHQubGVuZ3RoKCkpIHsK
KyAgICAgICAgYXV0byB0b2tlblN0cmluZyA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0UG9zaXRpb25P
ZkN1cnJlbnRUb2tlbiwgaW5kZXggKyAxIC0gc3RhcnRQb3NpdGlvbk9mQ3VycmVudFRva2VuKS50
b1N0cmluZygpOworICAgICAgICB0b2tlbnMuYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90
b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgdG9rZW5TdHJpbmcsIHRva2VuSW5mbyh0ZXh0Tm9k
ZSksIGV4Y2x1c2lvblJ1bGVNYXRjaGVyLmlzRXhjbHVkZWQodGV4dE5vZGUpIH0pOworICAgICAg
ICBsYXN0VG9rZW5Db250YWluc0xpbmVCcmVhayA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVy
biB7IFdURk1vdmUodG9rZW5zKSwgY29udGFpbnNPbmx5SFRNTFNwYWNlLCBjb250YWluc0xpbmVC
cmVhaywgZmlyc3RUb2tlbkNvbnRhaW5zTGluZUJyZWFrLCBsYXN0VG9rZW5Db250YWluc0xpbmVC
cmVhayB9OworfQorCiB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFy
YWdyYXBocyhjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7CiAg
ICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051bGwoKSkKQEAgLTI4Niw4ICszNDgsNiBA
QCB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyhjb25z
dCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0CiAgICAgYXV0byBkb2N1bWVudCA9IG1ha2VSZWZQdHIo
c3RhcnQuZG9jdW1lbnQoKSk7CiAgICAgQVNTRVJUKGRvY3VtZW50KTsKICAgICBQYXJhZ3JhcGhD
b250ZW50SXRlcmF0b3IgaXRlcmF0b3IgeyBzdGFydCwgZW5kIH07Ci0gICAgVmlzaWJsZVBvc2l0
aW9uIHZpc2libGVTdGFydCA9IHN0YXJ0OwotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5k
ID0gZW5kOwogICAgIGlmIChkb2N1bWVudCAhPSBzdGFydC5kb2N1bWVudCgpIHx8IGRvY3VtZW50
ICE9IGVuZC5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm47IC8vIFRleHRJdGVyYXRvcidzIGNv
bnN0cnVjdG9yIG1heSBoYXZlIHVwZGF0ZWQgdGhlIGxheW91dCBhbmQgZXhlY3V0ZWQgYXJiaXRy
YXJ5IHNjcmlwdHMuCiAKQEAgLTI5NywxMTUgKzM1Nyw2NSBAQCB2b2lkIFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyhjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0CiAgICAgUG9zaXRpb24gZW5kT2ZDdXJyZW50UGFyYWdyYXBoOwogICAgIFJlZlB0cjxFbGVt
ZW50PiBlbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50OwogCi0gICAgYXV0byBpc0VuY2xvc2lu
Z0l0ZW1Cb3VuZGFyeUVsZW1lbnQgPSBbXShjb25zdCBFbGVtZW50JiBlbGVtZW50KSB7Ci0gICAg
ICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwotICAgICAgICBpZiAoIXJl
bmRlcmVyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGF1dG8gcm9sZSA9
IFtdKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIC0+IEFjY2Vzc2liaWxpdHlSb2xlIHsKLSAgICAg
ICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhUm9sZVRvV2ViQ29yZVJvbGUo
ZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6cm9sZUF0
dHIpKTsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6YnV0dG9uVGFnKSB8fCByb2xlKGVsZW1lbnQpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpC
dXR0b24pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoZWxlbWVudC5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6bGlUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmFUYWcpKSB7Ci0gICAgICAgICAgICBhdXRvIGRpc3BsYXlUeXBlID0gcmVuZGVyZXItPnN0
eWxlKCkuZGlzcGxheSgpOwotICAgICAgICAgICAgaWYgKGRpc3BsYXlUeXBlID09IERpc3BsYXlU
eXBlOjpCbG9jayB8fCBkaXNwbGF5VHlwZSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lQmxvY2spCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZm9yICg7ICFpdGVyYXRvci5hdEVuZCgp
OyBpdGVyYXRvci5hZHZhbmNlKCkpIHsKKyAgICAgICAgYXV0byBjb250ZW50ID0gaXRlcmF0b3Iu
Y3VycmVudENvbnRlbnQoKTsKKyAgICAgICAgYXV0byogY29udGVudE5vZGUgPSBjb250ZW50Lm5v
ZGUuZ2V0KCk7CisgICAgICAgIEFTU0VSVChjb250ZW50Tm9kZSk7CiAKLSAgICAgICAgICAgIGZv
ciAoYXV0byBwYXJlbnQgPSBtYWtlUmVmUHRyKGVsZW1lbnQucGFyZW50RWxlbWVudCgpKTsgcGFy
ZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAg
IGlmIChwYXJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpuYXZUYWcpIHx8IHJvbGUoKnBhcmVu
dCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkxhbmRtYXJrTmF2aWdhdGlvbikKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChlbmNsb3Np
bmdJdGVtQm91bmRhcnlFbGVtZW50ICYmICFlbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50LT5j
b250YWlucyhjb250ZW50Tm9kZSkpIHsKKyAgICAgICAgICAgIGlmICghdG9rZW5zSW5DdXJyZW50
UGFyYWdyYXBoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlv
bkl0ZW1EYXRhIHsgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgsIGVuZE9mQ3VycmVudFBhcmFncmFw
aCwgbnVsbHB0ciwgbnVsbFFOYW1lKCksIHN0ZDo6ZXhjaGFuZ2UodG9rZW5zSW5DdXJyZW50UGFy
YWdyYXBoLCB7IH0pIH0pOworICAgICAgICAgICAgZW5jbG9zaW5nSXRlbUJvdW5kYXJ5RWxlbWVu
dCA9IG51bGxwdHI7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfTsK
LQotICAgIGZvciAoOyAhaXRlcmF0b3IuYXRFbmQoKTsgaXRlcmF0b3IuYWR2YW5jZSgpKSB7Ci0g
ICAgICAgIGF1dG8gY29udGVudCA9IGl0ZXJhdG9yLmN1cnJlbnRDb250ZW50KCk7Ci0gICAgICAg
IGlmIChjb250ZW50Lm5vZGUpIHsKLSAgICAgICAgICAgIGlmIChlbmNsb3NpbmdJdGVtQm91bmRh
cnlFbGVtZW50ICYmICFlbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50LT5jb250YWlucyhjb250
ZW50Lm5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0b2tlbnNJbkN1cnJlbnRQ
YXJhZ3JhcGguaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBhZGRJdGVtKE1hbmlwdWxh
dGlvbkl0ZW1EYXRhIHsgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgsIGVuZE9mQ3VycmVudFBhcmFn
cmFwaCwgbnVsbHB0ciwgbnVsbFFOYW1lKCksIHN0ZDo6ZXhjaGFuZ2UodG9rZW5zSW5DdXJyZW50
UGFyYWdyYXBoLCB7IH0pIH0pOwotICAgICAgICAgICAgICAgIGVuY2xvc2luZ0l0ZW1Cb3VuZGFy
eUVsZW1lbnQgPSBudWxscHRyOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoUmVmUHRyPEVs
ZW1lbnQ+IGN1cnJlbnRFbGVtZW50QW5jZXN0b3IgPSBpczxFbGVtZW50PigqY29udGVudE5vZGUp
ID8gZG93bmNhc3Q8RWxlbWVudD4oY29udGVudE5vZGUpIDogY29udGVudE5vZGUtPnBhcmVudE9y
U2hhZG93SG9zdEVsZW1lbnQoKSkgeworICAgICAgICAgICAgLy8gV2UgY2FuIGV4aXQgZWFybHkg
aGVyZSBiZWNhdXNlIHNjaGVkdWxlT2JzZXJ2YXRpb25VcGRhdGUgY2FsbHMgdGhpcyBmdW5jdGlv
biBvbiBlYWNoIHBhcmFncmFwaCBzZXBhcmF0ZWx5LgorICAgICAgICAgICAgaWYgKGlzSW5NYW5p
cHVsYXRlZEVsZW1lbnQoKmN1cnJlbnRFbGVtZW50QW5jZXN0b3IpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoUmVmUHRyPEVsZW1lbnQ+IGN1
cnJlbnRFbGVtZW50QW5jZXN0b3IgPSBpczxFbGVtZW50PigqY29udGVudC5ub2RlKSA/IGRvd25j
YXN0PEVsZW1lbnQ+KGNvbnRlbnQubm9kZS5nZXQoKSkgOiBjb250ZW50Lm5vZGUtPnBhcmVudE9y
U2hhZG93SG9zdEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGlmIChpc0luTWFuaXB1bGF0
ZWRFbGVtZW50KCpjdXJyZW50RWxlbWVudEFuY2VzdG9yKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOyAvLyBXZSBjYW4gZXhpdCBlYXJseSBoZXJlIGJlY2F1c2Ugc2NoZWR1bGVPYnNlcnZh
cnRpb25VcGRhdGUgY2FsbHMgdGhpcyBmdW5jdGlvbiBvbiBlYWNoIHBhcmFncmFwaCBzZXBhcmF0
ZWx5LgotICAgICAgICAgICAgfQorICAgICAgICBpZiAoaXM8RWxlbWVudD4oKmNvbnRlbnROb2Rl
KSkgeworICAgICAgICAgICAgYXV0byYgY3VycmVudEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50
PigqY29udGVudE5vZGUpOworICAgICAgICAgICAgaWYgKCFjb250ZW50LmlzVGV4dENvbnRlbnQg
JiYgY2FuUGVyZm9ybVRleHRNYW5pcHVsYXRpb25CeVJlcGxhY2luZ0VudGlyZVRleHRDb250ZW50
KGN1cnJlbnRFbGVtZW50KSkKKyAgICAgICAgICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0
ZW1EYXRhIHsgUG9zaXRpb24oKSwgUG9zaXRpb24oKSwgbWFrZVdlYWtQdHIoY3VycmVudEVsZW1l
bnQpLCBudWxsUU5hbWUoKSwgeyBNYW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVy
LmdlbmVyYXRlKCksIGN1cnJlbnRFbGVtZW50LnRleHRDb250ZW50KCksIHRva2VuSW5mbygmY3Vy
cmVudEVsZW1lbnQpIH0gfSB9KTsKIAotICAgICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpjb250
ZW50Lm5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgY3VycmVudEVsZW1lbnQgPSBkb3du
Y2FzdDxFbGVtZW50PigqY29udGVudC5ub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
bnQuaXNUZXh0Q29udGVudCAmJiBjYW5QZXJmb3JtVGV4dE1hbmlwdWxhdGlvbkJ5UmVwbGFjaW5n
RW50aXJlVGV4dENvbnRlbnQoY3VycmVudEVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGFkZEl0ZW0oTWFuaXB1bGF0aW9uSXRlbURhdGEgeyBQb3NpdGlvbigpLCBQb3NpdGlvbigpLCBt
YWtlV2Vha1B0cihjdXJyZW50RWxlbWVudCksIG51bGxRTmFtZSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgeyBNYW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRl
KCksIGN1cnJlbnRFbGVtZW50LnRleHRDb250ZW50KCksIHRva2VuSW5mbygmY3VycmVudEVsZW1l
bnQpIH0gfSB9KTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGVz
KCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGN1cnJlbnRFbGVt
ZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0F0
dHJpYnV0ZUZvclRleHRNYW5pcHVsYXRpb24oY3VycmVudEVsZW1lbnQsIGF0dHJpYnV0ZS5uYW1l
KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbShNYW5pcHVsYXRpb25JdGVtRGF0
YSB7IFBvc2l0aW9uKCksIFBvc2l0aW9uKCksIG1ha2VXZWFrUHRyKGN1cnJlbnRFbGVtZW50KSwg
YXR0cmlidXRlLm5hbWUoKSwgeyBNYW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVy
LmdlbmVyYXRlKCksIGF0dHJpYnV0ZS52YWx1ZSgpLCB0b2tlbkluZm8oJmN1cnJlbnRFbGVtZW50
KSB9IH0gfSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50
RWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRv
JiBhdHRyaWJ1dGUgOiBjdXJyZW50RWxlbWVudC5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXR0cmlidXRlRm9yVGV4dE1hbmlwdWxhdGlvbihj
dXJyZW50RWxlbWVudCwgYXR0cmlidXRlLm5hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgUG9zaXRpb24oKSwgUG9zaXRp
b24oKSwgbWFrZVdlYWtQdHIoY3VycmVudEVsZW1lbnQpLCBhdHRyaWJ1dGUubmFtZSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tl
bklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgYXR0cmlidXRlLnZhbHVlKCksIHRva2VuSW5mbygmY3Vy
cmVudEVsZW1lbnQpIH0gfSB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWVu
Y2xvc2luZ0l0ZW1Cb3VuZGFyeUVsZW1lbnQgJiYgaXNFbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVt
ZW50KGN1cnJlbnRFbGVtZW50KSkKLSAgICAgICAgICAgICAgICAgICAgZW5jbG9zaW5nSXRlbUJv
dW5kYXJ5RWxlbWVudCA9ICZjdXJyZW50RWxlbWVudDsKICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICghZW5jbG9zaW5nSXRlbUJvdW5kYXJ5RWxlbWVudCAmJiBpc0VuY2xvc2luZ0l0ZW1C
b3VuZGFyeUVsZW1lbnQoY3VycmVudEVsZW1lbnQpKQorICAgICAgICAgICAgICAgIGVuY2xvc2lu
Z0l0ZW1Cb3VuZGFyeUVsZW1lbnQgPSAmY3VycmVudEVsZW1lbnQ7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAoY29udGVudC5pc1JlcGxhY2VkQ29udGVudCkgewotICAgICAgICAgICAgaWYgKHRv
a2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgICAgIGF1dG8gY3VycmVudEVuZE9mQ3VycmVudFBhcmFncmFwaCA9IHBv
c2l0aW9uQWZ0ZXJOb2RlKGNvbnRlbnQubm9kZS5nZXQoKSk7Ci0gICAgICAgICAgICAvLyBUaGlz
IGlzIGF0IHRoZSBzYW1lIE5vZGUgYXMgbGFzdCB0b2tlbiwgc28gaXQgaXMgYWxyZWFkeSBpbmNs
dWRlZCBpbiBjdXJyZW50IHJhbmdlLgotICAgICAgICAgICAgaWYgKCFpczxUZXh0Pihjb250ZW50
Lm5vZGUpICYmIGN1cnJlbnRFbmRPZkN1cnJlbnRQYXJhZ3JhcGguZXF1YWxzKGVuZE9mQ3VycmVu
dFBhcmFncmFwaCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGVu
ZE9mQ3VycmVudFBhcmFncmFwaCA9IGN1cnJlbnRFbmRPZkN1cnJlbnRQYXJhZ3JhcGg7Ci0gICAg
ICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlvblRva2Vu
IHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgIltdIiwgdG9rZW5JbmZvKGNvbnRlbnQu
bm9kZS5nZXQoKSksIHRydWUgfSk7Ci0KKyAgICAgICAgICAgIGlmICghdG9rZW5zSW5DdXJyZW50
UGFyYWdyYXBoLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudFBh
cmFncmFwaC5hcHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5l
cmF0ZSgpLCAiW10iLCB0b2tlbkluZm8oY29udGVudC5ub2RlLmdldCgpKSwgdHJ1ZSB9KTsKKyAg
ICAgICAgICAgICAgICBlbmRPZkN1cnJlbnRQYXJhZ3JhcGggPSBwb3NpdGlvbkFmdGVyTm9kZShj
b250ZW50Tm9kZSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmICghY29udGVudC5pc1RleHRDb250ZW50KQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgc2l6ZV90IHN0YXJ0T2ZDdXJyZW50TGluZSA9IDA7Ci0gICAg
ICAgIHNpemVfdCBvZmZzZXRPZk5leHROZXdMaW5lID0gMDsKLSAgICAgICAgU3RyaW5nVmlldyBj
dXJyZW50VGV4dCA9IGNvbnRlbnQudGV4dDsKLSAgICAgICAgd2hpbGUgKChvZmZzZXRPZk5leHRO
ZXdMaW5lID0gY3VycmVudFRleHQuZmluZCgnXG4nLCBzdGFydE9mQ3VycmVudExpbmUpKSAhPSBu
b3RGb3VuZCkgewotICAgICAgICAgICAgaWYgKGlzPFRleHQ+KGNvbnRlbnQubm9kZSkgJiYgc3Rh
cnRPZkN1cnJlbnRMaW5lIDwgb2Zmc2V0T2ZOZXh0TmV3TGluZSkgewotICAgICAgICAgICAgICAg
IGF1dG8gc3RyaW5nVW50aWxFbmRPZkxpbmUgPSBjdXJyZW50VGV4dC5zdWJzdHJpbmcoc3RhcnRP
ZkN1cnJlbnRMaW5lLCBvZmZzZXRPZk5leHROZXdMaW5lIC0gc3RhcnRPZkN1cnJlbnRMaW5lKS50
b1N0cmluZygpOwotICAgICAgICAgICAgICAgIGF1dG8mIHRleHROb2RlID0gZG93bmNhc3Q8VGV4
dD4oKmNvbnRlbnQubm9kZSk7Ci0gICAgICAgICAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBo
ID0gUG9zaXRpb24oJnRleHROb2RlLCBvZmZzZXRPZk5leHROZXdMaW5lKTsKLSAgICAgICAgICAg
ICAgICBpZiAodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
ICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBQb3NpdGlvbigmdGV4dE5vZGUsIHN0
YXJ0T2ZDdXJyZW50TGluZSk7Ci0KLSAgICAgICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJh
Z3JhcGguYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJh
dGUoKSwgc3RyaW5nVW50aWxFbmRPZkxpbmUsIHRva2VuSW5mbygmdGV4dE5vZGUpLCBleGNsdXNp
b25SdWxlTWF0Y2hlci5pc0V4Y2x1ZGVkKGNvbnRlbnQubm9kZS5nZXQoKSkgfSk7Ci0gICAgICAg
ICAgICB9CisgICAgICAgIGF1dG8gdG9rZW5zSW5DdXJyZW50Tm9kZSA9IHBhcnNlKGNvbnRlbnQu
dGV4dCwgY29udGVudE5vZGUpOworICAgICAgICBpZiAoIXRva2Vuc0luQ3VycmVudFBhcmFncmFw
aC5pc0VtcHR5KCkgJiYgdG9rZW5zSW5DdXJyZW50Tm9kZS5maXJzdFRva2VuQ29udGFpbnNMaW5l
QnJlYWspCisgICAgICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgc3RhcnRP
ZkN1cnJlbnRQYXJhZ3JhcGgsIGVuZE9mQ3VycmVudFBhcmFncmFwaCwgbnVsbHB0ciwgbnVsbFFO
YW1lKCksIHN0ZDo6ZXhjaGFuZ2UodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLCB7IH0pIH0pOwog
Ci0gICAgICAgICAgICBpZiAoIXRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoaXM8SFRNTEJSRWxlbWVudD4oY29udGVudC5ub2RlKSkKLSAg
ICAgICAgICAgICAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gcG9zaXRpb25BZnRlck5v
ZGUoY29udGVudC5ub2RlLmdldCgpKTsKLSAgICAgICAgICAgICAgICBhZGRJdGVtKE1hbmlwdWxh
dGlvbkl0ZW1EYXRhIHsgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgsIGVuZE9mQ3VycmVudFBhcmFn
cmFwaCwgbnVsbHB0ciwgbnVsbFFOYW1lKCksIHN0ZDo6ZXhjaGFuZ2UodG9rZW5zSW5DdXJyZW50
UGFyYWdyYXBoLCB7IH0pIH0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhcnRPZkN1
cnJlbnRMaW5lID0gb2Zmc2V0T2ZOZXh0TmV3TGluZSArIDE7CisgICAgICAgIGlmICh0b2tlbnNJ
bkN1cnJlbnRQYXJhZ3JhcGguaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAodG9rZW5zSW5D
dXJyZW50Tm9kZS5jb250YWluc09ubHlIVE1MU3BhY2UpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBzdGFydE9mQ3VycmVudFBhcmFncmFwaCA9IGZpcnN0UG9zaXRpb25J
bk9yQmVmb3JlTm9kZShjb250ZW50Tm9kZSk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIHJl
bWFpbmluZ1RleHQgPSBjdXJyZW50VGV4dC5zdWJzdHJpbmcoc3RhcnRPZkN1cnJlbnRMaW5lKTsK
LSAgICAgICAgaWYgKCFjb250YWluc09ubHlIVE1MU3BhY2VzKHJlbWFpbmluZ1RleHQpKSB7Ci0g
ICAgICAgICAgICBpZiAodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgICAgIGlmIChzdGFydE9mQ3VycmVudExpbmUgJiYgaXM8VGV4dD4oY29udGVudC5u
b2RlKSkKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBQb3Np
dGlvbigmZG93bmNhc3Q8VGV4dD4oKmNvbnRlbnQubm9kZSksIHN0YXJ0T2ZDdXJyZW50TGluZSk7
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzdGFydE9mQ3VycmVu
dFBhcmFncmFwaCA9IGl0ZXJhdG9yLnN0YXJ0UG9zaXRpb24oKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IGl0ZXJhdG9yLmVuZFBvc2l0aW9uKCk7
Ci0gICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlv
blRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgcmVtYWluaW5nVGV4dC50b1N0
cmluZygpLCB0b2tlbkluZm8oY29udGVudC5ub2RlLmdldCgpKSwgZXhjbHVzaW9uUnVsZU1hdGNo
ZXIuaXNFeGNsdWRlZChjb250ZW50Lm5vZGUuZ2V0KCkpIH0pOworICAgICAgICB0b2tlbnNJbkN1
cnJlbnRQYXJhZ3JhcGguYXBwZW5kVmVjdG9yKHRva2Vuc0luQ3VycmVudE5vZGUudG9rZW5zKTsK
KyAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gcG9zaXRpb25BZnRlck5vZGUoY29udGVu
dE5vZGUpOworCisgICAgICAgIGlmICghdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHko
KSAmJiB0b2tlbnNJbkN1cnJlbnROb2RlLmxhc3RUb2tlbkNvbnRhaW5zTGluZUJyZWFrKSB7Cisg
ICAgICAgICAgICBBU1NFUlQoIXRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpOwor
ICAgICAgICAgICAgYWRkSXRlbShNYW5pcHVsYXRpb25JdGVtRGF0YSB7IHN0YXJ0T2ZDdXJyZW50
UGFyYWdyYXBoLCBlbmRPZkN1cnJlbnRQYXJhZ3JhcGgsIG51bGxwdHIsIG51bGxRTmFtZSgpLCBz
dGQ6OmV4Y2hhbmdlKHRva2Vuc0luQ3VycmVudFBhcmFncmFwaCwgeyB9KSB9KTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtNDg5LDYgKzQ5OSw3IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6OmFkZEl0ZW0oTWFuaXB1bGF0aW9uSXRlbURhdGEmJiBpdGVtRGF0YSkKICAgICBjb25z
dCB1bnNpZ25lZCBpdGVtQ2FsbGJhY2tCYXRjaGluZ1NpemUgPSAxMjg7CiAKICAgICBBU1NFUlQo
bV9kb2N1bWVudCk7CisgICAgQVNTRVJUKCFpdGVtRGF0YS50b2tlbnMuaXNFbXB0eSgpKTsKICAg
ICBhdXRvIG5ld0lEID0gbV9pdGVtSWRlbnRpZmllci5nZW5lcmF0ZSgpOwogICAgIG1fcGVuZGlu
Z0l0ZW1zRm9yQ2FsbGJhY2suYXBwZW5kKE1hbmlwdWxhdGlvbkl0ZW0gewogICAgICAgICBuZXdJ
RCwKQEAgLTU1Niw5ICs1NjcsNiBAQCBhdXRvIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpy
ZXBsYWNlKGNvbnN0IE1hbmlwdWxhdGlvbkl0ZW1EYXRhJiBpdGVtLCBjb25zdAogICAgIGlmIChp
dGVtLnN0YXJ0LmlzT3JwaGFuKCkgfHwgaXRlbS5lbmQuaXNPcnBoYW4oKSkKICAgICAgICAgcmV0
dXJuIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpDb250ZW50Q2hhbmdlZDsKIAotICAgIHNpemVf
dCBjdXJyZW50VG9rZW5JbmRleCA9IDA7Ci0gICAgSGFzaE1hcDxUb2tlbklkZW50aWZpZXIsIFRv
a2VuRXhjaGFuZ2VEYXRhPiB0b2tlbkV4Y2hhbmdlTWFwOwotCiAgICAgaWYgKGl0ZW0uc3RhcnQu
aXNOdWxsKCkgfHwgaXRlbS5lbmQuaXNOdWxsKCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aXRlbS50b2tlbnMuc2l6ZSgpID09IDEpOwogICAgICAgICBhdXRvIGVsZW1lbnQgPSBtYWtlUmVm
UHRyKGl0ZW0uZWxlbWVudC5nZXQoKSk7CkBAIC01ODIsMTIzICs1OTAsMTY2IEBAIGF1dG8gVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbURh
dGEmIGl0ZW0sIGNvbnN0CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCisg
ICAgc2l6ZV90IGN1cnJlbnRUb2tlbkluZGV4ID0gMDsKKyAgICBIYXNoTWFwPFRva2VuSWRlbnRp
ZmllciwgVG9rZW5FeGNoYW5nZURhdGE+IHRva2VuRXhjaGFuZ2VNYXA7CiAgICAgUmVmUHRyPE5v
ZGU+IGNvbW1vbkFuY2VzdG9yOwogICAgIFJlZlB0cjxOb2RlPiBmaXJzdENvbnRlbnROb2RlOwot
ICAgIFBhcmFncmFwaENvbnRlbnRJdGVyYXRvciBpdGVyYXRvciB7IGl0ZW0uc3RhcnQsIGl0ZW0u
ZW5kIH07Ci0gICAgSGFzaFNldDxSZWY8Tm9kZT4+IGV4Y2x1ZGVkTm9kZXM7CisgICAgUmVmUHRy
PE5vZGU+IGxhc3RDaGlsZE9mQ29tbW9uQW5jZXN0b3JJblJhbmdlOwogICAgIEhhc2hTZXQ8UmVm
PE5vZGU+PiBub2Rlc1RvUmVtb3ZlOwotICAgIFJlZlB0cjxOb2RlPiBub2RlVG9JbnNlcnRCYWNr
QXRFbmQ7CisgICAgUGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yIGl0ZXJhdG9yIHsgaXRlbS5zdGFy
dCwgaXRlbS5lbmQgfTsKICAgICBmb3IgKDsgIWl0ZXJhdG9yLmF0RW5kKCk7IGl0ZXJhdG9yLmFk
dmFuY2UoKSkgewogICAgICAgICBhdXRvIGNvbnRlbnQgPSBpdGVyYXRvci5jdXJyZW50Q29udGVu
dCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRlbnQubm9kZSkKLSAgICAgICAgICAgIG5v
ZGVzVG9SZW1vdmUuYWRkKCpjb250ZW50Lm5vZGUpOworICAgICAgICBBU1NFUlQoY29udGVudC5u
b2RlKTsKKworICAgICAgICBsYXN0Q2hpbGRPZkNvbW1vbkFuY2VzdG9ySW5SYW5nZSA9IGNvbnRl
bnQubm9kZTsKKyAgICAgICAgbm9kZXNUb1JlbW92ZS5hZGQoKmNvbnRlbnQubm9kZSk7CiAKICAg
ICAgICAgaWYgKCFjb250ZW50LmlzUmVwbGFjZWRDb250ZW50ICYmICFjb250ZW50LmlzVGV4dENv
bnRlbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoY3VycmVudFRva2Vu
SW5kZXggPj0gaXRlbS50b2tlbnMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoY29udGVudC5u
b2RlICYmICFub2RlVG9JbnNlcnRCYWNrQXRFbmQgJiYgY29udGVudC5pc1RleHRDb250ZW50ICYm
IGNvbnRlbnQudGV4dCA9PSAiXG4iKSB7IC8vIGJyCi0gICAgICAgICAgICAgICAgbm9kZVRvSW5z
ZXJ0QmFja0F0RW5kID0gY29udGVudC5ub2RlOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBl
OjpDb250ZW50Q2hhbmdlZDsKLSAgICAgICAgfQorICAgICAgICBWZWN0b3I8TWFuaXB1bGF0aW9u
VG9rZW4+IHRva2Vuc0luQ3VycmVudE5vZGU7CisgICAgICAgIGlmIChjb250ZW50LmlzUmVwbGFj
ZWRDb250ZW50KQorICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50Tm9kZS5hcHBlbmQoaXRlbS50
b2tlbnNbY3VycmVudFRva2VuSW5kZXhdKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdG9r
ZW5zSW5DdXJyZW50Tm9kZSA9IHBhcnNlKGNvbnRlbnQudGV4dCwgY29udGVudC5ub2RlLmdldCgp
KS50b2tlbnM7CiAKLSAgICAgICAgaWYgKGNvbnRlbnQuaXNUZXh0Q29udGVudCAmJiBjb250YWlu
c09ubHlIVE1MU3BhY2VzKGNvbnRlbnQudGV4dCkpIHsKLSAgICAgICAgICAgIC8vIDxicj4gc2hv
dWxkIG5vdCBleGlzdCBpbiB0aGUgbWlkZGxlIG9mIGEgcGFyYWdyYXBoLgotICAgICAgICAgICAg
aWYgKGlzPEhUTUxCUkVsZW1lbnQ+KGNvbnRlbnQubm9kZSkpCisgICAgICAgIGJvb2wgaXNOb2Rl
SW5jbHVkZWQgPSBXVEY6OmFueU9mKHRva2Vuc0luQ3VycmVudE5vZGUsIFtdIChhdXRvJiB0b2tl
bikgeworICAgICAgICAgICAgcmV0dXJuICF0b2tlbi5pc0V4Y2x1ZGVkOworICAgICAgICB9KTsK
KyAgICAgICAgZm9yIChhdXRvJiB0b2tlbiA6IHRva2Vuc0luQ3VycmVudE5vZGUpIHsKKyAgICAg
ICAgICAgIGlmIChjdXJyZW50VG9rZW5JbmRleCA+IGl0ZW0udG9rZW5zLnNpemUoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gTWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU6OkNvbnRlbnRDaGFuZ2Vk
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KIAotICAgICAgICBhdXRvJiBjdXJy
ZW50VG9rZW4gPSBpdGVtLnRva2Vuc1tjdXJyZW50VG9rZW5JbmRleF07Ci0gICAgICAgIGlmICgh
Y29udGVudC5pc1JlcGxhY2VkQ29udGVudCAmJiBjb250ZW50LnRleHQgIT0gY3VycmVudFRva2Vu
LmNvbnRlbnQpCi0gICAgICAgICAgICByZXR1cm4gTWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU6OkNv
bnRlbnRDaGFuZ2VkOworICAgICAgICAgICAgYXV0byYgY3VycmVudFRva2VuID0gaXRlbS50b2tl
bnNbY3VycmVudFRva2VuSW5kZXgrK107CisgICAgICAgICAgICBpZiAoIWNvbnRlbnQuaXNSZXBs
YWNlZENvbnRlbnQgJiYgY3VycmVudFRva2VuLmNvbnRlbnQgIT0gdG9rZW4uY29udGVudCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU6OkNvbnRlbnRDaGFu
Z2VkOworCisgICAgICAgICAgICB0b2tlbkV4Y2hhbmdlTWFwLnNldChjdXJyZW50VG9rZW4uaWRl
bnRpZmllciwgVG9rZW5FeGNoYW5nZURhdGEgeyBjb250ZW50Lm5vZGUuY29weVJlZigpLCBjdXJy
ZW50VG9rZW4uY29udGVudCwgIWlzTm9kZUluY2x1ZGVkIH0pOworICAgICAgICB9CiAKLSAgICAg
ICAgdG9rZW5FeGNoYW5nZU1hcC5zZXQoY3VycmVudFRva2VuLmlkZW50aWZpZXIsIFRva2VuRXhj
aGFuZ2VEYXRhIHsgY29udGVudC5ub2RlLmNvcHlSZWYoKSwgY3VycmVudFRva2VuLmNvbnRlbnQs
IGN1cnJlbnRUb2tlbi5pc0V4Y2x1ZGVkIH0pOwotICAgICAgICArK2N1cnJlbnRUb2tlbkluZGV4
OwotICAgICAgICAKICAgICAgICAgaWYgKCFmaXJzdENvbnRlbnROb2RlKQogICAgICAgICAgICAg
Zmlyc3RDb250ZW50Tm9kZSA9IGNvbnRlbnQubm9kZTsKIAotICAgICAgICAvLyBGSVhNRTogVGFr
ZSBjYXJlIG9mIHdoZW4gY3VycmVudE5vZGUgaXMgbnVsbHB0ci4KLSAgICAgICAgaWYgKFJlZlB0
cjxOb2RlPiBwYXJlbnQgPSBjb250ZW50Lm5vZGUgPyBjb250ZW50Lm5vZGUtPnBhcmVudE5vZGUo
KSA6IG51bGxwdHIpIHsKLSAgICAgICAgICAgIGlmICghY29tbW9uQW5jZXN0b3IpCi0gICAgICAg
ICAgICAgICAgY29tbW9uQW5jZXN0b3IgPSBwYXJlbnQ7Ci0gICAgICAgICAgICBlbHNlIGlmICgh
cGFyZW50LT5pc0Rlc2NlbmRhbnRPZihjb21tb25BbmNlc3Rvci5nZXQoKSkpIHsKLSAgICAgICAg
ICAgICAgICBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKCpjb21tb25B
bmNlc3RvciwgKnBhcmVudCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNvbW1vbkFuY2VzdG9y
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgYXV0byBwYXJlbnROb2RlID0gY29udGVudC5ub2Rl
LT5wYXJlbnROb2RlKCk7CisgICAgICAgIGlmICghY29tbW9uQW5jZXN0b3IpCisgICAgICAgICAg
ICBjb21tb25BbmNlc3RvciA9IHBhcmVudE5vZGU7CisgICAgICAgIGVsc2UgaWYgKCFwYXJlbnRO
b2RlLT5pc0Rlc2NlbmRhbnRPZihjb21tb25BbmNlc3Rvci5nZXQoKSkpIHsKKyAgICAgICAgICAg
IGNvbW1vbkFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKmNvbW1vbkFuY2VzdG9y
LCAqcGFyZW50Tm9kZSk7CisgICAgICAgICAgICBBU1NFUlQoY29tbW9uQW5jZXN0b3IpOwogICAg
ICAgICB9CiAgICAgfQogCisgICAgd2hpbGUgKGxhc3RDaGlsZE9mQ29tbW9uQW5jZXN0b3JJblJh
bmdlICYmIGxhc3RDaGlsZE9mQ29tbW9uQW5jZXN0b3JJblJhbmdlLT5wYXJlbnROb2RlKCkgIT0g
Y29tbW9uQW5jZXN0b3IpCisgICAgICAgIGxhc3RDaGlsZE9mQ29tbW9uQW5jZXN0b3JJblJhbmdl
ID0gbGFzdENoaWxkT2ZDb21tb25BbmNlc3RvckluUmFuZ2UtPnBhcmVudE5vZGUoKTsKKwogICAg
IGZvciAoYXV0byBub2RlID0gY29tbW9uQW5jZXN0b3I7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJl
bnROb2RlKCkpCiAgICAgICAgIG5vZGVzVG9SZW1vdmUucmVtb3ZlKCpub2RlKTsKIAotICAgIFZl
Y3RvcjxSZWY8Tm9kZT4+IGN1cnJlbnRFbGVtZW50U3RhY2s7CiAgICAgSGFzaFNldDxSZWY8Tm9k
ZT4+IHJldXNlZE9yaWdpbmFsTm9kZXM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWY8Tm9kZT4s
IFJlZjxOb2RlPj4+IGxhc3RUb3BEb3duUGF0aDsKICAgICBWZWN0b3I8Tm9kZUluc2VydGlvbj4g
aW5zZXJ0aW9uczsKLSAgICBmb3IgKGF1dG8mIG5ld1Rva2VuIDogcmVwbGFjZW1lbnRUb2tlbnMp
IHsKLSAgICAgICAgYXV0byBpdCA9IHRva2VuRXhjaGFuZ2VNYXAuZmluZChuZXdUb2tlbi5pZGVu
dGlmaWVyKTsKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcmVwbGFjZW1lbnRU
b2tlbnMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGF1dG8mIHJlcGxhY2VtZW50VG9rZW4g
PSByZXBsYWNlbWVudFRva2Vuc1tpbmRleF07CisgICAgICAgIGF1dG8gaXQgPSB0b2tlbkV4Y2hh
bmdlTWFwLmZpbmQocmVwbGFjZW1lbnRUb2tlbi5pZGVudGlmaWVyKTsKICAgICAgICAgaWYgKGl0
ID09IHRva2VuRXhjaGFuZ2VNYXAuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gTWFuaXB1bGF0
aW9uRmFpbHVyZVR5cGU6OkludmFsaWRUb2tlbjsKIAogICAgICAgICBhdXRvJiBleGNoYW5nZURh
dGEgPSBpdC0+dmFsdWU7CisgICAgICAgIGF1dG8qIG9yaWdpbmFsTm9kZSA9IGV4Y2hhbmdlRGF0
YS5ub2RlLmdldCgpOworICAgICAgICBBU1NFUlQob3JpZ2luYWxOb2RlKTsKKyAgICAgICAgYXV0
byByZXBsYWNlbWVudFRleHQgPSByZXBsYWNlbWVudFRva2VuLmNvbnRlbnQ7CiAKLSAgICAgICAg
UmVmUHRyPE5vZGU+IGNvbnRlbnROb2RlOworICAgICAgICBFeGNsdXNpb25SdWxlTWF0Y2hlciBl
eGNsdXNpb25SdWxlTWF0Y2hlcihtX2V4Y2x1c2lvblJ1bGVzKTsKKyAgICAgICAgUmVmUHRyPE5v
ZGU+IHJlcGxhY2VtZW50Tm9kZTsKICAgICAgICAgaWYgKGV4Y2hhbmdlRGF0YS5pc0V4Y2x1ZGVk
KSB7CiAgICAgICAgICAgICBpZiAoZXhjaGFuZ2VEYXRhLmlzQ29uc3VtZWQpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpFeGNsdXNpb25WaW9sYXRpb247
CiAgICAgICAgICAgICBleGNoYW5nZURhdGEuaXNDb25zdW1lZCA9IHRydWU7Ci0gICAgICAgICAg
ICBpZiAoIW5ld1Rva2VuLmNvbnRlbnQuaXNOdWxsKCkgJiYgbmV3VG9rZW4uY29udGVudCAhPSBl
eGNoYW5nZURhdGEub3JpZ2luYWxDb250ZW50KQorCisgICAgICAgICAgICBpZiAoIXJlcGxhY2Vt
ZW50VG9rZW4uY29udGVudC5pc051bGwoKSAmJiByZXBsYWNlbWVudFRva2VuLmNvbnRlbnQgIT0g
ZXhjaGFuZ2VEYXRhLm9yaWdpbmFsQ29udGVudCkKICAgICAgICAgICAgICAgICByZXR1cm4gTWFu
aXB1bGF0aW9uRmFpbHVyZVR5cGU6OkV4Y2x1c2lvblZpb2xhdGlvbjsKLSAgICAgICAgICAgIGNv
bnRlbnROb2RlID0gZXhjaGFuZ2VEYXRhLm5vZGU7Ci0gICAgICAgICAgICBmb3IgKFJlZlB0cjxO
b2RlPiBjdXJyZW50RGVzY2VuZGVudE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpjb250ZW50
Tm9kZSwgY29udGVudE5vZGUuZ2V0KCkpOyBjdXJyZW50RGVzY2VuZGVudE5vZGU7IGN1cnJlbnRE
ZXNjZW5kZW50Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKmN1cnJlbnREZXNjZW5kZW50Tm9k
ZSwgY29udGVudE5vZGUuZ2V0KCkpKQotICAgICAgICAgICAgICAgIG5vZGVzVG9SZW1vdmUucmVt
b3ZlKCpjdXJyZW50RGVzY2VuZGVudE5vZGUpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IGNvbnRlbnROb2RlID0gVGV4dDo6Y3JlYXRlKGNvbW1vbkFuY2VzdG9yLT5kb2N1bWVudCgpLCBu
ZXdUb2tlbi5jb250ZW50KTsKIAotICAgICAgICBhdXRvJiBvcmlnaW5hbE5vZGUgPSBleGNoYW5n
ZURhdGEubm9kZSA/ICpleGNoYW5nZURhdGEubm9kZSA6ICpjb21tb25BbmNlc3RvcjsKLSAgICAg
ICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IGN1cnJlbnROb2RlID0gaXM8Q29udGFpbmVyTm9kZT4o
b3JpZ2luYWxOb2RlKSA/ICZkb3duY2FzdDxDb250YWluZXJOb2RlPihvcmlnaW5hbE5vZGUpIDog
b3JpZ2luYWxOb2RlLnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIHJlcGxhY2VtZW50Tm9kZSA9
IG9yaWdpbmFsTm9kZTsKKyAgICAgICAgICAgIGZvciAoUmVmUHRyPE5vZGU+IGRlc2NlbmRlbnRO
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqb3JpZ2luYWxOb2RlLCBvcmlnaW5hbE5vZGUpOyBk
ZXNjZW5kZW50Tm9kZTsgZGVzY2VuZGVudE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpkZXNj
ZW5kZW50Tm9kZSwgb3JpZ2luYWxOb2RlKSkKKyAgICAgICAgICAgICAgICBub2Rlc1RvUmVtb3Zl
LnJlbW92ZSgqZGVzY2VuZGVudE5vZGUpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJl
cGxhY2VtZW50Tm9kZSA9IFRleHQ6OmNyZWF0ZShjb21tb25BbmNlc3Rvci0+ZG9jdW1lbnQoKSwg
cmVwbGFjZW1lbnRUZXh0KTsKIAotICAgICAgICBWZWN0b3I8UmVmPE5vZGU+PiBjdXJyZW50QW5j
ZXN0b3JzOwotICAgICAgICBmb3IgKDsgY3VycmVudE5vZGUgJiYgY3VycmVudE5vZGUgIT0gY29t
bW9uQW5jZXN0b3I7IGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKSkKLSAg
ICAgICAgICAgIGN1cnJlbnRBbmNlc3RvcnMuYXBwZW5kKCpjdXJyZW50Tm9kZSk7Ci0gICAgICAg
IGN1cnJlbnRBbmNlc3RvcnMucmV2ZXJzZSgpOworICAgICAgICBSZWZQdHI8Q29udGFpbmVyTm9k
ZT4gY29udGFpbmVyTm9kZSA9IGlzPENvbnRhaW5lck5vZGU+KCpvcmlnaW5hbE5vZGUpID8gJmRv
d25jYXN0PENvbnRhaW5lck5vZGU+KCpvcmlnaW5hbE5vZGUpIDogb3JpZ2luYWxOb2RlLT5wYXJl
bnROb2RlKCk7CisgICAgICAgIFZlY3RvcjxSZWY8Tm9kZT4+IHRvcERvd25QYXRoOworICAgICAg
ICBmb3IgKDsgY29udGFpbmVyTm9kZSAmJiBjb250YWluZXJOb2RlICE9IGNvbW1vbkFuY2VzdG9y
OyBjb250YWluZXJOb2RlID0gY29udGFpbmVyTm9kZS0+cGFyZW50Tm9kZSgpKQorICAgICAgICAg
ICAgdG9wRG93blBhdGguYXBwZW5kKCpjb250YWluZXJOb2RlKTsKKyAgICAgICAgdG9wRG93blBh
dGgucmV2ZXJzZSgpOwogCiAgICAgICAgIHNpemVfdCBpID0wOwotICAgICAgICB3aGlsZSAoaSA8
IGN1cnJlbnRFbGVtZW50U3RhY2suc2l6ZSgpICYmIGkgPCBjdXJyZW50QW5jZXN0b3JzLnNpemUo
KSAmJiBjdXJyZW50RWxlbWVudFN0YWNrW2ldLnB0cigpID09IGN1cnJlbnRBbmNlc3RvcnNbaV0u
cHRyKCkpCisgICAgICAgIHdoaWxlIChpIDwgbGFzdFRvcERvd25QYXRoLnNpemUoKSAmJiBpIDwg
dG9wRG93blBhdGguc2l6ZSgpICYmIGxhc3RUb3BEb3duUGF0aFtpXS5zZWNvbmQucHRyKCkgPT0g
dG9wRG93blBhdGhbaV0ucHRyKCkpCiAgICAgICAgICAgICArK2k7CiAKLSAgICAgICAgaWYgKGkg
PT0gY3VycmVudEVsZW1lbnRTdGFjay5zaXplKCkgJiYgaSA9PSBjdXJyZW50QW5jZXN0b3JzLnNp
emUoKSkKLSAgICAgICAgICAgIGluc2VydGlvbnMuYXBwZW5kKE5vZGVJbnNlcnRpb24geyBjdXJy
ZW50RWxlbWVudFN0YWNrLnNpemUoKSA/IGN1cnJlbnRFbGVtZW50U3RhY2subGFzdCgpLnB0cigp
IDogbnVsbHB0ciwgY29udGVudE5vZGUucmVsZWFzZU5vbk51bGwoKSB9KTsKKyAgICAgICAgaWYg
KGkgPT0gbGFzdFRvcERvd25QYXRoLnNpemUoKSAmJiBpID09IHRvcERvd25QYXRoLnNpemUoKSkK
KyAgICAgICAgICAgIGluc2VydGlvbnMuYXBwZW5kKE5vZGVJbnNlcnRpb24geyBsYXN0VG9wRG93
blBhdGguc2l6ZSgpID8gbGFzdFRvcERvd25QYXRoLmxhc3QoKS5zZWNvbmQucHRyKCkgOiBudWxs
cHRyLCByZXBsYWNlbWVudE5vZGUucmVsZWFzZU5vbk51bGwoKSB9KTsKICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBpZiAoaSA8IGN1cnJlbnRFbGVtZW50U3RhY2suc2l6ZSgpKQotICAgICAg
ICAgICAgICAgIGN1cnJlbnRFbGVtZW50U3RhY2suc2hyaW5rKGkpOwotICAgICAgICAgICAgZm9y
ICg7aSA8IGN1cnJlbnRBbmNlc3RvcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBS
ZWY8Tm9kZT4gY3VycmVudE5vZGUgPSBjdXJyZW50QW5jZXN0b3JzW2ldLmNvcHlSZWYoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIXJldXNlZE9yaWdpbmFsTm9kZXMuYWRkKGN1cnJlbnROb2RlLmNv
cHlSZWYoKSkuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNsb25lZE5v
ZGUgPSBjdXJyZW50Tm9kZS0+Y2xvbmVOb2RlSW50ZXJuYWwoY3VycmVudE5vZGUtPmRvY3VtZW50
KCksIE5vZGU6OkNsb25pbmdPcGVyYXRpb246Ok9ubHlTZWxmKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIGRhdGEgPSBjdXJyZW50Tm9kZS0+ZXZlbnRUYXJnZXREYXRhKCkpCisgICAg
ICAgICAgICBpZiAoaSA8IGxhc3RUb3BEb3duUGF0aC5zaXplKCkpCisgICAgICAgICAgICAgICAg
bGFzdFRvcERvd25QYXRoLnNocmluayhpKTsKKworICAgICAgICAgICAgZm9yICg7aSA8IHRvcERv
d25QYXRoLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgUmVmPE5vZGU+IG5vZGUgPSB0
b3BEb3duUGF0aFtpXS5jb3B5UmVmKCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXVzZWRPcmln
aW5hbE5vZGVzLmFkZChub2RlLmNvcHlSZWYoKSkuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIGNsb25lZE5vZGUgPSBub2RlLT5jbG9uZU5vZGVJbnRlcm5hbChub2RlLT5k
b2N1bWVudCgpLCBOb2RlOjpDbG9uaW5nT3BlcmF0aW9uOjpPbmx5U2VsZik7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChhdXRvKiBkYXRhID0gbm9kZS0+ZXZlbnRUYXJnZXREYXRhKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhLT5ldmVudExpc3RlbmVyTWFwLmNvcHlFdmVudExpc3Rl
bmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQoY2xvbmVkTm9kZS5wdHIoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlID0gV1RGTW92ZShjbG9uZWROb2RlKTsKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSA9IFdURk1vdmUoY2xvbmVkTm9kZSk7CiAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGluc2VydGlvbnMuYXBwZW5kKE5vZGVJbnNlcnRpb24geyBs
YXN0VG9wRG93blBhdGguc2l6ZSgpID8gbGFzdFRvcERvd25QYXRoLmxhc3QoKS5zZWNvbmQucHRy
KCkgOiBudWxscHRyLCBub2RlLmNvcHlSZWYoKSB9KTsKKyAgICAgICAgICAgICAgICBsYXN0VG9w
RG93blBhdGguYXBwZW5kKHsgdG9wRG93blBhdGhbaV0uY29weVJlZigpLCBXVEZNb3ZlKG5vZGUp
IH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5zZXJ0aW9ucy5hcHBlbmQoTm9kZUlu
c2VydGlvbiB7IGxhc3RUb3BEb3duUGF0aC5zaXplKCkgPyBsYXN0VG9wRG93blBhdGgubGFzdCgp
LnNlY29uZC5wdHIoKSA6IG51bGxwdHIsIHJlcGxhY2VtZW50Tm9kZS5yZWxlYXNlTm9uTnVsbCgp
IH0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQWRkIGJhY2sgcmVtb3ZlZCBOb2RlcyB0
aGF0IGFyZSBub3QgaW4gdGhlIHJhbmdlLgorICAgIGF1dG8gZW5kID0gbGFzdENoaWxkT2ZDb21t
b25BbmNlc3RvckluUmFuZ2UgPyBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKGxhc3RDaGlsZE9m
Q29tbW9uQW5jZXN0b3JJblJhbmdlLmdldCgpKSA6IHBvc2l0aW9uQWZ0ZXJOb2RlKGNvbW1vbkFu
Y2VzdG9yLmdldCgpKTsKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGl0ZW0uZW5kLmZpcnN0Tm9k
ZSgpOworICAgIFJlZlB0cjxOb2RlPiBlbmROb2RlID0gZW5kLmZpcnN0Tm9kZSgpOworICAgIGlm
IChub2RlICYmIG5vZGUgIT0gZW5kTm9kZSkgeworICAgICAgICBSZWZQdHI8Tm9kZT4gY29udGFp
bmVyTm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgVmVjdG9yPFJlZjxOb2RlPj4g
dG9wRG93blBhdGg7CisgICAgICAgIGZvciAoOyBjb250YWluZXJOb2RlICYmIGNvbnRhaW5lck5v
ZGUgIT0gY29tbW9uQW5jZXN0b3I7IGNvbnRhaW5lck5vZGUgPSBjb250YWluZXJOb2RlLT5wYXJl
bnROb2RlKCkpCisgICAgICAgICAgICB0b3BEb3duUGF0aC5hcHBlbmQoKmNvbnRhaW5lck5vZGUp
OworICAgICAgICB0b3BEb3duUGF0aC5yZXZlcnNlKCk7CiAKLSAgICAgICAgICAgICAgICBpbnNl
cnRpb25zLmFwcGVuZChOb2RlSW5zZXJ0aW9uIHsgY3VycmVudEVsZW1lbnRTdGFjay5zaXplKCkg
PyBjdXJyZW50RWxlbWVudFN0YWNrLmxhc3QoKS5wdHIoKSA6IG51bGxwdHIsIGN1cnJlbnROb2Rl
LmNvcHlSZWYoKSB9KTsKLSAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudFN0YWNrLmFwcGVu
ZChXVEZNb3ZlKGN1cnJlbnROb2RlKSk7CisgICAgICAgIHNpemVfdCBpID0wOworICAgICAgICB3
aGlsZSAoaSA8IGxhc3RUb3BEb3duUGF0aC5zaXplKCkgJiYgaSA8IHRvcERvd25QYXRoLnNpemUo
KSAmJiBsYXN0VG9wRG93blBhdGhbaV0uc2Vjb25kLnB0cigpID09IHRvcERvd25QYXRoW2ldLnB0
cigpKQorICAgICAgICAgICAgKytpOworCisgICAgICAgIGlmIChpIDwgbGFzdFRvcERvd25QYXRo
LnNpemUoKSkKKyAgICAgICAgICAgIGxhc3RUb3BEb3duUGF0aC5zaHJpbmsoaSk7CisKKyAgICAg
ICAgZm9yICg7aSA8IHRvcERvd25QYXRoLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRv
IG5vZGUgPSB0b3BEb3duUGF0aFtpXTsKKyAgICAgICAgICAgIGlmICghcmV1c2VkT3JpZ2luYWxO
b2Rlcy5hZGQobm9kZS5jb3B5UmVmKCkpLmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgICAgICBh
dXRvIGNsb25lZE5vZGUgPSBub2RlLT5jbG9uZU5vZGVJbnRlcm5hbChub2RlLT5kb2N1bWVudCgp
LCBOb2RlOjpDbG9uaW5nT3BlcmF0aW9uOjpPbmx5U2VsZik7CisgICAgICAgICAgICAgICAgaWYg
KGF1dG8qIGRhdGEgPSBub2RlLT5ldmVudFRhcmdldERhdGEoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YS0+ZXZlbnRMaXN0ZW5lck1hcC5jb3B5RXZlbnRMaXN0ZW5lcnNOb3RDcmVhdGVkRnJv
bU1hcmt1cFRvVGFyZ2V0KGNsb25lZE5vZGUucHRyKCkpOworICAgICAgICAgICAgICAgIG5vZGUg
PSBXVEZNb3ZlKGNsb25lZE5vZGUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5zZXJ0
aW9ucy5hcHBlbmQoTm9kZUluc2VydGlvbiB7IGN1cnJlbnRFbGVtZW50U3RhY2suc2l6ZSgpID8g
Y3VycmVudEVsZW1lbnRTdGFjay5sYXN0KCkucHRyKCkgOiBudWxscHRyLCBjb250ZW50Tm9kZS5y
ZWxlYXNlTm9uTnVsbCgpIH0pOworICAgICAgICAgICAgaW5zZXJ0aW9ucy5hcHBlbmQoTm9kZUlu
c2VydGlvbiB7IGxhc3RUb3BEb3duUGF0aC5zaXplKCkgPyBsYXN0VG9wRG93blBhdGgubGFzdCgp
LnNlY29uZC5wdHIoKSA6IG51bGxwdHIsIG5vZGUuY29weVJlZigpIH0pOworICAgICAgICAgICAg
bGFzdFRvcERvd25QYXRoLmFwcGVuZCh7IHRvcERvd25QYXRoW2ldLmNvcHlSZWYoKSwgV1RGTW92
ZShub2RlKSB9KTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobm9kZVRvSW5zZXJ0QmFja0F0
RW5kKQotICAgICAgICBpbnNlcnRpb25zLmFwcGVuZChOb2RlSW5zZXJ0aW9uIHsgbnVsbHB0ciwg
bm9kZVRvSW5zZXJ0QmFja0F0RW5kLnJlbGVhc2VOb25OdWxsKCkgfSk7CisKKyAgICB3aGlsZSAo
bm9kZSAhPSBlbmROb2RlKSB7CisgICAgICAgIFJlZjxOb2RlPiBwYXJlbnROb2RlID0gKm5vZGUt
PnBhcmVudE5vZGUoKTsKKyAgICAgICAgd2hpbGUgKCFsYXN0VG9wRG93blBhdGguaXNFbXB0eSgp
ICYmIGxhc3RUb3BEb3duUGF0aC5sYXN0KCkuZmlyc3QucHRyKCkgIT0gcGFyZW50Tm9kZS5wdHIo
KSkKKyAgICAgICAgICAgIGxhc3RUb3BEb3duUGF0aC5yZW1vdmVMYXN0KCk7CisKKyAgICAgICAg
aW5zZXJ0aW9ucy5hcHBlbmQoTm9kZUluc2VydGlvbiB7IGxhc3RUb3BEb3duUGF0aC5zaXplKCkg
PyBsYXN0VG9wRG93blBhdGgubGFzdCgpLnNlY29uZC5wdHIoKSA6IG51bGxwdHIsICpub2RlIH0p
OworICAgICAgICBsYXN0VG9wRG93blBhdGguYXBwZW5kKHsgKm5vZGUsICpub2RlIH0pOworICAg
ICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSk7CisgICAgfQogCiAgICAgUG9z
aXRpb24gaW5zZXJ0aW9uUG9pbnQgPSBwb3NpdGlvbkJlZm9yZU5vZGUoZmlyc3RDb250ZW50Tm9k
ZS5nZXQoKSkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgd2hpbGUgKGluc2VydGlv
blBvaW50LmNvbnRhaW5lck5vZGUoKSAhPSBjb21tb25BbmNlc3RvcikKICAgICAgICAgaW5zZXJ0
aW9uUG9pbnQgPSBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShpbnNlcnRpb25Qb2ludC5jb250
YWluZXJOb2RlKCkpOwotICAgIEFTU0VSVCghaW5zZXJ0aW9uUG9pbnQuaXNOdWxsKCkpOwotICAg
IEFTU0VSVCghaW5zZXJ0aW9uUG9pbnQuaXNPcnBoYW4oKSk7CiAKICAgICBmb3IgKGF1dG8mIG5v
ZGUgOiBub2Rlc1RvUmVtb3ZlKQogICAgICAgICBub2RlLT5yZW1vdmUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaAppbmRleCBi
NWQzYTY5ZDBmZjkxZGY3MmUwZTU5YTA2NWM1N2QwYzVhNzYyNjkyLi4yODU4ODI1MWM0MmEyZDdi
NmUwNGQ1ZmQxNGFjYWZjMjlkMWYxOWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oCkBAIC0xMzgsNiArMTM4LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBib29sIGlzSW5NYW5pcHVsYXRlZEVsZW1lbnQoRWxlbWVudCYp
OwogICAgIHZvaWQgb2JzZXJ2ZVBhcmFncmFwaHMoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25z
dCBQb3NpdGlvbiYgZW5kKTsKKyAgICB2b2lkIG9ic2VydmVQYXJhZ3JhcGhzT3ZlcndyaXRlKGNv
bnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CiAgICAgdm9pZCBzY2hl
ZHVsZU9ic2VydmF0aW9uVXBkYXRlKCk7CiAKICAgICBzdHJ1Y3QgTWFuaXB1bGF0aW9uSXRlbURh
dGEgewpAQCAtMTUwLDkgKzE1MSwxOSBAQCBwcml2YXRlOgogICAgICAgICBWZWN0b3I8TWFuaXB1
bGF0aW9uVG9rZW4+IHRva2VuczsKICAgICB9OwogCisgICAgc3RydWN0IE1hbmlwdWxhdGlvblRv
a2VucyB7CisgICAgICAgIFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zOworICAgICAg
ICBib29sIGNvbnRhaW5zT25seUhUTUxTcGFjZTsKKyAgICAgICAgYm9vbCBjb250YWluc0xpbmVC
cmVhazsKKyAgICAgICAgYm9vbCBmaXJzdFRva2VuQ29udGFpbnNMaW5lQnJlYWs7CisgICAgICAg
IGJvb2wgbGFzdFRva2VuQ29udGFpbnNMaW5lQnJlYWs7CisgICAgfTsKKyAgICBNYW5pcHVsYXRp
b25Ub2tlbnMgcGFyc2UoU3RyaW5nVmlldyB0ZXh0LCBOb2RlKiB0ZXh0Tm9kZSk7CisKICAgICB2
b2lkIGFkZEl0ZW0oTWFuaXB1bGF0aW9uSXRlbURhdGEmJik7CiAgICAgdm9pZCBmbHVzaFBlbmRp
bmdJdGVtc0ZvckNhbGxiYWNrKCk7CiAgICAgT3B0aW9uYWw8TWFuaXB1bGF0aW9uRmFpbHVyZVR5
cGU+IHJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbURhdGEmLCBjb25zdCBWZWN0b3I8TWFu
aXB1bGF0aW9uVG9rZW4+Jik7CisgICAgT3B0aW9uYWw8TWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU+
IHJlcGxhY2VPdmVyd3JpdGUoY29uc3QgTWFuaXB1bGF0aW9uSXRlbURhdGEmLCBjb25zdCBWZWN0
b3I8TWFuaXB1bGF0aW9uVG9rZW4+Jik7CiAKICAgICBXZWFrUHRyPERvY3VtZW50PiBtX2RvY3Vt
ZW50OwogICAgIFdlYWtIYXNoU2V0PEVsZW1lbnQ+IG1fZWxlbWVudHNXaXRoTmV3UmVuZGVyZXI7
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDgy
OWJmYzY1M2ZlMDljMDRiMWYzMDNlNTNmZjRkYzMyZTEzN2I5Ni4uNDdiNzJkNmE3OGI3NmM5NDcy
YmY2N2I5YTM2NjA5MWNhNWZmMzFhMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA1LTMxICBTaWh1aSBMaXUg
IDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyIHNob3VsZCBwdXQgdGV4dCBpbiBzYW1lIG5vZGUgaW4gdGhlIHNhbWUgcGFyYWdyYXBoCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI1NDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDIwLTA1LTMwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFw
cGxlLmNvbT4KIAogICAgICAgICBFeHRlbmRlZCBDb2xvcjogQWRkaXRpb25hbCBjb2xvciBjbGVh
bnVwcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9U
ZXh0TWFuaXB1bGF0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9UZXh0TWFuaXB1bGF0aW9uLm1tCmluZGV4IGY2NGI2ZTM5M2ZjOTMxNTNhOWMxMTg4Y2RkMDgw
N2Q2N2VlOWVmZjcuLjQwZDRkY2YzMzc3OGE0MmUwZjVjNWJmZjE0MTQzOGM3MWQ5OTkyOWEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlw
dWxhdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rl
eHRNYW5pcHVsYXRpb24ubW0KQEAgLTE3OSwxNSArMTc5LDEzIEBAIFRFU1QoVGV4dE1hbmlwdWxh
dGlvbiwgU3RhcnRUZXh0TWFuaXB1bGF0aW9uRmluZE11bHRpcGxlUGFyYWdyYXBoc0luU2luZ2xl
VGV4dE5vCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIAogICAgIGF1dG8g
Kml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKLSAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDNV
TCk7Ci0gICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBF
Q1RfRVEoaXRlbXMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5j
b3VudCwgNVVMKTsKICAgICBFWFBFQ1RfU1RSRVEoImhlbGxvIiwgaXRlbXNbMF0udG9rZW5zWzBd
LmNvbnRlbnQuVVRGOFN0cmluZyk7Ci0KLSAgICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNv
dW50LCAxVUwpOwotICAgIEVYUEVDVF9TVFJFUSgid29ybGQiLCBpdGVtc1sxXS50b2tlbnNbMF0u
Y29udGVudC5VVEY4U3RyaW5nKTsKLQotICAgIEVYUEVDVF9FUShpdGVtc1syXS50b2tlbnMuY291
bnQsIDFVTCk7Ci0gICAgRVhQRUNUX1NUUkVRKCJXZWJLaXQiLCBpdGVtc1syXS50b2tlbnNbMF0u
Y29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIlxuIiwgaXRlbXNbMF0udG9r
ZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJ3b3JsZCIsIGl0
ZW1zWzBdLnRva2Vuc1syXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgi
XG4iLCBpdGVtc1swXS50b2tlbnNbM10uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1Rf
U1RSRVEoIldlYktpdCIsIGl0ZW1zWzBdLnRva2Vuc1s0XS5jb250ZW50LlVURjhTdHJpbmcpOwog
fQogCiBURVNUKFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkZpbmRQYXJh
Z3JhcGhzV2l0aE11bHRpbGVUb2tlbnMpCkBAIC03ODYsNiArNzg0LDcxIEBAIFRFU1QoVGV4dE1h
bmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFuaXB1bGF0aW9uRXh0cmFjdHNWYWx1ZXNGcm9tQnV0dG9u
SW5wdXRzKQogICAgIEVYUEVDVF9XS19TVFJFUSgiVHdvIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNv
bnRlbnQpOwogfQogCitURVNUKFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhdGlv
bkV4dHJhY3RzVmlzaWJsZUxpbmVCcmVha3NJblRleHRBc0V4Y2x1ZGVkVG9rZW5zKQoreworICAg
IGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9j
XSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2Vi
VmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAg
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIK
KyAgICAgICAgIjxib2R5PiIKKyAgICAgICAgIjxzcGFuIHN0eWxlPSd3aGl0ZS1zcGFjZTpwcmU7
Jz4mIzEwOyBvbmUmIzEwOyAgdHdvPC9zcGFuPiIKKyAgICAgICAgIjxzcGFuIHN0eWxlPSd3aGl0
ZS1zcGFjZTpwcmU7Jz4mIzEwOzwvc3Bhbj4iCisgICAgICAgICI8c3Bhbj4mIzEwOyB0aHJlZSYj
MTA7ICBmb3VyJiMxMDs8L3NwYW4+IgorICAgICAgICAiPC9ib2R5PiJdOworCisgICAgZG9uZSA9
IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3Vy
YXRpb246bmlsIGNvbXBsZXRpb246XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gaXRlbXMgPSBb
ZGVsZWdhdGUgaXRlbXNdOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMlVMKTsKKyAgICBF
WFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCA0VUwpOworICAgIEVYUEVDVF9TVFJFUSgi
XG4gIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNU
X1RSVUUoaXRlbXNbMF0udG9rZW5zWzBdLmlzRXhjbHVkZWQpOworICAgIEVYUEVDVF9TVFJFUSgi
b25lIiwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNU
X0ZBTFNFKGl0ZW1zWzBdLnRva2Vuc1sxXS5pc0V4Y2x1ZGVkKTsKKyAgICBFWFBFQ1RfU1RSRVEo
IlxuICAiLCBpdGVtc1swXS50b2tlbnNbMl0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBF
Q1RfVFJVRShpdGVtc1swXS50b2tlbnNbMl0uaXNFeGNsdWRlZCk7CisgICAgRVhQRUNUX1NUUkVR
KCJ0d28iLCBpdGVtc1swXS50b2tlbnNbM10uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBF
Q1RfRkFMU0UoaXRlbXNbMF0udG9rZW5zWzNdLmlzRXhjbHVkZWQpOworICAgIEVYUEVDVF9FUShp
dGVtc1sxXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJ0aHJlZSBmb3Vy
IiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7Cit9CisKK1RFU1QoVGV4
dE1hbmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFuaXB1bGF0aW9uRXh0cmFjdHNWYWx1ZXNCeU5vZGUp
Cit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdh
dGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOwor
ICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCld
OworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBF
IGh0bWw+IgorICAgICAgICAiPGJvZHk+IgorICAgICAgICAiPHNwYW4+b25lPC9zcGFuPjxzcGFu
IHN0eWxlPSd3aGl0ZS1zcGFjZTpwcmU7Jz50d28gJiMxMDsgdGhyZWU8L3NwYW4+PHNwYW4+Zm91
cjwvc3Bhbj4iCisgICAgICAgICI8c3BhbiBzdHlsZT0nd2hpdGUtc3BhY2U6cHJlOyc+JiMxMDtm
aXZlPC9zcGFuPiIKKyAgICAgICAgIjwvYm9keT4iXTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAg
ICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOm5pbCBj
b21wbGV0aW9uOl57CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvIGl0ZW1zID0gW2RlbGVnYXRlIGl0
ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX0VRKGl0
ZW1zWzBdLnRva2Vucy5jb3VudCwgNVVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoIm9uZSIsIGl0ZW1z
WzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgidHdv
IiwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NU
UkVRKCIgXG4gIiwgaXRlbXNbMF0udG9rZW5zWzJdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAg
RVhQRUNUX1NUUkVRKCJ0aHJlZSIsIGl0ZW1zWzBdLnRva2Vuc1szXS5jb250ZW50LlVURjhTdHJp
bmcpOworICAgIEVYUEVDVF9TVFJFUSgiZm91ciIsIGl0ZW1zWzBdLnRva2Vuc1s0XS5jb250ZW50
LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9FUShpdGVtc1sxXS50b2tlbnMuY291bnQsIDJVTCk7
CisgICAgRVhQRUNUX1NUUkVRKCJcbiIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50LlVURjhT
dHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiZml2ZSIsIGl0ZW1zWzFdLnRva2Vuc1sxXS5jb250
ZW50LlVURjhTdHJpbmcpOworfQorCiBzdHJ1Y3QgVG9rZW4gewogICAgIE5TU3RyaW5nICppZGVu
dGlmaWVyOwogICAgIE5TU3RyaW5nICpjb250ZW50OwpAQCAtMTA2NCw3ICsxMTI3LDcgQEAgVEVT
VChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25SZXBsYWNlUGFyYWdy
YXBoc1NlcGFyYXRlZEJ5V3JhcHAKICAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgfV07CiAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIjxw
PjxiPkhlbGxvLCA8L2I+V29ybGQ8YnI+V2ViS2l0PC9wPiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCJdKTsKKyAgICBFWFBF
Q1RfV0tfU1RSRVEoIjxwPjxiPkhlbGxvLCA8L2I+V29ybGQ8Yj48YnI+PC9iPldlYktpdDwvcD4i
LCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5p
bm5lckhUTUwiXSk7CiB9CiAKIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFu
aXB1bGF0aW9uRmFpbFdoZW5CUklzSW5zZXJ0ZWQpCkBAIC0xOTY3LDYgKzIwMzAsMTIzIEBAIFRF
U1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uQ29ycmVjdFBhcmFn
cmFwaFJhbmdlKQogICAgIEVYUEVDVF9XS19TVFJFUSgiPGRpdiBjbGFzcz1cImZyYW1lXCI+PGRp
diBjbGFzcz1cInN1YmZyYW1lXCI+PC9kaXY+PC9kaXY+PHN0eWxlPjwvc3R5bGU+PGRpdiBjbGFz
cz1cImlubGluZVwiPjxkaXY+PGxpPjxhIGhyZWY9XCIjXCI+aGVsbG88L2E+PC9saT48bGk+PGEg
aHJlZj1cIiNcIj53b3JsZDwvYT48L2xpPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9XCJmcmFtZVwi
PjxkaXYgY2xhc3M9XCJzdWJmcmFtZVwiPjwvZGl2PjwvZGl2PiIsIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCJdKTsKIH0KIAor
VEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25DYW5NZXJnZUNv
bnRlbnRBbmRQcmVzZXJ2ZUxpbmVCcmVha3MpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0
TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01h
a2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0
aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNs
eUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+IgorICAgICAgICAiPGJvZHk+IgorICAg
ICAgICAiPHNwYW4gc3R5bGU9J3doaXRlLXNwYWNlOnByZTsnPm9uZSAmIzEwOyB0d28gJiMxMDs8
L3NwYW4+IgorICAgICAgICAiPC9ib2R5PiJdOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3
ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246bmlsIGNvbXBs
ZXRpb246XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNd
OworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNb
MF0udG9rZW5zLmNvdW50LCA0VUwpOworICAgIEVYUEVDVF9TVFJFUSgib25lIiwgaXRlbXNbMF0u
dG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCIgXG4gIiwg
aXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVR
KCJ0d28iLCBpdGVtc1swXS50b2tlbnNbMl0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBF
Q1RfU1RSRVEoIiBcbiIsIGl0ZW1zWzBdLnRva2Vuc1szXS5jb250ZW50LlVURjhTdHJpbmcpOwor
CisgICAgYXV0byByZXBsYWNlbWVudEl0ZW1zID0gcmV0YWluUHRyKEBbCisgICAgICAgIGNyZWF0
ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeyB7IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlm
aWVyLCBAIk9ORSIgfSwgeyBpdGVtc1swXS50b2tlbnNbMV0uaWRlbnRpZmllciwgaXRlbXNbMF0u
dG9rZW5zWzFdLmNvbnRlbnQgfSwgeyBpdGVtc1swXS50b2tlbnNbMl0uaWRlbnRpZmllciwgQCJU
V08iIH0sIHsgaXRlbXNbMF0udG9rZW5zWzNdLmlkZW50aWZpZXIsIGl0ZW1zWzBdLnRva2Vuc1sz
XS5jb250ZW50IH0gfSkuYXV0b3JlbGVhc2UoKSwKKyAgICBdKTsKKworICAgIGRvbmUgPSBmYWxz
ZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uRm9ySXRlbXM6cmVwbGFj
ZW1lbnRJdGVtcy5nZXQoKSBjb21wbGV0aW9uOl4oTlNBcnJheTxOU0Vycm9yICo+ICplcnJvcnMp
IHsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9ycywgbmlsKTsKKyAgICAgICAgZG9uZSA9IHRydWU7
CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIEVY
UEVDVF9XS19TVFJFUSgiPHNwYW4gc3R5bGU9XCJ3aGl0ZS1zcGFjZTpwcmU7XCI+T05FIFxuIFRX
TyBcbjwvc3Bhbj4iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9j
dW1lbnQuYm9keS5pbm5lckhUTUwiXSk7Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29t
cGxldGVUZXh0TWFuaXB1bGF0aW9uU2hvdWxkUHJlc2VydmVOb2Rlc0FmdGVyUGFyYWdyYXBoUmFu
Z2UpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVs
ZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0p
OworICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0
KCldOworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NU
WVBFIGh0bWw+IgorICAgICAgICAiPGJvZHk+IgorICAgICAgICAiPHA+aGVsbG88Yj53b3JsZDxi
cj48YnI+PGk+ZnJvbTwvaT48L2I+PC9wPiIKKyAgICAgICAgIjwvYm9keT4iXTsKKworICAgIGRv
bmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25m
aWd1cmF0aW9uOm5pbCBjb21wbGV0aW9uOl57CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvIGl0ZW1z
ID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJVTCk7Cisg
ICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMlVMKTsKKyAgICBFWFBFQ1RfU1RS
RVEoImhlbGxvIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAg
RVhQRUNUX1NUUkVRKCJ3b3JsZCIsIGl0ZW1zWzBdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJp
bmcpOworICAgIEVYUEVDVF9FUShpdGVtc1sxXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQ
RUNUX1NUUkVRKCJmcm9tIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7
CisKKyAgICBhdXRvIHJlcGxhY2VtZW50SXRlbXMgPSByZXRhaW5QdHIoQFsKKyAgICAgICAgY3Jl
YXRlSXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7IHsgaXRlbXNbMF0udG9rZW5zWzBdLmlkZW50
aWZpZXIsIEAiSGVsbG8iIH0sIHsgaXRlbXNbMF0udG9rZW5zWzFdLmlkZW50aWZpZXIsIEAiV29y
bGQiIH0gfSkuYXV0b3JlbGVhc2UoKSwKKyAgICAgICAgY3JlYXRlSXRlbShpdGVtc1sxXS5pZGVu
dGlmaWVyLCB7IHsgaXRlbXNbMV0udG9rZW5zWzBdLmlkZW50aWZpZXIsIEAiRnJvbSBXZWJLaXQi
IH0gfSkuYXV0b3JlbGVhc2UoKSwKKyAgICBdKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBb
d2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uRm9ySXRlbXM6cmVwbGFjZW1lbnRJdGVt
cy5nZXQoKSBjb21wbGV0aW9uOl4oTlNBcnJheTxOU0Vycm9yICo+ICplcnJvcnMpIHsKKyAgICAg
ICAgRVhQRUNUX0VRKGVycm9ycywgbmlsKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIEVYUEVDVF9XS19T
VFJFUSgiPHA+SGVsbG88Yj5Xb3JsZDxicj48YnI+PGk+RnJvbSBXZWJLaXQ8L2k+PC9iPjwvcD4i
LCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5p
bm5lckhUTUwiXSk7Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFu
aXB1bGF0aW9uU1ByZXNlcnZlTm9kZXNCZWZvcmVQYXJhZ3JhcGhSYW5nZSkKK3sKKyAgICBhdXRv
IGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5p
dF0pOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgW3dlYlZpZXcg
X3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD4iCisgICAg
ICAgICI8Ym9keT4iCisgICAgICAgICI8cD48Yj48YnI+PGJyPmhlbGxvPGk+d29ybGQ8L2k+PC9i
PmZyb208L3A+IgorICAgICAgICAiPC9ib2R5PiJdOworCisgICAgZG9uZSA9IGZhbHNlOworICAg
IFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246bmlsIGNv
bXBsZXRpb246XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gaXRlbXMgPSBbZGVsZWdhdGUgaXRl
bXNdOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRl
bXNbMF0udG9rZW5zLmNvdW50LCAzVUwpOworICAgIEVYUEVDVF9TVFJFUSgiaGVsbG8iLCBpdGVt
c1swXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIndv
cmxkIiwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNU
X1NUUkVRKCJmcm9tIiwgaXRlbXNbMF0udG9rZW5zWzJdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisK
KyAgICBhdXRvIHJlcGxhY2VtZW50SXRlbXMgPSByZXRhaW5QdHIoQFsKKyAgICAgICAgY3JlYXRl
SXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7IHsgaXRlbXNbMF0udG9rZW5zWzBdLmlkZW50aWZp
ZXIsIEAiSGVsbG8iIH0sIHsgaXRlbXNbMF0udG9rZW5zWzFdLmlkZW50aWZpZXIsIEAiV29ybGQi
IH0sIHsgaXRlbXNbMF0udG9rZW5zWzJdLmlkZW50aWZpZXIsIEAiRnJvbSBXZWJLaXQiIH0gfSku
YXV0b3JlbGVhc2UoKQorICAgIF0pOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3
IF9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb25Gb3JJdGVtczpyZXBsYWNlbWVudEl0ZW1zLmdldCgp
IGNvbXBsZXRpb246XihOU0FycmF5PE5TRXJyb3IgKj4gKmVycm9ycykgeworICAgICAgICBFWFBF
Q1RfRVEoZXJyb3JzLCBuaWwpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCI8
cD48Yj48YnI+PGJyPkhlbGxvPGk+V29ybGQ8L2k+PC9iPkZyb20gV2ViS2l0PC9wPiIsIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRN
TCJdKTsKK30KKwogVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBJbnNlcnRpbmdDb250ZW50SW50b0Fs
cmVhZHlNYW5pcHVsYXRlZENvbnRlbnREb2VzTm90Q3JlYXRlVGV4dE1hbmlwdWxhdGlvbkl0ZW0p
CiB7CiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdh
dGUgYWxsb2NdIGluaXRdKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400742</attachid>
            <date>2020-06-01 11:31:18 -0700</date>
            <delta_ts>2020-06-01 16:28:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212548-20200601113117.patch</filename>
            <type>text/plain</type>
            <size>47887</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMzUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJhYjQ3Nzk3NzliNzli
ZDQ0NmVhMmQ4MWE4ZTM2MjQzY2RiZDE3ZC4uNDJjMjRjYjE2ZjJjYTMxMzM4MmZiNDU2MmVlOTll
OTEyZmM0YzVhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDIwLTA2LTAxICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyIHNob3VsZCBwdXQgb25lIE5vZGUgaW4gb25seSBvbmUgcGFyYWdyYXBoCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI1NDgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlciBtYWlubHkgdXNlcyBsaW5lIGJyZWFrIGFzIGRlbGltaXRlciB0byBzcGxp
dCBwYXJhZ3JhcGhzLiBJbiBvdXIgY3VycmVudCAKKyAgICAgICAgaW1wbGVtZW50YXRpb24sIGlm
IHRleHQgb2YgYSBOb2RlIGhhcyBsaW5lIGJyZWFrLCB0aGUgcGFydCBiZWZvcmUgdGhlIHRoZSBs
aW5lIGJyZWFrIGlzIGluIG9uZSBwYXJhZ3JhcGggYW5kIHRoZQorICAgICAgICBwYXJ0IGFmdGVy
IHRoZSBsaW5lIGJyZWFrIGlzIGluIGFub3RoZXIgcGFyYWdyYXBoLCB3aGljaCBtZWFucyB0aGUg
Tm9kZSBpcyBpbiB0aGUgcmFuZ2Ugb2YgdHdvIHBhcmFncmFwaHMuCisgICAgICAgIFdoZW4gVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgbWFuaXB1bGF0ZXMgdGhlIHRoZSBmaXJzdCBwYXJhZ3Jh
cGgsIGl0IHJlbW92ZXMgYWxsIHRoZSBOb2RlcyBpbiBpdHMgcmFuZ2UgYW5kIAorICAgICAgICBy
ZXBsYWNlcyBpdCB3aXRoIG5ldyBOb2Rlcy4gVGhlbiB3aGVuIGl0IG1hbmlwdWxhdGVzIHRoZSBz
ZWNvbmQgcGFyYWdyYXBoLCBpZiB3aWxsIGZpbmQgdGhlIE5vZGUgZG9lcyBub3QgZXhpc3QKKyAg
ICAgICAgYW5kIGZhaWxzIHRvIHJlcGxhY2UuIEFsc28sIFRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyIGRvZXMgbm90IHJlc2VydmUgbGluZSBicmVha3MgaW4gdGV4dCwgd2hpY2ggY2FuIGJlIGFu
CisgICAgICAgIGlzc3VlIGlmIHRoZSBsaW5lIGJyZWFrcyBhcmUgdmlzaWJsZS4gCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBtYWtlcyB0aGUgUGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yIGl0ZXJhdGUg
b3ZlciBOb2RlcyBpbnN0ZWFkIG9mIHRleHQsIHNvIGEgTm9kZSBjYW4gb25seSBiZSBpbiB0aGUg
CisgICAgICAgIHJhbmdlIG9uZSBwYXJhZ3JhcGguIFRvIGRvIHRoaXMsIGl0IG1ha2VzIGxpbmUg
YnJlYWsgYW5kIHdoaXRlIHNwYWNlcyBhcm91bmQgaXQgYXMgYSBzcGVjaWFsIGV4Y2x1ZGVkIHRv
a2VuLgorICAgICAgICBIZXJlIGFyZSB0aGUgcnVsZXMgZm9yIHNwbGl0dGluZyBwYXJhZ3JhcGhz
IGJ5IGxpbmUgYnJlYWsgbm93OgorICAgICAgICAxLiBJZiB0aGUgc3BlY2lhbCB0b2tlbiBpcyB0
aGUgZmlyc3QgdG9rZW4gaW4gYSBOb2RlLCB0ZXh0IGluIE5vZGVzIGJlZm9yZSB0aGUgTm9kZSB3
aWxsIG1ha2UgYSBwYXJhZ3JhcGguIAorICAgICAgICAyLiBJZiB0aGUgc3BlY2lhbCB0b2tlbiBp
cyB0aGUgbGFzdCB0b2tlbiBpbiBhIE5vZGUsIHRleHQgaW4gTm9kZXMgYmVmb3JlIHRoZSBOb2Rl
IGFuZCB0aGUgTm9kZSB3aWxsIG1ha2UgYSAKKyAgICAgICAgcGFyYWdyYXBoLgorICAgICAgICAz
LiBJZiB0aGUgc3BlY2lhbCB0b2tlbiBpbiB0aGUgbWlkZGxlIG9mIHRva2VucyBpbiBhIE5vZGUs
IHRoZW4gd2UgZG9uJ3QgbWFrZSBhIG5ldyBwYXJhZ3JhcGggdW50aWwgbmV4dCBzcGVjaWFsCisg
ICAgICAgIHRva2VuIG1lZXRzIGNvbmRpdGlvbiAxIG9yIDIuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBhbHNvIGZpeGVzIHRoZSBpc3N1ZSB0aGF0IGEgTm9kZSBvdXQgb2YgdGhlIHBhcmFncmFwaCBy
YW5nZSBpcyByZW1vdmVkIGR1ZSB0byB0aGUgcHJlb3JkZXIgTm9kZQorICAgICAgICB0cmF2ZXJz
YWwsIGJ5IGZpbmRpbmcgYW5kIGFkZGluZyB0aG9zZSBOb2RlcyBiYWNrLgorCisgICAgICAgICog
ZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3I6Om1fcGFzdEVuZE5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhcmFncmFwaENvbnRlbnRJdGVyYXRvcjo6Y3VycmVudENvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yOjphdEVuZCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3I6OmFkdmFuY2VOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhcmFncmFwaENvbnRlbnRJdGVyYXRvcjo6YWR2YW5jZUl0ZXJhdG9yTm9k
ZUFuZFVwZGF0ZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6aXNFbmNsb3NpbmdJdGVtQm91bmRh
cnlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
b2JzZXJ2ZVBhcmFncmFwaHMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6OmFkZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6OmdldFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6OnVwZGF0ZUluc2VydGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFyYWdyYXBo
Q29udGVudEl0ZXJhdG9yOjpzdGFydFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlBhcmFncmFwaENvbnRlbnRJdGVyYXRvcjo6ZW5kUG9zaXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yOjptb3ZlQ3VycmVudE5vZGVG
b3J3YXJkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zT25seUhUTUxTcGFj
ZXMpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXIuaDoKKwogMjAyMC0wNS0zMCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgRXh0ZW5kZWQgQ29sb3I6IEFkZGl0aW9uYWwgY29sb3IgY2xlYW51cHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAK
aW5kZXggZTBlZTFkMmRhMDg5MWIxN2JiNWVmM2ZjZmMzZDU3ZjY1ZmVjOTczYi4uNDEwZmU3YzBm
NDQyMGY1OTM4M2FhOTZhMDUzZDFlMTU2MDZhMWIwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTE0NywyOCAr
MTQ3LDIxIEBAIHB1YmxpYzoKICAgICBQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3IoY29uc3QgUG9z
aXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogICAgICAgICA6IG1faXRlcmF0b3Io
eyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSB9LCBU
ZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5KQogICAgICAgICAsIG1faXRlcmF0b3JO
b2RlKG1faXRlcmF0b3IuYXRFbmQoKSA/IG51bGxwdHIgOiBjcmVhdGVMaXZlUmFuZ2UobV9pdGVy
YXRvci5yYW5nZSgpKS0+Zmlyc3ROb2RlKCkpCi0gICAgICAgICwgbV9jdXJyZW50Tm9kZUZvckZp
bmRpbmdJbnZpc2libGVDb250ZW50KHN0YXJ0LmZpcnN0Tm9kZSgpKQorICAgICAgICAsIG1fbm9k
ZShzdGFydC5maXJzdE5vZGUoKSkKICAgICAgICAgLCBtX3Bhc3RFbmROb2RlKGVuZC5maXJzdE5v
ZGUoKSkKICAgICB7CisgICAgICAgIGlmIChtX25vZGUgPT0gbV9pdGVyYXRvck5vZGUpCisgICAg
ICAgICAgICBhZHZhbmNlSXRlcmF0b3JOb2RlQW5kVXBkYXRlVGV4dCgpOwogICAgIH0KIAogICAg
IHZvaWQgYWR2YW5jZSgpCiAgICAgewotICAgICAgICAvLyBGSVhNRTogQWRkIGEgbm9kZSBjYWxs
YmFjayB0byBUZXh0SXRlcmF0b3IgaW5zdGVhZCBvZiB0cmF2ZXJzaW5nIHRoZSBub2RlIHRyZWUg
dHdpY2UgbGlrZSB0aGlzLgotICAgICAgICBpZiAobV9jdXJyZW50Tm9kZUZvckZpbmRpbmdJbnZp
c2libGVDb250ZW50ICE9IG1faXRlcmF0b3JOb2RlICYmIG1fY3VycmVudE5vZGVGb3JGaW5kaW5n
SW52aXNpYmxlQ29udGVudCAhPSBtX3Bhc3RFbmROb2RlKSB7Ci0gICAgICAgICAgICBtb3ZlQ3Vy
cmVudE5vZGVGb3J3YXJkKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobV9pdGVyYXRvci5hdEVuZCgpKQorICAgICAgICBtX3RleHQgPSBXVEY6Om51bGxv
cHQ7CisgICAgICAgIGFkdmFuY2VOb2RlKCk7CisgICAgICAgIGlmIChtX2l0ZXJhdG9yLmF0RW5k
KCkgfHwgbV9ub2RlICE9IG1faXRlcmF0b3JOb2RlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIGF1dG8gcHJldmlvdXNJdGVyYXRvck5vZGUgPSBtX2l0ZXJhdG9yTm9kZTsKLQotICAg
ICAgICBtX2l0ZXJhdG9yLmFkdmFuY2UoKTsKLSAgICAgICAgbV9pdGVyYXRvck5vZGUgPSBtX2l0
ZXJhdG9yLmF0RW5kKCkgPyBudWxscHRyIDogY3JlYXRlTGl2ZVJhbmdlKG1faXRlcmF0b3IucmFu
Z2UoKSktPmZpcnN0Tm9kZSgpOwotICAgICAgICBpZiAocHJldmlvdXNJdGVyYXRvck5vZGUgIT0g
bV9pdGVyYXRvck5vZGUpCi0gICAgICAgICAgICBtb3ZlQ3VycmVudE5vZGVGb3J3YXJkKCk7Cisg
ICAgICAgIGFkdmFuY2VJdGVyYXRvck5vZGVBbmRVcGRhdGVUZXh0KCk7CiAgICAgfQogCiAgICAg
c3RydWN0IEN1cnJlbnRDb250ZW50IHsKQEAgLTE4MCwxMSArMTczLDcgQEAgcHVibGljOgogCiAg
ICAgQ3VycmVudENvbnRlbnQgY3VycmVudENvbnRlbnQoKQogICAgIHsKLSAgICAgICAgQ3VycmVu
dENvbnRlbnQgY29udGVudDsKLSAgICAgICAgaWYgKG1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52
aXNpYmxlQ29udGVudCAmJiBtX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJsZUNvbnRlbnQg
IT0gbV9pdGVyYXRvck5vZGUpCi0gICAgICAgICAgICBjb250ZW50ID0geyBtX2N1cnJlbnROb2Rl
Rm9yRmluZGluZ0ludmlzaWJsZUNvbnRlbnQuY29weVJlZigpLCBTdHJpbmdWaWV3IHsgfSB9Owot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250ZW50ID0geyBtX2l0ZXJhdG9yLm5vZGUoKSwg
bV9pdGVyYXRvci50ZXh0KCksIHRydWUgfTsKKyAgICAgICAgQ3VycmVudENvbnRlbnQgY29udGVu
dCA9IHsgbV9ub2RlLmNvcHlSZWYoKSwgbV90ZXh0ID8gbV90ZXh0LnZhbHVlKCkgOiBTdHJpbmdW
aWV3IHsgfSwgISFtX3RleHQgfTsKICAgICAgICAgaWYgKGNvbnRlbnQubm9kZSkgewogICAgICAg
ICAgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gY29udGVudC5ub2RlLT5yZW5kZXJlcigpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlclJlcGxhY2VkKCkpIHsKQEAgLTE5
NiwzMyArMTg1LDM5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7CiAgICAgfQog
Ci0gICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1faXRlcmF0b3IucmFuZ2UoKS5zdGFydCk7Ci0gICAg
fQorICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV90ZXh0ICYmIG1faXRlcmF0b3Iu
YXRFbmQoKSAmJiBtX25vZGUgPT0gbV9wYXN0RW5kTm9kZTsgfQogCi0gICAgUG9zaXRpb24gZW5k
UG9zaXRpb24oKQorcHJpdmF0ZToKKyAgICB2b2lkIGFkdmFuY2VOb2RlKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9pdGVyYXRvci5yYW5nZSgp
LmVuZCk7Ci0gICAgfQorICAgICAgICBpZiAobV9ub2RlID09IG1fcGFzdEVuZE5vZGUpCisgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gbV9pdGVy
YXRvci5hdEVuZCgpICYmIG1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudCA9
PSBtX3Bhc3RFbmROb2RlOyB9CisgICAgICAgIG1fbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
Km1fbm9kZSk7CisgICAgICAgIGlmICghbV9ub2RlKQorICAgICAgICAgICAgbV9ub2RlID0gbV9w
YXN0RW5kTm9kZTsKKyAgICB9CiAKLXByaXZhdGU6Ci0gICAgdm9pZCBtb3ZlQ3VycmVudE5vZGVG
b3J3YXJkKCkKKyAgICB2b2lkIGFkdmFuY2VJdGVyYXRvck5vZGVBbmRVcGRhdGVUZXh0KCkKICAg
ICB7Ci0gICAgICAgIGlmIChtX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJsZUNvbnRlbnQg
PT0gbV9wYXN0RW5kTm9kZSkKKyAgICAgICAgaWYgKG1faXRlcmF0b3IuYXRFbmQoKSkKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBtX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJs
ZUNvbnRlbnQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCptX2N1cnJlbnROb2RlRm9yRmluZGluZ0lu
dmlzaWJsZUNvbnRlbnQpOwotICAgICAgICBpZiAoIW1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52
aXNpYmxlQ29udGVudCkKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNp
YmxlQ29udGVudCA9IG1fcGFzdEVuZE5vZGU7CisgICAgICAgIEFTU0VSVChtX25vZGUgPT0gbV9p
dGVyYXRvck5vZGUpOworICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAg
ICAgIHdoaWxlICghbV9pdGVyYXRvci5hdEVuZCgpICYmIG1faXRlcmF0b3JOb2RlID09IG1fbm9k
ZSkgeworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobV9pdGVyYXRvci50ZXh0KCkp
OworICAgICAgICAgICAgbV9pdGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgICAgICBtX2l0ZXJh
dG9yTm9kZSA9IG1faXRlcmF0b3IuYXRFbmQoKSA/IG51bGxwdHIgOiBjcmVhdGVMaXZlUmFuZ2Uo
bV9pdGVyYXRvci5yYW5nZSgpKS0+Zmlyc3ROb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAgbV90
ZXh0ID0geyBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkgfTsKICAgICB9CiAKICAgICBUZXh0SXRl
cmF0b3IgbV9pdGVyYXRvcjsKICAgICBSZWZQdHI8Tm9kZT4gbV9pdGVyYXRvck5vZGU7Ci0gICAg
UmVmUHRyPE5vZGU+IG1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudDsKKyAg
ICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwogICAgIFJlZlB0cjxOb2RlPiBtX3Bhc3RFbmROb2RlOwor
ICAgIE9wdGlvbmFsPFN0cmluZz4gbV90ZXh0OwogfTsKIAogc3RhdGljIGJvb2wgaXNBdHRyaWJ1
dGVGb3JUZXh0TWFuaXB1bGF0aW9uKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWVUb0NoZWNrKQpAQCAtMjUzLDE2ICsyNDgsNiBAQCBzdGF0aWMgYm9vbCBj
YW5QZXJmb3JtVGV4dE1hbmlwdWxhdGlvbkJ5UmVwbGFjaW5nRW50aXJlVGV4dENvbnRlbnQoY29u
c3QgRWxlbWVudAogICAgIHJldHVybiBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aXRs
ZVRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uVGFnKTsKIH0KIAot
c3RhdGljIGJvb2wgY29udGFpbnNPbmx5SFRNTFNwYWNlcyhTdHJpbmdWaWV3IHRleHQpCi17Ci0g
ICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgdGV4dC5sZW5ndGgoKTsgKytpbmRl
eCkgewotICAgICAgICBpZiAoaXNOb3RIVE1MU3BhY2UodGV4dFtpbmRleF0pKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMg
T3B0aW9uYWw8VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuSW5m
bz4gdG9rZW5JbmZvKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQpAQCAtMjc4LDYgKzI2
Myw4MyBAQCBzdGF0aWMgT3B0aW9uYWw8VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlw
dWxhdGlvblRva2VuSW5mbz4gdG9rZW5JbmZvKE5vZAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
K3N0YXRpYyBib29sIGlzRW5jbG9zaW5nSXRlbUJvdW5kYXJ5RWxlbWVudChjb25zdCBFbGVtZW50
JiBlbGVtZW50KQoreworICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwor
ICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcm9s
ZSA9IFtdKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIC0+IEFjY2Vzc2liaWxpdHlSb2xlIHsKKyAg
ICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFSb2xlVG9XZWJDb3JlUm9sZShl
bGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpyb2xlQXR0
cikpOworICAgIH07CisKKyAgICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnV0
dG9uVGFnKSB8fCByb2xlKGVsZW1lbnQpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpCdXR0b24pCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmxpVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphVGFnKSkgeworICAg
ICAgICBhdXRvIGRpc3BsYXlUeXBlID0gcmVuZGVyZXItPnN0eWxlKCkuZGlzcGxheSgpOworICAg
ICAgICBpZiAoZGlzcGxheVR5cGUgPT0gRGlzcGxheVR5cGU6OkJsb2NrIHx8IGRpc3BsYXlUeXBl
ID09IERpc3BsYXlUeXBlOjpJbmxpbmVCbG9jaykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgICAgIGZvciAoYXV0byBwYXJlbnQgPSBtYWtlUmVmUHRyKGVsZW1lbnQucGFyZW50RWxl
bWVudCgpKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudEVsZW1lbnQoKSkgeworICAg
ICAgICAgICAgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om5hdlRhZykgfHwgcm9s
ZSgqcGFyZW50KSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGFuZG1hcmtOYXZpZ2F0aW9uKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9r
ZW5zIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpwYXJzZShTdHJpbmdWaWV3IHRleHQsIE5v
ZGUqIHRleHROb2RlKQoreworICAgIFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zOwor
ICAgIEV4Y2x1c2lvblJ1bGVNYXRjaGVyIGV4Y2x1c2lvblJ1bGVNYXRjaGVyKG1fZXhjbHVzaW9u
UnVsZXMpOworICAgIHNpemVfdCBwb3NpdGlvbk9mTGFzdE5vbkhUTUxTcGFjZSA9IFdURjo6bm90
Rm91bmQ7CisgICAgc2l6ZV90IHN0YXJ0UG9zaXRpb25PZkN1cnJlbnRUb2tlbiA9IDA7CisgICAg
Ym9vbCBjb250YWluc09ubHlIVE1MU3BhY2UgPSB0cnVlOworICAgIGJvb2wgY29udGFpbnNMaW5l
QnJlYWsgPSBmYWxzZTsKKyAgICBib29sIGZpcnN0VG9rZW5Db250YWluc0xpbmVCcmVhayA9IGZh
bHNlOworICAgIGJvb2wgbGFzdFRva2VuQ29udGFpbnNMaW5lQnJlYWsgPSBmYWxzZTsKKworICAg
IHNpemVfdCBpbmRleCA9IDA7CisgICAgZm9yICg7IGluZGV4IDwgdGV4dC5sZW5ndGgoKTsgKytp
bmRleCkgeworICAgICAgICBhdXRvIGNoYXJhY3RlciA9IHRleHRbaW5kZXhdOworICAgICAgICBp
ZiAoaXNOb3RIVE1MU3BhY2UoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgY29udGFpbnNPbmx5
SFRNTFNwYWNlID0gZmFsc2U7CisgICAgICAgICAgICBwb3NpdGlvbk9mTGFzdE5vbkhUTUxTcGFj
ZSA9IGluZGV4OworICAgICAgICB9IGVsc2UgaWYgKGlzSFRNTExpbmVCcmVhayhjaGFyYWN0ZXIp
KSB7CisgICAgICAgICAgICBjb250YWluc0xpbmVCcmVhayA9IHRydWU7CisgICAgICAgICAgICBp
ZiAocG9zaXRpb25PZkxhc3ROb25IVE1MU3BhY2UgIT0gV1RGOjpub3RGb3VuZCAmJiBzdGFydFBv
c2l0aW9uT2ZDdXJyZW50VG9rZW4gPD0gcG9zaXRpb25PZkxhc3ROb25IVE1MU3BhY2UpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIHRva2VuU3RyaW5nID0gdGV4dC5zdWJzdHJpbmcoc3RhcnRQb3Np
dGlvbk9mQ3VycmVudFRva2VuLCBwb3NpdGlvbk9mTGFzdE5vbkhUTUxTcGFjZSArIDEgLSBzdGFy
dFBvc2l0aW9uT2ZDdXJyZW50VG9rZW4pLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgdG9r
ZW5zLmFwcGVuZChNYW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRl
KCksIHRva2VuU3RyaW5nLCB0b2tlbkluZm8odGV4dE5vZGUpLCBleGNsdXNpb25SdWxlTWF0Y2hl
ci5pc0V4Y2x1ZGVkKHRleHROb2RlKSB9KTsKKyAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9u
T2ZDdXJyZW50VG9rZW4gPSBwb3NpdGlvbk9mTGFzdE5vbkhUTUxTcGFjZSArIDE7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IHRleHQubGVuZ3RoKCkgJiYgIWlz
Tm90SFRNTFNwYWNlKHRleHRbaW5kZXhdKSkKKyAgICAgICAgICAgICAgICArK2luZGV4OworCisg
ICAgICAgICAgICAtLWluZGV4OworCisgICAgICAgICAgICBhdXRvIGxpbmVCcmVha1Rva2VuU3Ry
aW5nID0gdGV4dC5zdWJzdHJpbmcoc3RhcnRQb3NpdGlvbk9mQ3VycmVudFRva2VuLCBpbmRleCAr
IDEgLSBzdGFydFBvc2l0aW9uT2ZDdXJyZW50VG9rZW4pLnRvU3RyaW5nKCk7CisgICAgICAgICAg
ICBpZiAodG9rZW5zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBmaXJzdFRva2VuQ29udGFp
bnNMaW5lQnJlYWsgPSB0cnVlOworICAgICAgICAgICAgdG9rZW5zLmFwcGVuZChNYW5pcHVsYXRp
b25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIGxpbmVCcmVha1Rva2VuU3Ry
aW5nLCB0b2tlbkluZm8odGV4dE5vZGUpLCB0cnVlIH0pOworICAgICAgICAgICAgc3RhcnRQb3Np
dGlvbk9mQ3VycmVudFRva2VuID0gaW5kZXggKyAxOworICAgICAgICAgICAgbGFzdFRva2VuQ29u
dGFpbnNMaW5lQnJlYWsgPSB0cnVlOworCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChzdGFydFBvc2l0aW9uT2ZDdXJyZW50VG9rZW4gPCB0ZXh0Lmxl
bmd0aCgpKSB7CisgICAgICAgIGF1dG8gdG9rZW5TdHJpbmcgPSB0ZXh0LnN1YnN0cmluZyhzdGFy
dFBvc2l0aW9uT2ZDdXJyZW50VG9rZW4sIGluZGV4ICsgMSAtIHN0YXJ0UG9zaXRpb25PZkN1cnJl
bnRUb2tlbikudG9TdHJpbmcoKTsKKyAgICAgICAgdG9rZW5zLmFwcGVuZChNYW5pcHVsYXRpb25U
b2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIHRva2VuU3RyaW5nLCB0b2tlbklu
Zm8odGV4dE5vZGUpLCBleGNsdXNpb25SdWxlTWF0Y2hlci5pc0V4Y2x1ZGVkKHRleHROb2RlKSB9
KTsKKyAgICAgICAgbGFzdFRva2VuQ29udGFpbnNMaW5lQnJlYWsgPSBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4geyBXVEZNb3ZlKHRva2VucyksIGNvbnRhaW5zT25seUhUTUxTcGFjZSwgY29u
dGFpbnNMaW5lQnJlYWssIGZpcnN0VG9rZW5Db250YWluc0xpbmVCcmVhaywgbGFzdFRva2VuQ29u
dGFpbnNMaW5lQnJlYWsgfTsKK30KKwogdm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
b2JzZXJ2ZVBhcmFncmFwaHMoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYg
ZW5kKQogewogICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCkpCkBAIC0yODYs
MTI2ICszNDgsNzQgQEAgdm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6b2JzZXJ2ZVBh
cmFncmFwaHMoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdAogICAgIGF1dG8gZG9jdW1lbnQg
PSBtYWtlUmVmUHRyKHN0YXJ0LmRvY3VtZW50KCkpOwogICAgIEFTU0VSVChkb2N1bWVudCk7CiAg
ICAgUGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yIGl0ZXJhdG9yIHsgc3RhcnQsIGVuZCB9OwotICAg
IFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQgPSBzdGFydDsKLSAgICBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZUVuZCA9IGVuZDsKKyAgICAvLyBUZXh0SXRlcmF0b3IncyBjb25zdHJ1Y3RvciBt
YXkgaGF2ZSB1cGRhdGVkIHRoZSBsYXlvdXQgYW5kIGV4ZWN1dGVkIGFyYml0cmFyeSBzY3JpcHRz
LgogICAgIGlmIChkb2N1bWVudCAhPSBzdGFydC5kb2N1bWVudCgpIHx8IGRvY3VtZW50ICE9IGVu
ZC5kb2N1bWVudCgpKQotICAgICAgICByZXR1cm47IC8vIFRleHRJdGVyYXRvcidzIGNvbnN0cnVj
dG9yIG1heSBoYXZlIHVwZGF0ZWQgdGhlIGxheW91dCBhbmQgZXhlY3V0ZWQgYXJiaXRyYXJ5IHNj
cmlwdHMuCisgICAgICAgIHJldHVybjsKIAotICAgIEV4Y2x1c2lvblJ1bGVNYXRjaGVyIGV4Y2x1
c2lvblJ1bGVNYXRjaGVyKG1fZXhjbHVzaW9uUnVsZXMpOwogICAgIFZlY3RvcjxNYW5pcHVsYXRp
b25Ub2tlbj4gdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoOwogICAgIFBvc2l0aW9uIHN0YXJ0T2ZD
dXJyZW50UGFyYWdyYXBoOwogICAgIFBvc2l0aW9uIGVuZE9mQ3VycmVudFBhcmFncmFwaDsKICAg
ICBSZWZQdHI8RWxlbWVudD4gZW5jbG9zaW5nSXRlbUJvdW5kYXJ5RWxlbWVudDsKIAotICAgIGF1
dG8gaXNFbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50ID0gW10oY29uc3QgRWxlbWVudCYgZWxl
bWVudCkgewotICAgICAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKLSAg
ICAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBhdXRvIHJvbGUgPSBbXShjb25zdCBFbGVtZW50JiBlbGVtZW50KSAtPiBBY2Nlc3NpYmlsaXR5
Um9sZSB7Ci0gICAgICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYVJvbGVU
b1dlYkNvcmVSb2xlKGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1M
TmFtZXM6OnJvbGVBdHRyKSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKGVsZW1lbnQuaGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJ1dHRvblRhZykgfHwgcm9sZShlbGVtZW50KSA9PSBBY2Nlc3Np
YmlsaXR5Um9sZTo6QnV0dG9uKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAg
aWYgKGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpVGFnKSB8fCBlbGVtZW50Lmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjphVGFnKSkgewotICAgICAgICAgICAgYXV0byBkaXNwbGF5VHlwZSA9
IHJlbmRlcmVyLT5zdHlsZSgpLmRpc3BsYXkoKTsKLSAgICAgICAgICAgIGlmIChkaXNwbGF5VHlw
ZSA9PSBEaXNwbGF5VHlwZTo6QmxvY2sgfHwgZGlzcGxheVR5cGUgPT0gRGlzcGxheVR5cGU6Oklu
bGluZUJsb2NrKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIGZvciAoOyAhaXRl
cmF0b3IuYXRFbmQoKTsgaXRlcmF0b3IuYWR2YW5jZSgpKSB7CisgICAgICAgIGF1dG8gY29udGVu
dCA9IGl0ZXJhdG9yLmN1cnJlbnRDb250ZW50KCk7CisgICAgICAgIGF1dG8qIGNvbnRlbnROb2Rl
ID0gY29udGVudC5ub2RlLmdldCgpOworICAgICAgICBBU1NFUlQoY29udGVudE5vZGUpOwogCi0g
ICAgICAgICAgICBmb3IgKGF1dG8gcGFyZW50ID0gbWFrZVJlZlB0cihlbGVtZW50LnBhcmVudEVs
ZW1lbnQoKSk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAocGFyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bmF2VGFnKSB8
fCByb2xlKCpwYXJlbnQpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpMYW5kbWFya05hdmlnYXRpb24p
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQorICAgICAg
ICBpZiAoZW5jbG9zaW5nSXRlbUJvdW5kYXJ5RWxlbWVudCAmJiAhZW5jbG9zaW5nSXRlbUJvdW5k
YXJ5RWxlbWVudC0+Y29udGFpbnMoY29udGVudE5vZGUpKSB7CisgICAgICAgICAgICBpZiAoIXRv
a2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYWRkSXRl
bShNYW5pcHVsYXRpb25JdGVtRGF0YSB7IHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLCBlbmRPZkN1
cnJlbnRQYXJhZ3JhcGgsIG51bGxwdHIsIG51bGxRTmFtZSgpLCBzdGQ6OmV4Y2hhbmdlKHRva2Vu
c0luQ3VycmVudFBhcmFncmFwaCwgeyB9KSB9KTsKKyAgICAgICAgICAgIGVuY2xvc2luZ0l0ZW1C
b3VuZGFyeUVsZW1lbnQgPSBudWxscHRyOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH07Ci0KLSAgICBmb3IgKDsgIWl0ZXJhdG9yLmF0RW5kKCk7IGl0ZXJhdG9yLmFk
dmFuY2UoKSkgewotICAgICAgICBhdXRvIGNvbnRlbnQgPSBpdGVyYXRvci5jdXJyZW50Q29udGVu
dCgpOwotICAgICAgICBpZiAoY29udGVudC5ub2RlKSB7Ci0gICAgICAgICAgICBpZiAoZW5jbG9z
aW5nSXRlbUJvdW5kYXJ5RWxlbWVudCAmJiAhZW5jbG9zaW5nSXRlbUJvdW5kYXJ5RWxlbWVudC0+
Y29udGFpbnMoY29udGVudC5ub2RlLmdldCgpKSkgewotICAgICAgICAgICAgICAgIGlmICghdG9r
ZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgYWRk
SXRlbShNYW5pcHVsYXRpb25JdGVtRGF0YSB7IHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLCBlbmRP
ZkN1cnJlbnRQYXJhZ3JhcGgsIG51bGxwdHIsIG51bGxRTmFtZSgpLCBzdGQ6OmV4Y2hhbmdlKHRv
a2Vuc0luQ3VycmVudFBhcmFncmFwaCwgeyB9KSB9KTsKLSAgICAgICAgICAgICAgICBlbmNsb3Np
bmdJdGVtQm91bmRhcnlFbGVtZW50ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
aWYgKFJlZlB0cjxFbGVtZW50PiBjdXJyZW50RWxlbWVudEFuY2VzdG9yID0gaXM8RWxlbWVudD4o
KmNvbnRlbnROb2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KGNvbnRlbnROb2RlKSA6IGNvbnRlbnRO
b2RlLT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIC8vIFdlIGNh
biBleGl0IGVhcmx5IGhlcmUgYmVjYXVzZSBzY2hlZHVsZU9ic2VydmF0aW9uVXBkYXRlIGNhbGxz
IHRoaXMgZnVuY3Rpb24gb24gZWFjaCBwYXJhZ3JhcGggc2VwYXJhdGVseS4KKyAgICAgICAgICAg
IGlmIChpc0luTWFuaXB1bGF0ZWRFbGVtZW50KCpjdXJyZW50RWxlbWVudEFuY2VzdG9yKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKFJlZlB0
cjxFbGVtZW50PiBjdXJyZW50RWxlbWVudEFuY2VzdG9yID0gaXM8RWxlbWVudD4oKmNvbnRlbnQu
bm9kZSkgPyBkb3duY2FzdDxFbGVtZW50Pihjb250ZW50Lm5vZGUuZ2V0KCkpIDogY29udGVudC5u
b2RlLT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
aXNJbk1hbmlwdWxhdGVkRWxlbWVudCgqY3VycmVudEVsZW1lbnRBbmNlc3RvcikpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsgLy8gV2UgY2FuIGV4aXQgZWFybHkgaGVyZSBiZWNhdXNlIHNj
aGVkdWxlT2JzZXJ2YXJ0aW9uVXBkYXRlIGNhbGxzIHRoaXMgZnVuY3Rpb24gb24gZWFjaCBwYXJh
Z3JhcGggc2VwYXJhdGVseS4KLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+
KCpjb250ZW50Tm9kZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIGN1cnJlbnRFbGVtZW50ID0gZG93
bmNhc3Q8RWxlbWVudD4oKmNvbnRlbnROb2RlKTsKKyAgICAgICAgICAgIGlmICghY29udGVudC5p
c1RleHRDb250ZW50ICYmIGNhblBlcmZvcm1UZXh0TWFuaXB1bGF0aW9uQnlSZXBsYWNpbmdFbnRp
cmVUZXh0Q29udGVudChjdXJyZW50RWxlbWVudCkpCisgICAgICAgICAgICAgICAgYWRkSXRlbShN
YW5pcHVsYXRpb25JdGVtRGF0YSB7IFBvc2l0aW9uKCksIFBvc2l0aW9uKCksIG1ha2VXZWFrUHRy
KGN1cnJlbnRFbGVtZW50KSwgbnVsbFFOYW1lKCksIHsgTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rv
a2VuSWRlbnRpZmllci5nZW5lcmF0ZSgpLCBjdXJyZW50RWxlbWVudC50ZXh0Q29udGVudCgpLCB0
b2tlbkluZm8oJmN1cnJlbnRFbGVtZW50KSB9IH0gfSk7CiAKLSAgICAgICAgICAgIGlmIChpczxF
bGVtZW50PigqY29udGVudC5ub2RlKSkgewotICAgICAgICAgICAgICAgIGF1dG8mIGN1cnJlbnRF
bGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKmNvbnRlbnQubm9kZSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFjb250ZW50LmlzVGV4dENvbnRlbnQgJiYgY2FuUGVyZm9ybVRleHRNYW5pcHVsYXRp
b25CeVJlcGxhY2luZ0VudGlyZVRleHRDb250ZW50KGN1cnJlbnRFbGVtZW50KSkgewotICAgICAg
ICAgICAgICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgUG9zaXRpb24oKSwg
UG9zaXRpb24oKSwgbWFrZVdlYWtQdHIoY3VycmVudEVsZW1lbnQpLCBudWxsUU5hbWUoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsgTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRp
Zmllci5nZW5lcmF0ZSgpLCBjdXJyZW50RWxlbWVudC50ZXh0Q29udGVudCgpLCB0b2tlbkluZm8o
JmN1cnJlbnRFbGVtZW50KSB9IH0gfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmIChjdXJyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUgOiBjdXJyZW50RWxlbWVudC5hdHRyaWJ1dGVzSXRl
cmF0b3IoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXR0cmlidXRlRm9yVGV4
dE1hbmlwdWxhdGlvbihjdXJyZW50RWxlbWVudCwgYXR0cmlidXRlLm5hbWUoKSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgUG9z
aXRpb24oKSwgUG9zaXRpb24oKSwgbWFrZVdlYWtQdHIoY3VycmVudEVsZW1lbnQpLCBhdHRyaWJ1
dGUubmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IE1hbmlwdWxhdGlv
blRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgYXR0cmlidXRlLnZhbHVlKCks
IHRva2VuSW5mbygmY3VycmVudEVsZW1lbnQpIH0gfSB9KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGN1cnJlbnRFbGVt
ZW50Lmhhc0F0dHJpYnV0ZXMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgYXR0cmli
dXRlIDogY3VycmVudEVsZW1lbnQuYXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzQXR0cmlidXRlRm9yVGV4dE1hbmlwdWxhdGlvbihjdXJyZW50RWxlbWVu
dCwgYXR0cmlidXRlLm5hbWUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtKE1h
bmlwdWxhdGlvbkl0ZW1EYXRhIHsgUG9zaXRpb24oKSwgUG9zaXRpb24oKSwgbWFrZVdlYWtQdHIo
Y3VycmVudEVsZW1lbnQpLCBhdHRyaWJ1dGUubmFtZSgpLCB7IE1hbmlwdWxhdGlvblRva2VuIHsg
bV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgYXR0cmlidXRlLnZhbHVlKCksIHRva2VuSW5m
bygmY3VycmVudEVsZW1lbnQpIH0gfSB9KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaWYgKCFlbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50ICYmIGlzRW5jbG9zaW5nSXRl
bUJvdW5kYXJ5RWxlbWVudChjdXJyZW50RWxlbWVudCkpCi0gICAgICAgICAgICAgICAgICAgIGVu
Y2xvc2luZ0l0ZW1Cb3VuZGFyeUVsZW1lbnQgPSAmY3VycmVudEVsZW1lbnQ7CiAgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIWVuY2xvc2luZ0l0ZW1Cb3VuZGFyeUVsZW1lbnQgJiYgaXNF
bmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50KGN1cnJlbnRFbGVtZW50KSkKKyAgICAgICAgICAg
ICAgICBlbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50ID0gJmN1cnJlbnRFbGVtZW50OwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKGNvbnRlbnQuaXNSZXBsYWNlZENvbnRlbnQpIHsKLSAgICAg
ICAgICAgIGlmICh0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguaXNFbXB0eSgpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBhdXRvIGN1cnJlbnRFbmRPZkN1cnJlbnRQ
YXJhZ3JhcGggPSBwb3NpdGlvbkFmdGVyTm9kZShjb250ZW50Lm5vZGUuZ2V0KCkpOwotICAgICAg
ICAgICAgLy8gVGhpcyBpcyBhdCB0aGUgc2FtZSBOb2RlIGFzIGxhc3QgdG9rZW4sIHNvIGl0IGlz
IGFscmVhZHkgaW5jbHVkZWQgaW4gY3VycmVudCByYW5nZS4KLSAgICAgICAgICAgIGlmICghaXM8
VGV4dD4oY29udGVudC5ub2RlKSAmJiBjdXJyZW50RW5kT2ZDdXJyZW50UGFyYWdyYXBoLmVxdWFs
cyhlbmRPZkN1cnJlbnRQYXJhZ3JhcGgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICBlbmRPZkN1cnJlbnRQYXJhZ3JhcGggPSBjdXJyZW50RW5kT2ZDdXJyZW50UGFy
YWdyYXBoOwotICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5p
cHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksICJbXSIsIHRva2Vu
SW5mbyhjb250ZW50Lm5vZGUuZ2V0KCkpLCB0cnVlIH0pOwotCisgICAgICAgICAgICBpZiAoIXRv
a2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICB0b2tl
bnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklk
ZW50aWZpZXIuZ2VuZXJhdGUoKSwgIltdIiwgdG9rZW5JbmZvKGNvbnRlbnQubm9kZS5nZXQoKSks
IHRydWUgfSk7CisgICAgICAgICAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gcG9zaXRp
b25BZnRlck5vZGUoY29udGVudE5vZGUpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWNvbnRlbnQuaXNUZXh0Q29udGVudCkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHNpemVfdCBzdGFydE9mQ3VycmVudExp
bmUgPSAwOwotICAgICAgICBzaXplX3Qgb2Zmc2V0T2ZOZXh0TmV3TGluZSA9IDA7Ci0gICAgICAg
IFN0cmluZ1ZpZXcgY3VycmVudFRleHQgPSBjb250ZW50LnRleHQ7Ci0gICAgICAgIHdoaWxlICgo
b2Zmc2V0T2ZOZXh0TmV3TGluZSA9IGN1cnJlbnRUZXh0LmZpbmQoJ1xuJywgc3RhcnRPZkN1cnJl
bnRMaW5lKSkgIT0gbm90Rm91bmQpIHsKLSAgICAgICAgICAgIGlmIChpczxUZXh0Pihjb250ZW50
Lm5vZGUpICYmIHN0YXJ0T2ZDdXJyZW50TGluZSA8IG9mZnNldE9mTmV4dE5ld0xpbmUpIHsKLSAg
ICAgICAgICAgICAgICBhdXRvIHN0cmluZ1VudGlsRW5kT2ZMaW5lID0gY3VycmVudFRleHQuc3Vi
c3RyaW5nKHN0YXJ0T2ZDdXJyZW50TGluZSwgb2Zmc2V0T2ZOZXh0TmV3TGluZSAtIHN0YXJ0T2ZD
dXJyZW50TGluZSkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBhdXRvJiB0ZXh0Tm9kZSA9
IGRvd25jYXN0PFRleHQ+KCpjb250ZW50Lm5vZGUpOwotICAgICAgICAgICAgICAgIGVuZE9mQ3Vy
cmVudFBhcmFncmFwaCA9IFBvc2l0aW9uKCZ0ZXh0Tm9kZSwgb2Zmc2V0T2ZOZXh0TmV3TGluZSk7
Ci0gICAgICAgICAgICAgICAgaWYgKHRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gUG9zaXRpb24o
JnRleHROb2RlLCBzdGFydE9mQ3VycmVudExpbmUpOwotCi0gICAgICAgICAgICAgICAgdG9rZW5z
SW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVu
dGlmaWVyLmdlbmVyYXRlKCksIHN0cmluZ1VudGlsRW5kT2ZMaW5lLCB0b2tlbkluZm8oJnRleHRO
b2RlKSwgZXhjbHVzaW9uUnVsZU1hdGNoZXIuaXNFeGNsdWRlZChjb250ZW50Lm5vZGUuZ2V0KCkp
IH0pOwotICAgICAgICAgICAgfQorICAgICAgICBhdXRvIHRva2Vuc0luQ3VycmVudE5vZGUgPSBw
YXJzZShjb250ZW50LnRleHQsIGNvbnRlbnROb2RlKTsKKyAgICAgICAgaWYgKCF0b2tlbnNJbkN1
cnJlbnRQYXJhZ3JhcGguaXNFbXB0eSgpICYmIHRva2Vuc0luQ3VycmVudE5vZGUuZmlyc3RUb2tl
bkNvbnRhaW5zTGluZUJyZWFrKQorICAgICAgICAgICAgYWRkSXRlbShNYW5pcHVsYXRpb25JdGVt
RGF0YSB7IHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLCBlbmRPZkN1cnJlbnRQYXJhZ3JhcGgsIG51
bGxwdHIsIG51bGxRTmFtZSgpLCBzdGQ6OmV4Y2hhbmdlKHRva2Vuc0luQ3VycmVudFBhcmFncmFw
aCwgeyB9KSB9KTsKIAotICAgICAgICAgICAgaWYgKCF0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGgu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KGNvbnRl
bnQubm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IHBv
c2l0aW9uQWZ0ZXJOb2RlKGNvbnRlbnQubm9kZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgYWRk
SXRlbShNYW5pcHVsYXRpb25JdGVtRGF0YSB7IHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLCBlbmRP
ZkN1cnJlbnRQYXJhZ3JhcGgsIG51bGxwdHIsIG51bGxRTmFtZSgpLCBzdGQ6OmV4Y2hhbmdlKHRv
a2Vuc0luQ3VycmVudFBhcmFncmFwaCwgeyB9KSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHN0YXJ0T2ZDdXJyZW50TGluZSA9IG9mZnNldE9mTmV4dE5ld0xpbmUgKyAxOworICAgICAg
ICBpZiAodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
aWYgKHRva2Vuc0luQ3VycmVudE5vZGUuY29udGFpbnNPbmx5SFRNTFNwYWNlKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoY29udGVudE5vZGUpOwogICAgICAgICB9CiAKLSAg
ICAgICAgYXV0byByZW1haW5pbmdUZXh0ID0gY3VycmVudFRleHQuc3Vic3RyaW5nKHN0YXJ0T2ZD
dXJyZW50TGluZSk7Ci0gICAgICAgIGlmICghY29udGFpbnNPbmx5SFRNTFNwYWNlcyhyZW1haW5p
bmdUZXh0KSkgewotICAgICAgICAgICAgaWYgKHRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RhcnRPZkN1cnJlbnRMaW5lICYmIGlzPFRl
eHQ+KGNvbnRlbnQubm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZDdXJyZW50UGFy
YWdyYXBoID0gUG9zaXRpb24oJmRvd25jYXN0PFRleHQ+KCpjb250ZW50Lm5vZGUpLCBzdGFydE9m
Q3VycmVudExpbmUpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
c3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBpdGVyYXRvci5zdGFydFBvc2l0aW9uKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbmRPZkN1cnJlbnRQYXJhZ3JhcGggPSBpdGVyYXRvci5l
bmRQb3NpdGlvbigpOwotICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVu
ZChNYW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIHJlbWFp
bmluZ1RleHQudG9TdHJpbmcoKSwgdG9rZW5JbmZvKGNvbnRlbnQubm9kZS5nZXQoKSksIGV4Y2x1
c2lvblJ1bGVNYXRjaGVyLmlzRXhjbHVkZWQoY29udGVudC5ub2RlLmdldCgpKSB9KTsKKyAgICAg
ICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZFZlY3Rvcih0b2tlbnNJbkN1cnJlbnRO
b2RlLnRva2Vucyk7CisgICAgICAgIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IHBvc2l0aW9uQWZ0
ZXJOb2RlKGNvbnRlbnROb2RlKTsKKworICAgICAgICBpZiAoIXRva2Vuc0luQ3VycmVudFBhcmFn
cmFwaC5pc0VtcHR5KCkgJiYgdG9rZW5zSW5DdXJyZW50Tm9kZS5sYXN0VG9rZW5Db250YWluc0xp
bmVCcmVhaykgeworICAgICAgICAgICAgQVNTRVJUKCF0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGgu
aXNFbXB0eSgpKTsKKyAgICAgICAgICAgIGFkZEl0ZW0oTWFuaXB1bGF0aW9uSXRlbURhdGEgeyBz
dGFydE9mQ3VycmVudFBhcmFncmFwaCwgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBudWxscHRyLCBu
dWxsUU5hbWUoKSwgc3RkOjpleGNoYW5nZSh0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGgsIHsgfSkg
fSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ4OSw2ICs0OTksNyBAQCB2b2lkIFRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjphZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhJiYgaXRlbURh
dGEpCiAgICAgY29uc3QgdW5zaWduZWQgaXRlbUNhbGxiYWNrQmF0Y2hpbmdTaXplID0gMTI4Owog
CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQpOworICAgIEFTU0VSVCghaXRlbURhdGEudG9rZW5zLmlz
RW1wdHkoKSk7CiAgICAgYXV0byBuZXdJRCA9IG1faXRlbUlkZW50aWZpZXIuZ2VuZXJhdGUoKTsK
ICAgICBtX3BlbmRpbmdJdGVtc0ZvckNhbGxiYWNrLmFwcGVuZChNYW5pcHVsYXRpb25JdGVtIHsK
ICAgICAgICAgbmV3SUQsCkBAIC01NDYsMTkgKzU1Nyw0OCBAQCBzdHJ1Y3QgUmVwbGFjZW1lbnRE
YXRhIHsKICAgICBTdHJpbmcgbmV3RGF0YTsKIH07CiAKLXN0cnVjdCBOb2RlSW5zZXJ0aW9uIHsK
LSAgICBSZWZQdHI8Tm9kZT4gcGFyZW50SWZEaWZmZXJlbnRGcm9tQ29tbW9uQW5jZXN0b3I7Ci0g
ICAgUmVmPE5vZGU+IGNoaWxkOwotfTsKK1ZlY3RvcjxSZWY8Tm9kZT4+IFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpnZXRQYXRoKE5vZGUqIGFuY2VzdG9yLCBOb2RlKiBub2RlKQoreworICAg
IFZlY3RvcjxSZWY8Tm9kZT4+IHBhdGg7CisgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IGNvbnRh
aW5lck5vZGUgPSBpczxDb250YWluZXJOb2RlPigqbm9kZSkgPyAmZG93bmNhc3Q8Q29udGFpbmVy
Tm9kZT4oKm5vZGUpIDogbm9kZS0+cGFyZW50Tm9kZSgpOworICAgIGZvciAoOyBjb250YWluZXJO
b2RlICYmIGNvbnRhaW5lck5vZGUgIT0gYW5jZXN0b3I7IGNvbnRhaW5lck5vZGUgPSBjb250YWlu
ZXJOb2RlLT5wYXJlbnROb2RlKCkpCisgICAgICAgIHBhdGguYXBwZW5kKCpjb250YWluZXJOb2Rl
KTsKKyAgICBwYXRoLnJldmVyc2UoKTsKKyAgICByZXR1cm4gcGF0aDsKK30KKwordm9pZCBUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6dXBkYXRlSW5zZXJ0aW9ucyhWZWN0b3I8Tm9kZUVudHJ5
PiYgbGFzdFRvcERvd25QYXRoLCBjb25zdCBWZWN0b3I8UmVmPE5vZGU+PiYgY3VycmVudFRvcERv
d25QYXRoLCBOb2RlKiBjdXJyZW50Tm9kZSwgSGFzaFNldDxSZWY8Tm9kZT4+JiBpbnNlcnRlZE5v
ZGVzLCBWZWN0b3I8Tm9kZUluc2VydGlvbj4mIGluc2VydGlvbnMpCit7CisgICAgc2l6ZV90IGkg
PTA7CisgICAgd2hpbGUgKGkgPCBsYXN0VG9wRG93blBhdGguc2l6ZSgpICYmIGkgPCBjdXJyZW50
VG9wRG93blBhdGguc2l6ZSgpICYmIGxhc3RUb3BEb3duUGF0aFtpXS5maXJzdC5wdHIoKSA9PSBj
dXJyZW50VG9wRG93blBhdGhbaV0ucHRyKCkpCisgICAgICAgICsraTsKKworICAgIGlmIChpICE9
IGxhc3RUb3BEb3duUGF0aC5zaXplKCkgfHwgaSAhPSBjdXJyZW50VG9wRG93blBhdGguc2l6ZSgp
KSB7CisgICAgICAgIGlmIChpIDwgbGFzdFRvcERvd25QYXRoLnNpemUoKSkKKyAgICAgICAgICAg
IGxhc3RUb3BEb3duUGF0aC5zaHJpbmsoaSk7CisKKyAgICAgICAgZm9yICg7aSA8IGN1cnJlbnRU
b3BEb3duUGF0aC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgUmVmPE5vZGU+IG5vZGUgPSBj
dXJyZW50VG9wRG93blBhdGhbaV07CisgICAgICAgICAgICBpZiAoIWluc2VydGVkTm9kZXMuYWRk
KG5vZGUuY29weVJlZigpKS5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAgICAgYXV0byBjbG9u
ZWROb2RlID0gbm9kZS0+Y2xvbmVOb2RlSW50ZXJuYWwobm9kZS0+ZG9jdW1lbnQoKSwgTm9kZTo6
Q2xvbmluZ09wZXJhdGlvbjo6T25seVNlbGYpOworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBk
YXRhID0gbm9kZS0+ZXZlbnRUYXJnZXREYXRhKCkpCisgICAgICAgICAgICAgICAgICAgIGRhdGEt
PmV2ZW50TGlzdGVuZXJNYXAuY29weUV2ZW50TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBU
b1RhcmdldChjbG9uZWROb2RlLnB0cigpKTsKKyAgICAgICAgICAgICAgICBub2RlID0gV1RGTW92
ZShjbG9uZWROb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluc2VydGlvbnMuYXBw
ZW5kKE5vZGVJbnNlcnRpb24geyBsYXN0VG9wRG93blBhdGguc2l6ZSgpID8gbGFzdFRvcERvd25Q
YXRoLmxhc3QoKS5zZWNvbmQucHRyKCkgOiBudWxscHRyLCBub2RlLmNvcHlSZWYoKSB9KTsKKyAg
ICAgICAgICAgIGxhc3RUb3BEb3duUGF0aC5hcHBlbmQoeyBjdXJyZW50VG9wRG93blBhdGhbaV0u
Y29weVJlZigpLCBXVEZNb3ZlKG5vZGUpIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KGN1cnJlbnROb2RlKQorICAgICAgICBpbnNlcnRpb25zLmFwcGVuZChOb2RlSW5zZXJ0aW9uIHsg
bGFzdFRvcERvd25QYXRoLnNpemUoKSA/IGxhc3RUb3BEb3duUGF0aC5sYXN0KCkuc2Vjb25kLnB0
cigpIDogbnVsbHB0ciwgKmN1cnJlbnROb2RlIH0pOworfQogCiBhdXRvIFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpyZXBsYWNlKGNvbnN0IE1hbmlwdWxhdGlvbkl0ZW1EYXRhJiBpdGVtLCBj
b25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+JiByZXBsYWNlbWVudFRva2VucykgLT4gT3B0
aW9uYWw8TWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU+CiB7CiAgICAgaWYgKGl0ZW0uc3RhcnQuaXNP
cnBoYW4oKSB8fCBpdGVtLmVuZC5pc09ycGhhbigpKQogICAgICAgICByZXR1cm4gTWFuaXB1bGF0
aW9uRmFpbHVyZVR5cGU6OkNvbnRlbnRDaGFuZ2VkOwogCi0gICAgc2l6ZV90IGN1cnJlbnRUb2tl
bkluZGV4ID0gMDsKLSAgICBIYXNoTWFwPFRva2VuSWRlbnRpZmllciwgVG9rZW5FeGNoYW5nZURh
dGE+IHRva2VuRXhjaGFuZ2VNYXA7Ci0KICAgICBpZiAoaXRlbS5zdGFydC5pc051bGwoKSB8fCBp
dGVtLmVuZC5pc051bGwoKSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChpdGVtLnRva2Vucy5z
aXplKCkgPT0gMSk7CiAgICAgICAgIGF1dG8gZWxlbWVudCA9IG1ha2VSZWZQdHIoaXRlbS5lbGVt
ZW50LmdldCgpKTsKQEAgLTU4MiwxMjMgKzYyMiwxMTQgQEAgYXV0byBUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcjo6cmVwbGFjZShjb25zdCBNYW5pcHVsYXRpb25JdGVtRGF0YSYgaXRlbSwgY29u
c3QKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKKyAgICBzaXplX3QgY3Vy
cmVudFRva2VuSW5kZXggPSAwOworICAgIEhhc2hNYXA8VG9rZW5JZGVudGlmaWVyLCBUb2tlbkV4
Y2hhbmdlRGF0YT4gdG9rZW5FeGNoYW5nZU1hcDsKICAgICBSZWZQdHI8Tm9kZT4gY29tbW9uQW5j
ZXN0b3I7CiAgICAgUmVmUHRyPE5vZGU+IGZpcnN0Q29udGVudE5vZGU7Ci0gICAgUGFyYWdyYXBo
Q29udGVudEl0ZXJhdG9yIGl0ZXJhdG9yIHsgaXRlbS5zdGFydCwgaXRlbS5lbmQgfTsKLSAgICBI
YXNoU2V0PFJlZjxOb2RlPj4gZXhjbHVkZWROb2RlczsKKyAgICBSZWZQdHI8Tm9kZT4gbGFzdENo
aWxkT2ZDb21tb25BbmNlc3RvckluUmFuZ2U7CiAgICAgSGFzaFNldDxSZWY8Tm9kZT4+IG5vZGVz
VG9SZW1vdmU7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGVUb0luc2VydEJhY2tBdEVuZDsKKyAgICBQ
YXJhZ3JhcGhDb250ZW50SXRlcmF0b3IgaXRlcmF0b3IgeyBpdGVtLnN0YXJ0LCBpdGVtLmVuZCB9
OwogICAgIGZvciAoOyAhaXRlcmF0b3IuYXRFbmQoKTsgaXRlcmF0b3IuYWR2YW5jZSgpKSB7CiAg
ICAgICAgIGF1dG8gY29udGVudCA9IGl0ZXJhdG9yLmN1cnJlbnRDb250ZW50KCk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoY29udGVudC5ub2RlKQotICAgICAgICAgICAgbm9kZXNUb1JlbW92ZS5h
ZGQoKmNvbnRlbnQubm9kZSk7CisgICAgICAgIEFTU0VSVChjb250ZW50Lm5vZGUpOworCisgICAg
ICAgIGxhc3RDaGlsZE9mQ29tbW9uQW5jZXN0b3JJblJhbmdlID0gY29udGVudC5ub2RlOworICAg
ICAgICBub2Rlc1RvUmVtb3ZlLmFkZCgqY29udGVudC5ub2RlKTsKIAogICAgICAgICBpZiAoIWNv
bnRlbnQuaXNSZXBsYWNlZENvbnRlbnQgJiYgIWNvbnRlbnQuaXNUZXh0Q29udGVudCkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChjdXJyZW50VG9rZW5JbmRleCA+PSBpdGVt
LnRva2Vucy5zaXplKCkpIHsKLSAgICAgICAgICAgIGlmIChjb250ZW50Lm5vZGUgJiYgIW5vZGVU
b0luc2VydEJhY2tBdEVuZCAmJiBjb250ZW50LmlzVGV4dENvbnRlbnQgJiYgY29udGVudC50ZXh0
ID09ICJcbiIpIHsgLy8gYnIKLSAgICAgICAgICAgICAgICBub2RlVG9JbnNlcnRCYWNrQXRFbmQg
PSBjb250ZW50Lm5vZGU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gTWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU6OkNvbnRlbnRDaGFu
Z2VkOwotICAgICAgICB9CisgICAgICAgIFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5z
SW5DdXJyZW50Tm9kZTsKKyAgICAgICAgaWYgKGNvbnRlbnQuaXNSZXBsYWNlZENvbnRlbnQpCisg
ICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnROb2RlLmFwcGVuZChpdGVtLnRva2Vuc1tjdXJyZW50
VG9rZW5JbmRleF0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRO
b2RlID0gcGFyc2UoY29udGVudC50ZXh0LCBjb250ZW50Lm5vZGUuZ2V0KCkpLnRva2VuczsKIAot
ICAgICAgICBpZiAoY29udGVudC5pc1RleHRDb250ZW50ICYmIGNvbnRhaW5zT25seUhUTUxTcGFj
ZXMoY29udGVudC50ZXh0KSkgewotICAgICAgICAgICAgLy8gPGJyPiBzaG91bGQgbm90IGV4aXN0
IGluIHRoZSBtaWRkbGUgb2YgYSBwYXJhZ3JhcGguCi0gICAgICAgICAgICBpZiAoaXM8SFRNTEJS
RWxlbWVudD4oY29udGVudC5ub2RlKSkKKyAgICAgICAgYm9vbCBpc05vZGVJbmNsdWRlZCA9IFdU
Rjo6YW55T2YodG9rZW5zSW5DdXJyZW50Tm9kZSwgW10gKGF1dG8mIHRva2VuKSB7CisgICAgICAg
ICAgICByZXR1cm4gIXRva2VuLmlzRXhjbHVkZWQ7CisgICAgICAgIH0pOworICAgICAgICBmb3Ig
KGF1dG8mIHRva2VuIDogdG9rZW5zSW5DdXJyZW50Tm9kZSkgeworICAgICAgICAgICAgaWYgKGN1
cnJlbnRUb2tlbkluZGV4ID4gaXRlbS50b2tlbnMuc2l6ZSgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTo6Q29udGVudENoYW5nZWQ7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQogCi0gICAgICAgIGF1dG8mIGN1cnJlbnRUb2tlbiA9IGl0
ZW0udG9rZW5zW2N1cnJlbnRUb2tlbkluZGV4XTsKLSAgICAgICAgaWYgKCFjb250ZW50LmlzUmVw
bGFjZWRDb250ZW50ICYmIGNvbnRlbnQudGV4dCAhPSBjdXJyZW50VG9rZW4uY29udGVudCkKLSAg
ICAgICAgICAgIHJldHVybiBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTo6Q29udGVudENoYW5nZWQ7
CisgICAgICAgICAgICBhdXRvJiBjdXJyZW50VG9rZW4gPSBpdGVtLnRva2Vuc1tjdXJyZW50VG9r
ZW5JbmRleCsrXTsKKyAgICAgICAgICAgIGlmICghY29udGVudC5pc1JlcGxhY2VkQ29udGVudCAm
JiBjdXJyZW50VG9rZW4uY29udGVudCAhPSB0b2tlbi5jb250ZW50KQorICAgICAgICAgICAgICAg
IHJldHVybiBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTo6Q29udGVudENoYW5nZWQ7CisKKyAgICAg
ICAgICAgIHRva2VuRXhjaGFuZ2VNYXAuc2V0KGN1cnJlbnRUb2tlbi5pZGVudGlmaWVyLCBUb2tl
bkV4Y2hhbmdlRGF0YSB7IGNvbnRlbnQubm9kZS5jb3B5UmVmKCksIGN1cnJlbnRUb2tlbi5jb250
ZW50LCAhaXNOb2RlSW5jbHVkZWQgfSk7CisgICAgICAgIH0KIAotICAgICAgICB0b2tlbkV4Y2hh
bmdlTWFwLnNldChjdXJyZW50VG9rZW4uaWRlbnRpZmllciwgVG9rZW5FeGNoYW5nZURhdGEgeyBj
b250ZW50Lm5vZGUuY29weVJlZigpLCBjdXJyZW50VG9rZW4uY29udGVudCwgY3VycmVudFRva2Vu
LmlzRXhjbHVkZWQgfSk7Ci0gICAgICAgICsrY3VycmVudFRva2VuSW5kZXg7Ci0gICAgICAgIAog
ICAgICAgICBpZiAoIWZpcnN0Q29udGVudE5vZGUpCiAgICAgICAgICAgICBmaXJzdENvbnRlbnRO
b2RlID0gY29udGVudC5ub2RlOwogCi0gICAgICAgIC8vIEZJWE1FOiBUYWtlIGNhcmUgb2Ygd2hl
biBjdXJyZW50Tm9kZSBpcyBudWxscHRyLgotICAgICAgICBpZiAoUmVmUHRyPE5vZGU+IHBhcmVu
dCA9IGNvbnRlbnQubm9kZSA/IGNvbnRlbnQubm9kZS0+cGFyZW50Tm9kZSgpIDogbnVsbHB0cikg
ewotICAgICAgICAgICAgaWYgKCFjb21tb25BbmNlc3RvcikKLSAgICAgICAgICAgICAgICBjb21t
b25BbmNlc3RvciA9IHBhcmVudDsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFwYXJlbnQtPmlzRGVz
Y2VuZGFudE9mKGNvbW1vbkFuY2VzdG9yLmdldCgpKSkgewotICAgICAgICAgICAgICAgIGNvbW1v
bkFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKmNvbW1vbkFuY2VzdG9yLCAqcGFy
ZW50KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoY29tbW9uQW5jZXN0b3IpOwotICAgICAgICAg
ICAgfQorICAgICAgICBhdXRvIHBhcmVudE5vZGUgPSBjb250ZW50Lm5vZGUtPnBhcmVudE5vZGUo
KTsKKyAgICAgICAgaWYgKCFjb21tb25BbmNlc3RvcikKKyAgICAgICAgICAgIGNvbW1vbkFuY2Vz
dG9yID0gcGFyZW50Tm9kZTsKKyAgICAgICAgZWxzZSBpZiAoIXBhcmVudE5vZGUtPmlzRGVzY2Vu
ZGFudE9mKGNvbW1vbkFuY2VzdG9yLmdldCgpKSkgeworICAgICAgICAgICAgY29tbW9uQW5jZXN0
b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqY29tbW9uQW5jZXN0b3IsICpwYXJlbnROb2Rl
KTsKKyAgICAgICAgICAgIEFTU0VSVChjb21tb25BbmNlc3Rvcik7CiAgICAgICAgIH0KICAgICB9
CiAKKyAgICB3aGlsZSAobGFzdENoaWxkT2ZDb21tb25BbmNlc3RvckluUmFuZ2UgJiYgbGFzdENo
aWxkT2ZDb21tb25BbmNlc3RvckluUmFuZ2UtPnBhcmVudE5vZGUoKSAhPSBjb21tb25BbmNlc3Rv
cikKKyAgICAgICAgbGFzdENoaWxkT2ZDb21tb25BbmNlc3RvckluUmFuZ2UgPSBsYXN0Q2hpbGRP
ZkNvbW1vbkFuY2VzdG9ySW5SYW5nZS0+cGFyZW50Tm9kZSgpOworCiAgICAgZm9yIChhdXRvIG5v
ZGUgPSBjb21tb25BbmNlc3Rvcjsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkKICAg
ICAgICAgbm9kZXNUb1JlbW92ZS5yZW1vdmUoKm5vZGUpOwogCi0gICAgVmVjdG9yPFJlZjxOb2Rl
Pj4gY3VycmVudEVsZW1lbnRTdGFjazsKICAgICBIYXNoU2V0PFJlZjxOb2RlPj4gcmV1c2VkT3Jp
Z2luYWxOb2RlczsKKyAgICBWZWN0b3I8Tm9kZUVudHJ5PiBsYXN0VG9wRG93blBhdGg7CiAgICAg
VmVjdG9yPE5vZGVJbnNlcnRpb24+IGluc2VydGlvbnM7Ci0gICAgZm9yIChhdXRvJiBuZXdUb2tl
biA6IHJlcGxhY2VtZW50VG9rZW5zKSB7Ci0gICAgICAgIGF1dG8gaXQgPSB0b2tlbkV4Y2hhbmdl
TWFwLmZpbmQobmV3VG9rZW4uaWRlbnRpZmllcik7CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAw
OyBpbmRleCA8IHJlcGxhY2VtZW50VG9rZW5zLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBh
dXRvJiByZXBsYWNlbWVudFRva2VuID0gcmVwbGFjZW1lbnRUb2tlbnNbaW5kZXhdOworICAgICAg
ICBhdXRvIGl0ID0gdG9rZW5FeGNoYW5nZU1hcC5maW5kKHJlcGxhY2VtZW50VG9rZW4uaWRlbnRp
Zmllcik7CiAgICAgICAgIGlmIChpdCA9PSB0b2tlbkV4Y2hhbmdlTWFwLmVuZCgpKQogICAgICAg
ICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpJbnZhbGlkVG9rZW47CiAKICAg
ICAgICAgYXV0byYgZXhjaGFuZ2VEYXRhID0gaXQtPnZhbHVlOworICAgICAgICBhdXRvKiBvcmln
aW5hbE5vZGUgPSBleGNoYW5nZURhdGEubm9kZS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKG9yaWdp
bmFsTm9kZSk7CisgICAgICAgIGF1dG8gcmVwbGFjZW1lbnRUZXh0ID0gcmVwbGFjZW1lbnRUb2tl
bi5jb250ZW50OwogCi0gICAgICAgIFJlZlB0cjxOb2RlPiBjb250ZW50Tm9kZTsKKyAgICAgICAg
UmVmUHRyPE5vZGU+IHJlcGxhY2VtZW50Tm9kZTsKICAgICAgICAgaWYgKGV4Y2hhbmdlRGF0YS5p
c0V4Y2x1ZGVkKSB7CiAgICAgICAgICAgICBpZiAoZXhjaGFuZ2VEYXRhLmlzQ29uc3VtZWQpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpFeGNsdXNpb25W
aW9sYXRpb247CiAgICAgICAgICAgICBleGNoYW5nZURhdGEuaXNDb25zdW1lZCA9IHRydWU7Ci0g
ICAgICAgICAgICBpZiAoIW5ld1Rva2VuLmNvbnRlbnQuaXNOdWxsKCkgJiYgbmV3VG9rZW4uY29u
dGVudCAhPSBleGNoYW5nZURhdGEub3JpZ2luYWxDb250ZW50KQorCisgICAgICAgICAgICBpZiAo
IXJlcGxhY2VtZW50VG9rZW4uY29udGVudC5pc051bGwoKSAmJiByZXBsYWNlbWVudFRva2VuLmNv
bnRlbnQgIT0gZXhjaGFuZ2VEYXRhLm9yaWdpbmFsQ29udGVudCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gTWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU6OkV4Y2x1c2lvblZpb2xhdGlvbjsKLSAgICAg
ICAgICAgIGNvbnRlbnROb2RlID0gZXhjaGFuZ2VEYXRhLm5vZGU7Ci0gICAgICAgICAgICBmb3Ig
KFJlZlB0cjxOb2RlPiBjdXJyZW50RGVzY2VuZGVudE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KCpjb250ZW50Tm9kZSwgY29udGVudE5vZGUuZ2V0KCkpOyBjdXJyZW50RGVzY2VuZGVudE5vZGU7
IGN1cnJlbnREZXNjZW5kZW50Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKmN1cnJlbnREZXNj
ZW5kZW50Tm9kZSwgY29udGVudE5vZGUuZ2V0KCkpKQotICAgICAgICAgICAgICAgIG5vZGVzVG9S
ZW1vdmUucmVtb3ZlKCpjdXJyZW50RGVzY2VuZGVudE5vZGUpOworCisgICAgICAgICAgICByZXBs
YWNlbWVudE5vZGUgPSBvcmlnaW5hbE5vZGU7CisgICAgICAgICAgICBmb3IgKFJlZlB0cjxOb2Rl
PiBkZXNjZW5kZW50Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm9yaWdpbmFsTm9kZSwgb3Jp
Z2luYWxOb2RlKTsgZGVzY2VuZGVudE5vZGU7IGRlc2NlbmRlbnROb2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dCgqZGVzY2VuZGVudE5vZGUsIG9yaWdpbmFsTm9kZSkpCisgICAgICAgICAgICAgICAg
bm9kZXNUb1JlbW92ZS5yZW1vdmUoKmRlc2NlbmRlbnROb2RlKTsKICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBjb250ZW50Tm9kZSA9IFRleHQ6OmNyZWF0ZShjb21tb25BbmNlc3Rvci0+ZG9j
dW1lbnQoKSwgbmV3VG9rZW4uY29udGVudCk7Ci0KLSAgICAgICAgYXV0byYgb3JpZ2luYWxOb2Rl
ID0gZXhjaGFuZ2VEYXRhLm5vZGUgPyAqZXhjaGFuZ2VEYXRhLm5vZGUgOiAqY29tbW9uQW5jZXN0
b3I7Ci0gICAgICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBjdXJyZW50Tm9kZSA9IGlzPENvbnRh
aW5lck5vZGU+KG9yaWdpbmFsTm9kZSkgPyAmZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4ob3JpZ2lu
YWxOb2RlKSA6IG9yaWdpbmFsTm9kZS5wYXJlbnROb2RlKCk7Ci0KLSAgICAgICAgVmVjdG9yPFJl
ZjxOb2RlPj4gY3VycmVudEFuY2VzdG9yczsKLSAgICAgICAgZm9yICg7IGN1cnJlbnROb2RlICYm
IGN1cnJlbnROb2RlICE9IGNvbW1vbkFuY2VzdG9yOyBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2Rl
LT5wYXJlbnROb2RlKCkpCi0gICAgICAgICAgICBjdXJyZW50QW5jZXN0b3JzLmFwcGVuZCgqY3Vy
cmVudE5vZGUpOwotICAgICAgICBjdXJyZW50QW5jZXN0b3JzLnJldmVyc2UoKTsKLQotICAgICAg
ICBzaXplX3QgaSA9MDsKLSAgICAgICAgd2hpbGUgKGkgPCBjdXJyZW50RWxlbWVudFN0YWNrLnNp
emUoKSAmJiBpIDwgY3VycmVudEFuY2VzdG9ycy5zaXplKCkgJiYgY3VycmVudEVsZW1lbnRTdGFj
a1tpXS5wdHIoKSA9PSBjdXJyZW50QW5jZXN0b3JzW2ldLnB0cigpKQotICAgICAgICAgICAgKytp
OwotCi0gICAgICAgIGlmIChpID09IGN1cnJlbnRFbGVtZW50U3RhY2suc2l6ZSgpICYmIGkgPT0g
Y3VycmVudEFuY2VzdG9ycy5zaXplKCkpCi0gICAgICAgICAgICBpbnNlcnRpb25zLmFwcGVuZChO
b2RlSW5zZXJ0aW9uIHsgY3VycmVudEVsZW1lbnRTdGFjay5zaXplKCkgPyBjdXJyZW50RWxlbWVu
dFN0YWNrLmxhc3QoKS5wdHIoKSA6IG51bGxwdHIsIGNvbnRlbnROb2RlLnJlbGVhc2VOb25OdWxs
KCkgfSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKGkgPCBjdXJyZW50RWxlbWVu
dFN0YWNrLnNpemUoKSkKLSAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudFN0YWNrLnNocmlu
ayhpKTsKLSAgICAgICAgICAgIGZvciAoO2kgPCBjdXJyZW50QW5jZXN0b3JzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgUmVmPE5vZGU+IGN1cnJlbnROb2RlID0gY3VycmVudEFuY2Vz
dG9yc1tpXS5jb3B5UmVmKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXVzZWRPcmlnaW5hbE5v
ZGVzLmFkZChjdXJyZW50Tm9kZS5jb3B5UmVmKCkpLmlzTmV3RW50cnkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBjbG9uZWROb2RlID0gY3VycmVudE5vZGUtPmNsb25lTm9kZUludGVybmFs
KGN1cnJlbnROb2RlLT5kb2N1bWVudCgpLCBOb2RlOjpDbG9uaW5nT3BlcmF0aW9uOjpPbmx5U2Vs
Zik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBkYXRhID0gY3VycmVudE5vZGUtPmV2
ZW50VGFyZ2V0RGF0YSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+ZXZlbnRMaXN0
ZW5lck1hcC5jb3B5RXZlbnRMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KGNs
b25lZE5vZGUucHRyKCkpOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IFdURk1v
dmUoY2xvbmVkTm9kZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVwbGFjZW1l
bnROb2RlID0gVGV4dDo6Y3JlYXRlKGNvbW1vbkFuY2VzdG9yLT5kb2N1bWVudCgpLCByZXBsYWNl
bWVudFRleHQpOwogCi0gICAgICAgICAgICAgICAgaW5zZXJ0aW9ucy5hcHBlbmQoTm9kZUluc2Vy
dGlvbiB7IGN1cnJlbnRFbGVtZW50U3RhY2suc2l6ZSgpID8gY3VycmVudEVsZW1lbnRTdGFjay5s
YXN0KCkucHRyKCkgOiBudWxscHRyLCBjdXJyZW50Tm9kZS5jb3B5UmVmKCkgfSk7Ci0gICAgICAg
ICAgICAgICAgY3VycmVudEVsZW1lbnRTdGFjay5hcHBlbmQoV1RGTW92ZShjdXJyZW50Tm9kZSkp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5zZXJ0aW9ucy5hcHBlbmQoTm9kZUluc2Vy
dGlvbiB7IGN1cnJlbnRFbGVtZW50U3RhY2suc2l6ZSgpID8gY3VycmVudEVsZW1lbnRTdGFjay5s
YXN0KCkucHRyKCkgOiBudWxscHRyLCBjb250ZW50Tm9kZS5yZWxlYXNlTm9uTnVsbCgpIH0pOwot
ICAgICAgICB9CisgICAgICAgIGF1dG8gdG9wRG93blBhdGggPSBnZXRQYXRoKGNvbW1vbkFuY2Vz
dG9yLmdldCgpLCBvcmlnaW5hbE5vZGUpOworICAgICAgICB1cGRhdGVJbnNlcnRpb25zKGxhc3RU
b3BEb3duUGF0aCwgdG9wRG93blBhdGgsIHJlcGxhY2VtZW50Tm9kZS5nZXQoKSwgcmV1c2VkT3Jp
Z2luYWxOb2RlcywgaW5zZXJ0aW9ucyk7CisgICAgfQorCisgICAgYXV0byBlbmQgPSBsYXN0Q2hp
bGRPZkNvbW1vbkFuY2VzdG9ySW5SYW5nZSA/IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUobGFz
dENoaWxkT2ZDb21tb25BbmNlc3RvckluUmFuZ2UuZ2V0KCkpIDogcG9zaXRpb25BZnRlck5vZGUo
Y29tbW9uQW5jZXN0b3IuZ2V0KCkpOworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gaXRlbS5lbmQu
Zmlyc3ROb2RlKCk7CisgICAgUmVmUHRyPE5vZGU+IGVuZE5vZGUgPSBlbmQuZmlyc3ROb2RlKCk7
CisgICAgaWYgKG5vZGUgJiYgbm9kZSAhPSBlbmROb2RlKSB7CisgICAgICAgIGF1dG8gdG9wRG93
blBhdGggPSBnZXRQYXRoKGNvbW1vbkFuY2VzdG9yLmdldCgpLCBub2RlLT5wYXJlbnROb2RlKCkp
OworICAgICAgICB1cGRhdGVJbnNlcnRpb25zKGxhc3RUb3BEb3duUGF0aCwgdG9wRG93blBhdGgs
IG51bGxwdHIsIHJldXNlZE9yaWdpbmFsTm9kZXMsIGluc2VydGlvbnMpOworICAgIH0KKyAgICB3
aGlsZSAobm9kZSAhPSBlbmROb2RlKSB7CisgICAgICAgIFJlZjxOb2RlPiBwYXJlbnROb2RlID0g
Km5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgd2hpbGUgKCFsYXN0VG9wRG93blBhdGguaXNF
bXB0eSgpICYmIGxhc3RUb3BEb3duUGF0aC5sYXN0KCkuZmlyc3QucHRyKCkgIT0gcGFyZW50Tm9k
ZS5wdHIoKSkKKyAgICAgICAgICAgIGxhc3RUb3BEb3duUGF0aC5yZW1vdmVMYXN0KCk7CisKKyAg
ICAgICAgaW5zZXJ0aW9ucy5hcHBlbmQoTm9kZUluc2VydGlvbiB7IGxhc3RUb3BEb3duUGF0aC5z
aXplKCkgPyBsYXN0VG9wRG93blBhdGgubGFzdCgpLnNlY29uZC5wdHIoKSA6IG51bGxwdHIsICpu
b2RlIH0pOworICAgICAgICBsYXN0VG9wRG93blBhdGguYXBwZW5kKHsgKm5vZGUsICpub2RlIH0p
OworICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSk7CiAgICAgfQotICAg
IGlmIChub2RlVG9JbnNlcnRCYWNrQXRFbmQpCi0gICAgICAgIGluc2VydGlvbnMuYXBwZW5kKE5v
ZGVJbnNlcnRpb24geyBudWxscHRyLCBub2RlVG9JbnNlcnRCYWNrQXRFbmQucmVsZWFzZU5vbk51
bGwoKSB9KTsKIAogICAgIFBvc2l0aW9uIGluc2VydGlvblBvaW50ID0gcG9zaXRpb25CZWZvcmVO
b2RlKGZpcnN0Q29udGVudE5vZGUuZ2V0KCkpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwog
ICAgIHdoaWxlIChpbnNlcnRpb25Qb2ludC5jb250YWluZXJOb2RlKCkgIT0gY29tbW9uQW5jZXN0
b3IpCiAgICAgICAgIGluc2VydGlvblBvaW50ID0gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUo
aW5zZXJ0aW9uUG9pbnQuY29udGFpbmVyTm9kZSgpKTsKLSAgICBBU1NFUlQoIWluc2VydGlvblBv
aW50LmlzTnVsbCgpKTsKLSAgICBBU1NFUlQoIWluc2VydGlvblBvaW50LmlzT3JwaGFuKCkpOwog
CiAgICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXNUb1JlbW92ZSkKICAgICAgICAgbm9kZS0+cmVt
b3ZlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyLmgKaW5kZXggYjVkM2E2OWQwZmY5MWRmNzJlMGU1OWEwNjVjNTdkMGM1YTc2MjY5
Mi4uNTMzMzA2MWExZTY4MDk4ZjQyODQ4M2JiNjZlMTI0YzdlZGVlZTE1NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaApAQCAt
MTUwLDggKzE1MCwyNSBAQCBwcml2YXRlOgogICAgICAgICBWZWN0b3I8TWFuaXB1bGF0aW9uVG9r
ZW4+IHRva2VuczsKICAgICB9OwogCisgICAgc3RydWN0IE1hbmlwdWxhdGlvblRva2VucyB7Cisg
ICAgICAgIFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zOworICAgICAgICBib29sIGNv
bnRhaW5zT25seUhUTUxTcGFjZTsKKyAgICAgICAgYm9vbCBjb250YWluc0xpbmVCcmVhazsKKyAg
ICAgICAgYm9vbCBmaXJzdFRva2VuQ29udGFpbnNMaW5lQnJlYWs7CisgICAgICAgIGJvb2wgbGFz
dFRva2VuQ29udGFpbnNMaW5lQnJlYWs7CisgICAgfTsKKyAgICBNYW5pcHVsYXRpb25Ub2tlbnMg
cGFyc2UoU3RyaW5nVmlldyB0ZXh0LCBOb2RlKiB0ZXh0Tm9kZSk7CisKICAgICB2b2lkIGFkZEl0
ZW0oTWFuaXB1bGF0aW9uSXRlbURhdGEmJik7CiAgICAgdm9pZCBmbHVzaFBlbmRpbmdJdGVtc0Zv
ckNhbGxiYWNrKCk7CisKKyAgICBzdHJ1Y3QgTm9kZUluc2VydGlvbiB7CisgICAgICAgIFJlZlB0
cjxOb2RlPiBwYXJlbnRJZkRpZmZlcmVudEZyb21Db21tb25BbmNlc3RvcjsKKyAgICAgICAgUmVm
PE5vZGU+IGNoaWxkOworICAgIH07CisgICAgdXNpbmcgTm9kZUVudHJ5ID0gc3RkOjpwYWlyPFJl
ZjxOb2RlPiwgUmVmPE5vZGU+PjsKKyAgICBWZWN0b3I8UmVmPE5vZGU+PiBnZXRQYXRoKE5vZGUq
LCBOb2RlKik7CisgICAgdm9pZCB1cGRhdGVJbnNlcnRpb25zKFZlY3RvcjxOb2RlRW50cnk+Jiwg
Y29uc3QgVmVjdG9yPFJlZjxOb2RlPj4mLCBOb2RlKiwgSGFzaFNldDxSZWY8Tm9kZT4+JiwgVmVj
dG9yPE5vZGVJbnNlcnRpb24+Jik7CiAgICAgT3B0aW9uYWw8TWFuaXB1bGF0aW9uRmFpbHVyZVR5
cGU+IHJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbURhdGEmLCBjb25zdCBWZWN0b3I8TWFu
aXB1bGF0aW9uVG9rZW4+Jik7CiAKICAgICBXZWFrUHRyPERvY3VtZW50PiBtX2RvY3VtZW50Owpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQ4Mjli
ZmM2NTNmZTA5YzA0YjFmMzAzZTUzZmY0ZGMzMmUxMzdiOTYuLmEyMDA1MjIxMmJkNzNmNGFhN2Zm
YzE5ODI1NmMzNDNiMTBiNzlkYTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wNi0wMSAgU2lodWkgTGl1ICA8
c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
ciBzaG91bGQgcHV0IG9uZSBOb2RlIGluIG9ubHkgb25lIHBhcmFncmFwaAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNTQ4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUKToKKwogMjAyMC0wNS0zMCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAK
ICAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IEFkZGl0aW9uYWwgY29sb3IgY2xlYW51cHMKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxh
dGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlw
dWxhdGlvbi5tbQppbmRleCBmNjRiNmUzOTNmYzkzMTUzYTljMTE4OGNkZDA4MDdkNjdlZTllZmY3
Li40MGQ0ZGNmMzM3NzhhNDJlMGY1YzViZmYxNDE0MzhjNzFkOTk5MjlhIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0
aW9uLm1tCkBAIC0xNzksMTUgKzE3OSwxMyBAQCBURVNUKFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0
VGV4dE1hbmlwdWxhdGlvbkZpbmRNdWx0aXBsZVBhcmFncmFwaHNJblNpbmdsZVRleHRObwogICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAKICAgICBhdXRvICppdGVtcyA9IFtk
ZWxlZ2F0ZSBpdGVtc107Ci0gICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAzVUwpOwotICAgIEVY
UEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1z
LmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDVVTCk7
CiAgICAgRVhQRUNUX1NUUkVRKCJoZWxsbyIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVU
RjhTdHJpbmcpOwotCi0gICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgMVVMKTsK
LSAgICBFWFBFQ1RfU1RSRVEoIndvcmxkIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRG
OFN0cmluZyk7Ci0KLSAgICBFWFBFQ1RfRVEoaXRlbXNbMl0udG9rZW5zLmNvdW50LCAxVUwpOwot
ICAgIEVYUEVDVF9TVFJFUSgiV2ViS2l0IiwgaXRlbXNbMl0udG9rZW5zWzBdLmNvbnRlbnQuVVRG
OFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJcbiIsIGl0ZW1zWzBdLnRva2Vuc1sxXS5jb250
ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgid29ybGQiLCBpdGVtc1swXS50b2tl
bnNbMl0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIlxuIiwgaXRlbXNb
MF0udG9rZW5zWzNdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJXZWJL
aXQiLCBpdGVtc1swXS50b2tlbnNbNF0uY29udGVudC5VVEY4U3RyaW5nKTsKIH0KIAogVEVTVChU
ZXh0TWFuaXB1bGF0aW9uLCBTdGFydFRleHRNYW5pcHVsYXRpb25GaW5kUGFyYWdyYXBoc1dpdGhN
dWx0aWxlVG9rZW5zKQpAQCAtNzg2LDYgKzc4NCw3MSBAQCBURVNUKFRleHRNYW5pcHVsYXRpb24s
IFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkV4dHJhY3RzVmFsdWVzRnJvbUJ1dHRvbklucHV0cykKICAg
ICBFWFBFQ1RfV0tfU1RSRVEoIlR3byIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50KTsKIH0K
IAorVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBTdGFydFRleHRNYW5pcHVsYXRpb25FeHRyYWN0c1Zp
c2libGVMaW5lQnJlYWtzSW5UZXh0QXNFeGNsdWRlZFRva2VucykKK3sKKyAgICBhdXRvIGRlbGVn
YXRlID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgW3dlYlZpZXcgX3NldFRl
eHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD4iCisgICAgICAgICI8
Ym9keT4iCisgICAgICAgICI8c3BhbiBzdHlsZT0nd2hpdGUtc3BhY2U6cHJlOyc+JiMxMDsgb25l
JiMxMDsgIHR3bzwvc3Bhbj4iCisgICAgICAgICI8c3BhbiBzdHlsZT0nd2hpdGUtc3BhY2U6cHJl
Oyc+JiMxMDs8L3NwYW4+IgorICAgICAgICAiPHNwYW4+JiMxMDsgdGhyZWUmIzEwOyAgZm91ciYj
MTA7PC9zcGFuPiIKKyAgICAgICAgIjwvYm9keT4iXTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAg
ICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOm5pbCBj
b21wbGV0aW9uOl57CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvIGl0ZW1zID0gW2RlbGVnYXRlIGl0
ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX0VRKGl0
ZW1zWzBdLnRva2Vucy5jb3VudCwgNFVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoIlxuICIsIGl0ZW1z
WzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9UUlVFKGl0ZW1z
WzBdLnRva2Vuc1swXS5pc0V4Y2x1ZGVkKTsKKyAgICBFWFBFQ1RfU1RSRVEoIm9uZSIsIGl0ZW1z
WzBdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9GQUxTRShpdGVt
c1swXS50b2tlbnNbMV0uaXNFeGNsdWRlZCk7CisgICAgRVhQRUNUX1NUUkVRKCJcbiAgIiwgaXRl
bXNbMF0udG9rZW5zWzJdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1RSVUUoaXRl
bXNbMF0udG9rZW5zWzJdLmlzRXhjbHVkZWQpOworICAgIEVYUEVDVF9TVFJFUSgidHdvIiwgaXRl
bXNbMF0udG9rZW5zWzNdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX0ZBTFNFKGl0
ZW1zWzBdLnRva2Vuc1szXS5pc0V4Y2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9r
ZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9TVFJFUSgidGhyZWUgZm91ciIsIGl0ZW1zWzFd
LnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworfQorCitURVNUKFRleHRNYW5pcHVsYXRp
b24sIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkV4dHJhY3RzVmFsdWVzQnlOb2RlKQoreworICAgIGF1
dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBp
bml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmll
dyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAg
ICAgICAgIjxib2R5PiIKKyAgICAgICAgIjxzcGFuPm9uZTwvc3Bhbj48c3BhbiBzdHlsZT0nd2hp
dGUtc3BhY2U6cHJlOyc+dHdvICYjMTA7IHRocmVlPC9zcGFuPjxzcGFuPmZvdXI8L3NwYW4+Igor
ICAgICAgICAiPHNwYW4gc3R5bGU9J3doaXRlLXNwYWNlOnByZTsnPiYjMTA7Zml2ZTwvc3Bhbj4i
CisgICAgICAgICI8L2JvZHk+Il07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcg
X3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjpuaWwgY29tcGxldGlvbjpe
eworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmUpOworCisgICAgYXV0byBpdGVtcyA9IFtkZWxlZ2F0ZSBpdGVtc107CisgICAg
RVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAyVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tl
bnMuY291bnQsIDVVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJvbmUiLCBpdGVtc1swXS50b2tlbnNb
MF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoInR3byIsIGl0ZW1zWzBd
LnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiIFxuICIs
IGl0ZW1zWzBdLnRva2Vuc1syXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJF
USgidGhyZWUiLCBpdGVtc1swXS50b2tlbnNbM10uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBF
WFBFQ1RfU1RSRVEoImZvdXIiLCBpdGVtc1swXS50b2tlbnNbNF0uY29udGVudC5VVEY4U3RyaW5n
KTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCAyVUwpOworICAgIEVYUEVD
VF9TVFJFUSgiXG4iLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAg
ICBFWFBFQ1RfU1RSRVEoImZpdmUiLCBpdGVtc1sxXS50b2tlbnNbMV0uY29udGVudC5VVEY4U3Ry
aW5nKTsKK30KKwogc3RydWN0IFRva2VuIHsKICAgICBOU1N0cmluZyAqaWRlbnRpZmllcjsKICAg
ICBOU1N0cmluZyAqY29udGVudDsKQEAgLTEwNjQsNyArMTEyNyw3IEBAIFRFU1QoVGV4dE1hbmlw
dWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uUmVwbGFjZVBhcmFncmFwaHNTZXBhcmF0
ZWRCeVdyYXBwCiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCI8cD48Yj5IZWxsbywg
PC9iPldvcmxkPGJyPldlYktpdDwvcD4iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVR
KCI8cD48Yj5IZWxsbywgPC9iPldvcmxkPGI+PGJyPjwvYj5XZWJLaXQ8L3A+IiwgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MIl0p
OwogfQogCiBURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkZh
aWxXaGVuQlJJc0luc2VydGVkKQpAQCAtMTk2Nyw2ICsyMDMwLDEyMyBAQCBURVNUKFRleHRNYW5p
cHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkNvcnJlY3RQYXJhZ3JhcGhSYW5nZSkK
ICAgICBFWFBFQ1RfV0tfU1RSRVEoIjxkaXYgY2xhc3M9XCJmcmFtZVwiPjxkaXYgY2xhc3M9XCJz
dWJmcmFtZVwiPjwvZGl2PjwvZGl2PjxzdHlsZT48L3N0eWxlPjxkaXYgY2xhc3M9XCJpbmxpbmVc
Ij48ZGl2PjxsaT48YSBocmVmPVwiI1wiPmhlbGxvPC9hPjwvbGk+PGxpPjxhIGhyZWY9XCIjXCI+
d29ybGQ8L2E+PC9saT48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPVwiZnJhbWVcIj48ZGl2IGNsYXNz
PVwic3ViZnJhbWVcIj48L2Rpdj48L2Rpdj4iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7CiB9CiAKK1RFU1QoVGV4dE1h
bmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uQ2FuTWVyZ2VDb250ZW50QW5kUHJl
c2VydmVMaW5lQnJlYWtzKQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAw
LCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRl
OmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0
cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAgICAgICAgIjxib2R5PiIKKyAgICAgICAgIjxzcGFu
IHN0eWxlPSd3aGl0ZS1zcGFjZTpwcmU7Jz5vbmUgJiMxMDsgdHdvICYjMTA7PC9zcGFuPiIKKyAg
ICAgICAgIjwvYm9keT4iXTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3Rh
cnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOm5pbCBjb21wbGV0aW9uOl57Cisg
ICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZG9uZSk7CisKKyAgICBhdXRvIGl0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBF
Q1RfRVEoaXRlbXMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5j
b3VudCwgNFVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoIm9uZSIsIGl0ZW1zWzBdLnRva2Vuc1swXS5j
b250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiIFxuICIsIGl0ZW1zWzBdLnRv
a2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgidHdvIiwgaXRl
bXNbMF0udG9rZW5zWzJdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCIg
XG4iLCBpdGVtc1swXS50b2tlbnNbM10uY29udGVudC5VVEY4U3RyaW5nKTsKKworICAgIGF1dG8g
cmVwbGFjZW1lbnRJdGVtcyA9IHJldGFpblB0cihAWworICAgICAgICBjcmVhdGVJdGVtKGl0ZW1z
WzBdLmlkZW50aWZpZXIsIHsgeyBpdGVtc1swXS50b2tlbnNbMF0uaWRlbnRpZmllciwgQCJPTkUi
IH0sIHsgaXRlbXNbMF0udG9rZW5zWzFdLmlkZW50aWZpZXIsIGl0ZW1zWzBdLnRva2Vuc1sxXS5j
b250ZW50IH0sIHsgaXRlbXNbMF0udG9rZW5zWzJdLmlkZW50aWZpZXIsIEAiVFdPIiB9LCB7IGl0
ZW1zWzBdLnRva2Vuc1szXS5pZGVudGlmaWVyLCBpdGVtc1swXS50b2tlbnNbM10uY29udGVudCB9
IH0pLmF1dG9yZWxlYXNlKCksCisgICAgXSk7CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dl
YlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkZvckl0ZW1zOnJlcGxhY2VtZW50SXRlbXMu
Z2V0KCkgY29tcGxldGlvbjpeKE5TQXJyYXk8TlNFcnJvciAqPiAqZXJyb3JzKSB7CisgICAgICAg
IEVYUEVDVF9FUShlcnJvcnMsIG5pbCk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOwor
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBFWFBFQ1RfV0tfU1RS
RVEoIjxzcGFuIHN0eWxlPVwid2hpdGUtc3BhY2U6cHJlO1wiPk9ORSBcbiBUV08gXG48L3NwYW4+
IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHku
aW5uZXJIVE1MIl0pOworfQorCitURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1h
bmlwdWxhdGlvblNob3VsZFByZXNlcnZlTm9kZXNBZnRlclBhcmFncmFwaFJhbmdlKQoreworICAg
IGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9j
XSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2Vi
VmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAg
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIK
KyAgICAgICAgIjxib2R5PiIKKyAgICAgICAgIjxwPmhlbGxvPGI+d29ybGQ8YnI+PGJyPjxpPmZy
b208L2k+PC9iPjwvcD4iCisgICAgICAgICI8L2JvZHk+Il07CisKKyAgICBkb25lID0gZmFsc2U7
CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjpu
aWwgY29tcGxldGlvbjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0byBpdGVtcyA9IFtkZWxlZ2F0
ZSBpdGVtc107CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAyVUwpOworICAgIEVYUEVDVF9F
UShpdGVtc1swXS50b2tlbnMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJoZWxsbyIs
IGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJF
USgid29ybGQiLCBpdGVtc1swXS50b2tlbnNbMV0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBF
WFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9TVFJFUSgi
ZnJvbSIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgYXV0
byByZXBsYWNlbWVudEl0ZW1zID0gcmV0YWluUHRyKEBbCisgICAgICAgIGNyZWF0ZUl0ZW0oaXRl
bXNbMF0uaWRlbnRpZmllciwgeyB7IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAIkhl
bGxvIiB9LCB7IGl0ZW1zWzBdLnRva2Vuc1sxXS5pZGVudGlmaWVyLCBAIldvcmxkIiB9IH0pLmF1
dG9yZWxlYXNlKCksCisgICAgICAgIGNyZWF0ZUl0ZW0oaXRlbXNbMV0uaWRlbnRpZmllciwgeyB7
IGl0ZW1zWzFdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAIkZyb20gV2ViS2l0IiB9IH0pLmF1dG9y
ZWxlYXNlKCksCisgICAgXSk7CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX2Nv
bXBsZXRlVGV4dE1hbmlwdWxhdGlvbkZvckl0ZW1zOnJlcGxhY2VtZW50SXRlbXMuZ2V0KCkgY29t
cGxldGlvbjpeKE5TQXJyYXk8TlNFcnJvciAqPiAqZXJyb3JzKSB7CisgICAgICAgIEVYUEVDVF9F
UShlcnJvcnMsIG5pbCk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIjxwPkhl
bGxvPGI+V29ybGQ8YnI+PGJyPjxpPkZyb20gV2ViS2l0PC9pPjwvYj48L3A+IiwgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MIl0p
OworfQorCitURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvblNQ
cmVzZXJ2ZU5vZGVzQmVmb3JlUGFyYWdyYXBoUmFuZ2UpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9
IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+IgorICAgICAgICAiPGJvZHk+
IgorICAgICAgICAiPHA+PGI+PGJyPjxicj5oZWxsbzxpPndvcmxkPC9pPjwvYj5mcm9tPC9wPiIK
KyAgICAgICAgIjwvYm9keT4iXTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBf
c3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOm5pbCBjb21wbGV0aW9uOl57
CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvIGl0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBF
WFBFQ1RfRVEoaXRlbXMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vu
cy5jb3VudCwgM1VMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhlbGxvIiwgaXRlbXNbMF0udG9rZW5z
WzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJ3b3JsZCIsIGl0ZW1z
WzBdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiZnJv
bSIsIGl0ZW1zWzBdLnRva2Vuc1syXS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgYXV0byBy
ZXBsYWNlbWVudEl0ZW1zID0gcmV0YWluUHRyKEBbCisgICAgICAgIGNyZWF0ZUl0ZW0oaXRlbXNb
MF0uaWRlbnRpZmllciwgeyB7IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAIkhlbGxv
IiB9LCB7IGl0ZW1zWzBdLnRva2Vuc1sxXS5pZGVudGlmaWVyLCBAIldvcmxkIiB9LCB7IGl0ZW1z
WzBdLnRva2Vuc1syXS5pZGVudGlmaWVyLCBAIkZyb20gV2ViS2l0IiB9IH0pLmF1dG9yZWxlYXNl
KCkKKyAgICBdKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVU
ZXh0TWFuaXB1bGF0aW9uRm9ySXRlbXM6cmVwbGFjZW1lbnRJdGVtcy5nZXQoKSBjb21wbGV0aW9u
Ol4oTlNBcnJheTxOU0Vycm9yICo+ICplcnJvcnMpIHsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9y
cywgbmlsKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+PGI+PGJyPjxi
cj5IZWxsbzxpPldvcmxkPC9pPjwvYj5Gcm9tIFdlYktpdDwvcD4iLCBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7Cit9CisK
IFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgSW5zZXJ0aW5nQ29udGVudEludG9BbHJlYWR5TWFuaXB1
bGF0ZWRDb250ZW50RG9lc05vdENyZWF0ZVRleHRNYW5pcHVsYXRpb25JdGVtKQogewogICAgIGF1
dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBp
bml0XSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400767</attachid>
            <date>2020-06-01 16:28:03 -0700</date>
            <delta_ts>2020-06-01 16:54:39 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-212548-20200601162802.patch</filename>
            <type>text/plain</type>
            <size>48295</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMzk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjBlYTE1ZWYwZTZmYTAz
MmI2OThmYjU0ZWQ2OTZkM2I4YWFlYWY0YS4uM2Y4ZDc4MTRiZmUwYWEwMjUxMDY3NjE1NDFkNzY5
MGJmMjcyNjc0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIwLTA2LTAxICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyIHNob3VsZCBwdXQgb25lIE5vZGUgaW4gb25seSBvbmUgcGFyYWdyYXBoCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI1NDgKKworICAg
ICAgICBSZXZpZXdlZCBieSBXZW5zb24gSHNpZWguCisKKyAgICAgICAgVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIgbWFpbmx5IHVzZXMgbGluZSBicmVhayBhcyBkZWxpbWl0ZXIgdG8gc3BsaXQg
cGFyYWdyYXBocy4gSW4gb3VyIGN1cnJlbnQgCisgICAgICAgIGltcGxlbWVudGF0aW9uLCBpZiB0
ZXh0IG9mIGEgTm9kZSBoYXMgbGluZSBicmVhaywgdGhlIHBhcnQgYmVmb3JlIHRoZSBsaW5lIGJy
ZWFrIGlzIGluIG9uZSBwYXJhZ3JhcGggYW5kIHRoZQorICAgICAgICBwYXJ0IGFmdGVyIHRoZSBs
aW5lIGJyZWFrIGlzIGluIGFub3RoZXIgcGFyYWdyYXBoLCB3aGljaCBtZWFucyB0aGUgTm9kZSBp
cyBpbiB0aGUgcmFuZ2VzIG9mIHR3byBwYXJhZ3JhcGhzLgorICAgICAgICBJbiB0aGlzIGNhc2Us
IHdoZW4gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgbWFuaXB1bGF0ZXMgdGhlIGZpcnN0IHBh
cmFncmFwaCwgaXQgcmVwbGFjZXMgYWxsIHRoZSBOb2RlcyBpbiB0aGUgCisgICAgICAgIHJhbmdl
IG9mIGZpcnN0IHBhcmFncmFwaCB3aXRoIG5ldyBOb2Rlcy4gVGhlbiB3aGVuIGl0IG1hbmlwdWxh
dGVzIHRoZSBzZWNvbmQgcGFyYWdyYXBoLCBpZiB3aWxsIGZpbmQgTm9kZSBpbiB0aGUKKyAgICAg
ICAgcmFuZ2Ugb2Ygc2Vjb25kIHBhcmFncmFwaCBkb2VzIG5vdCBleGlzdCBhbmQgZmFpbCAoYmVj
YXVzZSB0aGUgTm9kZSBpcyByZW1vdmVkIHdoZW4gaGFuZGxpbmcgdGhlIGZpcnN0IAorICAgICAg
ICBwYXJhZ3JhcGguKS4gQWxzbywgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgY3VycmVudGx5
IGRvZXMgbm90IHByZXNlcnZlIGxpbmUgYnJlYWtzIGluIHRleHQsIHdoaWNoIGNhbiBiZSBhbgor
ICAgICAgICBpc3N1ZSBpZiB0aGVzZSBsaW5lIGJyZWFrcyBhcmUgdmlzaWJsZS4gCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBtYWtlcyB0aGUgUGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yIGl0ZXJhdGUg
b3ZlciBOb2RlcyBpbnN0ZWFkIG9mIHRleHQsIHNvIGEgTm9kZSBjYW4gb25seSBiZSBpbiB0aGUg
CisgICAgICAgIHJhbmdlIG9mIG9uZSBwYXJhZ3JhcGguIFRvIGRvIHRoaXMsIGl0IG1ha2VzIGxp
bmUgYnJlYWsgYW5kIHNwYWNlcyBhcm91bmQgaXQgYXMgYSBzcGVjaWFsIGV4Y2x1ZGVkIHRva2Vu
LgorICAgICAgICBIZXJlIGFyZSB0aGUgcnVsZXMgZm9yIHNwbGl0dGluZyBwYXJhZ3JhcGhzIGJ5
IGxpbmUgYnJlYWsgbm93OgorICAgICAgICAxLiBJZiB0aGUgc3BlY2lhbCB0b2tlbiBpcyB0aGUg
Zmlyc3QgdG9rZW4gaW4gYSBOb2RlLCB0ZXh0IGluIE5vZGVzIGJlZm9yZSB0aGUgTm9kZSB3aWxs
IG1ha2UgYSBwYXJhZ3JhcGguIAorICAgICAgICAyLiBJZiB0aGUgc3BlY2lhbCB0b2tlbiBpcyB0
aGUgbGFzdCB0b2tlbiBpbiBhIE5vZGUsIHRleHQgaW4gTm9kZXMgYmVmb3JlIHRoZSBOb2RlIGFu
ZCBpbiB0aGUgTm9kZSB3aWxsIG1ha2UgYSAKKyAgICAgICAgcGFyYWdyYXBoLgorICAgICAgICAz
LiBJZiB0aGUgc3BlY2lhbCB0b2tlbiBpbiB0aGUgbWlkZGxlIG9mIHRva2VucyBpbiBhIE5vZGUs
IHRoZW4gd2UgZG9uJ3QgbWFrZSBhIG5ldyBwYXJhZ3JhcGggdW50aWwgbmV4dCBzcGVjaWFsCisg
ICAgICAgIHRva2VuIG1lZXRzIGNvbmRpdGlvbiAxIG9yIDIuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBhbHNvIGZpeGVzIHRoZSBpc3N1ZSB0aGF0IE5vZGVzIG91dCBvZiB0aGUgcGFyYWdyYXBoIHJh
bmdlIGNhbiBiZSByZW1vdmVkIGR1ZSB0byB0aGUgcHJlb3JkZXIgTm9kZQorICAgICAgICB0cmF2
ZXJzYWwsIGJ5IGZpbmRpbmcgYW5kIGFkZGluZyB0aG9zZSBOb2RlcyBiYWNrLgorCisgICAgICAg
ICogZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3I6Om1fcGFzdEVuZE5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6UGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yOjphZHZhbmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhcmFncmFwaENvbnRlbnRJdGVyYXRvcjo6Y3VycmVudENvbnRlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yOjphdEVuZCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3I6OmFkdmFuY2VOb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhcmFncmFwaENvbnRlbnRJdGVyYXRvcjo6YWR2YW5jZUl0ZXJhdG9y
Tm9kZUFuZFVwZGF0ZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6aXNFbmNsb3NpbmdJdGVtQm91
bmRhcnlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
cjo6b2JzZXJ2ZVBhcmFncmFwaHMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6OmFkZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6OmdldFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6OnVwZGF0ZUluc2VydGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFyYWdy
YXBoQ29udGVudEl0ZXJhdG9yOjpzdGFydFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBhcmFncmFwaENvbnRlbnRJdGVyYXRvcjo6ZW5kUG9zaXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yOjptb3ZlQ3VycmVudE5v
ZGVGb3J3YXJkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zT25seUhUTUxT
cGFjZXMpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIuaDoKKwogMjAyMC0wNi0wMSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgRU5BQkxFKFRPVUNIX0FDVElPTl9SRUdJT05TKSB0byB3cmFw
IGNvZGUgdGhhdCdzIG9ubHkgcmVsZXZhbnQgZm9yIHBsYXRmb3JtcyB0aGF0IGNvbnN1bHQgdG91
Y2gtYWN0aW9uIGZvciBldmVudCBoYW5kbGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcAppbmRleCBlMGVlMWQyZGEwODkx
YjE3YmI1ZWYzZmNmYzNkNTdmNjVmZWM5NzNiLi44ZTc0NjNmMTI3Y2RmNGFkZDkwZTBlOWRhYzBl
YzM5NmQ4Zjg2MTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyLmNwcApAQCAtMTQ3LDI4ICsxNDcsMjAgQEAgcHVibGljOgog
ICAgIFBhcmFncmFwaENvbnRlbnRJdGVyYXRvcihjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0
IFBvc2l0aW9uJiBlbmQpCiAgICAgICAgIDogbV9pdGVyYXRvcih7ICptYWtlQm91bmRhcnlQb2lu
dChzdGFydCksICptYWtlQm91bmRhcnlQb2ludChlbmQpIH0sIFRleHRJdGVyYXRvcklnbm9yZXNT
dHlsZVZpc2liaWxpdHkpCiAgICAgICAgICwgbV9pdGVyYXRvck5vZGUobV9pdGVyYXRvci5hdEVu
ZCgpID8gbnVsbHB0ciA6IGNyZWF0ZUxpdmVSYW5nZShtX2l0ZXJhdG9yLnJhbmdlKCkpLT5maXJz
dE5vZGUoKSkKLSAgICAgICAgLCBtX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJsZUNvbnRl
bnQoc3RhcnQuZmlyc3ROb2RlKCkpCisgICAgICAgICwgbV9ub2RlKHN0YXJ0LmZpcnN0Tm9kZSgp
KQogICAgICAgICAsIG1fcGFzdEVuZE5vZGUoZW5kLmZpcnN0Tm9kZSgpKQogICAgIHsKKyAgICAg
ICAgaWYgKHNob3VsZEFkdmFuY2VJdGVyYXRvclBhc3RDdXJyZW50Tm9kZSgpKQorICAgICAgICAg
ICAgYWR2YW5jZUl0ZXJhdG9yTm9kZUFuZFVwZGF0ZVRleHQoKTsKICAgICB9CiAKICAgICB2b2lk
IGFkdmFuY2UoKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEFkZCBhIG5vZGUgY2FsbGJhY2sg
dG8gVGV4dEl0ZXJhdG9yIGluc3RlYWQgb2YgdHJhdmVyc2luZyB0aGUgbm9kZSB0cmVlIHR3aWNl
IGxpa2UgdGhpcy4KLSAgICAgICAgaWYgKG1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxl
Q29udGVudCAhPSBtX2l0ZXJhdG9yTm9kZSAmJiBtX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlz
aWJsZUNvbnRlbnQgIT0gbV9wYXN0RW5kTm9kZSkgewotICAgICAgICAgICAgbW92ZUN1cnJlbnRO
b2RlRm9yd2FyZCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG1faXRlcmF0b3IuYXRFbmQoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV90
ZXh0ID0gV1RGOjpudWxsb3B0OworICAgICAgICBhZHZhbmNlTm9kZSgpOwogCi0gICAgICAgIGF1
dG8gcHJldmlvdXNJdGVyYXRvck5vZGUgPSBtX2l0ZXJhdG9yTm9kZTsKLQotICAgICAgICBtX2l0
ZXJhdG9yLmFkdmFuY2UoKTsKLSAgICAgICAgbV9pdGVyYXRvck5vZGUgPSBtX2l0ZXJhdG9yLmF0
RW5kKCkgPyBudWxscHRyIDogY3JlYXRlTGl2ZVJhbmdlKG1faXRlcmF0b3IucmFuZ2UoKSktPmZp
cnN0Tm9kZSgpOwotICAgICAgICBpZiAocHJldmlvdXNJdGVyYXRvck5vZGUgIT0gbV9pdGVyYXRv
ck5vZGUpCi0gICAgICAgICAgICBtb3ZlQ3VycmVudE5vZGVGb3J3YXJkKCk7CisgICAgICAgIGlm
IChzaG91bGRBZHZhbmNlSXRlcmF0b3JQYXN0Q3VycmVudE5vZGUoKSkKKyAgICAgICAgICAgIGFk
dmFuY2VJdGVyYXRvck5vZGVBbmRVcGRhdGVUZXh0KCk7CiAgICAgfQogCiAgICAgc3RydWN0IEN1
cnJlbnRDb250ZW50IHsKQEAgLTE4MCwxMSArMTcyLDcgQEAgcHVibGljOgogCiAgICAgQ3VycmVu
dENvbnRlbnQgY3VycmVudENvbnRlbnQoKQogICAgIHsKLSAgICAgICAgQ3VycmVudENvbnRlbnQg
Y29udGVudDsKLSAgICAgICAgaWYgKG1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29u
dGVudCAmJiBtX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJsZUNvbnRlbnQgIT0gbV9pdGVy
YXRvck5vZGUpCi0gICAgICAgICAgICBjb250ZW50ID0geyBtX2N1cnJlbnROb2RlRm9yRmluZGlu
Z0ludmlzaWJsZUNvbnRlbnQuY29weVJlZigpLCBTdHJpbmdWaWV3IHsgfSB9OwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjb250ZW50ID0geyBtX2l0ZXJhdG9yLm5vZGUoKSwgbV9pdGVyYXRv
ci50ZXh0KCksIHRydWUgfTsKKyAgICAgICAgQ3VycmVudENvbnRlbnQgY29udGVudCA9IHsgbV9u
b2RlLmNvcHlSZWYoKSwgbV90ZXh0ID8gbV90ZXh0LnZhbHVlKCkgOiBTdHJpbmdWaWV3IHsgfSwg
ISFtX3RleHQgfTsKICAgICAgICAgaWYgKGNvbnRlbnQubm9kZSkgewogICAgICAgICAgICAgaWYg
KGF1dG8qIHJlbmRlcmVyID0gY29udGVudC5ub2RlLT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlclJlcGxhY2VkKCkpIHsKQEAgLTE5NiwzMyArMTg0
LDM5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7CiAgICAgfQogCi0gICAgUG9z
aXRpb24gc3RhcnRQb3NpdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gY3JlYXRlTGVnYWN5
RWRpdGluZ1Bvc2l0aW9uKG1faXRlcmF0b3IucmFuZ2UoKS5zdGFydCk7Ci0gICAgfQorICAgIGJv
b2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV90ZXh0ICYmIG1faXRlcmF0b3IuYXRFbmQoKSAm
JiBtX25vZGUgPT0gbV9wYXN0RW5kTm9kZTsgfQogCi0gICAgUG9zaXRpb24gZW5kUG9zaXRpb24o
KQorcHJpdmF0ZToKKyAgICBib29sIHNob3VsZEFkdmFuY2VJdGVyYXRvclBhc3RDdXJyZW50Tm9k
ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2l0ZXJhdG9yLmF0RW5kKCkgJiYgbV9pdGVyYXRvck5vZGUg
PT0gbV9ub2RlOyB9CisKKyAgICB2b2lkIGFkdmFuY2VOb2RlKCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9pdGVyYXRvci5yYW5nZSgpLmVuZCk7
Ci0gICAgfQorICAgICAgICBpZiAobV9ub2RlID09IG1fcGFzdEVuZE5vZGUpCisgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvci5h
dEVuZCgpICYmIG1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudCA9PSBtX3Bh
c3RFbmROb2RlOyB9CisgICAgICAgIG1fbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm1fbm9k
ZSk7CisgICAgICAgIGlmICghbV9ub2RlKQorICAgICAgICAgICAgbV9ub2RlID0gbV9wYXN0RW5k
Tm9kZTsKKyAgICB9CiAKLXByaXZhdGU6Ci0gICAgdm9pZCBtb3ZlQ3VycmVudE5vZGVGb3J3YXJk
KCkKKyAgICB2b2lkIGFkdmFuY2VJdGVyYXRvck5vZGVBbmRVcGRhdGVUZXh0KCkKICAgICB7Ci0g
ICAgICAgIGlmIChtX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJsZUNvbnRlbnQgPT0gbV9w
YXN0RW5kTm9kZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKHNob3VsZEFk
dmFuY2VJdGVyYXRvclBhc3RDdXJyZW50Tm9kZSgpKTsKIAotICAgICAgICBtX2N1cnJlbnROb2Rl
Rm9yRmluZGluZ0ludmlzaWJsZUNvbnRlbnQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCptX2N1cnJl
bnROb2RlRm9yRmluZGluZ0ludmlzaWJsZUNvbnRlbnQpOwotICAgICAgICBpZiAoIW1fY3VycmVu
dE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudCkKLSAgICAgICAgICAgIG1fY3VycmVudE5v
ZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudCA9IG1fcGFzdEVuZE5vZGU7CisgICAgICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICAgICAgd2hpbGUgKHNob3VsZEFkdmFuY2VJ
dGVyYXRvclBhc3RDdXJyZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtX2l0ZXJhdG9yLnRleHQoKSk7CisgICAgICAgICAgICBtX2l0ZXJhdG9yLmFkdmFuY2Uo
KTsKKyAgICAgICAgICAgIG1faXRlcmF0b3JOb2RlID0gbV9pdGVyYXRvci5hdEVuZCgpID8gbnVs
bHB0ciA6IGNyZWF0ZUxpdmVSYW5nZShtX2l0ZXJhdG9yLnJhbmdlKCkpLT5maXJzdE5vZGUoKTsK
KyAgICAgICAgfQorICAgICAgICBtX3RleHQgPSB7IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSB9
OwogICAgIH0KIAogICAgIFRleHRJdGVyYXRvciBtX2l0ZXJhdG9yOwogICAgIFJlZlB0cjxOb2Rl
PiBtX2l0ZXJhdG9yTm9kZTsKLSAgICBSZWZQdHI8Tm9kZT4gbV9jdXJyZW50Tm9kZUZvckZpbmRp
bmdJbnZpc2libGVDb250ZW50OworICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CiAgICAgUmVmUHRy
PE5vZGU+IG1fcGFzdEVuZE5vZGU7CisgICAgT3B0aW9uYWw8U3RyaW5nPiBtX3RleHQ7CiB9Owog
CiBzdGF0aWMgYm9vbCBpc0F0dHJpYnV0ZUZvclRleHRNYW5pcHVsYXRpb24oY29uc3QgRWxlbWVu
dCYgZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZVRvQ2hlY2spCkBAIC0yNTMsMTYg
KzI0Nyw2IEBAIHN0YXRpYyBib29sIGNhblBlcmZvcm1UZXh0TWFuaXB1bGF0aW9uQnlSZXBsYWNp
bmdFbnRpcmVUZXh0Q29udGVudChjb25zdCBFbGVtZW50CiAgICAgcmV0dXJuIGVsZW1lbnQuaGFz
VGFnTmFtZShIVE1MTmFtZXM6OnRpdGxlVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpvcHRpb25UYWcpOwogfQogCi1zdGF0aWMgYm9vbCBjb250YWluc09ubHlIVE1MU3BhY2Vz
KFN0cmluZ1ZpZXcgdGV4dCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXgg
PCB0ZXh0Lmxlbmd0aCgpOyArK2luZGV4KSB7Ci0gICAgICAgIGlmIChpc05vdEhUTUxTcGFjZSh0
ZXh0W2luZGV4XSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyBPcHRpb25hbDxUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
cjo6TWFuaXB1bGF0aW9uVG9rZW5JbmZvPiB0b2tlbkluZm8oTm9kZSogbm9kZSkKIHsKICAgICBp
ZiAoIW5vZGUpCkBAIC0yNzgsNiArMjYyLDgzIEBAIHN0YXRpYyBPcHRpb25hbDxUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW5JbmZvPiB0b2tlbkluZm8oTm9kCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGJvb2wgaXNFbmNsb3NpbmdJdGVtQm91bmRh
cnlFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgYXV0byogcmVuZGVyZXIg
PSBlbGVtZW50LnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYXV0byByb2xlID0gW10oY29uc3QgRWxlbWVudCYgZWxlbWVudCkgLT4g
QWNjZXNzaWJpbGl0eVJvbGUgeworICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6
YXJpYVJvbGVUb1dlYkNvcmVSb2xlKGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihIVE1MTmFtZXM6OnJvbGVBdHRyKSk7CisgICAgfTsKKworICAgIGlmIChlbGVtZW50Lmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpidXR0b25UYWcpIHx8IHJvbGUoZWxlbWVudCkgPT0gQWNjZXNz
aWJpbGl0eVJvbGU6OkJ1dHRvbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoZWxl
bWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShI
VE1MTmFtZXM6OmFUYWcpKSB7CisgICAgICAgIGF1dG8gZGlzcGxheVR5cGUgPSByZW5kZXJlci0+
c3R5bGUoKS5kaXNwbGF5KCk7CisgICAgICAgIGlmIChkaXNwbGF5VHlwZSA9PSBEaXNwbGF5VHlw
ZTo6QmxvY2sgfHwgZGlzcGxheVR5cGUgPT0gRGlzcGxheVR5cGU6OklubGluZUJsb2NrKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgZm9yIChhdXRvIHBhcmVudCA9IG1ha2VS
ZWZQdHIoZWxlbWVudC5wYXJlbnRFbGVtZW50KCkpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+
cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAocGFyZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6bmF2VGFnKSB8fCByb2xlKCpwYXJlbnQpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpM
YW5kbWFya05hdmlnYXRpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1RleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbnMgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnBh
cnNlKFN0cmluZ1ZpZXcgdGV4dCwgTm9kZSogdGV4dE5vZGUpCit7CisgICAgVmVjdG9yPE1hbmlw
dWxhdGlvblRva2VuPiB0b2tlbnM7CisgICAgRXhjbHVzaW9uUnVsZU1hdGNoZXIgZXhjbHVzaW9u
UnVsZU1hdGNoZXIobV9leGNsdXNpb25SdWxlcyk7CisgICAgc2l6ZV90IHBvc2l0aW9uT2ZMYXN0
Tm9uSFRNTFNwYWNlID0gV1RGOjpub3RGb3VuZDsKKyAgICBzaXplX3Qgc3RhcnRQb3NpdGlvbk9m
Q3VycmVudFRva2VuID0gMDsKKyAgICBib29sIGNvbnRhaW5zT25seUhUTUxTcGFjZSA9IHRydWU7
CisgICAgYm9vbCBjb250YWluc0xpbmVCcmVhayA9IGZhbHNlOworICAgIGJvb2wgZmlyc3RUb2tl
bkNvbnRhaW5zTGluZUJyZWFrID0gZmFsc2U7CisgICAgYm9vbCBsYXN0VG9rZW5Db250YWluc0xp
bmVCcmVhayA9IGZhbHNlOworCisgICAgc2l6ZV90IGluZGV4ID0gMDsKKyAgICBmb3IgKDsgaW5k
ZXggPCB0ZXh0Lmxlbmd0aCgpOyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gY2hhcmFjdGVyID0g
dGV4dFtpbmRleF07CisgICAgICAgIGlmIChpc05vdEhUTUxTcGFjZShjaGFyYWN0ZXIpKSB7Cisg
ICAgICAgICAgICBjb250YWluc09ubHlIVE1MU3BhY2UgPSBmYWxzZTsKKyAgICAgICAgICAgIHBv
c2l0aW9uT2ZMYXN0Tm9uSFRNTFNwYWNlID0gaW5kZXg7CisgICAgICAgIH0gZWxzZSBpZiAoaXNI
VE1MTGluZUJyZWFrKGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIGNvbnRhaW5zTGluZUJyZWFr
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChwb3NpdGlvbk9mTGFzdE5vbkhUTUxTcGFjZSAhPSBX
VEY6Om5vdEZvdW5kICYmIHN0YXJ0UG9zaXRpb25PZkN1cnJlbnRUb2tlbiA8PSBwb3NpdGlvbk9m
TGFzdE5vbkhUTUxTcGFjZSkgeworICAgICAgICAgICAgICAgIGF1dG8gdG9rZW5TdHJpbmcgPSB0
ZXh0LnN1YnN0cmluZyhzdGFydFBvc2l0aW9uT2ZDdXJyZW50VG9rZW4sIHBvc2l0aW9uT2ZMYXN0
Tm9uSFRNTFNwYWNlICsgMSAtIHN0YXJ0UG9zaXRpb25PZkN1cnJlbnRUb2tlbikudG9TdHJpbmco
KTsKKyAgICAgICAgICAgICAgICB0b2tlbnMuYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90
b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgdG9rZW5TdHJpbmcsIHRva2VuSW5mbyh0ZXh0Tm9k
ZSksIGV4Y2x1c2lvblJ1bGVNYXRjaGVyLmlzRXhjbHVkZWQodGV4dE5vZGUpIH0pOworICAgICAg
ICAgICAgICAgIHN0YXJ0UG9zaXRpb25PZkN1cnJlbnRUb2tlbiA9IHBvc2l0aW9uT2ZMYXN0Tm9u
SFRNTFNwYWNlICsgMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKGluZGV4
IDwgdGV4dC5sZW5ndGgoKSAmJiAhaXNOb3RIVE1MU3BhY2UodGV4dFtpbmRleF0pKQorICAgICAg
ICAgICAgICAgICsraW5kZXg7CisKKyAgICAgICAgICAgIC0taW5kZXg7CisKKyAgICAgICAgICAg
IGF1dG8gbGluZUJyZWFrVG9rZW5TdHJpbmcgPSB0ZXh0LnN1YnN0cmluZyhzdGFydFBvc2l0aW9u
T2ZDdXJyZW50VG9rZW4sIGluZGV4ICsgMSAtIHN0YXJ0UG9zaXRpb25PZkN1cnJlbnRUb2tlbiku
dG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICh0b2tlbnMuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgIGZpcnN0VG9rZW5Db250YWluc0xpbmVCcmVhayA9IHRydWU7CisgICAgICAgICAgICB0
b2tlbnMuYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJh
dGUoKSwgbGluZUJyZWFrVG9rZW5TdHJpbmcsIHRva2VuSW5mbyh0ZXh0Tm9kZSksIHRydWUgfSk7
CisgICAgICAgICAgICBzdGFydFBvc2l0aW9uT2ZDdXJyZW50VG9rZW4gPSBpbmRleCArIDE7Cisg
ICAgICAgICAgICBsYXN0VG9rZW5Db250YWluc0xpbmVCcmVhayA9IHRydWU7CisKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0YXJ0UG9zaXRpb25P
ZkN1cnJlbnRUb2tlbiA8IHRleHQubGVuZ3RoKCkpIHsKKyAgICAgICAgYXV0byB0b2tlblN0cmlu
ZyA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0UG9zaXRpb25PZkN1cnJlbnRUb2tlbiwgaW5kZXggKyAx
IC0gc3RhcnRQb3NpdGlvbk9mQ3VycmVudFRva2VuKS50b1N0cmluZygpOworICAgICAgICB0b2tl
bnMuYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUo
KSwgdG9rZW5TdHJpbmcsIHRva2VuSW5mbyh0ZXh0Tm9kZSksIGV4Y2x1c2lvblJ1bGVNYXRjaGVy
LmlzRXhjbHVkZWQodGV4dE5vZGUpIH0pOworICAgICAgICBsYXN0VG9rZW5Db250YWluc0xpbmVC
cmVhayA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB7IFdURk1vdmUodG9rZW5zKSwgY29u
dGFpbnNPbmx5SFRNTFNwYWNlLCBjb250YWluc0xpbmVCcmVhaywgZmlyc3RUb2tlbkNvbnRhaW5z
TGluZUJyZWFrLCBsYXN0VG9rZW5Db250YWluc0xpbmVCcmVhayB9OworfQorCiB2b2lkIFRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyhjb25zdCBQb3NpdGlvbiYg
c3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7CiAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8
IGVuZC5pc051bGwoKSkKQEAgLTI4NiwxMjYgKzM0Nyw3NCBAQCB2b2lkIFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyhjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0CiAgICAgYXV0byBkb2N1bWVudCA9IG1ha2VSZWZQdHIoc3RhcnQuZG9jdW1lbnQoKSk7CiAg
ICAgQVNTRVJUKGRvY3VtZW50KTsKICAgICBQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3IgaXRlcmF0
b3IgeyBzdGFydCwgZW5kIH07Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydCA9IHN0
YXJ0OwotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kID0gZW5kOworICAgIC8vIFRleHRJ
dGVyYXRvcidzIGNvbnN0cnVjdG9yIG1heSBoYXZlIHVwZGF0ZWQgdGhlIGxheW91dCBhbmQgZXhl
Y3V0ZWQgYXJiaXRyYXJ5IHNjcmlwdHMuCiAgICAgaWYgKGRvY3VtZW50ICE9IHN0YXJ0LmRvY3Vt
ZW50KCkgfHwgZG9jdW1lbnQgIT0gZW5kLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsgLy8g
VGV4dEl0ZXJhdG9yJ3MgY29uc3RydWN0b3IgbWF5IGhhdmUgdXBkYXRlZCB0aGUgbGF5b3V0IGFu
ZCBleGVjdXRlZCBhcmJpdHJhcnkgc2NyaXB0cy4KKyAgICAgICAgcmV0dXJuOwogCi0gICAgRXhj
bHVzaW9uUnVsZU1hdGNoZXIgZXhjbHVzaW9uUnVsZU1hdGNoZXIobV9leGNsdXNpb25SdWxlcyk7
CiAgICAgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGg7
CiAgICAgUG9zaXRpb24gc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGg7CiAgICAgUG9zaXRpb24gZW5k
T2ZDdXJyZW50UGFyYWdyYXBoOwogICAgIFJlZlB0cjxFbGVtZW50PiBlbmNsb3NpbmdJdGVtQm91
bmRhcnlFbGVtZW50OwogCi0gICAgYXV0byBpc0VuY2xvc2luZ0l0ZW1Cb3VuZGFyeUVsZW1lbnQg
PSBbXShjb25zdCBFbGVtZW50JiBlbGVtZW50KSB7Ci0gICAgICAgIGF1dG8qIHJlbmRlcmVyID0g
ZWxlbWVudC5yZW5kZXJlcigpOwotICAgICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGF1dG8gcm9sZSA9IFtdKGNvbnN0IEVsZW1lbnQmIGVs
ZW1lbnQpIC0+IEFjY2Vzc2liaWxpdHlSb2xlIHsKLSAgICAgICAgICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjphcmlhUm9sZVRvV2ViQ29yZVJvbGUoZWxlbWVudC5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6cm9sZUF0dHIpKTsKLSAgICAgICAgfTsKLQot
ICAgICAgICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnV0dG9uVGFnKSB8fCBy
b2xlKGVsZW1lbnQpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpCdXR0b24pCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
bGlUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmFUYWcpKSB7Ci0gICAgICAg
ICAgICBhdXRvIGRpc3BsYXlUeXBlID0gcmVuZGVyZXItPnN0eWxlKCkuZGlzcGxheSgpOwotICAg
ICAgICAgICAgaWYgKGRpc3BsYXlUeXBlID09IERpc3BsYXlUeXBlOjpCbG9jayB8fCBkaXNwbGF5
VHlwZSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lQmxvY2spCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZm9yICg7ICFpdGVyYXRvci5hdEVuZCgpOyBpdGVyYXRvci5hZHZhbmNlKCkp
IHsKKyAgICAgICAgYXV0byBjb250ZW50ID0gaXRlcmF0b3IuY3VycmVudENvbnRlbnQoKTsKKyAg
ICAgICAgYXV0byogY29udGVudE5vZGUgPSBjb250ZW50Lm5vZGUuZ2V0KCk7CisgICAgICAgIEFT
U0VSVChjb250ZW50Tm9kZSk7CiAKLSAgICAgICAgICAgIGZvciAoYXV0byBwYXJlbnQgPSBtYWtl
UmVmUHRyKGVsZW1lbnQucGFyZW50RWxlbWVudCgpKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQt
PnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGlmIChwYXJlbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpuYXZUYWcpIHx8IHJvbGUoKnBhcmVudCkgPT0gQWNjZXNzaWJpbGl0eVJv
bGU6OkxhbmRtYXJrTmF2aWdhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChlbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50
ICYmICFlbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50LT5jb250YWlucyhjb250ZW50Tm9kZSkp
IHsKKyAgICAgICAgICAgIGlmICghdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgc3RhcnRPZkN1
cnJlbnRQYXJhZ3JhcGgsIGVuZE9mQ3VycmVudFBhcmFncmFwaCwgbnVsbHB0ciwgbnVsbFFOYW1l
KCksIHN0ZDo6ZXhjaGFuZ2UodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLCB7IH0pIH0pOworICAg
ICAgICAgICAgZW5jbG9zaW5nSXRlbUJvdW5kYXJ5RWxlbWVudCA9IG51bGxwdHI7CiAgICAgICAg
IH0KIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLQotICAgIGZvciAoOyAhaXRlcmF0
b3IuYXRFbmQoKTsgaXRlcmF0b3IuYWR2YW5jZSgpKSB7Ci0gICAgICAgIGF1dG8gY29udGVudCA9
IGl0ZXJhdG9yLmN1cnJlbnRDb250ZW50KCk7Ci0gICAgICAgIGlmIChjb250ZW50Lm5vZGUpIHsK
LSAgICAgICAgICAgIGlmIChlbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50ICYmICFlbmNsb3Np
bmdJdGVtQm91bmRhcnlFbGVtZW50LT5jb250YWlucyhjb250ZW50Lm5vZGUuZ2V0KCkpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCF0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguaXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgc3RhcnRP
ZkN1cnJlbnRQYXJhZ3JhcGgsIGVuZE9mQ3VycmVudFBhcmFncmFwaCwgbnVsbHB0ciwgbnVsbFFO
YW1lKCksIHN0ZDo6ZXhjaGFuZ2UodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLCB7IH0pIH0pOwot
ICAgICAgICAgICAgICAgIGVuY2xvc2luZ0l0ZW1Cb3VuZGFyeUVsZW1lbnQgPSBudWxscHRyOwot
ICAgICAgICAgICAgfQorICAgICAgICBpZiAoUmVmUHRyPEVsZW1lbnQ+IGN1cnJlbnRFbGVtZW50
QW5jZXN0b3IgPSBpczxFbGVtZW50PigqY29udGVudE5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4o
Y29udGVudE5vZGUpIDogY29udGVudE5vZGUtPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKSkg
eworICAgICAgICAgICAgLy8gV2UgY2FuIGV4aXQgZWFybHkgaGVyZSBiZWNhdXNlIHNjaGVkdWxl
T2JzZXJ2YXRpb25VcGRhdGUgY2FsbHMgdGhpcyBmdW5jdGlvbiBvbiBlYWNoIHBhcmFncmFwaCBz
ZXBhcmF0ZWx5LgorICAgICAgICAgICAgaWYgKGlzSW5NYW5pcHVsYXRlZEVsZW1lbnQoKmN1cnJl
bnRFbGVtZW50QW5jZXN0b3IpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEVsZW1lbnQ+IGN1cnJlbnRFbGVtZW50QW5jZXN0b3Ig
PSBpczxFbGVtZW50PigqY29udGVudC5ub2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KGNvbnRlbnQu
bm9kZS5nZXQoKSkgOiBjb250ZW50Lm5vZGUtPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKSkg
ewotICAgICAgICAgICAgICAgIGlmIChpc0luTWFuaXB1bGF0ZWRFbGVtZW50KCpjdXJyZW50RWxl
bWVudEFuY2VzdG9yKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBXZSBjYW4gZXhp
dCBlYXJseSBoZXJlIGJlY2F1c2Ugc2NoZWR1bGVPYnNlcnZhcnRpb25VcGRhdGUgY2FsbHMgdGhp
cyBmdW5jdGlvbiBvbiBlYWNoIHBhcmFncmFwaCBzZXBhcmF0ZWx5LgotICAgICAgICAgICAgfQor
ICAgICAgICBpZiAoaXM8RWxlbWVudD4oKmNvbnRlbnROb2RlKSkgeworICAgICAgICAgICAgYXV0
byYgY3VycmVudEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqY29udGVudE5vZGUpOworICAg
ICAgICAgICAgaWYgKCFjb250ZW50LmlzVGV4dENvbnRlbnQgJiYgY2FuUGVyZm9ybVRleHRNYW5p
cHVsYXRpb25CeVJlcGxhY2luZ0VudGlyZVRleHRDb250ZW50KGN1cnJlbnRFbGVtZW50KSkKKyAg
ICAgICAgICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgUG9zaXRpb24oKSwg
UG9zaXRpb24oKSwgbWFrZVdlYWtQdHIoY3VycmVudEVsZW1lbnQpLCBudWxsUU5hbWUoKSwgeyBN
YW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIGN1cnJlbnRF
bGVtZW50LnRleHRDb250ZW50KCksIHRva2VuSW5mbygmY3VycmVudEVsZW1lbnQpIH0gfSB9KTsK
IAotICAgICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpjb250ZW50Lm5vZGUpKSB7Ci0gICAgICAg
ICAgICAgICAgYXV0byYgY3VycmVudEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqY29udGVu
dC5ub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnQuaXNUZXh0Q29udGVudCAmJiBj
YW5QZXJmb3JtVGV4dE1hbmlwdWxhdGlvbkJ5UmVwbGFjaW5nRW50aXJlVGV4dENvbnRlbnQoY3Vy
cmVudEVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZEl0ZW0oTWFuaXB1bGF0aW9u
SXRlbURhdGEgeyBQb3NpdGlvbigpLCBQb3NpdGlvbigpLCBtYWtlV2Vha1B0cihjdXJyZW50RWxl
bWVudCksIG51bGxRTmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgeyBNYW5pcHVsYXRp
b25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIGN1cnJlbnRFbGVtZW50LnRl
eHRDb250ZW50KCksIHRva2VuSW5mbygmY3VycmVudEVsZW1lbnQpIH0gfSB9KTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50Lmhhc0F0dHJpYnV0
ZXMoKSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGN1cnJl
bnRFbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNBdHRyaWJ1dGVGb3JUZXh0TWFuaXB1bGF0aW9uKGN1cnJlbnRFbGVtZW50LCBhdHRy
aWJ1dGUubmFtZSgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW0oTWFu
aXB1bGF0aW9uSXRlbURhdGEgeyBQb3NpdGlvbigpLCBQb3NpdGlvbigpLCBtYWtlV2Vha1B0cihj
dXJyZW50RWxlbWVudCksIGF0dHJpYnV0ZS5uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsgTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5lcmF0
ZSgpLCBhdHRyaWJ1dGUudmFsdWUoKSwgdG9rZW5JbmZvKCZjdXJyZW50RWxlbWVudCkgfSB9IH0p
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQuaGFzQXR0cmlidXRlcygpKSB7CisgICAgICAgICAg
ICAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUgOiBjdXJyZW50RWxlbWVudC5hdHRyaWJ1dGVzSXRl
cmF0b3IoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNBdHRyaWJ1dGVGb3JUZXh0TWFu
aXB1bGF0aW9uKGN1cnJlbnRFbGVtZW50LCBhdHRyaWJ1dGUubmFtZSgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZEl0ZW0oTWFuaXB1bGF0aW9uSXRlbURhdGEgeyBQb3NpdGlvbigpLCBQ
b3NpdGlvbigpLCBtYWtlV2Vha1B0cihjdXJyZW50RWxlbWVudCksIGF0dHJpYnV0ZS5uYW1lKCks
IHsgTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5lcmF0ZSgpLCBhdHRy
aWJ1dGUudmFsdWUoKSwgdG9rZW5JbmZvKCZjdXJyZW50RWxlbWVudCkgfSB9IH0pOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWVuY2xvc2luZ0l0ZW1Cb3VuZGFyeUVs
ZW1lbnQgJiYgaXNFbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50KGN1cnJlbnRFbGVtZW50KSkK
LSAgICAgICAgICAgICAgICAgICAgZW5jbG9zaW5nSXRlbUJvdW5kYXJ5RWxlbWVudCA9ICZjdXJy
ZW50RWxlbWVudDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZW5jbG9zaW5nSXRl
bUJvdW5kYXJ5RWxlbWVudCAmJiBpc0VuY2xvc2luZ0l0ZW1Cb3VuZGFyeUVsZW1lbnQoY3VycmVu
dEVsZW1lbnQpKQorICAgICAgICAgICAgICAgIGVuY2xvc2luZ0l0ZW1Cb3VuZGFyeUVsZW1lbnQg
PSAmY3VycmVudEVsZW1lbnQ7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY29udGVudC5pc1Jl
cGxhY2VkQ29udGVudCkgewotICAgICAgICAgICAgaWYgKHRva2Vuc0luQ3VycmVudFBhcmFncmFw
aC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGF1
dG8gY3VycmVudEVuZE9mQ3VycmVudFBhcmFncmFwaCA9IHBvc2l0aW9uQWZ0ZXJOb2RlKGNvbnRl
bnQubm9kZS5nZXQoKSk7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGF0IHRoZSBzYW1lIE5vZGUg
YXMgbGFzdCB0b2tlbiwgc28gaXQgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBjdXJyZW50IHJhbmdl
LgotICAgICAgICAgICAgaWYgKCFpczxUZXh0Pihjb250ZW50Lm5vZGUpICYmIGN1cnJlbnRFbmRP
ZkN1cnJlbnRQYXJhZ3JhcGguZXF1YWxzKGVuZE9mQ3VycmVudFBhcmFncmFwaCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9
IGN1cnJlbnRFbmRPZkN1cnJlbnRQYXJhZ3JhcGg7Ci0gICAgICAgICAgICB0b2tlbnNJbkN1cnJl
bnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIu
Z2VuZXJhdGUoKSwgIltdIiwgdG9rZW5JbmZvKGNvbnRlbnQubm9kZS5nZXQoKSksIHRydWUgfSk7
Ci0KKyAgICAgICAgICAgIGlmICghdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5hcHBlbmQoTWFuaXB1
bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5lcmF0ZSgpLCAiW10iLCB0b2tlbklu
Zm8oY29udGVudC5ub2RlLmdldCgpKSwgdHJ1ZSB9KTsKKyAgICAgICAgICAgICAgICBlbmRPZkN1
cnJlbnRQYXJhZ3JhcGggPSBwb3NpdGlvbkFmdGVyTm9kZShjb250ZW50Tm9kZSk7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICgh
Y29udGVudC5pc1RleHRDb250ZW50KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
c2l6ZV90IHN0YXJ0T2ZDdXJyZW50TGluZSA9IDA7Ci0gICAgICAgIHNpemVfdCBvZmZzZXRPZk5l
eHROZXdMaW5lID0gMDsKLSAgICAgICAgU3RyaW5nVmlldyBjdXJyZW50VGV4dCA9IGNvbnRlbnQu
dGV4dDsKLSAgICAgICAgd2hpbGUgKChvZmZzZXRPZk5leHROZXdMaW5lID0gY3VycmVudFRleHQu
ZmluZCgnXG4nLCBzdGFydE9mQ3VycmVudExpbmUpKSAhPSBub3RGb3VuZCkgewotICAgICAgICAg
ICAgaWYgKGlzPFRleHQ+KGNvbnRlbnQubm9kZSkgJiYgc3RhcnRPZkN1cnJlbnRMaW5lIDwgb2Zm
c2V0T2ZOZXh0TmV3TGluZSkgewotICAgICAgICAgICAgICAgIGF1dG8gc3RyaW5nVW50aWxFbmRP
ZkxpbmUgPSBjdXJyZW50VGV4dC5zdWJzdHJpbmcoc3RhcnRPZkN1cnJlbnRMaW5lLCBvZmZzZXRP
Zk5leHROZXdMaW5lIC0gc3RhcnRPZkN1cnJlbnRMaW5lKS50b1N0cmluZygpOwotICAgICAgICAg
ICAgICAgIGF1dG8mIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKmNvbnRlbnQubm9kZSk7Ci0g
ICAgICAgICAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gUG9zaXRpb24oJnRleHROb2Rl
LCBvZmZzZXRPZk5leHROZXdMaW5lKTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW5zSW5DdXJy
ZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkN1cnJl
bnRQYXJhZ3JhcGggPSBQb3NpdGlvbigmdGV4dE5vZGUsIHN0YXJ0T2ZDdXJyZW50TGluZSk7Ci0K
LSAgICAgICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxh
dGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgc3RyaW5nVW50aWxFbmRP
ZkxpbmUsIHRva2VuSW5mbygmdGV4dE5vZGUpLCBleGNsdXNpb25SdWxlTWF0Y2hlci5pc0V4Y2x1
ZGVkKGNvbnRlbnQubm9kZS5nZXQoKSkgfSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGF1dG8g
dG9rZW5zSW5DdXJyZW50Tm9kZSA9IHBhcnNlKGNvbnRlbnQudGV4dCwgY29udGVudE5vZGUpOwor
ICAgICAgICBpZiAoIXRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkgJiYgdG9rZW5z
SW5DdXJyZW50Tm9kZS5maXJzdFRva2VuQ29udGFpbnNMaW5lQnJlYWspCisgICAgICAgICAgICBh
ZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgsIGVu
ZE9mQ3VycmVudFBhcmFncmFwaCwgbnVsbHB0ciwgbnVsbFFOYW1lKCksIHN0ZDo6ZXhjaGFuZ2Uo
dG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLCB7IH0pIH0pOwogCi0gICAgICAgICAgICBpZiAoIXRv
a2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
aXM8SFRNTEJSRWxlbWVudD4oY29udGVudC5ub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgZW5k
T2ZDdXJyZW50UGFyYWdyYXBoID0gcG9zaXRpb25BZnRlck5vZGUoY29udGVudC5ub2RlLmdldCgp
KTsKLSAgICAgICAgICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgc3RhcnRP
ZkN1cnJlbnRQYXJhZ3JhcGgsIGVuZE9mQ3VycmVudFBhcmFncmFwaCwgbnVsbHB0ciwgbnVsbFFO
YW1lKCksIHN0ZDo6ZXhjaGFuZ2UodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLCB7IH0pIH0pOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRMaW5lID0gb2Zmc2V0T2ZO
ZXh0TmV3TGluZSArIDE7CisgICAgICAgIGlmICh0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICBpZiAodG9rZW5zSW5DdXJyZW50Tm9kZS5jb250YWluc09u
bHlIVE1MU3BhY2UpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBzdGFy
dE9mQ3VycmVudFBhcmFncmFwaCA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShjb250ZW50
Tm9kZSk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIHJlbWFpbmluZ1RleHQgPSBjdXJyZW50
VGV4dC5zdWJzdHJpbmcoc3RhcnRPZkN1cnJlbnRMaW5lKTsKLSAgICAgICAgaWYgKCFjb250YWlu
c09ubHlIVE1MU3BhY2VzKHJlbWFpbmluZ1RleHQpKSB7Ci0gICAgICAgICAgICBpZiAodG9rZW5z
SW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGlmIChzdGFy
dE9mQ3VycmVudExpbmUgJiYgaXM8VGV4dD4oY29udGVudC5ub2RlKSkKLSAgICAgICAgICAgICAg
ICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBQb3NpdGlvbigmZG93bmNhc3Q8VGV4dD4o
KmNvbnRlbnQubm9kZSksIHN0YXJ0T2ZDdXJyZW50TGluZSk7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBzdGFydE9mQ3VycmVudFBhcmFncmFwaCA9IGl0ZXJhdG9y
LnN0YXJ0UG9zaXRpb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVuZE9mQ3VycmVu
dFBhcmFncmFwaCA9IGl0ZXJhdG9yLmVuZFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICB0b2tlbnNJ
bkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50
aWZpZXIuZ2VuZXJhdGUoKSwgcmVtYWluaW5nVGV4dC50b1N0cmluZygpLCB0b2tlbkluZm8oY29u
dGVudC5ub2RlLmdldCgpKSwgZXhjbHVzaW9uUnVsZU1hdGNoZXIuaXNFeGNsdWRlZChjb250ZW50
Lm5vZGUuZ2V0KCkpIH0pOworICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5k
VmVjdG9yKHRva2Vuc0luQ3VycmVudE5vZGUudG9rZW5zKTsKKyAgICAgICAgZW5kT2ZDdXJyZW50
UGFyYWdyYXBoID0gcG9zaXRpb25BZnRlck5vZGUoY29udGVudE5vZGUpOworCisgICAgICAgIGlm
ICghdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSAmJiB0b2tlbnNJbkN1cnJlbnRO
b2RlLmxhc3RUb2tlbkNvbnRhaW5zTGluZUJyZWFrKSB7CisgICAgICAgICAgICBBU1NFUlQoIXRv
a2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpOworICAgICAgICAgICAgYWRkSXRlbShN
YW5pcHVsYXRpb25JdGVtRGF0YSB7IHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLCBlbmRPZkN1cnJl
bnRQYXJhZ3JhcGgsIG51bGxwdHIsIG51bGxRTmFtZSgpLCBzdGQ6OmV4Y2hhbmdlKHRva2Vuc0lu
Q3VycmVudFBhcmFncmFwaCwgeyB9KSB9KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDg5LDYg
KzQ5OCw3IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmFkZEl0ZW0oTWFuaXB1
bGF0aW9uSXRlbURhdGEmJiBpdGVtRGF0YSkKICAgICBjb25zdCB1bnNpZ25lZCBpdGVtQ2FsbGJh
Y2tCYXRjaGluZ1NpemUgPSAxMjg7CiAKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CisgICAgQVNT
RVJUKCFpdGVtRGF0YS50b2tlbnMuaXNFbXB0eSgpKTsKICAgICBhdXRvIG5ld0lEID0gbV9pdGVt
SWRlbnRpZmllci5nZW5lcmF0ZSgpOwogICAgIG1fcGVuZGluZ0l0ZW1zRm9yQ2FsbGJhY2suYXBw
ZW5kKE1hbmlwdWxhdGlvbkl0ZW0gewogICAgICAgICBuZXdJRCwKQEAgLTU0NiwxOSArNTU2LDQ4
IEBAIHN0cnVjdCBSZXBsYWNlbWVudERhdGEgewogICAgIFN0cmluZyBuZXdEYXRhOwogfTsKIAot
c3RydWN0IE5vZGVJbnNlcnRpb24gewotICAgIFJlZlB0cjxOb2RlPiBwYXJlbnRJZkRpZmZlcmVu
dEZyb21Db21tb25BbmNlc3RvcjsKLSAgICBSZWY8Tm9kZT4gY2hpbGQ7Ci19OworVmVjdG9yPFJl
ZjxOb2RlPj4gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmdldFBhdGgoTm9kZSogYW5jZXN0
b3IsIE5vZGUqIG5vZGUpCit7CisgICAgVmVjdG9yPFJlZjxOb2RlPj4gcGF0aDsKKyAgICBSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gY29udGFpbmVyTm9kZSA9IGlzPENvbnRhaW5lck5vZGU+KCpub2Rl
KSA/ICZkb3duY2FzdDxDb250YWluZXJOb2RlPigqbm9kZSkgOiBub2RlLT5wYXJlbnROb2RlKCk7
CisgICAgZm9yICg7IGNvbnRhaW5lck5vZGUgJiYgY29udGFpbmVyTm9kZSAhPSBhbmNlc3Rvcjsg
Y29udGFpbmVyTm9kZSA9IGNvbnRhaW5lck5vZGUtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgcGF0
aC5hcHBlbmQoKmNvbnRhaW5lck5vZGUpOworICAgIHBhdGgucmV2ZXJzZSgpOworICAgIHJldHVy
biBwYXRoOworfQorCit2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjp1cGRhdGVJbnNl
cnRpb25zKFZlY3RvcjxOb2RlRW50cnk+JiBsYXN0VG9wRG93blBhdGgsIGNvbnN0IFZlY3RvcjxS
ZWY8Tm9kZT4+JiBjdXJyZW50VG9wRG93blBhdGgsIE5vZGUqIGN1cnJlbnROb2RlLCBIYXNoU2V0
PFJlZjxOb2RlPj4mIGluc2VydGVkTm9kZXMsIFZlY3RvcjxOb2RlSW5zZXJ0aW9uPiYgaW5zZXJ0
aW9ucykKK3sKKyAgICBzaXplX3QgaSA9MDsKKyAgICB3aGlsZSAoaSA8IGxhc3RUb3BEb3duUGF0
aC5zaXplKCkgJiYgaSA8IGN1cnJlbnRUb3BEb3duUGF0aC5zaXplKCkgJiYgbGFzdFRvcERvd25Q
YXRoW2ldLmZpcnN0LnB0cigpID09IGN1cnJlbnRUb3BEb3duUGF0aFtpXS5wdHIoKSkKKyAgICAg
ICAgKytpOworCisgICAgaWYgKGkgIT0gbGFzdFRvcERvd25QYXRoLnNpemUoKSB8fCBpICE9IGN1
cnJlbnRUb3BEb3duUGF0aC5zaXplKCkpIHsKKyAgICAgICAgaWYgKGkgPCBsYXN0VG9wRG93blBh
dGguc2l6ZSgpKQorICAgICAgICAgICAgbGFzdFRvcERvd25QYXRoLnNocmluayhpKTsKKworICAg
ICAgICBmb3IgKDtpIDwgY3VycmVudFRvcERvd25QYXRoLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBSZWY8Tm9kZT4gbm9kZSA9IGN1cnJlbnRUb3BEb3duUGF0aFtpXTsKKyAgICAgICAgICAg
IGlmICghaW5zZXJ0ZWROb2Rlcy5hZGQobm9kZS5jb3B5UmVmKCkpLmlzTmV3RW50cnkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIGNsb25lZE5vZGUgPSBub2RlLT5jbG9uZU5vZGVJbnRlcm5hbChu
b2RlLT5kb2N1bWVudCgpLCBOb2RlOjpDbG9uaW5nT3BlcmF0aW9uOjpPbmx5U2VsZik7CisgICAg
ICAgICAgICAgICAgaWYgKGF1dG8qIGRhdGEgPSBub2RlLT5ldmVudFRhcmdldERhdGEoKSkKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YS0+ZXZlbnRMaXN0ZW5lck1hcC5jb3B5RXZlbnRMaXN0ZW5l
cnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KGNsb25lZE5vZGUucHRyKCkpOworICAgICAg
ICAgICAgICAgIG5vZGUgPSBXVEZNb3ZlKGNsb25lZE5vZGUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaW5zZXJ0aW9ucy5hcHBlbmQoTm9kZUluc2VydGlvbiB7IGxhc3RUb3BEb3duUGF0
aC5zaXplKCkgPyBsYXN0VG9wRG93blBhdGgubGFzdCgpLnNlY29uZC5wdHIoKSA6IG51bGxwdHIs
IG5vZGUuY29weVJlZigpIH0pOworICAgICAgICAgICAgbGFzdFRvcERvd25QYXRoLmFwcGVuZCh7
IGN1cnJlbnRUb3BEb3duUGF0aFtpXS5jb3B5UmVmKCksIFdURk1vdmUobm9kZSkgfSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoY3VycmVudE5vZGUpCisgICAgICAgIGluc2VydGlvbnMu
YXBwZW5kKE5vZGVJbnNlcnRpb24geyBsYXN0VG9wRG93blBhdGguc2l6ZSgpID8gbGFzdFRvcERv
d25QYXRoLmxhc3QoKS5zZWNvbmQucHRyKCkgOiBudWxscHRyLCAqY3VycmVudE5vZGUgfSk7Cit9
CiAKIGF1dG8gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UoY29uc3QgTWFuaXB1
bGF0aW9uSXRlbURhdGEmIGl0ZW0sIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mIHJl
cGxhY2VtZW50VG9rZW5zKSAtPiBPcHRpb25hbDxNYW5pcHVsYXRpb25GYWlsdXJlVHlwZT4KIHsK
ICAgICBpZiAoaXRlbS5zdGFydC5pc09ycGhhbigpIHx8IGl0ZW0uZW5kLmlzT3JwaGFuKCkpCiAg
ICAgICAgIHJldHVybiBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTo6Q29udGVudENoYW5nZWQ7CiAK
LSAgICBzaXplX3QgY3VycmVudFRva2VuSW5kZXggPSAwOwotICAgIEhhc2hNYXA8VG9rZW5JZGVu
dGlmaWVyLCBUb2tlbkV4Y2hhbmdlRGF0YT4gdG9rZW5FeGNoYW5nZU1hcDsKLQogICAgIGlmIChp
dGVtLnN0YXJ0LmlzTnVsbCgpIHx8IGl0ZW0uZW5kLmlzTnVsbCgpKSB7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGl0ZW0udG9rZW5zLnNpemUoKSA9PSAxKTsKICAgICAgICAgYXV0byBlbGVtZW50
ID0gbWFrZVJlZlB0cihpdGVtLmVsZW1lbnQuZ2V0KCkpOwpAQCAtNTgyLDEyMyArNjIxLDExNCBA
QCBhdXRvIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpyZXBsYWNlKGNvbnN0IE1hbmlwdWxh
dGlvbkl0ZW1EYXRhJiBpdGVtLCBjb25zdAogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgIH0KIAorICAgIHNpemVfdCBjdXJyZW50VG9rZW5JbmRleCA9IDA7CisgICAgSGFzaE1hcDxU
b2tlbklkZW50aWZpZXIsIFRva2VuRXhjaGFuZ2VEYXRhPiB0b2tlbkV4Y2hhbmdlTWFwOwogICAg
IFJlZlB0cjxOb2RlPiBjb21tb25BbmNlc3RvcjsKICAgICBSZWZQdHI8Tm9kZT4gZmlyc3RDb250
ZW50Tm9kZTsKLSAgICBQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3IgaXRlcmF0b3IgeyBpdGVtLnN0
YXJ0LCBpdGVtLmVuZCB9OwotICAgIEhhc2hTZXQ8UmVmPE5vZGU+PiBleGNsdWRlZE5vZGVzOwor
ICAgIFJlZlB0cjxOb2RlPiBsYXN0Q2hpbGRPZkNvbW1vbkFuY2VzdG9ySW5SYW5nZTsKICAgICBI
YXNoU2V0PFJlZjxOb2RlPj4gbm9kZXNUb1JlbW92ZTsKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZVRv
SW5zZXJ0QmFja0F0RW5kOworICAgIFBhcmFncmFwaENvbnRlbnRJdGVyYXRvciBpdGVyYXRvciB7
IGl0ZW0uc3RhcnQsIGl0ZW0uZW5kIH07CiAgICAgZm9yICg7ICFpdGVyYXRvci5hdEVuZCgpOyBp
dGVyYXRvci5hZHZhbmNlKCkpIHsKICAgICAgICAgYXV0byBjb250ZW50ID0gaXRlcmF0b3IuY3Vy
cmVudENvbnRlbnQoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250ZW50Lm5vZGUpCi0gICAg
ICAgICAgICBub2Rlc1RvUmVtb3ZlLmFkZCgqY29udGVudC5ub2RlKTsKKyAgICAgICAgQVNTRVJU
KGNvbnRlbnQubm9kZSk7CisKKyAgICAgICAgbGFzdENoaWxkT2ZDb21tb25BbmNlc3RvckluUmFu
Z2UgPSBjb250ZW50Lm5vZGU7CisgICAgICAgIG5vZGVzVG9SZW1vdmUuYWRkKCpjb250ZW50Lm5v
ZGUpOwogCiAgICAgICAgIGlmICghY29udGVudC5pc1JlcGxhY2VkQ29udGVudCAmJiAhY29udGVu
dC5pc1RleHRDb250ZW50KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGN1
cnJlbnRUb2tlbkluZGV4ID49IGl0ZW0udG9rZW5zLnNpemUoKSkgewotICAgICAgICAgICAgaWYg
KGNvbnRlbnQubm9kZSAmJiAhbm9kZVRvSW5zZXJ0QmFja0F0RW5kICYmIGNvbnRlbnQuaXNUZXh0
Q29udGVudCAmJiBjb250ZW50LnRleHQgPT0gIlxuIikgeyAvLyBicgotICAgICAgICAgICAgICAg
IG5vZGVUb0luc2VydEJhY2tBdEVuZCA9IGNvbnRlbnQubm9kZTsKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBNYW5pcHVsYXRpb25G
YWlsdXJlVHlwZTo6Q29udGVudENoYW5nZWQ7Ci0gICAgICAgIH0KKyAgICAgICAgVmVjdG9yPE1h
bmlwdWxhdGlvblRva2VuPiB0b2tlbnNJbkN1cnJlbnROb2RlOworICAgICAgICBpZiAoY29udGVu
dC5pc1JlcGxhY2VkQ29udGVudCkKKyAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudE5vZGUuYXBw
ZW5kKGl0ZW0udG9rZW5zW2N1cnJlbnRUb2tlbkluZGV4XSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHRva2Vuc0luQ3VycmVudE5vZGUgPSBwYXJzZShjb250ZW50LnRleHQsIGNvbnRlbnQu
bm9kZS5nZXQoKSkudG9rZW5zOwogCi0gICAgICAgIGlmIChjb250ZW50LmlzVGV4dENvbnRlbnQg
JiYgY29udGFpbnNPbmx5SFRNTFNwYWNlcyhjb250ZW50LnRleHQpKSB7Ci0gICAgICAgICAgICAv
LyA8YnI+IHNob3VsZCBub3QgZXhpc3QgaW4gdGhlIG1pZGRsZSBvZiBhIHBhcmFncmFwaC4KLSAg
ICAgICAgICAgIGlmIChpczxIVE1MQlJFbGVtZW50Pihjb250ZW50Lm5vZGUpKQorICAgICAgICBi
b29sIGlzTm9kZUluY2x1ZGVkID0gV1RGOjphbnlPZih0b2tlbnNJbkN1cnJlbnROb2RlLCBbXSAo
YXV0byYgdG9rZW4pIHsKKyAgICAgICAgICAgIHJldHVybiAhdG9rZW4uaXNFeGNsdWRlZDsKKyAg
ICAgICAgfSk7CisgICAgICAgIGZvciAoYXV0byYgdG9rZW4gOiB0b2tlbnNJbkN1cnJlbnROb2Rl
KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudFRva2VuSW5kZXggPiBpdGVtLnRva2Vucy5zaXpl
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpDb250
ZW50Q2hhbmdlZDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CiAKLSAgICAgICAg
YXV0byYgY3VycmVudFRva2VuID0gaXRlbS50b2tlbnNbY3VycmVudFRva2VuSW5kZXhdOwotICAg
ICAgICBpZiAoIWNvbnRlbnQuaXNSZXBsYWNlZENvbnRlbnQgJiYgY29udGVudC50ZXh0ICE9IGN1
cnJlbnRUb2tlbi5jb250ZW50KQotICAgICAgICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvbkZhaWx1
cmVUeXBlOjpDb250ZW50Q2hhbmdlZDsKKyAgICAgICAgICAgIGF1dG8mIGN1cnJlbnRUb2tlbiA9
IGl0ZW0udG9rZW5zW2N1cnJlbnRUb2tlbkluZGV4KytdOworICAgICAgICAgICAgaWYgKCFjb250
ZW50LmlzUmVwbGFjZWRDb250ZW50ICYmIGN1cnJlbnRUb2tlbi5jb250ZW50ICE9IHRva2VuLmNv
bnRlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpD
b250ZW50Q2hhbmdlZDsKKworICAgICAgICAgICAgdG9rZW5FeGNoYW5nZU1hcC5zZXQoY3VycmVu
dFRva2VuLmlkZW50aWZpZXIsIFRva2VuRXhjaGFuZ2VEYXRhIHsgY29udGVudC5ub2RlLmNvcHlS
ZWYoKSwgY3VycmVudFRva2VuLmNvbnRlbnQsICFpc05vZGVJbmNsdWRlZCB9KTsKKyAgICAgICAg
fQogCi0gICAgICAgIHRva2VuRXhjaGFuZ2VNYXAuc2V0KGN1cnJlbnRUb2tlbi5pZGVudGlmaWVy
LCBUb2tlbkV4Y2hhbmdlRGF0YSB7IGNvbnRlbnQubm9kZS5jb3B5UmVmKCksIGN1cnJlbnRUb2tl
bi5jb250ZW50LCBjdXJyZW50VG9rZW4uaXNFeGNsdWRlZCB9KTsKLSAgICAgICAgKytjdXJyZW50
VG9rZW5JbmRleDsKLSAgICAgICAgCiAgICAgICAgIGlmICghZmlyc3RDb250ZW50Tm9kZSkKICAg
ICAgICAgICAgIGZpcnN0Q29udGVudE5vZGUgPSBjb250ZW50Lm5vZGU7CiAKLSAgICAgICAgLy8g
RklYTUU6IFRha2UgY2FyZSBvZiB3aGVuIGN1cnJlbnROb2RlIGlzIG51bGxwdHIuCi0gICAgICAg
IGlmIChSZWZQdHI8Tm9kZT4gcGFyZW50ID0gY29udGVudC5ub2RlID8gY29udGVudC5ub2RlLT5w
YXJlbnROb2RlKCkgOiBudWxscHRyKSB7Ci0gICAgICAgICAgICBpZiAoIWNvbW1vbkFuY2VzdG9y
KQotICAgICAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gcGFyZW50OwotICAgICAgICAgICAg
ZWxzZSBpZiAoIXBhcmVudC0+aXNEZXNjZW5kYW50T2YoY29tbW9uQW5jZXN0b3IuZ2V0KCkpKSB7
Ci0gICAgICAgICAgICAgICAgY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3Rv
cigqY29tbW9uQW5jZXN0b3IsICpwYXJlbnQpOwotICAgICAgICAgICAgICAgIEFTU0VSVChjb21t
b25BbmNlc3Rvcik7Ci0gICAgICAgICAgICB9CisgICAgICAgIGF1dG8gcGFyZW50Tm9kZSA9IGNv
bnRlbnQubm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICBpZiAoIWNvbW1vbkFuY2VzdG9yKQor
ICAgICAgICAgICAgY29tbW9uQW5jZXN0b3IgPSBwYXJlbnROb2RlOworICAgICAgICBlbHNlIGlm
ICghcGFyZW50Tm9kZS0+aXNEZXNjZW5kYW50T2YoY29tbW9uQW5jZXN0b3IuZ2V0KCkpKSB7Cisg
ICAgICAgICAgICBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKCpjb21t
b25BbmNlc3RvciwgKnBhcmVudE5vZGUpOworICAgICAgICAgICAgQVNTRVJUKGNvbW1vbkFuY2Vz
dG9yKTsKICAgICAgICAgfQogICAgIH0KIAorICAgIHdoaWxlIChsYXN0Q2hpbGRPZkNvbW1vbkFu
Y2VzdG9ySW5SYW5nZSAmJiBsYXN0Q2hpbGRPZkNvbW1vbkFuY2VzdG9ySW5SYW5nZS0+cGFyZW50
Tm9kZSgpICE9IGNvbW1vbkFuY2VzdG9yKQorICAgICAgICBsYXN0Q2hpbGRPZkNvbW1vbkFuY2Vz
dG9ySW5SYW5nZSA9IGxhc3RDaGlsZE9mQ29tbW9uQW5jZXN0b3JJblJhbmdlLT5wYXJlbnROb2Rl
KCk7CisKICAgICBmb3IgKGF1dG8gbm9kZSA9IGNvbW1vbkFuY2VzdG9yOyBub2RlOyBub2RlID0g
bm9kZS0+cGFyZW50Tm9kZSgpKQogICAgICAgICBub2Rlc1RvUmVtb3ZlLnJlbW92ZSgqbm9kZSk7
CiAKLSAgICBWZWN0b3I8UmVmPE5vZGU+PiBjdXJyZW50RWxlbWVudFN0YWNrOwogICAgIEhhc2hT
ZXQ8UmVmPE5vZGU+PiByZXVzZWRPcmlnaW5hbE5vZGVzOworICAgIFZlY3RvcjxOb2RlRW50cnk+
IGxhc3RUb3BEb3duUGF0aDsKICAgICBWZWN0b3I8Tm9kZUluc2VydGlvbj4gaW5zZXJ0aW9uczsK
LSAgICBmb3IgKGF1dG8mIG5ld1Rva2VuIDogcmVwbGFjZW1lbnRUb2tlbnMpIHsKLSAgICAgICAg
YXV0byBpdCA9IHRva2VuRXhjaGFuZ2VNYXAuZmluZChuZXdUb2tlbi5pZGVudGlmaWVyKTsKKyAg
ICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcmVwbGFjZW1lbnRUb2tlbnMuc2l6ZSgp
OyArK2luZGV4KSB7CisgICAgICAgIGF1dG8mIHJlcGxhY2VtZW50VG9rZW4gPSByZXBsYWNlbWVu
dFRva2Vuc1tpbmRleF07CisgICAgICAgIGF1dG8gaXQgPSB0b2tlbkV4Y2hhbmdlTWFwLmZpbmQo
cmVwbGFjZW1lbnRUb2tlbi5pZGVudGlmaWVyKTsKICAgICAgICAgaWYgKGl0ID09IHRva2VuRXhj
aGFuZ2VNYXAuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gTWFuaXB1bGF0aW9uRmFpbHVyZVR5
cGU6OkludmFsaWRUb2tlbjsKIAogICAgICAgICBhdXRvJiBleGNoYW5nZURhdGEgPSBpdC0+dmFs
dWU7CisgICAgICAgIGF1dG8qIG9yaWdpbmFsTm9kZSA9IGV4Y2hhbmdlRGF0YS5ub2RlLmdldCgp
OworICAgICAgICBBU1NFUlQob3JpZ2luYWxOb2RlKTsKKyAgICAgICAgYXV0byByZXBsYWNlbWVu
dFRleHQgPSByZXBsYWNlbWVudFRva2VuLmNvbnRlbnQ7CiAKLSAgICAgICAgUmVmUHRyPE5vZGU+
IGNvbnRlbnROb2RlOworICAgICAgICBSZWZQdHI8Tm9kZT4gcmVwbGFjZW1lbnROb2RlOwogICAg
ICAgICBpZiAoZXhjaGFuZ2VEYXRhLmlzRXhjbHVkZWQpIHsKICAgICAgICAgICAgIGlmIChleGNo
YW5nZURhdGEuaXNDb25zdW1lZCkKICAgICAgICAgICAgICAgICByZXR1cm4gTWFuaXB1bGF0aW9u
RmFpbHVyZVR5cGU6OkV4Y2x1c2lvblZpb2xhdGlvbjsKICAgICAgICAgICAgIGV4Y2hhbmdlRGF0
YS5pc0NvbnN1bWVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmICghbmV3VG9rZW4uY29udGVudC5p
c051bGwoKSAmJiBuZXdUb2tlbi5jb250ZW50ICE9IGV4Y2hhbmdlRGF0YS5vcmlnaW5hbENvbnRl
bnQpCisKKyAgICAgICAgICAgIGlmICghcmVwbGFjZW1lbnRUb2tlbi5jb250ZW50LmlzTnVsbCgp
ICYmIHJlcGxhY2VtZW50VG9rZW4uY29udGVudCAhPSBleGNoYW5nZURhdGEub3JpZ2luYWxDb250
ZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTo6RXhj
bHVzaW9uVmlvbGF0aW9uOwotICAgICAgICAgICAgY29udGVudE5vZGUgPSBleGNoYW5nZURhdGEu
bm9kZTsKLSAgICAgICAgICAgIGZvciAoUmVmUHRyPE5vZGU+IGN1cnJlbnREZXNjZW5kZW50Tm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKmNvbnRlbnROb2RlLCBjb250ZW50Tm9kZS5nZXQoKSk7
IGN1cnJlbnREZXNjZW5kZW50Tm9kZTsgY3VycmVudERlc2NlbmRlbnROb2RlID0gTm9kZVRyYXZl
cnNhbDo6bmV4dCgqY3VycmVudERlc2NlbmRlbnROb2RlLCBjb250ZW50Tm9kZS5nZXQoKSkpCi0g
ICAgICAgICAgICAgICAgbm9kZXNUb1JlbW92ZS5yZW1vdmUoKmN1cnJlbnREZXNjZW5kZW50Tm9k
ZSk7CisKKyAgICAgICAgICAgIHJlcGxhY2VtZW50Tm9kZSA9IG9yaWdpbmFsTm9kZTsKKyAgICAg
ICAgICAgIGZvciAoUmVmUHRyPE5vZGU+IGRlc2NlbmRlbnROb2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dCgqb3JpZ2luYWxOb2RlLCBvcmlnaW5hbE5vZGUpOyBkZXNjZW5kZW50Tm9kZTsgZGVzY2Vu
ZGVudE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpkZXNjZW5kZW50Tm9kZSwgb3JpZ2luYWxO
b2RlKSkKKyAgICAgICAgICAgICAgICBub2Rlc1RvUmVtb3ZlLnJlbW92ZSgqZGVzY2VuZGVudE5v
ZGUpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNvbnRlbnROb2RlID0gVGV4dDo6Y3Jl
YXRlKGNvbW1vbkFuY2VzdG9yLT5kb2N1bWVudCgpLCBuZXdUb2tlbi5jb250ZW50KTsKLQotICAg
ICAgICBhdXRvJiBvcmlnaW5hbE5vZGUgPSBleGNoYW5nZURhdGEubm9kZSA/ICpleGNoYW5nZURh
dGEubm9kZSA6ICpjb21tb25BbmNlc3RvcjsKLSAgICAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+
IGN1cnJlbnROb2RlID0gaXM8Q29udGFpbmVyTm9kZT4ob3JpZ2luYWxOb2RlKSA/ICZkb3duY2Fz
dDxDb250YWluZXJOb2RlPihvcmlnaW5hbE5vZGUpIDogb3JpZ2luYWxOb2RlLnBhcmVudE5vZGUo
KTsKLQotICAgICAgICBWZWN0b3I8UmVmPE5vZGU+PiBjdXJyZW50QW5jZXN0b3JzOwotICAgICAg
ICBmb3IgKDsgY3VycmVudE5vZGUgJiYgY3VycmVudE5vZGUgIT0gY29tbW9uQW5jZXN0b3I7IGN1
cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKSkKLSAgICAgICAgICAgIGN1cnJl
bnRBbmNlc3RvcnMuYXBwZW5kKCpjdXJyZW50Tm9kZSk7Ci0gICAgICAgIGN1cnJlbnRBbmNlc3Rv
cnMucmV2ZXJzZSgpOwotCi0gICAgICAgIHNpemVfdCBpID0wOwotICAgICAgICB3aGlsZSAoaSA8
IGN1cnJlbnRFbGVtZW50U3RhY2suc2l6ZSgpICYmIGkgPCBjdXJyZW50QW5jZXN0b3JzLnNpemUo
KSAmJiBjdXJyZW50RWxlbWVudFN0YWNrW2ldLnB0cigpID09IGN1cnJlbnRBbmNlc3RvcnNbaV0u
cHRyKCkpCi0gICAgICAgICAgICArK2k7Ci0KLSAgICAgICAgaWYgKGkgPT0gY3VycmVudEVsZW1l
bnRTdGFjay5zaXplKCkgJiYgaSA9PSBjdXJyZW50QW5jZXN0b3JzLnNpemUoKSkKLSAgICAgICAg
ICAgIGluc2VydGlvbnMuYXBwZW5kKE5vZGVJbnNlcnRpb24geyBjdXJyZW50RWxlbWVudFN0YWNr
LnNpemUoKSA/IGN1cnJlbnRFbGVtZW50U3RhY2subGFzdCgpLnB0cigpIDogbnVsbHB0ciwgY29u
dGVudE5vZGUucmVsZWFzZU5vbk51bGwoKSB9KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAoaSA8IGN1cnJlbnRFbGVtZW50U3RhY2suc2l6ZSgpKQotICAgICAgICAgICAgICAgIGN1
cnJlbnRFbGVtZW50U3RhY2suc2hyaW5rKGkpOwotICAgICAgICAgICAgZm9yICg7aSA8IGN1cnJl
bnRBbmNlc3RvcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBSZWY8Tm9kZT4gY3Vy
cmVudE5vZGUgPSBjdXJyZW50QW5jZXN0b3JzW2ldLmNvcHlSZWYoKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIXJldXNlZE9yaWdpbmFsTm9kZXMuYWRkKGN1cnJlbnROb2RlLmNvcHlSZWYoKSkuaXNO
ZXdFbnRyeSkgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNsb25lZE5vZGUgPSBjdXJyZW50
Tm9kZS0+Y2xvbmVOb2RlSW50ZXJuYWwoY3VycmVudE5vZGUtPmRvY3VtZW50KCksIE5vZGU6OkNs
b25pbmdPcGVyYXRpb246Ok9ubHlTZWxmKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8q
IGRhdGEgPSBjdXJyZW50Tm9kZS0+ZXZlbnRUYXJnZXREYXRhKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhLT5ldmVudExpc3RlbmVyTWFwLmNvcHlFdmVudExpc3RlbmVyc05vdENyZWF0
ZWRGcm9tTWFya3VwVG9UYXJnZXQoY2xvbmVkTm9kZS5wdHIoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnROb2RlID0gV1RGTW92ZShjbG9uZWROb2RlKTsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXBsYWNlbWVudE5vZGUgPSBUZXh0OjpjcmVhdGUoY29tbW9uQW5jZXN0
b3ItPmRvY3VtZW50KCksIHJlcGxhY2VtZW50VGV4dCk7CiAKLSAgICAgICAgICAgICAgICBpbnNl
cnRpb25zLmFwcGVuZChOb2RlSW5zZXJ0aW9uIHsgY3VycmVudEVsZW1lbnRTdGFjay5zaXplKCkg
PyBjdXJyZW50RWxlbWVudFN0YWNrLmxhc3QoKS5wdHIoKSA6IG51bGxwdHIsIGN1cnJlbnROb2Rl
LmNvcHlSZWYoKSB9KTsKLSAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudFN0YWNrLmFwcGVu
ZChXVEZNb3ZlKGN1cnJlbnROb2RlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnNl
cnRpb25zLmFwcGVuZChOb2RlSW5zZXJ0aW9uIHsgY3VycmVudEVsZW1lbnRTdGFjay5zaXplKCkg
PyBjdXJyZW50RWxlbWVudFN0YWNrLmxhc3QoKS5wdHIoKSA6IG51bGxwdHIsIGNvbnRlbnROb2Rl
LnJlbGVhc2VOb25OdWxsKCkgfSk7Ci0gICAgICAgIH0KKyAgICAgICAgYXV0byB0b3BEb3duUGF0
aCA9IGdldFBhdGgoY29tbW9uQW5jZXN0b3IuZ2V0KCksIG9yaWdpbmFsTm9kZSk7CisgICAgICAg
IHVwZGF0ZUluc2VydGlvbnMobGFzdFRvcERvd25QYXRoLCB0b3BEb3duUGF0aCwgcmVwbGFjZW1l
bnROb2RlLmdldCgpLCByZXVzZWRPcmlnaW5hbE5vZGVzLCBpbnNlcnRpb25zKTsKKyAgICB9CisK
KyAgICBhdXRvIGVuZCA9IGxhc3RDaGlsZE9mQ29tbW9uQW5jZXN0b3JJblJhbmdlID8gcG9zaXRp
b25JblBhcmVudEFmdGVyTm9kZShsYXN0Q2hpbGRPZkNvbW1vbkFuY2VzdG9ySW5SYW5nZS5nZXQo
KSkgOiBwb3NpdGlvbkFmdGVyTm9kZShjb21tb25BbmNlc3Rvci5nZXQoKSk7CisgICAgUmVmUHRy
PE5vZGU+IG5vZGUgPSBpdGVtLmVuZC5maXJzdE5vZGUoKTsKKyAgICBSZWZQdHI8Tm9kZT4gZW5k
Tm9kZSA9IGVuZC5maXJzdE5vZGUoKTsKKyAgICBpZiAobm9kZSAmJiBub2RlICE9IGVuZE5vZGUp
IHsKKyAgICAgICAgYXV0byB0b3BEb3duUGF0aCA9IGdldFBhdGgoY29tbW9uQW5jZXN0b3IuZ2V0
KCksIG5vZGUtPnBhcmVudE5vZGUoKSk7CisgICAgICAgIHVwZGF0ZUluc2VydGlvbnMobGFzdFRv
cERvd25QYXRoLCB0b3BEb3duUGF0aCwgbnVsbHB0ciwgcmV1c2VkT3JpZ2luYWxOb2RlcywgaW5z
ZXJ0aW9ucyk7CisgICAgfQorICAgIHdoaWxlIChub2RlICE9IGVuZE5vZGUpIHsKKyAgICAgICAg
UmVmPE5vZGU+IHBhcmVudE5vZGUgPSAqbm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICB3aGls
ZSAoIWxhc3RUb3BEb3duUGF0aC5pc0VtcHR5KCkgJiYgbGFzdFRvcERvd25QYXRoLmxhc3QoKS5m
aXJzdC5wdHIoKSAhPSBwYXJlbnROb2RlLnB0cigpKQorICAgICAgICAgICAgbGFzdFRvcERvd25Q
YXRoLnJlbW92ZUxhc3QoKTsKKworICAgICAgICBpbnNlcnRpb25zLmFwcGVuZChOb2RlSW5zZXJ0
aW9uIHsgbGFzdFRvcERvd25QYXRoLnNpemUoKSA/IGxhc3RUb3BEb3duUGF0aC5sYXN0KCkuc2Vj
b25kLnB0cigpIDogbnVsbHB0ciwgKm5vZGUgfSk7CisgICAgICAgIGxhc3RUb3BEb3duUGF0aC5h
cHBlbmQoeyAqbm9kZSwgKm5vZGUgfSk7CisgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KCpub2RlKTsKICAgICB9Ci0gICAgaWYgKG5vZGVUb0luc2VydEJhY2tBdEVuZCkKLSAgICAg
ICAgaW5zZXJ0aW9ucy5hcHBlbmQoTm9kZUluc2VydGlvbiB7IG51bGxwdHIsIG5vZGVUb0luc2Vy
dEJhY2tBdEVuZC5yZWxlYXNlTm9uTnVsbCgpIH0pOwogCiAgICAgUG9zaXRpb24gaW5zZXJ0aW9u
UG9pbnQgPSBwb3NpdGlvbkJlZm9yZU5vZGUoZmlyc3RDb250ZW50Tm9kZS5nZXQoKSkucGFyZW50
QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgd2hpbGUgKGluc2VydGlvblBvaW50LmNvbnRhaW5l
ck5vZGUoKSAhPSBjb21tb25BbmNlc3RvcikKICAgICAgICAgaW5zZXJ0aW9uUG9pbnQgPSBwb3Np
dGlvbkluUGFyZW50QmVmb3JlTm9kZShpbnNlcnRpb25Qb2ludC5jb250YWluZXJOb2RlKCkpOwot
ICAgIEFTU0VSVCghaW5zZXJ0aW9uUG9pbnQuaXNOdWxsKCkpOwotICAgIEFTU0VSVCghaW5zZXJ0
aW9uUG9pbnQuaXNPcnBoYW4oKSk7CiAKICAgICBmb3IgKGF1dG8mIG5vZGUgOiBub2Rlc1RvUmVt
b3ZlKQogICAgICAgICBub2RlLT5yZW1vdmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaAppbmRleCBiNWQzYTY5ZDBmZjkxZGY3
MmUwZTU5YTA2NWM1N2QwYzVhNzYyNjkyLi5mMDNkMTc2NjNmZTZhMjVmNWIyZjVjNjFhNzBkZWE5
ZjA3NmJmMTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlci5oCkBAIC0xNTAsOCArMTUwLDI1IEBAIHByaXZhdGU6CiAgICAgICAg
IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zOwogICAgIH07CiAKKyAgICBzdHJ1Y3Qg
TWFuaXB1bGF0aW9uVG9rZW5zIHsKKyAgICAgICAgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiB0
b2tlbnM7CisgICAgICAgIGJvb2wgY29udGFpbnNPbmx5SFRNTFNwYWNlIHsgdHJ1ZSB9OworICAg
ICAgICBib29sIGNvbnRhaW5zTGluZUJyZWFrIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBmaXJz
dFRva2VuQ29udGFpbnNMaW5lQnJlYWsgeyBmYWxzZSB9OworICAgICAgICBib29sIGxhc3RUb2tl
bkNvbnRhaW5zTGluZUJyZWFrIHsgZmFsc2UgfTsKKyAgICB9OworICAgIE1hbmlwdWxhdGlvblRv
a2VucyBwYXJzZShTdHJpbmdWaWV3LCBOb2RlKik7CisKICAgICB2b2lkIGFkZEl0ZW0oTWFuaXB1
bGF0aW9uSXRlbURhdGEmJik7CiAgICAgdm9pZCBmbHVzaFBlbmRpbmdJdGVtc0ZvckNhbGxiYWNr
KCk7CisKKyAgICBzdHJ1Y3QgTm9kZUluc2VydGlvbiB7CisgICAgICAgIFJlZlB0cjxOb2RlPiBw
YXJlbnRJZkRpZmZlcmVudEZyb21Db21tb25BbmNlc3RvcjsKKyAgICAgICAgUmVmPE5vZGU+IGNo
aWxkOworICAgIH07CisgICAgdXNpbmcgTm9kZUVudHJ5ID0gc3RkOjpwYWlyPFJlZjxOb2RlPiwg
UmVmPE5vZGU+PjsKKyAgICBWZWN0b3I8UmVmPE5vZGU+PiBnZXRQYXRoKE5vZGUqLCBOb2RlKik7
CisgICAgdm9pZCB1cGRhdGVJbnNlcnRpb25zKFZlY3RvcjxOb2RlRW50cnk+JiwgY29uc3QgVmVj
dG9yPFJlZjxOb2RlPj4mLCBOb2RlKiwgSGFzaFNldDxSZWY8Tm9kZT4+JiwgVmVjdG9yPE5vZGVJ
bnNlcnRpb24+Jik7CiAgICAgT3B0aW9uYWw8TWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU+IHJlcGxh
Y2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbURhdGEmLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9u
VG9rZW4+Jik7CiAKICAgICBXZWFrUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwpkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDA4NDVhZGU4ZWU1YjEz
NzA4YTFjMGIxNmFiOGEzNWE4MDFiMzA0OWMuLjEyNDc1MTI2NGIwNjNlNTUxNjFmODJhMTAwZTdm
MGU5Yzk5MmYyODQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wNi0wMSAgU2lodWkgTGl1ICA8c2lodWlfbGl1
QGFwcGxlLmNvbT4KKworICAgICAgICBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciBzaG91bGQg
cHV0IG9uZSBOb2RlIGluIG9ubHkgb25lIHBhcmFncmFwaAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
V2Vuc29uIEhzaWVoLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9UZXh0TWFuaXB1bGF0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisK
IDIwMjAtMDYtMDEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBNYWtlIEN1c3RvbURpc3BsYXlOYW1lIGFuZCBEZWZhdWx0RGlzcGxheU5hbWUg
QVBJIHRlc3RzIGZhaWwgaW5zdGVhZCBvZiB0aW1pbmcgb3V0IHdoZW4gc29tZXRoaW5nIGNoYW5n
ZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4
dE1hbmlwdWxhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
VGV4dE1hbmlwdWxhdGlvbi5tbQppbmRleCBmNjRiNmUzOTNmYzkzMTUzYTljMTE4OGNkZDA4MDdk
NjdlZTllZmY3Li40MGQ0ZGNmMzM3NzhhNDJlMGY1YzViZmYxNDE0MzhjNzFkOTk5MjlhIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVs
YXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0
TWFuaXB1bGF0aW9uLm1tCkBAIC0xNzksMTUgKzE3OSwxMyBAQCBURVNUKFRleHRNYW5pcHVsYXRp
b24sIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkZpbmRNdWx0aXBsZVBhcmFncmFwaHNJblNpbmdsZVRl
eHRObwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAKICAgICBhdXRvICpp
dGVtcyA9IFtkZWxlZ2F0ZSBpdGVtc107Ci0gICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAzVUwp
OwotICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNU
X0VRKGl0ZW1zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291
bnQsIDVVTCk7CiAgICAgRVhQRUNUX1NUUkVRKCJoZWxsbyIsIGl0ZW1zWzBdLnRva2Vuc1swXS5j
b250ZW50LlVURjhTdHJpbmcpOwotCi0gICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3Vu
dCwgMVVMKTsKLSAgICBFWFBFQ1RfU1RSRVEoIndvcmxkIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNv
bnRlbnQuVVRGOFN0cmluZyk7Ci0KLSAgICBFWFBFQ1RfRVEoaXRlbXNbMl0udG9rZW5zLmNvdW50
LCAxVUwpOwotICAgIEVYUEVDVF9TVFJFUSgiV2ViS2l0IiwgaXRlbXNbMl0udG9rZW5zWzBdLmNv
bnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJcbiIsIGl0ZW1zWzBdLnRva2Vu
c1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgid29ybGQiLCBpdGVt
c1swXS50b2tlbnNbMl0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIlxu
IiwgaXRlbXNbMF0udG9rZW5zWzNdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NU
UkVRKCJXZWJLaXQiLCBpdGVtc1swXS50b2tlbnNbNF0uY29udGVudC5VVEY4U3RyaW5nKTsKIH0K
IAogVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBTdGFydFRleHRNYW5pcHVsYXRpb25GaW5kUGFyYWdy
YXBoc1dpdGhNdWx0aWxlVG9rZW5zKQpAQCAtNzg2LDYgKzc4NCw3MSBAQCBURVNUKFRleHRNYW5p
cHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkV4dHJhY3RzVmFsdWVzRnJvbUJ1dHRvbklu
cHV0cykKICAgICBFWFBFQ1RfV0tfU1RSRVEoIlR3byIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250
ZW50KTsKIH0KIAorVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBTdGFydFRleHRNYW5pcHVsYXRpb25F
eHRyYWN0c1Zpc2libGVMaW5lQnJlYWtzSW5UZXh0QXNFeGNsdWRlZFRva2VucykKK3sKKyAgICBh
dXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10g
aW5pdF0pOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgW3dlYlZp
ZXcgX3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBb
d2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD4iCisg
ICAgICAgICI8Ym9keT4iCisgICAgICAgICI8c3BhbiBzdHlsZT0nd2hpdGUtc3BhY2U6cHJlOyc+
JiMxMDsgb25lJiMxMDsgIHR3bzwvc3Bhbj4iCisgICAgICAgICI8c3BhbiBzdHlsZT0nd2hpdGUt
c3BhY2U6cHJlOyc+JiMxMDs8L3NwYW4+IgorICAgICAgICAiPHNwYW4+JiMxMDsgdGhyZWUmIzEw
OyAgZm91ciYjMTA7PC9zcGFuPiIKKyAgICAgICAgIjwvYm9keT4iXTsKKworICAgIGRvbmUgPSBm
YWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0
aW9uOm5pbCBjb21wbGV0aW9uOl57CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvIGl0ZW1zID0gW2Rl
bGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJVTCk7CisgICAgRVhQ
RUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgNFVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoIlxu
ICIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9U
UlVFKGl0ZW1zWzBdLnRva2Vuc1swXS5pc0V4Y2x1ZGVkKTsKKyAgICBFWFBFQ1RfU1RSRVEoIm9u
ZSIsIGl0ZW1zWzBdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9G
QUxTRShpdGVtc1swXS50b2tlbnNbMV0uaXNFeGNsdWRlZCk7CisgICAgRVhQRUNUX1NUUkVRKCJc
biAgIiwgaXRlbXNbMF0udG9rZW5zWzJdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNU
X1RSVUUoaXRlbXNbMF0udG9rZW5zWzJdLmlzRXhjbHVkZWQpOworICAgIEVYUEVDVF9TVFJFUSgi
dHdvIiwgaXRlbXNbMF0udG9rZW5zWzNdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNU
X0ZBTFNFKGl0ZW1zWzBdLnRva2Vuc1szXS5pc0V4Y2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVEoaXRl
bXNbMV0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9TVFJFUSgidGhyZWUgZm91ciIs
IGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworfQorCitURVNUKFRleHRN
YW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkV4dHJhY3RzVmFsdWVzQnlOb2RlKQor
eworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRl
IGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAg
ICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsK
KworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBo
dG1sPiIKKyAgICAgICAgIjxib2R5PiIKKyAgICAgICAgIjxzcGFuPm9uZTwvc3Bhbj48c3BhbiBz
dHlsZT0nd2hpdGUtc3BhY2U6cHJlOyc+dHdvICYjMTA7IHRocmVlPC9zcGFuPjxzcGFuPmZvdXI8
L3NwYW4+IgorICAgICAgICAiPHNwYW4gc3R5bGU9J3doaXRlLXNwYWNlOnByZTsnPiYjMTA7Zml2
ZTwvc3Bhbj4iCisgICAgICAgICI8L2JvZHk+Il07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAg
W3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjpuaWwgY29t
cGxldGlvbjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0byBpdGVtcyA9IFtkZWxlZ2F0ZSBpdGVt
c107CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAyVUwpOworICAgIEVYUEVDVF9FUShpdGVt
c1swXS50b2tlbnMuY291bnQsIDVVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJvbmUiLCBpdGVtc1sw
XS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoInR3byIs
IGl0ZW1zWzBdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJF
USgiIFxuICIsIGl0ZW1zWzBdLnRva2Vuc1syXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVY
UEVDVF9TVFJFUSgidGhyZWUiLCBpdGVtc1swXS50b2tlbnNbM10uY29udGVudC5VVEY4U3RyaW5n
KTsKKyAgICBFWFBFQ1RfU1RSRVEoImZvdXIiLCBpdGVtc1swXS50b2tlbnNbNF0uY29udGVudC5V
VEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCAyVUwpOwor
ICAgIEVYUEVDVF9TVFJFUSgiXG4iLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3Ry
aW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoImZpdmUiLCBpdGVtc1sxXS50b2tlbnNbMV0uY29udGVu
dC5VVEY4U3RyaW5nKTsKK30KKwogc3RydWN0IFRva2VuIHsKICAgICBOU1N0cmluZyAqaWRlbnRp
ZmllcjsKICAgICBOU1N0cmluZyAqY29udGVudDsKQEAgLTEwNjQsNyArMTEyNyw3IEBAIFRFU1Qo
VGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uUmVwbGFjZVBhcmFncmFw
aHNTZXBhcmF0ZWRCeVdyYXBwCiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwogICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCI8cD48
Yj5IZWxsbywgPC9iPldvcmxkPGJyPldlYktpdDwvcD4iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7CisgICAgRVhQRUNU
X1dLX1NUUkVRKCI8cD48Yj5IZWxsbywgPC9iPldvcmxkPGI+PGJyPjwvYj5XZWJLaXQ8L3A+Iiwg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5u
ZXJIVE1MIl0pOwogfQogCiBURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlw
dWxhdGlvbkZhaWxXaGVuQlJJc0luc2VydGVkKQpAQCAtMTk2Nyw2ICsyMDMwLDEyMyBAQCBURVNU
KFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkNvcnJlY3RQYXJhZ3Jh
cGhSYW5nZSkKICAgICBFWFBFQ1RfV0tfU1RSRVEoIjxkaXYgY2xhc3M9XCJmcmFtZVwiPjxkaXYg
Y2xhc3M9XCJzdWJmcmFtZVwiPjwvZGl2PjwvZGl2PjxzdHlsZT48L3N0eWxlPjxkaXYgY2xhc3M9
XCJpbmxpbmVcIj48ZGl2PjxsaT48YSBocmVmPVwiI1wiPmhlbGxvPC9hPjwvbGk+PGxpPjxhIGhy
ZWY9XCIjXCI+d29ybGQ8L2E+PC9saT48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPVwiZnJhbWVcIj48
ZGl2IGNsYXNzPVwic3ViZnJhbWVcIj48L2Rpdj48L2Rpdj4iLCBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7CiB9CiAKK1RF
U1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uQ2FuTWVyZ2VDb250
ZW50QW5kUHJlc2VydmVMaW5lQnJlYWtzKQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5T
KFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlM
b2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAgICAgICAgIjxib2R5PiIKKyAgICAg
ICAgIjxzcGFuIHN0eWxlPSd3aGl0ZS1zcGFjZTpwcmU7Jz5vbmUgJiMxMDsgdHdvICYjMTA7PC9z
cGFuPiIKKyAgICAgICAgIjwvYm9keT4iXTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2Vi
VmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOm5pbCBjb21wbGV0
aW9uOl57CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvIGl0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsK
KyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBd
LnRva2Vucy5jb3VudCwgNFVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoIm9uZSIsIGl0ZW1zWzBdLnRv
a2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiIFxuICIsIGl0
ZW1zWzBdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgi
dHdvIiwgaXRlbXNbMF0udG9rZW5zWzJdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNU
X1NUUkVRKCIgXG4iLCBpdGVtc1swXS50b2tlbnNbM10uY29udGVudC5VVEY4U3RyaW5nKTsKKwor
ICAgIGF1dG8gcmVwbGFjZW1lbnRJdGVtcyA9IHJldGFpblB0cihAWworICAgICAgICBjcmVhdGVJ
dGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIsIHsgeyBpdGVtc1swXS50b2tlbnNbMF0uaWRlbnRpZmll
ciwgQCJPTkUiIH0sIHsgaXRlbXNbMF0udG9rZW5zWzFdLmlkZW50aWZpZXIsIGl0ZW1zWzBdLnRv
a2Vuc1sxXS5jb250ZW50IH0sIHsgaXRlbXNbMF0udG9rZW5zWzJdLmlkZW50aWZpZXIsIEAiVFdP
IiB9LCB7IGl0ZW1zWzBdLnRva2Vuc1szXS5pZGVudGlmaWVyLCBpdGVtc1swXS50b2tlbnNbM10u
Y29udGVudCB9IH0pLmF1dG9yZWxlYXNlKCksCisgICAgXSk7CisKKyAgICBkb25lID0gZmFsc2U7
CisgICAgW3dlYlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkZvckl0ZW1zOnJlcGxhY2Vt
ZW50SXRlbXMuZ2V0KCkgY29tcGxldGlvbjpeKE5TQXJyYXk8TlNFcnJvciAqPiAqZXJyb3JzKSB7
CisgICAgICAgIEVYUEVDVF9FUShlcnJvcnMsIG5pbCk7CisgICAgICAgIGRvbmUgPSB0cnVlOwor
ICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBFWFBF
Q1RfV0tfU1RSRVEoIjxzcGFuIHN0eWxlPVwid2hpdGUtc3BhY2U6cHJlO1wiPk9ORSBcbiBUV08g
XG48L3NwYW4+IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3Vt
ZW50LmJvZHkuaW5uZXJIVE1MIl0pOworfQorCitURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBs
ZXRlVGV4dE1hbmlwdWxhdGlvblNob3VsZFByZXNlcnZlTm9kZXNBZnRlclBhcmFncmFwaFJhbmdl
KQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsK
KyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgp
XTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQ
RSBodG1sPiIKKyAgICAgICAgIjxib2R5PiIKKyAgICAgICAgIjxwPmhlbGxvPGI+d29ybGQ8YnI+
PGJyPjxpPmZyb208L2k+PC9iPjwvcD4iCisgICAgICAgICI8L2JvZHk+Il07CisKKyAgICBkb25l
ID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmln
dXJhdGlvbjpuaWwgY29tcGxldGlvbjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsK
KyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0byBpdGVtcyA9
IFtkZWxlZ2F0ZSBpdGVtc107CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAyVUwpOworICAg
IEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX1NUUkVR
KCJoZWxsbyIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVY
UEVDVF9TVFJFUSgid29ybGQiLCBpdGVtc1swXS50b2tlbnNbMV0uY29udGVudC5VVEY4U3RyaW5n
KTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVD
VF9TVFJFUSgiZnJvbSIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOwor
CisgICAgYXV0byByZXBsYWNlbWVudEl0ZW1zID0gcmV0YWluUHRyKEBbCisgICAgICAgIGNyZWF0
ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeyB7IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlm
aWVyLCBAIkhlbGxvIiB9LCB7IGl0ZW1zWzBdLnRva2Vuc1sxXS5pZGVudGlmaWVyLCBAIldvcmxk
IiB9IH0pLmF1dG9yZWxlYXNlKCksCisgICAgICAgIGNyZWF0ZUl0ZW0oaXRlbXNbMV0uaWRlbnRp
ZmllciwgeyB7IGl0ZW1zWzFdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAIkZyb20gV2ViS2l0IiB9
IH0pLmF1dG9yZWxlYXNlKCksCisgICAgXSk7CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dl
YlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkZvckl0ZW1zOnJlcGxhY2VtZW50SXRlbXMu
Z2V0KCkgY29tcGxldGlvbjpeKE5TQXJyYXk8TlNFcnJvciAqPiAqZXJyb3JzKSB7CisgICAgICAg
IEVYUEVDVF9FUShlcnJvcnMsIG5pbCk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOwor
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBFWFBFQ1RfV0tfU1RS
RVEoIjxwPkhlbGxvPGI+V29ybGQ8YnI+PGJyPjxpPkZyb20gV2ViS2l0PC9pPjwvYj48L3A+Iiwg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5u
ZXJIVE1MIl0pOworfQorCitURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlw
dWxhdGlvblNQcmVzZXJ2ZU5vZGVzQmVmb3JlUGFyYWdyYXBoUmFuZ2UpCit7CisgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRd
KTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3ZWJWaWV3IF9z
ZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZp
ZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+IgorICAgICAg
ICAiPGJvZHk+IgorICAgICAgICAiPHA+PGI+PGJyPjxicj5oZWxsbzxpPndvcmxkPC9pPjwvYj5m
cm9tPC9wPiIKKyAgICAgICAgIjwvYm9keT4iXTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBb
d2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOm5pbCBjb21w
bGV0aW9uOl57CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvIGl0ZW1zID0gW2RlbGVnYXRlIGl0ZW1z
XTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1z
WzBdLnRva2Vucy5jb3VudCwgM1VMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhlbGxvIiwgaXRlbXNb
MF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJ3b3Js
ZCIsIGl0ZW1zWzBdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9T
VFJFUSgiZnJvbSIsIGl0ZW1zWzBdLnRva2Vuc1syXS5jb250ZW50LlVURjhTdHJpbmcpOworCisg
ICAgYXV0byByZXBsYWNlbWVudEl0ZW1zID0gcmV0YWluUHRyKEBbCisgICAgICAgIGNyZWF0ZUl0
ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeyB7IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlmaWVy
LCBAIkhlbGxvIiB9LCB7IGl0ZW1zWzBdLnRva2Vuc1sxXS5pZGVudGlmaWVyLCBAIldvcmxkIiB9
LCB7IGl0ZW1zWzBdLnRva2Vuc1syXS5pZGVudGlmaWVyLCBAIkZyb20gV2ViS2l0IiB9IH0pLmF1
dG9yZWxlYXNlKCkKKyAgICBdKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBf
Y29tcGxldGVUZXh0TWFuaXB1bGF0aW9uRm9ySXRlbXM6cmVwbGFjZW1lbnRJdGVtcy5nZXQoKSBj
b21wbGV0aW9uOl4oTlNBcnJheTxOU0Vycm9yICo+ICplcnJvcnMpIHsKKyAgICAgICAgRVhQRUNU
X0VRKGVycm9ycywgbmlsKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+
PGI+PGJyPjxicj5IZWxsbzxpPldvcmxkPC9pPjwvYj5Gcm9tIFdlYktpdDwvcD4iLCBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwi
XSk7Cit9CisKIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgSW5zZXJ0aW5nQ29udGVudEludG9BbHJl
YWR5TWFuaXB1bGF0ZWRDb250ZW50RG9lc05vdENyZWF0ZVRleHRNYW5pcHVsYXRpb25JdGVtKQog
ewogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRl
IGFsbG9jXSBpbml0XSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>