<?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>143389</bug_id>
          
          <creation_ts>2015-04-03 14:54:57 -0700</creation_ts>
          <short_desc>Migrate FontCascade&apos;s expansion functions to use StringView iterators</short_desc>
          <delta_ts>2015-04-03 18:24:38 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1082688</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-04-03 14:54:57 -0700</bug_when>
    <thetext>Migrate FontCascade&apos;s expansion functions to use StringView iterators</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082699</commentid>
    <comment_count>1</comment_count>
      <attachid>250102</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-04-03 15:23:21 -0700</bug_when>
    <thetext>Created attachment 250102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082715</commentid>
    <comment_count>2</comment_count>
      <attachid>250102</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-03 16:39:29 -0700</bug_when>
    <thetext>Comment on attachment 250102
Patch

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

Not sure why compilation is failing. Please don’t land until you resolve that!

&gt; Source/WTF/wtf/text/StringView.h:74
&gt; +    // Note that these four iterators do not support double increments or double dereferences.

These four things that follow are not iterators. These are sort of “collections” that you can then call begin/end on to get iterators.

I don’t think the terms “double increments” and “double dereferences” are clear. What you are saying is that these are a certain type of iterator. I believe that what you are saying is that these are input iterators http://en.cppreference.com/w/cpp/concept/InputIterator but further they are even more restricted because you must always dereference and then increment before dereferencing again. I don’t think the phrase “do not support double increments” says that to me.

&gt; Source/WTF/wtf/text/StringView.h:515
&gt; +// Iterators

I don’t think this is a helpful comment, especially since the classes below are not all iterators.

&gt; Source/WTF/wtf/text/StringView.h:516
&gt; +class StringView::CodeUnits {

I suggest putting all the class definitions first, and then all the inline functions later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082731</commentid>
    <comment_count>3</comment_count>
      <attachid>250102</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-04-03 17:38:03 -0700</bug_when>
    <thetext>Comment on attachment 250102
Patch

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

&gt;&gt; Source/WTF/wtf/text/StringView.h:74
&gt;&gt; +    // Note that these four iterators do not support double increments or double dereferences.
&gt; 
&gt; These four things that follow are not iterators. These are sort of “collections” that you can then call begin/end on to get iterators.
&gt; 
&gt; I don’t think the terms “double increments” and “double dereferences” are clear. What you are saying is that these are a certain type of iterator. I believe that what you are saying is that these are input iterators http://en.cppreference.com/w/cpp/concept/InputIterator but further they are even more restricted because you must always dereference and then increment before dereferencing again. I don’t think the phrase “do not support double increments” says that to me.

Done.

&gt;&gt; Source/WTF/wtf/text/StringView.h:515
&gt;&gt; +// Iterators
&gt; 
&gt; I don’t think this is a helpful comment, especially since the classes below are not all iterators.

Done.

&gt;&gt; Source/WTF/wtf/text/StringView.h:516
&gt;&gt; +class StringView::CodeUnits {
&gt; 
&gt; I suggest putting all the class definitions first, and then all the inline functions later.

Done.

Out of curiosity, why is this preferred?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082732</commentid>
    <comment_count>4</comment_count>
      <attachid>250111</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-04-03 17:39:20 -0700</bug_when>
    <thetext>Created attachment 250111
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082738</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-04-03 18:24:38 -0700</bug_when>
    <thetext>Looks like this patch regresses Layout/line-layout-simple.html about 0.5%</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250102</attachid>
            <date>2015-04-03 15:23:21 -0700</date>
            <delta_ts>2015-04-03 16:39:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143389-20150403152235.patch</filename>
            <type>text/plain</type>
            <size>30199</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDE4ODFhZGU1OWUxMDA5NmFlYjljMTA0
MmRkZTU4N2VlYmRkMjczNWEuLjk0ZGUwODQ5MjUxYmEyNDlkNzc4NmQ3OTUyZTFiNzU0YzBhYzcz
OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTUtMDQtMDMgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBNaWdyYXRlIEZvbnRDYXNjYWRlJ3MgZXhw
YW5zaW9uIGZ1bmN0aW9ucyB0byB1c2UgU3RyaW5nVmlldyBpdGVyYXRvcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzM4OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW9zdGx5IGp1
c3QgbW92ZXMgZnVuY3Rpb25zIGFyb3VuZCwgYnV0IGl0IGFsc28gYWRkcyByZXZlcnNlIGl0ZXJh
dG9ycyB0byBTdHJpbmdWaWV3LgorCisgICAgICAgIFRlc3RzOiBXVEY6OlN0cmluZ1ZpZXdJdGVy
YXRvcnMgaW4gVGVzdFdlYktpdEFQSQorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nVmlldy5o
OgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjpDb2RlVW5pdHM6OkNvZGVVbml0cyk6CisgICAg
ICAgIChXVEY6OlN0cmluZ1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3I6Okl0ZXJhdG9yKToKKyAg
ICAgICAgKFdURjo6U3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3IqKToK
KyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJh
dG9yIT0pOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjpSZXZlcnNlQ29kZVVuaXRzOjpSZXZl
cnNlQ29kZVVuaXRzKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6UmV2ZXJzZUNvZGVVbml0
czo6SXRlcmF0b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6UmV2ZXJz
ZUNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXVEY6OlN0cmluZ1Zp
ZXc6OlJldmVyc2VDb2RlVW5pdHM6Okl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdU
Rjo6U3RyaW5nVmlldzo6UmV2ZXJzZUNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjpSZXZlcnNlQ29kZVBvaW50czo6UmV2ZXJzZUNvZGVQ
b2ludHMpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjpSZXZlcnNlQ29kZVBvaW50czo6SXRl
cmF0b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6UmV2ZXJzZUNvZGVQ
b2ludHM6Okl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjpS
ZXZlcnNlQ29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpT
dHJpbmdWaWV3OjpSZXZlcnNlQ29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorCiAy
MDE1LTA0LTAzICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgbm9uLWNvdW50aW5nIEJsb29tIGZpbHRlciBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGM2Nzk5ZDcwZTNmNjgyZDU3MTA2MzgzZjJlMWM4MmZjOWJiNWRlOGMuLjUwYzhiOTc3ZmMxN2Rl
OTM5MzkyY2NjOGUxYWRiY2YxOGFkMjc0ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAor
MjAxNS0wNC0wMyAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisg
ICAgICAgIE1pZ3JhdGUgRm9udENhc2NhZGUncyBleHBhbnNpb24gZnVuY3Rpb25zIHRvIHVzZSBT
dHJpbmdWaWV3IGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQzMzg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmUtdXNlIHRoZSBleGlzdGluZyBVVEYtMTYtc3BlY2lmaWMgY29tcGxleGl0
eSBmcm9tIFdURi4KKworICAgICAgICBObyBuZXcgV2ViQ29yZSB0ZXN0cyBiZWNhdXNlIHRoZXJl
IGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZUV4cGFuc2lvbkNoYXJhY3Rl
cik6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6bGVhZGluZ0V4cGFuc2lvbk9w
cG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjp0cmFpbGluZ0V4cGFu
c2lvbk9wcG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmg6CisKIDIwMTUtMDQtMDMgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbQ29udGVudCBFeHRlbnNpb25z
XSBBZGQgbWVtb3J5IHJlcG9ydGluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nVmlldy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKaW5kZXggZDlj
ZTc0YzhhYTIxMjRiZDYyMTgzYWE5NjY4NzAwYzk5ODZlYTc0MC4uMjMyYTU5MzIxMmM4Mjc1ZjAw
NjBjMTNmNmMzM2JhYjQxMWY1YzNhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdWaWV3LmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKQEAgLTcx
LDEyICs3MSwxOSBAQCBwdWJsaWM6CiAKICAgICBVQ2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKIAorICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBmb3VyIGl0ZXJhdG9ycyBkbyBu
b3Qgc3VwcG9ydCBkb3VibGUgaW5jcmVtZW50cyBvciBkb3VibGUgZGVyZWZlcmVuY2VzLgogICAg
IGNsYXNzIENvZGVVbml0czsKICAgICBDb2RlVW5pdHMgY29kZVVuaXRzKCkgY29uc3Q7CiAKKyAg
ICBjbGFzcyBSZXZlcnNlQ29kZVVuaXRzOworICAgIFJldmVyc2VDb2RlVW5pdHMgcmV2ZXJzZUNv
ZGVVbml0cygpIGNvbnN0OworCiAgICAgY2xhc3MgQ29kZVBvaW50czsKICAgICBDb2RlUG9pbnRz
IGNvZGVQb2ludHMoKSBjb25zdDsKIAorICAgIGNsYXNzIFJldmVyc2VDb2RlUG9pbnRzOworICAg
IFJldmVyc2VDb2RlUG9pbnRzIHJldmVyc2VDb2RlUG9pbnRzKCkgY29uc3Q7CisKICAgICBib29s
IGlzOEJpdCgpIGNvbnN0OwogICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0Owog
ICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdDsKQEAgLTUwNSw5ICs1MTIsMTAg
QEAgaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdWaWV3IGEsIFN0cmlu
Z1ZpZXcgYikKICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZUNvbW1vbihhLCBiKTsK
IH0KIAotY2xhc3MgU3RyaW5nVmlldzo6Q29kZVBvaW50cyB7CisvLyBJdGVyYXRvcnMKK2NsYXNz
IFN0cmluZ1ZpZXc6OkNvZGVVbml0cyB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQ29kZVBvaW50
cyhjb25zdCBTdHJpbmdWaWV3Jik7CisgICAgZXhwbGljaXQgQ29kZVVuaXRzKGNvbnN0IFN0cmlu
Z1ZpZXcmKTsKIAogICAgIGNsYXNzIEl0ZXJhdG9yOwogICAgIEl0ZXJhdG9yIGJlZ2luKCkgY29u
c3Q7CkBAIC01MTcsOSArNTI1LDY3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nVmlldyBtX3N0cmlu
Z1ZpZXc7CiB9OwogCi1jbGFzcyBTdHJpbmdWaWV3OjpDb2RlVW5pdHMgeworY2xhc3MgU3RyaW5n
Vmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvciB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQ29kZVVu
aXRzKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBJdGVyYXRvcihjb25zdCBTdHJpbmdWaWV3Jiwg
dW5zaWduZWQgaW5kZXgpOworCisgICAgVUNoYXIgb3BlcmF0b3IqKCkgY29uc3Q7CisgICAgSXRl
cmF0b3ImIG9wZXJhdG9yKysoKTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJdGVyYXRv
ciYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG1fc3RyaW5nVmlldzsKKyAgICB1bnNp
Z25lZCBtX2luZGV4OworfTsKKworaW5saW5lIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6Q29kZVVu
aXRzKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcpCisgICAgOiBtX3N0cmluZ1ZpZXcoc3Ry
aW5nVmlldykKK3sKK30KKworaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpiZWdp
bigpIGNvbnN0IC0+IEl0ZXJhdG9yCit7CisgICAgcmV0dXJuIEl0ZXJhdG9yKG1fc3RyaW5nVmll
dywgMCk7Cit9CisKK2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6ZW5kKCkgY29u
c3QgLT4gSXRlcmF0b3IKK3sKKyAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCBtX3N0
cmluZ1ZpZXcubGVuZ3RoKCkpOworfQorCitpbmxpbmUgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJ
dGVyYXRvcjo6SXRlcmF0b3IoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgdW5zaWduZWQg
aW5kZXgpCisgICAgOiBtX3N0cmluZ1ZpZXcoc3RyaW5nVmlldykKKyAgICAsIG1faW5kZXgoaW5k
ZXgpCit7Cit9CisKK2lubGluZSBVQ2hhciBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6Okl0ZXJhdG9y
OjpvcGVyYXRvciooKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmluZ1ZpZXdbbV9pbmRleF07
Cit9CisKK2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJh
dG9yKysoKSAtPiBJdGVyYXRvciYKK3sKKyAgICArK21faW5kZXg7CisgICAgcmV0dXJuICp0aGlz
OworfQorCitpbmxpbmUgYm9vbCBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6Okl0ZXJhdG9yOjpvcGVy
YXRvcj09KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICBBU1NFUlQoJm1fc3Ry
aW5nVmlldyA9PSAmb3RoZXIubV9zdHJpbmdWaWV3KTsKKyAgICByZXR1cm4gbV9pbmRleCA9PSBv
dGhlci5tX2luZGV4OworfQorCitpbmxpbmUgYm9vbCBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6Okl0
ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cit9CisKK2NsYXNzIFN0cmluZ1ZpZXc6OlJldmVyc2VD
b2RlVW5pdHMgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJldmVyc2VDb2RlVW5pdHMoY29uc3Qg
U3RyaW5nVmlldyYpOwogCiAgICAgY2xhc3MgSXRlcmF0b3I7CiAgICAgSXRlcmF0b3IgYmVnaW4o
KSBjb25zdDsKQEAgLTUyOSwxMSArNTk1LDExIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nVmlldyBt
X3N0cmluZ1ZpZXc7CiB9OwogCi1jbGFzcyBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRv
ciB7CitjbGFzcyBTdHJpbmdWaWV3OjpSZXZlcnNlQ29kZVVuaXRzOjpJdGVyYXRvciB7CiBwdWJs
aWM6CiAgICAgSXRlcmF0b3IoY29uc3QgU3RyaW5nVmlldyYsIHVuc2lnbmVkIGluZGV4KTsKIAot
ICAgIFVDaGFyMzIgb3BlcmF0b3IqKCkgY29uc3Q7CisgICAgVUNoYXIgb3BlcmF0b3IqKCkgY29u
c3Q7CiAgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBJdGVyYXRvciYpIGNvbnN0OwpAQCAtNTQxLDE3ICs2MDcsNjkgQEAgcHVibGljOgogCiBw
cml2YXRlOgogICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG1fc3RyaW5nVmlldzsKLSAgICBtdXRhYmxl
IHVuc2lnbmVkIG1faW5kZXg7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIG11dGFibGUgYm9v
bCBtX2FscmVhZHlJbmNyZW1lbnRlZCB7IGZhbHNlIH07Ci0jZW5kaWYKKyAgICB1bnNpZ25lZCBt
X2luZGV4OwogfTsKIAotY2xhc3MgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvciB7Citp
bmxpbmUgU3RyaW5nVmlldzo6UmV2ZXJzZUNvZGVVbml0czo6UmV2ZXJzZUNvZGVVbml0cyhjb25z
dCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3KQorICAgIDogbV9zdHJpbmdWaWV3KHN0cmluZ1ZpZXcp
Cit7Cit9CisKK2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6OlJldmVyc2VDb2RlVW5pdHM6OmJlZ2lu
KCkgY29uc3QgLT4gSXRlcmF0b3IKK3sKKyAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3
LCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkpOworfQorCitpbmxpbmUgYXV0byBTdHJpbmdWaWV3OjpS
ZXZlcnNlQ29kZVVuaXRzOjplbmQoKSBjb25zdCAtPiBJdGVyYXRvcgoreworICAgIHJldHVybiBJ
dGVyYXRvcihtX3N0cmluZ1ZpZXcsIDApOworfQorCitpbmxpbmUgU3RyaW5nVmlldzo6UmV2ZXJz
ZUNvZGVVbml0czo6SXRlcmF0b3I6Okl0ZXJhdG9yKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1Zp
ZXcsIHVuc2lnbmVkIGluZGV4KQorICAgIDogbV9zdHJpbmdWaWV3KHN0cmluZ1ZpZXcpCisgICAg
LCBtX2luZGV4KGluZGV4KQoreworfQorCitpbmxpbmUgVUNoYXIgU3RyaW5nVmlldzo6UmV2ZXJz
ZUNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJhdG9yKigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c3RyaW5nVmlld1ttX2luZGV4IC0gMV07Cit9CisKK2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6OlJl
dmVyc2VDb2RlVW5pdHM6Okl0ZXJhdG9yOjpvcGVyYXRvcisrKCkgLT4gSXRlcmF0b3ImCit7Cisg
ICAgLS1tX2luZGV4OworICAgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIGJvb2wgU3RyaW5n
Vmlldzo6UmV2ZXJzZUNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgSXRlcmF0
b3ImIG90aGVyKSBjb25zdAoreworICAgIEFTU0VSVCgmbV9zdHJpbmdWaWV3ID09ICZvdGhlci5t
X3N0cmluZ1ZpZXcpOworICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7Cit9CisK
K2lubGluZSBib29sIFN0cmluZ1ZpZXc6OlJldmVyc2VDb2RlVW5pdHM6Okl0ZXJhdG9yOjpvcGVy
YXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7Cit9CisKK2NsYXNzIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHMgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IENvZGVQb2ludHMoY29uc3QgU3RyaW5nVmlldyYpOworCisgICAgY2xh
c3MgSXRlcmF0b3I7CisgICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKKyAgICBJdGVyYXRvciBl
bmQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTdHJpbmdWaWV3IG1fc3RyaW5nVmlldzsKK307
CisKK2NsYXNzIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yIHsKIHB1YmxpYzoKICAg
ICBJdGVyYXRvcihjb25zdCBTdHJpbmdWaWV3JiwgdW5zaWduZWQgaW5kZXgpOwogCi0gICAgVUNo
YXIgb3BlcmF0b3IqKCkgY29uc3Q7CisgICAgVUNoYXIzMiBvcGVyYXRvciooKSBjb25zdDsKICAg
ICBJdGVyYXRvciYgb3BlcmF0b3IrKygpOwogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEl0
ZXJhdG9yJikgY29uc3Q7CkBAIC01NTksMTcgKzY3NywyMCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6
CiAgICAgY29uc3QgU3RyaW5nVmlldyYgbV9zdHJpbmdWaWV3OwotICAgIHVuc2lnbmVkIG1faW5k
ZXg7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2luZGV4OworI2lmICFBU1NFUlRfRElTQUJMRUQK
KyAgICBtdXRhYmxlIGJvb2wgbV9hbHJlYWR5SW5jcmVtZW50ZWQgeyBmYWxzZSB9OworI2VuZGlm
CiB9OwogCi1pbmxpbmUgYXV0byBTdHJpbmdWaWV3Ojpjb2RlUG9pbnRzKCkgY29uc3QgLT4gQ29k
ZVBvaW50cworaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVBvaW50czo6YmVnaW4oKSBjb25z
dCAtPiBJdGVyYXRvcgogewotICAgIHJldHVybiBDb2RlUG9pbnRzKCp0aGlzKTsKKyAgICByZXR1
cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCAwKTsKIH0KIAotaW5saW5lIGF1dG8gU3RyaW5nVmll
dzo6Y29kZVVuaXRzKCkgY29uc3QgLT4gQ29kZVVuaXRzCitpbmxpbmUgYXV0byBTdHJpbmdWaWV3
OjpDb2RlUG9pbnRzOjplbmQoKSBjb25zdCAtPiBJdGVyYXRvcgogewotICAgIHJldHVybiBDb2Rl
VW5pdHMoKnRoaXMpOworICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIG1fc3RyaW5n
Vmlldy5sZW5ndGgoKSk7CiB9CiAKIGlubGluZSBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpDb2Rl
UG9pbnRzKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcpCkBAIC02MTksNTcgKzc0MCwxMTEg
QEAgaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9y
IT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKQogICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
IH0KIAotaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVBvaW50czo6YmVnaW4oKSBjb25zdCAt
PiBJdGVyYXRvcgorY2xhc3MgU3RyaW5nVmlldzo6UmV2ZXJzZUNvZGVQb2ludHMgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IFJldmVyc2VDb2RlUG9pbnRzKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKwor
ICAgIGNsYXNzIEl0ZXJhdG9yOworICAgIEl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisgICAgSXRl
cmF0b3IgZW5kKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nVmlldyBtX3N0cmluZ1Zp
ZXc7Cit9OworCitjbGFzcyBTdHJpbmdWaWV3OjpSZXZlcnNlQ29kZVBvaW50czo6SXRlcmF0b3Ig
eworcHVibGljOgorICAgIEl0ZXJhdG9yKGNvbnN0IFN0cmluZ1ZpZXcmLCB1bnNpZ25lZCBpbmRl
eCk7CisKKyAgICBVQ2hhcjMyIG9wZXJhdG9yKigpIGNvbnN0OworICAgIEl0ZXJhdG9yJiBvcGVy
YXRvcisrKCk7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBjb25zdCBTdHJpbmdWaWV3JiBtX3N0cmluZ1ZpZXc7CisgICAgbXV0YWJsZSB1bnNpZ25l
ZCBtX2luZGV4OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBtdXRhYmxlIGJvb2wgbV9hbHJl
YWR5SW5jcmVtZW50ZWQgeyBmYWxzZSB9OworI2VuZGlmCit9OworCitpbmxpbmUgYXV0byBTdHJp
bmdWaWV3OjpSZXZlcnNlQ29kZVBvaW50czo6YmVnaW4oKSBjb25zdCAtPiBJdGVyYXRvcgogewot
ICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIDApOworICAgIHJldHVybiBJdGVyYXRv
cihtX3N0cmluZ1ZpZXcsIG1fc3RyaW5nVmlldy5sZW5ndGgoKSk7CiB9CiAKLWlubGluZSBhdXRv
IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6OmVuZCgpIGNvbnN0IC0+IEl0ZXJhdG9yCitpbmxpbmUg
YXV0byBTdHJpbmdWaWV3OjpSZXZlcnNlQ29kZVBvaW50czo6ZW5kKCkgY29uc3QgLT4gSXRlcmF0
b3IKIHsKLSAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCBtX3N0cmluZ1ZpZXcubGVu
Z3RoKCkpOworICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIDApOwogfQogCi1pbmxp
bmUgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpDb2RlVW5pdHMoY29uc3QgU3RyaW5nVmlldyYgc3Ry
aW5nVmlldykKK2lubGluZSBTdHJpbmdWaWV3OjpSZXZlcnNlQ29kZVBvaW50czo6UmV2ZXJzZUNv
ZGVQb2ludHMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldykKICAgICA6IG1fc3RyaW5nVmll
dyhzdHJpbmdWaWV3KQogewogfQogCi1pbmxpbmUgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVy
YXRvcjo6SXRlcmF0b3IoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgdW5zaWduZWQgaW5k
ZXgpCitpbmxpbmUgU3RyaW5nVmlldzo6UmV2ZXJzZUNvZGVQb2ludHM6Okl0ZXJhdG9yOjpJdGVy
YXRvcihjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCB1bnNpZ25lZCBpbmRleCkKICAgICA6
IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQogICAgICwgbV9pbmRleChpbmRleCkKIHsKIH0KIAot
aW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3IrKygp
IC0+IEl0ZXJhdG9yJgoraW5saW5lIGF1dG8gU3RyaW5nVmlldzo6UmV2ZXJzZUNvZGVQb2ludHM6
Okl0ZXJhdG9yOjpvcGVyYXRvcisrKCkgLT4gSXRlcmF0b3ImCiB7Ci0gICAgKyttX2luZGV4Owor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBBU1NFUlQobV9hbHJlYWR5SW5jcmVtZW50ZWQpOwor
ICAgIG1fYWxyZWFkeUluY3JlbWVudGVkID0gZmFsc2U7CisjZW5kaWYKICAgICByZXR1cm4gKnRo
aXM7CiB9CiAKLWlubGluZSBVQ2hhciBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6Okl0ZXJhdG9yOjpv
cGVyYXRvciooKSBjb25zdAoraW5saW5lIFVDaGFyMzIgU3RyaW5nVmlldzo6UmV2ZXJzZUNvZGVQ
b2ludHM6Okl0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAogewotICAgIHJldHVybiBtX3N0cmlu
Z1ZpZXdbbV9pbmRleF07CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEFTU0VSVCghbV9hbHJl
YWR5SW5jcmVtZW50ZWQpOworICAgIG1fYWxyZWFkeUluY3JlbWVudGVkID0gdHJ1ZTsKKyNlbmRp
ZgorCisgICAgaWYgKG1fc3RyaW5nVmlldy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIG1fc3Ry
aW5nVmlldy5jaGFyYWN0ZXJzOCgpWy0tbV9pbmRleF07CisKKyAgICBVQ2hhcjMyIGNvZGVQb2lu
dDsKKyAgICBVMTZfUFJFVihtX3N0cmluZ1ZpZXcuY2hhcmFjdGVyczE2KCksIDAsIG1faW5kZXgs
IGNvZGVQb2ludCk7CisgICAgcmV0dXJuIGNvZGVQb2ludDsKIH0KIAotaW5saW5lIGJvb2wgU3Ry
aW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYg
b3RoZXIpIGNvbnN0CitpbmxpbmUgYm9vbCBTdHJpbmdWaWV3OjpSZXZlcnNlQ29kZVBvaW50czo6
SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAogewogICAg
IEFTU0VSVCgmbV9zdHJpbmdWaWV3ID09ICZvdGhlci5tX3N0cmluZ1ZpZXcpOworICAgIEFTU0VS
VCghbV9hbHJlYWR5SW5jcmVtZW50ZWQpOwogICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1f
aW5kZXg7CiB9CiAKLWlubGluZSBib29sIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3I6
Om9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAoraW5saW5lIGJvb2wgU3Ry
aW5nVmlldzo6UmV2ZXJzZUNvZGVQb2ludHM6Okl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEl0
ZXJhdG9yJiBvdGhlcikgY29uc3QKIHsKICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiB9
CiAKLWlubGluZSBhdXRvIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6YmVnaW4oKSBjb25zdCAtPiBJ
dGVyYXRvcgoraW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Y29kZVVuaXRzKCkgY29uc3QgLT4gQ29k
ZVVuaXRzCiB7Ci0gICAgcmV0dXJuIEl0ZXJhdG9yKG1fc3RyaW5nVmlldywgMCk7CisgICAgcmV0
dXJuIENvZGVVbml0cygqdGhpcyk7CiB9CiAKLWlubGluZSBhdXRvIFN0cmluZ1ZpZXc6OkNvZGVV
bml0czo6ZW5kKCkgY29uc3QgLT4gSXRlcmF0b3IKK2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6OnJl
dmVyc2VDb2RlVW5pdHMoKSBjb25zdCAtPiBSZXZlcnNlQ29kZVVuaXRzCiB7Ci0gICAgcmV0dXJu
IEl0ZXJhdG9yKG1fc3RyaW5nVmlldywgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpKTsKKyAgICByZXR1
cm4gUmV2ZXJzZUNvZGVVbml0cygqdGhpcyk7Cit9CisKK2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6
OmNvZGVQb2ludHMoKSBjb25zdCAtPiBDb2RlUG9pbnRzCit7CisgICAgcmV0dXJuIENvZGVQb2lu
dHMoKnRoaXMpOworfQorCitpbmxpbmUgYXV0byBTdHJpbmdWaWV3OjpyZXZlcnNlQ29kZVBvaW50
cygpIGNvbnN0IC0+IFJldmVyc2VDb2RlUG9pbnRzCit7CisgICAgcmV0dXJuIFJldmVyc2VDb2Rl
UG9pbnRzKCp0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggNjgwNmU2ZmQ4NGE0
ZThmNzUxNzFhOTQ0YjcwM2UyMGNmZTVlOTY5ZC4uNzQxYTlmNTk1OTc4NDk5ODFhZThmNjZjYmNm
OWViYTMwNWIwN2EwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlLmNwcApAQCAtMTAwNSw0MyArMTAwNSwyNyBAQCBib29sIEZvbnRDYXNjYWRl
Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMzIgYykKICAgICByZXR1cm4gaXNDSktJZGVv
Z3JhcGgoYyk7CiB9CiAKLXN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gRm9udENhc2NhZGU6OmV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywg
c2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9y
IGV4cGFuc2lvbkJlaGF2aW9yKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBoYW5kbGVFeHBhbnNp
b25DaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCiB7
Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9IChl
eHBhbnNpb25CZWhhdmlvciAmIExlYWRpbmdFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRMZWFkaW5n
RXhwYW5zaW9uOwotICAgIGlmICgoZXhwYW5zaW9uQmVoYXZpb3IgJiBMZWFkaW5nRXhwYW5zaW9u
TWFzaykgPT0gRm9yY2VMZWFkaW5nRXhwYW5zaW9uKSB7Ci0gICAgICAgICsrY291bnQ7CisgICAg
aWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7CiAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24g
PSB0cnVlOworICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBM
VFIpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXJzW2ldKSkgewotICAgICAgICAgICAg
ICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0g
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gbGVu
Z3RoOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3Rl
cnNbaSAtIDFdKSkgewotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAg
aXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYg
KCFpc0FmdGVyRXhwYW5zaW9uICYmIChleHBhbnNpb25CZWhhdmlvciAmIFRyYWlsaW5nRXhwYW5z
aW9uTWFzaykgPT0gRm9yY2VUcmFpbGluZ0V4cGFuc2lvbikgewotICAgICAgICArK2NvdW50Owor
ICAgIGlmIChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2wo
Y2hhcmFjdGVyKSkgeworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IGlzQWZ0ZXJFeHBhbnNpb24g
PyAxIDogMjsKICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgfSBlbHNlIGlm
IChpc0FmdGVyRXhwYW5zaW9uICYmIChleHBhbnNpb25CZWhhdmlvciAmIFRyYWlsaW5nRXhwYW5z
aW9uTWFzaykgPT0gRm9yYmlkVHJhaWxpbmdFeHBhbnNpb24pIHsKLSAgICAgICAgLS1jb3VudDsK
LSAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOworICAgICAgICByZXR1cm4gY291bnQ7
CiAgICAgfQotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihjb3VudCwgaXNBZnRlckV4cGFuc2lv
bik7CisgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOwogfQogCi1zdGQ6OnBhaXI8dW5zaWdu
ZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24gZGly
ZWN0aW9uLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcikKK3N0ZDo6cGFpcjx1
bnNpZ25lZCwgYm9vbD4gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoY29u
c3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEV4cGFu
c2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKQogeworICAgIC8vIEZvciBlYWNoIGNoYXJh
Y3RlciwgaXRlcmF0aW5nIGZyb20gbGVmdCB0byByaWdodDoKKyAgICAvLyAgIElmIGl0IGlzIHJl
Y29nbml6ZWQgYXMgYSBzcGFjZSwgaW5zZXJ0IGFuIG9wcG9ydHVuaXR5IGFmdGVyIGl0CisgICAg
Ly8gICBJZiBpdCBpcyBhbiBpZGVvZ3JhcGgsIGluc2VydCBvbmUgb3Bwb3J0dW5pdHkgYmVmb3Jl
IGl0IGFuZCBvbmUgb3Bwb3J0dW5pdHkgYWZ0ZXIgaXQKKyAgICAvLyBEbyB0aGlzIHN1Y2ggYSB3
YXkgc28gdGhhdCB0aGVyZSBhcmUgbm90IHR3byBvcHBvcnR1bml0aWVzIG5leHQgdG8gZWFjaCBv
dGhlci4KKyAgICAKICAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gY2Fu
RXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKICAgICB1bnNpZ25lZCBjb3Vu
dCA9IDA7CiAgICAgYm9vbCBpc0FmdGVyRXhwYW5zaW9uID0gKGV4cGFuc2lvbkJlaGF2aW9yICYg
TGVhZGluZ0V4cGFuc2lvbk1hc2spID09IEZvcmJpZExlYWRpbmdFeHBhbnNpb247CkBAIC0xMDUw
LDQ3ICsxMDM0LDExIEBAIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gRm9udENhc2NhZGU6OmV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVCiAgICAgICAgIGlzQWZ0ZXJF
eHBhbnNpb24gPSB0cnVlOwogICAgIH0KICAgICBpZiAoZGlyZWN0aW9uID09IExUUikgewotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBV
Q2hhcjMyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgICAgICBpZiAodHJlYXRB
c1NwYWNlKGNoYXJhY3RlcikpIHsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAg
ICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFUxNl9JU19MRUFEKGNoYXJhY3Rlcikg
JiYgaSArIDEgPCBsZW5ndGggJiYgVTE2X0lTX1RSQUlMKGNoYXJhY3RlcnNbaSArIDFdKSkgewot
ICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShjaGFyYWN0
ZXIsIGNoYXJhY3RlcnNbaSArIDFdKTsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoZXhwYW5kQXJvdW5kSWRlb2dyYXBocyAmJiBpc0NKS0lkZW9n
cmFwaE9yU3ltYm9sKGNoYXJhY3RlcikpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWlzQWZ0ZXJF
eHBhbnNpb24pCi0gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAg
Y291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlzQWZ0ZXJF
eHBhbnNpb24gPSBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBmb3IgKFVDaGFyMzIgY2hhcmFj
dGVyIDogc3RyaW5nVmlldy5jb2RlUG9pbnRzKCkpCisgICAgICAgICAgICBjb3VudCArPSBoYW5k
bGVFeHBhbnNpb25DaGFyYWN0ZXIoY2hhcmFjdGVyLCBpc0FmdGVyRXhwYW5zaW9uKTsKICAgICB9
IGVsc2UgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gbGVuZ3RoOyBpID4gMDsgLS1pKSB7Ci0g
ICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaSAtIDFdOwotICAgICAg
ICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICAgICAgY291
bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChVMTZfSVNf
VFJBSUwoY2hhcmFjdGVyKSAmJiBpID4gMSAmJiBVMTZfSVNfTEVBRChjaGFyYWN0ZXJzW2kgLSAy
XSkpIHsKLSAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlko
Y2hhcmFjdGVyc1tpIC0gMl0sIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgaS0tOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgaXND
SktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFp
c0FmdGVyRXhwYW5zaW9uKQotICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAg
ICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
c0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChVQ2hhcjMy
IGNoYXJhY3RlciA6IHN0cmluZ1ZpZXcucmV2ZXJzZUNvZGVQb2ludHMoKSkKKyAgICAgICAgICAg
IGNvdW50ICs9IGhhbmRsZUV4cGFuc2lvbkNoYXJhY3RlcihjaGFyYWN0ZXIsIGlzQWZ0ZXJFeHBh
bnNpb24pOwogICAgIH0KICAgICBpZiAoIWlzQWZ0ZXJFeHBhbnNpb24gJiYgKGV4cGFuc2lvbkJl
aGF2aW9yICYgVHJhaWxpbmdFeHBhbnNpb25NYXNrKSA9PSBGb3JjZVRyYWlsaW5nRXhwYW5zaW9u
KSB7CiAgICAgICAgICsrY291bnQ7CkBAIC0xMTAyLDMyICsxMDUwLDEyIEBAIHN0ZDo6cGFpcjx1
bnNpZ25lZCwgYm9vbD4gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRl
cm5hbChjb25zdCBVCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGNvdW50LCBpc0FmdGVyRXhw
YW5zaW9uKTsKIH0KIAotc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBGb250Q2FzY2FkZTo6ZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCBUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3Ip
Ci17Ci0gICAgLy8gRm9yIGVhY2ggY2hhcmFjdGVyLCBpdGVyYXRpbmcgZnJvbSBsZWZ0IHRvIHJp
Z2h0OgotICAgIC8vICAgSWYgaXQgaXMgcmVjb2duaXplZCBhcyBhIHNwYWNlLCBpbnNlcnQgYW4g
b3Bwb3J0dW5pdHkgYWZ0ZXIgaXQKLSAgICAvLyAgIElmIGl0IGlzIGFuIGlkZW9ncmFwaCwgaW5z
ZXJ0IG9uZSBvcHBvcnR1bml0eSBiZWZvcmUgaXQgYW5kIG9uZSBvcHBvcnR1bml0eSBhZnRlciBp
dAotICAgIC8vIERvIHRoaXMgc3VjaCBhIHdheSBzbyB0aGF0IHRoZXJlIGFyZSBub3QgdHdvIG9w
cG9ydHVuaXRpZXMgbmV4dCB0byBlYWNoIG90aGVyLgotICAgIGlmIChzdHJpbmdWaWV3LmlzOEJp
dCgpKQotICAgICAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKHN0
cmluZ1ZpZXcuY2hhcmFjdGVyczgoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSwgZGlyZWN0aW9uLCBl
eHBhbnNpb25CZWhhdmlvcik7Ci0gICAgcmV0dXJuIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJ
bnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBk
aXJlY3Rpb24sIGV4cGFuc2lvbkJlaGF2aW9yKTsKLX0KLQogYm9vbCBGb250Q2FzY2FkZTo6bGVh
ZGluZ0V4cGFuc2lvbk9wcG9ydHVuaXR5KGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcsIFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIGlmICghc3RyaW5nVmlldy5sZW5ndGgoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVUNoYXIzMiBpbml0aWFsQ2hhcmFjdGVyOwot
ICAgIGlmIChkaXJlY3Rpb24gPT0gTFRSKSB7Ci0gICAgICAgIGluaXRpYWxDaGFyYWN0ZXIgPSBz
dHJpbmdWaWV3WzBdOwotICAgICAgICBpZiAoVTE2X0lTX0xFQUQoaW5pdGlhbENoYXJhY3Rlcikg
JiYgc3RyaW5nVmlldy5sZW5ndGgoKSA+IDEgJiYgVTE2X0lTX1RSQUlMKHN0cmluZ1ZpZXdbMV0p
KQotICAgICAgICAgICAgaW5pdGlhbENoYXJhY3RlciA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShp
bml0aWFsQ2hhcmFjdGVyLCBzdHJpbmdWaWV3WzFdKTsKLSAgICB9IGVsc2UgewotICAgICAgICBp
bml0aWFsQ2hhcmFjdGVyID0gc3RyaW5nVmlld1tzdHJpbmdWaWV3Lmxlbmd0aCgpIC0gMV07Ci0g
ICAgICAgIGlmIChVMTZfSVNfVFJBSUwoaW5pdGlhbENoYXJhY3RlcikgJiYgc3RyaW5nVmlldy5s
ZW5ndGgoKSA+IDEgJiYgVTE2X0lTX0xFQUQoc3RyaW5nVmlld1tzdHJpbmdWaWV3Lmxlbmd0aCgp
IC0gMl0pKQotICAgICAgICAgICAgaW5pdGlhbENoYXJhY3RlciA9IFUxNl9HRVRfU1VQUExFTUVO
VEFSWShzdHJpbmdWaWV3W3N0cmluZ1ZpZXcubGVuZ3RoKCkgLSAyXSwgaW5pdGlhbENoYXJhY3Rl
cik7Ci0gICAgfQorICAgIFVDaGFyMzIgaW5pdGlhbENoYXJhY3RlciA9IGRpcmVjdGlvbiA9PSBM
VFIgPyAqc3RyaW5nVmlldy5jb2RlUG9pbnRzKCkuYmVnaW4oKSA6ICpzdHJpbmdWaWV3LnJldmVy
c2VDb2RlUG9pbnRzKCkuYmVnaW4oKTsKIAogICAgIHJldHVybiBjYW5FeHBhbmRBcm91bmRJZGVv
Z3JhcGhzSW5Db21wbGV4VGV4dCgpICYmIGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woaW5pdGlhbENo
YXJhY3Rlcik7CiB9CkBAIC0xMTM3LDE2ICsxMDY1LDcgQEAgYm9vbCBGb250Q2FzY2FkZTo6dHJh
aWxpbmdFeHBhbnNpb25PcHBvcnR1bml0eShjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCBU
ZXgKICAgICBpZiAoIXN0cmluZ1ZpZXcubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIFVDaGFyMzIgZmluYWxDaGFyYWN0ZXI7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIp
IHsKLSAgICAgICAgZmluYWxDaGFyYWN0ZXIgPSBzdHJpbmdWaWV3W3N0cmluZ1ZpZXcubGVuZ3Ro
KCkgLSAxXTsKLSAgICAgICAgaWYgKFUxNl9JU19UUkFJTChmaW5hbENoYXJhY3RlcikgJiYgc3Ry
aW5nVmlldy5sZW5ndGgoKSA+IDEgJiYgVTE2X0lTX0xFQUQoc3RyaW5nVmlld1tzdHJpbmdWaWV3
Lmxlbmd0aCgpIC0gMl0pKQotICAgICAgICAgICAgZmluYWxDaGFyYWN0ZXIgPSBVMTZfR0VUX1NV
UFBMRU1FTlRBUlkoc3RyaW5nVmlld1tzdHJpbmdWaWV3Lmxlbmd0aCgpIC0gMl0sIGZpbmFsQ2hh
cmFjdGVyKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmaW5hbENoYXJhY3RlciA9IHN0cmluZ1Zp
ZXdbMF07Ci0gICAgICAgIGlmIChVMTZfSVNfTEVBRChmaW5hbENoYXJhY3RlcikgJiYgc3RyaW5n
Vmlldy5sZW5ndGgoKSA+IDEgJiYgVTE2X0lTX1RSQUlMKHN0cmluZ1ZpZXdbMV0pKQotICAgICAg
ICAgICAgZmluYWxDaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoZmluYWxDaGFyYWN0
ZXIsIHN0cmluZ1ZpZXdbMV0pOwotICAgIH0KKyAgICBVQ2hhcjMyIGZpbmFsQ2hhcmFjdGVyID0g
ZGlyZWN0aW9uID09IExUUiA/ICpzdHJpbmdWaWV3LnJldmVyc2VDb2RlUG9pbnRzKCkuYmVnaW4o
KSA6ICpzdHJpbmdWaWV3LmNvZGVQb2ludHMoKS5iZWdpbigpOwogCiAgICAgcmV0dXJuIHRyZWF0
QXNTcGFjZShmaW5hbENoYXJhY3RlcikgfHwgKGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNv
bXBsZXhUZXh0KCkgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChmaW5hbENoYXJhY3RlcikpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKaW5k
ZXggNjZhMzRlODg3YzE5ZjJjZWFiN2E2OWU4NGVkNDExZDYyZmJiOTk3Yi4uZjM0OWZhNDY4Yzk1
MDA4MWUyYWEwNzc4Y2FmZjBmNjFhOWE2OGNhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCkBAIC0yNDMsOSArMjQzLDYgQEAgcHJpdmF0ZToK
ICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwg
ZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAgIHZv
aWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlv
dXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKIAotICAgIHN0
YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQsIGJvb2w+IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJ
bnRlcm5hbChjb25zdCBMQ2hhciosIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIEV4cGFu
c2lvbkJlaGF2aW9yKTsKLSAgICBzdGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3Ro
LCBUZXh0RGlyZWN0aW9uLCBFeHBhbnNpb25CZWhhdmlvcik7Ci0KICAgICBmcmllbmQgc3RydWN0
IFdpZHRoSXRlcmF0b3I7CiAgICAgZnJpZW5kIGNsYXNzIFNWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0OwogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggNzk1MWRhMDk5OWUyNGNlN2NhYTgzODE0YzVjNWYwOGM2OGE2ZDI2ZC4uNmRlMjM4NjhlNjYw
OTMwZWJhNTk1NjM4MDdlYjMxOWNkN2MyMWE1NyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE1LTA0LTAzICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgTWlncmF0ZSBG
b250Q2FzY2FkZSdzIGV4cGFuc2lvbiBmdW5jdGlvbnMgdG8gdXNlIFN0cmluZ1ZpZXcgaXRlcmF0
b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMz
ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0
IFN0cmluZ1ZpZXcncyByZXZlcnNlIGl0ZXJhdG9ycy4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1N0cmluZ1ZpZXcuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y29t
cGFyZUxvb3BJdGVyYXRpb25zKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAy
MDE1LTA0LTAzICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgcnVuLWpzYy1zdHJlc3MtdGVzdHMgLS1yZW1vdGUgc2hvdWxkIGFkZCBsaWJsbHZtRm9ySlND
LnNvIHRvIHRoZSBidW5kbGUgb24gTGludXgKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1N0cmluZ1ZpZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvU3RyaW5nVmlldy5jcHAKaW5kZXggMTUzY2U1NTY1MDE5YjlhYWE2ZDExMDQ5NTlmNDk1OTJk
YzQ0MjZiZC4uZDYxZGQ1OTMxM2E5NmVhZmJhNmVlZjI1Y2M4MDc0OGU0YmNhMWYwYSAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKQEAgLTc4LDIyICs3
OCwxNSBAQCBURVNUKFdURiwgU3RyaW5nVmlld0VtcHR5VnNOdWxsKQogICAgICAgICBTVUNDRUVE
KCk7CiB9CiAKLWJvb2wgY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXc6OkNvZGVQb2lu
dHMgY29kZVBvaW50cywgc3RkOjp2ZWN0b3I8VUNoYXIzMj4gZXhwZWN0ZWQpCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgQz4KK2Jvb2wgY29tcGFyZUxvb3BJdGVyYXRpb25zKEMgY29k
ZVBvaW50cywgc3RkOjp2ZWN0b3I8VD4gZXhwZWN0ZWQpCiB7Ci0gICAgc3RkOjp2ZWN0b3I8VUNo
YXIzMj4gYWN0dWFsOworICAgIHN0ZDo6dmVjdG9yPFQ+IGFjdHVhbDsKICAgICBmb3IgKGF1dG8g
Y29kZVBvaW50IDogY29kZVBvaW50cykKICAgICAgICAgYWN0dWFsLnB1c2hfYmFjayhjb2RlUG9p
bnQpOwogICAgIHJldHVybiBhY3R1YWwgPT0gZXhwZWN0ZWQ7CiB9CiAKLXN0YXRpYyBib29sIGNv
bXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3OjpDb2RlVW5pdHMgY29kZVVuaXRzLCBzdGQ6
OnZlY3RvcjxVQ2hhcj4gZXhwZWN0ZWQpCi17Ci0gICAgc3RkOjp2ZWN0b3I8VUNoYXI+IGFjdHVh
bDsKLSAgICBmb3IgKGF1dG8gY29kZVVuaXQgOiBjb2RlVW5pdHMpCi0gICAgICAgIGFjdHVhbC5w
dXNoX2JhY2soY29kZVVuaXQpOwotICAgIHJldHVybiBhY3R1YWwgPT0gZXhwZWN0ZWQ7Ci19Ci0K
IHN0YXRpYyB2b2lkIGJ1aWxkKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIHN0ZDo6dmVjdG9yPFVD
aGFyPiBpbnB1dCkKIHsKICAgICBidWlsZGVyLmNsZWFyKCk7CkBAIC0xMDMsNDMgKzk2LDgxIEBA
IHN0YXRpYyB2b2lkIGJ1aWxkKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIHN0ZDo6dmVjdG9yPFVD
aGFyPiBpbnB1dCkKIAogVEVTVChXVEYsIFN0cmluZ1ZpZXdJdGVyYXRvcnMpCiB7Ci0gICAgY29t
cGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoKS5jb2RlUG9pbnRzKCksIHsgfSk7Ci0gICAg
Y29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoKS5jb2RlVW5pdHMoKSwgeyB9KTsKKyAg
ICBjb21wYXJlTG9vcEl0ZXJhdGlvbnM8VUNoYXIzMj4oU3RyaW5nVmlldygpLmNvZGVQb2ludHMo
KSwgeyB9KTsKKyAgICBjb21wYXJlTG9vcEl0ZXJhdGlvbnM8VUNoYXI+KFN0cmluZ1ZpZXcoKS5j
b2RlVW5pdHMoKSwgeyB9KTsKIAotICAgIGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3
OjplbXB0eSgpLmNvZGVQb2ludHMoKSwgeyB9KTsKLSAgICBjb21wYXJlTG9vcEl0ZXJhdGlvbnMo
U3RyaW5nVmlldzo6ZW1wdHkoKS5jb2RlVW5pdHMoKSwgeyB9KTsKKyAgICBjb21wYXJlTG9vcEl0
ZXJhdGlvbnM8VUNoYXIzMj4oU3RyaW5nVmlldzo6ZW1wdHkoKS5jb2RlUG9pbnRzKCksIHsgfSk7
CisgICAgY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyPihTdHJpbmdWaWV3OjplbXB0eSgpLmNv
ZGVVbml0cygpLCB7IH0pOwogCi0gICAgY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXco
U3RyaW5nKCJoZWxsbyIpKS5jb2RlUG9pbnRzKCksIHsnaCcsICdlJywgJ2wnLCAnbCcsICdvJ30p
OwotICAgIGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KFN0cmluZygiaGVsbG8iKSku
Y29kZVVuaXRzKCksIHsnaCcsICdlJywgJ2wnLCAnbCcsICdvJ30pOworICAgIGNvbXBhcmVMb29w
SXRlcmF0aW9uczxVQ2hhcjMyPihTdHJpbmdWaWV3KFN0cmluZygiaGVsbG8iKSkuY29kZVBvaW50
cygpLCB7J2gnLCAnZScsICdsJywgJ2wnLCAnbyd9KTsKKyAgICBjb21wYXJlTG9vcEl0ZXJhdGlv
bnM8VUNoYXI+KFN0cmluZ1ZpZXcoU3RyaW5nKCJoZWxsbyIpKS5jb2RlVW5pdHMoKSwgeydoJywg
J2UnLCAnbCcsICdsJywgJ28nfSk7CiAKICAgICBTdHJpbmdCdWlsZGVyIGI7CiAgICAgYnVpbGQo
YiwgezB4RDgwMCwgMHhERDU1fSk7IC8vIFN1cnJvZ2F0ZXMgZm9yIHVuaWNvZGUgY29kZSBwb2lu
dCBVKzEwMTU1Ci0gICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1Zp
ZXcoYi50b1N0cmluZygpKS5jb2RlUG9pbnRzKCksIHsweDEwMTU1fSkpOwotICAgIEVYUEVDVF9U
UlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVVu
aXRzKCksIHsweEQ4MDAsIDB4REQ1NX0pKTsKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0
ZXJhdGlvbnM8VUNoYXIzMj4oU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVQb2ludHMoKSwg
ezB4MTAxNTV9KSk7CisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFy
PihTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVVuaXRzKCksIHsweEQ4MDAsIDB4REQ1NX0p
KTsKKworICAgIGJ1aWxkKGIsIHsweEQ4MDB9KTsgLy8gTGVhZGluZyBzdXJyb2dhdGUgb25seQor
ICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9uczxVQ2hhcjMyPihTdHJpbmdWaWV3
KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHhEODAwfSkpOworICAgIEVYUEVDVF9UUlVF
KGNvbXBhcmVMb29wSXRlcmF0aW9uczxVQ2hhcj4oU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNv
ZGVVbml0cygpLCB7MHhEODAwfSkpOworCisgICAgYnVpbGQoYiwgezB4RDgwMCwgMHhEODAxfSk7
IC8vIFR3byBsZWFkaW5nIHN1cnJvZ2F0ZXMKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0
ZXJhdGlvbnM8VUNoYXIzMj4oU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVQb2ludHMoKSwg
ezB4RDgwMCwgMHhEODAxfSkpOworICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9u
czxVQ2hhcj4oU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVVbml0cygpLCB7MHhEODAwLCAw
eEQ4MDF9KSk7CisKKyAgICBidWlsZChiLCB7MHhERDU1fSk7IC8vIFRyYWlsaW5nIHN1cnJvZ2F0
ZSBvbmx5CisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyMzI+KFN0
cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlUG9pbnRzKCksIHsweERENTV9KSk7CisgICAgRVhQ
RUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyPihTdHJpbmdWaWV3KGIudG9TdHJp
bmcoKSkuY29kZVVuaXRzKCksIHsweERENTV9KSk7CisKKyAgICBidWlsZChiLCB7MHhEODAwLCAn
aCd9KTsgLy8gTGVhZGluZyBzdXJyb2dhdGUgZm9sbG93ZWQgYnkgbm9uLXN1cnJvZ2F0ZQorICAg
IEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9uczxVQ2hhcjMyPihTdHJpbmdWaWV3KGIu
dG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHhEODAwLCAnaCd9KSk7CisgICAgRVhQRUNUX1RS
VUUoY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyPihTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSku
Y29kZVVuaXRzKCksIHsweEQ4MDAsICdoJ30pKTsKKworICAgIGJ1aWxkKGIsIHsweDAzMDZ9KTsg
Ly8gIkNPTUJJTklORyBCUkVWRSIKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlv
bnM8VUNoYXIzMj4oU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVQb2ludHMoKSwgezB4MDMw
Nn0pKTsKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnM8VUNoYXI+KFN0cmlu
Z1ZpZXcoYi50b1N0cmluZygpKS5jb2RlVW5pdHMoKSwgezB4MDMwNn0pKTsKKworICAgIGJ1aWxk
KGIsIHsweDAzMDYsIDB4RDgwMCwgMHhERDU1LCAnaCcsICdlJywgJ2wnLCAnbyd9KTsgLy8gTWl4
IG9mIHNpbmdsZSBjb2RlIHVuaXQgYW5kIG11bHRpIGNvZGUgdW5pdCBjb2RlIHBvaW50cworICAg
IEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9uczxVQ2hhcjMyPihTdHJpbmdWaWV3KGIu
dG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHgwMzA2LCAweDEwMTU1LCAnaCcsICdlJywgJ2wn
LCAnbyd9KSk7CisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyPihT
dHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVVuaXRzKCksIHsweDAzMDYsIDB4RDgwMCwgMHhE
RDU1LCAnaCcsICdlJywgJ2wnLCAnbyd9KSk7CisKKyAgICAvLyBSZXZlcnNlCisgICAgY29tcGFy
ZUxvb3BJdGVyYXRpb25zPFVDaGFyMzI+KFN0cmluZ1ZpZXcoKS5yZXZlcnNlQ29kZVBvaW50cygp
LCB7IH0pOworICAgIGNvbXBhcmVMb29wSXRlcmF0aW9uczxVQ2hhcj4oU3RyaW5nVmlldygpLnJl
dmVyc2VDb2RlVW5pdHMoKSwgeyB9KTsKKworICAgIGNvbXBhcmVMb29wSXRlcmF0aW9uczxVQ2hh
cjMyPihTdHJpbmdWaWV3OjplbXB0eSgpLnJldmVyc2VDb2RlUG9pbnRzKCksIHsgfSk7CisgICAg
Y29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyPihTdHJpbmdWaWV3OjplbXB0eSgpLnJldmVyc2VD
b2RlVW5pdHMoKSwgeyB9KTsKKworICAgIGNvbXBhcmVMb29wSXRlcmF0aW9uczxVQ2hhcjMyPihT
dHJpbmdWaWV3KFN0cmluZygiaGVsbG8iKSkucmV2ZXJzZUNvZGVQb2ludHMoKSwgeydvJywgJ2wn
LCAnbCcsICdlJywgJ2gnfSk7CisgICAgY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyPihTdHJp
bmdWaWV3KFN0cmluZygiaGVsbG8iKSkucmV2ZXJzZUNvZGVVbml0cygpLCB7J28nLCAnbCcsICds
JywgJ2UnLCAnaCd9KTsKKworICAgIGJ1aWxkKGIsIHsweEQ4MDAsIDB4REQ1NX0pOyAvLyBTdXJy
b2dhdGVzIGZvciB1bmljb2RlIGNvZGUgcG9pbnQgVSsxMDE1NQorICAgIEVYUEVDVF9UUlVFKGNv
bXBhcmVMb29wSXRlcmF0aW9uczxVQ2hhcjMyPihTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkucmV2
ZXJzZUNvZGVQb2ludHMoKSwgezB4MTAxNTV9KSk7CisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxv
b3BJdGVyYXRpb25zPFVDaGFyPihTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkucmV2ZXJzZUNvZGVV
bml0cygpLCB7MHhERDU1LCAweEQ4MDB9KSk7CiAKICAgICBidWlsZChiLCB7MHhEODAwfSk7IC8v
IExlYWRpbmcgc3Vycm9nYXRlIG9ubHkKLSAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJh
dGlvbnMoU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVQb2ludHMoKSwgezB4RDgwMH0pKTsK
LSAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRvU3Ry
aW5nKCkpLmNvZGVVbml0cygpLCB7MHhEODAwfSkpOworICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVM
b29wSXRlcmF0aW9uczxVQ2hhcjMyPihTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkucmV2ZXJzZUNv
ZGVQb2ludHMoKSwgezB4RDgwMH0pKTsKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJh
dGlvbnM8VUNoYXI+KFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5yZXZlcnNlQ29kZVVuaXRzKCks
IHsweEQ4MDB9KSk7CiAKICAgICBidWlsZChiLCB7MHhEODAwLCAweEQ4MDF9KTsgLy8gVHdvIGxl
YWRpbmcgc3Vycm9nYXRlcwotICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhT
dHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHhEODAwLCAweEQ4MDF9KSk7
Ci0gICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0
cmluZygpKS5jb2RlVW5pdHMoKSwgezB4RDgwMCwgMHhEODAxfSkpOworICAgIEVYUEVDVF9UUlVF
KGNvbXBhcmVMb29wSXRlcmF0aW9uczxVQ2hhcjMyPihTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSku
cmV2ZXJzZUNvZGVQb2ludHMoKSwgezB4RDgwMSwgMHhEODAwfSkpOworICAgIEVYUEVDVF9UUlVF
KGNvbXBhcmVMb29wSXRlcmF0aW9uczxVQ2hhcj4oU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLnJl
dmVyc2VDb2RlVW5pdHMoKSwgezB4RDgwMSwgMHhEODAwfSkpOwogCiAgICAgYnVpbGQoYiwgezB4
REQ1NX0pOyAvLyBUcmFpbGluZyBzdXJyb2dhdGUgb25seQotICAgIEVYUEVDVF9UUlVFKGNvbXBh
cmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7
MHhERDU1fSkpOwotICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdW
aWV3KGIudG9TdHJpbmcoKSkuY29kZVVuaXRzKCksIHsweERENTV9KSk7CisgICAgRVhQRUNUX1RS
VUUoY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyMzI+KFN0cmluZ1ZpZXcoYi50b1N0cmluZygp
KS5yZXZlcnNlQ29kZVBvaW50cygpLCB7MHhERDU1fSkpOworICAgIEVYUEVDVF9UUlVFKGNvbXBh
cmVMb29wSXRlcmF0aW9uczxVQ2hhcj4oU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLnJldmVyc2VD
b2RlVW5pdHMoKSwgezB4REQ1NX0pKTsKIAogICAgIGJ1aWxkKGIsIHsweEQ4MDAsICdoJ30pOyAv
LyBMZWFkaW5nIHN1cnJvZ2F0ZSBmb2xsb3dlZCBieSBub24tc3Vycm9nYXRlCi0gICAgRVhQRUNU
X1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2Rl
UG9pbnRzKCksIHsweEQ4MDAsICdoJ30pKTsKLSAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0
ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVVbml0cygpLCB7MHhEODAwLCAn
aCd9KSk7CisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyMzI+KFN0
cmluZ1ZpZXcoYi50b1N0cmluZygpKS5yZXZlcnNlQ29kZVBvaW50cygpLCB7J2gnLCAweEQ4MDB9
KSk7CisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyPihTdHJpbmdW
aWV3KGIudG9TdHJpbmcoKSkucmV2ZXJzZUNvZGVVbml0cygpLCB7J2gnLCAweEQ4MDB9KSk7CiAK
ICAgICBidWlsZChiLCB7MHgwMzA2fSk7IC8vICJDT01CSU5JTkcgQlJFVkUiCi0gICAgRVhQRUNU
X1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2Rl
UG9pbnRzKCksIHsweDAzMDZ9KSk7Ci0gICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRp
b25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlVW5pdHMoKSwgezB4MDMwNn0pKTsKKyAg
ICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnM8VUNoYXIzMj4oU3RyaW5nVmlldyhi
LnRvU3RyaW5nKCkpLnJldmVyc2VDb2RlUG9pbnRzKCksIHsweDAzMDZ9KSk7CisgICAgRVhQRUNU
X1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyPihTdHJpbmdWaWV3KGIudG9TdHJpbmco
KSkucmV2ZXJzZUNvZGVVbml0cygpLCB7MHgwMzA2fSkpOwogCiAgICAgYnVpbGQoYiwgezB4MDMw
NiwgMHhEODAwLCAweERENTUsICdoJywgJ2UnLCAnbCcsICdvJ30pOyAvLyBNaXggb2Ygc2luZ2xl
IGNvZGUgdW5pdCBhbmQgbXVsdGkgY29kZSB1bml0IGNvZGUgcG9pbnRzCi0gICAgRVhQRUNUX1RS
VUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlUG9p
bnRzKCksIHsweDAzMDYsIDB4MTAxNTUsICdoJywgJ2UnLCAnbCcsICdvJ30pKTsKLSAgICBFWFBF
Q1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNv
ZGVVbml0cygpLCB7MHgwMzA2LCAweEQ4MDAsIDB4REQ1NSwgJ2gnLCAnZScsICdsJywgJ28nfSkp
OworICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9uczxVQ2hhcjMyPihTdHJpbmdW
aWV3KGIudG9TdHJpbmcoKSkucmV2ZXJzZUNvZGVQb2ludHMoKSwgeydvJywgJ2wnLCAnZScsICdo
JywgMHgxMDE1NSwgMHgwMzA2fSkpOworICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0
aW9uczxVQ2hhcj4oU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLnJldmVyc2VDb2RlVW5pdHMoKSwg
eydvJywgJ2wnLCAnZScsICdoJywgMHhERDU1LCAweEQ4MDAsIDB4MDMwNn0pKTsKIH0KIAogVEVT
VChXVEYsIFN0cmluZ1ZpZXdFcXVhbElnbm9yaW5nQVNDSUlDYXNlQmFzaWMpCg==
</data>
<flag name="review"
          id="274929"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250111</attachid>
            <date>2015-04-03 17:39:20 -0700</date>
            <delta_ts>2015-04-03 17:39:20 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-143389-20150403173834.patch</filename>
            <type>text/plain</type>
            <size>30345</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMzM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDE4ODFhZGU1OWUxMDA5NmFlYjljMTA0
MmRkZTU4N2VlYmRkMjczNWEuLjk0ZGUwODQ5MjUxYmEyNDlkNzc4NmQ3OTUyZTFiNzU0YzBhYzcz
OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTUtMDQtMDMgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBNaWdyYXRlIEZvbnRDYXNjYWRlJ3MgZXhw
YW5zaW9uIGZ1bmN0aW9ucyB0byB1c2UgU3RyaW5nVmlldyBpdGVyYXRvcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzM4OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW9zdGx5IGp1
c3QgbW92ZXMgZnVuY3Rpb25zIGFyb3VuZCwgYnV0IGl0IGFsc28gYWRkcyByZXZlcnNlIGl0ZXJh
dG9ycyB0byBTdHJpbmdWaWV3LgorCisgICAgICAgIFRlc3RzOiBXVEY6OlN0cmluZ1ZpZXdJdGVy
YXRvcnMgaW4gVGVzdFdlYktpdEFQSQorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nVmlldy5o
OgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjpDb2RlVW5pdHM6OkNvZGVVbml0cyk6CisgICAg
ICAgIChXVEY6OlN0cmluZ1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3I6Okl0ZXJhdG9yKToKKyAg
ICAgICAgKFdURjo6U3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3IqKToK
KyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJh
dG9yIT0pOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjpSZXZlcnNlQ29kZVVuaXRzOjpSZXZl
cnNlQ29kZVVuaXRzKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6UmV2ZXJzZUNvZGVVbml0
czo6SXRlcmF0b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6UmV2ZXJz
ZUNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXVEY6OlN0cmluZ1Zp
ZXc6OlJldmVyc2VDb2RlVW5pdHM6Okl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdU
Rjo6U3RyaW5nVmlldzo6UmV2ZXJzZUNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjpSZXZlcnNlQ29kZVBvaW50czo6UmV2ZXJzZUNvZGVQ
b2ludHMpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjpSZXZlcnNlQ29kZVBvaW50czo6SXRl
cmF0b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6UmV2ZXJzZUNvZGVQ
b2ludHM6Okl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjpS
ZXZlcnNlQ29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpT
dHJpbmdWaWV3OjpSZXZlcnNlQ29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorCiAy
MDE1LTA0LTAzICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgbm9uLWNvdW50aW5nIEJsb29tIGZpbHRlciBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGM2Nzk5ZDcwZTNmNjgyZDU3MTA2MzgzZjJlMWM4MmZjOWJiNWRlOGMuLjUwYzhiOTc3ZmMxN2Rl
OTM5MzkyY2NjOGUxYWRiY2YxOGFkMjc0ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAor
MjAxNS0wNC0wMyAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisg
ICAgICAgIE1pZ3JhdGUgRm9udENhc2NhZGUncyBleHBhbnNpb24gZnVuY3Rpb25zIHRvIHVzZSBT
dHJpbmdWaWV3IGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQzMzg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmUtdXNlIHRoZSBleGlzdGluZyBVVEYtMTYtc3BlY2lmaWMgY29tcGxleGl0
eSBmcm9tIFdURi4KKworICAgICAgICBObyBuZXcgV2ViQ29yZSB0ZXN0cyBiZWNhdXNlIHRoZXJl
IGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZUV4cGFuc2lvbkNoYXJhY3Rl
cik6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6bGVhZGluZ0V4cGFuc2lvbk9w
cG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjp0cmFpbGluZ0V4cGFu
c2lvbk9wcG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmg6CisKIDIwMTUtMDQtMDMgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbQ29udGVudCBFeHRlbnNpb25z
XSBBZGQgbWVtb3J5IHJlcG9ydGluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nVmlldy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKaW5kZXggZDlj
ZTc0YzhhYTIxMjRiZDYyMTgzYWE5NjY4NzAwYzk5ODZlYTc0MC4uYjM0Y2Y4YTY0ODk2MzM0ODI4
NjIwZWEwMDc5YjRjMjYxMTRmMjVlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdWaWV3LmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKQEAgLTcx
LDEyICs3MSwyMiBAQCBwdWJsaWM6CiAKICAgICBVQ2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKIAorICAgIC8vIE5vdGUgdGhhdCB0aGUgaXRlcmF0b3JzIHlvdSBnZXQgZnJv
bSB0aGVzZSBmb3VyIGNsYXNzZXMgYXJlIGlucHV0IGl0ZXJhdG9ycworICAgIC8vIChodHRwOi8v
ZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L0lucHV0SXRlcmF0b3IpIGJ1dCBhcmUg
ZXZlbiBmdXJ0aGVyCisgICAgLy8gcmVzdHJpY3RlZCBiZWNhdXNlIHlvdSBtdXN0IGFsd2F5cyBk
ZXJlZmVyZW5jZSBhbmQgdGhlbiBpbmNyZW1lbnQgYmVmb3JlCisgICAgLy8gZGVyZWZlcmVuY2lu
ZyBhZ2Fpbi4KICAgICBjbGFzcyBDb2RlVW5pdHM7CiAgICAgQ29kZVVuaXRzIGNvZGVVbml0cygp
IGNvbnN0OwogCisgICAgY2xhc3MgUmV2ZXJzZUNvZGVVbml0czsKKyAgICBSZXZlcnNlQ29kZVVu
aXRzIHJldmVyc2VDb2RlVW5pdHMoKSBjb25zdDsKKwogICAgIGNsYXNzIENvZGVQb2ludHM7CiAg
ICAgQ29kZVBvaW50cyBjb2RlUG9pbnRzKCkgY29uc3Q7CiAKKyAgICBjbGFzcyBSZXZlcnNlQ29k
ZVBvaW50czsKKyAgICBSZXZlcnNlQ29kZVBvaW50cyByZXZlcnNlQ29kZVBvaW50cygpIGNvbnN0
OworCiAgICAgYm9vbCBpczhCaXQoKSBjb25zdDsKICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVy
czgoKSBjb25zdDsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkgY29uc3Q7CkBAIC01
MDUsOSArNTE1LDkgQEAgaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdW
aWV3IGEsIFN0cmluZ1ZpZXcgYikKICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZUNv
bW1vbihhLCBiKTsKIH0KIAotY2xhc3MgU3RyaW5nVmlldzo6Q29kZVBvaW50cyB7CitjbGFzcyBT
dHJpbmdWaWV3OjpDb2RlVW5pdHMgewogcHVibGljOgotICAgIGV4cGxpY2l0IENvZGVQb2ludHMo
Y29uc3QgU3RyaW5nVmlldyYpOworICAgIGV4cGxpY2l0IENvZGVVbml0cyhjb25zdCBTdHJpbmdW
aWV3Jik7CiAKICAgICBjbGFzcyBJdGVyYXRvcjsKICAgICBJdGVyYXRvciBiZWdpbigpIGNvbnN0
OwpAQCAtNTE3LDkgKzUyNyw1MSBAQCBwcml2YXRlOgogICAgIFN0cmluZ1ZpZXcgbV9zdHJpbmdW
aWV3OwogfTsKIAotY2xhc3MgU3RyaW5nVmlldzo6Q29kZVVuaXRzIHsKK2NsYXNzIFN0cmluZ1Zp
ZXc6OkNvZGVVbml0czo6SXRlcmF0b3IgewogcHVibGljOgotICAgIGV4cGxpY2l0IENvZGVVbml0
cyhjb25zdCBTdHJpbmdWaWV3Jik7CisgICAgSXRlcmF0b3IoY29uc3QgU3RyaW5nVmlldyYsIHVu
c2lnbmVkIGluZGV4KTsKKworICAgIFVDaGFyIG9wZXJhdG9yKigpIGNvbnN0OworICAgIEl0ZXJh
dG9yJiBvcGVyYXRvcisrKCk7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3Im
KSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBjb25zdCBTdHJpbmdWaWV3JiBtX3N0cmluZ1ZpZXc7CisgICAgdW5zaWdu
ZWQgbV9pbmRleDsKK307CisKK2NsYXNzIFN0cmluZ1ZpZXc6OlJldmVyc2VDb2RlVW5pdHMgewor
cHVibGljOgorICAgIGV4cGxpY2l0IFJldmVyc2VDb2RlVW5pdHMoY29uc3QgU3RyaW5nVmlldyYp
OworCisgICAgY2xhc3MgSXRlcmF0b3I7CisgICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKKyAg
ICBJdGVyYXRvciBlbmQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTdHJpbmdWaWV3IG1fc3Ry
aW5nVmlldzsKK307CisKK2NsYXNzIFN0cmluZ1ZpZXc6OlJldmVyc2VDb2RlVW5pdHM6Okl0ZXJh
dG9yIHsKK3B1YmxpYzoKKyAgICBJdGVyYXRvcihjb25zdCBTdHJpbmdWaWV3JiwgdW5zaWduZWQg
aW5kZXgpOworCisgICAgVUNoYXIgb3BlcmF0b3IqKCkgY29uc3Q7CisgICAgSXRlcmF0b3ImIG9w
ZXJhdG9yKysoKTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYpIGNvbnN0
OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYpIGNvbnN0OworCitwcml2YXRl
OgorICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG1fc3RyaW5nVmlldzsKKyAgICB1bnNpZ25lZCBtX2lu
ZGV4OworfTsKKworY2xhc3MgU3RyaW5nVmlldzo6Q29kZVBvaW50cyB7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgQ29kZVBvaW50cyhjb25zdCBTdHJpbmdWaWV3Jik7CiAKICAgICBjbGFzcyBJdGVy
YXRvcjsKICAgICBJdGVyYXRvciBiZWdpbigpIGNvbnN0OwpAQCAtNTQ3LDExICs1OTksMjMgQEAg
cHJpdmF0ZToKICNlbmRpZgogfTsKIAotY2xhc3MgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVy
YXRvciB7CitjbGFzcyBTdHJpbmdWaWV3OjpSZXZlcnNlQ29kZVBvaW50cyB7CitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgUmV2ZXJzZUNvZGVQb2ludHMoY29uc3QgU3RyaW5nVmlldyYpOworCisgICAg
Y2xhc3MgSXRlcmF0b3I7CisgICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKKyAgICBJdGVyYXRv
ciBlbmQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTdHJpbmdWaWV3IG1fc3RyaW5nVmlldzsK
K307CisKK2NsYXNzIFN0cmluZ1ZpZXc6OlJldmVyc2VDb2RlUG9pbnRzOjpJdGVyYXRvciB7CiBw
dWJsaWM6CiAgICAgSXRlcmF0b3IoY29uc3QgU3RyaW5nVmlldyYsIHVuc2lnbmVkIGluZGV4KTsK
IAotICAgIFVDaGFyIG9wZXJhdG9yKigpIGNvbnN0OworICAgIFVDaGFyMzIgb3BlcmF0b3IqKCkg
Y29uc3Q7CiAgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKIAogICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBJdGVyYXRvciYpIGNvbnN0OwpAQCAtNTU5LDE3ICs2MjMsMTA2IEBAIHB1YmxpYzoK
IAogcHJpdmF0ZToKICAgICBjb25zdCBTdHJpbmdWaWV3JiBtX3N0cmluZ1ZpZXc7Ci0gICAgdW5z
aWduZWQgbV9pbmRleDsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1faW5kZXg7CisjaWYgIUFTU0VS
VF9ESVNBQkxFRAorICAgIG11dGFibGUgYm9vbCBtX2FscmVhZHlJbmNyZW1lbnRlZCB7IGZhbHNl
IH07CisjZW5kaWYKIH07CiAKLWlubGluZSBhdXRvIFN0cmluZ1ZpZXc6OmNvZGVQb2ludHMoKSBj
b25zdCAtPiBDb2RlUG9pbnRzCitpbmxpbmUgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpDb2RlVW5p
dHMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldykKKyAgICA6IG1fc3RyaW5nVmlldyhzdHJp
bmdWaWV3KQogewotICAgIHJldHVybiBDb2RlUG9pbnRzKCp0aGlzKTsKIH0KIAotaW5saW5lIGF1
dG8gU3RyaW5nVmlldzo6Y29kZVVuaXRzKCkgY29uc3QgLT4gQ29kZVVuaXRzCitpbmxpbmUgYXV0
byBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6OmJlZ2luKCkgY29uc3QgLT4gSXRlcmF0b3IKIHsKLSAg
ICByZXR1cm4gQ29kZVVuaXRzKCp0aGlzKTsKKyAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdW
aWV3LCAwKTsKK30KKworaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVVuaXRzOjplbmQoKSBj
b25zdCAtPiBJdGVyYXRvcgoreworICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIG1f
c3RyaW5nVmlldy5sZW5ndGgoKSk7Cit9CisKK2lubGluZSBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6
Okl0ZXJhdG9yOjpJdGVyYXRvcihjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCB1bnNpZ25l
ZCBpbmRleCkKKyAgICA6IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQorICAgICwgbV9pbmRleChp
bmRleCkKK3sKK30KKworaW5saW5lIFVDaGFyIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0
b3I6Om9wZXJhdG9yKigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RyaW5nVmlld1ttX2luZGV4
XTsKK30KKworaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3Bl
cmF0b3IrKygpIC0+IEl0ZXJhdG9yJgoreworICAgICsrbV9pbmRleDsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK2lubGluZSBib29sIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3I6Om9w
ZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAoreworICAgIEFTU0VSVCgmbV9z
dHJpbmdWaWV3ID09ICZvdGhlci5tX3N0cmluZ1ZpZXcpOworICAgIHJldHVybiBtX2luZGV4ID09
IG90aGVyLm1faW5kZXg7Cit9CisKK2lubGluZSBib29sIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6
SXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAoreworICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKK30KKworaW5saW5lIFN0cmluZ1ZpZXc6OlJldmVy
c2VDb2RlVW5pdHM6OlJldmVyc2VDb2RlVW5pdHMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmll
dykKKyAgICA6IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQoreworfQorCitpbmxpbmUgYXV0byBT
dHJpbmdWaWV3OjpSZXZlcnNlQ29kZVVuaXRzOjpiZWdpbigpIGNvbnN0IC0+IEl0ZXJhdG9yCit7
CisgICAgcmV0dXJuIEl0ZXJhdG9yKG1fc3RyaW5nVmlldywgbV9zdHJpbmdWaWV3Lmxlbmd0aCgp
KTsKK30KKworaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6UmV2ZXJzZUNvZGVVbml0czo6ZW5kKCkg
Y29uc3QgLT4gSXRlcmF0b3IKK3sKKyAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCAw
KTsKK30KKworaW5saW5lIFN0cmluZ1ZpZXc6OlJldmVyc2VDb2RlVW5pdHM6Okl0ZXJhdG9yOjpJ
dGVyYXRvcihjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCB1bnNpZ25lZCBpbmRleCkKKyAg
ICA6IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQorICAgICwgbV9pbmRleChpbmRleCkKK3sKK30K
KworaW5saW5lIFVDaGFyIFN0cmluZ1ZpZXc6OlJldmVyc2VDb2RlVW5pdHM6Okl0ZXJhdG9yOjpv
cGVyYXRvciooKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmluZ1ZpZXdbbV9pbmRleCAtIDFd
OworfQorCitpbmxpbmUgYXV0byBTdHJpbmdWaWV3OjpSZXZlcnNlQ29kZVVuaXRzOjpJdGVyYXRv
cjo6b3BlcmF0b3IrKygpIC0+IEl0ZXJhdG9yJgoreworICAgIC0tbV9pbmRleDsKKyAgICByZXR1
cm4gKnRoaXM7Cit9CisKK2lubGluZSBib29sIFN0cmluZ1ZpZXc6OlJldmVyc2VDb2RlVW5pdHM6
Okl0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKK3sKKyAg
ICBBU1NFUlQoJm1fc3RyaW5nVmlldyA9PSAmb3RoZXIubV9zdHJpbmdWaWV3KTsKKyAgICByZXR1
cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworfQorCitpbmxpbmUgYm9vbCBTdHJpbmdWaWV3
OjpSZXZlcnNlQ29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYg
b3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworfQorCitpbmxp
bmUgYXV0byBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpiZWdpbigpIGNvbnN0IC0+IEl0ZXJhdG9y
Cit7CisgICAgcmV0dXJuIEl0ZXJhdG9yKG1fc3RyaW5nVmlldywgMCk7Cit9CisKK2lubGluZSBh
dXRvIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6OmVuZCgpIGNvbnN0IC0+IEl0ZXJhdG9yCit7Cisg
ICAgcmV0dXJuIEl0ZXJhdG9yKG1fc3RyaW5nVmlldywgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpKTsK
IH0KIAogaW5saW5lIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6OkNvZGVQb2ludHMoY29uc3QgU3Ry
aW5nVmlldyYgc3RyaW5nVmlldykKQEAgLTYxOSw1NyArNzcyLDgxIEBAIGlubGluZSBib29sIFN0
cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9y
JiBvdGhlcikKICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiB9CiAKLWlubGluZSBhdXRv
IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6OmJlZ2luKCkgY29uc3QgLT4gSXRlcmF0b3IKK2lubGlu
ZSBhdXRvIFN0cmluZ1ZpZXc6OlJldmVyc2VDb2RlUG9pbnRzOjpiZWdpbigpIGNvbnN0IC0+IEl0
ZXJhdG9yCiB7Ci0gICAgcmV0dXJuIEl0ZXJhdG9yKG1fc3RyaW5nVmlldywgMCk7CisgICAgcmV0
dXJuIEl0ZXJhdG9yKG1fc3RyaW5nVmlldywgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpKTsKIH0KIAot
aW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVBvaW50czo6ZW5kKCkgY29uc3QgLT4gSXRlcmF0
b3IKK2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6OlJldmVyc2VDb2RlUG9pbnRzOjplbmQoKSBjb25z
dCAtPiBJdGVyYXRvcgogewotICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIG1fc3Ry
aW5nVmlldy5sZW5ndGgoKSk7CisgICAgcmV0dXJuIEl0ZXJhdG9yKG1fc3RyaW5nVmlldywgMCk7
CiB9CiAKLWlubGluZSBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6OkNvZGVVbml0cyhjb25zdCBTdHJp
bmdWaWV3JiBzdHJpbmdWaWV3KQoraW5saW5lIFN0cmluZ1ZpZXc6OlJldmVyc2VDb2RlUG9pbnRz
OjpSZXZlcnNlQ29kZVBvaW50cyhjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3KQogICAgIDog
bV9zdHJpbmdWaWV3KHN0cmluZ1ZpZXcpCiB7CiB9CiAKLWlubGluZSBTdHJpbmdWaWV3OjpDb2Rl
VW5pdHM6Okl0ZXJhdG9yOjpJdGVyYXRvcihjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCB1
bnNpZ25lZCBpbmRleCkKK2lubGluZSBTdHJpbmdWaWV3OjpSZXZlcnNlQ29kZVBvaW50czo6SXRl
cmF0b3I6Okl0ZXJhdG9yKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcsIHVuc2lnbmVkIGlu
ZGV4KQogICAgIDogbV9zdHJpbmdWaWV3KHN0cmluZ1ZpZXcpCiAgICAgLCBtX2luZGV4KGluZGV4
KQogewogfQogCi1pbmxpbmUgYXV0byBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6Okl0ZXJhdG9yOjpv
cGVyYXRvcisrKCkgLT4gSXRlcmF0b3ImCitpbmxpbmUgYXV0byBTdHJpbmdWaWV3OjpSZXZlcnNl
Q29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKSAtPiBJdGVyYXRvciYKIHsKLSAgICAr
K21faW5kZXg7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEFTU0VSVChtX2FscmVhZHlJbmNy
ZW1lbnRlZCk7CisgICAgbV9hbHJlYWR5SW5jcmVtZW50ZWQgPSBmYWxzZTsKKyNlbmRpZgogICAg
IHJldHVybiAqdGhpczsKIH0KIAotaW5saW5lIFVDaGFyIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6
SXRlcmF0b3I6Om9wZXJhdG9yKigpIGNvbnN0CitpbmxpbmUgVUNoYXIzMiBTdHJpbmdWaWV3OjpS
ZXZlcnNlQ29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9yKigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fc3RyaW5nVmlld1ttX2luZGV4XTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgQVNT
RVJUKCFtX2FscmVhZHlJbmNyZW1lbnRlZCk7CisgICAgbV9hbHJlYWR5SW5jcmVtZW50ZWQgPSB0
cnVlOworI2VuZGlmCisKKyAgICBpZiAobV9zdHJpbmdWaWV3LmlzOEJpdCgpKQorICAgICAgICBy
ZXR1cm4gbV9zdHJpbmdWaWV3LmNoYXJhY3RlcnM4KClbLS1tX2luZGV4XTsKKworICAgIFVDaGFy
MzIgY29kZVBvaW50OworICAgIFUxNl9QUkVWKG1fc3RyaW5nVmlldy5jaGFyYWN0ZXJzMTYoKSwg
MCwgbV9pbmRleCwgY29kZVBvaW50KTsKKyAgICByZXR1cm4gY29kZVBvaW50OwogfQogCi1pbmxp
bmUgYm9vbCBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6Okl0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0
IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKK2lubGluZSBib29sIFN0cmluZ1ZpZXc6OlJldmVyc2VD
b2RlUG9pbnRzOjpJdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKCZtX3N0cmluZ1ZpZXcgPT0gJm90aGVyLm1fc3RyaW5nVmlldyk7
CisgICAgQVNTRVJUKCFtX2FscmVhZHlJbmNyZW1lbnRlZCk7CiAgICAgcmV0dXJuIG1faW5kZXgg
PT0gb3RoZXIubV9pbmRleDsKIH0KIAotaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6Q29kZVVuaXRz
OjpJdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0Citpbmxp
bmUgYm9vbCBTdHJpbmdWaWV3OjpSZXZlcnNlQ29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9y
IT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAogewogICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKIH0KIAotaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpiZWdpbigp
IGNvbnN0IC0+IEl0ZXJhdG9yCitpbmxpbmUgYXV0byBTdHJpbmdWaWV3Ojpjb2RlVW5pdHMoKSBj
b25zdCAtPiBDb2RlVW5pdHMKIHsKLSAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCAw
KTsKKyAgICByZXR1cm4gQ29kZVVuaXRzKCp0aGlzKTsKIH0KIAotaW5saW5lIGF1dG8gU3RyaW5n
Vmlldzo6Q29kZVVuaXRzOjplbmQoKSBjb25zdCAtPiBJdGVyYXRvcgoraW5saW5lIGF1dG8gU3Ry
aW5nVmlldzo6cmV2ZXJzZUNvZGVVbml0cygpIGNvbnN0IC0+IFJldmVyc2VDb2RlVW5pdHMKIHsK
LSAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkp
OworICAgIHJldHVybiBSZXZlcnNlQ29kZVVuaXRzKCp0aGlzKTsKK30KKworaW5saW5lIGF1dG8g
U3RyaW5nVmlldzo6Y29kZVBvaW50cygpIGNvbnN0IC0+IENvZGVQb2ludHMKK3sKKyAgICByZXR1
cm4gQ29kZVBvaW50cygqdGhpcyk7Cit9CisKK2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6OnJldmVy
c2VDb2RlUG9pbnRzKCkgY29uc3QgLT4gUmV2ZXJzZUNvZGVQb2ludHMKK3sKKyAgICByZXR1cm4g
UmV2ZXJzZUNvZGVQb2ludHMoKnRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA2
ODA2ZTZmZDg0YTRlOGY3NTE3MWE5NDRiNzAzZTIwY2ZlNWU5NjlkLi42NTA5N2FhMGY4YzdjODBi
MTQ0YzMwYmVkN2Q1N2Q5ZTZmODgwNDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCkBAIC0xMDA1LDQ0ICsxMDA1LDI5IEBAIGJvb2wg
Rm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzMiBjKQogICAgIHJldHVy
biBpc0NKS0lkZW9ncmFwaChjKTsKIH0KIAotc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBGb250
Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgRXhwYW5z
aW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IpCitpbmxpbmUgdW5zaWduZWQgRm9udENhc2Nh
ZGU6OmhhbmRsZUV4cGFuc2lvbkNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCYgaXNB
ZnRlckV4cGFuc2lvbikKIHsKLSAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgYm9vbCBpc0Fm
dGVyRXhwYW5zaW9uID0gKGV4cGFuc2lvbkJlaGF2aW9yICYgTGVhZGluZ0V4cGFuc2lvbk1hc2sp
ID09IEZvcmJpZExlYWRpbmdFeHBhbnNpb247Ci0gICAgaWYgKChleHBhbnNpb25CZWhhdmlvciAm
IExlYWRpbmdFeHBhbnNpb25NYXNrKSA9PSBGb3JjZUxlYWRpbmdFeHBhbnNpb24pIHsKLSAgICAg
ICAgKytjb3VudDsKKyAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpIHsKICAgICAgICAg
aXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBp
ZiAoZGlyZWN0aW9uID09IExUUikgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcnNbaV0p
KSB7Ci0gICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhw
YW5zaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGlzQWZ0
ZXJFeHBhbnNpb24gPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBsZW5ndGg7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgICAgIGlmICh0cmVh
dEFzU3BhY2UoY2hhcmFjdGVyc1tpIC0gMV0pKSB7Ci0gICAgICAgICAgICAgICAgY291bnQrKzsK
LSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBpZiAoIWlzQWZ0ZXJFeHBhbnNpb24gJiYgKGV4cGFuc2lvbkJlaGF2aW9y
ICYgVHJhaWxpbmdFeHBhbnNpb25NYXNrKSA9PSBGb3JjZVRyYWlsaW5nRXhwYW5zaW9uKSB7Ci0g
ICAgICAgICsrY291bnQ7CisgICAgc3RhdGljIGJvb2wgZXhwYW5kQXJvdW5kSWRlb2dyYXBocyA9
IGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCk7CisgICAgaWYgKGV4cGFu
ZEFyb3VuZElkZW9ncmFwaHMgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSB7
CisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gaXNBZnRlckV4cGFuc2lvbiA/IDEgOiAyOwogICAg
ICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGlzQWZ0ZXJFeHBh
bnNpb24gJiYgKGV4cGFuc2lvbkJlaGF2aW9yICYgVHJhaWxpbmdFeHBhbnNpb25NYXNrKSA9PSBG
b3JiaWRUcmFpbGluZ0V4cGFuc2lvbikgewotICAgICAgICAtLWNvdW50OwotICAgICAgICBpc0Fm
dGVyRXhwYW5zaW9uID0gZmFsc2U7CisgICAgICAgIHJldHVybiBjb3VudDsKICAgICB9Ci0gICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGNvdW50LCBpc0FmdGVyRXhwYW5zaW9uKTsKKyAgICBpc0Fm
dGVyRXhwYW5zaW9uID0gZmFsc2U7CisgICAgcmV0dXJuIDA7CiB9CiAKLXN0ZDo6cGFpcjx1bnNp
Z25lZCwgYm9vbD4gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5h
bChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKQorc3RkOjpwYWly
PHVuc2lnbmVkLCBib29sPiBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChj
b25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgRXhw
YW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IpCiB7Ci0gICAgc3RhdGljIGJvb2wgZXhw
YW5kQXJvdW5kSWRlb2dyYXBocyA9IGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhU
ZXh0KCk7CisgICAgLy8gRm9yIGVhY2ggY2hhcmFjdGVyLCBpdGVyYXRpbmcgZnJvbSBsZWZ0IHRv
IHJpZ2h0OgorICAgIC8vICAgSWYgaXQgaXMgcmVjb2duaXplZCBhcyBhIHNwYWNlLCBpbnNlcnQg
YW4gb3Bwb3J0dW5pdHkgYWZ0ZXIgaXQKKyAgICAvLyAgIElmIGl0IGlzIGFuIGlkZW9ncmFwaCwg
aW5zZXJ0IG9uZSBvcHBvcnR1bml0eSBiZWZvcmUgaXQgYW5kIG9uZSBvcHBvcnR1bml0eSBhZnRl
ciBpdAorICAgIC8vIERvIHRoaXMgc3VjaCBhIHdheSBzbyB0aGF0IHRoZXJlIGFyZSBub3QgdHdv
IG9wcG9ydHVuaXRpZXMgbmV4dCB0byBlYWNoIG90aGVyLgorICAgIAogICAgIHVuc2lnbmVkIGNv
dW50ID0gMDsKICAgICBib29sIGlzQWZ0ZXJFeHBhbnNpb24gPSAoZXhwYW5zaW9uQmVoYXZpb3Ig
JiBMZWFkaW5nRXhwYW5zaW9uTWFzaykgPT0gRm9yYmlkTGVhZGluZ0V4cGFuc2lvbjsKICAgICBp
ZiAoKGV4cGFuc2lvbkJlaGF2aW9yICYgTGVhZGluZ0V4cGFuc2lvbk1hc2spID09IEZvcmNlTGVh
ZGluZ0V4cGFuc2lvbikgewpAQCAtMTA1MCw0NyArMTAzNSwxMSBAQCBzdGQ6OnBhaXI8dW5zaWdu
ZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwo
Y29uc3QgVQogICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKICAgICB9CiAgICAgaWYg
KGRpcmVjdGlvbiA9PSBMVFIpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2ld
OwotICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAg
ICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChVMTZfSVNfTEVBRChjaGFyYWN0ZXIpICYmIGkgKyAxIDwgbGVuZ3RoICYmIFUxNl9JU19UUkFJ
TChjaGFyYWN0ZXJzW2kgKyAxXSkpIHsKLSAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBVMTZf
R0VUX1NVUFBMRU1FTlRBUlkoY2hhcmFjdGVyLCBjaGFyYWN0ZXJzW2kgKyAxXSk7Ci0gICAgICAg
ICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV4cGFuZEFyb3Vu
ZElkZW9ncmFwaHMgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQotICAgICAgICAgICAgICAgICAgICBj
b3VudCsrOwotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaXNBZnRl
ckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAgICAgIH0KKyAg
ICAgICAgZm9yIChVQ2hhcjMyIGNoYXJhY3RlciA6IHN0cmluZ1ZpZXcuY29kZVBvaW50cygpKQor
ICAgICAgICAgICAgY291bnQgKz0gaGFuZGxlRXhwYW5zaW9uQ2hhcmFjdGVyKGNoYXJhY3Rlciwg
aXNBZnRlckV4cGFuc2lvbik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IGxlbmd0aDsgaSA+IDA7IC0taSkgewotICAgICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBj
aGFyYWN0ZXJzW2kgLSAxXTsKLSAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVy
KSkgewotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaXNBZnRlckV4
cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoVTE2X0lTX1RSQUlMKGNoYXJhY3RlcikgJiYgaSA+IDEgJiYgVTE2
X0lTX0xFQUQoY2hhcmFjdGVyc1tpIC0gMl0pKSB7Ci0gICAgICAgICAgICAgICAgY2hhcmFjdGVy
ID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNoYXJhY3RlcnNbaSAtIDJdLCBjaGFyYWN0ZXIpOwot
ICAgICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChleHBh
bmRBcm91bmRJZGVvZ3JhcGhzICYmIGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkg
ewotICAgICAgICAgICAgICAgIGlmICghaXNBZnRlckV4cGFuc2lvbikKLSAgICAgICAgICAgICAg
ICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAg
IGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOwotICAgICAg
ICB9CisgICAgICAgIGZvciAoVUNoYXIzMiBjaGFyYWN0ZXIgOiBzdHJpbmdWaWV3LnJldmVyc2VD
b2RlUG9pbnRzKCkpCisgICAgICAgICAgICBjb3VudCArPSBoYW5kbGVFeHBhbnNpb25DaGFyYWN0
ZXIoY2hhcmFjdGVyLCBpc0FmdGVyRXhwYW5zaW9uKTsKICAgICB9CiAgICAgaWYgKCFpc0FmdGVy
RXhwYW5zaW9uICYmIChleHBhbnNpb25CZWhhdmlvciAmIFRyYWlsaW5nRXhwYW5zaW9uTWFzaykg
PT0gRm9yY2VUcmFpbGluZ0V4cGFuc2lvbikgewogICAgICAgICArK2NvdW50OwpAQCAtMTEwMiwz
MiArMTA1MSwxMiBAQCBzdGQ6OnBhaXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgVQogICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihjb3VudCwgaXNBZnRlckV4cGFuc2lvbik7CiB9CiAKLXN0ZDo6cGFpcjx1bnNpZ25l
ZCwgYm9vbD4gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoY29uc3QgU3Ry
aW5nVmlldyYgc3RyaW5nVmlldywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEV4cGFuc2lvbkJl
aGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKQotewotICAgIC8vIEZvciBlYWNoIGNoYXJhY3Rlciwg
aXRlcmF0aW5nIGZyb20gbGVmdCB0byByaWdodDoKLSAgICAvLyAgIElmIGl0IGlzIHJlY29nbml6
ZWQgYXMgYSBzcGFjZSwgaW5zZXJ0IGFuIG9wcG9ydHVuaXR5IGFmdGVyIGl0Ci0gICAgLy8gICBJ
ZiBpdCBpcyBhbiBpZGVvZ3JhcGgsIGluc2VydCBvbmUgb3Bwb3J0dW5pdHkgYmVmb3JlIGl0IGFu
ZCBvbmUgb3Bwb3J0dW5pdHkgYWZ0ZXIgaXQKLSAgICAvLyBEbyB0aGlzIHN1Y2ggYSB3YXkgc28g
dGhhdCB0aGVyZSBhcmUgbm90IHR3byBvcHBvcnR1bml0aWVzIG5leHQgdG8gZWFjaCBvdGhlci4K
LSAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnM4KCksIHN0cmluZ1Zp
ZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgZXhwYW5zaW9uQmVoYXZpb3IpOwotICAgIHJldHVybiBl
eHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoc3RyaW5nVmlldy5jaGFyYWN0ZXJzMTYo
KSwgc3RyaW5nVmlldy5sZW5ndGgoKSwgZGlyZWN0aW9uLCBleHBhbnNpb25CZWhhdmlvcik7Ci19
Ci0KIGJvb2wgRm9udENhc2NhZGU6OmxlYWRpbmdFeHBhbnNpb25PcHBvcnR1bml0eShjb25zdCBT
dHJpbmdWaWV3JiBzdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBp
ZiAoIXN0cmluZ1ZpZXcubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFVD
aGFyMzIgaW5pdGlhbENoYXJhY3RlcjsKLSAgICBpZiAoZGlyZWN0aW9uID09IExUUikgewotICAg
ICAgICBpbml0aWFsQ2hhcmFjdGVyID0gc3RyaW5nVmlld1swXTsKLSAgICAgICAgaWYgKFUxNl9J
U19MRUFEKGluaXRpYWxDaGFyYWN0ZXIpICYmIHN0cmluZ1ZpZXcubGVuZ3RoKCkgPiAxICYmIFUx
Nl9JU19UUkFJTChzdHJpbmdWaWV3WzFdKSkKLSAgICAgICAgICAgIGluaXRpYWxDaGFyYWN0ZXIg
PSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoaW5pdGlhbENoYXJhY3Rlciwgc3RyaW5nVmlld1sxXSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW5pdGlhbENoYXJhY3RlciA9IHN0cmluZ1ZpZXdbc3Ry
aW5nVmlldy5sZW5ndGgoKSAtIDFdOwotICAgICAgICBpZiAoVTE2X0lTX1RSQUlMKGluaXRpYWxD
aGFyYWN0ZXIpICYmIHN0cmluZ1ZpZXcubGVuZ3RoKCkgPiAxICYmIFUxNl9JU19MRUFEKHN0cmlu
Z1ZpZXdbc3RyaW5nVmlldy5sZW5ndGgoKSAtIDJdKSkKLSAgICAgICAgICAgIGluaXRpYWxDaGFy
YWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoc3RyaW5nVmlld1tzdHJpbmdWaWV3Lmxlbmd0
aCgpIC0gMl0sIGluaXRpYWxDaGFyYWN0ZXIpOwotICAgIH0KKyAgICBVQ2hhcjMyIGluaXRpYWxD
aGFyYWN0ZXIgPSBkaXJlY3Rpb24gPT0gTFRSID8gKnN0cmluZ1ZpZXcuY29kZVBvaW50cygpLmJl
Z2luKCkgOiAqc3RyaW5nVmlldy5yZXZlcnNlQ29kZVBvaW50cygpLmJlZ2luKCk7CiAKICAgICBy
ZXR1cm4gY2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKSAmJiBpc0NKS0lk
ZW9ncmFwaE9yU3ltYm9sKGluaXRpYWxDaGFyYWN0ZXIpOwogfQpAQCAtMTEzNywxOCArMTA2Niw5
IEBAIGJvb2wgRm9udENhc2NhZGU6OnRyYWlsaW5nRXhwYW5zaW9uT3Bwb3J0dW5pdHkoY29uc3Qg
U3RyaW5nVmlldyYgc3RyaW5nVmlldywgVGV4CiAgICAgaWYgKCFzdHJpbmdWaWV3Lmxlbmd0aCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBVQ2hhcjMyIGZpbmFsQ2hhcmFjdGVyOwot
ICAgIGlmIChkaXJlY3Rpb24gPT0gTFRSKSB7Ci0gICAgICAgIGZpbmFsQ2hhcmFjdGVyID0gc3Ry
aW5nVmlld1tzdHJpbmdWaWV3Lmxlbmd0aCgpIC0gMV07Ci0gICAgICAgIGlmIChVMTZfSVNfVFJB
SUwoZmluYWxDaGFyYWN0ZXIpICYmIHN0cmluZ1ZpZXcubGVuZ3RoKCkgPiAxICYmIFUxNl9JU19M
RUFEKHN0cmluZ1ZpZXdbc3RyaW5nVmlldy5sZW5ndGgoKSAtIDJdKSkKLSAgICAgICAgICAgIGZp
bmFsQ2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKHN0cmluZ1ZpZXdbc3RyaW5nVmll
dy5sZW5ndGgoKSAtIDJdLCBmaW5hbENoYXJhY3Rlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
ZmluYWxDaGFyYWN0ZXIgPSBzdHJpbmdWaWV3WzBdOwotICAgICAgICBpZiAoVTE2X0lTX0xFQUQo
ZmluYWxDaGFyYWN0ZXIpICYmIHN0cmluZ1ZpZXcubGVuZ3RoKCkgPiAxICYmIFUxNl9JU19UUkFJ
TChzdHJpbmdWaWV3WzFdKSkKLSAgICAgICAgICAgIGZpbmFsQ2hhcmFjdGVyID0gVTE2X0dFVF9T
VVBQTEVNRU5UQVJZKGZpbmFsQ2hhcmFjdGVyLCBzdHJpbmdWaWV3WzFdKTsKLSAgICB9CisgICAg
VUNoYXIzMiBmaW5hbENoYXJhY3RlciA9IGRpcmVjdGlvbiA9PSBMVFIgPyAqc3RyaW5nVmlldy5y
ZXZlcnNlQ29kZVBvaW50cygpLmJlZ2luKCkgOiAqc3RyaW5nVmlldy5jb2RlUG9pbnRzKCkuYmVn
aW4oKTsKIAotICAgIHJldHVybiB0cmVhdEFzU3BhY2UoZmluYWxDaGFyYWN0ZXIpIHx8IChjYW5F
eHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpICYmIGlzQ0pLSWRlb2dyYXBoT3JT
eW1ib2woZmluYWxDaGFyYWN0ZXIpKTsKKyAgICByZXR1cm4gRm9udENhc2NhZGU6OnRyZWF0QXNT
cGFjZShmaW5hbENoYXJhY3RlcikgfHwgKGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBs
ZXhUZXh0KCkgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChmaW5hbENoYXJhY3RlcikpOwogfQog
CiBib29sIEZvbnRDYXNjYWRlOjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKFVDaGFyMzIgYykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCmluZGV4IDY2
YTM0ZTg4N2MxOWYyY2VhYjdhNjllODRlZDQxMWQ2MmZiYjk5N2IuLjkxZjVkNDI5MmVmYmJkZDJk
MDgyNjMwYTQ0YTY0NDA5NjRmYTUxMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGUuaApAQCAtMjQyLDkgKzI0Miw3IEBAIHByaXZhdGU6CiAgICAg
ZmxvYXQgZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNv
bnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7
CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYs
IGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKICAgICB2
b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgTGF5
b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0KLSAgICBz
dGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
SW50ZXJuYWwoY29uc3QgTENoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uLCBFeHBh
bnNpb25CZWhhdmlvcik7Ci0gICAgc3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0
aCwgVGV4dERpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IpOworICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYW5kbGVFeHBhbnNpb25DaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wmIGlzQWZ0
ZXJFeHBhbnNpb24pOwogCiAgICAgZnJpZW5kIHN0cnVjdCBXaWR0aEl0ZXJhdG9yOwogICAgIGZy
aWVuZCBjbGFzcyBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3OTUxZGEwOTk5ZTI0Y2U3Y2FhODM4
MTRjNWM1ZjA4YzY4YTZkMjZkLi42ZGUyMzg2OGU2NjA5MzBlYmE1OTU2MzgwN2ViMzE5Y2Q3YzIx
YTU3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTUtMDQtMDMgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxk
QGFwcGxlLmNvbT4KKworICAgICAgICBNaWdyYXRlIEZvbnRDYXNjYWRlJ3MgZXhwYW5zaW9uIGZ1
bmN0aW9ucyB0byB1c2UgU3RyaW5nVmlldyBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzM4OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3QgU3RyaW5nVmlldydzIHJldmVyc2UgaXRl
cmF0b3JzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5j
cHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjb21wYXJlTG9vcEl0ZXJhdGlvbnMpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTUtMDQtMDMgIENzYWJhIE9zenRyb2dv
bsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBydW4tanNjLXN0cmVzcy10ZXN0cyAt
LXJlbW90ZSBzaG91bGQgYWRkIGxpYmxsdm1Gb3JKU0Muc28gdG8gdGhlIGJ1bmRsZSBvbiBMaW51
eApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdWaWV3LmNwcAppbmRleCAx
NTNjZTU1NjUwMTliOWFhYTZkMTEwNDk1OWY0OTU5MmRjNDQyNmJkLi5kNjFkZDU5MzEzYTk2ZWFm
YmE2ZWVmMjVjYzgwNzQ4ZTRiY2ExZjBhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9TdHJpbmdWaWV3LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9TdHJpbmdWaWV3LmNwcApAQCAtNzgsMjIgKzc4LDE1IEBAIFRFU1QoV1RGLCBTdHJpbmdW
aWV3RW1wdHlWc051bGwpCiAgICAgICAgIFNVQ0NFRUQoKTsKIH0KIAotYm9vbCBjb21wYXJlTG9v
cEl0ZXJhdGlvbnMoU3RyaW5nVmlldzo6Q29kZVBvaW50cyBjb2RlUG9pbnRzLCBzdGQ6OnZlY3Rv
cjxVQ2hhcjMyPiBleHBlY3RlZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBDPgor
Ym9vbCBjb21wYXJlTG9vcEl0ZXJhdGlvbnMoQyBjb2RlUG9pbnRzLCBzdGQ6OnZlY3RvcjxUPiBl
eHBlY3RlZCkKIHsKLSAgICBzdGQ6OnZlY3RvcjxVQ2hhcjMyPiBhY3R1YWw7CisgICAgc3RkOjp2
ZWN0b3I8VD4gYWN0dWFsOwogICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiBjb2RlUG9pbnRzKQog
ICAgICAgICBhY3R1YWwucHVzaF9iYWNrKGNvZGVQb2ludCk7CiAgICAgcmV0dXJuIGFjdHVhbCA9
PSBleHBlY3RlZDsKIH0KIAotc3RhdGljIGJvb2wgY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmlu
Z1ZpZXc6OkNvZGVVbml0cyBjb2RlVW5pdHMsIHN0ZDo6dmVjdG9yPFVDaGFyPiBleHBlY3RlZCkK
LXsKLSAgICBzdGQ6OnZlY3RvcjxVQ2hhcj4gYWN0dWFsOwotICAgIGZvciAoYXV0byBjb2RlVW5p
dCA6IGNvZGVVbml0cykKLSAgICAgICAgYWN0dWFsLnB1c2hfYmFjayhjb2RlVW5pdCk7Ci0gICAg
cmV0dXJuIGFjdHVhbCA9PSBleHBlY3RlZDsKLX0KLQogc3RhdGljIHZvaWQgYnVpbGQoU3RyaW5n
QnVpbGRlciYgYnVpbGRlciwgc3RkOjp2ZWN0b3I8VUNoYXI+IGlucHV0KQogewogICAgIGJ1aWxk
ZXIuY2xlYXIoKTsKQEAgLTEwMyw0MyArOTYsODEgQEAgc3RhdGljIHZvaWQgYnVpbGQoU3RyaW5n
QnVpbGRlciYgYnVpbGRlciwgc3RkOjp2ZWN0b3I8VUNoYXI+IGlucHV0KQogCiBURVNUKFdURiwg
U3RyaW5nVmlld0l0ZXJhdG9ycykKIHsKLSAgICBjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5n
VmlldygpLmNvZGVQb2ludHMoKSwgeyB9KTsKLSAgICBjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3Ry
aW5nVmlldygpLmNvZGVVbml0cygpLCB7IH0pOworICAgIGNvbXBhcmVMb29wSXRlcmF0aW9uczxV
Q2hhcjMyPihTdHJpbmdWaWV3KCkuY29kZVBvaW50cygpLCB7IH0pOworICAgIGNvbXBhcmVMb29w
SXRlcmF0aW9uczxVQ2hhcj4oU3RyaW5nVmlldygpLmNvZGVVbml0cygpLCB7IH0pOwogCi0gICAg
Y29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXc6OmVtcHR5KCkuY29kZVBvaW50cygpLCB7
IH0pOwotICAgIGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3OjplbXB0eSgpLmNvZGVV
bml0cygpLCB7IH0pOworICAgIGNvbXBhcmVMb29wSXRlcmF0aW9uczxVQ2hhcjMyPihTdHJpbmdW
aWV3OjplbXB0eSgpLmNvZGVQb2ludHMoKSwgeyB9KTsKKyAgICBjb21wYXJlTG9vcEl0ZXJhdGlv
bnM8VUNoYXI+KFN0cmluZ1ZpZXc6OmVtcHR5KCkuY29kZVVuaXRzKCksIHsgfSk7CiAKLSAgICBj
b21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhTdHJpbmcoImhlbGxvIikpLmNvZGVQb2lu
dHMoKSwgeydoJywgJ2UnLCAnbCcsICdsJywgJ28nfSk7Ci0gICAgY29tcGFyZUxvb3BJdGVyYXRp
b25zKFN0cmluZ1ZpZXcoU3RyaW5nKCJoZWxsbyIpKS5jb2RlVW5pdHMoKSwgeydoJywgJ2UnLCAn
bCcsICdsJywgJ28nfSk7CisgICAgY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyMzI+KFN0cmlu
Z1ZpZXcoU3RyaW5nKCJoZWxsbyIpKS5jb2RlUG9pbnRzKCksIHsnaCcsICdlJywgJ2wnLCAnbCcs
ICdvJ30pOworICAgIGNvbXBhcmVMb29wSXRlcmF0aW9uczxVQ2hhcj4oU3RyaW5nVmlldyhTdHJp
bmcoImhlbGxvIikpLmNvZGVVbml0cygpLCB7J2gnLCAnZScsICdsJywgJ2wnLCAnbyd9KTsKIAog
ICAgIFN0cmluZ0J1aWxkZXIgYjsKICAgICBidWlsZChiLCB7MHhEODAwLCAweERENTV9KTsgLy8g
U3Vycm9nYXRlcyBmb3IgdW5pY29kZSBjb2RlIHBvaW50IFUrMTAxNTUKLSAgICBFWFBFQ1RfVFJV
RShjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVQb2lu
dHMoKSwgezB4MTAxNTV9KSk7Ci0gICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25z
KFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlVW5pdHMoKSwgezB4RDgwMCwgMHhERDU1fSkp
OworICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9uczxVQ2hhcjMyPihTdHJpbmdW
aWV3KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHgxMDE1NX0pKTsKKyAgICBFWFBFQ1Rf
VFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnM8VUNoYXI+KFN0cmluZ1ZpZXcoYi50b1N0cmluZygp
KS5jb2RlVW5pdHMoKSwgezB4RDgwMCwgMHhERDU1fSkpOworCisgICAgYnVpbGQoYiwgezB4RDgw
MH0pOyAvLyBMZWFkaW5nIHN1cnJvZ2F0ZSBvbmx5CisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxv
b3BJdGVyYXRpb25zPFVDaGFyMzI+KFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlUG9pbnRz
KCksIHsweEQ4MDB9KSk7CisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zPFVD
aGFyPihTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVVuaXRzKCksIHsweEQ4MDB9KSk7CisK
KyAgICBidWlsZChiLCB7MHhEODAwLCAweEQ4MDF9KTsgLy8gVHdvIGxlYWRpbmcgc3Vycm9nYXRl
cworICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9uczxVQ2hhcjMyPihTdHJpbmdW
aWV3KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHhEODAwLCAweEQ4MDF9KSk7CisgICAg
RVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyPihTdHJpbmdWaWV3KGIudG9T
dHJpbmcoKSkuY29kZVVuaXRzKCksIHsweEQ4MDAsIDB4RDgwMX0pKTsKKworICAgIGJ1aWxkKGIs
IHsweERENTV9KTsgLy8gVHJhaWxpbmcgc3Vycm9nYXRlIG9ubHkKKyAgICBFWFBFQ1RfVFJVRShj
b21wYXJlTG9vcEl0ZXJhdGlvbnM8VUNoYXIzMj4oU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNv
ZGVQb2ludHMoKSwgezB4REQ1NX0pKTsKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJh
dGlvbnM8VUNoYXI+KFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlVW5pdHMoKSwgezB4REQ1
NX0pKTsKKworICAgIGJ1aWxkKGIsIHsweEQ4MDAsICdoJ30pOyAvLyBMZWFkaW5nIHN1cnJvZ2F0
ZSBmb2xsb3dlZCBieSBub24tc3Vycm9nYXRlCisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJ
dGVyYXRpb25zPFVDaGFyMzI+KFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlUG9pbnRzKCks
IHsweEQ4MDAsICdoJ30pKTsKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnM8
VUNoYXI+KFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlVW5pdHMoKSwgezB4RDgwMCwgJ2gn
fSkpOworCisgICAgYnVpbGQoYiwgezB4MDMwNn0pOyAvLyAiQ09NQklOSU5HIEJSRVZFIgorICAg
IEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9uczxVQ2hhcjMyPihTdHJpbmdWaWV3KGIu
dG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHgwMzA2fSkpOworICAgIEVYUEVDVF9UUlVFKGNv
bXBhcmVMb29wSXRlcmF0aW9uczxVQ2hhcj4oU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVV
bml0cygpLCB7MHgwMzA2fSkpOworCisgICAgYnVpbGQoYiwgezB4MDMwNiwgMHhEODAwLCAweERE
NTUsICdoJywgJ2UnLCAnbCcsICdvJ30pOyAvLyBNaXggb2Ygc2luZ2xlIGNvZGUgdW5pdCBhbmQg
bXVsdGkgY29kZSB1bml0IGNvZGUgcG9pbnRzCisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJ
dGVyYXRpb25zPFVDaGFyMzI+KFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlUG9pbnRzKCks
IHsweDAzMDYsIDB4MTAxNTUsICdoJywgJ2UnLCAnbCcsICdvJ30pKTsKKyAgICBFWFBFQ1RfVFJV
RShjb21wYXJlTG9vcEl0ZXJhdGlvbnM8VUNoYXI+KFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5j
b2RlVW5pdHMoKSwgezB4MDMwNiwgMHhEODAwLCAweERENTUsICdoJywgJ2UnLCAnbCcsICdvJ30p
KTsKKworICAgIC8vIFJldmVyc2UKKyAgICBjb21wYXJlTG9vcEl0ZXJhdGlvbnM8VUNoYXIzMj4o
U3RyaW5nVmlldygpLnJldmVyc2VDb2RlUG9pbnRzKCksIHsgfSk7CisgICAgY29tcGFyZUxvb3BJ
dGVyYXRpb25zPFVDaGFyPihTdHJpbmdWaWV3KCkucmV2ZXJzZUNvZGVVbml0cygpLCB7IH0pOwor
CisgICAgY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyMzI+KFN0cmluZ1ZpZXc6OmVtcHR5KCku
cmV2ZXJzZUNvZGVQb2ludHMoKSwgeyB9KTsKKyAgICBjb21wYXJlTG9vcEl0ZXJhdGlvbnM8VUNo
YXI+KFN0cmluZ1ZpZXc6OmVtcHR5KCkucmV2ZXJzZUNvZGVVbml0cygpLCB7IH0pOworCisgICAg
Y29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyMzI+KFN0cmluZ1ZpZXcoU3RyaW5nKCJoZWxsbyIp
KS5yZXZlcnNlQ29kZVBvaW50cygpLCB7J28nLCAnbCcsICdsJywgJ2UnLCAnaCd9KTsKKyAgICBj
b21wYXJlTG9vcEl0ZXJhdGlvbnM8VUNoYXI+KFN0cmluZ1ZpZXcoU3RyaW5nKCJoZWxsbyIpKS5y
ZXZlcnNlQ29kZVVuaXRzKCksIHsnbycsICdsJywgJ2wnLCAnZScsICdoJ30pOworCisgICAgYnVp
bGQoYiwgezB4RDgwMCwgMHhERDU1fSk7IC8vIFN1cnJvZ2F0ZXMgZm9yIHVuaWNvZGUgY29kZSBw
b2ludCBVKzEwMTU1CisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFy
MzI+KFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5yZXZlcnNlQ29kZVBvaW50cygpLCB7MHgxMDE1
NX0pKTsKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnM8VUNoYXI+KFN0cmlu
Z1ZpZXcoYi50b1N0cmluZygpKS5yZXZlcnNlQ29kZVVuaXRzKCksIHsweERENTUsIDB4RDgwMH0p
KTsKIAogICAgIGJ1aWxkKGIsIHsweEQ4MDB9KTsgLy8gTGVhZGluZyBzdXJyb2dhdGUgb25seQot
ICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJp
bmcoKSkuY29kZVBvaW50cygpLCB7MHhEODAwfSkpOwotICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVM
b29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVVuaXRzKCksIHsweEQ4
MDB9KSk7CisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyMzI+KFN0
cmluZ1ZpZXcoYi50b1N0cmluZygpKS5yZXZlcnNlQ29kZVBvaW50cygpLCB7MHhEODAwfSkpOwor
ICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9uczxVQ2hhcj4oU3RyaW5nVmlldyhi
LnRvU3RyaW5nKCkpLnJldmVyc2VDb2RlVW5pdHMoKSwgezB4RDgwMH0pKTsKIAogICAgIGJ1aWxk
KGIsIHsweEQ4MDAsIDB4RDgwMX0pOyAvLyBUd28gbGVhZGluZyBzdXJyb2dhdGVzCi0gICAgRVhQ
RUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5j
b2RlUG9pbnRzKCksIHsweEQ4MDAsIDB4RDgwMX0pKTsKLSAgICBFWFBFQ1RfVFJVRShjb21wYXJl
TG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVVbml0cygpLCB7MHhE
ODAwLCAweEQ4MDF9KSk7CisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zPFVD
aGFyMzI+KFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5yZXZlcnNlQ29kZVBvaW50cygpLCB7MHhE
ODAxLCAweEQ4MDB9KSk7CisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zPFVD
aGFyPihTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkucmV2ZXJzZUNvZGVVbml0cygpLCB7MHhEODAx
LCAweEQ4MDB9KSk7CiAKICAgICBidWlsZChiLCB7MHhERDU1fSk7IC8vIFRyYWlsaW5nIHN1cnJv
Z2F0ZSBvbmx5Ci0gICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1Zp
ZXcoYi50b1N0cmluZygpKS5jb2RlUG9pbnRzKCksIHsweERENTV9KSk7Ci0gICAgRVhQRUNUX1RS
VUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlVW5p
dHMoKSwgezB4REQ1NX0pKTsKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnM8
VUNoYXIzMj4oU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLnJldmVyc2VDb2RlUG9pbnRzKCksIHsw
eERENTV9KSk7CisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyPihT
dHJpbmdWaWV3KGIudG9TdHJpbmcoKSkucmV2ZXJzZUNvZGVVbml0cygpLCB7MHhERDU1fSkpOwog
CiAgICAgYnVpbGQoYiwgezB4RDgwMCwgJ2gnfSk7IC8vIExlYWRpbmcgc3Vycm9nYXRlIGZvbGxv
d2VkIGJ5IG5vbi1zdXJyb2dhdGUKLSAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlv
bnMoU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVQb2ludHMoKSwgezB4RDgwMCwgJ2gnfSkp
OwotICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9T
dHJpbmcoKSkuY29kZVVuaXRzKCksIHsweEQ4MDAsICdoJ30pKTsKKyAgICBFWFBFQ1RfVFJVRShj
b21wYXJlTG9vcEl0ZXJhdGlvbnM8VUNoYXIzMj4oU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLnJl
dmVyc2VDb2RlUG9pbnRzKCksIHsnaCcsIDB4RDgwMH0pKTsKKyAgICBFWFBFQ1RfVFJVRShjb21w
YXJlTG9vcEl0ZXJhdGlvbnM8VUNoYXI+KFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5yZXZlcnNl
Q29kZVVuaXRzKCksIHsnaCcsIDB4RDgwMH0pKTsKIAogICAgIGJ1aWxkKGIsIHsweDAzMDZ9KTsg
Ly8gIkNPTUJJTklORyBCUkVWRSIKLSAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlv
bnMoU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVQb2ludHMoKSwgezB4MDMwNn0pKTsKLSAg
ICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRvU3RyaW5n
KCkpLmNvZGVVbml0cygpLCB7MHgwMzA2fSkpOworICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29w
SXRlcmF0aW9uczxVQ2hhcjMyPihTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkucmV2ZXJzZUNvZGVQ
b2ludHMoKSwgezB4MDMwNn0pKTsKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlv
bnM8VUNoYXI+KFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5yZXZlcnNlQ29kZVVuaXRzKCksIHsw
eDAzMDZ9KSk7CiAKICAgICBidWlsZChiLCB7MHgwMzA2LCAweEQ4MDAsIDB4REQ1NSwgJ2gnLCAn
ZScsICdsJywgJ28nfSk7IC8vIE1peCBvZiBzaW5nbGUgY29kZSB1bml0IGFuZCBtdWx0aSBjb2Rl
IHVuaXQgY29kZSBwb2ludHMKLSAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnMo
U3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVQb2ludHMoKSwgezB4MDMwNiwgMHgxMDE1NSwg
J2gnLCAnZScsICdsJywgJ28nfSkpOwotICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0
aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVVuaXRzKCksIHsweDAzMDYsIDB4RDgw
MCwgMHhERDU1LCAnaCcsICdlJywgJ2wnLCAnbyd9KSk7CisgICAgRVhQRUNUX1RSVUUoY29tcGFy
ZUxvb3BJdGVyYXRpb25zPFVDaGFyMzI+KFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5yZXZlcnNl
Q29kZVBvaW50cygpLCB7J28nLCAnbCcsICdlJywgJ2gnLCAweDEwMTU1LCAweDAzMDZ9KSk7Cisg
ICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zPFVDaGFyPihTdHJpbmdWaWV3KGIu
dG9TdHJpbmcoKSkucmV2ZXJzZUNvZGVVbml0cygpLCB7J28nLCAnbCcsICdlJywgJ2gnLCAweERE
NTUsIDB4RDgwMCwgMHgwMzA2fSkpOwogfQogCiBURVNUKFdURiwgU3RyaW5nVmlld0VxdWFsSWdu
b3JpbmdBU0NJSUNhc2VCYXNpYykK
</data>

          </attachment>
      

    </bug>

</bugzilla>