<?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>188439</bug_id>
          
          <creation_ts>2018-08-09 08:09:11 -0700</creation_ts>
          <short_desc>[iOS WK2] Rename and refactor DataInteractionTests and DataInteractionSimulator</short_desc>
          <delta_ts>2018-10-01 13:56:41 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>aestes</cc>
    
    <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>lforschler</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1448999</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-09 08:09:11 -0700</bug_when>
    <thetext>Rename DataInteractionSimulator to DraggingSimulator, and make DraggingSimulator cross-platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449000</commentid>
    <comment_count>1</comment_count>
      <attachid>346836</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-09 08:17:12 -0700</bug_when>
    <thetext>Created attachment 346836
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449002</commentid>
    <comment_count>2</comment_count>
      <attachid>346837</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-09 08:41:50 -0700</bug_when>
    <thetext>Created attachment 346837
Fix macOS builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449013</commentid>
    <comment_count>3</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-08-09 09:38:16 -0700</bug_when>
    <thetext>DragAndDropSimulator seems like it would be a better rename than just DraggingSimulator, since we are simulating both dragging and dropping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449014</commentid>
    <comment_count>4</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-09 09:40:44 -0700</bug_when>
    <thetext>(In reply to Megan Gardner from comment #3)
&gt; DragAndDropSimulator seems like it would be a better rename than just
&gt; DraggingSimulator, since we are simulating both dragging and dropping.

I considered this, but went with DraggingSimulator because it sounded more pleasant. But I don&apos;t have strong opinions either way — I&apos;ll go with DragAndDropSimulator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449015</commentid>
    <comment_count>5</comment_count>
      <attachid>346838</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-09 09:45:34 -0700</bug_when>
    <thetext>Created attachment 346838
Rename to DragAndDropSimulator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449017</commentid>
    <comment_count>6</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-08-09 09:48:16 -0700</bug_when>
    <thetext>r=me unofficial</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449024</commentid>
    <comment_count>7</comment_count>
      <attachid>346838</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2018-08-09 10:19:46 -0700</bug_when>
    <thetext>Comment on attachment 346838
Rename to DragAndDropSimulator

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449061</commentid>
    <comment_count>8</comment_count>
      <attachid>346849</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-09 11:21:51 -0700</bug_when>
    <thetext>Created attachment 346849
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449080</commentid>
    <comment_count>9</comment_count>
      <attachid>346849</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-08-09 12:02:28 -0700</bug_when>
    <thetext>Comment on attachment 346849
Patch for landing

Clearing flags on attachment: 346849

Committed r234731: &lt;https://trac.webkit.org/changeset/234731&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465219</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-01 13:56:41 -0700</bug_when>
    <thetext>&lt;rdar://problem/44919982&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346836</attachid>
            <date>2018-08-09 08:17:12 -0700</date>
            <delta_ts>2018-08-09 08:41:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188439-20180809081711.patch</filename>
            <type>text/plain</type>
            <size>297808</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0NjkxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWJlYWUyYTMxYmQzN2YyY2ZkZGY1MThlYjg2ODRiYWUx
YjMwNjEyOC4uN2YyYTg2ZWZjNDA4ODEzYjIzOGFiYjJhMzg2NTA2YTM5YzQzMTA2MCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEx
NiBAQAorMjAxOC0wOC0wOSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
KworICAgICAgICBbaU9TIFdLMl0gUmVuYW1lIERhdGFJbnRlcmFjdGlvblNpbXVsYXRvciB0byBE
cmFnZ2luZ1NpbXVsYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg4NDM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVmYWN0b3IgRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIChjdXJyZW50bHkgdXNl
ZCBmb3IgZHJhZyBhbmQgZHJvcCB0ZXN0aW5nIG9uIGlPUykgc28gdGhhdCBpdCBleGlzdHMgYWNy
b3NzCisgICAgICAgIG1hY09TIGFuZCBpT1MsIGFuZCByZW5hbWUgaXQgdG8gRHJhZ2dpbmdTaW11
bGF0b3IuIEFkZGl0aW9uYWxseSwgcmVuYW1lIERhdGFJbnRlcmFjdGlvblRlc3RzIHRvCisgICAg
ICAgIERyYWdBbmREcm9wVGVzdHMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRHJhZ0Fu
ZERyb3BUZXN0c0lPUy5tbTogUmVuYW1lZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
aW9zL0RhdGFJbnRlcmFjdGlvblRlc3RzLm1tLgorICAgICAgICAodGVzdEljb25JbWFnZSk6Cisg
ICAgICAgICh0ZXN0WklQQXJjaGl2ZSk6CisgICAgICAgICgtW1VJSXRlbVByb3ZpZGVyIHJlZ2lz
dGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6d2l0aERhdGE6XSk6CisgICAg
ICAgICgtW1Rlc3RXS1dlYlZpZXcgZWRpdG9yQ29udGFpbnNJbWFnZUVsZW1lbnRdKToKKyAgICAg
ICAgKC1bVGVzdFdLV2ViVmlldyBlZGl0b3JWYWx1ZV0pOgorICAgICAgICAobWFrZUNHUmVjdFZh
bHVlKToKKyAgICAgICAgKGNoZWNrQ0dSZWN0SXNFcXVhbFRvQ0dSZWN0V2l0aExvZ2dpbmcpOgor
ICAgICAgICAoY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKToKKyAgICAgICAgKGNoZWNr
UmljaFRleHRUeXBlUHJlY2VkZXNQbGFpblRleHRUeXBlKToKKyAgICAgICAgKGNoZWNrRmlyc3RU
eXBlSXNQcmVzZW50QW5kU2Vjb25kVHlwZUlzTWlzc2luZyk6CisgICAgICAgIChjaGVja1R5cGVJ
ZGVudGlmaWVySXNSZWdpc3RlcmVkQXRJbmRleCk6CisgICAgICAgIChjaGVja0VzdGltYXRlZFNp
emUpOgorICAgICAgICAoY2hlY2tTdWdnZXN0ZWROYW1lQW5kRXN0aW1hdGVkU2l6ZSk6CisgICAg
ICAgIChjaGVja1N0cmluZ0FycmF5c0FyZUVxdWFsKToKKyAgICAgICAgKGNoZWNrRHJhZ0NhcmV0
UmVjdElzQ29udGFpbmVkSW5SZWN0KToKKyAgICAgICAgKGNoZWNrSlNPTldpdGhMb2dnaW5nKToK
KyAgICAgICAgKHRlc3RJY29uSW1hZ2VEYXRhKToKKyAgICAgICAgKHJ1blRlc3RXaXRoVGVtcG9y
YXJ5VGV4dEZpbGUpOgorICAgICAgICAocnVuVGVzdFdpdGhUZW1wb3JhcnlGb2xkZXIpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpzZXRV
cFRlc3RXZWJWaWV3Rm9yRGF0YVRyYW5zZmVySXRlbXMpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6dGVzdERyYWdBbmREcm9wT250b1RhcmdldEVsZW1lbnRzKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OnRlc3RJY29uSW1hZ2VEYXRhKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29h
L0RyYWdnaW5nU2ltdWxhdG9yLmg6IFJlbmFtZWQgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL2lv
cy9EYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuaC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2lv
cy9EcmFnZ2luZ1NpbXVsYXRvcklPUy5tbTogUmVuYW1lZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5tbS4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IGRyb3BJbnRlcmFjdGlvbkRlbGVnYXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBkcmFnSW50
ZXJhY3Rpb25EZWxlZ2F0ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZHJvcEludGVyYWN0aW9u
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBkcmFnSW50ZXJhY3Rpb25dKToKKyAgICAgICAgKC1b
TW9ja0RyYWdEcm9wU2Vzc2lvbiBpbml0V2l0aEl0ZW1zOmxvY2F0aW9uOndpbmRvdzphbGxvd01v
dmU6XSk6CisgICAgICAgICgtW01vY2tEcmFnRHJvcFNlc3Npb24gYWxsb3dzTW92ZU9wZXJhdGlv
bl0pOgorICAgICAgICAoLVtNb2NrRHJhZ0Ryb3BTZXNzaW9uIGlzUmVzdHJpY3RlZFRvRHJhZ2dp
bmdBcHBsaWNhdGlvbl0pOgorICAgICAgICAoLVtNb2NrRHJhZ0Ryb3BTZXNzaW9uIGhhc0l0ZW1z
Q29uZm9ybWluZ1RvVHlwZUlkZW50aWZpZXJzOl0pOgorICAgICAgICAoLVtNb2NrRHJhZ0Ryb3BT
ZXNzaW9uIGNhbkxvYWRPYmplY3RzT2ZDbGFzczpdKToKKyAgICAgICAgKC1bTW9ja0RyYWdEcm9w
U2Vzc2lvbiBjYW5Mb2FkT2JqZWN0c09mQ2xhc3NlczpdKToKKyAgICAgICAgKC1bTW9ja0RyYWdE
cm9wU2Vzc2lvbiBpdGVtc10pOgorICAgICAgICAoLVtNb2NrRHJhZ0Ryb3BTZXNzaW9uIHNldEl0
ZW1zOl0pOgorICAgICAgICAoLVtNb2NrRHJhZ0Ryb3BTZXNzaW9uIGFkZEl0ZW1zOl0pOgorICAg
ICAgICAoLVtNb2NrRHJhZ0Ryb3BTZXNzaW9uIGxvY2F0aW9uSW5WaWV3Ol0pOgorICAgICAgICAo
LVtNb2NrRHJvcFNlc3Npb24gaW5pdFdpdGhQcm92aWRlcnM6bG9jYXRpb246d2luZG93OmFsbG93
TW92ZTpdKToKKyAgICAgICAgKC1bTW9ja0Ryb3BTZXNzaW9uIGlzTG9jYWxdKToKKyAgICAgICAg
KC1bTW9ja0Ryb3BTZXNzaW9uIHByb2dyZXNzXSk6CisgICAgICAgICgtW01vY2tEcm9wU2Vzc2lv
biBzZXRQcm9ncmVzc0luZGljYXRvclN0eWxlOl0pOgorICAgICAgICAoLVtNb2NrRHJvcFNlc3Np
b24gcHJvZ3Jlc3NJbmRpY2F0b3JTdHlsZV0pOgorICAgICAgICAoLVtNb2NrRHJvcFNlc3Npb24g
b3BlcmF0aW9uTWFza10pOgorICAgICAgICAoLVtNb2NrRHJvcFNlc3Npb24gbG9jYWxEcmFnU2Vz
c2lvbl0pOgorICAgICAgICAoLVtNb2NrRHJvcFNlc3Npb24gaGFzSXRlbXNDb25mb3JtaW5nVG9U
eXBlSWRlbnRpZmllcjpdKToKKyAgICAgICAgKC1bTW9ja0Ryb3BTZXNzaW9uIGNhbkNyZWF0ZUl0
ZW1zT2ZDbGFzczpdKToKKyAgICAgICAgKC1bTW9ja0Ryb3BTZXNzaW9uIGxvYWRPYmplY3RzT2ZD
bGFzczpjb21wbGV0aW9uOl0pOgorICAgICAgICAoLVtNb2NrRHJhZ1Nlc3Npb24gaW5pdFdpdGhX
aW5kb3c6YWxsb3dNb3ZlOl0pOgorICAgICAgICAoLVtNb2NrRHJhZ1Nlc3Npb24gbG9jYWxPcGVy
YXRpb25NYXNrXSk6CisgICAgICAgICgtW01vY2tEcmFnU2Vzc2lvbiBleHRlcm5hbE9wZXJhdGlv
bk1hc2tdKToKKyAgICAgICAgKC1bTW9ja0RyYWdTZXNzaW9uIHNlc3Npb25dKToKKyAgICAgICAg
KC1bTW9ja0RyYWdTZXNzaW9uIGxvY2FsQ29udGV4dF0pOgorICAgICAgICAoLVtNb2NrRHJhZ1Nl
c3Npb24gc2V0TG9jYWxDb250ZXh0Ol0pOgorICAgICAgICAoZHJhZ0FuZERyb3BFdmVudE5hbWVz
KToKKyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3JBcHBsaWNhdGlvbiBfY2FuY2VsQWxsVG91
Y2hlc10pOgorICAgICAgICAoLVtEcmFnZ2luZ1NpbXVsYXRvciBpbml0V2l0aFdlYlZpZXc6XSk6
CisgICAgICAgICgtW0RyYWdnaW5nU2ltdWxhdG9yIGRlYWxsb2NdKToKKyAgICAgICAgKC1bRHJh
Z2dpbmdTaW11bGF0b3IgX3Jlc2V0U2ltdWxhdGVkU3RhdGVdKToKKyAgICAgICAgKC1bRHJhZ2dp
bmdTaW11bGF0b3Igb2JzZXJ2ZWRFdmVudE5hbWVzXSk6CisgICAgICAgICgtW0RyYWdnaW5nU2lt
dWxhdG9yIHNpbXVsYXRlQWxsVG91Y2hlc0NhbmNlbGVkOl0pOgorICAgICAgICAoLVtEcmFnZ2lu
Z1NpbXVsYXRvciBydW5Gcm9tOnRvOl0pOgorICAgICAgICAoLVtEcmFnZ2luZ1NpbXVsYXRvciBy
dW5Gcm9tOnRvOmFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uczpdKToKKyAgICAgICAgKC1b
RHJhZ2dpbmdTaW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0c10pOgorICAgICAgICAoLVtEcmFn
Z2luZ1NpbXVsYXRvciBfY29uY2x1ZGVEcm9wQW5kUGVyZm9ybU9wZXJhdGlvbklmTmVjZXNzYXJ5
XSk6CisgICAgICAgICgtW0RyYWdnaW5nU2ltdWxhdG9yIF9lbnF1ZXVlUGVuZGluZ0FkZGl0aW9u
YWxJdGVtUmVxdWVzdExvY2F0aW9uc10pOgorICAgICAgICAoLVtEcmFnZ2luZ1NpbXVsYXRvciBf
c2VuZFF1ZXVlZEFkZGl0aW9uYWxJdGVtUmVxdWVzdF0pOgorICAgICAgICAoLVtEcmFnZ2luZ1Np
bXVsYXRvciBfYWR2YW5jZVByb2dyZXNzXSk6CisgICAgICAgICgtW0RyYWdnaW5nU2ltdWxhdG9y
IF9jdXJyZW50TG9jYXRpb25dKToKKyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3IgX3NjaGVk
dWxlQWR2YW5jZVByb2dyZXNzXSk6CisgICAgICAgICgtW0RyYWdnaW5nU2ltdWxhdG9yIHNvdXJj
ZUl0ZW1Qcm92aWRlcnNdKToKKyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3IgZXh0ZXJuYWxJ
dGVtUHJvdmlkZXJzXSk6CisgICAgICAgICgtW0RyYWdnaW5nU2ltdWxhdG9yIHNldEV4dGVybmFs
SXRlbVByb3ZpZGVyczpdKToKKyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3IgcGhhc2VdKToK
KyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3IgbGlmdFByZXZpZXdzXSk6CisgICAgICAgICgt
W0RyYWdnaW5nU2ltdWxhdG9yIGxhc3RLbm93bkRyYWdDYXJldFJlY3RdKToKKyAgICAgICAgKC1b
RHJhZ2dpbmdTaW11bGF0b3Igd2FpdEZvcklucHV0U2Vzc2lvbl0pOgorICAgICAgICAoLVtEcmFn
Z2luZ1NpbXVsYXRvciBpbnNlcnRlZEF0dGFjaG1lbnRzXSk6CisgICAgICAgICgtW0RyYWdnaW5n
U2ltdWxhdG9yIHJlbW92ZWRBdHRhY2htZW50c10pOgorICAgICAgICAoLVtEcmFnZ2luZ1NpbXVs
YXRvciBlbmREYXRhVHJhbnNmZXJdKToKKyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3IgX3dl
YlZpZXc6ZGF0YUludGVyYWN0aW9uT3BlcmF0aW9uV2FzSGFuZGxlZDpmb3JTZXNzaW9uOml0ZW1Q
cm92aWRlcnM6XSk6CisgICAgICAgICgtW0RyYWdnaW5nU2ltdWxhdG9yIF93ZWJWaWV3OndpbGxV
cGRhdGVEYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25Ub09wZXJhdGlvbjpmb3JTZXNzaW9uOl0pOgor
ICAgICAgICAoLVtEcmFnZ2luZ1NpbXVsYXRvciBfd2ViVmlldzphZGp1c3RlZERhdGFJbnRlcmFj
dGlvbkl0ZW1Qcm92aWRlcnNGb3JJdGVtUHJvdmlkZXI6cmVwcmVzZW50aW5nT2JqZWN0czphZGRp
dGlvbmFsRGF0YTpdKToKKyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3IgX3dlYlZpZXc6c2hv
d0N1c3RvbVNoZWV0Rm9yRWxlbWVudDpdKToKKyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3Ig
X3dlYlZpZXc6d2lsbFBlcmZvcm1Ecm9wV2l0aFNlc3Npb246XSk6CisgICAgICAgICgtW0RyYWdn
aW5nU2ltdWxhdG9yIF93ZWJWaWV3OmRpZEluc2VydEF0dGFjaG1lbnQ6XSk6CisgICAgICAgICgt
W0RyYWdnaW5nU2ltdWxhdG9yIF93ZWJWaWV3OmRpZFJlbW92ZUF0dGFjaG1lbnQ6XSk6CisgICAg
ICAgICgtW0RyYWdnaW5nU2ltdWxhdG9yIF93ZWJWaWV3OmZvY3VzU2hvdWxkU3RhcnRJbnB1dFNl
c3Npb246XSk6CisgICAgICAgICgtW0RyYWdnaW5nU2ltdWxhdG9yIF93ZWJWaWV3OmRpZFN0YXJ0
SW5wdXRTZXNzaW9uOl0pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvaW9zL1VJS2l0U1BJLmg6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9tYWMvRHJhZ2dpbmdTaW11bGF0b3JNYWMubW06IEFk
ZGVkLgorICAgICAgICAoLVtEcmFnZ2luZ1NpbXVsYXRvciBpbml0V2l0aFdlYlZpZXc6XSk6Cisg
ICAgICAgICgtW0RyYWdnaW5nU2ltdWxhdG9yIGRlYWxsb2NdKToKKyAgICAgICAgKC1bRHJhZ2dp
bmdTaW11bGF0b3IgcnVuRnJvbTp0bzpdKToKKyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3Ig
aW5zZXJ0ZWRBdHRhY2htZW50c10pOgorICAgICAgICAoLVtEcmFnZ2luZ1NpbXVsYXRvciByZW1v
dmVkQXR0YWNobWVudHNdKToKKwogMjAxOC0wOC0wOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hz
aWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBmYXN0L2V2ZW50cy9pb3MvY29udGVudGVk
aXRhYmxlLWF1dG9jYXBpdGFsaXplLmh0bWwgaXMgYSBmbGFreSBmYWlsdXJlCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDNlMDM2YzMzZmQ0NjE3OWY0MDAzOTAxMmJkMDhkNDVmY2Y2MDliMTMu
LmYyZWFmZDVhNmJmNjk4NmQ5YzIwYjdjOTgyN2M5YWE4Njg1NGFhNTggMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC04MDgsNiArODA4LDcgQEAKIAkJRjQ1QjYzRkUxRjE5RDQxMDAwOUQzOEI5
IC8qIEFjdGlvblNoZWV0VGVzdHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNDVCNjNGQzFGMTlENDEwMDA5RDM4QjkgLyogQWN0aW9uU2hlZXRUZXN0
cy5tbSAqLzsgfTsKIAkJRjQ1RTE1NzMyMTEyQ0UyOTAwMzA3RTgyIC8qIEtleWJvYXJkSW5wdXRU
ZXN0c0lPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0NUUxNTcyMjExMkNFMjkwMDMwN0U4MiAvKiBLZXlib2FyZElucHV0VGVzdHNJT1MubW0gKi87
IH07CiAJCUY0NUUxNTc2MjExMkNFNjIwMDMwN0U4MiAvKiBUZXN0SW5wdXREZWxlZ2F0ZS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NUUxNTc1MjEx
MkNFNjIwMDMwN0U4MiAvKiBUZXN0SW5wdXREZWxlZ2F0ZS5tbSAqLzsgfTsKKwkJRjQ2MTI4Qjcy
MTFDOEVENTAwRDlGQURCIC8qIERyYWdnaW5nU2ltdWxhdG9yTWFjLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ2MTI4QjYyMTFDOEVENTAwRDlGQURC
IC8qIERyYWdnaW5nU2ltdWxhdG9yTWFjLm1tICovOyB9OwogCQlGNDY0QUY5MjIwQkI2NkVBMDA3
RjlCMTggLyogUmVuZGVyaW5nUHJvZ3Jlc3NUZXN0cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NjRBRjkxMjBCQjY2RUEwMDdGOUIxOCAvKiBSZW5k
ZXJpbmdQcm9ncmVzc1Rlc3RzLm1tICovOyB9OwogCQlGNDY4NDlCRTFFRUY1OEU0MDBCOTM3RkUg
LyogVUlQYXN0ZWJvYXJkVGVzdHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNDY4NDlCRDFFRUY1OEU0MDBCOTM3RkUgLyogVUlQYXN0ZWJvYXJkVGVz
dHMubW0gKi87IH07CiAJCUY0Njg0OUMwMUVFRjVFRjMwMEI5MzdGRSAvKiByaWNoLWFuZC1wbGFp
bi10ZXh0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjQ2ODQ5QkYxRUVGNUVEQzAwQjkzN0ZFIC8qIHJpY2gtYW5kLXBsYWluLXRleHQu
aHRtbCAqLzsgfTsKQEAgLTgyOSw4ICs4MzAsOCBAQAogCQlGNENENzRDNjIwRkRBQ0ZBMDBERTM3
OTQgLyogdGV4dC13aXRoLWFzeW5jLXNjcmlwdC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0Q0Q3NEM1MjBGREFDRjUwMERFMzc5NCAv
KiB0ZXh0LXdpdGgtYXN5bmMtc2NyaXB0Lmh0bWwgKi87IH07CiAJCUY0Q0Q3NEM5MjBGREI0OTYw
MERFMzc5NCAvKiBUZXN0VVJMU2NoZW1lSGFuZGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0Q0Q3NEM4MjBGREI0OTYwMERFMzc5NCAvKiBUZXN0
VVJMU2NoZW1lSGFuZGxlci5tbSAqLzsgfTsKIAkJRjREMjk4NkUyMEZFRTczNzAwOTJENjM2IC8q
IFJ1blNjcmlwdEFmdGVyRG9jdW1lbnRMb2FkLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjREMjk4NkQyMEZFRTczNzAwOTJENjM2IC8qIFJ1blNjcmlw
dEFmdGVyRG9jdW1lbnRMb2FkLm1tICovOyB9OwotCQlGNEQ0RjNCNjFFNEUyQkNCMDBCQjI3Njcg
LyogRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjRENEYzQjQxRTRFMkJDQjAwQkIyNzY3IC8qIERhdGFJbnRl
cmFjdGlvblNpbXVsYXRvci5tbSAqLzsgfTsKLQkJRjRENEYzQjkxRTRFMzZFNDAwQkIyNzY3IC8q
IERhdGFJbnRlcmFjdGlvblRlc3RzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjRENEYzQjcxRTRFMzZFNDAwQkIyNzY3IC8qIERhdGFJbnRlcmFjdGlv
blRlc3RzLm1tICovOyB9OworCQlGNEQ0RjNCNjFFNEUyQkNCMDBCQjI3NjcgLyogRHJhZ2dpbmdT
aW11bGF0b3JJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNEQ0RjNCNDFFNEUyQkNCMDBCQjI3NjcgLyogRHJhZ2dpbmdTaW11bGF0b3JJT1MubW0g
Ki87IH07CisJCUY0RDRGM0I5MUU0RTM2RTQwMEJCMjc2NyAvKiBEcmFnQW5kRHJvcFRlc3RzSU9T
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRENEYz
QjcxRTRFMzZFNDAwQkIyNzY3IC8qIERyYWdBbmREcm9wVGVzdHNJT1MubW0gKi87IH07CiAJCUY0
RDVFNEU4MUYwQzVEMzgwMDhDMUE0OSAvKiBkcmFnc3RhcnQtY2xlYXItc2VsZWN0aW9uLmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRE
NUU0RTcxRjBDNUQyNzAwOEMxQTQ5IC8qIGRyYWdzdGFydC1jbGVhci1zZWxlY3Rpb24uaHRtbCAq
LzsgfTsKIAkJRjRENjVEQTgxRjVFNDcwNDAwOUQ4QzI3IC8qIHNlbGVjdGVkLXRleHQtaW1hZ2Ut
bGluay1hbmQtZWRpdGFibGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNEQ2NURBNzFGNUU0NkMwMDA5RDhDMjcgLyogc2VsZWN0ZWQt
dGV4dC1pbWFnZS1saW5rLWFuZC1lZGl0YWJsZS5odG1sICovOyB9OwogCQlGNERFRjZFRDFFOUI0
REI2MDA0OEVGNjEgLyogaW1hZ2UtaW4tbGluay1hbmQtaW5wdXQuaHRtbCBpbiBDb3B5IFJlc291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNERFRjZFQzFFOUI0RDk1
MDA0OEVGNjEgLyogaW1hZ2UtaW4tbGluay1hbmQtaW5wdXQuaHRtbCAqLzsgfTsKQEAgLTIwMzIs
NiArMjAzMyw4IEBACiAJCUY0NUUxNTcyMjExMkNFMjkwMDMwN0U4MiAvKiBLZXlib2FyZElucHV0
VGVzdHNJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLZXlib2FyZElucHV0VGVzdHNJT1Mu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NUUxNTc0MjExMkNFNjIwMDMwN0U4
MiAvKiBUZXN0SW5wdXREZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXN0SW5wdXREZWxlZ2F0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDVFMTU3NTIxMTJDRTYyMDAzMDdF
ODIgLyogVGVzdElucHV0RGVsZWdhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXN0SW5w
dXREZWxlZ2F0ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjQ2MTI4QjQyMTFD
ODYxQTAwRDlGQURCIC8qIERyYWdnaW5nU2ltdWxhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERyYWdnaW5nU2ltdWxhdG9yLmg7IHBhdGggPSBjb2NvYS9EcmFnZ2luZ1Np
bXVsYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNDYxMjhCNjIxMUM4RUQ1
MDBEOUZBREIgLyogRHJhZ2dpbmdTaW11bGF0b3JNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBEcmFnZ2luZ1NpbXVsYXRvck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RjQ2NEFGOTEyMEJCNjZFQTAwN0Y5QjE4IC8qIFJlbmRlcmluZ1Byb2dyZXNzVGVzdHMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBSZW5kZXJpbmdQcm9ncmVzc1Rlc3RzLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGNDY4NDlCRDFFRUY1OEU0MDBCOTM3RkUgLyogVUlQYXN0ZWJv
YXJkVGVzdHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVSVBhc3RlYm9hcmRUZXN0cy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ2ODQ5QkYxRUVGNUVEQzAwQjkzN0ZFIC8q
IHJpY2gtYW5kLXBsYWluLXRleHQuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJyaWNoLWFuZC1wbGFpbi10ZXh0
Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA1NSw5ICsyMDU4LDggQEAK
IAkJRjRDRDc0QzcyMEZEQjQ5NjAwREUzNzk0IC8qIFRlc3RVUkxTY2hlbWVIYW5kbGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRlc3RVUkxTY2hlbWVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUY0Q0Q3NEM4MjBGREI0OTYwMERFMzc5NCAvKiBUZXN0VVJMU2NoZW1lSGFuZGxl
ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRlc3RVUkxTY2hlbWVIYW5kbGVyLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEQyOTg2RDIwRkVFNzM3MDA5MkQ2MzYgLyogUnVu
U2NyaXB0QWZ0ZXJEb2N1bWVudExvYWQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSdW5TY3Jp
cHRBZnRlckRvY3VtZW50TG9hZC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjRE
NEYzQjQxRTRFMkJDQjAwQkIyNzY3IC8qIERhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERhdGFJbnRlcmFjdGlvblNpbXVs
YXRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjRENEYzQjUxRTRFMkJDQjAw
QkIyNzY3IC8qIERhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRjRENEYzQjcxRTRFMzZFNDAwQkIyNzY3IC8qIERhdGFJbnRlcmFjdGlv
blRlc3RzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0YUlu
dGVyYWN0aW9uVGVzdHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0RDRGM0I0
MUU0RTJCQ0IwMEJCMjc2NyAvKiBEcmFnZ2luZ1NpbXVsYXRvcklPUy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERyYWdnaW5nU2ltdWxhdG9ySU9TLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNEQ0RjNCNzFFNEUzNkU0MDBCQjI3NjcgLyogRHJh
Z0FuZERyb3BUZXN0c0lPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IERyYWdBbmREcm9wVGVzdHNJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUY0RDVFNEU3MUYwQzVEMjcwMDhDMUE0OSAvKiBkcmFnc3RhcnQtY2xlYXItc2VsZWN0aW9uLmh0
bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
Lmh0bWw7IHBhdGggPSAiZHJhZ3N0YXJ0LWNsZWFyLXNlbGVjdGlvbi5odG1sIjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRENjVEQTcxRjVFNDZDMDAwOUQ4QzI3IC8qIHNlbGVjdGVk
LXRleHQtaW1hZ2UtbGluay1hbmQtZWRpdGFibGUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsg
cGF0aCA9ICJzZWxlY3RlZC10ZXh0LWltYWdlLWxpbmstYW5kLWVkaXRhYmxlLmh0bWwiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNERFRjZFQzFFOUI0RDk1MDA0OEVGNjEgLyogaW1h
Z2UtaW4tbGluay1hbmQtaW5wdXQuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJp
bWFnZS1pbi1saW5rLWFuZC1pbnB1dC5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIxOTUsNiArMjE5Nyw3IEBACiAJCQkJQTEzRUJCNDQxQjg3MzMyQjAwMDk3MTEwIC8qIFdl
YlByb2Nlc3NQbHVnSW4gKi8sCiAJCQkJRjQ1MTdCNjgyMDU0RTBBQzAwQzI2NzIxIC8qIENsYXNz
TWV0aG9kU3dpenpsZXIuaCAqLywKIAkJCQlGNDUxN0I2OTIwNTRFMEFDMDBDMjY3MjEgLyogQ2xh
c3NNZXRob2RTd2l6emxlci5tbSAqLywKKwkJCQlGNDYxMjhCNDIxMUM4NjFBMDBEOUZBREIgLyog
RHJhZ2dpbmdTaW11bGF0b3IuaCAqLywKIAkJCQlGNDREMDY0ODFGMzk2MkUzMDAxQTBFMjkgLyog
RWRpdGluZ1Rlc3RIYXJuZXNzLmggKi8sCiAJCQkJRjQ0RDA2NDkxRjM5NjJFMzAwMUEwRTI5IC8q
IEVkaXRpbmdUZXN0SGFybmVzcy5tbSAqLywKIAkJCQk1QzcyNkQ2RDFEM0VFMDY4MDBDNUUxQTEg
LyogSW5zdGFuY2VNZXRob2RTd2l6emxlci5oICovLApAQCAtMjQxMCw4ICsyNDEzLDcgQEAKIAkJ
MkU5NjYwREMxNkMwN0Q3QjAwMzcxQjQyIC8qIGlvcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJRjRENEYzQjUxRTRFMkJDQjAwQkIyNzY3IC8qIERhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvci5oICovLAotCQkJCUY0RDRGM0I0MUU0RTJCQ0IwMEJCMjc2NyAv
KiBEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IubW0gKi8sCisJCQkJRjRENEYzQjQxRTRFMkJDQjAw
QkIyNzY3IC8qIERyYWdnaW5nU2ltdWxhdG9ySU9TLm1tICovLAogCQkJCTJFNzc2NUNDMTZDNEQ4
MEEwMEJBMkJCMSAvKiBtYWluSU9TLm1tICovLAogCQkJCUY0NTE3QjY1MjA1NEM0OTUwMEMyNjcy
MSAvKiBUZXN0V0tXZWJWaWV3Q29udHJvbGxlci5oICovLAogCQkJCUY0NTE3QjY2MjA1NEM0OTUw
MEMyNjcyMSAvKiBUZXN0V0tXZWJWaWV3Q29udHJvbGxlci5tbSAqLywKQEAgLTI0OTYsNyArMjQ5
OCw3IEBACiAJCQkJQTFDNEZCNkYxQkFDQ0VGQTAwMzc0MkQwIC8qIFJlc291cmNlcyAqLywKIAkJ
CQkyRTIwNUJBMzFGNTI3NzQ2MDA1OTUyREQgLyogQWNjZXNzaWJpbGl0eVRlc3RzSU9TLm1tICov
LAogCQkJCUY0NUI2M0ZDMUYxOUQ0MTAwMDlEMzhCOSAvKiBBY3Rpb25TaGVldFRlc3RzLm1tICov
LAotCQkJCUY0RDRGM0I3MUU0RTM2RTQwMEJCMjc2NyAvKiBEYXRhSW50ZXJhY3Rpb25UZXN0cy5t
bSAqLywKKwkJCQlGNEQ0RjNCNzFFNEUzNkU0MDBCQjI3NjcgLyogRHJhZ0FuZERyb3BUZXN0c0lP
Uy5tbSAqLywKIAkJCQlGNDVFMTU3MjIxMTJDRTI5MDAzMDdFODIgLyogS2V5Ym9hcmRJbnB1dFRl
c3RzSU9TLm1tICovLAogCQkJCTU3NEY1NUNFMjA0RDM3NjMwMDI5NDhDNiAvKiBMb2NhbEF1dGhl
bnRpY2F0b3IubW0gKi8sCiAJCQkJNzU2MDkxNzcxOTI1OUM1OTAwOUVGMDZFIC8qIE1lbW9yeUNh
Y2hlQWRkSW1hZ2VUb0NhY2hlSU9TLm1tICovLApAQCAtMzA5Niw2ICszMDk4LDcgQEAKIAkJQkNB
NjFDM0ExMTcwMEI5NDAwNDYwRDFFIC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJRjQ2MTI4QjYyMTFDOEVENTAwRDlGQURCIC8qIERyYWdnaW5n
U2ltdWxhdG9yTWFjLm1tICovLAogCQkJCTFBRURFMjI0MTNFNUU3QTAwMEU2MkZFOCAvKiBJbmpl
Y3RlZEJ1bmRsZUNvbnRyb2xsZXJNYWMubW0gKi8sCiAJCQkJQzA4MTIyNDAxM0ZDMTcyNDAwREMz
OUFFIC8qIEphdmFTY3JpcHRUZXN0TWFjLm1tICovLAogCQkJCTJFNzc2NUNFMTZDNEQ4MTEwMEJB
MkJCMSAvKiBtYWluTWFjLm1tICovLApAQCAtMzY3MCw4ICszNjczLDYgQEAKIAkJCQk0NkE5MTE1
OTIxMDhFNjc4MDA3OEQ0MEQgLyogQ3VzdG9tVXNlckFnZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzUxQjA1RDYxRjhFQUM0MTAwMjhBMDlFIC8qIERhdGFiYXNlVHJhY2tlclRlc3QubW0gaW4g
U291cmNlcyAqLywKIAkJCQkyREM0Q0Y3NzFEMkQ5REQ4MDBFQ0NDOTQgLyogRGF0YURldGVjdGlv
bi5tbSBpbiBTb3VyY2VzICovLAotCQkJCUY0RDRGM0I2MUU0RTJCQ0IwMEJCMjc2NyAvKiBEYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IubW0gaW4gU291cmNlcyAqLywKLQkJCQlGNEQ0RjNCOTFFNEUz
NkU0MDBCQjI3NjcgLyogRGF0YUludGVyYWN0aW9uVGVzdHMubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk1MThFRTUxRDIwQTc4RDM2MDBFMDI0RjMgLyogRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEMTY0NkUyMUQxODYyQ0QwMDAxNUExQSAvKiBE
ZWZlcnJlZFZpZXdJbldpbmRvd1N0YXRlQ2hhbmdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0ND
RTdFQjkxQTQxMUE3RTAwNDQ3QzRDIC8qIERldmljZVNjYWxlRmFjdG9ySW5EYXNoYm9hcmRSZWdp
b25zLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0zNjk0LDYgKzM2OTUsOSBAQAogCQkJCTdDQ0U3RjIz
MUE0MTFBRjYwMDQ0N0M0QyAvKiBEb3dubG9hZC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3
RUVFMUE0MTFBRTYwMDQ0N0M0QyAvKiBEb3dubG9hZERlY2lkZURlc3RpbmF0aW9uQ3Jhc2guY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRjRCRkE2OEUxRTRBRDA4MDAwMTU0Mjk4IC8qIERyYWdBbmRE
cm9wUGFzdGVib2FyZFRlc3RzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRjRENEYzQjkxRTRFMzZF
NDAwQkIyNzY3IC8qIERyYWdBbmREcm9wVGVzdHNJT1MubW0gaW4gU291cmNlcyAqLywKKwkJCQlG
NEQ0RjNCNjFFNEUyQkNCMDBCQjI3NjcgLyogRHJhZ2dpbmdTaW11bGF0b3JJT1MubW0gaW4gU291
cmNlcyAqLywKKwkJCQlGNDYxMjhCNzIxMUM4RUQ1MDBEOUZBREIgLyogRHJhZ2dpbmdTaW11bGF0
b3JNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTU1MDIyQTFFMDUwMjBCMDBBMjRDNTcgLyog
RHVwbGljYXRlQ29tcGxldGlvbkhhbmRsZXJDYWxscy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdD
Q0U3RUJFMUE0MTFBN0UwMDQ0N0M0QyAvKiBEeW5hbWljRGV2aWNlU2NhbGVGYWN0b3IubW0gaW4g
U291cmNlcyAqLywKIAkJCQk1QzBCRjg5MjFERDU5OUI2MDBCMDAzMjggLyogRWFybHlLVk9DcmFz
aC5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0KaW5kZXggNDY4OWRhNDNiM2I3
YjE5MWFiMDgxZGYxZWNiYWI0MjgxZGMwMzhiZi4uYWVmYTc1YTlkNjE1ZTk3OWE1YmI4MDE4MDU1
YzJmMzQyNzhjMzk0MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCkBAIC0yNSw3ICsyNSw3IEBACiAK
ICNpbXBvcnQgImNvbmZpZy5oIgogCi0jaW1wb3J0ICJEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Iu
aCIKKyNpbXBvcnQgIkRyYWdnaW5nU2ltdWxhdG9yLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxp
dGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbkV4dHJhcy5oIgpAQCAtMTE5NCw3ICsxMTk0LDcgQEAgVEVTVChXS0F0dGFjaG1l
bnRUZXN0c01hYywgSW5zZXJ0UGFzdGVkRmlsZVVSTHNBc0F0dGFjaG1lbnRzKQogVEVTVChXS0F0
dGFjaG1lbnRUZXN0c0lPUywgSW5zZXJ0RHJvcHBlZEltYWdlQXNBdHRhY2htZW50KQogewogICAg
IGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKLSAgICBhdXRv
IGRyYWdnaW5nU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBh
bGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBhdXRvIGRyYWdnaW5n
U2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdl
YlZpZXc6d2ViVmlldy5nZXQoKV0pOwogICAgIGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdF0pOwogICAgIFtpdGVtIHJlZ2lzdGVyRGF0YTp0ZXN0SW1hZ2VE
YXRhKCkgdHlwZTooTlNTdHJpbmcgKilrVVRUeXBlUE5HXTsKICAgICBbZHJhZ2dpbmdTaW11bGF0
b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW0uZ2V0KCkgXV07CkBAIC0xMjE3LDcg
KzEyMTcsNyBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBJbnNlcnREcm9wcGVkSW1hZ2VB
c0F0dGFjaG1lbnQpCiBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBJbnNlcnREcm9wcGVkQXR0
cmlidXRlZFN0cmluZ0NvbnRhaW5pbmdBdHRhY2htZW50KQogewogICAgIGF1dG8gd2ViVmlldyA9
IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKLSAgICBhdXRvIGRyYWdnaW5nU2ltdWxh
dG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhX
ZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBhdXRvIGRyYWdnaW5nU2ltdWxhdG9yID0gYWRv
cHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5n
ZXQoKV0pOwogICAgIGF1dG8gaW1hZ2UgPSBhZG9wdE5TKFtbTlNUZXh0QXR0YWNobWVudCBhbGxv
Y10gaW5pdFdpdGhEYXRhOnRlc3RJbWFnZURhdGEoKSBvZlR5cGU6KE5TU3RyaW5nICopa1VUVHlw
ZVBOR10pOwogICAgIGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10g
aW5pdF0pOwogICAgIFtpdGVtIHJlZ2lzdGVyT2JqZWN0OltOU0F0dHJpYnV0ZWRTdHJpbmcgYXR0
cmlidXRlZFN0cmluZ1dpdGhBdHRhY2htZW50OmltYWdlLmdldCgpXSB2aXNpYmlsaXR5Ok5TSXRl
bVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsXTsKQEAgLTEyNjAsNyArMTI2MCw3
IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIEluc2VydERyb3BwZWRSaWNoQW5kUGxhaW5U
ZXh0RmlsZXNBc0F0dGFjaG1lbnRzKQogICAgIFtwbGFpblRleHRJdGVtIHNldFN1Z2dlc3RlZE5h
bWU6QCJ3b3JsZC50eHQiXTsKIAogICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5n
QXR0YWNobWVudHMoKTsKLSAgICBhdXRvIGRyYWdnaW5nU2ltdWxhdG9yID0gYWRvcHROUyhbW0Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKKyAgICBhdXRvIGRyYWdnaW5nU2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2lt
dWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwogICAgIFtkcmFn
Z2luZ1NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgcmljaFRleHRJdGVtLmdl
dCgpLCBwbGFpblRleHRJdGVtLmdldCgpIF1dOwogICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBydW5G
cm9tOkNHUG9pbnRaZXJvIHRvOkNHUG9pbnRNYWtlKDUwLCA1MCldOwogCkBAIC0xMjkzLDcgKzEy
OTMsNyBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBJbnNlcnREcm9wcGVkWmlwQXJjaGl2
ZUFzQXR0YWNobWVudCkKICAgICBbaXRlbSBzZXRTdWdnZXN0ZWROYW1lOkAiYXJjaGl2ZS56aXAi
XTsKIAogICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsK
LSAgICBhdXRvIGRyYWdnaW5nU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBhdXRv
IGRyYWdnaW5nU2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBp
bml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwogICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBz
ZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbS5nZXQoKSBdXTsKICAgICBbZHJhZ2dpbmdT
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50WmVybyB0bzpDR1BvaW50TWFrZSg1MCwgNTApXTsKIApA
QCAtMTMyMyw3ICsxMzIzLDcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0c0lPUywgSW5zZXJ0RHJv
cHBlZEl0ZW1Qcm92aWRlcnNJbk9yZGVyKQogICAgIFtzZWNvbmRBdHRhY2htZW50SXRlbSBzZXRT
dWdnZXN0ZWROYW1lOkAic2Vjb25kLnBkZiJdOwogCiAgICAgYXV0byB3ZWJWaWV3ID0gd2ViVmll
d0ZvclRlc3RpbmdBdHRhY2htZW50cygpOwotICAgIGF1dG8gZHJhZ2dpbmdTaW11bGF0b3IgPSBh
ZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6
d2ViVmlldy5nZXQoKV0pOworICAgIGF1dG8gZHJhZ2dpbmdTaW11bGF0b3IgPSBhZG9wdE5TKFtb
RHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7
CiAgICAgW2RyYWdnaW5nU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBmaXJz
dEF0dGFjaG1lbnRJdGVtLmdldCgpLCBpbmxpbmVUZXh0SXRlbS5nZXQoKSwgc2Vjb25kQXR0YWNo
bWVudEl0ZW0uZ2V0KCkgXV07CiAgICAgW2RyYWdnaW5nU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2lu
dFplcm8gdG86Q0dQb2ludE1ha2UoNTAsIDUwKV07CiAKQEAgLTEzNTUsNyArMTM1NSw3IEBAIFRF
U1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIERyYWdBdHRhY2htZW50SW5zZXJ0ZWRBc0ZpbGUpCiAg
ICAgW2l0ZW0gc2V0U3VnZ2VzdGVkTmFtZTpAImRvY3VtZW50LnBkZiJdOwogCiAgICAgYXV0byB3
ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOwotICAgIGF1dG8gZHJhZ2dp
bmdTaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBp
bml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIGF1dG8gZHJhZ2dpbmdTaW11bGF0
b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3
ZWJWaWV3LmdldCgpXSk7CiAgICAgW2RyYWdnaW5nU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVBy
b3ZpZGVyczpAWyBpdGVtLmdldCgpIF1dOwogICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBydW5Gcm9t
OkNHUG9pbnRaZXJvIHRvOkNHUG9pbnRNYWtlKDUwLCA1MCldOwogCkBAIC0xMzk2LDcgKzEzOTYs
NyBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBEcmFnQXR0YWNobWVudEluc2VydGVkQXNE
YXRhKQogICAgIEVYUEVDVF9XS19TVFJFUSgiYXBwbGljYXRpb24vcGRmIiwgW3dlYlZpZXcgdmFs
dWVPZkF0dHJpYnV0ZTpAInR5cGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2htZW50Il0pOwog
CiAgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3Zl
QWxsUmFuZ2VzKCkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07Ci0gICAgYXV0byBkcmFnZ2luZ1Np
bXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgYXV0byBkcmFnZ2luZ1NpbXVsYXRvciA9
IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZp
ZXcuZ2V0KCldKTsKICAgICBbZHJhZ2dpbmdTaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgy
NSwgMjUpIHRvOkNHUG9pbnRNYWtlKC0xMDAsIC0xMDApXTsKIAogICAgIC8vIE5leHQsIHZlcmlm
eSB0aGF0IGRyYWdnaW5nIHRoZSBhdHRhY2htZW50IHByb2R1Y2VzIGFuIGl0ZW0gcHJvdmlkZXIg
d2l0aCBhIFBERiBhdHRhY2htZW50LgpAQCAtMTQyNSw3ICsxNDI1LDcgQEAgVEVTVChXS0F0dGFj
aG1lbnRUZXN0c0lPUywgRHJhZ0luUGxhY2VWaWRlb0F0dGFjaG1lbnRFbGVtZW50KQogICAgIEVY
UEVDVF9XS19TVFJFUSgidmlkZW8vbXA0IiwgW3dlYlZpZXcgdmFsdWVPZkF0dHJpYnV0ZTpAInR5
cGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2htZW50Il0pOwogCiAgICAgW3dlYlZpZXcgZXZh
bHVhdGVKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkiIGNvbXBs
ZXRpb25IYW5kbGVyOm5pbF07Ci0gICAgYXV0byBkcmFnZ2luZ1NpbXVsYXRvciA9IGFkb3B0TlMo
W1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3
LmdldCgpXSk7CisgICAgYXV0byBkcmFnZ2luZ1NpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2lu
Z1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKICAgICBb
ZHJhZ2dpbmdTaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyNSwgMjUpIHRvOkNHUG9pbnRN
YWtlKC0xMDAsIC0xMDApXTsKIAogICAgIEVYUEVDVF9FUSgxVSwgW2RyYWdnaW5nU2ltdWxhdG9y
IHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmNvdW50KTsKQEAgLTE0NTIsNyArMTQ1Miw3IEBAIFRFU1Qo
V0tBdHRhY2htZW50VGVzdHNJT1MsIE1vdmVBdHRhY2htZW50RWxlbWVudEFzSWNvbkJ5RHJhZ2dp
bmcpCiAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJJbnNl
cnRQYXJhZ3JhcGgiIGFyZ3VtZW50Om5pbF07CiAgICAgW3dlYlZpZXcgZXhwZWN0RWxlbWVudFRh
ZzpAIkFUVEFDSE1FTlQiIHRvQ29tZUJlZm9yZTpAIlNUUk9ORyJdOwogCi0gICAgYXV0byBkcmFn
Z2luZ1NpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2Nd
IGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgYXV0byBkcmFnZ2luZ1NpbXVs
YXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3
OndlYlZpZXcuZ2V0KCldKTsKICAgICBbZHJhZ2dpbmdTaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50
TWFrZSgyNSwgMjUpIHRvOkNHUG9pbnRNYWtlKDI1LCA0MjUpXTsKIAogICAgIGF0dGFjaG1lbnQg
PSBbW2RyYWdnaW5nU2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVudHNdIGZpcnN0T2JqZWN0XTsK
QEAgLTE0ODEsNyArMTQ4MSw3IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIE1vdmVJblBs
YWNlQXR0YWNobWVudEVsZW1lbnRCeURyYWdnaW5nKQogICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91
c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiSW5zZXJ0UGFyYWdyYXBoIiBhcmd1bWVudDpuaWxdOwog
ICAgIFt3ZWJWaWV3IGV4cGVjdEVsZW1lbnRUYWc6QCJBVFRBQ0hNRU5UIiB0b0NvbWVCZWZvcmU6
QCJTVFJPTkciXTsKIAotICAgIGF1dG8gZHJhZ2dpbmdTaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQo
KV0pOworICAgIGF1dG8gZHJhZ2dpbmdTaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11
bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CiAgICAgW2RyYWdn
aW5nU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjUsIDI1KSB0bzpDR1BvaW50TWFrZSgy
NSwgNDI1KV07CiAKICAgICBhdHRhY2htZW50ID0gW1tkcmFnZ2luZ1NpbXVsYXRvciBpbnNlcnRl
ZEF0dGFjaG1lbnRzXSBmaXJzdE9iamVjdF07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL2lvcy9EYXRhSW50ZXJhY3Rpb25UZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvaW9zL0RhdGFJbnRlcmFjdGlvblRlc3RzLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBlNWJhODdiYmI0MWRhZjk3Mzc0MzFkMDhhODZkYWMwMmQxYTVhOWE1Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvaW9zL0RhdGFJbnRlcmFjdGlvblRlc3RzLm1tCisrKyAvZGV2L251bGwKQEAg
LTEsMTkxMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYg
RU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCi0KLSNpbXBvcnQgIkRhdGFJbnRlcmFjdGlvblNpbXVs
YXRvci5oIgotI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKLSNpbXBvcnQgIlRlc3RXS1dl
YlZpZXcuaCIKLSNpbXBvcnQgIlVJS2l0U1BJLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1
cmF0aW9uRXh0cmFzLmgiCi0jaW1wb3J0IDxNb2JpbGVDb3JlU2VydmljZXMvTW9iaWxlQ29yZVNl
cnZpY2VzLmg+Ci0jaW1wb3J0IDxVSUtpdC9OU0l0ZW1Qcm92aWRlcitVSUtpdEFkZGl0aW9ucy5o
PgotI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJL
aXQvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQ
b29sUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2
YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC5oPgotI2lt
cG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgotI2ltcG9ydCA8d3Rm
L1NlY29uZHMuaD4KLQotdHlwZWRlZiB2b2lkICheRmlsZUxvYWRDb21wbGV0aW9uQmxvY2spKE5T
VVJMICosIEJPT0wsIE5TRXJyb3IgKik7Ci10eXBlZGVmIHZvaWQgKF5EYXRhTG9hZENvbXBsZXRp
b25CbG9jaykoTlNEYXRhICosIE5TRXJyb3IgKik7Ci10eXBlZGVmIHZvaWQgKF5VSUl0ZW1Qcm92
aWRlckRhdGFMb2FkQ29tcGxldGlvbkJsb2NrKShOU0RhdGEgKiwgTlNFcnJvciAqKTsKLQotI2lm
ICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotCi1AaW50ZXJmYWNlIFVJSXRlbVByb3ZpZGVyUmVw
cmVzZW50YXRpb25PcHRpb25zIDogTlNPYmplY3QKLUBlbmQKLQotI2VuZGlmCi0KLUBpbnRlcmZh
Y2UgVUlJdGVtUHJvdmlkZXIoKQotKyAoVUlJdGVtUHJvdmlkZXIgKilpdGVtUHJvdmlkZXJXaXRo
VVJMOihOU1VSTCAqKXVybCB0aXRsZTooTlNTdHJpbmcgKil0aXRsZTsKLS0gKHZvaWQpIHJlZ2lz
dGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopdHlwZUlk
ZW50aWZpZXIgb3B0aW9uczooVUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnMqKW9w
dGlvbnMgbG9hZEhhbmRsZXI6KE5TUHJvZ3Jlc3MgKiAoXikodm9pZCAoXlVJSXRlbVByb3ZpZGVy
RGF0YUxvYWRDb21wbGV0aW9uQmxvY2spKE5TRGF0YSAqaXRlbSwgTlNFcnJvciAqZXJyb3IpKSkg
bG9hZEhhbmRsZXI7Ci1AZW5kCi0KLXN0YXRpYyBOU1N0cmluZyAqSW5qZWN0ZWRCdW5kbGVQYXN0
ZWJvYXJkRGF0YVR5cGUgPSBAIm9yZy53ZWJraXQuZGF0YSI7Ci0KLXN0YXRpYyBVSUltYWdlICp0
ZXN0SWNvbkltYWdlKCkKLXsKLSAgICByZXR1cm4gW1VJSW1hZ2UgaW1hZ2VOYW1lZDpAIlRlc3RX
ZWJLaXRBUEkucmVzb3VyY2VzL2ljb24ucG5nIl07Ci19Ci0KLXN0YXRpYyBOU0RhdGEgKnRlc3Ra
SVBBcmNoaXZlKCkKLXsKLSAgICBOU1VSTCAqemlwRmlsZVVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1
bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJjb21wcmVzc2VkLWZpbGVzIiB3aXRoRXh0ZW5zaW9uOkAi
emlwIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwotICAgIHJldHVy
biBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZlVSTDp6aXBGaWxlVVJMXTsKLX0KLQotQGltcGxl
bWVudGF0aW9uIFVJSXRlbVByb3ZpZGVyIChEYXRhSW50ZXJhY3Rpb25UZXN0cykKLQotLSAodm9p
ZClyZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAq
KXR5cGVJZGVudGlmaWVyIHdpdGhEYXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgUmV0YWluUHRy
PE5TRGF0YT4gcmV0YWluZWREYXRhID0gZGF0YTsKLSAgICBbc2VsZiByZWdpc3RlckRhdGFSZXBy
ZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOnR5cGVJZGVudGlmaWVyIHZpc2liaWxpdHk6VUlJ
dGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsIGxvYWRIYW5kbGVy
OiBbcmV0YWluZWREYXRhXSAoRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sgYmxvY2spIC0+IE5TUHJv
Z3Jlc3MgKiB7Ci0gICAgICAgIGJsb2NrKHJldGFpbmVkRGF0YS5nZXQoKSwgbmlsKTsKLSAgICAg
ICAgcmV0dXJuIFtOU1Byb2dyZXNzIGRpc2NyZXRlUHJvZ3Jlc3NXaXRoVG90YWxVbml0Q291bnQ6
MTAwXTsKLSAgICB9XTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFdLV2ViVmll
dyAoRGF0YUludGVyYWN0aW9uVGVzdHMpCi0KLS0gKEJPT0wpZWRpdG9yQ29udGFpbnNJbWFnZUVs
ZW1lbnQKLXsKLSAgICByZXR1cm4gW3NlbGYgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
IiEhZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIl0uYm9vbFZhbHVlOwotfQotCi0tIChOU1N0
cmluZyAqKWVkaXRvclZhbHVlCi17Ci0gICAgcmV0dXJuIFtzZWxmIHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJlZGl0b3IudmFsdWUiXTsKLX0KLQotQGVuZAotCi1zdGF0aWMgTlNWYWx1
ZSAqbWFrZUNHUmVjdFZhbHVlKENHRmxvYXQgeCwgQ0dGbG9hdCB5LCBDR0Zsb2F0IHdpZHRoLCBD
R0Zsb2F0IGhlaWdodCkKLXsKLSAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OkNH
UmVjdE1ha2UoeCwgeSwgd2lkdGgsIGhlaWdodCldOwotfQotCi1zdGF0aWMgdm9pZCBjaGVja0NH
UmVjdElzRXF1YWxUb0NHUmVjdFdpdGhMb2dnaW5nKENHUmVjdCBleHBlY3RlZCwgQ0dSZWN0IG9i
c2VydmVkKQotewotICAgIEJPT0wgaXNFcXVhbCA9IENHUmVjdEVxdWFsVG9SZWN0KGV4cGVjdGVk
LCBvYnNlcnZlZCk7Ci0gICAgRVhQRUNUX1RSVUUoaXNFcXVhbCk7Ci0gICAgaWYgKCFpc0VxdWFs
KQotICAgICAgICBOU0xvZyhAIkV4cGVjdGVkOiAlQCBidXQgb2JzZXJ2ZWQ6ICVAIiwgTlNTdHJp
bmdGcm9tQ0dSZWN0KGV4cGVjdGVkKSwgTlNTdHJpbmdGcm9tQ0dSZWN0KG9ic2VydmVkKSk7Ci19
Ci0KLXN0YXRpYyB2b2lkIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhOU0FycmF5ICpl
eHBlY3RlZCwgTlNBcnJheSAqb2JzZXJ2ZWQpCi17Ci0gICAgaWYgKCFbZXhwZWN0ZWQgaXNFcXVh
bFRvQXJyYXk6b2JzZXJ2ZWRdKQotICAgICAgICBOU0xvZyhAIkV4cGVjdGVkIHNlbGVjdGlvbiBy
ZWN0czogJUAgYnV0IG9ic2VydmVkOiAlQCIsIGV4cGVjdGVkLCBvYnNlcnZlZCk7Ci0gICAgRVhQ
RUNUX1RSVUUoW2V4cGVjdGVkIGlzRXF1YWxUb0FycmF5Om9ic2VydmVkXSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGNoZWNrUmljaFRleHRUeXBlUHJlY2VkZXNQbGFpblRleHRUeXBlKERhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciAqc2ltdWxhdG9yKQotewotICAgIC8vIEF0IGxlYXN0IG9uZSBvZiAiY29t
LmFwcGxlLmZsYXQtcnRmZCIgb3IgInB1YmxpYy5ydGYiIGlzIGV4cGVjdGVkIHRvIGhhdmUgaGln
aGVyIHByZWNlZGVuY2UgdGhhbiAicHVibGljLnV0ZjgtcGxhaW4tdGV4dCIuCi0gICAgTlNBcnJh
eSAqcmVnaXN0ZXJlZFR5cGVzID0gW3NpbXVsYXRvci5zb3VyY2VJdGVtUHJvdmlkZXJzLmZpcnN0
T2JqZWN0IHJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnNdOwotICAgIGF1dG8gaW5kZXhPZlJURlR5
cGUgPSBbcmVnaXN0ZXJlZFR5cGVzIGluZGV4T2ZPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZVJU
Rl07Ci0gICAgYXV0byBpbmRleE9mRmxhdFJURkRUeXBlID0gW3JlZ2lzdGVyZWRUeXBlcyBpbmRl
eE9mT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVGbGF0UlRGRF07Ci0gICAgYXV0byBpbmRleE9m
UGxhaW5UZXh0VHlwZSA9IFtyZWdpc3RlcmVkVHlwZXMgaW5kZXhPZk9iamVjdDooTlNTdHJpbmcg
KilrVVRUeXBlVVRGOFBsYWluVGV4dF07Ci0gICAgRVhQRUNUX05FKChOU0ludGVnZXIpaW5kZXhP
ZlBsYWluVGV4dFR5cGUsIE5TTm90Rm91bmQpOwotICAgIEVYUEVDVF9UUlVFKChpbmRleE9mUlRG
VHlwZSAhPSBOU05vdEZvdW5kICYmIGluZGV4T2ZSVEZUeXBlIDwgaW5kZXhPZlBsYWluVGV4dFR5
cGUpIHx8IChpbmRleE9mRmxhdFJURkRUeXBlICE9IE5TTm90Rm91bmQgJiYgaW5kZXhPZkZsYXRS
VEZEVHlwZSA8IGluZGV4T2ZQbGFpblRleHRUeXBlKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNr
Rmlyc3RUeXBlSXNQcmVzZW50QW5kU2Vjb25kVHlwZUlzTWlzc2luZyhEYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IgKnNpbXVsYXRvciwgQ0ZTdHJpbmdSZWYgZmlyc3RUeXBlLCBDRlN0cmluZ1JlZiBz
ZWNvbmRUeXBlKQotewotICAgIE5TQXJyYXkgKnJlZ2lzdGVyZWRUeXBlcyA9IFtzaW11bGF0b3Iu
c291cmNlSXRlbVByb3ZpZGVycy5maXJzdE9iamVjdCByZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJz
XTsKLSAgICBFWFBFQ1RfVFJVRShbcmVnaXN0ZXJlZFR5cGVzIGNvbnRhaW5zT2JqZWN0OihOU1N0
cmluZyAqKWZpcnN0VHlwZV0pOwotICAgIEVYUEVDVF9GQUxTRShbcmVnaXN0ZXJlZFR5cGVzIGNv
bnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKXNlY29uZFR5cGVdKTsKLX0KLQotc3RhdGljIHZvaWQg
Y2hlY2tUeXBlSWRlbnRpZmllcklzUmVnaXN0ZXJlZEF0SW5kZXgoRGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yICpzaW11bGF0b3IsIE5TU3RyaW5nICp0eXBlLCBOU1VJbnRlZ2VyIGluZGV4KQotewot
ICAgIE5TQXJyYXkgKnJlZ2lzdGVyZWRUeXBlcyA9IFtzaW11bGF0b3Iuc291cmNlSXRlbVByb3Zp
ZGVycy5maXJzdE9iamVjdCByZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzXTsKLSAgICBFWFBFQ1Rf
R1QocmVnaXN0ZXJlZFR5cGVzLmNvdW50LCBpbmRleCk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKHR5
cGUuVVRGOFN0cmluZywgW3JlZ2lzdGVyZWRUeXBlc1tpbmRleF0gVVRGOFN0cmluZ10pOwotfQot
Ci1zdGF0aWMgdm9pZCBjaGVja0VzdGltYXRlZFNpemUoRGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
ICpzaW11bGF0b3IsIENHU2l6ZSBlc3RpbWF0ZWRTaXplKQotewotICAgIFVJSXRlbVByb3ZpZGVy
ICpzb3VyY2VJdGVtUHJvdmlkZXIgPSBbc2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZp
cnN0T2JqZWN0OwotICAgIEVYUEVDVF9FUShlc3RpbWF0ZWRTaXplLndpZHRoLCBzb3VyY2VJdGVt
UHJvdmlkZXIucHJlZmVycmVkUHJlc2VudGF0aW9uU2l6ZS53aWR0aCk7Ci0gICAgRVhQRUNUX0VR
KGVzdGltYXRlZFNpemUuaGVpZ2h0LCBzb3VyY2VJdGVtUHJvdmlkZXIucHJlZmVycmVkUHJlc2Vu
dGF0aW9uU2l6ZS5oZWlnaHQpOwotfQotCi1zdGF0aWMgdm9pZCBjaGVja1N1Z2dlc3RlZE5hbWVB
bmRFc3RpbWF0ZWRTaXplKERhdGFJbnRlcmFjdGlvblNpbXVsYXRvciAqc2ltdWxhdG9yLCBOU1N0
cmluZyAqc3VnZ2VzdGVkTmFtZSwgQ0dTaXplIGVzdGltYXRlZFNpemUpCi17Ci0gICAgVUlJdGVt
UHJvdmlkZXIgKnNvdXJjZUl0ZW1Qcm92aWRlciA9IFtzaW11bGF0b3Igc291cmNlSXRlbVByb3Zp
ZGVyc10uZmlyc3RPYmplY3Q7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKHN1Z2dlc3RlZE5hbWUuVVRG
OFN0cmluZywgc291cmNlSXRlbVByb3ZpZGVyLnN1Z2dlc3RlZE5hbWUuVVRGOFN0cmluZyk7Ci0g
ICAgRVhQRUNUX0VRKGVzdGltYXRlZFNpemUud2lkdGgsIHNvdXJjZUl0ZW1Qcm92aWRlci5wcmVm
ZXJyZWRQcmVzZW50YXRpb25TaXplLndpZHRoKTsKLSAgICBFWFBFQ1RfRVEoZXN0aW1hdGVkU2l6
ZS5oZWlnaHQsIHNvdXJjZUl0ZW1Qcm92aWRlci5wcmVmZXJyZWRQcmVzZW50YXRpb25TaXplLmhl
aWdodCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNrU3RyaW5nQXJyYXlzQXJlRXF1YWwoTlNBcnJh
eTxOU1N0cmluZyAqPiAqZXhwZWN0ZWQsIE5TQXJyYXk8TlNTdHJpbmcgKj4gKm9ic2VydmVkKQot
ewotICAgIEVYUEVDVF9FUShleHBlY3RlZC5jb3VudCwgb2JzZXJ2ZWQuY291bnQpOwotICAgIGZv
ciAoTlNVSW50ZWdlciBpbmRleCA9IDA7IGluZGV4IDwgZXhwZWN0ZWQuY291bnQ7ICsraW5kZXgp
IHsKLSAgICAgICAgTlNTdHJpbmcgKmV4cGVjdGVkU3RyaW5nID0gW2V4cGVjdGVkIG9iamVjdEF0
SW5kZXg6aW5kZXhdOwotICAgICAgICBOU1N0cmluZyAqb2JzZXJ2ZWRTdHJpbmcgPSBbb2JzZXJ2
ZWQgb2JqZWN0QXRJbmRleDppbmRleF07Ci0gICAgICAgIEVYUEVDVF9XS19TVFJFUShleHBlY3Rl
ZFN0cmluZywgb2JzZXJ2ZWRTdHJpbmcpOwotICAgICAgICBpZiAoIVtleHBlY3RlZFN0cmluZyBp
c0VxdWFsVG9TdHJpbmc6b2JzZXJ2ZWRTdHJpbmddKQotICAgICAgICAgICAgTlNMb2coQCJFeHBl
Y3RlZCBvYnNlcnZlZCBzdHJpbmc6ICVAIHRvIG1hdGNoIGV4cGVjdGVkIHN0cmluZzogJUAgYXQg
aW5kZXg6ICV0dSIsIG9ic2VydmVkU3RyaW5nLCBleHBlY3RlZFN0cmluZywgaW5kZXgpOwotICAg
IH0KLX0KLQotc3RhdGljIHZvaWQgY2hlY2tEcmFnQ2FyZXRSZWN0SXNDb250YWluZWRJblJlY3Qo
Q0dSZWN0IGNhcmV0UmVjdCwgQ0dSZWN0IGNvbnRhaW5lclJlY3QpCi17Ci0gICAgQk9PTCBjb250
YWluZWQgPSBDR1JlY3RDb250YWluc1JlY3QoY29udGFpbmVyUmVjdCwgY2FyZXRSZWN0KTsKLSAg
ICBFWFBFQ1RfVFJVRShjb250YWluZWQpOwotICAgIGlmICghY29udGFpbmVkKQotICAgICAgICBO
U0xvZyhAIkV4cGVjdGVkIGNhcmV0IHJlY3Q6ICVAIHRvIGZpdCB3aXRoaW4gY29udGFpbmVyIHJl
Y3Q6ICVAIiwgTlNTdHJpbmdGcm9tQ0dSZWN0KGNhcmV0UmVjdCksIE5TU3RyaW5nRnJvbUNHUmVj
dChjb250YWluZXJSZWN0KSk7Ci19Ci0KLSNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMTAzMDAKLQotc3RhdGljIHZvaWQgY2hlY2tKU09OV2l0aExvZ2dpbmcoTlNTdHJp
bmcgKmpzb25TdHJpbmcsIE5TRGljdGlvbmFyeSAqZXhwZWN0ZWQpCi17Ci0gICAgQk9PTCBzdWNj
ZXNzID0gVGVzdFdlYktpdEFQSTo6VXRpbDo6anNvbk1hdGNoZXNFeHBlY3RlZFZhbHVlcyhqc29u
U3RyaW5nLCBleHBlY3RlZCk7Ci0gICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7Ci0gICAgaWYgKCFz
dWNjZXNzKQotICAgICAgICBOU0xvZyhAIkV4cGVjdGVkIEpTT046ICVAIHRvIG1hdGNoIHZhbHVl
czogJUAiLCBqc29uU3RyaW5nLCBleHBlY3RlZCk7Ci19Ci0KLXN0YXRpYyBOU0RhdGEgKnRlc3RJ
Y29uSW1hZ2VEYXRhKCkKLXsKLSAgICByZXR1cm4gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZV
Ukw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAImljb24iIHdpdGhFeHRl
bnNpb246QCJwbmciIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOwot
fQotCi1zdGF0aWMgdm9pZCBydW5UZXN0V2l0aFRlbXBvcmFyeVRleHRGaWxlKHZvaWQoXnJ1blRl
c3QpKE5TVVJMICpmaWxlVVJMKSkKLXsKLSAgICBOU1N0cmluZyAqZmlsZU5hbWUgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAImRyYWctZHJvcC10ZXh0LWZpbGUtJUAudHh0IiwgW05TVVVJ
RCBVVUlEXS5VVUlEU3RyaW5nXTsKLSAgICBSZXRhaW5QdHI8TlNVUkw+IHRlbXBvcmFyeUZpbGUg
PSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5
QXBwZW5kaW5nUGF0aENvbXBvbmVudDpmaWxlTmFtZV0gaXNEaXJlY3Rvcnk6Tk9dOwotICAgIFtb
TlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0VVJMOnRlbXBvcmFyeUZp
bGUuZ2V0KCkgZXJyb3I6bmlsXTsKLQotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwotICAgIFtA
IlRoaXMgaXMgYSB0aW55IGJsb2Igb2YgdGV4dC4iIHdyaXRlVG9VUkw6dGVtcG9yYXJ5RmlsZS5n
ZXQoKSBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjom
ZXJyb3JdOwotCi0gICAgaWYgKGVycm9yKQotICAgICAgICBOU0xvZyhAIkVycm9yIHdyaXRpbmcg
dGVtcG9yYXJ5IGZpbGU6ICVAIiwgZXJyb3IpOwotCi0gICAgQHRyeSB7Ci0gICAgICAgIHJ1blRl
c3QodGVtcG9yYXJ5RmlsZS5nZXQoKSk7Ci0gICAgfSBAZmluYWxseSB7Ci0gICAgICAgIFtbTlNG
aWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0VVJMOnRlbXBvcmFyeUZpbGUu
Z2V0KCkgZXJyb3I6bmlsXTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHJ1blRlc3RXaXRoVGVt
cG9yYXJ5Rm9sZGVyKHZvaWQoXnJ1blRlc3QpKE5TVVJMICpmb2xkZXJVUkwpKQotewotICAgIE5T
U3RyaW5nICpmb2xkZXJOYW1lID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJzb21lLmRp
cmVjdG9yeS0lQCIsIFtOU1VVSUQgVVVJRF0uVVVJRFN0cmluZ107Ci0gICAgUmV0YWluUHRyPE5T
VVJMPiB0ZW1wb3JhcnlGb2xkZXIgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFy
eURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpmb2xkZXJOYW1lXSBp
c0RpcmVjdG9yeTpZRVNdOwotICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVt
b3ZlSXRlbUF0VVJMOnRlbXBvcmFyeUZvbGRlci5nZXQoKSBlcnJvcjpuaWxdOwotCi0gICAgTlNF
cnJvciAqZXJyb3IgPSBuaWw7Ci0gICAgTlNGaWxlTWFuYWdlciAqZGVmYXVsdE1hbmFnZXIgPSBb
TlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07Ci0gICAgW2RlZmF1bHRNYW5hZ2VyIGNyZWF0
ZURpcmVjdG9yeUF0VVJMOnRlbXBvcmFyeUZvbGRlci5nZXQoKSB3aXRoSW50ZXJtZWRpYXRlRGly
ZWN0b3JpZXM6Tk8gYXR0cmlidXRlczpuaWwgZXJyb3I6JmVycm9yXTsKLSAgICBbdGVzdEljb25J
bWFnZURhdGEoKSB3cml0ZVRvVVJMOlt0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkgVVJMQnlBcHBlbmRp
bmdQYXRoQ29tcG9uZW50OkAiaWNvbi5wbmciIGlzRGlyZWN0b3J5Ok5PXSBhdG9taWNhbGx5OllF
U107Ci0gICAgW3Rlc3RaSVBBcmNoaXZlKCkgd3JpdGVUb1VSTDpbdGVtcG9yYXJ5Rm9sZGVyLmdl
dCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImFyY2hpdmUuemlwIiBpc0RpcmVjdG9y
eTpOT10gYXRvbWljYWxseTpZRVNdOwotCi0gICAgTlNVUkwgKmZpcnN0U3ViZGlyZWN0b3J5ID0g
W3RlbXBvcmFyeUZvbGRlci5nZXQoKSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJzdWJk
aXJlY3RvcnkxIiBpc0RpcmVjdG9yeTpZRVNdOwotICAgIFtkZWZhdWx0TWFuYWdlciBjcmVhdGVE
aXJlY3RvcnlBdFVSTDpmaXJzdFN1YmRpcmVjdG9yeSB3aXRoSW50ZXJtZWRpYXRlRGlyZWN0b3Jp
ZXM6Tk8gYXR0cmlidXRlczpuaWwgZXJyb3I6JmVycm9yXTsKLSAgICBbQCJJIGFtIGEgdGV4dCBm
aWxlIGluIHRoZSBmaXJzdCBzdWJkaXJlY3RvcnkuIiB3cml0ZVRvVVJMOltmaXJzdFN1YmRpcmVj
dG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJ0ZXh0LWZpbGUtMS50eHQiIGlzRGly
ZWN0b3J5Ok5PXSBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBl
cnJvcjomZXJyb3JdOwotCi0gICAgTlNVUkwgKnNlY29uZFN1YmRpcmVjdG9yeSA9IFt0ZW1wb3Jh
cnlGb2xkZXIuZ2V0KCkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAic3ViZGlyZWN0b3J5
MiIgaXNEaXJlY3Rvcnk6WUVTXTsKLSAgICBbZGVmYXVsdE1hbmFnZXIgY3JlYXRlRGlyZWN0b3J5
QXRVUkw6c2Vjb25kU3ViZGlyZWN0b3J5IHdpdGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpOTyBh
dHRyaWJ1dGVzOm5pbCBlcnJvcjomZXJyb3JdOwotICAgIFtAIkkgYW0gYSB0ZXh0IGZpbGUgaW4g
dGhlIHNlY29uZCBzdWJkaXJlY3RvcnkuIiB3cml0ZVRvVVJMOltzZWNvbmRTdWJkaXJlY3Rvcnkg
VVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAidGV4dC1maWxlLTIudHh0IiBpc0RpcmVjdG9y
eTpOT10gYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6
JmVycm9yXTsKLQotICAgIGlmIChlcnJvcikKLSAgICAgICAgTlNMb2coQCJFcnJvciB3cml0aW5n
IHRlbXBvcmFyeSBmaWxlOiAlQCIsIGVycm9yKTsKLQotICAgIEB0cnkgewotICAgICAgICBydW5U
ZXN0KHRlbXBvcmFyeUZvbGRlci5nZXQoKSk7Ci0gICAgfSBAZmluYWxseSB7Ci0gICAgICAgIFtb
TlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0VVJMOnRlbXBvcmFyeUZv
bGRlci5nZXQoKSBlcnJvcjpuaWxdOwotICAgIH0KLX0KLQotI2VuZGlmIC8vIF9fSVBIT05FX09T
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDMwMAotCi1uYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SSB7Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEltYWdlVG9Db250ZW50RWRpdGFibGUp
Ci17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJpbWFnZS1hbmQtY29udGVudGVkaXRhYmxl
Il07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgp
XSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEw
MCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfVFJVRShbd2Vi
VmlldyBlZGl0b3JDb250YWluc0ltYWdlRWxlbWVudF0pOwotCi0gICAgTlNBcnJheSAqb2JzZXJ2
ZWRFdmVudE5hbWVzID0gW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBvYnNlcnZlZEV2ZW50TmFt
ZXNdOwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6
RGF0YUludGVyYWN0aW9uRW50ZXJFdmVudE5hbWVdKTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2
ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbk92ZXJFdmVudE5hbWVd
KTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRh
dGFJbnRlcmFjdGlvblBlcmZvcm1PcGVyYXRpb25FdmVudE5hbWVdKTsKLSAgICBjaGVja1NlbGVj
dGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgbWFrZUNHUmVjdFZhbHVlKDEsIDIwMSwgMjE1LCAxNzQp
IF0sIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0c10pOwotICAg
IGNoZWNrRmlyc3RUeXBlSXNQcmVzZW50QW5kU2Vjb25kVHlwZUlzTWlzc2luZyhkYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3IuZ2V0KCksIGtVVFR5cGVQTkcsIGtVVFR5cGVGaWxlVVJMKTsKLSAgICBj
aGVja0VzdGltYXRlZFNpemUoZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmdldCgpLCB7IDIxNSwg
MTc0IH0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBDYW5TdGFydERyYWdPbkVu
b3Jtb3VzSW1hZ2UpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAg
ICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8aW1nIHNyYz0nZW5vcm1v
dXMuc3ZnJz48L2ltZz4iXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0g
YWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3
OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoMTAwLCAxMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMTAwKV07Ci0KLSAgICBO
U0FycmF5ICpyZWdpc3RlcmVkVHlwZXMgPSBbW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzb3Vy
Y2VJdGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdCByZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzXTsK
LSAgICBFWFBFQ1RfV0tfU1RSRVEoKE5TU3RyaW5nICopa1VUVHlwZVNjYWxhYmxlVmVjdG9yR3Jh
cGhpY3MsIFtyZWdpc3RlcmVkVHlwZXMgZmlyc3RPYmplY3RdKTsKLX0KLQotVEVTVChEYXRhSW50
ZXJhY3Rpb25UZXN0cywgSW1hZ2VUb1RleHRhcmVhKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwg
MCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5h
bWVkOkAiaW1hZ2UtYW5kLXRleHRhcmVhIl07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07
Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IGVkaXRvclZhbHVlXSk7Ci0KLSAg
ICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
IG9ic2VydmVkRXZlbnROYW1lc107Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1l
cyBjb250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25FbnRlckV2ZW50TmFtZV0pOwotICAgIEVY
UEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0
aW9uT3ZlckV2ZW50TmFtZV0pOwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMg
Y29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uUGVyZm9ybU9wZXJhdGlvbkV2ZW50TmFtZV0p
OwotICAgIGNoZWNrRmlyc3RUeXBlSXNQcmVzZW50QW5kU2Vjb25kVHlwZUlzTWlzc2luZyhkYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCksIGtVVFR5cGVQTkcsIGtVVFR5cGVGaWxlVVJMKTsK
LSAgICBjaGVja0VzdGltYXRlZFNpemUoZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmdldCgpLCB7
IDIxNSwgMTc0IH0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBJbWFnZUluTGlu
a1RvSW5wdXQpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBb
d2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJpbWFnZS1pbi1saW5rLWFu
ZC1pbnB1dCJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5T
KFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmll
dy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50
TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgRVhQRUNUX1dL
X1NUUkVRKCJodHRwczovL3d3dy5hcHBsZS5jb20vIiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVdLlVU
RjhTdHJpbmcpOwotICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dS
ZWN0VmFsdWUoMTAxLCAyNDEsIDIwNTcsIDIzMikgXSwgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7Ci0gICAgY2hlY2tTdWdnZXN0ZWROYW1lQW5kRXN0aW1h
dGVkU2l6ZShkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCksIEAiaWNvbi5wbmciLCB7IDIx
NSwgMTc0IH0pOwotICAgIGNoZWNrVHlwZUlkZW50aWZpZXJJc1JlZ2lzdGVyZWRBdEluZGV4KGRh
dGFJbnRlcmFjdGlvblNpbXVsYXRvci5nZXQoKSwgKE5TU3RyaW5nICopa1VUVHlwZVBORywgMCk7
Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEltYWdlSW5MaW5rV2l0aG91dEhSRUZU
b0lucHV0KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiaW1hZ2UtaW4tbGluay1hbmQt
aW5wdXQiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAibGlu
ay5ocmVmID0gJyciXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRv
cHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQ
b2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIEVYUEVD
VF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVdKTsKLSAgICBjaGVja0VzdGltYXRl
ZFNpemUoZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmdldCgpLCB7IDIxNSwgMTc0IH0pOwotICAg
IGNoZWNrVHlwZUlkZW50aWZpZXJJc1JlZ2lzdGVyZWRBdEluZGV4KGRhdGFJbnRlcmFjdGlvblNp
bXVsYXRvci5nZXQoKSwgKE5TU3RyaW5nICopa1VUVHlwZVBORywgMCk7Ci19Ci0KLVRFU1QoRGF0
YUludGVyYWN0aW9uVGVzdHMsIEltYWdlRG9lc05vdFVzZUVsZW1lbnRTaXplQXNFc3RpbWF0ZWRT
aXplKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZp
ZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZ2lmLWFuZC1maWxlLWlucHV0Il07
Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7
Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOiB7IDEwMCwgMTAwIH0gdG86
IHsgMTAwLCAzMDAgfV07Ci0KLSAgICBjaGVja1R5cGVJZGVudGlmaWVySXNSZWdpc3RlcmVkQXRJ
bmRleChkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCksIChOU1N0cmluZyAqKWtVVFR5cGVH
SUYsIDApOwotICAgIGNoZWNrU3VnZ2VzdGVkTmFtZUFuZEVzdGltYXRlZFNpemUoZGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yLmdldCgpLCBAImFwcGxlLmdpZiIsIHsgNTIsIDY0IH0pOwotICAgIEVY
UEVDVF9XS19TVFJFUSgiYXBwbGUuZ2lmIChpbWFnZS9naWYpIiwgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC50ZXh0Q29udGVudCJdKTsKLX0KLQotVEVTVChE
YXRhSW50ZXJhY3Rpb25UZXN0cywgQ29udGVudEVkaXRhYmxlVG9Db250ZW50RWRpdGFibGUpCi17
Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBhdXRvIGRhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxs
b2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBbd2ViVmlldyBsb2Fk
VGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKLSAgICBbZGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIHdhaXRGb3JJbnB1dFNlc3Npb25dOwotICAgIFtkYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFr
ZSgxMDAsIDMwMCldOwotCi0gICAgRVhQRUNUX0VRKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJzb3VyY2UudGV4dENvbnRlbnQiXS5sZW5ndGgsIDBVTCk7Ci0gICAgRVhQ
RUNUX1dLX1NUUkVRKCJIZWxsbyB3b3JsZCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXS5VVEY4U3RyaW5nKTsKLQotICAgIE5TQXJy
YXkgKm9ic2VydmVkRXZlbnROYW1lcyA9IFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igb2JzZXJ2
ZWRFdmVudE5hbWVzXTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRh
aW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbkVudGVyRXZlbnROYW1lXSk7Ci0gICAgRVhQRUNUX1RS
VUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25PdmVy
RXZlbnROYW1lXSk7Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWlu
c09iamVjdDpEYXRhSW50ZXJhY3Rpb25QZXJmb3JtT3BlcmF0aW9uRXZlbnROYW1lXSk7Ci0gICAg
Y2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1ZSgxLCAyMDEs
IDk2MSwgMjI3KSBdLCBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVj
dHNdKTsKLSAgICBjaGVja1JpY2hUZXh0VHlwZVByZWNlZGVzUGxhaW5UZXh0VHlwZShkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCkpOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3Rz
LCBDb250ZW50RWRpdGFibGVUb1RleHRhcmVhKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwg
MzIwLCA1MDApXSk7Ci0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5T
KFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmll
dy5nZXQoKV0pOwotCi0gICAgW3dlYlZpZXcgbG9hZFRlc3RQYWdlTmFtZWQ6QCJjb250ZW50ZWRp
dGFibGUtYW5kLXRleHRhcmVhIl07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciB3YWl0
Rm9ySW5wdXRTZXNzaW9uXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIEVY
UEVDVF9FUShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic291cmNlLnRl
eHRDb250ZW50Il0ubGVuZ3RoLCAwVUwpOwotICAgIEVYUEVDVF9XS19TVFJFUSgiSGVsbG8gd29y
bGQiLCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0uVVRGOFN0cmluZyk7Ci0KLSAgICBOU0FycmF5ICpv
YnNlcnZlZEV2ZW50TmFtZXMgPSBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIG9ic2VydmVkRXZl
bnROYW1lc107Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09i
amVjdDpEYXRhSW50ZXJhY3Rpb25FbnRlckV2ZW50TmFtZV0pOwotICAgIEVYUEVDVF9UUlVFKFtv
YnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uT3ZlckV2ZW50
TmFtZV0pOwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmpl
Y3Q6RGF0YUludGVyYWN0aW9uUGVyZm9ybU9wZXJhdGlvbkV2ZW50TmFtZV0pOwotICAgIGNoZWNr
U2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUoNiwgMjAzLCA5OTAs
IDIzMikgXSwgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7
Ci0gICAgY2hlY2tSaWNoVGV4dFR5cGVQcmVjZWRlc1BsYWluVGV4dFR5cGUoZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yLmdldCgpKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgQ29u
dGVudEVkaXRhYmxlTW92ZVBhcmFncmFwaHMpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMo
W1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3
LmdldCgpXSk7Ci0KLSAgICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VOYW1lZDpAInR3by1wYXJhZ3Jh
cGgtY29udGVudGVkaXRhYmxlIl07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciB3YWl0
Rm9ySW5wdXRTZXNzaW9uXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMjUwLCA0NTApXTsKLQotICAgIE5T
U3RyaW5nICpmaW5hbFRleHRDb250ZW50ID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdOwotICAgIE5TVUludGVnZXIgZmlyc3RQYXJh
Z3JhcGhPZmZzZXQgPSBbZmluYWxUZXh0Q29udGVudCByYW5nZU9mU3RyaW5nOkAiVGhpcyBpcyB0
aGUgZmlyc3QgcGFyYWdyYXBoIl0ubG9jYXRpb247Ci0gICAgTlNVSW50ZWdlciBzZWNvbmRQYXJh
Z3JhcGhPZmZzZXQgPSBbZmluYWxUZXh0Q29udGVudCByYW5nZU9mU3RyaW5nOkAiVGhpcyBpcyB0
aGUgc2Vjb25kIHBhcmFncmFwaCJdLmxvY2F0aW9uOwotCi0gICAgRVhQRUNUX0ZBTFNFKGZpcnN0
UGFyYWdyYXBoT2Zmc2V0ID09IE5TTm90Rm91bmQpOwotICAgIEVYUEVDVF9GQUxTRShzZWNvbmRQ
YXJhZ3JhcGhPZmZzZXQgPT0gTlNOb3RGb3VuZCk7Ci0gICAgRVhQRUNUX0dUKGZpcnN0UGFyYWdy
YXBoT2Zmc2V0LCBzZWNvbmRQYXJhZ3JhcGhPZmZzZXQpOwotICAgIGNoZWNrU2VsZWN0aW9uUmVj
dHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUoMTkwLCAxMDAsIDEzMCwgMjApLCBtYWtl
Q0dSZWN0VmFsdWUoMCwgMTIwLCAzMjAsIDEwMCksIG1ha2VDR1JlY3RWYWx1ZSgwLCAyMjAsIDI1
MiwgMjApIF0sIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0c10p
OwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEcmFnSW1hZ2VGcm9tQ29udGVudEVk
aXRhYmxlKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgYXV0
byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotCi0gICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiY29udGVudGVkaXRhYmxlLWFu
ZC10YXJnZXQiXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2lu
dE1ha2UoMTAwLCAxMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1Rf
V0tfU1RSRVEoIlBBU1MiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
dGFyZ2V0LnRleHRDb250ZW50Il0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBU
ZXh0QXJlYVRvSW5wdXQpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsK
LSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0K
LSAgICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VOYW1lZDpAInRleHRhcmVhLXRvLWlucHV0Il07Ci0g
ICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciB3YWl0Rm9ySW5wdXRTZXNzaW9uXTsKLSAgICBb
ZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86
Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIEVYUEVDVF9FUShbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic291cmNlLnZhbHVlIl0ubGVuZ3RoLCAwVUwpOwotICAg
IEVYUEVDVF9XS19TVFJFUSgiSGVsbG8gd29ybGQiLCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0uVVRG
OFN0cmluZyk7Ci0gICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIG1ha2VDR1Jl
Y3RWYWx1ZSgxMDEsIDI0MSwgOTkwLCAyMzIpIF0sIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
ZmluYWxTZWxlY3Rpb25SZWN0c10pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBT
aW5nbGVQbGFpblRleHRXb3JkVHlwZUlkZW50aWZpZXJzKQotewotICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBh
ZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6
d2ViVmlldy5nZXQoKV0pOwotCi0gICAgW3dlYlZpZXcgbG9hZFRlc3RQYWdlTmFtZWQ6QCJ0ZXh0
YXJlYS10by1pbnB1dCJdOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igd2FpdEZvcklu
cHV0U2Vzc2lvbl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
InNvdXJjZS52YWx1ZSA9ICdwbmV1bW9ub3VsdHJhbWljcm9zY29waWNzaWxpY292b2xjYW5vY29u
aW9zaXMnIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNv
dXJjZS5zZWxlY3Rpb25TdGFydCA9IDAiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAic291cmNlLnNlbGVjdGlvbkVuZCA9IHNvdXJjZS52YWx1ZS5sZW5ndGgi
XTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAw
LCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIE5TSXRlbVByb3ZpZGVyICpp
dGVtUHJvdmlkZXIgPSBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRl
cnNdLmZpcnN0T2JqZWN0OwotICAgIE5TQXJyYXkgKnJlZ2lzdGVyZWRUeXBlcyA9IFtpdGVtUHJv
dmlkZXIgcmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVyc107Ci0gICAgRVhQRUNUX0VRKDFVTCwgcmVn
aXN0ZXJlZFR5cGVzLmNvdW50KTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoWyhOU1N0cmluZyAqKWtV
VFR5cGVVVEY4UGxhaW5UZXh0IFVURjhTdHJpbmddLCBbcmVnaXN0ZXJlZFR5cGVzLmZpcnN0T2Jq
ZWN0IFVURjhTdHJpbmddKTsKLSAgICBFWFBFQ1RfRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAInNvdXJjZS52YWx1ZSJdLmxlbmd0aCwgMFVMKTsKLSAgICBFWFBFQ1Rf
RVEoVUlQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUlubGluZSwgaXRlbVByb3ZpZGVyLnByZWZl
cnJlZFByZXNlbnRhdGlvblN0eWxlKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoInBuZXVtb25vdWx0
cmFtaWNyb3Njb3BpY3NpbGljb3ZvbGNhbm9jb25pb3NpcyIsIFt3ZWJWaWV3IGVkaXRvclZhbHVl
XS5VVEY4U3RyaW5nKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgU2luZ2xlUGxh
aW5UZXh0VVJMVHlwZUlkZW50aWZpZXJzKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIw
LCA1MDApXSk7Ci0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtb
RGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5n
ZXQoKV0pOwotCi0gICAgW3dlYlZpZXcgbG9hZFRlc3RQYWdlTmFtZWQ6QCJ0ZXh0YXJlYS10by1p
bnB1dCJdOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igd2FpdEZvcklucHV0U2Vzc2lv
bl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNvdXJjZS52
YWx1ZSA9ICdodHRwczovL3dlYmtpdC5vcmcvJyJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2Uuc2VsZWN0aW9uU3RhcnQgPSAwIl07Ci0gICAgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNvdXJjZS5zZWxlY3Rpb25FbmQg
PSBzb3VyY2UudmFsdWUubGVuZ3RoIl07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBy
dW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0K
LSAgICBOU0l0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyID0gW2RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdDsKLSAgICBOU0FycmF5ICpyZWdp
c3RlcmVkVHlwZXMgPSBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnNdOwot
ICAgIEVYUEVDVF9FUSgyVUwsIHJlZ2lzdGVyZWRUeXBlcy5jb3VudCk7Ci0gICAgRVhQRUNUX1dL
X1NUUkVRKFsoTlNTdHJpbmcgKilrVVRUeXBlVVJMIFVURjhTdHJpbmddLCBbcmVnaXN0ZXJlZFR5
cGVzLmZpcnN0T2JqZWN0IFVURjhTdHJpbmddKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoWyhOU1N0
cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0IFVURjhTdHJpbmddLCBbcmVnaXN0ZXJlZFR5cGVz
Lmxhc3RPYmplY3QgVVRGOFN0cmluZ10pOwotICAgIEVYUEVDVF9FUSgwVUwsIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2UudmFsdWUiXS5sZW5ndGgpOwotICAg
IEVYUEVDVF9FUShVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlSW5saW5lLCBpdGVtUHJvdmlk
ZXIucHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGUpOwotICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0
cHM6Ly93ZWJraXQub3JnLyIsIFt3ZWJWaWV3IGVkaXRvclZhbHVlXS5VVEY4U3RyaW5nKTsKLX0K
LQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgTGlua1RvSW5wdXQpCi17Ci0gICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9h
ZFRlc3RQYWdlTmFtZWQ6QCJsaW5rLWFuZC1pbnB1dCJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAs
IDMwMCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczovL3d3dy5hcHBsZS5jb20vIiwg
W3dlYlZpZXcgZWRpdG9yVmFsdWVdLlVURjhTdHJpbmcpOwotCi0gICAgX19ibG9jayBib29sIGRv
bmVMb2FkaW5nVVJMID0gZmFsc2U7Ci0gICAgVUlJdGVtUHJvdmlkZXIgKnNvdXJjZUl0ZW1Qcm92
aWRlciA9IFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10uZmly
c3RPYmplY3Q7Ci0gICAgW3NvdXJjZUl0ZW1Qcm92aWRlciBsb2FkT2JqZWN0T2ZDbGFzczpbTlNV
UkwgY2xhc3NdIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgb2JqZWN0LCBOU0Vycm9yICplcnJvcikg
ewotICAgICAgICBOU1VSTCAqdXJsID0gb2JqZWN0OwotICAgICAgICBFWFBFQ1RfV0tfU1RSRVEo
IkhlbGxvIHdvcmxkIiwgdXJsLl90aXRsZS5VVEY4U3RyaW5nID86ICIiKTsKLSAgICAgICAgZG9u
ZUxvYWRpbmdVUkwgPSB0cnVlOwotICAgIH1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZG9uZUxvYWRpbmdVUkwpOwotCi0gICAgTlNBcnJheSAqb2JzZXJ2ZWRFdmVudE5hbWVzID0g
W2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBvYnNlcnZlZEV2ZW50TmFtZXNdOwotICAgIEVYUEVD
VF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9u
RW50ZXJFdmVudE5hbWVdKTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNv
bnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbk92ZXJFdmVudE5hbWVdKTsKLSAgICBFWFBFQ1Rf
VFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvblBl
cmZvcm1PcGVyYXRpb25FdmVudE5hbWVdKTsKLSAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExv
Z2dpbmcoQFsgbWFrZUNHUmVjdFZhbHVlKDEwMSwgMjczLCAyMDU3LCAyMzIpIF0sIFtkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0c10pOwotICAgIGNoZWNrVHlwZUlk
ZW50aWZpZXJJc1JlZ2lzdGVyZWRBdEluZGV4KGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5nZXQo
KSwgKE5TU3RyaW5nICopa1VUVHlwZVVSTCwgMCk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9u
VGVzdHMsIEJhY2tncm91bmRJbWFnZUxpbmtUb0lucHV0KQotewotICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFn
ZU5hbWVkOkAiYmFja2dyb3VuZC1pbWFnZS1saW5rLWFuZC1pbnB1dCJdOwotCi0gICAgYXV0byBk
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50
TWFrZSgxMDAsIDMwMCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczovL3d3dy5hcHBs
ZS5jb20vIiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVdLlVURjhTdHJpbmcpOwotCi0gICAgTlNBcnJh
eSAqb2JzZXJ2ZWRFdmVudE5hbWVzID0gW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBvYnNlcnZl
ZEV2ZW50TmFtZXNdOwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFp
bnNPYmplY3Q6RGF0YUludGVyYWN0aW9uRW50ZXJFdmVudE5hbWVdKTsKLSAgICBFWFBFQ1RfVFJV
RShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbk92ZXJF
dmVudE5hbWVdKTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5z
T2JqZWN0OkRhdGFJbnRlcmFjdGlvblBlcmZvcm1PcGVyYXRpb25FdmVudE5hbWVdKTsKLSAgICBj
aGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgbWFrZUNHUmVjdFZhbHVlKDEwMSwgMjQx
LCAyMDU3LCAyMzIpIF0sIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgZmluYWxTZWxlY3Rpb25S
ZWN0c10pOwotICAgIGNoZWNrVHlwZUlkZW50aWZpZXJJc1JlZ2lzdGVyZWRBdEluZGV4KGRhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvci5nZXQoKSwgKE5TU3RyaW5nICopa1VUVHlwZVVSTCwgMCk7Ci19
Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIENhblByZXZlbnRTdGFydCkKLXsKLSAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlMb2FkVGVzdFBhZ2VOYW1lZDpAInByZXZlbnQtc3RhcnQiXTsKLQotICAgIGF1dG8gZGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBh
bGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2Uo
MTAwLCAzMDApXTsKLQotICAgIEVYUEVDVF9FUShEYXRhSW50ZXJhY3Rpb25DYW5jZWxsZWQsIFtk
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcGhhc2VdKTsKLSAgICBFWFBFQ1RfRkFMU0UoW3dlYlZp
ZXcgZWRpdG9yQ29udGFpbnNJbWFnZUVsZW1lbnRdKTsKLQotICAgIE5TQXJyYXkgKm9ic2VydmVk
RXZlbnROYW1lcyA9IFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igb2JzZXJ2ZWRFdmVudE5hbWVz
XTsKLSAgICBFWFBFQ1RfRkFMU0UoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpE
YXRhSW50ZXJhY3Rpb25FbnRlckV2ZW50TmFtZV0pOwotICAgIEVYUEVDVF9GQUxTRShbb2JzZXJ2
ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbk92ZXJFdmVudE5hbWVd
KTsKLSAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgXSwgW2RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVy
YWN0aW9uVGVzdHMsIENhblByZXZlbnRPcGVyYXRpb24pCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdl
TmFtZWQ6QCJwcmV2ZW50LW9wZXJhdGlvbiJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0
V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCld
OwotCi0gICAgRVhQRUNUX0ZBTFNFKFt3ZWJWaWV3IGVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50
XSk7Ci0KLSAgICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbZGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yIG9ic2VydmVkRXZlbnROYW1lc107Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVk
RXZlbnROYW1lcyBjb250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25FbnRlckV2ZW50TmFtZV0p
OwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0
YUludGVyYWN0aW9uT3ZlckV2ZW50TmFtZV0pOwotICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRo
TG9nZ2luZyhAWyBdLCBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVj
dHNdKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRW50ZXJBbmRMZWF2ZUV2ZW50
cykKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3
IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImxpbmstYW5kLWlucHV0Il07Ci0KLSAg
ICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAg
W2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRv
OkNHUG9pbnRNYWtlKDEwMCwgNDUwKV07Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJW
aWV3IGVkaXRvclZhbHVlXS5VVEY4U3RyaW5nKTsKLQotICAgIE5TQXJyYXkgKm9ic2VydmVkRXZl
bnROYW1lcyA9IFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igb2JzZXJ2ZWRFdmVudE5hbWVzXTsK
LSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJ
bnRlcmFjdGlvbkVudGVyRXZlbnROYW1lXSk7Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZl
bnROYW1lcyBjb250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25PdmVyRXZlbnROYW1lXSk7Ci0g
ICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpEYXRhSW50
ZXJhY3Rpb25MZWF2ZUV2ZW50TmFtZV0pOwotICAgIEVYUEVDVF9GQUxTRShbb2JzZXJ2ZWRFdmVu
dE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvblBlcmZvcm1PcGVyYXRpb25FdmVu
dE5hbWVdKTsKLSAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgXSwgW2RhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7Ci19Ci0KLVRFU1QoRGF0
YUludGVyYWN0aW9uVGVzdHMsIENhblN0YXJ0RHJhZ09uRGl2V2l0aERyYWdnYWJsZUF0dHJpYnV0
ZSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3
IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImN1c3RvbS1kcmFnZ2FibGUtZGl2Il07
Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7
Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwg
MTAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDI1MCldOwotCi0gICAgRVhQRUNUX0dUKFtkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10uY291bnQsIDBVTCk7Ci0gICAg
TlNJdGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciA9IFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
c291cmNlSXRlbVByb3ZpZGVyc10uZmlyc3RPYmplY3Q7Ci0gICAgRVhQRUNUX0VRKFVJUHJlZmVy
cmVkUHJlc2VudGF0aW9uU3R5bGVJbmxpbmUsIGl0ZW1Qcm92aWRlci5wcmVmZXJyZWRQcmVzZW50
YXRpb25TdHlsZSk7Ci0gICAgRVhQRUNUX1RSVUUoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAIiEhZGVzdGluYXRpb24ucXVlcnlTZWxlY3RvcignI2l0ZW0nKSJdKTsKLSAg
ICBFWFBFQ1RfV0tfU1RSRVEoQCJQQVNTIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAIml0ZW0udGV4dENvbnRlbnQiXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9u
VGVzdHMsIEV4dGVybmFsU291cmNlUGxhaW5UZXh0VG9JRnJhbWUpCi17Ci0gICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRl
c3RQYWdlTmFtZWQ6QCJjb250ZW50ZWRpdGFibGUtaW4taWZyYW1lIl07Ci0KLSAgICBhdXRvIGl0
ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAg
IFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6QCJIZWxsbyB3b3JsZCIgdmlzaWJpbGl0eTpV
SUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOwotCi0gICAg
YXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtzaW11bGF0b3Igc2V0RXh0
ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbc2ltdWxh
dG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMCwgMCkgdG86Q0dQb2ludE1ha2UoMTYwLCAyNTApXTsK
LQotICAgIGF1dG8gY29udGFpbmVyTGVmdCA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCJdLmZsb2F0
VmFsdWU7Ci0gICAgYXV0byBjb250YWluZXJUb3AgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCJdLmZs
b2F0VmFsdWU7Ci0gICAgYXV0byBjb250YWluZXJXaWR0aCA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lk
dGgiXS5mbG9hdFZhbHVlOwotICAgIGF1dG8gY29udGFpbmVySGVpZ2h0ID0gW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKS5oZWlnaHQiXS5mbG9hdFZhbHVlOwotICAgIGNoZWNrRHJhZ0NhcmV0UmVjdElzQ29udGFp
bmVkSW5SZWN0KFtzaW11bGF0b3IgbGFzdEtub3duRHJhZ0NhcmV0UmVjdF0sIENHUmVjdE1ha2Uo
Y29udGFpbmVyTGVmdCwgY29udGFpbmVyVG9wLCBjb250YWluZXJXaWR0aCwgY29udGFpbmVySGVp
Z2h0KSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlSW5s
aW5lVGV4dFRvRmlsZUlucHV0KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDAp
XSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11
cGxvYWRpbmciXTsKLQotICAgIGF1dG8gc2ltdWxhdGVkSXRlbVByb3ZpZGVyID0gYWRvcHROUyhb
W1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRl
ciBzZXRQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZTpVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0
eWxlSW5saW5lXTsKLSAgICBbc2ltdWxhdGVkSXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OkAi
VGhpcyBpdGVtIHByb3ZpZGVyIHJlcXVlc3RlZCBpbmxpbmUgcHJlc2VudGF0aW9uIHN0eWxlLiIg
dmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbF07Ci0K
LSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0g
ICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsg
c2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAx
MDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rp
b25UZXN0cywgRXh0ZXJuYWxTb3VyY2VKU09OVG9GaWxlSW5wdXQpCi17Ci0gICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRl
c3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOwotCi0gICAgYXV0byBzaW11bGF0ZWRKU09O
SXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0g
ICAgTlNEYXRhICpqc29uRGF0YSA9IFtAInsgXCJmb29cIjogXCJiYXJcIiwgIFwiYmFyXCI6IFwi
YmF6XCIgfSIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICAgIFtz
aW11bGF0ZWRKU09OSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlw
ZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUpTT04gd2l0aERhdGE6anNvbkRhdGFdOwot
Ci0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwot
ICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBb
IHNpbXVsYXRlZEpTT05JdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAwKSB0bzpDR1BvaW50TWFrZSgx
MDAsIDEwMCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVRKCJhcHBsaWNhdGlvbi9qc29uIiwgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdKTsKLX0K
LQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VJbWFnZVRvRmlsZUlu
cHV0KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZp
ZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsKLQot
ICAgIGF1dG8gc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJv
dmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBOU0RhdGEgKmltYWdlRGF0YSA9IFVJSW1hZ2VKUEVH
UmVwcmVzZW50YXRpb24odGVzdEljb25JbWFnZSgpLCAwLjUpOwotICAgIFtzaW11bGF0ZWRJbWFn
ZUl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVy
OihOU1N0cmluZyAqKWtVVFR5cGVKUEVHIHdpdGhEYXRhOmltYWdlRGF0YV07Ci0KLSAgICBhdXRv
IGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVk
SW1hZ2VJdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDEwMCld
OwotCi0gICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOwotICAgIEVYUEVDVF9XS19TVFJFUSgiaW1h
Z2UvanBlZyIsIG91dHB1dFZhbHVlLlVURjhTdHJpbmcpOwotfQotCi1URVNUKERhdGFJbnRlcmFj
dGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUhUTUxUb1VwbG9hZEFyZWEpCi17Ci0gICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9h
ZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOwotCi0gICAgYXV0byBzaW11bGF0ZWRI
VE1MSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7
Ci0gICAgTlNEYXRhICpodG1sRGF0YSA9IFtAIjxib2R5IGNvbnRlbnRlZGl0YWJsZT48L2JvZHk+
IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107Ci0gICAgW3NpbXVsYXRl
ZEhUTUxJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRp
ZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3aXRoRGF0YTpodG1sRGF0YV07Ci0gICAgW3Np
bXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgc2V0U3VnZ2VzdGVkTmFtZTpAImluZGV4Lmh0bWwiXTsK
LQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsK
LSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldFNob3VsZEFsbG93TW92ZU9wZXJhdGlv
bjpOT107Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92
aWRlcnM6QFsgc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAzMDApIHRvOkNHUG9p
bnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07Ci0gICAgRVhQ
RUNUX1dLX1NUUkVRKCJ0ZXh0L2h0bWwiLCBvdXRwdXRWYWx1ZS5VVEY4U3RyaW5nKTsKLX0KLQot
VEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VNb3ZlT3BlcmF0aW9uTm90
QWxsb3dlZCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2FkaW5nIl07
Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInVwbG9hZC5kcm9w
RWZmZWN0ID0gJ21vdmUnIl07Ci0KLSAgICBhdXRvIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIg
PSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBOU0RhdGEgKmh0
bWxEYXRhID0gW0AiPGJvZHkgY29udGVudGVkaXRhYmxlPjwvYm9keT4iIGRhdGFVc2luZ0VuY29k
aW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKLSAgICBbc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRl
ciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAq
KWtVVFR5cGVIVE1MIHdpdGhEYXRhOmh0bWxEYXRhXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10g
aW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yIHNldFNob3VsZEFsbG93TW92ZU9wZXJhdGlvbjpOT107Ci0gICAgW2RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSFRNTEl0
ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZy
b206Q0dQb2ludE1ha2UoMjAwLCAzMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAg
ICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJvdXRwdXQudmFsdWUiXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4
dGVybmFsU291cmNlWklQQXJjaGl2ZUFuZFVSTFRvU2luZ2xlRmlsZUlucHV0KQotewotICAgIGF1
dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
OkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNs
eUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsKLQotICAgIGF1dG8gYXJjaGl2
ZVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAg
W2FyY2hpdmVQcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlm
aWVyOihOU1N0cmluZyAqKWtVVFR5cGVaaXBBcmNoaXZlIHdpdGhEYXRhOnRlc3RaSVBBcmNoaXZl
KCldOwotCi0gICAgYXV0byB1cmxQcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBh
bGxvY10gaW5pdF0pOwotICAgIFt1cmxQcm92aWRlciByZWdpc3Rlck9iamVjdDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpAImh0dHBzOi8vd2Via2l0Lm9yZyJdIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlk
ZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKLQotICAgIGF1dG8gZGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBh
bGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBhcmNoaXZlUHJvdmlkZXIu
Z2V0KCksIHVybFByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAxMDAp
XTsKLQotICAgIE5TU3RyaW5nICpvdXRwdXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoImFw
cGxpY2F0aW9uL3ppcCIsIG91dHB1dFZhbHVlLlVURjhTdHJpbmcpOwotfQotCi1URVNUKERhdGFJ
bnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZVpJUEFyY2hpdmVUb1VwbG9hZEFyZWEpCi17
Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5j
aHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOwotCi0gICAgYXV0
byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsK
LSAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50
aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZVppcEFyY2hpdmUgd2l0aERhdGE6dGVzdFpJUEFyY2hp
dmUoKV07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tE
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3Lmdl
dCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92
aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDMwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAz
MDApXTsKLQotICAgIE5TU3RyaW5nICpvdXRwdXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEo
ImFwcGxpY2F0aW9uL3ppcCIsIG91dHB1dFZhbHVlLlVURjhTdHJpbmcpOwotfQotCi1URVNUKERh
dGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUltYWdlQW5kSFRNTFRvU2luZ2xlRmls
ZUlucHV0KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsK
LQotICAgIGF1dG8gc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVt
UHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBOU0RhdGEgKmltYWdlRGF0YSA9IFVJSW1hZ2VK
UEVHUmVwcmVzZW50YXRpb24odGVzdEljb25JbWFnZSgpLCAwLjUpOwotICAgIFtzaW11bGF0ZWRJ
bWFnZUl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlm
aWVyOihOU1N0cmluZyAqKWtVVFR5cGVKUEVHIHdpdGhEYXRhOmltYWdlRGF0YV07Ci0KLSAgICBh
dXRvIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIg
YWxsb2NdIGluaXRdKTsKLSAgICBOU0RhdGEgKmh0bWxEYXRhID0gW0AiPGJvZHkgY29udGVudGVk
aXRhYmxlPjwvYm9keT4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsK
LSAgICBbc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlv
bkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOmh0bWxE
YXRhXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3Zp
ZGVyczpAWyBzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyLmdldCgpLCBzaW11bGF0ZWRJbWFnZUl0
ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZy
b206Q0dQb2ludE1ha2UoMjAwLCAxMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMTAwKV07Ci0KLSAg
ICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAib3V0cHV0LnZhbHVlIl07Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBvdXRwdXRW
YWx1ZS5VVEY4U3RyaW5nKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJu
YWxTb3VyY2VJbWFnZUFuZEhUTUxUb011bHRpcGxlRmlsZUlucHV0KQotewotICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVj
dE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRU
ZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiaW5wdXQuc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICcnKSJd
OwotCi0gICAgYXV0byBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0
ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIE5TRGF0YSAqaW1hZ2VEYXRhID0gVUlJbWFn
ZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSk7Ci0gICAgW3NpbXVsYXRl
ZEltYWdlSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50
aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUpQRUcgd2l0aERhdGE6aW1hZ2VEYXRhXTsKLQotICAg
IGF1dG8gc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRl
ciBhbGxvY10gaW5pdF0pOwotICAgIE5TRGF0YSAqaHRtbERhdGEgPSBbQCI8Ym9keSBjb250ZW50
ZWRpdGFibGU+PC9ib2R5PiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rpbmdd
OwotICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0
aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERhdGE6aHRt
bERhdGFdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtb
RGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5n
ZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJv
dmlkZXJzOkBbIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0KCksIHNpbXVsYXRlZEltYWdl
SXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVu
RnJvbTpDR1BvaW50TWFrZSgyMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsKLQot
ICAgIE5TU3RyaW5nICpvdXRwdXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoImltYWdlL2pw
ZWcsIHRleHQvaHRtbCIsIG91dHB1dFZhbHVlLlVURjhTdHJpbmcpOwotfQotCi1URVNUKERhdGFJ
bnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUltYWdlQW5kSFRNTFRvVXBsb2FkQXJlYSkK
LXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2FkaW5nIl07Ci0KLSAgICBh
dXRvIHNpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVy
IGFsbG9jXSBpbml0XSk7Ci0gICAgTlNEYXRhICppbWFnZURhdGEgPSBVSUltYWdlSlBFR1JlcHJl
c2VudGF0aW9uKHRlc3RJY29uSW1hZ2UoKSwgMC41KTsKLSAgICBbc2ltdWxhdGVkSW1hZ2VJdGVt
UHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNT
dHJpbmcgKilrVVRUeXBlSlBFRyB3aXRoRGF0YTppbWFnZURhdGFdOwotCi0gICAgYXV0byBmaXJz
dFNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxs
b2NdIGluaXRdKTsKLSAgICBOU0RhdGEgKmZpcnN0SFRNTERhdGEgPSBbQCI8Ym9keSBjb250ZW50
ZWRpdGFibGU+PC9ib2R5PiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rpbmdd
OwotICAgIFtmaXJzdFNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVz
ZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3aXRoRGF0
YTpmaXJzdEhUTUxEYXRhXTsKLQotICAgIGF1dG8gc2Vjb25kU2ltdWxhdGVkSFRNTEl0ZW1Qcm92
aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIE5TRGF0
YSAqc2Vjb25kSFRNTERhdGEgPSBbQCI8aHRtbD48Ym9keT5oZWxsbyB3b3JsZDwvYm9keT48L2h0
bWw+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107Ci0gICAgW3NlY29u
ZFNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JU
eXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3aXRoRGF0YTpzZWNvbmRIVE1M
RGF0YV07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tE
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3Lmdl
dCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRTaG91bGRBbGxvd01vdmVP
cGVyYXRpb246Tk9dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJ
dGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyLmdldCgpLCBmaXJzdFNp
bXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0KCksIHNlY29uZFNpbXVsYXRlZEhUTUxJdGVtUHJv
dmlkZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNH
UG9pbnRNYWtlKDIwMCwgMzAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgTlNT
dHJpbmcgKm91dHB1dFZhbHVlID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAIm91dHB1dC52YWx1ZSJdOwotICAgIEVYUEVDVF9XS19TVFJFUSgiaW1hZ2UvanBlZywgdGV4
dC9odG1sLCB0ZXh0L2h0bWwiLCBvdXRwdXRWYWx1ZS5VVEY4U3RyaW5nKTsKLX0KLQotVEVTVChE
YXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VIVE1MVG9Db250ZW50RWRpdGFibGUp
Ci17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxl
Il07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVj
dGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9w
dE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBOU0RhdGEgKmh0bWxEYXRh
ID0gW0AiPGgxPlRoaXMgaXMgYSB0ZXN0PC9oMT4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0
cmluZ0VuY29kaW5nXTsKLSAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0
aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERhdGE6aHRt
bERhdGFdOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJv
dmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwg
MzAwKV07Ci0KLSAgICBOU1N0cmluZyAqdGV4dENvbnRlbnQgPSBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il07Ci0gICAgRVhQRUNUX1dL
X1NUUkVRKCJUaGlzIGlzIGEgdGVzdCIsIHRleHRDb250ZW50LlVURjhTdHJpbmcpOwotICAgIEVY
UEVDVF9UUlVFKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCIhIWVkaXRv
ci5xdWVyeVNlbGVjdG9yKCdoMScpIl0uYm9vbFZhbHVlKTsKLX0KLQotVEVTVChEYXRhSW50ZXJh
Y3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VCb2xkU3lzdGVtQXR0cmlidXRlZFN0cmluZ1RvQ29u
dGVudEVkaXRhYmxlKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0g
ICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNv
bnRlbnRlZGl0YWJsZSJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSJdOwotCi0gICAgYXV0byBkYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
IGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIE5TRGljdGlvbmFy
eSAqdGV4dEF0dHJpYnV0ZXMgPSBAeyBOU0ZvbnRBdHRyaWJ1dGVOYW1lOiBbVUlGb250IGJvbGRT
eXN0ZW1Gb250T2ZTaXplOjIwXSB9OwotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcmljaFRleHQg
PSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCJUaGlzIGlzIGEg
dGVzdCIgYXR0cmlidXRlczp0ZXh0QXR0cmlidXRlc107Ci0gICAgYXV0byBpdGVtUHJvdmlkZXIg
PSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRXaXRoT2JqZWN0OnJpY2hUZXh0
XSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRl
cnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDAp
XTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiVGhpcyBpcyBhIHRlc3QiLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il0uVVRGOFN0cmlu
Zyk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlQ29sb3Jl
ZEF0dHJpYnV0ZWRTdHJpbmdUb0NvbnRlbnRFZGl0YWJsZSkKLXsKLSAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtl
KDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBh
Z2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKLSAgICBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2Vz
KCkiXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKLSAgICBOU0RpY3Rpb25hcnkgKnRleHRBdHRyaWJ1dGVzID0gQHsgTlNGb3JlZ3JvdW5k
Q29sb3JBdHRyaWJ1dGVOYW1lOiBbVUlDb2xvciByZWRDb2xvcl0gfTsKLSAgICBOU0F0dHJpYnV0
ZWRTdHJpbmcgKnJpY2hUZXh0ID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRo
U3RyaW5nOkAiVGhpcyBpcyBhIHRlc3QiIGF0dHJpYnV0ZXM6dGV4dEF0dHJpYnV0ZXNdOwotICAg
IGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0
V2l0aE9iamVjdDpyaWNoVGV4dF0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0
RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNH
UG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoInJnYigyNTUsIDAs
IDApIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldENvbXB1dGVk
U3R5bGUoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigncCcpKS5jb2xvciJdKTsKLSAgICBFWFBFQ1Rf
V0tfU1RSRVEoIlRoaXMgaXMgYSB0ZXN0IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdLlVURjhTdHJpbmcpOwotfQotCi1URVNUKERh
dGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZU11bHRpcGxlVVJMc1RvQ29udGVudEVk
aXRhYmxlKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRl
ZGl0YWJsZSJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJn
ZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIGF1dG8gZmlyc3RJdGVtID0g
YWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW2ZpcnN0SXRlbSBy
ZWdpc3Rlck9iamVjdDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd3d3LmFwcGxlLmNv
bS9pcGhvbmUvIl0gdmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9u
c1Zpc2liaWxpdHlBbGxdOwotICAgIGF1dG8gc2Vjb25kSXRlbSA9IGFkb3B0TlMoW1tVSUl0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtzZWNvbmRJdGVtIHJlZ2lzdGVyT2JqZWN0OltO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93d3cuYXBwbGUuY29tL21hYy8iXSB2aXNpYmls
aXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07Ci0g
ICAgYXV0byB0aGlyZEl0ZW0gPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRd
KTsKLSAgICBbdGhpcmRJdGVtIHJlZ2lzdGVyT2JqZWN0OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
aHR0cHM6Ly93ZWJraXQub3JnLyJdIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRh
dGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
IHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBmaXJzdEl0ZW0uZ2V0KCksIHNlY29uZEl0ZW0u
Z2V0KCksIHRoaXJkSXRlbS5nZXQoKSBdXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
IHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07
Ci0KLSAgICBOU0FycmF5ICpkcm9wcGVkVVJMcyA9IFt3ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJBcnJheS5mcm9tKGVkaXRvci5xdWVyeVNlbGVjdG9yQWxsKCdhJykpLm1h
cChhID0+IGEuaHJlZikiXTsKLSAgICBFWFBFQ1RfRVEoM1VMLCBkcm9wcGVkVVJMcy5jb3VudCk7
Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczovL3d3dy5hcHBsZS5jb20vaXBob25lLyIsIGRy
b3BwZWRVUkxzWzBdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNv
bS9tYWMvIiwgZHJvcHBlZFVSTHNbMV0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93
ZWJraXQub3JnLyIsIGRyb3BwZWRVUkxzWzJdKTsKLQotICAgIE5TQXJyYXkgKmxpbmtzU2VwYXJh
dGVkQnlMaW5lID0gW1t3ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0
b3IuaW5uZXJUZXh0Il0gY29tcG9uZW50c1NlcGFyYXRlZEJ5Q2hhcmFjdGVyc0luU2V0OltOU0No
YXJhY3RlclNldCBuZXdsaW5lQ2hhcmFjdGVyU2V0XV07Ci0gICAgRVhQRUNUX0VRKDNVTCwgbGlu
a3NTZXBhcmF0ZWRCeUxpbmUuY291bnQpOwotICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93
d3cuYXBwbGUuY29tL2lwaG9uZS8iLCBsaW5rc1NlcGFyYXRlZEJ5TGluZVswXSk7Ci0gICAgRVhQ
RUNUX1dLX1NUUkVRKCJodHRwczovL3d3dy5hcHBsZS5jb20vbWFjLyIsIGxpbmtzU2VwYXJhdGVk
QnlMaW5lWzFdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd2Via2l0Lm9yZy8iLCBs
aW5rc1NlcGFyYXRlZEJ5TGluZVsyXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMs
IFJlc3BlY3RzRXh0ZXJuYWxTb3VyY2VGaWRlbGl0eVJhbmtpbmdzKQotewotICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVj
dE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRU
ZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOwotICAgIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxS
YW5nZXMoKSJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5T
KFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmll
dy5nZXQoKV0pOwotCi0gICAgLy8gSGVyZSwgb3VyIHNvdXJjZSBpdGVtIHByb3ZpZGVyIHZlbmRz
IHR3byByZXByZXNlbnRhdGlvbnM6IHBsYWluIHRleHQsIGFuZCB0aGVuIGFuIGltYWdlLiBJZiB3
ZSBkb24ndCByZXNwZWN0IHRoZQotICAgIC8vIGZpZGVsaXR5IG9yZGVyIHJlcXVlc3RlZCBieSB0
aGUgc291cmNlLCB3ZSdsbCBlbmQgdXAgYXNzdW1pbmcgdGhhdCB0aGUgaW1hZ2UgaXMgYSBoaWdo
ZXIgZmlkZWxpdHkgcmVwcmVzZW50YXRpb24KLSAgICAvLyB0aGFuIHRoZSBwbGFpbiB0ZXh0LCBh
bmQgZXJyb25lb3VzbHkgaW5zZXJ0IHRoZSBpbWFnZS4gSWYgd2UgcmVzcGVjdCBzb3VyY2UgZmlk
ZWxpdGllcywgd2UnbGwgaW5zZXJ0IHRleHQgcmF0aGVyCi0gICAgLy8gdGhhbiBhbiBpbWFnZS4K
LSAgICBhdXRvIHNpbXVsYXRlZEl0ZW1Qcm92aWRlcldpdGhUZXh0Rmlyc3QgPSBhZG9wdE5TKFtb
VUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbc2ltdWxhdGVkSXRlbVByb3ZpZGVy
V2l0aFRleHRGaXJzdCByZWdpc3Rlck9iamVjdDpAIkhlbGxvIHdvcmxkIiB2aXNpYmlsaXR5OlVJ
SXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07Ci0gICAgW3Np
bXVsYXRlZEl0ZW1Qcm92aWRlcldpdGhUZXh0Rmlyc3QgcmVnaXN0ZXJPYmplY3Q6dGVzdEljb25J
bWFnZSgpIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNp
YmlsaXR5QWxsXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRl
bVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXJXaXRoVGV4dEZpcnN0LmdldCgpIF1d
OwotCi0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMw
MCwgNDAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotICAgIEVYUEVDVF9XS19TVFJFUSgi
SGVsbG8gd29ybGQiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRp
dG9yLnRleHRDb250ZW50Il0pOwotICAgIEVYUEVDVF9GQUxTRShbd2ViVmlldyBlZGl0b3JDb250
YWluc0ltYWdlRWxlbWVudF0pOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJlZGl0b3IuaW5uZXJIVE1MID0gJyciXTsKLQotICAgIC8vIE5vdyB3ZSByZWdpc3Rl
ciB0aGUgaXRlbSBwcm92aWRlcnMgaW4gcmV2ZXJzZSwgYW5kIGV4cGVjdCB0aGUgaW1hZ2UgdG8g
YmUgaW5zZXJ0ZWQgaW5zdGVhZCBvZiB0ZXh0LgotICAgIGF1dG8gc2ltdWxhdGVkSXRlbVByb3Zp
ZGVyV2l0aEltYWdlRmlyc3QgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRd
KTsKLSAgICBbc2ltdWxhdGVkSXRlbVByb3ZpZGVyV2l0aEltYWdlRmlyc3QgcmVnaXN0ZXJPYmpl
Y3Q6dGVzdEljb25JbWFnZSgpIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlv
bk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKLSAgICBbc2ltdWxhdGVkSXRlbVByb3ZpZGVyV2l0aElt
YWdlRmlyc3QgcmVnaXN0ZXJPYmplY3Q6QCJIZWxsbyB3b3JsZCIgdmlzaWJpbGl0eTpVSUl0ZW1Q
cm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOwotICAgIFtkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEl0
ZW1Qcm92aWRlcldpdGhJbWFnZUZpcnN0LmdldCgpIF1dOwotCi0gICAgW2RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50TWFrZSgx
MDAsIDMwMCldOwotICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdKTsKLSAgICBFWFBFQ1RfVFJV
RShbd2ViVmlldyBlZGl0b3JDb250YWluc0ltYWdlRWxlbWVudF0pOwotfQotCi1URVNUKERhdGFJ
bnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZVVURjhQbGFpblRleHRPbmx5KQotewotICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOwotCi0g
ICAgTlNTdHJpbmcgKnRleHRQYXlsb2FkID0gQCJDZWNpIG4nZXN0IHBhcyB1bmUgc3RyaW5nIjsK
LSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0g
ICAgYXV0byBzaW11bGF0ZWRJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIg
YWxsb2NdIGluaXRdKTsKLSAgICBbc2ltdWxhdGVkSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJl
cHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlw
ZVVURjhQbGFpblRleHQgb3B0aW9uczpuaWwgbG9hZEhhbmRsZXI6Xk5TUHJvZ3Jlc3MgKihVSUl0
ZW1Qcm92aWRlckRhdGFMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRpb25CbG9jaykKLSAgICB7
Ci0gICAgICAgIGNvbXBsZXRpb25CbG9jayhbdGV4dFBheWxvYWQgZGF0YVVzaW5nRW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmddLCBuaWwpOwotICAgICAgICByZXR1cm4gW05TUHJvZ3Jlc3Mg
ZGlzY3JldGVQcm9ncmVzc1dpdGhUb3RhbFVuaXRDb3VudDoxMDBdOwotICAgIH1dOwotICAgIFtk
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVs
YXRlZEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
IHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07
Ci0gICAgRVhQRUNUX1dLX1NUUkVRKHRleHRQYXlsb2FkLlVURjhTdHJpbmcsIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXS5VVEY4U3Ry
aW5nKTsKLSAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgbWFrZUNHUmVjdFZh
bHVlKDEsIDIwMSwgMTkzNiwgMjI3KSBdLCBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGZpbmFs
U2VsZWN0aW9uUmVjdHNdKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJu
YWxTb3VyY2VKUEVHT25seSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1
cy1jb250ZW50ZWRpdGFibGUiXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
ID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJW
aWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBhdXRvIHNpbXVsYXRlZEl0ZW1Qcm92aWRlciA9IGFk
b3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtzaW11bGF0ZWRJdGVt
UHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooX19i
cmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlSlBFRyBvcHRpb25zOm5pbCBsb2FkSGFuZGxlcjpeTlNQ
cm9ncmVzcyAqKFVJSXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlv
bkJsb2NrKQotICAgIHsKLSAgICAgICAgY29tcGxldGlvbkJsb2NrKFVJSW1hZ2VKUEVHUmVwcmVz
ZW50YXRpb24odGVzdEljb25JbWFnZSgpLCAwLjUpLCBuaWwpOwotICAgICAgICByZXR1cm4gW05T
UHJvZ3Jlc3MgZGlzY3JldGVQcm9ncmVzc1dpdGhUb3RhbFVuaXRDb3VudDoxMDBdOwotICAgIH1d
OwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJz
OkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEw
MCwgMzAwKV07Ci0gICAgRVhQRUNUX1RSVUUoW3dlYlZpZXcgZWRpdG9yQ29udGFpbnNJbWFnZUVs
ZW1lbnRdKTsKLSAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgbWFrZUNHUmVj
dFZhbHVlKDEsIDIwMSwgMjE1LCAxNzQpIF0sIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgZmlu
YWxTZWxlY3Rpb25SZWN0c10pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRl
cm5hbFNvdXJjZVRpdGxlZE5TVVJMKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1
MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0
b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSJdOwotCi0gICAg
TlNVUkwgKnRpdGxlZFVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93d3cuYXBw
bGUuY29tIl07Ci0gICAgdGl0bGVkVVJMLl90aXRsZSA9IEAiQXBwbGUiOwotICAgIGF1dG8gc2lt
dWxhdGVkSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0
XSk7Ci0gICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRlciByZWdpc3Rlck9iamVjdDp0aXRsZWRVUkwg
dmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlB
bGxdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQo
KV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlk
ZXJzOkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtl
KDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoIkFwcGxlIiwgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci5xdWVyeVNlbGVjdG9yKCdhJykudGV4
dENvbnRlbnQiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczovL3d3dy5hcHBsZS5jb20v
IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci5xdWVyeVNl
bGVjdG9yKCdhJykuaHJlZiJdKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0
ZXJuYWxTb3VyY2VGaWxlVVJMKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDAp
XSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2Zv
Y3VzLWNvbnRlbnRlZGl0YWJsZSJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSJdOwotCi0gICAgTlNV
UkwgKlVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiZmlsZTovLy9zb21lL2ZpbGUvdGhhdC9p
cy9ub3QvcmVhbCJdOwotICAgIFVJSXRlbVByb3ZpZGVyICpzaW11bGF0ZWRJdGVtUHJvdmlkZXIg
PSBbVUlJdGVtUHJvdmlkZXIgaXRlbVByb3ZpZGVyV2l0aFVSTDpVUkwgdGl0bGU6QCIiXTsKLQot
ICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAg
ICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBz
aW11bGF0ZWRJdGVtUHJvdmlkZXIgXV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBy
dW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwot
Ci0gICAgRVhQRUNUX0ZBTFNFKFtbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAiISFlZGl0b3IucXVlcnlTZWxlY3RvcignYScpIl0gYm9vbFZhbHVlXSk7Ci0gICAgRVhQRUNU
X1dLX1NUUkVRKCJIZWxsbyB3b3JsZFxuZmlsZTovLy9zb21lL2ZpbGUvdGhhdC9pcy9ub3QvcmVh
bCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5
LmlubmVyVGV4dCJdKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxT
b3VyY2VPdmVycmlkZURyb3BGaWxlVXBsb2FkKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwg
MzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVk
OkAiZmlsZS11cGxvYWRpbmciXTsKLQotICAgIGF1dG8gc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlk
ZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBOU0RhdGEg
KmltYWdlRGF0YSA9IFVJSW1hZ2VKUEVHUmVwcmVzZW50YXRpb24odGVzdEljb25JbWFnZSgpLCAw
LjUpOwotICAgIFtzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNl
bnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVKUEVHIHdpdGhEYXRh
OmltYWdlRGF0YV07Ci0KLSAgICBhdXRvIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgPSBhZG9w
dE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBOU0RhdGEgKmZpcnN0SFRN
TERhdGEgPSBbQCI8Ym9keSBjb250ZW50ZWRpdGFibGU+PC9ib2R5PiIgZGF0YVVzaW5nRW5jb2Rp
bmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVy
IHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICop
a1VUVHlwZUhUTUwgd2l0aERhdGE6Zmlyc3RIVE1MRGF0YV07Ci0gICAgW3NpbXVsYXRlZEhUTUxJ
dGVtUHJvdmlkZXIgc2V0UHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGU6VUlQcmVmZXJyZWRQcmVz
ZW50YXRpb25TdHlsZUF0dGFjaG1lbnRdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0
aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
c2V0T3ZlcnJpZGVQZXJmb3JtRHJvcEJsb2NrOl5OU0FycmF5PFVJRHJhZ0l0ZW0gKj4gKihpZCA8
VUlEcm9wU2Vzc2lvbj4gc2Vzc2lvbikKLSAgICB7Ci0gICAgICAgIEVYUEVDVF9FUSgyVUwsIHNl
c3Npb24uaXRlbXMuY291bnQpOwotICAgICAgICBVSURyYWdJdGVtICpmaXJzdEl0ZW0gPSBzZXNz
aW9uLml0ZW1zWzBdOwotICAgICAgICBVSURyYWdJdGVtICpzZWNvbmRJdGVtID0gc2Vzc2lvbi5p
dGVtc1sxXTsKLSAgICAgICAgRVhQRUNUX1RSVUUoW2ZpcnN0SXRlbS5pdGVtUHJvdmlkZXIucmVn
aXN0ZXJlZFR5cGVJZGVudGlmaWVycyBpc0VxdWFsOkBbIChOU1N0cmluZyAqKWtVVFR5cGVKUEVH
IF1dKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoW3NlY29uZEl0ZW0uaXRlbVByb3ZpZGVyLnJlZ2lz
dGVyZWRUeXBlSWRlbnRpZmllcnMgaXNFcXVhbDpAWyAoTlNTdHJpbmcgKilrVVRUeXBlSFRNTCBd
XSk7Ci0gICAgICAgIHJldHVybiBAWyBzZWNvbmRJdGVtIF07Ci0gICAgfV07Ci0gICAgW2RhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVk
SW1hZ2VJdGVtUHJvdmlkZXIuZ2V0KCksIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0KCkg
XV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIw
MCwgMzAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgTlNTdHJpbmcgKm91dHB1
dFZhbHVlID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52
YWx1ZSJdOwotICAgIEVYUEVDVF9XS19TVFJFUSgidGV4dC9odG1sIiwgb3V0cHV0VmFsdWUuVVRG
OFN0cmluZyk7Ci19Ci0KLSNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MTAzMDAKLQotc3RhdGljIFJldGFpblB0cjxUZXN0V0tXZWJWaWV3PiBzZXRVcFRlc3RXZWJWaWV3
Rm9yRGF0YVRyYW5zZmVySXRlbXMoKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1
MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiRGF0
YVRyYW5zZmVySXRlbS1nZXRBc0VudHJ5Il07Ci0KLSAgICBhdXRvIHByZWZlcmVuY2VzID0gKFdL
UHJlZmVyZW5jZXNSZWYpW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dIHByZWZlcmVuY2VzXTsKLSAg
ICBXS1ByZWZlcmVuY2VzU2V0RGF0YVRyYW5zZmVySXRlbXNFbmFibGVkKHByZWZlcmVuY2VzLCB0
cnVlKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0RGlyZWN0b3J5VXBsb2FkRW5hYmxlZChwcmVmZXJl
bmNlcywgdHJ1ZSk7Ci0KLSAgICByZXR1cm4gd2ViVmlldzsKLX0KLQotVEVTVChEYXRhSW50ZXJh
Y3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VEYXRhVHJhbnNmZXJJdGVtR2V0Rm9sZGVyQXNFbnRy
eSkKLXsKLSAgICAvLyBUaGUgZXhwZWN0ZWQgb3V0cHV0IGlzIHNvcnRlZCBieSBhbHBoYWJldGlj
YWwgb3JkZXIgaGVyZSBmb3IgY29uc2lzdGVudCBiZWhhdmlvciBhY3Jvc3MgZGlmZmVyZW50IHRl
c3QgZW52aXJvbm1lbnRzLgotICAgIC8vIFNlZSBEYXRhVHJhbnNmZXJJdGVtLWdldEFzRW50cnku
aHRtbCBmb3IgbW9yZSBkZXRhaWxzLgotICAgIE5TQXJyYXk8TlNTdHJpbmcgKj4gKmV4cGVjdGVk
T3V0cHV0ID0gQFsKLSAgICAgICAgQCJGb3VuZCBkYXRhIHRyYW5zZmVyIGl0ZW0gKGtpbmQ6ICdm
aWxlJywgdHlwZTogJycpIiwKLSAgICAgICAgQCJESVI6IC9zb21lZGlyZWN0b3J5IiwKLSAgICAg
ICAgQCJESVI6IC9zb21lZGlyZWN0b3J5L3N1YmRpcmVjdG9yeTEiLAotICAgICAgICBAIkRJUjog
L3NvbWVkaXJlY3Rvcnkvc3ViZGlyZWN0b3J5MiIsCi0gICAgICAgIFtOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiRklMRTogL3NvbWVkaXJlY3RvcnkvYXJjaGl2ZS56aXAgKCdhcHBsaWNhdGlv
bi96aXAnLCAldHUgYnl0ZXMpIiwgdGVzdFpJUEFyY2hpdmUoKS5sZW5ndGhdLAotICAgICAgICBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkZJTEU6IC9zb21lZGlyZWN0b3J5L2ljb24ucG5n
ICgnaW1hZ2UvcG5nJywgJXR1IGJ5dGVzKSIsIHRlc3RJY29uSW1hZ2VEYXRhKCkubGVuZ3RoXSwK
LSAgICAgICAgQCJGSUxFOiAvc29tZWRpcmVjdG9yeS9zdWJkaXJlY3RvcnkxL3RleHQtZmlsZS0x
LnR4dCAoJ3RleHQvcGxhaW4nLCA0MyBieXRlcykiLAotICAgICAgICBAIkZJTEU6IC9zb21lZGly
ZWN0b3J5L3N1YmRpcmVjdG9yeTIvdGV4dC1maWxlLTIudHh0ICgndGV4dC9wbGFpbicsIDQ0IGJ5
dGVzKSIKLSAgICBdOwotCi0gICAgYXV0byB3ZWJWaWV3ID0gc2V0VXBUZXN0V2ViVmlld0ZvckRh
dGFUcmFuc2Zlckl0ZW1zKCk7Ci0gICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKLSAgICBb
d2ViVmlldyBwZXJmb3JtQWZ0ZXJSZWNlaXZpbmdNZXNzYWdlOkAiZHJvcHBlZCIgYWN0aW9uOl4o
KSB7Ci0gICAgICAgIGRvbmUgPSB0cnVlOwotICAgIH1dOwotCi0gICAgcnVuVGVzdFdpdGhUZW1w
b3JhcnlGb2xkZXIoXihOU1VSTCAqZm9sZGVyVVJMKSB7Ci0gICAgICAgIGF1dG8gaXRlbVByb3Zp
ZGVyID0gYWRvcHROUyhbW05TSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIFtp
dGVtUHJvdmlkZXIgc2V0U3VnZ2VzdGVkTmFtZTpAInNvbWVkaXJlY3RvcnkiXTsKLSAgICAgICAg
W2l0ZW1Qcm92aWRlciByZWdpc3RlckZpbGVSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVy
OihOU1N0cmluZyAqKWtVVFR5cGVGb2xkZXIgZmlsZU9wdGlvbnM6MCB2aXNpYmlsaXR5Ok5TSXRl
bVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsIGxvYWRIYW5kbGVyOltjYXB0dXJl
ZEZvbGRlclVSTCA9IHJldGFpblB0cihmb2xkZXJVUkwpXSAoRmlsZUxvYWRDb21wbGV0aW9uQmxv
Y2sgY29tcGxldGlvbkhhbmRsZXIpIC0+IE5TUHJvZ3Jlc3MgKiB7Ci0gICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihjYXB0dXJlZEZvbGRlclVSTC5nZXQoKSwgTk8sIG5pbCk7Ci0gICAgICAg
ICAgICByZXR1cm4gbmlsOwotICAgICAgICB9XTsKLQotICAgICAgICBhdXRvIGRhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2Nd
IGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgICAgIFtkYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQo
KSBdXTsKLSAgICAgICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRN
YWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTUwLCA1MCldOwotICAgIH0pOwotCi0gICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoW2V4cGVj
dGVkT3V0cHV0IGNvbXBvbmVudHNKb2luZWRCeVN0cmluZzpAIlxuIl0sIFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSk7Ci19Ci0KLVRFU1QoRGF0
YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlRGF0YVRyYW5zZmVySXRlbUdldFBsYWlu
VGV4dEZpbGVBc0VudHJ5KQotewotICAgIE5TQXJyYXk8TlNTdHJpbmcgKj4gKmV4cGVjdGVkT3V0
cHV0ID0gQFsKLSAgICAgICAgQCJGb3VuZCBkYXRhIHRyYW5zZmVyIGl0ZW0gKGtpbmQ6ICdmaWxl
JywgdHlwZTogJ3RleHQvcGxhaW4nKSIsCi0gICAgICAgIEAiRklMRTogL2Zvby50eHQgKCd0ZXh0
L3BsYWluJywgMjggYnl0ZXMpIgotICAgIF07Ci0KLSAgICBhdXRvIHdlYlZpZXcgPSBzZXRVcFRl
c3RXZWJWaWV3Rm9yRGF0YVRyYW5zZmVySXRlbXMoKTsKLSAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9
IGZhbHNlOwotICAgIFt3ZWJWaWV3IHBlcmZvcm1BZnRlclJlY2VpdmluZ01lc3NhZ2U6QCJkcm9w
cGVkIiBhY3Rpb246XigpIHsKLSAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgfV07Ci0KLSAgICBy
dW5UZXN0V2l0aFRlbXBvcmFyeVRleHRGaWxlKF4oTlNVUkwgKmZpbGVVUkwpIHsKLSAgICAgICAg
YXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbTlNJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRd
KTsKLSAgICAgICAgW2l0ZW1Qcm92aWRlciBzZXRTdWdnZXN0ZWROYW1lOkAiZm9vIl07Ci0gICAg
ICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJGaWxlUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRp
ZmllcjooTlNTdHJpbmcgKilrVVRUeXBlVVRGOFBsYWluVGV4dCBmaWxlT3B0aW9uczowIHZpc2li
aWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGwgbG9hZEhhbmRs
ZXI6W2NhcHR1cmVkRmlsZVVSTCA9IHJldGFpblB0cihmaWxlVVJMKV0oRmlsZUxvYWRDb21wbGV0
aW9uQmxvY2sgY29tcGxldGlvbkhhbmRsZXIpIC0+IE5TUHJvZ3Jlc3MgKiB7Ci0gICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihjYXB0dXJlZEZpbGVVUkwuZ2V0KCksIE5PLCBuaWwpOwotICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgfV07Ci0KLSAgICAgICAgYXV0byBkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFs
bG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgICAgICBbZGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIu
Z2V0KCkgXV07Ci0gICAgICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1Bv
aW50TWFrZSg1MCwgNTApIHRvOkNHUG9pbnRNYWtlKDE1MCwgNTApXTsKLSAgICB9KTsKLQotICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKFtl
eHBlY3RlZE91dHB1dCBjb21wb25lbnRzSm9pbmVkQnlTdHJpbmc6QCJcbiJdLCBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0pOwotfQotCi0jZW5k
aWYgLy8gX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMzAwCi0KLVRFU1Qo
RGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlT3ZlcnJpZGVEcm9wSW5zZXJ0VVJM
KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcg
c3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJs
ZSJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxl
Y3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0
V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3Igc2V0T3ZlcnJpZGVQZXJmb3JtRHJvcEJsb2NrOl5OU0FycmF5PFVJRHJhZ0l0ZW0gKj4gKihp
ZCA8VUlEcm9wU2Vzc2lvbj4gc2Vzc2lvbikKLSAgICB7Ci0gICAgICAgIE5TTXV0YWJsZUFycmF5
PFVJRHJhZ0l0ZW0gKj4gKmFsbG93ZWRJdGVtcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0g
ICAgICAgIGZvciAoVUlEcmFnSXRlbSAqaXRlbSBpbiBzZXNzaW9uLml0ZW1zKSB7Ci0gICAgICAg
ICAgICBpZiAoW2l0ZW0uaXRlbVByb3ZpZGVyLnJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnMgY29u
dGFpbnNPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZVVSTF0pCi0gICAgICAgICAgICAgICAgW2Fs
bG93ZWRJdGVtcyBhZGRPYmplY3Q6aXRlbV07Ci0gICAgICAgIH0KLSAgICAgICAgRVhQRUNUX0VR
KDFVTCwgYWxsb3dlZEl0ZW1zLmNvdW50KTsKLSAgICAgICAgcmV0dXJuIGFsbG93ZWRJdGVtczsK
LSAgICB9XTsKLQotICAgIGF1dG8gZmlyc3RJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVt
UHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbZmlyc3RJdGVtUHJvdmlkZXIgcmVnaXN0ZXJP
YmplY3Q6QCJUaGlzIGlzIGEgc3RyaW5nLiIgdmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJl
c2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOwotICAgIGF1dG8gc2Vjb25kSXRlbVByb3Zp
ZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW3NlY29u
ZEl0ZW1Qcm92aWRlciByZWdpc3Rlck9iamVjdDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBz
Oi8vd2Via2l0Lm9yZy8iXSB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25P
cHRpb25zVmlzaWJpbGl0eUFsbF07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRF
eHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgZmlyc3RJdGVtUHJvdmlkZXIuZ2V0KCksIHNlY29uZEl0
ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZy
b206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAg
ICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd2Via2l0Lm9yZy8iLCBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il0pOwotfQotCi1URVNU
KERhdGFJbnRlcmFjdGlvblRlc3RzLCBPdmVycmlkZURhdGFJbnRlcmFjdGlvbk9wZXJhdGlvbikK
LXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBsZSJdOwotCi0gICAgYXV0byBzaW11
bGF0ZWRJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRd
KTsKLSAgICBbc2ltdWxhdGVkSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9u
Rm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERhdGE6W0AiPGJv
ZHk+PC9ib2R5PiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKLQot
ICAgIF9fYmxvY2sgYm9vbCBmaW5pc2hlZExvYWRpbmdEYXRhID0gZmFsc2U7Ci0gICAgYXV0byBk
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEl0
ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldE92
ZXJyaWRlRGF0YUludGVyYWN0aW9uT3BlcmF0aW9uQmxvY2s6Xk5TVUludGVnZXIoTlNVSW50ZWdl
ciBvcGVyYXRpb24sIGlkIHNlc3Npb24pCi0gICAgewotICAgICAgICBFWFBFQ1RfRVEoMFUsIG9w
ZXJhdGlvbik7Ci0gICAgICAgIHJldHVybiBVSURyb3BPcGVyYXRpb25Db3B5OwotICAgIH1dOwot
ICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RGF0YUludGVyYWN0aW9uT3BlcmF0aW9u
Q29tcGxldGlvbkJsb2NrOl4oQk9PTCBoYW5kbGVkLCBOU0FycmF5ICppdGVtUHJvdmlkZXJzKSB7
Ci0gICAgICAgIEVYUEVDVF9GQUxTRShoYW5kbGVkKTsKLSAgICAgICAgW2l0ZW1Qcm92aWRlcnMu
Zmlyc3RPYmplY3QgbG9hZERhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0
cmluZyAqKWtVVFR5cGVIVE1MIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNEYXRhICpkYXRhLCBOU0Vy
cm9yICplcnJvcikgewotICAgICAgICAgICAgTlNTdHJpbmcgKnRleHQgPSBbW1tOU1N0cmluZyBh
bGxvY10gaW5pdFdpdGhEYXRhOmRhdGEgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddIGF1
dG9yZWxlYXNlXTsKLSAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUSgiPGJvZHk+PC9ib2R5PiIs
IHRleHQuVVRGOFN0cmluZyk7Ci0gICAgICAgICAgICBFWFBFQ1RfRkFMU0UoISFlcnJvcik7Ci0g
ICAgICAgICAgICBmaW5pc2hlZExvYWRpbmdEYXRhID0gdHJ1ZTsKLSAgICAgICAgfV07Ci0gICAg
fV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMw
MCwgNDAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmZmluaXNoZWRMb2FkaW5nRGF0YSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9u
VGVzdHMsIEluamVjdGVkQnVuZGxlT3ZlcnJpZGVQZXJmb3JtVHdvU3RlcERyb3ApCi17Ci0gICAg
V0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtXS1dlYlZpZXdDb25maWd1
cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVzdFBsdWdJbkNsYXNzTmFtZTpAIkJ1bmRs
ZUVkaXRpbmdEZWxlZ2F0ZVBsdWdJbiJdOwotICAgIFtjb25maWd1cmF0aW9uLnByb2Nlc3NQb29s
IF9zZXRPYmplY3Q6QFlFUyBmb3JCdW5kbGVQYXJhbWV0ZXI6QCJCdW5kbGVPdmVycmlkZVBlcmZv
cm1Ud29TdGVwRHJvcCJdOwotCi0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCkgY29u
ZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSk7Ci0gICAgW3dlYlZpZXcgbG9hZFRlc3RQYWdlTmFt
ZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07
Ci0KLSAgICBhdXRvIHNpbXVsYXRlZEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92
aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXIgcmVnaXN0ZXJE
YXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlVVRG
OFBsYWluVGV4dCBvcHRpb25zOm5pbCBsb2FkSGFuZGxlcjpeTlNQcm9ncmVzcyAqKFVJSXRlbVBy
b3ZpZGVyRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkJsb2NrKQotICAgIHsKLSAg
ICAgICAgY29tcGxldGlvbkJsb2NrKFtAIkhlbGxvIHdvcmxkIiBkYXRhVXNpbmdFbmNvZGluZzpO
U1VURjhTdHJpbmdFbmNvZGluZ10sIG5pbCk7Ci0gICAgICAgIHJldHVybiBbTlNQcm9ncmVzcyBk
aXNjcmV0ZVByb2dyZXNzV2l0aFRvdGFsVW5pdENvdW50OjEwMF07Ci0gICAgfV07Ci0KLSAgICBh
dXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxh
dGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsK
LQotICAgIEVYUEVDVF9FUSgwVUwsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXS5sZW5ndGgpOwotfQotCi1URVNUKERhdGFJbnRlcmFj
dGlvblRlc3RzLCBJbmplY3RlZEJ1bmRsZUFsbG93UGVyZm9ybVR3b1N0ZXBEcm9wKQotewotICAg
IFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBfdGVzdF9jb25maWd1cmF0aW9uV2l0aFRlc3RQbHVnSW5DbGFzc05hbWU6QCJCdW5k
bGVFZGl0aW5nRGVsZWdhdGVQbHVnSW4iXTsKLSAgICBbY29uZmlndXJhdGlvbi5wcm9jZXNzUG9v
bCBfc2V0T2JqZWN0OkBOTyBmb3JCdW5kbGVQYXJhbWV0ZXI6QCJCdW5kbGVPdmVycmlkZVBlcmZv
cm1Ud29TdGVwRHJvcCJdOwotCi0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCkgY29u
ZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxv
YWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOwotICAgIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVB
bGxSYW5nZXMoKSJdOwotCi0gICAgYXV0byBzaW11bGF0ZWRJdGVtUHJvdmlkZXIgPSBhZG9wdE5T
KFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbc2ltdWxhdGVkSXRlbVByb3Zp
ZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5n
ICopa1VUVHlwZVVURjhQbGFpblRleHQgb3B0aW9uczpuaWwgbG9hZEhhbmRsZXI6Xk5TUHJvZ3Jl
c3MgKihVSUl0ZW1Qcm92aWRlckRhdGFMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRpb25CbG9j
aykKLSAgICB7Ci0gICAgICAgIGNvbXBsZXRpb25CbG9jayhbQCJIZWxsbyB3b3JsZCIgZGF0YVVz
aW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddLCBuaWwpOwotICAgICAgICByZXR1cm4g
W05TUHJvZ3Jlc3MgZGlzY3JldGVQcm9ncmVzc1dpdGhUb3RhbFVuaXRDb3VudDoxMDBdOwotICAg
IH1dOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQo
KV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlk
ZXJzOkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtl
KDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoIkhlbGxvIHdvcmxkIiwgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdLlVU
RjhTdHJpbmcpOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBJbmplY3RlZEJ1bmRs
ZUltYWdlRWxlbWVudERhdGEpCi17Ci0gICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmln
dXJhdGlvbiA9IFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRo
VGVzdFBsdWdJbkNsYXNzTmFtZTpAIkJ1bmRsZUVkaXRpbmdEZWxlZ2F0ZVBsdWdJbiJdOwotICAg
IFtjb25maWd1cmF0aW9uIF9zZXRBdHRhY2htZW50RWxlbWVudEVuYWJsZWQ6WUVTXTsKLSAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25d
KTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJpbWFnZS1h
bmQtY29udGVudGVkaXRhYmxlIl07Ci0KLSAgICBfX2Jsb2NrIFJldGFpblB0cjxOU1N0cmluZz4g
aW5qZWN0ZWRTdHJpbmc7Ci0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9w
dE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2Vi
Vmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0Q29udmVydEl0
ZW1Qcm92aWRlcnNCbG9jazpeTlNBcnJheSAqKFVJSXRlbVByb3ZpZGVyICppdGVtUHJvdmlkZXIs
IE5TQXJyYXkgKiwgTlNEaWN0aW9uYXJ5ICpkYXRhKQotICAgIHsKLSAgICAgICAgaW5qZWN0ZWRT
dHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpkYXRhW0luamVj
dGVkQnVuZGxlUGFzdGVib2FyZERhdGFUeXBlXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z10pOwotICAgICAgICByZXR1cm4gQFsgaXRlbVByb3ZpZGVyIF07Ci0gICAgfV07Ci0KLSAgICBb
ZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86
Q0dQb2ludE1ha2UoMTAwLCAyNTApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiaGVsbG8iLCBb
aW5qZWN0ZWRTdHJpbmcgVVRGOFN0cmluZ10pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRl
c3RzLCBJbmplY3RlZEJ1bmRsZUF0dGFjaG1lbnRFbGVtZW50RGF0YSkKLXsKLSAgICBXS1dlYlZp
ZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24g
X3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NOYW1lOkAiQnVuZGxlRWRpdGlu
Z0RlbGVnYXRlUGx1Z0luIl07Ci0gICAgW2NvbmZpZ3VyYXRpb24gX3NldEF0dGFjaG1lbnRFbGVt
ZW50RW5hYmxlZDpZRVNdOwotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApIGNvbmZp
Z3VyYXRpb246Y29uZmlndXJhdGlvbl0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
VGVzdFBhZ2VOYW1lZDpAImF0dGFjaG1lbnQtZWxlbWVudCJdOwotCi0gICAgX19ibG9jayBSZXRh
aW5QdHI8TlNTdHJpbmc+IGluamVjdGVkU3RyaW5nOwotICAgIGF1dG8gZGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5p
dFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yIHNldENvbnZlcnRJdGVtUHJvdmlkZXJzQmxvY2s6Xk5TQXJyYXkgKihVSUl0ZW1Qcm92aWRl
ciAqaXRlbVByb3ZpZGVyLCBOU0FycmF5ICosIE5TRGljdGlvbmFyeSAqZGF0YSkKLSAgICB7Ci0g
ICAgICAgIGluamVjdGVkU3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0
aERhdGE6ZGF0YVtJbmplY3RlZEJ1bmRsZVBhc3RlYm9hcmREYXRhVHlwZV0gZW5jb2Rpbmc6TlNV
VEY4U3RyaW5nRW5jb2RpbmddKTsKLSAgICAgICAgcmV0dXJuIEBbIGl0ZW1Qcm92aWRlciBdOwot
ICAgIH1dOwotCi0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRN
YWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2UoNTAsIDQwMCldOwotCi0gICAgRVhQRUNUX1dLX1NU
UkVRKCJoZWxsbyIsIFtpbmplY3RlZFN0cmluZyBVVEY4U3RyaW5nXSk7Ci0gICAgRVhQRUNUX1RS
VUUoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigp
LmlzQ29sbGFwc2VkIl0uYm9vbFZhbHVlKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0
cywgTGFyZ2VJbWFnZVRvVGFyZ2V0RGl2KQotewotICAgIGF1dG8gdGVzdFdlYlZpZXdDb25maWd1
cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsK
LSAgICBbW3Rlc3RXZWJWaWV3Q29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3NldExhcmdlSW1h
Z2VBc3luY0RlY29kaW5nRW5hYmxlZDpOT107Ci0KLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKSBjb25maWd1cmF0aW9uOnRlc3RXZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOwot
ICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImRpdi1hbmQtbGFy
Z2UtaW1hZ2UiXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHRO
UyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZp
ZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2lu
dE1ha2UoMjAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDIwMCwgMTUwKV07Ci0gICAgRVhQRUNUX1dL
X1NUUkVRKCJQQVNTIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRh
cmdldC50ZXh0Q29udGVudCJdLlVURjhTdHJpbmcpOwotICAgIGNoZWNrRmlyc3RUeXBlSXNQcmVz
ZW50QW5kU2Vjb25kVHlwZUlzTWlzc2luZyhkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCks
IGtVVFR5cGVQTkcsIGtVVFR5cGVGaWxlVVJMKTsKLSAgICBjaGVja0VzdGltYXRlZFNpemUoZGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yLmdldCgpLCB7IDIwMDAsIDIwMDAgfSk7Ci19Ci0KLVRFU1Qo
RGF0YUludGVyYWN0aW9uVGVzdHMsIExpbmtXaXRoRW1wdHlIUkVGKQotewotICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVj
dE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRU
ZXN0UGFnZU5hbWVkOkAibGluay1hbmQtaW5wdXQiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYScpLmhyZWYgPSAn
JyJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQo
KV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgx
MDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgRVhQRUNUX0VRKERhdGFJ
bnRlcmFjdGlvbkNhbmNlbGxlZCwgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBwaGFzZV0pOwot
ICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVdLlVURjhTdHJpbmcp
OwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBDYW5jZWxsZWRMaWZ0RG9lc05vdENh
dXNlU3Vic2VxdWVudERyYWdzVG9GYWlsKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIw
LCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAi
bGluay1hbmQtdGFyZ2V0LWRpdiJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdl
YlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0
Q29udmVydEl0ZW1Qcm92aWRlcnNCbG9jazpeTlNBcnJheSAqKFVJSXRlbVByb3ZpZGVyICosIE5T
QXJyYXkgKiwgTlNEaWN0aW9uYXJ5ICopCi0gICAgewotICAgICAgICByZXR1cm4gQFsgXTsKLSAg
ICB9XTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2Uo
MTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLSAgICBFWFBFQ1RfRVEoRGF0YUlu
dGVyYWN0aW9uQ2FuY2VsbGVkLCBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHBoYXNlXSk7Ci0g
ICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAidGFyZ2V0LnRleHRDb250ZW50Il0pOwotICAgIE5TU3RyaW5nICpvdXRwdXRUZXh0ID0g
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC50ZXh0Q29udGVu
dCJdOwotICAgIGNoZWNrU3RyaW5nQXJyYXlzQXJlRXF1YWwoQFtAImRyYWdzdGFydCIsIEAiZHJh
Z2VuZCJdLCBbb3V0cHV0VGV4dCBjb21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6QCIgIl0pOwot
Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC5pbm5l
ckhUTUwgPSAnJyJdOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0Q29udmVydEl0
ZW1Qcm92aWRlcnNCbG9jazpeTlNBcnJheSAqKFVJSXRlbVByb3ZpZGVyICppdGVtUHJvdmlkZXIs
IE5TQXJyYXkgKiwgTlNEaWN0aW9uYXJ5ICopCi0gICAgewotICAgICAgICByZXR1cm4gQFsgaXRl
bVByb3ZpZGVyIF07Ci0gICAgfV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5G
cm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0gICAg
RVhQRUNUX1dLX1NUUkVRKCJQQVNTIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAInRhcmdldC50ZXh0Q29udGVudCJdKTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnRleHRDb250ZW50Il07Ci0gICAgY2hlY2tTdHJpbmdB
cnJheXNBcmVFcXVhbChAW0AiZHJhZ3N0YXJ0IiwgQCJkcmFnZW5kIl0sIFtvdXRwdXRUZXh0IGNv
bXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIiAiXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RE
cmFnQW5kRHJvcE9udG9UYXJnZXRFbGVtZW50cyhUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3KQotewot
ICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBh
bGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXddKTsKLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFrZSg1MCwgMjUwKV07Ci0gICAgRVhQRUNU
X1dLX1NUUkVRKCJyZ2IoMCwgMTI4LCAwKSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJnZXRDb21wdXRlZFN0eWxlKHRhcmdldDEpLmJhY2tncm91bmRDb2xvciJdKTsK
LSAgICBFWFBFQ1RfV0tfU1RSRVEoIlBBU1MiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAidGFyZ2V0MS50ZXh0Q29udGVudCJdKTsKLQotICAgIFtzaW11bGF0b3IgcnVu
RnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRvOkNHUG9pbnRNYWtlKDI1MCwgNTApXTsKLSAgICBF
WFBFQ1RfV0tfU1RSRVEoInJnYigwLCAxMjgsIDApIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAImdldENvbXB1dGVkU3R5bGUodGFyZ2V0MikuYmFja2dyb3VuZENvbG9y
Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiUEFTUyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJ0YXJnZXQyLnRleHRDb250ZW50Il0pOwotCi0gICAgW3NpbXVsYXRv
ciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2UoMjUwLCAyNTApXTsK
LSAgICBFWFBFQ1RfV0tfU1RSRVEoInJnYigwLCAxMjgsIDApIiwgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldENvbXB1dGVkU3R5bGUodGFyZ2V0MykuYmFja2dyb3Vu
ZENvbG9yIl0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiUEFTUyIsIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0YXJnZXQzLnRleHRDb250ZW50Il0pOwotfQotCi1URVNU
KERhdGFJbnRlcmFjdGlvblRlc3RzLCBEcmFnRXZlbnRDbGllbnRDb29yZGluYXRlc0Jhc2ljKQot
ewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3lu
Y2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHJvcC10YXJnZXRzIl07Ci0KLSAgICB0ZXN0
RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMod2ViVmlldy5nZXQoKSk7Ci19Ci0KLVRFU1Qo
RGF0YUludGVyYWN0aW9uVGVzdHMsIERyYWdFdmVudENsaWVudENvb3JkaW5hdGVzV2l0aFNjcm9s
bE9mZnNldCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImRyb3AtdGFyZ2V0cyJdOwot
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5
LnN0eWxlLm1hcmdpbiA9ICcxMDAwcHggMCciXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSAx
MDAwIl07Ci0gICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50YXRpb25VcGRhdGVdOwotCi0g
ICAgdGVzdERyYWdBbmREcm9wT250b1RhcmdldEVsZW1lbnRzKHdlYlZpZXcuZ2V0KCkpOwotfQot
Ci1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEcmFnRXZlbnRQYWdlQ29vcmRpbmF0ZXNCYXNp
YykKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3
IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImRyb3AtdGFyZ2V0cyJdOwotICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3aW5kb3cudXNlUGFnZUNvb3Jk
aW5hdGVzID0gdHJ1ZSJdOwotCi0gICAgdGVzdERyYWdBbmREcm9wT250b1RhcmdldEVsZW1lbnRz
KHdlYlZpZXcuZ2V0KCkpOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEcmFnRXZl
bnRQYWdlQ29vcmRpbmF0ZXNXaXRoU2Nyb2xsT2Zmc2V0KQotewotICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFn
ZU5hbWVkOkAiZHJvcC10YXJnZXRzIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gJzEwMDBweCAwJyJdOwot
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5zY3Jv
bGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IDEwMDAiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAid2luZG93LnVzZVBhZ2VDb29yZGluYXRlcyA9IHRydWUiXTsK
LSAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07Ci0KLSAgICB0ZXN0
RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMod2ViVmlldy5nZXQoKSk7Ci19Ci0KLVRFU1Qo
RGF0YUludGVyYWN0aW9uVGVzdHMsIERvTm90Q3Jhc2hXaGVuU2VsZWN0aW9uSXNDbGVhcmVkSW5E
cmFnU3RhcnQpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBb
d2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkcmFnc3RhcnQtY2xlYXIt
c2VsZWN0aW9uIl07Ci0KLSAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0g
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgMTAwKSB0bzpDR1BvaW50TWFr
ZSgxMDAsIDEwMCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVRKCJQQVNTIiwgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInBhcmFncmFwaC50ZXh0Q29udGVudCJdKTsKLX0K
LQotLy8gRklYTUU6IFJlLWVuYWJsZSB0aGlzIHRlc3Qgb25jZSB3ZSByZXNvbHZlIDxodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MjA0PgotI2lmIF9fSVBIT05FX09T
X1ZFUlNJT05fTUFYX0FMTE9XRUQgPD0gMTEwNDAxCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3Rz
LCBDdXN0b21BY3Rpb25TaGVldFBvcG92ZXIpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6
QCJsaW5rLWFuZC10YXJnZXQtZGl2Il07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRo
V2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBz
ZXRTaG91bGRFbnN1cmVVSUFwcGxpY2F0aW9uOllFU107Ci0KLSAgICBfX2Jsb2NrIEJPT0wgZGlk
SW52b2tlQ3VzdG9tQWN0aW9uU2hlZXQgPSBOTzsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yIHNldFNob3dDdXN0b21BY3Rpb25TaGVldEJsb2NrOl5CT09MKF9XS0FjdGl2YXRlZEVsZW1l
bnRJbmZvICplbGVtZW50KQotICAgIHsKLSAgICAgICAgRVhQRUNUX0VRKF9XS0FjdGl2YXRlZEVs
ZW1lbnRUeXBlTGluaywgZWxlbWVudC50eXBlKTsKLSAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCJI
ZWxsbyB3b3JsZCIsIGVsZW1lbnQudGl0bGUuVVRGOFN0cmluZyk7Ci0gICAgICAgIGRpZEludm9r
ZUN1c3RvbUFjdGlvblNoZWV0ID0gWUVTOwotICAgICAgICByZXR1cm4gWUVTOwotICAgIH1dOwot
ICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUw
KSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotICAgIEVYUEVDVF9UUlVFKGRpZEludm9rZUN1
c3RvbUFjdGlvblNoZWV0KTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIlBBU1MiLCBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGFyZ2V0LnRleHRDb250ZW50Il0uVVRGOFN0
cmluZyk7Ci19Ci0jZW5kaWYKLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgVW5yZXNwb25z
aXZlUGFnZURvZXNOb3RIYW5nVUkpCi17Ci0gICAgX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
ICpwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gPSBbW1tfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKLSAgICBwcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24uaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0c0ZvclRlc3RpbmcgPSBZRVM7Ci0K
LSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKSBjb25maWd1cmF0aW9uOltbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXSBwcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb246cHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uXSk7Ci0gICAgW3dlYlZpZXcgc3lu
Y2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2ltcGxlIl07Ci0gICAgW3dlYlZpZXcgZXZh
bHVhdGVKYXZhU2NyaXB0OkAid2hpbGUoMSk7IiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOwotCi0g
ICAgLy8gVGhlIHRlc3QgcGFzc2VzIGlmIHdlIGNhbiBwcmVwYXJlIGZvciBkYXRhIGludGVyYWN0
aW9uIHdpdGhvdXQgdGltaW5nIG91dC4KLSAgICBhdXRvIGRyYWdTZXNzaW9uID0gYWRvcHROUyhb
W01vY2tEcmFnU2Vzc2lvbiBhbGxvY10gaW5pdF0pOwotICAgIFsoaWQgPFVJRHJhZ0ludGVyYWN0
aW9uRGVsZWdhdGVfRm9yV2ViS2l0T25seT4pW3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uRGVsZWdh
dGVdIF9kcmFnSW50ZXJhY3Rpb246W3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uXSBwcmVwYXJlRm9y
U2Vzc2lvbjpkcmFnU2Vzc2lvbi5nZXQoKSBjb21wbGV0aW9uOl4oKSB7IH1dOwotfQotCi1URVNU
KERhdGFJbnRlcmFjdGlvblRlc3RzLCBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkTG9hZGluZykK
LXsKLSAgICBzdGF0aWMgTlNTdHJpbmcgKmZhc3RTdHJpbmcgPSBAIlRoaXMgZGF0YSBsb2FkcyBx
dWlja2x5IjsKLSAgICBzdGF0aWMgTlNTdHJpbmcgKnNsb3dTdHJpbmcgPSBAIlRoaXMgZGF0YSBs
b2FkcyBzbG93bHkiOwotCi0gICAgV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCAqcGFzdGVib2Fy
ZCA9IFtXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNoYXJlZEluc3RhbmNlXTsKLSAgICBhdXRv
IGZhc3RJdGVtID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAg
W2Zhc3RJdGVtIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5T
U3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRleHQgb3B0aW9uczpuaWwgbG9hZEhhbmRsZXI6Xk5T
UHJvZ3Jlc3MgKihVSUl0ZW1Qcm92aWRlckRhdGFMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRp
b25CbG9jaykKLSAgICB7Ci0gICAgICAgIGNvbXBsZXRpb25CbG9jayhbZmFzdFN0cmluZyBkYXRh
VXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10sIG5pbCk7Ci0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgfV07Ci0KLSAgICBhdXRvIHNsb3dJdGVtID0gYWRvcHROUyhbW1VJSXRlbVBy
b3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW3Nsb3dJdGVtIHJlZ2lzdGVyRGF0YVJlcHJlc2Vu
dGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRleHQg
b3B0aW9uczpuaWwgbG9hZEhhbmRsZXI6Xk5TUHJvZ3Jlc3MgKihVSUl0ZW1Qcm92aWRlckRhdGFM
b2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRpb25CbG9jaykKLSAgICB7Ci0gICAgICAgIHNsZWVw
KDJfcyk7Ci0gICAgICAgIGNvbXBsZXRpb25CbG9jayhbc2xvd1N0cmluZyBkYXRhVXNpbmdFbmNv
ZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10sIG5pbCk7Ci0gICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgfV07Ci0KLSAgICBfX2Jsb2NrIGJvb2wgaGFzUnVuRmlyc3RDb21wbGV0aW9uQmxvY2sgPSBm
YWxzZTsKLSAgICBwYXN0ZWJvYXJkLml0ZW1Qcm92aWRlcnMgPSBAWyBmYXN0SXRlbS5nZXQoKSwg
c2xvd0l0ZW0uZ2V0KCkgXTsKLSAgICBbcGFzdGVib2FyZCBkb0FmdGVyTG9hZGluZ1Byb3ZpZGVk
Q29udGVudEludG9GaWxlVVJMczpeKE5TQXJyYXk8TlNVUkwgKj4gKnVybHMpIHsKLSAgICAgICAg
RVhQRUNUX0VRKDJVTCwgdXJscy5jb3VudCk7Ci0gICAgICAgIGF1dG8gZmlyc3RTdHJpbmcgPSBh
ZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ29udGVudHNPZlVSTDp1cmxzWzBdIGVu
Y29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF0pOwotICAgICAgICBhdXRvIHNl
Y29uZFN0cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDb250ZW50c09m
VVJMOnVybHNbMV0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXSk7Ci0g
ICAgICAgIEVYUEVDVF9XS19TVFJFUShmYXN0U3RyaW5nLCBbZmlyc3RTdHJpbmcgVVRGOFN0cmlu
Z10pOwotICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoc2xvd1N0cmluZywgW3NlY29uZFN0cmluZyBV
VEY4U3RyaW5nXSk7Ci0gICAgICAgIGhhc1J1bkZpcnN0Q29tcGxldGlvbkJsb2NrID0gdHJ1ZTsK
LSAgICB9IHN5bmNocm9ub3VzVGltZW91dDo2MDBdOwotICAgIEVYUEVDVF9UUlVFKGhhc1J1bkZp
cnN0Q29tcGxldGlvbkJsb2NrKTsKLQotICAgIF9fYmxvY2sgYm9vbCBoYXNSdW5TZWNvbmRDb21w
bGV0aW9uQmxvY2sgPSBmYWxzZTsKLSAgICBbcGFzdGVib2FyZCBkb0FmdGVyTG9hZGluZ1Byb3Zp
ZGVkQ29udGVudEludG9GaWxlVVJMczpeKE5TQXJyYXk8TlNVUkwgKj4gKnVybHMpIHsKLSAgICAg
ICAgRVhQRUNUX0VRKDJVTCwgdXJscy5jb3VudCk7Ci0gICAgICAgIGF1dG8gZmlyc3RTdHJpbmcg
PSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ29udGVudHNPZlVSTDp1cmxzWzBd
IGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF0pOwotICAgICAgICBhdXRv
IHNlY29uZFN0cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDb250ZW50
c09mVVJMOnVybHNbMV0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXSk7
Ci0gICAgICAgIEVYUEVDVF9XS19TVFJFUShmYXN0U3RyaW5nLCBbZmlyc3RTdHJpbmcgVVRGOFN0
cmluZ10pOwotICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoc2xvd1N0cmluZywgW3NlY29uZFN0cmlu
ZyBVVEY4U3RyaW5nXSk7Ci0gICAgICAgIGhhc1J1blNlY29uZENvbXBsZXRpb25CbG9jayA9IHRy
dWU7Ci0gICAgfSBzeW5jaHJvbm91c1RpbWVvdXQ6MF07Ci0gICAgRVhQRUNUX0ZBTFNFKGhhc1J1
blNlY29uZENvbXBsZXRpb25CbG9jayk7Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZo
YXNSdW5TZWNvbmRDb21wbGV0aW9uQmxvY2spOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRl
c3RzLCBEb05vdENyYXNoV2hlblNlbGVjdGlvbk1vdmVzT2Zmc2NyZWVuQWZ0ZXJEcmFnU3RhcnQp
Ci17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkcmFnc3RhcnQtY2hhbmdlLXNlbGVjdGlv
bi1vZmZzY3JlZW4iXTsKLQotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsK
LSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCAxMDApIHRvOkNHUG9pbnRN
YWtlKDEwMCwgMTAwKV07Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoIkZBUiBPRkZTQ1JFRU4iLCBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkuZ2V0
UmFuZ2VBdCgwKS50b1N0cmluZygpIl0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3Rz
LCBBZGRpdGlvbmFsSXRlbXNDYW5CZVByZXZlbnRlZE9uRHJhZ1N0YXJ0KQotewotICAgIGF1dG8g
d2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNH
UmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxv
YWRUZXN0UGFnZU5hbWVkOkAic2VsZWN0ZWQtdGV4dC1pbWFnZS1saW5rLWFuZC1lZGl0YWJsZSJd
OwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJsaW5rLmFkZEV2
ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIGUgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKSJdOwotICAg
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJpbWFnZS5hZGRFdmVudExp
c3RlbmVyKCdkcmFnc3RhcnQnLCBlID0+IGUucHJldmVudERlZmF1bHQoKSkiXTsKLQotICAgIGF1
dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10g
aW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFrZSg1MCwgNDAwKSBhZGRpdGlvbmFsSXRl
bVJlcXVlc3RMb2NhdGlvbnM6QHsKLSAgICAgICAgQDAuMzM6IFtOU1ZhbHVlIHZhbHVlV2l0aENH
UG9pbnQ6Q0dQb2ludE1ha2UoNTAsIDE1MCldLAotICAgICAgICBAMC42NjogW05TVmFsdWUgdmFs
dWVXaXRoQ0dQb2ludDpDR1BvaW50TWFrZSg1MCwgMjUwKV0KLSAgICB9XTsKLSAgICBFWFBFQ1Rf
V0tfU1RSRVEoIkFCQ0QiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
ZWRpdG9yLnRleHRDb250ZW50Il0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBB
ZGRpdGlvbmFsTGlua0FuZEltYWdlSW50b0NvbnRlbnRFZGl0YWJsZSkKLXsKLSAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
VGVzdFBhZ2VOYW1lZDpAInNlbGVjdGVkLXRleHQtaW1hZ2UtbGluay1hbmQtZWRpdGFibGUiXTsK
LQotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbc2ltdWxhdG9y
IHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFrZSg1MCwgNDAwKSBhZGRp
dGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnM6QHsKLSAgICAgICAgQDAuMzM6IFtOU1ZhbHVlIHZh
bHVlV2l0aENHUG9pbnQ6Q0dQb2ludE1ha2UoNTAsIDE1MCldLAotICAgICAgICBAMC42NjogW05T
VmFsdWUgdmFsdWVXaXRoQ0dQb2ludDpDR1BvaW50TWFrZSg1MCwgMjUwKV0KLSAgICB9XTsKLSAg
ICBFWFBFQ1RfV0tfU1RSRVEoIkFCQ0RBIGxpbmsiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il0pOwotICAgIEVYUEVDVF9UUlVFKFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCIhIWVkaXRvci5xdWVyeVNlbGVj
dG9yKCdpbWcnKSJdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNv
bS8iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnF1ZXJ5
U2VsZWN0b3IoJ2EnKS5ocmVmIl0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBE
cmFnTGlmdFByZXZpZXdEYXRhVHJhbnNmZXJTZXREcmFnSW1hZ2UpCi17Ci0gICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRl
c3RQYWdlTmFtZWQ6QCJEYXRhVHJhbnNmZXItc2V0RHJhZ0ltYWdlIl07Ci0gICAgYXV0byBzaW11
bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0
aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotCi0gICAgLy8gVXNlIERhdGFUcmFuc2Zlci5zZXRE
cmFnSW1hZ2UgdG8gc3BlY2lmeSBhbiBleGlzdGluZyBpbWFnZSBlbGVtZW50IGluIHRoZSBET00u
Ci0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRN
YWtlKDI1MCwgNTApXTsKLSAgICBjaGVja0NHUmVjdElzRXF1YWxUb0NHUmVjdFdpdGhMb2dnaW5n
KHt7MTAwLCA1MH0sIHsyMTUsIDE3NH19LCBbc2ltdWxhdG9yIGxpZnRQcmV2aWV3c11bMF0udmll
dy5mcmFtZSk7Ci0KLSAgICAvLyBVc2UgRGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSB0byBzcGVj
aWZ5IGFuIGV4aXN0aW5nIGltYWdlIGVsZW1lbnQgaW4gdGhlIERPTSwgd2l0aCB4IGFuZCB5IG9m
ZnNldHMuCi0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwLCAxNTApIHRvOkNH
UG9pbnRNYWtlKDI1MCwgMTUwKV07Ci0gICAgY2hlY2tDR1JlY3RJc0VxdWFsVG9DR1JlY3RXaXRo
TG9nZ2luZyh7ey05MCwgNTB9LCB7MjE1LCAxNzR9fSwgW3NpbXVsYXRvciBsaWZ0UHJldmlld3Nd
WzBdLnZpZXcuZnJhbWUpOwotCi0gICAgLy8gVXNlIERhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2Ug
dG8gc3BlY2lmeSBhIG5ld2x5IGNyZWF0ZWQgSW1hZ2UsIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBE
T00uCi0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgMjUwKSB0bzpDR1Bv
aW50TWFrZSgyNTAsIDI1MCldOwotICAgIGNoZWNrQ0dSZWN0SXNFcXVhbFRvQ0dSZWN0V2l0aExv
Z2dpbmcoe3sxMDAsIDI1MH0sIHsyMTUsIDE3NH19LCBbc2ltdWxhdG9yIGxpZnRQcmV2aWV3c11b
MF0udmlldy5mcmFtZSk7Ci0KLSAgICAvLyBEb24ndCB1c2UgRGF0YVRyYW5zZmVyLnNldERyYWdJ
bWFnZSBhbmQgZmFsbCBiYWNrIHRvIHNuYXBzaG90dGluZyB0aGUgZHJhZ2dlZCBlbGVtZW50Lgot
ICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgMzUwKSB0bzpDR1BvaW50TWFr
ZSgyNTAsIDM1MCldOwotICAgIGNoZWNrQ0dSZWN0SXNFcXVhbFRvQ0dSZWN0V2l0aExvZ2dpbmco
e3swLCAzMDB9LCB7MzAwLCAxMDB9fSwgW3NpbXVsYXRvciBsaWZ0UHJldmlld3NdWzBdLnZpZXcu
ZnJhbWUpOwotCi0gICAgLy8gUGVyZm9ybSBhIG5vcm1hbCBkcmFnIG9uIGFuIGltYWdlLgotICAg
IFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNDUwKSB0bzpDR1BvaW50TWFrZSgy
NTAsIDQ1MCldOwotICAgIGNoZWNrQ0dSZWN0SXNFcXVhbFRvQ0dSZWN0V2l0aExvZ2dpbmcoe3sw
LCA0MDB9LCB7MjE1LCAxNzR9fSwgW3NpbXVsYXRvciBsaWZ0UHJldmlld3NdWzBdLnZpZXcuZnJh
bWUpOwotfQotCi0jaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMzAw
Ci0KLXN0YXRpYyBOU0RhdGEgKnRlc3RJY29uSW1hZ2VEYXRhKCkKLXsKLSAgICByZXR1cm4gW05T
RGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZGaWxlOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gcGF0aEZv
clJlc291cmNlOkAiaWNvbiIgb2ZUeXBlOkAicG5nIiBpbkRpcmVjdG9yeTpAIlRlc3RXZWJLaXRB
UEkucmVzb3VyY2VzIl1dOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEYXRhVHJh
bnNmZXJHZXREYXRhV2hlbkRyb3BwaW5nSW1hZ2VBbmRNYXJrdXApCi17Ci0gICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0Q3VzdG9tUGFzdGVi
b2FyZERhdGFFbmFibGVkKChXS1ByZWZlcmVuY2VzUmVmKVt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25d
LnByZWZlcmVuY2VzLCB0cnVlKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQ
YWdlTmFtZWQ6QCJEYXRhVHJhbnNmZXIiXTsKLQotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHRO
UyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZp
ZXcuZ2V0KCldKTsKLSAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92
aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVz
ZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlUE5HIHdpdGhEYXRh
OnRlc3RJY29uSW1hZ2VEYXRhKCldOwotICAgIE5TU3RyaW5nICptYXJrdXBTdHJpbmcgPSBAIjxz
Y3JpcHQ+YmFyKCk8L3NjcmlwdD48c3Ryb25nIG9ubW91c2Vkb3duPWphdmFzY3JpcHQ6dm9pZCgw
KT5IRUxMTyBXT1JMRDwvc3Ryb25nPiI7Ci0gICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFS
ZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdp
dGhEYXRhOlttYXJrdXBTdHJpbmcgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmddXTsKLSAgICBbaXRlbVByb3ZpZGVyIHNldFN1Z2dlc3RlZE5hbWU6QCJpY29uIl07Ci0gICAg
W3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgp
IF1dOwotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50WmVybyB0bzpDR1BvaW50TWFrZSg1
MCwgMTAwKV07Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoIkZpbGVzLCB0ZXh0L2h0bWwiLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidHlwZXMudGV4dENvbnRlbnQiXSk7
Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCIoU1RSSU5HLCB0ZXh0L2h0bWwpLCAoRklMRSwgaW1hZ2Uv
cG5nKSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJpdGVtcy50ZXh0
Q29udGVudCJdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIignaWNvbi5wbmcnLCBpbWFnZS9wbmcp
IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImZpbGVzLnRleHRDb250
ZW50Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAInVybERhdGEudGV4dENvbnRlbnQiXSk7Ci0gICAgRVhQRUNUX1dLX1NU
UkVRKCIiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGV4dERhdGEu
dGV4dENvbnRlbnQiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJIRUxMTyBXT1JMRCIsIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJodG1sRGF0YS50ZXh0Q29udGVudCJd
KTsKLSAgICBFWFBFQ1RfRkFMU0UoW1t3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJyYXdIVE1MRGF0YS50ZXh0Q29udGVudCJdIGNvbnRhaW5zU3RyaW5nOkAic2NyaXB0Il0p
OwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEYXRhVHJhbnNmZXJHZXREYXRhV2hl
bkRyb3BwaW5nUGxhaW5UZXh0KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDAp
XSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1k
YXRhdHJhbnNmZXItdHlwZXMiXTsKLSAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgp
XSk7Ci0KLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic2VsZWN0
KHBsYWluKSJdOwotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNzUpIHRv
OkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKLSAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7Ci0gICAg
ICAgIEAiZHJhZ292ZXIiOiBAeyBAInRleHQvcGxhaW4iIDogQCIiIH0sCi0gICAgICAgIEAiZHJv
cCI6IEB7IEAidGV4dC9wbGFpbiIgOiBAIlBsYWluIHRleHQiIH0KLSAgICB9KTsKLX0KLQotVEVT
VChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRGF0YVRyYW5zZmVyR2V0RGF0YVdoZW5Ecm9wcGluZ0N1
c3RvbURhdGEpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBb
d2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zl
ci10eXBlcyJdOwotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAg
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzZWxlY3QocmljaCkiXTsK
LSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0b21E
YXRhID0gdHJ1ZSJdOwotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgMjI1
KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07Ci0gICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAewot
ICAgICAgICBAImRyYWdvdmVyIiA6IEB7Ci0gICAgICAgICAgICBAInRleHQvcGxhaW4iIDogQCIi
LAotICAgICAgICAgICAgQCJmb28vcGxhaW4iIDogQCIiLAotICAgICAgICAgICAgQCJ0ZXh0L2h0
bWwiIDogQCIiLAotICAgICAgICAgICAgQCJiYXIvaHRtbCIgOiBAIiIsCi0gICAgICAgICAgICBA
InRleHQvdXJpLWxpc3QiIDogQCIiLAotICAgICAgICAgICAgQCJiYXovdXJpLWxpc3QiIDogQCIi
Ci0gICAgICAgIH0sCi0gICAgICAgIEAiZHJvcCIgOiBAewotICAgICAgICAgICAgQCJ0ZXh0L3Bs
YWluIiA6IEAiYmVuIGJpdGRpZGRsZSIsCi0gICAgICAgICAgICBAImZvby9wbGFpbiIgOiBAImV2
YSBsdSBhdG9yIiwKLSAgICAgICAgICAgIEAidGV4dC9odG1sIiA6IEAiPGI+Ym9sZCB0ZXh0PC9i
PiIsCi0gICAgICAgICAgICBAImJhci9odG1sIiA6IEAiPGk+aXRhbGljIHRleHQ8L2k+IiwKLSAg
ICAgICAgICAgIEAidGV4dC91cmktbGlzdCIgOiBAImh0dHBzOi8vd3d3LmFwcGxlLmNvbSIsCi0g
ICAgICAgICAgICBAImJhei91cmktbGlzdCIgOiBAImh0dHBzOi8vd3d3LndlYmtpdC5vcmciCi0g
ICAgICAgIH0KLSAgICB9KTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRGF0YVRy
YW5zZmVyR2V0RGF0YVdoZW5Ecm9wcGluZ1VSTCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAs
IDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1l
ZDpAImR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07Ci0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9w
dE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2Vi
Vmlldy5nZXQoKV0pOwotCi0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAInJpY2guaW5uZXJIVE1MID0gJzxhIGhyZWY9XCJodHRwczovL3d3dy5hcHBsZS5jb20vXCI+
VGhpcyBpcyBhIGxpbmsuPC9hPiciXTsKLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1h
a2UoNTAsIDIyNSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOwotICAgIGNoZWNrSlNPTldpdGhM
b2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFs
dWUiXSwgQHsKLSAgICAgICAgQCJkcmFnb3ZlciI6IEB7Ci0gICAgICAgICAgICBAInRleHQvdXJp
LWxpc3QiIDogQCIiLAotICAgICAgICAgICAgQCJ0ZXh0L3BsYWluIiA6IEAiIgotICAgICAgICB9
LAotICAgICAgICBAImRyb3AiOiBAewotICAgICAgICAgICAgQCJ0ZXh0L3VyaS1saXN0IiA6IEAi
aHR0cHM6Ly93d3cuYXBwbGUuY29tLyIsCi0gICAgICAgICAgICBAInRleHQvcGxhaW4iIDogQCJo
dHRwczovL3d3dy5hcHBsZS5jb20vIgotICAgICAgICB9Ci0gICAgfSk7Ci19Ci0KLVRFU1QoRGF0
YUludGVyYWN0aW9uVGVzdHMsIERhdGFUcmFuc2ZlckdldERhdGFXaGVuRHJvcHBpbmdJbWFnZVdp
dGhGaWxlVVJMKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNm
ZXItdHlwZXMiXTsKLSAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAg
ICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5p
dF0pOwotICAgIE5TVVJMICppY29uVVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JS
ZXNvdXJjZTpAImljb24iIHdpdGhFeHRlbnNpb246QCJwbmciIHN1YmRpcmVjdG9yeTpAIlRlc3RX
ZWJLaXRBUEkucmVzb3VyY2VzIl07Ci0gICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckZpbGVSZXBy
ZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVQTkcgZmlsZU9w
dGlvbnM6MCB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5
QWxsIGxvYWRIYW5kbGVyOltwcm90ZWN0ZWRJY29uVVJMID0gcmV0YWluUHRyKGljb25VUkwpXSAo
RmlsZUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkhhbmRsZXIpIC0+IE5TUHJvZ3Jlc3Mg
KiB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHByb3RlY3RlZEljb25VUkwuZ2V0KCksIE5P
LCBuaWwpOwotICAgICAgICByZXR1cm4gbmlsOwotICAgIH1dOwotICAgIFtpdGVtUHJvdmlkZXIg
cmVnaXN0ZXJPYmplY3Q6aWNvblVSTCB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50
YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07Ci0gICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0
ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOwotCi0gICAgW3NpbXVsYXRvciBy
dW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgMzc1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07Ci0K
LSAgICAvLyBGaWxlIFVSTHMgc2hvdWxkIG5ldmVyIGJlIGV4cG9zZWQgZGlyZWN0bHkgdG8gd2Vi
IGNvbnRlbnQsIHNvIERhdGFUcmFuc2Zlci5nZXREYXRhIHNob3VsZCByZXR1cm4gYW4gZW1wdHkg
c3RyaW5nIGhlcmUuCi0gICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAewotICAgICAgICBAImRyYWdv
dmVyIjogQHsgQCJGaWxlcyI6IEAiIiwgQCJ0ZXh0L3VyaS1saXN0IjogQCIiIH0sCi0gICAgICAg
IEAiZHJvcCI6IEB7IEAiRmlsZXMiOiBAIiIsIEAidGV4dC91cmktbGlzdCI6IEAiIiB9Ci0gICAg
fSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERhdGFUcmFuc2ZlckdldERhdGFX
aGVuRHJvcHBpbmdJbWFnZVdpdGhIVFRQVVJMKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwg
MzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVk
OkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKLSAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0
TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3LmdldCgpXSk7Ci0KLSAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVw
cmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSlBFRyB2aXNp
YmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsIGxvYWRIYW5k
bGVyOl5OU1Byb2dyZXNzICooRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkhhbmRs
ZXIpCi0gICAgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihVSUltYWdlSlBFR1JlcHJlc2Vu
dGF0aW9uKHRlc3RJY29uSW1hZ2UoKSwgMC41KSwgbmlsKTsKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICB9XTsKLSAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiaHR0cDovL3dlYmtpdC5vcmciXSB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVw
cmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07Ci0gICAgW3NpbXVsYXRvciBzZXRFeHRl
cm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOwotCi0gICAgW3NpbXVs
YXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgMzc1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1
KV07Ci0gICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAewotICAgICAgICBAImRyYWdvdmVyIjogQHsg
QCJGaWxlcyI6IEAiIiwgQCJ0ZXh0L3VyaS1saXN0IjogQCIiIH0sCi0gICAgICAgIEAiZHJvcCI6
IEB7IEAiRmlsZXMiOiBAIiIsIEAidGV4dC91cmktbGlzdCI6IEAiaHR0cDovL3dlYmtpdC5vcmcv
IiB9Ci0gICAgfSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERhdGFUcmFuc2Zl
ckdldERhdGFXaGVuRHJvcHBpbmdSZXNwZWN0c1ByZXNlbnRhdGlvblN0eWxlKQotewotICAgIGF1
dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
OkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNs
eUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKLSAgICBhdXRv
IHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGlu
aXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBydW5UZXN0V2l0aFRlbXBvcmFy
eVRleHRGaWxlKF4oTlNVUkwgKmZpbGVVUkwpIHsKLSAgICAgICAgYXV0byBpdGVtUHJvdmlkZXIg
PSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgW2l0ZW1Q
cm92aWRlciByZWdpc3RlckZpbGVSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0
cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0IGZpbGVPcHRpb25zOjAgdmlzaWJpbGl0eTpOU0l0
ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxlcjpbcHJvdGVj
dGVkRmlsZVVSTCA9IHJldGFpblB0cihmaWxlVVJMKV0gKEZpbGVMb2FkQ29tcGxldGlvbkJsb2Nr
IGNvbXBsZXRpb25IYW5kbGVyKSAtPiBOU1Byb2dyZXNzICogewotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIocHJvdGVjdGVkRmlsZVVSTC5nZXQoKSwgTk8sIG5pbCk7Ci0gICAgICAgICAg
ICByZXR1cm4gbmlsOwotICAgICAgICB9XTsKLSAgICAgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5h
bEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOwotCi0gICAgICAgIFtpdGVt
UHJvdmlkZXIgc2V0UHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGU6VUlQcmVmZXJyZWRQcmVzZW50
YXRpb25TdHlsZUF0dGFjaG1lbnRdOwotICAgICAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2lu
dE1ha2UoMzAwLCAzNzUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKLSAgICAgICAgY2hlY2tK
U09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91
dHB1dC52YWx1ZSJdLCBAewotICAgICAgICAgICAgQCJkcmFnb3ZlciI6IEB7IEAiRmlsZXMiIDog
QCIiIH0sCi0gICAgICAgICAgICBAImRyb3AiOiBAeyBAIkZpbGVzIiA6IEAiIiB9Ci0gICAgICAg
IH0pOwotCi0gICAgICAgIFtpdGVtUHJvdmlkZXIgc2V0UHJlZmVycmVkUHJlc2VudGF0aW9uU3R5
bGU6VUlQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUlubGluZV07Ci0gICAgICAgIFtzaW11bGF0
b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDM3NSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSld
OwotICAgICAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7Ci0gICAgICAgICAgICBAImRyYWdvdmVy
IjogQHsgQCJ0ZXh0L3BsYWluIiA6IEAiIiB9LAotICAgICAgICAgICAgQCJkcm9wIjogQHsgQCJ0
ZXh0L3BsYWluIiA6IEAiVGhpcyBpcyBhIHRpbnkgYmxvYiBvZiB0ZXh0LiIgfQotICAgICAgICB9
KTsKLSAgICB9KTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRGF0YVRyYW5zZmVy
U2V0RGF0YUNhbm5vdFdyaXRlUGxhdGZvcm1UeXBlcykKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAs
IDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VO
YW1lZDpAImR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07Ci0gICAgYXV0byBzaW11bGF0b3IgPSBh
ZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6
d2ViVmlldy5nZXQoKV0pOwotCi0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAInNlbGVjdChyaWNoKSJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJjdXN0b21EYXRhID0geyAndGV4dC9wbGFpbicgOiAnZm9vJywgJ2NvbS5hZG9i
ZS5wZGYnIDogJ3RyeSBhbmQgZGVjb2RlIG1lIScgfSJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3cml0ZUN1c3RvbURhdGEgPSB0cnVlIl07Ci0KLSAgICBb
c2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDIyNSkgdG86Q0dQb2ludE1ha2UoNTAs
IDM3NSldOwotICAgIGNoZWNrRmlyc3RUeXBlSXNQcmVzZW50QW5kU2Vjb25kVHlwZUlzTWlzc2lu
ZyhzaW11bGF0b3IuZ2V0KCksIGtVVFR5cGVVVEY4UGxhaW5UZXh0LCBrVVRUeXBlUERGKTsKLSAg
ICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7Ci0gICAgICAgIEAiZHJhZ292ZXIiOiBAewotICAgICAg
ICAgICAgQCJ0ZXh0L3BsYWluIjogQCIiLAotICAgICAgICAgICAgQCJjb20uYWRvYmUucGRmIjog
QCIiCi0gICAgICAgIH0sCi0gICAgICAgIEAiZHJvcCI6IEB7Ci0gICAgICAgICAgICBAInRleHQv
cGxhaW4iOiBAImZvbyIsCi0gICAgICAgICAgICBAImNvbS5hZG9iZS5wZGYiOiBAInRyeSBhbmQg
ZGVjb2RlIG1lISIKLSAgICAgICAgfQotICAgIH0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlv
blRlc3RzLCBEYXRhVHJhbnNmZXJHZXREYXRhUmVhZFBsYWluQW5kUmljaFRleHQpCi17Ci0gICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91
c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJEYXRhVHJhbnNmZXIiXTsKLSAgICBhdXRvIHNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMo
W1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIE5TRGljdGlvbmFyeSAqdGV4dEF0
dHJpYnV0ZXMgPSBAeyBOU0ZvbnRBdHRyaWJ1dGVOYW1lOiBbVUlGb250IGJvbGRTeXN0ZW1Gb250
T2ZTaXplOjIwXSB9OwotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcmljaFRleHQgPSBbW05TQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCJXZWJLaXQiIGF0dHJpYnV0ZXM6
dGV4dEF0dHJpYnV0ZXNdOwotICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6cmljaFRl
eHQgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbF07
Ci0gICAgW2l0ZW1Qcm92aWRlciByZWdpc3Rlck9iamVjdDpbTlNVUkwgVVJMV2l0aFN0cmluZzpA
Imh0dHBzOi8vd3d3LndlYmtpdC5vcmcvIl0gdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJl
c2VudGF0aW9uVmlzaWJpbGl0eUFsbF07Ci0gICAgW2l0ZW1Qcm92aWRlciByZWdpc3Rlck9iamVj
dDpAIldlYktpdCIgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJp
bGl0eUFsbF07Ci0KLSAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBp
dGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRaZXJv
IHRvOkNHUG9pbnRNYWtlKDUwLCAxMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgidGV4dC9o
dG1sLCB0ZXh0L3BsYWluLCB0ZXh0L3VyaS1saXN0IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAInR5cGVzLnRleHRDb250ZW50Il0pOwotICAgIEVYUEVDVF9XS19TVFJF
USgiV2ViS2l0IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRleHRE
YXRhLnRleHRDb250ZW50Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93d3cud2Vi
a2l0Lm9yZy8iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidXJsRGF0
YS50ZXh0Q29udGVudCJdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIldlYktpdCIsIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJodG1sRGF0YS50ZXh0Q29udGVudCJdKTsK
LSAgICBFWFBFQ1RfV0tfU1RSRVEoIihTVFJJTkcsIHRleHQvaHRtbCksIChTVFJJTkcsIHRleHQv
cGxhaW4pLCAoU1RSSU5HLCB0ZXh0L3VyaS1saXN0KSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJpdGVtcy50ZXh0Q29udGVudCJdKTsKLSAgICBFWFBFQ1RfV0tfU1RS
RVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJmaWxlcy50ZXh0
Q29udGVudCJdKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRGF0YVRyYW5zZmVy
U3VwcHJlc3NHZXREYXRhRHVlVG9QcmVzZW5jZU9mVGV4dEZpbGUpCi17Ci0gICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRl
c3RQYWdlTmFtZWQ6QCJEYXRhVHJhbnNmZXIiXTsKLSAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0
TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3LmdldCgpXSk7Ci0KLSAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6
QCJIZWxsbyB3b3JsZCIgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlz
aWJpbGl0eUFsbF07Ci0gICAgW2l0ZW1Qcm92aWRlciBzZXRTdWdnZXN0ZWROYW1lOkAiaGVsbG8u
dHh0Il07Ci0KLSAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVt
UHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRaZXJvIHRv
OkNHUG9pbnRNYWtlKDUwLCAxMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiRmlsZXMiLCBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidHlwZXMudGV4dENvbnRlbnQi
XSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAidGV4dERhdGEudGV4dENvbnRlbnQiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVR
KCIiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidXJsRGF0YS50ZXh0
Q29udGVudCJdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJodG1sRGF0YS50ZXh0Q29udGVudCJdKTsKLSAgICBFWFBFQ1Rf
V0tfU1RSRVEoIihGSUxFLCB0ZXh0L3BsYWluKSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJpdGVtcy50ZXh0Q29udGVudCJdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEo
IignaGVsbG8udHh0JywgdGV4dC9wbGFpbikiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAiZmlsZXMudGV4dENvbnRlbnQiXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0
aW9uVGVzdHMsIERhdGFUcmFuc2ZlckdldERhdGFDYW5ub3RSZWFkUHJpdmF0ZUFyYml0cmFyeVR5
cGVzKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZp
ZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlw
ZXMiXTsKLSAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBhdXRv
IGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwot
ICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRp
ZmllcjooTlNTdHJpbmcgKilrVVRUeXBlTVAzIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXBy
ZXNlbnRhdGlvblZpc2liaWxpdHlBbGwgbG9hZEhhbmRsZXI6Xk5TUHJvZ3Jlc3MgKihEYXRhTG9h
ZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uSGFuZGxlcikKLSAgICB7Ci0gICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFtAInRoaXMgaXMgYSB0ZXN0IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhT
dHJpbmdFbmNvZGluZ10sIG5pbCk7Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfV07Ci0gICAg
W2l0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVy
OkAib3JnLldlYktpdC5UZXN0V2ViS2l0QVBJLmN1c3RvbS1wYXN0ZWJvYXJkLXR5cGUiIHZpc2li
aWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGwgbG9hZEhhbmRs
ZXI6Xk5TUHJvZ3Jlc3MgKihEYXRhTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uSGFuZGxl
cikKLSAgICB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFtAInRoaXMgaXMgYW5vdGhlciB0
ZXN0IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10sIG5pbCk7Ci0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgfV07Ci0gICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Q
cm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtpdGVtUHJvdmlkZXIgc2V0
UHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGU6VUlQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUlu
bGluZV07Ci0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgMzc1KSB0bzpD
R1BvaW50TWFrZSg1MCwgMzc1KV07Ci0gICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAewotICAgICAg
ICBAImRyYWdvdmVyIjogQHsgfSwKLSAgICAgICAgQCJkcm9wIjogQHsgfQotICAgIH0pOwotfQot
Ci1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEYXRhVHJhbnNmZXJTZXREYXRhVmFsaWRVUkwp
Ci17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJd
OwotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzZWxlY3QocmljaCkiXTsKLSAgICBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY3VzdG9tRGF0YSA9IHsgJ3VybCcg
OiAnaHR0cHM6Ly93ZWJraXQub3JnL2IvMTIzJyB9Il07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAIndyaXRlQ3VzdG9tRGF0YSA9IHRydWUiXTsKLQotICAgIF9f
YmxvY2sgYm9vbCBkb25lID0gZmFsc2U7Ci0gICAgW3NpbXVsYXRvci5nZXQoKSBzZXRPdmVycmlk
ZVBlcmZvcm1Ecm9wQmxvY2s6Xk5TQXJyYXk8VUlEcmFnSXRlbSAqPiAqKGlkIDxVSURyb3BTZXNz
aW9uPiBzZXNzaW9uKQotICAgIHsKLSAgICAgICAgRVhQRUNUX0VRKDFVTCwgc2Vzc2lvbi5pdGVt
cy5jb3VudCk7Ci0gICAgICAgIGF1dG8gKml0ZW0gPSBzZXNzaW9uLml0ZW1zWzBdLml0ZW1Qcm92
aWRlcjsKLSAgICAgICAgRVhQRUNUX1RSVUUoW2l0ZW0ucmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVy
cyBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilrVVRUeXBlVVJMXSk7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKFtpdGVtIGNhbkxvYWRPYmplY3RPZkNsYXNzOiBbTlNVUkwgY2xhc3NdXSk7Ci0gICAg
ICAgIFtpdGVtIGxvYWRPYmplY3RPZkNsYXNzOltOU1VSTCBjbGFzc10gY29tcGxldGlvbkhhbmRs
ZXI6XihpZDxOU0l0ZW1Qcm92aWRlclJlYWRpbmc+IHVybCwgTlNFcnJvciAqZXJyb3IpIHsKLSAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKFt1cmwgaXNLaW5kT2ZDbGFzczogW05TVVJMIGNsYXNzXV0p
OwotICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKFsoTlNVUkwgKil1cmwgYWJzb2x1dGVTdHJp
bmddLCBAImh0dHBzOi8vd2Via2l0Lm9yZy9iLzEyMyIpOwotICAgICAgICAgICAgZG9uZSA9IHRy
dWU7Ci0gICAgICAgIH1dOwotICAgICAgICByZXR1cm4gc2Vzc2lvbi5pdGVtczsKLSAgICB9XTsK
LSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDIyNSkgdG86Q0dQb2ludE1h
a2UoNTAsIDM3NSldOwotCi0gICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAewotICAgICAgICBAImRy
YWdvdmVyIjogQHsKLSAgICAgICAgICAgIEAidGV4dC91cmktbGlzdCI6IEAiIiwKLSAgICAgICAg
fSwKLSAgICAgICAgQCJkcm9wIjogQHsKLSAgICAgICAgICAgIEAidGV4dC91cmktbGlzdCI6IEAi
aHR0cHM6Ly93ZWJraXQub3JnL2IvMTIzIiwKLSAgICAgICAgfQotICAgIH0pOwotICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVz
dHMsIERhdGFUcmFuc2ZlclNldERhdGFVbmVzY2FwZWRVUkwpCi17Ci0gICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQ
YWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOwotICAgIGF1dG8gc2ltdWxhdG9y
ID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJW
aWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJzZWxlY3QocmljaCkiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiY3VzdG9tRGF0YSA9IHsgJ3VybCcgOiAnaHR0cDovL3dlYmtpdC5vcmcv
Yi9cdTRGNjBcdTU5N0Q7P3g9OCArIDYnIH0iXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0b21EYXRhID0gdHJ1ZSJdOwotCi0gICAgX19ibG9j
ayBib29sIGRvbmUgPSBmYWxzZTsKLSAgICBbc2ltdWxhdG9yLmdldCgpIHNldE92ZXJyaWRlUGVy
Zm9ybURyb3BCbG9jazpeTlNBcnJheTxVSURyYWdJdGVtICo+ICooaWQgPFVJRHJvcFNlc3Npb24+
IHNlc3Npb24pCi0gICAgewotICAgICAgICBFWFBFQ1RfRVEoMVVMLCBzZXNzaW9uLml0ZW1zLmNv
dW50KTsKLSAgICAgICAgYXV0byAqaXRlbSA9IHNlc3Npb24uaXRlbXNbMF0uaXRlbVByb3ZpZGVy
OwotICAgICAgICBFWFBFQ1RfVFJVRShbaXRlbS5yZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzIGNv
bnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVVUkxdKTsKLSAgICAgICAgRVhQRUNUX1RS
VUUoW2l0ZW0gY2FuTG9hZE9iamVjdE9mQ2xhc3M6IFtOU1VSTCBjbGFzc11dKTsKLSAgICAgICAg
W2l0ZW0gbG9hZE9iamVjdE9mQ2xhc3M6W05TVVJMIGNsYXNzXSBjb21wbGV0aW9uSGFuZGxlcjpe
KGlkPE5TSXRlbVByb3ZpZGVyUmVhZGluZz4gdXJsLCBOU0Vycm9yICplcnJvcikgewotICAgICAg
ICAgICAgRVhQRUNUX1RSVUUoW3VybCBpc0tpbmRPZkNsYXNzOiBbTlNVUkwgY2xhc3NdXSk7Ci0g
ICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoWyhOU1VSTCAqKXVybCBhYnNvbHV0ZVN0cmluZ10s
IEAiaHR0cDovL3dlYmtpdC5vcmcvYi8lRTQlQkQlQTAlRTUlQTUlQkQ7P3g9OCUyMCslMjA2Iik7
Ci0gICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAgfV07Ci0gICAgICAgIHJldHVybiBz
ZXNzaW9uLml0ZW1zOwotICAgIH1dOwotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFr
ZSg1MCwgMjI1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07Ci0KLSAgICBjaGVja0pTT05XaXRo
TG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZh
bHVlIl0sIEB7Ci0gICAgICAgIEAiZHJhZ292ZXIiOiBAewotICAgICAgICAgICAgQCJ0ZXh0L3Vy
aS1saXN0IjogQCIiLAotICAgICAgICB9LAotICAgICAgICBAImRyb3AiOiBAewotICAgICAgICAg
ICAgQCJ0ZXh0L3VyaS1saXN0IjogQCJodHRwOi8vd2Via2l0Lm9yZy9iL1x1NEY2MFx1NTk3RDs/
eD04ICsgNiIsCi0gICAgICAgIH0KLSAgICB9KTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEYXRhVHJhbnNmZXJT
ZXREYXRhSW52YWxpZFVSTCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1bXAtZGF0
YXRyYW5zZmVyLXR5cGVzIl07Ci0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0p
OwotCi0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNlbGVjdChy
aWNoKSJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjdXN0
b21EYXRhID0geyAndXJsJyA6ICdzb21lIHJhbmRvbSBzdHJpbmcnIH0iXTsKLSAgICBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0b21EYXRhID0gdHJ1ZSJd
OwotCi0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCAyMjUpIHRvOkNHUG9p
bnRNYWtlKDUwLCAzNzUpXTsKLSAgICBOU0FycmF5ICpyZWdpc3RlcmVkVHlwZXMgPSBbc2ltdWxh
dG9yLmdldCgpLnNvdXJjZUl0ZW1Qcm92aWRlcnMuZmlyc3RPYmplY3QgcmVnaXN0ZXJlZFR5cGVJ
ZGVudGlmaWVyc107Ci0gICAgRVhQRUNUX0ZBTFNFKFtyZWdpc3RlcmVkVHlwZXMgY29udGFpbnNP
YmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZVVSTF0pOwotICAgIGNoZWNrSlNPTldpdGhMb2dnaW5n
KFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwg
QHsKLSAgICAgICAgQCJkcmFnb3ZlciI6IEB7Ci0gICAgICAgICAgICBAInRleHQvdXJpLWxpc3Qi
OiBAIiIsCi0gICAgICAgIH0sCi0gICAgICAgIEAiZHJvcCI6IEB7Ci0gICAgICAgICAgICBAInRl
eHQvdXJpLWxpc3QiOiBAInNvbWUgcmFuZG9tIHN0cmluZyIsCi0gICAgICAgIH0KLSAgICB9KTsK
LX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRGF0YVRyYW5zZmVyU2FuaXRpemVIVE1M
KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcg
c3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMi
XTsKLSAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic2VsZWN0KHJpY2gpIl07Ci0gICAgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImN1c3RvbURhdGEgPSB7ICd0ZXh0
L2h0bWwnIDogJzxtZXRhIGNvbnRlbnQ9XCJzZWNyZXRcIj4iCi0gICAgICAgICI8YiBvbm1vdXNl
b3Zlcj1cImRhbmdlcm91c0NvZGUoKVwiPmhlbGxvPC9iPjwhLS0gc2VjcmV0LS0+LCB3b3JsZDxz
Y3JpcHQ+ZGFuZ2Vyb3VzQ29kZSgpPC9zY3JpcHQ+JyB9Il07Ci0gICAgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIndyaXRlQ3VzdG9tRGF0YSA9IHRydWUiXTsKLQotICAg
IF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7Ci0gICAgW3NpbXVsYXRvci5nZXQoKSBzZXRPdmVy
cmlkZVBlcmZvcm1Ecm9wQmxvY2s6Xk5TQXJyYXk8VUlEcmFnSXRlbSAqPiAqKGlkIDxVSURyb3BT
ZXNzaW9uPiBzZXNzaW9uKQotICAgIHsKLSAgICAgICAgRVhQRUNUX0VRKDFVTCwgc2Vzc2lvbi5p
dGVtcy5jb3VudCk7Ci0gICAgICAgIGF1dG8gKml0ZW0gPSBzZXNzaW9uLml0ZW1zWzBdLml0ZW1Q
cm92aWRlcjsKLSAgICAgICAgRVhQRUNUX1RSVUUoW2l0ZW0ucmVnaXN0ZXJlZFR5cGVJZGVudGlm
aWVycyBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilrVVRUeXBlSFRNTF0pOwotICAgICAgICBb
aXRlbSBsb2FkRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICop
a1VUVHlwZUhUTUwgY29tcGxldGlvbkhhbmRsZXI6XihOU0RhdGEgKmRhdGEsIE5TRXJyb3IgKmVy
cm9yKSB7Ci0gICAgICAgICAgICBOU1N0cmluZyAqbWFya3VwID0gW1tbTlNTdHJpbmcgYWxsb2Nd
IGluaXRXaXRoRGF0YTooTlNEYXRhICopZGF0YSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z10gYXV0b3JlbGVhc2VdOwotICAgICAgICAgICAgRVhQRUNUX1RSVUUoW21hcmt1cCBjb250YWlu
c1N0cmluZzpAImhlbGxvIl0pOwotICAgICAgICAgICAgRVhQRUNUX1RSVUUoW21hcmt1cCBjb250
YWluc1N0cmluZzpAIiwgd29ybGQiXSk7Ci0gICAgICAgICAgICBFWFBFQ1RfRkFMU0UoW21hcmt1
cCBjb250YWluc1N0cmluZzpAInNlY3JldCJdKTsKLSAgICAgICAgICAgIEVYUEVDVF9GQUxTRShb
bWFya3VwIGNvbnRhaW5zU3RyaW5nOkAiZGFuZ2Vyb3VzQ29kZSJdKTsKLSAgICAgICAgICAgIGRv
bmUgPSB0cnVlOwotICAgICAgICB9XTsKLSAgICAgICAgcmV0dXJuIHNlc3Npb24uaXRlbXM7Ci0g
ICAgfV07Ci0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCAyMjUpIHRvOkNH
UG9pbnRNYWtlKDUwLCAzNzUpXTsKLQotICAgIGNoZWNrSlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwgQHsKLSAgICAg
ICAgQCJkcmFnb3ZlciI6IEB7Ci0gICAgICAgICAgICBAInRleHQvaHRtbCI6IEAiIiwKLSAgICAg
ICAgfSwKLSAgICAgICAgQCJkcm9wIjogQHsKLSAgICAgICAgICAgIEAidGV4dC9odG1sIjogQCI8
bWV0YSBjb250ZW50PVwic2VjcmV0XCI+PGIgb25tb3VzZW92ZXI9XCJkYW5nZXJvdXNDb2RlKClc
Ij5oZWxsbzwvYj48IS0tIHNlY3JldC0tPiwgd29ybGQ8c2NyaXB0PmRhbmdlcm91c0NvZGUoKTwv
c2NyaXB0PiIsCi0gICAgICAgIH0KLSAgICB9KTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOwotfQotCi0jZW5kaWYgLy8gX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTEwMzAwCi0KLX0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKLQotI2VuZGlmIC8v
IEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9pb3MvRHJhZ0FuZERyb3BUZXN0c0lPUy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvaW9zL0RyYWdBbmREcm9wVGVzdHNJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTZlMWYzMWI3ZjIx
NDE4NWNhNmI4MjQxOTdhMTgwOTZlMjgwMTA5NgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvaW9zL0RyYWdBbmREcm9wVGVzdHNJT1MubW0KQEAgLTAsMCArMSwx
OTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKERS
QUdfU1VQUE9SVCkgJiYgUExBVEZPUk0oSU9TKQorCisjaW1wb3J0ICJEcmFnZ2luZ1NpbXVsYXRv
ci5oIgorI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRlc3RXS1dlYlZp
ZXcuaCIKKyNpbXBvcnQgIlVJS2l0U1BJLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0
aW9uRXh0cmFzLmgiCisjaW1wb3J0IDxNb2JpbGVDb3JlU2VydmljZXMvTW9iaWxlQ29yZVNlcnZp
Y2VzLmg+CisjaW1wb3J0IDxVSUtpdC9OU0l0ZW1Qcm92aWRlcitVSUtpdEFkZGl0aW9ucy5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQv
V0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29s
UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRl
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC5oPgorI2ltcG9y
dCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgorI2ltcG9ydCA8d3RmL1Nl
Y29uZHMuaD4KKwordHlwZWRlZiB2b2lkICheRmlsZUxvYWRDb21wbGV0aW9uQmxvY2spKE5TVVJM
ICosIEJPT0wsIE5TRXJyb3IgKik7Cit0eXBlZGVmIHZvaWQgKF5EYXRhTG9hZENvbXBsZXRpb25C
bG9jaykoTlNEYXRhICosIE5TRXJyb3IgKik7Cit0eXBlZGVmIHZvaWQgKF5VSUl0ZW1Qcm92aWRl
ckRhdGFMb2FkQ29tcGxldGlvbkJsb2NrKShOU0RhdGEgKiwgTlNFcnJvciAqKTsKKworI2lmICFV
U0UoQVBQTEVfSU5URVJOQUxfU0RLKQorCitAaW50ZXJmYWNlIFVJSXRlbVByb3ZpZGVyUmVwcmVz
ZW50YXRpb25PcHRpb25zIDogTlNPYmplY3QKK0BlbmQKKworI2VuZGlmCisKK0BpbnRlcmZhY2Ug
VUlJdGVtUHJvdmlkZXIoKQorKyAoVUlJdGVtUHJvdmlkZXIgKilpdGVtUHJvdmlkZXJXaXRoVVJM
OihOU1VSTCAqKXVybCB0aXRsZTooTlNTdHJpbmcgKil0aXRsZTsKKy0gKHZvaWQpIHJlZ2lzdGVy
RGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopdHlwZUlkZW50
aWZpZXIgb3B0aW9uczooVUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnMqKW9wdGlv
bnMgbG9hZEhhbmRsZXI6KE5TUHJvZ3Jlc3MgKiAoXikodm9pZCAoXlVJSXRlbVByb3ZpZGVyRGF0
YUxvYWRDb21wbGV0aW9uQmxvY2spKE5TRGF0YSAqaXRlbSwgTlNFcnJvciAqZXJyb3IpKSkgbG9h
ZEhhbmRsZXI7CitAZW5kCisKK3N0YXRpYyBOU1N0cmluZyAqSW5qZWN0ZWRCdW5kbGVQYXN0ZWJv
YXJkRGF0YVR5cGUgPSBAIm9yZy53ZWJraXQuZGF0YSI7CisKK3N0YXRpYyBVSUltYWdlICp0ZXN0
SWNvbkltYWdlKCkKK3sKKyAgICByZXR1cm4gW1VJSW1hZ2UgaW1hZ2VOYW1lZDpAIlRlc3RXZWJL
aXRBUEkucmVzb3VyY2VzL2ljb24ucG5nIl07Cit9CisKK3N0YXRpYyBOU0RhdGEgKnRlc3RaSVBB
cmNoaXZlKCkKK3sKKyAgICBOU1VSTCAqemlwRmlsZVVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gVVJMRm9yUmVzb3VyY2U6QCJjb21wcmVzc2VkLWZpbGVzIiB3aXRoRXh0ZW5zaW9uOkAiemlw
IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIHJldHVybiBb
TlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZlVSTDp6aXBGaWxlVVJMXTsKK30KKworQGltcGxlbWVu
dGF0aW9uIFVJSXRlbVByb3ZpZGVyIChEcmFnQW5kRHJvcFRlc3RzKQorCistICh2b2lkKXJlZ2lz
dGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopdHlwZUlk
ZW50aWZpZXIgd2l0aERhdGE6KE5TRGF0YSAqKWRhdGEKK3sKKyAgICBSZXRhaW5QdHI8TlNEYXRh
PiByZXRhaW5lZERhdGEgPSBkYXRhOworICAgIFtzZWxmIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0
aW9uRm9yVHlwZUlkZW50aWZpZXI6dHlwZUlkZW50aWZpZXIgdmlzaWJpbGl0eTpVSUl0ZW1Qcm92
aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGwgbG9hZEhhbmRsZXI6IFtyZXRh
aW5lZERhdGFdIChEYXRhTG9hZENvbXBsZXRpb25CbG9jayBibG9jaykgLT4gTlNQcm9ncmVzcyAq
IHsKKyAgICAgICAgYmxvY2socmV0YWluZWREYXRhLmdldCgpLCBuaWwpOworICAgICAgICByZXR1
cm4gW05TUHJvZ3Jlc3MgZGlzY3JldGVQcm9ncmVzc1dpdGhUb3RhbFVuaXRDb3VudDoxMDBdOwor
ICAgIH1dOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0V0tXZWJWaWV3IChEcmFn
QW5kRHJvcFRlc3RzKQorCistIChCT09MKWVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50Cit7Cisg
ICAgcmV0dXJuIFtzZWxmIHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCIhIWVkaXRvci5x
dWVyeVNlbGVjdG9yKCdpbWcnKSJdLmJvb2xWYWx1ZTsKK30KKworLSAoTlNTdHJpbmcgKillZGl0
b3JWYWx1ZQoreworICAgIHJldHVybiBbc2VsZiBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAiZWRpdG9yLnZhbHVlIl07Cit9CisKK0BlbmQKKworc3RhdGljIE5TVmFsdWUgKm1ha2VDR1Jl
Y3RWYWx1ZShDR0Zsb2F0IHgsIENHRmxvYXQgeSwgQ0dGbG9hdCB3aWR0aCwgQ0dGbG9hdCBoZWln
aHQpCit7CisgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpDR1JlY3RNYWtlKHgs
IHksIHdpZHRoLCBoZWlnaHQpXTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tDR1JlY3RJc0VxdWFs
VG9DR1JlY3RXaXRoTG9nZ2luZyhDR1JlY3QgZXhwZWN0ZWQsIENHUmVjdCBvYnNlcnZlZCkKK3sK
KyAgICBCT09MIGlzRXF1YWwgPSBDR1JlY3RFcXVhbFRvUmVjdChleHBlY3RlZCwgb2JzZXJ2ZWQp
OworICAgIEVYUEVDVF9UUlVFKGlzRXF1YWwpOworICAgIGlmICghaXNFcXVhbCkKKyAgICAgICAg
TlNMb2coQCJFeHBlY3RlZDogJUAgYnV0IG9ic2VydmVkOiAlQCIsIE5TU3RyaW5nRnJvbUNHUmVj
dChleHBlY3RlZCksIE5TU3RyaW5nRnJvbUNHUmVjdChvYnNlcnZlZCkpOworfQorCitzdGF0aWMg
dm9pZCBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoTlNBcnJheSAqZXhwZWN0ZWQsIE5T
QXJyYXkgKm9ic2VydmVkKQoreworICAgIGlmICghW2V4cGVjdGVkIGlzRXF1YWxUb0FycmF5Om9i
c2VydmVkXSkKKyAgICAgICAgTlNMb2coQCJFeHBlY3RlZCBzZWxlY3Rpb24gcmVjdHM6ICVAIGJ1
dCBvYnNlcnZlZDogJUAiLCBleHBlY3RlZCwgb2JzZXJ2ZWQpOworICAgIEVYUEVDVF9UUlVFKFtl
eHBlY3RlZCBpc0VxdWFsVG9BcnJheTpvYnNlcnZlZF0pOworfQorCitzdGF0aWMgdm9pZCBjaGVj
a1JpY2hUZXh0VHlwZVByZWNlZGVzUGxhaW5UZXh0VHlwZShEcmFnZ2luZ1NpbXVsYXRvciAqc2lt
dWxhdG9yKQoreworICAgIC8vIEF0IGxlYXN0IG9uZSBvZiAiY29tLmFwcGxlLmZsYXQtcnRmZCIg
b3IgInB1YmxpYy5ydGYiIGlzIGV4cGVjdGVkIHRvIGhhdmUgaGlnaGVyIHByZWNlZGVuY2UgdGhh
biAicHVibGljLnV0ZjgtcGxhaW4tdGV4dCIuCisgICAgTlNBcnJheSAqcmVnaXN0ZXJlZFR5cGVz
ID0gW3NpbXVsYXRvci5zb3VyY2VJdGVtUHJvdmlkZXJzLmZpcnN0T2JqZWN0IHJlZ2lzdGVyZWRU
eXBlSWRlbnRpZmllcnNdOworICAgIGF1dG8gaW5kZXhPZlJURlR5cGUgPSBbcmVnaXN0ZXJlZFR5
cGVzIGluZGV4T2ZPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZVJURl07CisgICAgYXV0byBpbmRl
eE9mRmxhdFJURkRUeXBlID0gW3JlZ2lzdGVyZWRUeXBlcyBpbmRleE9mT2JqZWN0OihOU1N0cmlu
ZyAqKWtVVFR5cGVGbGF0UlRGRF07CisgICAgYXV0byBpbmRleE9mUGxhaW5UZXh0VHlwZSA9IFty
ZWdpc3RlcmVkVHlwZXMgaW5kZXhPZk9iamVjdDooTlNTdHJpbmcgKilrVVRUeXBlVVRGOFBsYWlu
VGV4dF07CisgICAgRVhQRUNUX05FKChOU0ludGVnZXIpaW5kZXhPZlBsYWluVGV4dFR5cGUsIE5T
Tm90Rm91bmQpOworICAgIEVYUEVDVF9UUlVFKChpbmRleE9mUlRGVHlwZSAhPSBOU05vdEZvdW5k
ICYmIGluZGV4T2ZSVEZUeXBlIDwgaW5kZXhPZlBsYWluVGV4dFR5cGUpIHx8IChpbmRleE9mRmxh
dFJURkRUeXBlICE9IE5TTm90Rm91bmQgJiYgaW5kZXhPZkZsYXRSVEZEVHlwZSA8IGluZGV4T2ZQ
bGFpblRleHRUeXBlKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrRmlyc3RUeXBlSXNQcmVzZW50
QW5kU2Vjb25kVHlwZUlzTWlzc2luZyhEcmFnZ2luZ1NpbXVsYXRvciAqc2ltdWxhdG9yLCBDRlN0
cmluZ1JlZiBmaXJzdFR5cGUsIENGU3RyaW5nUmVmIHNlY29uZFR5cGUpCit7CisgICAgTlNBcnJh
eSAqcmVnaXN0ZXJlZFR5cGVzID0gW3NpbXVsYXRvci5zb3VyY2VJdGVtUHJvdmlkZXJzLmZpcnN0
T2JqZWN0IHJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnNdOworICAgIEVYUEVDVF9UUlVFKFtyZWdp
c3RlcmVkVHlwZXMgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nICopZmlyc3RUeXBlXSk7CisgICAg
RVhQRUNUX0ZBTFNFKFtyZWdpc3RlcmVkVHlwZXMgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nICop
c2Vjb25kVHlwZV0pOworfQorCitzdGF0aWMgdm9pZCBjaGVja1R5cGVJZGVudGlmaWVySXNSZWdp
c3RlcmVkQXRJbmRleChEcmFnZ2luZ1NpbXVsYXRvciAqc2ltdWxhdG9yLCBOU1N0cmluZyAqdHlw
ZSwgTlNVSW50ZWdlciBpbmRleCkKK3sKKyAgICBOU0FycmF5ICpyZWdpc3RlcmVkVHlwZXMgPSBb
c2ltdWxhdG9yLnNvdXJjZUl0ZW1Qcm92aWRlcnMuZmlyc3RPYmplY3QgcmVnaXN0ZXJlZFR5cGVJ
ZGVudGlmaWVyc107CisgICAgRVhQRUNUX0dUKHJlZ2lzdGVyZWRUeXBlcy5jb3VudCwgaW5kZXgp
OworICAgIEVYUEVDVF9XS19TVFJFUSh0eXBlLlVURjhTdHJpbmcsIFtyZWdpc3RlcmVkVHlwZXNb
aW5kZXhdIFVURjhTdHJpbmddKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tFc3RpbWF0ZWRTaXpl
KERyYWdnaW5nU2ltdWxhdG9yICpzaW11bGF0b3IsIENHU2l6ZSBlc3RpbWF0ZWRTaXplKQorewor
ICAgIFVJSXRlbVByb3ZpZGVyICpzb3VyY2VJdGVtUHJvdmlkZXIgPSBbc2ltdWxhdG9yIHNvdXJj
ZUl0ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0OworICAgIEVYUEVDVF9FUShlc3RpbWF0ZWRTaXpl
LndpZHRoLCBzb3VyY2VJdGVtUHJvdmlkZXIucHJlZmVycmVkUHJlc2VudGF0aW9uU2l6ZS53aWR0
aCk7CisgICAgRVhQRUNUX0VRKGVzdGltYXRlZFNpemUuaGVpZ2h0LCBzb3VyY2VJdGVtUHJvdmlk
ZXIucHJlZmVycmVkUHJlc2VudGF0aW9uU2l6ZS5oZWlnaHQpOworfQorCitzdGF0aWMgdm9pZCBj
aGVja1N1Z2dlc3RlZE5hbWVBbmRFc3RpbWF0ZWRTaXplKERyYWdnaW5nU2ltdWxhdG9yICpzaW11
bGF0b3IsIE5TU3RyaW5nICpzdWdnZXN0ZWROYW1lLCBDR1NpemUgZXN0aW1hdGVkU2l6ZSkKK3sK
KyAgICBVSUl0ZW1Qcm92aWRlciAqc291cmNlSXRlbVByb3ZpZGVyID0gW3NpbXVsYXRvciBzb3Vy
Y2VJdGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdDsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoc3VnZ2Vz
dGVkTmFtZS5VVEY4U3RyaW5nLCBzb3VyY2VJdGVtUHJvdmlkZXIuc3VnZ2VzdGVkTmFtZS5VVEY4
U3RyaW5nKTsKKyAgICBFWFBFQ1RfRVEoZXN0aW1hdGVkU2l6ZS53aWR0aCwgc291cmNlSXRlbVBy
b3ZpZGVyLnByZWZlcnJlZFByZXNlbnRhdGlvblNpemUud2lkdGgpOworICAgIEVYUEVDVF9FUShl
c3RpbWF0ZWRTaXplLmhlaWdodCwgc291cmNlSXRlbVByb3ZpZGVyLnByZWZlcnJlZFByZXNlbnRh
dGlvblNpemUuaGVpZ2h0KTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tTdHJpbmdBcnJheXNBcmVF
cXVhbChOU0FycmF5PE5TU3RyaW5nICo+ICpleHBlY3RlZCwgTlNBcnJheTxOU1N0cmluZyAqPiAq
b2JzZXJ2ZWQpCit7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkLmNvdW50LCBvYnNlcnZlZC5jb3Vu
dCk7CisgICAgZm9yIChOU1VJbnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCBleHBlY3RlZC5jb3Vu
dDsgKytpbmRleCkgeworICAgICAgICBOU1N0cmluZyAqZXhwZWN0ZWRTdHJpbmcgPSBbZXhwZWN0
ZWQgb2JqZWN0QXRJbmRleDppbmRleF07CisgICAgICAgIE5TU3RyaW5nICpvYnNlcnZlZFN0cmlu
ZyA9IFtvYnNlcnZlZCBvYmplY3RBdEluZGV4OmluZGV4XTsKKyAgICAgICAgRVhQRUNUX1dLX1NU
UkVRKGV4cGVjdGVkU3RyaW5nLCBvYnNlcnZlZFN0cmluZyk7CisgICAgICAgIGlmICghW2V4cGVj
dGVkU3RyaW5nIGlzRXF1YWxUb1N0cmluZzpvYnNlcnZlZFN0cmluZ10pCisgICAgICAgICAgICBO
U0xvZyhAIkV4cGVjdGVkIG9ic2VydmVkIHN0cmluZzogJUAgdG8gbWF0Y2ggZXhwZWN0ZWQgc3Ry
aW5nOiAlQCBhdCBpbmRleDogJXR1Iiwgb2JzZXJ2ZWRTdHJpbmcsIGV4cGVjdGVkU3RyaW5nLCBp
bmRleCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjaGVja0RyYWdDYXJldFJlY3RJc0NvbnRh
aW5lZEluUmVjdChDR1JlY3QgY2FyZXRSZWN0LCBDR1JlY3QgY29udGFpbmVyUmVjdCkKK3sKKyAg
ICBCT09MIGNvbnRhaW5lZCA9IENHUmVjdENvbnRhaW5zUmVjdChjb250YWluZXJSZWN0LCBjYXJl
dFJlY3QpOworICAgIEVYUEVDVF9UUlVFKGNvbnRhaW5lZCk7CisgICAgaWYgKCFjb250YWluZWQp
CisgICAgICAgIE5TTG9nKEAiRXhwZWN0ZWQgY2FyZXQgcmVjdDogJUAgdG8gZml0IHdpdGhpbiBj
b250YWluZXIgcmVjdDogJUAiLCBOU1N0cmluZ0Zyb21DR1JlY3QoY2FyZXRSZWN0KSwgTlNTdHJp
bmdGcm9tQ0dSZWN0KGNvbnRhaW5lclJlY3QpKTsKK30KKworI2lmIF9fSVBIT05FX09TX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID49IDExMDMwMAorCitzdGF0aWMgdm9pZCBjaGVja0pTT05XaXRoTG9n
Z2luZyhOU1N0cmluZyAqanNvblN0cmluZywgTlNEaWN0aW9uYXJ5ICpleHBlY3RlZCkKK3sKKyAg
ICBCT09MIHN1Y2Nlc3MgPSBUZXN0V2ViS2l0QVBJOjpVdGlsOjpqc29uTWF0Y2hlc0V4cGVjdGVk
VmFsdWVzKGpzb25TdHJpbmcsIGV4cGVjdGVkKTsKKyAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsK
KyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIE5TTG9nKEAiRXhwZWN0ZWQgSlNPTjogJUAgdG8g
bWF0Y2ggdmFsdWVzOiAlQCIsIGpzb25TdHJpbmcsIGV4cGVjdGVkKTsKK30KKworc3RhdGljIE5T
RGF0YSAqdGVzdEljb25JbWFnZURhdGEoKQoreworICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRo
Q29udGVudHNPZlVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiaWNv
biIgd2l0aEV4dGVuc2lvbjpAInBuZyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNv
dXJjZXMiXV07Cit9CisKK3N0YXRpYyB2b2lkIHJ1blRlc3RXaXRoVGVtcG9yYXJ5VGV4dEZpbGUo
dm9pZChecnVuVGVzdCkoTlNVUkwgKmZpbGVVUkwpKQoreworICAgIE5TU3RyaW5nICpmaWxlTmFt
ZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiZHJhZy1kcm9wLXRleHQtZmlsZS0lQC50
eHQiLCBbTlNVVUlEIFVVSURdLlVVSURTdHJpbmddOworICAgIFJldGFpblB0cjxOU1VSTD4gdGVt
cG9yYXJ5RmlsZSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TVGVtcG9yYXJ5RGlyZWN0b3J5
KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OmZpbGVOYW1lXSBpc0RpcmVjdG9yeTpO
T107CisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6
dGVtcG9yYXJ5RmlsZS5nZXQoKSBlcnJvcjpuaWxdOworCisgICAgTlNFcnJvciAqZXJyb3IgPSBu
aWw7CisgICAgW0AiVGhpcyBpcyBhIHRpbnkgYmxvYiBvZiB0ZXh0LiIgd3JpdGVUb1VSTDp0ZW1w
b3JhcnlGaWxlLmdldCgpIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29k
aW5nIGVycm9yOiZlcnJvcl07CisKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIE5TTG9nKEAiRXJy
b3Igd3JpdGluZyB0ZW1wb3JhcnkgZmlsZTogJUAiLCBlcnJvcik7CisKKyAgICBAdHJ5IHsKKyAg
ICAgICAgcnVuVGVzdCh0ZW1wb3JhcnlGaWxlLmdldCgpKTsKKyAgICB9IEBmaW5hbGx5IHsKKyAg
ICAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6dGVt
cG9yYXJ5RmlsZS5nZXQoKSBlcnJvcjpuaWxdOworICAgIH0KK30KKworc3RhdGljIHZvaWQgcnVu
VGVzdFdpdGhUZW1wb3JhcnlGb2xkZXIodm9pZChecnVuVGVzdCkoTlNVUkwgKmZvbGRlclVSTCkp
Cit7CisgICAgTlNTdHJpbmcgKmZvbGRlck5hbWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAInNvbWUuZGlyZWN0b3J5LSVAIiwgW05TVVVJRCBVVUlEXS5VVUlEU3RyaW5nXTsKKyAgICBS
ZXRhaW5QdHI8TlNVUkw+IHRlbXBvcmFyeUZvbGRlciA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6
W05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OmZv
bGRlck5hbWVdIGlzRGlyZWN0b3J5OllFU107CisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRN
YW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6dGVtcG9yYXJ5Rm9sZGVyLmdldCgpIGVycm9yOm5pbF07
CisKKyAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgICBOU0ZpbGVNYW5hZ2VyICpkZWZhdWx0
TWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKKyAgICBbZGVmYXVsdE1h
bmFnZXIgY3JlYXRlRGlyZWN0b3J5QXRVUkw6dGVtcG9yYXJ5Rm9sZGVyLmdldCgpIHdpdGhJbnRl
cm1lZGlhdGVEaXJlY3RvcmllczpOTyBhdHRyaWJ1dGVzOm5pbCBlcnJvcjomZXJyb3JdOworICAg
IFt0ZXN0SWNvbkltYWdlRGF0YSgpIHdyaXRlVG9VUkw6W3RlbXBvcmFyeUZvbGRlci5nZXQoKSBV
UkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJpY29uLnBuZyIgaXNEaXJlY3Rvcnk6Tk9dIGF0
b21pY2FsbHk6WUVTXTsKKyAgICBbdGVzdFpJUEFyY2hpdmUoKSB3cml0ZVRvVVJMOlt0ZW1wb3Jh
cnlGb2xkZXIuZ2V0KCkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYXJjaGl2ZS56aXAi
IGlzRGlyZWN0b3J5Ok5PXSBhdG9taWNhbGx5OllFU107CisKKyAgICBOU1VSTCAqZmlyc3RTdWJk
aXJlY3RvcnkgPSBbdGVtcG9yYXJ5Rm9sZGVyLmdldCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpAInN1YmRpcmVjdG9yeTEiIGlzRGlyZWN0b3J5OllFU107CisgICAgW2RlZmF1bHRNYW5h
Z2VyIGNyZWF0ZURpcmVjdG9yeUF0VVJMOmZpcnN0U3ViZGlyZWN0b3J5IHdpdGhJbnRlcm1lZGlh
dGVEaXJlY3RvcmllczpOTyBhdHRyaWJ1dGVzOm5pbCBlcnJvcjomZXJyb3JdOworICAgIFtAIkkg
YW0gYSB0ZXh0IGZpbGUgaW4gdGhlIGZpcnN0IHN1YmRpcmVjdG9yeS4iIHdyaXRlVG9VUkw6W2Zp
cnN0U3ViZGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAInRleHQtZmlsZS0x
LnR4dCIgaXNEaXJlY3Rvcnk6Tk9dIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nIGVycm9yOiZlcnJvcl07CisKKyAgICBOU1VSTCAqc2Vjb25kU3ViZGlyZWN0b3J5
ID0gW3RlbXBvcmFyeUZvbGRlci5nZXQoKSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJz
dWJkaXJlY3RvcnkyIiBpc0RpcmVjdG9yeTpZRVNdOworICAgIFtkZWZhdWx0TWFuYWdlciBjcmVh
dGVEaXJlY3RvcnlBdFVSTDpzZWNvbmRTdWJkaXJlY3Rvcnkgd2l0aEludGVybWVkaWF0ZURpcmVj
dG9yaWVzOk5PIGF0dHJpYnV0ZXM6bmlsIGVycm9yOiZlcnJvcl07CisgICAgW0AiSSBhbSBhIHRl
eHQgZmlsZSBpbiB0aGUgc2Vjb25kIHN1YmRpcmVjdG9yeS4iIHdyaXRlVG9VUkw6W3NlY29uZFN1
YmRpcmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJ0ZXh0LWZpbGUtMi50eHQi
IGlzRGlyZWN0b3J5Ok5PXSBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNv
ZGluZyBlcnJvcjomZXJyb3JdOworCisgICAgaWYgKGVycm9yKQorICAgICAgICBOU0xvZyhAIkVy
cm9yIHdyaXRpbmcgdGVtcG9yYXJ5IGZpbGU6ICVAIiwgZXJyb3IpOworCisgICAgQHRyeSB7Cisg
ICAgICAgIHJ1blRlc3QodGVtcG9yYXJ5Rm9sZGVyLmdldCgpKTsKKyAgICB9IEBmaW5hbGx5IHsK
KyAgICAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6
dGVtcG9yYXJ5Rm9sZGVyLmdldCgpIGVycm9yOm5pbF07CisgICAgfQorfQorCisjZW5kaWYgLy8g
X19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMzAwCisKK25hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJIHsKKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBJbWFnZVRvQ29udGVudEVk
aXRhYmxlKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiaW1hZ2UtYW5kLWNvbnRlbnRl
ZGl0YWJsZSJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11
bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVs
YXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAw
KV07CisKKyAgICBFWFBFQ1RfVFJVRShbd2ViVmlldyBlZGl0b3JDb250YWluc0ltYWdlRWxlbWVu
dF0pOworCisgICAgTlNBcnJheSAqb2JzZXJ2ZWRFdmVudE5hbWVzID0gW3NpbXVsYXRvciBvYnNl
cnZlZEV2ZW50TmFtZXNdOworICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29u
dGFpbnNPYmplY3Q6QCJkcmFnZW50ZXIiXSk7CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZl
bnROYW1lcyBjb250YWluc09iamVjdDpAImRyYWdvdmVyIl0pOworICAgIEVYUEVDVF9UUlVFKFtv
YnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6QCJkcm9wIl0pOworICAgIGNoZWNrU2Vs
ZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUoMSwgMjAxLCAyMTUsIDE3
NCkgXSwgW3NpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7CisgICAgY2hlY2tGaXJzdFR5
cGVJc1ByZXNlbnRBbmRTZWNvbmRUeXBlSXNNaXNzaW5nKHNpbXVsYXRvci5nZXQoKSwga1VUVHlw
ZVBORywga1VUVHlwZUZpbGVVUkwpOworICAgIGNoZWNrRXN0aW1hdGVkU2l6ZShzaW11bGF0b3Iu
Z2V0KCksIHsgMjE1LCAxNzQgfSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgQ2FuU3Rh
cnREcmFnT25Fbm9ybW91c0ltYWdlKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1
MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPGltZyBz
cmM9J2Vub3Jtb3VzLnN2Zyc+PC9pbWc+Il07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0
TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCAxMDApIHRvOkNH
UG9pbnRNYWtlKDEwMCwgMTAwKV07CisKKyAgICBOU0FycmF5ICpyZWdpc3RlcmVkVHlwZXMgPSBb
W3NpbXVsYXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdCByZWdpc3RlcmVkVHlw
ZUlkZW50aWZpZXJzXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoKE5TU3RyaW5nICopa1VUVHlwZVNj
YWxhYmxlVmVjdG9yR3JhcGhpY3MsIFtyZWdpc3RlcmVkVHlwZXMgZmlyc3RPYmplY3RdKTsKK30K
KworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBJbWFnZVRvVGV4dGFyZWEpCit7CisgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9h
ZFRlc3RQYWdlTmFtZWQ6QCJpbWFnZS1hbmQtdGV4dGFyZWEiXTsKKworICAgIGF1dG8gc2ltdWxh
dG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6
d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAs
IDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCIi
LCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0pOworCisgICAgTlNBcnJheSAqb2JzZXJ2ZWRFdmVudE5h
bWVzID0gW3NpbXVsYXRvciBvYnNlcnZlZEV2ZW50TmFtZXNdOworICAgIEVYUEVDVF9UUlVFKFtv
YnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6QCJkcmFnZW50ZXIiXSk7CisgICAgRVhQ
RUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyYWdvdmVyIl0p
OworICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6QCJk
cm9wIl0pOworICAgIGNoZWNrRmlyc3RUeXBlSXNQcmVzZW50QW5kU2Vjb25kVHlwZUlzTWlzc2lu
ZyhzaW11bGF0b3IuZ2V0KCksIGtVVFR5cGVQTkcsIGtVVFR5cGVGaWxlVVJMKTsKKyAgICBjaGVj
a0VzdGltYXRlZFNpemUoc2ltdWxhdG9yLmdldCgpLCB7IDIxNSwgMTc0IH0pOworfQorCitURVNU
KERyYWdBbmREcm9wVGVzdHMsIEltYWdlSW5MaW5rVG9JbnB1dCkKK3sKKyAgICBhdXRvIHdlYlZp
ZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RN
YWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVz
dFBhZ2VOYW1lZDpAImltYWdlLWluLWxpbmstYW5kLWlucHV0Il07CisKKyAgICBhdXRvIHNpbXVs
YXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3
OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAw
LCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgi
aHR0cHM6Ly93d3cuYXBwbGUuY29tLyIsIFt3ZWJWaWV3IGVkaXRvclZhbHVlXS5VVEY4U3RyaW5n
KTsKKyAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgbWFrZUNHUmVjdFZhbHVl
KDEwMSwgMjQxLCAyMDU3LCAyMzIpIF0sIFtzaW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0c10p
OworICAgIGNoZWNrU3VnZ2VzdGVkTmFtZUFuZEVzdGltYXRlZFNpemUoc2ltdWxhdG9yLmdldCgp
LCBAImljb24ucG5nIiwgeyAyMTUsIDE3NCB9KTsKKyAgICBjaGVja1R5cGVJZGVudGlmaWVySXNS
ZWdpc3RlcmVkQXRJbmRleChzaW11bGF0b3IuZ2V0KCksIChOU1N0cmluZyAqKWtVVFR5cGVQTkcs
IDApOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEltYWdlSW5MaW5rV2l0aG91dEhSRUZU
b0lucHV0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiaW1hZ2UtaW4tbGluay1hbmQt
aW5wdXQiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAibGlu
ay5ocmVmID0gJyciXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5n
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtz
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAs
IDMwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0p
OworICAgIGNoZWNrRXN0aW1hdGVkU2l6ZShzaW11bGF0b3IuZ2V0KCksIHsgMjE1LCAxNzQgfSk7
CisgICAgY2hlY2tUeXBlSWRlbnRpZmllcklzUmVnaXN0ZXJlZEF0SW5kZXgoc2ltdWxhdG9yLmdl
dCgpLCAoTlNTdHJpbmcgKilrVVRUeXBlUE5HLCAwKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRl
c3RzLCBJbWFnZURvZXNOb3RVc2VFbGVtZW50U2l6ZUFzRXN0aW1hdGVkU2l6ZSkKK3sKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlMb2FkVGVzdFBhZ2VOYW1lZDpAImdpZi1hbmQtZmlsZS1pbnB1dCJdOworCisgICAgYXV0byBz
aW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOiB7IDEwMCwgMTAw
IH0gdG86IHsgMTAwLCAzMDAgfV07CisKKyAgICBjaGVja1R5cGVJZGVudGlmaWVySXNSZWdpc3Rl
cmVkQXRJbmRleChzaW11bGF0b3IuZ2V0KCksIChOU1N0cmluZyAqKWtVVFR5cGVHSUYsIDApOwor
ICAgIGNoZWNrU3VnZ2VzdGVkTmFtZUFuZEVzdGltYXRlZFNpemUoc2ltdWxhdG9yLmdldCgpLCBA
ImFwcGxlLmdpZiIsIHsgNTIsIDY0IH0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiYXBwbGUuZ2lm
IChpbWFnZS9naWYpIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91
dHB1dC50ZXh0Q29udGVudCJdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBDb250ZW50
RWRpdGFibGVUb0NvbnRlbnRFZGl0YWJsZSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxh
dG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgW3dlYlZp
ZXcgbG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07CisgICAg
W3NpbXVsYXRvciB3YWl0Rm9ySW5wdXRTZXNzaW9uXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIEVY
UEVDVF9FUShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic291cmNlLnRl
eHRDb250ZW50Il0ubGVuZ3RoLCAwVUwpOworICAgIEVYUEVDVF9XS19TVFJFUSgiSGVsbG8gd29y
bGQiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRD
b250ZW50Il0uVVRGOFN0cmluZyk7CisKKyAgICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMg
PSBbc2ltdWxhdG9yIG9ic2VydmVkRXZlbnROYW1lc107CisgICAgRVhQRUNUX1RSVUUoW29ic2Vy
dmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyYWdlbnRlciJdKTsKKyAgICBFWFBFQ1Rf
VFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJhZ292ZXIiXSk7Cisg
ICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyb3Ai
XSk7CisgICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1
ZSgxLCAyMDEsIDk2MSwgMjI3KSBdLCBbc2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsK
KyAgICBjaGVja1JpY2hUZXh0VHlwZVByZWNlZGVzUGxhaW5UZXh0VHlwZShzaW11bGF0b3IuZ2V0
KCkpOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIENvbnRlbnRFZGl0YWJsZVRvVGV4dGFy
ZWEpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIHNp
bXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJW
aWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIFt3ZWJWaWV3IGxvYWRUZXN0UGFnZU5hbWVkOkAi
Y29udGVudGVkaXRhYmxlLWFuZC10ZXh0YXJlYSJdOworICAgIFtzaW11bGF0b3Igd2FpdEZvcklu
cHV0U2Vzc2lvbl07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTAp
IHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBFWFBFQ1RfRVEoW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNvdXJjZS50ZXh0Q29udGVudCJdLmxlbmd0aCwg
MFVMKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIkhlbGxvIHdvcmxkIiwgW3dlYlZpZXcgZWRpdG9y
VmFsdWVdLlVURjhTdHJpbmcpOworCisgICAgTlNBcnJheSAqb2JzZXJ2ZWRFdmVudE5hbWVzID0g
W3NpbXVsYXRvciBvYnNlcnZlZEV2ZW50TmFtZXNdOworICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZl
ZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6QCJkcmFnZW50ZXIiXSk7CisgICAgRVhQRUNUX1RS
VUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyYWdvdmVyIl0pOworICAg
IEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6QCJkcm9wIl0p
OworICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUo
NiwgMjAzLCA5OTAsIDIzMikgXSwgW3NpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7Cisg
ICAgY2hlY2tSaWNoVGV4dFR5cGVQcmVjZWRlc1BsYWluVGV4dFR5cGUoc2ltdWxhdG9yLmdldCgp
KTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBDb250ZW50RWRpdGFibGVNb3ZlUGFyYWdy
YXBocykKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8g
c2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdl
YlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgW3dlYlZpZXcgbG9hZFRlc3RQYWdlTmFtZWQ6
QCJ0d28tcGFyYWdyYXBoLWNvbnRlbnRlZGl0YWJsZSJdOworICAgIFtzaW11bGF0b3Igd2FpdEZv
cklucHV0U2Vzc2lvbl07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwg
NTApIHRvOkNHUG9pbnRNYWtlKDI1MCwgNDUwKV07CisKKyAgICBOU1N0cmluZyAqZmluYWxUZXh0
Q29udGVudCA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3Iu
dGV4dENvbnRlbnQiXTsKKyAgICBOU1VJbnRlZ2VyIGZpcnN0UGFyYWdyYXBoT2Zmc2V0ID0gW2Zp
bmFsVGV4dENvbnRlbnQgcmFuZ2VPZlN0cmluZzpAIlRoaXMgaXMgdGhlIGZpcnN0IHBhcmFncmFw
aCJdLmxvY2F0aW9uOworICAgIE5TVUludGVnZXIgc2Vjb25kUGFyYWdyYXBoT2Zmc2V0ID0gW2Zp
bmFsVGV4dENvbnRlbnQgcmFuZ2VPZlN0cmluZzpAIlRoaXMgaXMgdGhlIHNlY29uZCBwYXJhZ3Jh
cGgiXS5sb2NhdGlvbjsKKworICAgIEVYUEVDVF9GQUxTRShmaXJzdFBhcmFncmFwaE9mZnNldCA9
PSBOU05vdEZvdW5kKTsKKyAgICBFWFBFQ1RfRkFMU0Uoc2Vjb25kUGFyYWdyYXBoT2Zmc2V0ID09
IE5TTm90Rm91bmQpOworICAgIEVYUEVDVF9HVChmaXJzdFBhcmFncmFwaE9mZnNldCwgc2Vjb25k
UGFyYWdyYXBoT2Zmc2V0KTsKKyAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsg
bWFrZUNHUmVjdFZhbHVlKDE5MCwgMTAwLCAxMzAsIDIwKSwgbWFrZUNHUmVjdFZhbHVlKDAsIDEy
MCwgMzIwLCAxMDApLCBtYWtlQ0dSZWN0VmFsdWUoMCwgMjIwLCAyNTIsIDIwKSBdLCBbc2ltdWxh
dG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBE
cmFnSW1hZ2VGcm9tQ29udGVudEVkaXRhYmxlKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwg
MzIwLCA1MDApXSk7CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11
bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisKKyAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJjb250ZW50ZWRpdGFibGUtYW5k
LXRhcmdldCJdOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDEwMCkg
dG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiUEFTUyIs
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0YXJnZXQudGV4dENvbnRl
bnQiXSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgVGV4dEFyZWFUb0lucHV0KQorewor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBzaW11bGF0b3Ig
PSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3LmdldCgpXSk7CisKKyAgICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VOYW1lZDpAInRleHRhcmVh
LXRvLWlucHV0Il07CisgICAgW3NpbXVsYXRvciB3YWl0Rm9ySW5wdXRTZXNzaW9uXTsKKyAgICBb
c2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAw
LCAzMDApXTsKKworICAgIEVYUEVDVF9FUShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAic291cmNlLnZhbHVlIl0ubGVuZ3RoLCAwVUwpOworICAgIEVYUEVDVF9XS19TVFJF
USgiSGVsbG8gd29ybGQiLCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0uVVRGOFN0cmluZyk7CisgICAg
Y2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1ZSgxMDEsIDI0
MSwgOTkwLCAyMzIpIF0sIFtzaW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0c10pOworfQorCitU
RVNUKERyYWdBbmREcm9wVGVzdHMsIFNpbmdsZVBsYWluVGV4dFdvcmRUeXBlSWRlbnRpZmllcnMp
Cit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIHNpbXVs
YXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3
OndlYlZpZXcuZ2V0KCldKTsKKworICAgIFt3ZWJWaWV3IGxvYWRUZXN0UGFnZU5hbWVkOkAidGV4
dGFyZWEtdG8taW5wdXQiXTsKKyAgICBbc2ltdWxhdG9yIHdhaXRGb3JJbnB1dFNlc3Npb25dOwor
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2UudmFsdWUg
PSAncG5ldW1vbm91bHRyYW1pY3Jvc2NvcGljc2lsaWNvdm9sY2Fub2Nvbmlvc2lzJyJdOworICAg
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2Uuc2VsZWN0aW9u
U3RhcnQgPSAwIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
InNvdXJjZS5zZWxlY3Rpb25FbmQgPSBzb3VyY2UudmFsdWUubGVuZ3RoIl07CisgICAgW3NpbXVs
YXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAw
KV07CisKKyAgICBOU0l0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyID0gW3NpbXVsYXRvciBzb3Vy
Y2VJdGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdDsKKyAgICBOU0FycmF5ICpyZWdpc3RlcmVkVHlw
ZXMgPSBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnNdOworICAgIEVYUEVD
VF9FUSgxVUwsIHJlZ2lzdGVyZWRUeXBlcy5jb3VudCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKFso
TlNTdHJpbmcgKilrVVRUeXBlVVRGOFBsYWluVGV4dCBVVEY4U3RyaW5nXSwgW3JlZ2lzdGVyZWRU
eXBlcy5maXJzdE9iamVjdCBVVEY4U3RyaW5nXSk7CisgICAgRVhQRUNUX0VRKFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2UudmFsdWUiXS5sZW5ndGgsIDBVTCk7
CisgICAgRVhQRUNUX0VRKFVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVJbmxpbmUsIGl0ZW1Q
cm92aWRlci5wcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZSk7CisgICAgRVhQRUNUX1dLX1NUUkVR
KCJwbmV1bW9ub3VsdHJhbWljcm9zY29waWNzaWxpY292b2xjYW5vY29uaW9zaXMiLCBbd2ViVmll
dyBlZGl0b3JWYWx1ZV0uVVRGOFN0cmluZyk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywg
U2luZ2xlUGxhaW5UZXh0VVJMVHlwZUlkZW50aWZpZXJzKQoreworICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dp
bmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisKKyAg
ICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VOYW1lZDpAInRleHRhcmVhLXRvLWlucHV0Il07CisgICAg
W3NpbXVsYXRvciB3YWl0Rm9ySW5wdXRTZXNzaW9uXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAic291cmNlLnZhbHVlID0gJ2h0dHBzOi8vd2Via2l0Lm9yZy8n
Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNvdXJjZS5z
ZWxlY3Rpb25TdGFydCA9IDAiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAic291cmNlLnNlbGVjdGlvbkVuZCA9IHNvdXJjZS52YWx1ZS5sZW5ndGgiXTsKKyAg
ICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2Uo
MTAwLCAzMDApXTsKKworICAgIE5TSXRlbVByb3ZpZGVyICppdGVtUHJvdmlkZXIgPSBbc2ltdWxh
dG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0OworICAgIE5TQXJyYXkgKnJlZ2lz
dGVyZWRUeXBlcyA9IFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVyc107Cisg
ICAgRVhQRUNUX0VRKDJVTCwgcmVnaXN0ZXJlZFR5cGVzLmNvdW50KTsKKyAgICBFWFBFQ1RfV0tf
U1RSRVEoWyhOU1N0cmluZyAqKWtVVFR5cGVVUkwgVVRGOFN0cmluZ10sIFtyZWdpc3RlcmVkVHlw
ZXMuZmlyc3RPYmplY3QgVVRGOFN0cmluZ10pOworICAgIEVYUEVDVF9XS19TVFJFUShbKE5TU3Ry
aW5nICopa1VUVHlwZVVURjhQbGFpblRleHQgVVRGOFN0cmluZ10sIFtyZWdpc3RlcmVkVHlwZXMu
bGFzdE9iamVjdCBVVEY4U3RyaW5nXSk7CisgICAgRVhQRUNUX0VRKDBVTCwgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNvdXJjZS52YWx1ZSJdLmxlbmd0aCk7CisgICAg
RVhQRUNUX0VRKFVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVJbmxpbmUsIGl0ZW1Qcm92aWRl
ci5wcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJodHRw
czovL3dlYmtpdC5vcmcvIiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVdLlVURjhTdHJpbmcpOworfQor
CitURVNUKERyYWdBbmREcm9wVGVzdHMsIExpbmtUb0lucHV0KQoreworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0
UGFnZU5hbWVkOkAibGluay1hbmQtaW5wdXQiXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRv
cHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5n
ZXQoKV0pOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpD
R1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczovL3d3
dy5hcHBsZS5jb20vIiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVdLlVURjhTdHJpbmcpOworCisgICAg
X19ibG9jayBib29sIGRvbmVMb2FkaW5nVVJMID0gZmFsc2U7CisgICAgVUlJdGVtUHJvdmlkZXIg
KnNvdXJjZUl0ZW1Qcm92aWRlciA9IFtzaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10uZmly
c3RPYmplY3Q7CisgICAgW3NvdXJjZUl0ZW1Qcm92aWRlciBsb2FkT2JqZWN0T2ZDbGFzczpbTlNV
UkwgY2xhc3NdIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgb2JqZWN0LCBOU0Vycm9yICplcnJvcikg
eworICAgICAgICBOU1VSTCAqdXJsID0gb2JqZWN0OworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEo
IkhlbGxvIHdvcmxkIiwgdXJsLl90aXRsZS5VVEY4U3RyaW5nID86ICIiKTsKKyAgICAgICAgZG9u
ZUxvYWRpbmdVUkwgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZG9uZUxvYWRpbmdVUkwpOworCisgICAgTlNBcnJheSAqb2JzZXJ2ZWRFdmVudE5hbWVzID0g
W3NpbXVsYXRvciBvYnNlcnZlZEV2ZW50TmFtZXNdOworICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZl
ZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6QCJkcmFnZW50ZXIiXSk7CisgICAgRVhQRUNUX1RS
VUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyYWdvdmVyIl0pOworICAg
IEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6QCJkcm9wIl0p
OworICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUo
MTAxLCAyNzMsIDIwNTcsIDIzMikgXSwgW3NpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7
CisgICAgY2hlY2tUeXBlSWRlbnRpZmllcklzUmVnaXN0ZXJlZEF0SW5kZXgoc2ltdWxhdG9yLmdl
dCgpLCAoTlNTdHJpbmcgKilrVVRUeXBlVVJMLCAwKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRl
c3RzLCBCYWNrZ3JvdW5kSW1hZ2VMaW5rVG9JbnB1dCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAs
IDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VO
YW1lZDpAImJhY2tncm91bmQtaW1hZ2UtbGluay1hbmQtaW5wdXQiXTsKKworICAgIGF1dG8gc2lt
dWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZp
ZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgx
MDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVR
KCJodHRwczovL3d3dy5hcHBsZS5jb20vIiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVdLlVURjhTdHJp
bmcpOworCisgICAgTlNBcnJheSAqb2JzZXJ2ZWRFdmVudE5hbWVzID0gW3NpbXVsYXRvciBvYnNl
cnZlZEV2ZW50TmFtZXNdOworICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29u
dGFpbnNPYmplY3Q6QCJkcmFnZW50ZXIiXSk7CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZl
bnROYW1lcyBjb250YWluc09iamVjdDpAImRyYWdvdmVyIl0pOworICAgIEVYUEVDVF9UUlVFKFtv
YnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6QCJkcm9wIl0pOworICAgIGNoZWNrU2Vs
ZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUoMTAxLCAyNDEsIDIwNTcs
IDIzMikgXSwgW3NpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7CisgICAgY2hlY2tUeXBl
SWRlbnRpZmllcklzUmVnaXN0ZXJlZEF0SW5kZXgoc2ltdWxhdG9yLmdldCgpLCAoTlNTdHJpbmcg
KilrVVRUeXBlVVJMLCAwKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBDYW5QcmV2ZW50
U3RhcnQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJwcmV2ZW50LXN0YXJ0Il07CisK
KyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10g
aW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIEVY
UEVDVF9FUShEcmFnQW5kRHJvcFBoYXNlQ2FuY2VsbGVkLCBbc2ltdWxhdG9yIHBoYXNlXSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKFt3ZWJWaWV3IGVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk7CisK
KyAgICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbc2ltdWxhdG9yIG9ic2VydmVkRXZl
bnROYW1lc107CisgICAgRVhQRUNUX0ZBTFNFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNP
YmplY3Q6QCJkcmFnZW50ZXIiXSk7CisgICAgRVhQRUNUX0ZBTFNFKFtvYnNlcnZlZEV2ZW50TmFt
ZXMgY29udGFpbnNPYmplY3Q6QCJkcmFnb3ZlciJdKTsKKyAgICBjaGVja1NlbGVjdGlvblJlY3Rz
V2l0aExvZ2dpbmcoQFsgXSwgW3NpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7Cit9CisK
K1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgQ2FuUHJldmVudE9wZXJhdGlvbikKK3sKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlM
b2FkVGVzdFBhZ2VOYW1lZDpAInByZXZlbnQtb3BlcmF0aW9uIl07CisKKyAgICBhdXRvIHNpbXVs
YXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3
OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAw
LCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIEVYUEVDVF9GQUxTRShbd2Vi
VmlldyBlZGl0b3JDb250YWluc0ltYWdlRWxlbWVudF0pOworCisgICAgTlNBcnJheSAqb2JzZXJ2
ZWRFdmVudE5hbWVzID0gW3NpbXVsYXRvciBvYnNlcnZlZEV2ZW50TmFtZXNdOworICAgIEVYUEVD
VF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6QCJkcmFnZW50ZXIiXSk7
CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRy
YWdvdmVyIl0pOworICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBdLCBbc2lt
dWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3Rz
LCBFbnRlckFuZExlYXZlRXZlbnRzKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1
MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAibGlu
ay1hbmQtaW5wdXQiXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5n
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtz
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAs
IDQ1MCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0u
VVRGOFN0cmluZyk7CisKKyAgICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbc2ltdWxh
dG9yIG9ic2VydmVkRXZlbnROYW1lc107CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnRO
YW1lcyBjb250YWluc09iamVjdDpAImRyYWdlbnRlciJdKTsKKyAgICBFWFBFQ1RfVFJVRShbb2Jz
ZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJhZ292ZXIiXSk7CisgICAgRVhQRUNU
X1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyYWdsZWF2ZSJdKTsK
KyAgICBFWFBFQ1RfRkFMU0UoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRy
b3AiXSk7CisgICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIF0sIFtzaW11bGF0
b3IgZmluYWxTZWxlY3Rpb25SZWN0c10pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIENh
blN0YXJ0RHJhZ09uRGl2V2l0aERyYWdnYWJsZUF0dHJpYnV0ZSkKK3sKKyAgICBhdXRvIHdlYlZp
ZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RN
YWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVz
dFBhZ2VOYW1lZDpAImN1c3RvbS1kcmFnZ2FibGUtZGl2Il07CisKKyAgICBhdXRvIHNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCAx
MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMjUwKV07CisKKyAgICBFWFBFQ1RfR1QoW3NpbXVsYXRv
ciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5jb3VudCwgMFVMKTsKKyAgICBOU0l0ZW1Qcm92aWRlciAq
aXRlbVByb3ZpZGVyID0gW3NpbXVsYXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5maXJzdE9iamVj
dDsKKyAgICBFWFBFQ1RfRVEoVUlQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUlubGluZSwgaXRl
bVByb3ZpZGVyLnByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlKTsKKyAgICBFWFBFQ1RfVFJVRShb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiISFkZXN0aW5hdGlvbi5xdWVy
eVNlbGVjdG9yKCcjaXRlbScpIl0pOworICAgIEVYUEVDVF9XS19TVFJFUShAIlBBU1MiLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaXRlbS50ZXh0Q29udGVudCJdKTsK
K30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZVBsYWluVGV4dFRvSUZy
YW1lKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZp
ZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiY29udGVudGVkaXRhYmxlLWluLWlm
cmFtZSJdOworCisgICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlk
ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OkAiSGVs
bG8gd29ybGQiIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNW
aXNpYmlsaXR5QWxsXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5n
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtz
aW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBd
XTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMCwgMCkgdG86Q0dQb2ludE1h
a2UoMTYwLCAyNTApXTsKKworICAgIGF1dG8gY29udGFpbmVyTGVmdCA9IFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0
KCkubGVmdCJdLmZsb2F0VmFsdWU7CisgICAgYXV0byBjb250YWluZXJUb3AgPSBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpLnRvcCJdLmZsb2F0VmFsdWU7CisgICAgYXV0byBjb250YWluZXJXaWR0aCA9IFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjb250YWluZXIuZ2V0Qm91bmRpbmdD
bGllbnRSZWN0KCkud2lkdGgiXS5mbG9hdFZhbHVlOworICAgIGF1dG8gY29udGFpbmVySGVpZ2h0
ID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImNvbnRhaW5lci5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQiXS5mbG9hdFZhbHVlOworICAgIGNoZWNrRHJhZ0Nh
cmV0UmVjdElzQ29udGFpbmVkSW5SZWN0KFtzaW11bGF0b3IgbGFzdEtub3duRHJhZ0NhcmV0UmVj
dF0sIENHUmVjdE1ha2UoY29udGFpbmVyTGVmdCwgY29udGFpbmVyVG9wLCBjb250YWluZXJXaWR0
aCwgY29udGFpbmVySGVpZ2h0KSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJu
YWxTb3VyY2VJbmxpbmVUZXh0VG9GaWxlSW5wdXQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFt
ZWQ6QCJmaWxlLXVwbG9hZGluZyJdOworCisgICAgYXV0byBzaW11bGF0ZWRJdGVtUHJvdmlkZXIg
PSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbc2ltdWxhdGVk
SXRlbVByb3ZpZGVyIHNldFByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlOlVJUHJlZmVycmVkUHJl
c2VudGF0aW9uU3R5bGVJbmxpbmVdOworICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXIgcmVnaXN0
ZXJPYmplY3Q6QCJUaGlzIGl0ZW0gcHJvdmlkZXIgcmVxdWVzdGVkIGlubGluZSBwcmVzZW50YXRp
b24gc3R5bGUuIiB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmls
aXR5QWxsXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxh
dG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0
b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRlci5nZXQo
KSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAxMDApIHRvOkNH
UG9pbnRNYWtlKDEwMCwgMTAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSk7Cit9CisKK1RF
U1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VKU09OVG9GaWxlSW5wdXQpCit7Cisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOworCisgICAgYXV0byBz
aW11bGF0ZWRKU09OSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9j
XSBpbml0XSk7CisgICAgTlNEYXRhICpqc29uRGF0YSA9IFtAInsgXCJmb29cIjogXCJiYXJcIiwg
IFwiYmFyXCI6IFwiYmF6XCIgfSIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmddOworICAgIFtzaW11bGF0ZWRKU09OSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2Vu
dGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUpTT04gd2l0aERhdGE6
anNvbkRhdGFdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11
bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVs
YXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSlNPTkl0ZW1Qcm92aWRl
ci5nZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAxMDAp
IHRvOkNHUG9pbnRNYWtlKDEwMCwgMTAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImFwcGxp
Y2F0aW9uL2pzb24iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0
cHV0LnZhbHVlIl0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNl
SW1hZ2VUb0ZpbGVJbnB1dCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBs
b2FkaW5nIl07CisKKyAgICBhdXRvIHNpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyID0gYWRvcHRO
UyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgTlNEYXRhICppbWFnZURhdGEg
PSBVSUltYWdlSlBFR1JlcHJlc2VudGF0aW9uKHRlc3RJY29uSW1hZ2UoKSwgMC41KTsKKyAgICBb
c2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JU
eXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSlBFRyB3aXRoRGF0YTppbWFnZURhdGFd
OworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxs
b2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRF
eHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIuZ2V0KCkg
XV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAwKSB0bzpDR1Bv
aW50TWFrZSgxMDAsIDEwMCldOworCisgICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOworICAgIEVY
UEVDVF9XS19TVFJFUSgiaW1hZ2UvanBlZyIsIG91dHB1dFZhbHVlLlVURjhTdHJpbmcpOworfQor
CitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNlSFRNTFRvVXBsb2FkQXJlYSkK
K3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2FkaW5nIl07CisKKyAgICBh
dXRvIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIg
YWxsb2NdIGluaXRdKTsKKyAgICBOU0RhdGEgKmh0bWxEYXRhID0gW0AiPGJvZHkgY29udGVudGVk
aXRhYmxlPjwvYm9keT4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsK
KyAgICBbc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlv
bkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOmh0bWxE
YXRhXTsKKyAgICBbc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciBzZXRTdWdnZXN0ZWROYW1lOkAi
aW5kZXguaHRtbCJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdT
aW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3Np
bXVsYXRvciBzZXRTaG91bGRBbGxvd01vdmVPcGVyYXRpb246Tk9dOworICAgIFtzaW11bGF0b3Ig
c2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0
KCkgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMzAwKSB0bzpD
R1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOworICAg
IEVYUEVDVF9XS19TVFJFUSgidGV4dC9odG1sIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7Cit9
CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VNb3ZlT3BlcmF0aW9uTm90
QWxsb3dlZCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2FkaW5nIl07
CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInVwbG9hZC5kcm9w
RWZmZWN0ID0gJ21vdmUnIl07CisKKyAgICBhdXRvIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIg
PSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBOU0RhdGEgKmh0
bWxEYXRhID0gW0AiPGJvZHkgY29udGVudGVkaXRhYmxlPjwvYm9keT4iIGRhdGFVc2luZ0VuY29k
aW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICBbc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRl
ciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAq
KWtVVFR5cGVIVE1MIHdpdGhEYXRhOmh0bWxEYXRhXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0g
YWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmll
dy5nZXQoKV0pOworICAgIFtzaW11bGF0b3Igc2V0U2hvdWxkQWxsb3dNb3ZlT3BlcmF0aW9uOk5P
XTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRI
VE1MSXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50
TWFrZSgyMDAsIDMwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIEVYUEVDVF9X
S19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1
dC52YWx1ZSJdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZVpJ
UEFyY2hpdmVBbmRVUkxUb1NpbmdsZUZpbGVJbnB1dCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAs
IDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VO
YW1lZDpAImZpbGUtdXBsb2FkaW5nIl07CisKKyAgICBhdXRvIGFyY2hpdmVQcm92aWRlciA9IGFk
b3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFthcmNoaXZlUHJvdmlk
ZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcg
KilrVVRUeXBlWmlwQXJjaGl2ZSB3aXRoRGF0YTp0ZXN0WklQQXJjaGl2ZSgpXTsKKworICAgIGF1
dG8gdXJsUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsK
KyAgICBbdXJsUHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJo
dHRwczovL3dlYmtpdC5vcmciXSB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRp
b25PcHRpb25zVmlzaWJpbGl0eUFsbF07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMo
W1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCld
KTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBhcmNoaXZlUHJv
dmlkZXIuZ2V0KCksIHVybFByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJv
bTpDR1BvaW50TWFrZSgyMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsKKworICAg
IE5TU3RyaW5nICpvdXRwdXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJvdXRwdXQudmFsdWUiXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImFwcGxpY2F0aW9u
L3ppcCIsIG91dHB1dFZhbHVlLlVURjhTdHJpbmcpOworfQorCitURVNUKERyYWdBbmREcm9wVGVz
dHMsIEV4dGVybmFsU291cmNlWklQQXJjaGl2ZVRvVXBsb2FkQXJlYSkKK3sKKyAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
VGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2FkaW5nIl07CisKKyAgICBhdXRvIGl0ZW1Qcm92aWRl
ciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtpdGVtUHJv
dmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJp
bmcgKilrVVRUeXBlWmlwQXJjaGl2ZSB3aXRoRGF0YTp0ZXN0WklQQXJjaGl2ZSgpXTsKKworICAg
IGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0
V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJ
dGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1
bkZyb206Q0dQb2ludE1ha2UoMjAwLCAzMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisK
KyAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07CisgICAgRVhQRUNUX1dLX1NUUkVRKCJhcHBsaWNh
dGlvbi96aXAiLCBvdXRwdXRWYWx1ZS5VVEY4U3RyaW5nKTsKK30KKworVEVTVChEcmFnQW5kRHJv
cFRlc3RzLCBFeHRlcm5hbFNvdXJjZUltYWdlQW5kSFRNTFRvU2luZ2xlRmlsZUlucHV0KQorewor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsKKworICAgIGF1dG8g
c2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxs
b2NdIGluaXRdKTsKKyAgICBOU0RhdGEgKmltYWdlRGF0YSA9IFVJSW1hZ2VKUEVHUmVwcmVzZW50
YXRpb24odGVzdEljb25JbWFnZSgpLCAwLjUpOworICAgIFtzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92
aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmlu
ZyAqKWtVVFR5cGVKUEVHIHdpdGhEYXRhOmltYWdlRGF0YV07CisKKyAgICBhdXRvIHNpbXVsYXRl
ZEhUTUxJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRd
KTsKKyAgICBOU0RhdGEgKmh0bWxEYXRhID0gW0AiPGJvZHkgY29udGVudGVkaXRhYmxlPjwvYm9k
eT4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICBbc2ltdWxh
dGVkSFRNTEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVu
dGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOmh0bWxEYXRhXTsKKworICAg
IGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0
V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJ
dGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0KCksIHNpbXVsYXRl
ZEltYWdlSXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1Bv
aW50TWFrZSgyMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsKKworICAgIE5TU3Ry
aW5nICpvdXRwdXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJvdXRwdXQudmFsdWUiXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIG91dHB1dFZhbHVlLlVU
RjhTdHJpbmcpOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNlSW1h
Z2VBbmRIVE1MVG9NdWx0aXBsZUZpbGVJbnB1dCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAs
IDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1l
ZDpAImZpbGUtdXBsb2FkaW5nIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAImlucHV0LnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCAnJykiXTsKKworICAgIGF1
dG8gc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIg
YWxsb2NdIGluaXRdKTsKKyAgICBOU0RhdGEgKmltYWdlRGF0YSA9IFVJSW1hZ2VKUEVHUmVwcmVz
ZW50YXRpb24odGVzdEljb25JbWFnZSgpLCAwLjUpOworICAgIFtzaW11bGF0ZWRJbWFnZUl0ZW1Q
cm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0
cmluZyAqKWtVVFR5cGVKUEVHIHdpdGhEYXRhOmltYWdlRGF0YV07CisKKyAgICBhdXRvIHNpbXVs
YXRlZEhUTUxJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGlu
aXRdKTsKKyAgICBOU0RhdGEgKmh0bWxEYXRhID0gW0AiPGJvZHkgY29udGVudGVkaXRhYmxlPjwv
Ym9keT4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICBbc2lt
dWxhdGVkSFRNTEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJ
ZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOmh0bWxEYXRhXTsKKwor
ICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBp
bml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJu
YWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0KCksIHNpbXVs
YXRlZEltYWdlSXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpD
R1BvaW50TWFrZSgyMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsKKworICAgIE5T
U3RyaW5nICpvdXRwdXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJvdXRwdXQudmFsdWUiXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImltYWdlL2pwZWcsIHRl
eHQvaHRtbCIsIG91dHB1dFZhbHVlLlVURjhTdHJpbmcpOworfQorCitURVNUKERyYWdBbmREcm9w
VGVzdHMsIEV4dGVybmFsU291cmNlSW1hZ2VBbmRIVE1MVG9VcGxvYWRBcmVhKQoreworICAgIGF1
dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
OkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNs
eUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsKKworICAgIGF1dG8gc2ltdWxh
dGVkSW1hZ2VJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGlu
aXRdKTsKKyAgICBOU0RhdGEgKmltYWdlRGF0YSA9IFVJSW1hZ2VKUEVHUmVwcmVzZW50YXRpb24o
dGVzdEljb25JbWFnZSgpLCAwLjUpOworICAgIFtzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciBy
ZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtV
VFR5cGVKUEVHIHdpdGhEYXRhOmltYWdlRGF0YV07CisKKyAgICBhdXRvIGZpcnN0U2ltdWxhdGVk
SFRNTEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0p
OworICAgIE5TRGF0YSAqZmlyc3RIVE1MRGF0YSA9IFtAIjxib2R5IGNvbnRlbnRlZGl0YWJsZT48
L2JvZHk+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisgICAgW2Zp
cnN0U2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZv
clR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOmZpcnN0SFRN
TERhdGFdOworCisgICAgYXV0byBzZWNvbmRTaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyID0gYWRv
cHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgTlNEYXRhICpzZWNvbmRI
VE1MRGF0YSA9IFtAIjxodG1sPjxib2R5PmhlbGxvIHdvcmxkPC9ib2R5PjwvaHRtbD4iIGRhdGFV
c2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICBbc2Vjb25kU2ltdWxhdGVk
SFRNTEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlm
aWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOnNlY29uZEhUTUxEYXRhXTsKKwor
ICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBp
bml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3Igc2V0U2hvdWxk
QWxsb3dNb3ZlT3BlcmF0aW9uOk5PXTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVBy
b3ZpZGVyczpAWyBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlci5nZXQoKSwgZmlyc3RTaW11bGF0
ZWRIVE1MSXRlbVByb3ZpZGVyLmdldCgpLCBzZWNvbmRTaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVy
LmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDMwMCkg
dG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIE5TU3RyaW5nICpvdXRwdXRWYWx1ZSA9
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXTsK
KyAgICBFWFBFQ1RfV0tfU1RSRVEoImltYWdlL2pwZWcsIHRleHQvaHRtbCwgdGV4dC9odG1sIiwg
b3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0
ZXJuYWxTb3VyY2VIVE1MVG9Db250ZW50RWRpdGFibGUpCit7CisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdl
TmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07CisgICAgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygp
Il07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBh
bGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBhdXRvIGl0ZW1Qcm92
aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0
YSAqaHRtbERhdGEgPSBbQCI8aDE+VGhpcyBpcyBhIHRlc3Q8L2gxPiIgZGF0YVVzaW5nRW5jb2Rp
bmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOworICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRh
UmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3
aXRoRGF0YTpodG1sRGF0YV07CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRl
cnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1Bv
aW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIE5TU3Ry
aW5nICp0ZXh0Q29udGVudCA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJlZGl0b3IudGV4dENvbnRlbnQiXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlRoaXMgaXMgYSB0
ZXN0IiwgdGV4dENvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1RSVUUoW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIiEhZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ2gx
JykiXS5ib29sVmFsdWUpOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291
cmNlQm9sZFN5c3RlbUF0dHJpYnV0ZWRTdHJpbmdUb0NvbnRlbnRFZGl0YWJsZSkKK3sKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlMb2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKKyAgICBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVt
b3ZlQWxsUmFuZ2VzKCkiXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdn
aW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAg
IE5TRGljdGlvbmFyeSAqdGV4dEF0dHJpYnV0ZXMgPSBAeyBOU0ZvbnRBdHRyaWJ1dGVOYW1lOiBb
VUlGb250IGJvbGRTeXN0ZW1Gb250T2ZTaXplOjIwXSB9OworICAgIE5TQXR0cmlidXRlZFN0cmlu
ZyAqcmljaFRleHQgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
QCJUaGlzIGlzIGEgdGVzdCIgYXR0cmlidXRlczp0ZXh0QXR0cmlidXRlc107CisgICAgYXV0byBp
dGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRXaXRoT2Jq
ZWN0OnJpY2hUZXh0XSk7CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6
QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50
TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIEVYUEVDVF9X
S19TVFJFUSgiVGhpcyBpcyBhIHRlc3QiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il0uVVRGOFN0cmluZyk7Cit9CisKK1RFU1QoRHJh
Z0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VDb2xvcmVkQXR0cmlidXRlZFN0cmluZ1RvQ29u
dGVudEVkaXRhYmxlKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Cisg
ICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNv
bnRlbnRlZGl0YWJsZSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSJdOworCisgICAgYXV0byBzaW11
bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmll
dzp3ZWJWaWV3LmdldCgpXSk7CisgICAgTlNEaWN0aW9uYXJ5ICp0ZXh0QXR0cmlidXRlcyA9IEB7
IE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZTogW1VJQ29sb3IgcmVkQ29sb3JdIH07Cisg
ICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpyaWNoVGV4dCA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0V2l0aFN0cmluZzpAIlRoaXMgaXMgYSB0ZXN0IiBhdHRyaWJ1dGVzOnRleHRBdHRy
aWJ1dGVzXTsKKyAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRl
ciBhbGxvY10gaW5pdFdpdGhPYmplY3Q6cmljaFRleHRdKTsKKyAgICBbc2ltdWxhdG9yIHNldEV4
dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW3NpbXVs
YXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMw
MCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCJyZ2IoMjU1LCAwLCAwKSIsIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LnF1
ZXJ5U2VsZWN0b3IoJ3AnKSkuY29sb3IiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJUaGlzIGlz
IGEgdGVzdCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3Iu
dGV4dENvbnRlbnQiXS5VVEY4U3RyaW5nKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBF
eHRlcm5hbFNvdXJjZU11bHRpcGxlVVJMc1RvQ29udGVudEVkaXRhYmxlKQoreworICAgIGF1dG8g
d2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNH
UmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxv
YWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOworICAgIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVB
bGxSYW5nZXMoKSJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdT
aW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgYXV0
byBmaXJzdEl0ZW0gPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAg
ICBbZmlyc3RJdGVtIHJlZ2lzdGVyT2JqZWN0OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6
Ly93d3cuYXBwbGUuY29tL2lwaG9uZS8iXSB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVz
ZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07CisgICAgYXV0byBzZWNvbmRJdGVtID0gYWRv
cHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW3NlY29uZEl0ZW0gcmVn
aXN0ZXJPYmplY3Q6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBsZS5jb20v
bWFjLyJdIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNp
YmlsaXR5QWxsXTsKKyAgICBhdXRvIHRoaXJkSXRlbSA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRl
ciBhbGxvY10gaW5pdF0pOworICAgIFt0aGlyZEl0ZW0gcmVnaXN0ZXJPYmplY3Q6W05TVVJMIFVS
TFdpdGhTdHJpbmc6QCJodHRwczovL3dlYmtpdC5vcmcvIl0gdmlzaWJpbGl0eTpVSUl0ZW1Qcm92
aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOworICAgIFtzaW11bGF0b3Ig
c2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGZpcnN0SXRlbS5nZXQoKSwgc2Vjb25kSXRlbS5n
ZXQoKSwgdGhpcmRJdGVtLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50
TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIE5TQXJyYXkg
KmRyb3BwZWRVUkxzID0gW3dlYlZpZXcgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIkFy
cmF5LmZyb20oZWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJ2EnKSkubWFwKGEgPT4gYS5ocmVmKSJd
OworICAgIEVYUEVDVF9FUSgzVUwsIGRyb3BwZWRVUkxzLmNvdW50KTsKKyAgICBFWFBFQ1RfV0tf
U1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUvIiwgZHJvcHBlZFVSTHNbMF0pOwor
ICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93d3cuYXBwbGUuY29tL21hYy8iLCBkcm9wcGVk
VVJMc1sxXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczovL3dlYmtpdC5vcmcvIiwgZHJv
cHBlZFVSTHNbMl0pOworCisgICAgTlNBcnJheSAqbGlua3NTZXBhcmF0ZWRCeUxpbmUgPSBbW3dl
YlZpZXcgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci5pbm5lclRleHQiXSBj
b21wb25lbnRzU2VwYXJhdGVkQnlDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hhcmFjdGVyU2V0IG5ld2xp
bmVDaGFyYWN0ZXJTZXRdXTsKKyAgICBFWFBFQ1RfRVEoM1VMLCBsaW5rc1NlcGFyYXRlZEJ5TGlu
ZS5jb3VudCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczovL3d3dy5hcHBsZS5jb20vaXBo
b25lLyIsIGxpbmtzU2VwYXJhdGVkQnlMaW5lWzBdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImh0
dHBzOi8vd3d3LmFwcGxlLmNvbS9tYWMvIiwgbGlua3NTZXBhcmF0ZWRCeUxpbmVbMV0pOworICAg
IEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93ZWJraXQub3JnLyIsIGxpbmtzU2VwYXJhdGVkQnlM
aW5lWzJdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBSZXNwZWN0c0V4dGVybmFsU291
cmNlRmlkZWxpdHlSYW5raW5ncykKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9m
b2N1cy1jb250ZW50ZWRpdGFibGUiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkiXTsKKworICAgIGF1
dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0
aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgLy8gSGVyZSwgb3VyIHNvdXJjZSBpdGVt
IHByb3ZpZGVyIHZlbmRzIHR3byByZXByZXNlbnRhdGlvbnM6IHBsYWluIHRleHQsIGFuZCB0aGVu
IGFuIGltYWdlLiBJZiB3ZSBkb24ndCByZXNwZWN0IHRoZQorICAgIC8vIGZpZGVsaXR5IG9yZGVy
IHJlcXVlc3RlZCBieSB0aGUgc291cmNlLCB3ZSdsbCBlbmQgdXAgYXNzdW1pbmcgdGhhdCB0aGUg
aW1hZ2UgaXMgYSBoaWdoZXIgZmlkZWxpdHkgcmVwcmVzZW50YXRpb24KKyAgICAvLyB0aGFuIHRo
ZSBwbGFpbiB0ZXh0LCBhbmQgZXJyb25lb3VzbHkgaW5zZXJ0IHRoZSBpbWFnZS4gSWYgd2UgcmVz
cGVjdCBzb3VyY2UgZmlkZWxpdGllcywgd2UnbGwgaW5zZXJ0IHRleHQgcmF0aGVyCisgICAgLy8g
dGhhbiBhbiBpbWFnZS4KKyAgICBhdXRvIHNpbXVsYXRlZEl0ZW1Qcm92aWRlcldpdGhUZXh0Rmly
c3QgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbc2ltdWxh
dGVkSXRlbVByb3ZpZGVyV2l0aFRleHRGaXJzdCByZWdpc3Rlck9iamVjdDpAIkhlbGxvIHdvcmxk
IiB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0
eUFsbF07CisgICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRlcldpdGhUZXh0Rmlyc3QgcmVnaXN0ZXJP
YmplY3Q6dGVzdEljb25JbWFnZSgpIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRh
dGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRl
bVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXJXaXRoVGV4dEZpcnN0LmdldCgpIF1d
OworCisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1Bv
aW50TWFrZSgxMDAsIDMwMCldOworICAgIEVYUEVDVF9XS19TVFJFUSgiSGVsbG8gd29ybGQiLCBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50
Il0pOworICAgIEVYUEVDVF9GQUxTRShbd2ViVmlldyBlZGl0b3JDb250YWluc0ltYWdlRWxlbWVu
dF0pOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3Iu
aW5uZXJIVE1MID0gJyciXTsKKworICAgIC8vIE5vdyB3ZSByZWdpc3RlciB0aGUgaXRlbSBwcm92
aWRlcnMgaW4gcmV2ZXJzZSwgYW5kIGV4cGVjdCB0aGUgaW1hZ2UgdG8gYmUgaW5zZXJ0ZWQgaW5z
dGVhZCBvZiB0ZXh0LgorICAgIGF1dG8gc2ltdWxhdGVkSXRlbVByb3ZpZGVyV2l0aEltYWdlRmly
c3QgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbc2ltdWxh
dGVkSXRlbVByb3ZpZGVyV2l0aEltYWdlRmlyc3QgcmVnaXN0ZXJPYmplY3Q6dGVzdEljb25JbWFn
ZSgpIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmls
aXR5QWxsXTsKKyAgICBbc2ltdWxhdGVkSXRlbVByb3ZpZGVyV2l0aEltYWdlRmlyc3QgcmVnaXN0
ZXJPYmplY3Q6QCJIZWxsbyB3b3JsZCIgdmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2Vu
dGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJ
dGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRlcldpdGhJbWFnZUZpcnN0LmdldCgp
IF1dOworCisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpD
R1BvaW50TWFrZSgxMDAsIDMwMCldOworICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdKTsKKyAg
ICBFWFBFQ1RfVFJVRShbd2ViVmlldyBlZGl0b3JDb250YWluc0ltYWdlRWxlbWVudF0pOworfQor
CitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNlVVRGOFBsYWluVGV4dE9ubHkp
Cit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxl
Il07CisKKyAgICBOU1N0cmluZyAqdGV4dFBheWxvYWQgPSBAIkNlY2kgbidlc3QgcGFzIHVuZSBz
dHJpbmciOworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9y
IGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIGF1dG8gc2ltdWxh
dGVkSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7
CisgICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZv
clR5cGVJZGVudGlmaWVyOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0
IG9wdGlvbnM6bmlsIGxvYWRIYW5kbGVyOl5OU1Byb2dyZXNzICooVUlJdGVtUHJvdmlkZXJEYXRh
TG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uQmxvY2spCisgICAgeworICAgICAgICBjb21w
bGV0aW9uQmxvY2soW3RleHRQYXlsb2FkIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0Vu
Y29kaW5nXSwgbmlsKTsKKyAgICAgICAgcmV0dXJuIFtOU1Byb2dyZXNzIGRpc2NyZXRlUHJvZ3Jl
c3NXaXRoVG90YWxVbml0Q291bnQ6MTAwXTsKKyAgICB9XTsKKyAgICBbc2ltdWxhdG9yIHNldEV4
dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07Cisg
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50TWFr
ZSgxMDAsIDMwMCldOworICAgIEVYUEVDVF9XS19TVFJFUSh0ZXh0UGF5bG9hZC5VVEY4U3RyaW5n
LCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250
ZW50Il0uVVRGOFN0cmluZyk7CisgICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBb
IG1ha2VDR1JlY3RWYWx1ZSgxLCAyMDEsIDE5MzYsIDIyNykgXSwgW3NpbXVsYXRvciBmaW5hbFNl
bGVjdGlvblJlY3RzXSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3Vy
Y2VKUEVHT25seSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAg
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250
ZW50ZWRpdGFibGUiXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5n
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIGF1
dG8gc2ltdWxhdGVkSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9j
XSBpbml0XSk7CisgICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNl
bnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVKUEVH
IG9wdGlvbnM6bmlsIGxvYWRIYW5kbGVyOl5OU1Byb2dyZXNzICooVUlJdGVtUHJvdmlkZXJEYXRh
TG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uQmxvY2spCisgICAgeworICAgICAgICBjb21w
bGV0aW9uQmxvY2soVUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAu
NSksIG5pbCk7CisgICAgICAgIHJldHVybiBbTlNQcm9ncmVzcyBkaXNjcmV0ZVByb2dyZXNzV2l0
aFRvdGFsVW5pdENvdW50OjEwMF07CisgICAgfV07CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5h
bEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtz
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAw
LCAzMDApXTsKKyAgICBFWFBFQ1RfVFJVRShbd2ViVmlldyBlZGl0b3JDb250YWluc0ltYWdlRWxl
bWVudF0pOworICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0
VmFsdWUoMSwgMjAxLCAyMTUsIDE3NCkgXSwgW3NpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3Rz
XSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VUaXRsZWROU1VS
TCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3
IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFi
bGUiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2Vs
ZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkiXTsKKworICAgIE5TVVJMICp0aXRsZWRVUkwgPSBb
TlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd3d3LmFwcGxlLmNvbSJdOworICAgIHRpdGxl
ZFVSTC5fdGl0bGUgPSBAIkFwcGxlIjsKKyAgICBhdXRvIHNpbXVsYXRlZEl0ZW1Qcm92aWRlciA9
IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtzaW11bGF0ZWRJ
dGVtUHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6dGl0bGVkVVJMIHZpc2liaWxpdHk6VUlJdGVtUHJv
dmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKKworICAgIGF1dG8gc2lt
dWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZp
ZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlk
ZXJzOkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1
bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisK
KyAgICBFWFBFQ1RfV0tfU1RSRVEoIkFwcGxlIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAImVkaXRvci5xdWVyeVNlbGVjdG9yKCdhJykudGV4dENvbnRlbnQiXSk7Cisg
ICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczovL3d3dy5hcHBsZS5jb20vIiwgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci5xdWVyeVNlbGVjdG9yKCdhJykuaHJl
ZiJdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZUZpbGVVUkwp
Cit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxl
Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVj
dGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07CisKKyAgICBOU1VSTCAqVVJMID0gW05TVVJMIFVS
TFdpdGhTdHJpbmc6QCJmaWxlOi8vL3NvbWUvZmlsZS90aGF0L2lzL25vdC9yZWFsIl07CisgICAg
VUlJdGVtUHJvdmlkZXIgKnNpbXVsYXRlZEl0ZW1Qcm92aWRlciA9IFtVSUl0ZW1Qcm92aWRlciBp
dGVtUHJvdmlkZXJXaXRoVVJMOlVSTCB0aXRsZTpAIiJdOworCisgICAgYXV0byBzaW11bGF0b3Ig
PSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsg
c2ltdWxhdGVkSXRlbVByb3ZpZGVyIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50
TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIEVYUEVDVF9G
QUxTRShbW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIiEhZWRpdG9yLnF1
ZXJ5U2VsZWN0b3IoJ2EnKSJdIGJvb2xWYWx1ZV0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiSGVs
bG8gd29ybGRcbmZpbGU6Ly8vc29tZS9maWxlL3RoYXQvaXMvbm90L3JlYWwiLCBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lclRleHQiXSk7
Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VPdmVycmlkZURyb3BG
aWxlVXBsb2FkKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmci
XTsKKworICAgIGF1dG8gc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJ
dGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBOU0RhdGEgKmltYWdlRGF0YSA9IFVJSW1h
Z2VKUEVHUmVwcmVzZW50YXRpb24odGVzdEljb25JbWFnZSgpLCAwLjUpOworICAgIFtzaW11bGF0
ZWRJbWFnZUl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVu
dGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVKUEVHIHdpdGhEYXRhOmltYWdlRGF0YV07CisKKyAg
ICBhdXRvIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlk
ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBOU0RhdGEgKmZpcnN0SFRNTERhdGEgPSBbQCI8Ym9keSBj
b250ZW50ZWRpdGFibGU+PC9ib2R5PiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5j
b2RpbmddOworICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJl
c2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERh
dGE6Zmlyc3RIVE1MRGF0YV07CisgICAgW3NpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgc2V0UHJl
ZmVycmVkUHJlc2VudGF0aW9uU3R5bGU6VUlQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUF0dGFj
aG1lbnRdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0
b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRv
ciBzZXRPdmVycmlkZVBlcmZvcm1Ecm9wQmxvY2s6Xk5TQXJyYXk8VUlEcmFnSXRlbSAqPiAqKGlk
IDxVSURyb3BTZXNzaW9uPiBzZXNzaW9uKQorICAgIHsKKyAgICAgICAgRVhQRUNUX0VRKDJVTCwg
c2Vzc2lvbi5pdGVtcy5jb3VudCk7CisgICAgICAgIFVJRHJhZ0l0ZW0gKmZpcnN0SXRlbSA9IHNl
c3Npb24uaXRlbXNbMF07CisgICAgICAgIFVJRHJhZ0l0ZW0gKnNlY29uZEl0ZW0gPSBzZXNzaW9u
Lml0ZW1zWzFdOworICAgICAgICBFWFBFQ1RfVFJVRShbZmlyc3RJdGVtLml0ZW1Qcm92aWRlci5y
ZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzIGlzRXF1YWw6QFsgKE5TU3RyaW5nICopa1VUVHlwZUpQ
RUcgXV0pOworICAgICAgICBFWFBFQ1RfVFJVRShbc2Vjb25kSXRlbS5pdGVtUHJvdmlkZXIucmVn
aXN0ZXJlZFR5cGVJZGVudGlmaWVycyBpc0VxdWFsOkBbIChOU1N0cmluZyAqKWtVVFR5cGVIVE1M
IF1dKTsKKyAgICAgICAgcmV0dXJuIEBbIHNlY29uZEl0ZW0gXTsKKyAgICB9XTsKKyAgICBbc2lt
dWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92
aWRlci5nZXQoKSwgc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAgICBbc2lt
dWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAzMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwg
MzAwKV07CisKKyAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07CisgICAgRVhQRUNUX1dLX1NUUkVR
KCJ0ZXh0L2h0bWwiLCBvdXRwdXRWYWx1ZS5VVEY4U3RyaW5nKTsKK30KKworI2lmIF9fSVBIT05F
X09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDMwMAorCitzdGF0aWMgUmV0YWluUHRyPFRl
c3RXS1dlYlZpZXc+IHNldFVwVGVzdFdlYlZpZXdGb3JEYXRhVHJhbnNmZXJJdGVtcygpCit7Cisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJEYXRhVHJhbnNmZXJJdGVtLWdldEFzRW50cnkiXTsK
KworICAgIGF1dG8gcHJlZmVyZW5jZXMgPSAoV0tQcmVmZXJlbmNlc1JlZilbW3dlYlZpZXcgY29u
ZmlndXJhdGlvbl0gcHJlZmVyZW5jZXNdOworICAgIFdLUHJlZmVyZW5jZXNTZXREYXRhVHJhbnNm
ZXJJdGVtc0VuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRE
aXJlY3RvcnlVcGxvYWRFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKKworICAgIHJldHVybiB3
ZWJWaWV3OworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNlRGF0YVRy
YW5zZmVySXRlbUdldEZvbGRlckFzRW50cnkpCit7CisgICAgLy8gVGhlIGV4cGVjdGVkIG91dHB1
dCBpcyBzb3J0ZWQgYnkgYWxwaGFiZXRpY2FsIG9yZGVyIGhlcmUgZm9yIGNvbnNpc3RlbnQgYmVo
YXZpb3IgYWNyb3NzIGRpZmZlcmVudCB0ZXN0IGVudmlyb25tZW50cy4KKyAgICAvLyBTZWUgRGF0
YVRyYW5zZmVySXRlbS1nZXRBc0VudHJ5Lmh0bWwgZm9yIG1vcmUgZGV0YWlscy4KKyAgICBOU0Fy
cmF5PE5TU3RyaW5nICo+ICpleHBlY3RlZE91dHB1dCA9IEBbCisgICAgICAgIEAiRm91bmQgZGF0
YSB0cmFuc2ZlciBpdGVtIChraW5kOiAnZmlsZScsIHR5cGU6ICcnKSIsCisgICAgICAgIEAiRElS
OiAvc29tZWRpcmVjdG9yeSIsCisgICAgICAgIEAiRElSOiAvc29tZWRpcmVjdG9yeS9zdWJkaXJl
Y3RvcnkxIiwKKyAgICAgICAgQCJESVI6IC9zb21lZGlyZWN0b3J5L3N1YmRpcmVjdG9yeTIiLAor
ICAgICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkZJTEU6IC9zb21lZGlyZWN0b3J5
L2FyY2hpdmUuemlwICgnYXBwbGljYXRpb24vemlwJywgJXR1IGJ5dGVzKSIsIHRlc3RaSVBBcmNo
aXZlKCkubGVuZ3RoXSwKKyAgICAgICAgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGSUxF
OiAvc29tZWRpcmVjdG9yeS9pY29uLnBuZyAoJ2ltYWdlL3BuZycsICV0dSBieXRlcykiLCB0ZXN0
SWNvbkltYWdlRGF0YSgpLmxlbmd0aF0sCisgICAgICAgIEAiRklMRTogL3NvbWVkaXJlY3Rvcnkv
c3ViZGlyZWN0b3J5MS90ZXh0LWZpbGUtMS50eHQgKCd0ZXh0L3BsYWluJywgNDMgYnl0ZXMpIiwK
KyAgICAgICAgQCJGSUxFOiAvc29tZWRpcmVjdG9yeS9zdWJkaXJlY3RvcnkyL3RleHQtZmlsZS0y
LnR4dCAoJ3RleHQvcGxhaW4nLCA0NCBieXRlcykiCisgICAgXTsKKworICAgIGF1dG8gd2ViVmll
dyA9IHNldFVwVGVzdFdlYlZpZXdGb3JEYXRhVHJhbnNmZXJJdGVtcygpOworICAgIF9fYmxvY2sg
Ym9vbCBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgcGVyZm9ybUFmdGVyUmVjZWl2aW5nTWVz
c2FnZTpAImRyb3BwZWQiIGFjdGlvbjpeKCkgeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9
XTsKKworICAgIHJ1blRlc3RXaXRoVGVtcG9yYXJ5Rm9sZGVyKF4oTlNVUkwgKmZvbGRlclVSTCkg
eworICAgICAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBh
bGxvY10gaW5pdF0pOworICAgICAgICBbaXRlbVByb3ZpZGVyIHNldFN1Z2dlc3RlZE5hbWU6QCJz
b21lZGlyZWN0b3J5Il07CisgICAgICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJGaWxlUmVwcmVz
ZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlRm9sZGVyIGZpbGVP
cHRpb25zOjAgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0
eUFsbCBsb2FkSGFuZGxlcjpbY2FwdHVyZWRGb2xkZXJVUkwgPSByZXRhaW5QdHIoZm9sZGVyVVJM
KV0gKEZpbGVMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRpb25IYW5kbGVyKSAtPiBOU1Byb2dy
ZXNzICogeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY2FwdHVyZWRGb2xkZXJVUkwu
Z2V0KCksIE5PLCBuaWwpOworICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfV07CisK
KyAgICAgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxs
b2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgICAgIFtzaW11bGF0b3Ig
c2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAgICAg
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2Uo
MTUwLCA1MCldOworICAgIH0pOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25l
KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2V4cGVjdGVkT3V0cHV0IGNvbXBvbmVudHNKb2luZWRC
eVN0cmluZzpAIlxuIl0sIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJv
dXRwdXQudmFsdWUiXSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3Vy
Y2VEYXRhVHJhbnNmZXJJdGVtR2V0UGxhaW5UZXh0RmlsZUFzRW50cnkpCit7CisgICAgTlNBcnJh
eTxOU1N0cmluZyAqPiAqZXhwZWN0ZWRPdXRwdXQgPSBAWworICAgICAgICBAIkZvdW5kIGRhdGEg
dHJhbnNmZXIgaXRlbSAoa2luZDogJ2ZpbGUnLCB0eXBlOiAndGV4dC9wbGFpbicpIiwKKyAgICAg
ICAgQCJGSUxFOiAvZm9vLnR4dCAoJ3RleHQvcGxhaW4nLCAyOCBieXRlcykiCisgICAgXTsKKwor
ICAgIGF1dG8gd2ViVmlldyA9IHNldFVwVGVzdFdlYlZpZXdGb3JEYXRhVHJhbnNmZXJJdGVtcygp
OworICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgcGVyZm9ybUFm
dGVyUmVjZWl2aW5nTWVzc2FnZTpAImRyb3BwZWQiIGFjdGlvbjpeKCkgeworICAgICAgICBkb25l
ID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIHJ1blRlc3RXaXRoVGVtcG9yYXJ5VGV4dEZpbGUoXihO
U1VSTCAqZmlsZVVSTCkgeworICAgICAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tO
U0l0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgICAgICBbaXRlbVByb3ZpZGVyIHNldFN1
Z2dlc3RlZE5hbWU6QCJmb28iXTsKKyAgICAgICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckZpbGVS
ZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVVVEY4UGxh
aW5UZXh0IGZpbGVPcHRpb25zOjAgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0
aW9uVmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxlcjpbY2FwdHVyZWRGaWxlVVJMID0gcmV0YWluUHRy
KGZpbGVVUkwpXShGaWxlTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uSGFuZGxlcikgLT4g
TlNQcm9ncmVzcyAqIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNhcHR1cmVkRmls
ZVVSTC5nZXQoKSwgTk8sIG5pbCk7CisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICB9
XTsKKworICAgICAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRv
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICAgICAgW3NpbXVs
YXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOwor
ICAgICAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50
TWFrZSgxNTAsIDUwKV07CisgICAgfSk7CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOworICAgIEVYUEVDVF9XS19TVFJFUShbZXhwZWN0ZWRPdXRwdXQgY29tcG9uZW50c0pv
aW5lZEJ5U3RyaW5nOkAiXG4iXSwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAIm91dHB1dC52YWx1ZSJdKTsKK30KKworI2VuZGlmIC8vIF9fSVBIT05FX09TX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDExMDMwMAorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFs
U291cmNlT3ZlcnJpZGVEcm9wSW5zZXJ0VVJMKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwg
MzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVk
OkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSJdOwor
CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2Nd
IGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRPdmVy
cmlkZVBlcmZvcm1Ecm9wQmxvY2s6Xk5TQXJyYXk8VUlEcmFnSXRlbSAqPiAqKGlkIDxVSURyb3BT
ZXNzaW9uPiBzZXNzaW9uKQorICAgIHsKKyAgICAgICAgTlNNdXRhYmxlQXJyYXk8VUlEcmFnSXRl
bSAqPiAqYWxsb3dlZEl0ZW1zID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICAgICAgZm9y
IChVSURyYWdJdGVtICppdGVtIGluIHNlc3Npb24uaXRlbXMpIHsKKyAgICAgICAgICAgIGlmIChb
aXRlbS5pdGVtUHJvdmlkZXIucmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVycyBjb250YWluc09iamVj
dDooTlNTdHJpbmcgKilrVVRUeXBlVVJMXSkKKyAgICAgICAgICAgICAgICBbYWxsb3dlZEl0ZW1z
IGFkZE9iamVjdDppdGVtXTsKKyAgICAgICAgfQorICAgICAgICBFWFBFQ1RfRVEoMVVMLCBhbGxv
d2VkSXRlbXMuY291bnQpOworICAgICAgICByZXR1cm4gYWxsb3dlZEl0ZW1zOworICAgIH1dOwor
CisgICAgYXV0byBmaXJzdEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBh
bGxvY10gaW5pdF0pOworICAgIFtmaXJzdEl0ZW1Qcm92aWRlciByZWdpc3Rlck9iamVjdDpAIlRo
aXMgaXMgYSBzdHJpbmcuIiB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25P
cHRpb25zVmlzaWJpbGl0eUFsbF07CisgICAgYXV0byBzZWNvbmRJdGVtUHJvdmlkZXIgPSBhZG9w
dE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbc2Vjb25kSXRlbVByb3Zp
ZGVyIHJlZ2lzdGVyT2JqZWN0OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93ZWJraXQu
b3JnLyJdIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNp
YmlsaXR5QWxsXTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBm
aXJzdEl0ZW1Qcm92aWRlci5nZXQoKSwgc2Vjb25kSXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAg
IFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2Uo
MTAwLCAzMDApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93ZWJraXQub3JnLyIs
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRl
bnQiXSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgT3ZlcnJpZGVEcm9wKQoreworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2ltcGxlIl07CisKKyAgICBhdXRvIHNpbXVsYXRlZEl0
ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAg
IFtzaW11bGF0ZWRJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBl
SWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3aXRoRGF0YTpbQCI8Ym9keT48L2Jv
ZHk+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOworCisgICAgX19i
bG9jayBib29sIGZpbmlzaGVkTG9hZGluZ0RhdGEgPSBmYWxzZTsKKyAgICBhdXRvIHNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpA
WyBzaW11bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW3NpbXVsYXRvciBzZXRPdmVy
cmlkZURyYWdVcGRhdGVCbG9jazpeTlNVSW50ZWdlcihOU1VJbnRlZ2VyIG9wZXJhdGlvbiwgaWQg
c2Vzc2lvbikKKyAgICB7CisgICAgICAgIEVYUEVDVF9FUSgwVSwgb3BlcmF0aW9uKTsKKyAgICAg
ICAgcmV0dXJuIFVJRHJvcE9wZXJhdGlvbkNvcHk7CisgICAgfV07CisgICAgW3NpbXVsYXRvciBz
ZXREcm9wQ29tcGxldGlvbkJsb2NrOl4oQk9PTCBoYW5kbGVkLCBOU0FycmF5ICppdGVtUHJvdmlk
ZXJzKSB7CisgICAgICAgIEVYUEVDVF9GQUxTRShoYW5kbGVkKTsKKyAgICAgICAgW2l0ZW1Qcm92
aWRlcnMuZmlyc3RPYmplY3QgbG9hZERhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVy
OihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNEYXRhICpkYXRh
LCBOU0Vycm9yICplcnJvcikgeworICAgICAgICAgICAgTlNTdHJpbmcgKnRleHQgPSBbW1tOU1N0
cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGEgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmddIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUSgiPGJvZHk+PC9i
b2R5PiIsIHRleHQuVVRGOFN0cmluZyk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoISFlcnJv
cik7CisgICAgICAgICAgICBmaW5pc2hlZExvYWRpbmdEYXRhID0gdHJ1ZTsKKyAgICAgICAgfV07
CisgICAgfV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0
bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
ZmluaXNoZWRMb2FkaW5nRGF0YSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgSW5qZWN0
ZWRCdW5kbGVPdmVycmlkZVBlcmZvcm1Ud29TdGVwRHJvcCkKK3sKKyAgICBXS1dlYlZpZXdDb25m
aWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gX3Rlc3Rf
Y29uZmlndXJhdGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NOYW1lOkAiQnVuZGxlRWRpdGluZ0RlbGVn
YXRlUGx1Z0luIl07CisgICAgW2NvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3NldE9iamVjdDpA
WUVTIGZvckJ1bmRsZVBhcmFtZXRlcjpAIkJ1bmRsZU92ZXJyaWRlUGVyZm9ybVR3b1N0ZXBEcm9w
Il07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKSBjb25maWd1cmF0aW9uOmNv
bmZpZ3VyYXRpb25dKTsKKyAgICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1
cy1jb250ZW50ZWRpdGFibGUiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkiXTsKKworICAgIGF1dG8g
c2ltdWxhdGVkSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBp
bml0XSk7CisgICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRh
dGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0IG9w
dGlvbnM6bmlsIGxvYWRIYW5kbGVyOl5OU1Byb2dyZXNzICooVUlJdGVtUHJvdmlkZXJEYXRhTG9h
ZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uQmxvY2spCisgICAgeworICAgICAgICBjb21wbGV0
aW9uQmxvY2soW0AiSGVsbG8gd29ybGQiIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0Vu
Y29kaW5nXSwgbmlsKTsKKyAgICAgICAgcmV0dXJuIFtOU1Byb2dyZXNzIGRpc2NyZXRlUHJvZ3Jl
c3NXaXRoVG90YWxVbml0Q291bnQ6MTAwXTsKKyAgICB9XTsKKworICAgIGF1dG8gc2ltdWxhdG9y
ID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2Vi
Vmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBb
IHNpbXVsYXRlZEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBF
WFBFQ1RfRVEoMFVMLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRp
dG9yLnRleHRDb250ZW50Il0ubGVuZ3RoKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBJ
bmplY3RlZEJ1bmRsZUFsbG93UGVyZm9ybVR3b1N0ZXBEcm9wKQoreworICAgIFdLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBfdGVz
dF9jb25maWd1cmF0aW9uV2l0aFRlc3RQbHVnSW5DbGFzc05hbWU6QCJCdW5kbGVFZGl0aW5nRGVs
ZWdhdGVQbHVnSW4iXTsKKyAgICBbY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2V0T2JqZWN0
OkBOTyBmb3JCdW5kbGVQYXJhbWV0ZXI6QCJCdW5kbGVPdmVycmlkZVBlcmZvcm1Ud29TdGVwRHJv
cCJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCkgY29uZmlndXJhdGlvbjpj
b25maWd1cmF0aW9uXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5h
bWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSJd
OworCisgICAgYXV0byBzaW11bGF0ZWRJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJv
dmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbc2ltdWxhdGVkSXRlbVByb3ZpZGVyIHJlZ2lzdGVy
RGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZVVU
RjhQbGFpblRleHQgb3B0aW9uczpuaWwgbG9hZEhhbmRsZXI6Xk5TUHJvZ3Jlc3MgKihVSUl0ZW1Q
cm92aWRlckRhdGFMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRpb25CbG9jaykKKyAgICB7Cisg
ICAgICAgIGNvbXBsZXRpb25CbG9jayhbQCJIZWxsbyB3b3JsZCIgZGF0YVVzaW5nRW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmddLCBuaWwpOworICAgICAgICByZXR1cm4gW05TUHJvZ3Jlc3Mg
ZGlzY3JldGVQcm9ncmVzc1dpdGhUb3RhbFVuaXRDb3VudDoxMDBdOworICAgIH1dOworCisgICAg
YXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0
ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11
bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAz
MDApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiSGVsbG8gd29ybGQiLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il0uVVRGOFN0cmlu
Zyk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgSW5qZWN0ZWRCdW5kbGVJbWFnZUVsZW1l
bnREYXRhKQoreworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBb
V0tXZWJWaWV3Q29uZmlndXJhdGlvbiBfdGVzdF9jb25maWd1cmF0aW9uV2l0aFRlc3RQbHVnSW5D
bGFzc05hbWU6QCJCdW5kbGVFZGl0aW5nRGVsZWdhdGVQbHVnSW4iXTsKKyAgICBbY29uZmlndXJh
dGlvbiBfc2V0QXR0YWNobWVudEVsZW1lbnRFbmFibGVkOllFU107CisgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSk7CisgICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiaW1hZ2UtYW5kLWNvbnRlbnRl
ZGl0YWJsZSJdOworCisgICAgX19ibG9jayBSZXRhaW5QdHI8TlNTdHJpbmc+IGluamVjdGVkU3Ry
aW5nOworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFs
bG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3Igc2V0
Q29udmVydEl0ZW1Qcm92aWRlcnNCbG9jazpeTlNBcnJheSAqKFVJSXRlbVByb3ZpZGVyICppdGVt
UHJvdmlkZXIsIE5TQXJyYXkgKiwgTlNEaWN0aW9uYXJ5ICpkYXRhKQorICAgIHsKKyAgICAgICAg
aW5qZWN0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpk
YXRhW0luamVjdGVkQnVuZGxlUGFzdGVib2FyZERhdGFUeXBlXSBlbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZ10pOworICAgICAgICByZXR1cm4gQFsgaXRlbVByb3ZpZGVyIF07CisgICAgfV07
CisKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2lu
dE1ha2UoMTAwLCAyNTApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiaGVsbG8iLCBbaW5qZWN0
ZWRTdHJpbmcgVVRGOFN0cmluZ10pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEluamVj
dGVkQnVuZGxlQXR0YWNobWVudEVsZW1lbnREYXRhKQoreworICAgIFdLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBfdGVzdF9jb25m
aWd1cmF0aW9uV2l0aFRlc3RQbHVnSW5DbGFzc05hbWU6QCJCdW5kbGVFZGl0aW5nRGVsZWdhdGVQ
bHVnSW4iXTsKKyAgICBbY29uZmlndXJhdGlvbiBfc2V0QXR0YWNobWVudEVsZW1lbnRFbmFibGVk
OllFU107CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCkgY29uZmlndXJhdGlvbjpj
b25maWd1cmF0aW9uXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5h
bWVkOkAiYXR0YWNobWVudC1lbGVtZW50Il07CisKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxOU1N0
cmluZz4gaW5qZWN0ZWRTdHJpbmc7CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJh
Z2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Cisg
ICAgW3NpbXVsYXRvciBzZXRDb252ZXJ0SXRlbVByb3ZpZGVyc0Jsb2NrOl5OU0FycmF5ICooVUlJ
dGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciwgTlNBcnJheSAqLCBOU0RpY3Rpb25hcnkgKmRhdGEp
CisgICAgeworICAgICAgICBpbmplY3RlZFN0cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxv
Y10gaW5pdFdpdGhEYXRhOmRhdGFbSW5qZWN0ZWRCdW5kbGVQYXN0ZWJvYXJkRGF0YVR5cGVdIGVu
Y29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSk7CisgICAgICAgIHJldHVybiBAWyBpdGVtUHJv
dmlkZXIgXTsKKyAgICB9XTsKKworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1
MCwgNTApIHRvOkNHUG9pbnRNYWtlKDUwLCA0MDApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgi
aGVsbG8iLCBbaW5qZWN0ZWRTdHJpbmcgVVRGOFN0cmluZ10pOworICAgIEVYUEVDVF9UUlVFKFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5pc0Nv
bGxhcHNlZCJdLmJvb2xWYWx1ZSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgTGFyZ2VJ
bWFnZVRvVGFyZ2V0RGl2KQoreworICAgIGF1dG8gdGVzdFdlYlZpZXdDb25maWd1cmF0aW9uID0g
YWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBbW3Rl
c3RXZWJWaWV3Q29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3NldExhcmdlSW1hZ2VBc3luY0Rl
Y29kaW5nRW5hYmxlZDpOT107CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKSBj
b25maWd1cmF0aW9uOnRlc3RXZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImRpdi1hbmQtbGFyZ2UtaW1hZ2Ui
XTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFs
bG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3IgcnVu
RnJvbTpDR1BvaW50TWFrZSgyMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMjAwLCAxNTApXTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEoIlBBU1MiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAidGFyZ2V0LnRleHRDb250ZW50Il0uVVRGOFN0cmluZyk7CisgICAgY2hlY2tGaXJz
dFR5cGVJc1ByZXNlbnRBbmRTZWNvbmRUeXBlSXNNaXNzaW5nKHNpbXVsYXRvci5nZXQoKSwga1VU
VHlwZVBORywga1VUVHlwZUZpbGVVUkwpOworICAgIGNoZWNrRXN0aW1hdGVkU2l6ZShzaW11bGF0
b3IuZ2V0KCksIHsgMjAwMCwgMjAwMCB9KTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBM
aW5rV2l0aEVtcHR5SFJFRikKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImxpbmstYW5k
LWlucHV0Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRv
Y3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2EnKS5ocmVmID0gJyciXTsKKworICAgIGF1dG8gc2ltdWxh
dG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6
d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAs
IDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX0VRKERyYWdBbmRE
cm9wUGhhc2VDYW5jZWxsZWQsIFtzaW11bGF0b3IgcGhhc2VdKTsKKyAgICBFWFBFQ1RfV0tfU1RS
RVEoIiIsIFt3ZWJWaWV3IGVkaXRvclZhbHVlXS5VVEY4U3RyaW5nKTsKK30KKworVEVTVChEcmFn
QW5kRHJvcFRlc3RzLCBDYW5jZWxsZWRMaWZ0RG9lc05vdENhdXNlU3Vic2VxdWVudERyYWdzVG9G
YWlsKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZp
ZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAibGluay1hbmQtdGFyZ2V0LWRpdiJd
OworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxs
b2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRD
b252ZXJ0SXRlbVByb3ZpZGVyc0Jsb2NrOl5OU0FycmF5ICooVUlJdGVtUHJvdmlkZXIgKiwgTlNB
cnJheSAqLCBOU0RpY3Rpb25hcnkgKikKKyAgICB7CisgICAgICAgIHJldHVybiBAWyBdOworICAg
IH1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1Bv
aW50TWFrZSgxMDAsIDMwMCldOworICAgIEVYUEVDVF9FUShEcmFnQW5kRHJvcFBoYXNlQ2FuY2Vs
bGVkLCBbc2ltdWxhdG9yIHBoYXNlXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGFyZ2V0LnRleHRDb250ZW50Il0pOwor
ICAgIE5TU3RyaW5nICpvdXRwdXRUZXh0ID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAIm91dHB1dC50ZXh0Q29udGVudCJdOworICAgIGNoZWNrU3RyaW5nQXJyYXlzQXJl
RXF1YWwoQFtAImRyYWdzdGFydCIsIEAiZHJhZ2VuZCJdLCBbb3V0cHV0VGV4dCBjb21wb25lbnRz
U2VwYXJhdGVkQnlTdHJpbmc6QCIgIl0pOworCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAIm91dHB1dC5pbm5lckhUTUwgPSAnJyJdOworICAgIFtzaW11bGF0b3Ig
c2V0Q29udmVydEl0ZW1Qcm92aWRlcnNCbG9jazpeTlNBcnJheSAqKFVJSXRlbVByb3ZpZGVyICpp
dGVtUHJvdmlkZXIsIE5TQXJyYXkgKiwgTlNEaWN0aW9uYXJ5ICopCisgICAgeworICAgICAgICBy
ZXR1cm4gQFsgaXRlbVByb3ZpZGVyIF07CisgICAgfV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9t
OkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisgICAgRVhQ
RUNUX1dLX1NUUkVRKCJQQVNTIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAInRhcmdldC50ZXh0Q29udGVudCJdKTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAib3V0cHV0LnRleHRDb250ZW50Il07CisgICAgY2hlY2tTdHJpbmdBcnJh
eXNBcmVFcXVhbChAW0AiZHJhZ3N0YXJ0IiwgQCJkcmFnZW5kIl0sIFtvdXRwdXRUZXh0IGNvbXBv
bmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIiAiXSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3REcmFn
QW5kRHJvcE9udG9UYXJnZXRFbGVtZW50cyhUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3KQoreworICAg
IGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0
V2l0aFdlYlZpZXc6d2ViVmlld10pOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFr
ZSg1MCwgNTApIHRvOkNHUG9pbnRNYWtlKDUwLCAyNTApXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
InJnYigwLCAxMjgsIDApIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
ImdldENvbXB1dGVkU3R5bGUodGFyZ2V0MSkuYmFja2dyb3VuZENvbG9yIl0pOworICAgIEVYUEVD
VF9XS19TVFJFUSgiUEFTUyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJ0YXJnZXQxLnRleHRDb250ZW50Il0pOworCisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9p
bnRNYWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2UoMjUwLCA1MCldOworICAgIEVYUEVDVF9XS19T
VFJFUSgicmdiKDAsIDEyOCwgMCkiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAiZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQyKS5iYWNrZ3JvdW5kQ29sb3IiXSk7CisgICAg
RVhQRUNUX1dLX1NUUkVRKCJQQVNTIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAInRhcmdldDIudGV4dENvbnRlbnQiXSk7CisKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFrZSgyNTAsIDI1MCldOworICAgIEVYUEVD
VF9XS19TVFJFUSgicmdiKDAsIDEyOCwgMCkiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAiZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQzKS5iYWNrZ3JvdW5kQ29sb3IiXSk7
CisgICAgRVhQRUNUX1dLX1NUUkVRKCJQQVNTIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAInRhcmdldDMudGV4dENvbnRlbnQiXSk7Cit9CisKK1RFU1QoRHJhZ0FuZERy
b3BUZXN0cywgRHJhZ0V2ZW50Q2xpZW50Q29vcmRpbmF0ZXNCYXNpYykKK3sKKyAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
VGVzdFBhZ2VOYW1lZDpAImRyb3AtdGFyZ2V0cyJdOworCisgICAgdGVzdERyYWdBbmREcm9wT250
b1RhcmdldEVsZW1lbnRzKHdlYlZpZXcuZ2V0KCkpOworfQorCitURVNUKERyYWdBbmREcm9wVGVz
dHMsIERyYWdFdmVudENsaWVudENvb3JkaW5hdGVzV2l0aFNjcm9sbE9mZnNldCkKK3sKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlMb2FkVGVzdFBhZ2VOYW1lZDpAImRyb3AtdGFyZ2V0cyJdOworICAgIFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LnN0eWxlLm1hcmdpbiA9ICcx
MDAwcHggMCciXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
ZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSAxMDAwIl07CisgICAgW3dlYlZp
ZXcgd2FpdEZvck5leHRQcmVzZW50YXRpb25VcGRhdGVdOworCisgICAgdGVzdERyYWdBbmREcm9w
T250b1RhcmdldEVsZW1lbnRzKHdlYlZpZXcuZ2V0KCkpOworfQorCitURVNUKERyYWdBbmREcm9w
VGVzdHMsIERyYWdFdmVudFBhZ2VDb29yZGluYXRlc0Jhc2ljKQoreworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0
UGFnZU5hbWVkOkAiZHJvcC10YXJnZXRzIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAIndpbmRvdy51c2VQYWdlQ29vcmRpbmF0ZXMgPSB0cnVlIl07CisKKyAg
ICB0ZXN0RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMod2ViVmlldy5nZXQoKSk7Cit9CisK
K1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRHJhZ0V2ZW50UGFnZUNvb3JkaW5hdGVzV2l0aFNjcm9s
bE9mZnNldCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImRyb3AtdGFyZ2V0cyJdOwor
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5
LnN0eWxlLm1hcmdpbiA9ICcxMDAwcHggMCciXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSAx
MDAwIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIndpbmRv
dy51c2VQYWdlQ29vcmRpbmF0ZXMgPSB0cnVlIl07CisgICAgW3dlYlZpZXcgd2FpdEZvck5leHRQ
cmVzZW50YXRpb25VcGRhdGVdOworCisgICAgdGVzdERyYWdBbmREcm9wT250b1RhcmdldEVsZW1l
bnRzKHdlYlZpZXcuZ2V0KCkpOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIERvTm90Q3Jh
c2hXaGVuU2VsZWN0aW9uSXNDbGVhcmVkSW5EcmFnU3RhcnQpCit7CisgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQ
YWdlTmFtZWQ6QCJkcmFnc3RhcnQtY2xlYXItc2VsZWN0aW9uIl07CisKKyAgICBhdXRvIHNpbXVs
YXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3
OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAw
LCAxMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMTAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
IlBBU1MiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGFyYWdyYXBo
LnRleHRDb250ZW50Il0pOworfQorCisvLyBGSVhNRTogUmUtZW5hYmxlIHRoaXMgdGVzdCBvbmNl
IHdlIHJlc29sdmUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUy
MDQ+CisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA8PSAxMTA0MDEKK1RFU1Qo
RHJhZ0FuZERyb3BUZXN0cywgQ3VzdG9tQWN0aW9uU2hlZXRQb3BvdmVyKQoreworICAgIGF1dG8g
d2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNH
UmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxv
YWRUZXN0UGFnZU5hbWVkOkAibGluay1hbmQtdGFyZ2V0LWRpdiJdOworCisgICAgYXV0byBzaW11
bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmll
dzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRTaG91bGRFbnN1cmVVSUFwcGxp
Y2F0aW9uOllFU107CisKKyAgICBfX2Jsb2NrIEJPT0wgZGlkSW52b2tlQ3VzdG9tQWN0aW9uU2hl
ZXQgPSBOTzsKKyAgICBbc2ltdWxhdG9yIHNldFNob3dDdXN0b21BY3Rpb25TaGVldEJsb2NrOl5C
T09MKF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvICplbGVtZW50KQorICAgIHsKKyAgICAgICAgRVhQ
RUNUX0VRKF9XS0FjdGl2YXRlZEVsZW1lbnRUeXBlTGluaywgZWxlbWVudC50eXBlKTsKKyAgICAg
ICAgRVhQRUNUX1dLX1NUUkVRKCJIZWxsbyB3b3JsZCIsIGVsZW1lbnQudGl0bGUuVVRGOFN0cmlu
Zyk7CisgICAgICAgIGRpZEludm9rZUN1c3RvbUFjdGlvblNoZWV0ID0gWUVTOworICAgICAgICBy
ZXR1cm4gWUVTOworICAgIH1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgx
MDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworICAgIEVYUEVDVF9UUlVFKGRpZElu
dm9rZUN1c3RvbUFjdGlvblNoZWV0KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlBBU1MiLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGFyZ2V0LnRleHRDb250ZW50Il0u
VVRGOFN0cmluZyk7Cit9CisjZW5kaWYKKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBVbnJlc3Bv
bnNpdmVQYWdlRG9lc05vdEhhbmdVSSkKK3sKKyAgICBfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24gKnByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiA9IFtbW19XS1Byb2Nlc3NQb29sQ29uZmlndXJh
dGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgIHByb2Nlc3NQb29sQ29uZmlndXJh
dGlvbi5pZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzRm9yVGVzdGluZyA9IFlFUzsK
KworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRpb246W1tbV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdIHByb2Nlc3NQb29s
Q29uZmlndXJhdGlvbjpwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb25dKTsKKyAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzaW1wbGUiXTsKKyAgICBbd2ViVmlldyBl
dmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aGlsZSgxKTsiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisK
KyAgICAvLyBUaGUgdGVzdCBwYXNzZXMgaWYgd2UgY2FuIHByZXBhcmUgZm9yIGEgZHJhZyBzZXNz
aW9uIHdpdGhvdXQgdGltaW5nIG91dC4KKyAgICBhdXRvIGRyYWdTZXNzaW9uID0gYWRvcHROUyhb
W01vY2tEcmFnU2Vzc2lvbiBhbGxvY10gaW5pdF0pOworICAgIFsoaWQgPFVJRHJhZ0ludGVyYWN0
aW9uRGVsZWdhdGVfRm9yV2ViS2l0T25seT4pW3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uRGVsZWdh
dGVdIF9kcmFnSW50ZXJhY3Rpb246W3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uXSBwcmVwYXJlRm9y
U2Vzc2lvbjpkcmFnU2Vzc2lvbi5nZXQoKSBjb21wbGV0aW9uOl4oKSB7IH1dOworfQorCitURVNU
KERyYWdBbmREcm9wVGVzdHMsIFdlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmRMb2FkaW5nKQorewor
ICAgIHN0YXRpYyBOU1N0cmluZyAqZmFzdFN0cmluZyA9IEAiVGhpcyBkYXRhIGxvYWRzIHF1aWNr
bHkiOworICAgIHN0YXRpYyBOU1N0cmluZyAqc2xvd1N0cmluZyA9IEAiVGhpcyBkYXRhIGxvYWRz
IHNsb3dseSI7CisKKyAgICBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkID0g
W1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5zdGFuY2VdOworICAgIGF1dG8gZmFz
dEl0ZW0gPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbZmFz
dEl0ZW0gcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJp
bmcgKilrVVRUeXBlVVRGOFBsYWluVGV4dCBvcHRpb25zOm5pbCBsb2FkSGFuZGxlcjpeTlNQcm9n
cmVzcyAqKFVJSXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkJs
b2NrKQorICAgIHsKKyAgICAgICAgY29tcGxldGlvbkJsb2NrKFtmYXN0U3RyaW5nIGRhdGFVc2lu
Z0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSwgbmlsKTsKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICB9XTsKKworICAgIGF1dG8gc2xvd0l0ZW0gPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlk
ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbc2xvd0l0ZW0gcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRp
b25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlVVRGOFBsYWluVGV4dCBvcHRp
b25zOm5pbCBsb2FkSGFuZGxlcjpeTlNQcm9ncmVzcyAqKFVJSXRlbVByb3ZpZGVyRGF0YUxvYWRD
b21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkJsb2NrKQorICAgIHsKKyAgICAgICAgc2xlZXAoMl9z
KTsKKyAgICAgICAgY29tcGxldGlvbkJsb2NrKFtzbG93U3RyaW5nIGRhdGFVc2luZ0VuY29kaW5n
Ok5TVVRGOFN0cmluZ0VuY29kaW5nXSwgbmlsKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9
XTsKKworICAgIF9fYmxvY2sgYm9vbCBoYXNSdW5GaXJzdENvbXBsZXRpb25CbG9jayA9IGZhbHNl
OworICAgIHBhc3RlYm9hcmQuaXRlbVByb3ZpZGVycyA9IEBbIGZhc3RJdGVtLmdldCgpLCBzbG93
SXRlbS5nZXQoKSBdOworICAgIFtwYXN0ZWJvYXJkIGRvQWZ0ZXJMb2FkaW5nUHJvdmlkZWRDb250
ZW50SW50b0ZpbGVVUkxzOl4oTlNBcnJheTxOU1VSTCAqPiAqdXJscykgeworICAgICAgICBFWFBF
Q1RfRVEoMlVMLCB1cmxzLmNvdW50KTsKKyAgICAgICAgYXV0byBmaXJzdFN0cmluZyA9IGFkb3B0
TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDb250ZW50c09mVVJMOnVybHNbMF0gZW5jb2Rp
bmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXSk7CisgICAgICAgIGF1dG8gc2Vjb25k
U3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENvbnRlbnRzT2ZVUkw6
dXJsc1sxXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxdKTsKKyAgICAg
ICAgRVhQRUNUX1dLX1NUUkVRKGZhc3RTdHJpbmcsIFtmaXJzdFN0cmluZyBVVEY4U3RyaW5nXSk7
CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShzbG93U3RyaW5nLCBbc2Vjb25kU3RyaW5nIFVURjhT
dHJpbmddKTsKKyAgICAgICAgaGFzUnVuRmlyc3RDb21wbGV0aW9uQmxvY2sgPSB0cnVlOworICAg
IH0gc3luY2hyb25vdXNUaW1lb3V0OjYwMF07CisgICAgRVhQRUNUX1RSVUUoaGFzUnVuRmlyc3RD
b21wbGV0aW9uQmxvY2spOworCisgICAgX19ibG9jayBib29sIGhhc1J1blNlY29uZENvbXBsZXRp
b25CbG9jayA9IGZhbHNlOworICAgIFtwYXN0ZWJvYXJkIGRvQWZ0ZXJMb2FkaW5nUHJvdmlkZWRD
b250ZW50SW50b0ZpbGVVUkxzOl4oTlNBcnJheTxOU1VSTCAqPiAqdXJscykgeworICAgICAgICBF
WFBFQ1RfRVEoMlVMLCB1cmxzLmNvdW50KTsKKyAgICAgICAgYXV0byBmaXJzdFN0cmluZyA9IGFk
b3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDb250ZW50c09mVVJMOnVybHNbMF0gZW5j
b2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXSk7CisgICAgICAgIGF1dG8gc2Vj
b25kU3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENvbnRlbnRzT2ZV
Ukw6dXJsc1sxXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxdKTsKKyAg
ICAgICAgRVhQRUNUX1dLX1NUUkVRKGZhc3RTdHJpbmcsIFtmaXJzdFN0cmluZyBVVEY4U3RyaW5n
XSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShzbG93U3RyaW5nLCBbc2Vjb25kU3RyaW5nIFVU
RjhTdHJpbmddKTsKKyAgICAgICAgaGFzUnVuU2Vjb25kQ29tcGxldGlvbkJsb2NrID0gdHJ1ZTsK
KyAgICB9IHN5bmNocm9ub3VzVGltZW91dDowXTsKKyAgICBFWFBFQ1RfRkFMU0UoaGFzUnVuU2Vj
b25kQ29tcGxldGlvbkJsb2NrKTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmhhc1J1
blNlY29uZENvbXBsZXRpb25CbG9jayk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRG9O
b3RDcmFzaFdoZW5TZWxlY3Rpb25Nb3Zlc09mZnNjcmVlbkFmdGVyRHJhZ1N0YXJ0KQoreworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHJhZ3N0YXJ0LWNoYW5nZS1zZWxlY3Rpb24tb2Zmc2Ny
ZWVuIl07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRv
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9y
IHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCAxMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMTAwKV07
CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIkZBUiBPRkZTQ1JFRU4iLCBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkuZ2V0UmFuZ2VBdCgwKS50b1N0
cmluZygpIl0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEFkZGl0aW9uYWxJdGVtc0Nh
bkJlUHJldmVudGVkT25EcmFnU3RhcnQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAs
IDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJz
ZWxlY3RlZC10ZXh0LWltYWdlLWxpbmstYW5kLWVkaXRhYmxlIl07CisgICAgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImxpbmsuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0
YXJ0JywgZSA9PiBlLnByZXZlbnREZWZhdWx0KCkpIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImltYWdlLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcs
IGUgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKSJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9w
dE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3Lmdl
dCgpXSk7CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQ
b2ludE1ha2UoNTAsIDQwMCkgYWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zOkB7CisgICAg
ICAgIEAwLjMzOiBbTlNWYWx1ZSB2YWx1ZVdpdGhDR1BvaW50OkNHUG9pbnRNYWtlKDUwLCAxNTAp
XSwKKyAgICAgICAgQDAuNjY6IFtOU1ZhbHVlIHZhbHVlV2l0aENHUG9pbnQ6Q0dQb2ludE1ha2Uo
NTAsIDI1MCldCisgICAgfV07CisgICAgRVhQRUNUX1dLX1NUUkVRKCJBQkNEIiwgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdKTsKK30K
KworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBBZGRpdGlvbmFsTGlua0FuZEltYWdlSW50b0NvbnRl
bnRFZGl0YWJsZSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAg
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNlbGVjdGVkLXRleHQt
aW1hZ2UtbGluay1hbmQtZWRpdGFibGUiXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHRO
UyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQo
KV0pOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRvOkNHUG9p
bnRNYWtlKDUwLCA0MDApIGFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uczpAeworICAgICAg
ICBAMC4zMzogW05TVmFsdWUgdmFsdWVXaXRoQ0dQb2ludDpDR1BvaW50TWFrZSg1MCwgMTUwKV0s
CisgICAgICAgIEAwLjY2OiBbTlNWYWx1ZSB2YWx1ZVdpdGhDR1BvaW50OkNHUG9pbnRNYWtlKDUw
LCAyNTApXQorICAgIH1dOworICAgIEVYUEVDVF9XS19TVFJFUSgiQUJDREEgbGluayIsIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXSk7
CisgICAgRVhQRUNUX1RSVUUoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
IiEhZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIl0pOworICAgIEVYUEVDVF9XS19TVFJFUSgi
aHR0cHM6Ly93d3cuYXBwbGUuY29tLyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJlZGl0b3IucXVlcnlTZWxlY3RvcignYScpLmhyZWYiXSk7Cit9CisKK1RFU1QoRHJh
Z0FuZERyb3BUZXN0cywgRHJhZ0xpZnRQcmV2aWV3RGF0YVRyYW5zZmVyU2V0RHJhZ0ltYWdlKQor
eworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3lu
Y2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiRGF0YVRyYW5zZmVyLXNldERyYWdJbWFnZSJd
OworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgLy8gVXNlIERhdGFUcmFu
c2Zlci5zZXREcmFnSW1hZ2UgdG8gc3BlY2lmeSBhbiBleGlzdGluZyBpbWFnZSBlbGVtZW50IGlu
IHRoZSBET00uCisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRv
OkNHUG9pbnRNYWtlKDI1MCwgNTApXTsKKyAgICBjaGVja0NHUmVjdElzRXF1YWxUb0NHUmVjdFdp
dGhMb2dnaW5nKHt7MTAwLCA1MH0sIHsyMTUsIDE3NH19LCBbc2ltdWxhdG9yIGxpZnRQcmV2aWV3
c11bMF0udmlldy5mcmFtZSk7CisKKyAgICAvLyBVc2UgRGF0YVRyYW5zZmVyLnNldERyYWdJbWFn
ZSB0byBzcGVjaWZ5IGFuIGV4aXN0aW5nIGltYWdlIGVsZW1lbnQgaW4gdGhlIERPTSwgd2l0aCB4
IGFuZCB5IG9mZnNldHMuCisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwLCAx
NTApIHRvOkNHUG9pbnRNYWtlKDI1MCwgMTUwKV07CisgICAgY2hlY2tDR1JlY3RJc0VxdWFsVG9D
R1JlY3RXaXRoTG9nZ2luZyh7ey05MCwgNTB9LCB7MjE1LCAxNzR9fSwgW3NpbXVsYXRvciBsaWZ0
UHJldmlld3NdWzBdLnZpZXcuZnJhbWUpOworCisgICAgLy8gVXNlIERhdGFUcmFuc2Zlci5zZXRE
cmFnSW1hZ2UgdG8gc3BlY2lmeSBhIG5ld2x5IGNyZWF0ZWQgSW1hZ2UsIGRpc2Nvbm5lY3RlZCBm
cm9tIHRoZSBET00uCisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgMjUw
KSB0bzpDR1BvaW50TWFrZSgyNTAsIDI1MCldOworICAgIGNoZWNrQ0dSZWN0SXNFcXVhbFRvQ0dS
ZWN0V2l0aExvZ2dpbmcoe3sxMDAsIDI1MH0sIHsyMTUsIDE3NH19LCBbc2ltdWxhdG9yIGxpZnRQ
cmV2aWV3c11bMF0udmlldy5mcmFtZSk7CisKKyAgICAvLyBEb24ndCB1c2UgRGF0YVRyYW5zZmVy
LnNldERyYWdJbWFnZSBhbmQgZmFsbCBiYWNrIHRvIHNuYXBzaG90dGluZyB0aGUgZHJhZ2dlZCBl
bGVtZW50LgorICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgMzUwKSB0bzpD
R1BvaW50TWFrZSgyNTAsIDM1MCldOworICAgIGNoZWNrQ0dSZWN0SXNFcXVhbFRvQ0dSZWN0V2l0
aExvZ2dpbmcoe3swLCAzMDB9LCB7MzAwLCAxMDB9fSwgW3NpbXVsYXRvciBsaWZ0UHJldmlld3Nd
WzBdLnZpZXcuZnJhbWUpOworCisgICAgLy8gUGVyZm9ybSBhIG5vcm1hbCBkcmFnIG9uIGFuIGlt
YWdlLgorICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNDUwKSB0bzpDR1Bv
aW50TWFrZSgyNTAsIDQ1MCldOworICAgIGNoZWNrQ0dSZWN0SXNFcXVhbFRvQ0dSZWN0V2l0aExv
Z2dpbmcoe3swLCA0MDB9LCB7MjE1LCAxNzR9fSwgW3NpbXVsYXRvciBsaWZ0UHJldmlld3NdWzBd
LnZpZXcuZnJhbWUpOworfQorCisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTEwMzAwCisKK3N0YXRpYyBOU0RhdGEgKnRlc3RJY29uSW1hZ2VEYXRhKCkKK3sKKyAgICBy
ZXR1cm4gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZGaWxlOltbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gcGF0aEZvclJlc291cmNlOkAiaWNvbiIgb2ZUeXBlOkAicG5nIiBpbkRpcmVjdG9yeTpAIlRl
c3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIERh
dGFUcmFuc2ZlckdldERhdGFXaGVuRHJvcHBpbmdJbWFnZUFuZE1hcmt1cCkKK3sKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFdLUHJlZmVyZW5jZXNTZXRDdXN0b21Q
YXN0ZWJvYXJkRGF0YUVuYWJsZWQoKFdLUHJlZmVyZW5jZXNSZWYpW3dlYlZpZXcgY29uZmlndXJh
dGlvbl0ucHJlZmVyZW5jZXMsIHRydWUpOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
VGVzdFBhZ2VOYW1lZDpAIkRhdGFUcmFuc2ZlciJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBh
ZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3
LmdldCgpXSk7CisgICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlk
ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2Vu
dGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZVBORyB3aXRoRGF0YTp0
ZXN0SWNvbkltYWdlRGF0YSgpXTsKKyAgICBOU1N0cmluZyAqbWFya3VwU3RyaW5nID0gQCI8c2Ny
aXB0PmJhcigpPC9zY3JpcHQ+PHN0cm9uZyBvbm1vdXNlZG93bj1qYXZhc2NyaXB0OnZvaWQoMCk+
SEVMTE8gV09STEQ8L3N0cm9uZz4iOworICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVw
cmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3aXRo
RGF0YTpbbWFya3VwU3RyaW5nIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5n
XV07CisgICAgW2l0ZW1Qcm92aWRlciBzZXRTdWdnZXN0ZWROYW1lOkAiaWNvbiJdOworICAgIFtz
aW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBd
XTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludFplcm8gdG86Q0dQb2ludE1ha2UoNTAs
IDEwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCJGaWxlcywgdGV4dC9odG1sIiwgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInR5cGVzLnRleHRDb250ZW50Il0pOwor
ICAgIEVYUEVDVF9XS19TVFJFUSgiKFNUUklORywgdGV4dC9odG1sKSwgKEZJTEUsIGltYWdlL3Bu
ZykiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaXRlbXMudGV4dENv
bnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCIoJ2ljb24ucG5nJywgaW1hZ2UvcG5nKSIs
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJmaWxlcy50ZXh0Q29udGVu
dCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJ1cmxEYXRhLnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9XS19TVFJF
USgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRleHREYXRhLnRl
eHRDb250ZW50Il0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiSEVMTE8gV09STEQiLCBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaHRtbERhdGEudGV4dENvbnRlbnQiXSk7
CisgICAgRVhQRUNUX0ZBTFNFKFtbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAicmF3SFRNTERhdGEudGV4dENvbnRlbnQiXSBjb250YWluc1N0cmluZzpAInNjcmlwdCJdKTsK
K30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEYXRhVHJhbnNmZXJHZXREYXRhV2hlbkRyb3Bw
aW5nUGxhaW5UZXh0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Cisg
ICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJh
bnNmZXItdHlwZXMiXTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1Np
bXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzZWxlY3QocGxhaW4pIl07Cisg
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA3NSkgdG86Q0dQb2ludE1ha2Uo
NTAsIDM3NSldOworICAgIGNoZWNrSlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwgQHsKKyAgICAgICAgQCJkcmFnb3Zl
ciI6IEB7IEAidGV4dC9wbGFpbiIgOiBAIiIgfSwKKyAgICAgICAgQCJkcm9wIjogQHsgQCJ0ZXh0
L3BsYWluIiA6IEAiUGxhaW4gdGV4dCIgfQorICAgIH0pOworfQorCitURVNUKERyYWdBbmREcm9w
VGVzdHMsIERhdGFUcmFuc2ZlckdldERhdGFXaGVuRHJvcHBpbmdDdXN0b21EYXRhKQoreworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKKyAgICBh
dXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdp
dGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJzZWxlY3QocmljaCkiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0b21EYXRhID0gdHJ1ZSJdOworICAgIFtzaW11
bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgMjI1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1
KV07CisgICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAeworICAgICAgICBAImRyYWdvdmVyIiA6IEB7
CisgICAgICAgICAgICBAInRleHQvcGxhaW4iIDogQCIiLAorICAgICAgICAgICAgQCJmb28vcGxh
aW4iIDogQCIiLAorICAgICAgICAgICAgQCJ0ZXh0L2h0bWwiIDogQCIiLAorICAgICAgICAgICAg
QCJiYXIvaHRtbCIgOiBAIiIsCisgICAgICAgICAgICBAInRleHQvdXJpLWxpc3QiIDogQCIiLAor
ICAgICAgICAgICAgQCJiYXovdXJpLWxpc3QiIDogQCIiCisgICAgICAgIH0sCisgICAgICAgIEAi
ZHJvcCIgOiBAeworICAgICAgICAgICAgQCJ0ZXh0L3BsYWluIiA6IEAiYmVuIGJpdGRpZGRsZSIs
CisgICAgICAgICAgICBAImZvby9wbGFpbiIgOiBAImV2YSBsdSBhdG9yIiwKKyAgICAgICAgICAg
IEAidGV4dC9odG1sIiA6IEAiPGI+Ym9sZCB0ZXh0PC9iPiIsCisgICAgICAgICAgICBAImJhci9o
dG1sIiA6IEAiPGk+aXRhbGljIHRleHQ8L2k+IiwKKyAgICAgICAgICAgIEAidGV4dC91cmktbGlz
dCIgOiBAImh0dHBzOi8vd3d3LmFwcGxlLmNvbSIsCisgICAgICAgICAgICBAImJhei91cmktbGlz
dCIgOiBAImh0dHBzOi8vd3d3LndlYmtpdC5vcmciCisgICAgICAgIH0KKyAgICB9KTsKK30KKwor
VEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEYXRhVHJhbnNmZXJHZXREYXRhV2hlbkRyb3BwaW5nVVJM
KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcg
c3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMi
XTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJyaWNoLmlubmVySFRNTCA9ICc8YSBocmVmPVwiaHR0
cHM6Ly93d3cuYXBwbGUuY29tL1wiPlRoaXMgaXMgYSBsaW5rLjwvYT4nIl07CisgICAgW3NpbXVs
YXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCAyMjUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUp
XTsKKyAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7CisgICAgICAgIEAiZHJhZ292ZXIiOiBAewor
ICAgICAgICAgICAgQCJ0ZXh0L3VyaS1saXN0IiA6IEAiIiwKKyAgICAgICAgICAgIEAidGV4dC9w
bGFpbiIgOiBAIiIKKyAgICAgICAgfSwKKyAgICAgICAgQCJkcm9wIjogQHsKKyAgICAgICAgICAg
IEAidGV4dC91cmktbGlzdCIgOiBAImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8iLAorICAgICAgICAg
ICAgQCJ0ZXh0L3BsYWluIiA6IEAiaHR0cHM6Ly93d3cuYXBwbGUuY29tLyIKKyAgICAgICAgfQor
ICAgIH0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIERhdGFUcmFuc2ZlckdldERhdGFX
aGVuRHJvcHBpbmdJbWFnZVdpdGhGaWxlVVJMKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwg
MzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVk
OkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0
TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKKworICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVy
IGFsbG9jXSBpbml0XSk7CisgICAgTlNVUkwgKmljb25VUkwgPSBbW05TQnVuZGxlIG1haW5CdW5k
bGVdIFVSTEZvclJlc291cmNlOkAiaWNvbiIgd2l0aEV4dGVuc2lvbjpAInBuZyIgc3ViZGlyZWN0
b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBbaXRlbVByb3ZpZGVyIHJlZ2lz
dGVyRmlsZVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlw
ZVBORyBmaWxlT3B0aW9uczowIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlv
blZpc2liaWxpdHlBbGwgbG9hZEhhbmRsZXI6W3Byb3RlY3RlZEljb25VUkwgPSByZXRhaW5QdHIo
aWNvblVSTCldIChGaWxlTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uSGFuZGxlcikgLT4g
TlNQcm9ncmVzcyAqIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocHJvdGVjdGVkSWNvblVS
TC5nZXQoKSwgTk8sIG5pbCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfV07CisgICAgW2l0
ZW1Qcm92aWRlciByZWdpc3Rlck9iamVjdDppY29uVVJMIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlk
ZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKKyAgICBbc2ltdWxhdG9yIHNl
dEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisKKyAgICBb
c2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCAzNzUpIHRvOkNHUG9pbnRNYWtlKDUw
LCAzNzUpXTsKKworICAgIC8vIEZpbGUgVVJMcyBzaG91bGQgbmV2ZXIgYmUgZXhwb3NlZCBkaXJl
Y3RseSB0byB3ZWIgY29udGVudCwgc28gRGF0YVRyYW5zZmVyLmdldERhdGEgc2hvdWxkIHJldHVy
biBhbiBlbXB0eSBzdHJpbmcgaGVyZS4KKyAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7CisgICAg
ICAgIEAiZHJhZ292ZXIiOiBAeyBAIkZpbGVzIjogQCIiLCBAInRleHQvdXJpLWxpc3QiOiBAIiIg
fSwKKyAgICAgICAgQCJkcm9wIjogQHsgQCJGaWxlcyI6IEAiIiwgQCJ0ZXh0L3VyaS1saXN0Ijog
QCIiIH0KKyAgICB9KTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEYXRhVHJhbnNmZXJH
ZXREYXRhV2hlbkRyb3BwaW5nSW1hZ2VXaXRoSFRUUFVSTCkKK3sKKyAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtl
KDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBh
Z2VOYW1lZDpAImR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07CisgICAgYXV0byBzaW11bGF0b3Ig
PSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3LmdldCgpXSk7CisKKyAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVw
cmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSlBFRyB2aXNp
YmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsIGxvYWRIYW5k
bGVyOl5OU1Byb2dyZXNzICooRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkhhbmRs
ZXIpCisgICAgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihVSUltYWdlSlBFR1JlcHJlc2Vu
dGF0aW9uKHRlc3RJY29uSW1hZ2UoKSwgMC41KSwgbmlsKTsKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICB9XTsKKyAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiaHR0cDovL3dlYmtpdC5vcmciXSB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVw
cmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07CisgICAgW3NpbXVsYXRvciBzZXRFeHRl
cm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOworCisgICAgW3NpbXVs
YXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgMzc1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1
KV07CisgICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAeworICAgICAgICBAImRyYWdvdmVyIjogQHsg
QCJGaWxlcyI6IEAiIiwgQCJ0ZXh0L3VyaS1saXN0IjogQCIiIH0sCisgICAgICAgIEAiZHJvcCI6
IEB7IEAiRmlsZXMiOiBAIiIsIEAidGV4dC91cmktbGlzdCI6IEAiaHR0cDovL3dlYmtpdC5vcmcv
IiB9CisgICAgfSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRGF0YVRyYW5zZmVyR2V0
RGF0YVdoZW5Ecm9wcGluZ1Jlc3BlY3RzUHJlc2VudGF0aW9uU3R5bGUpCit7CisgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9h
ZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOworICAgIGF1dG8gc2lt
dWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZp
ZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgcnVuVGVzdFdpdGhUZW1wb3JhcnlUZXh0RmlsZShe
KE5TVVJMICpmaWxlVVJMKSB7CisgICAgICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhb
W1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtpdGVtUHJvdmlkZXIgcmVn
aXN0ZXJGaWxlUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRU
eXBlVVRGOFBsYWluVGV4dCBmaWxlT3B0aW9uczowIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJS
ZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGwgbG9hZEhhbmRsZXI6W3Byb3RlY3RlZEZpbGVVUkwg
PSByZXRhaW5QdHIoZmlsZVVSTCldIChGaWxlTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9u
SGFuZGxlcikgLT4gTlNQcm9ncmVzcyAqIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHByb3RlY3RlZEZpbGVVUkwuZ2V0KCksIE5PLCBuaWwpOworICAgICAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICAgICAgfV07CisgICAgICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlk
ZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKworICAgICAgICBbaXRlbVByb3ZpZGVyIHNl
dFByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlOlVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVB
dHRhY2htZW50XTsKKyAgICAgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwg
Mzc1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07CisgICAgICAgIGNoZWNrSlNPTldpdGhMb2dn
aW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUi
XSwgQHsKKyAgICAgICAgICAgIEAiZHJhZ292ZXIiOiBAeyBAIkZpbGVzIiA6IEAiIiB9LAorICAg
ICAgICAgICAgQCJkcm9wIjogQHsgQCJGaWxlcyIgOiBAIiIgfQorICAgICAgICB9KTsKKworICAg
ICAgICBbaXRlbVByb3ZpZGVyIHNldFByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlOlVJUHJlZmVy
cmVkUHJlc2VudGF0aW9uU3R5bGVJbmxpbmVdOworICAgICAgICBbc2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoMzAwLCAzNzUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKKyAgICAgICAg
Y2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAIm91dHB1dC52YWx1ZSJdLCBAeworICAgICAgICAgICAgQCJkcmFnb3ZlciI6IEB7IEAidGV4
dC9wbGFpbiIgOiBAIiIgfSwKKyAgICAgICAgICAgIEAiZHJvcCI6IEB7IEAidGV4dC9wbGFpbiIg
OiBAIlRoaXMgaXMgYSB0aW55IGJsb2Igb2YgdGV4dC4iIH0KKyAgICAgICAgfSk7CisgICAgfSk7
Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRGF0YVRyYW5zZmVyU2V0RGF0YUNhbm5vdFdy
aXRlUGxhdGZvcm1UeXBlcykKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1bXAtZGF0
YXRyYW5zZmVyLXR5cGVzIl07CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dp
bmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisKKyAg
ICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic2VsZWN0KHJpY2gpIl07
CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImN1c3RvbURhdGEg
PSB7ICd0ZXh0L3BsYWluJyA6ICdmb28nLCAnY29tLmFkb2JlLnBkZicgOiAndHJ5IGFuZCBkZWNv
ZGUgbWUhJyB9Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
IndyaXRlQ3VzdG9tRGF0YSA9IHRydWUiXTsKKworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1Bv
aW50TWFrZSg1MCwgMjI1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07CisgICAgY2hlY2tGaXJz
dFR5cGVJc1ByZXNlbnRBbmRTZWNvbmRUeXBlSXNNaXNzaW5nKHNpbXVsYXRvci5nZXQoKSwga1VU
VHlwZVVURjhQbGFpblRleHQsIGtVVFR5cGVQREYpOworICAgIGNoZWNrSlNPTldpdGhMb2dnaW5n
KFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwg
QHsKKyAgICAgICAgQCJkcmFnb3ZlciI6IEB7CisgICAgICAgICAgICBAInRleHQvcGxhaW4iOiBA
IiIsCisgICAgICAgICAgICBAImNvbS5hZG9iZS5wZGYiOiBAIiIKKyAgICAgICAgfSwKKyAgICAg
ICAgQCJkcm9wIjogQHsKKyAgICAgICAgICAgIEAidGV4dC9wbGFpbiI6IEAiZm9vIiwKKyAgICAg
ICAgICAgIEAiY29tLmFkb2JlLnBkZiI6IEAidHJ5IGFuZCBkZWNvZGUgbWUhIgorICAgICAgICB9
CisgICAgfSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRGF0YVRyYW5zZmVyR2V0RGF0
YVJlYWRQbGFpbkFuZFJpY2hUZXh0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1
MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiRGF0
YVRyYW5zZmVyIl07CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11
bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisKKyAgICBhdXRv
IGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwor
ICAgIE5TRGljdGlvbmFyeSAqdGV4dEF0dHJpYnV0ZXMgPSBAeyBOU0ZvbnRBdHRyaWJ1dGVOYW1l
OiBbVUlGb250IGJvbGRTeXN0ZW1Gb250T2ZTaXplOjIwXSB9OworICAgIE5TQXR0cmlidXRlZFN0
cmluZyAqcmljaFRleHQgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJp
bmc6QCJXZWJLaXQiIGF0dHJpYnV0ZXM6dGV4dEF0dHJpYnV0ZXNdOworICAgIFtpdGVtUHJvdmlk
ZXIgcmVnaXN0ZXJPYmplY3Q6cmljaFRleHQgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJl
c2VudGF0aW9uVmlzaWJpbGl0eUFsbF07CisgICAgW2l0ZW1Qcm92aWRlciByZWdpc3Rlck9iamVj
dDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd3d3LndlYmtpdC5vcmcvIl0gdmlzaWJp
bGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbF07CisgICAgW2l0
ZW1Qcm92aWRlciByZWdpc3Rlck9iamVjdDpAIldlYktpdCIgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92
aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbF07CisKKyAgICBbc2ltdWxhdG9yIHNldEV4
dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW3NpbXVs
YXRvciBydW5Gcm9tOkNHUG9pbnRaZXJvIHRvOkNHUG9pbnRNYWtlKDUwLCAxMDApXTsKKworICAg
IEVYUEVDVF9XS19TVFJFUSgidGV4dC9odG1sLCB0ZXh0L3BsYWluLCB0ZXh0L3VyaS1saXN0Iiwg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInR5cGVzLnRleHRDb250ZW50
Il0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiV2ViS2l0IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAInRleHREYXRhLnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9X
S19TVFJFUSgiaHR0cHM6Ly93d3cud2Via2l0Lm9yZy8iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAidXJsRGF0YS50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tf
U1RSRVEoIldlYktpdCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJo
dG1sRGF0YS50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIihTVFJJTkcsIHRl
eHQvaHRtbCksIChTVFJJTkcsIHRleHQvcGxhaW4pLCAoU1RSSU5HLCB0ZXh0L3VyaS1saXN0KSIs
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJpdGVtcy50ZXh0Q29udGVu
dCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJmaWxlcy50ZXh0Q29udGVudCJdKTsKK30KKworVEVTVChEcmFnQW5kRHJv
cFRlc3RzLCBEYXRhVHJhbnNmZXJTdXBwcmVzc0dldERhdGFEdWVUb1ByZXNlbmNlT2ZUZXh0Rmls
ZSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3
IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAIkRhdGFUcmFuc2ZlciJdOworICAgIGF1
dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0
aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9w
dE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbaXRlbVByb3ZpZGVyIHJl
Z2lzdGVyT2JqZWN0OkAiSGVsbG8gd29ybGQiIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXBy
ZXNlbnRhdGlvblZpc2liaWxpdHlBbGxdOworICAgIFtpdGVtUHJvdmlkZXIgc2V0U3VnZ2VzdGVk
TmFtZTpAImhlbGxvLnR4dCJdOworCisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92
aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpD
R1BvaW50WmVybyB0bzpDR1BvaW50TWFrZSg1MCwgMTAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RS
RVEoIkZpbGVzIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInR5cGVz
LnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRleHREYXRhLnRleHRDb250ZW50Il0pOworICAgIEVY
UEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
InVybERhdGEudGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaHRtbERhdGEudGV4dENvbnRlbnQiXSk7
CisgICAgRVhQRUNUX1dLX1NUUkVRKCIoRklMRSwgdGV4dC9wbGFpbikiLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaXRlbXMudGV4dENvbnRlbnQiXSk7CisgICAgRVhQ
RUNUX1dLX1NUUkVRKCIoJ2hlbGxvLnR4dCcsIHRleHQvcGxhaW4pIiwgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImZpbGVzLnRleHRDb250ZW50Il0pOworfQorCitURVNU
KERyYWdBbmREcm9wVGVzdHMsIERhdGFUcmFuc2ZlckdldERhdGFDYW5ub3RSZWFkUHJpdmF0ZUFy
Yml0cmFyeVR5cGVzKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Cisg
ICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJh
bnNmZXItdHlwZXMiXTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1Np
bXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIGF1
dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7
CisgICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVu
dGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVNUDMgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJl
cHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxlcjpeTlNQcm9ncmVzcyAqKERhdGFM
b2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRpb25IYW5kbGVyKQorICAgIHsKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoW0AidGhpcyBpcyBhIHRlc3QiIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRG
OFN0cmluZ0VuY29kaW5nXSwgbmlsKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9XTsKKyAg
ICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZp
ZXI6QCJvcmcuV2ViS2l0LlRlc3RXZWJLaXRBUEkuY3VzdG9tLXBhc3RlYm9hcmQtdHlwZSIgdmlz
aWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbCBsb2FkSGFu
ZGxlcjpeTlNQcm9ncmVzcyAqKERhdGFMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRpb25IYW5k
bGVyKQorICAgIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoW0AidGhpcyBpcyBhbm90aGVy
IHRlc3QiIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSwgbmlsKTsKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICB9XTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRl
bVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW2l0ZW1Qcm92aWRlciBz
ZXRQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZTpVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxl
SW5saW5lXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCAzNzUpIHRv
OkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKKyAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7CisgICAg
ICAgIEAiZHJhZ292ZXIiOiBAeyB9LAorICAgICAgICBAImRyb3AiOiBAeyB9CisgICAgfSk7Cit9
CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRGF0YVRyYW5zZmVyU2V0RGF0YVZhbGlkVVJMKQor
eworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3lu
Y2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsK
KyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10g
aW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzZWxlY3QocmljaCkiXTsKKyAgICBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY3VzdG9tRGF0YSA9IHsgJ3VybCcgOiAnaHR0cHM6
Ly93ZWJraXQub3JnL2IvMTIzJyB9Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAIndyaXRlQ3VzdG9tRGF0YSA9IHRydWUiXTsKKworICAgIF9fYmxvY2sgYm9v
bCBkb25lID0gZmFsc2U7CisgICAgW3NpbXVsYXRvci5nZXQoKSBzZXRPdmVycmlkZVBlcmZvcm1E
cm9wQmxvY2s6Xk5TQXJyYXk8VUlEcmFnSXRlbSAqPiAqKGlkIDxVSURyb3BTZXNzaW9uPiBzZXNz
aW9uKQorICAgIHsKKyAgICAgICAgRVhQRUNUX0VRKDFVTCwgc2Vzc2lvbi5pdGVtcy5jb3VudCk7
CisgICAgICAgIGF1dG8gKml0ZW0gPSBzZXNzaW9uLml0ZW1zWzBdLml0ZW1Qcm92aWRlcjsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoW2l0ZW0ucmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVycyBjb250YWlu
c09iamVjdDooTlNTdHJpbmcgKilrVVRUeXBlVVJMXSk7CisgICAgICAgIEVYUEVDVF9UUlVFKFtp
dGVtIGNhbkxvYWRPYmplY3RPZkNsYXNzOiBbTlNVUkwgY2xhc3NdXSk7CisgICAgICAgIFtpdGVt
IGxvYWRPYmplY3RPZkNsYXNzOltOU1VSTCBjbGFzc10gY29tcGxldGlvbkhhbmRsZXI6XihpZDxO
U0l0ZW1Qcm92aWRlclJlYWRpbmc+IHVybCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgICAg
IEVYUEVDVF9UUlVFKFt1cmwgaXNLaW5kT2ZDbGFzczogW05TVVJMIGNsYXNzXV0pOworICAgICAg
ICAgICAgRVhQRUNUX1dLX1NUUkVRKFsoTlNVUkwgKil1cmwgYWJzb2x1dGVTdHJpbmddLCBAImh0
dHBzOi8vd2Via2l0Lm9yZy9iLzEyMyIpOworICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAg
ICAgIH1dOworICAgICAgICByZXR1cm4gc2Vzc2lvbi5pdGVtczsKKyAgICB9XTsKKyAgICBbc2lt
dWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDIyNSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3
NSldOworCisgICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAeworICAgICAgICBAImRyYWdvdmVyIjog
QHsKKyAgICAgICAgICAgIEAidGV4dC91cmktbGlzdCI6IEAiIiwKKyAgICAgICAgfSwKKyAgICAg
ICAgQCJkcm9wIjogQHsKKyAgICAgICAgICAgIEAidGV4dC91cmktbGlzdCI6IEAiaHR0cHM6Ly93
ZWJraXQub3JnL2IvMTIzIiwKKyAgICAgICAgfQorICAgIH0pOworICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRGF0YVRyYW5z
ZmVyU2V0RGF0YVVuZXNjYXBlZFVSTCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwg
NTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1
bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtb
RHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7
CisKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic2VsZWN0KHJp
Y2gpIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImN1c3Rv
bURhdGEgPSB7ICd1cmwnIDogJ2h0dHA6Ly93ZWJraXQub3JnL2IvXHU0RjYwXHU1OTdEOz94PTgg
KyA2JyB9Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIndy
aXRlQ3VzdG9tRGF0YSA9IHRydWUiXTsKKworICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7
CisgICAgW3NpbXVsYXRvci5nZXQoKSBzZXRPdmVycmlkZVBlcmZvcm1Ecm9wQmxvY2s6Xk5TQXJy
YXk8VUlEcmFnSXRlbSAqPiAqKGlkIDxVSURyb3BTZXNzaW9uPiBzZXNzaW9uKQorICAgIHsKKyAg
ICAgICAgRVhQRUNUX0VRKDFVTCwgc2Vzc2lvbi5pdGVtcy5jb3VudCk7CisgICAgICAgIGF1dG8g
Kml0ZW0gPSBzZXNzaW9uLml0ZW1zWzBdLml0ZW1Qcm92aWRlcjsKKyAgICAgICAgRVhQRUNUX1RS
VUUoW2l0ZW0ucmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVycyBjb250YWluc09iamVjdDooTlNTdHJp
bmcgKilrVVRUeXBlVVJMXSk7CisgICAgICAgIEVYUEVDVF9UUlVFKFtpdGVtIGNhbkxvYWRPYmpl
Y3RPZkNsYXNzOiBbTlNVUkwgY2xhc3NdXSk7CisgICAgICAgIFtpdGVtIGxvYWRPYmplY3RPZkNs
YXNzOltOU1VSTCBjbGFzc10gY29tcGxldGlvbkhhbmRsZXI6XihpZDxOU0l0ZW1Qcm92aWRlclJl
YWRpbmc+IHVybCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKFt1
cmwgaXNLaW5kT2ZDbGFzczogW05TVVJMIGNsYXNzXV0pOworICAgICAgICAgICAgRVhQRUNUX1dL
X1NUUkVRKFsoTlNVUkwgKil1cmwgYWJzb2x1dGVTdHJpbmddLCBAImh0dHA6Ly93ZWJraXQub3Jn
L2IvJUU0JUJEJUEwJUU1JUE1JUJEOz94PTglMjArJTIwNiIpOworICAgICAgICAgICAgZG9uZSA9
IHRydWU7CisgICAgICAgIH1dOworICAgICAgICByZXR1cm4gc2Vzc2lvbi5pdGVtczsKKyAgICB9
XTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDIyNSkgdG86Q0dQb2lu
dE1ha2UoNTAsIDM3NSldOworCisgICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAeworICAgICAgICBA
ImRyYWdvdmVyIjogQHsKKyAgICAgICAgICAgIEAidGV4dC91cmktbGlzdCI6IEAiIiwKKyAgICAg
ICAgfSwKKyAgICAgICAgQCJkcm9wIjogQHsKKyAgICAgICAgICAgIEAidGV4dC91cmktbGlzdCI6
IEAiaHR0cDovL3dlYmtpdC5vcmcvYi9cdTRGNjBcdTU5N0Q7P3g9OCArIDYiLAorICAgICAgICB9
CisgICAgfSk7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKK30KKworVEVT
VChEcmFnQW5kRHJvcFRlc3RzLCBEYXRhVHJhbnNmZXJTZXREYXRhSW52YWxpZFVSTCkKK3sKKyAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07CisgICAg
YXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAic2VsZWN0KHJpY2gpIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImN1c3RvbURhdGEgPSB7ICd1cmwnIDogJ3NvbWUgcmFuZG9t
IHN0cmluZycgfSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJ3cml0ZUN1c3RvbURhdGEgPSB0cnVlIl07CisKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQ
b2ludE1ha2UoNTAsIDIyNSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOworICAgIE5TQXJyYXkg
KnJlZ2lzdGVyZWRUeXBlcyA9IFtzaW11bGF0b3IuZ2V0KCkuc291cmNlSXRlbVByb3ZpZGVycy5m
aXJzdE9iamVjdCByZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzXTsKKyAgICBFWFBFQ1RfRkFMU0Uo
W3JlZ2lzdGVyZWRUeXBlcyBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilrVVRUeXBlVVJMXSk7
CisgICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAeworICAgICAgICBAImRyYWdvdmVyIjogQHsKKyAg
ICAgICAgICAgIEAidGV4dC91cmktbGlzdCI6IEAiIiwKKyAgICAgICAgfSwKKyAgICAgICAgQCJk
cm9wIjogQHsKKyAgICAgICAgICAgIEAidGV4dC91cmktbGlzdCI6IEAic29tZSByYW5kb20gc3Ry
aW5nIiwKKyAgICAgICAgfQorICAgIH0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIERh
dGFUcmFuc2ZlclNhbml0aXplSFRNTCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwg
NTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1
bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtb
RHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7
CisKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic2VsZWN0KHJp
Y2gpIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImN1c3Rv
bURhdGEgPSB7ICd0ZXh0L2h0bWwnIDogJzxtZXRhIGNvbnRlbnQ9XCJzZWNyZXRcIj4iCisgICAg
ICAgICI8YiBvbm1vdXNlb3Zlcj1cImRhbmdlcm91c0NvZGUoKVwiPmhlbGxvPC9iPjwhLS0gc2Vj
cmV0LS0+LCB3b3JsZDxzY3JpcHQ+ZGFuZ2Vyb3VzQ29kZSgpPC9zY3JpcHQ+JyB9Il07CisgICAg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIndyaXRlQ3VzdG9tRGF0YSA9
IHRydWUiXTsKKworICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7CisgICAgW3NpbXVsYXRv
ci5nZXQoKSBzZXRPdmVycmlkZVBlcmZvcm1Ecm9wQmxvY2s6Xk5TQXJyYXk8VUlEcmFnSXRlbSAq
PiAqKGlkIDxVSURyb3BTZXNzaW9uPiBzZXNzaW9uKQorICAgIHsKKyAgICAgICAgRVhQRUNUX0VR
KDFVTCwgc2Vzc2lvbi5pdGVtcy5jb3VudCk7CisgICAgICAgIGF1dG8gKml0ZW0gPSBzZXNzaW9u
Lml0ZW1zWzBdLml0ZW1Qcm92aWRlcjsKKyAgICAgICAgRVhQRUNUX1RSVUUoW2l0ZW0ucmVnaXN0
ZXJlZFR5cGVJZGVudGlmaWVycyBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilrVVRUeXBlSFRN
TF0pOworICAgICAgICBbaXRlbSBsb2FkRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZp
ZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgY29tcGxldGlvbkhhbmRsZXI6XihOU0RhdGEgKmRh
dGEsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgICAgICBOU1N0cmluZyAqbWFya3VwID0gW1tb
TlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTooTlNEYXRhICopZGF0YSBlbmNvZGluZzpOU1VU
RjhTdHJpbmdFbmNvZGluZ10gYXV0b3JlbGVhc2VdOworICAgICAgICAgICAgRVhQRUNUX1RSVUUo
W21hcmt1cCBjb250YWluc1N0cmluZzpAImhlbGxvIl0pOworICAgICAgICAgICAgRVhQRUNUX1RS
VUUoW21hcmt1cCBjb250YWluc1N0cmluZzpAIiwgd29ybGQiXSk7CisgICAgICAgICAgICBFWFBF
Q1RfRkFMU0UoW21hcmt1cCBjb250YWluc1N0cmluZzpAInNlY3JldCJdKTsKKyAgICAgICAgICAg
IEVYUEVDVF9GQUxTRShbbWFya3VwIGNvbnRhaW5zU3RyaW5nOkAiZGFuZ2Vyb3VzQ29kZSJdKTsK
KyAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICB9XTsKKyAgICAgICAgcmV0dXJuIHNl
c3Npb24uaXRlbXM7CisgICAgfV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtl
KDUwLCAyMjUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKKworICAgIGNoZWNrSlNPTldpdGhM
b2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFs
dWUiXSwgQHsKKyAgICAgICAgQCJkcmFnb3ZlciI6IEB7CisgICAgICAgICAgICBAInRleHQvaHRt
bCI6IEAiIiwKKyAgICAgICAgfSwKKyAgICAgICAgQCJkcm9wIjogQHsKKyAgICAgICAgICAgIEAi
dGV4dC9odG1sIjogQCI8bWV0YSBjb250ZW50PVwic2VjcmV0XCI+PGIgb25tb3VzZW92ZXI9XCJk
YW5nZXJvdXNDb2RlKClcIj5oZWxsbzwvYj48IS0tIHNlY3JldC0tPiwgd29ybGQ8c2NyaXB0PmRh
bmdlcm91c0NvZGUoKTwvc2NyaXB0PiIsCisgICAgICAgIH0KKyAgICB9KTsKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworfQorCisjZW5kaWYgLy8gX19JUEhPTkVfT1NfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMzAwCisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkKKworI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpICYmIFBMQVRGT1JNKElPUykKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvRHJhZ2dpbmdTaW11bGF0b3IuaCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvRHJhZ2dpbmdTaW11bGF0b3IuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wY2Y1NWM1MDZlOGNlYTNlNjczZTVkYzljNTg2NDg3MmMxOGIyOGRiCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9EcmFnZ2luZ1NpbXVsYXRvci5oCkBAIC0w
LDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRFJB
R19TVVBQT1JUKQorCisjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0IDxXZWJLaXQv
V0tVSURlbGVnYXRlUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L19XS0lucHV0RGVsZWdhdGUu
aD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgorCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9y
dCAiVUlLaXRTUEkuaCIKKyNpbXBvcnQgPFVJS2l0L05TSXRlbVByb3ZpZGVyK1VJS2l0QWRkaXRp
b25zLmg+CisjZW5kaWYKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgRHJhZ0FuZERyb3BQ
aGFzZSkgeworICAgIERyYWdBbmREcm9wUGhhc2VDYW5jZWxsZWQgPSAwLAorICAgIERyYWdBbmRE
cm9wUGhhc2VCZWdpbm5pbmcgPSAxLAorICAgIERyYWdBbmREcm9wUGhhc2VCZWdhbiA9IDIsCisg
ICAgRHJhZ0FuZERyb3BQaGFzZUVudGVyZWQgPSAzLAorICAgIERyYWdBbmREcm9wUGhhc2VQZXJm
b3JtaW5nRHJvcCA9IDQKK307CisKKyNpZiBQTEFURk9STShJT1MpCisKK3R5cGVkZWYgTlNEaWN0
aW9uYXJ5PE5TTnVtYmVyICosIE5TVmFsdWUgKj4gKlByb2dyZXNzVG9DR1BvaW50VmFsdWVNYXA7
CisKK0BpbnRlcmZhY2UgTW9ja0RyYWdEcm9wU2Vzc2lvbiA6IE5TT2JqZWN0IDxVSURyYWdEcm9w
U2Vzc2lvbj4geworQHByaXZhdGUKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gX21vY2tJdGVtczsK
KyAgICBSZXRhaW5QdHI8VUlXaW5kb3c+IF93aW5kb3c7Cit9CitAcHJvcGVydHkgKG5vbmF0b21p
YykgQ0dQb2ludCBtb2NrTG9jYXRpb25JbldpbmRvdzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBC
T09MIGFsbG93TW92ZTsKK0BlbmQKKworQGludGVyZmFjZSBNb2NrRHJvcFNlc3Npb24gOiBNb2Nr
RHJhZ0Ryb3BTZXNzaW9uIDxVSURyb3BTZXNzaW9uPgorQGVuZAorCitAaW50ZXJmYWNlIE1vY2tE
cmFnU2Vzc2lvbiA6IE1vY2tEcmFnRHJvcFNlc3Npb24gPFVJRHJhZ1Nlc3Npb24+CitAZW5kCisK
K0BpbnRlcmZhY2UgV0tXZWJWaWV3IChEcmFnQW5kRHJvcFRlc3RpbmcpCistIChpZCA8VUlEcm9w
SW50ZXJhY3Rpb25EZWxlZ2F0ZT4pZHJvcEludGVyYWN0aW9uRGVsZWdhdGU7CistIChpZCA8VUlE
cmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZT4pZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGU7CistIChVSURy
b3BJbnRlcmFjdGlvbiAqKWRyb3BJbnRlcmFjdGlvbjsKKy0gKFVJRHJhZ0ludGVyYWN0aW9uICop
ZHJhZ0ludGVyYWN0aW9uOworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCitAaW50
ZXJmYWNlIERyYWdnaW5nU2ltdWxhdG9yIDogTlNPYmplY3Q8V0tVSURlbGVnYXRlUHJpdmF0ZSwg
X1dLSW5wdXREZWxlZ2F0ZT4KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlldzooVGVz
dFdLV2ViVmlldyAqKXdlYlZpZXc7CisvLyBUaGUgc3RhcnQgbG9jYXRpb24sIGVuZCBsb2NhdGlv
biwgYW5kIGxvY2F0aW9ucyBvZiBhZGRpdGlvbmFsIGl0ZW0gcmVxdWVzdHMgYXJlIGFsbCBpbiB3
aW5kb3cgY29vcmRpbmF0ZXMuCistICh2b2lkKXJ1bkZyb206KENHUG9pbnQpc3RhcnRMb2NhdGlv
biB0bzooQ0dQb2ludCllbmRMb2NhdGlvbjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgTlNBcnJheTxfV0tBdHRhY2htZW50ICo+ICppbnNlcnRlZEF0dGFjaG1lbnRzOworQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5PF9XS0F0dGFjaG1lbnQgKj4gKnJlbW92
ZWRBdHRhY2htZW50czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgRHJhZ0FuZERy
b3BQaGFzZSBwaGFzZTsKKworI2lmIFBMQVRGT1JNKElPUykKKworLSAodm9pZClydW5Gcm9tOihD
R1BvaW50KXN0YXJ0TG9jYXRpb24gdG86KENHUG9pbnQpZW5kTG9jYXRpb24gYWRkaXRpb25hbEl0
ZW1SZXF1ZXN0TG9jYXRpb25zOihQcm9ncmVzc1RvQ0dQb2ludFZhbHVlTWFwKWFkZGl0aW9uYWxJ
dGVtUmVxdWVzdExvY2F0aW9uczsKKy0gKHZvaWQpd2FpdEZvcklucHV0U2Vzc2lvbjsKKy0gKHZv
aWQpZW5kRGF0YVRyYW5zZmVyOworCitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBhbGxvd3NG
b2N1c1RvU3RhcnRJbnB1dFNlc3Npb247CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBzaG91
bGRFbnN1cmVVSUFwcGxpY2F0aW9uOworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgc2hvdWxk
QWxsb3dNb3ZlT3BlcmF0aW9uOworQHByb3BlcnR5IChub25hdG9taWMpIEJsb2NrUHRyPEJPT0wo
X1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKik+IHNob3dDdXN0b21BY3Rpb25TaGVldEJsb2NrOwor
QHByb3BlcnR5IChub25hdG9taWMpIEJsb2NrUHRyPE5TQXJyYXkgKihVSUl0ZW1Qcm92aWRlciAq
LCBOU0FycmF5ICosIE5TRGljdGlvbmFyeSAqKT4gY29udmVydEl0ZW1Qcm92aWRlcnNCbG9jazsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCbG9ja1B0cjxOU0FycmF5ICooaWQgPFVJRHJvcFNlc3Np
b24+KT4gb3ZlcnJpZGVQZXJmb3JtRHJvcEJsb2NrOworQHByb3BlcnR5IChub25hdG9taWMsIHN0
cm9uZykgTlNBcnJheSAqZXh0ZXJuYWxJdGVtUHJvdmlkZXJzOworQHByb3BlcnR5IChub25hdG9t
aWMpIEJsb2NrUHRyPE5TVUludGVnZXIoTlNVSW50ZWdlciwgaWQpPiBvdmVycmlkZURyYWdVcGRh
dGVCbG9jazsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCbG9ja1B0cjx2b2lkKEJPT0wsIE5TQXJy
YXkgKik+IGRyb3BDb21wbGV0aW9uQmxvY2s7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgTlNBcnJheSAqc291cmNlSXRlbVByb3ZpZGVyczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgTlNBcnJheSAqb2JzZXJ2ZWRFdmVudE5hbWVzOworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBOU0FycmF5ICpmaW5hbFNlbGVjdGlvblJlY3RzOworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBDR1JlY3QgbGFzdEtub3duRHJhZ0NhcmV0UmVjdDsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBcnJheTxVSVRhcmdldGVkRHJhZ1ByZXZp
ZXcgKj4gKmxpZnRQcmV2aWV3czsKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKworQGVuZAor
CisjZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5oIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9pb3MvRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDNkMzcyMDU4YzQ5Njc2NmE2MmMwOTBiYTg3NzNmNGM1MTg4MmEwMDMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9pb3MvRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
NzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKERBVEFf
SU5URVJBQ1RJT04pCi0KLSNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKLSNpbXBvcnQgPFVJS2l0
L05TSXRlbVByb3ZpZGVyK1VJS2l0QWRkaXRpb25zLmg+Ci0KLSNpZiBVU0UoQVBQTEVfSU5URVJO
QUxfU0RLKQotI2ltcG9ydCA8VUlLaXQvTlNTdHJpbmcrVUlJdGVtUHJvdmlkZXIuaD4KLSNpbXBv
cnQgPFVJS2l0L05TVVJMK1VJSXRlbVByb3ZpZGVyLmg+Ci0jaW1wb3J0IDxVSUtpdC9VSUltYWdl
K1VJSXRlbVByb3ZpZGVyLmg+Ci0jaW1wb3J0IDxVSUtpdC9VSUl0ZW1Qcm92aWRlci5oPgotI2lt
cG9ydCA8VUlLaXQvVUlJdGVtUHJvdmlkZXJfUHJpdmF0ZS5oPgotI2Vsc2UKLQotQGludGVyZmFj
ZSBOU1VSTCAoKQotQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1fc2V0VGl0bGU6
KSBOU1N0cmluZyAqX3RpdGxlOwotQGVuZAotCi0jZGVmaW5lIFVJSXRlbVByb3ZpZGVyUmVwcmVz
ZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbCBOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9u
VmlzaWJpbGl0eUFsbAotCi1AcHJvdG9jb2wgVUlJdGVtUHJvdmlkZXJSZWFkaW5nIDxOU0l0ZW1Q
cm92aWRlclJlYWRpbmc+Ci0KLUByZXF1aXJlZAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSXRl
bVByb3ZpZGVyRGF0YTooTlNEYXRhICopZGF0YSB0eXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKil0
eXBlSWRlbnRpZmllciBlcnJvcjooTlNFcnJvciAqKilvdXRFcnJvcjsKLQotQGVuZAotCi1AcHJv
dG9jb2wgVUlJdGVtUHJvdmlkZXJXcml0aW5nIDxOU0l0ZW1Qcm92aWRlcldyaXRpbmc+Ci0KLUBy
ZXF1aXJlZAotLSAoTlNQcm9ncmVzcyAqKWxvYWREYXRhV2l0aFR5cGVJZGVudGlmaWVyOihOU1N0
cmluZyAqKXR5cGVJZGVudGlmaWVyIGZvckl0ZW1Qcm92aWRlckNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShOU0RhdGEgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKLQotQGVuZAot
Ci1AaW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmluZyAoKSA8VUlJdGVtUHJvdmlkZXJSZWFkaW5n
LCBVSUl0ZW1Qcm92aWRlcldyaXRpbmc+Ci1AZW5kCi1AaW50ZXJmYWNlIE5TU3RyaW5nICgpIDxV
SUl0ZW1Qcm92aWRlclJlYWRpbmcsIFVJSXRlbVByb3ZpZGVyV3JpdGluZz4KLUBlbmQKLUBpbnRl
cmZhY2UgTlNVUkwgKCkgPFVJSXRlbVByb3ZpZGVyUmVhZGluZywgVUlJdGVtUHJvdmlkZXJXcml0
aW5nPgotQGVuZAotQGludGVyZmFjZSBVSUltYWdlICgpIDxVSUl0ZW1Qcm92aWRlclJlYWRpbmcs
IFVJSXRlbVByb3ZpZGVyV3JpdGluZz4KLUBlbmQKLQotQGludGVyZmFjZSBVSUl0ZW1Qcm92aWRl
ciA6IE5TSXRlbVByb3ZpZGVyCi1AZW5kCi0KLSNlbmRpZgotCi0jaW1wb3J0IDxVSUtpdC9VSUtp
dC5oPgotI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KLSNpbXBvcnQgPFdl
YktpdC9fV0tJbnB1dERlbGVnYXRlLmg+Ci0jaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KLQotQGNs
YXNzIE1vY2tEcm9wU2Vzc2lvbjsKLUBjbGFzcyBNb2NrRHJhZ1Nlc3Npb247Ci0KLUBpbnRlcmZh
Y2UgTW9ja0RyYWdEcm9wU2Vzc2lvbiA6IE5TT2JqZWN0IDxVSURyYWdEcm9wU2Vzc2lvbj4gewot
QHByaXZhdGUKLSAgICBSZXRhaW5QdHI8TlNBcnJheT4gX21vY2tJdGVtczsKLSAgICBSZXRhaW5Q
dHI8VUlXaW5kb3c+IF93aW5kb3c7Ci19Ci1AcHJvcGVydHkgKG5vbmF0b21pYykgQ0dQb2ludCBt
b2NrTG9jYXRpb25JbldpbmRvdzsKLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIGFsbG93TW92
ZTsKLUBlbmQKLQotQGludGVyZmFjZSBNb2NrRHJvcFNlc3Npb24gOiBNb2NrRHJhZ0Ryb3BTZXNz
aW9uIDxVSURyb3BTZXNzaW9uPgotQGVuZAotCi1AaW50ZXJmYWNlIE1vY2tEcmFnU2Vzc2lvbiA6
IE1vY2tEcmFnRHJvcFNlc3Npb24gPFVJRHJhZ1Nlc3Npb24+Ci1AZW5kCi0KLWV4dGVybiBOU1N0
cmluZyAqIGNvbnN0IERhdGFJbnRlcmFjdGlvbkVudGVyRXZlbnROYW1lOwotZXh0ZXJuIE5TU3Ry
aW5nICogY29uc3QgRGF0YUludGVyYWN0aW9uT3ZlckV2ZW50TmFtZTsKLWV4dGVybiBOU1N0cmlu
ZyAqIGNvbnN0IERhdGFJbnRlcmFjdGlvblBlcmZvcm1PcGVyYXRpb25FdmVudE5hbWU7Ci1leHRl
cm4gTlNTdHJpbmcgKiBjb25zdCBEYXRhSW50ZXJhY3Rpb25MZWF2ZUV2ZW50TmFtZTsKLWV4dGVy
biBOU1N0cmluZyAqIGNvbnN0IERhdGFJbnRlcmFjdGlvblN0YXJ0RXZlbnROYW1lOwotCi10eXBl
ZGVmIE5TRGljdGlvbmFyeTxOU051bWJlciAqLCBOU1ZhbHVlICo+ICpQcm9ncmVzc1RvQ0dQb2lu
dFZhbHVlTWFwOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBEYXRhSW50ZXJhY3Rpb25Q
aGFzZSkgewotICAgIERhdGFJbnRlcmFjdGlvbkNhbmNlbGxlZCA9IDAsCi0gICAgRGF0YUludGVy
YWN0aW9uQmVnaW5uaW5nID0gMSwKLSAgICBEYXRhSW50ZXJhY3Rpb25CZWdhbiA9IDIsCi0gICAg
RGF0YUludGVyYWN0aW9uRW50ZXJlZCA9IDMsCi0gICAgRGF0YUludGVyYWN0aW9uUGVyZm9ybWlu
ZyA9IDQKLX07Ci0KLUBpbnRlcmZhY2UgV0tXZWJWaWV3IChEcmFnQW5kRHJvcFRlc3RpbmcpCi0t
IChpZCA8VUlEcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZT4pZHJvcEludGVyYWN0aW9uRGVsZWdhdGU7
Ci0tIChpZCA8VUlEcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZT4pZHJhZ0ludGVyYWN0aW9uRGVsZWdh
dGU7Ci0tIChVSURyb3BJbnRlcmFjdGlvbiAqKWRyb3BJbnRlcmFjdGlvbjsKLS0gKFVJRHJhZ0lu
dGVyYWN0aW9uICopZHJhZ0ludGVyYWN0aW9uOwotQGVuZAotCi1AaW50ZXJmYWNlIERhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciA6IE5TT2JqZWN0PFdLVUlEZWxlZ2F0ZVByaXZhdGUsIF9XS0lucHV0
RGVsZWdhdGU+IHsKLUBwcml2YXRlCi0gICAgUmV0YWluUHRyPFRlc3RXS1dlYlZpZXc+IF93ZWJW
aWV3OwotICAgIFJldGFpblB0cjxNb2NrRHJhZ1Nlc3Npb24+IF9kcmFnU2Vzc2lvbjsKLSAgICBS
ZXRhaW5QdHI8TW9ja0Ryb3BTZXNzaW9uPiBfZHJvcFNlc3Npb247Ci0gICAgUmV0YWluUHRyPE5T
TXV0YWJsZUFycmF5PiBfb2JzZXJ2ZWRFdmVudE5hbWVzOwotICAgIFJldGFpblB0cjxOU0FycmF5
PiBfZXh0ZXJuYWxJdGVtUHJvdmlkZXJzOwotICAgIFJldGFpblB0cjxOU0FycmF5ICo+IF9zb3Vy
Y2VJdGVtUHJvdmlkZXJzOwotICAgIFJldGFpblB0cjxOU0FycmF5ICo+IF9maW5hbFNlbGVjdGlv
blJlY3RzOwotICAgIENHUG9pbnQgX3N0YXJ0TG9jYXRpb247Ci0gICAgQ0dQb2ludCBfZW5kTG9j
YXRpb247Ci0gICAgQ0dSZWN0IF9sYXN0S25vd25EcmFnQ2FyZXRSZWN0OwotCi0gICAgUmV0YWlu
UHRyPE5TTXV0YWJsZURpY3Rpb25hcnk8TlNOdW1iZXIgKiwgTlNWYWx1ZSAqPj5fcmVtYWluaW5n
QWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zQnlQcm9ncmVzczsKLSAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlQXJyYXk8TlNWYWx1ZSAqPj5fcXVldWVkQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9j
YXRpb25zOwotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxVSVRhcmdldGVkRHJhZ1ByZXZp
ZXcgKj4+IF9saWZ0UHJldmlld3M7Ci0KLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk8X1dL
QXR0YWNobWVudCAqPj4gX2luc2VydGVkQXR0YWNobWVudHM7Ci0gICAgUmV0YWluUHRyPE5TTXV0
YWJsZUFycmF5PF9XS0F0dGFjaG1lbnQgKj4+IF9yZW1vdmVkQXR0YWNobWVudHM7Ci0KLSAgICBi
b29sIF9pc0RvbmVXYWl0aW5nRm9ySW5wdXRTZXNzaW9uOwotICAgIGRvdWJsZSBfY3VycmVudFBy
b2dyZXNzOwotICAgIGJvb2wgX2lzRG9uZVdpdGhDdXJyZW50UnVuOwotICAgIERhdGFJbnRlcmFj
dGlvblBoYXNlIF9waGFzZTsKLQotICAgIFJldGFpblB0cjxVSURyb3BQcm9wb3NhbD4gX2N1cnJl
bnREcm9wUHJvcG9zYWw7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXc6KFRl
c3RXS1dlYlZpZXcgKil3ZWJWaWV3OwotLy8gVGhlIHN0YXJ0IGxvY2F0aW9uLCBlbmQgbG9jYXRp
b24sIGFuZCBsb2NhdGlvbnMgb2YgYWRkaXRpb25hbCBpdGVtIHJlcXVlc3RzIGFyZSBhbGwgaW4g
d2luZG93IGNvb3JkaW5hdGVzLgotLSAodm9pZClydW5Gcm9tOihDR1BvaW50KXN0YXJ0TG9jYXRp
b24gdG86KENHUG9pbnQpZW5kTG9jYXRpb247Ci0tICh2b2lkKXJ1bkZyb206KENHUG9pbnQpc3Rh
cnRMb2NhdGlvbiB0bzooQ0dQb2ludCllbmRMb2NhdGlvbiBhZGRpdGlvbmFsSXRlbVJlcXVlc3RM
b2NhdGlvbnM6KFByb2dyZXNzVG9DR1BvaW50VmFsdWVNYXApYWRkaXRpb25hbEl0ZW1SZXF1ZXN0
TG9jYXRpb25zOwotLSAodm9pZCl3YWl0Rm9ySW5wdXRTZXNzaW9uOwotLSAodm9pZCllbmREYXRh
VHJhbnNmZXI7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIGFsbG93c0ZvY3VzVG9TdGFy
dElucHV0U2Vzc2lvbjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHNob3VsZEVuc3VyZVVJ
QXBwbGljYXRpb247Ci1AcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBzaG91bGRBbGxvd01vdmVP
cGVyYXRpb247Ci1AcHJvcGVydHkgKG5vbmF0b21pYykgQmxvY2tQdHI8Qk9PTChfV0tBY3RpdmF0
ZWRFbGVtZW50SW5mbyAqKT4gc2hvd0N1c3RvbUFjdGlvblNoZWV0QmxvY2s7Ci1AcHJvcGVydHkg
KG5vbmF0b21pYykgQmxvY2tQdHI8TlNBcnJheSAqKFVJSXRlbVByb3ZpZGVyICosIE5TQXJyYXkg
KiwgTlNEaWN0aW9uYXJ5ICopPiBjb252ZXJ0SXRlbVByb3ZpZGVyc0Jsb2NrOwotQHByb3BlcnR5
IChub25hdG9taWMpIEJsb2NrUHRyPE5TQXJyYXkgKihpZCA8VUlEcm9wU2Vzc2lvbj4pPiBvdmVy
cmlkZVBlcmZvcm1Ecm9wQmxvY2s7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBOU0Fy
cmF5ICpleHRlcm5hbEl0ZW1Qcm92aWRlcnM7Ci1AcHJvcGVydHkgKG5vbmF0b21pYykgQmxvY2tQ
dHI8TlNVSW50ZWdlcihOU1VJbnRlZ2VyLCBpZCk+IG92ZXJyaWRlRGF0YUludGVyYWN0aW9uT3Bl
cmF0aW9uQmxvY2s7Ci1AcHJvcGVydHkgKG5vbmF0b21pYykgQmxvY2tQdHI8dm9pZChCT09MLCBO
U0FycmF5ICopPiBkYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25Db21wbGV0aW9uQmxvY2s7Ci0KLUBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBcnJheSAqc291cmNlSXRlbVByb3ZpZGVy
czsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBcnJheSAqb2JzZXJ2ZWRFdmVu
dE5hbWVzOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5ICpmaW5hbFNl
bGVjdGlvblJlY3RzOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBEYXRhSW50ZXJh
Y3Rpb25QaGFzZSBwaGFzZTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0
IGxhc3RLbm93bkRyYWdDYXJldFJlY3Q7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IE5TQXJyYXk8VUlUYXJnZXRlZERyYWdQcmV2aWV3ICo+ICpsaWZ0UHJldmlld3M7Ci0KLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBcnJheTxfV0tBdHRhY2htZW50ICo+ICppbnNl
cnRlZEF0dGFjaG1lbnRzOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5
PF9XS0F0dGFjaG1lbnQgKj4gKnJlbW92ZWRBdHRhY2htZW50czsKLQotQGVuZAotCi0jZW5kaWYg
Ly8gRU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL2lvcy9EYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L2lvcy9EYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDg1NmIwYjFmZjNiZmYwYjRiOThmN2Q3ZDFhODdjYjg3YjJjMzA4NDQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9pb3MvRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNjc1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yLmgiCi0KLSNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikK
LQotI2ltcG9ydCAiSW5zdGFuY2VNZXRob2RTd2l6emxlci5oIgotI2ltcG9ydCAiUGxhdGZvcm1V
dGlsaXRpZXMuaCIKLSNpbXBvcnQgIlVJS2l0U1BJLmgiCi0KLSNpbXBvcnQgPFVJS2l0L1VJRHJh
Z0ludGVyYWN0aW9uLmg+Ci0jaW1wb3J0IDxVSUtpdC9VSURyYWdJdGVtLmg+Ci0jaW1wb3J0IDxV
SUtpdC9VSUludGVyYWN0aW9uLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5o
PgotI2ltcG9ydCA8V2ViS2l0L19XS0ZvY3VzZWRFbGVtZW50SW5mby5oPgotI2ltcG9ydCA8V2Vi
S2l0L19XS0Zvcm1JbnB1dFNlc3Npb24uaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNp
bXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgotCi1TT0ZUX0xJTktfRlJBTUVXT1JLKFVJS2l0KQot
U09GVF9MSU5LKFVJS2l0LCBVSUFwcGxpY2F0aW9uSW5zdGFudGlhdGVTaW5nbGV0b24sIHZvaWQs
IChDbGFzcyBzaW5nbGV0b25DbGFzcyksIChzaW5nbGV0b25DbGFzcykpCi0KLXVzaW5nIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJOwotCi1AaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChEcmFnQW5k
RHJvcFRlc3RpbmcpCi0KLS0gKFVJVmlldyAqKV9kcmFnRHJvcEludGVyYWN0aW9uVmlldwotewot
ICAgIHJldHVybiBbc2VsZiB2YWx1ZUZvcktleTpAIl9jdXJyZW50Q29udGVudFZpZXciXTsKLX0K
LQotLSAoaWQgPFVJRHJvcEludGVyYWN0aW9uRGVsZWdhdGU+KWRyb3BJbnRlcmFjdGlvbkRlbGVn
YXRlCi17Ci0gICAgcmV0dXJuIChpZCA8VUlEcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZT4pc2VsZi5f
ZHJhZ0Ryb3BJbnRlcmFjdGlvblZpZXc7Ci19Ci0KLS0gKGlkIDxVSURyYWdJbnRlcmFjdGlvbkRl
bGVnYXRlPilkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZQotewotICAgIHJldHVybiAoaWQgPFVJRHJh
Z0ludGVyYWN0aW9uRGVsZWdhdGU+KXNlbGYuX2RyYWdEcm9wSW50ZXJhY3Rpb25WaWV3OwotfQot
Ci0tIChVSURyb3BJbnRlcmFjdGlvbiAqKWRyb3BJbnRlcmFjdGlvbgotewotICAgIFVJVmlldyAq
aW50ZXJhY3Rpb25WaWV3ID0gc2VsZi5fZHJhZ0Ryb3BJbnRlcmFjdGlvblZpZXc7Ci0gICAgZm9y
IChpZCA8VUlJbnRlcmFjdGlvbj4gaW50ZXJhY3Rpb24gaW4gaW50ZXJhY3Rpb25WaWV3LmludGVy
YWN0aW9ucykgewotICAgICAgICBpZiAoW2ludGVyYWN0aW9uIGlzS2luZE9mQ2xhc3M6W1VJRHJv
cEludGVyYWN0aW9uIGNsYXNzXV0pCi0gICAgICAgICAgICByZXR1cm4gKFVJRHJvcEludGVyYWN0
aW9uICopaW50ZXJhY3Rpb247Ci0gICAgfQotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKFVJRHJh
Z0ludGVyYWN0aW9uICopZHJhZ0ludGVyYWN0aW9uCi17Ci0gICAgVUlWaWV3ICppbnRlcmFjdGlv
blZpZXcgPSBzZWxmLl9kcmFnRHJvcEludGVyYWN0aW9uVmlldzsKLSAgICBmb3IgKGlkIDxVSUlu
dGVyYWN0aW9uPiBpbnRlcmFjdGlvbiBpbiBpbnRlcmFjdGlvblZpZXcuaW50ZXJhY3Rpb25zKSB7
Ci0gICAgICAgIGlmIChbaW50ZXJhY3Rpb24gaXNLaW5kT2ZDbGFzczpbVUlEcmFnSW50ZXJhY3Rp
b24gY2xhc3NdXSkKLSAgICAgICAgICAgIHJldHVybiAoVUlEcmFnSW50ZXJhY3Rpb24gKilpbnRl
cmFjdGlvbjsKLSAgICB9Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50
YXRpb24gTW9ja0RyYWdEcm9wU2Vzc2lvbgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJdGVt
czooTlNBcnJheSA8VUlEcmFnSXRlbSAqPiopaXRlbXMgbG9jYXRpb246KENHUG9pbnQpbG9jYXRp
b25JbldpbmRvdyB3aW5kb3c6KFVJV2luZG93ICopd2luZG93IGFsbG93TW92ZTooQk9PTClhbGxv
d01vdmUKLXsKLSAgICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgewotICAgICAgICBfbW9ja0l0
ZW1zID0gaXRlbXM7Ci0gICAgICAgIF9tb2NrTG9jYXRpb25JbldpbmRvdyA9IGxvY2F0aW9uSW5X
aW5kb3c7Ci0gICAgICAgIF93aW5kb3cgPSB3aW5kb3c7Ci0gICAgICAgIF9hbGxvd01vdmUgPSBh
bGxvd01vdmU7Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChCT09MKWFsbG93c01v
dmVPcGVyYXRpb24KLXsKLSAgICByZXR1cm4gX2FsbG93TW92ZTsKLX0KLQotLSAoQk9PTClpc1Jl
c3RyaWN0ZWRUb0RyYWdnaW5nQXBwbGljYXRpb24KLXsKLSAgICByZXR1cm4gTk87Ci19Ci0KLS0g
KEJPT0wpaGFzSXRlbXNDb25mb3JtaW5nVG9UeXBlSWRlbnRpZmllcnM6KE5TQXJyYXk8TlNTdHJp
bmcgKj4gKil0eXBlSWRlbnRpZmllcnMKLXsKLSAgICBmb3IgKE5TU3RyaW5nICp0eXBlSWRlbnRp
ZmllciBpbiB0eXBlSWRlbnRpZmllcnMpIHsKLSAgICAgICAgQk9PTCBoYXNJdGVtQ29uZm9ybWlu
Z1RvVHlwZSA9IE5POwotICAgICAgICBmb3IgKFVJRHJhZ0l0ZW0gKml0ZW0gaW4gc2VsZi5pdGVt
cykKLSAgICAgICAgICAgIGhhc0l0ZW1Db25mb3JtaW5nVG9UeXBlIHw9IFtbaXRlbS5pdGVtUHJv
dmlkZXIgcmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVyc10gY29udGFpbnNPYmplY3Q6dHlwZUlkZW50
aWZpZXJdOwotICAgICAgICBpZiAoIWhhc0l0ZW1Db25mb3JtaW5nVG9UeXBlKQotICAgICAgICAg
ICAgcmV0dXJuIE5POwotICAgIH0KLSAgICByZXR1cm4gWUVTOwotfQotCi0tIChCT09MKWNhbkxv
YWRPYmplY3RzT2ZDbGFzczooQ2xhc3M8VUlJdGVtUHJvdmlkZXJSZWFkaW5nPilhQ2xhc3MKLXsK
LSAgICBmb3IgKFVJRHJhZ0l0ZW0gKml0ZW0gaW4gc2VsZi5pdGVtcykgewotICAgICAgICBpZiAo
W2l0ZW0uaXRlbVByb3ZpZGVyIGNhbkxvYWRPYmplY3RPZkNsYXNzOmFDbGFzc10pCi0gICAgICAg
ICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKEJPT0wpY2Fu
TG9hZE9iamVjdHNPZkNsYXNzZXM6KE5TQXJyYXk8Q2xhc3M8VUlJdGVtUHJvdmlkZXJSZWFkaW5n
Pj4gKiljbGFzc2VzCi17Ci0gICAgZm9yIChDbGFzczxVSUl0ZW1Qcm92aWRlclJlYWRpbmc+IGFD
bGFzcyBpbiBjbGFzc2VzKSB7Ci0gICAgICAgIEJPT0wgY2FuTG9hZCA9IE5POwotICAgICAgICBm
b3IgKFVJRHJhZ0l0ZW0gKml0ZW0gaW4gc2VsZi5pdGVtcykKLSAgICAgICAgICAgIGNhbkxvYWQg
fD0gW2l0ZW0uaXRlbVByb3ZpZGVyIGNhbkxvYWRPYmplY3RPZkNsYXNzOmFDbGFzc107Ci0gICAg
ICAgIGlmICghY2FuTG9hZCkKLSAgICAgICAgICAgIHJldHVybiBOTzsKLSAgICB9Ci0gICAgcmV0
dXJuIFlFUzsKLX0KLQotLSAoTlNBcnJheTxVSURyYWdJdGVtICo+ICopaXRlbXMKLXsKLSAgICBy
ZXR1cm4gX21vY2tJdGVtcy5nZXQoKTsKLX0KLQotLSAodm9pZClzZXRJdGVtczooTlNBcnJheTxV
SURyYWdJdGVtICo+ICopaXRlbXMKLXsKLSAgICBfbW9ja0l0ZW1zID0gaXRlbXM7Ci19Ci0KLS0g
KHZvaWQpYWRkSXRlbXM6KE5TQXJyYXk8VUlEcmFnSXRlbSAqPiAqKWl0ZW1zCi17Ci0gICAgaWYg
KCFbaXRlbXMgY291bnRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIVtfbW9ja0l0ZW1z
IGNvdW50XSkKLSAgICAgICAgX21vY2tJdGVtcyA9IGl0ZW1zOwotICAgIGVsc2UKLSAgICAgICAg
X21vY2tJdGVtcyA9IFtfbW9ja0l0ZW1zIGFycmF5QnlBZGRpbmdPYmplY3RzRnJvbUFycmF5Oml0
ZW1zXTsKLX0KLQotLSAoQ0dQb2ludClsb2NhdGlvbkluVmlldzooVUlWaWV3ICopdmlldwotewot
ICAgIHJldHVybiBbX3dpbmRvdyBjb252ZXJ0UG9pbnQ6X21vY2tMb2NhdGlvbkluV2luZG93IHRv
Vmlldzp2aWV3XTsKLX0KLQotQGVuZAotCi1OU1N0cmluZyAqIGNvbnN0IERhdGFJbnRlcmFjdGlv
bkVudGVyRXZlbnROYW1lID0gQCJkcmFnZW50ZXIiOwotTlNTdHJpbmcgKiBjb25zdCBEYXRhSW50
ZXJhY3Rpb25PdmVyRXZlbnROYW1lID0gQCJkcmFnb3ZlciI7Ci1OU1N0cmluZyAqIGNvbnN0IERh
dGFJbnRlcmFjdGlvblBlcmZvcm1PcGVyYXRpb25FdmVudE5hbWUgPSBAImRyb3AiOwotTlNTdHJp
bmcgKiBjb25zdCBEYXRhSW50ZXJhY3Rpb25MZWF2ZUV2ZW50TmFtZSA9IEAiZHJhZ2xlYXZlIjsK
LU5TU3RyaW5nICogY29uc3QgRGF0YUludGVyYWN0aW9uU3RhcnRFdmVudE5hbWUgPSBAImRyYWdz
dGFydCI7Ci0KLUBpbXBsZW1lbnRhdGlvbiBNb2NrRHJvcFNlc3Npb24KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUHJvdmlkZXJzOihOU0FycmF5PFVJSXRlbVByb3ZpZGVyICo+ICopcHJvdmlk
ZXJzIGxvY2F0aW9uOihDR1BvaW50KWxvY2F0aW9uSW5XaW5kb3cgd2luZG93OihVSVdpbmRvdyAq
KXdpbmRvdyBhbGxvd01vdmU6KEJPT0wpYWxsb3dNb3ZlCi17Ci0gICAgYXV0byBpdGVtcyA9IGFk
b3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotICAgIGZvciAoVUlJdGVtUHJv
dmlkZXIgKml0ZW1Qcm92aWRlciBpbiBwcm92aWRlcnMpCi0gICAgICAgIFtpdGVtcyBhZGRPYmpl
Y3Q6W1tbVUlEcmFnSXRlbSBhbGxvY10gaW5pdFdpdGhJdGVtUHJvdmlkZXI6aXRlbVByb3ZpZGVy
XSBhdXRvcmVsZWFzZV1dOwotCi0gICAgcmV0dXJuIFtzdXBlciBpbml0V2l0aEl0ZW1zOml0ZW1z
LmdldCgpIGxvY2F0aW9uOmxvY2F0aW9uSW5XaW5kb3cgd2luZG93OndpbmRvdyBhbGxvd01vdmU6
YWxsb3dNb3ZlXTsKLX0KLQotLSAoQk9PTClpc0xvY2FsCi17Ci0gICAgcmV0dXJuIFlFUzsKLX0K
LQotLSAoTlNQcm9ncmVzcyAqKXByb2dyZXNzCi17Ci0gICAgcmV0dXJuIFtOU1Byb2dyZXNzIGRp
c2NyZXRlUHJvZ3Jlc3NXaXRoVG90YWxVbml0Q291bnQ6MTAwXTsKLX0KLQotLSAodm9pZClzZXRQ
cm9ncmVzc0luZGljYXRvclN0eWxlOihVSURyb3BTZXNzaW9uUHJvZ3Jlc3NJbmRpY2F0b3JTdHls
ZSlwcm9ncmVzc0luZGljYXRvclN0eWxlCi17Ci19Ci0KLS0gKFVJRHJvcFNlc3Npb25Qcm9ncmVz
c0luZGljYXRvclN0eWxlKXByb2dyZXNzSW5kaWNhdG9yU3R5bGUKLXsKLSAgICByZXR1cm4gVUlE
cm9wU2Vzc2lvblByb2dyZXNzSW5kaWNhdG9yU3R5bGVOb25lOwotfQotCi0tIChOU1VJbnRlZ2Vy
KW9wZXJhdGlvbk1hc2sKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotLSAoaWQgPFVJRHJhZ1Nlc3Np
b24+KWxvY2FsRHJhZ1Nlc3Npb24KLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChCT09MKWhh
c0l0ZW1zQ29uZm9ybWluZ1RvVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopdHlwZUlkZW50aWZp
ZXIKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gTk87Ci19Ci0KLS0g
KEJPT0wpY2FuQ3JlYXRlSXRlbXNPZkNsYXNzOihDbGFzczxVSUl0ZW1Qcm92aWRlclJlYWRpbmc+
KWFDbGFzcwotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBOTzsKLX0K
LQotLSAoTlNQcm9ncmVzcyAqKWxvYWRPYmplY3RzT2ZDbGFzczooQ2xhc3M8TlNJdGVtUHJvdmlk
ZXJSZWFkaW5nPilhQ2xhc3MgY29tcGxldGlvbjoodm9pZCheKShOU0FycmF5PF9fa2luZG9mIGlk
IDxOU0l0ZW1Qcm92aWRlclJlYWRpbmc+PiAqb2JqZWN0cykpY29tcGxldGlvbgotewotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLUBlbmQKLQotQGltcGxl
bWVudGF0aW9uIE1vY2tEcmFnU2Vzc2lvbiB7Ci0gICAgUmV0YWluUHRyPGlkPiBfbG9jYWxDb250
ZXh0OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXaW5kb3c6KFVJV2luZG93ICopd2lu
ZG93IGFsbG93TW92ZTooQk9PTClhbGxvd01vdmUKLXsKLSAgICByZXR1cm4gW3N1cGVyIGluaXRX
aXRoSXRlbXM6QFsgXSBsb2NhdGlvbjpDR1BvaW50WmVybyB3aW5kb3c6d2luZG93IGFsbG93TW92
ZTphbGxvd01vdmVdOwotfQotCi0tIChOU1VJbnRlZ2VyKWxvY2FsT3BlcmF0aW9uTWFzawotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi0tIChOU1VJbnRl
Z2VyKWV4dGVybmFsT3BlcmF0aW9uTWFzawotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiAwOwotfQotCi0tIChpZClzZXNzaW9uCi17Ci0gICAgcmV0dXJuIG5pbDsKLX0K
LQotLSAoaWQpbG9jYWxDb250ZXh0Ci17Ci0gICAgcmV0dXJuIF9sb2NhbENvbnRleHQuZ2V0KCk7
Ci19Ci0KLS0gKHZvaWQpc2V0TG9jYWxDb250ZXh0OihpZClsb2NhbENvbnRleHQKLXsKLSAgICBf
bG9jYWxDb250ZXh0ID0gbG9jYWxDb250ZXh0OwotfQotCi1AZW5kCi0KLXN0YXRpYyBkb3VibGUg
cHJvZ3Jlc3NJbmNyZW1lbnRTdGVwID0gMC4wMzM7Ci1zdGF0aWMgZG91YmxlIHByb2dyZXNzVGlt
ZVN0ZXAgPSAwLjAxNjsKLXN0YXRpYyBOU1N0cmluZyAqVGVzdFdlYktpdEFQSVNpbXVsYXRlQ2Fu
Y2VsQWxsVG91Y2hlc05vdGlmaWNhdGlvbk5hbWUgPSBAIlRlc3RXZWJLaXRBUElTaW11bGF0ZUNh
bmNlbEFsbFRvdWNoZXNOb3RpZmljYXRpb25OYW1lIjsKLQotc3RhdGljIE5TQXJyYXkgKmRhdGFJ
bnRlcmFjdGlvbkV2ZW50TmFtZXMoKQotewotICAgIHN0YXRpYyBOU0FycmF5ICpldmVudE5hbWVz
ID0gbmlsOwotICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOwotICAgIGRpc3Bh
dGNoX29uY2UoJm9uY2VUb2tlbiwgXigpIHsKLSAgICAgICAgZXZlbnROYW1lcyA9IEBbIERhdGFJ
bnRlcmFjdGlvbkVudGVyRXZlbnROYW1lLCBEYXRhSW50ZXJhY3Rpb25PdmVyRXZlbnROYW1lLCBE
YXRhSW50ZXJhY3Rpb25QZXJmb3JtT3BlcmF0aW9uRXZlbnROYW1lLCBEYXRhSW50ZXJhY3Rpb25M
ZWF2ZUV2ZW50TmFtZSwgRGF0YUludGVyYWN0aW9uU3RhcnRFdmVudE5hbWUgXTsKLSAgICB9KTsK
LSAgICByZXR1cm4gZXZlbnROYW1lczsKLX0KLQotQGludGVyZmFjZSBEYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3JBcHBsaWNhdGlvbiA6IFVJQXBwbGljYXRpb24KLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIERhdGFJbnRlcmFjdGlvblNpbXVsYXRvckFwcGxpY2F0aW9uCi0tICh2b2lkKV9jYW5jZWxB
bGxUb3VjaGVzCi17Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBw
b3N0Tm90aWZpY2F0aW9uTmFtZTpUZXN0V2ViS2l0QVBJU2ltdWxhdGVDYW5jZWxBbGxUb3VjaGVz
Tm90aWZpY2F0aW9uTmFtZSBvYmplY3Q6bmlsXTsKLX0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IERhdGFJbnRlcmFjdGlvblNpbXVsYXRvcgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJW
aWV3OihUZXN0V0tXZWJWaWV3ICopd2ViVmlldwotewotICAgIGlmIChzZWxmID0gW3N1cGVyIGlu
aXRdKSB7Ci0gICAgICAgIF93ZWJWaWV3ID0gd2ViVmlldzsKLSAgICAgICAgX3Nob3VsZEVuc3Vy
ZVVJQXBwbGljYXRpb24gPSBOTzsKLSAgICAgICAgX3Nob3VsZEFsbG93TW92ZU9wZXJhdGlvbiA9
IFlFUzsKLSAgICAgICAgX2lzRG9uZVdhaXRpbmdGb3JJbnB1dFNlc3Npb24gPSB0cnVlOwotICAg
ICAgICBbX3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpzZWxmXTsKLSAgICAgICAgW193ZWJWaWV3IF9z
ZXRJbnB1dERlbGVnYXRlOnNlbGZdOwotICAgIH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
dm9pZClkZWFsbG9jCi17Ci0gICAgaWYgKFtfd2ViVmlldyBVSURlbGVnYXRlXSA9PSBzZWxmKQot
ICAgICAgICBbX3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpuaWxdOwotCi0gICAgaWYgKFtfd2ViVmll
dyBfaW5wdXREZWxlZ2F0ZV0gPT0gc2VsZikKLSAgICAgICAgW193ZWJWaWV3IF9zZXRJbnB1dERl
bGVnYXRlOm5pbF07Ci0KLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpX3Jlc2V0
U2ltdWxhdGVkU3RhdGUKLXsKLSAgICBfcGhhc2UgPSBEYXRhSW50ZXJhY3Rpb25CZWdpbm5pbmc7
Ci0gICAgX2N1cnJlbnRQcm9ncmVzcyA9IDA7Ci0gICAgX2lzRG9uZVdpdGhDdXJyZW50UnVuID0g
ZmFsc2U7Ci0gICAgX29ic2VydmVkRXZlbnROYW1lcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdF0pOwotICAgIF9pbnNlcnRlZEF0dGFjaG1lbnRzID0gYWRvcHROUyhbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0gICAgX3JlbW92ZWRBdHRhY2htZW50cyA9IGFk
b3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotICAgIF9maW5hbFNlbGVjdGlv
blJlY3RzID0gQFsgXTsKLSAgICBfZHJhZ1Nlc3Npb24gPSBuaWw7Ci0gICAgX2Ryb3BTZXNzaW9u
ID0gbmlsOwotICAgIF9jdXJyZW50RHJvcFByb3Bvc2FsID0gbmlsOwotICAgIF9sYXN0S25vd25E
cmFnQ2FyZXRSZWN0ID0gQ0dSZWN0WmVybzsKLSAgICBfcmVtYWluaW5nQWRkaXRpb25hbEl0ZW1S
ZXF1ZXN0TG9jYXRpb25zQnlQcm9ncmVzcyA9IG5pbDsKLSAgICBfcXVldWVkQWRkaXRpb25hbEl0
ZW1SZXF1ZXN0TG9jYXRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
XSk7Ci0gICAgX2xpZnRQcmV2aWV3cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOwotfQotCi0tIChOU0FycmF5ICopb2JzZXJ2ZWRFdmVudE5hbWVzCi17Ci0gICAgcmV0
dXJuIF9vYnNlcnZlZEV2ZW50TmFtZXMuZ2V0KCk7Ci19Ci0KLS0gKHZvaWQpc2ltdWxhdGVBbGxU
b3VjaGVzQ2FuY2VsZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgW05T
T2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVj
dG9yOkBzZWxlY3RvcihfYWR2YW5jZVByb2dyZXNzKSBvYmplY3Q6bmlsXTsKLSAgICBfcGhhc2Ug
PSBEYXRhSW50ZXJhY3Rpb25DYW5jZWxsZWQ7Ci0gICAgX2N1cnJlbnRQcm9ncmVzcyA9IDE7Ci0g
ICAgX2lzRG9uZVdpdGhDdXJyZW50UnVuID0gdHJ1ZTsKLSAgICBpZiAoX2RyYWdTZXNzaW9uKQot
ICAgICAgICBbW193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcmFnSW50ZXJhY3Rp
b246W193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbl0gc2Vzc2lvbjpfZHJhZ1Nlc3Npb24uZ2V0KCkg
ZGlkRW5kV2l0aE9wZXJhdGlvbjpVSURyb3BPcGVyYXRpb25DYW5jZWxdOwotfQotCi0tICh2b2lk
KXJ1bkZyb206KENHUG9pbnQpc3RhcnRMb2NhdGlvbiB0bzooQ0dQb2ludCllbmRMb2NhdGlvbgot
ewotICAgIFtzZWxmIHJ1bkZyb206c3RhcnRMb2NhdGlvbiB0bzplbmRMb2NhdGlvbiBhZGRpdGlv
bmFsSXRlbVJlcXVlc3RMb2NhdGlvbnM6bmlsXTsKLX0KLQotLSAodm9pZClydW5Gcm9tOihDR1Bv
aW50KXN0YXJ0TG9jYXRpb24gdG86KENHUG9pbnQpZW5kTG9jYXRpb24gYWRkaXRpb25hbEl0ZW1S
ZXF1ZXN0TG9jYXRpb25zOihQcm9ncmVzc1RvQ0dQb2ludFZhbHVlTWFwKWFkZGl0aW9uYWxJdGVt
UmVxdWVzdExvY2F0aW9ucwotewotICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpkZWZhdWx0Q2Vu
dGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOwotICAgIFtkZWZhdWx0
Q2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHNpbXVsYXRlQWxsVG91
Y2hlc0NhbmNlbGVkOikgbmFtZTpUZXN0V2ViS2l0QVBJU2ltdWxhdGVDYW5jZWxBbGxUb3VjaGVz
Tm90aWZpY2F0aW9uTmFtZSBvYmplY3Q6bmlsXTsKLQotICAgIGlmIChfc2hvdWxkRW5zdXJlVUlB
cHBsaWNhdGlvbikKLSAgICAgICAgVUlBcHBsaWNhdGlvbkluc3RhbnRpYXRlU2luZ2xldG9uKFtE
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3JBcHBsaWNhdGlvbiBjbGFzc10pOwotCi0gICAgW3NlbGYg
X3Jlc2V0U2ltdWxhdGVkU3RhdGVdOwotCi0gICAgaWYgKGFkZGl0aW9uYWxJdGVtUmVxdWVzdExv
Y2F0aW9ucykKLSAgICAgICAgX3JlbWFpbmluZ0FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9u
c0J5UHJvZ3Jlc3MgPSBhZG9wdE5TKFthZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnMgbXV0
YWJsZUNvcHldKTsKLQotICAgIFJldGFpblB0cjxEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3I+IHN0
cm9uZ1NlbGYgPSBzZWxmOwotICAgIGZvciAoTlNTdHJpbmcgKmV2ZW50TmFtZSBpbiBkYXRhSW50
ZXJhY3Rpb25FdmVudE5hbWVzKCkpIHsKLSAgICAgICAgRGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
ICp3ZWFrU2VsZiA9IHN0cm9uZ1NlbGYuZ2V0KCk7Ci0gICAgICAgIFt3ZWFrU2VsZi0+X3dlYlZp
ZXcgcGVyZm9ybUFmdGVyUmVjZWl2aW5nTWVzc2FnZTpldmVudE5hbWUgYWN0aW9uOl4oKSB7Ci0g
ICAgICAgICAgICBbd2Vha1NlbGYtPl9vYnNlcnZlZEV2ZW50TmFtZXMgYWRkT2JqZWN0OmV2ZW50
TmFtZV07Ci0gICAgICAgIH1dOwotICAgIH0KLQotICAgIF9zdGFydExvY2F0aW9uID0gc3RhcnRM
b2NhdGlvbjsKLSAgICBfZW5kTG9jYXRpb24gPSBlbmRMb2NhdGlvbjsKLQotICAgIGlmIChzZWxm
LmV4dGVybmFsSXRlbVByb3ZpZGVycy5jb3VudCkgewotICAgICAgICBfZHJvcFNlc3Npb24gPSBh
ZG9wdE5TKFtbTW9ja0Ryb3BTZXNzaW9uIGFsbG9jXSBpbml0V2l0aFByb3ZpZGVyczpzZWxmLmV4
dGVybmFsSXRlbVByb3ZpZGVycyBsb2NhdGlvbjpfc3RhcnRMb2NhdGlvbiB3aW5kb3c6W193ZWJW
aWV3IHdpbmRvd10gYWxsb3dNb3ZlOnNlbGYuc2hvdWxkQWxsb3dNb3ZlT3BlcmF0aW9uXSk7Ci0g
ICAgICAgIF9waGFzZSA9IERhdGFJbnRlcmFjdGlvbkJlZ2FuOwotICAgICAgICBbc2VsZiBfYWR2
YW5jZVByb2dyZXNzXTsKLSAgICB9IGVsc2UgewotICAgICAgICBfZHJhZ1Nlc3Npb24gPSBhZG9w
dE5TKFtbTW9ja0RyYWdTZXNzaW9uIGFsbG9jXSBpbml0V2l0aFdpbmRvdzpbX3dlYlZpZXcgd2lu
ZG93XSBhbGxvd01vdmU6c2VsZi5zaG91bGRBbGxvd01vdmVPcGVyYXRpb25dKTsKLSAgICAgICAg
W19kcmFnU2Vzc2lvbiBzZXRNb2NrTG9jYXRpb25JbldpbmRvdzpfc3RhcnRMb2NhdGlvbl07Ci0g
ICAgICAgIFsoaWQgPFVJRHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVfRm9yV2ViS2l0T25seT4pW193
ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlXSBfZHJhZ0ludGVyYWN0aW9uOltfd2ViVmll
dyBkcmFnSW50ZXJhY3Rpb25dIHByZXBhcmVGb3JTZXNzaW9uOl9kcmFnU2Vzc2lvbi5nZXQoKSBj
b21wbGV0aW9uOl4oKSB7Ci0gICAgICAgICAgICBEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgKndl
YWtTZWxmID0gc3Ryb25nU2VsZi5nZXQoKTsKLSAgICAgICAgICAgIGlmICh3ZWFrU2VsZi0+X3Bo
YXNlID09IERhdGFJbnRlcmFjdGlvbkNhbmNlbGxlZCkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgICAgIHdlYWtTZWxmLT5fcGhhc2UgPSBEYXRhSW50ZXJhY3Rpb25CZWdpbm5p
bmc7Ci0gICAgICAgICAgICBbd2Vha1NlbGYgX2FkdmFuY2VQcm9ncmVzc107Ci0gICAgICAgIH1d
OwotICAgIH0KLQotICAgIFV0aWw6OnJ1bigmX2lzRG9uZVdpdGhDdXJyZW50UnVuKTsKLSAgICBb
X3dlYlZpZXcgY2xlYXJNZXNzYWdlSGFuZGxlcnM6ZGF0YUludGVyYWN0aW9uRXZlbnROYW1lcygp
XTsKLSAgICBfZmluYWxTZWxlY3Rpb25SZWN0cyA9IFtfd2ViVmlldyBzZWxlY3Rpb25SZWN0c0Fm
dGVyUHJlc2VudGF0aW9uVXBkYXRlXTsKLQotICAgIFtkZWZhdWx0Q2VudGVyIHJlbW92ZU9ic2Vy
dmVyOnNlbGZdOwotfQotCi0tIChOU0FycmF5ICopZmluYWxTZWxlY3Rpb25SZWN0cwotewotICAg
IHJldHVybiBfZmluYWxTZWxlY3Rpb25SZWN0cy5nZXQoKTsKLX0KLQotLSAodm9pZClfY29uY2x1
ZGVEYXRhSW50ZXJhY3Rpb25BbmRQZXJmb3JtT3BlcmF0aW9uSWZOZWNlc3NhcnkKLXsKLSAgICBf
bGFzdEtub3duRHJhZ0NhcmV0UmVjdCA9IFtfd2ViVmlldyBfZHJhZ0NhcmV0UmVjdF07Ci0gICAg
YXV0byBvcGVyYXRpb24gPSBbX2N1cnJlbnREcm9wUHJvcG9zYWwgb3BlcmF0aW9uXTsKLSAgICBp
ZiAob3BlcmF0aW9uICE9IFVJRHJvcE9wZXJhdGlvbkNhbmNlbCAmJiBvcGVyYXRpb24gIT0gVUlE
cm9wT3BlcmF0aW9uRm9yYmlkZGVuKSB7Ci0gICAgICAgIFtbX3dlYlZpZXcgZHJvcEludGVyYWN0
aW9uRGVsZWdhdGVdIGRyb3BJbnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJvcEludGVyYWN0aW9uXSBw
ZXJmb3JtRHJvcDpfZHJvcFNlc3Npb24uZ2V0KCldOwotICAgICAgICBfcGhhc2UgPSBEYXRhSW50
ZXJhY3Rpb25QZXJmb3JtaW5nOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIF9pc0RvbmVXaXRoQ3Vy
cmVudFJ1biA9IFlFUzsKLSAgICAgICAgX3BoYXNlID0gRGF0YUludGVyYWN0aW9uQ2FuY2VsbGVk
OwotICAgIH0KLQotICAgIFtbX3dlYlZpZXcgZHJvcEludGVyYWN0aW9uRGVsZWdhdGVdIGRyb3BJ
bnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJvcEludGVyYWN0aW9uXSBzZXNzaW9uRGlkRW5kOl9kcm9w
U2Vzc2lvbi5nZXQoKV07Ci0KLSAgICBpZiAoX2RyYWdTZXNzaW9uKQotICAgICAgICBbW193ZWJW
aWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcmFnSW50ZXJhY3Rpb246W193ZWJWaWV3IGRy
YWdJbnRlcmFjdGlvbl0gc2Vzc2lvbjpfZHJhZ1Nlc3Npb24uZ2V0KCkgZGlkRW5kV2l0aE9wZXJh
dGlvbjpvcGVyYXRpb25dOwotfQotCi0tICh2b2lkKV9lbnF1ZXVlUGVuZGluZ0FkZGl0aW9uYWxJ
dGVtUmVxdWVzdExvY2F0aW9ucwotewotICAgIE5TTXV0YWJsZUFycmF5ICpwcm9ncmVzc1ZhbHVl
c1RvUmVtb3ZlID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBmb3IgKE5TTnVtYmVyICpw
cm9ncmVzc1ZhbHVlIGluIF9yZW1haW5pbmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnNC
eVByb2dyZXNzLmdldCgpKSB7Ci0gICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IHByb2dyZXNzVmFs
dWUuZG91YmxlVmFsdWU7Ci0gICAgICAgIGlmIChwcm9ncmVzcyA+IF9jdXJyZW50UHJvZ3Jlc3Mp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgW3Byb2dyZXNzVmFsdWVzVG9SZW1vdmUg
YWRkT2JqZWN0OnByb2dyZXNzVmFsdWVdOwotICAgICAgICBbX3F1ZXVlZEFkZGl0aW9uYWxJdGVt
UmVxdWVzdExvY2F0aW9ucyBhZGRPYmplY3Q6W19yZW1haW5pbmdBZGRpdGlvbmFsSXRlbVJlcXVl
c3RMb2NhdGlvbnNCeVByb2dyZXNzIG9iamVjdEZvcktleTpwcm9ncmVzc1ZhbHVlXV07Ci0gICAg
fQotCi0gICAgZm9yIChOU051bWJlciAqcHJvZ3Jlc3NUb1JlbW92ZSBpbiBwcm9ncmVzc1ZhbHVl
c1RvUmVtb3ZlKQotICAgICAgICBbX3JlbWFpbmluZ0FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0
aW9uc0J5UHJvZ3Jlc3MgcmVtb3ZlT2JqZWN0Rm9yS2V5OnByb2dyZXNzVG9SZW1vdmVdOwotfQot
Ci0tIChCT09MKV9zZW5kUXVldWVkQWRkaXRpb25hbEl0ZW1SZXF1ZXN0Ci17Ci0gICAgaWYgKCFb
X3F1ZXVlZEFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9ucyBjb3VudF0pCi0gICAgICAgIHJl
dHVybiBOTzsKLQotICAgIFJldGFpblB0cjxOU1ZhbHVlPiByZXF1ZXN0TG9jYXRpb25WYWx1ZSA9
IFtfcXVldWVkQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zIG9iamVjdEF0SW5kZXg6MF07
Ci0gICAgW19xdWV1ZWRBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnMgcmVtb3ZlT2JqZWN0
QXRJbmRleDowXTsKLQotICAgIGF1dG8gcmVxdWVzdExvY2F0aW9uID0gW1tfd2ViVmlldyB3aW5k
b3ddIGNvbnZlcnRQb2ludDpbcmVxdWVzdExvY2F0aW9uVmFsdWUgQ0dQb2ludFZhbHVlXSB0b1Zp
ZXc6X3dlYlZpZXcuZ2V0KCldOwotICAgIFsoaWQgPFVJRHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVf
UHJvcG9zZWRfU1BJXzMzMTQ2ODAzPilbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVd
IF9kcmFnSW50ZXJhY3Rpb246W193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbl0gaXRlbXNGb3JBZGRp
bmdUb1Nlc3Npb246X2RyYWdTZXNzaW9uLmdldCgpIHdpdGhUb3VjaEF0UG9pbnQ6cmVxdWVzdExv
Y2F0aW9uIGNvbXBsZXRpb246W2RyYWdTZXNzaW9uID0gX2RyYWdTZXNzaW9uLCBkcm9wU2Vzc2lv
biA9IF9kcm9wU2Vzc2lvbl0gKE5TQXJyYXkgKml0ZW1zKSB7Ci0gICAgICAgIFtkcmFnU2Vzc2lv
biBhZGRJdGVtczppdGVtc107Ci0gICAgICAgIFtkcm9wU2Vzc2lvbiBhZGRJdGVtczppdGVtc107
Ci0gICAgfV07Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAodm9pZClfYWR2YW5jZVByb2dyZXNz
Ci17Ci0gICAgW3NlbGYgX2VucXVldWVQZW5kaW5nQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRp
b25zXTsKLSAgICBpZiAoW3NlbGYgX3NlbmRRdWV1ZWRBZGRpdGlvbmFsSXRlbVJlcXVlc3RdKSB7
Ci0gICAgICAgIFtzZWxmIF9zY2hlZHVsZUFkdmFuY2VQcm9ncmVzc107Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBfbGFzdEtub3duRHJhZ0NhcmV0UmVjdCA9IFtfd2ViVmlldyBfZHJh
Z0NhcmV0UmVjdF07Ci0gICAgX2N1cnJlbnRQcm9ncmVzcyArPSBwcm9ncmVzc0luY3JlbWVudFN0
ZXA7Ci0gICAgQ0dQb2ludCBsb2NhdGlvbkluV2luZG93ID0gc2VsZi5fY3VycmVudExvY2F0aW9u
OwotICAgIFtfZHJhZ1Nlc3Npb24gc2V0TW9ja0xvY2F0aW9uSW5XaW5kb3c6bG9jYXRpb25Jbldp
bmRvd107Ci0gICAgW19kcm9wU2Vzc2lvbiBzZXRNb2NrTG9jYXRpb25JbldpbmRvdzpsb2NhdGlv
bkluV2luZG93XTsKLQotICAgIGlmIChfY3VycmVudFByb2dyZXNzID49IDEpIHsKLSAgICAgICAg
X2N1cnJlbnRQcm9ncmVzcyA9IDE7Ci0gICAgICAgIFtzZWxmIF9jb25jbHVkZURhdGFJbnRlcmFj
dGlvbkFuZFBlcmZvcm1PcGVyYXRpb25JZk5lY2Vzc2FyeV07Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBzd2l0Y2ggKF9waGFzZSkgewotICAgIGNhc2UgRGF0YUludGVyYWN0aW9uQmVn
aW5uaW5nOiB7Ci0gICAgICAgIE5TTXV0YWJsZUFycmF5PFVJSXRlbVByb3ZpZGVyICo+ICppdGVt
UHJvdmlkZXJzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICAgICAgTlNBcnJheSAqaXRl
bXMgPSBbW193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcmFnSW50ZXJhY3Rpb246
W193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbl0gaXRlbXNGb3JCZWdpbm5pbmdTZXNzaW9uOl9kcmFn
U2Vzc2lvbi5nZXQoKV07Ci0gICAgICAgIGlmICghaXRlbXMuY291bnQpIHsKLSAgICAgICAgICAg
IF9waGFzZSA9IERhdGFJbnRlcmFjdGlvbkNhbmNlbGxlZDsKLSAgICAgICAgICAgIF9jdXJyZW50
UHJvZ3Jlc3MgPSAxOwotICAgICAgICAgICAgX2lzRG9uZVdpdGhDdXJyZW50UnVuID0gdHJ1ZTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoVUlEcmFnSXRl
bSAqaXRlbSBpbiBpdGVtcykgewotICAgICAgICAgICAgW2l0ZW1Qcm92aWRlcnMgYWRkT2JqZWN0
Oml0ZW0uaXRlbVByb3ZpZGVyXTsKLSAgICAgICAgICAgIFVJVGFyZ2V0ZWREcmFnUHJldmlldyAq
bGlmdFByZXZpZXcgPSBbW193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcmFnSW50
ZXJhY3Rpb246W193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbl0gcHJldmlld0ZvckxpZnRpbmdJdGVt
Oml0ZW0gc2Vzc2lvbjpfZHJhZ1Nlc3Npb24uZ2V0KCldOwotICAgICAgICAgICAgRVhQRUNUX1RS
VUUoISFsaWZ0UHJldmlldyk7Ci0gICAgICAgICAgICBpZiAobGlmdFByZXZpZXcpCi0gICAgICAg
ICAgICAgICAgW19saWZ0UHJldmlld3MgYWRkT2JqZWN0OmxpZnRQcmV2aWV3XTsKLSAgICAgICAg
fQotCi0gICAgICAgIF9kcm9wU2Vzc2lvbiA9IGFkb3B0TlMoW1tNb2NrRHJvcFNlc3Npb24gYWxs
b2NdIGluaXRXaXRoUHJvdmlkZXJzOml0ZW1Qcm92aWRlcnMgbG9jYXRpb246c2VsZi5fY3VycmVu
dExvY2F0aW9uIHdpbmRvdzpbX3dlYlZpZXcgd2luZG93XSBhbGxvd01vdmU6c2VsZi5zaG91bGRB
bGxvd01vdmVPcGVyYXRpb25dKTsKLSAgICAgICAgW19kcmFnU2Vzc2lvbiBzZXRJdGVtczppdGVt
c107Ci0gICAgICAgIF9zb3VyY2VJdGVtUHJvdmlkZXJzID0gaXRlbVByb3ZpZGVyczsKLSAgICAg
ICAgaWYgKHNlbGYuc2hvd0N1c3RvbUFjdGlvblNoZWV0QmxvY2spIHsKLSAgICAgICAgICAgIC8v
IERlZmVyIHByb2dyZXNzIHVudGlsIHRoZSBjdXN0b20gYWN0aW9uIHNoZWV0IGlzIGRpc21pc3Nl
ZC4KLSAgICAgICAgICAgIGF1dG8gc3RhcnRMb2NhdGlvbkluVmlldyA9IFtbX3dlYlZpZXcgd2lu
ZG93XSBjb252ZXJ0UG9pbnQ6X3N0YXJ0TG9jYXRpb24gdG9WaWV3Ol93ZWJWaWV3LmdldCgpXTsK
LSAgICAgICAgICAgIFtfd2ViVmlldyBfc2ltdWxhdGVMb25nUHJlc3NBY3Rpb25BdExvY2F0aW9u
OnN0YXJ0TG9jYXRpb25JblZpZXddOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgW1tfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJhZ0ludGVyYWN0
aW9uOltfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25dIHNlc3Npb25XaWxsQmVnaW46X2RyYWdTZXNz
aW9uLmdldCgpXTsKLQotICAgICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiByZXRhaW5lZFdlYlZp
ZXcgPSBfd2ViVmlldzsKLSAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgXigpIHsKLSAgICAgICAgICAgIFtyZXRhaW5lZFdlYlZpZXcgcmVzaWduRmlyc3RS
ZXNwb25kZXJdOwotICAgICAgICB9KTsKLQotICAgICAgICBfcGhhc2UgPSBEYXRhSW50ZXJhY3Rp
b25CZWdhbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRGF0YUludGVyYWN0aW9u
QmVnYW46Ci0gICAgICAgIFtbX3dlYlZpZXcgZHJvcEludGVyYWN0aW9uRGVsZWdhdGVdIGRyb3BJ
bnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJvcEludGVyYWN0aW9uXSBzZXNzaW9uRGlkRW50ZXI6X2Ry
b3BTZXNzaW9uLmdldCgpXTsKLSAgICAgICAgX3BoYXNlID0gRGF0YUludGVyYWN0aW9uRW50ZXJl
ZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEYXRhSW50ZXJhY3Rpb25FbnRlcmVkOiB7Ci0g
ICAgICAgIF9jdXJyZW50RHJvcFByb3Bvc2FsID0gW1tfd2ViVmlldyBkcm9wSW50ZXJhY3Rpb25E
ZWxlZ2F0ZV0gZHJvcEludGVyYWN0aW9uOltfd2ViVmlldyBkcm9wSW50ZXJhY3Rpb25dIHNlc3Np
b25EaWRVcGRhdGU6X2Ryb3BTZXNzaW9uLmdldCgpXTsKLSAgICAgICAgaWYgKCFbc2VsZiBzaG91
bGRBbGxvd01vdmVPcGVyYXRpb25dICYmIFtfY3VycmVudERyb3BQcm9wb3NhbCBvcGVyYXRpb25d
ID09IFVJRHJvcE9wZXJhdGlvbk1vdmUpCi0gICAgICAgICAgICBfY3VycmVudERyb3BQcm9wb3Nh
bCA9IGFkb3B0TlMoW1tVSURyb3BQcm9wb3NhbCBhbGxvY10gaW5pdFdpdGhEcm9wT3BlcmF0aW9u
OlVJRHJvcE9wZXJhdGlvbkNhbmNlbF0pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgW3NlbGYgX3NjaGVkdWxlQWR2YW5j
ZVByb2dyZXNzXTsKLX0KLQotLSAoQ0dQb2ludClfY3VycmVudExvY2F0aW9uCi17Ci0gICAgQ0dG
bG9hdCBkaXN0YW5jZVggPSBfZW5kTG9jYXRpb24ueCAtIF9zdGFydExvY2F0aW9uLng7Ci0gICAg
Q0dGbG9hdCBkaXN0YW5jZVkgPSBfZW5kTG9jYXRpb24ueSAtIF9zdGFydExvY2F0aW9uLnk7Ci0g
ICAgcmV0dXJuIENHUG9pbnRNYWtlKF9zdGFydExvY2F0aW9uLnggKyBfY3VycmVudFByb2dyZXNz
ICogZGlzdGFuY2VYLCBfc3RhcnRMb2NhdGlvbi55ICsgX2N1cnJlbnRQcm9ncmVzcyAqIGRpc3Rh
bmNlWSk7Ci19Ci0KLS0gKHZvaWQpX3NjaGVkdWxlQWR2YW5jZVByb2dyZXNzCi17Ci0gICAgW05T
T2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVj
dG9yOkBzZWxlY3RvcihfYWR2YW5jZVByb2dyZXNzKSBvYmplY3Q6bmlsXTsKLSAgICBbc2VsZiBw
ZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKF9hZHZhbmNlUHJvZ3Jlc3MpIHdpdGhPYmplY3Q6bmls
IGFmdGVyRGVsYXk6cHJvZ3Jlc3NUaW1lU3RlcF07Ci19Ci0KLS0gKE5TQXJyYXkgKilzb3VyY2VJ
dGVtUHJvdmlkZXJzCi17Ci0gICAgcmV0dXJuIF9zb3VyY2VJdGVtUHJvdmlkZXJzLmdldCgpOwot
fQotCi0tIChOU0FycmF5ICopZXh0ZXJuYWxJdGVtUHJvdmlkZXJzCi17Ci0gICAgcmV0dXJuIF9l
eHRlcm5hbEl0ZW1Qcm92aWRlcnMuZ2V0KCk7Ci19Ci0KLS0gKHZvaWQpc2V0RXh0ZXJuYWxJdGVt
UHJvdmlkZXJzOihOU0FycmF5ICopZXh0ZXJuYWxJdGVtUHJvdmlkZXJzCi17Ci0gICAgX2V4dGVy
bmFsSXRlbVByb3ZpZGVycyA9IGFkb3B0TlMoW2V4dGVybmFsSXRlbVByb3ZpZGVycyBjb3B5XSk7
Ci19Ci0KLS0gKERhdGFJbnRlcmFjdGlvblBoYXNlKXBoYXNlCi17Ci0gICAgcmV0dXJuIF9waGFz
ZTsKLX0KLQotLSAoTlNBcnJheTxVSVRhcmdldGVkRHJhZ1ByZXZpZXcgKj4gKilsaWZ0UHJldmll
d3MKLXsKLSAgICByZXR1cm4gX2xpZnRQcmV2aWV3cy5nZXQoKTsKLX0KLQotLSAoQ0dSZWN0KWxh
c3RLbm93bkRyYWdDYXJldFJlY3QKLXsKLSAgICByZXR1cm4gX2xhc3RLbm93bkRyYWdDYXJldFJl
Y3Q7Ci19Ci0KLS0gKHZvaWQpd2FpdEZvcklucHV0U2Vzc2lvbgotewotICAgIF9pc0RvbmVXYWl0
aW5nRm9ySW5wdXRTZXNzaW9uID0gZmFsc2U7Ci0KLSAgICAvLyBXYWl0aW5nIGZvciBhbiBpbnB1
dCBzZXNzaW9uIGltcGxpZXMgdGhhdCB3ZSBzaG91bGQgYWxsb3cgaW5wdXQgc2Vzc2lvbnMgdG8g
YmVnaW4uCi0gICAgc2VsZi5hbGxvd3NGb2N1c1RvU3RhcnRJbnB1dFNlc3Npb24gPSBZRVM7Ci0K
LSAgICBVdGlsOjpydW4oJl9pc0RvbmVXYWl0aW5nRm9ySW5wdXRTZXNzaW9uKTsKLX0KLQotLSAo
TlNBcnJheTxfV0tBdHRhY2htZW50ICo+ICopaW5zZXJ0ZWRBdHRhY2htZW50cwotewotICAgIHJl
dHVybiBfaW5zZXJ0ZWRBdHRhY2htZW50cy5nZXQoKTsKLX0KLQotLSAoTlNBcnJheTxfV0tBdHRh
Y2htZW50ICo+ICopcmVtb3ZlZEF0dGFjaG1lbnRzCi17Ci0gICAgcmV0dXJuIF9yZW1vdmVkQXR0
YWNobWVudHMuZ2V0KCk7Ci19Ci0KLS0gKHZvaWQpZW5kRGF0YVRyYW5zZmVyCi17Ci0gICAgW1tf
d2ViVmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJhZ0ludGVyYWN0aW9uOltfd2ViVmll
dyBkcmFnSW50ZXJhY3Rpb25dIHNlc3Npb25EaWRUcmFuc2Zlckl0ZW1zOl9kcmFnU2Vzc2lvbi5n
ZXQoKV07Ci19Ci0KLSNwcmFnbWEgbWFyayAtIFdLVUlEZWxlZ2F0ZVByaXZhdGUKLQotLSAodm9p
ZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25X
YXNIYW5kbGVkOihCT09MKWhhbmRsZWQgZm9yU2Vzc2lvbjooaWQpc2Vzc2lvbiBpdGVtUHJvdmlk
ZXJzOihOU0FycmF5PFVJSXRlbVByb3ZpZGVyICo+ICopaXRlbVByb3ZpZGVycwotewotICAgIF9p
c0RvbmVXaXRoQ3VycmVudFJ1biA9IHRydWU7Ci0KLSAgICBpZiAoc2VsZi5kYXRhSW50ZXJhY3Rp
b25PcGVyYXRpb25Db21wbGV0aW9uQmxvY2spCi0gICAgICAgIHNlbGYuZGF0YUludGVyYWN0aW9u
T3BlcmF0aW9uQ29tcGxldGlvbkJsb2NrKGhhbmRsZWQsIGl0ZW1Qcm92aWRlcnMpOwotfQotCi0t
IChOU1VJbnRlZ2VyKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxVcGRhdGVEYXRh
SW50ZXJhY3Rpb25PcGVyYXRpb25Ub09wZXJhdGlvbjooTlNVSW50ZWdlcilvcGVyYXRpb24gZm9y
U2Vzc2lvbjooaWQpc2Vzc2lvbgotewotICAgIHJldHVybiBzZWxmLm92ZXJyaWRlRGF0YUludGVy
YWN0aW9uT3BlcmF0aW9uQmxvY2sgPyBzZWxmLm92ZXJyaWRlRGF0YUludGVyYWN0aW9uT3BlcmF0
aW9uQmxvY2sob3BlcmF0aW9uLCBzZXNzaW9uKSA6IG9wZXJhdGlvbjsKLX0KLQotLSAoTlNBcnJh
eSAqKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGFkanVzdGVkRGF0YUludGVyYWN0aW9u
SXRlbVByb3ZpZGVyc0Zvckl0ZW1Qcm92aWRlcjooVUlJdGVtUHJvdmlkZXIgKilpdGVtUHJvdmlk
ZXIgcmVwcmVzZW50aW5nT2JqZWN0czooTlNBcnJheSAqKXJlcHJlc2VudGluZ09iamVjdHMgYWRk
aXRpb25hbERhdGE6KE5TRGljdGlvbmFyeSAqKWFkZGl0aW9uYWxEYXRhCi17Ci0gICAgcmV0dXJu
IHNlbGYuY29udmVydEl0ZW1Qcm92aWRlcnNCbG9jayA/IHNlbGYuY29udmVydEl0ZW1Qcm92aWRl
cnNCbG9jayhpdGVtUHJvdmlkZXIsIHJlcHJlc2VudGluZ09iamVjdHMsIGFkZGl0aW9uYWxEYXRh
KSA6IEBbIGl0ZW1Qcm92aWRlciBdOwotfQotCi0tIChCT09MKV93ZWJWaWV3OihXS1dlYlZpZXcg
Kil3ZWJWaWV3IHNob3dDdXN0b21TaGVldEZvckVsZW1lbnQ6KF9XS0FjdGl2YXRlZEVsZW1lbnRJ
bmZvICopZWxlbWVudAotewotICAgIGlmICghc2VsZi5zaG93Q3VzdG9tQWN0aW9uU2hlZXRCbG9j
aykKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAgUmV0YWluUHRyPERhdGFJbnRlcmFjdGlvblNp
bXVsYXRvcj4gc3Ryb25nU2VsZiA9IHNlbGY7Ci0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgXigpIHsKLSAgICAgICAgRGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
ICp3ZWFrU2VsZiA9IHN0cm9uZ1NlbGYuZ2V0KCk7Ci0gICAgICAgIFtbd2Vha1NlbGYtPl93ZWJW
aWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcmFnSW50ZXJhY3Rpb246W3dlYWtTZWxmLT5f
d2ViVmlldyBkcmFnSW50ZXJhY3Rpb25dIHNlc3Npb25XaWxsQmVnaW46d2Vha1NlbGYtPl9kcmFn
U2Vzc2lvbi5nZXQoKV07Ci0gICAgICAgIHdlYWtTZWxmLT5fcGhhc2UgPSBEYXRhSW50ZXJhY3Rp
b25CZWdhbjsKLSAgICAgICAgW3dlYWtTZWxmIF9zY2hlZHVsZUFkdmFuY2VQcm9ncmVzc107Ci0g
ICAgfSk7Ci0KLSAgICByZXR1cm4gc2VsZi5zaG93Q3VzdG9tQWN0aW9uU2hlZXRCbG9jayhlbGVt
ZW50KTsKLX0KLQotLSAoTlNBcnJheTxVSURyYWdJdGVtICo+ICopX3dlYlZpZXc6KFdLV2ViVmll
dyAqKXdlYlZpZXcgd2lsbFBlcmZvcm1Ecm9wV2l0aFNlc3Npb246KGlkIDxVSURyb3BTZXNzaW9u
PilzZXNzaW9uCi17Ci0gICAgcmV0dXJuIHNlbGYub3ZlcnJpZGVQZXJmb3JtRHJvcEJsb2NrID8g
c2VsZi5vdmVycmlkZVBlcmZvcm1Ecm9wQmxvY2soc2Vzc2lvbikgOiBzZXNzaW9uLml0ZW1zOwot
fQotCi0tICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEluc2VydEF0dGFj
aG1lbnQ6KF9XS0F0dGFjaG1lbnQgKilhdHRhY2htZW50Ci17Ci0gICAgW19pbnNlcnRlZEF0dGFj
aG1lbnRzIGFkZE9iamVjdDphdHRhY2htZW50XTsKLX0KLQotLSAodm9pZClfd2ViVmlldzooV0tX
ZWJWaWV3ICopd2ViVmlldyBkaWRSZW1vdmVBdHRhY2htZW50OihfV0tBdHRhY2htZW50ICopYXR0
YWNobWVudAotewotICAgIFtfcmVtb3ZlZEF0dGFjaG1lbnRzIGFkZE9iamVjdDphdHRhY2htZW50
XTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gX1dLSW5wdXREZWxlZ2F0ZQotCi0tIChCT09MKV93ZWJW
aWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGZvY3VzU2hvdWxkU3RhcnRJbnB1dFNlc3Npb246KGlk
IDxfV0tGb2N1c2VkRWxlbWVudEluZm8+KWluZm8KLXsKLSAgICByZXR1cm4gX2FsbG93c0ZvY3Vz
VG9TdGFydElucHV0U2Vzc2lvbjsKLX0KLQotLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICop
d2ViVmlldyBkaWRTdGFydElucHV0U2Vzc2lvbjooaWQgPF9XS0Zvcm1JbnB1dFNlc3Npb24+KWlu
cHV0U2Vzc2lvbgotewotICAgIF9pc0RvbmVXYWl0aW5nRm9ySW5wdXRTZXNzaW9uID0gdHJ1ZTsK
LX0KLQotQGVuZAotCi0jZW5kaWYgLy8gRU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EcmFnZ2luZ1NpbXVsYXRvcklPUy5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RyYWdnaW5nU2ltdWxhdG9ySU9TLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY2NjZiZDcwM2Q1OTU0ZDJkMWI5M2E0MGM5NDNlNjE2NDM3YjljMGYKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EcmFnZ2luZ1NpbXVsYXRvcklPUy5tbQpAQCAt
MCwwICsxLDY4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJEcmFnZ2luZ1NpbXVsYXRvci5oIgorCisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkgJiYgUExB
VEZPUk0oSU9TKQorCisjaW1wb3J0ICJJbnN0YW5jZU1ldGhvZFN3aXp6bGVyLmgiCisjaW1wb3J0
ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVUlLaXRTUEkuaCIKKworI2ltcG9ydCA8
VUlLaXQvVUlEcmFnSW50ZXJhY3Rpb24uaD4KKyNpbXBvcnQgPFVJS2l0L1VJRHJhZ0l0ZW0uaD4K
KyNpbXBvcnQgPFVJS2l0L1VJSW50ZXJhY3Rpb24uaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZp
ZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLRm9jdXNlZEVsZW1lbnRJbmZvLmg+Cisj
aW1wb3J0IDxXZWJLaXQvX1dLRm9ybUlucHV0U2Vzc2lvbi5oPgorI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgorI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CisKK1NPRlRfTElOS19GUkFNRVdP
UksoVUlLaXQpCitTT0ZUX0xJTksoVUlLaXQsIFVJQXBwbGljYXRpb25JbnN0YW50aWF0ZVNpbmds
ZXRvbiwgdm9pZCwgKENsYXNzIHNpbmdsZXRvbkNsYXNzKSwgKHNpbmdsZXRvbkNsYXNzKSkKKwor
dXNpbmcgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEk7CisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZp
ZXcgKERyYWdBbmREcm9wVGVzdGluZykKKworLSAoVUlWaWV3ICopX2RyYWdEcm9wSW50ZXJhY3Rp
b25WaWV3Cit7CisgICAgcmV0dXJuIFtzZWxmIHZhbHVlRm9yS2V5OkAiX2N1cnJlbnRDb250ZW50
VmlldyJdOworfQorCistIChpZCA8VUlEcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZT4pZHJvcEludGVy
YWN0aW9uRGVsZWdhdGUKK3sKKyAgICByZXR1cm4gKGlkIDxVSURyb3BJbnRlcmFjdGlvbkRlbGVn
YXRlPilzZWxmLl9kcmFnRHJvcEludGVyYWN0aW9uVmlldzsKK30KKworLSAoaWQgPFVJRHJhZ0lu
dGVyYWN0aW9uRGVsZWdhdGU+KWRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlCit7CisgICAgcmV0dXJu
IChpZCA8VUlEcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZT4pc2VsZi5fZHJhZ0Ryb3BJbnRlcmFjdGlv
blZpZXc7Cit9CisKKy0gKFVJRHJvcEludGVyYWN0aW9uICopZHJvcEludGVyYWN0aW9uCit7Cisg
ICAgVUlWaWV3ICppbnRlcmFjdGlvblZpZXcgPSBzZWxmLl9kcmFnRHJvcEludGVyYWN0aW9uVmll
dzsKKyAgICBmb3IgKGlkIDxVSUludGVyYWN0aW9uPiBpbnRlcmFjdGlvbiBpbiBpbnRlcmFjdGlv
blZpZXcuaW50ZXJhY3Rpb25zKSB7CisgICAgICAgIGlmIChbaW50ZXJhY3Rpb24gaXNLaW5kT2ZD
bGFzczpbVUlEcm9wSW50ZXJhY3Rpb24gY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVybiAoVUlE
cm9wSW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIG5pbDsKK30K
KworLSAoVUlEcmFnSW50ZXJhY3Rpb24gKilkcmFnSW50ZXJhY3Rpb24KK3sKKyAgICBVSVZpZXcg
KmludGVyYWN0aW9uVmlldyA9IHNlbGYuX2RyYWdEcm9wSW50ZXJhY3Rpb25WaWV3OworICAgIGZv
ciAoaWQgPFVJSW50ZXJhY3Rpb24+IGludGVyYWN0aW9uIGluIGludGVyYWN0aW9uVmlldy5pbnRl
cmFjdGlvbnMpIHsKKyAgICAgICAgaWYgKFtpbnRlcmFjdGlvbiBpc0tpbmRPZkNsYXNzOltVSURy
YWdJbnRlcmFjdGlvbiBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIChVSURyYWdJbnRlcmFj
dGlvbiAqKWludGVyYWN0aW9uOworICAgIH0KKyAgICByZXR1cm4gbmlsOworfQorCitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBNb2NrRHJhZ0Ryb3BTZXNzaW9uCisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aEl0ZW1zOihOU0FycmF5IDxVSURyYWdJdGVtICo+KilpdGVtcyBsb2NhdGlvbjooQ0dQ
b2ludClsb2NhdGlvbkluV2luZG93IHdpbmRvdzooVUlXaW5kb3cgKil3aW5kb3cgYWxsb3dNb3Zl
OihCT09MKWFsbG93TW92ZQoreworICAgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAg
ICAgIF9tb2NrSXRlbXMgPSBpdGVtczsKKyAgICAgICAgX21vY2tMb2NhdGlvbkluV2luZG93ID0g
bG9jYXRpb25JbldpbmRvdzsKKyAgICAgICAgX3dpbmRvdyA9IHdpbmRvdzsKKyAgICAgICAgX2Fs
bG93TW92ZSA9IGFsbG93TW92ZTsKKyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKEJP
T0wpYWxsb3dzTW92ZU9wZXJhdGlvbgoreworICAgIHJldHVybiBfYWxsb3dNb3ZlOworfQorCist
IChCT09MKWlzUmVzdHJpY3RlZFRvRHJhZ2dpbmdBcHBsaWNhdGlvbgoreworICAgIHJldHVybiBO
TzsKK30KKworLSAoQk9PTCloYXNJdGVtc0NvbmZvcm1pbmdUb1R5cGVJZGVudGlmaWVyczooTlNB
cnJheTxOU1N0cmluZyAqPiAqKXR5cGVJZGVudGlmaWVycworeworICAgIGZvciAoTlNTdHJpbmcg
KnR5cGVJZGVudGlmaWVyIGluIHR5cGVJZGVudGlmaWVycykgeworICAgICAgICBCT09MIGhhc0l0
ZW1Db25mb3JtaW5nVG9UeXBlID0gTk87CisgICAgICAgIGZvciAoVUlEcmFnSXRlbSAqaXRlbSBp
biBzZWxmLml0ZW1zKQorICAgICAgICAgICAgaGFzSXRlbUNvbmZvcm1pbmdUb1R5cGUgfD0gW1tp
dGVtLml0ZW1Qcm92aWRlciByZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzXSBjb250YWluc09iamVj
dDp0eXBlSWRlbnRpZmllcl07CisgICAgICAgIGlmICghaGFzSXRlbUNvbmZvcm1pbmdUb1R5cGUp
CisgICAgICAgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIHJldHVybiBZRVM7Cit9CisKKy0g
KEJPT0wpY2FuTG9hZE9iamVjdHNPZkNsYXNzOihDbGFzczxVSUl0ZW1Qcm92aWRlclJlYWRpbmc+
KWFDbGFzcworeworICAgIGZvciAoVUlEcmFnSXRlbSAqaXRlbSBpbiBzZWxmLml0ZW1zKSB7Cisg
ICAgICAgIGlmIChbaXRlbS5pdGVtUHJvdmlkZXIgY2FuTG9hZE9iamVjdE9mQ2xhc3M6YUNsYXNz
XSkKKyAgICAgICAgICAgIHJldHVybiBZRVM7CisgICAgfQorICAgIHJldHVybiBOTzsKK30KKwor
LSAoQk9PTCljYW5Mb2FkT2JqZWN0c09mQ2xhc3NlczooTlNBcnJheTxDbGFzczxVSUl0ZW1Qcm92
aWRlclJlYWRpbmc+PiAqKWNsYXNzZXMKK3sKKyAgICBmb3IgKENsYXNzPFVJSXRlbVByb3ZpZGVy
UmVhZGluZz4gYUNsYXNzIGluIGNsYXNzZXMpIHsKKyAgICAgICAgQk9PTCBjYW5Mb2FkID0gTk87
CisgICAgICAgIGZvciAoVUlEcmFnSXRlbSAqaXRlbSBpbiBzZWxmLml0ZW1zKQorICAgICAgICAg
ICAgY2FuTG9hZCB8PSBbaXRlbS5pdGVtUHJvdmlkZXIgY2FuTG9hZE9iamVjdE9mQ2xhc3M6YUNs
YXNzXTsKKyAgICAgICAgaWYgKCFjYW5Mb2FkKQorICAgICAgICAgICAgcmV0dXJuIE5POworICAg
IH0KKyAgICByZXR1cm4gWUVTOworfQorCistIChOU0FycmF5PFVJRHJhZ0l0ZW0gKj4gKilpdGVt
cworeworICAgIHJldHVybiBfbW9ja0l0ZW1zLmdldCgpOworfQorCistICh2b2lkKXNldEl0ZW1z
OihOU0FycmF5PFVJRHJhZ0l0ZW0gKj4gKilpdGVtcworeworICAgIF9tb2NrSXRlbXMgPSBpdGVt
czsKK30KKworLSAodm9pZClhZGRJdGVtczooTlNBcnJheTxVSURyYWdJdGVtICo+ICopaXRlbXMK
K3sKKyAgICBpZiAoIVtpdGVtcyBjb3VudF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
W19tb2NrSXRlbXMgY291bnRdKQorICAgICAgICBfbW9ja0l0ZW1zID0gaXRlbXM7CisgICAgZWxz
ZQorICAgICAgICBfbW9ja0l0ZW1zID0gW19tb2NrSXRlbXMgYXJyYXlCeUFkZGluZ09iamVjdHNG
cm9tQXJyYXk6aXRlbXNdOworfQorCistIChDR1BvaW50KWxvY2F0aW9uSW5WaWV3OihVSVZpZXcg
Kil2aWV3Cit7CisgICAgcmV0dXJuIFtfd2luZG93IGNvbnZlcnRQb2ludDpfbW9ja0xvY2F0aW9u
SW5XaW5kb3cgdG9WaWV3OnZpZXddOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBNb2Nr
RHJvcFNlc3Npb24KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdmlkZXJzOihOU0FycmF5
PFVJSXRlbVByb3ZpZGVyICo+ICopcHJvdmlkZXJzIGxvY2F0aW9uOihDR1BvaW50KWxvY2F0aW9u
SW5XaW5kb3cgd2luZG93OihVSVdpbmRvdyAqKXdpbmRvdyBhbGxvd01vdmU6KEJPT0wpYWxsb3dN
b3ZlCit7CisgICAgYXV0byBpdGVtcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOworICAgIGZvciAoVUlJdGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciBpbiBwcm92aWRl
cnMpCisgICAgICAgIFtpdGVtcyBhZGRPYmplY3Q6W1tbVUlEcmFnSXRlbSBhbGxvY10gaW5pdFdp
dGhJdGVtUHJvdmlkZXI6aXRlbVByb3ZpZGVyXSBhdXRvcmVsZWFzZV1dOworCisgICAgcmV0dXJu
IFtzdXBlciBpbml0V2l0aEl0ZW1zOml0ZW1zLmdldCgpIGxvY2F0aW9uOmxvY2F0aW9uSW5XaW5k
b3cgd2luZG93OndpbmRvdyBhbGxvd01vdmU6YWxsb3dNb3ZlXTsKK30KKworLSAoQk9PTClpc0xv
Y2FsCit7CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoTlNQcm9ncmVzcyAqKXByb2dyZXNzCit7
CisgICAgcmV0dXJuIFtOU1Byb2dyZXNzIGRpc2NyZXRlUHJvZ3Jlc3NXaXRoVG90YWxVbml0Q291
bnQ6MTAwXTsKK30KKworLSAodm9pZClzZXRQcm9ncmVzc0luZGljYXRvclN0eWxlOihVSURyb3BT
ZXNzaW9uUHJvZ3Jlc3NJbmRpY2F0b3JTdHlsZSlwcm9ncmVzc0luZGljYXRvclN0eWxlCit7Cit9
CisKKy0gKFVJRHJvcFNlc3Npb25Qcm9ncmVzc0luZGljYXRvclN0eWxlKXByb2dyZXNzSW5kaWNh
dG9yU3R5bGUKK3sKKyAgICByZXR1cm4gVUlEcm9wU2Vzc2lvblByb2dyZXNzSW5kaWNhdG9yU3R5
bGVOb25lOworfQorCistIChOU1VJbnRlZ2VyKW9wZXJhdGlvbk1hc2sKK3sKKyAgICByZXR1cm4g
MDsKK30KKworLSAoaWQgPFVJRHJhZ1Nlc3Npb24+KWxvY2FsRHJhZ1Nlc3Npb24KK3sKKyAgICBy
ZXR1cm4gbmlsOworfQorCistIChCT09MKWhhc0l0ZW1zQ29uZm9ybWluZ1RvVHlwZUlkZW50aWZp
ZXI6KE5TU3RyaW5nICopdHlwZUlkZW50aWZpZXIKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKEJPT0wpY2FuQ3JlYXRlSXRlbXNPZkNsYXNzOihD
bGFzczxVSUl0ZW1Qcm92aWRlclJlYWRpbmc+KWFDbGFzcworeworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBOTzsKK30KKworLSAoTlNQcm9ncmVzcyAqKWxvYWRPYmplY3Rz
T2ZDbGFzczooQ2xhc3M8TlNJdGVtUHJvdmlkZXJSZWFkaW5nPilhQ2xhc3MgY29tcGxldGlvbjoo
dm9pZCheKShOU0FycmF5PF9fa2luZG9mIGlkIDxOU0l0ZW1Qcm92aWRlclJlYWRpbmc+PiAqb2Jq
ZWN0cykpY29tcGxldGlvbgoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBuaWw7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE1vY2tEcmFnU2Vzc2lvbiB7Cisg
ICAgUmV0YWluUHRyPGlkPiBfbG9jYWxDb250ZXh0OworfQorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhXaW5kb3c6KFVJV2luZG93ICopd2luZG93IGFsbG93TW92ZTooQk9PTClhbGxvd01vdmUK
K3sKKyAgICByZXR1cm4gW3N1cGVyIGluaXRXaXRoSXRlbXM6QFsgXSBsb2NhdGlvbjpDR1BvaW50
WmVybyB3aW5kb3c6d2luZG93IGFsbG93TW92ZTphbGxvd01vdmVdOworfQorCistIChOU1VJbnRl
Z2VyKWxvY2FsT3BlcmF0aW9uTWFzaworeworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiAwOworfQorCistIChOU1VJbnRlZ2VyKWV4dGVybmFsT3BlcmF0aW9uTWFzaworewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCistIChpZClzZXNz
aW9uCit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoaWQpbG9jYWxDb250ZXh0Cit7CisgICAg
cmV0dXJuIF9sb2NhbENvbnRleHQuZ2V0KCk7Cit9CisKKy0gKHZvaWQpc2V0TG9jYWxDb250ZXh0
OihpZClsb2NhbENvbnRleHQKK3sKKyAgICBfbG9jYWxDb250ZXh0ID0gbG9jYWxDb250ZXh0Owor
fQorCitAZW5kCisKK3N0YXRpYyBkb3VibGUgcHJvZ3Jlc3NJbmNyZW1lbnRTdGVwID0gMC4wMzM7
CitzdGF0aWMgZG91YmxlIHByb2dyZXNzVGltZVN0ZXAgPSAwLjAxNjsKK3N0YXRpYyBOU1N0cmlu
ZyAqVGVzdFdlYktpdEFQSVNpbXVsYXRlQ2FuY2VsQWxsVG91Y2hlc05vdGlmaWNhdGlvbk5hbWUg
PSBAIlRlc3RXZWJLaXRBUElTaW11bGF0ZUNhbmNlbEFsbFRvdWNoZXNOb3RpZmljYXRpb25OYW1l
IjsKKworc3RhdGljIE5TQXJyYXkgKmRyYWdBbmREcm9wRXZlbnROYW1lcygpCit7CisgICAgc3Rh
dGljIE5TQXJyYXkgKmV2ZW50TmFtZXMgPSBuaWw7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2Vf
dCBvbmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeKCkgeworICAgICAg
ICBldmVudE5hbWVzID0gQFsgQCJkcmFnZW50ZXIiLCBAImRyYWdvdmVyIiwgQCJkcm9wIiwgQCJk
cmFnbGVhdmUiLCBAImRyYWdzdGFydCIgXTsKKyAgICB9KTsKKyAgICByZXR1cm4gZXZlbnROYW1l
czsKK30KKworQGludGVyZmFjZSBEcmFnZ2luZ1NpbXVsYXRvckFwcGxpY2F0aW9uIDogVUlBcHBs
aWNhdGlvbgorQGVuZAorCitAaW1wbGVtZW50YXRpb24gRHJhZ2dpbmdTaW11bGF0b3JBcHBsaWNh
dGlvbgorLSAodm9pZClfY2FuY2VsQWxsVG91Y2hlcworeworICAgIFtbTlNOb3RpZmljYXRpb25D
ZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6VGVzdFdlYktpdEFQSVNp
bXVsYXRlQ2FuY2VsQWxsVG91Y2hlc05vdGlmaWNhdGlvbk5hbWUgb2JqZWN0Om5pbF07Cit9CitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBEcmFnZ2luZ1NpbXVsYXRvciB7CisgICAgUmV0YWluUHRy
PFRlc3RXS1dlYlZpZXc+IF93ZWJWaWV3OworICAgIFJldGFpblB0cjxNb2NrRHJhZ1Nlc3Npb24+
IF9kcmFnU2Vzc2lvbjsKKyAgICBSZXRhaW5QdHI8TW9ja0Ryb3BTZXNzaW9uPiBfZHJvcFNlc3Np
b247CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBfb2JzZXJ2ZWRFdmVudE5hbWVzOwor
ICAgIFJldGFpblB0cjxOU0FycmF5PiBfZXh0ZXJuYWxJdGVtUHJvdmlkZXJzOworICAgIFJldGFp
blB0cjxOU0FycmF5ICo+IF9zb3VyY2VJdGVtUHJvdmlkZXJzOworICAgIFJldGFpblB0cjxOU0Fy
cmF5ICo+IF9maW5hbFNlbGVjdGlvblJlY3RzOworICAgIENHUG9pbnQgX3N0YXJ0TG9jYXRpb247
CisgICAgQ0dQb2ludCBfZW5kTG9jYXRpb247CisgICAgQ0dSZWN0IF9sYXN0S25vd25EcmFnQ2Fy
ZXRSZWN0OworCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk8TlNOdW1iZXIgKiwg
TlNWYWx1ZSAqPj5fcmVtYWluaW5nQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zQnlQcm9n
cmVzczsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk8TlNWYWx1ZSAqPj5fcXVldWVkQWRk
aXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zOworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJh
eTxVSVRhcmdldGVkRHJhZ1ByZXZpZXcgKj4+IF9saWZ0UHJldmlld3M7CisKKyAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlQXJyYXk8X1dLQXR0YWNobWVudCAqPj4gX2luc2VydGVkQXR0YWNobWVudHM7
CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PF9XS0F0dGFjaG1lbnQgKj4+IF9yZW1vdmVk
QXR0YWNobWVudHM7CisKKyAgICBib29sIF9pc0RvbmVXYWl0aW5nRm9ySW5wdXRTZXNzaW9uOwor
ICAgIGRvdWJsZSBfY3VycmVudFByb2dyZXNzOworICAgIGJvb2wgX2lzRG9uZVdpdGhDdXJyZW50
UnVuOworICAgIERyYWdBbmREcm9wUGhhc2UgX3BoYXNlOworCisgICAgUmV0YWluUHRyPFVJRHJv
cFByb3Bvc2FsPiBfY3VycmVudERyb3BQcm9wb3NhbDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoV2ViVmlldzooVGVzdFdLV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICBpZiAoc2VsZiA9
IFtzdXBlciBpbml0XSkgeworICAgICAgICBfd2ViVmlldyA9IHdlYlZpZXc7CisgICAgICAgIF9z
aG91bGRFbnN1cmVVSUFwcGxpY2F0aW9uID0gTk87CisgICAgICAgIF9zaG91bGRBbGxvd01vdmVP
cGVyYXRpb24gPSBZRVM7CisgICAgICAgIF9pc0RvbmVXYWl0aW5nRm9ySW5wdXRTZXNzaW9uID0g
dHJ1ZTsKKyAgICAgICAgW193ZWJWaWV3IHNldFVJRGVsZWdhdGU6c2VsZl07CisgICAgICAgIFtf
d2ViVmlldyBfc2V0SW5wdXREZWxlZ2F0ZTpzZWxmXTsKKyAgICB9CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIGlmIChbX3dlYlZpZXcgVUlEZWxlZ2F0ZV0g
PT0gc2VsZikKKyAgICAgICAgW193ZWJWaWV3IHNldFVJRGVsZWdhdGU6bmlsXTsKKworICAgIGlm
IChbX3dlYlZpZXcgX2lucHV0RGVsZWdhdGVdID09IHNlbGYpCisgICAgICAgIFtfd2ViVmlldyBf
c2V0SW5wdXREZWxlZ2F0ZTpuaWxdOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2
b2lkKV9yZXNldFNpbXVsYXRlZFN0YXRlCit7CisgICAgX3BoYXNlID0gRHJhZ0FuZERyb3BQaGFz
ZUJlZ2lubmluZzsKKyAgICBfY3VycmVudFByb2dyZXNzID0gMDsKKyAgICBfaXNEb25lV2l0aEN1
cnJlbnRSdW4gPSBmYWxzZTsKKyAgICBfb2JzZXJ2ZWRFdmVudE5hbWVzID0gYWRvcHROUyhbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgX2luc2VydGVkQXR0YWNobWVudHMgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICBfcmVtb3ZlZEF0dGFj
aG1lbnRzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgX2Zp
bmFsU2VsZWN0aW9uUmVjdHMgPSBAWyBdOworICAgIF9kcmFnU2Vzc2lvbiA9IG5pbDsKKyAgICBf
ZHJvcFNlc3Npb24gPSBuaWw7CisgICAgX2N1cnJlbnREcm9wUHJvcG9zYWwgPSBuaWw7CisgICAg
X2xhc3RLbm93bkRyYWdDYXJldFJlY3QgPSBDR1JlY3RaZXJvOworICAgIF9yZW1haW5pbmdBZGRp
dGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnNCeVByb2dyZXNzID0gbmlsOworICAgIF9xdWV1ZWRB
ZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRdKTsKKyAgICBfbGlmdFByZXZpZXdzID0gYWRvcHROUyhbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0XSk7Cit9CisKKy0gKE5TQXJyYXkgKilvYnNlcnZlZEV2ZW50TmFtZXMK
K3sKKyAgICByZXR1cm4gX29ic2VydmVkRXZlbnROYW1lcy5nZXQoKTsKK30KKworLSAodm9pZClz
aW11bGF0ZUFsbFRvdWNoZXNDYW5jZWxlZDooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24K
K3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0
OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9hZHZhbmNlUHJvZ3Jlc3MpIG9iamVjdDpuaWxdOwor
ICAgIF9waGFzZSA9IERyYWdBbmREcm9wUGhhc2VDYW5jZWxsZWQ7CisgICAgX2N1cnJlbnRQcm9n
cmVzcyA9IDE7CisgICAgX2lzRG9uZVdpdGhDdXJyZW50UnVuID0gdHJ1ZTsKKyAgICBpZiAoX2Ry
YWdTZXNzaW9uKQorICAgICAgICBbW193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlXSBk
cmFnSW50ZXJhY3Rpb246W193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbl0gc2Vzc2lvbjpfZHJhZ1Nl
c3Npb24uZ2V0KCkgZGlkRW5kV2l0aE9wZXJhdGlvbjpVSURyb3BPcGVyYXRpb25DYW5jZWxdOwor
fQorCistICh2b2lkKXJ1bkZyb206KENHUG9pbnQpc3RhcnRMb2NhdGlvbiB0bzooQ0dQb2ludCll
bmRMb2NhdGlvbgoreworICAgIFtzZWxmIHJ1bkZyb206c3RhcnRMb2NhdGlvbiB0bzplbmRMb2Nh
dGlvbiBhZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnM6bmlsXTsKK30KKworLSAodm9pZCly
dW5Gcm9tOihDR1BvaW50KXN0YXJ0TG9jYXRpb24gdG86KENHUG9pbnQpZW5kTG9jYXRpb24gYWRk
aXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zOihQcm9ncmVzc1RvQ0dQb2ludFZhbHVlTWFwKWFk
ZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9ucworeworICAgIE5TTm90aWZpY2F0aW9uQ2VudGVy
ICpkZWZhdWx0Q2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOwor
ICAgIFtkZWZhdWx0Q2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHNp
bXVsYXRlQWxsVG91Y2hlc0NhbmNlbGVkOikgbmFtZTpUZXN0V2ViS2l0QVBJU2ltdWxhdGVDYW5j
ZWxBbGxUb3VjaGVzTm90aWZpY2F0aW9uTmFtZSBvYmplY3Q6bmlsXTsKKworICAgIGlmIChfc2hv
dWxkRW5zdXJlVUlBcHBsaWNhdGlvbikKKyAgICAgICAgVUlBcHBsaWNhdGlvbkluc3RhbnRpYXRl
U2luZ2xldG9uKFtEcmFnZ2luZ1NpbXVsYXRvckFwcGxpY2F0aW9uIGNsYXNzXSk7CisKKyAgICBb
c2VsZiBfcmVzZXRTaW11bGF0ZWRTdGF0ZV07CisKKyAgICBpZiAoYWRkaXRpb25hbEl0ZW1SZXF1
ZXN0TG9jYXRpb25zKQorICAgICAgICBfcmVtYWluaW5nQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9j
YXRpb25zQnlQcm9ncmVzcyA9IGFkb3B0TlMoW2FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9u
cyBtdXRhYmxlQ29weV0pOworCisgICAgZm9yIChOU1N0cmluZyAqZXZlbnROYW1lIGluIGRyYWdB
bmREcm9wRXZlbnROYW1lcygpKSB7CisgICAgICAgIFtfd2ViVmlldyBwZXJmb3JtQWZ0ZXJSZWNl
aXZpbmdNZXNzYWdlOmV2ZW50TmFtZSBhY3Rpb246W3N0cm9uZ1NlbGYgPSByZXRhaW5QdHIoc2Vs
ZiksIG5hbWUgPSByZXRhaW5QdHIoZXZlbnROYW1lKV0geworICAgICAgICAgICAgW3N0cm9uZ1Nl
bGYtPl9vYnNlcnZlZEV2ZW50TmFtZXMgYWRkT2JqZWN0Om5hbWUuZ2V0KCldOworICAgICAgICB9
XTsKKyAgICB9CisKKyAgICBfc3RhcnRMb2NhdGlvbiA9IHN0YXJ0TG9jYXRpb247CisgICAgX2Vu
ZExvY2F0aW9uID0gZW5kTG9jYXRpb247CisKKyAgICBpZiAoc2VsZi5leHRlcm5hbEl0ZW1Qcm92
aWRlcnMuY291bnQpIHsKKyAgICAgICAgX2Ryb3BTZXNzaW9uID0gYWRvcHROUyhbW01vY2tEcm9w
U2Vzc2lvbiBhbGxvY10gaW5pdFdpdGhQcm92aWRlcnM6c2VsZi5leHRlcm5hbEl0ZW1Qcm92aWRl
cnMgbG9jYXRpb246X3N0YXJ0TG9jYXRpb24gd2luZG93Oltfd2ViVmlldyB3aW5kb3ddIGFsbG93
TW92ZTpzZWxmLnNob3VsZEFsbG93TW92ZU9wZXJhdGlvbl0pOworICAgICAgICBfcGhhc2UgPSBE
cmFnQW5kRHJvcFBoYXNlQmVnYW47CisgICAgICAgIFtzZWxmIF9hZHZhbmNlUHJvZ3Jlc3NdOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIF9kcmFnU2Vzc2lvbiA9IGFkb3B0TlMoW1tNb2NrRHJhZ1Nl
c3Npb24gYWxsb2NdIGluaXRXaXRoV2luZG93Oltfd2ViVmlldyB3aW5kb3ddIGFsbG93TW92ZTpz
ZWxmLnNob3VsZEFsbG93TW92ZU9wZXJhdGlvbl0pOworICAgICAgICBbX2RyYWdTZXNzaW9uIHNl
dE1vY2tMb2NhdGlvbkluV2luZG93Ol9zdGFydExvY2F0aW9uXTsKKyAgICAgICAgWyhpZCA8VUlE
cmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV9Gb3JXZWJLaXRPbmx5PilbX3dlYlZpZXcgZHJhZ0ludGVy
YWN0aW9uRGVsZWdhdGVdIF9kcmFnSW50ZXJhY3Rpb246W193ZWJWaWV3IGRyYWdJbnRlcmFjdGlv
bl0gcHJlcGFyZUZvclNlc3Npb246X2RyYWdTZXNzaW9uLmdldCgpIGNvbXBsZXRpb246W3N0cm9u
Z1NlbGYgPSByZXRhaW5QdHIoc2VsZildIHsKKyAgICAgICAgICAgIGlmIChzdHJvbmdTZWxmLT5f
cGhhc2UgPT0gRHJhZ0FuZERyb3BQaGFzZUNhbmNlbGxlZCkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIHN0cm9uZ1NlbGYtPl9waGFzZSA9IERyYWdBbmREcm9wUGhhc2VC
ZWdpbm5pbmc7CisgICAgICAgICAgICBbc3Ryb25nU2VsZiBfYWR2YW5jZVByb2dyZXNzXTsKKyAg
ICAgICAgfV07CisgICAgfQorCisgICAgVXRpbDo6cnVuKCZfaXNEb25lV2l0aEN1cnJlbnRSdW4p
OworICAgIFtfd2ViVmlldyBjbGVhck1lc3NhZ2VIYW5kbGVyczpkcmFnQW5kRHJvcEV2ZW50TmFt
ZXMoKV07CisgICAgX2ZpbmFsU2VsZWN0aW9uUmVjdHMgPSBbX3dlYlZpZXcgc2VsZWN0aW9uUmVj
dHNBZnRlclByZXNlbnRhdGlvblVwZGF0ZV07CisKKyAgICBbZGVmYXVsdENlbnRlciByZW1vdmVP
YnNlcnZlcjpzZWxmXTsKK30KKworLSAoTlNBcnJheSAqKWZpbmFsU2VsZWN0aW9uUmVjdHMKK3sK
KyAgICByZXR1cm4gX2ZpbmFsU2VsZWN0aW9uUmVjdHMuZ2V0KCk7Cit9CisKKy0gKHZvaWQpX2Nv
bmNsdWRlRHJvcEFuZFBlcmZvcm1PcGVyYXRpb25JZk5lY2Vzc2FyeQoreworICAgIF9sYXN0S25v
d25EcmFnQ2FyZXRSZWN0ID0gW193ZWJWaWV3IF9kcmFnQ2FyZXRSZWN0XTsKKyAgICBhdXRvIG9w
ZXJhdGlvbiA9IFtfY3VycmVudERyb3BQcm9wb3NhbCBvcGVyYXRpb25dOworICAgIGlmIChvcGVy
YXRpb24gIT0gVUlEcm9wT3BlcmF0aW9uQ2FuY2VsICYmIG9wZXJhdGlvbiAhPSBVSURyb3BPcGVy
YXRpb25Gb3JiaWRkZW4pIHsKKyAgICAgICAgW1tfd2ViVmlldyBkcm9wSW50ZXJhY3Rpb25EZWxl
Z2F0ZV0gZHJvcEludGVyYWN0aW9uOltfd2ViVmlldyBkcm9wSW50ZXJhY3Rpb25dIHBlcmZvcm1E
cm9wOl9kcm9wU2Vzc2lvbi5nZXQoKV07CisgICAgICAgIF9waGFzZSA9IERyYWdBbmREcm9wUGhh
c2VQZXJmb3JtaW5nRHJvcDsKKyAgICB9IGVsc2UgeworICAgICAgICBfaXNEb25lV2l0aEN1cnJl
bnRSdW4gPSBZRVM7CisgICAgICAgIF9waGFzZSA9IERyYWdBbmREcm9wUGhhc2VDYW5jZWxsZWQ7
CisgICAgfQorCisgICAgW1tfd2ViVmlldyBkcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJvcElu
dGVyYWN0aW9uOltfd2ViVmlldyBkcm9wSW50ZXJhY3Rpb25dIHNlc3Npb25EaWRFbmQ6X2Ryb3BT
ZXNzaW9uLmdldCgpXTsKKworICAgIGlmIChfZHJhZ1Nlc3Npb24pCisgICAgICAgIFtbX3dlYlZp
ZXcgZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVdIGRyYWdJbnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJh
Z0ludGVyYWN0aW9uXSBzZXNzaW9uOl9kcmFnU2Vzc2lvbi5nZXQoKSBkaWRFbmRXaXRoT3BlcmF0
aW9uOm9wZXJhdGlvbl07Cit9CisKKy0gKHZvaWQpX2VucXVldWVQZW5kaW5nQWRkaXRpb25hbEl0
ZW1SZXF1ZXN0TG9jYXRpb25zCit7CisgICAgTlNNdXRhYmxlQXJyYXkgKnByb2dyZXNzVmFsdWVz
VG9SZW1vdmUgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAgIGZvciAoTlNOdW1iZXIgKnBy
b2dyZXNzVmFsdWUgaW4gX3JlbWFpbmluZ0FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uc0J5
UHJvZ3Jlc3MuZ2V0KCkpIHsKKyAgICAgICAgZG91YmxlIHByb2dyZXNzID0gcHJvZ3Jlc3NWYWx1
ZS5kb3VibGVWYWx1ZTsKKyAgICAgICAgaWYgKHByb2dyZXNzID4gX2N1cnJlbnRQcm9ncmVzcykK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBbcHJvZ3Jlc3NWYWx1ZXNUb1JlbW92ZSBh
ZGRPYmplY3Q6cHJvZ3Jlc3NWYWx1ZV07CisgICAgICAgIFtfcXVldWVkQWRkaXRpb25hbEl0ZW1S
ZXF1ZXN0TG9jYXRpb25zIGFkZE9iamVjdDpbX3JlbWFpbmluZ0FkZGl0aW9uYWxJdGVtUmVxdWVz
dExvY2F0aW9uc0J5UHJvZ3Jlc3Mgb2JqZWN0Rm9yS2V5OnByb2dyZXNzVmFsdWVdXTsKKyAgICB9
CisKKyAgICBmb3IgKE5TTnVtYmVyICpwcm9ncmVzc1RvUmVtb3ZlIGluIHByb2dyZXNzVmFsdWVz
VG9SZW1vdmUpCisgICAgICAgIFtfcmVtYWluaW5nQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRp
b25zQnlQcm9ncmVzcyByZW1vdmVPYmplY3RGb3JLZXk6cHJvZ3Jlc3NUb1JlbW92ZV07Cit9CisK
Ky0gKEJPT0wpX3NlbmRRdWV1ZWRBZGRpdGlvbmFsSXRlbVJlcXVlc3QKK3sKKyAgICBpZiAoIVtf
cXVldWVkQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zIGNvdW50XSkKKyAgICAgICAgcmV0
dXJuIE5POworCisgICAgUmV0YWluUHRyPE5TVmFsdWU+IHJlcXVlc3RMb2NhdGlvblZhbHVlID0g
W19xdWV1ZWRBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnMgb2JqZWN0QXRJbmRleDowXTsK
KyAgICBbX3F1ZXVlZEFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9ucyByZW1vdmVPYmplY3RB
dEluZGV4OjBdOworCisgICAgYXV0byByZXF1ZXN0TG9jYXRpb24gPSBbW193ZWJWaWV3IHdpbmRv
d10gY29udmVydFBvaW50OltyZXF1ZXN0TG9jYXRpb25WYWx1ZSBDR1BvaW50VmFsdWVdIHRvVmll
dzpfd2ViVmlldy5nZXQoKV07CisgICAgWyhpZCA8VUlEcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV9Q
cm9wb3NlZF9TUElfMzMxNDY4MDM+KVtfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0g
X2RyYWdJbnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uXSBpdGVtc0ZvckFkZGlu
Z1RvU2Vzc2lvbjpfZHJhZ1Nlc3Npb24uZ2V0KCkgd2l0aFRvdWNoQXRQb2ludDpyZXF1ZXN0TG9j
YXRpb24gY29tcGxldGlvbjpbZHJhZ1Nlc3Npb24gPSBfZHJhZ1Nlc3Npb24sIGRyb3BTZXNzaW9u
ID0gX2Ryb3BTZXNzaW9uXSAoTlNBcnJheSAqaXRlbXMpIHsKKyAgICAgICAgW2RyYWdTZXNzaW9u
IGFkZEl0ZW1zOml0ZW1zXTsKKyAgICAgICAgW2Ryb3BTZXNzaW9uIGFkZEl0ZW1zOml0ZW1zXTsK
KyAgICB9XTsKKyAgICByZXR1cm4gWUVTOworfQorCistICh2b2lkKV9hZHZhbmNlUHJvZ3Jlc3MK
K3sKKyAgICBbc2VsZiBfZW5xdWV1ZVBlbmRpbmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlv
bnNdOworICAgIGlmIChbc2VsZiBfc2VuZFF1ZXVlZEFkZGl0aW9uYWxJdGVtUmVxdWVzdF0pIHsK
KyAgICAgICAgW3NlbGYgX3NjaGVkdWxlQWR2YW5jZVByb2dyZXNzXTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIF9sYXN0S25vd25EcmFnQ2FyZXRSZWN0ID0gW193ZWJWaWV3IF9kcmFn
Q2FyZXRSZWN0XTsKKyAgICBfY3VycmVudFByb2dyZXNzICs9IHByb2dyZXNzSW5jcmVtZW50U3Rl
cDsKKyAgICBDR1BvaW50IGxvY2F0aW9uSW5XaW5kb3cgPSBzZWxmLl9jdXJyZW50TG9jYXRpb247
CisgICAgW19kcmFnU2Vzc2lvbiBzZXRNb2NrTG9jYXRpb25JbldpbmRvdzpsb2NhdGlvbkluV2lu
ZG93XTsKKyAgICBbX2Ryb3BTZXNzaW9uIHNldE1vY2tMb2NhdGlvbkluV2luZG93OmxvY2F0aW9u
SW5XaW5kb3ddOworCisgICAgaWYgKF9jdXJyZW50UHJvZ3Jlc3MgPj0gMSkgeworICAgICAgICBf
Y3VycmVudFByb2dyZXNzID0gMTsKKyAgICAgICAgW3NlbGYgX2NvbmNsdWRlRHJvcEFuZFBlcmZv
cm1PcGVyYXRpb25JZk5lY2Vzc2FyeV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBz
d2l0Y2ggKF9waGFzZSkgeworICAgIGNhc2UgRHJhZ0FuZERyb3BQaGFzZUJlZ2lubmluZzogewor
ICAgICAgICBOU011dGFibGVBcnJheTxVSUl0ZW1Qcm92aWRlciAqPiAqaXRlbVByb3ZpZGVycyA9
IFtOU011dGFibGVBcnJheSBhcnJheV07CisgICAgICAgIE5TQXJyYXkgKml0ZW1zID0gW1tfd2Vi
VmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJhZ0ludGVyYWN0aW9uOltfd2ViVmlldyBk
cmFnSW50ZXJhY3Rpb25dIGl0ZW1zRm9yQmVnaW5uaW5nU2Vzc2lvbjpfZHJhZ1Nlc3Npb24uZ2V0
KCldOworICAgICAgICBpZiAoIWl0ZW1zLmNvdW50KSB7CisgICAgICAgICAgICBfcGhhc2UgPSBE
cmFnQW5kRHJvcFBoYXNlQ2FuY2VsbGVkOworICAgICAgICAgICAgX2N1cnJlbnRQcm9ncmVzcyA9
IDE7CisgICAgICAgICAgICBfaXNEb25lV2l0aEN1cnJlbnRSdW4gPSB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChVSURyYWdJdGVtICppdGVtIGlu
IGl0ZW1zKSB7CisgICAgICAgICAgICBbaXRlbVByb3ZpZGVycyBhZGRPYmplY3Q6aXRlbS5pdGVt
UHJvdmlkZXJdOworICAgICAgICAgICAgVUlUYXJnZXRlZERyYWdQcmV2aWV3ICpsaWZ0UHJldmll
dyA9IFtbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVdIGRyYWdJbnRlcmFjdGlvbjpb
X3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uXSBwcmV2aWV3Rm9yTGlmdGluZ0l0ZW06aXRlbSBzZXNz
aW9uOl9kcmFnU2Vzc2lvbi5nZXQoKV07CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSghIWxpZnRQ
cmV2aWV3KTsKKyAgICAgICAgICAgIGlmIChsaWZ0UHJldmlldykKKyAgICAgICAgICAgICAgICBb
X2xpZnRQcmV2aWV3cyBhZGRPYmplY3Q6bGlmdFByZXZpZXddOworICAgICAgICB9CisKKyAgICAg
ICAgX2Ryb3BTZXNzaW9uID0gYWRvcHROUyhbW01vY2tEcm9wU2Vzc2lvbiBhbGxvY10gaW5pdFdp
dGhQcm92aWRlcnM6aXRlbVByb3ZpZGVycyBsb2NhdGlvbjpzZWxmLl9jdXJyZW50TG9jYXRpb24g
d2luZG93Oltfd2ViVmlldyB3aW5kb3ddIGFsbG93TW92ZTpzZWxmLnNob3VsZEFsbG93TW92ZU9w
ZXJhdGlvbl0pOworICAgICAgICBbX2RyYWdTZXNzaW9uIHNldEl0ZW1zOml0ZW1zXTsKKyAgICAg
ICAgX3NvdXJjZUl0ZW1Qcm92aWRlcnMgPSBpdGVtUHJvdmlkZXJzOworICAgICAgICBpZiAoc2Vs
Zi5zaG93Q3VzdG9tQWN0aW9uU2hlZXRCbG9jaykgeworICAgICAgICAgICAgLy8gRGVmZXIgcHJv
Z3Jlc3MgdW50aWwgdGhlIGN1c3RvbSBhY3Rpb24gc2hlZXQgaXMgZGlzbWlzc2VkLgorICAgICAg
ICAgICAgYXV0byBzdGFydExvY2F0aW9uSW5WaWV3ID0gW1tfd2ViVmlldyB3aW5kb3ddIGNvbnZl
cnRQb2ludDpfc3RhcnRMb2NhdGlvbiB0b1ZpZXc6X3dlYlZpZXcuZ2V0KCldOworICAgICAgICAg
ICAgW193ZWJWaWV3IF9zaW11bGF0ZUxvbmdQcmVzc0FjdGlvbkF0TG9jYXRpb246c3RhcnRMb2Nh
dGlvbkluVmlld107CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBb
W193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcmFnSW50ZXJhY3Rpb246W193ZWJW
aWV3IGRyYWdJbnRlcmFjdGlvbl0gc2Vzc2lvbldpbGxCZWdpbjpfZHJhZ1Nlc3Npb24uZ2V0KCld
OworCisgICAgICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHJldGFpbmVkV2ViVmlldyA9IF93ZWJW
aWV3OworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBe
KCkgeworICAgICAgICAgICAgW3JldGFpbmVkV2ViVmlldyByZXNpZ25GaXJzdFJlc3BvbmRlcl07
CisgICAgICAgIH0pOworCisgICAgICAgIF9waGFzZSA9IERyYWdBbmREcm9wUGhhc2VCZWdhbjsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRHJhZ0FuZERyb3BQaGFzZUJlZ2FuOgor
ICAgICAgICBbW193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcm9wSW50ZXJhY3Rp
b246W193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbl0gc2Vzc2lvbkRpZEVudGVyOl9kcm9wU2Vzc2lv
bi5nZXQoKV07CisgICAgICAgIF9waGFzZSA9IERyYWdBbmREcm9wUGhhc2VFbnRlcmVkOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIERyYWdBbmREcm9wUGhhc2VFbnRlcmVkOiB7CisgICAgICAg
IF9jdXJyZW50RHJvcFByb3Bvc2FsID0gW1tfd2ViVmlldyBkcm9wSW50ZXJhY3Rpb25EZWxlZ2F0
ZV0gZHJvcEludGVyYWN0aW9uOltfd2ViVmlldyBkcm9wSW50ZXJhY3Rpb25dIHNlc3Npb25EaWRV
cGRhdGU6X2Ryb3BTZXNzaW9uLmdldCgpXTsKKyAgICAgICAgaWYgKCFbc2VsZiBzaG91bGRBbGxv
d01vdmVPcGVyYXRpb25dICYmIFtfY3VycmVudERyb3BQcm9wb3NhbCBvcGVyYXRpb25dID09IFVJ
RHJvcE9wZXJhdGlvbk1vdmUpCisgICAgICAgICAgICBfY3VycmVudERyb3BQcm9wb3NhbCA9IGFk
b3B0TlMoW1tVSURyb3BQcm9wb3NhbCBhbGxvY10gaW5pdFdpdGhEcm9wT3BlcmF0aW9uOlVJRHJv
cE9wZXJhdGlvbkNhbmNlbF0pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgW3NlbGYgX3NjaGVkdWxlQWR2YW5jZVByb2dy
ZXNzXTsKK30KKworLSAoQ0dQb2ludClfY3VycmVudExvY2F0aW9uCit7CisgICAgQ0dGbG9hdCBk
aXN0YW5jZVggPSBfZW5kTG9jYXRpb24ueCAtIF9zdGFydExvY2F0aW9uLng7CisgICAgQ0dGbG9h
dCBkaXN0YW5jZVkgPSBfZW5kTG9jYXRpb24ueSAtIF9zdGFydExvY2F0aW9uLnk7CisgICAgcmV0
dXJuIENHUG9pbnRNYWtlKF9zdGFydExvY2F0aW9uLnggKyBfY3VycmVudFByb2dyZXNzICogZGlz
dGFuY2VYLCBfc3RhcnRMb2NhdGlvbi55ICsgX2N1cnJlbnRQcm9ncmVzcyAqIGRpc3RhbmNlWSk7
Cit9CisKKy0gKHZvaWQpX3NjaGVkdWxlQWR2YW5jZVByb2dyZXNzCit7CisgICAgW05TT2JqZWN0
IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3RvcihfYWR2YW5jZVByb2dyZXNzKSBvYmplY3Q6bmlsXTsKKyAgICBbc2VsZiBwZXJmb3Jt
U2VsZWN0b3I6QHNlbGVjdG9yKF9hZHZhbmNlUHJvZ3Jlc3MpIHdpdGhPYmplY3Q6bmlsIGFmdGVy
RGVsYXk6cHJvZ3Jlc3NUaW1lU3RlcF07Cit9CisKKy0gKE5TQXJyYXkgKilzb3VyY2VJdGVtUHJv
dmlkZXJzCit7CisgICAgcmV0dXJuIF9zb3VyY2VJdGVtUHJvdmlkZXJzLmdldCgpOworfQorCist
IChOU0FycmF5ICopZXh0ZXJuYWxJdGVtUHJvdmlkZXJzCit7CisgICAgcmV0dXJuIF9leHRlcm5h
bEl0ZW1Qcm92aWRlcnMuZ2V0KCk7Cit9CisKKy0gKHZvaWQpc2V0RXh0ZXJuYWxJdGVtUHJvdmlk
ZXJzOihOU0FycmF5ICopZXh0ZXJuYWxJdGVtUHJvdmlkZXJzCit7CisgICAgX2V4dGVybmFsSXRl
bVByb3ZpZGVycyA9IGFkb3B0TlMoW2V4dGVybmFsSXRlbVByb3ZpZGVycyBjb3B5XSk7Cit9CisK
Ky0gKERyYWdBbmREcm9wUGhhc2UpcGhhc2UKK3sKKyAgICByZXR1cm4gX3BoYXNlOworfQorCist
IChOU0FycmF5PFVJVGFyZ2V0ZWREcmFnUHJldmlldyAqPiAqKWxpZnRQcmV2aWV3cworeworICAg
IHJldHVybiBfbGlmdFByZXZpZXdzLmdldCgpOworfQorCistIChDR1JlY3QpbGFzdEtub3duRHJh
Z0NhcmV0UmVjdAoreworICAgIHJldHVybiBfbGFzdEtub3duRHJhZ0NhcmV0UmVjdDsKK30KKwor
LSAodm9pZCl3YWl0Rm9ySW5wdXRTZXNzaW9uCit7CisgICAgX2lzRG9uZVdhaXRpbmdGb3JJbnB1
dFNlc3Npb24gPSBmYWxzZTsKKworICAgIC8vIFdhaXRpbmcgZm9yIGFuIGlucHV0IHNlc3Npb24g
aW1wbGllcyB0aGF0IHdlIHNob3VsZCBhbGxvdyBpbnB1dCBzZXNzaW9ucyB0byBiZWdpbi4KKyAg
ICBzZWxmLmFsbG93c0ZvY3VzVG9TdGFydElucHV0U2Vzc2lvbiA9IFlFUzsKKworICAgIFV0aWw6
OnJ1bigmX2lzRG9uZVdhaXRpbmdGb3JJbnB1dFNlc3Npb24pOworfQorCistIChOU0FycmF5PF9X
S0F0dGFjaG1lbnQgKj4gKilpbnNlcnRlZEF0dGFjaG1lbnRzCit7CisgICAgcmV0dXJuIF9pbnNl
cnRlZEF0dGFjaG1lbnRzLmdldCgpOworfQorCistIChOU0FycmF5PF9XS0F0dGFjaG1lbnQgKj4g
KilyZW1vdmVkQXR0YWNobWVudHMKK3sKKyAgICByZXR1cm4gX3JlbW92ZWRBdHRhY2htZW50cy5n
ZXQoKTsKK30KKworLSAodm9pZCllbmREYXRhVHJhbnNmZXIKK3sKKyAgICBbW193ZWJWaWV3IGRy
YWdJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcmFnSW50ZXJhY3Rpb246W193ZWJWaWV3IGRyYWdJbnRl
cmFjdGlvbl0gc2Vzc2lvbkRpZFRyYW5zZmVySXRlbXM6X2RyYWdTZXNzaW9uLmdldCgpXTsKK30K
KworI3ByYWdtYSBtYXJrIC0gV0tVSURlbGVnYXRlUHJpdmF0ZQorCistICh2b2lkKV93ZWJWaWV3
OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRhdGFJbnRlcmFjdGlvbk9wZXJhdGlvbldhc0hhbmRsZWQ6
KEJPT0wpaGFuZGxlZCBmb3JTZXNzaW9uOihpZClzZXNzaW9uIGl0ZW1Qcm92aWRlcnM6KE5TQXJy
YXk8VUlJdGVtUHJvdmlkZXIgKj4gKilpdGVtUHJvdmlkZXJzCit7CisgICAgX2lzRG9uZVdpdGhD
dXJyZW50UnVuID0gdHJ1ZTsKKworICAgIGlmIChzZWxmLmRyb3BDb21wbGV0aW9uQmxvY2spCisg
ICAgICAgIHNlbGYuZHJvcENvbXBsZXRpb25CbG9jayhoYW5kbGVkLCBpdGVtUHJvdmlkZXJzKTsK
K30KKworLSAoTlNVSW50ZWdlcilfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyB3aWxsVXBk
YXRlRGF0YUludGVyYWN0aW9uT3BlcmF0aW9uVG9PcGVyYXRpb246KE5TVUludGVnZXIpb3BlcmF0
aW9uIGZvclNlc3Npb246KGlkKXNlc3Npb24KK3sKKyAgICByZXR1cm4gc2VsZi5vdmVycmlkZURy
YWdVcGRhdGVCbG9jayA/IHNlbGYub3ZlcnJpZGVEcmFnVXBkYXRlQmxvY2sob3BlcmF0aW9uLCBz
ZXNzaW9uKSA6IG9wZXJhdGlvbjsKK30KKworLSAoTlNBcnJheSAqKV93ZWJWaWV3OihXS1dlYlZp
ZXcgKil3ZWJWaWV3IGFkanVzdGVkRGF0YUludGVyYWN0aW9uSXRlbVByb3ZpZGVyc0Zvckl0ZW1Q
cm92aWRlcjooVUlJdGVtUHJvdmlkZXIgKilpdGVtUHJvdmlkZXIgcmVwcmVzZW50aW5nT2JqZWN0
czooTlNBcnJheSAqKXJlcHJlc2VudGluZ09iamVjdHMgYWRkaXRpb25hbERhdGE6KE5TRGljdGlv
bmFyeSAqKWFkZGl0aW9uYWxEYXRhCit7CisgICAgcmV0dXJuIHNlbGYuY29udmVydEl0ZW1Qcm92
aWRlcnNCbG9jayA/IHNlbGYuY29udmVydEl0ZW1Qcm92aWRlcnNCbG9jayhpdGVtUHJvdmlkZXIs
IHJlcHJlc2VudGluZ09iamVjdHMsIGFkZGl0aW9uYWxEYXRhKSA6IEBbIGl0ZW1Qcm92aWRlciBd
OworfQorCistIChCT09MKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHNob3dDdXN0b21T
aGVldEZvckVsZW1lbnQ6KF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvICopZWxlbWVudAoreworICAg
IGlmICghc2VsZi5zaG93Q3VzdG9tQWN0aW9uU2hlZXRCbG9jaykKKyAgICAgICAgcmV0dXJuIE5P
OworCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9u
Z1NlbGYgPSByZXRhaW5QdHIoc2VsZildIHsKKyAgICAgICAgW1tzdHJvbmdTZWxmLT5fd2ViVmll
dyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJhZ0ludGVyYWN0aW9uOltzdHJvbmdTZWxmLT5f
d2ViVmlldyBkcmFnSW50ZXJhY3Rpb25dIHNlc3Npb25XaWxsQmVnaW46c3Ryb25nU2VsZi0+X2Ry
YWdTZXNzaW9uLmdldCgpXTsKKyAgICAgICAgc3Ryb25nU2VsZi0+X3BoYXNlID0gRHJhZ0FuZERy
b3BQaGFzZUJlZ2FuOworICAgICAgICBbc3Ryb25nU2VsZiBfc2NoZWR1bGVBZHZhbmNlUHJvZ3Jl
c3NdOworICAgIH0pOworCisgICAgcmV0dXJuIHNlbGYuc2hvd0N1c3RvbUFjdGlvblNoZWV0Qmxv
Y2soZWxlbWVudCk7Cit9CisKKy0gKE5TQXJyYXk8VUlEcmFnSXRlbSAqPiAqKV93ZWJWaWV3OihX
S1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxQZXJmb3JtRHJvcFdpdGhTZXNzaW9uOihpZCA8VUlEcm9w
U2Vzc2lvbj4pc2Vzc2lvbgoreworICAgIHJldHVybiBzZWxmLm92ZXJyaWRlUGVyZm9ybURyb3BC
bG9jayA/IHNlbGYub3ZlcnJpZGVQZXJmb3JtRHJvcEJsb2NrKHNlc3Npb24pIDogc2Vzc2lvbi5p
dGVtczsKK30KKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRJbnNl
cnRBdHRhY2htZW50OihfV0tBdHRhY2htZW50ICopYXR0YWNobWVudAoreworICAgIFtfaW5zZXJ0
ZWRBdHRhY2htZW50cyBhZGRPYmplY3Q6YXR0YWNobWVudF07Cit9CisKKy0gKHZvaWQpX3dlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkUmVtb3ZlQXR0YWNobWVudDooX1dLQXR0YWNobWVu
dCAqKWF0dGFjaG1lbnQKK3sKKyAgICBbX3JlbW92ZWRBdHRhY2htZW50cyBhZGRPYmplY3Q6YXR0
YWNobWVudF07Cit9CisKKyNwcmFnbWEgbWFyayAtIF9XS0lucHV0RGVsZWdhdGUKKworLSAoQk9P
TClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBmb2N1c1Nob3VsZFN0YXJ0SW5wdXRTZXNz
aW9uOihpZCA8X1dLRm9jdXNlZEVsZW1lbnRJbmZvPilpbmZvCit7CisgICAgcmV0dXJuIF9hbGxv
d3NGb2N1c1RvU3RhcnRJbnB1dFNlc3Npb247Cit9CisKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcgZGlkU3RhcnRJbnB1dFNlc3Npb246KGlkIDxfV0tGb3JtSW5wdXRTZXNz
aW9uPilpbnB1dFNlc3Npb24KK3sKKyAgICBfaXNEb25lV2FpdGluZ0ZvcklucHV0U2Vzc2lvbiA9
IHRydWU7Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpICYmIFBM
QVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL1VJS2l0U1BJ
LmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9VSUtpdFNQSS5oCmluZGV4IDhlZGQwNTJhMDM4
NGIwYzc5NGY5OWVkNzA3YmY0NWExZTcyOTBmZjIuLjhlY2YzMDVlZmJlNzcxNDM4ZDAyNGY3NzBl
OTVkZWVjNTBkMWYxZDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL1VJS2l0
U1BJLmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvVUlLaXRTUEkuaApAQCAtMzksNyAr
MzksMTIgQEAKIEBwcm90b2NvbCBVSURyYWdTZXNzaW9uOwogQGNsYXNzIFVJRHJhZ0ludGVyYWN0
aW9uOwogQGNsYXNzIFVJRHJhZ0l0ZW07CisjaW1wb3J0IDxVSUtpdC9OU1N0cmluZytVSUl0ZW1Q
cm92aWRlci5oPgorI2ltcG9ydCA8VUlLaXQvTlNVUkwrVUlJdGVtUHJvdmlkZXIuaD4KICNpbXBv
cnQgPFVJS2l0L1VJRHJhZ0ludGVyYWN0aW9uX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJ
SW1hZ2UrVUlJdGVtUHJvdmlkZXIuaD4KKyNpbXBvcnQgPFVJS2l0L1VJSXRlbVByb3ZpZGVyLmg+
CisjaW1wb3J0IDxVSUtpdC9VSUl0ZW1Qcm92aWRlcl9Qcml2YXRlLmg+CiAjZW5kaWYgLy8gRU5B
QkxFKERSQUdfU1VQUE9SVCkKIAogI2Vsc2UKQEAgLTcwLDYgKzc1LDQyIEBAIFdURl9FWFRFUk5f
Q19FTkQKIC0gKHZvaWQpaGFuZGxlS2V5V2ViRXZlbnQ6KFdlYkV2ZW50ICopdGhlRXZlbnQgd2l0
aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXZWJFdmVudCAqLCBCT09MKSljb21wbGV0aW9u
SGFuZGxlcjsKIEBlbmQKIAorI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCisKK0BpbnRlcmZhY2Ug
TlNVUkwgKCkKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCBzZXR0ZXI9X3NldFRpdGxlOikg
TlNTdHJpbmcgKl90aXRsZTsKK0BlbmQKKworI2RlZmluZSBVSUl0ZW1Qcm92aWRlclJlcHJlc2Vu
dGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGwgTlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZp
c2liaWxpdHlBbGwKKworQHByb3RvY29sIFVJSXRlbVByb3ZpZGVyUmVhZGluZyA8TlNJdGVtUHJv
dmlkZXJSZWFkaW5nPgorCitAcmVxdWlyZWQKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEl0ZW1Q
cm92aWRlckRhdGE6KE5TRGF0YSAqKWRhdGEgdHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopdHlw
ZUlkZW50aWZpZXIgZXJyb3I6KE5TRXJyb3IgKiopb3V0RXJyb3I7CisKK0BlbmQKKworQHByb3Rv
Y29sIFVJSXRlbVByb3ZpZGVyV3JpdGluZyA8TlNJdGVtUHJvdmlkZXJXcml0aW5nPgorCitAcmVx
dWlyZWQKKy0gKE5TUHJvZ3Jlc3MgKilsb2FkRGF0YVdpdGhUeXBlSWRlbnRpZmllcjooTlNTdHJp
bmcgKil0eXBlSWRlbnRpZmllciBmb3JJdGVtUHJvdmlkZXJDb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikoTlNEYXRhICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7CisKK0BlbmQKKwor
QGludGVyZmFjZSBOU0F0dHJpYnV0ZWRTdHJpbmcgKCkgPFVJSXRlbVByb3ZpZGVyUmVhZGluZywg
VUlJdGVtUHJvdmlkZXJXcml0aW5nPgorQGVuZAorQGludGVyZmFjZSBOU1N0cmluZyAoKSA8VUlJ
dGVtUHJvdmlkZXJSZWFkaW5nLCBVSUl0ZW1Qcm92aWRlcldyaXRpbmc+CitAZW5kCitAaW50ZXJm
YWNlIE5TVVJMICgpIDxVSUl0ZW1Qcm92aWRlclJlYWRpbmcsIFVJSXRlbVByb3ZpZGVyV3JpdGlu
Zz4KK0BlbmQKK0BpbnRlcmZhY2UgVUlJbWFnZSAoKSA8VUlJdGVtUHJvdmlkZXJSZWFkaW5nLCBV
SUl0ZW1Qcm92aWRlcldyaXRpbmc+CitAZW5kCisKK0BpbnRlcmZhY2UgVUlJdGVtUHJvdmlkZXIg
OiBOU0l0ZW1Qcm92aWRlcgorQGVuZAorCisjZW5kaWYKKwogI2VuZGlmCiAKIEBwcm90b2NvbCBV
SVRleHRJbnB1dFRyYWl0c19Qcml2YXRlX1Byb3Bvc2VkX1NQSV8zNDU4MzYyOCA8VUlUZXh0SW5w
dXRQcml2YXRlPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvRHJhZ2dpbmdT
aW11bGF0b3JNYWMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9EcmFnZ2luZ1NpbXVsYXRv
ck1hYy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45ZWEzY2M1ZGEwMjZkYjIwYTc5NDgwODYwMTczMmJlOGQ2YzIy
YzJiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvRHJhZ2dpbmdT
aW11bGF0b3JNYWMubW0KQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNv
bmZpZy5oIgorI2ltcG9ydCAiRHJhZ2dpbmdTaW11bGF0b3IuaCIKKworQGltcGxlbWVudGF0aW9u
IERyYWdnaW5nU2ltdWxhdG9yIHsKKyAgICBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gX3dlYlZp
ZXc7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXc6KFRlc3RXS1dlYlZpZXcg
Kil3ZWJWaWV3Cit7CisgICAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICAgICAgX3dl
YlZpZXcgPSB3ZWJWaWV3OworICAgICAgICBbX3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpzZWxmXTsK
KyAgICAgICAgW193ZWJWaWV3IF9zZXRJbnB1dERlbGVnYXRlOnNlbGZdOworICAgIH0KKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgaWYgKFtfd2ViVmlldyBV
SURlbGVnYXRlXSA9PSBzZWxmKQorICAgICAgICBbX3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpuaWxd
OworCisgICAgaWYgKFtfd2ViVmlldyBfaW5wdXREZWxlZ2F0ZV0gPT0gc2VsZikKKyAgICAgICAg
W193ZWJWaWV3IF9zZXRJbnB1dERlbGVnYXRlOm5pbF07CisKKyAgICBbc3VwZXIgZGVhbGxvY107
Cit9CisKKy0gKHZvaWQpcnVuRnJvbTooQ0dQb2ludClzdGFydExvY2F0aW9uIHRvOihDR1BvaW50
KWVuZExvY2F0aW9uCit7CisgICAgLy8gRklYTUU6IEFkZCBhIG1lY2hhbmlzbSB0byBzaW11bGF0
ZSBkcmFnZ2luZyBvbiBtYWNPUy4KKyAgICBVTlVTRURfUEFSQU0oc3RhcnRMb2NhdGlvbik7Cisg
ICAgVU5VU0VEX1BBUkFNKGVuZExvY2F0aW9uKTsKK30KKworLSAoTlNBcnJheTxfV0tBdHRhY2ht
ZW50ICo+ICopaW5zZXJ0ZWRBdHRhY2htZW50cworeworICAgIHJldHVybiBAWyBdOworfQorCist
IChOU0FycmF5PF9XS0F0dGFjaG1lbnQgKj4gKilyZW1vdmVkQXR0YWNobWVudHMKK3sKKyAgICBy
ZXR1cm4gQFsgXTsKK30KKworLSAoRHJhZ0FuZERyb3BQaGFzZSlwaGFzZQoreworICAgIHJldHVy
biBEcmFnQW5kRHJvcFBoYXNlQ2FuY2VsbGVkOworfQorCitAZW5kCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346837</attachid>
            <date>2018-08-09 08:41:50 -0700</date>
            <delta_ts>2018-08-09 09:45:33 -0700</delta_ts>
            <desc>Fix macOS builds</desc>
            <filename>bug-188439-20180809084149.patch</filename>
            <type>text/plain</type>
            <size>298094</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0NjkxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWJlYWUyYTMxYmQzN2YyY2ZkZGY1MThlYjg2ODRiYWUx
YjMwNjEyOC4uYWM1NzdjNzc2MjEyNDE0OTFmNWNiYmY3OGNiOWI1MTY4ZDNjMDM5NCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEx
NiBAQAorMjAxOC0wOC0wOSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
KworICAgICAgICBbaU9TIFdLMl0gUmVuYW1lIGFuZCByZWZhY3RvciBEYXRhSW50ZXJhY3Rpb25U
ZXN0cyBhbmQgRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg0MzkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBEYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgKGN1cnJlbnRseSB1c2VkIGZvciBkcmFnIGFuZCBkcm9wIHRlc3Rpbmcgb24gaU9TKSBzbyB0
aGF0IGl0IGV4aXN0cyBhY3Jvc3MKKyAgICAgICAgbWFjT1MgYW5kIGlPUywgYW5kIHJlbmFtZSBp
dCB0byBEcmFnZ2luZ1NpbXVsYXRvci4gQWRkaXRpb25hbGx5LCByZW5hbWUgRGF0YUludGVyYWN0
aW9uVGVzdHMgdG8KKyAgICAgICAgRHJhZ0FuZERyb3BUZXN0cy4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW06
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL2lvcy9EcmFnQW5kRHJvcFRlc3RzSU9TLm1tOiBSZW5hbWVkIGZyb20gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9pb3MvRGF0YUludGVyYWN0aW9uVGVzdHMubW0uCisgICAgICAgICh0
ZXN0SWNvbkltYWdlKToKKyAgICAgICAgKHRlc3RaSVBBcmNoaXZlKToKKyAgICAgICAgKC1bVUlJ
dGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjp3
aXRoRGF0YTpdKToKKyAgICAgICAgKC1bVGVzdFdLV2ViVmlldyBlZGl0b3JDb250YWluc0ltYWdl
RWxlbWVudF0pOgorICAgICAgICAoLVtUZXN0V0tXZWJWaWV3IGVkaXRvclZhbHVlXSk6CisgICAg
ICAgIChtYWtlQ0dSZWN0VmFsdWUpOgorICAgICAgICAoY2hlY2tDR1JlY3RJc0VxdWFsVG9DR1Jl
Y3RXaXRoTG9nZ2luZyk6CisgICAgICAgIChjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcp
OgorICAgICAgICAoY2hlY2tSaWNoVGV4dFR5cGVQcmVjZWRlc1BsYWluVGV4dFR5cGUpOgorICAg
ICAgICAoY2hlY2tGaXJzdFR5cGVJc1ByZXNlbnRBbmRTZWNvbmRUeXBlSXNNaXNzaW5nKToKKyAg
ICAgICAgKGNoZWNrVHlwZUlkZW50aWZpZXJJc1JlZ2lzdGVyZWRBdEluZGV4KToKKyAgICAgICAg
KGNoZWNrRXN0aW1hdGVkU2l6ZSk6CisgICAgICAgIChjaGVja1N1Z2dlc3RlZE5hbWVBbmRFc3Rp
bWF0ZWRTaXplKToKKyAgICAgICAgKGNoZWNrU3RyaW5nQXJyYXlzQXJlRXF1YWwpOgorICAgICAg
ICAoY2hlY2tEcmFnQ2FyZXRSZWN0SXNDb250YWluZWRJblJlY3QpOgorICAgICAgICAoY2hlY2tK
U09OV2l0aExvZ2dpbmcpOgorICAgICAgICAodGVzdEljb25JbWFnZURhdGEpOgorICAgICAgICAo
cnVuVGVzdFdpdGhUZW1wb3JhcnlUZXh0RmlsZSk6CisgICAgICAgIChydW5UZXN0V2l0aFRlbXBv
cmFyeUZvbGRlcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OnNldFVwVGVzdFdlYlZpZXdGb3JEYXRhVHJhbnNmZXJJdGVtcyk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6dGVzdEljb25JbWFnZURhdGEpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvY29jb2EvRHJhZ2dpbmdTaW11bGF0b3IuaDogUmVuYW1lZCBmcm9tIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5oLgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvaW9zL0RyYWdnaW5nU2ltdWxhdG9ySU9TLm1tOiBSZW5hbWVkIGZyb20g
VG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLm1tLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgZHJvcEludGVyYWN0aW9uRGVsZWdhdGVdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBkcm9wSW50ZXJhY3Rpb25dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRyYWdJbnRlcmFjdGlv
bl0pOgorICAgICAgICAoLVtNb2NrRHJhZ0Ryb3BTZXNzaW9uIGluaXRXaXRoSXRlbXM6bG9jYXRp
b246d2luZG93OmFsbG93TW92ZTpdKToKKyAgICAgICAgKC1bTW9ja0RyYWdEcm9wU2Vzc2lvbiBh
bGxvd3NNb3ZlT3BlcmF0aW9uXSk6CisgICAgICAgICgtW01vY2tEcmFnRHJvcFNlc3Npb24gaXNS
ZXN0cmljdGVkVG9EcmFnZ2luZ0FwcGxpY2F0aW9uXSk6CisgICAgICAgICgtW01vY2tEcmFnRHJv
cFNlc3Npb24gaGFzSXRlbXNDb25mb3JtaW5nVG9UeXBlSWRlbnRpZmllcnM6XSk6CisgICAgICAg
ICgtW01vY2tEcmFnRHJvcFNlc3Npb24gY2FuTG9hZE9iamVjdHNPZkNsYXNzOl0pOgorICAgICAg
ICAoLVtNb2NrRHJhZ0Ryb3BTZXNzaW9uIGNhbkxvYWRPYmplY3RzT2ZDbGFzc2VzOl0pOgorICAg
ICAgICAoLVtNb2NrRHJhZ0Ryb3BTZXNzaW9uIGl0ZW1zXSk6CisgICAgICAgICgtW01vY2tEcmFn
RHJvcFNlc3Npb24gc2V0SXRlbXM6XSk6CisgICAgICAgICgtW01vY2tEcmFnRHJvcFNlc3Npb24g
YWRkSXRlbXM6XSk6CisgICAgICAgICgtW01vY2tEcmFnRHJvcFNlc3Npb24gbG9jYXRpb25JblZp
ZXc6XSk6CisgICAgICAgICgtW01vY2tEcm9wU2Vzc2lvbiBpbml0V2l0aFByb3ZpZGVyczpsb2Nh
dGlvbjp3aW5kb3c6YWxsb3dNb3ZlOl0pOgorICAgICAgICAoLVtNb2NrRHJvcFNlc3Npb24gaXNM
b2NhbF0pOgorICAgICAgICAoLVtNb2NrRHJvcFNlc3Npb24gcHJvZ3Jlc3NdKToKKyAgICAgICAg
KC1bTW9ja0Ryb3BTZXNzaW9uIHNldFByb2dyZXNzSW5kaWNhdG9yU3R5bGU6XSk6CisgICAgICAg
ICgtW01vY2tEcm9wU2Vzc2lvbiBwcm9ncmVzc0luZGljYXRvclN0eWxlXSk6CisgICAgICAgICgt
W01vY2tEcm9wU2Vzc2lvbiBvcGVyYXRpb25NYXNrXSk6CisgICAgICAgICgtW01vY2tEcm9wU2Vz
c2lvbiBsb2NhbERyYWdTZXNzaW9uXSk6CisgICAgICAgICgtW01vY2tEcm9wU2Vzc2lvbiBoYXNJ
dGVtc0NvbmZvcm1pbmdUb1R5cGVJZGVudGlmaWVyOl0pOgorICAgICAgICAoLVtNb2NrRHJvcFNl
c3Npb24gY2FuQ3JlYXRlSXRlbXNPZkNsYXNzOl0pOgorICAgICAgICAoLVtNb2NrRHJvcFNlc3Np
b24gbG9hZE9iamVjdHNPZkNsYXNzOmNvbXBsZXRpb246XSk6CisgICAgICAgICgtW01vY2tEcmFn
U2Vzc2lvbiBpbml0V2l0aFdpbmRvdzphbGxvd01vdmU6XSk6CisgICAgICAgICgtW01vY2tEcmFn
U2Vzc2lvbiBsb2NhbE9wZXJhdGlvbk1hc2tdKToKKyAgICAgICAgKC1bTW9ja0RyYWdTZXNzaW9u
IGV4dGVybmFsT3BlcmF0aW9uTWFza10pOgorICAgICAgICAoLVtNb2NrRHJhZ1Nlc3Npb24gc2Vz
c2lvbl0pOgorICAgICAgICAoLVtNb2NrRHJhZ1Nlc3Npb24gbG9jYWxDb250ZXh0XSk6CisgICAg
ICAgICgtW01vY2tEcmFnU2Vzc2lvbiBzZXRMb2NhbENvbnRleHQ6XSk6CisgICAgICAgIChkcmFn
QW5kRHJvcEV2ZW50TmFtZXMpOgorICAgICAgICAoLVtEcmFnZ2luZ1NpbXVsYXRvckFwcGxpY2F0
aW9uIF9jYW5jZWxBbGxUb3VjaGVzXSk6CisgICAgICAgICgtW0RyYWdnaW5nU2ltdWxhdG9yIGlu
aXRXaXRoV2ViVmlldzpdKToKKyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3IgZGVhbGxvY10p
OgorICAgICAgICAoLVtEcmFnZ2luZ1NpbXVsYXRvciBfcmVzZXRTaW11bGF0ZWRTdGF0ZV0pOgor
ICAgICAgICAoLVtEcmFnZ2luZ1NpbXVsYXRvciBvYnNlcnZlZEV2ZW50TmFtZXNdKToKKyAgICAg
ICAgKC1bRHJhZ2dpbmdTaW11bGF0b3Igc2ltdWxhdGVBbGxUb3VjaGVzQ2FuY2VsZWQ6XSk6Cisg
ICAgICAgICgtW0RyYWdnaW5nU2ltdWxhdG9yIHJ1bkZyb206dG86XSk6CisgICAgICAgICgtW0Ry
YWdnaW5nU2ltdWxhdG9yIHJ1bkZyb206dG86YWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25z
Ol0pOgorICAgICAgICAoLVtEcmFnZ2luZ1NpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk6
CisgICAgICAgICgtW0RyYWdnaW5nU2ltdWxhdG9yIF9jb25jbHVkZURyb3BBbmRQZXJmb3JtT3Bl
cmF0aW9uSWZOZWNlc3NhcnldKToKKyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3IgX2VucXVl
dWVQZW5kaW5nQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zXSk6CisgICAgICAgICgtW0Ry
YWdnaW5nU2ltdWxhdG9yIF9zZW5kUXVldWVkQWRkaXRpb25hbEl0ZW1SZXF1ZXN0XSk6CisgICAg
ICAgICgtW0RyYWdnaW5nU2ltdWxhdG9yIF9hZHZhbmNlUHJvZ3Jlc3NdKToKKyAgICAgICAgKC1b
RHJhZ2dpbmdTaW11bGF0b3IgX2N1cnJlbnRMb2NhdGlvbl0pOgorICAgICAgICAoLVtEcmFnZ2lu
Z1NpbXVsYXRvciBfc2NoZWR1bGVBZHZhbmNlUHJvZ3Jlc3NdKToKKyAgICAgICAgKC1bRHJhZ2dp
bmdTaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10pOgorICAgICAgICAoLVtEcmFnZ2luZ1Np
bXVsYXRvciBleHRlcm5hbEl0ZW1Qcm92aWRlcnNdKToKKyAgICAgICAgKC1bRHJhZ2dpbmdTaW11
bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOl0pOgorICAgICAgICAoLVtEcmFnZ2luZ1Np
bXVsYXRvciBwaGFzZV0pOgorICAgICAgICAoLVtEcmFnZ2luZ1NpbXVsYXRvciBsaWZ0UHJldmll
d3NdKToKKyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3IgbGFzdEtub3duRHJhZ0NhcmV0UmVj
dF0pOgorICAgICAgICAoLVtEcmFnZ2luZ1NpbXVsYXRvciB3YWl0Rm9ySW5wdXRTZXNzaW9uXSk6
CisgICAgICAgICgtW0RyYWdnaW5nU2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVudHNdKToKKyAg
ICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3IgcmVtb3ZlZEF0dGFjaG1lbnRzXSk6CisgICAgICAg
ICgtW0RyYWdnaW5nU2ltdWxhdG9yIGVuZERhdGFUcmFuc2Zlcl0pOgorICAgICAgICAoLVtEcmFn
Z2luZ1NpbXVsYXRvciBfd2ViVmlldzpkYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25XYXNIYW5kbGVk
OmZvclNlc3Npb246aXRlbVByb3ZpZGVyczpdKToKKyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0
b3IgX3dlYlZpZXc6d2lsbFVwZGF0ZURhdGFJbnRlcmFjdGlvbk9wZXJhdGlvblRvT3BlcmF0aW9u
OmZvclNlc3Npb246XSk6CisgICAgICAgICgtW0RyYWdnaW5nU2ltdWxhdG9yIF93ZWJWaWV3OmFk
anVzdGVkRGF0YUludGVyYWN0aW9uSXRlbVByb3ZpZGVyc0Zvckl0ZW1Qcm92aWRlcjpyZXByZXNl
bnRpbmdPYmplY3RzOmFkZGl0aW9uYWxEYXRhOl0pOgorICAgICAgICAoLVtEcmFnZ2luZ1NpbXVs
YXRvciBfd2ViVmlldzpzaG93Q3VzdG9tU2hlZXRGb3JFbGVtZW50Ol0pOgorICAgICAgICAoLVtE
cmFnZ2luZ1NpbXVsYXRvciBfd2ViVmlldzp3aWxsUGVyZm9ybURyb3BXaXRoU2Vzc2lvbjpdKToK
KyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3IgX3dlYlZpZXc6ZGlkSW5zZXJ0QXR0YWNobWVu
dDpdKToKKyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3IgX3dlYlZpZXc6ZGlkUmVtb3ZlQXR0
YWNobWVudDpdKToKKyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3IgX3dlYlZpZXc6Zm9jdXNT
aG91bGRTdGFydElucHV0U2Vzc2lvbjpdKToKKyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3Ig
X3dlYlZpZXc6ZGlkU3RhcnRJbnB1dFNlc3Npb246XSk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9pb3MvVUlLaXRTUEkuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL21hYy9EcmFnZ2luZ1Np
bXVsYXRvck1hYy5tbTogQWRkZWQuCisgICAgICAgICgtW0RyYWdnaW5nU2ltdWxhdG9yIGluaXRX
aXRoV2ViVmlldzpdKToKKyAgICAgICAgKC1bRHJhZ2dpbmdTaW11bGF0b3IgZGVhbGxvY10pOgor
ICAgICAgICAoLVtEcmFnZ2luZ1NpbXVsYXRvciBydW5Gcm9tOnRvOl0pOgorICAgICAgICAoLVtE
cmFnZ2luZ1NpbXVsYXRvciBpbnNlcnRlZEF0dGFjaG1lbnRzXSk6CisgICAgICAgICgtW0RyYWdn
aW5nU2ltdWxhdG9yIHJlbW92ZWRBdHRhY2htZW50c10pOgorCiAyMDE4LTA4LTA4ICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIGZhc3QvZXZl
bnRzL2lvcy9jb250ZW50ZWRpdGFibGUtYXV0b2NhcGl0YWxpemUuaHRtbCBpcyBhIGZsYWt5IGZh
aWx1cmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggM2UwMzZjMzNmZDQ2MTc5ZjQwMDM5MDEy
YmQwOGQ0NWZjZjYwOWIxMy4uZjJlYWZkNWE2YmY2OTg2ZDljMjBiN2M5ODI3YzlhYTg2ODU0YWE1
OCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTgwOCw2ICs4MDgsNyBAQAogCQlGNDVCNjNG
RTFGMTlENDEwMDA5RDM4QjkgLyogQWN0aW9uU2hlZXRUZXN0cy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NUI2M0ZDMUYxOUQ0MTAwMDlEMzhCOSAv
KiBBY3Rpb25TaGVldFRlc3RzLm1tICovOyB9OwogCQlGNDVFMTU3MzIxMTJDRTI5MDAzMDdFODIg
LyogS2V5Ym9hcmRJbnB1dFRlc3RzSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjQ1RTE1NzIyMTEyQ0UyOTAwMzA3RTgyIC8qIEtleWJvYXJkSW5w
dXRUZXN0c0lPUy5tbSAqLzsgfTsKIAkJRjQ1RTE1NzYyMTEyQ0U2MjAwMzA3RTgyIC8qIFRlc3RJ
bnB1dERlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjQ1RTE1NzUyMTEyQ0U2MjAwMzA3RTgyIC8qIFRlc3RJbnB1dERlbGVnYXRlLm1tICov
OyB9OworCQlGNDYxMjhCNzIxMUM4RUQ1MDBEOUZBREIgLyogRHJhZ2dpbmdTaW11bGF0b3JNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDYxMjhC
NjIxMUM4RUQ1MDBEOUZBREIgLyogRHJhZ2dpbmdTaW11bGF0b3JNYWMubW0gKi87IH07CiAJCUY0
NjRBRjkyMjBCQjY2RUEwMDdGOUIxOCAvKiBSZW5kZXJpbmdQcm9ncmVzc1Rlc3RzLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ2NEFGOTEyMEJCNjZF
QTAwN0Y5QjE4IC8qIFJlbmRlcmluZ1Byb2dyZXNzVGVzdHMubW0gKi87IH07CiAJCUY0Njg0OUJF
MUVFRjU4RTQwMEI5MzdGRSAvKiBVSVBhc3RlYm9hcmRUZXN0cy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0Njg0OUJEMUVFRjU4RTQwMEI5MzdGRSAv
KiBVSVBhc3RlYm9hcmRUZXN0cy5tbSAqLzsgfTsKIAkJRjQ2ODQ5QzAxRUVGNUVGMzAwQjkzN0ZF
IC8qIHJpY2gtYW5kLXBsYWluLXRleHQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDY4NDlCRjFFRUY1RURDMDBCOTM3RkUgLyogcmlj
aC1hbmQtcGxhaW4tdGV4dC5odG1sICovOyB9OwpAQCAtODI5LDggKzgzMCw4IEBACiAJCUY0Q0Q3
NEM2MjBGREFDRkEwMERFMzc5NCAvKiB0ZXh0LXdpdGgtYXN5bmMtc2NyaXB0Lmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRDRDc0QzUy
MEZEQUNGNTAwREUzNzk0IC8qIHRleHQtd2l0aC1hc3luYy1zY3JpcHQuaHRtbCAqLzsgfTsKIAkJ
RjRDRDc0QzkyMEZEQjQ5NjAwREUzNzk0IC8qIFRlc3RVUkxTY2hlbWVIYW5kbGVyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRDRDc0QzgyMEZEQjQ5
NjAwREUzNzk0IC8qIFRlc3RVUkxTY2hlbWVIYW5kbGVyLm1tICovOyB9OwogCQlGNEQyOTg2RTIw
RkVFNzM3MDA5MkQ2MzYgLyogUnVuU2NyaXB0QWZ0ZXJEb2N1bWVudExvYWQubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEQyOTg2RDIwRkVFNzM3MDA5
MkQ2MzYgLyogUnVuU2NyaXB0QWZ0ZXJEb2N1bWVudExvYWQubW0gKi87IH07Ci0JCUY0RDRGM0I2
MUU0RTJCQ0IwMEJCMjc2NyAvKiBEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEQ0RjNCNDFFNEUyQkNCMDBC
QjI3NjcgLyogRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLm1tICovOyB9OwotCQlGNEQ0RjNCOTFF
NEUzNkU0MDBCQjI3NjcgLyogRGF0YUludGVyYWN0aW9uVGVzdHMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEQ0RjNCNzFFNEUzNkU0MDBCQjI3Njcg
LyogRGF0YUludGVyYWN0aW9uVGVzdHMubW0gKi87IH07CisJCUY0RDRGM0I2MUU0RTJCQ0IwMEJC
Mjc2NyAvKiBEcmFnZ2luZ1NpbXVsYXRvcklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RDRGM0I0MUU0RTJCQ0IwMEJCMjc2NyAvKiBEcmFnZ2lu
Z1NpbXVsYXRvcklPUy5tbSAqLzsgfTsKKwkJRjRENEYzQjkxRTRFMzZFNDAwQkIyNzY3IC8qIERy
YWdBbmREcm9wVGVzdHNJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNEQ0RjNCNzFFNEUzNkU0MDBCQjI3NjcgLyogRHJhZ0FuZERyb3BUZXN0c0lP
Uy5tbSAqLzsgfTsKIAkJRjRENUU0RTgxRjBDNUQzODAwOEMxQTQ5IC8qIGRyYWdzdGFydC1jbGVh
ci1zZWxlY3Rpb24uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNEQ1RTRFNzFGMEM1RDI3MDA4QzFBNDkgLyogZHJhZ3N0YXJ0LWNsZWFy
LXNlbGVjdGlvbi5odG1sICovOyB9OwogCQlGNEQ2NURBODFGNUU0NzA0MDA5RDhDMjcgLyogc2Vs
ZWN0ZWQtdGV4dC1pbWFnZS1saW5rLWFuZC1lZGl0YWJsZS5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RDY1REE3MUY1RTQ2QzAwMDlE
OEMyNyAvKiBzZWxlY3RlZC10ZXh0LWltYWdlLWxpbmstYW5kLWVkaXRhYmxlLmh0bWwgKi87IH07
CiAJCUY0REVGNkVEMUU5QjREQjYwMDQ4RUY2MSAvKiBpbWFnZS1pbi1saW5rLWFuZC1pbnB1dC5o
dG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0REVGNkVDMUU5QjREOTUwMDQ4RUY2MSAvKiBpbWFnZS1pbi1saW5rLWFuZC1pbnB1dC5odG1s
ICovOyB9OwpAQCAtMjAzMiw2ICsyMDMzLDggQEAKIAkJRjQ1RTE1NzIyMTEyQ0UyOTAwMzA3RTgy
IC8qIEtleWJvYXJkSW5wdXRUZXN0c0lPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEtleWJv
YXJkSW5wdXRUZXN0c0lPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ1RTE1
NzQyMTEyQ0U2MjAwMzA3RTgyIC8qIFRlc3RJbnB1dERlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRlc3RJbnB1dERlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NUUx
NTc1MjExMkNFNjIwMDMwN0U4MiAvKiBUZXN0SW5wdXREZWxlZ2F0ZS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFRlc3RJbnB1dERlbGVnYXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGNDYxMjhCNDIxMUM4NjFBMDBEOUZBREIgLyogRHJhZ2dpbmdTaW11bGF0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRHJhZ2dpbmdTaW11bGF0b3IuaDsgcGF0aCA9
IGNvY29hL0RyYWdnaW5nU2ltdWxhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUY0NjEyOEI2MjExQzhFRDUwMEQ5RkFEQiAvKiBEcmFnZ2luZ1NpbXVsYXRvck1hYy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IERyYWdnaW5nU2ltdWxhdG9yTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGNDY0QUY5MTIwQkI2NkVBMDA3RjlCMTggLyogUmVuZGVyaW5nUHJv
Z3Jlc3NUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbmRlcmluZ1Byb2dyZXNzVGVz
dHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0Njg0OUJEMUVFRjU4RTQwMEI5
MzdGRSAvKiBVSVBhc3RlYm9hcmRUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFVJUGFz
dGVib2FyZFRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDY4NDlCRjFF
RUY1RURDMDBCOTM3RkUgLyogcmljaC1hbmQtcGxhaW4tdGV4dC5odG1sICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gInJp
Y2gtYW5kLXBsYWluLXRleHQuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MDU1LDkgKzIwNTgsOCBAQAogCQlGNENENzRDNzIwRkRCNDk2MDBERTM3OTQgLyogVGVzdFVSTFNj
aGVtZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVzdFVSTFNjaGVtZUhhbmRsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRDRDc0QzgyMEZEQjQ5NjAwREUzNzk0IC8qIFRl
c3RVUkxTY2hlbWVIYW5kbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGVzdFVSTFNjaGVt
ZUhhbmRsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0RDI5ODZEMjBGRUU3
MzcwMDkyRDYzNiAvKiBSdW5TY3JpcHRBZnRlckRvY3VtZW50TG9hZC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFJ1blNjcmlwdEFmdGVyRG9jdW1lbnRMb2FkLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGNEQ0RjNCNDFFNEUyQkNCMDBCQjI3NjcgLyogRGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
NEQ0RjNCNTFFNEUyQkNCMDBCQjI3NjcgLyogRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGNEQ0RjNCNzFFNEUzNkU0MDBCQjI3Njcg
LyogRGF0YUludGVyYWN0aW9uVGVzdHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBEYXRhSW50ZXJhY3Rpb25UZXN0cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRjRENEYzQjQxRTRFMkJDQjAwQkIyNzY3IC8qIERyYWdnaW5nU2ltdWxhdG9ySU9T
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRHJhZ2dpbmdTaW11
bGF0b3JJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0RDRGM0I3MUU0RTM2
RTQwMEJCMjc2NyAvKiBEcmFnQW5kRHJvcFRlc3RzSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRHJhZ0FuZERyb3BUZXN0c0lPUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRjRENUU0RTcxRjBDNUQyNzAwOEMxQTQ5IC8qIGRyYWdzdGFydC1j
bGVhci1zZWxlY3Rpb24uaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJkcmFnc3RhcnQtY2xlYXItc2VsZWN0aW9u
Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEQ2NURBNzFGNUU0NkMwMDA5
RDhDMjcgLyogc2VsZWN0ZWQtdGV4dC1pbWFnZS1saW5rLWFuZC1lZGl0YWJsZS5odG1sICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5odG1sOyBwYXRoID0gInNlbGVjdGVkLXRleHQtaW1hZ2UtbGluay1hbmQtZWRp
dGFibGUuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0REVGNkVDMUU5QjRE
OTUwMDQ4RUY2MSAvKiBpbWFnZS1pbi1saW5rLWFuZC1pbnB1dC5odG1sICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5odG1sOyBwYXRoID0gImltYWdlLWluLWxpbmstYW5kLWlucHV0Lmh0bWwiOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjE5NSw2ICsyMTk3LDcgQEAKIAkJCQlBMTNFQkI0NDFCODcz
MzJCMDAwOTcxMTAgLyogV2ViUHJvY2Vzc1BsdWdJbiAqLywKIAkJCQlGNDUxN0I2ODIwNTRFMEFD
MDBDMjY3MjEgLyogQ2xhc3NNZXRob2RTd2l6emxlci5oICovLAogCQkJCUY0NTE3QjY5MjA1NEUw
QUMwMEMyNjcyMSAvKiBDbGFzc01ldGhvZFN3aXp6bGVyLm1tICovLAorCQkJCUY0NjEyOEI0MjEx
Qzg2MUEwMEQ5RkFEQiAvKiBEcmFnZ2luZ1NpbXVsYXRvci5oICovLAogCQkJCUY0NEQwNjQ4MUYz
OTYyRTMwMDFBMEUyOSAvKiBFZGl0aW5nVGVzdEhhcm5lc3MuaCAqLywKIAkJCQlGNDREMDY0OTFG
Mzk2MkUzMDAxQTBFMjkgLyogRWRpdGluZ1Rlc3RIYXJuZXNzLm1tICovLAogCQkJCTVDNzI2RDZE
MUQzRUUwNjgwMEM1RTFBMSAvKiBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyLmggKi8sCkBAIC0yNDEw
LDggKzI0MTMsNyBAQAogCQkyRTk2NjBEQzE2QzA3RDdCMDAzNzFCNDIgLyogaW9zICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlGNEQ0RjNCNTFFNEUyQkNC
MDBCQjI3NjcgLyogRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmggKi8sCi0JCQkJRjRENEYzQjQx
RTRFMkJDQjAwQkIyNzY3IC8qIERhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5tbSAqLywKKwkJCQlG
NEQ0RjNCNDFFNEUyQkNCMDBCQjI3NjcgLyogRHJhZ2dpbmdTaW11bGF0b3JJT1MubW0gKi8sCiAJ
CQkJMkU3NzY1Q0MxNkM0RDgwQTAwQkEyQkIxIC8qIG1haW5JT1MubW0gKi8sCiAJCQkJRjQ1MTdC
NjUyMDU0QzQ5NTAwQzI2NzIxIC8qIFRlc3RXS1dlYlZpZXdDb250cm9sbGVyLmggKi8sCiAJCQkJ
RjQ1MTdCNjYyMDU0QzQ5NTAwQzI2NzIxIC8qIFRlc3RXS1dlYlZpZXdDb250cm9sbGVyLm1tICov
LApAQCAtMjQ5Niw3ICsyNDk4LDcgQEAKIAkJCQlBMUM0RkI2RjFCQUNDRUZBMDAzNzQyRDAgLyog
UmVzb3VyY2VzICovLAogCQkJCTJFMjA1QkEzMUY1Mjc3NDYwMDU5NTJERCAvKiBBY2Nlc3NpYmls
aXR5VGVzdHNJT1MubW0gKi8sCiAJCQkJRjQ1QjYzRkMxRjE5RDQxMDAwOUQzOEI5IC8qIEFjdGlv
blNoZWV0VGVzdHMubW0gKi8sCi0JCQkJRjRENEYzQjcxRTRFMzZFNDAwQkIyNzY3IC8qIERhdGFJ
bnRlcmFjdGlvblRlc3RzLm1tICovLAorCQkJCUY0RDRGM0I3MUU0RTM2RTQwMEJCMjc2NyAvKiBE
cmFnQW5kRHJvcFRlc3RzSU9TLm1tICovLAogCQkJCUY0NUUxNTcyMjExMkNFMjkwMDMwN0U4MiAv
KiBLZXlib2FyZElucHV0VGVzdHNJT1MubW0gKi8sCiAJCQkJNTc0RjU1Q0UyMDREMzc2MzAwMjk0
OEM2IC8qIExvY2FsQXV0aGVudGljYXRvci5tbSAqLywKIAkJCQk3NTYwOTE3NzE5MjU5QzU5MDA5
RUYwNkUgLyogTWVtb3J5Q2FjaGVBZGRJbWFnZVRvQ2FjaGVJT1MubW0gKi8sCkBAIC0zMDk2LDYg
KzMwOTgsNyBAQAogCQlCQ0E2MUMzQTExNzAwQjk0MDA0NjBEMUUgLyogbWFjICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlGNDYxMjhCNjIxMUM4RUQ1MDBE
OUZBREIgLyogRHJhZ2dpbmdTaW11bGF0b3JNYWMubW0gKi8sCiAJCQkJMUFFREUyMjQxM0U1RTdB
MDAwRTYyRkU4IC8qIEluamVjdGVkQnVuZGxlQ29udHJvbGxlck1hYy5tbSAqLywKIAkJCQlDMDgx
MjI0MDEzRkMxNzI0MDBEQzM5QUUgLyogSmF2YVNjcmlwdFRlc3RNYWMubW0gKi8sCiAJCQkJMkU3
NzY1Q0UxNkM0RDgxMTAwQkEyQkIxIC8qIG1haW5NYWMubW0gKi8sCkBAIC0zNjcwLDggKzM2NzMs
NiBAQAogCQkJCTQ2QTkxMTU5MjEwOEU2NzgwMDc4RDQwRCAvKiBDdXN0b21Vc2VyQWdlbnQubW0g
aW4gU291cmNlcyAqLywKIAkJCQk3NTFCMDVENjFGOEVBQzQxMDAyOEEwOUUgLyogRGF0YWJhc2VU
cmFja2VyVGVzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEQzRDRjc3MUQyRDlERDgwMEVDQ0M5
NCAvKiBEYXRhRGV0ZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJRjRENEYzQjYxRTRFMkJD
QjAwQkIyNzY3IC8qIERhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5tbSBpbiBTb3VyY2VzICovLAot
CQkJCUY0RDRGM0I5MUU0RTM2RTQwMEJCMjc2NyAvKiBEYXRhSW50ZXJhY3Rpb25UZXN0cy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTUxOEVFNTFEMjBBNzhEMzYwMEUwMjRGMyAvKiBEZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQxNjQ2RTIxRDE4
NjJDRDAwMDE1QTFBIC8qIERlZmVycmVkVmlld0luV2luZG93U3RhdGVDaGFuZ2UubW0gaW4gU291
cmNlcyAqLywKIAkJCQk3Q0NFN0VCOTFBNDExQTdFMDA0NDdDNEMgLyogRGV2aWNlU2NhbGVGYWN0
b3JJbkRhc2hib2FyZFJlZ2lvbnMubW0gaW4gU291cmNlcyAqLywKQEAgLTM2OTQsNiArMzY5NSw5
IEBACiAJCQkJN0NDRTdGMjMxQTQxMUFGNjAwNDQ3QzRDIC8qIERvd25sb2FkLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0NDRTdFRUUxQTQxMUFFNjAwNDQ3QzRDIC8qIERvd25sb2FkRGVjaWRlRGVz
dGluYXRpb25DcmFzaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNEJGQTY4RTFFNEFEMDgwMDAx
NTQyOTggLyogRHJhZ0FuZERyb3BQYXN0ZWJvYXJkVGVzdHMubW0gaW4gU291cmNlcyAqLywKKwkJ
CQlGNEQ0RjNCOTFFNEUzNkU0MDBCQjI3NjcgLyogRHJhZ0FuZERyb3BUZXN0c0lPUy5tbSBpbiBT
b3VyY2VzICovLAorCQkJCUY0RDRGM0I2MUU0RTJCQ0IwMEJCMjc2NyAvKiBEcmFnZ2luZ1NpbXVs
YXRvcklPUy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUY0NjEyOEI3MjExQzhFRDUwMEQ5RkFEQiAv
KiBEcmFnZ2luZ1NpbXVsYXRvck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExNTUwMjJBMUUw
NTAyMEIwMEEyNEM1NyAvKiBEdXBsaWNhdGVDb21wbGV0aW9uSGFuZGxlckNhbGxzLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0NDRTdFQkUxQTQxMUE3RTAwNDQ3QzRDIC8qIER5bmFtaWNEZXZpY2VT
Y2FsZUZhY3Rvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDMEJGODkyMURENTk5QjYwMEIwMDMy
OCAvKiBFYXJseUtWT0NyYXNoLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbQpp
bmRleCA0Njg5ZGE0M2IzYjdiMTkxYWIwODFkZjFlY2JhYjQyODFkYzAzOGJmLi5hZWZhNzVhOWQ2
MTVlOTc5YTViYjgwMTgwNTVjMmYzNDI3OGMzOTQwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0KQEAg
LTI1LDcgKzI1LDcgQEAKIAogI2ltcG9ydCAiY29uZmlnLmgiCiAKLSNpbXBvcnQgIkRhdGFJbnRl
cmFjdGlvblNpbXVsYXRvci5oIgorI2ltcG9ydCAiRHJhZ2dpbmdTaW11bGF0b3IuaCIKICNpbXBv
cnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1w
b3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLmgiCkBAIC0xMTk0LDcgKzExOTQsNyBA
QCBURVNUKFdLQXR0YWNobWVudFRlc3RzTWFjLCBJbnNlcnRQYXN0ZWRGaWxlVVJMc0FzQXR0YWNo
bWVudHMpCiBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBJbnNlcnREcm9wcGVkSW1hZ2VBc0F0
dGFjaG1lbnQpCiB7CiAgICAgYXV0byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2ht
ZW50cygpOwotICAgIGF1dG8gZHJhZ2dpbmdTaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwor
ICAgIGF1dG8gZHJhZ2dpbmdTaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3Ig
YWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CiAgICAgYXV0byBpdGVtID0g
YWRvcHROUyhbW05TSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CiAgICAgW2l0ZW0gcmVnaXN0
ZXJEYXRhOnRlc3RJbWFnZURhdGEoKSB0eXBlOihOU1N0cmluZyAqKWtVVFR5cGVQTkddOwogICAg
IFtkcmFnZ2luZ1NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbS5nZXQo
KSBdXTsKQEAgLTEyMTcsNyArMTIxNyw3IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIElu
c2VydERyb3BwZWRJbWFnZUFzQXR0YWNobWVudCkKIFRFU1QoV0tBdHRhY2htZW50VGVzdHNJT1Ms
IEluc2VydERyb3BwZWRBdHRyaWJ1dGVkU3RyaW5nQ29udGFpbmluZ0F0dGFjaG1lbnQpCiB7CiAg
ICAgYXV0byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOwotICAgIGF1
dG8gZHJhZ2dpbmdTaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
IGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIGF1dG8gZHJhZ2dp
bmdTaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRo
V2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CiAgICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU1Rl
eHRBdHRhY2htZW50IGFsbG9jXSBpbml0V2l0aERhdGE6dGVzdEltYWdlRGF0YSgpIG9mVHlwZToo
TlNTdHJpbmcgKilrVVRUeXBlUE5HXSk7CiAgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW05TSXRl
bVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CiAgICAgW2l0ZW0gcmVnaXN0ZXJPYmplY3Q6W05TQXR0
cmlidXRlZFN0cmluZyBhdHRyaWJ1dGVkU3RyaW5nV2l0aEF0dGFjaG1lbnQ6aW1hZ2UuZ2V0KCld
IHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGxdOwpA
QCAtMTI2MCw3ICsxMjYwLDcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0c0lPUywgSW5zZXJ0RHJv
cHBlZFJpY2hBbmRQbGFpblRleHRGaWxlc0FzQXR0YWNobWVudHMpCiAgICAgW3BsYWluVGV4dEl0
ZW0gc2V0U3VnZ2VzdGVkTmFtZTpAIndvcmxkLnR4dCJdOwogCiAgICAgYXV0byB3ZWJWaWV3ID0g
d2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOwotICAgIGF1dG8gZHJhZ2dpbmdTaW11bGF0
b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdl
YlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIGF1dG8gZHJhZ2dpbmdTaW11bGF0b3IgPSBhZG9w
dE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3Lmdl
dCgpXSk7CiAgICAgW2RyYWdnaW5nU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpA
WyByaWNoVGV4dEl0ZW0uZ2V0KCksIHBsYWluVGV4dEl0ZW0uZ2V0KCkgXV07CiAgICAgW2RyYWdn
aW5nU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludFplcm8gdG86Q0dQb2ludE1ha2UoNTAsIDUwKV07
CiAKQEAgLTEyOTMsNyArMTI5Myw3IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIEluc2Vy
dERyb3BwZWRaaXBBcmNoaXZlQXNBdHRhY2htZW50KQogICAgIFtpdGVtIHNldFN1Z2dlc3RlZE5h
bWU6QCJhcmNoaXZlLnppcCJdOwogCiAgICAgYXV0byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3Rp
bmdBdHRhY2htZW50cygpOwotICAgIGF1dG8gZHJhZ2dpbmdTaW11bGF0b3IgPSBhZG9wdE5TKFtb
RGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5n
ZXQoKV0pOworICAgIGF1dG8gZHJhZ2dpbmdTaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdT
aW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CiAgICAgW2Ry
YWdnaW5nU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtLmdldCgpIF1d
OwogICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRaZXJvIHRvOkNHUG9pbnRN
YWtlKDUwLCA1MCldOwogCkBAIC0xMzIzLDcgKzEzMjMsNyBAQCBURVNUKFdLQXR0YWNobWVudFRl
c3RzSU9TLCBJbnNlcnREcm9wcGVkSXRlbVByb3ZpZGVyc0luT3JkZXIpCiAgICAgW3NlY29uZEF0
dGFjaG1lbnRJdGVtIHNldFN1Z2dlc3RlZE5hbWU6QCJzZWNvbmQucGRmIl07CiAKICAgICBhdXRv
IHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7Ci0gICAgYXV0byBkcmFn
Z2luZ1NpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2Nd
IGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgYXV0byBkcmFnZ2luZ1NpbXVs
YXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3
OndlYlZpZXcuZ2V0KCldKTsKICAgICBbZHJhZ2dpbmdTaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVt
UHJvdmlkZXJzOkBbIGZpcnN0QXR0YWNobWVudEl0ZW0uZ2V0KCksIGlubGluZVRleHRJdGVtLmdl
dCgpLCBzZWNvbmRBdHRhY2htZW50SXRlbS5nZXQoKSBdXTsKICAgICBbZHJhZ2dpbmdTaW11bGF0
b3IgcnVuRnJvbTpDR1BvaW50WmVybyB0bzpDR1BvaW50TWFrZSg1MCwgNTApXTsKIApAQCAtMTM1
NSw3ICsxMzU1LDcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0c0lPUywgRHJhZ0F0dGFjaG1lbnRJ
bnNlcnRlZEFzRmlsZSkKICAgICBbaXRlbSBzZXRTdWdnZXN0ZWROYW1lOkAiZG9jdW1lbnQucGRm
Il07CiAKICAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7
Ci0gICAgYXV0byBkcmFnZ2luZ1NpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgYXV0
byBkcmFnZ2luZ1NpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10g
aW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKICAgICBbZHJhZ2dpbmdTaW11bGF0b3Ig
c2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW0uZ2V0KCkgXV07CiAgICAgW2RyYWdnaW5n
U2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludFplcm8gdG86Q0dQb2ludE1ha2UoNTAsIDUwKV07CiAK
QEAgLTEzOTYsNyArMTM5Niw3IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIERyYWdBdHRh
Y2htZW50SW5zZXJ0ZWRBc0RhdGEpCiAgICAgRVhQRUNUX1dLX1NUUkVRKCJhcHBsaWNhdGlvbi9w
ZGYiLCBbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3RvcjpA
ImF0dGFjaG1lbnQiXSk7CiAKICAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJnZXRT
ZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKLSAg
ICBhdXRvIGRyYWdnaW5nU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBhdXRvIGRy
YWdnaW5nU2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0
V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwogICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBydW5G
cm9tOkNHUG9pbnRNYWtlKDI1LCAyNSkgdG86Q0dQb2ludE1ha2UoLTEwMCwgLTEwMCldOwogCiAg
ICAgLy8gTmV4dCwgdmVyaWZ5IHRoYXQgZHJhZ2dpbmcgdGhlIGF0dGFjaG1lbnQgcHJvZHVjZXMg
YW4gaXRlbSBwcm92aWRlciB3aXRoIGEgUERGIGF0dGFjaG1lbnQuCkBAIC0xNDI1LDcgKzE0MjUs
NyBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBEcmFnSW5QbGFjZVZpZGVvQXR0YWNobWVu
dEVsZW1lbnQpCiAgICAgRVhQRUNUX1dLX1NUUkVRKCJ2aWRlby9tcDQiLCBbd2ViVmlldyB2YWx1
ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7CiAK
ICAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVB
bGxSYW5nZXMoKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKLSAgICBhdXRvIGRyYWdnaW5nU2lt
dWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdp
dGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBhdXRvIGRyYWdnaW5nU2ltdWxhdG9yID0g
YWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmll
dy5nZXQoKV0pOwogICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDI1
LCAyNSkgdG86Q0dQb2ludE1ha2UoLTEwMCwgLTEwMCldOwogCiAgICAgRVhQRUNUX0VRKDFVLCBb
ZHJhZ2dpbmdTaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10uY291bnQpOwpAQCAtMTQ1Miw3
ICsxNDUyLDcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0c0lPUywgTW92ZUF0dGFjaG1lbnRFbGVt
ZW50QXNJY29uQnlEcmFnZ2luZykKICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVF
ZGl0Q29tbWFuZDpAIkluc2VydFBhcmFncmFwaCIgYXJndW1lbnQ6bmlsXTsKICAgICBbd2ViVmll
dyBleHBlY3RFbGVtZW50VGFnOkAiQVRUQUNITUVOVCIgdG9Db21lQmVmb3JlOkAiU1RST05HIl07
CiAKLSAgICBhdXRvIGRyYWdnaW5nU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBh
dXRvIGRyYWdnaW5nU2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwogICAgIFtkcmFnZ2luZ1NpbXVsYXRv
ciBydW5Gcm9tOkNHUG9pbnRNYWtlKDI1LCAyNSkgdG86Q0dQb2ludE1ha2UoMjUsIDQyNSldOwog
CiAgICAgYXR0YWNobWVudCA9IFtbZHJhZ2dpbmdTaW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50
c10gZmlyc3RPYmplY3RdOwpAQCAtMTQ4MSw3ICsxNDgxLDcgQEAgVEVTVChXS0F0dGFjaG1lbnRU
ZXN0c0lPUywgTW92ZUluUGxhY2VBdHRhY2htZW50RWxlbWVudEJ5RHJhZ2dpbmcpCiAgICAgW3dl
YlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJJbnNlcnRQYXJhZ3JhcGgi
IGFyZ3VtZW50Om5pbF07CiAgICAgW3dlYlZpZXcgZXhwZWN0RWxlbWVudFRhZzpAIkFUVEFDSE1F
TlQiIHRvQ29tZUJlZm9yZTpAIlNUUk9ORyJdOwogCi0gICAgYXV0byBkcmFnZ2luZ1NpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgYXV0byBkcmFnZ2luZ1NpbXVsYXRvciA9IGFkb3B0
TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKICAgICBbZHJhZ2dpbmdTaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyNSwgMjUp
IHRvOkNHUG9pbnRNYWtlKDI1LCA0MjUpXTsKIAogICAgIGF0dGFjaG1lbnQgPSBbW2RyYWdnaW5n
U2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVudHNdIGZpcnN0T2JqZWN0XTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0RhdGFJbnRlcmFjdGlvblRlc3RzLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRGF0YUludGVyYWN0aW9uVGVzdHMubW0KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1YmE4N2JiYjQxZGFmOTczNzQzMWQwOGE4NmRh
YzAyZDFhNWE5YTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRGF0YUludGVyYWN0aW9uVGVzdHMubW0K
KysrIC9kZXYvbnVsbApAQCAtMSwxOTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKLQotI2ltcG9ydCAiRGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgot
I2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgotI2ltcG9ydCAiVUlLaXRTUEkuaCIKLSNpbXBvcnQg
IldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKLSNpbXBvcnQgPE1vYmlsZUNvcmVTZXJ2
aWNlcy9Nb2JpbGVDb3JlU2VydmljZXMuaD4KLSNpbXBvcnQgPFVJS2l0L05TSXRlbVByb3ZpZGVy
K1VJS2l0QWRkaXRpb25zLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUu
aD4KLSNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgotI2ltcG9ydCA8
V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3
Q29uZmlndXJhdGlvblByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJJdGVtUHJvdmlkZXJQ
YXN0ZWJvYXJkLmg+Ci0jaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
Lmg+Ci0jaW1wb3J0IDx3dGYvU2Vjb25kcy5oPgotCi10eXBlZGVmIHZvaWQgKF5GaWxlTG9hZENv
bXBsZXRpb25CbG9jaykoTlNVUkwgKiwgQk9PTCwgTlNFcnJvciAqKTsKLXR5cGVkZWYgdm9pZCAo
XkRhdGFMb2FkQ29tcGxldGlvbkJsb2NrKShOU0RhdGEgKiwgTlNFcnJvciAqKTsKLXR5cGVkZWYg
dm9pZCAoXlVJSXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0aW9uQmxvY2spKE5TRGF0YSAqLCBO
U0Vycm9yICopOwotCi0jaWYgIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0KLUBpbnRlcmZhY2Ug
VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnMgOiBOU09iamVjdAotQGVuZAotCi0j
ZW5kaWYKLQotQGludGVyZmFjZSBVSUl0ZW1Qcm92aWRlcigpCi0rIChVSUl0ZW1Qcm92aWRlciAq
KWl0ZW1Qcm92aWRlcldpdGhVUkw6KE5TVVJMICopdXJsIHRpdGxlOihOU1N0cmluZyAqKXRpdGxl
OwotLSAodm9pZCkgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjoo
TlNTdHJpbmcgKil0eXBlSWRlbnRpZmllciBvcHRpb25zOihVSUl0ZW1Qcm92aWRlclJlcHJlc2Vu
dGF0aW9uT3B0aW9ucyopb3B0aW9ucyBsb2FkSGFuZGxlcjooTlNQcm9ncmVzcyAqICheKSh2b2lk
ICheVUlJdGVtUHJvdmlkZXJEYXRhTG9hZENvbXBsZXRpb25CbG9jaykoTlNEYXRhICppdGVtLCBO
U0Vycm9yICplcnJvcikpKSBsb2FkSGFuZGxlcjsKLUBlbmQKLQotc3RhdGljIE5TU3RyaW5nICpJ
bmplY3RlZEJ1bmRsZVBhc3RlYm9hcmREYXRhVHlwZSA9IEAib3JnLndlYmtpdC5kYXRhIjsKLQot
c3RhdGljIFVJSW1hZ2UgKnRlc3RJY29uSW1hZ2UoKQotewotICAgIHJldHVybiBbVUlJbWFnZSBp
bWFnZU5hbWVkOkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMvaWNvbi5wbmciXTsKLX0KLQotc3Rh
dGljIE5TRGF0YSAqdGVzdFpJUEFyY2hpdmUoKQotewotICAgIE5TVVJMICp6aXBGaWxlVVJMID0g
W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAImNvbXByZXNzZWQtZmlsZXMi
IHdpdGhFeHRlbnNpb246QCJ6aXAiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3Vy
Y2VzIl07Ci0gICAgcmV0dXJuIFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mVVJMOnppcEZpbGVV
UkxdOwotfQotCi1AaW1wbGVtZW50YXRpb24gVUlJdGVtUHJvdmlkZXIgKERhdGFJbnRlcmFjdGlv
blRlc3RzKQotCi0tICh2b2lkKXJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50
aWZpZXI6KE5TU3RyaW5nICopdHlwZUlkZW50aWZpZXIgd2l0aERhdGE6KE5TRGF0YSAqKWRhdGEK
LXsKLSAgICBSZXRhaW5QdHI8TlNEYXRhPiByZXRhaW5lZERhdGEgPSBkYXRhOwotICAgIFtzZWxm
IHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6dHlwZUlkZW50aWZp
ZXIgdmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxp
dHlBbGwgbG9hZEhhbmRsZXI6IFtyZXRhaW5lZERhdGFdIChEYXRhTG9hZENvbXBsZXRpb25CbG9j
ayBibG9jaykgLT4gTlNQcm9ncmVzcyAqIHsKLSAgICAgICAgYmxvY2socmV0YWluZWREYXRhLmdl
dCgpLCBuaWwpOwotICAgICAgICByZXR1cm4gW05TUHJvZ3Jlc3MgZGlzY3JldGVQcm9ncmVzc1dp
dGhUb3RhbFVuaXRDb3VudDoxMDBdOwotICAgIH1dOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRh
dGlvbiBUZXN0V0tXZWJWaWV3IChEYXRhSW50ZXJhY3Rpb25UZXN0cykKLQotLSAoQk9PTCllZGl0
b3JDb250YWluc0ltYWdlRWxlbWVudAotewotICAgIHJldHVybiBbc2VsZiBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAiISFlZGl0b3IucXVlcnlTZWxlY3RvcignaW1nJykiXS5ib29sVmFs
dWU7Ci19Ci0KLS0gKE5TU3RyaW5nICopZWRpdG9yVmFsdWUKLXsKLSAgICByZXR1cm4gW3NlbGYg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci52YWx1ZSJdOwotfQotCi1AZW5k
Ci0KLXN0YXRpYyBOU1ZhbHVlICptYWtlQ0dSZWN0VmFsdWUoQ0dGbG9hdCB4LCBDR0Zsb2F0IHks
IENHRmxvYXQgd2lkdGgsIENHRmxvYXQgaGVpZ2h0KQotewotICAgIHJldHVybiBbTlNWYWx1ZSB2
YWx1ZVdpdGhDR1JlY3Q6Q0dSZWN0TWFrZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KV07Ci19Ci0KLXN0
YXRpYyB2b2lkIGNoZWNrQ0dSZWN0SXNFcXVhbFRvQ0dSZWN0V2l0aExvZ2dpbmcoQ0dSZWN0IGV4
cGVjdGVkLCBDR1JlY3Qgb2JzZXJ2ZWQpCi17Ci0gICAgQk9PTCBpc0VxdWFsID0gQ0dSZWN0RXF1
YWxUb1JlY3QoZXhwZWN0ZWQsIG9ic2VydmVkKTsKLSAgICBFWFBFQ1RfVFJVRShpc0VxdWFsKTsK
LSAgICBpZiAoIWlzRXF1YWwpCi0gICAgICAgIE5TTG9nKEAiRXhwZWN0ZWQ6ICVAIGJ1dCBvYnNl
cnZlZDogJUAiLCBOU1N0cmluZ0Zyb21DR1JlY3QoZXhwZWN0ZWQpLCBOU1N0cmluZ0Zyb21DR1Jl
Y3Qob2JzZXJ2ZWQpKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhM
b2dnaW5nKE5TQXJyYXkgKmV4cGVjdGVkLCBOU0FycmF5ICpvYnNlcnZlZCkKLXsKLSAgICBpZiAo
IVtleHBlY3RlZCBpc0VxdWFsVG9BcnJheTpvYnNlcnZlZF0pCi0gICAgICAgIE5TTG9nKEAiRXhw
ZWN0ZWQgc2VsZWN0aW9uIHJlY3RzOiAlQCBidXQgb2JzZXJ2ZWQ6ICVAIiwgZXhwZWN0ZWQsIG9i
c2VydmVkKTsKLSAgICBFWFBFQ1RfVFJVRShbZXhwZWN0ZWQgaXNFcXVhbFRvQXJyYXk6b2JzZXJ2
ZWRdKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tSaWNoVGV4dFR5cGVQcmVjZWRlc1BsYWluVGV4
dFR5cGUoRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yICpzaW11bGF0b3IpCi17Ci0gICAgLy8gQXQg
bGVhc3Qgb25lIG9mICJjb20uYXBwbGUuZmxhdC1ydGZkIiBvciAicHVibGljLnJ0ZiIgaXMgZXhw
ZWN0ZWQgdG8gaGF2ZSBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuICJwdWJsaWMudXRmOC1wbGFpbi10
ZXh0Ii4KLSAgICBOU0FycmF5ICpyZWdpc3RlcmVkVHlwZXMgPSBbc2ltdWxhdG9yLnNvdXJjZUl0
ZW1Qcm92aWRlcnMuZmlyc3RPYmplY3QgcmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVyc107Ci0gICAg
YXV0byBpbmRleE9mUlRGVHlwZSA9IFtyZWdpc3RlcmVkVHlwZXMgaW5kZXhPZk9iamVjdDooTlNT
dHJpbmcgKilrVVRUeXBlUlRGXTsKLSAgICBhdXRvIGluZGV4T2ZGbGF0UlRGRFR5cGUgPSBbcmVn
aXN0ZXJlZFR5cGVzIGluZGV4T2ZPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZUZsYXRSVEZEXTsK
LSAgICBhdXRvIGluZGV4T2ZQbGFpblRleHRUeXBlID0gW3JlZ2lzdGVyZWRUeXBlcyBpbmRleE9m
T2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0XTsKLSAgICBFWFBFQ1RfTkUo
KE5TSW50ZWdlcilpbmRleE9mUGxhaW5UZXh0VHlwZSwgTlNOb3RGb3VuZCk7Ci0gICAgRVhQRUNU
X1RSVUUoKGluZGV4T2ZSVEZUeXBlICE9IE5TTm90Rm91bmQgJiYgaW5kZXhPZlJURlR5cGUgPCBp
bmRleE9mUGxhaW5UZXh0VHlwZSkgfHwgKGluZGV4T2ZGbGF0UlRGRFR5cGUgIT0gTlNOb3RGb3Vu
ZCAmJiBpbmRleE9mRmxhdFJURkRUeXBlIDwgaW5kZXhPZlBsYWluVGV4dFR5cGUpKTsKLX0KLQot
c3RhdGljIHZvaWQgY2hlY2tGaXJzdFR5cGVJc1ByZXNlbnRBbmRTZWNvbmRUeXBlSXNNaXNzaW5n
KERhdGFJbnRlcmFjdGlvblNpbXVsYXRvciAqc2ltdWxhdG9yLCBDRlN0cmluZ1JlZiBmaXJzdFR5
cGUsIENGU3RyaW5nUmVmIHNlY29uZFR5cGUpCi17Ci0gICAgTlNBcnJheSAqcmVnaXN0ZXJlZFR5
cGVzID0gW3NpbXVsYXRvci5zb3VyY2VJdGVtUHJvdmlkZXJzLmZpcnN0T2JqZWN0IHJlZ2lzdGVy
ZWRUeXBlSWRlbnRpZmllcnNdOwotICAgIEVYUEVDVF9UUlVFKFtyZWdpc3RlcmVkVHlwZXMgY29u
dGFpbnNPYmplY3Q6KE5TU3RyaW5nICopZmlyc3RUeXBlXSk7Ci0gICAgRVhQRUNUX0ZBTFNFKFty
ZWdpc3RlcmVkVHlwZXMgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nICopc2Vjb25kVHlwZV0pOwot
fQotCi1zdGF0aWMgdm9pZCBjaGVja1R5cGVJZGVudGlmaWVySXNSZWdpc3RlcmVkQXRJbmRleChE
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgKnNpbXVsYXRvciwgTlNTdHJpbmcgKnR5cGUsIE5TVUlu
dGVnZXIgaW5kZXgpCi17Ci0gICAgTlNBcnJheSAqcmVnaXN0ZXJlZFR5cGVzID0gW3NpbXVsYXRv
ci5zb3VyY2VJdGVtUHJvdmlkZXJzLmZpcnN0T2JqZWN0IHJlZ2lzdGVyZWRUeXBlSWRlbnRpZmll
cnNdOwotICAgIEVYUEVDVF9HVChyZWdpc3RlcmVkVHlwZXMuY291bnQsIGluZGV4KTsKLSAgICBF
WFBFQ1RfV0tfU1RSRVEodHlwZS5VVEY4U3RyaW5nLCBbcmVnaXN0ZXJlZFR5cGVzW2luZGV4XSBV
VEY4U3RyaW5nXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNrRXN0aW1hdGVkU2l6ZShEYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3IgKnNpbXVsYXRvciwgQ0dTaXplIGVzdGltYXRlZFNpemUpCi17Ci0g
ICAgVUlJdGVtUHJvdmlkZXIgKnNvdXJjZUl0ZW1Qcm92aWRlciA9IFtzaW11bGF0b3Igc291cmNl
SXRlbVByb3ZpZGVyc10uZmlyc3RPYmplY3Q7Ci0gICAgRVhQRUNUX0VRKGVzdGltYXRlZFNpemUu
d2lkdGgsIHNvdXJjZUl0ZW1Qcm92aWRlci5wcmVmZXJyZWRQcmVzZW50YXRpb25TaXplLndpZHRo
KTsKLSAgICBFWFBFQ1RfRVEoZXN0aW1hdGVkU2l6ZS5oZWlnaHQsIHNvdXJjZUl0ZW1Qcm92aWRl
ci5wcmVmZXJyZWRQcmVzZW50YXRpb25TaXplLmhlaWdodCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNo
ZWNrU3VnZ2VzdGVkTmFtZUFuZEVzdGltYXRlZFNpemUoRGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
ICpzaW11bGF0b3IsIE5TU3RyaW5nICpzdWdnZXN0ZWROYW1lLCBDR1NpemUgZXN0aW1hdGVkU2l6
ZSkKLXsKLSAgICBVSUl0ZW1Qcm92aWRlciAqc291cmNlSXRlbVByb3ZpZGVyID0gW3NpbXVsYXRv
ciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdDsKLSAgICBFWFBFQ1RfV0tfU1RSRVEo
c3VnZ2VzdGVkTmFtZS5VVEY4U3RyaW5nLCBzb3VyY2VJdGVtUHJvdmlkZXIuc3VnZ2VzdGVkTmFt
ZS5VVEY4U3RyaW5nKTsKLSAgICBFWFBFQ1RfRVEoZXN0aW1hdGVkU2l6ZS53aWR0aCwgc291cmNl
SXRlbVByb3ZpZGVyLnByZWZlcnJlZFByZXNlbnRhdGlvblNpemUud2lkdGgpOwotICAgIEVYUEVD
VF9FUShlc3RpbWF0ZWRTaXplLmhlaWdodCwgc291cmNlSXRlbVByb3ZpZGVyLnByZWZlcnJlZFBy
ZXNlbnRhdGlvblNpemUuaGVpZ2h0KTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tTdHJpbmdBcnJh
eXNBcmVFcXVhbChOU0FycmF5PE5TU3RyaW5nICo+ICpleHBlY3RlZCwgTlNBcnJheTxOU1N0cmlu
ZyAqPiAqb2JzZXJ2ZWQpCi17Ci0gICAgRVhQRUNUX0VRKGV4cGVjdGVkLmNvdW50LCBvYnNlcnZl
ZC5jb3VudCk7Ci0gICAgZm9yIChOU1VJbnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCBleHBlY3Rl
ZC5jb3VudDsgKytpbmRleCkgewotICAgICAgICBOU1N0cmluZyAqZXhwZWN0ZWRTdHJpbmcgPSBb
ZXhwZWN0ZWQgb2JqZWN0QXRJbmRleDppbmRleF07Ci0gICAgICAgIE5TU3RyaW5nICpvYnNlcnZl
ZFN0cmluZyA9IFtvYnNlcnZlZCBvYmplY3RBdEluZGV4OmluZGV4XTsKLSAgICAgICAgRVhQRUNU
X1dLX1NUUkVRKGV4cGVjdGVkU3RyaW5nLCBvYnNlcnZlZFN0cmluZyk7Ci0gICAgICAgIGlmICgh
W2V4cGVjdGVkU3RyaW5nIGlzRXF1YWxUb1N0cmluZzpvYnNlcnZlZFN0cmluZ10pCi0gICAgICAg
ICAgICBOU0xvZyhAIkV4cGVjdGVkIG9ic2VydmVkIHN0cmluZzogJUAgdG8gbWF0Y2ggZXhwZWN0
ZWQgc3RyaW5nOiAlQCBhdCBpbmRleDogJXR1Iiwgb2JzZXJ2ZWRTdHJpbmcsIGV4cGVjdGVkU3Ry
aW5nLCBpbmRleCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBjaGVja0RyYWdDYXJldFJlY3RJ
c0NvbnRhaW5lZEluUmVjdChDR1JlY3QgY2FyZXRSZWN0LCBDR1JlY3QgY29udGFpbmVyUmVjdCkK
LXsKLSAgICBCT09MIGNvbnRhaW5lZCA9IENHUmVjdENvbnRhaW5zUmVjdChjb250YWluZXJSZWN0
LCBjYXJldFJlY3QpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRhaW5lZCk7Ci0gICAgaWYgKCFjb250
YWluZWQpCi0gICAgICAgIE5TTG9nKEAiRXhwZWN0ZWQgY2FyZXQgcmVjdDogJUAgdG8gZml0IHdp
dGhpbiBjb250YWluZXIgcmVjdDogJUAiLCBOU1N0cmluZ0Zyb21DR1JlY3QoY2FyZXRSZWN0KSwg
TlNTdHJpbmdGcm9tQ0dSZWN0KGNvbnRhaW5lclJlY3QpKTsKLX0KLQotI2lmIF9fSVBIT05FX09T
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDMwMAotCi1zdGF0aWMgdm9pZCBjaGVja0pTT05X
aXRoTG9nZ2luZyhOU1N0cmluZyAqanNvblN0cmluZywgTlNEaWN0aW9uYXJ5ICpleHBlY3RlZCkK
LXsKLSAgICBCT09MIHN1Y2Nlc3MgPSBUZXN0V2ViS2l0QVBJOjpVdGlsOjpqc29uTWF0Y2hlc0V4
cGVjdGVkVmFsdWVzKGpzb25TdHJpbmcsIGV4cGVjdGVkKTsKLSAgICBFWFBFQ1RfVFJVRShzdWNj
ZXNzKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIE5TTG9nKEAiRXhwZWN0ZWQgSlNPTjog
JUAgdG8gbWF0Y2ggdmFsdWVzOiAlQCIsIGpzb25TdHJpbmcsIGV4cGVjdGVkKTsKLX0KLQotc3Rh
dGljIE5TRGF0YSAqdGVzdEljb25JbWFnZURhdGEoKQotewotICAgIHJldHVybiBbTlNEYXRhIGRh
dGFXaXRoQ29udGVudHNPZlVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNl
OkAiaWNvbiIgd2l0aEV4dGVuc2lvbjpAInBuZyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXV07Ci19Ci0KLXN0YXRpYyB2b2lkIHJ1blRlc3RXaXRoVGVtcG9yYXJ5VGV4
dEZpbGUodm9pZChecnVuVGVzdCkoTlNVUkwgKmZpbGVVUkwpKQotewotICAgIE5TU3RyaW5nICpm
aWxlTmFtZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiZHJhZy1kcm9wLXRleHQtZmls
ZS0lQC50eHQiLCBbTlNVVUlEIFVVSURdLlVVSURTdHJpbmddOwotICAgIFJldGFpblB0cjxOU1VS
TD4gdGVtcG9yYXJ5RmlsZSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TVGVtcG9yYXJ5RGly
ZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OmZpbGVOYW1lXSBpc0RpcmVj
dG9yeTpOT107Ci0gICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVt
QXRVUkw6dGVtcG9yYXJ5RmlsZS5nZXQoKSBlcnJvcjpuaWxdOwotCi0gICAgTlNFcnJvciAqZXJy
b3IgPSBuaWw7Ci0gICAgW0AiVGhpcyBpcyBhIHRpbnkgYmxvYiBvZiB0ZXh0LiIgd3JpdGVUb1VS
TDp0ZW1wb3JhcnlGaWxlLmdldCgpIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nIGVycm9yOiZlcnJvcl07Ci0KLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIE5TTG9n
KEAiRXJyb3Igd3JpdGluZyB0ZW1wb3JhcnkgZmlsZTogJUAiLCBlcnJvcik7Ci0KLSAgICBAdHJ5
IHsKLSAgICAgICAgcnVuVGVzdCh0ZW1wb3JhcnlGaWxlLmdldCgpKTsKLSAgICB9IEBmaW5hbGx5
IHsKLSAgICAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRV
Ukw6dGVtcG9yYXJ5RmlsZS5nZXQoKSBlcnJvcjpuaWxdOwotICAgIH0KLX0KLQotc3RhdGljIHZv
aWQgcnVuVGVzdFdpdGhUZW1wb3JhcnlGb2xkZXIodm9pZChecnVuVGVzdCkoTlNVUkwgKmZvbGRl
clVSTCkpCi17Ci0gICAgTlNTdHJpbmcgKmZvbGRlck5hbWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAInNvbWUuZGlyZWN0b3J5LSVAIiwgW05TVVVJRCBVVUlEXS5VVUlEU3RyaW5nXTsK
LSAgICBSZXRhaW5QdHI8TlNVUkw+IHRlbXBvcmFyeUZvbGRlciA9IFtOU1VSTCBmaWxlVVJMV2l0
aFBhdGg6W05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9u
ZW50OmZvbGRlck5hbWVdIGlzRGlyZWN0b3J5OllFU107Ci0gICAgW1tOU0ZpbGVNYW5hZ2VyIGRl
ZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6dGVtcG9yYXJ5Rm9sZGVyLmdldCgpIGVycm9y
Om5pbF07Ci0KLSAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKLSAgICBOU0ZpbGVNYW5hZ2VyICpk
ZWZhdWx0TWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAgICBbZGVm
YXVsdE1hbmFnZXIgY3JlYXRlRGlyZWN0b3J5QXRVUkw6dGVtcG9yYXJ5Rm9sZGVyLmdldCgpIHdp
dGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpOTyBhdHRyaWJ1dGVzOm5pbCBlcnJvcjomZXJyb3Jd
OwotICAgIFt0ZXN0SWNvbkltYWdlRGF0YSgpIHdyaXRlVG9VUkw6W3RlbXBvcmFyeUZvbGRlci5n
ZXQoKSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJpY29uLnBuZyIgaXNEaXJlY3Rvcnk6
Tk9dIGF0b21pY2FsbHk6WUVTXTsKLSAgICBbdGVzdFpJUEFyY2hpdmUoKSB3cml0ZVRvVVJMOlt0
ZW1wb3JhcnlGb2xkZXIuZ2V0KCkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYXJjaGl2
ZS56aXAiIGlzRGlyZWN0b3J5Ok5PXSBhdG9taWNhbGx5OllFU107Ci0KLSAgICBOU1VSTCAqZmly
c3RTdWJkaXJlY3RvcnkgPSBbdGVtcG9yYXJ5Rm9sZGVyLmdldCgpIFVSTEJ5QXBwZW5kaW5nUGF0
aENvbXBvbmVudDpAInN1YmRpcmVjdG9yeTEiIGlzRGlyZWN0b3J5OllFU107Ci0gICAgW2RlZmF1
bHRNYW5hZ2VyIGNyZWF0ZURpcmVjdG9yeUF0VVJMOmZpcnN0U3ViZGlyZWN0b3J5IHdpdGhJbnRl
cm1lZGlhdGVEaXJlY3RvcmllczpOTyBhdHRyaWJ1dGVzOm5pbCBlcnJvcjomZXJyb3JdOwotICAg
IFtAIkkgYW0gYSB0ZXh0IGZpbGUgaW4gdGhlIGZpcnN0IHN1YmRpcmVjdG9yeS4iIHdyaXRlVG9V
Ukw6W2ZpcnN0U3ViZGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAInRleHQt
ZmlsZS0xLnR4dCIgaXNEaXJlY3Rvcnk6Tk9dIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRG
OFN0cmluZ0VuY29kaW5nIGVycm9yOiZlcnJvcl07Ci0KLSAgICBOU1VSTCAqc2Vjb25kU3ViZGly
ZWN0b3J5ID0gW3RlbXBvcmFyeUZvbGRlci5nZXQoKSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25l
bnQ6QCJzdWJkaXJlY3RvcnkyIiBpc0RpcmVjdG9yeTpZRVNdOwotICAgIFtkZWZhdWx0TWFuYWdl
ciBjcmVhdGVEaXJlY3RvcnlBdFVSTDpzZWNvbmRTdWJkaXJlY3Rvcnkgd2l0aEludGVybWVkaWF0
ZURpcmVjdG9yaWVzOk5PIGF0dHJpYnV0ZXM6bmlsIGVycm9yOiZlcnJvcl07Ci0gICAgW0AiSSBh
bSBhIHRleHQgZmlsZSBpbiB0aGUgc2Vjb25kIHN1YmRpcmVjdG9yeS4iIHdyaXRlVG9VUkw6W3Nl
Y29uZFN1YmRpcmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJ0ZXh0LWZpbGUt
Mi50eHQiIGlzRGlyZWN0b3J5Ok5PXSBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZyBlcnJvcjomZXJyb3JdOwotCi0gICAgaWYgKGVycm9yKQotICAgICAgICBOU0xv
ZyhAIkVycm9yIHdyaXRpbmcgdGVtcG9yYXJ5IGZpbGU6ICVAIiwgZXJyb3IpOwotCi0gICAgQHRy
eSB7Ci0gICAgICAgIHJ1blRlc3QodGVtcG9yYXJ5Rm9sZGVyLmdldCgpKTsKLSAgICB9IEBmaW5h
bGx5IHsKLSAgICAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVt
QXRVUkw6dGVtcG9yYXJ5Rm9sZGVyLmdldCgpIGVycm9yOm5pbF07Ci0gICAgfQotfQotCi0jZW5k
aWYgLy8gX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMzAwCi0KLW5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJIHsKLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgSW1hZ2VU
b0NvbnRlbnRFZGl0YWJsZSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImltYWdlLWFu
ZC1jb250ZW50ZWRpdGFibGUiXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
ID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJW
aWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZy
b206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAg
IEVYUEVDVF9UUlVFKFt3ZWJWaWV3IGVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk7Ci0KLSAg
ICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
IG9ic2VydmVkRXZlbnROYW1lc107Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1l
cyBjb250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25FbnRlckV2ZW50TmFtZV0pOwotICAgIEVY
UEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0
aW9uT3ZlckV2ZW50TmFtZV0pOwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMg
Y29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uUGVyZm9ybU9wZXJhdGlvbkV2ZW50TmFtZV0p
OwotICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUo
MSwgMjAxLCAyMTUsIDE3NCkgXSwgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBmaW5hbFNlbGVj
dGlvblJlY3RzXSk7Ci0gICAgY2hlY2tGaXJzdFR5cGVJc1ByZXNlbnRBbmRTZWNvbmRUeXBlSXNN
aXNzaW5nKGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5nZXQoKSwga1VUVHlwZVBORywga1VUVHlw
ZUZpbGVVUkwpOwotICAgIGNoZWNrRXN0aW1hdGVkU2l6ZShkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IuZ2V0KCksIHsgMjE1LCAxNzQgfSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMs
IENhblN0YXJ0RHJhZ09uRW5vcm1vdXNJbWFnZSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAs
IDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpA
IjxpbWcgc3JjPSdlbm9ybW91cy5zdmcnPjwvaW1nPiJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAw
LCAxMDApXTsKLQotICAgIE5TQXJyYXkgKnJlZ2lzdGVyZWRUeXBlcyA9IFtbZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0IHJlZ2lzdGVyZWRU
eXBlSWRlbnRpZmllcnNdOwotICAgIEVYUEVDVF9XS19TVFJFUSgoTlNTdHJpbmcgKilrVVRUeXBl
U2NhbGFibGVWZWN0b3JHcmFwaGljcywgW3JlZ2lzdGVyZWRUeXBlcyBmaXJzdE9iamVjdF0pOwot
fQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBJbWFnZVRvVGV4dGFyZWEpCi17Ci0gICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91
c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJpbWFnZS1hbmQtdGV4dGFyZWEiXTsKLQotICAgIGF1dG8g
ZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2lu
dE1ha2UoMTAwLCAzMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgZWRp
dG9yVmFsdWVdKTsKLQotICAgIE5TQXJyYXkgKm9ic2VydmVkRXZlbnROYW1lcyA9IFtkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3Igb2JzZXJ2ZWRFdmVudE5hbWVzXTsKLSAgICBFWFBFQ1RfVFJVRShb
b2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbkVudGVyRXZl
bnROYW1lXSk7Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09i
amVjdDpEYXRhSW50ZXJhY3Rpb25PdmVyRXZlbnROYW1lXSk7Ci0gICAgRVhQRUNUX1RSVUUoW29i
c2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25QZXJmb3JtT3Bl
cmF0aW9uRXZlbnROYW1lXSk7Ci0gICAgY2hlY2tGaXJzdFR5cGVJc1ByZXNlbnRBbmRTZWNvbmRU
eXBlSXNNaXNzaW5nKGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5nZXQoKSwga1VUVHlwZVBORywg
a1VUVHlwZUZpbGVVUkwpOwotICAgIGNoZWNrRXN0aW1hdGVkU2l6ZShkYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IuZ2V0KCksIHsgMjE1LCAxNzQgfSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9u
VGVzdHMsIEltYWdlSW5MaW5rVG9JbnB1dCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpA
ImltYWdlLWluLWxpbmstYW5kLWlucHV0Il07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07
Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8iLCBbd2ViVmll
dyBlZGl0b3JWYWx1ZV0uVVRGOFN0cmluZyk7Ci0gICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhM
b2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1ZSgxMDEsIDI0MSwgMjA1NywgMjMyKSBdLCBbZGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKLSAgICBjaGVja1N1Z2dl
c3RlZE5hbWVBbmRFc3RpbWF0ZWRTaXplKGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5nZXQoKSwg
QCJpY29uLnBuZyIsIHsgMjE1LCAxNzQgfSk7Ci0gICAgY2hlY2tUeXBlSWRlbnRpZmllcklzUmVn
aXN0ZXJlZEF0SW5kZXgoZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmdldCgpLCAoTlNTdHJpbmcg
KilrVVRUeXBlUE5HLCAwKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgSW1hZ2VJ
bkxpbmtXaXRob3V0SFJFRlRvSW5wdXQpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAs
IDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJp
bWFnZS1pbi1saW5rLWFuZC1pbnB1dCJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJsaW5rLmhyZWYgPSAnJyJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBp
bml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMw
MCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0pOwot
ICAgIGNoZWNrRXN0aW1hdGVkU2l6ZShkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCksIHsg
MjE1LCAxNzQgfSk7Ci0gICAgY2hlY2tUeXBlSWRlbnRpZmllcklzUmVnaXN0ZXJlZEF0SW5kZXgo
ZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmdldCgpLCAoTlNTdHJpbmcgKilrVVRUeXBlUE5HLCAw
KTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgSW1hZ2VEb2VzTm90VXNlRWxlbWVu
dFNpemVBc0VzdGltYXRlZFNpemUpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJnaWYt
YW5kLWZpbGUtaW5wdXQiXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0g
YWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3
OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206
IHsgMTAwLCAxMDAgfSB0bzogeyAxMDAsIDMwMCB9XTsKLQotICAgIGNoZWNrVHlwZUlkZW50aWZp
ZXJJc1JlZ2lzdGVyZWRBdEluZGV4KGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5nZXQoKSwgKE5T
U3RyaW5nICopa1VUVHlwZUdJRiwgMCk7Ci0gICAgY2hlY2tTdWdnZXN0ZWROYW1lQW5kRXN0aW1h
dGVkU2l6ZShkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCksIEAiYXBwbGUuZ2lmIiwgeyA1
MiwgNjQgfSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJhcHBsZS5naWYgKGltYWdlL2dpZikiLCBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnRleHRDb250ZW50
Il0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBDb250ZW50RWRpdGFibGVUb0Nv
bnRlbnRFZGl0YWJsZSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwot
ICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQot
ICAgIFt3ZWJWaWV3IGxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJs
ZSJdOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igd2FpdEZvcklucHV0U2Vzc2lvbl07
Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwg
NTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfRVEoW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNvdXJjZS50ZXh0Q29udGVudCJdLmxlbmd0
aCwgMFVMKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIkhlbGxvIHdvcmxkIiwgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdLlVURjhTdHJp
bmcpOwotCi0gICAgTlNBcnJheSAqb2JzZXJ2ZWRFdmVudE5hbWVzID0gW2RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBvYnNlcnZlZEV2ZW50TmFtZXNdOwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZl
ZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uRW50ZXJFdmVudE5hbWVd
KTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRh
dGFJbnRlcmFjdGlvbk92ZXJFdmVudE5hbWVdKTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRF
dmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvblBlcmZvcm1PcGVyYXRpb25F
dmVudE5hbWVdKTsKLSAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgbWFrZUNH
UmVjdFZhbHVlKDEsIDIwMSwgOTYxLCAyMjcpIF0sIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
ZmluYWxTZWxlY3Rpb25SZWN0c10pOwotICAgIGNoZWNrUmljaFRleHRUeXBlUHJlY2VkZXNQbGFp
blRleHRUeXBlKGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5nZXQoKSk7Ci19Ci0KLVRFU1QoRGF0
YUludGVyYWN0aW9uVGVzdHMsIENvbnRlbnRFZGl0YWJsZVRvVGV4dGFyZWEpCi17Ci0gICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VO
YW1lZDpAImNvbnRlbnRlZGl0YWJsZS1hbmQtdGV4dGFyZWEiXTsKLSAgICBbZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yIHdhaXRGb3JJbnB1dFNlc3Npb25dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAs
IDMwMCldOwotCi0gICAgRVhQRUNUX0VRKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJzb3VyY2UudGV4dENvbnRlbnQiXS5sZW5ndGgsIDBVTCk7Ci0gICAgRVhQRUNUX1dL
X1NUUkVRKCJIZWxsbyB3b3JsZCIsIFt3ZWJWaWV3IGVkaXRvclZhbHVlXS5VVEY4U3RyaW5nKTsK
LQotICAgIE5TQXJyYXkgKm9ic2VydmVkRXZlbnROYW1lcyA9IFtkYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3Igb2JzZXJ2ZWRFdmVudE5hbWVzXTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVu
dE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbkVudGVyRXZlbnROYW1lXSk7Ci0g
ICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpEYXRhSW50
ZXJhY3Rpb25PdmVyRXZlbnROYW1lXSk7Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnRO
YW1lcyBjb250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25QZXJmb3JtT3BlcmF0aW9uRXZlbnRO
YW1lXSk7Ci0gICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RW
YWx1ZSg2LCAyMDMsIDk5MCwgMjMyKSBdLCBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGZpbmFs
U2VsZWN0aW9uUmVjdHNdKTsKLSAgICBjaGVja1JpY2hUZXh0VHlwZVByZWNlZGVzUGxhaW5UZXh0
VHlwZShkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCkpOwotfQotCi1URVNUKERhdGFJbnRl
cmFjdGlvblRlc3RzLCBDb250ZW50RWRpdGFibGVNb3ZlUGFyYWdyYXBocykKLXsKLSAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdp
dGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIFt3ZWJWaWV3IGxvYWRUZXN0UGFnZU5h
bWVkOkAidHdvLXBhcmFncmFwaC1jb250ZW50ZWRpdGFibGUiXTsKLSAgICBbZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yIHdhaXRGb3JJbnB1dFNlc3Npb25dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgyNTAs
IDQ1MCldOwotCi0gICAgTlNTdHJpbmcgKmZpbmFsVGV4dENvbnRlbnQgPSBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il07Ci0gICAgTlNV
SW50ZWdlciBmaXJzdFBhcmFncmFwaE9mZnNldCA9IFtmaW5hbFRleHRDb250ZW50IHJhbmdlT2ZT
dHJpbmc6QCJUaGlzIGlzIHRoZSBmaXJzdCBwYXJhZ3JhcGgiXS5sb2NhdGlvbjsKLSAgICBOU1VJ
bnRlZ2VyIHNlY29uZFBhcmFncmFwaE9mZnNldCA9IFtmaW5hbFRleHRDb250ZW50IHJhbmdlT2ZT
dHJpbmc6QCJUaGlzIGlzIHRoZSBzZWNvbmQgcGFyYWdyYXBoIl0ubG9jYXRpb247Ci0KLSAgICBF
WFBFQ1RfRkFMU0UoZmlyc3RQYXJhZ3JhcGhPZmZzZXQgPT0gTlNOb3RGb3VuZCk7Ci0gICAgRVhQ
RUNUX0ZBTFNFKHNlY29uZFBhcmFncmFwaE9mZnNldCA9PSBOU05vdEZvdW5kKTsKLSAgICBFWFBF
Q1RfR1QoZmlyc3RQYXJhZ3JhcGhPZmZzZXQsIHNlY29uZFBhcmFncmFwaE9mZnNldCk7Ci0gICAg
Y2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1ZSgxOTAsIDEw
MCwgMTMwLCAyMCksIG1ha2VDR1JlY3RWYWx1ZSgwLCAxMjAsIDMyMCwgMTAwKSwgbWFrZUNHUmVj
dFZhbHVlKDAsIDIyMCwgMjUyLCAyMCkgXSwgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBmaW5h
bFNlbGVjdGlvblJlY3RzXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERyYWdJ
bWFnZUZyb21Db250ZW50RWRpdGFibGUpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAs
IDUwMCldKTsKLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tE
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3Lmdl
dCgpXSk7Ci0KLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJj
b250ZW50ZWRpdGFibGUtYW5kLXRhcmdldCJdOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDAp
XTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiUEFTUyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJ0YXJnZXQudGV4dENvbnRlbnQiXSk7Ci19Ci0KLVRFU1QoRGF0YUlu
dGVyYWN0aW9uVGVzdHMsIFRleHRBcmVhVG9JbnB1dCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAs
IDAsIDMyMCwgNTAwKV0pOwotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRv
cHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXcuZ2V0KCldKTsKLQotICAgIFt3ZWJWaWV3IGxvYWRUZXN0UGFnZU5hbWVkOkAidGV4dGFy
ZWEtdG8taW5wdXQiXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHdhaXRGb3JJbnB1
dFNlc3Npb25dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50
TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgRVhQRUNUX0VR
KFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2UudmFsdWUiXS5s
ZW5ndGgsIDBVTCk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJIZWxsbyB3b3JsZCIsIFt3ZWJWaWV3
IGVkaXRvclZhbHVlXS5VVEY4U3RyaW5nKTsKLSAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExv
Z2dpbmcoQFsgbWFrZUNHUmVjdFZhbHVlKDEwMSwgMjQxLCA5OTAsIDIzMikgXSwgW2RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7Ci19Ci0KLVRFU1QoRGF0YUlu
dGVyYWN0aW9uVGVzdHMsIFNpbmdsZVBsYWluVGV4dFdvcmRUeXBlSWRlbnRpZmllcnMpCi17Ci0g
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBhdXRvIGRhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2Nd
IGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBbd2ViVmlldyBsb2FkVGVz
dFBhZ2VOYW1lZDpAInRleHRhcmVhLXRvLWlucHV0Il07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciB3YWl0Rm9ySW5wdXRTZXNzaW9uXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAic291cmNlLnZhbHVlID0gJ3BuZXVtb25vdWx0cmFtaWNyb3Njb3Bp
Y3NpbGljb3ZvbGNhbm9jb25pb3NpcyciXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAic291cmNlLnNlbGVjdGlvblN0YXJ0ID0gMCJdOwotICAgIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2Uuc2VsZWN0aW9uRW5kID0gc291
cmNlLnZhbHVlLmxlbmd0aCJdOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJv
bTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAg
TlNJdGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciA9IFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
c291cmNlSXRlbVByb3ZpZGVyc10uZmlyc3RPYmplY3Q7Ci0gICAgTlNBcnJheSAqcmVnaXN0ZXJl
ZFR5cGVzID0gW2l0ZW1Qcm92aWRlciByZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzXTsKLSAgICBF
WFBFQ1RfRVEoMVVMLCByZWdpc3RlcmVkVHlwZXMuY291bnQpOwotICAgIEVYUEVDVF9XS19TVFJF
UShbKE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRleHQgVVRGOFN0cmluZ10sIFtyZWdpc3Rl
cmVkVHlwZXMuZmlyc3RPYmplY3QgVVRGOFN0cmluZ10pOwotICAgIEVYUEVDVF9FUShbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic291cmNlLnZhbHVlIl0ubGVuZ3RoLCAw
VUwpOwotICAgIEVYUEVDVF9FUShVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlSW5saW5lLCBp
dGVtUHJvdmlkZXIucHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGUpOwotICAgIEVYUEVDVF9XS19T
VFJFUSgicG5ldW1vbm91bHRyYW1pY3Jvc2NvcGljc2lsaWNvdm9sY2Fub2Nvbmlvc2lzIiwgW3dl
YlZpZXcgZWRpdG9yVmFsdWVdLlVURjhTdHJpbmcpOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlv
blRlc3RzLCBTaW5nbGVQbGFpblRleHRVUkxUeXBlSWRlbnRpZmllcnMpCi17Ci0gICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRo
V2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VOYW1l
ZDpAInRleHRhcmVhLXRvLWlucHV0Il07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciB3
YWl0Rm9ySW5wdXRTZXNzaW9uXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAic291cmNlLnZhbHVlID0gJ2h0dHBzOi8vd2Via2l0Lm9yZy8nIl07Ci0gICAgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNvdXJjZS5zZWxlY3Rpb25TdGFy
dCA9IDAiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic291
cmNlLnNlbGVjdGlvbkVuZCA9IHNvdXJjZS52YWx1ZS5sZW5ndGgiXTsKLSAgICBbZGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1h
a2UoMTAwLCAzMDApXTsKLQotICAgIE5TSXRlbVByb3ZpZGVyICppdGVtUHJvdmlkZXIgPSBbZGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0Owot
ICAgIE5TQXJyYXkgKnJlZ2lzdGVyZWRUeXBlcyA9IFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJlZFR5
cGVJZGVudGlmaWVyc107Ci0gICAgRVhQRUNUX0VRKDJVTCwgcmVnaXN0ZXJlZFR5cGVzLmNvdW50
KTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoWyhOU1N0cmluZyAqKWtVVFR5cGVVUkwgVVRGOFN0cmlu
Z10sIFtyZWdpc3RlcmVkVHlwZXMuZmlyc3RPYmplY3QgVVRGOFN0cmluZ10pOwotICAgIEVYUEVD
VF9XS19TVFJFUShbKE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRleHQgVVRGOFN0cmluZ10s
IFtyZWdpc3RlcmVkVHlwZXMubGFzdE9iamVjdCBVVEY4U3RyaW5nXSk7Ci0gICAgRVhQRUNUX0VR
KDBVTCwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNvdXJjZS52YWx1
ZSJdLmxlbmd0aCk7Ci0gICAgRVhQRUNUX0VRKFVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVJ
bmxpbmUsIGl0ZW1Qcm92aWRlci5wcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZSk7Ci0gICAgRVhQ
RUNUX1dLX1NUUkVRKCJodHRwczovL3dlYmtpdC5vcmcvIiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVd
LlVURjhTdHJpbmcpOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBMaW5rVG9JbnB1
dCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3
IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImxpbmstYW5kLWlucHV0Il07Ci0KLSAg
ICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAg
W2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRv
OkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8v
d3d3LmFwcGxlLmNvbS8iLCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0uVVRGOFN0cmluZyk7Ci0KLSAg
ICBfX2Jsb2NrIGJvb2wgZG9uZUxvYWRpbmdVUkwgPSBmYWxzZTsKLSAgICBVSUl0ZW1Qcm92aWRl
ciAqc291cmNlSXRlbVByb3ZpZGVyID0gW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzb3VyY2VJ
dGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdDsKLSAgICBbc291cmNlSXRlbVByb3ZpZGVyIGxvYWRP
YmplY3RPZkNsYXNzOltOU1VSTCBjbGFzc10gY29tcGxldGlvbkhhbmRsZXI6XihpZCBvYmplY3Qs
IE5TRXJyb3IgKmVycm9yKSB7Ci0gICAgICAgIE5TVVJMICp1cmwgPSBvYmplY3Q7Ci0gICAgICAg
IEVYUEVDVF9XS19TVFJFUSgiSGVsbG8gd29ybGQiLCB1cmwuX3RpdGxlLlVURjhTdHJpbmcgPzog
IiIpOwotICAgICAgICBkb25lTG9hZGluZ1VSTCA9IHRydWU7Ci0gICAgfV07Ci0gICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZkb25lTG9hZGluZ1VSTCk7Ci0KLSAgICBOU0FycmF5ICpvYnNl
cnZlZEV2ZW50TmFtZXMgPSBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIG9ic2VydmVkRXZlbnRO
YW1lc107Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVj
dDpEYXRhSW50ZXJhY3Rpb25FbnRlckV2ZW50TmFtZV0pOwotICAgIEVYUEVDVF9UUlVFKFtvYnNl
cnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uT3ZlckV2ZW50TmFt
ZV0pOwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6
RGF0YUludGVyYWN0aW9uUGVyZm9ybU9wZXJhdGlvbkV2ZW50TmFtZV0pOwotICAgIGNoZWNrU2Vs
ZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUoMTAxLCAyNzMsIDIwNTcs
IDIzMikgXSwgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7
Ci0gICAgY2hlY2tUeXBlSWRlbnRpZmllcklzUmVnaXN0ZXJlZEF0SW5kZXgoZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yLmdldCgpLCAoTlNTdHJpbmcgKilrVVRUeXBlVVJMLCAwKTsKLX0KLQotVEVT
VChEYXRhSW50ZXJhY3Rpb25UZXN0cywgQmFja2dyb3VuZEltYWdlTGlua1RvSW5wdXQpCi17Ci0g
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJiYWNrZ3JvdW5kLWltYWdlLWxpbmstYW5kLWlucHV0
Il07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgp
XSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEw
MCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEo
Imh0dHBzOi8vd3d3LmFwcGxlLmNvbS8iLCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0uVVRGOFN0cmlu
Zyk7Ci0KLSAgICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbZGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yIG9ic2VydmVkRXZlbnROYW1lc107Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVk
RXZlbnROYW1lcyBjb250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25FbnRlckV2ZW50TmFtZV0p
OwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0
YUludGVyYWN0aW9uT3ZlckV2ZW50TmFtZV0pOwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2
ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uUGVyZm9ybU9wZXJhdGlvbkV2
ZW50TmFtZV0pOwotICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dS
ZWN0VmFsdWUoMTAxLCAyNDEsIDIwNTcsIDIzMikgXSwgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7Ci0gICAgY2hlY2tUeXBlSWRlbnRpZmllcklzUmVnaXN0
ZXJlZEF0SW5kZXgoZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmdldCgpLCAoTlNTdHJpbmcgKilr
VVRUeXBlVVJMLCAwKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgQ2FuUHJldmVu
dFN0YXJ0KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAicHJldmVudC1zdGFydCJdOwot
Ci0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwot
ICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUw
KSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgRVhQRUNUX0VRKERhdGFJbnRlcmFj
dGlvbkNhbmNlbGxlZCwgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBwaGFzZV0pOwotICAgIEVY
UEVDVF9GQUxTRShbd2ViVmlldyBlZGl0b3JDb250YWluc0ltYWdlRWxlbWVudF0pOwotCi0gICAg
TlNBcnJheSAqb2JzZXJ2ZWRFdmVudE5hbWVzID0gW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBv
YnNlcnZlZEV2ZW50TmFtZXNdOwotICAgIEVYUEVDVF9GQUxTRShbb2JzZXJ2ZWRFdmVudE5hbWVz
IGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbkVudGVyRXZlbnROYW1lXSk7Ci0gICAgRVhQ
RUNUX0ZBTFNFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0
aW9uT3ZlckV2ZW50TmFtZV0pOwotICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhA
WyBdLCBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKLX0K
LQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgQ2FuUHJldmVudE9wZXJhdGlvbikKLXsKLSAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInByZXZlbnQtb3BlcmF0aW9uIl07Ci0KLSAgICBhdXRv
IGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9p
bnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfRkFMU0UoW3dlYlZpZXcgZWRpdG9yQ29u
dGFpbnNJbWFnZUVsZW1lbnRdKTsKLQotICAgIE5TQXJyYXkgKm9ic2VydmVkRXZlbnROYW1lcyA9
IFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igb2JzZXJ2ZWRFdmVudE5hbWVzXTsKLSAgICBFWFBF
Q1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlv
bkVudGVyRXZlbnROYW1lXSk7Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBj
b250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25PdmVyRXZlbnROYW1lXSk7Ci0gICAgY2hlY2tT
ZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIF0sIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
ZmluYWxTZWxlY3Rpb25SZWN0c10pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBF
bnRlckFuZExlYXZlRXZlbnRzKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDAp
XSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAibGluay1h
bmQtaW5wdXQiXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHRO
UyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZp
ZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2lu
dE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCA0NTApXTsKLQotICAgIEVYUEVDVF9X
S19TVFJFUSgiIiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVdLlVURjhTdHJpbmcpOwotCi0gICAgTlNB
cnJheSAqb2JzZXJ2ZWRFdmVudE5hbWVzID0gW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBvYnNl
cnZlZEV2ZW50TmFtZXNdOwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29u
dGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uRW50ZXJFdmVudE5hbWVdKTsKLSAgICBFWFBFQ1Rf
VFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbk92
ZXJFdmVudE5hbWVdKTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRh
aW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbkxlYXZlRXZlbnROYW1lXSk7Ci0gICAgRVhQRUNUX0ZB
TFNFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uUGVy
Zm9ybU9wZXJhdGlvbkV2ZW50TmFtZV0pOwotICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9n
Z2luZyhAWyBdLCBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNd
KTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgQ2FuU3RhcnREcmFnT25EaXZXaXRo
RHJhZ2dhYmxlQXR0cmlidXRlKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDAp
XSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiY3VzdG9t
LWRyYWdnYWJsZS1kaXYiXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0g
YWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3
OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoMTAwLCAxMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMjUwKV07Ci0KLSAgICBF
WFBFQ1RfR1QoW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5j
b3VudCwgMFVMKTsKLSAgICBOU0l0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyID0gW2RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdDsKLSAgICBF
WFBFQ1RfRVEoVUlQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUlubGluZSwgaXRlbVByb3ZpZGVy
LnByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlKTsKLSAgICBFWFBFQ1RfVFJVRShbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiISFkZXN0aW5hdGlvbi5xdWVyeVNlbGVjdG9y
KCcjaXRlbScpIl0pOwotICAgIEVYUEVDVF9XS19TVFJFUShAIlBBU1MiLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaXRlbS50ZXh0Q29udGVudCJdKTsKLX0KLQotVEVT
VChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VQbGFpblRleHRUb0lGcmFtZSkK
LXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImNvbnRlbnRlZGl0YWJsZS1pbi1pZnJhbWUi
XTsKLQotICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFs
bG9jXSBpbml0XSk7Ci0gICAgW2l0ZW1Qcm92aWRlciByZWdpc3Rlck9iamVjdDpAIkhlbGxvIHdv
cmxkIiB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJp
bGl0eUFsbF07Ci0KLSAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAg
W3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgp
IF1dOwotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgwLCAwKSB0bzpDR1BvaW50
TWFrZSgxNjAsIDI1MCldOwotCi0gICAgYXV0byBjb250YWluZXJMZWZ0ID0gW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKS5sZWZ0Il0uZmxvYXRWYWx1ZTsKLSAgICBhdXRvIGNvbnRhaW5lclRvcCA9IFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjb250YWluZXIuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCkudG9wIl0uZmxvYXRWYWx1ZTsKLSAgICBhdXRvIGNvbnRhaW5lcldpZHRoID0gW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImNvbnRhaW5lci5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKS53aWR0aCJdLmZsb2F0VmFsdWU7Ci0gICAgYXV0byBjb250YWluZXJIZWln
aHQgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY29udGFpbmVyLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCJdLmZsb2F0VmFsdWU7Ci0gICAgY2hlY2tEcmFn
Q2FyZXRSZWN0SXNDb250YWluZWRJblJlY3QoW3NpbXVsYXRvciBsYXN0S25vd25EcmFnQ2FyZXRS
ZWN0XSwgQ0dSZWN0TWFrZShjb250YWluZXJMZWZ0LCBjb250YWluZXJUb3AsIGNvbnRhaW5lcldp
ZHRoLCBjb250YWluZXJIZWlnaHQpKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywg
RXh0ZXJuYWxTb3VyY2VJbmxpbmVUZXh0VG9GaWxlSW5wdXQpCi17Ci0gICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQ
YWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOwotCi0gICAgYXV0byBzaW11bGF0ZWRJdGVtUHJv
dmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbc2lt
dWxhdGVkSXRlbVByb3ZpZGVyIHNldFByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlOlVJUHJlZmVy
cmVkUHJlc2VudGF0aW9uU3R5bGVJbmxpbmVdOwotICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXIg
cmVnaXN0ZXJPYmplY3Q6QCJUaGlzIGl0ZW0gcHJvdmlkZXIgcmVxdWVzdGVkIGlubGluZSBwcmVz
ZW50YXRpb24gc3R5bGUuIiB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25W
aXNpYmlsaXR5QWxsXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRv
cHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFs
SXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAwKSB0bzpD
R1BvaW50TWFrZSgxMDAsIDEwMCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0pOwotfQotCi1U
RVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUpTT05Ub0ZpbGVJbnB1dCkK
LXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2FkaW5nIl07Ci0KLSAgICBh
dXRvIHNpbXVsYXRlZEpTT05JdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIg
YWxsb2NdIGluaXRdKTsKLSAgICBOU0RhdGEgKmpzb25EYXRhID0gW0AieyBcImZvb1wiOiBcImJh
clwiLCAgXCJiYXJcIjogXCJiYXpcIiB9IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdF
bmNvZGluZ107Ci0gICAgW3NpbXVsYXRlZEpTT05JdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVw
cmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSlNPTiB3aXRo
RGF0YTpqc29uRGF0YV07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFk
b3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3
ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5h
bEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSlNPTkl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAg
ICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAxMDAp
IHRvOkNHUG9pbnRNYWtlKDEwMCwgMTAwKV07Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoImFwcGxp
Y2F0aW9uL2pzb24iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0
cHV0LnZhbHVlIl0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNv
dXJjZUltYWdlVG9GaWxlSW5wdXQpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxl
LXVwbG9hZGluZyJdOwotCi0gICAgYXV0byBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciA9IGFk
b3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIE5TRGF0YSAqaW1hZ2VE
YXRhID0gVUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSk7Ci0g
ICAgW3NpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9u
Rm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUpQRUcgd2l0aERhdGE6aW1hZ2VE
YXRhXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3Zp
ZGVyczpAWyBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAxMDApIHRvOkNHUG9p
bnRNYWtlKDEwMCwgMTAwKV07Ci0KLSAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07Ci0gICAgRVhQ
RUNUX1dLX1NUUkVRKCJpbWFnZS9qcGVnIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7Ci19Ci0K
LVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlSFRNTFRvVXBsb2FkQXJl
YSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3
IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2FkaW5nIl07Ci0KLSAg
ICBhdXRvIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlk
ZXIgYWxsb2NdIGluaXRdKTsKLSAgICBOU0RhdGEgKmh0bWxEYXRhID0gW0AiPGJvZHkgY29udGVu
dGVkaXRhYmxlPjwvYm9keT4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5n
XTsKLSAgICBbc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRh
dGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOmh0
bWxEYXRhXTsKLSAgICBbc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciBzZXRTdWdnZXN0ZWROYW1l
OkAiaW5kZXguaHRtbCJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBh
ZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6
d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0U2hvdWxk
QWxsb3dNb3ZlT3BlcmF0aW9uOk5PXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNl
dEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyLmdldCgp
IF1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgy
MDAsIDMwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIE5TU3RyaW5nICpvdXRw
dXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQu
dmFsdWUiXTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoInRleHQvaHRtbCIsIG91dHB1dFZhbHVlLlVU
RjhTdHJpbmcpOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJj
ZU1vdmVPcGVyYXRpb25Ob3RBbGxvd2VkKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIw
LCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAi
ZmlsZS11cGxvYWRpbmciXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAidXBsb2FkLmRyb3BFZmZlY3QgPSAnbW92ZSciXTsKLQotICAgIGF1dG8gc2ltdWxhdGVk
SFRNTEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0p
OwotICAgIE5TRGF0YSAqaHRtbERhdGEgPSBbQCI8Ym9keSBjb250ZW50ZWRpdGFibGU+PC9ib2R5
PiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICAgIFtzaW11bGF0
ZWRIVE1MSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50
aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERhdGE6aHRtbERhdGFdOwotCi0gICAg
YXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtk
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0U2hvdWxkQWxsb3dNb3ZlT3BlcmF0aW9uOk5PXTsK
LSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpA
WyBzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDMwMCkgdG86Q0dQb2ludE1ha2Uo
MTAwLCAzMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdKTsKLX0KLQotVEVTVChEYXRhSW50
ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VaSVBBcmNoaXZlQW5kVVJMVG9TaW5nbGVGaWxl
SW5wdXQpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOwot
Ci0gICAgYXV0byBhcmNoaXZlUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxs
b2NdIGluaXRdKTsKLSAgICBbYXJjaGl2ZVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0
aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZVppcEFyY2hpdmUgd2l0aERh
dGE6dGVzdFpJUEFyY2hpdmUoKV07Ci0KLSAgICBhdXRvIHVybFByb3ZpZGVyID0gYWRvcHROUyhb
W1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW3VybFByb3ZpZGVyIHJlZ2lzdGVy
T2JqZWN0OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93ZWJraXQub3JnIl0gdmlzaWJp
bGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOwot
Ci0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwot
ICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBb
IGFyY2hpdmVQcm92aWRlci5nZXQoKSwgdXJsUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAwKSB0bzpDR1Bv
aW50TWFrZSgxMDAsIDEwMCldOwotCi0gICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOwotICAgIEVY
UEVDVF9XS19TVFJFUSgiYXBwbGljYXRpb24vemlwIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7
Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlWklQQXJjaGl2
ZVRvVXBsb2FkQXJlYSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwot
ICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2Fk
aW5nIl07Ci0KLSAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRl
ciBhbGxvY10gaW5pdF0pOwotICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50
YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlWmlwQXJjaGl2ZSB3aXRo
RGF0YTp0ZXN0WklQQXJjaGl2ZSgpXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhX
ZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNl
dEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMzAwKSB0bzpD
R1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOwotICAg
IEVYUEVDVF9XS19TVFJFUSgiYXBwbGljYXRpb24vemlwIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmlu
Zyk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlSW1hZ2VB
bmRIVE1MVG9TaW5nbGVGaWxlSW5wdXQpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAs
IDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJm
aWxlLXVwbG9hZGluZyJdOwotCi0gICAgYXV0byBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciA9
IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIE5TRGF0YSAqaW1h
Z2VEYXRhID0gVUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSk7
Ci0gICAgW3NpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0
aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUpQRUcgd2l0aERhdGE6aW1h
Z2VEYXRhXTsKLQotICAgIGF1dG8gc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMo
W1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIE5TRGF0YSAqaHRtbERhdGEgPSBb
QCI8Ym9keSBjb250ZW50ZWRpdGFibGU+PC9ib2R5PiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4
U3RyaW5nRW5jb2RpbmddOwotICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHJlZ2lzdGVy
RGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhU
TUwgd2l0aERhdGE6aHRtbERhdGFdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdl
YlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0
RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0KCks
IHNpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDEwMCkgdG86Q0dQb2ludE1ha2Uo
MTAwLCAxMDApXTsKLQotICAgIE5TU3RyaW5nICpvdXRwdXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXTsKLSAgICBFWFBFQ1RfV0tf
U1RSRVEoIiIsIG91dHB1dFZhbHVlLlVURjhTdHJpbmcpOwotfQotCi1URVNUKERhdGFJbnRlcmFj
dGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUltYWdlQW5kSFRNTFRvTXVsdGlwbGVGaWxlSW5wdXQp
Ci17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOwotICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJpbnB1dC5zZXRBdHRyaWJ1dGUo
J211bHRpcGxlJywgJycpIl07Ci0KLSAgICBhdXRvIHNpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVy
ID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgTlNEYXRhICpp
bWFnZURhdGEgPSBVSUltYWdlSlBFR1JlcHJlc2VudGF0aW9uKHRlc3RJY29uSW1hZ2UoKSwgMC41
KTsKLSAgICBbc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50
YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSlBFRyB3aXRoRGF0YTpp
bWFnZURhdGFdOwotCi0gICAgYXV0byBzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyID0gYWRvcHRO
UyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgTlNEYXRhICpodG1sRGF0YSA9
IFtAIjxib2R5IGNvbnRlbnRlZGl0YWJsZT48L2JvZHk+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VU
RjhTdHJpbmdFbmNvZGluZ107Ci0gICAgW3NpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgcmVnaXN0
ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBl
SFRNTCB3aXRoRGF0YTpodG1sRGF0YV07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRo
V2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBz
ZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlci5nZXQo
KSwgc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAwKSB0bzpDR1BvaW50TWFr
ZSgxMDAsIDEwMCldOwotCi0gICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOwotICAgIEVYUEVDVF9X
S19TVFJFUSgiaW1hZ2UvanBlZywgdGV4dC9odG1sIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7
Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlSW1hZ2VBbmRI
VE1MVG9VcGxvYWRBcmVhKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7
Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxv
YWRpbmciXTsKLQotICAgIGF1dG8gc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgPSBhZG9wdE5T
KFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBOU0RhdGEgKmltYWdlRGF0YSA9
IFVJSW1hZ2VKUEVHUmVwcmVzZW50YXRpb24odGVzdEljb25JbWFnZSgpLCAwLjUpOwotICAgIFtz
aW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5
cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVKUEVHIHdpdGhEYXRhOmltYWdlRGF0YV07
Ci0KLSAgICBhdXRvIGZpcnN0U2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tV
SUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIE5TRGF0YSAqZmlyc3RIVE1MRGF0YSA9
IFtAIjxib2R5IGNvbnRlbnRlZGl0YWJsZT48L2JvZHk+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VU
RjhTdHJpbmdFbmNvZGluZ107Ci0gICAgW2ZpcnN0U2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciBy
ZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtV
VFR5cGVIVE1MIHdpdGhEYXRhOmZpcnN0SFRNTERhdGFdOwotCi0gICAgYXV0byBzZWNvbmRTaW11
bGF0ZWRIVE1MSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBp
bml0XSk7Ci0gICAgTlNEYXRhICpzZWNvbmRIVE1MRGF0YSA9IFtAIjxodG1sPjxib2R5PmhlbGxv
IHdvcmxkPC9ib2R5PjwvaHRtbD4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29k
aW5nXTsKLSAgICBbc2Vjb25kU2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFS
ZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdp
dGhEYXRhOnNlY29uZEhUTUxEYXRhXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhX
ZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNl
dFNob3VsZEFsbG93TW92ZU9wZXJhdGlvbjpOT107Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlk
ZXIuZ2V0KCksIGZpcnN0U2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlci5nZXQoKSwgc2Vjb25kU2lt
dWxhdGVkSFRNTEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAzMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwg
MzAwKV07Ci0KLSAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07Ci0gICAgRVhQRUNUX1dLX1NUUkVR
KCJpbWFnZS9qcGVnLCB0ZXh0L2h0bWwsIHRleHQvaHRtbCIsIG91dHB1dFZhbHVlLlVURjhTdHJp
bmcpOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUhUTUxU
b0NvbnRlbnRFZGl0YWJsZSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1
cy1jb250ZW50ZWRpdGFibGUiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkiXTsKLQotICAgIGF1dG8g
ZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBhdXRvIGl0
ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAg
IE5TRGF0YSAqaHRtbERhdGEgPSBbQCI8aDE+VGhpcyBpcyBhIHRlc3Q8L2gxPiIgZGF0YVVzaW5n
RW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0
ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBl
SFRNTCB3aXRoRGF0YTpodG1sRGF0YV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBz
ZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtk
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86
Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIE5TU3RyaW5nICp0ZXh0Q29udGVudCA9IFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQi
XTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIlRoaXMgaXMgYSB0ZXN0IiwgdGV4dENvbnRlbnQuVVRG
OFN0cmluZyk7Ci0gICAgRVhQRUNUX1RSVUUoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAIiEhZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ2gxJykiXS5ib29sVmFsdWUpOwotfQot
Ci1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUJvbGRTeXN0ZW1BdHRy
aWJ1dGVkU3RyaW5nVG9Db250ZW50RWRpdGFibGUpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFt
ZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07
Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7
Ci0gICAgTlNEaWN0aW9uYXJ5ICp0ZXh0QXR0cmlidXRlcyA9IEB7IE5TRm9udEF0dHJpYnV0ZU5h
bWU6IFtVSUZvbnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6MjBdIH07Ci0gICAgTlNBdHRyaWJ1dGVk
U3RyaW5nICpyaWNoVGV4dCA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0
cmluZzpAIlRoaXMgaXMgYSB0ZXN0IiBhdHRyaWJ1dGVzOnRleHRBdHRyaWJ1dGVzXTsKLSAgICBh
dXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdFdp
dGhPYmplY3Q6cmljaFRleHRdKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4
dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1Bv
aW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVRKCJUaGlzIGlzIGEgdGVz
dCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENv
bnRlbnQiXS5VVEY4U3RyaW5nKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0
ZXJuYWxTb3VyY2VDb2xvcmVkQXR0cmlidXRlZFN0cmluZ1RvQ29udGVudEVkaXRhYmxlKQotewot
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOwot
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24o
KS5yZW1vdmVBbGxSYW5nZXMoKSJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdl
YlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIE5TRGljdGlvbmFyeSAqdGV4dEF0dHJpYnV0ZXMg
PSBAeyBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWU6IFtVSUNvbG9yIHJlZENvbG9yXSB9
OwotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcmljaFRleHQgPSBbW05TQXR0cmlidXRlZFN0cmlu
ZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCJUaGlzIGlzIGEgdGVzdCIgYXR0cmlidXRlczp0ZXh0
QXR0cmlidXRlc107Ci0gICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJv
dmlkZXIgYWxsb2NdIGluaXRXaXRoT2JqZWN0OnJpY2hUZXh0XSk7Ci0gICAgW2RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdl
dCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFr
ZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIEVYUEVDVF9XS19T
VFJFUSgicmdiKDI1NSwgMCwgMCkiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAiZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdwJykpLmNvbG9y
Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiVGhpcyBpcyBhIHRlc3QiLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il0uVVRGOFN0cmlu
Zyk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlTXVsdGlw
bGVVUkxzVG9Db250ZW50RWRpdGFibGUpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAs
IDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJh
dXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07Ci0KLSAg
ICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAg
YXV0byBmaXJzdEl0ZW0gPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsK
LSAgICBbZmlyc3RJdGVtIHJlZ2lzdGVyT2JqZWN0OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0
cHM6Ly93d3cuYXBwbGUuY29tL2lwaG9uZS8iXSB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVw
cmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07Ci0gICAgYXV0byBzZWNvbmRJdGVtID0g
YWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW3NlY29uZEl0ZW0g
cmVnaXN0ZXJPYmplY3Q6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBsZS5j
b20vbWFjLyJdIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNW
aXNpYmlsaXR5QWxsXTsKLSAgICBhdXRvIHRoaXJkSXRlbSA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92
aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFt0aGlyZEl0ZW0gcmVnaXN0ZXJPYmplY3Q6W05TVVJM
IFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3dlYmtpdC5vcmcvIl0gdmlzaWJpbGl0eTpVSUl0ZW1Q
cm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOwotICAgIFtkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGZpcnN0SXRlbS5n
ZXQoKSwgc2Vjb25kSXRlbS5nZXQoKSwgdGhpcmRJdGVtLmdldCgpIF1dOwotICAgIFtkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2lu
dE1ha2UoMTAwLCAzMDApXTsKLQotICAgIE5TQXJyYXkgKmRyb3BwZWRVUkxzID0gW3dlYlZpZXcg
b2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIkFycmF5LmZyb20oZWRpdG9yLnF1ZXJ5U2Vs
ZWN0b3JBbGwoJ2EnKSkubWFwKGEgPT4gYS5ocmVmKSJdOwotICAgIEVYUEVDVF9FUSgzVUwsIGRy
b3BwZWRVUkxzLmNvdW50KTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxl
LmNvbS9pcGhvbmUvIiwgZHJvcHBlZFVSTHNbMF0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0
cHM6Ly93d3cuYXBwbGUuY29tL21hYy8iLCBkcm9wcGVkVVJMc1sxXSk7Ci0gICAgRVhQRUNUX1dL
X1NUUkVRKCJodHRwczovL3dlYmtpdC5vcmcvIiwgZHJvcHBlZFVSTHNbMl0pOwotCi0gICAgTlNB
cnJheSAqbGlua3NTZXBhcmF0ZWRCeUxpbmUgPSBbW3dlYlZpZXcgb2JqZWN0QnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAImVkaXRvci5pbm5lclRleHQiXSBjb21wb25lbnRzU2VwYXJhdGVkQnlDaGFy
YWN0ZXJzSW5TZXQ6W05TQ2hhcmFjdGVyU2V0IG5ld2xpbmVDaGFyYWN0ZXJTZXRdXTsKLSAgICBF
WFBFQ1RfRVEoM1VMLCBsaW5rc1NlcGFyYXRlZEJ5TGluZS5jb3VudCk7Ci0gICAgRVhQRUNUX1dL
X1NUUkVRKCJodHRwczovL3d3dy5hcHBsZS5jb20vaXBob25lLyIsIGxpbmtzU2VwYXJhdGVkQnlM
aW5lWzBdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9tYWMv
IiwgbGlua3NTZXBhcmF0ZWRCeUxpbmVbMV0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6
Ly93ZWJraXQub3JnLyIsIGxpbmtzU2VwYXJhdGVkQnlMaW5lWzJdKTsKLX0KLQotVEVTVChEYXRh
SW50ZXJhY3Rpb25UZXN0cywgUmVzcGVjdHNFeHRlcm5hbFNvdXJjZUZpZGVsaXR5UmFua2luZ3Mp
Ci17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxl
Il07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVj
dGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICAvLyBIZXJlLCBvdXIgc291cmNlIGl0
ZW0gcHJvdmlkZXIgdmVuZHMgdHdvIHJlcHJlc2VudGF0aW9uczogcGxhaW4gdGV4dCwgYW5kIHRo
ZW4gYW4gaW1hZ2UuIElmIHdlIGRvbid0IHJlc3BlY3QgdGhlCi0gICAgLy8gZmlkZWxpdHkgb3Jk
ZXIgcmVxdWVzdGVkIGJ5IHRoZSBzb3VyY2UsIHdlJ2xsIGVuZCB1cCBhc3N1bWluZyB0aGF0IHRo
ZSBpbWFnZSBpcyBhIGhpZ2hlciBmaWRlbGl0eSByZXByZXNlbnRhdGlvbgotICAgIC8vIHRoYW4g
dGhlIHBsYWluIHRleHQsIGFuZCBlcnJvbmVvdXNseSBpbnNlcnQgdGhlIGltYWdlLiBJZiB3ZSBy
ZXNwZWN0IHNvdXJjZSBmaWRlbGl0aWVzLCB3ZSdsbCBpbnNlcnQgdGV4dCByYXRoZXIKLSAgICAv
LyB0aGFuIGFuIGltYWdlLgotICAgIGF1dG8gc2ltdWxhdGVkSXRlbVByb3ZpZGVyV2l0aFRleHRG
aXJzdCA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtzaW11
bGF0ZWRJdGVtUHJvdmlkZXJXaXRoVGV4dEZpcnN0IHJlZ2lzdGVyT2JqZWN0OkAiSGVsbG8gd29y
bGQiIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmls
aXR5QWxsXTsKLSAgICBbc2ltdWxhdGVkSXRlbVByb3ZpZGVyV2l0aFRleHRGaXJzdCByZWdpc3Rl
ck9iamVjdDp0ZXN0SWNvbkltYWdlKCkgdmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2Vu
dGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRlcldpdGhU
ZXh0Rmlyc3QuZ2V0KCkgXV07Ci0KLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZy
b206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0gICAg
RVhQRUNUX1dLX1NUUkVRKCJIZWxsbyB3b3JsZCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXSk7Ci0gICAgRVhQRUNUX0ZBTFNFKFt3
ZWJWaWV3IGVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk7Ci0gICAgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci5pbm5lckhUTUwgPSAnJyJdOwotCi0gICAg
Ly8gTm93IHdlIHJlZ2lzdGVyIHRoZSBpdGVtIHByb3ZpZGVycyBpbiByZXZlcnNlLCBhbmQgZXhw
ZWN0IHRoZSBpbWFnZSB0byBiZSBpbnNlcnRlZCBpbnN0ZWFkIG9mIHRleHQuCi0gICAgYXV0byBz
aW11bGF0ZWRJdGVtUHJvdmlkZXJXaXRoSW1hZ2VGaXJzdCA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92
aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXJXaXRoSW1hZ2VG
aXJzdCByZWdpc3Rlck9iamVjdDp0ZXN0SWNvbkltYWdlKCkgdmlzaWJpbGl0eTpVSUl0ZW1Qcm92
aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOwotICAgIFtzaW11bGF0ZWRJ
dGVtUHJvdmlkZXJXaXRoSW1hZ2VGaXJzdCByZWdpc3Rlck9iamVjdDpAIkhlbGxvIHdvcmxkIiB2
aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFs
bF07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRl
cnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyV2l0aEltYWdlRmlyc3QuZ2V0KCkgXV07Ci0KLSAg
ICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDAp
IHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il0p
OwotICAgIEVYUEVDVF9UUlVFKFt3ZWJWaWV3IGVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk7
Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlVVRGOFBsYWlu
VGV4dE9ubHkpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBb
d2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVu
dGVkaXRhYmxlIl07Ci0KLSAgICBOU1N0cmluZyAqdGV4dFBheWxvYWQgPSBAIkNlY2kgbidlc3Qg
cGFzIHVuZSBzdHJpbmciOwotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRv
cHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXcuZ2V0KCldKTsKLSAgICBhdXRvIHNpbXVsYXRlZEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMo
W1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlk
ZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooX19icmlkZ2Ug
TlNTdHJpbmcgKilrVVRUeXBlVVRGOFBsYWluVGV4dCBvcHRpb25zOm5pbCBsb2FkSGFuZGxlcjpe
TlNQcm9ncmVzcyAqKFVJSXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxl
dGlvbkJsb2NrKQotICAgIHsKLSAgICAgICAgY29tcGxldGlvbkJsb2NrKFt0ZXh0UGF5bG9hZCBk
YXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10sIG5pbCk7Ci0gICAgICAgIHJl
dHVybiBbTlNQcm9ncmVzcyBkaXNjcmV0ZVByb2dyZXNzV2l0aFRvdGFsVW5pdENvdW50OjEwMF07
Ci0gICAgfV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Q
cm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2lu
dE1ha2UoMTAwLCAzMDApXTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEodGV4dFBheWxvYWQuVVRGOFN0
cmluZywgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0
Q29udGVudCJdLlVURjhTdHJpbmcpOwotICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2lu
ZyhAWyBtYWtlQ0dSZWN0VmFsdWUoMSwgMjAxLCAxOTM2LCAyMjcpIF0sIFtkYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0c10pOwotfQotCi1URVNUKERhdGFJbnRlcmFj
dGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUpQRUdPbmx5KQotewotICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFn
ZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOwotCi0gICAgYXV0byBkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFs
bG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIGF1dG8gc2ltdWxhdGVk
SXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0g
ICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5
cGVJZGVudGlmaWVyOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVKUEVHIG9wdGlvbnM6bmls
IGxvYWRIYW5kbGVyOl5OU1Byb2dyZXNzICooVUlJdGVtUHJvdmlkZXJEYXRhTG9hZENvbXBsZXRp
b25CbG9jayBjb21wbGV0aW9uQmxvY2spCi0gICAgewotICAgICAgICBjb21wbGV0aW9uQmxvY2so
VUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSksIG5pbCk7Ci0g
ICAgICAgIHJldHVybiBbTlNQcm9ncmVzcyBkaXNjcmV0ZVByb2dyZXNzV2l0aFRvdGFsVW5pdENv
dW50OjEwMF07Ci0gICAgfV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRl
cm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAg
IFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkg
dG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLSAgICBFWFBFQ1RfVFJVRShbd2ViVmlldyBlZGl0
b3JDb250YWluc0ltYWdlRWxlbWVudF0pOwotICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9n
Z2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUoMSwgMjAxLCAyMTUsIDE3NCkgXSwgW2RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVy
YWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlVGl0bGVkTlNVUkwpCi17Ci0gICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRl
c3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07Ci0gICAgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJh
bmdlcygpIl07Ci0KLSAgICBOU1VSTCAqdGl0bGVkVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6
QCJodHRwczovL3d3dy5hcHBsZS5jb20iXTsKLSAgICB0aXRsZWRVUkwuX3RpdGxlID0gQCJBcHBs
ZSI7Ci0gICAgYXV0byBzaW11bGF0ZWRJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJv
dmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbc2ltdWxhdGVkSXRlbVByb3ZpZGVyIHJlZ2lzdGVy
T2JqZWN0OnRpdGxlZFVSTCB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25P
cHRpb25zVmlzaWJpbGl0eUFsbF07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRF
eHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOwot
ICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQw
MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiQXBw
bGUiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnF1ZXJ5
U2VsZWN0b3IoJ2EnKS50ZXh0Q29udGVudCJdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBz
Oi8vd3d3LmFwcGxlLmNvbS8iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAiZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ2EnKS5ocmVmIl0pOwotfQotCi1URVNUKERhdGFJbnRl
cmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUZpbGVVUkwpCi17Ci0gICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQ
YWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07Ci0gICAgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdl
cygpIl07Ci0KLSAgICBOU1VSTCAqVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJmaWxlOi8v
L3NvbWUvZmlsZS90aGF0L2lzL25vdC9yZWFsIl07Ci0gICAgVUlJdGVtUHJvdmlkZXIgKnNpbXVs
YXRlZEl0ZW1Qcm92aWRlciA9IFtVSUl0ZW1Qcm92aWRlciBpdGVtUHJvdmlkZXJXaXRoVVJMOlVS
TCB0aXRsZTpAIiJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9w
dE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2Vi
Vmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJ
dGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRlciBdXTsKLSAgICBbZGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRN
YWtlKDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfRkFMU0UoW1t3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCIhIWVkaXRvci5xdWVyeVNlbGVjdG9yKCdhJykiXSBib29sVmFs
dWVdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIkhlbGxvIHdvcmxkXG5maWxlOi8vL3NvbWUvZmls
ZS90aGF0L2lzL25vdC9yZWFsIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAImRvY3VtZW50LmJvZHkuaW5uZXJUZXh0Il0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlv
blRlc3RzLCBFeHRlcm5hbFNvdXJjZU92ZXJyaWRlRHJvcEZpbGVVcGxvYWQpCi17Ci0gICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5
TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOwotCi0gICAgYXV0byBzaW11bGF0
ZWRJbWFnZUl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5p
dF0pOwotICAgIE5TRGF0YSAqaW1hZ2VEYXRhID0gVUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0
ZXN0SWNvbkltYWdlKCksIDAuNSk7Ci0gICAgW3NpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyIHJl
Z2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VU
VHlwZUpQRUcgd2l0aERhdGE6aW1hZ2VEYXRhXTsKLQotICAgIGF1dG8gc2ltdWxhdGVkSFRNTEl0
ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAg
IE5TRGF0YSAqZmlyc3RIVE1MRGF0YSA9IFtAIjxib2R5IGNvbnRlbnRlZGl0YWJsZT48L2JvZHk+
IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107Ci0gICAgW3NpbXVsYXRl
ZEhUTUxJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRp
ZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3aXRoRGF0YTpmaXJzdEhUTUxEYXRhXTsKLSAg
ICBbc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciBzZXRQcmVmZXJyZWRQcmVzZW50YXRpb25TdHls
ZTpVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlQXR0YWNobWVudF07Ci0KLSAgICBhdXRvIGRh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBzZXRPdmVycmlkZVBlcmZvcm1Ecm9wQmxvY2s6Xk5TQXJyYXk8VUlE
cmFnSXRlbSAqPiAqKGlkIDxVSURyb3BTZXNzaW9uPiBzZXNzaW9uKQotICAgIHsKLSAgICAgICAg
RVhQRUNUX0VRKDJVTCwgc2Vzc2lvbi5pdGVtcy5jb3VudCk7Ci0gICAgICAgIFVJRHJhZ0l0ZW0g
KmZpcnN0SXRlbSA9IHNlc3Npb24uaXRlbXNbMF07Ci0gICAgICAgIFVJRHJhZ0l0ZW0gKnNlY29u
ZEl0ZW0gPSBzZXNzaW9uLml0ZW1zWzFdOwotICAgICAgICBFWFBFQ1RfVFJVRShbZmlyc3RJdGVt
Lml0ZW1Qcm92aWRlci5yZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzIGlzRXF1YWw6QFsgKE5TU3Ry
aW5nICopa1VUVHlwZUpQRUcgXV0pOwotICAgICAgICBFWFBFQ1RfVFJVRShbc2Vjb25kSXRlbS5p
dGVtUHJvdmlkZXIucmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVycyBpc0VxdWFsOkBbIChOU1N0cmlu
ZyAqKWtVVFR5cGVIVE1MIF1dKTsKLSAgICAgICAgcmV0dXJuIEBbIHNlY29uZEl0ZW0gXTsKLSAg
ICB9XTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3Zp
ZGVyczpAWyBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlci5nZXQoKSwgc2ltdWxhdGVkSFRNTEl0
ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZy
b206Q0dQb2ludE1ha2UoMjAwLCAzMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAg
ICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAib3V0cHV0LnZhbHVlIl07Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJ0ZXh0L2h0bWwi
LCBvdXRwdXRWYWx1ZS5VVEY4U3RyaW5nKTsKLX0KLQotI2lmIF9fSVBIT05FX09TX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDExMDMwMAotCi1zdGF0aWMgUmV0YWluUHRyPFRlc3RXS1dlYlZpZXc+
IHNldFVwVGVzdFdlYlZpZXdGb3JEYXRhVHJhbnNmZXJJdGVtcygpCi17Ci0gICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRl
c3RQYWdlTmFtZWQ6QCJEYXRhVHJhbnNmZXJJdGVtLWdldEFzRW50cnkiXTsKLQotICAgIGF1dG8g
cHJlZmVyZW5jZXMgPSAoV0tQcmVmZXJlbmNlc1JlZilbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0g
cHJlZmVyZW5jZXNdOwotICAgIFdLUHJlZmVyZW5jZXNTZXREYXRhVHJhbnNmZXJJdGVtc0VuYWJs
ZWQocHJlZmVyZW5jZXMsIHRydWUpOwotICAgIFdLUHJlZmVyZW5jZXNTZXREaXJlY3RvcnlVcGxv
YWRFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKLQotICAgIHJldHVybiB3ZWJWaWV3OwotfQot
Ci1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZURhdGFUcmFuc2Zlckl0
ZW1HZXRGb2xkZXJBc0VudHJ5KQotewotICAgIC8vIFRoZSBleHBlY3RlZCBvdXRwdXQgaXMgc29y
dGVkIGJ5IGFscGhhYmV0aWNhbCBvcmRlciBoZXJlIGZvciBjb25zaXN0ZW50IGJlaGF2aW9yIGFj
cm9zcyBkaWZmZXJlbnQgdGVzdCBlbnZpcm9ubWVudHMuCi0gICAgLy8gU2VlIERhdGFUcmFuc2Zl
ckl0ZW0tZ2V0QXNFbnRyeS5odG1sIGZvciBtb3JlIGRldGFpbHMuCi0gICAgTlNBcnJheTxOU1N0
cmluZyAqPiAqZXhwZWN0ZWRPdXRwdXQgPSBAWwotICAgICAgICBAIkZvdW5kIGRhdGEgdHJhbnNm
ZXIgaXRlbSAoa2luZDogJ2ZpbGUnLCB0eXBlOiAnJykiLAotICAgICAgICBAIkRJUjogL3NvbWVk
aXJlY3RvcnkiLAotICAgICAgICBAIkRJUjogL3NvbWVkaXJlY3Rvcnkvc3ViZGlyZWN0b3J5MSIs
Ci0gICAgICAgIEAiRElSOiAvc29tZWRpcmVjdG9yeS9zdWJkaXJlY3RvcnkyIiwKLSAgICAgICAg
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGSUxFOiAvc29tZWRpcmVjdG9yeS9hcmNoaXZl
LnppcCAoJ2FwcGxpY2F0aW9uL3ppcCcsICV0dSBieXRlcykiLCB0ZXN0WklQQXJjaGl2ZSgpLmxl
bmd0aF0sCi0gICAgICAgIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRklMRTogL3NvbWVk
aXJlY3RvcnkvaWNvbi5wbmcgKCdpbWFnZS9wbmcnLCAldHUgYnl0ZXMpIiwgdGVzdEljb25JbWFn
ZURhdGEoKS5sZW5ndGhdLAotICAgICAgICBAIkZJTEU6IC9zb21lZGlyZWN0b3J5L3N1YmRpcmVj
dG9yeTEvdGV4dC1maWxlLTEudHh0ICgndGV4dC9wbGFpbicsIDQzIGJ5dGVzKSIsCi0gICAgICAg
IEAiRklMRTogL3NvbWVkaXJlY3Rvcnkvc3ViZGlyZWN0b3J5Mi90ZXh0LWZpbGUtMi50eHQgKCd0
ZXh0L3BsYWluJywgNDQgYnl0ZXMpIgotICAgIF07Ci0KLSAgICBhdXRvIHdlYlZpZXcgPSBzZXRV
cFRlc3RXZWJWaWV3Rm9yRGF0YVRyYW5zZmVySXRlbXMoKTsKLSAgICBfX2Jsb2NrIGJvb2wgZG9u
ZSA9IGZhbHNlOwotICAgIFt3ZWJWaWV3IHBlcmZvcm1BZnRlclJlY2VpdmluZ01lc3NhZ2U6QCJk
cm9wcGVkIiBhY3Rpb246XigpIHsKLSAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgfV07Ci0KLSAg
ICBydW5UZXN0V2l0aFRlbXBvcmFyeUZvbGRlciheKE5TVVJMICpmb2xkZXJVUkwpIHsKLSAgICAg
ICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbTlNJdGVtUHJvdmlkZXIgYWxsb2NdIGlu
aXRdKTsKLSAgICAgICAgW2l0ZW1Qcm92aWRlciBzZXRTdWdnZXN0ZWROYW1lOkAic29tZWRpcmVj
dG9yeSJdOwotICAgICAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRmlsZVJlcHJlc2VudGF0aW9u
Rm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUZvbGRlciBmaWxlT3B0aW9uczow
IHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGwgbG9h
ZEhhbmRsZXI6W2NhcHR1cmVkRm9sZGVyVVJMID0gcmV0YWluUHRyKGZvbGRlclVSTCldIChGaWxl
TG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uSGFuZGxlcikgLT4gTlNQcm9ncmVzcyAqIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNhcHR1cmVkRm9sZGVyVVJMLmdldCgpLCBO
TywgbmlsKTsKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIH1dOwotCi0gICAgICAg
IGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICAg
ICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsg
aXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgICAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
IHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFrZSgxNTAsIDUwKV07Ci0g
ICAgfSk7Ci0KLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwotICAgIEVYUEVD
VF9XS19TVFJFUShbZXhwZWN0ZWRPdXRwdXQgY29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiXG4i
XSwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJd
KTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VEYXRhVHJh
bnNmZXJJdGVtR2V0UGxhaW5UZXh0RmlsZUFzRW50cnkpCi17Ci0gICAgTlNBcnJheTxOU1N0cmlu
ZyAqPiAqZXhwZWN0ZWRPdXRwdXQgPSBAWwotICAgICAgICBAIkZvdW5kIGRhdGEgdHJhbnNmZXIg
aXRlbSAoa2luZDogJ2ZpbGUnLCB0eXBlOiAndGV4dC9wbGFpbicpIiwKLSAgICAgICAgQCJGSUxF
OiAvZm9vLnR4dCAoJ3RleHQvcGxhaW4nLCAyOCBieXRlcykiCi0gICAgXTsKLQotICAgIGF1dG8g
d2ViVmlldyA9IHNldFVwVGVzdFdlYlZpZXdGb3JEYXRhVHJhbnNmZXJJdGVtcygpOwotICAgIF9f
YmxvY2sgYm9vbCBkb25lID0gZmFsc2U7Ci0gICAgW3dlYlZpZXcgcGVyZm9ybUFmdGVyUmVjZWl2
aW5nTWVzc2FnZTpAImRyb3BwZWQiIGFjdGlvbjpeKCkgewotICAgICAgICBkb25lID0gdHJ1ZTsK
LSAgICB9XTsKLQotICAgIHJ1blRlc3RXaXRoVGVtcG9yYXJ5VGV4dEZpbGUoXihOU1VSTCAqZmls
ZVVSTCkgewotICAgICAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92
aWRlciBhbGxvY10gaW5pdF0pOwotICAgICAgICBbaXRlbVByb3ZpZGVyIHNldFN1Z2dlc3RlZE5h
bWU6QCJmb28iXTsKLSAgICAgICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckZpbGVSZXByZXNlbnRh
dGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0IGZp
bGVPcHRpb25zOjAgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJp
bGl0eUFsbCBsb2FkSGFuZGxlcjpbY2FwdHVyZWRGaWxlVVJMID0gcmV0YWluUHRyKGZpbGVVUkwp
XShGaWxlTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uSGFuZGxlcikgLT4gTlNQcm9ncmVz
cyAqIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNhcHR1cmVkRmlsZVVSTC5nZXQo
KSwgTk8sIG5pbCk7Ci0gICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICB9XTsKLQotICAg
ICAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0g
ICAgICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJz
OkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICAgICAgW2RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTUwLCA1MCld
OwotICAgIH0pOwotCi0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKLSAgICBF
WFBFQ1RfV0tfU1RSRVEoW2V4cGVjdGVkT3V0cHV0IGNvbXBvbmVudHNKb2luZWRCeVN0cmluZzpA
IlxuIl0sIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFs
dWUiXSk7Ci19Ci0KLSNlbmRpZiAvLyBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMTAzMDAKLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VPdmVy
cmlkZURyb3BJbnNlcnRVUkwpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCld
KTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9j
dXMtY29udGVudGVkaXRhYmxlIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07Ci0KLSAgICBhdXRv
IGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvciBzZXRPdmVycmlkZVBlcmZvcm1Ecm9wQmxvY2s6Xk5TQXJyYXk8
VUlEcmFnSXRlbSAqPiAqKGlkIDxVSURyb3BTZXNzaW9uPiBzZXNzaW9uKQotICAgIHsKLSAgICAg
ICAgTlNNdXRhYmxlQXJyYXk8VUlEcmFnSXRlbSAqPiAqYWxsb3dlZEl0ZW1zID0gW05TTXV0YWJs
ZUFycmF5IGFycmF5XTsKLSAgICAgICAgZm9yIChVSURyYWdJdGVtICppdGVtIGluIHNlc3Npb24u
aXRlbXMpIHsKLSAgICAgICAgICAgIGlmIChbaXRlbS5pdGVtUHJvdmlkZXIucmVnaXN0ZXJlZFR5
cGVJZGVudGlmaWVycyBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilrVVRUeXBlVVJMXSkKLSAg
ICAgICAgICAgICAgICBbYWxsb3dlZEl0ZW1zIGFkZE9iamVjdDppdGVtXTsKLSAgICAgICAgfQot
ICAgICAgICBFWFBFQ1RfRVEoMVVMLCBhbGxvd2VkSXRlbXMuY291bnQpOwotICAgICAgICByZXR1
cm4gYWxsb3dlZEl0ZW1zOwotICAgIH1dOwotCi0gICAgYXV0byBmaXJzdEl0ZW1Qcm92aWRlciA9
IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtmaXJzdEl0ZW1Q
cm92aWRlciByZWdpc3Rlck9iamVjdDpAIlRoaXMgaXMgYSBzdHJpbmcuIiB2aXNpYmlsaXR5OlVJ
SXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07Ci0gICAgYXV0
byBzZWNvbmRJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGlu
aXRdKTsKLSAgICBbc2Vjb25kSXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OltOU1VSTCBVUkxX
aXRoU3RyaW5nOkAiaHR0cHM6Ly93ZWJraXQub3JnLyJdIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlk
ZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKLSAgICBbZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBmaXJzdEl0ZW1Qcm92aWRl
ci5nZXQoKSwgc2Vjb25kSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2Uo
MTAwLCAzMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93ZWJraXQub3JnLyIs
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRl
bnQiXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIE92ZXJyaWRlRGF0YUludGVy
YWN0aW9uT3BlcmF0aW9uKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7
Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2ltcGxlIl07
Ci0KLSAgICBhdXRvIHNpbXVsYXRlZEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92
aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXIgcmVnaXN0ZXJE
YXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRN
TCB3aXRoRGF0YTpbQCI8Ym9keT48L2JvZHk+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZ11dOwotCi0gICAgX19ibG9jayBib29sIGZpbmlzaGVkTG9hZGluZ0RhdGEgPSBm
YWxzZTsKLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgp
XSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRl
cnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3Igc2V0T3ZlcnJpZGVEYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25CbG9jazpeTlNV
SW50ZWdlcihOU1VJbnRlZ2VyIG9wZXJhdGlvbiwgaWQgc2Vzc2lvbikKLSAgICB7Ci0gICAgICAg
IEVYUEVDVF9FUSgwVSwgb3BlcmF0aW9uKTsKLSAgICAgICAgcmV0dXJuIFVJRHJvcE9wZXJhdGlv
bkNvcHk7Ci0gICAgfV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXREYXRhSW50
ZXJhY3Rpb25PcGVyYXRpb25Db21wbGV0aW9uQmxvY2s6XihCT09MIGhhbmRsZWQsIE5TQXJyYXkg
Kml0ZW1Qcm92aWRlcnMpIHsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKGhhbmRsZWQpOwotICAgICAg
ICBbaXRlbVByb3ZpZGVycy5maXJzdE9iamVjdCBsb2FkRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlw
ZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgY29tcGxldGlvbkhhbmRsZXI6XihO
U0RhdGEgKmRhdGEsIE5TRXJyb3IgKmVycm9yKSB7Ci0gICAgICAgICAgICBOU1N0cmluZyAqdGV4
dCA9IFtbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6ZGF0YSBlbmNvZGluZzpOU1VURjhT
dHJpbmdFbmNvZGluZ10gYXV0b3JlbGVhc2VdOwotICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVR
KCI8Ym9keT48L2JvZHk+IiwgdGV4dC5VVEY4U3RyaW5nKTsKLSAgICAgICAgICAgIEVYUEVDVF9G
QUxTRSghIWVycm9yKTsKLSAgICAgICAgICAgIGZpbmlzaGVkTG9hZGluZ0RhdGEgPSB0cnVlOwot
ICAgICAgICB9XTsKLSAgICB9XTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZy
b206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0gICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZExvYWRpbmdEYXRhKTsKLX0KLQotVEVT
VChEYXRhSW50ZXJhY3Rpb25UZXN0cywgSW5qZWN0ZWRCdW5kbGVPdmVycmlkZVBlcmZvcm1Ud29T
dGVwRHJvcCkKLXsKLSAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0g
W1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gX3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0UGx1Z0lu
Q2xhc3NOYW1lOkAiQnVuZGxlRWRpdGluZ0RlbGVnYXRlUGx1Z0luIl07Ci0gICAgW2NvbmZpZ3Vy
YXRpb24ucHJvY2Vzc1Bvb2wgX3NldE9iamVjdDpAWUVTIGZvckJ1bmRsZVBhcmFtZXRlcjpAIkJ1
bmRsZU92ZXJyaWRlUGVyZm9ybVR3b1N0ZXBEcm9wIl07Ci0KLSAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAs
IDAsIDMyMCwgNTAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dKTsKLSAgICBbd2ViVmll
dyBsb2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKLSAgICBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVt
b3ZlQWxsUmFuZ2VzKCkiXTsKLQotICAgIGF1dG8gc2ltdWxhdGVkSXRlbVByb3ZpZGVyID0gYWRv
cHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW3NpbXVsYXRlZEl0ZW1Q
cm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0
cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0IG9wdGlvbnM6bmlsIGxvYWRIYW5kbGVyOl5OU1By
b2dyZXNzICooVUlJdGVtUHJvdmlkZXJEYXRhTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9u
QmxvY2spCi0gICAgewotICAgICAgICBjb21wbGV0aW9uQmxvY2soW0AiSGVsbG8gd29ybGQiIGRh
dGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSwgbmlsKTsKLSAgICAgICAgcmV0
dXJuIFtOU1Byb2dyZXNzIGRpc2NyZXRlUHJvZ3Jlc3NXaXRoVG90YWxVbml0Q291bnQ6MTAwXTsK
LSAgICB9XTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhb
W0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcu
Z2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVBy
b3ZpZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50
TWFrZSgxMDAsIDMwMCldOwotCi0gICAgRVhQRUNUX0VRKDBVTCwgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdLmxlbmd0aCk7Ci19Ci0K
LVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEluamVjdGVkQnVuZGxlQWxsb3dQZXJmb3JtVHdv
U3RlcERyb3ApCi17Ci0gICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9
IFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVzdFBsdWdJ
bkNsYXNzTmFtZTpAIkJ1bmRsZUVkaXRpbmdEZWxlZ2F0ZVBsdWdJbiJdOwotICAgIFtjb25maWd1
cmF0aW9uLnByb2Nlc3NQb29sIF9zZXRPYmplY3Q6QE5PIGZvckJ1bmRsZVBhcmFtZXRlcjpAIkJ1
bmRsZU92ZXJyaWRlUGVyZm9ybVR3b1N0ZXBEcm9wIl07Ci0KLSAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAs
IDAsIDMyMCwgNTAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dKTsKLSAgICBbd2ViVmll
dyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRh
YmxlIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNl
bGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07Ci0KLSAgICBhdXRvIHNpbXVsYXRlZEl0ZW1Q
cm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtz
aW11bGF0ZWRJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRl
bnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlVVRGOFBsYWluVGV4dCBvcHRpb25zOm5pbCBsb2Fk
SGFuZGxlcjpeTlNQcm9ncmVzcyAqKFVJSXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0aW9uQmxv
Y2sgY29tcGxldGlvbkJsb2NrKQotICAgIHsKLSAgICAgICAgY29tcGxldGlvbkJsb2NrKFtAIkhl
bGxvIHdvcmxkIiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10sIG5pbCk7
Ci0gICAgICAgIHJldHVybiBbTlNQcm9ncmVzcyBkaXNjcmV0ZVByb2dyZXNzV2l0aFRvdGFsVW5p
dENvdW50OjEwMF07Ci0gICAgfV07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRF
eHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOwot
ICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQw
MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiSGVs
bG8gd29ybGQiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9y
LnRleHRDb250ZW50Il0uVVRGOFN0cmluZyk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVz
dHMsIEluamVjdGVkQnVuZGxlSW1hZ2VFbGVtZW50RGF0YSkKLXsKLSAgICBXS1dlYlZpZXdDb25m
aWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gX3Rlc3Rf
Y29uZmlndXJhdGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NOYW1lOkAiQnVuZGxlRWRpdGluZ0RlbGVn
YXRlUGx1Z0luIl07Ci0gICAgW2NvbmZpZ3VyYXRpb24gX3NldEF0dGFjaG1lbnRFbGVtZW50RW5h
YmxlZDpZRVNdOwotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbl0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBh
Z2VOYW1lZDpAImltYWdlLWFuZC1jb250ZW50ZWRpdGFibGUiXTsKLQotICAgIF9fYmxvY2sgUmV0
YWluUHRyPE5TU3RyaW5nPiBpbmplY3RlZFN0cmluZzsKLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGlu
aXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBzZXRDb252ZXJ0SXRlbVByb3ZpZGVyc0Jsb2NrOl5OU0FycmF5ICooVUlJdGVtUHJvdmlk
ZXIgKml0ZW1Qcm92aWRlciwgTlNBcnJheSAqLCBOU0RpY3Rpb25hcnkgKmRhdGEpCi0gICAgewot
ICAgICAgICBpbmplY3RlZFN0cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdp
dGhEYXRhOmRhdGFbSW5qZWN0ZWRCdW5kbGVQYXN0ZWJvYXJkRGF0YVR5cGVdIGVuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nXSk7Ci0gICAgICAgIHJldHVybiBAWyBpdGVtUHJvdmlkZXIgXTsK
LSAgICB9XTsKLQotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50
TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDI1MCldOwotCi0gICAgRVhQRUNUX1dL
X1NUUkVRKCJoZWxsbyIsIFtpbmplY3RlZFN0cmluZyBVVEY4U3RyaW5nXSk7Ci19Ci0KLVRFU1Qo
RGF0YUludGVyYWN0aW9uVGVzdHMsIEluamVjdGVkQnVuZGxlQXR0YWNobWVudEVsZW1lbnREYXRh
KQotewotICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBfdGVzdF9jb25maWd1cmF0aW9uV2l0aFRlc3RQbHVnSW5DbGFzc05h
bWU6QCJCdW5kbGVFZGl0aW5nRGVsZWdhdGVQbHVnSW4iXTsKLSAgICBbY29uZmlndXJhdGlvbiBf
c2V0QXR0YWNobWVudEVsZW1lbnRFbmFibGVkOllFU107Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSk7Ci0gICAgW3dlYlZpZXcg
c3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXR0YWNobWVudC1lbGVtZW50Il07Ci0K
LSAgICBfX2Jsb2NrIFJldGFpblB0cjxOU1N0cmluZz4gaW5qZWN0ZWRTdHJpbmc7Ci0gICAgYXV0
byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0Q29udmVydEl0ZW1Qcm92aWRlcnNCbG9jazpeTlNBcnJh
eSAqKFVJSXRlbVByb3ZpZGVyICppdGVtUHJvdmlkZXIsIE5TQXJyYXkgKiwgTlNEaWN0aW9uYXJ5
ICpkYXRhKQotICAgIHsKLSAgICAgICAgaW5qZWN0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJp
bmcgYWxsb2NdIGluaXRXaXRoRGF0YTpkYXRhW0luamVjdGVkQnVuZGxlUGFzdGVib2FyZERhdGFU
eXBlXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pOwotICAgICAgICByZXR1cm4gQFsg
aXRlbVByb3ZpZGVyIF07Ci0gICAgfV07Ci0KLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
IHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFrZSg1MCwgNDAwKV07Ci0K
LSAgICBFWFBFQ1RfV0tfU1RSRVEoImhlbGxvIiwgW2luamVjdGVkU3RyaW5nIFVURjhTdHJpbmdd
KTsKLSAgICBFWFBFQ1RfVFJVRShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAiZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQiXS5ib29sVmFsdWUpOwotfQotCi1URVNUKERh
dGFJbnRlcmFjdGlvblRlc3RzLCBMYXJnZUltYWdlVG9UYXJnZXREaXYpCi17Ci0gICAgYXV0byB0
ZXN0V2ViVmlld0NvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlv
biBhbGxvY10gaW5pdF0pOwotICAgIFtbdGVzdFdlYlZpZXdDb25maWd1cmF0aW9uIHByZWZlcmVu
Y2VzXSBfc2V0TGFyZ2VJbWFnZUFzeW5jRGVjb2RpbmdFbmFibGVkOk5PXTsKLQotICAgIGF1dG8g
d2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNH
UmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRpb246dGVzdFdlYlZpZXdDb25maWd1
cmF0aW9uLmdldCgpXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5h
bWVkOkAiZGl2LWFuZC1sYXJnZS1pbWFnZSJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0
V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMjAwLCAxNTAp
XTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIlBBU1MiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAidGFyZ2V0LnRleHRDb250ZW50Il0uVVRGOFN0cmluZyk7Ci0gICAgY2hl
Y2tGaXJzdFR5cGVJc1ByZXNlbnRBbmRTZWNvbmRUeXBlSXNNaXNzaW5nKGRhdGFJbnRlcmFjdGlv
blNpbXVsYXRvci5nZXQoKSwga1VUVHlwZVBORywga1VUVHlwZUZpbGVVUkwpOwotICAgIGNoZWNr
RXN0aW1hdGVkU2l6ZShkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCksIHsgMjAwMCwgMjAw
MCB9KTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgTGlua1dpdGhFbXB0eUhSRUYp
Ci17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJsaW5rLWFuZC1pbnB1dCJdOwotICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVj
dG9yKCdhJykuaHJlZiA9ICcnIl07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5G
cm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAg
ICBFWFBFQ1RfRVEoRGF0YUludGVyYWN0aW9uQ2FuY2VsbGVkLCBbZGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yIHBoYXNlXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBlZGl0b3JW
YWx1ZV0uVVRGOFN0cmluZyk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIENhbmNl
bGxlZExpZnREb2VzTm90Q2F1c2VTdWJzZXF1ZW50RHJhZ3NUb0ZhaWwpCi17Ci0gICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9h
ZFRlc3RQYWdlTmFtZWQ6QCJsaW5rLWFuZC10YXJnZXQtZGl2Il07Ci0KLSAgICBhdXRvIGRhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
YWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBzZXRDb252ZXJ0SXRlbVByb3ZpZGVyc0Jsb2NrOl5OU0FycmF5ICooVUlJ
dGVtUHJvdmlkZXIgKiwgTlNBcnJheSAqLCBOU0RpY3Rpb25hcnkgKikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBAWyBdOwotICAgIH1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVu
RnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotICAg
IEVYUEVDVF9FUShEYXRhSW50ZXJhY3Rpb25DYW5jZWxsZWQsIFtkYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IgcGhhc2VdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0YXJnZXQudGV4dENvbnRlbnQiXSk7Ci0gICAgTlNTdHJp
bmcgKm91dHB1dFRleHQgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
b3V0cHV0LnRleHRDb250ZW50Il07Ci0gICAgY2hlY2tTdHJpbmdBcnJheXNBcmVFcXVhbChAW0Ai
ZHJhZ3N0YXJ0IiwgQCJkcmFnZW5kIl0sIFtvdXRwdXRUZXh0IGNvbXBvbmVudHNTZXBhcmF0ZWRC
eVN0cmluZzpAIiAiXSk7Ci0KLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAib3V0cHV0LmlubmVySFRNTCA9ICcnIl07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBzZXRDb252ZXJ0SXRlbVByb3ZpZGVyc0Jsb2NrOl5OU0FycmF5ICooVUlJdGVtUHJvdmlk
ZXIgKml0ZW1Qcm92aWRlciwgTlNBcnJheSAqLCBOU0RpY3Rpb25hcnkgKikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBAWyBpdGVtUHJvdmlkZXIgXTsKLSAgICB9XTsKLSAgICBbZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2Uo
MTAwLCAzMDApXTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIlBBU1MiLCBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGFyZ2V0LnRleHRDb250ZW50Il0pOwotICAgIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudGV4dENvbnRlbnQiXTsK
LSAgICBjaGVja1N0cmluZ0FycmF5c0FyZUVxdWFsKEBbQCJkcmFnc3RhcnQiLCBAImRyYWdlbmQi
XSwgW291dHB1dFRleHQgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiICJdKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdERyYWdBbmREcm9wT250b1RhcmdldEVsZW1lbnRzKFRlc3RXS1dlYlZp
ZXcgKndlYlZpZXcpCi17Ci0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlld10pOwotICAgIFtz
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRvOkNHUG9pbnRNYWtlKDUwLCAy
NTApXTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoInJnYigwLCAxMjgsIDApIiwgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldENvbXB1dGVkU3R5bGUodGFyZ2V0MSkuYmFj
a2dyb3VuZENvbG9yIl0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiUEFTUyIsIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0YXJnZXQxLnRleHRDb250ZW50Il0pOwotCi0g
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2Uo
MjUwLCA1MCldOwotICAgIEVYUEVDVF9XS19TVFJFUSgicmdiKDAsIDEyOCwgMCkiLCBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQy
KS5iYWNrZ3JvdW5kQ29sb3IiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJQQVNTIiwgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRhcmdldDIudGV4dENvbnRlbnQiXSk7
Ci0KLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50
TWFrZSgyNTAsIDI1MCldOwotICAgIEVYUEVDVF9XS19TVFJFUSgicmdiKDAsIDEyOCwgMCkiLCBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0Q29tcHV0ZWRTdHlsZSh0
YXJnZXQzKS5iYWNrZ3JvdW5kQ29sb3IiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJQQVNTIiwg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRhcmdldDMudGV4dENvbnRl
bnQiXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERyYWdFdmVudENsaWVudENv
b3JkaW5hdGVzQmFzaWMpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsK
LSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkcm9wLXRhcmdl
dHMiXTsKLQotICAgIHRlc3REcmFnQW5kRHJvcE9udG9UYXJnZXRFbGVtZW50cyh3ZWJWaWV3Lmdl
dCgpKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRHJhZ0V2ZW50Q2xpZW50Q29v
cmRpbmF0ZXNXaXRoU2Nyb2xsT2Zmc2V0KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIw
LCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAi
ZHJvcC10YXJnZXRzIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAImRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gJzEwMDBweCAwJyJdOwotICAgIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5zY3JvbGxpbmdFbGVt
ZW50LnNjcm9sbFRvcCA9IDEwMDAiXTsKLSAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRh
dGlvblVwZGF0ZV07Ci0KLSAgICB0ZXN0RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMod2Vi
Vmlldy5nZXQoKSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERyYWdFdmVudFBh
Z2VDb29yZGluYXRlc0Jhc2ljKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDAp
XSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHJvcC10
YXJnZXRzIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIndp
bmRvdy51c2VQYWdlQ29vcmRpbmF0ZXMgPSB0cnVlIl07Ci0KLSAgICB0ZXN0RHJhZ0FuZERyb3BP
bnRvVGFyZ2V0RWxlbWVudHMod2ViVmlldy5nZXQoKSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0
aW9uVGVzdHMsIERyYWdFdmVudFBhZ2VDb29yZGluYXRlc1dpdGhTY3JvbGxPZmZzZXQpCi17Ci0g
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkcm9wLXRhcmdldHMiXTsKLSAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW4g
PSAnMTAwMHB4IDAnIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAImRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gMTAwMCJdOwotICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3aW5kb3cudXNlUGFnZUNvb3Jk
aW5hdGVzID0gdHJ1ZSJdOwotICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9uVXBk
YXRlXTsKLQotICAgIHRlc3REcmFnQW5kRHJvcE9udG9UYXJnZXRFbGVtZW50cyh3ZWJWaWV3Lmdl
dCgpKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRG9Ob3RDcmFzaFdoZW5TZWxl
Y3Rpb25Jc0NsZWFyZWRJbkRyYWdTdGFydCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpA
ImRyYWdzdGFydC1jbGVhci1zZWxlY3Rpb24iXTsKLQotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRv
cHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXcuZ2V0KCldKTsKLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCAx
MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMTAwKV07Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoIlBB
U1MiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGFyYWdyYXBoLnRl
eHRDb250ZW50Il0pOwotfQotCi0vLyBGSVhNRTogUmUtZW5hYmxlIHRoaXMgdGVzdCBvbmNlIHdl
IHJlc29sdmUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUyMDQ+
Ci0jaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA8PSAxMTA0MDEKLVRFU1QoRGF0
YUludGVyYWN0aW9uVGVzdHMsIEN1c3RvbUFjdGlvblNoZWV0UG9wb3ZlcikKLXsKLSAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlM
b2FkVGVzdFBhZ2VOYW1lZDpAImxpbmstYW5kLXRhcmdldC1kaXYiXTsKLQotICAgIGF1dG8gZGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yIHNldFNob3VsZEVuc3VyZVVJQXBwbGljYXRpb246WUVTXTsKLQotICAg
IF9fYmxvY2sgQk9PTCBkaWRJbnZva2VDdXN0b21BY3Rpb25TaGVldCA9IE5POwotICAgIFtkYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0U2hvd0N1c3RvbUFjdGlvblNoZWV0QmxvY2s6XkJPT0wo
X1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKmVsZW1lbnQpCi0gICAgewotICAgICAgICBFWFBFQ1Rf
RVEoX1dLQWN0aXZhdGVkRWxlbWVudFR5cGVMaW5rLCBlbGVtZW50LnR5cGUpOwotICAgICAgICBF
WFBFQ1RfV0tfU1RSRVEoIkhlbGxvIHdvcmxkIiwgZWxlbWVudC50aXRsZS5VVEY4U3RyaW5nKTsK
LSAgICAgICAgZGlkSW52b2tlQ3VzdG9tQWN0aW9uU2hlZXQgPSBZRVM7Ci0gICAgICAgIHJldHVy
biBZRVM7Ci0gICAgfV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNH
UG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0gICAgRVhQRUNU
X1RSVUUoZGlkSW52b2tlQ3VzdG9tQWN0aW9uU2hlZXQpOwotICAgIEVYUEVDVF9XS19TVFJFUSgi
UEFTUyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0YXJnZXQudGV4
dENvbnRlbnQiXS5VVEY4U3RyaW5nKTsKLX0KLSNlbmRpZgotCi1URVNUKERhdGFJbnRlcmFjdGlv
blRlc3RzLCBVbnJlc3BvbnNpdmVQYWdlRG9lc05vdEhhbmdVSSkKLXsKLSAgICBfV0tQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24gKnByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiA9IFtbW19XS1Byb2Nl
c3NQb29sQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotICAgIHByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbi5pZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzRm9y
VGVzdGluZyA9IFlFUzsKLQotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApIGNvbmZp
Z3VyYXRpb246W1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVh
c2VdIHByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjpwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb25dKTsK
LSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzaW1wbGUiXTsK
LSAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aGlsZSgxKTsiIGNvbXBsZXRpb25I
YW5kbGVyOm5pbF07Ci0KLSAgICAvLyBUaGUgdGVzdCBwYXNzZXMgaWYgd2UgY2FuIHByZXBhcmUg
Zm9yIGRhdGEgaW50ZXJhY3Rpb24gd2l0aG91dCB0aW1pbmcgb3V0LgotICAgIGF1dG8gZHJhZ1Nl
c3Npb24gPSBhZG9wdE5TKFtbTW9ja0RyYWdTZXNzaW9uIGFsbG9jXSBpbml0XSk7Ci0gICAgWyhp
ZCA8VUlEcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV9Gb3JXZWJLaXRPbmx5Pilbd2ViVmlldyBkcmFn
SW50ZXJhY3Rpb25EZWxlZ2F0ZV0gX2RyYWdJbnRlcmFjdGlvbjpbd2ViVmlldyBkcmFnSW50ZXJh
Y3Rpb25dIHByZXBhcmVGb3JTZXNzaW9uOmRyYWdTZXNzaW9uLmdldCgpIGNvbXBsZXRpb246Xigp
IHsgfV07Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIFdlYkl0ZW1Qcm92aWRlclBh
c3RlYm9hcmRMb2FkaW5nKQotewotICAgIHN0YXRpYyBOU1N0cmluZyAqZmFzdFN0cmluZyA9IEAi
VGhpcyBkYXRhIGxvYWRzIHF1aWNrbHkiOwotICAgIHN0YXRpYyBOU1N0cmluZyAqc2xvd1N0cmlu
ZyA9IEAiVGhpcyBkYXRhIGxvYWRzIHNsb3dseSI7Ci0KLSAgICBXZWJJdGVtUHJvdmlkZXJQYXN0
ZWJvYXJkICpwYXN0ZWJvYXJkID0gW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5z
dGFuY2VdOwotICAgIGF1dG8gZmFzdEl0ZW0gPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxs
b2NdIGluaXRdKTsKLSAgICBbZmFzdEl0ZW0gcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JU
eXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlVVRGOFBsYWluVGV4dCBvcHRpb25zOm5p
bCBsb2FkSGFuZGxlcjpeTlNQcm9ncmVzcyAqKFVJSXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0
aW9uQmxvY2sgY29tcGxldGlvbkJsb2NrKQotICAgIHsKLSAgICAgICAgY29tcGxldGlvbkJsb2Nr
KFtmYXN0U3RyaW5nIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSwgbmls
KTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9XTsKLQotICAgIGF1dG8gc2xvd0l0ZW0gPSBh
ZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbc2xvd0l0ZW0gcmVn
aXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRU
eXBlVVRGOFBsYWluVGV4dCBvcHRpb25zOm5pbCBsb2FkSGFuZGxlcjpeTlNQcm9ncmVzcyAqKFVJ
SXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkJsb2NrKQotICAg
IHsKLSAgICAgICAgc2xlZXAoMl9zKTsKLSAgICAgICAgY29tcGxldGlvbkJsb2NrKFtzbG93U3Ry
aW5nIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSwgbmlsKTsKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICB9XTsKLQotICAgIF9fYmxvY2sgYm9vbCBoYXNSdW5GaXJzdENv
bXBsZXRpb25CbG9jayA9IGZhbHNlOwotICAgIHBhc3RlYm9hcmQuaXRlbVByb3ZpZGVycyA9IEBb
IGZhc3RJdGVtLmdldCgpLCBzbG93SXRlbS5nZXQoKSBdOwotICAgIFtwYXN0ZWJvYXJkIGRvQWZ0
ZXJMb2FkaW5nUHJvdmlkZWRDb250ZW50SW50b0ZpbGVVUkxzOl4oTlNBcnJheTxOU1VSTCAqPiAq
dXJscykgewotICAgICAgICBFWFBFQ1RfRVEoMlVMLCB1cmxzLmNvdW50KTsKLSAgICAgICAgYXV0
byBmaXJzdFN0cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDb250ZW50
c09mVVJMOnVybHNbMF0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXSk7
Ci0gICAgICAgIGF1dG8gc2Vjb25kU3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBp
bml0V2l0aENvbnRlbnRzT2ZVUkw6dXJsc1sxXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
ZyBlcnJvcjpuaWxdKTsKLSAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGZhc3RTdHJpbmcsIFtmaXJz
dFN0cmluZyBVVEY4U3RyaW5nXSk7Ci0gICAgICAgIEVYUEVDVF9XS19TVFJFUShzbG93U3RyaW5n
LCBbc2Vjb25kU3RyaW5nIFVURjhTdHJpbmddKTsKLSAgICAgICAgaGFzUnVuRmlyc3RDb21wbGV0
aW9uQmxvY2sgPSB0cnVlOwotICAgIH0gc3luY2hyb25vdXNUaW1lb3V0OjYwMF07Ci0gICAgRVhQ
RUNUX1RSVUUoaGFzUnVuRmlyc3RDb21wbGV0aW9uQmxvY2spOwotCi0gICAgX19ibG9jayBib29s
IGhhc1J1blNlY29uZENvbXBsZXRpb25CbG9jayA9IGZhbHNlOwotICAgIFtwYXN0ZWJvYXJkIGRv
QWZ0ZXJMb2FkaW5nUHJvdmlkZWRDb250ZW50SW50b0ZpbGVVUkxzOl4oTlNBcnJheTxOU1VSTCAq
PiAqdXJscykgewotICAgICAgICBFWFBFQ1RfRVEoMlVMLCB1cmxzLmNvdW50KTsKLSAgICAgICAg
YXV0byBmaXJzdFN0cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDb250
ZW50c09mVVJMOnVybHNbMF0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmls
XSk7Ci0gICAgICAgIGF1dG8gc2Vjb25kU3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9j
XSBpbml0V2l0aENvbnRlbnRzT2ZVUkw6dXJsc1sxXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNv
ZGluZyBlcnJvcjpuaWxdKTsKLSAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGZhc3RTdHJpbmcsIFtm
aXJzdFN0cmluZyBVVEY4U3RyaW5nXSk7Ci0gICAgICAgIEVYUEVDVF9XS19TVFJFUShzbG93U3Ry
aW5nLCBbc2Vjb25kU3RyaW5nIFVURjhTdHJpbmddKTsKLSAgICAgICAgaGFzUnVuU2Vjb25kQ29t
cGxldGlvbkJsb2NrID0gdHJ1ZTsKLSAgICB9IHN5bmNocm9ub3VzVGltZW91dDowXTsKLSAgICBF
WFBFQ1RfRkFMU0UoaGFzUnVuU2Vjb25kQ29tcGxldGlvbkJsb2NrKTsKLSAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmhhc1J1blNlY29uZENvbXBsZXRpb25CbG9jayk7Ci19Ci0KLVRFU1Qo
RGF0YUludGVyYWN0aW9uVGVzdHMsIERvTm90Q3Jhc2hXaGVuU2VsZWN0aW9uTW92ZXNPZmZzY3Jl
ZW5BZnRlckRyYWdTdGFydCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImRyYWdzdGFy
dC1jaGFuZ2Utc2VsZWN0aW9uLW9mZnNjcmVlbiJdOwotCi0gICAgYXV0byBzaW11bGF0b3IgPSBh
ZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6
d2ViVmlldy5nZXQoKV0pOwotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAs
IDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgi
RkFSIE9GRlNDUkVFTiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJn
ZXRTZWxlY3Rpb24oKS5nZXRSYW5nZUF0KDApLnRvU3RyaW5nKCkiXSk7Ci19Ci0KLVRFU1QoRGF0
YUludGVyYWN0aW9uVGVzdHMsIEFkZGl0aW9uYWxJdGVtc0NhbkJlUHJldmVudGVkT25EcmFnU3Rh
cnQpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmll
dyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzZWxlY3RlZC10ZXh0LWltYWdlLWxp
bmstYW5kLWVkaXRhYmxlIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAImxpbmsuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgZSA9PiBlLnByZXZlbnRE
ZWZhdWx0KCkpIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
ImltYWdlLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIGUgPT4gZS5wcmV2ZW50RGVmYXVs
dCgpKSJdOwotCi0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtz
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRvOkNHUG9pbnRNYWtlKDUwLCA0
MDApIGFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uczpAewotICAgICAgICBAMC4zMzogW05T
VmFsdWUgdmFsdWVXaXRoQ0dQb2ludDpDR1BvaW50TWFrZSg1MCwgMTUwKV0sCi0gICAgICAgIEAw
LjY2OiBbTlNWYWx1ZSB2YWx1ZVdpdGhDR1BvaW50OkNHUG9pbnRNYWtlKDUwLCAyNTApXQotICAg
IH1dOwotICAgIEVYUEVDVF9XS19TVFJFUSgiQUJDRCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXSk7Ci19Ci0KLVRFU1QoRGF0YUlu
dGVyYWN0aW9uVGVzdHMsIEFkZGl0aW9uYWxMaW5rQW5kSW1hZ2VJbnRvQ29udGVudEVkaXRhYmxl
KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcg
c3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2VsZWN0ZWQtdGV4dC1pbWFnZS1saW5r
LWFuZC1lZGl0YWJsZSJdOwotCi0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0p
OwotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRvOkNHUG9pbnRN
YWtlKDUwLCA0MDApIGFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uczpAewotICAgICAgICBA
MC4zMzogW05TVmFsdWUgdmFsdWVXaXRoQ0dQb2ludDpDR1BvaW50TWFrZSg1MCwgMTUwKV0sCi0g
ICAgICAgIEAwLjY2OiBbTlNWYWx1ZSB2YWx1ZVdpdGhDR1BvaW50OkNHUG9pbnRNYWtlKDUwLCAy
NTApXQotICAgIH1dOwotICAgIEVYUEVDVF9XS19TVFJFUSgiQUJDREEgbGluayIsIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXSk7Ci0g
ICAgRVhQRUNUX1RSVUUoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIiEh
ZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIl0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0
cHM6Ly93d3cuYXBwbGUuY29tLyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJlZGl0b3IucXVlcnlTZWxlY3RvcignYScpLmhyZWYiXSk7Ci19Ci0KLVRFU1QoRGF0YUlu
dGVyYWN0aW9uVGVzdHMsIERyYWdMaWZ0UHJldmlld0RhdGFUcmFuc2ZlclNldERyYWdJbWFnZSkK
LXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAIkRhdGFUcmFuc2Zlci1zZXREcmFnSW1hZ2Ui
XTsKLSAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICAvLyBVc2Ug
RGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSB0byBzcGVjaWZ5IGFuIGV4aXN0aW5nIGltYWdlIGVs
ZW1lbnQgaW4gdGhlIERPTS4KLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAw
LCA1MCkgdG86Q0dQb2ludE1ha2UoMjUwLCA1MCldOwotICAgIGNoZWNrQ0dSZWN0SXNFcXVhbFRv
Q0dSZWN0V2l0aExvZ2dpbmcoe3sxMDAsIDUwfSwgezIxNSwgMTc0fX0sIFtzaW11bGF0b3IgbGlm
dFByZXZpZXdzXVswXS52aWV3LmZyYW1lKTsKLQotICAgIC8vIFVzZSBEYXRhVHJhbnNmZXIuc2V0
RHJhZ0ltYWdlIHRvIHNwZWNpZnkgYW4gZXhpc3RpbmcgaW1hZ2UgZWxlbWVudCBpbiB0aGUgRE9N
LCB3aXRoIHggYW5kIHkgb2Zmc2V0cy4KLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1h
a2UoMTAsIDE1MCkgdG86Q0dQb2ludE1ha2UoMjUwLCAxNTApXTsKLSAgICBjaGVja0NHUmVjdElz
RXF1YWxUb0NHUmVjdFdpdGhMb2dnaW5nKHt7LTkwLCA1MH0sIHsyMTUsIDE3NH19LCBbc2ltdWxh
dG9yIGxpZnRQcmV2aWV3c11bMF0udmlldy5mcmFtZSk7Ci0KLSAgICAvLyBVc2UgRGF0YVRyYW5z
ZmVyLnNldERyYWdJbWFnZSB0byBzcGVjaWZ5IGEgbmV3bHkgY3JlYXRlZCBJbWFnZSwgZGlzY29u
bmVjdGVkIGZyb20gdGhlIERPTS4KLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2Uo
MTAwLCAyNTApIHRvOkNHUG9pbnRNYWtlKDI1MCwgMjUwKV07Ci0gICAgY2hlY2tDR1JlY3RJc0Vx
dWFsVG9DR1JlY3RXaXRoTG9nZ2luZyh7ezEwMCwgMjUwfSwgezIxNSwgMTc0fX0sIFtzaW11bGF0
b3IgbGlmdFByZXZpZXdzXVswXS52aWV3LmZyYW1lKTsKLQotICAgIC8vIERvbid0IHVzZSBEYXRh
VHJhbnNmZXIuc2V0RHJhZ0ltYWdlIGFuZCBmYWxsIGJhY2sgdG8gc25hcHNob3R0aW5nIHRoZSBk
cmFnZ2VkIGVsZW1lbnQuCi0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCAz
NTApIHRvOkNHUG9pbnRNYWtlKDI1MCwgMzUwKV07Ci0gICAgY2hlY2tDR1JlY3RJc0VxdWFsVG9D
R1JlY3RXaXRoTG9nZ2luZyh7ezAsIDMwMH0sIHszMDAsIDEwMH19LCBbc2ltdWxhdG9yIGxpZnRQ
cmV2aWV3c11bMF0udmlldy5mcmFtZSk7Ci0KLSAgICAvLyBQZXJmb3JtIGEgbm9ybWFsIGRyYWcg
b24gYW4gaW1hZ2UuCi0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA0NTAp
IHRvOkNHUG9pbnRNYWtlKDI1MCwgNDUwKV07Ci0gICAgY2hlY2tDR1JlY3RJc0VxdWFsVG9DR1Jl
Y3RXaXRoTG9nZ2luZyh7ezAsIDQwMH0sIHsyMTUsIDE3NH19LCBbc2ltdWxhdG9yIGxpZnRQcmV2
aWV3c11bMF0udmlldy5mcmFtZSk7Ci19Ci0KLSNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMTAzMDAKLQotc3RhdGljIE5TRGF0YSAqdGVzdEljb25JbWFnZURhdGEoKQot
ewotICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZkZpbGU6W1tOU0J1bmRsZSBt
YWluQnVuZGxlXSBwYXRoRm9yUmVzb3VyY2U6QCJpY29uIiBvZlR5cGU6QCJwbmciIGluRGlyZWN0
b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0
aW9uVGVzdHMsIERhdGFUcmFuc2ZlckdldERhdGFXaGVuRHJvcHBpbmdJbWFnZUFuZE1hcmt1cCkK
LXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFdLUHJlZmVyZW5j
ZXNTZXRDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoKFdLUHJlZmVyZW5jZXNSZWYpW3dlYlZp
ZXcgY29uZmlndXJhdGlvbl0ucHJlZmVyZW5jZXMsIHRydWUpOwotICAgIFt3ZWJWaWV3IHN5bmNo
cm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAIkRhdGFUcmFuc2ZlciJdOwotCi0gICAgYXV0byBz
aW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0
V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRv
cHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW2l0ZW1Qcm92aWRlciBy
ZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtV
VFR5cGVQTkcgd2l0aERhdGE6dGVzdEljb25JbWFnZURhdGEoKV07Ci0gICAgTlNTdHJpbmcgKm1h
cmt1cFN0cmluZyA9IEAiPHNjcmlwdD5iYXIoKTwvc2NyaXB0PjxzdHJvbmcgb25tb3VzZWRvd249
amF2YXNjcmlwdDp2b2lkKDApPkhFTExPIFdPUkxEPC9zdHJvbmc+IjsKLSAgICBbaXRlbVByb3Zp
ZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5n
ICopa1VUVHlwZUhUTUwgd2l0aERhdGE6W21hcmt1cFN0cmluZyBkYXRhVXNpbmdFbmNvZGluZzpO
U1VURjhTdHJpbmdFbmNvZGluZ11dOwotICAgIFtpdGVtUHJvdmlkZXIgc2V0U3VnZ2VzdGVkTmFt
ZTpAImljb24iXTsKLSAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBp
dGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRaZXJv
IHRvOkNHUG9pbnRNYWtlKDUwLCAxMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiRmlsZXMs
IHRleHQvaHRtbCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0eXBl
cy50ZXh0Q29udGVudCJdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIihTVFJJTkcsIHRleHQvaHRt
bCksIChGSUxFLCBpbWFnZS9wbmcpIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAIml0ZW1zLnRleHRDb250ZW50Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiKCdpY29u
LnBuZycsIGltYWdlL3BuZykiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAiZmlsZXMudGV4dENvbnRlbnQiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidXJsRGF0YS50ZXh0Q29udGVudCJdKTsK
LSAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJ0ZXh0RGF0YS50ZXh0Q29udGVudCJdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIkhF
TExPIFdPUkxEIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImh0bWxE
YXRhLnRleHRDb250ZW50Il0pOwotICAgIEVYUEVDVF9GQUxTRShbW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAInJhd0hUTUxEYXRhLnRleHRDb250ZW50Il0gY29udGFpbnNT
dHJpbmc6QCJzY3JpcHQiXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERhdGFU
cmFuc2ZlckdldERhdGFXaGVuRHJvcHBpbmdQbGFpblRleHQpCi17Ci0gICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQ
YWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOwotICAgIGF1dG8gc2ltdWxhdG9y
ID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJW
aWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJzZWxlY3QocGxhaW4pIl07Ci0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9p
bnRNYWtlKDUwLCA3NSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOwotICAgIGNoZWNrSlNPTldp
dGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQu
dmFsdWUiXSwgQHsKLSAgICAgICAgQCJkcmFnb3ZlciI6IEB7IEAidGV4dC9wbGFpbiIgOiBAIiIg
fSwKLSAgICAgICAgQCJkcm9wIjogQHsgQCJ0ZXh0L3BsYWluIiA6IEAiUGxhaW4gdGV4dCIgfQot
ICAgIH0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEYXRhVHJhbnNmZXJHZXRE
YXRhV2hlbkRyb3BwaW5nQ3VzdG9tRGF0YSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpA
ImR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07Ci0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5T
KFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmll
dy5nZXQoKV0pOwotCi0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
InNlbGVjdChyaWNoKSJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJ3cml0ZUN1c3RvbURhdGEgPSB0cnVlIl07Ci0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNH
UG9pbnRNYWtlKDUwLCAyMjUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKLSAgICBjaGVja0pT
T05XaXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0
cHV0LnZhbHVlIl0sIEB7Ci0gICAgICAgIEAiZHJhZ292ZXIiIDogQHsKLSAgICAgICAgICAgIEAi
dGV4dC9wbGFpbiIgOiBAIiIsCi0gICAgICAgICAgICBAImZvby9wbGFpbiIgOiBAIiIsCi0gICAg
ICAgICAgICBAInRleHQvaHRtbCIgOiBAIiIsCi0gICAgICAgICAgICBAImJhci9odG1sIiA6IEAi
IiwKLSAgICAgICAgICAgIEAidGV4dC91cmktbGlzdCIgOiBAIiIsCi0gICAgICAgICAgICBAImJh
ei91cmktbGlzdCIgOiBAIiIKLSAgICAgICAgfSwKLSAgICAgICAgQCJkcm9wIiA6IEB7Ci0gICAg
ICAgICAgICBAInRleHQvcGxhaW4iIDogQCJiZW4gYml0ZGlkZGxlIiwKLSAgICAgICAgICAgIEAi
Zm9vL3BsYWluIiA6IEAiZXZhIGx1IGF0b3IiLAotICAgICAgICAgICAgQCJ0ZXh0L2h0bWwiIDog
QCI8Yj5ib2xkIHRleHQ8L2I+IiwKLSAgICAgICAgICAgIEAiYmFyL2h0bWwiIDogQCI8aT5pdGFs
aWMgdGV4dDwvaT4iLAotICAgICAgICAgICAgQCJ0ZXh0L3VyaS1saXN0IiA6IEAiaHR0cHM6Ly93
d3cuYXBwbGUuY29tIiwKLSAgICAgICAgICAgIEAiYmF6L3VyaS1saXN0IiA6IEAiaHR0cHM6Ly93
d3cud2Via2l0Lm9yZyIKLSAgICAgICAgfQotICAgIH0pOwotfQotCi1URVNUKERhdGFJbnRlcmFj
dGlvblRlc3RzLCBEYXRhVHJhbnNmZXJHZXREYXRhV2hlbkRyb3BwaW5nVVJMKQotewotICAgIGF1
dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
OkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNs
eUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKLSAgICBhdXRv
IHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGlu
aXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAicmljaC5pbm5lckhUTUwgPSAnPGEgaHJlZj1cImh0dHBzOi8v
d3d3LmFwcGxlLmNvbS9cIj5UaGlzIGlzIGEgbGluay48L2E+JyJdOwotICAgIFtzaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgMjI1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07Ci0g
ICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAewotICAgICAgICBAImRyYWdvdmVyIjogQHsKLSAgICAg
ICAgICAgIEAidGV4dC91cmktbGlzdCIgOiBAIiIsCi0gICAgICAgICAgICBAInRleHQvcGxhaW4i
IDogQCIiCi0gICAgICAgIH0sCi0gICAgICAgIEAiZHJvcCI6IEB7Ci0gICAgICAgICAgICBAInRl
eHQvdXJpLWxpc3QiIDogQCJodHRwczovL3d3dy5hcHBsZS5jb20vIiwKLSAgICAgICAgICAgIEAi
dGV4dC9wbGFpbiIgOiBAImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8iCi0gICAgICAgIH0KLSAgICB9
KTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRGF0YVRyYW5zZmVyR2V0RGF0YVdo
ZW5Ecm9wcGluZ0ltYWdlV2l0aEZpbGVVUkwpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6
QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOwotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHRO
UyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZp
ZXcuZ2V0KCldKTsKLQotICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVBy
b3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgTlNVUkwgKmljb25VUkwgPSBbW05TQnVuZGxlIG1h
aW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiaWNvbiIgd2l0aEV4dGVuc2lvbjpAInBuZyIgc3Vi
ZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKLSAgICBbaXRlbVByb3ZpZGVy
IHJlZ2lzdGVyRmlsZVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICop
a1VUVHlwZVBORyBmaWxlT3B0aW9uczowIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNl
bnRhdGlvblZpc2liaWxpdHlBbGwgbG9hZEhhbmRsZXI6W3Byb3RlY3RlZEljb25VUkwgPSByZXRh
aW5QdHIoaWNvblVSTCldIChGaWxlTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uSGFuZGxl
cikgLT4gTlNQcm9ncmVzcyAqIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocHJvdGVjdGVk
SWNvblVSTC5nZXQoKSwgTk8sIG5pbCk7Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfV07Ci0g
ICAgW2l0ZW1Qcm92aWRlciByZWdpc3Rlck9iamVjdDppY29uVVJMIHZpc2liaWxpdHk6VUlJdGVt
UHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKLSAgICBbc2ltdWxh
dG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0K
LSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCAzNzUpIHRvOkNHUG9pbnRN
YWtlKDUwLCAzNzUpXTsKLQotICAgIC8vIEZpbGUgVVJMcyBzaG91bGQgbmV2ZXIgYmUgZXhwb3Nl
ZCBkaXJlY3RseSB0byB3ZWIgY29udGVudCwgc28gRGF0YVRyYW5zZmVyLmdldERhdGEgc2hvdWxk
IHJldHVybiBhbiBlbXB0eSBzdHJpbmcgaGVyZS4KLSAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7
Ci0gICAgICAgIEAiZHJhZ292ZXIiOiBAeyBAIkZpbGVzIjogQCIiLCBAInRleHQvdXJpLWxpc3Qi
OiBAIiIgfSwKLSAgICAgICAgQCJkcm9wIjogQHsgQCJGaWxlcyI6IEAiIiwgQCJ0ZXh0L3VyaS1s
aXN0IjogQCIiIH0KLSAgICB9KTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRGF0
YVRyYW5zZmVyR2V0RGF0YVdoZW5Ecm9wcGluZ0ltYWdlV2l0aEhUVFBVUkwpCi17Ci0gICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5
TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOwotICAgIGF1dG8g
c2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5p
dFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIGF1dG8gaXRlbVByb3ZpZGVyID0g
YWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW2l0ZW1Qcm92aWRl
ciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAq
KWtVVFR5cGVKUEVHIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2li
aWxpdHlBbGwgbG9hZEhhbmRsZXI6Xk5TUHJvZ3Jlc3MgKihEYXRhTG9hZENvbXBsZXRpb25CbG9j
ayBjb21wbGV0aW9uSGFuZGxlcikKLSAgICB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFVJ
SW1hZ2VKUEVHUmVwcmVzZW50YXRpb24odGVzdEljb25JbWFnZSgpLCAwLjUpLCBuaWwpOwotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIH1dOwotICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJPYmpl
Y3Q6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0Lm9yZyJdIHZpc2liaWxpdHk6
VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKLSAgICBb
c2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkg
XV07Ci0KLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCAzNzUpIHRvOkNH
UG9pbnRNYWtlKDUwLCAzNzUpXTsKLSAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7Ci0gICAgICAg
IEAiZHJhZ292ZXIiOiBAeyBAIkZpbGVzIjogQCIiLCBAInRleHQvdXJpLWxpc3QiOiBAIiIgfSwK
LSAgICAgICAgQCJkcm9wIjogQHsgQCJGaWxlcyI6IEAiIiwgQCJ0ZXh0L3VyaS1saXN0IjogQCJo
dHRwOi8vd2Via2l0Lm9yZy8iIH0KLSAgICB9KTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25U
ZXN0cywgRGF0YVRyYW5zZmVyR2V0RGF0YVdoZW5Ecm9wcGluZ1Jlc3BlY3RzUHJlc2VudGF0aW9u
U3R5bGUpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10
eXBlcyJdOwotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIHJ1
blRlc3RXaXRoVGVtcG9yYXJ5VGV4dEZpbGUoXihOU1VSTCAqZmlsZVVSTCkgewotICAgICAgICBh
dXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0p
OwotICAgICAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRmlsZVJlcHJlc2VudGF0aW9uRm9yVHlw
ZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRleHQgZmlsZU9wdGlvbnM6
MCB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsIGxv
YWRIYW5kbGVyOltwcm90ZWN0ZWRGaWxlVVJMID0gcmV0YWluUHRyKGZpbGVVUkwpXSAoRmlsZUxv
YWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkhhbmRsZXIpIC0+IE5TUHJvZ3Jlc3MgKiB7Ci0g
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihwcm90ZWN0ZWRGaWxlVVJMLmdldCgpLCBOTywg
bmlsKTsKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIH1dOwotICAgICAgICBbc2lt
dWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07
Ci0KLSAgICAgICAgW2l0ZW1Qcm92aWRlciBzZXRQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZTpV
SVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlQXR0YWNobWVudF07Ci0gICAgICAgIFtzaW11bGF0
b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDM3NSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSld
OwotICAgICAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7Ci0gICAgICAgICAgICBAImRyYWdvdmVy
IjogQHsgQCJGaWxlcyIgOiBAIiIgfSwKLSAgICAgICAgICAgIEAiZHJvcCI6IEB7IEAiRmlsZXMi
IDogQCIiIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgW2l0ZW1Qcm92aWRlciBzZXRQcmVmZXJy
ZWRQcmVzZW50YXRpb25TdHlsZTpVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlSW5saW5lXTsK
LSAgICAgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgMzc1KSB0bzpDR1Bv
aW50TWFrZSg1MCwgMzc1KV07Ci0gICAgICAgIGNoZWNrSlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwgQHsKLSAgICAg
ICAgICAgIEAiZHJhZ292ZXIiOiBAeyBAInRleHQvcGxhaW4iIDogQCIiIH0sCi0gICAgICAgICAg
ICBAImRyb3AiOiBAeyBAInRleHQvcGxhaW4iIDogQCJUaGlzIGlzIGEgdGlueSBibG9iIG9mIHRl
eHQuIiB9Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRl
c3RzLCBEYXRhVHJhbnNmZXJTZXREYXRhQ2Fubm90V3JpdGVQbGF0Zm9ybVR5cGVzKQotewotICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKLSAgICBh
dXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2Nd
IGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic2VsZWN0KHJpY2gpIl07Ci0gICAgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImN1c3RvbURhdGEgPSB7ICd0ZXh0L3BsYWluJyA6
ICdmb28nLCAnY29tLmFkb2JlLnBkZicgOiAndHJ5IGFuZCBkZWNvZGUgbWUhJyB9Il07Ci0gICAg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIndyaXRlQ3VzdG9tRGF0YSA9
IHRydWUiXTsKLQotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgMjI1KSB0
bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07Ci0gICAgY2hlY2tGaXJzdFR5cGVJc1ByZXNlbnRBbmRT
ZWNvbmRUeXBlSXNNaXNzaW5nKHNpbXVsYXRvci5nZXQoKSwga1VUVHlwZVVURjhQbGFpblRleHQs
IGtVVFR5cGVQREYpOwotICAgIGNoZWNrSlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwgQHsKLSAgICAgICAgQCJkcmFn
b3ZlciI6IEB7Ci0gICAgICAgICAgICBAInRleHQvcGxhaW4iOiBAIiIsCi0gICAgICAgICAgICBA
ImNvbS5hZG9iZS5wZGYiOiBAIiIKLSAgICAgICAgfSwKLSAgICAgICAgQCJkcm9wIjogQHsKLSAg
ICAgICAgICAgIEAidGV4dC9wbGFpbiI6IEAiZm9vIiwKLSAgICAgICAgICAgIEAiY29tLmFkb2Jl
LnBkZiI6IEAidHJ5IGFuZCBkZWNvZGUgbWUhIgotICAgICAgICB9Ci0gICAgfSk7Ci19Ci0KLVRF
U1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERhdGFUcmFuc2ZlckdldERhdGFSZWFkUGxhaW5BbmRS
aWNoVGV4dCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAIkRhdGFUcmFuc2ZlciJdOwot
ICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBh
bGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIGF1dG8gaXRlbVBy
b3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgTlNE
aWN0aW9uYXJ5ICp0ZXh0QXR0cmlidXRlcyA9IEB7IE5TRm9udEF0dHJpYnV0ZU5hbWU6IFtVSUZv
bnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6MjBdIH07Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpy
aWNoVGV4dCA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIldl
YktpdCIgYXR0cmlidXRlczp0ZXh0QXR0cmlidXRlc107Ci0gICAgW2l0ZW1Qcm92aWRlciByZWdp
c3Rlck9iamVjdDpyaWNoVGV4dCB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRp
b25WaXNpYmlsaXR5QWxsXTsKLSAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OltOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93d3cud2Via2l0Lm9yZy8iXSB2aXNpYmlsaXR5Ok5T
SXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsXTsKLSAgICBbaXRlbVByb3Zp
ZGVyIHJlZ2lzdGVyT2JqZWN0OkAiV2ViS2l0IiB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVw
cmVzZW50YXRpb25WaXNpYmlsaXR5QWxsXTsKLQotICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJ
dGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbc2ltdWxhdG9yIHJ1
bkZyb206Q0dQb2ludFplcm8gdG86Q0dQb2ludE1ha2UoNTAsIDEwMCldOwotCi0gICAgRVhQRUNU
X1dLX1NUUkVRKCJ0ZXh0L2h0bWwsIHRleHQvcGxhaW4sIHRleHQvdXJpLWxpc3QiLCBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidHlwZXMudGV4dENvbnRlbnQiXSk7Ci0g
ICAgRVhQRUNUX1dLX1NUUkVRKCJXZWJLaXQiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAidGV4dERhdGEudGV4dENvbnRlbnQiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVR
KCJodHRwczovL3d3dy53ZWJraXQub3JnLyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJ1cmxEYXRhLnRleHRDb250ZW50Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgi
V2ViS2l0IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImh0bWxEYXRh
LnRleHRDb250ZW50Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiKFNUUklORywgdGV4dC9odG1s
KSwgKFNUUklORywgdGV4dC9wbGFpbiksIChTVFJJTkcsIHRleHQvdXJpLWxpc3QpIiwgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIml0ZW1zLnRleHRDb250ZW50Il0pOwot
ICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAImZpbGVzLnRleHRDb250ZW50Il0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRl
c3RzLCBEYXRhVHJhbnNmZXJTdXBwcmVzc0dldERhdGFEdWVUb1ByZXNlbmNlT2ZUZXh0RmlsZSkK
LXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAIkRhdGFUcmFuc2ZlciJdOwotICAgIGF1dG8g
c2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5p
dFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIGF1dG8gaXRlbVByb3ZpZGVyID0g
YWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW2l0ZW1Qcm92aWRl
ciByZWdpc3Rlck9iamVjdDpAIkhlbGxvIHdvcmxkIiB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVy
UmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsXTsKLSAgICBbaXRlbVByb3ZpZGVyIHNldFN1Z2dl
c3RlZE5hbWU6QCJoZWxsby50eHQiXTsKLQotICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVt
UHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbc2ltdWxhdG9yIHJ1bkZy
b206Q0dQb2ludFplcm8gdG86Q0dQb2ludE1ha2UoNTAsIDEwMCldOwotCi0gICAgRVhQRUNUX1dL
X1NUUkVRKCJGaWxlcyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0
eXBlcy50ZXh0Q29udGVudCJdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0ZXh0RGF0YS50ZXh0Q29udGVudCJdKTsKLSAg
ICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJ1cmxEYXRhLnRleHRDb250ZW50Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImh0bWxEYXRhLnRleHRDb250ZW50
Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiKEZJTEUsIHRleHQvcGxhaW4pIiwgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIml0ZW1zLnRleHRDb250ZW50Il0pOwotICAg
IEVYUEVDVF9XS19TVFJFUSgiKCdoZWxsby50eHQnLCB0ZXh0L3BsYWluKSIsIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJmaWxlcy50ZXh0Q29udGVudCJdKTsKLX0KLQot
VEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRGF0YVRyYW5zZmVyR2V0RGF0YUNhbm5vdFJlYWRQ
cml2YXRlQXJiaXRyYXJ5VHlwZXMpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1w
LWRhdGF0cmFuc2Zlci10eXBlcyJdOwotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKLQotICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVy
IGFsbG9jXSBpbml0XSk7Ci0gICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRh
dGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVNUDMgdmlzaWJpbGl0eTpO
U0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxlcjpeTlNQ
cm9ncmVzcyAqKERhdGFMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRpb25IYW5kbGVyKQotICAg
IHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoW0AidGhpcyBpcyBhIHRlc3QiIGRhdGFVc2lu
Z0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSwgbmlsKTsKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICB9XTsKLSAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9u
Rm9yVHlwZUlkZW50aWZpZXI6QCJvcmcuV2ViS2l0LlRlc3RXZWJLaXRBUEkuY3VzdG9tLXBhc3Rl
Ym9hcmQtdHlwZSIgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJp
bGl0eUFsbCBsb2FkSGFuZGxlcjpeTlNQcm9ncmVzcyAqKERhdGFMb2FkQ29tcGxldGlvbkJsb2Nr
IGNvbXBsZXRpb25IYW5kbGVyKQotICAgIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoW0Ai
dGhpcyBpcyBhbm90aGVyIHRlc3QiIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29k
aW5nXSwgbmlsKTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9XTsKLSAgICBbc2ltdWxhdG9y
IHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAg
W2l0ZW1Qcm92aWRlciBzZXRQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZTpVSVByZWZlcnJlZFBy
ZXNlbnRhdGlvblN0eWxlSW5saW5lXTsKLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1h
a2UoMzAwLCAzNzUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKLSAgICBjaGVja0pTT05XaXRo
TG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZh
bHVlIl0sIEB7Ci0gICAgICAgIEAiZHJhZ292ZXIiOiBAeyB9LAotICAgICAgICBAImRyb3AiOiBA
eyB9Ci0gICAgfSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERhdGFUcmFuc2Zl
clNldERhdGFWYWxpZFVSTCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1bXAtZGF0
YXRyYW5zZmVyLXR5cGVzIl07Ci0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0p
OwotCi0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNlbGVjdChy
aWNoKSJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjdXN0
b21EYXRhID0geyAndXJsJyA6ICdodHRwczovL3dlYmtpdC5vcmcvYi8xMjMnIH0iXTsKLSAgICBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0b21EYXRhID0g
dHJ1ZSJdOwotCi0gICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKLSAgICBbc2ltdWxhdG9y
LmdldCgpIHNldE92ZXJyaWRlUGVyZm9ybURyb3BCbG9jazpeTlNBcnJheTxVSURyYWdJdGVtICo+
ICooaWQgPFVJRHJvcFNlc3Npb24+IHNlc3Npb24pCi0gICAgewotICAgICAgICBFWFBFQ1RfRVEo
MVVMLCBzZXNzaW9uLml0ZW1zLmNvdW50KTsKLSAgICAgICAgYXV0byAqaXRlbSA9IHNlc3Npb24u
aXRlbXNbMF0uaXRlbVByb3ZpZGVyOwotICAgICAgICBFWFBFQ1RfVFJVRShbaXRlbS5yZWdpc3Rl
cmVkVHlwZUlkZW50aWZpZXJzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVVUkxd
KTsKLSAgICAgICAgRVhQRUNUX1RSVUUoW2l0ZW0gY2FuTG9hZE9iamVjdE9mQ2xhc3M6IFtOU1VS
TCBjbGFzc11dKTsKLSAgICAgICAgW2l0ZW0gbG9hZE9iamVjdE9mQ2xhc3M6W05TVVJMIGNsYXNz
XSBjb21wbGV0aW9uSGFuZGxlcjpeKGlkPE5TSXRlbVByb3ZpZGVyUmVhZGluZz4gdXJsLCBOU0Vy
cm9yICplcnJvcikgewotICAgICAgICAgICAgRVhQRUNUX1RSVUUoW3VybCBpc0tpbmRPZkNsYXNz
OiBbTlNVUkwgY2xhc3NdXSk7Ci0gICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoWyhOU1VSTCAq
KXVybCBhYnNvbHV0ZVN0cmluZ10sIEAiaHR0cHM6Ly93ZWJraXQub3JnL2IvMTIzIik7Ci0gICAg
ICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAgfV07Ci0gICAgICAgIHJldHVybiBzZXNzaW9u
Lml0ZW1zOwotICAgIH1dOwotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwg
MjI1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07Ci0KLSAgICBjaGVja0pTT05XaXRoTG9nZ2lu
Zyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0s
IEB7Ci0gICAgICAgIEAiZHJhZ292ZXIiOiBAewotICAgICAgICAgICAgQCJ0ZXh0L3VyaS1saXN0
IjogQCIiLAotICAgICAgICB9LAotICAgICAgICBAImRyb3AiOiBAewotICAgICAgICAgICAgQCJ0
ZXh0L3VyaS1saXN0IjogQCJodHRwczovL3dlYmtpdC5vcmcvYi8xMjMiLAotICAgICAgICB9Ci0g
ICAgfSk7Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKLX0KLQotVEVTVChE
YXRhSW50ZXJhY3Rpb25UZXN0cywgRGF0YVRyYW5zZmVyU2V0RGF0YVVuZXNjYXBlZFVSTCkKLXsK
LSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNo
cm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07Ci0g
ICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFs
bG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotCi0gICAgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNlbGVjdChyaWNoKSJdOwotICAgIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjdXN0b21EYXRhID0geyAndXJsJyA6ICdo
dHRwOi8vd2Via2l0Lm9yZy9iL1x1NEY2MFx1NTk3RDs/eD04ICsgNicgfSJdOwotICAgIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3cml0ZUN1c3RvbURhdGEgPSB0cnVl
Il07Ci0KLSAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgIFtzaW11bGF0b3IuZ2V0
KCkgc2V0T3ZlcnJpZGVQZXJmb3JtRHJvcEJsb2NrOl5OU0FycmF5PFVJRHJhZ0l0ZW0gKj4gKihp
ZCA8VUlEcm9wU2Vzc2lvbj4gc2Vzc2lvbikKLSAgICB7Ci0gICAgICAgIEVYUEVDVF9FUSgxVUws
IHNlc3Npb24uaXRlbXMuY291bnQpOwotICAgICAgICBhdXRvICppdGVtID0gc2Vzc2lvbi5pdGVt
c1swXS5pdGVtUHJvdmlkZXI7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFtpdGVtLnJlZ2lzdGVyZWRU
eXBlSWRlbnRpZmllcnMgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZVVSTF0pOwot
ICAgICAgICBFWFBFQ1RfVFJVRShbaXRlbSBjYW5Mb2FkT2JqZWN0T2ZDbGFzczogW05TVVJMIGNs
YXNzXV0pOwotICAgICAgICBbaXRlbSBsb2FkT2JqZWN0T2ZDbGFzczpbTlNVUkwgY2xhc3NdIGNv
bXBsZXRpb25IYW5kbGVyOl4oaWQ8TlNJdGVtUHJvdmlkZXJSZWFkaW5nPiB1cmwsIE5TRXJyb3Ig
KmVycm9yKSB7Ci0gICAgICAgICAgICBFWFBFQ1RfVFJVRShbdXJsIGlzS2luZE9mQ2xhc3M6IFtO
U1VSTCBjbGFzc11dKTsKLSAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUShbKE5TVVJMICopdXJs
IGFic29sdXRlU3RyaW5nXSwgQCJodHRwOi8vd2Via2l0Lm9yZy9iLyVFNCVCRCVBMCVFNSVBNSVC
RDs/eD04JTIwKyUyMDYiKTsKLSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICB9XTsK
LSAgICAgICAgcmV0dXJuIHNlc3Npb24uaXRlbXM7Ci0gICAgfV07Ci0gICAgW3NpbXVsYXRvciBy
dW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCAyMjUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKLQot
ICAgIGNoZWNrSlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwgQHsKLSAgICAgICAgQCJkcmFnb3ZlciI6IEB7Ci0gICAg
ICAgICAgICBAInRleHQvdXJpLWxpc3QiOiBAIiIsCi0gICAgICAgIH0sCi0gICAgICAgIEAiZHJv
cCI6IEB7Ci0gICAgICAgICAgICBAInRleHQvdXJpLWxpc3QiOiBAImh0dHA6Ly93ZWJraXQub3Jn
L2IvXHU0RjYwXHU1OTdEOz94PTggKyA2IiwKLSAgICAgICAgfQotICAgIH0pOwotICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVz
dHMsIERhdGFUcmFuc2ZlclNldERhdGFJbnZhbGlkVVJMKQotewotICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFn
ZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKLSAgICBhdXRvIHNpbXVsYXRvciA9
IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmll
dzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAic2VsZWN0KHJpY2gpIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAImN1c3RvbURhdGEgPSB7ICd1cmwnIDogJ3NvbWUgcmFuZG9tIHN0cmluZycg
fSJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3cml0ZUN1
c3RvbURhdGEgPSB0cnVlIl07Ci0KLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2Uo
NTAsIDIyNSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOwotICAgIE5TQXJyYXkgKnJlZ2lzdGVy
ZWRUeXBlcyA9IFtzaW11bGF0b3IuZ2V0KCkuc291cmNlSXRlbVByb3ZpZGVycy5maXJzdE9iamVj
dCByZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzXTsKLSAgICBFWFBFQ1RfRkFMU0UoW3JlZ2lzdGVy
ZWRUeXBlcyBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilrVVRUeXBlVVJMXSk7Ci0gICAgY2hl
Y2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
Im91dHB1dC52YWx1ZSJdLCBAewotICAgICAgICBAImRyYWdvdmVyIjogQHsKLSAgICAgICAgICAg
IEAidGV4dC91cmktbGlzdCI6IEAiIiwKLSAgICAgICAgfSwKLSAgICAgICAgQCJkcm9wIjogQHsK
LSAgICAgICAgICAgIEAidGV4dC91cmktbGlzdCI6IEAic29tZSByYW5kb20gc3RyaW5nIiwKLSAg
ICAgICAgfQotICAgIH0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEYXRhVHJh
bnNmZXJTYW5pdGl6ZUhUTUwpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCld
KTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRh
dGF0cmFuc2Zlci10eXBlcyJdOwotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCld
KTsKLQotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzZWxlY3Qo
cmljaCkiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY3Vz
dG9tRGF0YSA9IHsgJ3RleHQvaHRtbCcgOiAnPG1ldGEgY29udGVudD1cInNlY3JldFwiPiIKLSAg
ICAgICAgIjxiIG9ubW91c2VvdmVyPVwiZGFuZ2Vyb3VzQ29kZSgpXCI+aGVsbG88L2I+PCEtLSBz
ZWNyZXQtLT4sIHdvcmxkPHNjcmlwdD5kYW5nZXJvdXNDb2RlKCk8L3NjcmlwdD4nIH0iXTsKLSAg
ICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0b21EYXRh
ID0gdHJ1ZSJdOwotCi0gICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKLSAgICBbc2ltdWxh
dG9yLmdldCgpIHNldE92ZXJyaWRlUGVyZm9ybURyb3BCbG9jazpeTlNBcnJheTxVSURyYWdJdGVt
ICo+ICooaWQgPFVJRHJvcFNlc3Npb24+IHNlc3Npb24pCi0gICAgewotICAgICAgICBFWFBFQ1Rf
RVEoMVVMLCBzZXNzaW9uLml0ZW1zLmNvdW50KTsKLSAgICAgICAgYXV0byAqaXRlbSA9IHNlc3Np
b24uaXRlbXNbMF0uaXRlbVByb3ZpZGVyOwotICAgICAgICBFWFBFQ1RfVFJVRShbaXRlbS5yZWdp
c3RlcmVkVHlwZUlkZW50aWZpZXJzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVI
VE1MXSk7Ci0gICAgICAgIFtpdGVtIGxvYWREYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRp
ZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRGF0YSAq
ZGF0YSwgTlNFcnJvciAqZXJyb3IpIHsKLSAgICAgICAgICAgIE5TU3RyaW5nICptYXJrdXAgPSBb
W1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOihOU0RhdGEgKilkYXRhIGVuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nXSBhdXRvcmVsZWFzZV07Ci0gICAgICAgICAgICBFWFBFQ1RfVFJV
RShbbWFya3VwIGNvbnRhaW5zU3RyaW5nOkAiaGVsbG8iXSk7Ci0gICAgICAgICAgICBFWFBFQ1Rf
VFJVRShbbWFya3VwIGNvbnRhaW5zU3RyaW5nOkAiLCB3b3JsZCJdKTsKLSAgICAgICAgICAgIEVY
UEVDVF9GQUxTRShbbWFya3VwIGNvbnRhaW5zU3RyaW5nOkAic2VjcmV0Il0pOwotICAgICAgICAg
ICAgRVhQRUNUX0ZBTFNFKFttYXJrdXAgY29udGFpbnNTdHJpbmc6QCJkYW5nZXJvdXNDb2RlIl0p
OwotICAgICAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgIH1dOwotICAgICAgICByZXR1cm4g
c2Vzc2lvbi5pdGVtczsKLSAgICB9XTsKLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1h
a2UoNTAsIDIyNSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOwotCi0gICAgY2hlY2tKU09OV2l0
aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52
YWx1ZSJdLCBAewotICAgICAgICBAImRyYWdvdmVyIjogQHsKLSAgICAgICAgICAgIEAidGV4dC9o
dG1sIjogQCIiLAotICAgICAgICB9LAotICAgICAgICBAImRyb3AiOiBAewotICAgICAgICAgICAg
QCJ0ZXh0L2h0bWwiOiBAIjxtZXRhIGNvbnRlbnQ9XCJzZWNyZXRcIj48YiBvbm1vdXNlb3Zlcj1c
ImRhbmdlcm91c0NvZGUoKVwiPmhlbGxvPC9iPjwhLS0gc2VjcmV0LS0+LCB3b3JsZDxzY3JpcHQ+
ZGFuZ2Vyb3VzQ29kZSgpPC9zY3JpcHQ+IiwKLSAgICAgICAgfQotICAgIH0pOwotICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Ci19Ci0KLSNlbmRpZiAvLyBfX0lQSE9ORV9PU19W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAzMDAKLQotfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktp
dEFQSQotCi0jZW5kaWYgLy8gRU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9EcmFnQW5kRHJvcFRlc3RzSU9TLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRHJhZ0FuZERyb3BUZXN0c0lPUy5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jYmU2M2YwNmY3MzU5OTExZTQ0NTE2MDcxNTk4MmUxNjgwMWQyZThhCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRHJhZ0FuZERyb3BUZXN0c0lP
Uy5tbQpAQCAtMCwwICsxLDE5MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiBQTEFURk9STShJT1MpICYmIFdLX0FQSV9F
TkFCTEVECisKKyNpbXBvcnQgIkRyYWdnaW5nU2ltdWxhdG9yLmgiCisjaW1wb3J0ICJQbGF0Zm9y
bVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCAiVUlLaXRT
UEkuaCIKKyNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKKyNpbXBvcnQg
PE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2VydmljZXMuaD4KKyNpbXBvcnQgPFVJS2l0
L05TSXRlbVByb3ZpZGVyK1VJS2l0QWRkaXRpb25zLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tQcmVm
ZXJlbmNlc1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0
ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9X
ZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bv
b2xDb25maWd1cmF0aW9uLmg+CisjaW1wb3J0IDx3dGYvU2Vjb25kcy5oPgorCit0eXBlZGVmIHZv
aWQgKF5GaWxlTG9hZENvbXBsZXRpb25CbG9jaykoTlNVUkwgKiwgQk9PTCwgTlNFcnJvciAqKTsK
K3R5cGVkZWYgdm9pZCAoXkRhdGFMb2FkQ29tcGxldGlvbkJsb2NrKShOU0RhdGEgKiwgTlNFcnJv
ciAqKTsKK3R5cGVkZWYgdm9pZCAoXlVJSXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0aW9uQmxv
Y2spKE5TRGF0YSAqLCBOU0Vycm9yICopOworCisjaWYgIVVTRShBUFBMRV9JTlRFUk5BTF9TREsp
CisKK0BpbnRlcmZhY2UgVUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnMgOiBOU09i
amVjdAorQGVuZAorCisjZW5kaWYKKworQGludGVyZmFjZSBVSUl0ZW1Qcm92aWRlcigpCisrIChV
SUl0ZW1Qcm92aWRlciAqKWl0ZW1Qcm92aWRlcldpdGhVUkw6KE5TVVJMICopdXJsIHRpdGxlOihO
U1N0cmluZyAqKXRpdGxlOworLSAodm9pZCkgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JU
eXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKil0eXBlSWRlbnRpZmllciBvcHRpb25zOihVSUl0ZW1Q
cm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9ucyopb3B0aW9ucyBsb2FkSGFuZGxlcjooTlNQcm9n
cmVzcyAqICheKSh2b2lkICheVUlJdGVtUHJvdmlkZXJEYXRhTG9hZENvbXBsZXRpb25CbG9jayko
TlNEYXRhICppdGVtLCBOU0Vycm9yICplcnJvcikpKSBsb2FkSGFuZGxlcjsKK0BlbmQKKworc3Rh
dGljIE5TU3RyaW5nICpJbmplY3RlZEJ1bmRsZVBhc3RlYm9hcmREYXRhVHlwZSA9IEAib3JnLndl
YmtpdC5kYXRhIjsKKworc3RhdGljIFVJSW1hZ2UgKnRlc3RJY29uSW1hZ2UoKQoreworICAgIHJl
dHVybiBbVUlJbWFnZSBpbWFnZU5hbWVkOkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMvaWNvbi5w
bmciXTsKK30KKworc3RhdGljIE5TRGF0YSAqdGVzdFpJUEFyY2hpdmUoKQoreworICAgIE5TVVJM
ICp6aXBGaWxlVVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAImNv
bXByZXNzZWQtZmlsZXMiIHdpdGhFeHRlbnNpb246QCJ6aXAiIHN1YmRpcmVjdG9yeTpAIlRlc3RX
ZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgcmV0dXJuIFtOU0RhdGEgZGF0YVdpdGhDb250ZW50
c09mVVJMOnppcEZpbGVVUkxdOworfQorCitAaW1wbGVtZW50YXRpb24gVUlJdGVtUHJvdmlkZXIg
KERyYWdBbmREcm9wVGVzdHMpCisKKy0gKHZvaWQpcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25G
b3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKil0eXBlSWRlbnRpZmllciB3aXRoRGF0YTooTlNE
YXRhICopZGF0YQoreworICAgIFJldGFpblB0cjxOU0RhdGE+IHJldGFpbmVkRGF0YSA9IGRhdGE7
CisgICAgW3NlbGYgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjp0
eXBlSWRlbnRpZmllciB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRp
b25zVmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxlcjogW3JldGFpbmVkRGF0YV0gKERhdGFMb2FkQ29t
cGxldGlvbkJsb2NrIGJsb2NrKSAtPiBOU1Byb2dyZXNzICogeworICAgICAgICBibG9jayhyZXRh
aW5lZERhdGEuZ2V0KCksIG5pbCk7CisgICAgICAgIHJldHVybiBbTlNQcm9ncmVzcyBkaXNjcmV0
ZVByb2dyZXNzV2l0aFRvdGFsVW5pdENvdW50OjEwMF07CisgICAgfV07Cit9CisKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIFRlc3RXS1dlYlZpZXcgKERyYWdBbmREcm9wVGVzdHMpCisKKy0gKEJP
T0wpZWRpdG9yQ29udGFpbnNJbWFnZUVsZW1lbnQKK3sKKyAgICByZXR1cm4gW3NlbGYgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIiEhZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIl0u
Ym9vbFZhbHVlOworfQorCistIChOU1N0cmluZyAqKWVkaXRvclZhbHVlCit7CisgICAgcmV0dXJu
IFtzZWxmIHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudmFsdWUiXTsKK30K
KworQGVuZAorCitzdGF0aWMgTlNWYWx1ZSAqbWFrZUNHUmVjdFZhbHVlKENHRmxvYXQgeCwgQ0dG
bG9hdCB5LCBDR0Zsb2F0IHdpZHRoLCBDR0Zsb2F0IGhlaWdodCkKK3sKKyAgICByZXR1cm4gW05T
VmFsdWUgdmFsdWVXaXRoQ0dSZWN0OkNHUmVjdE1ha2UoeCwgeSwgd2lkdGgsIGhlaWdodCldOwor
fQorCitzdGF0aWMgdm9pZCBjaGVja0NHUmVjdElzRXF1YWxUb0NHUmVjdFdpdGhMb2dnaW5nKENH
UmVjdCBleHBlY3RlZCwgQ0dSZWN0IG9ic2VydmVkKQoreworICAgIEJPT0wgaXNFcXVhbCA9IENH
UmVjdEVxdWFsVG9SZWN0KGV4cGVjdGVkLCBvYnNlcnZlZCk7CisgICAgRVhQRUNUX1RSVUUoaXNF
cXVhbCk7CisgICAgaWYgKCFpc0VxdWFsKQorICAgICAgICBOU0xvZyhAIkV4cGVjdGVkOiAlQCBi
dXQgb2JzZXJ2ZWQ6ICVAIiwgTlNTdHJpbmdGcm9tQ0dSZWN0KGV4cGVjdGVkKSwgTlNTdHJpbmdG
cm9tQ0dSZWN0KG9ic2VydmVkKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrU2VsZWN0aW9uUmVj
dHNXaXRoTG9nZ2luZyhOU0FycmF5ICpleHBlY3RlZCwgTlNBcnJheSAqb2JzZXJ2ZWQpCit7Cisg
ICAgaWYgKCFbZXhwZWN0ZWQgaXNFcXVhbFRvQXJyYXk6b2JzZXJ2ZWRdKQorICAgICAgICBOU0xv
ZyhAIkV4cGVjdGVkIHNlbGVjdGlvbiByZWN0czogJUAgYnV0IG9ic2VydmVkOiAlQCIsIGV4cGVj
dGVkLCBvYnNlcnZlZCk7CisgICAgRVhQRUNUX1RSVUUoW2V4cGVjdGVkIGlzRXF1YWxUb0FycmF5
Om9ic2VydmVkXSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrUmljaFRleHRUeXBlUHJlY2VkZXNQ
bGFpblRleHRUeXBlKERyYWdnaW5nU2ltdWxhdG9yICpzaW11bGF0b3IpCit7CisgICAgLy8gQXQg
bGVhc3Qgb25lIG9mICJjb20uYXBwbGUuZmxhdC1ydGZkIiBvciAicHVibGljLnJ0ZiIgaXMgZXhw
ZWN0ZWQgdG8gaGF2ZSBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuICJwdWJsaWMudXRmOC1wbGFpbi10
ZXh0Ii4KKyAgICBOU0FycmF5ICpyZWdpc3RlcmVkVHlwZXMgPSBbc2ltdWxhdG9yLnNvdXJjZUl0
ZW1Qcm92aWRlcnMuZmlyc3RPYmplY3QgcmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVyc107CisgICAg
YXV0byBpbmRleE9mUlRGVHlwZSA9IFtyZWdpc3RlcmVkVHlwZXMgaW5kZXhPZk9iamVjdDooTlNT
dHJpbmcgKilrVVRUeXBlUlRGXTsKKyAgICBhdXRvIGluZGV4T2ZGbGF0UlRGRFR5cGUgPSBbcmVn
aXN0ZXJlZFR5cGVzIGluZGV4T2ZPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZUZsYXRSVEZEXTsK
KyAgICBhdXRvIGluZGV4T2ZQbGFpblRleHRUeXBlID0gW3JlZ2lzdGVyZWRUeXBlcyBpbmRleE9m
T2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0XTsKKyAgICBFWFBFQ1RfTkUo
KE5TSW50ZWdlcilpbmRleE9mUGxhaW5UZXh0VHlwZSwgTlNOb3RGb3VuZCk7CisgICAgRVhQRUNU
X1RSVUUoKGluZGV4T2ZSVEZUeXBlICE9IE5TTm90Rm91bmQgJiYgaW5kZXhPZlJURlR5cGUgPCBp
bmRleE9mUGxhaW5UZXh0VHlwZSkgfHwgKGluZGV4T2ZGbGF0UlRGRFR5cGUgIT0gTlNOb3RGb3Vu
ZCAmJiBpbmRleE9mRmxhdFJURkRUeXBlIDwgaW5kZXhPZlBsYWluVGV4dFR5cGUpKTsKK30KKwor
c3RhdGljIHZvaWQgY2hlY2tGaXJzdFR5cGVJc1ByZXNlbnRBbmRTZWNvbmRUeXBlSXNNaXNzaW5n
KERyYWdnaW5nU2ltdWxhdG9yICpzaW11bGF0b3IsIENGU3RyaW5nUmVmIGZpcnN0VHlwZSwgQ0ZT
dHJpbmdSZWYgc2Vjb25kVHlwZSkKK3sKKyAgICBOU0FycmF5ICpyZWdpc3RlcmVkVHlwZXMgPSBb
c2ltdWxhdG9yLnNvdXJjZUl0ZW1Qcm92aWRlcnMuZmlyc3RPYmplY3QgcmVnaXN0ZXJlZFR5cGVJ
ZGVudGlmaWVyc107CisgICAgRVhQRUNUX1RSVUUoW3JlZ2lzdGVyZWRUeXBlcyBjb250YWluc09i
amVjdDooTlNTdHJpbmcgKilmaXJzdFR5cGVdKTsKKyAgICBFWFBFQ1RfRkFMU0UoW3JlZ2lzdGVy
ZWRUeXBlcyBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilzZWNvbmRUeXBlXSk7Cit9CisKK3N0
YXRpYyB2b2lkIGNoZWNrVHlwZUlkZW50aWZpZXJJc1JlZ2lzdGVyZWRBdEluZGV4KERyYWdnaW5n
U2ltdWxhdG9yICpzaW11bGF0b3IsIE5TU3RyaW5nICp0eXBlLCBOU1VJbnRlZ2VyIGluZGV4KQor
eworICAgIE5TQXJyYXkgKnJlZ2lzdGVyZWRUeXBlcyA9IFtzaW11bGF0b3Iuc291cmNlSXRlbVBy
b3ZpZGVycy5maXJzdE9iamVjdCByZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzXTsKKyAgICBFWFBF
Q1RfR1QocmVnaXN0ZXJlZFR5cGVzLmNvdW50LCBpbmRleCk7CisgICAgRVhQRUNUX1dLX1NUUkVR
KHR5cGUuVVRGOFN0cmluZywgW3JlZ2lzdGVyZWRUeXBlc1tpbmRleF0gVVRGOFN0cmluZ10pOwor
fQorCitzdGF0aWMgdm9pZCBjaGVja0VzdGltYXRlZFNpemUoRHJhZ2dpbmdTaW11bGF0b3IgKnNp
bXVsYXRvciwgQ0dTaXplIGVzdGltYXRlZFNpemUpCit7CisgICAgVUlJdGVtUHJvdmlkZXIgKnNv
dXJjZUl0ZW1Qcm92aWRlciA9IFtzaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10uZmlyc3RP
YmplY3Q7CisgICAgRVhQRUNUX0VRKGVzdGltYXRlZFNpemUud2lkdGgsIHNvdXJjZUl0ZW1Qcm92
aWRlci5wcmVmZXJyZWRQcmVzZW50YXRpb25TaXplLndpZHRoKTsKKyAgICBFWFBFQ1RfRVEoZXN0
aW1hdGVkU2l6ZS5oZWlnaHQsIHNvdXJjZUl0ZW1Qcm92aWRlci5wcmVmZXJyZWRQcmVzZW50YXRp
b25TaXplLmhlaWdodCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrU3VnZ2VzdGVkTmFtZUFuZEVz
dGltYXRlZFNpemUoRHJhZ2dpbmdTaW11bGF0b3IgKnNpbXVsYXRvciwgTlNTdHJpbmcgKnN1Z2dl
c3RlZE5hbWUsIENHU2l6ZSBlc3RpbWF0ZWRTaXplKQoreworICAgIFVJSXRlbVByb3ZpZGVyICpz
b3VyY2VJdGVtUHJvdmlkZXIgPSBbc2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0
T2JqZWN0OworICAgIEVYUEVDVF9XS19TVFJFUShzdWdnZXN0ZWROYW1lLlVURjhTdHJpbmcsIHNv
dXJjZUl0ZW1Qcm92aWRlci5zdWdnZXN0ZWROYW1lLlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9F
UShlc3RpbWF0ZWRTaXplLndpZHRoLCBzb3VyY2VJdGVtUHJvdmlkZXIucHJlZmVycmVkUHJlc2Vu
dGF0aW9uU2l6ZS53aWR0aCk7CisgICAgRVhQRUNUX0VRKGVzdGltYXRlZFNpemUuaGVpZ2h0LCBz
b3VyY2VJdGVtUHJvdmlkZXIucHJlZmVycmVkUHJlc2VudGF0aW9uU2l6ZS5oZWlnaHQpOworfQor
CitzdGF0aWMgdm9pZCBjaGVja1N0cmluZ0FycmF5c0FyZUVxdWFsKE5TQXJyYXk8TlNTdHJpbmcg
Kj4gKmV4cGVjdGVkLCBOU0FycmF5PE5TU3RyaW5nICo+ICpvYnNlcnZlZCkKK3sKKyAgICBFWFBF
Q1RfRVEoZXhwZWN0ZWQuY291bnQsIG9ic2VydmVkLmNvdW50KTsKKyAgICBmb3IgKE5TVUludGVn
ZXIgaW5kZXggPSAwOyBpbmRleCA8IGV4cGVjdGVkLmNvdW50OyArK2luZGV4KSB7CisgICAgICAg
IE5TU3RyaW5nICpleHBlY3RlZFN0cmluZyA9IFtleHBlY3RlZCBvYmplY3RBdEluZGV4OmluZGV4
XTsKKyAgICAgICAgTlNTdHJpbmcgKm9ic2VydmVkU3RyaW5nID0gW29ic2VydmVkIG9iamVjdEF0
SW5kZXg6aW5kZXhdOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoZXhwZWN0ZWRTdHJpbmcsIG9i
c2VydmVkU3RyaW5nKTsKKyAgICAgICAgaWYgKCFbZXhwZWN0ZWRTdHJpbmcgaXNFcXVhbFRvU3Ry
aW5nOm9ic2VydmVkU3RyaW5nXSkKKyAgICAgICAgICAgIE5TTG9nKEAiRXhwZWN0ZWQgb2JzZXJ2
ZWQgc3RyaW5nOiAlQCB0byBtYXRjaCBleHBlY3RlZCBzdHJpbmc6ICVAIGF0IGluZGV4OiAldHUi
LCBvYnNlcnZlZFN0cmluZywgZXhwZWN0ZWRTdHJpbmcsIGluZGV4KTsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIGNoZWNrRHJhZ0NhcmV0UmVjdElzQ29udGFpbmVkSW5SZWN0KENHUmVjdCBjYXJl
dFJlY3QsIENHUmVjdCBjb250YWluZXJSZWN0KQoreworICAgIEJPT0wgY29udGFpbmVkID0gQ0dS
ZWN0Q29udGFpbnNSZWN0KGNvbnRhaW5lclJlY3QsIGNhcmV0UmVjdCk7CisgICAgRVhQRUNUX1RS
VUUoY29udGFpbmVkKTsKKyAgICBpZiAoIWNvbnRhaW5lZCkKKyAgICAgICAgTlNMb2coQCJFeHBl
Y3RlZCBjYXJldCByZWN0OiAlQCB0byBmaXQgd2l0aGluIGNvbnRhaW5lciByZWN0OiAlQCIsIE5T
U3RyaW5nRnJvbUNHUmVjdChjYXJldFJlY3QpLCBOU1N0cmluZ0Zyb21DR1JlY3QoY29udGFpbmVy
UmVjdCkpOworfQorCisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEw
MzAwCisKK3N0YXRpYyB2b2lkIGNoZWNrSlNPTldpdGhMb2dnaW5nKE5TU3RyaW5nICpqc29uU3Ry
aW5nLCBOU0RpY3Rpb25hcnkgKmV4cGVjdGVkKQoreworICAgIEJPT0wgc3VjY2VzcyA9IFRlc3RX
ZWJLaXRBUEk6OlV0aWw6Ompzb25NYXRjaGVzRXhwZWN0ZWRWYWx1ZXMoanNvblN0cmluZywgZXhw
ZWN0ZWQpOworICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKKyAg
ICAgICAgTlNMb2coQCJFeHBlY3RlZCBKU09OOiAlQCB0byBtYXRjaCB2YWx1ZXM6ICVAIiwganNv
blN0cmluZywgZXhwZWN0ZWQpOworfQorCitzdGF0aWMgTlNEYXRhICp0ZXN0SWNvbkltYWdlRGF0
YSgpCit7CisgICAgcmV0dXJuIFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mVVJMOltbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJpY29uIiB3aXRoRXh0ZW5zaW9uOkAicG5n
IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKK30KKworc3RhdGlj
IHZvaWQgcnVuVGVzdFdpdGhUZW1wb3JhcnlUZXh0RmlsZSh2b2lkKF5ydW5UZXN0KShOU1VSTCAq
ZmlsZVVSTCkpCit7CisgICAgTlNTdHJpbmcgKmZpbGVOYW1lID0gW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJkcmFnLWRyb3AtdGV4dC1maWxlLSVALnR4dCIsIFtOU1VVSUQgVVVJRF0uVVVJ
RFN0cmluZ107CisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZW1wb3JhcnlGaWxlID0gW05TVVJMIGZp
bGVVUkxXaXRoUGF0aDpbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1Bh
dGhDb21wb25lbnQ6ZmlsZU5hbWVdIGlzRGlyZWN0b3J5Ok5PXTsKKyAgICBbW05TRmlsZU1hbmFn
ZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDp0ZW1wb3JhcnlGaWxlLmdldCgpIGVy
cm9yOm5pbF07CisKKyAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgICBbQCJUaGlzIGlzIGEg
dGlueSBibG9iIG9mIHRleHQuIiB3cml0ZVRvVVJMOnRlbXBvcmFyeUZpbGUuZ2V0KCkgYXRvbWlj
YWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6JmVycm9yXTsKKwor
ICAgIGlmIChlcnJvcikKKyAgICAgICAgTlNMb2coQCJFcnJvciB3cml0aW5nIHRlbXBvcmFyeSBm
aWxlOiAlQCIsIGVycm9yKTsKKworICAgIEB0cnkgeworICAgICAgICBydW5UZXN0KHRlbXBvcmFy
eUZpbGUuZ2V0KCkpOworICAgIH0gQGZpbmFsbHkgeworICAgICAgICBbW05TRmlsZU1hbmFnZXIg
ZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDp0ZW1wb3JhcnlGaWxlLmdldCgpIGVycm9y
Om5pbF07CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBydW5UZXN0V2l0aFRlbXBvcmFyeUZvbGRl
cih2b2lkKF5ydW5UZXN0KShOU1VSTCAqZm9sZGVyVVJMKSkKK3sKKyAgICBOU1N0cmluZyAqZm9s
ZGVyTmFtZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAic29tZS5kaXJlY3RvcnktJUAi
LCBbTlNVVUlEIFVVSURdLlVVSURTdHJpbmddOworICAgIFJldGFpblB0cjxOU1VSTD4gdGVtcG9y
YXJ5Rm9sZGVyID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNUZW1wb3JhcnlEaXJlY3Rvcnko
KSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6Zm9sZGVyTmFtZV0gaXNEaXJlY3Rvcnk6
WUVTXTsKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVS
TDp0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkgZXJyb3I6bmlsXTsKKworICAgIE5TRXJyb3IgKmVycm9y
ID0gbmlsOworICAgIE5TRmlsZU1hbmFnZXIgKmRlZmF1bHRNYW5hZ2VyID0gW05TRmlsZU1hbmFn
ZXIgZGVmYXVsdE1hbmFnZXJdOworICAgIFtkZWZhdWx0TWFuYWdlciBjcmVhdGVEaXJlY3RvcnlB
dFVSTDp0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkgd2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOk5P
IGF0dHJpYnV0ZXM6bmlsIGVycm9yOiZlcnJvcl07CisgICAgW3Rlc3RJY29uSW1hZ2VEYXRhKCkg
d3JpdGVUb1VSTDpbdGVtcG9yYXJ5Rm9sZGVyLmdldCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpAImljb24ucG5nIiBpc0RpcmVjdG9yeTpOT10gYXRvbWljYWxseTpZRVNdOworICAgIFt0
ZXN0WklQQXJjaGl2ZSgpIHdyaXRlVG9VUkw6W3RlbXBvcmFyeUZvbGRlci5nZXQoKSBVUkxCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6QCJhcmNoaXZlLnppcCIgaXNEaXJlY3Rvcnk6Tk9dIGF0b21p
Y2FsbHk6WUVTXTsKKworICAgIE5TVVJMICpmaXJzdFN1YmRpcmVjdG9yeSA9IFt0ZW1wb3JhcnlG
b2xkZXIuZ2V0KCkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAic3ViZGlyZWN0b3J5MSIg
aXNEaXJlY3Rvcnk6WUVTXTsKKyAgICBbZGVmYXVsdE1hbmFnZXIgY3JlYXRlRGlyZWN0b3J5QXRV
Ukw6Zmlyc3RTdWJkaXJlY3Rvcnkgd2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOk5PIGF0dHJp
YnV0ZXM6bmlsIGVycm9yOiZlcnJvcl07CisgICAgW0AiSSBhbSBhIHRleHQgZmlsZSBpbiB0aGUg
Zmlyc3Qgc3ViZGlyZWN0b3J5LiIgd3JpdGVUb1VSTDpbZmlyc3RTdWJkaXJlY3RvcnkgVVJMQnlB
cHBlbmRpbmdQYXRoQ29tcG9uZW50OkAidGV4dC1maWxlLTEudHh0IiBpc0RpcmVjdG9yeTpOT10g
YXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6JmVycm9y
XTsKKworICAgIE5TVVJMICpzZWNvbmRTdWJkaXJlY3RvcnkgPSBbdGVtcG9yYXJ5Rm9sZGVyLmdl
dCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAInN1YmRpcmVjdG9yeTIiIGlzRGlyZWN0
b3J5OllFU107CisgICAgW2RlZmF1bHRNYW5hZ2VyIGNyZWF0ZURpcmVjdG9yeUF0VVJMOnNlY29u
ZFN1YmRpcmVjdG9yeSB3aXRoSW50ZXJtZWRpYXRlRGlyZWN0b3JpZXM6Tk8gYXR0cmlidXRlczpu
aWwgZXJyb3I6JmVycm9yXTsKKyAgICBbQCJJIGFtIGEgdGV4dCBmaWxlIGluIHRoZSBzZWNvbmQg
c3ViZGlyZWN0b3J5LiIgd3JpdGVUb1VSTDpbc2Vjb25kU3ViZGlyZWN0b3J5IFVSTEJ5QXBwZW5k
aW5nUGF0aENvbXBvbmVudDpAInRleHQtZmlsZS0yLnR4dCIgaXNEaXJlY3Rvcnk6Tk9dIGF0b21p
Y2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOiZlcnJvcl07CisK
KyAgICBpZiAoZXJyb3IpCisgICAgICAgIE5TTG9nKEAiRXJyb3Igd3JpdGluZyB0ZW1wb3Jhcnkg
ZmlsZTogJUAiLCBlcnJvcik7CisKKyAgICBAdHJ5IHsKKyAgICAgICAgcnVuVGVzdCh0ZW1wb3Jh
cnlGb2xkZXIuZ2V0KCkpOworICAgIH0gQGZpbmFsbHkgeworICAgICAgICBbW05TRmlsZU1hbmFn
ZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDp0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkg
ZXJyb3I6bmlsXTsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBfX0lQSE9ORV9PU19WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMTAzMDAKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitURVNU
KERyYWdBbmREcm9wVGVzdHMsIEltYWdlVG9Db250ZW50RWRpdGFibGUpCit7CisgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9h
ZFRlc3RQYWdlTmFtZWQ6QCJpbWFnZS1hbmQtY29udGVudGVkaXRhYmxlIl07CisKKyAgICBhdXRv
IHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhX
ZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1h
a2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIEVYUEVDVF9UUlVF
KFt3ZWJWaWV3IGVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk7CisKKyAgICBOU0FycmF5ICpv
YnNlcnZlZEV2ZW50TmFtZXMgPSBbc2ltdWxhdG9yIG9ic2VydmVkRXZlbnROYW1lc107CisgICAg
RVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyYWdlbnRl
ciJdKTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0
OkAiZHJhZ292ZXIiXSk7CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250
YWluc09iamVjdDpAImRyb3AiXSk7CisgICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5n
KEBbIG1ha2VDR1JlY3RWYWx1ZSgxLCAyMDEsIDIxNSwgMTc0KSBdLCBbc2ltdWxhdG9yIGZpbmFs
U2VsZWN0aW9uUmVjdHNdKTsKKyAgICBjaGVja0ZpcnN0VHlwZUlzUHJlc2VudEFuZFNlY29uZFR5
cGVJc01pc3Npbmcoc2ltdWxhdG9yLmdldCgpLCBrVVRUeXBlUE5HLCBrVVRUeXBlRmlsZVVSTCk7
CisgICAgY2hlY2tFc3RpbWF0ZWRTaXplKHNpbXVsYXRvci5nZXQoKSwgeyAyMTUsIDE3NCB9KTsK
K30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBDYW5TdGFydERyYWdPbkVub3Jtb3VzSW1hZ2Up
Cit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8aW1nIHNyYz0nZW5vcm1vdXMuc3ZnJz48L2lt
Zz4iXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9y
IGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsK
KworICAgIE5TQXJyYXkgKnJlZ2lzdGVyZWRUeXBlcyA9IFtbc2ltdWxhdG9yIHNvdXJjZUl0ZW1Q
cm92aWRlcnNdLmZpcnN0T2JqZWN0IHJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnNdOworICAgIEVY
UEVDVF9XS19TVFJFUSgoTlNTdHJpbmcgKilrVVRUeXBlU2NhbGFibGVWZWN0b3JHcmFwaGljcywg
W3JlZ2lzdGVyZWRUeXBlcyBmaXJzdE9iamVjdF0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVz
dHMsIEltYWdlVG9UZXh0YXJlYSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImltYWdl
LWFuZC10ZXh0YXJlYSJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dp
bmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAg
W3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEw
MCwgMzAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IGVkaXRvclZhbHVl
XSk7CisKKyAgICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbc2ltdWxhdG9yIG9ic2Vy
dmVkRXZlbnROYW1lc107CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250
YWluc09iamVjdDpAImRyYWdlbnRlciJdKTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVu
dE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJhZ292ZXIiXSk7CisgICAgRVhQRUNUX1RSVUUoW29i
c2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyb3AiXSk7CisgICAgY2hlY2tGaXJz
dFR5cGVJc1ByZXNlbnRBbmRTZWNvbmRUeXBlSXNNaXNzaW5nKHNpbXVsYXRvci5nZXQoKSwga1VU
VHlwZVBORywga1VUVHlwZUZpbGVVUkwpOworICAgIGNoZWNrRXN0aW1hdGVkU2l6ZShzaW11bGF0
b3IuZ2V0KCksIHsgMjE1LCAxNzQgfSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgSW1h
Z2VJbkxpbmtUb0lucHV0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7
CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiaW1hZ2UtaW4t
bGluay1hbmQtaW5wdXQiXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdn
aW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAg
IFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgx
MDAsIDMwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczovL3d3dy5hcHBsZS5jb20v
IiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVdLlVURjhTdHJpbmcpOworICAgIGNoZWNrU2VsZWN0aW9u
UmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUoMTAxLCAyNDEsIDIwNTcsIDIzMikg
XSwgW3NpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7CisgICAgY2hlY2tTdWdnZXN0ZWRO
YW1lQW5kRXN0aW1hdGVkU2l6ZShzaW11bGF0b3IuZ2V0KCksIEAiaWNvbi5wbmciLCB7IDIxNSwg
MTc0IH0pOworICAgIGNoZWNrVHlwZUlkZW50aWZpZXJJc1JlZ2lzdGVyZWRBdEluZGV4KHNpbXVs
YXRvci5nZXQoKSwgKE5TU3RyaW5nICopa1VUVHlwZVBORywgMCk7Cit9CisKK1RFU1QoRHJhZ0Fu
ZERyb3BUZXN0cywgSW1hZ2VJbkxpbmtXaXRob3V0SFJFRlRvSW5wdXQpCit7CisgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9h
ZFRlc3RQYWdlTmFtZWQ6QCJpbWFnZS1pbi1saW5rLWFuZC1pbnB1dCJdOworICAgIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJsaW5rLmhyZWYgPSAnJyJdOworCisgICAg
YXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9p
bnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEoIiIsIFt3ZWJWaWV3IGVkaXRvclZhbHVlXSk7CisgICAgY2hlY2tFc3RpbWF0ZWRT
aXplKHNpbXVsYXRvci5nZXQoKSwgeyAyMTUsIDE3NCB9KTsKKyAgICBjaGVja1R5cGVJZGVudGlm
aWVySXNSZWdpc3RlcmVkQXRJbmRleChzaW11bGF0b3IuZ2V0KCksIChOU1N0cmluZyAqKWtVVFR5
cGVQTkcsIDApOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEltYWdlRG9lc05vdFVzZUVs
ZW1lbnRTaXplQXNFc3RpbWF0ZWRTaXplKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIw
LCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAi
Z2lmLWFuZC1maWxlLWlucHV0Il07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tE
cmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsK
KyAgICBbc2ltdWxhdG9yIHJ1bkZyb206IHsgMTAwLCAxMDAgfSB0bzogeyAxMDAsIDMwMCB9XTsK
KworICAgIGNoZWNrVHlwZUlkZW50aWZpZXJJc1JlZ2lzdGVyZWRBdEluZGV4KHNpbXVsYXRvci5n
ZXQoKSwgKE5TU3RyaW5nICopa1VUVHlwZUdJRiwgMCk7CisgICAgY2hlY2tTdWdnZXN0ZWROYW1l
QW5kRXN0aW1hdGVkU2l6ZShzaW11bGF0b3IuZ2V0KCksIEAiYXBwbGUuZ2lmIiwgeyA1MiwgNjQg
fSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJhcHBsZS5naWYgKGltYWdlL2dpZikiLCBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnRleHRDb250ZW50Il0pOwor
fQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIENvbnRlbnRFZGl0YWJsZVRvQ29udGVudEVkaXRh
YmxlKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBz
aW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7CisKKyAgICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VOYW1lZDpA
ImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKKyAgICBbc2ltdWxhdG9yIHdhaXRGb3JJbnB1
dFNlc3Npb25dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0
bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX0VRKFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2UudGV4dENvbnRlbnQiXS5sZW5ndGgsIDBV
TCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJIZWxsbyB3b3JsZCIsIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXS5VVEY4U3RyaW5nKTsK
KworICAgIE5TQXJyYXkgKm9ic2VydmVkRXZlbnROYW1lcyA9IFtzaW11bGF0b3Igb2JzZXJ2ZWRF
dmVudE5hbWVzXTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5z
T2JqZWN0OkAiZHJhZ2VudGVyIl0pOworICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFt
ZXMgY29udGFpbnNPYmplY3Q6QCJkcmFnb3ZlciJdKTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2
ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJvcCJdKTsKKyAgICBjaGVja1NlbGVjdGlv
blJlY3RzV2l0aExvZ2dpbmcoQFsgbWFrZUNHUmVjdFZhbHVlKDEsIDIwMSwgOTYxLCAyMjcpIF0s
IFtzaW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0c10pOworICAgIGNoZWNrUmljaFRleHRUeXBl
UHJlY2VkZXNQbGFpblRleHRUeXBlKHNpbXVsYXRvci5nZXQoKSk7Cit9CisKK1RFU1QoRHJhZ0Fu
ZERyb3BUZXN0cywgQ29udGVudEVkaXRhYmxlVG9UZXh0YXJlYSkKK3sKKyAgICBhdXRvIHdlYlZp
ZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RN
YWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0Ry
YWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwor
CisgICAgW3dlYlZpZXcgbG9hZFRlc3RQYWdlTmFtZWQ6QCJjb250ZW50ZWRpdGFibGUtYW5kLXRl
eHRhcmVhIl07CisgICAgW3NpbXVsYXRvciB3YWl0Rm9ySW5wdXRTZXNzaW9uXTsKKyAgICBbc2lt
dWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAz
MDApXTsKKworICAgIEVYUEVDVF9FUShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAic291cmNlLnRleHRDb250ZW50Il0ubGVuZ3RoLCAwVUwpOworICAgIEVYUEVDVF9XS19T
VFJFUSgiSGVsbG8gd29ybGQiLCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0uVVRGOFN0cmluZyk7CisK
KyAgICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbc2ltdWxhdG9yIG9ic2VydmVkRXZl
bnROYW1lc107CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09i
amVjdDpAImRyYWdlbnRlciJdKTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVz
IGNvbnRhaW5zT2JqZWN0OkAiZHJhZ292ZXIiXSk7CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVk
RXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyb3AiXSk7CisgICAgY2hlY2tTZWxlY3Rpb25S
ZWN0c1dpdGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1ZSg2LCAyMDMsIDk5MCwgMjMyKSBdLCBb
c2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKKyAgICBjaGVja1JpY2hUZXh0VHlwZVBy
ZWNlZGVzUGxhaW5UZXh0VHlwZShzaW11bGF0b3IuZ2V0KCkpOworfQorCitURVNUKERyYWdBbmRE
cm9wVGVzdHMsIENvbnRlbnRFZGl0YWJsZU1vdmVQYXJhZ3JhcGhzKQoreworICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVj
dE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtb
RHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7
CisKKyAgICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VOYW1lZDpAInR3by1wYXJhZ3JhcGgtY29udGVu
dGVkaXRhYmxlIl07CisgICAgW3NpbXVsYXRvciB3YWl0Rm9ySW5wdXRTZXNzaW9uXTsKKyAgICBb
c2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMjUw
LCA0NTApXTsKKworICAgIE5TU3RyaW5nICpmaW5hbFRleHRDb250ZW50ID0gW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdOworICAgIE5T
VUludGVnZXIgZmlyc3RQYXJhZ3JhcGhPZmZzZXQgPSBbZmluYWxUZXh0Q29udGVudCByYW5nZU9m
U3RyaW5nOkAiVGhpcyBpcyB0aGUgZmlyc3QgcGFyYWdyYXBoIl0ubG9jYXRpb247CisgICAgTlNV
SW50ZWdlciBzZWNvbmRQYXJhZ3JhcGhPZmZzZXQgPSBbZmluYWxUZXh0Q29udGVudCByYW5nZU9m
U3RyaW5nOkAiVGhpcyBpcyB0aGUgc2Vjb25kIHBhcmFncmFwaCJdLmxvY2F0aW9uOworCisgICAg
RVhQRUNUX0ZBTFNFKGZpcnN0UGFyYWdyYXBoT2Zmc2V0ID09IE5TTm90Rm91bmQpOworICAgIEVY
UEVDVF9GQUxTRShzZWNvbmRQYXJhZ3JhcGhPZmZzZXQgPT0gTlNOb3RGb3VuZCk7CisgICAgRVhQ
RUNUX0dUKGZpcnN0UGFyYWdyYXBoT2Zmc2V0LCBzZWNvbmRQYXJhZ3JhcGhPZmZzZXQpOworICAg
IGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUoMTkwLCAx
MDAsIDEzMCwgMjApLCBtYWtlQ0dSZWN0VmFsdWUoMCwgMTIwLCAzMjAsIDEwMCksIG1ha2VDR1Jl
Y3RWYWx1ZSgwLCAyMjAsIDI1MiwgMjApIF0sIFtzaW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0
c10pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIERyYWdJbWFnZUZyb21Db250ZW50RWRp
dGFibGUpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRv
IHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhX
ZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
VGVzdFBhZ2VOYW1lZDpAImNvbnRlbnRlZGl0YWJsZS1hbmQtdGFyZ2V0Il07CisgICAgW3NpbXVs
YXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgMTAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMw
MCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCJQQVNTIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAInRhcmdldC50ZXh0Q29udGVudCJdKTsKK30KKworVEVTVChEcmFn
QW5kRHJvcFRlc3RzLCBUZXh0QXJlYVRvSW5wdXQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1Np
bXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIFt3
ZWJWaWV3IGxvYWRUZXN0UGFnZU5hbWVkOkAidGV4dGFyZWEtdG8taW5wdXQiXTsKKyAgICBbc2lt
dWxhdG9yIHdhaXRGb3JJbnB1dFNlc3Npb25dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1Bv
aW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNU
X0VRKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2UudmFsdWUi
XS5sZW5ndGgsIDBVTCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJIZWxsbyB3b3JsZCIsIFt3ZWJW
aWV3IGVkaXRvclZhbHVlXS5VVEY4U3RyaW5nKTsKKyAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0
aExvZ2dpbmcoQFsgbWFrZUNHUmVjdFZhbHVlKDEwMSwgMjQxLCA5OTAsIDIzMikgXSwgW3NpbXVs
YXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywg
U2luZ2xlUGxhaW5UZXh0V29yZFR5cGVJZGVudGlmaWVycykKK3sKKyAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtl
KDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdn
aW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisg
ICAgW3dlYlZpZXcgbG9hZFRlc3RQYWdlTmFtZWQ6QCJ0ZXh0YXJlYS10by1pbnB1dCJdOworICAg
IFtzaW11bGF0b3Igd2FpdEZvcklucHV0U2Vzc2lvbl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAInNvdXJjZS52YWx1ZSA9ICdwbmV1bW9ub3VsdHJhbWljcm9z
Y29waWNzaWxpY292b2xjYW5vY29uaW9zaXMnIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAInNvdXJjZS5zZWxlY3Rpb25TdGFydCA9IDAiXTsKKyAgICBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic291cmNlLnNlbGVjdGlvbkVuZCA9
IHNvdXJjZS52YWx1ZS5sZW5ndGgiXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1h
a2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIE5TSXRlbVByb3Zp
ZGVyICppdGVtUHJvdmlkZXIgPSBbc2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0
T2JqZWN0OworICAgIE5TQXJyYXkgKnJlZ2lzdGVyZWRUeXBlcyA9IFtpdGVtUHJvdmlkZXIgcmVn
aXN0ZXJlZFR5cGVJZGVudGlmaWVyc107CisgICAgRVhQRUNUX0VRKDFVTCwgcmVnaXN0ZXJlZFR5
cGVzLmNvdW50KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoWyhOU1N0cmluZyAqKWtVVFR5cGVVVEY4
UGxhaW5UZXh0IFVURjhTdHJpbmddLCBbcmVnaXN0ZXJlZFR5cGVzLmZpcnN0T2JqZWN0IFVURjhT
dHJpbmddKTsKKyAgICBFWFBFQ1RfRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAInNvdXJjZS52YWx1ZSJdLmxlbmd0aCwgMFVMKTsKKyAgICBFWFBFQ1RfRVEoVUlQcmVm
ZXJyZWRQcmVzZW50YXRpb25TdHlsZUlubGluZSwgaXRlbVByb3ZpZGVyLnByZWZlcnJlZFByZXNl
bnRhdGlvblN0eWxlKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoInBuZXVtb25vdWx0cmFtaWNyb3Nj
b3BpY3NpbGljb3ZvbGNhbm9jb25pb3NpcyIsIFt3ZWJWaWV3IGVkaXRvclZhbHVlXS5VVEY4U3Ry
aW5nKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBTaW5nbGVQbGFpblRleHRVUkxUeXBl
SWRlbnRpZmllcnMpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAg
ICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5p
dFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIFt3ZWJWaWV3IGxvYWRUZXN0UGFn
ZU5hbWVkOkAidGV4dGFyZWEtdG8taW5wdXQiXTsKKyAgICBbc2ltdWxhdG9yIHdhaXRGb3JJbnB1
dFNlc3Npb25dOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJz
b3VyY2UudmFsdWUgPSAnaHR0cHM6Ly93ZWJraXQub3JnLyciXTsKKyAgICBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic291cmNlLnNlbGVjdGlvblN0YXJ0ID0gMCJdOwor
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2Uuc2VsZWN0
aW9uRW5kID0gc291cmNlLnZhbHVlLmxlbmd0aCJdOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpD
R1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgTlNJ
dGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciA9IFtzaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVy
c10uZmlyc3RPYmplY3Q7CisgICAgTlNBcnJheSAqcmVnaXN0ZXJlZFR5cGVzID0gW2l0ZW1Qcm92
aWRlciByZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzXTsKKyAgICBFWFBFQ1RfRVEoMlVMLCByZWdp
c3RlcmVkVHlwZXMuY291bnQpOworICAgIEVYUEVDVF9XS19TVFJFUShbKE5TU3RyaW5nICopa1VU
VHlwZVVSTCBVVEY4U3RyaW5nXSwgW3JlZ2lzdGVyZWRUeXBlcy5maXJzdE9iamVjdCBVVEY4U3Ry
aW5nXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKFsoTlNTdHJpbmcgKilrVVRUeXBlVVRGOFBsYWlu
VGV4dCBVVEY4U3RyaW5nXSwgW3JlZ2lzdGVyZWRUeXBlcy5sYXN0T2JqZWN0IFVURjhTdHJpbmdd
KTsKKyAgICBFWFBFQ1RfRVEoMFVMLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAic291cmNlLnZhbHVlIl0ubGVuZ3RoKTsKKyAgICBFWFBFQ1RfRVEoVUlQcmVmZXJyZWRQ
cmVzZW50YXRpb25TdHlsZUlubGluZSwgaXRlbVByb3ZpZGVyLnByZWZlcnJlZFByZXNlbnRhdGlv
blN0eWxlKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd2Via2l0Lm9yZy8iLCBbd2Vi
VmlldyBlZGl0b3JWYWx1ZV0uVVRGOFN0cmluZyk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0
cywgTGlua1RvSW5wdXQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsK
KyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJsaW5rLWFuZC1p
bnB1dCJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0
b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRv
ciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07
CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8iLCBbd2ViVmll
dyBlZGl0b3JWYWx1ZV0uVVRGOFN0cmluZyk7CisKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUxvYWRp
bmdVUkwgPSBmYWxzZTsKKyAgICBVSUl0ZW1Qcm92aWRlciAqc291cmNlSXRlbVByb3ZpZGVyID0g
W3NpbXVsYXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdDsKKyAgICBbc291cmNl
SXRlbVByb3ZpZGVyIGxvYWRPYmplY3RPZkNsYXNzOltOU1VSTCBjbGFzc10gY29tcGxldGlvbkhh
bmRsZXI6XihpZCBvYmplY3QsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIE5TVVJMICp1cmwg
PSBvYmplY3Q7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUSgiSGVsbG8gd29ybGQiLCB1cmwuX3Rp
dGxlLlVURjhTdHJpbmcgPzogIiIpOworICAgICAgICBkb25lTG9hZGluZ1VSTCA9IHRydWU7Cisg
ICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lTG9hZGluZ1VSTCk7CisK
KyAgICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbc2ltdWxhdG9yIG9ic2VydmVkRXZl
bnROYW1lc107CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09i
amVjdDpAImRyYWdlbnRlciJdKTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVz
IGNvbnRhaW5zT2JqZWN0OkAiZHJhZ292ZXIiXSk7CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVk
RXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyb3AiXSk7CisgICAgY2hlY2tTZWxlY3Rpb25S
ZWN0c1dpdGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1ZSgxMDEsIDI3MywgMjA1NywgMjMyKSBd
LCBbc2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKKyAgICBjaGVja1R5cGVJZGVudGlm
aWVySXNSZWdpc3RlcmVkQXRJbmRleChzaW11bGF0b3IuZ2V0KCksIChOU1N0cmluZyAqKWtVVFR5
cGVVUkwsIDApOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEJhY2tncm91bmRJbWFnZUxp
bmtUb0lucHV0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYmFja2dyb3VuZC1pbWFn
ZS1saW5rLWFuZC1pbnB1dCJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJh
Z2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Cisg
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtl
KDEwMCwgMzAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNv
bS8iLCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0uVVRGOFN0cmluZyk7CisKKyAgICBOU0FycmF5ICpv
YnNlcnZlZEV2ZW50TmFtZXMgPSBbc2ltdWxhdG9yIG9ic2VydmVkRXZlbnROYW1lc107CisgICAg
RVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyYWdlbnRl
ciJdKTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0
OkAiZHJhZ292ZXIiXSk7CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250
YWluc09iamVjdDpAImRyb3AiXSk7CisgICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5n
KEBbIG1ha2VDR1JlY3RWYWx1ZSgxMDEsIDI0MSwgMjA1NywgMjMyKSBdLCBbc2ltdWxhdG9yIGZp
bmFsU2VsZWN0aW9uUmVjdHNdKTsKKyAgICBjaGVja1R5cGVJZGVudGlmaWVySXNSZWdpc3RlcmVk
QXRJbmRleChzaW11bGF0b3IuZ2V0KCksIChOU1N0cmluZyAqKWtVVFR5cGVVUkwsIDApOworfQor
CitURVNUKERyYWdBbmREcm9wVGVzdHMsIENhblByZXZlbnRTdGFydCkKK3sKKyAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
VGVzdFBhZ2VOYW1lZDpAInByZXZlbnQtc3RhcnQiXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0g
YWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmll
dy5nZXQoKV0pOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0
bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX0VRKERyYWdBbmREcm9wUGhh
c2VDYW5jZWxsZWQsIFtzaW11bGF0b3IgcGhhc2VdKTsKKyAgICBFWFBFQ1RfRkFMU0UoW3dlYlZp
ZXcgZWRpdG9yQ29udGFpbnNJbWFnZUVsZW1lbnRdKTsKKworICAgIE5TQXJyYXkgKm9ic2VydmVk
RXZlbnROYW1lcyA9IFtzaW11bGF0b3Igb2JzZXJ2ZWRFdmVudE5hbWVzXTsKKyAgICBFWFBFQ1Rf
RkFMU0UoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyYWdlbnRlciJdKTsK
KyAgICBFWFBFQ1RfRkFMU0UoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRy
YWdvdmVyIl0pOworICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBdLCBbc2lt
dWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3Rz
LCBDYW5QcmV2ZW50T3BlcmF0aW9uKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1
MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAicHJl
dmVudC1vcGVyYXRpb24iXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdn
aW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAg
IFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgx
MDAsIDMwMCldOworCisgICAgRVhQRUNUX0ZBTFNFKFt3ZWJWaWV3IGVkaXRvckNvbnRhaW5zSW1h
Z2VFbGVtZW50XSk7CisKKyAgICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbc2ltdWxh
dG9yIG9ic2VydmVkRXZlbnROYW1lc107CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnRO
YW1lcyBjb250YWluc09iamVjdDpAImRyYWdlbnRlciJdKTsKKyAgICBFWFBFQ1RfVFJVRShbb2Jz
ZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJhZ292ZXIiXSk7CisgICAgY2hlY2tT
ZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIF0sIFtzaW11bGF0b3IgZmluYWxTZWxlY3Rpb25S
ZWN0c10pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEVudGVyQW5kTGVhdmVFdmVudHMp
Cit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJsaW5rLWFuZC1pbnB1dCJdOworCisgICAg
YXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9p
bnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgNDUwKV07CisKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEoIiIsIFt3ZWJWaWV3IGVkaXRvclZhbHVlXS5VVEY4U3RyaW5nKTsKKworICAgIE5T
QXJyYXkgKm9ic2VydmVkRXZlbnROYW1lcyA9IFtzaW11bGF0b3Igb2JzZXJ2ZWRFdmVudE5hbWVz
XTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAi
ZHJhZ2VudGVyIl0pOworICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFp
bnNPYmplY3Q6QCJkcmFnb3ZlciJdKTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5h
bWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJhZ2xlYXZlIl0pOworICAgIEVYUEVDVF9GQUxTRShbb2Jz
ZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJvcCJdKTsKKyAgICBjaGVja1NlbGVj
dGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgXSwgW3NpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3Rz
XSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgQ2FuU3RhcnREcmFnT25EaXZXaXRoRHJh
Z2dhYmxlQXR0cmlidXRlKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7
CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiY3VzdG9tLWRy
YWdnYWJsZS1kaXYiXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5n
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtz
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAw
LCAyNTApXTsKKworICAgIEVYUEVDVF9HVChbc2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNd
LmNvdW50LCAwVUwpOworICAgIE5TSXRlbVByb3ZpZGVyICppdGVtUHJvdmlkZXIgPSBbc2ltdWxh
dG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0OworICAgIEVYUEVDVF9FUShVSVBy
ZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlSW5saW5lLCBpdGVtUHJvdmlkZXIucHJlZmVycmVkUHJl
c2VudGF0aW9uU3R5bGUpOworICAgIEVYUEVDVF9UUlVFKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCIhIWRlc3RpbmF0aW9uLnF1ZXJ5U2VsZWN0b3IoJyNpdGVtJykiXSk7
CisgICAgRVhQRUNUX1dLX1NUUkVRKEAiUEFTUyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJpdGVtLnRleHRDb250ZW50Il0pOworfQorCitURVNUKERyYWdBbmREcm9w
VGVzdHMsIEV4dGVybmFsU291cmNlUGxhaW5UZXh0VG9JRnJhbWUpCit7CisgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRl
c3RQYWdlTmFtZWQ6QCJjb250ZW50ZWRpdGFibGUtaW4taWZyYW1lIl07CisKKyAgICBhdXRvIGl0
ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAg
IFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6QCJIZWxsbyB3b3JsZCIgdmlzaWJpbGl0eTpV
SUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOworCisgICAg
YXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0
ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVu
RnJvbTpDR1BvaW50TWFrZSgwLCAwKSB0bzpDR1BvaW50TWFrZSgxNjAsIDI1MCldOworCisgICAg
YXV0byBjb250YWluZXJMZWZ0ID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAImNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0Il0uZmxvYXRWYWx1ZTsK
KyAgICBhdXRvIGNvbnRhaW5lclRvcCA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIl0uZmxvYXRWYWx1
ZTsKKyAgICBhdXRvIGNvbnRhaW5lcldpZHRoID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAImNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCJdLmZs
b2F0VmFsdWU7CisgICAgYXV0byBjb250YWluZXJIZWlnaHQgPSBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhl
aWdodCJdLmZsb2F0VmFsdWU7CisgICAgY2hlY2tEcmFnQ2FyZXRSZWN0SXNDb250YWluZWRJblJl
Y3QoW3NpbXVsYXRvciBsYXN0S25vd25EcmFnQ2FyZXRSZWN0XSwgQ0dSZWN0TWFrZShjb250YWlu
ZXJMZWZ0LCBjb250YWluZXJUb3AsIGNvbnRhaW5lcldpZHRoLCBjb250YWluZXJIZWlnaHQpKTsK
K30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZUlubGluZVRleHRUb0Zp
bGVJbnB1dCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2FkaW5nIl07
CisKKyAgICBhdXRvIHNpbXVsYXRlZEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92
aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXIgc2V0UHJlZmVy
cmVkUHJlc2VudGF0aW9uU3R5bGU6VUlQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUlubGluZV07
CisgICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRlciByZWdpc3Rlck9iamVjdDpAIlRoaXMgaXRlbSBw
cm92aWRlciByZXF1ZXN0ZWQgaW5saW5lIHByZXNlbnRhdGlvbiBzdHlsZS4iIHZpc2liaWxpdHk6
TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGxdOworCisgICAgYXV0byBz
aW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92
aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsK
KworICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBF
eHRlcm5hbFNvdXJjZUpTT05Ub0ZpbGVJbnB1dCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAs
IDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1l
ZDpAImZpbGUtdXBsb2FkaW5nIl07CisKKyAgICBhdXRvIHNpbXVsYXRlZEpTT05JdGVtUHJvdmlk
ZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBOU0RhdGEg
Kmpzb25EYXRhID0gW0AieyBcImZvb1wiOiBcImJhclwiLCAgXCJiYXJcIjogXCJiYXpcIiB9IiBk
YXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisgICAgW3NpbXVsYXRlZEpT
T05JdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmll
cjooTlNTdHJpbmcgKilrVVRUeXBlSlNPTiB3aXRoRGF0YTpqc29uRGF0YV07CisKKyAgICBhdXRv
IHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhX
ZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVBy
b3ZpZGVyczpAWyBzaW11bGF0ZWRKU09OSXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11
bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAx
MDApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiYXBwbGljYXRpb24vanNvbiIsIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSk7Cit9CisKK1RF
U1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VJbWFnZVRvRmlsZUlucHV0KQorewor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsKKworICAgIGF1dG8g
c2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxs
b2NdIGluaXRdKTsKKyAgICBOU0RhdGEgKmltYWdlRGF0YSA9IFVJSW1hZ2VKUEVHUmVwcmVzZW50
YXRpb24odGVzdEljb25JbWFnZSgpLCAwLjUpOworICAgIFtzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92
aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmlu
ZyAqKWtVVFR5cGVKUEVHIHdpdGhEYXRhOmltYWdlRGF0YV07CisKKyAgICBhdXRvIHNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpA
WyBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1
bkZyb206Q0dQb2ludE1ha2UoMjAwLCAxMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMTAwKV07CisK
KyAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07CisgICAgRVhQRUNUX1dLX1NUUkVRKCJpbWFnZS9q
cGVnIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0
cywgRXh0ZXJuYWxTb3VyY2VIVE1MVG9VcGxvYWRBcmVhKQoreworICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFn
ZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsKKworICAgIGF1dG8gc2ltdWxhdGVkSFRNTEl0ZW1Q
cm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5T
RGF0YSAqaHRtbERhdGEgPSBbQCI8Ym9keSBjb250ZW50ZWRpdGFibGU+PC9ib2R5PiIgZGF0YVVz
aW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOworICAgIFtzaW11bGF0ZWRIVE1MSXRl
bVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5T
U3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERhdGE6aHRtbERhdGFdOworICAgIFtzaW11bGF0ZWRI
VE1MSXRlbVByb3ZpZGVyIHNldFN1Z2dlc3RlZE5hbWU6QCJpbmRleC5odG1sIl07CisKKyAgICBh
dXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdp
dGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldFNob3VsZEFsbG93
TW92ZU9wZXJhdGlvbjpOT107CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRl
cnM6QFsgc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9y
IHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAzMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07
CisKKyAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07CisgICAgRVhQRUNUX1dLX1NUUkVRKCJ0ZXh0
L2h0bWwiLCBvdXRwdXRWYWx1ZS5VVEY4U3RyaW5nKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRl
c3RzLCBFeHRlcm5hbFNvdXJjZU1vdmVPcGVyYXRpb25Ob3RBbGxvd2VkKQoreworICAgIGF1dG8g
d2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNH
UmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxv
YWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsKKyAgICBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidXBsb2FkLmRyb3BFZmZlY3QgPSAnbW92ZSciXTsKKwor
ICAgIGF1dG8gc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92
aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqaHRtbERhdGEgPSBbQCI8Ym9keSBjb250
ZW50ZWRpdGFibGU+PC9ib2R5PiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmddOworICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2Vu
dGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERhdGE6
aHRtbERhdGFdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11
bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVs
YXRvciBzZXRTaG91bGRBbGxvd01vdmVPcGVyYXRpb246Tk9dOworICAgIFtzaW11bGF0b3Igc2V0
RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0KCkg
XV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMzAwKSB0bzpDR1Bv
aW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0pOworfQorCitURVNU
KERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNlWklQQXJjaGl2ZUFuZFVSTFRvU2luZ2xl
RmlsZUlucHV0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmci
XTsKKworICAgIGF1dG8gYXJjaGl2ZVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVy
IGFsbG9jXSBpbml0XSk7CisgICAgW2FyY2hpdmVQcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNl
bnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVaaXBBcmNoaXZlIHdp
dGhEYXRhOnRlc3RaSVBBcmNoaXZlKCldOworCisgICAgYXV0byB1cmxQcm92aWRlciA9IGFkb3B0
TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFt1cmxQcm92aWRlciByZWdp
c3Rlck9iamVjdDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd2Via2l0Lm9yZyJdIHZp
c2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxs
XTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFs
bG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3Igc2V0
RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGFyY2hpdmVQcm92aWRlci5nZXQoKSwgdXJsUHJvdmlk
ZXIuZ2V0KCkgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAw
KSB0bzpDR1BvaW50TWFrZSgxMDAsIDEwMCldOworCisgICAgTlNTdHJpbmcgKm91dHB1dFZhbHVl
ID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJd
OworICAgIEVYUEVDVF9XS19TVFJFUSgiYXBwbGljYXRpb24vemlwIiwgb3V0cHV0VmFsdWUuVVRG
OFN0cmluZyk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VaSVBB
cmNoaXZlVG9VcGxvYWRBcmVhKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDAp
XSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11
cGxvYWRpbmciXTsKKworICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVBy
b3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXBy
ZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVaaXBBcmNoaXZl
IHdpdGhEYXRhOnRlc3RaSVBBcmNoaXZlKCldOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9w
dE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3Lmdl
dCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVBy
b3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAs
IDMwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIE5TU3RyaW5nICpvdXRwdXRW
YWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFs
dWUiXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImFwcGxpY2F0aW9uL3ppcCIsIG91dHB1dFZhbHVl
LlVURjhTdHJpbmcpOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNl
SW1hZ2VBbmRIVE1MVG9TaW5nbGVGaWxlSW5wdXQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFt
ZWQ6QCJmaWxlLXVwbG9hZGluZyJdOworCisgICAgYXV0byBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92
aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0
YSAqaW1hZ2VEYXRhID0gVUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCks
IDAuNSk7CisgICAgW3NpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJl
c2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUpQRUcgd2l0aERh
dGE6aW1hZ2VEYXRhXTsKKworICAgIGF1dG8gc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciA9IGFk
b3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqaHRtbERh
dGEgPSBbQCI8Ym9keSBjb250ZW50ZWRpdGFibGU+PC9ib2R5PiIgZGF0YVVzaW5nRW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmddOworICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHJl
Z2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VU
VHlwZUhUTUwgd2l0aERhdGE6aHRtbERhdGFdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9w
dE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3Lmdl
dCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxh
dGVkSFRNTEl0ZW1Qcm92aWRlci5nZXQoKSwgc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIuZ2V0
KCkgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAwKSB0bzpD
R1BvaW50TWFrZSgxMDAsIDEwMCldOworCisgICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOworICAg
IEVYUEVDVF9XS19TVFJFUSgiIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7Cit9CisKK1RFU1Qo
RHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VJbWFnZUFuZEhUTUxUb011bHRpcGxlRmls
ZUlucHV0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsK
KyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaW5wdXQuc2V0QXR0
cmlidXRlKCdtdWx0aXBsZScsICcnKSJdOworCisgICAgYXV0byBzaW11bGF0ZWRJbWFnZUl0ZW1Q
cm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5T
RGF0YSAqaW1hZ2VEYXRhID0gVUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdl
KCksIDAuNSk7CisgICAgW3NpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJl
cHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUpQRUcgd2l0
aERhdGE6aW1hZ2VEYXRhXTsKKworICAgIGF1dG8gc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciA9
IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqaHRt
bERhdGEgPSBbQCI8Ym9keSBjb250ZW50ZWRpdGFibGU+PC9ib2R5PiIgZGF0YVVzaW5nRW5jb2Rp
bmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOworICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVy
IHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICop
a1VUVHlwZUhUTUwgd2l0aERhdGE6aHRtbERhdGFdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBh
ZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3
LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2lt
dWxhdGVkSFRNTEl0ZW1Qcm92aWRlci5nZXQoKSwgc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIu
Z2V0KCkgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAwKSB0
bzpDR1BvaW50TWFrZSgxMDAsIDEwMCldOworCisgICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0g
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOwor
ICAgIEVYUEVDVF9XS19TVFJFUSgiaW1hZ2UvanBlZywgdGV4dC9odG1sIiwgb3V0cHV0VmFsdWUu
VVRGOFN0cmluZyk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VJ
bWFnZUFuZEhUTUxUb1VwbG9hZEFyZWEpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAs
IDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJm
aWxlLXVwbG9hZGluZyJdOworCisgICAgYXV0byBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciA9
IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqaW1h
Z2VEYXRhID0gVUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSk7
CisgICAgW3NpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0
aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUpQRUcgd2l0aERhdGE6aW1h
Z2VEYXRhXTsKKworICAgIGF1dG8gZmlyc3RTaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyID0gYWRv
cHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgTlNEYXRhICpmaXJzdEhU
TUxEYXRhID0gW0AiPGJvZHkgY29udGVudGVkaXRhYmxlPjwvYm9keT4iIGRhdGFVc2luZ0VuY29k
aW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICBbZmlyc3RTaW11bGF0ZWRIVE1MSXRlbVBy
b3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3Ry
aW5nICopa1VUVHlwZUhUTUwgd2l0aERhdGE6Zmlyc3RIVE1MRGF0YV07CisKKyAgICBhdXRvIHNl
Y29uZFNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIg
YWxsb2NdIGluaXRdKTsKKyAgICBOU0RhdGEgKnNlY29uZEhUTUxEYXRhID0gW0AiPGh0bWw+PGJv
ZHk+aGVsbG8gd29ybGQ8L2JvZHk+PC9odG1sPiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3Ry
aW5nRW5jb2RpbmddOworICAgIFtzZWNvbmRTaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHJlZ2lz
dGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlw
ZUhUTUwgd2l0aERhdGE6c2Vjb25kSFRNTERhdGFdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBh
ZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3
LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRTaG91bGRBbGxvd01vdmVPcGVyYXRpb246Tk9d
OworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZElt
YWdlSXRlbVByb3ZpZGVyLmdldCgpLCBmaXJzdFNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0
KCksIHNlY29uZFNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW3NpbXVs
YXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMzAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMw
MCldOworCisgICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOworICAgIEVYUEVDVF9XS19TVFJFUSgi
aW1hZ2UvanBlZywgdGV4dC9odG1sLCB0ZXh0L2h0bWwiLCBvdXRwdXRWYWx1ZS5VVEY4U3RyaW5n
KTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZUhUTUxUb0NvbnRl
bnRFZGl0YWJsZSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAg
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250
ZW50ZWRpdGFibGUiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkiXTsKKworICAgIGF1dG8gc2ltdWxh
dG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6
d2ViVmlldy5nZXQoKV0pOworICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRl
bVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgTlNEYXRhICpodG1sRGF0YSA9IFtAIjxoMT5U
aGlzIGlzIGEgdGVzdDwvaDE+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z107CisgICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJ
ZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOmh0bWxEYXRhXTsKKyAg
ICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0
KCkgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpD
R1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgTlNTdHJpbmcgKnRleHRDb250ZW50ID0gW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJd
OworICAgIEVYUEVDVF9XS19TVFJFUSgiVGhpcyBpcyBhIHRlc3QiLCB0ZXh0Q29udGVudC5VVEY4
U3RyaW5nKTsKKyAgICBFWFBFQ1RfVFJVRShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiISFlZGl0b3IucXVlcnlTZWxlY3RvcignaDEnKSJdLmJvb2xWYWx1ZSk7Cit9CisK
K1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VCb2xkU3lzdGVtQXR0cmlidXRl
ZFN0cmluZ1RvQ29udGVudEVkaXRhYmxlKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIw
LCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAi
YXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSJdOworCisg
ICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGlu
aXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgTlNEaWN0aW9uYXJ5ICp0ZXh0QXR0
cmlidXRlcyA9IEB7IE5TRm9udEF0dHJpYnV0ZU5hbWU6IFtVSUZvbnQgYm9sZFN5c3RlbUZvbnRP
ZlNpemU6MjBdIH07CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpyaWNoVGV4dCA9IFtbTlNBdHRy
aWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIlRoaXMgaXMgYSB0ZXN0IiBhdHRy
aWJ1dGVzOnRleHRBdHRyaWJ1dGVzXTsKKyAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMo
W1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdFdpdGhPYmplY3Q6cmljaFRleHRdKTsKKyAgICBb
c2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkg
XV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1Bv
aW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCJUaGlzIGlzIGEgdGVz
dCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENv
bnRlbnQiXS5VVEY4U3RyaW5nKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5h
bFNvdXJjZUNvbG9yZWRBdHRyaWJ1dGVkU3RyaW5nVG9Db250ZW50RWRpdGFibGUpCit7CisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91
c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07CisgICAg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJl
bW92ZUFsbFJhbmdlcygpIl07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFn
Z2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAg
ICBOU0RpY3Rpb25hcnkgKnRleHRBdHRyaWJ1dGVzID0gQHsgTlNGb3JlZ3JvdW5kQ29sb3JBdHRy
aWJ1dGVOYW1lOiBbVUlDb2xvciByZWRDb2xvcl0gfTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcg
KnJpY2hUZXh0ID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAi
VGhpcyBpcyBhIHRlc3QiIGF0dHJpYnV0ZXM6dGV4dEF0dHJpYnV0ZXNdOworICAgIGF1dG8gaXRl
bVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0V2l0aE9iamVj
dDpyaWNoVGV4dF0pOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBb
IGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1h
a2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBFWFBFQ1RfV0tf
U1RSRVEoInJnYigyNTUsIDAsIDApIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAImdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigncCcpKS5jb2xv
ciJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlRoaXMgaXMgYSB0ZXN0IiwgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdLlVURjhTdHJp
bmcpOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNlTXVsdGlwbGVV
UkxzVG9Db250ZW50RWRpdGFibGUpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRv
Zm9jdXMtY29udGVudGVkaXRhYmxlIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07CisKKyAgICBh
dXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdp
dGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBhdXRvIGZpcnN0SXRlbSA9IGFkb3B0TlMo
W1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtmaXJzdEl0ZW0gcmVnaXN0ZXJP
YmplY3Q6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBsZS5jb20vaXBob25l
LyJdIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmls
aXR5QWxsXTsKKyAgICBhdXRvIHNlY29uZEl0ZW0gPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIg
YWxsb2NdIGluaXRdKTsKKyAgICBbc2Vjb25kSXRlbSByZWdpc3Rlck9iamVjdDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpAImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9tYWMvIl0gdmlzaWJpbGl0eTpVSUl0
ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOworICAgIGF1dG8g
dGhpcmRJdGVtID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAg
W3RoaXJkSXRlbSByZWdpc3Rlck9iamVjdDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8v
d2Via2l0Lm9yZy8iXSB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRp
b25zVmlzaWJpbGl0eUFsbF07CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRl
cnM6QFsgZmlyc3RJdGVtLmdldCgpLCBzZWNvbmRJdGVtLmdldCgpLCB0aGlyZEl0ZW0uZ2V0KCkg
XV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1Bv
aW50TWFrZSgxMDAsIDMwMCldOworCisgICAgTlNBcnJheSAqZHJvcHBlZFVSTHMgPSBbd2ViVmll
dyBvYmplY3RCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiQXJyYXkuZnJvbShlZGl0b3IucXVlcnlT
ZWxlY3RvckFsbCgnYScpKS5tYXAoYSA9PiBhLmhyZWYpIl07CisgICAgRVhQRUNUX0VRKDNVTCwg
ZHJvcHBlZFVSTHMuY291bnQpOworICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93d3cuYXBw
bGUuY29tL2lwaG9uZS8iLCBkcm9wcGVkVVJMc1swXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJo
dHRwczovL3d3dy5hcHBsZS5jb20vbWFjLyIsIGRyb3BwZWRVUkxzWzFdKTsKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEoImh0dHBzOi8vd2Via2l0Lm9yZy8iLCBkcm9wcGVkVVJMc1syXSk7CisKKyAgICBO
U0FycmF5ICpsaW5rc1NlcGFyYXRlZEJ5TGluZSA9IFtbd2ViVmlldyBvYmplY3RCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiZWRpdG9yLmlubmVyVGV4dCJdIGNvbXBvbmVudHNTZXBhcmF0ZWRCeUNo
YXJhY3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQgbmV3bGluZUNoYXJhY3RlclNldF1dOworICAg
IEVYUEVDVF9FUSgzVUwsIGxpbmtzU2VwYXJhdGVkQnlMaW5lLmNvdW50KTsKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUvIiwgbGlua3NTZXBhcmF0ZWRC
eUxpbmVbMF0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93d3cuYXBwbGUuY29tL21h
Yy8iLCBsaW5rc1NlcGFyYXRlZEJ5TGluZVsxXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJodHRw
czovL3dlYmtpdC5vcmcvIiwgbGlua3NTZXBhcmF0ZWRCeUxpbmVbMl0pOworfQorCitURVNUKERy
YWdBbmREcm9wVGVzdHMsIFJlc3BlY3RzRXh0ZXJuYWxTb3VyY2VGaWRlbGl0eVJhbmtpbmdzKQor
eworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3lu
Y2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJd
OworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rp
b24oKS5yZW1vdmVBbGxSYW5nZXMoKSJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5T
KFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgp
XSk7CisKKyAgICAvLyBIZXJlLCBvdXIgc291cmNlIGl0ZW0gcHJvdmlkZXIgdmVuZHMgdHdvIHJl
cHJlc2VudGF0aW9uczogcGxhaW4gdGV4dCwgYW5kIHRoZW4gYW4gaW1hZ2UuIElmIHdlIGRvbid0
IHJlc3BlY3QgdGhlCisgICAgLy8gZmlkZWxpdHkgb3JkZXIgcmVxdWVzdGVkIGJ5IHRoZSBzb3Vy
Y2UsIHdlJ2xsIGVuZCB1cCBhc3N1bWluZyB0aGF0IHRoZSBpbWFnZSBpcyBhIGhpZ2hlciBmaWRl
bGl0eSByZXByZXNlbnRhdGlvbgorICAgIC8vIHRoYW4gdGhlIHBsYWluIHRleHQsIGFuZCBlcnJv
bmVvdXNseSBpbnNlcnQgdGhlIGltYWdlLiBJZiB3ZSByZXNwZWN0IHNvdXJjZSBmaWRlbGl0aWVz
LCB3ZSdsbCBpbnNlcnQgdGV4dCByYXRoZXIKKyAgICAvLyB0aGFuIGFuIGltYWdlLgorICAgIGF1
dG8gc2ltdWxhdGVkSXRlbVByb3ZpZGVyV2l0aFRleHRGaXJzdCA9IGFkb3B0TlMoW1tVSUl0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXJXaXRoVGV4
dEZpcnN0IHJlZ2lzdGVyT2JqZWN0OkAiSGVsbG8gd29ybGQiIHZpc2liaWxpdHk6VUlJdGVtUHJv
dmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKKyAgICBbc2ltdWxhdGVk
SXRlbVByb3ZpZGVyV2l0aFRleHRGaXJzdCByZWdpc3Rlck9iamVjdDp0ZXN0SWNvbkltYWdlKCkg
dmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlB
bGxdOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRl
ZEl0ZW1Qcm92aWRlcldpdGhUZXh0Rmlyc3QuZ2V0KCkgXV07CisKKyAgICBbc2ltdWxhdG9yIHJ1
bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Cisg
ICAgRVhQRUNUX1dLX1NUUkVRKCJIZWxsbyB3b3JsZCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX0ZBTFNF
KFt3ZWJWaWV3IGVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk7CisgICAgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci5pbm5lckhUTUwgPSAnJyJdOworCisg
ICAgLy8gTm93IHdlIHJlZ2lzdGVyIHRoZSBpdGVtIHByb3ZpZGVycyBpbiByZXZlcnNlLCBhbmQg
ZXhwZWN0IHRoZSBpbWFnZSB0byBiZSBpbnNlcnRlZCBpbnN0ZWFkIG9mIHRleHQuCisgICAgYXV0
byBzaW11bGF0ZWRJdGVtUHJvdmlkZXJXaXRoSW1hZ2VGaXJzdCA9IGFkb3B0TlMoW1tVSUl0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXJXaXRoSW1h
Z2VGaXJzdCByZWdpc3Rlck9iamVjdDp0ZXN0SWNvbkltYWdlKCkgdmlzaWJpbGl0eTpVSUl0ZW1Q
cm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOworICAgIFtzaW11bGF0
ZWRJdGVtUHJvdmlkZXJXaXRoSW1hZ2VGaXJzdCByZWdpc3Rlck9iamVjdDpAIkhlbGxvIHdvcmxk
IiB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0
eUFsbF07CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxh
dGVkSXRlbVByb3ZpZGVyV2l0aEltYWdlRmlyc3QuZ2V0KCkgXV07CisKKyAgICBbc2ltdWxhdG9y
IHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07
CisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9UUlVFKFt3ZWJWaWV3
IGVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0
cywgRXh0ZXJuYWxTb3VyY2VVVEY4UGxhaW5UZXh0T25seSkKK3sKKyAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtl
KDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBh
Z2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKKworICAgIE5TU3RyaW5nICp0
ZXh0UGF5bG9hZCA9IEAiQ2VjaSBuJ2VzdCBwYXMgdW5lIHN0cmluZyI7CisgICAgYXV0byBzaW11
bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmll
dzp3ZWJWaWV3LmdldCgpXSk7CisgICAgYXV0byBzaW11bGF0ZWRJdGVtUHJvdmlkZXIgPSBhZG9w
dE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbc2ltdWxhdGVkSXRlbVBy
b3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KF9fYnJp
ZGdlIE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRleHQgb3B0aW9uczpuaWwgbG9hZEhhbmRs
ZXI6Xk5TUHJvZ3Jlc3MgKihVSUl0ZW1Qcm92aWRlckRhdGFMb2FkQ29tcGxldGlvbkJsb2NrIGNv
bXBsZXRpb25CbG9jaykKKyAgICB7CisgICAgICAgIGNvbXBsZXRpb25CbG9jayhbdGV4dFBheWxv
YWQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddLCBuaWwpOworICAgICAg
ICByZXR1cm4gW05TUHJvZ3Jlc3MgZGlzY3JldGVQcm9ncmVzc1dpdGhUb3RhbFVuaXRDb3VudDox
MDBdOworICAgIH1dOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBb
IHNpbXVsYXRlZEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisgICAgRVhQ
RUNUX1dLX1NUUkVRKHRleHRQYXlsb2FkLlVURjhTdHJpbmcsIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXS5VVEY4U3RyaW5nKTsKKyAg
ICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgbWFrZUNHUmVjdFZhbHVlKDEsIDIw
MSwgMTkzNiwgMjI3KSBdLCBbc2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKK30KKwor
VEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZUpQRUdPbmx5KQoreworICAgIGF1
dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
OkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNs
eUxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOworCisgICAg
YXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgYXV0byBzaW11bGF0ZWRJdGVtUHJvdmlk
ZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbc2ltdWxh
dGVkSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZp
ZXI6KF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZUpQRUcgb3B0aW9uczpuaWwgbG9hZEhhbmRs
ZXI6Xk5TUHJvZ3Jlc3MgKihVSUl0ZW1Qcm92aWRlckRhdGFMb2FkQ29tcGxldGlvbkJsb2NrIGNv
bXBsZXRpb25CbG9jaykKKyAgICB7CisgICAgICAgIGNvbXBsZXRpb25CbG9jayhVSUltYWdlSlBF
R1JlcHJlc2VudGF0aW9uKHRlc3RJY29uSW1hZ2UoKSwgMC41KSwgbmlsKTsKKyAgICAgICAgcmV0
dXJuIFtOU1Byb2dyZXNzIGRpc2NyZXRlUHJvZ3Jlc3NXaXRoVG90YWxVbml0Q291bnQ6MTAwXTsK
KyAgICB9XTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11
bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9p
bnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworICAgIEVYUEVDVF9U
UlVFKFt3ZWJWaWV3IGVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk7CisgICAgY2hlY2tTZWxl
Y3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1ZSgxLCAyMDEsIDIxNSwgMTc0
KSBdLCBbc2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKK30KKworVEVTVChEcmFnQW5k
RHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZVRpdGxlZE5TVVJMKQoreworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0
UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOworICAgIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5n
ZXMoKSJdOworCisgICAgTlNVUkwgKnRpdGxlZFVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
aHR0cHM6Ly93d3cuYXBwbGUuY29tIl07CisgICAgdGl0bGVkVVJMLl90aXRsZSA9IEAiQXBwbGUi
OworICAgIGF1dG8gc2ltdWxhdGVkSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3Zp
ZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRlciByZWdpc3Rlck9i
amVjdDp0aXRsZWRVUkwgdmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0
aW9uc1Zpc2liaWxpdHlBbGxdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJh
Z2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Cisg
ICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVBy
b3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAs
IDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgi
QXBwbGUiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnF1
ZXJ5U2VsZWN0b3IoJ2EnKS50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImh0
dHBzOi8vd3d3LmFwcGxlLmNvbS8iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAiZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ2EnKS5ocmVmIl0pOworfQorCitURVNUKERyYWdB
bmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNlRmlsZVVSTCkKK3sKKyAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtl
KDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBh
Z2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKKyAgICBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2Vz
KCkiXTsKKworICAgIE5TVVJMICpVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpAImZpbGU6Ly8v
c29tZS9maWxlL3RoYXQvaXMvbm90L3JlYWwiXTsKKyAgICBVSUl0ZW1Qcm92aWRlciAqc2ltdWxh
dGVkSXRlbVByb3ZpZGVyID0gW1VJSXRlbVByb3ZpZGVyIGl0ZW1Qcm92aWRlcldpdGhVUkw6VVJM
IHRpdGxlOkAiIl07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1Np
bXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2lt
dWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXIg
XV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1Bv
aW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX0ZBTFNFKFtbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiISFlZGl0b3IucXVlcnlTZWxlY3RvcignYScpIl0gYm9v
bFZhbHVlXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJIZWxsbyB3b3JsZFxuZmlsZTovLy9zb21l
L2ZpbGUvdGhhdC9pcy9ub3QvcmVhbCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVyVGV4dCJdKTsKK30KKworVEVTVChEcmFnQW5kRHJv
cFRlc3RzLCBFeHRlcm5hbFNvdXJjZU92ZXJyaWRlRHJvcEZpbGVVcGxvYWQpCit7CisgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5
TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOworCisgICAgYXV0byBzaW11bGF0
ZWRJbWFnZUl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5p
dF0pOworICAgIE5TRGF0YSAqaW1hZ2VEYXRhID0gVUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0
ZXN0SWNvbkltYWdlKCksIDAuNSk7CisgICAgW3NpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyIHJl
Z2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VU
VHlwZUpQRUcgd2l0aERhdGE6aW1hZ2VEYXRhXTsKKworICAgIGF1dG8gc2ltdWxhdGVkSFRNTEl0
ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAg
IE5TRGF0YSAqZmlyc3RIVE1MRGF0YSA9IFtAIjxib2R5IGNvbnRlbnRlZGl0YWJsZT48L2JvZHk+
IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisgICAgW3NpbXVsYXRl
ZEhUTUxJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRp
ZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3aXRoRGF0YTpmaXJzdEhUTUxEYXRhXTsKKyAg
ICBbc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciBzZXRQcmVmZXJyZWRQcmVzZW50YXRpb25TdHls
ZTpVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlQXR0YWNobWVudF07CisKKyAgICBhdXRvIHNp
bXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJW
aWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldE92ZXJyaWRlUGVyZm9ybURy
b3BCbG9jazpeTlNBcnJheTxVSURyYWdJdGVtICo+ICooaWQgPFVJRHJvcFNlc3Npb24+IHNlc3Np
b24pCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMlVMLCBzZXNzaW9uLml0ZW1zLmNvdW50KTsK
KyAgICAgICAgVUlEcmFnSXRlbSAqZmlyc3RJdGVtID0gc2Vzc2lvbi5pdGVtc1swXTsKKyAgICAg
ICAgVUlEcmFnSXRlbSAqc2Vjb25kSXRlbSA9IHNlc3Npb24uaXRlbXNbMV07CisgICAgICAgIEVY
UEVDVF9UUlVFKFtmaXJzdEl0ZW0uaXRlbVByb3ZpZGVyLnJlZ2lzdGVyZWRUeXBlSWRlbnRpZmll
cnMgaXNFcXVhbDpAWyAoTlNTdHJpbmcgKilrVVRUeXBlSlBFRyBdXSk7CisgICAgICAgIEVYUEVD
VF9UUlVFKFtzZWNvbmRJdGVtLml0ZW1Qcm92aWRlci5yZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJz
IGlzRXF1YWw6QFsgKE5TU3RyaW5nICopa1VUVHlwZUhUTUwgXV0pOworICAgICAgICByZXR1cm4g
QFsgc2Vjb25kSXRlbSBdOworICAgIH1dOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVt
UHJvdmlkZXJzOkBbIHNpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyLmdldCgpLCBzaW11bGF0ZWRI
VE1MSXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50
TWFrZSgyMDAsIDMwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIE5TU3RyaW5n
ICpvdXRwdXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJv
dXRwdXQudmFsdWUiXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoInRleHQvaHRtbCIsIG91dHB1dFZh
bHVlLlVURjhTdHJpbmcpOworfQorCisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTEwMzAwCisKK3N0YXRpYyBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gc2V0VXBUZXN0
V2ViVmlld0ZvckRhdGFUcmFuc2Zlckl0ZW1zKCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAs
IDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1l
ZDpAIkRhdGFUcmFuc2Zlckl0ZW0tZ2V0QXNFbnRyeSJdOworCisgICAgYXV0byBwcmVmZXJlbmNl
cyA9IChXS1ByZWZlcmVuY2VzUmVmKVtbd2ViVmlldyBjb25maWd1cmF0aW9uXSBwcmVmZXJlbmNl
c107CisgICAgV0tQcmVmZXJlbmNlc1NldERhdGFUcmFuc2Zlckl0ZW1zRW5hYmxlZChwcmVmZXJl
bmNlcywgdHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldERpcmVjdG9yeVVwbG9hZEVuYWJsZWQo
cHJlZmVyZW5jZXMsIHRydWUpOworCisgICAgcmV0dXJuIHdlYlZpZXc7Cit9CisKK1RFU1QoRHJh
Z0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VEYXRhVHJhbnNmZXJJdGVtR2V0Rm9sZGVyQXNF
bnRyeSkKK3sKKyAgICAvLyBUaGUgZXhwZWN0ZWQgb3V0cHV0IGlzIHNvcnRlZCBieSBhbHBoYWJl
dGljYWwgb3JkZXIgaGVyZSBmb3IgY29uc2lzdGVudCBiZWhhdmlvciBhY3Jvc3MgZGlmZmVyZW50
IHRlc3QgZW52aXJvbm1lbnRzLgorICAgIC8vIFNlZSBEYXRhVHJhbnNmZXJJdGVtLWdldEFzRW50
cnkuaHRtbCBmb3IgbW9yZSBkZXRhaWxzLgorICAgIE5TQXJyYXk8TlNTdHJpbmcgKj4gKmV4cGVj
dGVkT3V0cHV0ID0gQFsKKyAgICAgICAgQCJGb3VuZCBkYXRhIHRyYW5zZmVyIGl0ZW0gKGtpbmQ6
ICdmaWxlJywgdHlwZTogJycpIiwKKyAgICAgICAgQCJESVI6IC9zb21lZGlyZWN0b3J5IiwKKyAg
ICAgICAgQCJESVI6IC9zb21lZGlyZWN0b3J5L3N1YmRpcmVjdG9yeTEiLAorICAgICAgICBAIkRJ
UjogL3NvbWVkaXJlY3Rvcnkvc3ViZGlyZWN0b3J5MiIsCisgICAgICAgIFtOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAiRklMRTogL3NvbWVkaXJlY3RvcnkvYXJjaGl2ZS56aXAgKCdhcHBsaWNh
dGlvbi96aXAnLCAldHUgYnl0ZXMpIiwgdGVzdFpJUEFyY2hpdmUoKS5sZW5ndGhdLAorICAgICAg
ICBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkZJTEU6IC9zb21lZGlyZWN0b3J5L2ljb24u
cG5nICgnaW1hZ2UvcG5nJywgJXR1IGJ5dGVzKSIsIHRlc3RJY29uSW1hZ2VEYXRhKCkubGVuZ3Ro
XSwKKyAgICAgICAgQCJGSUxFOiAvc29tZWRpcmVjdG9yeS9zdWJkaXJlY3RvcnkxL3RleHQtZmls
ZS0xLnR4dCAoJ3RleHQvcGxhaW4nLCA0MyBieXRlcykiLAorICAgICAgICBAIkZJTEU6IC9zb21l
ZGlyZWN0b3J5L3N1YmRpcmVjdG9yeTIvdGV4dC1maWxlLTIudHh0ICgndGV4dC9wbGFpbicsIDQ0
IGJ5dGVzKSIKKyAgICBdOworCisgICAgYXV0byB3ZWJWaWV3ID0gc2V0VXBUZXN0V2ViVmlld0Zv
ckRhdGFUcmFuc2Zlckl0ZW1zKCk7CisgICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKKyAg
ICBbd2ViVmlldyBwZXJmb3JtQWZ0ZXJSZWNlaXZpbmdNZXNzYWdlOkAiZHJvcHBlZCIgYWN0aW9u
Ol4oKSB7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworCisgICAgcnVuVGVzdFdpdGhU
ZW1wb3JhcnlGb2xkZXIoXihOU1VSTCAqZm9sZGVyVVJMKSB7CisgICAgICAgIGF1dG8gaXRlbVBy
b3ZpZGVyID0gYWRvcHROUyhbW05TSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgICAg
IFtpdGVtUHJvdmlkZXIgc2V0U3VnZ2VzdGVkTmFtZTpAInNvbWVkaXJlY3RvcnkiXTsKKyAgICAg
ICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckZpbGVSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlm
aWVyOihOU1N0cmluZyAqKWtVVFR5cGVGb2xkZXIgZmlsZU9wdGlvbnM6MCB2aXNpYmlsaXR5Ok5T
SXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsIGxvYWRIYW5kbGVyOltjYXB0
dXJlZEZvbGRlclVSTCA9IHJldGFpblB0cihmb2xkZXJVUkwpXSAoRmlsZUxvYWRDb21wbGV0aW9u
QmxvY2sgY29tcGxldGlvbkhhbmRsZXIpIC0+IE5TUHJvZ3Jlc3MgKiB7CisgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihjYXB0dXJlZEZvbGRlclVSTC5nZXQoKSwgTk8sIG5pbCk7CisgICAg
ICAgICAgICByZXR1cm4gbmlsOworICAgICAgICB9XTsKKworICAgICAgICBhdXRvIHNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXcuZ2V0KCldKTsKKyAgICAgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRl
cnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgICAgICBbc2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFrZSgxNTAsIDUwKV07CisgICAgfSk7CisK
KyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIEVYUEVDVF9XS19TVFJF
UShbZXhwZWN0ZWRPdXRwdXQgY29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiXG4iXSwgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdKTsKK30KKwor
VEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZURhdGFUcmFuc2Zlckl0ZW1HZXRQ
bGFpblRleHRGaWxlQXNFbnRyeSkKK3sKKyAgICBOU0FycmF5PE5TU3RyaW5nICo+ICpleHBlY3Rl
ZE91dHB1dCA9IEBbCisgICAgICAgIEAiRm91bmQgZGF0YSB0cmFuc2ZlciBpdGVtIChraW5kOiAn
ZmlsZScsIHR5cGU6ICd0ZXh0L3BsYWluJykiLAorICAgICAgICBAIkZJTEU6IC9mb28udHh0ICgn
dGV4dC9wbGFpbicsIDI4IGJ5dGVzKSIKKyAgICBdOworCisgICAgYXV0byB3ZWJWaWV3ID0gc2V0
VXBUZXN0V2ViVmlld0ZvckRhdGFUcmFuc2Zlckl0ZW1zKCk7CisgICAgX19ibG9jayBib29sIGRv
bmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBwZXJmb3JtQWZ0ZXJSZWNlaXZpbmdNZXNzYWdlOkAi
ZHJvcHBlZCIgYWN0aW9uOl4oKSB7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworCisg
ICAgcnVuVGVzdFdpdGhUZW1wb3JhcnlUZXh0RmlsZSheKE5TVVJMICpmaWxlVVJMKSB7CisgICAg
ICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW05TSXRlbVByb3ZpZGVyIGFsbG9jXSBp
bml0XSk7CisgICAgICAgIFtpdGVtUHJvdmlkZXIgc2V0U3VnZ2VzdGVkTmFtZTpAImZvbyJdOwor
ICAgICAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRmlsZVJlcHJlc2VudGF0aW9uRm9yVHlwZUlk
ZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRleHQgZmlsZU9wdGlvbnM6MCB2
aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsIGxvYWRI
YW5kbGVyOltjYXB0dXJlZEZpbGVVUkwgPSByZXRhaW5QdHIoZmlsZVVSTCldKEZpbGVMb2FkQ29t
cGxldGlvbkJsb2NrIGNvbXBsZXRpb25IYW5kbGVyKSAtPiBOU1Byb2dyZXNzICogeworICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoY2FwdHVyZWRGaWxlVVJMLmdldCgpLCBOTywgbmlsKTsK
KyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH1dOworCisgICAgICAgIGF1dG8gc2lt
dWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZp
ZXc6d2ViVmlldy5nZXQoKV0pOworICAgICAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVBy
b3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgICAgIFtzaW11bGF0b3IgcnVu
RnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRvOkNHUG9pbnRNYWtlKDE1MCwgNTApXTsKKyAgICB9
KTsKKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisgICAgRVhQRUNUX1dL
X1NUUkVRKFtleHBlY3RlZE91dHB1dCBjb21wb25lbnRzSm9pbmVkQnlTdHJpbmc6QCJcbiJdLCBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0pOwor
fQorCisjZW5kaWYgLy8gX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMzAw
CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VPdmVycmlkZURyb3BJbnNl
cnRVUkwpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVk
aXRhYmxlIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdl
dFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9
IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZp
ZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldE92ZXJyaWRlUGVyZm9ybURyb3BCbG9jazpe
TlNBcnJheTxVSURyYWdJdGVtICo+ICooaWQgPFVJRHJvcFNlc3Npb24+IHNlc3Npb24pCisgICAg
eworICAgICAgICBOU011dGFibGVBcnJheTxVSURyYWdJdGVtICo+ICphbGxvd2VkSXRlbXMgPSBb
TlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAgICAgICBmb3IgKFVJRHJhZ0l0ZW0gKml0ZW0gaW4g
c2Vzc2lvbi5pdGVtcykgeworICAgICAgICAgICAgaWYgKFtpdGVtLml0ZW1Qcm92aWRlci5yZWdp
c3RlcmVkVHlwZUlkZW50aWZpZXJzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVV
UkxdKQorICAgICAgICAgICAgICAgIFthbGxvd2VkSXRlbXMgYWRkT2JqZWN0Oml0ZW1dOworICAg
ICAgICB9CisgICAgICAgIEVYUEVDVF9FUSgxVUwsIGFsbG93ZWRJdGVtcy5jb3VudCk7CisgICAg
ICAgIHJldHVybiBhbGxvd2VkSXRlbXM7CisgICAgfV07CisKKyAgICBhdXRvIGZpcnN0SXRlbVBy
b3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2Zp
cnN0SXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OkAiVGhpcyBpcyBhIHN0cmluZy4iIHZpc2li
aWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsK
KyAgICBhdXRvIHNlY29uZEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBh
bGxvY10gaW5pdF0pOworICAgIFtzZWNvbmRJdGVtUHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6W05T
VVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3dlYmtpdC5vcmcvIl0gdmlzaWJpbGl0eTpVSUl0
ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOworICAgIFtzaW11
bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGZpcnN0SXRlbVByb3ZpZGVyLmdldCgp
LCBzZWNvbmRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNH
UG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQ
RUNUX1dLX1NUUkVRKCJodHRwczovL3dlYmtpdC5vcmcvIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdKTsKK30KKworVEVTVChEcmFn
QW5kRHJvcFRlc3RzLCBPdmVycmlkZURyb3ApCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6
QCJzaW1wbGUiXTsKKworICAgIGF1dG8gc2ltdWxhdGVkSXRlbVByb3ZpZGVyID0gYWRvcHROUyhb
W1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRl
ciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAq
KWtVVFR5cGVIVE1MIHdpdGhEYXRhOltAIjxib2R5PjwvYm9keT4iIGRhdGFVc2luZ0VuY29kaW5n
Ok5TVVRGOFN0cmluZ0VuY29kaW5nXV07CisKKyAgICBfX2Jsb2NrIGJvb2wgZmluaXNoZWRMb2Fk
aW5nRGF0YSA9IGZhbHNlOworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5n
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtz
aW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRl
ci5nZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHNldE92ZXJyaWRlRHJhZ1VwZGF0ZUJsb2NrOl5O
U1VJbnRlZ2VyKE5TVUludGVnZXIgb3BlcmF0aW9uLCBpZCBzZXNzaW9uKQorICAgIHsKKyAgICAg
ICAgRVhQRUNUX0VRKDBVLCBvcGVyYXRpb24pOworICAgICAgICByZXR1cm4gVUlEcm9wT3BlcmF0
aW9uQ29weTsKKyAgICB9XTsKKyAgICBbc2ltdWxhdG9yIHNldERyb3BDb21wbGV0aW9uQmxvY2s6
XihCT09MIGhhbmRsZWQsIE5TQXJyYXkgKml0ZW1Qcm92aWRlcnMpIHsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKGhhbmRsZWQpOworICAgICAgICBbaXRlbVByb3ZpZGVycy5maXJzdE9iamVjdCBsb2Fk
RGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhU
TUwgY29tcGxldGlvbkhhbmRsZXI6XihOU0RhdGEgKmRhdGEsIE5TRXJyb3IgKmVycm9yKSB7Cisg
ICAgICAgICAgICBOU1N0cmluZyAqdGV4dCA9IFtbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERh
dGE6ZGF0YSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10gYXV0b3JlbGVhc2VdOworICAg
ICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCI8Ym9keT48L2JvZHk+IiwgdGV4dC5VVEY4U3RyaW5n
KTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSghIWVycm9yKTsKKyAgICAgICAgICAgIGZpbmlz
aGVkTG9hZGluZ0RhdGEgPSB0cnVlOworICAgICAgICB9XTsKKyAgICB9XTsKKyAgICBbc2ltdWxh
dG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAw
KV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZExvYWRpbmdEYXRhKTsK
K30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBJbmplY3RlZEJ1bmRsZU92ZXJyaWRlUGVyZm9y
bVR3b1N0ZXBEcm9wKQoreworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRp
b24gPSBbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBfdGVzdF9jb25maWd1cmF0aW9uV2l0aFRlc3RQ
bHVnSW5DbGFzc05hbWU6QCJCdW5kbGVFZGl0aW5nRGVsZWdhdGVQbHVnSW4iXTsKKyAgICBbY29u
ZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2V0T2JqZWN0OkBZRVMgZm9yQnVuZGxlUGFyYW1ldGVy
OkAiQnVuZGxlT3ZlcnJpZGVQZXJmb3JtVHdvU3RlcERyb3AiXTsKKworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0pOworICAgIFt3
ZWJWaWV3IGxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOwor
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24o
KS5yZW1vdmVBbGxSYW5nZXMoKSJdOworCisgICAgYXV0byBzaW11bGF0ZWRJdGVtUHJvdmlkZXIg
PSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbc2ltdWxhdGVk
SXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6
KE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRleHQgb3B0aW9uczpuaWwgbG9hZEhhbmRsZXI6
Xk5TUHJvZ3Jlc3MgKihVSUl0ZW1Qcm92aWRlckRhdGFMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBs
ZXRpb25CbG9jaykKKyAgICB7CisgICAgICAgIGNvbXBsZXRpb25CbG9jayhbQCJIZWxsbyB3b3Js
ZCIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddLCBuaWwpOworICAgICAg
ICByZXR1cm4gW05TUHJvZ3Jlc3MgZGlzY3JldGVQcm9ncmVzc1dpdGhUb3RhbFVuaXRDb3VudDox
MDBdOworICAgIH1dOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdT
aW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3Np
bXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVy
LmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkg
dG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIEVYUEVDVF9FUSgwVUwsIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXS5sZW5n
dGgpOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEluamVjdGVkQnVuZGxlQWxsb3dQZXJm
b3JtVHdvU3RlcERyb3ApCit7CisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJh
dGlvbiA9IFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVz
dFBsdWdJbkNsYXNzTmFtZTpAIkJ1bmRsZUVkaXRpbmdEZWxlZ2F0ZVBsdWdJbiJdOworICAgIFtj
b25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF9zZXRPYmplY3Q6QE5PIGZvckJ1bmRsZVBhcmFtZXRl
cjpAIkJ1bmRsZU92ZXJyaWRlUGVyZm9ybVR3b1N0ZXBEcm9wIl07CisKKyAgICBhdXRvIHdlYlZp
ZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RN
YWtlKDAsIDAsIDMyMCwgNTAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dKTsKKyAgICBb
d2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVu
dGVkaXRhYmxlIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
ImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07CisKKyAgICBhdXRvIHNpbXVsYXRl
ZEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwor
ICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JU
eXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlVVRGOFBsYWluVGV4dCBvcHRpb25zOm5p
bCBsb2FkSGFuZGxlcjpeTlNQcm9ncmVzcyAqKFVJSXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0
aW9uQmxvY2sgY29tcGxldGlvbkJsb2NrKQorICAgIHsKKyAgICAgICAgY29tcGxldGlvbkJsb2Nr
KFtAIkhlbGxvIHdvcmxkIiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10s
IG5pbCk7CisgICAgICAgIHJldHVybiBbTlNQcm9ncmVzcyBkaXNjcmV0ZVByb2dyZXNzV2l0aFRv
dGFsVW5pdENvdW50OjEwMF07CisgICAgfV07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0
TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0
ZWRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRN
YWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX1dL
X1NUUkVRKCJIZWxsbyB3b3JsZCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXS5VVEY4U3RyaW5nKTsKK30KKworVEVTVChEcmFnQW5k
RHJvcFRlc3RzLCBJbmplY3RlZEJ1bmRsZUltYWdlRWxlbWVudERhdGEpCit7CisgICAgV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtXS1dlYlZpZXdDb25maWd1cmF0aW9u
IF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVzdFBsdWdJbkNsYXNzTmFtZTpAIkJ1bmRsZUVkaXRp
bmdEZWxlZ2F0ZVBsdWdJbiJdOworICAgIFtjb25maWd1cmF0aW9uIF9zZXRBdHRhY2htZW50RWxl
bWVudEVuYWJsZWQ6WUVTXTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKSBjb25m
aWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9h
ZFRlc3RQYWdlTmFtZWQ6QCJpbWFnZS1hbmQtY29udGVudGVkaXRhYmxlIl07CisKKyAgICBfX2Js
b2NrIFJldGFpblB0cjxOU1N0cmluZz4gaW5qZWN0ZWRTdHJpbmc7CisgICAgYXV0byBzaW11bGF0
b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3
ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRDb252ZXJ0SXRlbVByb3ZpZGVyc0Js
b2NrOl5OU0FycmF5ICooVUlJdGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciwgTlNBcnJheSAqLCBO
U0RpY3Rpb25hcnkgKmRhdGEpCisgICAgeworICAgICAgICBpbmplY3RlZFN0cmluZyA9IGFkb3B0
TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGFbSW5qZWN0ZWRCdW5kbGVQYXN0
ZWJvYXJkRGF0YVR5cGVdIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSk7CisgICAgICAg
IHJldHVybiBAWyBpdGVtUHJvdmlkZXIgXTsKKyAgICB9XTsKKworICAgIFtzaW11bGF0b3IgcnVu
RnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDI1MCldOworCisg
ICAgRVhQRUNUX1dLX1NUUkVRKCJoZWxsbyIsIFtpbmplY3RlZFN0cmluZyBVVEY4U3RyaW5nXSk7
Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgSW5qZWN0ZWRCdW5kbGVBdHRhY2htZW50RWxl
bWVudERhdGEpCit7CisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9
IFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVzdFBsdWdJ
bkNsYXNzTmFtZTpAIkJ1bmRsZUVkaXRpbmdEZWxlZ2F0ZVBsdWdJbiJdOworICAgIFtjb25maWd1
cmF0aW9uIF9zZXRBdHRhY2htZW50RWxlbWVudEVuYWJsZWQ6WUVTXTsKKyAgICBhdXRvIHdlYlZp
ZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RN
YWtlKDAsIDAsIDMyMCwgNTAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dKTsKKyAgICBb
d2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdHRhY2htZW50LWVsZW1l
bnQiXTsKKworICAgIF9fYmxvY2sgUmV0YWluUHRyPE5TU3RyaW5nPiBpbmplY3RlZFN0cmluZzsK
KyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10g
aW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldENvbnZl
cnRJdGVtUHJvdmlkZXJzQmxvY2s6Xk5TQXJyYXkgKihVSUl0ZW1Qcm92aWRlciAqaXRlbVByb3Zp
ZGVyLCBOU0FycmF5ICosIE5TRGljdGlvbmFyeSAqZGF0YSkKKyAgICB7CisgICAgICAgIGluamVj
dGVkU3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6ZGF0YVtJ
bmplY3RlZEJ1bmRsZVBhc3RlYm9hcmREYXRhVHlwZV0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5j
b2RpbmddKTsKKyAgICAgICAgcmV0dXJuIEBbIGl0ZW1Qcm92aWRlciBdOworICAgIH1dOworCisg
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2Uo
NTAsIDQwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCJoZWxsbyIsIFtpbmplY3RlZFN0cmlu
ZyBVVEY4U3RyaW5nXSk7CisgICAgRVhQRUNUX1RSVUUoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLmlzQ29sbGFwc2VkIl0uYm9vbFZhbHVlKTsK
K30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBMYXJnZUltYWdlVG9UYXJnZXREaXYpCit7Cisg
ICAgYXV0byB0ZXN0V2ViVmlld0NvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIFtbdGVzdFdlYlZpZXdDb25maWd1cmF0aW9u
IHByZWZlcmVuY2VzXSBfc2V0TGFyZ2VJbWFnZUFzeW5jRGVjb2RpbmdFbmFibGVkOk5PXTsKKwor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRpb246dGVzdFdlYlZp
ZXdDb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRU
ZXN0UGFnZU5hbWVkOkAiZGl2LWFuZC1sYXJnZS1pbWFnZSJdOworCisgICAgYXV0byBzaW11bGF0
b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3
ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwg
NDAwKSB0bzpDR1BvaW50TWFrZSgyMDAsIDE1MCldOworICAgIEVYUEVDVF9XS19TVFJFUSgiUEFT
UyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0YXJnZXQudGV4dENv
bnRlbnQiXS5VVEY4U3RyaW5nKTsKKyAgICBjaGVja0ZpcnN0VHlwZUlzUHJlc2VudEFuZFNlY29u
ZFR5cGVJc01pc3Npbmcoc2ltdWxhdG9yLmdldCgpLCBrVVRUeXBlUE5HLCBrVVRUeXBlRmlsZVVS
TCk7CisgICAgY2hlY2tFc3RpbWF0ZWRTaXplKHNpbXVsYXRvci5nZXQoKSwgeyAyMDAwLCAyMDAw
IH0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIExpbmtXaXRoRW1wdHlIUkVGKQorewor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAibGluay1hbmQtaW5wdXQiXTsKKyAgICBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3Rvcign
YScpLmhyZWYgPSAnJyJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dp
bmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAg
W3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEw
MCwgMzAwKV07CisKKyAgICBFWFBFQ1RfRVEoRHJhZ0FuZERyb3BQaGFzZUNhbmNlbGxlZCwgW3Np
bXVsYXRvciBwaGFzZV0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgZWRpdG9y
VmFsdWVdLlVURjhTdHJpbmcpOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIENhbmNlbGxl
ZExpZnREb2VzTm90Q2F1c2VTdWJzZXF1ZW50RHJhZ3NUb0ZhaWwpCit7CisgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRl
c3RQYWdlTmFtZWQ6QCJsaW5rLWFuZC10YXJnZXQtZGl2Il07CisKKyAgICBhdXRvIHNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldENvbnZlcnRJdGVtUHJvdmlkZXJzQmxv
Y2s6Xk5TQXJyYXkgKihVSUl0ZW1Qcm92aWRlciAqLCBOU0FycmF5ICosIE5TRGljdGlvbmFyeSAq
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEBbIF07CisgICAgfV07CisgICAgW3NpbXVsYXRvciBy
dW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Cisg
ICAgRVhQRUNUX0VRKERyYWdBbmREcm9wUGhhc2VDYW5jZWxsZWQsIFtzaW11bGF0b3IgcGhhc2Vd
KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJ0YXJnZXQudGV4dENvbnRlbnQiXSk7CisgICAgTlNTdHJpbmcgKm91dHB1dFRl
eHQgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnRleHRD
b250ZW50Il07CisgICAgY2hlY2tTdHJpbmdBcnJheXNBcmVFcXVhbChAW0AiZHJhZ3N0YXJ0Iiwg
QCJkcmFnZW5kIl0sIFtvdXRwdXRUZXh0IGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIiAi
XSk7CisKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0
LmlubmVySFRNTCA9ICcnIl07CisgICAgW3NpbXVsYXRvciBzZXRDb252ZXJ0SXRlbVByb3ZpZGVy
c0Jsb2NrOl5OU0FycmF5ICooVUlJdGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciwgTlNBcnJheSAq
LCBOU0RpY3Rpb25hcnkgKikKKyAgICB7CisgICAgICAgIHJldHVybiBAWyBpdGVtUHJvdmlkZXIg
XTsKKyAgICB9XTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkg
dG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlBBU1MiLCBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGFyZ2V0LnRleHRDb250ZW50
Il0pOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQu
dGV4dENvbnRlbnQiXTsKKyAgICBjaGVja1N0cmluZ0FycmF5c0FyZUVxdWFsKEBbQCJkcmFnc3Rh
cnQiLCBAImRyYWdlbmQiXSwgW291dHB1dFRleHQgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5n
OkAiICJdKTsKK30KKworc3RhdGljIHZvaWQgdGVzdERyYWdBbmREcm9wT250b1RhcmdldEVsZW1l
bnRzKFRlc3RXS1dlYlZpZXcgKndlYlZpZXcpCit7CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9w
dE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3XSk7
CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQb2ludE1h
a2UoNTAsIDI1MCldOworICAgIEVYUEVDVF9XS19TVFJFUSgicmdiKDAsIDEyOCwgMCkiLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0Q29tcHV0ZWRTdHlsZSh0YXJn
ZXQxKS5iYWNrZ3JvdW5kQ29sb3IiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJQQVNTIiwgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRhcmdldDEudGV4dENvbnRlbnQi
XSk7CisKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1Bv
aW50TWFrZSgyNTAsIDUwKV07CisgICAgRVhQRUNUX1dLX1NUUkVRKCJyZ2IoMCwgMTI4LCAwKSIs
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRDb21wdXRlZFN0eWxl
KHRhcmdldDIpLmJhY2tncm91bmRDb2xvciJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlBBU1Mi
LCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGFyZ2V0Mi50ZXh0Q29u
dGVudCJdKTsKKworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRv
OkNHUG9pbnRNYWtlKDI1MCwgMjUwKV07CisgICAgRVhQRUNUX1dLX1NUUkVRKCJyZ2IoMCwgMTI4
LCAwKSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRDb21wdXRl
ZFN0eWxlKHRhcmdldDMpLmJhY2tncm91bmRDb2xvciJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
IlBBU1MiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGFyZ2V0My50
ZXh0Q29udGVudCJdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEcmFnRXZlbnRDbGll
bnRDb29yZGluYXRlc0Jhc2ljKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDAp
XSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHJvcC10
YXJnZXRzIl07CisKKyAgICB0ZXN0RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMod2ViVmll
dy5nZXQoKSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRHJhZ0V2ZW50Q2xpZW50Q29v
cmRpbmF0ZXNXaXRoU2Nyb2xsT2Zmc2V0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIw
LCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAi
ZHJvcC10YXJnZXRzIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAImRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gJzEwMDBweCAwJyJdOworICAgIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5zY3JvbGxpbmdFbGVt
ZW50LnNjcm9sbFRvcCA9IDEwMDAiXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRh
dGlvblVwZGF0ZV07CisKKyAgICB0ZXN0RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMod2Vi
Vmlldy5nZXQoKSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRHJhZ0V2ZW50UGFnZUNv
b3JkaW5hdGVzQmFzaWMpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsK
KyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkcm9wLXRhcmdl
dHMiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid2luZG93
LnVzZVBhZ2VDb29yZGluYXRlcyA9IHRydWUiXTsKKworICAgIHRlc3REcmFnQW5kRHJvcE9udG9U
YXJnZXRFbGVtZW50cyh3ZWJWaWV3LmdldCgpKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3Rz
LCBEcmFnRXZlbnRQYWdlQ29vcmRpbmF0ZXNXaXRoU2Nyb2xsT2Zmc2V0KQoreworICAgIGF1dG8g
d2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNH
UmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxv
YWRUZXN0UGFnZU5hbWVkOkAiZHJvcC10YXJnZXRzIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gJzEwMDBw
eCAwJyJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1
bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IDEwMDAiXTsKKyAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid2luZG93LnVzZVBhZ2VDb29yZGluYXRlcyA9
IHRydWUiXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07CisK
KyAgICB0ZXN0RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMod2ViVmlldy5nZXQoKSk7Cit9
CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRG9Ob3RDcmFzaFdoZW5TZWxlY3Rpb25Jc0NsZWFy
ZWRJbkRyYWdTdGFydCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwor
ICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImRyYWdzdGFydC1j
bGVhci1zZWxlY3Rpb24iXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdn
aW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAg
IFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDEwMCkgdG86Q0dQb2ludE1ha2Uo
MTAwLCAxMDApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiUEFTUyIsIFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJwYXJhZ3JhcGgudGV4dENvbnRlbnQiXSk7Cit9CisK
Ky8vIEZJWE1FOiBSZS1lbmFibGUgdGhpcyB0ZXN0IG9uY2Ugd2UgcmVzb2x2ZSA8aHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTIwND4KKyNpZiBfX0lQSE9ORV9PU19W
RVJTSU9OX01BWF9BTExPV0VEIDw9IDExMDQwMQorVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBDdXN0
b21BY3Rpb25TaGVldFBvcG92ZXIpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJsaW5r
LWFuZC10YXJnZXQtZGl2Il07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFn
Z2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAg
ICBbc2ltdWxhdG9yIHNldFNob3VsZEVuc3VyZVVJQXBwbGljYXRpb246WUVTXTsKKworICAgIF9f
YmxvY2sgQk9PTCBkaWRJbnZva2VDdXN0b21BY3Rpb25TaGVldCA9IE5POworICAgIFtzaW11bGF0
b3Igc2V0U2hvd0N1c3RvbUFjdGlvblNoZWV0QmxvY2s6XkJPT0woX1dLQWN0aXZhdGVkRWxlbWVu
dEluZm8gKmVsZW1lbnQpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoX1dLQWN0aXZhdGVkRWxl
bWVudFR5cGVMaW5rLCBlbGVtZW50LnR5cGUpOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIkhl
bGxvIHdvcmxkIiwgZWxlbWVudC50aXRsZS5VVEY4U3RyaW5nKTsKKyAgICAgICAgZGlkSW52b2tl
Q3VzdG9tQWN0aW9uU2hlZXQgPSBZRVM7CisgICAgICAgIHJldHVybiBZRVM7CisgICAgfV07Cisg
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtl
KDEwMCwgMzAwKV07CisgICAgRVhQRUNUX1RSVUUoZGlkSW52b2tlQ3VzdG9tQWN0aW9uU2hlZXQp
OworICAgIEVYUEVDVF9XS19TVFJFUSgiUEFTUyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJ0YXJnZXQudGV4dENvbnRlbnQiXS5VVEY4U3RyaW5nKTsKK30KKyNlbmRp
ZgorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIFVucmVzcG9uc2l2ZVBhZ2VEb2VzTm90SGFuZ1VJ
KQoreworICAgIF9XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbiAqcHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uID0gW1tbX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRv
cmVsZWFzZV07CisgICAgcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmlnbm9yZVN5bmNocm9ub3Vz
TWVzc2FnaW5nVGltZW91dHNGb3JUZXN0aW5nID0gWUVTOworCisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCkgY29uZmlndXJhdGlvbjpbW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFs
bG9jXSBpbml0XSBhdXRvcmVsZWFzZV0gcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOnByb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbl0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBh
Z2VOYW1lZDpAInNpbXBsZSJdOworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAIndo
aWxlKDEpOyIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKworICAgIC8vIFRoZSB0ZXN0IHBhc3Nl
cyBpZiB3ZSBjYW4gcHJlcGFyZSBmb3IgYSBkcmFnIHNlc3Npb24gd2l0aG91dCB0aW1pbmcgb3V0
LgorICAgIGF1dG8gZHJhZ1Nlc3Npb24gPSBhZG9wdE5TKFtbTW9ja0RyYWdTZXNzaW9uIGFsbG9j
XSBpbml0XSk7CisgICAgWyhpZCA8VUlEcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV9Gb3JXZWJLaXRP
bmx5Pilbd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gX2RyYWdJbnRlcmFjdGlvbjpb
d2ViVmlldyBkcmFnSW50ZXJhY3Rpb25dIHByZXBhcmVGb3JTZXNzaW9uOmRyYWdTZXNzaW9uLmdl
dCgpIGNvbXBsZXRpb246XigpIHsgfV07Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgV2Vi
SXRlbVByb3ZpZGVyUGFzdGVib2FyZExvYWRpbmcpCit7CisgICAgc3RhdGljIE5TU3RyaW5nICpm
YXN0U3RyaW5nID0gQCJUaGlzIGRhdGEgbG9hZHMgcXVpY2tseSI7CisgICAgc3RhdGljIE5TU3Ry
aW5nICpzbG93U3RyaW5nID0gQCJUaGlzIGRhdGEgbG9hZHMgc2xvd2x5IjsKKworICAgIFdlYkl0
ZW1Qcm92aWRlclBhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbV2ViSXRlbVByb3ZpZGVyUGFzdGVi
b2FyZCBzaGFyZWRJbnN0YW5jZV07CisgICAgYXV0byBmYXN0SXRlbSA9IGFkb3B0TlMoW1tVSUl0
ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtmYXN0SXRlbSByZWdpc3RlckRhdGFSZXBy
ZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5U
ZXh0IG9wdGlvbnM6bmlsIGxvYWRIYW5kbGVyOl5OU1Byb2dyZXNzICooVUlJdGVtUHJvdmlkZXJE
YXRhTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uQmxvY2spCisgICAgeworICAgICAgICBj
b21wbGV0aW9uQmxvY2soW2Zhc3RTdHJpbmcgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5n
RW5jb2RpbmddLCBuaWwpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH1dOworCisgICAgYXV0
byBzbG93SXRlbSA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAg
IFtzbG93SXRlbSByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihO
U1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0IG9wdGlvbnM6bmlsIGxvYWRIYW5kbGVyOl5O
U1Byb2dyZXNzICooVUlJdGVtUHJvdmlkZXJEYXRhTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0
aW9uQmxvY2spCisgICAgeworICAgICAgICBzbGVlcCgyX3MpOworICAgICAgICBjb21wbGV0aW9u
QmxvY2soW3Nsb3dTdHJpbmcgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rpbmdd
LCBuaWwpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH1dOworCisgICAgX19ibG9jayBib29s
IGhhc1J1bkZpcnN0Q29tcGxldGlvbkJsb2NrID0gZmFsc2U7CisgICAgcGFzdGVib2FyZC5pdGVt
UHJvdmlkZXJzID0gQFsgZmFzdEl0ZW0uZ2V0KCksIHNsb3dJdGVtLmdldCgpIF07CisgICAgW3Bh
c3RlYm9hcmQgZG9BZnRlckxvYWRpbmdQcm92aWRlZENvbnRlbnRJbnRvRmlsZVVSTHM6XihOU0Fy
cmF5PE5TVVJMICo+ICp1cmxzKSB7CisgICAgICAgIEVYUEVDVF9FUSgyVUwsIHVybHMuY291bnQp
OworICAgICAgICBhdXRvIGZpcnN0U3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBp
bml0V2l0aENvbnRlbnRzT2ZVUkw6dXJsc1swXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
ZyBlcnJvcjpuaWxdKTsKKyAgICAgICAgYXV0byBzZWNvbmRTdHJpbmcgPSBhZG9wdE5TKFtbTlNT
dHJpbmcgYWxsb2NdIGluaXRXaXRoQ29udGVudHNPZlVSTDp1cmxzWzFdIGVuY29kaW5nOk5TVVRG
OFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoZmFz
dFN0cmluZywgW2ZpcnN0U3RyaW5nIFVURjhTdHJpbmddKTsKKyAgICAgICAgRVhQRUNUX1dLX1NU
UkVRKHNsb3dTdHJpbmcsIFtzZWNvbmRTdHJpbmcgVVRGOFN0cmluZ10pOworICAgICAgICBoYXNS
dW5GaXJzdENvbXBsZXRpb25CbG9jayA9IHRydWU7CisgICAgfSBzeW5jaHJvbm91c1RpbWVvdXQ6
NjAwXTsKKyAgICBFWFBFQ1RfVFJVRShoYXNSdW5GaXJzdENvbXBsZXRpb25CbG9jayk7CisKKyAg
ICBfX2Jsb2NrIGJvb2wgaGFzUnVuU2Vjb25kQ29tcGxldGlvbkJsb2NrID0gZmFsc2U7CisgICAg
W3Bhc3RlYm9hcmQgZG9BZnRlckxvYWRpbmdQcm92aWRlZENvbnRlbnRJbnRvRmlsZVVSTHM6XihO
U0FycmF5PE5TVVJMICo+ICp1cmxzKSB7CisgICAgICAgIEVYUEVDVF9FUSgyVUwsIHVybHMuY291
bnQpOworICAgICAgICBhdXRvIGZpcnN0U3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9j
XSBpbml0V2l0aENvbnRlbnRzT2ZVUkw6dXJsc1swXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNv
ZGluZyBlcnJvcjpuaWxdKTsKKyAgICAgICAgYXV0byBzZWNvbmRTdHJpbmcgPSBhZG9wdE5TKFtb
TlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ29udGVudHNPZlVSTDp1cmxzWzFdIGVuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEo
ZmFzdFN0cmluZywgW2ZpcnN0U3RyaW5nIFVURjhTdHJpbmddKTsKKyAgICAgICAgRVhQRUNUX1dL
X1NUUkVRKHNsb3dTdHJpbmcsIFtzZWNvbmRTdHJpbmcgVVRGOFN0cmluZ10pOworICAgICAgICBo
YXNSdW5TZWNvbmRDb21wbGV0aW9uQmxvY2sgPSB0cnVlOworICAgIH0gc3luY2hyb25vdXNUaW1l
b3V0OjBdOworICAgIEVYUEVDVF9GQUxTRShoYXNSdW5TZWNvbmRDb21wbGV0aW9uQmxvY2spOwor
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmaGFzUnVuU2Vjb25kQ29tcGxldGlvbkJsb2Nr
KTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEb05vdENyYXNoV2hlblNlbGVjdGlvbk1v
dmVzT2Zmc2NyZWVuQWZ0ZXJEcmFnU3RhcnQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6
QCJkcmFnc3RhcnQtY2hhbmdlLXNlbGVjdGlvbi1vZmZzY3JlZW4iXTsKKworICAgIGF1dG8gc2lt
dWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZp
ZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgx
MDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsKKworICAgIEVYUEVDVF9XS19TVFJF
USgiRkFSIE9GRlNDUkVFTiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJnZXRTZWxlY3Rpb24oKS5nZXRSYW5nZUF0KDApLnRvU3RyaW5nKCkiXSk7Cit9CisKK1RFU1Qo
RHJhZ0FuZERyb3BUZXN0cywgQWRkaXRpb25hbEl0ZW1zQ2FuQmVQcmV2ZW50ZWRPbkRyYWdTdGFy
dCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3
IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNlbGVjdGVkLXRleHQtaW1hZ2UtbGlu
ay1hbmQtZWRpdGFibGUiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAibGluay5hZGRFdmVudExpc3RlbmVyKCdkcmFnc3RhcnQnLCBlID0+IGUucHJldmVudERl
ZmF1bHQoKSkiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
aW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgZSA9PiBlLnByZXZlbnREZWZhdWx0
KCkpIl07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRv
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9y
IHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFrZSg1MCwgNDAwKSBhZGRp
dGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnM6QHsKKyAgICAgICAgQDAuMzM6IFtOU1ZhbHVlIHZh
bHVlV2l0aENHUG9pbnQ6Q0dQb2ludE1ha2UoNTAsIDE1MCldLAorICAgICAgICBAMC42NjogW05T
VmFsdWUgdmFsdWVXaXRoQ0dQb2ludDpDR1BvaW50TWFrZSg1MCwgMjUwKV0KKyAgICB9XTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEoIkFCQ0QiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVz
dHMsIEFkZGl0aW9uYWxMaW5rQW5kSW1hZ2VJbnRvQ29udGVudEVkaXRhYmxlKQoreworICAgIGF1
dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
OkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNs
eUxvYWRUZXN0UGFnZU5hbWVkOkAic2VsZWN0ZWQtdGV4dC1pbWFnZS1saW5rLWFuZC1lZGl0YWJs
ZSJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3Ig
YWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBy
dW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2UoNTAsIDQwMCkgYWRkaXRp
b25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zOkB7CisgICAgICAgIEAwLjMzOiBbTlNWYWx1ZSB2YWx1
ZVdpdGhDR1BvaW50OkNHUG9pbnRNYWtlKDUwLCAxNTApXSwKKyAgICAgICAgQDAuNjY6IFtOU1Zh
bHVlIHZhbHVlV2l0aENHUG9pbnQ6Q0dQb2ludE1ha2UoNTAsIDI1MCldCisgICAgfV07CisgICAg
RVhQRUNUX1dLX1NUUkVRKCJBQkNEQSBsaW5rIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfVFJVRShbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiISFlZGl0b3IucXVlcnlTZWxlY3Rv
cignaW1nJykiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczovL3d3dy5hcHBsZS5jb20v
IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci5xdWVyeVNl
bGVjdG9yKCdhJykuaHJlZiJdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEcmFnTGlm
dFByZXZpZXdEYXRhVHJhbnNmZXJTZXREcmFnSW1hZ2UpCit7CisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdl
TmFtZWQ6QCJEYXRhVHJhbnNmZXItc2V0RHJhZ0ltYWdlIl07CisgICAgYXV0byBzaW11bGF0b3Ig
PSBhZG9wdE5TKFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3LmdldCgpXSk7CisKKyAgICAvLyBVc2UgRGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSB0byBz
cGVjaWZ5IGFuIGV4aXN0aW5nIGltYWdlIGVsZW1lbnQgaW4gdGhlIERPTS4KKyAgICBbc2ltdWxh
dG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMjUwLCA1MCld
OworICAgIGNoZWNrQ0dSZWN0SXNFcXVhbFRvQ0dSZWN0V2l0aExvZ2dpbmcoe3sxMDAsIDUwfSwg
ezIxNSwgMTc0fX0sIFtzaW11bGF0b3IgbGlmdFByZXZpZXdzXVswXS52aWV3LmZyYW1lKTsKKwor
ICAgIC8vIFVzZSBEYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlIHRvIHNwZWNpZnkgYW4gZXhpc3Rp
bmcgaW1hZ2UgZWxlbWVudCBpbiB0aGUgRE9NLCB3aXRoIHggYW5kIHkgb2Zmc2V0cy4KKyAgICBb
c2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAsIDE1MCkgdG86Q0dQb2ludE1ha2UoMjUw
LCAxNTApXTsKKyAgICBjaGVja0NHUmVjdElzRXF1YWxUb0NHUmVjdFdpdGhMb2dnaW5nKHt7LTkw
LCA1MH0sIHsyMTUsIDE3NH19LCBbc2ltdWxhdG9yIGxpZnRQcmV2aWV3c11bMF0udmlldy5mcmFt
ZSk7CisKKyAgICAvLyBVc2UgRGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSB0byBzcGVjaWZ5IGEg
bmV3bHkgY3JlYXRlZCBJbWFnZSwgZGlzY29ubmVjdGVkIGZyb20gdGhlIERPTS4KKyAgICBbc2lt
dWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCAyNTApIHRvOkNHUG9pbnRNYWtlKDI1MCwg
MjUwKV07CisgICAgY2hlY2tDR1JlY3RJc0VxdWFsVG9DR1JlY3RXaXRoTG9nZ2luZyh7ezEwMCwg
MjUwfSwgezIxNSwgMTc0fX0sIFtzaW11bGF0b3IgbGlmdFByZXZpZXdzXVswXS52aWV3LmZyYW1l
KTsKKworICAgIC8vIERvbid0IHVzZSBEYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlIGFuZCBmYWxs
IGJhY2sgdG8gc25hcHNob3R0aW5nIHRoZSBkcmFnZ2VkIGVsZW1lbnQuCisgICAgW3NpbXVsYXRv
ciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCAzNTApIHRvOkNHUG9pbnRNYWtlKDI1MCwgMzUwKV07
CisgICAgY2hlY2tDR1JlY3RJc0VxdWFsVG9DR1JlY3RXaXRoTG9nZ2luZyh7ezAsIDMwMH0sIHsz
MDAsIDEwMH19LCBbc2ltdWxhdG9yIGxpZnRQcmV2aWV3c11bMF0udmlldy5mcmFtZSk7CisKKyAg
ICAvLyBQZXJmb3JtIGEgbm9ybWFsIGRyYWcgb24gYW4gaW1hZ2UuCisgICAgW3NpbXVsYXRvciBy
dW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA0NTApIHRvOkNHUG9pbnRNYWtlKDI1MCwgNDUwKV07Cisg
ICAgY2hlY2tDR1JlY3RJc0VxdWFsVG9DR1JlY3RXaXRoTG9nZ2luZyh7ezAsIDQwMH0sIHsyMTUs
IDE3NH19LCBbc2ltdWxhdG9yIGxpZnRQcmV2aWV3c11bMF0udmlldy5mcmFtZSk7Cit9CisKKyNp
ZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAzMDAKKworc3RhdGljIE5T
RGF0YSAqdGVzdEljb25JbWFnZURhdGEoKQoreworICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRo
Q29udGVudHNPZkZpbGU6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBwYXRoRm9yUmVzb3VyY2U6QCJp
Y29uIiBvZlR5cGU6QCJwbmciIGluRGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMi
XV07Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRGF0YVRyYW5zZmVyR2V0RGF0YVdoZW5E
cm9wcGluZ0ltYWdlQW5kTWFya3VwKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1
MDApXSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgo
V0tQcmVmZXJlbmNlc1JlZilbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcmVmZXJlbmNlcywgdHJ1
ZSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiRGF0YVRy
YW5zZmVyIl07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVs
YXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBhdXRvIGl0
ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAg
IFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmll
cjooTlNTdHJpbmcgKilrVVRUeXBlUE5HIHdpdGhEYXRhOnRlc3RJY29uSW1hZ2VEYXRhKCldOwor
ICAgIE5TU3RyaW5nICptYXJrdXBTdHJpbmcgPSBAIjxzY3JpcHQ+YmFyKCk8L3NjcmlwdD48c3Ry
b25nIG9ubW91c2Vkb3duPWphdmFzY3JpcHQ6dm9pZCgwKT5IRUxMTyBXT1JMRDwvc3Ryb25nPiI7
CisgICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVu
dGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOlttYXJrdXBTdHJpbmcgZGF0
YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKKyAgICBbaXRlbVByb3ZpZGVy
IHNldFN1Z2dlc3RlZE5hbWU6QCJpY29uIl07CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0
ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVu
RnJvbTpDR1BvaW50WmVybyB0bzpDR1BvaW50TWFrZSg1MCwgMTAwKV07CisKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEoIkZpbGVzLCB0ZXh0L2h0bWwiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAidHlwZXMudGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCIo
U1RSSU5HLCB0ZXh0L2h0bWwpLCAoRklMRSwgaW1hZ2UvcG5nKSIsIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJpdGVtcy50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEoIignaWNvbi5wbmcnLCBpbWFnZS9wbmcpIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImZpbGVzLnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9XS19T
VFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInVybERhdGEu
dGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGV4dERhdGEudGV4dENvbnRlbnQiXSk7CisgICAgRVhQ
RUNUX1dLX1NUUkVRKCJIRUxMTyBXT1JMRCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJodG1sRGF0YS50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfRkFMU0UoW1t3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJyYXdIVE1MRGF0YS50ZXh0Q29u
dGVudCJdIGNvbnRhaW5zU3RyaW5nOkAic2NyaXB0Il0pOworfQorCitURVNUKERyYWdBbmREcm9w
VGVzdHMsIERhdGFUcmFuc2ZlckdldERhdGFXaGVuRHJvcHBpbmdQbGFpblRleHQpCit7CisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91
c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOworICAgIGF1
dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0
aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAInNlbGVjdChwbGFpbikiXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoNTAsIDc1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07CisgICAgY2hlY2tK
U09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91
dHB1dC52YWx1ZSJdLCBAeworICAgICAgICBAImRyYWdvdmVyIjogQHsgQCJ0ZXh0L3BsYWluIiA6
IEAiIiB9LAorICAgICAgICBAImRyb3AiOiBAeyBAInRleHQvcGxhaW4iIDogQCJQbGFpbiB0ZXh0
IiB9CisgICAgfSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRGF0YVRyYW5zZmVyR2V0
RGF0YVdoZW5Ecm9wcGluZ0N1c3RvbURhdGEpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6
QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHRO
UyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQo
KV0pOworCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNlbGVj
dChyaWNoKSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3
cml0ZUN1c3RvbURhdGEgPSB0cnVlIl07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRN
YWtlKDUwLCAyMjUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKKyAgICBjaGVja0pTT05XaXRo
TG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZh
bHVlIl0sIEB7CisgICAgICAgIEAiZHJhZ292ZXIiIDogQHsKKyAgICAgICAgICAgIEAidGV4dC9w
bGFpbiIgOiBAIiIsCisgICAgICAgICAgICBAImZvby9wbGFpbiIgOiBAIiIsCisgICAgICAgICAg
ICBAInRleHQvaHRtbCIgOiBAIiIsCisgICAgICAgICAgICBAImJhci9odG1sIiA6IEAiIiwKKyAg
ICAgICAgICAgIEAidGV4dC91cmktbGlzdCIgOiBAIiIsCisgICAgICAgICAgICBAImJhei91cmkt
bGlzdCIgOiBAIiIKKyAgICAgICAgfSwKKyAgICAgICAgQCJkcm9wIiA6IEB7CisgICAgICAgICAg
ICBAInRleHQvcGxhaW4iIDogQCJiZW4gYml0ZGlkZGxlIiwKKyAgICAgICAgICAgIEAiZm9vL3Bs
YWluIiA6IEAiZXZhIGx1IGF0b3IiLAorICAgICAgICAgICAgQCJ0ZXh0L2h0bWwiIDogQCI8Yj5i
b2xkIHRleHQ8L2I+IiwKKyAgICAgICAgICAgIEAiYmFyL2h0bWwiIDogQCI8aT5pdGFsaWMgdGV4
dDwvaT4iLAorICAgICAgICAgICAgQCJ0ZXh0L3VyaS1saXN0IiA6IEAiaHR0cHM6Ly93d3cuYXBw
bGUuY29tIiwKKyAgICAgICAgICAgIEAiYmF6L3VyaS1saXN0IiA6IEAiaHR0cHM6Ly93d3cud2Vi
a2l0Lm9yZyIKKyAgICAgICAgfQorICAgIH0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMs
IERhdGFUcmFuc2ZlckdldERhdGFXaGVuRHJvcHBpbmdVUkwpCit7CisgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQ
YWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOworICAgIGF1dG8gc2ltdWxhdG9y
ID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2Vi
Vmlldy5nZXQoKV0pOworCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAInJpY2guaW5uZXJIVE1MID0gJzxhIGhyZWY9XCJodHRwczovL3d3dy5hcHBsZS5jb20vXCI+
VGhpcyBpcyBhIGxpbmsuPC9hPiciXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1h
a2UoNTAsIDIyNSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOworICAgIGNoZWNrSlNPTldpdGhM
b2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFs
dWUiXSwgQHsKKyAgICAgICAgQCJkcmFnb3ZlciI6IEB7CisgICAgICAgICAgICBAInRleHQvdXJp
LWxpc3QiIDogQCIiLAorICAgICAgICAgICAgQCJ0ZXh0L3BsYWluIiA6IEAiIgorICAgICAgICB9
LAorICAgICAgICBAImRyb3AiOiBAeworICAgICAgICAgICAgQCJ0ZXh0L3VyaS1saXN0IiA6IEAi
aHR0cHM6Ly93d3cuYXBwbGUuY29tLyIsCisgICAgICAgICAgICBAInRleHQvcGxhaW4iIDogQCJo
dHRwczovL3d3dy5hcHBsZS5jb20vIgorICAgICAgICB9CisgICAgfSk7Cit9CisKK1RFU1QoRHJh
Z0FuZERyb3BUZXN0cywgRGF0YVRyYW5zZmVyR2V0RGF0YVdoZW5Ecm9wcGluZ0ltYWdlV2l0aEZp
bGVVUkwpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10
eXBlcyJdOworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9y
IGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgYXV0byBpdGVt
UHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBO
U1VSTCAqaWNvblVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJp
Y29uIiB3aXRoRXh0ZW5zaW9uOkAicG5nIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJl
c291cmNlcyJdOworICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJGaWxlUmVwcmVzZW50YXRpb25G
b3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlUE5HIGZpbGVPcHRpb25zOjAgdmlz
aWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbCBsb2FkSGFu
ZGxlcjpbcHJvdGVjdGVkSWNvblVSTCA9IHJldGFpblB0cihpY29uVVJMKV0gKEZpbGVMb2FkQ29t
cGxldGlvbkJsb2NrIGNvbXBsZXRpb25IYW5kbGVyKSAtPiBOU1Byb2dyZXNzICogeworICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihwcm90ZWN0ZWRJY29uVVJMLmdldCgpLCBOTywgbmlsKTsKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICB9XTsKKyAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2Jq
ZWN0Omljb25VUkwgdmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9u
c1Zpc2liaWxpdHlBbGxdOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJz
OkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1Bv
aW50TWFrZSgzMDAsIDM3NSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOworCisgICAgLy8gRmls
ZSBVUkxzIHNob3VsZCBuZXZlciBiZSBleHBvc2VkIGRpcmVjdGx5IHRvIHdlYiBjb250ZW50LCBz
byBEYXRhVHJhbnNmZXIuZ2V0RGF0YSBzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBoZXJl
LgorICAgIGNoZWNrSlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwgQHsKKyAgICAgICAgQCJkcmFnb3ZlciI6IEB7IEAi
RmlsZXMiOiBAIiIsIEAidGV4dC91cmktbGlzdCI6IEAiIiB9LAorICAgICAgICBAImRyb3AiOiBA
eyBAIkZpbGVzIjogQCIiLCBAInRleHQvdXJpLWxpc3QiOiBAIiIgfQorICAgIH0pOworfQorCitU
RVNUKERyYWdBbmREcm9wVGVzdHMsIERhdGFUcmFuc2ZlckdldERhdGFXaGVuRHJvcHBpbmdJbWFn
ZVdpdGhIVFRQVVJMKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Cisg
ICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJh
bnNmZXItdHlwZXMiXTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1Np
bXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIGF1
dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7
CisgICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVu
dGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVKUEVHIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJS
ZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGwgbG9hZEhhbmRsZXI6Xk5TUHJvZ3Jlc3MgKihEYXRh
TG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uSGFuZGxlcikKKyAgICB7CisgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFVJSW1hZ2VKUEVHUmVwcmVzZW50YXRpb24odGVzdEljb25JbWFnZSgp
LCAwLjUpLCBuaWwpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH1dOworICAgIFtpdGVtUHJv
dmlkZXIgcmVnaXN0ZXJPYmplY3Q6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0
Lm9yZyJdIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNp
YmlsaXR5QWxsXTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBp
dGVtUHJvdmlkZXIuZ2V0KCkgXV07CisKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1h
a2UoMzAwLCAzNzUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKKyAgICBjaGVja0pTT05XaXRo
TG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZh
bHVlIl0sIEB7CisgICAgICAgIEAiZHJhZ292ZXIiOiBAeyBAIkZpbGVzIjogQCIiLCBAInRleHQv
dXJpLWxpc3QiOiBAIiIgfSwKKyAgICAgICAgQCJkcm9wIjogQHsgQCJGaWxlcyI6IEAiIiwgQCJ0
ZXh0L3VyaS1saXN0IjogQCJodHRwOi8vd2Via2l0Lm9yZy8iIH0KKyAgICB9KTsKK30KKworVEVT
VChEcmFnQW5kRHJvcFRlc3RzLCBEYXRhVHJhbnNmZXJHZXREYXRhV2hlbkRyb3BwaW5nUmVzcGVj
dHNQcmVzZW50YXRpb25TdHlsZSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1bXAt
ZGF0YXRyYW5zZmVyLXR5cGVzIl07CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJh
Z2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisK
KyAgICBydW5UZXN0V2l0aFRlbXBvcmFyeVRleHRGaWxlKF4oTlNVUkwgKmZpbGVVUkwpIHsKKyAg
ICAgICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2Nd
IGluaXRdKTsKKyAgICAgICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckZpbGVSZXByZXNlbnRhdGlv
bkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0IGZpbGVP
cHRpb25zOjAgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0
eUFsbCBsb2FkSGFuZGxlcjpbcHJvdGVjdGVkRmlsZVVSTCA9IHJldGFpblB0cihmaWxlVVJMKV0g
KEZpbGVMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRpb25IYW5kbGVyKSAtPiBOU1Byb2dyZXNz
ICogeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocHJvdGVjdGVkRmlsZVVSTC5nZXQo
KSwgTk8sIG5pbCk7CisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICB9XTsKKyAgICAg
ICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdl
dCgpIF1dOworCisgICAgICAgIFtpdGVtUHJvdmlkZXIgc2V0UHJlZmVycmVkUHJlc2VudGF0aW9u
U3R5bGU6VUlQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUF0dGFjaG1lbnRdOworICAgICAgICBb
c2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCAzNzUpIHRvOkNHUG9pbnRNYWtlKDUw
LCAzNzUpXTsKKyAgICAgICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAeworICAgICAgICAgICAgQCJk
cmFnb3ZlciI6IEB7IEAiRmlsZXMiIDogQCIiIH0sCisgICAgICAgICAgICBAImRyb3AiOiBAeyBA
IkZpbGVzIiA6IEAiIiB9CisgICAgICAgIH0pOworCisgICAgICAgIFtpdGVtUHJvdmlkZXIgc2V0
UHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGU6VUlQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUlu
bGluZV07CisgICAgICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDM3NSkg
dG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOworICAgICAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7
CisgICAgICAgICAgICBAImRyYWdvdmVyIjogQHsgQCJ0ZXh0L3BsYWluIiA6IEAiIiB9LAorICAg
ICAgICAgICAgQCJkcm9wIjogQHsgQCJ0ZXh0L3BsYWluIiA6IEAiVGhpcyBpcyBhIHRpbnkgYmxv
YiBvZiB0ZXh0LiIgfQorICAgICAgICB9KTsKKyAgICB9KTsKK30KKworVEVTVChEcmFnQW5kRHJv
cFRlc3RzLCBEYXRhVHJhbnNmZXJTZXREYXRhQ2Fubm90V3JpdGVQbGF0Zm9ybVR5cGVzKQorewor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKKyAg
ICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5p
dFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJzZWxlY3QocmljaCkiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY3VzdG9tRGF0YSA9IHsgJ3RleHQvcGxhaW4nIDogJ2Zv
bycsICdjb20uYWRvYmUucGRmJyA6ICd0cnkgYW5kIGRlY29kZSBtZSEnIH0iXTsKKyAgICBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0b21EYXRhID0gdHJ1
ZSJdOworCisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCAyMjUpIHRvOkNH
UG9pbnRNYWtlKDUwLCAzNzUpXTsKKyAgICBjaGVja0ZpcnN0VHlwZUlzUHJlc2VudEFuZFNlY29u
ZFR5cGVJc01pc3Npbmcoc2ltdWxhdG9yLmdldCgpLCBrVVRUeXBlVVRGOFBsYWluVGV4dCwga1VU
VHlwZVBERik7CisgICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAeworICAgICAgICBAImRyYWdvdmVy
IjogQHsKKyAgICAgICAgICAgIEAidGV4dC9wbGFpbiI6IEAiIiwKKyAgICAgICAgICAgIEAiY29t
LmFkb2JlLnBkZiI6IEAiIgorICAgICAgICB9LAorICAgICAgICBAImRyb3AiOiBAeworICAgICAg
ICAgICAgQCJ0ZXh0L3BsYWluIjogQCJmb28iLAorICAgICAgICAgICAgQCJjb20uYWRvYmUucGRm
IjogQCJ0cnkgYW5kIGRlY29kZSBtZSEiCisgICAgICAgIH0KKyAgICB9KTsKK30KKworVEVTVChE
cmFnQW5kRHJvcFRlc3RzLCBEYXRhVHJhbnNmZXJHZXREYXRhUmVhZFBsYWluQW5kUmljaFRleHQp
Cit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJEYXRhVHJhbnNmZXIiXTsKKyAgICBhdXRv
IHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhX
ZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHRO
UyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgTlNEaWN0aW9uYXJ5ICp0ZXh0
QXR0cmlidXRlcyA9IEB7IE5TRm9udEF0dHJpYnV0ZU5hbWU6IFtVSUZvbnQgYm9sZFN5c3RlbUZv
bnRPZlNpemU6MjBdIH07CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpyaWNoVGV4dCA9IFtbTlNB
dHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIldlYktpdCIgYXR0cmlidXRl
czp0ZXh0QXR0cmlidXRlc107CisgICAgW2l0ZW1Qcm92aWRlciByZWdpc3Rlck9iamVjdDpyaWNo
VGV4dCB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxs
XTsKKyAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OltOU1VSTCBVUkxXaXRoU3RyaW5n
OkAiaHR0cHM6Ly93d3cud2Via2l0Lm9yZy8iXSB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVw
cmVzZW50YXRpb25WaXNpYmlsaXR5QWxsXTsKKyAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2Jq
ZWN0OkAiV2ViS2l0IiB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNp
YmlsaXR5QWxsXTsKKworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBb
IGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludFpl
cm8gdG86Q0dQb2ludE1ha2UoNTAsIDEwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCJ0ZXh0
L2h0bWwsIHRleHQvcGxhaW4sIHRleHQvdXJpLWxpc3QiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAidHlwZXMudGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NU
UkVRKCJXZWJLaXQiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGV4
dERhdGEudGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczovL3d3dy53
ZWJraXQub3JnLyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ1cmxE
YXRhLnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiV2ViS2l0IiwgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImh0bWxEYXRhLnRleHRDb250ZW50Il0p
OworICAgIEVYUEVDVF9XS19TVFJFUSgiKFNUUklORywgdGV4dC9odG1sKSwgKFNUUklORywgdGV4
dC9wbGFpbiksIChTVFJJTkcsIHRleHQvdXJpLWxpc3QpIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAIml0ZW1zLnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9XS19T
VFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImZpbGVzLnRl
eHRDb250ZW50Il0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIERhdGFUcmFuc2ZlclN1
cHByZXNzR2V0RGF0YUR1ZVRvUHJlc2VuY2VPZlRleHRGaWxlKQoreworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0
UGFnZU5hbWVkOkAiRGF0YVRyYW5zZmVyIl07CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5T
KFtbRHJhZ2dpbmdTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgp
XSk7CisKKyAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBh
bGxvY10gaW5pdF0pOworICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6QCJIZWxsbyB3
b3JsZCIgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFs
bF07CisgICAgW2l0ZW1Qcm92aWRlciBzZXRTdWdnZXN0ZWROYW1lOkAiaGVsbG8udHh0Il07CisK
KyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIu
Z2V0KCkgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRaZXJvIHRvOkNHUG9pbnRN
YWtlKDUwLCAxMDApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiRmlsZXMiLCBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidHlwZXMudGV4dENvbnRlbnQiXSk7CisgICAg
RVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAidGV4dERhdGEudGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidXJsRGF0YS50ZXh0Q29udGVudCJd
KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJodG1sRGF0YS50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
IihGSUxFLCB0ZXh0L3BsYWluKSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJpdGVtcy50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIignaGVsbG8u
dHh0JywgdGV4dC9wbGFpbikiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAiZmlsZXMudGV4dENvbnRlbnQiXSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRGF0
YVRyYW5zZmVyR2V0RGF0YUNhbm5vdFJlYWRQcml2YXRlQXJiaXRyYXJ5VHlwZXMpCit7CisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91
c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOworICAgIGF1
dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0
aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9w
dE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbaXRlbVByb3ZpZGVyIHJl
Z2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VU
VHlwZU1QMyB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5
QWxsIGxvYWRIYW5kbGVyOl5OU1Byb2dyZXNzICooRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sgY29t
cGxldGlvbkhhbmRsZXIpCisgICAgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihbQCJ0aGlz
IGlzIGEgdGVzdCIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddLCBuaWwp
OworICAgICAgICByZXR1cm4gbmlsOworICAgIH1dOworICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0
ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjpAIm9yZy5XZWJLaXQuVGVzdFdl
YktpdEFQSS5jdXN0b20tcGFzdGVib2FyZC10eXBlIiB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVy
UmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsIGxvYWRIYW5kbGVyOl5OU1Byb2dyZXNzICooRGF0
YUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkhhbmRsZXIpCisgICAgeworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihbQCJ0aGlzIGlzIGFub3RoZXIgdGVzdCIgZGF0YVVzaW5nRW5jb2Rp
bmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddLCBuaWwpOworICAgICAgICByZXR1cm4gbmlsOworICAg
IH1dOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92
aWRlci5nZXQoKSBdXTsKKyAgICBbaXRlbVByb3ZpZGVyIHNldFByZWZlcnJlZFByZXNlbnRhdGlv
blN0eWxlOlVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVJbmxpbmVdOworICAgIFtzaW11bGF0
b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDM3NSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSld
OworICAgIGNoZWNrSlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwgQHsKKyAgICAgICAgQCJkcmFnb3ZlciI6IEB7IH0s
CisgICAgICAgIEAiZHJvcCI6IEB7IH0KKyAgICB9KTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRl
c3RzLCBEYXRhVHJhbnNmZXJTZXREYXRhVmFsaWRVUkwpCit7CisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdl
TmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOworICAgIGF1dG8gc2ltdWxhdG9yID0g
YWRvcHROUyhbW0RyYWdnaW5nU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmll
dy5nZXQoKV0pOworCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
InNlbGVjdChyaWNoKSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJjdXN0b21EYXRhID0geyAndXJsJyA6ICdodHRwczovL3dlYmtpdC5vcmcvYi8xMjMnIH0i
XTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0
b21EYXRhID0gdHJ1ZSJdOworCisgICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBb
c2ltdWxhdG9yLmdldCgpIHNldE92ZXJyaWRlUGVyZm9ybURyb3BCbG9jazpeTlNBcnJheTxVSURy
YWdJdGVtICo+ICooaWQgPFVJRHJvcFNlc3Npb24+IHNlc3Npb24pCisgICAgeworICAgICAgICBF
WFBFQ1RfRVEoMVVMLCBzZXNzaW9uLml0ZW1zLmNvdW50KTsKKyAgICAgICAgYXV0byAqaXRlbSA9
IHNlc3Npb24uaXRlbXNbMF0uaXRlbVByb3ZpZGVyOworICAgICAgICBFWFBFQ1RfVFJVRShbaXRl
bS5yZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWtV
VFR5cGVVUkxdKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW2l0ZW0gY2FuTG9hZE9iamVjdE9mQ2xh
c3M6IFtOU1VSTCBjbGFzc11dKTsKKyAgICAgICAgW2l0ZW0gbG9hZE9iamVjdE9mQ2xhc3M6W05T
VVJMIGNsYXNzXSBjb21wbGV0aW9uSGFuZGxlcjpeKGlkPE5TSXRlbVByb3ZpZGVyUmVhZGluZz4g
dXJsLCBOU0Vycm9yICplcnJvcikgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoW3VybCBpc0tp
bmRPZkNsYXNzOiBbTlNVUkwgY2xhc3NdXSk7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEo
WyhOU1VSTCAqKXVybCBhYnNvbHV0ZVN0cmluZ10sIEAiaHR0cHM6Ly93ZWJraXQub3JnL2IvMTIz
Iik7CisgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfV07CisgICAgICAgIHJldHVy
biBzZXNzaW9uLml0ZW1zOworICAgIH1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50
TWFrZSg1MCwgMjI1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07CisKKyAgICBjaGVja0pTT05X
aXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0
LnZhbHVlIl0sIEB7CisgICAgICAgIEAiZHJhZ292ZXIiOiBAeworICAgICAgICAgICAgQCJ0ZXh0
L3VyaS1saXN0IjogQCIiLAorICAgICAgICB9LAorICAgICAgICBAImRyb3AiOiBAeworICAgICAg
ICAgICAgQCJ0ZXh0L3VyaS1saXN0IjogQCJodHRwczovL3dlYmtpdC5vcmcvYi8xMjMiLAorICAg
ICAgICB9CisgICAgfSk7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKK30K
KworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEYXRhVHJhbnNmZXJTZXREYXRhVW5lc2NhcGVkVVJM
KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcg
c3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMi
XTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzZWxlY3QocmljaCkiXTsKKyAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY3VzdG9tRGF0YSA9IHsgJ3VybCcgOiAnaHR0
cDovL3dlYmtpdC5vcmcvYi9cdTRGNjBcdTU5N0Q7P3g9OCArIDYnIH0iXTsKKyAgICBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0b21EYXRhID0gdHJ1ZSJd
OworCisgICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBbc2ltdWxhdG9yLmdldCgp
IHNldE92ZXJyaWRlUGVyZm9ybURyb3BCbG9jazpeTlNBcnJheTxVSURyYWdJdGVtICo+ICooaWQg
PFVJRHJvcFNlc3Npb24+IHNlc3Npb24pCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMVVMLCBz
ZXNzaW9uLml0ZW1zLmNvdW50KTsKKyAgICAgICAgYXV0byAqaXRlbSA9IHNlc3Npb24uaXRlbXNb
MF0uaXRlbVByb3ZpZGVyOworICAgICAgICBFWFBFQ1RfVFJVRShbaXRlbS5yZWdpc3RlcmVkVHlw
ZUlkZW50aWZpZXJzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVVUkxdKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoW2l0ZW0gY2FuTG9hZE9iamVjdE9mQ2xhc3M6IFtOU1VSTCBjbGFz
c11dKTsKKyAgICAgICAgW2l0ZW0gbG9hZE9iamVjdE9mQ2xhc3M6W05TVVJMIGNsYXNzXSBjb21w
bGV0aW9uSGFuZGxlcjpeKGlkPE5TSXRlbVByb3ZpZGVyUmVhZGluZz4gdXJsLCBOU0Vycm9yICpl
cnJvcikgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoW3VybCBpc0tpbmRPZkNsYXNzOiBbTlNV
UkwgY2xhc3NdXSk7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoWyhOU1VSTCAqKXVybCBh
YnNvbHV0ZVN0cmluZ10sIEAiaHR0cDovL3dlYmtpdC5vcmcvYi8lRTQlQkQlQTAlRTUlQTUlQkQ7
P3g9OCUyMCslMjA2Iik7CisgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfV07Cisg
ICAgICAgIHJldHVybiBzZXNzaW9uLml0ZW1zOworICAgIH1dOworICAgIFtzaW11bGF0b3IgcnVu
RnJvbTpDR1BvaW50TWFrZSg1MCwgMjI1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07CisKKyAg
ICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7CisgICAgICAgIEAiZHJhZ292ZXIiOiBAeworICAgICAg
ICAgICAgQCJ0ZXh0L3VyaS1saXN0IjogQCIiLAorICAgICAgICB9LAorICAgICAgICBAImRyb3Ai
OiBAeworICAgICAgICAgICAgQCJ0ZXh0L3VyaS1saXN0IjogQCJodHRwOi8vd2Via2l0Lm9yZy9i
L1x1NEY2MFx1NTk3RDs/eD04ICsgNiIsCisgICAgICAgIH0KKyAgICB9KTsKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIERh
dGFUcmFuc2ZlclNldERhdGFJbnZhbGlkVVJMKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwg
MzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVk
OkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0
TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzZWxl
Y3QocmljaCkiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
Y3VzdG9tRGF0YSA9IHsgJ3VybCcgOiAnc29tZSByYW5kb20gc3RyaW5nJyB9Il07CisgICAgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIndyaXRlQ3VzdG9tRGF0YSA9IHRy
dWUiXTsKKworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgMjI1KSB0bzpD
R1BvaW50TWFrZSg1MCwgMzc1KV07CisgICAgTlNBcnJheSAqcmVnaXN0ZXJlZFR5cGVzID0gW3Np
bXVsYXRvci5nZXQoKS5zb3VyY2VJdGVtUHJvdmlkZXJzLmZpcnN0T2JqZWN0IHJlZ2lzdGVyZWRU
eXBlSWRlbnRpZmllcnNdOworICAgIEVYUEVDVF9GQUxTRShbcmVnaXN0ZXJlZFR5cGVzIGNvbnRh
aW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVVUkxdKTsKKyAgICBjaGVja0pTT05XaXRoTG9n
Z2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVl
Il0sIEB7CisgICAgICAgIEAiZHJhZ292ZXIiOiBAeworICAgICAgICAgICAgQCJ0ZXh0L3VyaS1s
aXN0IjogQCIiLAorICAgICAgICB9LAorICAgICAgICBAImRyb3AiOiBAeworICAgICAgICAgICAg
QCJ0ZXh0L3VyaS1saXN0IjogQCJzb21lIHJhbmRvbSBzdHJpbmciLAorICAgICAgICB9CisgICAg
fSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRGF0YVRyYW5zZmVyU2FuaXRpemVIVE1M
KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcg
c3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMi
XTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnZ2luZ1NpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzZWxlY3QocmljaCkiXTsKKyAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY3VzdG9tRGF0YSA9IHsgJ3RleHQvaHRtbCcg
OiAnPG1ldGEgY29udGVudD1cInNlY3JldFwiPiIKKyAgICAgICAgIjxiIG9ubW91c2VvdmVyPVwi
ZGFuZ2Vyb3VzQ29kZSgpXCI+aGVsbG88L2I+PCEtLSBzZWNyZXQtLT4sIHdvcmxkPHNjcmlwdD5k
YW5nZXJvdXNDb2RlKCk8L3NjcmlwdD4nIH0iXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0b21EYXRhID0gdHJ1ZSJdOworCisgICAgX19ibG9j
ayBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBbc2ltdWxhdG9yLmdldCgpIHNldE92ZXJyaWRlUGVy
Zm9ybURyb3BCbG9jazpeTlNBcnJheTxVSURyYWdJdGVtICo+ICooaWQgPFVJRHJvcFNlc3Npb24+
IHNlc3Npb24pCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMVVMLCBzZXNzaW9uLml0ZW1zLmNv
dW50KTsKKyAgICAgICAgYXV0byAqaXRlbSA9IHNlc3Npb24uaXRlbXNbMF0uaXRlbVByb3ZpZGVy
OworICAgICAgICBFWFBFQ1RfVFJVRShbaXRlbS5yZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzIGNv
bnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVIVE1MXSk7CisgICAgICAgIFtpdGVtIGxv
YWREYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBl
SFRNTCBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRGF0YSAqZGF0YSwgTlNFcnJvciAqZXJyb3IpIHsK
KyAgICAgICAgICAgIE5TU3RyaW5nICptYXJrdXAgPSBbW1tOU1N0cmluZyBhbGxvY10gaW5pdFdp
dGhEYXRhOihOU0RhdGEgKilkYXRhIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSBhdXRv
cmVsZWFzZV07CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShbbWFya3VwIGNvbnRhaW5zU3RyaW5n
OkAiaGVsbG8iXSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShbbWFya3VwIGNvbnRhaW5zU3Ry
aW5nOkAiLCB3b3JsZCJdKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShbbWFya3VwIGNvbnRh
aW5zU3RyaW5nOkAic2VjcmV0Il0pOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKFttYXJrdXAg
Y29udGFpbnNTdHJpbmc6QCJkYW5nZXJvdXNDb2RlIl0pOworICAgICAgICAgICAgZG9uZSA9IHRy
dWU7CisgICAgICAgIH1dOworICAgICAgICByZXR1cm4gc2Vzc2lvbi5pdGVtczsKKyAgICB9XTsK
KyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDIyNSkgdG86Q0dQb2ludE1h
a2UoNTAsIDM3NSldOworCisgICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAeworICAgICAgICBAImRy
YWdvdmVyIjogQHsKKyAgICAgICAgICAgIEAidGV4dC9odG1sIjogQCIiLAorICAgICAgICB9LAor
ICAgICAgICBAImRyb3AiOiBAeworICAgICAgICAgICAgQCJ0ZXh0L2h0bWwiOiBAIjxtZXRhIGNv
bnRlbnQ9XCJzZWNyZXRcIj48YiBvbm1vdXNlb3Zlcj1cImRhbmdlcm91c0NvZGUoKVwiPmhlbGxv
PC9iPjwhLS0gc2VjcmV0LS0+LCB3b3JsZDxzY3JpcHQ+ZGFuZ2Vyb3VzQ29kZSgpPC9zY3JpcHQ+
IiwKKyAgICAgICAgfQorICAgIH0pOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZSk7Cit9CisKKyNlbmRpZiAvLyBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MTAzMDAKKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYgLy8gRU5BQkxF
KERSQUdfU1VQUE9SVCkgJiYgUExBVEZPUk0oSU9TKSAmJiBXS19BUElfRU5BQkxFRApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9EcmFnZ2luZ1NpbXVsYXRvci5oIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9jb2NvYS9EcmFnZ2luZ1NpbXVsYXRvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAz
OWVjZmM0NTVkZTgzNjkxMTExYmJhMGRiMzg3NWIyYzNhMWRmMjMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0RyYWdnaW5nU2ltdWxhdG9yLmgKQEAgLTAsMCAr
MSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShEUkFHX1NV
UFBPUlQpICYmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKKyNp
bXBvcnQgPFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dL
SW5wdXREZWxlZ2F0ZS5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CisKKyNpZiBQTEFURk9S
TShJT1MpCisjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCA8VUlLaXQvTlNJdGVtUHJvdmlk
ZXIrVUlLaXRBZGRpdGlvbnMuaD4KKyNlbmRpZgorCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBEcmFnQW5kRHJvcFBoYXNlKSB7CisgICAgRHJhZ0FuZERyb3BQaGFzZUNhbmNlbGxlZCA9IDAs
CisgICAgRHJhZ0FuZERyb3BQaGFzZUJlZ2lubmluZyA9IDEsCisgICAgRHJhZ0FuZERyb3BQaGFz
ZUJlZ2FuID0gMiwKKyAgICBEcmFnQW5kRHJvcFBoYXNlRW50ZXJlZCA9IDMsCisgICAgRHJhZ0Fu
ZERyb3BQaGFzZVBlcmZvcm1pbmdEcm9wID0gNAorfTsKKworI2lmIFBMQVRGT1JNKElPUykKKwor
dHlwZWRlZiBOU0RpY3Rpb25hcnk8TlNOdW1iZXIgKiwgTlNWYWx1ZSAqPiAqUHJvZ3Jlc3NUb0NH
UG9pbnRWYWx1ZU1hcDsKKworQGludGVyZmFjZSBNb2NrRHJhZ0Ryb3BTZXNzaW9uIDogTlNPYmpl
Y3QgPFVJRHJhZ0Ryb3BTZXNzaW9uPiB7CitAcHJpdmF0ZQorICAgIFJldGFpblB0cjxOU0FycmF5
PiBfbW9ja0l0ZW1zOworICAgIFJldGFpblB0cjxVSVdpbmRvdz4gX3dpbmRvdzsKK30KK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljKSBDR1BvaW50IG1vY2tMb2NhdGlvbkluV2luZG93OworQHByb3BlcnR5
IChub25hdG9taWMpIEJPT0wgYWxsb3dNb3ZlOworQGVuZAorCitAaW50ZXJmYWNlIE1vY2tEcm9w
U2Vzc2lvbiA6IE1vY2tEcmFnRHJvcFNlc3Npb24gPFVJRHJvcFNlc3Npb24+CitAZW5kCisKK0Bp
bnRlcmZhY2UgTW9ja0RyYWdTZXNzaW9uIDogTW9ja0RyYWdEcm9wU2Vzc2lvbiA8VUlEcmFnU2Vz
c2lvbj4KK0BlbmQKKworQGludGVyZmFjZSBXS1dlYlZpZXcgKERyYWdBbmREcm9wVGVzdGluZykK
Ky0gKGlkIDxVSURyb3BJbnRlcmFjdGlvbkRlbGVnYXRlPilkcm9wSW50ZXJhY3Rpb25EZWxlZ2F0
ZTsKKy0gKGlkIDxVSURyYWdJbnRlcmFjdGlvbkRlbGVnYXRlPilkcmFnSW50ZXJhY3Rpb25EZWxl
Z2F0ZTsKKy0gKFVJRHJvcEludGVyYWN0aW9uICopZHJvcEludGVyYWN0aW9uOworLSAoVUlEcmFn
SW50ZXJhY3Rpb24gKilkcmFnSW50ZXJhY3Rpb247CitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCisKK0BpbnRlcmZhY2UgRHJhZ2dpbmdTaW11bGF0b3IgOiBOU09iamVjdDxXS1VJRGVs
ZWdhdGVQcml2YXRlLCBfV0tJbnB1dERlbGVnYXRlPgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhXZWJWaWV3OihUZXN0V0tXZWJWaWV3ICopd2ViVmlldzsKKy8vIFRoZSBzdGFydCBsb2NhdGlv
biwgZW5kIGxvY2F0aW9uLCBhbmQgbG9jYXRpb25zIG9mIGFkZGl0aW9uYWwgaXRlbSByZXF1ZXN0
cyBhcmUgYWxsIGluIHdpbmRvdyBjb29yZGluYXRlcy4KKy0gKHZvaWQpcnVuRnJvbTooQ0dQb2lu
dClzdGFydExvY2F0aW9uIHRvOihDR1BvaW50KWVuZExvY2F0aW9uOworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBOU0FycmF5PF9XS0F0dGFjaG1lbnQgKj4gKmluc2VydGVkQXR0YWNo
bWVudHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXk8X1dLQXR0YWNo
bWVudCAqPiAqcmVtb3ZlZEF0dGFjaG1lbnRzOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBEcmFnQW5kRHJvcFBoYXNlIHBoYXNlOworCisjaWYgUExBVEZPUk0oSU9TKQorCistICh2
b2lkKXJ1bkZyb206KENHUG9pbnQpc3RhcnRMb2NhdGlvbiB0bzooQ0dQb2ludCllbmRMb2NhdGlv
biBhZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnM6KFByb2dyZXNzVG9DR1BvaW50VmFsdWVN
YXApYWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zOworLSAodm9pZCl3YWl0Rm9ySW5wdXRT
ZXNzaW9uOworLSAodm9pZCllbmREYXRhVHJhbnNmZXI7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
KSBCT09MIGFsbG93c0ZvY3VzVG9TdGFydElucHV0U2Vzc2lvbjsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljKSBCT09MIHNob3VsZEVuc3VyZVVJQXBwbGljYXRpb247CitAcHJvcGVydHkgKG5vbmF0b21p
YykgQk9PTCBzaG91bGRBbGxvd01vdmVPcGVyYXRpb247CitAcHJvcGVydHkgKG5vbmF0b21pYykg
QmxvY2tQdHI8Qk9PTChfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKT4gc2hvd0N1c3RvbUFjdGlv
blNoZWV0QmxvY2s7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQmxvY2tQdHI8TlNBcnJheSAqKFVJ
SXRlbVByb3ZpZGVyICosIE5TQXJyYXkgKiwgTlNEaWN0aW9uYXJ5ICopPiBjb252ZXJ0SXRlbVBy
b3ZpZGVyc0Jsb2NrOworQHByb3BlcnR5IChub25hdG9taWMpIEJsb2NrUHRyPE5TQXJyYXkgKihp
ZCA8VUlEcm9wU2Vzc2lvbj4pPiBvdmVycmlkZVBlcmZvcm1Ecm9wQmxvY2s7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgc3Ryb25nKSBOU0FycmF5ICpleHRlcm5hbEl0ZW1Qcm92aWRlcnM7CitAcHJv
cGVydHkgKG5vbmF0b21pYykgQmxvY2tQdHI8TlNVSW50ZWdlcihOU1VJbnRlZ2VyLCBpZCk+IG92
ZXJyaWRlRHJhZ1VwZGF0ZUJsb2NrOworQHByb3BlcnR5IChub25hdG9taWMpIEJsb2NrUHRyPHZv
aWQoQk9PTCwgTlNBcnJheSAqKT4gZHJvcENvbXBsZXRpb25CbG9jazsKKworQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5ICpzb3VyY2VJdGVtUHJvdmlkZXJzOworQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXM7CitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXkgKmZpbmFsU2VsZWN0aW9uUmVj
dHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBsYXN0S25vd25EcmFn
Q2FyZXRSZWN0OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5PFVJVGFy
Z2V0ZWREcmFnUHJldmlldyAqPiAqbGlmdFByZXZpZXdzOworCisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQorCitAZW5kCisKKyNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiBXS19BUElf
RU5BQkxFRApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yLmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QzNzIwNThjNDk2NzY2
YTYyYzA5MGJhODc3M2Y0YzUxODgyYTAwMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKLQotI2ltcG9ydCAi
VGVzdFdLV2ViVmlldy5oIgotI2ltcG9ydCA8VUlLaXQvTlNJdGVtUHJvdmlkZXIrVUlLaXRBZGRp
dGlvbnMuaD4KLQotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxVSUtpdC9O
U1N0cmluZytVSUl0ZW1Qcm92aWRlci5oPgotI2ltcG9ydCA8VUlLaXQvTlNVUkwrVUlJdGVtUHJv
dmlkZXIuaD4KLSNpbXBvcnQgPFVJS2l0L1VJSW1hZ2UrVUlJdGVtUHJvdmlkZXIuaD4KLSNpbXBv
cnQgPFVJS2l0L1VJSXRlbVByb3ZpZGVyLmg+Ci0jaW1wb3J0IDxVSUtpdC9VSUl0ZW1Qcm92aWRl
cl9Qcml2YXRlLmg+Ci0jZWxzZQotCi1AaW50ZXJmYWNlIE5TVVJMICgpCi1AcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSwgc2V0dGVyPV9zZXRUaXRsZTopIE5TU3RyaW5nICpfdGl0bGU7Ci1AZW5k
Ci0KLSNkZWZpbmUgVUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5
QWxsIE5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsCi0KLUBwcm90b2Nv
bCBVSUl0ZW1Qcm92aWRlclJlYWRpbmcgPE5TSXRlbVByb3ZpZGVyUmVhZGluZz4KLQotQHJlcXVp
cmVkCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJdGVtUHJvdmlkZXJEYXRhOihOU0RhdGEgKilk
YXRhIHR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKXR5cGVJZGVudGlmaWVyIGVycm9yOihOU0Vy
cm9yICoqKW91dEVycm9yOwotCi1AZW5kCi0KLUBwcm90b2NvbCBVSUl0ZW1Qcm92aWRlcldyaXRp
bmcgPE5TSXRlbVByb3ZpZGVyV3JpdGluZz4KLQotQHJlcXVpcmVkCi0tIChOU1Byb2dyZXNzICop
bG9hZERhdGFXaXRoVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopdHlwZUlkZW50aWZpZXIgZm9y
SXRlbVByb3ZpZGVyQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRGF0YSAqLCBOU0Vycm9y
ICopKWNvbXBsZXRpb25IYW5kbGVyOwotCi1AZW5kCi0KLUBpbnRlcmZhY2UgTlNBdHRyaWJ1dGVk
U3RyaW5nICgpIDxVSUl0ZW1Qcm92aWRlclJlYWRpbmcsIFVJSXRlbVByb3ZpZGVyV3JpdGluZz4K
LUBlbmQKLUBpbnRlcmZhY2UgTlNTdHJpbmcgKCkgPFVJSXRlbVByb3ZpZGVyUmVhZGluZywgVUlJ
dGVtUHJvdmlkZXJXcml0aW5nPgotQGVuZAotQGludGVyZmFjZSBOU1VSTCAoKSA8VUlJdGVtUHJv
dmlkZXJSZWFkaW5nLCBVSUl0ZW1Qcm92aWRlcldyaXRpbmc+Ci1AZW5kCi1AaW50ZXJmYWNlIFVJ
SW1hZ2UgKCkgPFVJSXRlbVByb3ZpZGVyUmVhZGluZywgVUlJdGVtUHJvdmlkZXJXcml0aW5nPgot
QGVuZAotCi1AaW50ZXJmYWNlIFVJSXRlbVByb3ZpZGVyIDogTlNJdGVtUHJvdmlkZXIKLUBlbmQK
LQotI2VuZGlmCi0KLSNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tV
SURlbGVnYXRlUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L19XS0lucHV0RGVsZWdhdGUuaD4K
LSNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgotCi1AY2xhc3MgTW9ja0Ryb3BTZXNzaW9uOwotQGNs
YXNzIE1vY2tEcmFnU2Vzc2lvbjsKLQotQGludGVyZmFjZSBNb2NrRHJhZ0Ryb3BTZXNzaW9uIDog
TlNPYmplY3QgPFVJRHJhZ0Ryb3BTZXNzaW9uPiB7Ci1AcHJpdmF0ZQotICAgIFJldGFpblB0cjxO
U0FycmF5PiBfbW9ja0l0ZW1zOwotICAgIFJldGFpblB0cjxVSVdpbmRvdz4gX3dpbmRvdzsKLX0K
LUBwcm9wZXJ0eSAobm9uYXRvbWljKSBDR1BvaW50IG1vY2tMb2NhdGlvbkluV2luZG93OwotQHBy
b3BlcnR5IChub25hdG9taWMpIEJPT0wgYWxsb3dNb3ZlOwotQGVuZAotCi1AaW50ZXJmYWNlIE1v
Y2tEcm9wU2Vzc2lvbiA6IE1vY2tEcmFnRHJvcFNlc3Npb24gPFVJRHJvcFNlc3Npb24+Ci1AZW5k
Ci0KLUBpbnRlcmZhY2UgTW9ja0RyYWdTZXNzaW9uIDogTW9ja0RyYWdEcm9wU2Vzc2lvbiA8VUlE
cmFnU2Vzc2lvbj4KLUBlbmQKLQotZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgRGF0YUludGVyYWN0
aW9uRW50ZXJFdmVudE5hbWU7Ci1leHRlcm4gTlNTdHJpbmcgKiBjb25zdCBEYXRhSW50ZXJhY3Rp
b25PdmVyRXZlbnROYW1lOwotZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgRGF0YUludGVyYWN0aW9u
UGVyZm9ybU9wZXJhdGlvbkV2ZW50TmFtZTsKLWV4dGVybiBOU1N0cmluZyAqIGNvbnN0IERhdGFJ
bnRlcmFjdGlvbkxlYXZlRXZlbnROYW1lOwotZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgRGF0YUlu
dGVyYWN0aW9uU3RhcnRFdmVudE5hbWU7Ci0KLXR5cGVkZWYgTlNEaWN0aW9uYXJ5PE5TTnVtYmVy
ICosIE5TVmFsdWUgKj4gKlByb2dyZXNzVG9DR1BvaW50VmFsdWVNYXA7Ci0KLXR5cGVkZWYgTlNf
RU5VTShOU0ludGVnZXIsIERhdGFJbnRlcmFjdGlvblBoYXNlKSB7Ci0gICAgRGF0YUludGVyYWN0
aW9uQ2FuY2VsbGVkID0gMCwKLSAgICBEYXRhSW50ZXJhY3Rpb25CZWdpbm5pbmcgPSAxLAotICAg
IERhdGFJbnRlcmFjdGlvbkJlZ2FuID0gMiwKLSAgICBEYXRhSW50ZXJhY3Rpb25FbnRlcmVkID0g
MywKLSAgICBEYXRhSW50ZXJhY3Rpb25QZXJmb3JtaW5nID0gNAotfTsKLQotQGludGVyZmFjZSBX
S1dlYlZpZXcgKERyYWdBbmREcm9wVGVzdGluZykKLS0gKGlkIDxVSURyb3BJbnRlcmFjdGlvbkRl
bGVnYXRlPilkcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZTsKLS0gKGlkIDxVSURyYWdJbnRlcmFjdGlv
bkRlbGVnYXRlPilkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZTsKLS0gKFVJRHJvcEludGVyYWN0aW9u
ICopZHJvcEludGVyYWN0aW9uOwotLSAoVUlEcmFnSW50ZXJhY3Rpb24gKilkcmFnSW50ZXJhY3Rp
b247Ci1AZW5kCi0KLUBpbnRlcmZhY2UgRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIDogTlNPYmpl
Y3Q8V0tVSURlbGVnYXRlUHJpdmF0ZSwgX1dLSW5wdXREZWxlZ2F0ZT4gewotQHByaXZhdGUKLSAg
ICBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gX3dlYlZpZXc7Ci0gICAgUmV0YWluUHRyPE1vY2tE
cmFnU2Vzc2lvbj4gX2RyYWdTZXNzaW9uOwotICAgIFJldGFpblB0cjxNb2NrRHJvcFNlc3Npb24+
IF9kcm9wU2Vzc2lvbjsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IF9vYnNlcnZlZEV2
ZW50TmFtZXM7Ci0gICAgUmV0YWluUHRyPE5TQXJyYXk+IF9leHRlcm5hbEl0ZW1Qcm92aWRlcnM7
Ci0gICAgUmV0YWluUHRyPE5TQXJyYXkgKj4gX3NvdXJjZUl0ZW1Qcm92aWRlcnM7Ci0gICAgUmV0
YWluUHRyPE5TQXJyYXkgKj4gX2ZpbmFsU2VsZWN0aW9uUmVjdHM7Ci0gICAgQ0dQb2ludCBfc3Rh
cnRMb2NhdGlvbjsKLSAgICBDR1BvaW50IF9lbmRMb2NhdGlvbjsKLSAgICBDR1JlY3QgX2xhc3RL
bm93bkRyYWdDYXJldFJlY3Q7Ci0KLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeTxO
U051bWJlciAqLCBOU1ZhbHVlICo+Pl9yZW1haW5pbmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2Nh
dGlvbnNCeVByb2dyZXNzOwotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxOU1ZhbHVlICo+
Pl9xdWV1ZWRBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnM7Ci0gICAgUmV0YWluUHRyPE5T
TXV0YWJsZUFycmF5PFVJVGFyZ2V0ZWREcmFnUHJldmlldyAqPj4gX2xpZnRQcmV2aWV3czsKLQot
ICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxfV0tBdHRhY2htZW50ICo+PiBfaW5zZXJ0ZWRB
dHRhY2htZW50czsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk8X1dLQXR0YWNobWVudCAq
Pj4gX3JlbW92ZWRBdHRhY2htZW50czsKLQotICAgIGJvb2wgX2lzRG9uZVdhaXRpbmdGb3JJbnB1
dFNlc3Npb247Ci0gICAgZG91YmxlIF9jdXJyZW50UHJvZ3Jlc3M7Ci0gICAgYm9vbCBfaXNEb25l
V2l0aEN1cnJlbnRSdW47Ci0gICAgRGF0YUludGVyYWN0aW9uUGhhc2UgX3BoYXNlOwotCi0gICAg
UmV0YWluUHRyPFVJRHJvcFByb3Bvc2FsPiBfY3VycmVudERyb3BQcm9wb3NhbDsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlldzooVGVzdFdLV2ViVmlldyAqKXdlYlZpZXc7Ci0v
LyBUaGUgc3RhcnQgbG9jYXRpb24sIGVuZCBsb2NhdGlvbiwgYW5kIGxvY2F0aW9ucyBvZiBhZGRp
dGlvbmFsIGl0ZW0gcmVxdWVzdHMgYXJlIGFsbCBpbiB3aW5kb3cgY29vcmRpbmF0ZXMuCi0tICh2
b2lkKXJ1bkZyb206KENHUG9pbnQpc3RhcnRMb2NhdGlvbiB0bzooQ0dQb2ludCllbmRMb2NhdGlv
bjsKLS0gKHZvaWQpcnVuRnJvbTooQ0dQb2ludClzdGFydExvY2F0aW9uIHRvOihDR1BvaW50KWVu
ZExvY2F0aW9uIGFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uczooUHJvZ3Jlc3NUb0NHUG9p
bnRWYWx1ZU1hcClhZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnM7Ci0tICh2b2lkKXdhaXRG
b3JJbnB1dFNlc3Npb247Ci0tICh2b2lkKWVuZERhdGFUcmFuc2ZlcjsKLQotQHByb3BlcnR5IChu
b25hdG9taWMpIEJPT0wgYWxsb3dzRm9jdXNUb1N0YXJ0SW5wdXRTZXNzaW9uOwotQHByb3BlcnR5
IChub25hdG9taWMpIEJPT0wgc2hvdWxkRW5zdXJlVUlBcHBsaWNhdGlvbjsKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljKSBCT09MIHNob3VsZEFsbG93TW92ZU9wZXJhdGlvbjsKLUBwcm9wZXJ0eSAobm9u
YXRvbWljKSBCbG9ja1B0cjxCT09MKF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvICopPiBzaG93Q3Vz
dG9tQWN0aW9uU2hlZXRCbG9jazsKLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBCbG9ja1B0cjxOU0Fy
cmF5ICooVUlJdGVtUHJvdmlkZXIgKiwgTlNBcnJheSAqLCBOU0RpY3Rpb25hcnkgKik+IGNvbnZl
cnRJdGVtUHJvdmlkZXJzQmxvY2s7Ci1AcHJvcGVydHkgKG5vbmF0b21pYykgQmxvY2tQdHI8TlNB
cnJheSAqKGlkIDxVSURyb3BTZXNzaW9uPik+IG92ZXJyaWRlUGVyZm9ybURyb3BCbG9jazsKLUBw
cm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIE5TQXJyYXkgKmV4dGVybmFsSXRlbVByb3ZpZGVy
czsKLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBCbG9ja1B0cjxOU1VJbnRlZ2VyKE5TVUludGVnZXIs
IGlkKT4gb3ZlcnJpZGVEYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25CbG9jazsKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljKSBCbG9ja1B0cjx2b2lkKEJPT0wsIE5TQXJyYXkgKik+IGRhdGFJbnRlcmFjdGlv
bk9wZXJhdGlvbkNvbXBsZXRpb25CbG9jazsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBOU0FycmF5ICpzb3VyY2VJdGVtUHJvdmlkZXJzOwotQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXM7Ci1AcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIE5TQXJyYXkgKmZpbmFsU2VsZWN0aW9uUmVjdHM7Ci1AcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIERhdGFJbnRlcmFjdGlvblBoYXNlIHBoYXNlOwotQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBDR1JlY3QgbGFzdEtub3duRHJhZ0NhcmV0UmVjdDsK
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBcnJheTxVSVRhcmdldGVkRHJhZ1By
ZXZpZXcgKj4gKmxpZnRQcmV2aWV3czsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBOU0FycmF5PF9XS0F0dGFjaG1lbnQgKj4gKmluc2VydGVkQXR0YWNobWVudHM7Ci1AcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXk8X1dLQXR0YWNobWVudCAqPiAqcmVtb3Zl
ZEF0dGFjaG1lbnRzOwotCi1AZW5kCi0KLSNlbmRpZiAvLyBFTkFCTEUoREFUQV9JTlRFUkFDVElP
TikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvci5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU2YjBiMWZmM2JmZjBiNGI5
OGY3ZDdkMWE4N2NiODdiMmMzMDg0NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IubW0KKysrIC9kZXYvbnVsbApAQCAtMSw2NzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuaCIK
LQotI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQotCi0jaW1wb3J0ICJJbnN0YW5jZU1ldGhv
ZFN3aXp6bGVyLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgotI2ltcG9ydCAiVUlL
aXRTUEkuaCIKLQotI2ltcG9ydCA8VUlLaXQvVUlEcmFnSW50ZXJhY3Rpb24uaD4KLSNpbXBvcnQg
PFVJS2l0L1VJRHJhZ0l0ZW0uaD4KLSNpbXBvcnQgPFVJS2l0L1VJSW50ZXJhY3Rpb24uaD4KLSNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvX1dLRm9j
dXNlZEVsZW1lbnRJbmZvLmg+Ci0jaW1wb3J0IDxXZWJLaXQvX1dLRm9ybUlucHV0U2Vzc2lvbi5o
PgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+
Ci0KLVNPRlRfTElOS19GUkFNRVdPUksoVUlLaXQpCi1TT0ZUX0xJTksoVUlLaXQsIFVJQXBwbGlj
YXRpb25JbnN0YW50aWF0ZVNpbmdsZXRvbiwgdm9pZCwgKENsYXNzIHNpbmdsZXRvbkNsYXNzKSwg
KHNpbmdsZXRvbkNsYXNzKSkKLQotdXNpbmcgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEk7Ci0KLUBp
bXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKERyYWdBbmREcm9wVGVzdGluZykKLQotLSAoVUlWaWV3
ICopX2RyYWdEcm9wSW50ZXJhY3Rpb25WaWV3Ci17Ci0gICAgcmV0dXJuIFtzZWxmIHZhbHVlRm9y
S2V5OkAiX2N1cnJlbnRDb250ZW50VmlldyJdOwotfQotCi0tIChpZCA8VUlEcm9wSW50ZXJhY3Rp
b25EZWxlZ2F0ZT4pZHJvcEludGVyYWN0aW9uRGVsZWdhdGUKLXsKLSAgICByZXR1cm4gKGlkIDxV
SURyb3BJbnRlcmFjdGlvbkRlbGVnYXRlPilzZWxmLl9kcmFnRHJvcEludGVyYWN0aW9uVmlldzsK
LX0KLQotLSAoaWQgPFVJRHJhZ0ludGVyYWN0aW9uRGVsZWdhdGU+KWRyYWdJbnRlcmFjdGlvbkRl
bGVnYXRlCi17Ci0gICAgcmV0dXJuIChpZCA8VUlEcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZT4pc2Vs
Zi5fZHJhZ0Ryb3BJbnRlcmFjdGlvblZpZXc7Ci19Ci0KLS0gKFVJRHJvcEludGVyYWN0aW9uICop
ZHJvcEludGVyYWN0aW9uCi17Ci0gICAgVUlWaWV3ICppbnRlcmFjdGlvblZpZXcgPSBzZWxmLl9k
cmFnRHJvcEludGVyYWN0aW9uVmlldzsKLSAgICBmb3IgKGlkIDxVSUludGVyYWN0aW9uPiBpbnRl
cmFjdGlvbiBpbiBpbnRlcmFjdGlvblZpZXcuaW50ZXJhY3Rpb25zKSB7Ci0gICAgICAgIGlmIChb
aW50ZXJhY3Rpb24gaXNLaW5kT2ZDbGFzczpbVUlEcm9wSW50ZXJhY3Rpb24gY2xhc3NdXSkKLSAg
ICAgICAgICAgIHJldHVybiAoVUlEcm9wSW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbjsKLSAgICB9
Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoVUlEcmFnSW50ZXJhY3Rpb24gKilkcmFnSW50ZXJh
Y3Rpb24KLXsKLSAgICBVSVZpZXcgKmludGVyYWN0aW9uVmlldyA9IHNlbGYuX2RyYWdEcm9wSW50
ZXJhY3Rpb25WaWV3OwotICAgIGZvciAoaWQgPFVJSW50ZXJhY3Rpb24+IGludGVyYWN0aW9uIGlu
IGludGVyYWN0aW9uVmlldy5pbnRlcmFjdGlvbnMpIHsKLSAgICAgICAgaWYgKFtpbnRlcmFjdGlv
biBpc0tpbmRPZkNsYXNzOltVSURyYWdJbnRlcmFjdGlvbiBjbGFzc11dKQotICAgICAgICAgICAg
cmV0dXJuIChVSURyYWdJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uOwotICAgIH0KLSAgICByZXR1
cm4gbmlsOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBNb2NrRHJhZ0Ryb3BTZXNzaW9u
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEl0ZW1zOihOU0FycmF5IDxVSURyYWdJdGVtICo+
KilpdGVtcyBsb2NhdGlvbjooQ0dQb2ludClsb2NhdGlvbkluV2luZG93IHdpbmRvdzooVUlXaW5k
b3cgKil3aW5kb3cgYWxsb3dNb3ZlOihCT09MKWFsbG93TW92ZQotewotICAgIGlmIChzZWxmID0g
W3N1cGVyIGluaXRdKSB7Ci0gICAgICAgIF9tb2NrSXRlbXMgPSBpdGVtczsKLSAgICAgICAgX21v
Y2tMb2NhdGlvbkluV2luZG93ID0gbG9jYXRpb25JbldpbmRvdzsKLSAgICAgICAgX3dpbmRvdyA9
IHdpbmRvdzsKLSAgICAgICAgX2FsbG93TW92ZSA9IGFsbG93TW92ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKEJPT0wpYWxsb3dzTW92ZU9wZXJhdGlvbgotewotICAgIHJldHVy
biBfYWxsb3dNb3ZlOwotfQotCi0tIChCT09MKWlzUmVzdHJpY3RlZFRvRHJhZ2dpbmdBcHBsaWNh
dGlvbgotewotICAgIHJldHVybiBOTzsKLX0KLQotLSAoQk9PTCloYXNJdGVtc0NvbmZvcm1pbmdU
b1R5cGVJZGVudGlmaWVyczooTlNBcnJheTxOU1N0cmluZyAqPiAqKXR5cGVJZGVudGlmaWVycwot
ewotICAgIGZvciAoTlNTdHJpbmcgKnR5cGVJZGVudGlmaWVyIGluIHR5cGVJZGVudGlmaWVycykg
ewotICAgICAgICBCT09MIGhhc0l0ZW1Db25mb3JtaW5nVG9UeXBlID0gTk87Ci0gICAgICAgIGZv
ciAoVUlEcmFnSXRlbSAqaXRlbSBpbiBzZWxmLml0ZW1zKQotICAgICAgICAgICAgaGFzSXRlbUNv
bmZvcm1pbmdUb1R5cGUgfD0gW1tpdGVtLml0ZW1Qcm92aWRlciByZWdpc3RlcmVkVHlwZUlkZW50
aWZpZXJzXSBjb250YWluc09iamVjdDp0eXBlSWRlbnRpZmllcl07Ci0gICAgICAgIGlmICghaGFz
SXRlbUNvbmZvcm1pbmdUb1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgfQotICAg
IHJldHVybiBZRVM7Ci19Ci0KLS0gKEJPT0wpY2FuTG9hZE9iamVjdHNPZkNsYXNzOihDbGFzczxV
SUl0ZW1Qcm92aWRlclJlYWRpbmc+KWFDbGFzcwotewotICAgIGZvciAoVUlEcmFnSXRlbSAqaXRl
bSBpbiBzZWxmLml0ZW1zKSB7Ci0gICAgICAgIGlmIChbaXRlbS5pdGVtUHJvdmlkZXIgY2FuTG9h
ZE9iamVjdE9mQ2xhc3M6YUNsYXNzXSkKLSAgICAgICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQot
ICAgIHJldHVybiBOTzsKLX0KLQotLSAoQk9PTCljYW5Mb2FkT2JqZWN0c09mQ2xhc3NlczooTlNB
cnJheTxDbGFzczxVSUl0ZW1Qcm92aWRlclJlYWRpbmc+PiAqKWNsYXNzZXMKLXsKLSAgICBmb3Ig
KENsYXNzPFVJSXRlbVByb3ZpZGVyUmVhZGluZz4gYUNsYXNzIGluIGNsYXNzZXMpIHsKLSAgICAg
ICAgQk9PTCBjYW5Mb2FkID0gTk87Ci0gICAgICAgIGZvciAoVUlEcmFnSXRlbSAqaXRlbSBpbiBz
ZWxmLml0ZW1zKQotICAgICAgICAgICAgY2FuTG9hZCB8PSBbaXRlbS5pdGVtUHJvdmlkZXIgY2Fu
TG9hZE9iamVjdE9mQ2xhc3M6YUNsYXNzXTsKLSAgICAgICAgaWYgKCFjYW5Mb2FkKQotICAgICAg
ICAgICAgcmV0dXJuIE5POwotICAgIH0KLSAgICByZXR1cm4gWUVTOwotfQotCi0tIChOU0FycmF5
PFVJRHJhZ0l0ZW0gKj4gKilpdGVtcwotewotICAgIHJldHVybiBfbW9ja0l0ZW1zLmdldCgpOwot
fQotCi0tICh2b2lkKXNldEl0ZW1zOihOU0FycmF5PFVJRHJhZ0l0ZW0gKj4gKilpdGVtcwotewot
ICAgIF9tb2NrSXRlbXMgPSBpdGVtczsKLX0KLQotLSAodm9pZClhZGRJdGVtczooTlNBcnJheTxV
SURyYWdJdGVtICo+ICopaXRlbXMKLXsKLSAgICBpZiAoIVtpdGVtcyBjb3VudF0pCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghW19tb2NrSXRlbXMgY291bnRdKQotICAgICAgICBfbW9ja0l0
ZW1zID0gaXRlbXM7Ci0gICAgZWxzZQotICAgICAgICBfbW9ja0l0ZW1zID0gW19tb2NrSXRlbXMg
YXJyYXlCeUFkZGluZ09iamVjdHNGcm9tQXJyYXk6aXRlbXNdOwotfQotCi0tIChDR1BvaW50KWxv
Y2F0aW9uSW5WaWV3OihVSVZpZXcgKil2aWV3Ci17Ci0gICAgcmV0dXJuIFtfd2luZG93IGNvbnZl
cnRQb2ludDpfbW9ja0xvY2F0aW9uSW5XaW5kb3cgdG9WaWV3OnZpZXddOwotfQotCi1AZW5kCi0K
LU5TU3RyaW5nICogY29uc3QgRGF0YUludGVyYWN0aW9uRW50ZXJFdmVudE5hbWUgPSBAImRyYWdl
bnRlciI7Ci1OU1N0cmluZyAqIGNvbnN0IERhdGFJbnRlcmFjdGlvbk92ZXJFdmVudE5hbWUgPSBA
ImRyYWdvdmVyIjsKLU5TU3RyaW5nICogY29uc3QgRGF0YUludGVyYWN0aW9uUGVyZm9ybU9wZXJh
dGlvbkV2ZW50TmFtZSA9IEAiZHJvcCI7Ci1OU1N0cmluZyAqIGNvbnN0IERhdGFJbnRlcmFjdGlv
bkxlYXZlRXZlbnROYW1lID0gQCJkcmFnbGVhdmUiOwotTlNTdHJpbmcgKiBjb25zdCBEYXRhSW50
ZXJhY3Rpb25TdGFydEV2ZW50TmFtZSA9IEAiZHJhZ3N0YXJ0IjsKLQotQGltcGxlbWVudGF0aW9u
IE1vY2tEcm9wU2Vzc2lvbgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm92aWRlcnM6KE5T
QXJyYXk8VUlJdGVtUHJvdmlkZXIgKj4gKilwcm92aWRlcnMgbG9jYXRpb246KENHUG9pbnQpbG9j
YXRpb25JbldpbmRvdyB3aW5kb3c6KFVJV2luZG93ICopd2luZG93IGFsbG93TW92ZTooQk9PTClh
bGxvd01vdmUKLXsKLSAgICBhdXRvIGl0ZW1zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0XSk7Ci0gICAgZm9yIChVSUl0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyIGluIHBy
b3ZpZGVycykKLSAgICAgICAgW2l0ZW1zIGFkZE9iamVjdDpbW1tVSURyYWdJdGVtIGFsbG9jXSBp
bml0V2l0aEl0ZW1Qcm92aWRlcjppdGVtUHJvdmlkZXJdIGF1dG9yZWxlYXNlXV07Ci0KLSAgICBy
ZXR1cm4gW3N1cGVyIGluaXRXaXRoSXRlbXM6aXRlbXMuZ2V0KCkgbG9jYXRpb246bG9jYXRpb25J
bldpbmRvdyB3aW5kb3c6d2luZG93IGFsbG93TW92ZTphbGxvd01vdmVdOwotfQotCi0tIChCT09M
KWlzTG9jYWwKLXsKLSAgICByZXR1cm4gWUVTOwotfQotCi0tIChOU1Byb2dyZXNzICopcHJvZ3Jl
c3MKLXsKLSAgICByZXR1cm4gW05TUHJvZ3Jlc3MgZGlzY3JldGVQcm9ncmVzc1dpdGhUb3RhbFVu
aXRDb3VudDoxMDBdOwotfQotCi0tICh2b2lkKXNldFByb2dyZXNzSW5kaWNhdG9yU3R5bGU6KFVJ
RHJvcFNlc3Npb25Qcm9ncmVzc0luZGljYXRvclN0eWxlKXByb2dyZXNzSW5kaWNhdG9yU3R5bGUK
LXsKLX0KLQotLSAoVUlEcm9wU2Vzc2lvblByb2dyZXNzSW5kaWNhdG9yU3R5bGUpcHJvZ3Jlc3NJ
bmRpY2F0b3JTdHlsZQotewotICAgIHJldHVybiBVSURyb3BTZXNzaW9uUHJvZ3Jlc3NJbmRpY2F0
b3JTdHlsZU5vbmU7Ci19Ci0KLS0gKE5TVUludGVnZXIpb3BlcmF0aW9uTWFzawotewotICAgIHJl
dHVybiAwOwotfQotCi0tIChpZCA8VUlEcmFnU2Vzc2lvbj4pbG9jYWxEcmFnU2Vzc2lvbgotewot
ICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKEJPT0wpaGFzSXRlbXNDb25mb3JtaW5nVG9UeXBlSWRl
bnRpZmllcjooTlNTdHJpbmcgKil0eXBlSWRlbnRpZmllcgotewotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBOTzsKLX0KLQotLSAoQk9PTCljYW5DcmVhdGVJdGVtc09mQ2xh
c3M6KENsYXNzPFVJSXRlbVByb3ZpZGVyUmVhZGluZz4pYUNsYXNzCi17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIE5POwotfQotCi0tIChOU1Byb2dyZXNzICopbG9hZE9i
amVjdHNPZkNsYXNzOihDbGFzczxOU0l0ZW1Qcm92aWRlclJlYWRpbmc+KWFDbGFzcyBjb21wbGV0
aW9uOih2b2lkKF4pKE5TQXJyYXk8X19raW5kb2YgaWQgPE5TSXRlbVByb3ZpZGVyUmVhZGluZz4+
ICpvYmplY3RzKSljb21wbGV0aW9uCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIG5pbDsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTW9ja0RyYWdTZXNzaW9u
IHsKLSAgICBSZXRhaW5QdHI8aWQ+IF9sb2NhbENvbnRleHQ7Ci19Ci0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFdpbmRvdzooVUlXaW5kb3cgKil3aW5kb3cgYWxsb3dNb3ZlOihCT09MKWFsbG93
TW92ZQotewotICAgIHJldHVybiBbc3VwZXIgaW5pdFdpdGhJdGVtczpAWyBdIGxvY2F0aW9uOkNH
UG9pbnRaZXJvIHdpbmRvdzp3aW5kb3cgYWxsb3dNb3ZlOmFsbG93TW92ZV07Ci19Ci0KLS0gKE5T
VUludGVnZXIpbG9jYWxPcGVyYXRpb25NYXNrCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS0gKE5TVUludGVnZXIpZXh0ZXJuYWxPcGVyYXRpb25NYXNr
Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS0gKGlk
KXNlc3Npb24KLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChpZClsb2NhbENvbnRleHQKLXsK
LSAgICByZXR1cm4gX2xvY2FsQ29udGV4dC5nZXQoKTsKLX0KLQotLSAodm9pZClzZXRMb2NhbENv
bnRleHQ6KGlkKWxvY2FsQ29udGV4dAotewotICAgIF9sb2NhbENvbnRleHQgPSBsb2NhbENvbnRl
eHQ7Ci19Ci0KLUBlbmQKLQotc3RhdGljIGRvdWJsZSBwcm9ncmVzc0luY3JlbWVudFN0ZXAgPSAw
LjAzMzsKLXN0YXRpYyBkb3VibGUgcHJvZ3Jlc3NUaW1lU3RlcCA9IDAuMDE2Owotc3RhdGljIE5T
U3RyaW5nICpUZXN0V2ViS2l0QVBJU2ltdWxhdGVDYW5jZWxBbGxUb3VjaGVzTm90aWZpY2F0aW9u
TmFtZSA9IEAiVGVzdFdlYktpdEFQSVNpbXVsYXRlQ2FuY2VsQWxsVG91Y2hlc05vdGlmaWNhdGlv
bk5hbWUiOwotCi1zdGF0aWMgTlNBcnJheSAqZGF0YUludGVyYWN0aW9uRXZlbnROYW1lcygpCi17
Ci0gICAgc3RhdGljIE5TQXJyYXkgKmV2ZW50TmFtZXMgPSBuaWw7Ci0gICAgc3RhdGljIGRpc3Bh
dGNoX29uY2VfdCBvbmNlVG9rZW47Ci0gICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeKCkg
ewotICAgICAgICBldmVudE5hbWVzID0gQFsgRGF0YUludGVyYWN0aW9uRW50ZXJFdmVudE5hbWUs
IERhdGFJbnRlcmFjdGlvbk92ZXJFdmVudE5hbWUsIERhdGFJbnRlcmFjdGlvblBlcmZvcm1PcGVy
YXRpb25FdmVudE5hbWUsIERhdGFJbnRlcmFjdGlvbkxlYXZlRXZlbnROYW1lLCBEYXRhSW50ZXJh
Y3Rpb25TdGFydEV2ZW50TmFtZSBdOwotICAgIH0pOwotICAgIHJldHVybiBldmVudE5hbWVzOwot
fQotCi1AaW50ZXJmYWNlIERhdGFJbnRlcmFjdGlvblNpbXVsYXRvckFwcGxpY2F0aW9uIDogVUlB
cHBsaWNhdGlvbgotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gRGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yQXBwbGljYXRpb24KLS0gKHZvaWQpX2NhbmNlbEFsbFRvdWNoZXMKLXsKLSAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHBvc3ROb3RpZmljYXRpb25OYW1lOlRlc3RX
ZWJLaXRBUElTaW11bGF0ZUNhbmNlbEFsbFRvdWNoZXNOb3RpZmljYXRpb25OYW1lIG9iamVjdDpu
aWxdOwotfQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gRGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXc6KFRlc3RXS1dlYlZpZXcgKil3ZWJW
aWV3Ci17Ci0gICAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKLSAgICAgICAgX3dlYlZpZXcg
PSB3ZWJWaWV3OwotICAgICAgICBfc2hvdWxkRW5zdXJlVUlBcHBsaWNhdGlvbiA9IE5POwotICAg
ICAgICBfc2hvdWxkQWxsb3dNb3ZlT3BlcmF0aW9uID0gWUVTOwotICAgICAgICBfaXNEb25lV2Fp
dGluZ0ZvcklucHV0U2Vzc2lvbiA9IHRydWU7Ci0gICAgICAgIFtfd2ViVmlldyBzZXRVSURlbGVn
YXRlOnNlbGZdOwotICAgICAgICBbX3dlYlZpZXcgX3NldElucHV0RGVsZWdhdGU6c2VsZl07Ci0g
ICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBpZiAo
W193ZWJWaWV3IFVJRGVsZWdhdGVdID09IHNlbGYpCi0gICAgICAgIFtfd2ViVmlldyBzZXRVSURl
bGVnYXRlOm5pbF07Ci0KLSAgICBpZiAoW193ZWJWaWV3IF9pbnB1dERlbGVnYXRlXSA9PSBzZWxm
KQotICAgICAgICBbX3dlYlZpZXcgX3NldElucHV0RGVsZWdhdGU6bmlsXTsKLQotICAgIFtzdXBl
ciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClfcmVzZXRTaW11bGF0ZWRTdGF0ZQotewotICAgIF9w
aGFzZSA9IERhdGFJbnRlcmFjdGlvbkJlZ2lubmluZzsKLSAgICBfY3VycmVudFByb2dyZXNzID0g
MDsKLSAgICBfaXNEb25lV2l0aEN1cnJlbnRSdW4gPSBmYWxzZTsKLSAgICBfb2JzZXJ2ZWRFdmVu
dE5hbWVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0gICAgX2lu
c2VydGVkQXR0YWNobWVudHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRd
KTsKLSAgICBfcmVtb3ZlZEF0dGFjaG1lbnRzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0XSk7Ci0gICAgX2ZpbmFsU2VsZWN0aW9uUmVjdHMgPSBAWyBdOwotICAgIF9kcmFn
U2Vzc2lvbiA9IG5pbDsKLSAgICBfZHJvcFNlc3Npb24gPSBuaWw7Ci0gICAgX2N1cnJlbnREcm9w
UHJvcG9zYWwgPSBuaWw7Ci0gICAgX2xhc3RLbm93bkRyYWdDYXJldFJlY3QgPSBDR1JlY3RaZXJv
OwotICAgIF9yZW1haW5pbmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnNCeVByb2dyZXNz
ID0gbmlsOwotICAgIF9xdWV1ZWRBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnMgPSBhZG9w
dE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAgICBfbGlmdFByZXZpZXdzID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci19Ci0KLS0gKE5TQXJyYXkg
KilvYnNlcnZlZEV2ZW50TmFtZXMKLXsKLSAgICByZXR1cm4gX29ic2VydmVkRXZlbnROYW1lcy5n
ZXQoKTsKLX0KLQotLSAodm9pZClzaW11bGF0ZUFsbFRvdWNoZXNDYW5jZWxlZDooTlNOb3RpZmlj
YXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJm
b3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9hZHZhbmNlUHJv
Z3Jlc3MpIG9iamVjdDpuaWxdOwotICAgIF9waGFzZSA9IERhdGFJbnRlcmFjdGlvbkNhbmNlbGxl
ZDsKLSAgICBfY3VycmVudFByb2dyZXNzID0gMTsKLSAgICBfaXNEb25lV2l0aEN1cnJlbnRSdW4g
PSB0cnVlOwotICAgIGlmIChfZHJhZ1Nlc3Npb24pCi0gICAgICAgIFtbX3dlYlZpZXcgZHJhZ0lu
dGVyYWN0aW9uRGVsZWdhdGVdIGRyYWdJbnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJhZ0ludGVyYWN0
aW9uXSBzZXNzaW9uOl9kcmFnU2Vzc2lvbi5nZXQoKSBkaWRFbmRXaXRoT3BlcmF0aW9uOlVJRHJv
cE9wZXJhdGlvbkNhbmNlbF07Ci19Ci0KLS0gKHZvaWQpcnVuRnJvbTooQ0dQb2ludClzdGFydExv
Y2F0aW9uIHRvOihDR1BvaW50KWVuZExvY2F0aW9uCi17Ci0gICAgW3NlbGYgcnVuRnJvbTpzdGFy
dExvY2F0aW9uIHRvOmVuZExvY2F0aW9uIGFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uczpu
aWxdOwotfQotCi0tICh2b2lkKXJ1bkZyb206KENHUG9pbnQpc3RhcnRMb2NhdGlvbiB0bzooQ0dQ
b2ludCllbmRMb2NhdGlvbiBhZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnM6KFByb2dyZXNz
VG9DR1BvaW50VmFsdWVNYXApYWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zCi17Ci0gICAg
TlNOb3RpZmljYXRpb25DZW50ZXIgKmRlZmF1bHRDZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50
ZXIgZGVmYXVsdENlbnRlcl07Ci0gICAgW2RlZmF1bHRDZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3Ioc2ltdWxhdGVBbGxUb3VjaGVzQ2FuY2VsZWQ6KSBuYW1lOlRlc3RX
ZWJLaXRBUElTaW11bGF0ZUNhbmNlbEFsbFRvdWNoZXNOb3RpZmljYXRpb25OYW1lIG9iamVjdDpu
aWxdOwotCi0gICAgaWYgKF9zaG91bGRFbnN1cmVVSUFwcGxpY2F0aW9uKQotICAgICAgICBVSUFw
cGxpY2F0aW9uSW5zdGFudGlhdGVTaW5nbGV0b24oW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvckFw
cGxpY2F0aW9uIGNsYXNzXSk7Ci0KLSAgICBbc2VsZiBfcmVzZXRTaW11bGF0ZWRTdGF0ZV07Ci0K
LSAgICBpZiAoYWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zKQotICAgICAgICBfcmVtYWlu
aW5nQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zQnlQcm9ncmVzcyA9IGFkb3B0TlMoW2Fk
ZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9ucyBtdXRhYmxlQ29weV0pOwotCi0gICAgUmV0YWlu
UHRyPERhdGFJbnRlcmFjdGlvblNpbXVsYXRvcj4gc3Ryb25nU2VsZiA9IHNlbGY7Ci0gICAgZm9y
IChOU1N0cmluZyAqZXZlbnROYW1lIGluIGRhdGFJbnRlcmFjdGlvbkV2ZW50TmFtZXMoKSkgewot
ICAgICAgICBEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgKndlYWtTZWxmID0gc3Ryb25nU2VsZi5n
ZXQoKTsKLSAgICAgICAgW3dlYWtTZWxmLT5fd2ViVmlldyBwZXJmb3JtQWZ0ZXJSZWNlaXZpbmdN
ZXNzYWdlOmV2ZW50TmFtZSBhY3Rpb246XigpIHsKLSAgICAgICAgICAgIFt3ZWFrU2VsZi0+X29i
c2VydmVkRXZlbnROYW1lcyBhZGRPYmplY3Q6ZXZlbnROYW1lXTsKLSAgICAgICAgfV07Ci0gICAg
fQotCi0gICAgX3N0YXJ0TG9jYXRpb24gPSBzdGFydExvY2F0aW9uOwotICAgIF9lbmRMb2NhdGlv
biA9IGVuZExvY2F0aW9uOwotCi0gICAgaWYgKHNlbGYuZXh0ZXJuYWxJdGVtUHJvdmlkZXJzLmNv
dW50KSB7Ci0gICAgICAgIF9kcm9wU2Vzc2lvbiA9IGFkb3B0TlMoW1tNb2NrRHJvcFNlc3Npb24g
YWxsb2NdIGluaXRXaXRoUHJvdmlkZXJzOnNlbGYuZXh0ZXJuYWxJdGVtUHJvdmlkZXJzIGxvY2F0
aW9uOl9zdGFydExvY2F0aW9uIHdpbmRvdzpbX3dlYlZpZXcgd2luZG93XSBhbGxvd01vdmU6c2Vs
Zi5zaG91bGRBbGxvd01vdmVPcGVyYXRpb25dKTsKLSAgICAgICAgX3BoYXNlID0gRGF0YUludGVy
YWN0aW9uQmVnYW47Ci0gICAgICAgIFtzZWxmIF9hZHZhbmNlUHJvZ3Jlc3NdOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIF9kcmFnU2Vzc2lvbiA9IGFkb3B0TlMoW1tNb2NrRHJhZ1Nlc3Npb24gYWxs
b2NdIGluaXRXaXRoV2luZG93Oltfd2ViVmlldyB3aW5kb3ddIGFsbG93TW92ZTpzZWxmLnNob3Vs
ZEFsbG93TW92ZU9wZXJhdGlvbl0pOwotICAgICAgICBbX2RyYWdTZXNzaW9uIHNldE1vY2tMb2Nh
dGlvbkluV2luZG93Ol9zdGFydExvY2F0aW9uXTsKLSAgICAgICAgWyhpZCA8VUlEcmFnSW50ZXJh
Y3Rpb25EZWxlZ2F0ZV9Gb3JXZWJLaXRPbmx5PilbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uRGVs
ZWdhdGVdIF9kcmFnSW50ZXJhY3Rpb246W193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbl0gcHJlcGFy
ZUZvclNlc3Npb246X2RyYWdTZXNzaW9uLmdldCgpIGNvbXBsZXRpb246XigpIHsKLSAgICAgICAg
ICAgIERhdGFJbnRlcmFjdGlvblNpbXVsYXRvciAqd2Vha1NlbGYgPSBzdHJvbmdTZWxmLmdldCgp
OwotICAgICAgICAgICAgaWYgKHdlYWtTZWxmLT5fcGhhc2UgPT0gRGF0YUludGVyYWN0aW9uQ2Fu
Y2VsbGVkKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgd2Vha1NlbGYt
Pl9waGFzZSA9IERhdGFJbnRlcmFjdGlvbkJlZ2lubmluZzsKLSAgICAgICAgICAgIFt3ZWFrU2Vs
ZiBfYWR2YW5jZVByb2dyZXNzXTsKLSAgICAgICAgfV07Ci0gICAgfQotCi0gICAgVXRpbDo6cnVu
KCZfaXNEb25lV2l0aEN1cnJlbnRSdW4pOwotICAgIFtfd2ViVmlldyBjbGVhck1lc3NhZ2VIYW5k
bGVyczpkYXRhSW50ZXJhY3Rpb25FdmVudE5hbWVzKCldOwotICAgIF9maW5hbFNlbGVjdGlvblJl
Y3RzID0gW193ZWJWaWV3IHNlbGVjdGlvblJlY3RzQWZ0ZXJQcmVzZW50YXRpb25VcGRhdGVdOwot
Ci0gICAgW2RlZmF1bHRDZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07Ci19Ci0KLS0gKE5TQXJy
YXkgKilmaW5hbFNlbGVjdGlvblJlY3RzCi17Ci0gICAgcmV0dXJuIF9maW5hbFNlbGVjdGlvblJl
Y3RzLmdldCgpOwotfQotCi0tICh2b2lkKV9jb25jbHVkZURhdGFJbnRlcmFjdGlvbkFuZFBlcmZv
cm1PcGVyYXRpb25JZk5lY2Vzc2FyeQotewotICAgIF9sYXN0S25vd25EcmFnQ2FyZXRSZWN0ID0g
W193ZWJWaWV3IF9kcmFnQ2FyZXRSZWN0XTsKLSAgICBhdXRvIG9wZXJhdGlvbiA9IFtfY3VycmVu
dERyb3BQcm9wb3NhbCBvcGVyYXRpb25dOwotICAgIGlmIChvcGVyYXRpb24gIT0gVUlEcm9wT3Bl
cmF0aW9uQ2FuY2VsICYmIG9wZXJhdGlvbiAhPSBVSURyb3BPcGVyYXRpb25Gb3JiaWRkZW4pIHsK
LSAgICAgICAgW1tfd2ViVmlldyBkcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJvcEludGVyYWN0
aW9uOltfd2ViVmlldyBkcm9wSW50ZXJhY3Rpb25dIHBlcmZvcm1Ecm9wOl9kcm9wU2Vzc2lvbi5n
ZXQoKV07Ci0gICAgICAgIF9waGFzZSA9IERhdGFJbnRlcmFjdGlvblBlcmZvcm1pbmc7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgX2lzRG9uZVdpdGhDdXJyZW50UnVuID0gWUVTOwotICAgICAgICBf
cGhhc2UgPSBEYXRhSW50ZXJhY3Rpb25DYW5jZWxsZWQ7Ci0gICAgfQotCi0gICAgW1tfd2ViVmll
dyBkcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJvcEludGVyYWN0aW9uOltfd2ViVmlldyBkcm9w
SW50ZXJhY3Rpb25dIHNlc3Npb25EaWRFbmQ6X2Ryb3BTZXNzaW9uLmdldCgpXTsKLQotICAgIGlm
IChfZHJhZ1Nlc3Npb24pCi0gICAgICAgIFtbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uRGVsZWdh
dGVdIGRyYWdJbnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uXSBzZXNzaW9uOl9k
cmFnU2Vzc2lvbi5nZXQoKSBkaWRFbmRXaXRoT3BlcmF0aW9uOm9wZXJhdGlvbl07Ci19Ci0KLS0g
KHZvaWQpX2VucXVldWVQZW5kaW5nQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zCi17Ci0g
ICAgTlNNdXRhYmxlQXJyYXkgKnByb2dyZXNzVmFsdWVzVG9SZW1vdmUgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXldOwotICAgIGZvciAoTlNOdW1iZXIgKnByb2dyZXNzVmFsdWUgaW4gX3JlbWFpbmlu
Z0FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uc0J5UHJvZ3Jlc3MuZ2V0KCkpIHsKLSAgICAg
ICAgZG91YmxlIHByb2dyZXNzID0gcHJvZ3Jlc3NWYWx1ZS5kb3VibGVWYWx1ZTsKLSAgICAgICAg
aWYgKHByb2dyZXNzID4gX2N1cnJlbnRQcm9ncmVzcykKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBbcHJvZ3Jlc3NWYWx1ZXNUb1JlbW92ZSBhZGRPYmplY3Q6cHJvZ3Jlc3NWYWx1ZV07
Ci0gICAgICAgIFtfcXVldWVkQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zIGFkZE9iamVj
dDpbX3JlbWFpbmluZ0FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uc0J5UHJvZ3Jlc3Mgb2Jq
ZWN0Rm9yS2V5OnByb2dyZXNzVmFsdWVdXTsKLSAgICB9Ci0KLSAgICBmb3IgKE5TTnVtYmVyICpw
cm9ncmVzc1RvUmVtb3ZlIGluIHByb2dyZXNzVmFsdWVzVG9SZW1vdmUpCi0gICAgICAgIFtfcmVt
YWluaW5nQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zQnlQcm9ncmVzcyByZW1vdmVPYmpl
Y3RGb3JLZXk6cHJvZ3Jlc3NUb1JlbW92ZV07Ci19Ci0KLS0gKEJPT0wpX3NlbmRRdWV1ZWRBZGRp
dGlvbmFsSXRlbVJlcXVlc3QKLXsKLSAgICBpZiAoIVtfcXVldWVkQWRkaXRpb25hbEl0ZW1SZXF1
ZXN0TG9jYXRpb25zIGNvdW50XSkKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAgUmV0YWluUHRy
PE5TVmFsdWU+IHJlcXVlc3RMb2NhdGlvblZhbHVlID0gW19xdWV1ZWRBZGRpdGlvbmFsSXRlbVJl
cXVlc3RMb2NhdGlvbnMgb2JqZWN0QXRJbmRleDowXTsKLSAgICBbX3F1ZXVlZEFkZGl0aW9uYWxJ
dGVtUmVxdWVzdExvY2F0aW9ucyByZW1vdmVPYmplY3RBdEluZGV4OjBdOwotCi0gICAgYXV0byBy
ZXF1ZXN0TG9jYXRpb24gPSBbW193ZWJWaWV3IHdpbmRvd10gY29udmVydFBvaW50OltyZXF1ZXN0
TG9jYXRpb25WYWx1ZSBDR1BvaW50VmFsdWVdIHRvVmlldzpfd2ViVmlldy5nZXQoKV07Ci0gICAg
WyhpZCA8VUlEcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV9Qcm9wb3NlZF9TUElfMzMxNDY4MDM+KVtf
d2ViVmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gX2RyYWdJbnRlcmFjdGlvbjpbX3dlYlZp
ZXcgZHJhZ0ludGVyYWN0aW9uXSBpdGVtc0ZvckFkZGluZ1RvU2Vzc2lvbjpfZHJhZ1Nlc3Npb24u
Z2V0KCkgd2l0aFRvdWNoQXRQb2ludDpyZXF1ZXN0TG9jYXRpb24gY29tcGxldGlvbjpbZHJhZ1Nl
c3Npb24gPSBfZHJhZ1Nlc3Npb24sIGRyb3BTZXNzaW9uID0gX2Ryb3BTZXNzaW9uXSAoTlNBcnJh
eSAqaXRlbXMpIHsKLSAgICAgICAgW2RyYWdTZXNzaW9uIGFkZEl0ZW1zOml0ZW1zXTsKLSAgICAg
ICAgW2Ryb3BTZXNzaW9uIGFkZEl0ZW1zOml0ZW1zXTsKLSAgICB9XTsKLSAgICByZXR1cm4gWUVT
OwotfQotCi0tICh2b2lkKV9hZHZhbmNlUHJvZ3Jlc3MKLXsKLSAgICBbc2VsZiBfZW5xdWV1ZVBl
bmRpbmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnNdOwotICAgIGlmIChbc2VsZiBfc2Vu
ZFF1ZXVlZEFkZGl0aW9uYWxJdGVtUmVxdWVzdF0pIHsKLSAgICAgICAgW3NlbGYgX3NjaGVkdWxl
QWR2YW5jZVByb2dyZXNzXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIF9sYXN0S25v
d25EcmFnQ2FyZXRSZWN0ID0gW193ZWJWaWV3IF9kcmFnQ2FyZXRSZWN0XTsKLSAgICBfY3VycmVu
dFByb2dyZXNzICs9IHByb2dyZXNzSW5jcmVtZW50U3RlcDsKLSAgICBDR1BvaW50IGxvY2F0aW9u
SW5XaW5kb3cgPSBzZWxmLl9jdXJyZW50TG9jYXRpb247Ci0gICAgW19kcmFnU2Vzc2lvbiBzZXRN
b2NrTG9jYXRpb25JbldpbmRvdzpsb2NhdGlvbkluV2luZG93XTsKLSAgICBbX2Ryb3BTZXNzaW9u
IHNldE1vY2tMb2NhdGlvbkluV2luZG93OmxvY2F0aW9uSW5XaW5kb3ddOwotCi0gICAgaWYgKF9j
dXJyZW50UHJvZ3Jlc3MgPj0gMSkgewotICAgICAgICBfY3VycmVudFByb2dyZXNzID0gMTsKLSAg
ICAgICAgW3NlbGYgX2NvbmNsdWRlRGF0YUludGVyYWN0aW9uQW5kUGVyZm9ybU9wZXJhdGlvbklm
TmVjZXNzYXJ5XTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN3aXRjaCAoX3BoYXNl
KSB7Ci0gICAgY2FzZSBEYXRhSW50ZXJhY3Rpb25CZWdpbm5pbmc6IHsKLSAgICAgICAgTlNNdXRh
YmxlQXJyYXk8VUlJdGVtUHJvdmlkZXIgKj4gKml0ZW1Qcm92aWRlcnMgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXldOwotICAgICAgICBOU0FycmF5ICppdGVtcyA9IFtbX3dlYlZpZXcgZHJhZ0ludGVy
YWN0aW9uRGVsZWdhdGVdIGRyYWdJbnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9u
XSBpdGVtc0ZvckJlZ2lubmluZ1Nlc3Npb246X2RyYWdTZXNzaW9uLmdldCgpXTsKLSAgICAgICAg
aWYgKCFpdGVtcy5jb3VudCkgewotICAgICAgICAgICAgX3BoYXNlID0gRGF0YUludGVyYWN0aW9u
Q2FuY2VsbGVkOwotICAgICAgICAgICAgX2N1cnJlbnRQcm9ncmVzcyA9IDE7Ci0gICAgICAgICAg
ICBfaXNEb25lV2l0aEN1cnJlbnRSdW4gPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZm9yIChVSURyYWdJdGVtICppdGVtIGluIGl0ZW1zKSB7Ci0gICAg
ICAgICAgICBbaXRlbVByb3ZpZGVycyBhZGRPYmplY3Q6aXRlbS5pdGVtUHJvdmlkZXJdOwotICAg
ICAgICAgICAgVUlUYXJnZXRlZERyYWdQcmV2aWV3ICpsaWZ0UHJldmlldyA9IFtbX3dlYlZpZXcg
ZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVdIGRyYWdJbnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJhZ0lu
dGVyYWN0aW9uXSBwcmV2aWV3Rm9yTGlmdGluZ0l0ZW06aXRlbSBzZXNzaW9uOl9kcmFnU2Vzc2lv
bi5nZXQoKV07Ci0gICAgICAgICAgICBFWFBFQ1RfVFJVRSghIWxpZnRQcmV2aWV3KTsKLSAgICAg
ICAgICAgIGlmIChsaWZ0UHJldmlldykKLSAgICAgICAgICAgICAgICBbX2xpZnRQcmV2aWV3cyBh
ZGRPYmplY3Q6bGlmdFByZXZpZXddOwotICAgICAgICB9Ci0KLSAgICAgICAgX2Ryb3BTZXNzaW9u
ID0gYWRvcHROUyhbW01vY2tEcm9wU2Vzc2lvbiBhbGxvY10gaW5pdFdpdGhQcm92aWRlcnM6aXRl
bVByb3ZpZGVycyBsb2NhdGlvbjpzZWxmLl9jdXJyZW50TG9jYXRpb24gd2luZG93Oltfd2ViVmll
dyB3aW5kb3ddIGFsbG93TW92ZTpzZWxmLnNob3VsZEFsbG93TW92ZU9wZXJhdGlvbl0pOwotICAg
ICAgICBbX2RyYWdTZXNzaW9uIHNldEl0ZW1zOml0ZW1zXTsKLSAgICAgICAgX3NvdXJjZUl0ZW1Q
cm92aWRlcnMgPSBpdGVtUHJvdmlkZXJzOwotICAgICAgICBpZiAoc2VsZi5zaG93Q3VzdG9tQWN0
aW9uU2hlZXRCbG9jaykgewotICAgICAgICAgICAgLy8gRGVmZXIgcHJvZ3Jlc3MgdW50aWwgdGhl
IGN1c3RvbSBhY3Rpb24gc2hlZXQgaXMgZGlzbWlzc2VkLgotICAgICAgICAgICAgYXV0byBzdGFy
dExvY2F0aW9uSW5WaWV3ID0gW1tfd2ViVmlldyB3aW5kb3ddIGNvbnZlcnRQb2ludDpfc3RhcnRM
b2NhdGlvbiB0b1ZpZXc6X3dlYlZpZXcuZ2V0KCldOwotICAgICAgICAgICAgW193ZWJWaWV3IF9z
aW11bGF0ZUxvbmdQcmVzc0FjdGlvbkF0TG9jYXRpb246c3RhcnRMb2NhdGlvbkluVmlld107Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBbW193ZWJWaWV3IGRyYWdJ
bnRlcmFjdGlvbkRlbGVnYXRlXSBkcmFnSW50ZXJhY3Rpb246W193ZWJWaWV3IGRyYWdJbnRlcmFj
dGlvbl0gc2Vzc2lvbldpbGxCZWdpbjpfZHJhZ1Nlc3Npb24uZ2V0KCldOwotCi0gICAgICAgIFJl
dGFpblB0cjxXS1dlYlZpZXc+IHJldGFpbmVkV2ViVmlldyA9IF93ZWJWaWV3OwotICAgICAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeKCkgewotICAgICAgICAg
ICAgW3JldGFpbmVkV2ViVmlldyByZXNpZ25GaXJzdFJlc3BvbmRlcl07Ci0gICAgICAgIH0pOwot
Ci0gICAgICAgIF9waGFzZSA9IERhdGFJbnRlcmFjdGlvbkJlZ2FuOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBEYXRhSW50ZXJhY3Rpb25CZWdhbjoKLSAgICAgICAgW1tfd2ViVmll
dyBkcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJvcEludGVyYWN0aW9uOltfd2ViVmlldyBkcm9w
SW50ZXJhY3Rpb25dIHNlc3Npb25EaWRFbnRlcjpfZHJvcFNlc3Npb24uZ2V0KCldOwotICAgICAg
ICBfcGhhc2UgPSBEYXRhSW50ZXJhY3Rpb25FbnRlcmVkOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIERhdGFJbnRlcmFjdGlvbkVudGVyZWQ6IHsKLSAgICAgICAgX2N1cnJlbnREcm9wUHJvcG9z
YWwgPSBbW193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcm9wSW50ZXJhY3Rpb246
W193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbl0gc2Vzc2lvbkRpZFVwZGF0ZTpfZHJvcFNlc3Npb24u
Z2V0KCldOwotICAgICAgICBpZiAoIVtzZWxmIHNob3VsZEFsbG93TW92ZU9wZXJhdGlvbl0gJiYg
W19jdXJyZW50RHJvcFByb3Bvc2FsIG9wZXJhdGlvbl0gPT0gVUlEcm9wT3BlcmF0aW9uTW92ZSkK
LSAgICAgICAgICAgIF9jdXJyZW50RHJvcFByb3Bvc2FsID0gYWRvcHROUyhbW1VJRHJvcFByb3Bv
c2FsIGFsbG9jXSBpbml0V2l0aERyb3BPcGVyYXRpb246VUlEcm9wT3BlcmF0aW9uQ2FuY2VsXSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBbc2VsZiBfc2NoZWR1bGVBZHZhbmNlUHJvZ3Jlc3NdOwotfQotCi0tIChDR1Bv
aW50KV9jdXJyZW50TG9jYXRpb24KLXsKLSAgICBDR0Zsb2F0IGRpc3RhbmNlWCA9IF9lbmRMb2Nh
dGlvbi54IC0gX3N0YXJ0TG9jYXRpb24ueDsKLSAgICBDR0Zsb2F0IGRpc3RhbmNlWSA9IF9lbmRM
b2NhdGlvbi55IC0gX3N0YXJ0TG9jYXRpb24ueTsKLSAgICByZXR1cm4gQ0dQb2ludE1ha2UoX3N0
YXJ0TG9jYXRpb24ueCArIF9jdXJyZW50UHJvZ3Jlc3MgKiBkaXN0YW5jZVgsIF9zdGFydExvY2F0
aW9uLnkgKyBfY3VycmVudFByb2dyZXNzICogZGlzdGFuY2VZKTsKLX0KLQotLSAodm9pZClfc2No
ZWR1bGVBZHZhbmNlUHJvZ3Jlc3MKLXsKLSAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJm
b3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9hZHZhbmNlUHJv
Z3Jlc3MpIG9iamVjdDpuaWxdOwotICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Io
X2FkdmFuY2VQcm9ncmVzcykgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTpwcm9ncmVzc1RpbWVT
dGVwXTsKLX0KLQotLSAoTlNBcnJheSAqKXNvdXJjZUl0ZW1Qcm92aWRlcnMKLXsKLSAgICByZXR1
cm4gX3NvdXJjZUl0ZW1Qcm92aWRlcnMuZ2V0KCk7Ci19Ci0KLS0gKE5TQXJyYXkgKilleHRlcm5h
bEl0ZW1Qcm92aWRlcnMKLXsKLSAgICByZXR1cm4gX2V4dGVybmFsSXRlbVByb3ZpZGVycy5nZXQo
KTsKLX0KLQotLSAodm9pZClzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6KE5TQXJyYXkgKilleHRl
cm5hbEl0ZW1Qcm92aWRlcnMKLXsKLSAgICBfZXh0ZXJuYWxJdGVtUHJvdmlkZXJzID0gYWRvcHRO
UyhbZXh0ZXJuYWxJdGVtUHJvdmlkZXJzIGNvcHldKTsKLX0KLQotLSAoRGF0YUludGVyYWN0aW9u
UGhhc2UpcGhhc2UKLXsKLSAgICByZXR1cm4gX3BoYXNlOwotfQotCi0tIChOU0FycmF5PFVJVGFy
Z2V0ZWREcmFnUHJldmlldyAqPiAqKWxpZnRQcmV2aWV3cwotewotICAgIHJldHVybiBfbGlmdFBy
ZXZpZXdzLmdldCgpOwotfQotCi0tIChDR1JlY3QpbGFzdEtub3duRHJhZ0NhcmV0UmVjdAotewot
ICAgIHJldHVybiBfbGFzdEtub3duRHJhZ0NhcmV0UmVjdDsKLX0KLQotLSAodm9pZCl3YWl0Rm9y
SW5wdXRTZXNzaW9uCi17Ci0gICAgX2lzRG9uZVdhaXRpbmdGb3JJbnB1dFNlc3Npb24gPSBmYWxz
ZTsKLQotICAgIC8vIFdhaXRpbmcgZm9yIGFuIGlucHV0IHNlc3Npb24gaW1wbGllcyB0aGF0IHdl
IHNob3VsZCBhbGxvdyBpbnB1dCBzZXNzaW9ucyB0byBiZWdpbi4KLSAgICBzZWxmLmFsbG93c0Zv
Y3VzVG9TdGFydElucHV0U2Vzc2lvbiA9IFlFUzsKLQotICAgIFV0aWw6OnJ1bigmX2lzRG9uZVdh
aXRpbmdGb3JJbnB1dFNlc3Npb24pOwotfQotCi0tIChOU0FycmF5PF9XS0F0dGFjaG1lbnQgKj4g
KilpbnNlcnRlZEF0dGFjaG1lbnRzCi17Ci0gICAgcmV0dXJuIF9pbnNlcnRlZEF0dGFjaG1lbnRz
LmdldCgpOwotfQotCi0tIChOU0FycmF5PF9XS0F0dGFjaG1lbnQgKj4gKilyZW1vdmVkQXR0YWNo
bWVudHMKLXsKLSAgICByZXR1cm4gX3JlbW92ZWRBdHRhY2htZW50cy5nZXQoKTsKLX0KLQotLSAo
dm9pZCllbmREYXRhVHJhbnNmZXIKLXsKLSAgICBbW193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbkRl
bGVnYXRlXSBkcmFnSW50ZXJhY3Rpb246W193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbl0gc2Vzc2lv
bkRpZFRyYW5zZmVySXRlbXM6X2RyYWdTZXNzaW9uLmdldCgpXTsKLX0KLQotI3ByYWdtYSBtYXJr
IC0gV0tVSURlbGVnYXRlUHJpdmF0ZQotCi0tICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3
ZWJWaWV3IGRhdGFJbnRlcmFjdGlvbk9wZXJhdGlvbldhc0hhbmRsZWQ6KEJPT0wpaGFuZGxlZCBm
b3JTZXNzaW9uOihpZClzZXNzaW9uIGl0ZW1Qcm92aWRlcnM6KE5TQXJyYXk8VUlJdGVtUHJvdmlk
ZXIgKj4gKilpdGVtUHJvdmlkZXJzCi17Ci0gICAgX2lzRG9uZVdpdGhDdXJyZW50UnVuID0gdHJ1
ZTsKLQotICAgIGlmIChzZWxmLmRhdGFJbnRlcmFjdGlvbk9wZXJhdGlvbkNvbXBsZXRpb25CbG9j
aykKLSAgICAgICAgc2VsZi5kYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25Db21wbGV0aW9uQmxvY2so
aGFuZGxlZCwgaXRlbVByb3ZpZGVycyk7Ci19Ci0KLS0gKE5TVUludGVnZXIpX3dlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXcgd2lsbFVwZGF0ZURhdGFJbnRlcmFjdGlvbk9wZXJhdGlvblRvT3Bl
cmF0aW9uOihOU1VJbnRlZ2VyKW9wZXJhdGlvbiBmb3JTZXNzaW9uOihpZClzZXNzaW9uCi17Ci0g
ICAgcmV0dXJuIHNlbGYub3ZlcnJpZGVEYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25CbG9jayA/IHNl
bGYub3ZlcnJpZGVEYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25CbG9jayhvcGVyYXRpb24sIHNlc3Np
b24pIDogb3BlcmF0aW9uOwotfQotCi0tIChOU0FycmF5ICopX3dlYlZpZXc6KFdLV2ViVmlldyAq
KXdlYlZpZXcgYWRqdXN0ZWREYXRhSW50ZXJhY3Rpb25JdGVtUHJvdmlkZXJzRm9ySXRlbVByb3Zp
ZGVyOihVSUl0ZW1Qcm92aWRlciAqKWl0ZW1Qcm92aWRlciByZXByZXNlbnRpbmdPYmplY3RzOihO
U0FycmF5ICopcmVwcmVzZW50aW5nT2JqZWN0cyBhZGRpdGlvbmFsRGF0YTooTlNEaWN0aW9uYXJ5
ICopYWRkaXRpb25hbERhdGEKLXsKLSAgICByZXR1cm4gc2VsZi5jb252ZXJ0SXRlbVByb3ZpZGVy
c0Jsb2NrID8gc2VsZi5jb252ZXJ0SXRlbVByb3ZpZGVyc0Jsb2NrKGl0ZW1Qcm92aWRlciwgcmVw
cmVzZW50aW5nT2JqZWN0cywgYWRkaXRpb25hbERhdGEpIDogQFsgaXRlbVByb3ZpZGVyIF07Ci19
Ci0KLS0gKEJPT0wpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc2hvd0N1c3RvbVNoZWV0
Rm9yRWxlbWVudDooX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKillbGVtZW50Ci17Ci0gICAgaWYg
KCFzZWxmLnNob3dDdXN0b21BY3Rpb25TaGVldEJsb2NrKQotICAgICAgICByZXR1cm4gTk87Ci0K
LSAgICBSZXRhaW5QdHI8RGF0YUludGVyYWN0aW9uU2ltdWxhdG9yPiBzdHJvbmdTZWxmID0gc2Vs
ZjsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeKCkgewot
ICAgICAgICBEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgKndlYWtTZWxmID0gc3Ryb25nU2VsZi5n
ZXQoKTsKLSAgICAgICAgW1t3ZWFrU2VsZi0+X3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uRGVsZWdh
dGVdIGRyYWdJbnRlcmFjdGlvbjpbd2Vha1NlbGYtPl93ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbl0g
c2Vzc2lvbldpbGxCZWdpbjp3ZWFrU2VsZi0+X2RyYWdTZXNzaW9uLmdldCgpXTsKLSAgICAgICAg
d2Vha1NlbGYtPl9waGFzZSA9IERhdGFJbnRlcmFjdGlvbkJlZ2FuOwotICAgICAgICBbd2Vha1Nl
bGYgX3NjaGVkdWxlQWR2YW5jZVByb2dyZXNzXTsKLSAgICB9KTsKLQotICAgIHJldHVybiBzZWxm
LnNob3dDdXN0b21BY3Rpb25TaGVldEJsb2NrKGVsZW1lbnQpOwotfQotCi0tIChOU0FycmF5PFVJ
RHJhZ0l0ZW0gKj4gKilfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyB3aWxsUGVyZm9ybURy
b3BXaXRoU2Vzc2lvbjooaWQgPFVJRHJvcFNlc3Npb24+KXNlc3Npb24KLXsKLSAgICByZXR1cm4g
c2VsZi5vdmVycmlkZVBlcmZvcm1Ecm9wQmxvY2sgPyBzZWxmLm92ZXJyaWRlUGVyZm9ybURyb3BC
bG9jayhzZXNzaW9uKSA6IHNlc3Npb24uaXRlbXM7Ci19Ci0KLS0gKHZvaWQpX3dlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXcgZGlkSW5zZXJ0QXR0YWNobWVudDooX1dLQXR0YWNobWVudCAqKWF0
dGFjaG1lbnQKLXsKLSAgICBbX2luc2VydGVkQXR0YWNobWVudHMgYWRkT2JqZWN0OmF0dGFjaG1l
bnRdOwotfQotCi0tICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZFJlbW92
ZUF0dGFjaG1lbnQ6KF9XS0F0dGFjaG1lbnQgKilhdHRhY2htZW50Ci17Ci0gICAgW19yZW1vdmVk
QXR0YWNobWVudHMgYWRkT2JqZWN0OmF0dGFjaG1lbnRdOwotfQotCi0jcHJhZ21hIG1hcmsgLSBf
V0tJbnB1dERlbGVnYXRlCi0KLS0gKEJPT0wpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcg
Zm9jdXNTaG91bGRTdGFydElucHV0U2Vzc2lvbjooaWQgPF9XS0ZvY3VzZWRFbGVtZW50SW5mbz4p
aW5mbwotewotICAgIHJldHVybiBfYWxsb3dzRm9jdXNUb1N0YXJ0SW5wdXRTZXNzaW9uOwotfQot
Ci0tICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZFN0YXJ0SW5wdXRTZXNz
aW9uOihpZCA8X1dLRm9ybUlucHV0U2Vzc2lvbj4paW5wdXRTZXNzaW9uCi17Ci0gICAgX2lzRG9u
ZVdhaXRpbmdGb3JJbnB1dFNlc3Npb24gPSB0cnVlOwotfQotCi1AZW5kCi0KLSNlbmRpZiAvLyBF
TkFCTEUoREFUQV9JTlRFUkFDVElPTikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
aW9zL0RyYWdnaW5nU2ltdWxhdG9ySU9TLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRHJh
Z2dpbmdTaW11bGF0b3JJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTkwMTM1N2Q2MzQyYjRhNzAzNjA5YTlk
YzdhNzMzNjIwY2RjNGY2ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
aW9zL0RyYWdnaW5nU2ltdWxhdG9ySU9TLm1tCkBAIC0wLDAgKzEsNjg5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYWdnaW5nU2ltdWxhdG9yLmgiCisK
KyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiBQTEFURk9STShJT1MpICYmIFdLX0FQSV9FTkFC
TEVECisKKyNpbXBvcnQgIkluc3RhbmNlTWV0aG9kU3dpenpsZXIuaCIKKyNpbXBvcnQgIlBsYXRm
b3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJVSUtpdFNQSS5oIgorCisjaW1wb3J0IDxVSUtpdC9V
SURyYWdJbnRlcmFjdGlvbi5oPgorI2ltcG9ydCA8VUlLaXQvVUlEcmFnSXRlbS5oPgorI2ltcG9y
dCA8VUlLaXQvVUlJbnRlcmFjdGlvbi5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZh
dGUuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tGb2N1c2VkRWxlbWVudEluZm8uaD4KKyNpbXBvcnQg
PFdlYktpdC9fV0tGb3JtSW5wdXRTZXNzaW9uLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CisjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKworU09GVF9MSU5LX0ZSQU1FV09SSyhVSUtp
dCkKK1NPRlRfTElOSyhVSUtpdCwgVUlBcHBsaWNhdGlvbkluc3RhbnRpYXRlU2luZ2xldG9uLCB2
b2lkLCAoQ2xhc3Mgc2luZ2xldG9uQ2xhc3MpLCAoc2luZ2xldG9uQ2xhc3MpKQorCit1c2luZyBu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSTsKKworQGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoRHJh
Z0FuZERyb3BUZXN0aW5nKQorCistIChVSVZpZXcgKilfZHJhZ0Ryb3BJbnRlcmFjdGlvblZpZXcK
K3sKKyAgICByZXR1cm4gW3NlbGYgdmFsdWVGb3JLZXk6QCJfY3VycmVudENvbnRlbnRWaWV3Il07
Cit9CisKKy0gKGlkIDxVSURyb3BJbnRlcmFjdGlvbkRlbGVnYXRlPilkcm9wSW50ZXJhY3Rpb25E
ZWxlZ2F0ZQoreworICAgIHJldHVybiAoaWQgPFVJRHJvcEludGVyYWN0aW9uRGVsZWdhdGU+KXNl
bGYuX2RyYWdEcm9wSW50ZXJhY3Rpb25WaWV3OworfQorCistIChpZCA8VUlEcmFnSW50ZXJhY3Rp
b25EZWxlZ2F0ZT4pZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGUKK3sKKyAgICByZXR1cm4gKGlkIDxV
SURyYWdJbnRlcmFjdGlvbkRlbGVnYXRlPilzZWxmLl9kcmFnRHJvcEludGVyYWN0aW9uVmlldzsK
K30KKworLSAoVUlEcm9wSW50ZXJhY3Rpb24gKilkcm9wSW50ZXJhY3Rpb24KK3sKKyAgICBVSVZp
ZXcgKmludGVyYWN0aW9uVmlldyA9IHNlbGYuX2RyYWdEcm9wSW50ZXJhY3Rpb25WaWV3OworICAg
IGZvciAoaWQgPFVJSW50ZXJhY3Rpb24+IGludGVyYWN0aW9uIGluIGludGVyYWN0aW9uVmlldy5p
bnRlcmFjdGlvbnMpIHsKKyAgICAgICAgaWYgKFtpbnRlcmFjdGlvbiBpc0tpbmRPZkNsYXNzOltV
SURyb3BJbnRlcmFjdGlvbiBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIChVSURyb3BJbnRl
cmFjdGlvbiAqKWludGVyYWN0aW9uOworICAgIH0KKyAgICByZXR1cm4gbmlsOworfQorCistIChV
SURyYWdJbnRlcmFjdGlvbiAqKWRyYWdJbnRlcmFjdGlvbgoreworICAgIFVJVmlldyAqaW50ZXJh
Y3Rpb25WaWV3ID0gc2VsZi5fZHJhZ0Ryb3BJbnRlcmFjdGlvblZpZXc7CisgICAgZm9yIChpZCA8
VUlJbnRlcmFjdGlvbj4gaW50ZXJhY3Rpb24gaW4gaW50ZXJhY3Rpb25WaWV3LmludGVyYWN0aW9u
cykgeworICAgICAgICBpZiAoW2ludGVyYWN0aW9uIGlzS2luZE9mQ2xhc3M6W1VJRHJhZ0ludGVy
YWN0aW9uIGNsYXNzXV0pCisgICAgICAgICAgICByZXR1cm4gKFVJRHJhZ0ludGVyYWN0aW9uICop
aW50ZXJhY3Rpb247CisgICAgfQorICAgIHJldHVybiBuaWw7Cit9CisKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIE1vY2tEcmFnRHJvcFNlc3Npb24KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
SXRlbXM6KE5TQXJyYXkgPFVJRHJhZ0l0ZW0gKj4qKWl0ZW1zIGxvY2F0aW9uOihDR1BvaW50KWxv
Y2F0aW9uSW5XaW5kb3cgd2luZG93OihVSVdpbmRvdyAqKXdpbmRvdyBhbGxvd01vdmU6KEJPT0wp
YWxsb3dNb3ZlCit7CisgICAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICAgICAgX21v
Y2tJdGVtcyA9IGl0ZW1zOworICAgICAgICBfbW9ja0xvY2F0aW9uSW5XaW5kb3cgPSBsb2NhdGlv
bkluV2luZG93OworICAgICAgICBfd2luZG93ID0gd2luZG93OworICAgICAgICBfYWxsb3dNb3Zl
ID0gYWxsb3dNb3ZlOworICAgIH0KKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoQk9PTClhbGxv
d3NNb3ZlT3BlcmF0aW9uCit7CisgICAgcmV0dXJuIF9hbGxvd01vdmU7Cit9CisKKy0gKEJPT0wp
aXNSZXN0cmljdGVkVG9EcmFnZ2luZ0FwcGxpY2F0aW9uCit7CisgICAgcmV0dXJuIE5POworfQor
CistIChCT09MKWhhc0l0ZW1zQ29uZm9ybWluZ1RvVHlwZUlkZW50aWZpZXJzOihOU0FycmF5PE5T
U3RyaW5nICo+ICopdHlwZUlkZW50aWZpZXJzCit7CisgICAgZm9yIChOU1N0cmluZyAqdHlwZUlk
ZW50aWZpZXIgaW4gdHlwZUlkZW50aWZpZXJzKSB7CisgICAgICAgIEJPT0wgaGFzSXRlbUNvbmZv
cm1pbmdUb1R5cGUgPSBOTzsKKyAgICAgICAgZm9yIChVSURyYWdJdGVtICppdGVtIGluIHNlbGYu
aXRlbXMpCisgICAgICAgICAgICBoYXNJdGVtQ29uZm9ybWluZ1RvVHlwZSB8PSBbW2l0ZW0uaXRl
bVByb3ZpZGVyIHJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnNdIGNvbnRhaW5zT2JqZWN0OnR5cGVJ
ZGVudGlmaWVyXTsKKyAgICAgICAgaWYgKCFoYXNJdGVtQ29uZm9ybWluZ1RvVHlwZSkKKyAgICAg
ICAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoQk9PTClj
YW5Mb2FkT2JqZWN0c09mQ2xhc3M6KENsYXNzPFVJSXRlbVByb3ZpZGVyUmVhZGluZz4pYUNsYXNz
Cit7CisgICAgZm9yIChVSURyYWdJdGVtICppdGVtIGluIHNlbGYuaXRlbXMpIHsKKyAgICAgICAg
aWYgKFtpdGVtLml0ZW1Qcm92aWRlciBjYW5Mb2FkT2JqZWN0T2ZDbGFzczphQ2xhc3NdKQorICAg
ICAgICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgcmV0dXJuIE5POworfQorCistIChCT09M
KWNhbkxvYWRPYmplY3RzT2ZDbGFzc2VzOihOU0FycmF5PENsYXNzPFVJSXRlbVByb3ZpZGVyUmVh
ZGluZz4+ICopY2xhc3NlcworeworICAgIGZvciAoQ2xhc3M8VUlJdGVtUHJvdmlkZXJSZWFkaW5n
PiBhQ2xhc3MgaW4gY2xhc3NlcykgeworICAgICAgICBCT09MIGNhbkxvYWQgPSBOTzsKKyAgICAg
ICAgZm9yIChVSURyYWdJdGVtICppdGVtIGluIHNlbGYuaXRlbXMpCisgICAgICAgICAgICBjYW5M
b2FkIHw9IFtpdGVtLml0ZW1Qcm92aWRlciBjYW5Mb2FkT2JqZWN0T2ZDbGFzczphQ2xhc3NdOwor
ICAgICAgICBpZiAoIWNhbkxvYWQpCisgICAgICAgICAgICByZXR1cm4gTk87CisgICAgfQorICAg
IHJldHVybiBZRVM7Cit9CisKKy0gKE5TQXJyYXk8VUlEcmFnSXRlbSAqPiAqKWl0ZW1zCit7Cisg
ICAgcmV0dXJuIF9tb2NrSXRlbXMuZ2V0KCk7Cit9CisKKy0gKHZvaWQpc2V0SXRlbXM6KE5TQXJy
YXk8VUlEcmFnSXRlbSAqPiAqKWl0ZW1zCit7CisgICAgX21vY2tJdGVtcyA9IGl0ZW1zOworfQor
CistICh2b2lkKWFkZEl0ZW1zOihOU0FycmF5PFVJRHJhZ0l0ZW0gKj4gKilpdGVtcworeworICAg
IGlmICghW2l0ZW1zIGNvdW50XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFbX21vY2tJ
dGVtcyBjb3VudF0pCisgICAgICAgIF9tb2NrSXRlbXMgPSBpdGVtczsKKyAgICBlbHNlCisgICAg
ICAgIF9tb2NrSXRlbXMgPSBbX21vY2tJdGVtcyBhcnJheUJ5QWRkaW5nT2JqZWN0c0Zyb21BcnJh
eTppdGVtc107Cit9CisKKy0gKENHUG9pbnQpbG9jYXRpb25JblZpZXc6KFVJVmlldyAqKXZpZXcK
K3sKKyAgICByZXR1cm4gW193aW5kb3cgY29udmVydFBvaW50Ol9tb2NrTG9jYXRpb25JbldpbmRv
dyB0b1ZpZXc6dmlld107Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE1vY2tEcm9wU2Vz
c2lvbgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm92aWRlcnM6KE5TQXJyYXk8VUlJdGVt
UHJvdmlkZXIgKj4gKilwcm92aWRlcnMgbG9jYXRpb246KENHUG9pbnQpbG9jYXRpb25JbldpbmRv
dyB3aW5kb3c6KFVJV2luZG93ICopd2luZG93IGFsbG93TW92ZTooQk9PTClhbGxvd01vdmUKK3sK
KyAgICBhdXRvIGl0ZW1zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7
CisgICAgZm9yIChVSUl0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyIGluIHByb3ZpZGVycykKKyAg
ICAgICAgW2l0ZW1zIGFkZE9iamVjdDpbW1tVSURyYWdJdGVtIGFsbG9jXSBpbml0V2l0aEl0ZW1Q
cm92aWRlcjppdGVtUHJvdmlkZXJdIGF1dG9yZWxlYXNlXV07CisKKyAgICByZXR1cm4gW3N1cGVy
IGluaXRXaXRoSXRlbXM6aXRlbXMuZ2V0KCkgbG9jYXRpb246bG9jYXRpb25JbldpbmRvdyB3aW5k
b3c6d2luZG93IGFsbG93TW92ZTphbGxvd01vdmVdOworfQorCistIChCT09MKWlzTG9jYWwKK3sK
KyAgICByZXR1cm4gWUVTOworfQorCistIChOU1Byb2dyZXNzICopcHJvZ3Jlc3MKK3sKKyAgICBy
ZXR1cm4gW05TUHJvZ3Jlc3MgZGlzY3JldGVQcm9ncmVzc1dpdGhUb3RhbFVuaXRDb3VudDoxMDBd
OworfQorCistICh2b2lkKXNldFByb2dyZXNzSW5kaWNhdG9yU3R5bGU6KFVJRHJvcFNlc3Npb25Q
cm9ncmVzc0luZGljYXRvclN0eWxlKXByb2dyZXNzSW5kaWNhdG9yU3R5bGUKK3sKK30KKworLSAo
VUlEcm9wU2Vzc2lvblByb2dyZXNzSW5kaWNhdG9yU3R5bGUpcHJvZ3Jlc3NJbmRpY2F0b3JTdHls
ZQoreworICAgIHJldHVybiBVSURyb3BTZXNzaW9uUHJvZ3Jlc3NJbmRpY2F0b3JTdHlsZU5vbmU7
Cit9CisKKy0gKE5TVUludGVnZXIpb3BlcmF0aW9uTWFzaworeworICAgIHJldHVybiAwOworfQor
CistIChpZCA8VUlEcmFnU2Vzc2lvbj4pbG9jYWxEcmFnU2Vzc2lvbgoreworICAgIHJldHVybiBu
aWw7Cit9CisKKy0gKEJPT0wpaGFzSXRlbXNDb25mb3JtaW5nVG9UeXBlSWRlbnRpZmllcjooTlNT
dHJpbmcgKil0eXBlSWRlbnRpZmllcgoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBOTzsKK30KKworLSAoQk9PTCljYW5DcmVhdGVJdGVtc09mQ2xhc3M6KENsYXNzPFVJ
SXRlbVByb3ZpZGVyUmVhZGluZz4pYUNsYXNzCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIE5POworfQorCistIChOU1Byb2dyZXNzICopbG9hZE9iamVjdHNPZkNsYXNz
OihDbGFzczxOU0l0ZW1Qcm92aWRlclJlYWRpbmc+KWFDbGFzcyBjb21wbGV0aW9uOih2b2lkKF4p
KE5TQXJyYXk8X19raW5kb2YgaWQgPE5TSXRlbVByb3ZpZGVyUmVhZGluZz4+ICpvYmplY3RzKSlj
b21wbGV0aW9uCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG5pbDsK
K30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gTW9ja0RyYWdTZXNzaW9uIHsKKyAgICBSZXRh
aW5QdHI8aWQ+IF9sb2NhbENvbnRleHQ7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdp
bmRvdzooVUlXaW5kb3cgKil3aW5kb3cgYWxsb3dNb3ZlOihCT09MKWFsbG93TW92ZQoreworICAg
IHJldHVybiBbc3VwZXIgaW5pdFdpdGhJdGVtczpAWyBdIGxvY2F0aW9uOkNHUG9pbnRaZXJvIHdp
bmRvdzp3aW5kb3cgYWxsb3dNb3ZlOmFsbG93TW92ZV07Cit9CisKKy0gKE5TVUludGVnZXIpbG9j
YWxPcGVyYXRpb25NYXNrCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKKy0gKE5TVUludGVnZXIpZXh0ZXJuYWxPcGVyYXRpb25NYXNrCit7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKKy0gKGlkKXNlc3Npb24KK3sK
KyAgICByZXR1cm4gbmlsOworfQorCistIChpZClsb2NhbENvbnRleHQKK3sKKyAgICByZXR1cm4g
X2xvY2FsQ29udGV4dC5nZXQoKTsKK30KKworLSAodm9pZClzZXRMb2NhbENvbnRleHQ6KGlkKWxv
Y2FsQ29udGV4dAoreworICAgIF9sb2NhbENvbnRleHQgPSBsb2NhbENvbnRleHQ7Cit9CisKK0Bl
bmQKKworc3RhdGljIGRvdWJsZSBwcm9ncmVzc0luY3JlbWVudFN0ZXAgPSAwLjAzMzsKK3N0YXRp
YyBkb3VibGUgcHJvZ3Jlc3NUaW1lU3RlcCA9IDAuMDE2Oworc3RhdGljIE5TU3RyaW5nICpUZXN0
V2ViS2l0QVBJU2ltdWxhdGVDYW5jZWxBbGxUb3VjaGVzTm90aWZpY2F0aW9uTmFtZSA9IEAiVGVz
dFdlYktpdEFQSVNpbXVsYXRlQ2FuY2VsQWxsVG91Y2hlc05vdGlmaWNhdGlvbk5hbWUiOworCitz
dGF0aWMgTlNBcnJheSAqZHJhZ0FuZERyb3BFdmVudE5hbWVzKCkKK3sKKyAgICBzdGF0aWMgTlNB
cnJheSAqZXZlbnROYW1lcyA9IG5pbDsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VU
b2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF4oKSB7CisgICAgICAgIGV2ZW50
TmFtZXMgPSBAWyBAImRyYWdlbnRlciIsIEAiZHJhZ292ZXIiLCBAImRyb3AiLCBAImRyYWdsZWF2
ZSIsIEAiZHJhZ3N0YXJ0IiBdOworICAgIH0pOworICAgIHJldHVybiBldmVudE5hbWVzOworfQor
CitAaW50ZXJmYWNlIERyYWdnaW5nU2ltdWxhdG9yQXBwbGljYXRpb24gOiBVSUFwcGxpY2F0aW9u
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBEcmFnZ2luZ1NpbXVsYXRvckFwcGxpY2F0aW9uCist
ICh2b2lkKV9jYW5jZWxBbGxUb3VjaGVzCit7CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBk
ZWZhdWx0Q2VudGVyXSBwb3N0Tm90aWZpY2F0aW9uTmFtZTpUZXN0V2ViS2l0QVBJU2ltdWxhdGVD
YW5jZWxBbGxUb3VjaGVzTm90aWZpY2F0aW9uTmFtZSBvYmplY3Q6bmlsXTsKK30KK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIERyYWdnaW5nU2ltdWxhdG9yIHsKKyAgICBSZXRhaW5QdHI8VGVzdFdL
V2ViVmlldz4gX3dlYlZpZXc7CisgICAgUmV0YWluUHRyPE1vY2tEcmFnU2Vzc2lvbj4gX2RyYWdT
ZXNzaW9uOworICAgIFJldGFpblB0cjxNb2NrRHJvcFNlc3Npb24+IF9kcm9wU2Vzc2lvbjsKKyAg
ICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IF9vYnNlcnZlZEV2ZW50TmFtZXM7CisgICAgUmV0
YWluUHRyPE5TQXJyYXk+IF9leHRlcm5hbEl0ZW1Qcm92aWRlcnM7CisgICAgUmV0YWluUHRyPE5T
QXJyYXkgKj4gX3NvdXJjZUl0ZW1Qcm92aWRlcnM7CisgICAgUmV0YWluUHRyPE5TQXJyYXkgKj4g
X2ZpbmFsU2VsZWN0aW9uUmVjdHM7CisgICAgQ0dQb2ludCBfc3RhcnRMb2NhdGlvbjsKKyAgICBD
R1BvaW50IF9lbmRMb2NhdGlvbjsKKyAgICBDR1JlY3QgX2xhc3RLbm93bkRyYWdDYXJldFJlY3Q7
CisKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeTxOU051bWJlciAqLCBOU1ZhbHVl
ICo+Pl9yZW1haW5pbmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnNCeVByb2dyZXNzOwor
ICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxOU1ZhbHVlICo+Pl9xdWV1ZWRBZGRpdGlvbmFs
SXRlbVJlcXVlc3RMb2NhdGlvbnM7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PFVJVGFy
Z2V0ZWREcmFnUHJldmlldyAqPj4gX2xpZnRQcmV2aWV3czsKKworICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheTxfV0tBdHRhY2htZW50ICo+PiBfaW5zZXJ0ZWRBdHRhY2htZW50czsKKyAgICBS
ZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk8X1dLQXR0YWNobWVudCAqPj4gX3JlbW92ZWRBdHRhY2ht
ZW50czsKKworICAgIGJvb2wgX2lzRG9uZVdhaXRpbmdGb3JJbnB1dFNlc3Npb247CisgICAgZG91
YmxlIF9jdXJyZW50UHJvZ3Jlc3M7CisgICAgYm9vbCBfaXNEb25lV2l0aEN1cnJlbnRSdW47Cisg
ICAgRHJhZ0FuZERyb3BQaGFzZSBfcGhhc2U7CisKKyAgICBSZXRhaW5QdHI8VUlEcm9wUHJvcG9z
YWw+IF9jdXJyZW50RHJvcFByb3Bvc2FsOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhX
ZWJWaWV3OihUZXN0V0tXZWJWaWV3ICopd2ViVmlldworeworICAgIGlmIChzZWxmID0gW3N1cGVy
IGluaXRdKSB7CisgICAgICAgIF93ZWJWaWV3ID0gd2ViVmlldzsKKyAgICAgICAgX3Nob3VsZEVu
c3VyZVVJQXBwbGljYXRpb24gPSBOTzsKKyAgICAgICAgX3Nob3VsZEFsbG93TW92ZU9wZXJhdGlv
biA9IFlFUzsKKyAgICAgICAgX2lzRG9uZVdhaXRpbmdGb3JJbnB1dFNlc3Npb24gPSB0cnVlOwor
ICAgICAgICBbX3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpzZWxmXTsKKyAgICAgICAgW193ZWJWaWV3
IF9zZXRJbnB1dERlbGVnYXRlOnNlbGZdOworICAgIH0KKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClkZWFsbG9jCit7CisgICAgaWYgKFtfd2ViVmlldyBVSURlbGVnYXRlXSA9PSBzZWxm
KQorICAgICAgICBbX3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpuaWxdOworCisgICAgaWYgKFtfd2Vi
VmlldyBfaW5wdXREZWxlZ2F0ZV0gPT0gc2VsZikKKyAgICAgICAgW193ZWJWaWV3IF9zZXRJbnB1
dERlbGVnYXRlOm5pbF07CisKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpX3Jl
c2V0U2ltdWxhdGVkU3RhdGUKK3sKKyAgICBfcGhhc2UgPSBEcmFnQW5kRHJvcFBoYXNlQmVnaW5u
aW5nOworICAgIF9jdXJyZW50UHJvZ3Jlc3MgPSAwOworICAgIF9pc0RvbmVXaXRoQ3VycmVudFJ1
biA9IGZhbHNlOworICAgIF9vYnNlcnZlZEV2ZW50TmFtZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICBfaW5zZXJ0ZWRBdHRhY2htZW50cyA9IGFkb3B0TlMo
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworICAgIF9yZW1vdmVkQXR0YWNobWVudHMg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICBfZmluYWxTZWxl
Y3Rpb25SZWN0cyA9IEBbIF07CisgICAgX2RyYWdTZXNzaW9uID0gbmlsOworICAgIF9kcm9wU2Vz
c2lvbiA9IG5pbDsKKyAgICBfY3VycmVudERyb3BQcm9wb3NhbCA9IG5pbDsKKyAgICBfbGFzdEtu
b3duRHJhZ0NhcmV0UmVjdCA9IENHUmVjdFplcm87CisgICAgX3JlbWFpbmluZ0FkZGl0aW9uYWxJ
dGVtUmVxdWVzdExvY2F0aW9uc0J5UHJvZ3Jlc3MgPSBuaWw7CisgICAgX3F1ZXVlZEFkZGl0aW9u
YWxJdGVtUmVxdWVzdExvY2F0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOworICAgIF9saWZ0UHJldmlld3MgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRdKTsKK30KKworLSAoTlNBcnJheSAqKW9ic2VydmVkRXZlbnROYW1lcworeworICAg
IHJldHVybiBfb2JzZXJ2ZWRFdmVudE5hbWVzLmdldCgpOworfQorCistICh2b2lkKXNpbXVsYXRl
QWxsVG91Y2hlc0NhbmNlbGVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAg
IFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IoX2FkdmFuY2VQcm9ncmVzcykgb2JqZWN0Om5pbF07CisgICAgX3Bo
YXNlID0gRHJhZ0FuZERyb3BQaGFzZUNhbmNlbGxlZDsKKyAgICBfY3VycmVudFByb2dyZXNzID0g
MTsKKyAgICBfaXNEb25lV2l0aEN1cnJlbnRSdW4gPSB0cnVlOworICAgIGlmIChfZHJhZ1Nlc3Np
b24pCisgICAgICAgIFtbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVdIGRyYWdJbnRl
cmFjdGlvbjpbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uXSBzZXNzaW9uOl9kcmFnU2Vzc2lvbi5n
ZXQoKSBkaWRFbmRXaXRoT3BlcmF0aW9uOlVJRHJvcE9wZXJhdGlvbkNhbmNlbF07Cit9CisKKy0g
KHZvaWQpcnVuRnJvbTooQ0dQb2ludClzdGFydExvY2F0aW9uIHRvOihDR1BvaW50KWVuZExvY2F0
aW9uCit7CisgICAgW3NlbGYgcnVuRnJvbTpzdGFydExvY2F0aW9uIHRvOmVuZExvY2F0aW9uIGFk
ZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uczpuaWxdOworfQorCistICh2b2lkKXJ1bkZyb206
KENHUG9pbnQpc3RhcnRMb2NhdGlvbiB0bzooQ0dQb2ludCllbmRMb2NhdGlvbiBhZGRpdGlvbmFs
SXRlbVJlcXVlc3RMb2NhdGlvbnM6KFByb2dyZXNzVG9DR1BvaW50VmFsdWVNYXApYWRkaXRpb25h
bEl0ZW1SZXF1ZXN0TG9jYXRpb25zCit7CisgICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKmRlZmF1
bHRDZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07CisgICAgW2Rl
ZmF1bHRDZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Ioc2ltdWxhdGVB
bGxUb3VjaGVzQ2FuY2VsZWQ6KSBuYW1lOlRlc3RXZWJLaXRBUElTaW11bGF0ZUNhbmNlbEFsbFRv
dWNoZXNOb3RpZmljYXRpb25OYW1lIG9iamVjdDpuaWxdOworCisgICAgaWYgKF9zaG91bGRFbnN1
cmVVSUFwcGxpY2F0aW9uKQorICAgICAgICBVSUFwcGxpY2F0aW9uSW5zdGFudGlhdGVTaW5nbGV0
b24oW0RyYWdnaW5nU2ltdWxhdG9yQXBwbGljYXRpb24gY2xhc3NdKTsKKworICAgIFtzZWxmIF9y
ZXNldFNpbXVsYXRlZFN0YXRlXTsKKworICAgIGlmIChhZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2Nh
dGlvbnMpCisgICAgICAgIF9yZW1haW5pbmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnNC
eVByb2dyZXNzID0gYWRvcHROUyhbYWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zIG11dGFi
bGVDb3B5XSk7CisKKyAgICBmb3IgKE5TU3RyaW5nICpldmVudE5hbWUgaW4gZHJhZ0FuZERyb3BF
dmVudE5hbWVzKCkpIHsKKyAgICAgICAgW193ZWJWaWV3IHBlcmZvcm1BZnRlclJlY2VpdmluZ01l
c3NhZ2U6ZXZlbnROYW1lIGFjdGlvbjpbc3Ryb25nU2VsZiA9IHJldGFpblB0cihzZWxmKSwgbmFt
ZSA9IHJldGFpblB0cihldmVudE5hbWUpXSB7CisgICAgICAgICAgICBbc3Ryb25nU2VsZi0+X29i
c2VydmVkRXZlbnROYW1lcyBhZGRPYmplY3Q6bmFtZS5nZXQoKV07CisgICAgICAgIH1dOworICAg
IH0KKworICAgIF9zdGFydExvY2F0aW9uID0gc3RhcnRMb2NhdGlvbjsKKyAgICBfZW5kTG9jYXRp
b24gPSBlbmRMb2NhdGlvbjsKKworICAgIGlmIChzZWxmLmV4dGVybmFsSXRlbVByb3ZpZGVycy5j
b3VudCkgeworICAgICAgICBfZHJvcFNlc3Npb24gPSBhZG9wdE5TKFtbTW9ja0Ryb3BTZXNzaW9u
IGFsbG9jXSBpbml0V2l0aFByb3ZpZGVyczpzZWxmLmV4dGVybmFsSXRlbVByb3ZpZGVycyBsb2Nh
dGlvbjpfc3RhcnRMb2NhdGlvbiB3aW5kb3c6W193ZWJWaWV3IHdpbmRvd10gYWxsb3dNb3ZlOnNl
bGYuc2hvdWxkQWxsb3dNb3ZlT3BlcmF0aW9uXSk7CisgICAgICAgIF9waGFzZSA9IERyYWdBbmRE
cm9wUGhhc2VCZWdhbjsKKyAgICAgICAgW3NlbGYgX2FkdmFuY2VQcm9ncmVzc107CisgICAgfSBl
bHNlIHsKKyAgICAgICAgX2RyYWdTZXNzaW9uID0gYWRvcHROUyhbW01vY2tEcmFnU2Vzc2lvbiBh
bGxvY10gaW5pdFdpdGhXaW5kb3c6W193ZWJWaWV3IHdpbmRvd10gYWxsb3dNb3ZlOnNlbGYuc2hv
dWxkQWxsb3dNb3ZlT3BlcmF0aW9uXSk7CisgICAgICAgIFtfZHJhZ1Nlc3Npb24gc2V0TW9ja0xv
Y2F0aW9uSW5XaW5kb3c6X3N0YXJ0TG9jYXRpb25dOworICAgICAgICBbKGlkIDxVSURyYWdJbnRl
cmFjdGlvbkRlbGVnYXRlX0ZvcldlYktpdE9ubHk+KVtfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25E
ZWxlZ2F0ZV0gX2RyYWdJbnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uXSBwcmVw
YXJlRm9yU2Vzc2lvbjpfZHJhZ1Nlc3Npb24uZ2V0KCkgY29tcGxldGlvbjpbc3Ryb25nU2VsZiA9
IHJldGFpblB0cihzZWxmKV0geworICAgICAgICAgICAgaWYgKHN0cm9uZ1NlbGYtPl9waGFzZSA9
PSBEcmFnQW5kRHJvcFBoYXNlQ2FuY2VsbGVkKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgc3Ryb25nU2VsZi0+X3BoYXNlID0gRHJhZ0FuZERyb3BQaGFzZUJlZ2lubmlu
ZzsKKyAgICAgICAgICAgIFtzdHJvbmdTZWxmIF9hZHZhbmNlUHJvZ3Jlc3NdOworICAgICAgICB9
XTsKKyAgICB9CisKKyAgICBVdGlsOjpydW4oJl9pc0RvbmVXaXRoQ3VycmVudFJ1bik7CisgICAg
W193ZWJWaWV3IGNsZWFyTWVzc2FnZUhhbmRsZXJzOmRyYWdBbmREcm9wRXZlbnROYW1lcygpXTsK
KyAgICBfZmluYWxTZWxlY3Rpb25SZWN0cyA9IFtfd2ViVmlldyBzZWxlY3Rpb25SZWN0c0FmdGVy
UHJlc2VudGF0aW9uVXBkYXRlXTsKKworICAgIFtkZWZhdWx0Q2VudGVyIHJlbW92ZU9ic2VydmVy
OnNlbGZdOworfQorCistIChOU0FycmF5ICopZmluYWxTZWxlY3Rpb25SZWN0cworeworICAgIHJl
dHVybiBfZmluYWxTZWxlY3Rpb25SZWN0cy5nZXQoKTsKK30KKworLSAodm9pZClfY29uY2x1ZGVE
cm9wQW5kUGVyZm9ybU9wZXJhdGlvbklmTmVjZXNzYXJ5Cit7CisgICAgX2xhc3RLbm93bkRyYWdD
YXJldFJlY3QgPSBbX3dlYlZpZXcgX2RyYWdDYXJldFJlY3RdOworICAgIGF1dG8gb3BlcmF0aW9u
ID0gW19jdXJyZW50RHJvcFByb3Bvc2FsIG9wZXJhdGlvbl07CisgICAgaWYgKG9wZXJhdGlvbiAh
PSBVSURyb3BPcGVyYXRpb25DYW5jZWwgJiYgb3BlcmF0aW9uICE9IFVJRHJvcE9wZXJhdGlvbkZv
cmJpZGRlbikgeworICAgICAgICBbW193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbkRlbGVnYXRlXSBk
cm9wSW50ZXJhY3Rpb246W193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbl0gcGVyZm9ybURyb3A6X2Ry
b3BTZXNzaW9uLmdldCgpXTsKKyAgICAgICAgX3BoYXNlID0gRHJhZ0FuZERyb3BQaGFzZVBlcmZv
cm1pbmdEcm9wOworICAgIH0gZWxzZSB7CisgICAgICAgIF9pc0RvbmVXaXRoQ3VycmVudFJ1biA9
IFlFUzsKKyAgICAgICAgX3BoYXNlID0gRHJhZ0FuZERyb3BQaGFzZUNhbmNlbGxlZDsKKyAgICB9
CisKKyAgICBbW193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcm9wSW50ZXJhY3Rp
b246W193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbl0gc2Vzc2lvbkRpZEVuZDpfZHJvcFNlc3Npb24u
Z2V0KCldOworCisgICAgaWYgKF9kcmFnU2Vzc2lvbikKKyAgICAgICAgW1tfd2ViVmlldyBkcmFn
SW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJhZ0ludGVyYWN0aW9uOltfd2ViVmlldyBkcmFnSW50ZXJh
Y3Rpb25dIHNlc3Npb246X2RyYWdTZXNzaW9uLmdldCgpIGRpZEVuZFdpdGhPcGVyYXRpb246b3Bl
cmF0aW9uXTsKK30KKworLSAodm9pZClfZW5xdWV1ZVBlbmRpbmdBZGRpdGlvbmFsSXRlbVJlcXVl
c3RMb2NhdGlvbnMKK3sKKyAgICBOU011dGFibGVBcnJheSAqcHJvZ3Jlc3NWYWx1ZXNUb1JlbW92
ZSA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgICAgZm9yIChOU051bWJlciAqcHJvZ3Jlc3NW
YWx1ZSBpbiBfcmVtYWluaW5nQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zQnlQcm9ncmVz
cy5nZXQoKSkgeworICAgICAgICBkb3VibGUgcHJvZ3Jlc3MgPSBwcm9ncmVzc1ZhbHVlLmRvdWJs
ZVZhbHVlOworICAgICAgICBpZiAocHJvZ3Jlc3MgPiBfY3VycmVudFByb2dyZXNzKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIFtwcm9ncmVzc1ZhbHVlc1RvUmVtb3ZlIGFkZE9iamVj
dDpwcm9ncmVzc1ZhbHVlXTsKKyAgICAgICAgW19xdWV1ZWRBZGRpdGlvbmFsSXRlbVJlcXVlc3RM
b2NhdGlvbnMgYWRkT2JqZWN0OltfcmVtYWluaW5nQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRp
b25zQnlQcm9ncmVzcyBvYmplY3RGb3JLZXk6cHJvZ3Jlc3NWYWx1ZV1dOworICAgIH0KKworICAg
IGZvciAoTlNOdW1iZXIgKnByb2dyZXNzVG9SZW1vdmUgaW4gcHJvZ3Jlc3NWYWx1ZXNUb1JlbW92
ZSkKKyAgICAgICAgW19yZW1haW5pbmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnNCeVBy
b2dyZXNzIHJlbW92ZU9iamVjdEZvcktleTpwcm9ncmVzc1RvUmVtb3ZlXTsKK30KKworLSAoQk9P
TClfc2VuZFF1ZXVlZEFkZGl0aW9uYWxJdGVtUmVxdWVzdAoreworICAgIGlmICghW19xdWV1ZWRB
ZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnMgY291bnRdKQorICAgICAgICByZXR1cm4gTk87
CisKKyAgICBSZXRhaW5QdHI8TlNWYWx1ZT4gcmVxdWVzdExvY2F0aW9uVmFsdWUgPSBbX3F1ZXVl
ZEFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9ucyBvYmplY3RBdEluZGV4OjBdOworICAgIFtf
cXVldWVkQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zIHJlbW92ZU9iamVjdEF0SW5kZXg6
MF07CisKKyAgICBhdXRvIHJlcXVlc3RMb2NhdGlvbiA9IFtbX3dlYlZpZXcgd2luZG93XSBjb252
ZXJ0UG9pbnQ6W3JlcXVlc3RMb2NhdGlvblZhbHVlIENHUG9pbnRWYWx1ZV0gdG9WaWV3Ol93ZWJW
aWV3LmdldCgpXTsKKyAgICBbKGlkIDxVSURyYWdJbnRlcmFjdGlvbkRlbGVnYXRlX1Byb3Bvc2Vk
X1NQSV8zMzE0NjgwMz4pW193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlXSBfZHJhZ0lu
dGVyYWN0aW9uOltfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25dIGl0ZW1zRm9yQWRkaW5nVG9TZXNz
aW9uOl9kcmFnU2Vzc2lvbi5nZXQoKSB3aXRoVG91Y2hBdFBvaW50OnJlcXVlc3RMb2NhdGlvbiBj
b21wbGV0aW9uOltkcmFnU2Vzc2lvbiA9IF9kcmFnU2Vzc2lvbiwgZHJvcFNlc3Npb24gPSBfZHJv
cFNlc3Npb25dIChOU0FycmF5ICppdGVtcykgeworICAgICAgICBbZHJhZ1Nlc3Npb24gYWRkSXRl
bXM6aXRlbXNdOworICAgICAgICBbZHJvcFNlc3Npb24gYWRkSXRlbXM6aXRlbXNdOworICAgIH1d
OworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKHZvaWQpX2FkdmFuY2VQcm9ncmVzcworeworICAg
IFtzZWxmIF9lbnF1ZXVlUGVuZGluZ0FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uc107Cisg
ICAgaWYgKFtzZWxmIF9zZW5kUXVldWVkQWRkaXRpb25hbEl0ZW1SZXF1ZXN0XSkgeworICAgICAg
ICBbc2VsZiBfc2NoZWR1bGVBZHZhbmNlUHJvZ3Jlc3NdOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgX2xhc3RLbm93bkRyYWdDYXJldFJlY3QgPSBbX3dlYlZpZXcgX2RyYWdDYXJldFJl
Y3RdOworICAgIF9jdXJyZW50UHJvZ3Jlc3MgKz0gcHJvZ3Jlc3NJbmNyZW1lbnRTdGVwOworICAg
IENHUG9pbnQgbG9jYXRpb25JbldpbmRvdyA9IHNlbGYuX2N1cnJlbnRMb2NhdGlvbjsKKyAgICBb
X2RyYWdTZXNzaW9uIHNldE1vY2tMb2NhdGlvbkluV2luZG93OmxvY2F0aW9uSW5XaW5kb3ddOwor
ICAgIFtfZHJvcFNlc3Npb24gc2V0TW9ja0xvY2F0aW9uSW5XaW5kb3c6bG9jYXRpb25JbldpbmRv
d107CisKKyAgICBpZiAoX2N1cnJlbnRQcm9ncmVzcyA+PSAxKSB7CisgICAgICAgIF9jdXJyZW50
UHJvZ3Jlc3MgPSAxOworICAgICAgICBbc2VsZiBfY29uY2x1ZGVEcm9wQW5kUGVyZm9ybU9wZXJh
dGlvbklmTmVjZXNzYXJ5XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN3aXRjaCAo
X3BoYXNlKSB7CisgICAgY2FzZSBEcmFnQW5kRHJvcFBoYXNlQmVnaW5uaW5nOiB7CisgICAgICAg
IE5TTXV0YWJsZUFycmF5PFVJSXRlbVByb3ZpZGVyICo+ICppdGVtUHJvdmlkZXJzID0gW05TTXV0
YWJsZUFycmF5IGFycmF5XTsKKyAgICAgICAgTlNBcnJheSAqaXRlbXMgPSBbW193ZWJWaWV3IGRy
YWdJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcmFnSW50ZXJhY3Rpb246W193ZWJWaWV3IGRyYWdJbnRl
cmFjdGlvbl0gaXRlbXNGb3JCZWdpbm5pbmdTZXNzaW9uOl9kcmFnU2Vzc2lvbi5nZXQoKV07Cisg
ICAgICAgIGlmICghaXRlbXMuY291bnQpIHsKKyAgICAgICAgICAgIF9waGFzZSA9IERyYWdBbmRE
cm9wUGhhc2VDYW5jZWxsZWQ7CisgICAgICAgICAgICBfY3VycmVudFByb2dyZXNzID0gMTsKKyAg
ICAgICAgICAgIF9pc0RvbmVXaXRoQ3VycmVudFJ1biA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFVJRHJhZ0l0ZW0gKml0ZW0gaW4gaXRlbXMp
IHsKKyAgICAgICAgICAgIFtpdGVtUHJvdmlkZXJzIGFkZE9iamVjdDppdGVtLml0ZW1Qcm92aWRl
cl07CisgICAgICAgICAgICBVSVRhcmdldGVkRHJhZ1ByZXZpZXcgKmxpZnRQcmV2aWV3ID0gW1tf
d2ViVmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJhZ0ludGVyYWN0aW9uOltfd2ViVmll
dyBkcmFnSW50ZXJhY3Rpb25dIHByZXZpZXdGb3JMaWZ0aW5nSXRlbTppdGVtIHNlc3Npb246X2Ry
YWdTZXNzaW9uLmdldCgpXTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKCEhbGlmdFByZXZpZXcp
OworICAgICAgICAgICAgaWYgKGxpZnRQcmV2aWV3KQorICAgICAgICAgICAgICAgIFtfbGlmdFBy
ZXZpZXdzIGFkZE9iamVjdDpsaWZ0UHJldmlld107CisgICAgICAgIH0KKworICAgICAgICBfZHJv
cFNlc3Npb24gPSBhZG9wdE5TKFtbTW9ja0Ryb3BTZXNzaW9uIGFsbG9jXSBpbml0V2l0aFByb3Zp
ZGVyczppdGVtUHJvdmlkZXJzIGxvY2F0aW9uOnNlbGYuX2N1cnJlbnRMb2NhdGlvbiB3aW5kb3c6
W193ZWJWaWV3IHdpbmRvd10gYWxsb3dNb3ZlOnNlbGYuc2hvdWxkQWxsb3dNb3ZlT3BlcmF0aW9u
XSk7CisgICAgICAgIFtfZHJhZ1Nlc3Npb24gc2V0SXRlbXM6aXRlbXNdOworICAgICAgICBfc291
cmNlSXRlbVByb3ZpZGVycyA9IGl0ZW1Qcm92aWRlcnM7CisgICAgICAgIGlmIChzZWxmLnNob3dD
dXN0b21BY3Rpb25TaGVldEJsb2NrKSB7CisgICAgICAgICAgICAvLyBEZWZlciBwcm9ncmVzcyB1
bnRpbCB0aGUgY3VzdG9tIGFjdGlvbiBzaGVldCBpcyBkaXNtaXNzZWQuCisgICAgICAgICAgICBh
dXRvIHN0YXJ0TG9jYXRpb25JblZpZXcgPSBbW193ZWJWaWV3IHdpbmRvd10gY29udmVydFBvaW50
Ol9zdGFydExvY2F0aW9uIHRvVmlldzpfd2ViVmlldy5nZXQoKV07CisgICAgICAgICAgICBbX3dl
YlZpZXcgX3NpbXVsYXRlTG9uZ1ByZXNzQWN0aW9uQXRMb2NhdGlvbjpzdGFydExvY2F0aW9uSW5W
aWV3XTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFtbX3dlYlZp
ZXcgZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVdIGRyYWdJbnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJh
Z0ludGVyYWN0aW9uXSBzZXNzaW9uV2lsbEJlZ2luOl9kcmFnU2Vzc2lvbi5nZXQoKV07CisKKyAg
ICAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gcmV0YWluZWRXZWJWaWV3ID0gX3dlYlZpZXc7Cisg
ICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF4oKSB7Cisg
ICAgICAgICAgICBbcmV0YWluZWRXZWJWaWV3IHJlc2lnbkZpcnN0UmVzcG9uZGVyXTsKKyAgICAg
ICAgfSk7CisKKyAgICAgICAgX3BoYXNlID0gRHJhZ0FuZERyb3BQaGFzZUJlZ2FuOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBEcmFnQW5kRHJvcFBoYXNlQmVnYW46CisgICAgICAg
IFtbX3dlYlZpZXcgZHJvcEludGVyYWN0aW9uRGVsZWdhdGVdIGRyb3BJbnRlcmFjdGlvbjpbX3dl
YlZpZXcgZHJvcEludGVyYWN0aW9uXSBzZXNzaW9uRGlkRW50ZXI6X2Ryb3BTZXNzaW9uLmdldCgp
XTsKKyAgICAgICAgX3BoYXNlID0gRHJhZ0FuZERyb3BQaGFzZUVudGVyZWQ7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRHJhZ0FuZERyb3BQaGFzZUVudGVyZWQ6IHsKKyAgICAgICAgX2N1cnJl
bnREcm9wUHJvcG9zYWwgPSBbW193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcm9w
SW50ZXJhY3Rpb246W193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbl0gc2Vzc2lvbkRpZFVwZGF0ZTpf
ZHJvcFNlc3Npb24uZ2V0KCldOworICAgICAgICBpZiAoIVtzZWxmIHNob3VsZEFsbG93TW92ZU9w
ZXJhdGlvbl0gJiYgW19jdXJyZW50RHJvcFByb3Bvc2FsIG9wZXJhdGlvbl0gPT0gVUlEcm9wT3Bl
cmF0aW9uTW92ZSkKKyAgICAgICAgICAgIF9jdXJyZW50RHJvcFByb3Bvc2FsID0gYWRvcHROUyhb
W1VJRHJvcFByb3Bvc2FsIGFsbG9jXSBpbml0V2l0aERyb3BPcGVyYXRpb246VUlEcm9wT3BlcmF0
aW9uQ2FuY2VsXSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBbc2VsZiBfc2NoZWR1bGVBZHZhbmNlUHJvZ3Jlc3NdOwor
fQorCistIChDR1BvaW50KV9jdXJyZW50TG9jYXRpb24KK3sKKyAgICBDR0Zsb2F0IGRpc3RhbmNl
WCA9IF9lbmRMb2NhdGlvbi54IC0gX3N0YXJ0TG9jYXRpb24ueDsKKyAgICBDR0Zsb2F0IGRpc3Rh
bmNlWSA9IF9lbmRMb2NhdGlvbi55IC0gX3N0YXJ0TG9jYXRpb24ueTsKKyAgICByZXR1cm4gQ0dQ
b2ludE1ha2UoX3N0YXJ0TG9jYXRpb24ueCArIF9jdXJyZW50UHJvZ3Jlc3MgKiBkaXN0YW5jZVgs
IF9zdGFydExvY2F0aW9uLnkgKyBfY3VycmVudFByb2dyZXNzICogZGlzdGFuY2VZKTsKK30KKwor
LSAodm9pZClfc2NoZWR1bGVBZHZhbmNlUHJvZ3Jlc3MKK3sKKyAgICBbTlNPYmplY3QgY2FuY2Vs
UHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9y
KF9hZHZhbmNlUHJvZ3Jlc3MpIG9iamVjdDpuaWxdOworICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rv
cjpAc2VsZWN0b3IoX2FkdmFuY2VQcm9ncmVzcykgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTpw
cm9ncmVzc1RpbWVTdGVwXTsKK30KKworLSAoTlNBcnJheSAqKXNvdXJjZUl0ZW1Qcm92aWRlcnMK
K3sKKyAgICByZXR1cm4gX3NvdXJjZUl0ZW1Qcm92aWRlcnMuZ2V0KCk7Cit9CisKKy0gKE5TQXJy
YXkgKilleHRlcm5hbEl0ZW1Qcm92aWRlcnMKK3sKKyAgICByZXR1cm4gX2V4dGVybmFsSXRlbVBy
b3ZpZGVycy5nZXQoKTsKK30KKworLSAodm9pZClzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6KE5T
QXJyYXkgKilleHRlcm5hbEl0ZW1Qcm92aWRlcnMKK3sKKyAgICBfZXh0ZXJuYWxJdGVtUHJvdmlk
ZXJzID0gYWRvcHROUyhbZXh0ZXJuYWxJdGVtUHJvdmlkZXJzIGNvcHldKTsKK30KKworLSAoRHJh
Z0FuZERyb3BQaGFzZSlwaGFzZQoreworICAgIHJldHVybiBfcGhhc2U7Cit9CisKKy0gKE5TQXJy
YXk8VUlUYXJnZXRlZERyYWdQcmV2aWV3ICo+ICopbGlmdFByZXZpZXdzCit7CisgICAgcmV0dXJu
IF9saWZ0UHJldmlld3MuZ2V0KCk7Cit9CisKKy0gKENHUmVjdClsYXN0S25vd25EcmFnQ2FyZXRS
ZWN0Cit7CisgICAgcmV0dXJuIF9sYXN0S25vd25EcmFnQ2FyZXRSZWN0OworfQorCistICh2b2lk
KXdhaXRGb3JJbnB1dFNlc3Npb24KK3sKKyAgICBfaXNEb25lV2FpdGluZ0ZvcklucHV0U2Vzc2lv
biA9IGZhbHNlOworCisgICAgLy8gV2FpdGluZyBmb3IgYW4gaW5wdXQgc2Vzc2lvbiBpbXBsaWVz
IHRoYXQgd2Ugc2hvdWxkIGFsbG93IGlucHV0IHNlc3Npb25zIHRvIGJlZ2luLgorICAgIHNlbGYu
YWxsb3dzRm9jdXNUb1N0YXJ0SW5wdXRTZXNzaW9uID0gWUVTOworCisgICAgVXRpbDo6cnVuKCZf
aXNEb25lV2FpdGluZ0ZvcklucHV0U2Vzc2lvbik7Cit9CisKKy0gKE5TQXJyYXk8X1dLQXR0YWNo
bWVudCAqPiAqKWluc2VydGVkQXR0YWNobWVudHMKK3sKKyAgICByZXR1cm4gX2luc2VydGVkQXR0
YWNobWVudHMuZ2V0KCk7Cit9CisKKy0gKE5TQXJyYXk8X1dLQXR0YWNobWVudCAqPiAqKXJlbW92
ZWRBdHRhY2htZW50cworeworICAgIHJldHVybiBfcmVtb3ZlZEF0dGFjaG1lbnRzLmdldCgpOwor
fQorCistICh2b2lkKWVuZERhdGFUcmFuc2ZlcgoreworICAgIFtbX3dlYlZpZXcgZHJhZ0ludGVy
YWN0aW9uRGVsZWdhdGVdIGRyYWdJbnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9u
XSBzZXNzaW9uRGlkVHJhbnNmZXJJdGVtczpfZHJhZ1Nlc3Npb24uZ2V0KCldOworfQorCisjcHJh
Z21hIG1hcmsgLSBXS1VJRGVsZWdhdGVQcml2YXRlCisKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcgZGF0YUludGVyYWN0aW9uT3BlcmF0aW9uV2FzSGFuZGxlZDooQk9PTClo
YW5kbGVkIGZvclNlc3Npb246KGlkKXNlc3Npb24gaXRlbVByb3ZpZGVyczooTlNBcnJheTxVSUl0
ZW1Qcm92aWRlciAqPiAqKWl0ZW1Qcm92aWRlcnMKK3sKKyAgICBfaXNEb25lV2l0aEN1cnJlbnRS
dW4gPSB0cnVlOworCisgICAgaWYgKHNlbGYuZHJvcENvbXBsZXRpb25CbG9jaykKKyAgICAgICAg
c2VsZi5kcm9wQ29tcGxldGlvbkJsb2NrKGhhbmRsZWQsIGl0ZW1Qcm92aWRlcnMpOworfQorCist
IChOU1VJbnRlZ2VyKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxVcGRhdGVEYXRh
SW50ZXJhY3Rpb25PcGVyYXRpb25Ub09wZXJhdGlvbjooTlNVSW50ZWdlcilvcGVyYXRpb24gZm9y
U2Vzc2lvbjooaWQpc2Vzc2lvbgoreworICAgIHJldHVybiBzZWxmLm92ZXJyaWRlRHJhZ1VwZGF0
ZUJsb2NrID8gc2VsZi5vdmVycmlkZURyYWdVcGRhdGVCbG9jayhvcGVyYXRpb24sIHNlc3Npb24p
IDogb3BlcmF0aW9uOworfQorCistIChOU0FycmF5ICopX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdl
YlZpZXcgYWRqdXN0ZWREYXRhSW50ZXJhY3Rpb25JdGVtUHJvdmlkZXJzRm9ySXRlbVByb3ZpZGVy
OihVSUl0ZW1Qcm92aWRlciAqKWl0ZW1Qcm92aWRlciByZXByZXNlbnRpbmdPYmplY3RzOihOU0Fy
cmF5ICopcmVwcmVzZW50aW5nT2JqZWN0cyBhZGRpdGlvbmFsRGF0YTooTlNEaWN0aW9uYXJ5ICop
YWRkaXRpb25hbERhdGEKK3sKKyAgICByZXR1cm4gc2VsZi5jb252ZXJ0SXRlbVByb3ZpZGVyc0Js
b2NrID8gc2VsZi5jb252ZXJ0SXRlbVByb3ZpZGVyc0Jsb2NrKGl0ZW1Qcm92aWRlciwgcmVwcmVz
ZW50aW5nT2JqZWN0cywgYWRkaXRpb25hbERhdGEpIDogQFsgaXRlbVByb3ZpZGVyIF07Cit9CisK
Ky0gKEJPT0wpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc2hvd0N1c3RvbVNoZWV0Rm9y
RWxlbWVudDooX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKillbGVtZW50Cit7CisgICAgaWYgKCFz
ZWxmLnNob3dDdXN0b21BY3Rpb25TaGVldEJsb2NrKQorICAgICAgICByZXR1cm4gTk87CisKKyAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nU2VsZiA9
IHJldGFpblB0cihzZWxmKV0geworICAgICAgICBbW3N0cm9uZ1NlbGYtPl93ZWJWaWV3IGRyYWdJ
bnRlcmFjdGlvbkRlbGVnYXRlXSBkcmFnSW50ZXJhY3Rpb246W3N0cm9uZ1NlbGYtPl93ZWJWaWV3
IGRyYWdJbnRlcmFjdGlvbl0gc2Vzc2lvbldpbGxCZWdpbjpzdHJvbmdTZWxmLT5fZHJhZ1Nlc3Np
b24uZ2V0KCldOworICAgICAgICBzdHJvbmdTZWxmLT5fcGhhc2UgPSBEcmFnQW5kRHJvcFBoYXNl
QmVnYW47CisgICAgICAgIFtzdHJvbmdTZWxmIF9zY2hlZHVsZUFkdmFuY2VQcm9ncmVzc107Cisg
ICAgfSk7CisKKyAgICByZXR1cm4gc2VsZi5zaG93Q3VzdG9tQWN0aW9uU2hlZXRCbG9jayhlbGVt
ZW50KTsKK30KKworLSAoTlNBcnJheTxVSURyYWdJdGVtICo+ICopX3dlYlZpZXc6KFdLV2ViVmll
dyAqKXdlYlZpZXcgd2lsbFBlcmZvcm1Ecm9wV2l0aFNlc3Npb246KGlkIDxVSURyb3BTZXNzaW9u
PilzZXNzaW9uCit7CisgICAgcmV0dXJuIHNlbGYub3ZlcnJpZGVQZXJmb3JtRHJvcEJsb2NrID8g
c2VsZi5vdmVycmlkZVBlcmZvcm1Ecm9wQmxvY2soc2Vzc2lvbikgOiBzZXNzaW9uLml0ZW1zOwor
fQorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEluc2VydEF0dGFj
aG1lbnQ6KF9XS0F0dGFjaG1lbnQgKilhdHRhY2htZW50Cit7CisgICAgW19pbnNlcnRlZEF0dGFj
aG1lbnRzIGFkZE9iamVjdDphdHRhY2htZW50XTsKK30KKworLSAodm9pZClfd2ViVmlldzooV0tX
ZWJWaWV3ICopd2ViVmlldyBkaWRSZW1vdmVBdHRhY2htZW50OihfV0tBdHRhY2htZW50ICopYXR0
YWNobWVudAoreworICAgIFtfcmVtb3ZlZEF0dGFjaG1lbnRzIGFkZE9iamVjdDphdHRhY2htZW50
XTsKK30KKworI3ByYWdtYSBtYXJrIC0gX1dLSW5wdXREZWxlZ2F0ZQorCistIChCT09MKV93ZWJW
aWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGZvY3VzU2hvdWxkU3RhcnRJbnB1dFNlc3Npb246KGlk
IDxfV0tGb2N1c2VkRWxlbWVudEluZm8+KWluZm8KK3sKKyAgICByZXR1cm4gX2FsbG93c0ZvY3Vz
VG9TdGFydElucHV0U2Vzc2lvbjsKK30KKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICop
d2ViVmlldyBkaWRTdGFydElucHV0U2Vzc2lvbjooaWQgPF9XS0Zvcm1JbnB1dFNlc3Npb24+KWlu
cHV0U2Vzc2lvbgoreworICAgIF9pc0RvbmVXYWl0aW5nRm9ySW5wdXRTZXNzaW9uID0gdHJ1ZTsK
K30KKworQGVuZAorCisjZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkgJiYgUExBVEZPUk0o
SU9TKSAmJiBXS19BUElfRU5BQkxFRApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9p
b3MvVUlLaXRTUEkuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL1VJS2l0U1BJLmgKaW5kZXgg
OGVkZDA1MmEwMzg0YjBjNzk0Zjk5ZWQ3MDdiZjQ1YTFlNzI5MGZmMi4uOGVjZjMwNWVmYmU3NzE0
MzhkMDI0Zjc3MGU5NWRlZWM1MGQxZjFkMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9pb3MvVUlLaXRTUEkuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9VSUtpdFNQSS5o
CkBAIC0zOSw3ICszOSwxMiBAQAogQHByb3RvY29sIFVJRHJhZ1Nlc3Npb247CiBAY2xhc3MgVUlE
cmFnSW50ZXJhY3Rpb247CiBAY2xhc3MgVUlEcmFnSXRlbTsKKyNpbXBvcnQgPFVJS2l0L05TU3Ry
aW5nK1VJSXRlbVByb3ZpZGVyLmg+CisjaW1wb3J0IDxVSUtpdC9OU1VSTCtVSUl0ZW1Qcm92aWRl
ci5oPgogI2ltcG9ydCA8VUlLaXQvVUlEcmFnSW50ZXJhY3Rpb25fUHJpdmF0ZS5oPgorI2ltcG9y
dCA8VUlLaXQvVUlJbWFnZStVSUl0ZW1Qcm92aWRlci5oPgorI2ltcG9ydCA8VUlLaXQvVUlJdGVt
UHJvdmlkZXIuaD4KKyNpbXBvcnQgPFVJS2l0L1VJSXRlbVByb3ZpZGVyX1ByaXZhdGUuaD4KICNl
bmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQogCiAjZWxzZQpAQCAtNzAsNiArNzUsNDIgQEAg
V1RGX0VYVEVSTl9DX0VORAogLSAodm9pZCloYW5kbGVLZXlXZWJFdmVudDooV2ViRXZlbnQgKil0
aGVFdmVudCB3aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdlYkV2ZW50ICosIEJPT0wp
KWNvbXBsZXRpb25IYW5kbGVyOwogQGVuZAogCisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKwor
QGludGVyZmFjZSBOU1VSTCAoKQorQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1f
c2V0VGl0bGU6KSBOU1N0cmluZyAqX3RpdGxlOworQGVuZAorCisjZGVmaW5lIFVJSXRlbVByb3Zp
ZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbCBOU0l0ZW1Qcm92aWRlclJlcHJl
c2VudGF0aW9uVmlzaWJpbGl0eUFsbAorCitAcHJvdG9jb2wgVUlJdGVtUHJvdmlkZXJSZWFkaW5n
IDxOU0l0ZW1Qcm92aWRlclJlYWRpbmc+CisKK0ByZXF1aXJlZAorLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoSXRlbVByb3ZpZGVyRGF0YTooTlNEYXRhICopZGF0YSB0eXBlSWRlbnRpZmllcjooTlNT
dHJpbmcgKil0eXBlSWRlbnRpZmllciBlcnJvcjooTlNFcnJvciAqKilvdXRFcnJvcjsKKworQGVu
ZAorCitAcHJvdG9jb2wgVUlJdGVtUHJvdmlkZXJXcml0aW5nIDxOU0l0ZW1Qcm92aWRlcldyaXRp
bmc+CisKK0ByZXF1aXJlZAorLSAoTlNQcm9ncmVzcyAqKWxvYWREYXRhV2l0aFR5cGVJZGVudGlm
aWVyOihOU1N0cmluZyAqKXR5cGVJZGVudGlmaWVyIGZvckl0ZW1Qcm92aWRlckNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShOU0RhdGEgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsK
KworQGVuZAorCitAaW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmluZyAoKSA8VUlJdGVtUHJvdmlk
ZXJSZWFkaW5nLCBVSUl0ZW1Qcm92aWRlcldyaXRpbmc+CitAZW5kCitAaW50ZXJmYWNlIE5TU3Ry
aW5nICgpIDxVSUl0ZW1Qcm92aWRlclJlYWRpbmcsIFVJSXRlbVByb3ZpZGVyV3JpdGluZz4KK0Bl
bmQKK0BpbnRlcmZhY2UgTlNVUkwgKCkgPFVJSXRlbVByb3ZpZGVyUmVhZGluZywgVUlJdGVtUHJv
dmlkZXJXcml0aW5nPgorQGVuZAorQGludGVyZmFjZSBVSUltYWdlICgpIDxVSUl0ZW1Qcm92aWRl
clJlYWRpbmcsIFVJSXRlbVByb3ZpZGVyV3JpdGluZz4KK0BlbmQKKworQGludGVyZmFjZSBVSUl0
ZW1Qcm92aWRlciA6IE5TSXRlbVByb3ZpZGVyCitAZW5kCisKKyNlbmRpZgorCiAjZW5kaWYKIAog
QHByb3RvY29sIFVJVGV4dElucHV0VHJhaXRzX1ByaXZhdGVfUHJvcG9zZWRfU1BJXzM0NTgzNjI4
IDxVSVRleHRJbnB1dFByaXZhdGU+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL21h
Yy9EcmFnZ2luZ1NpbXVsYXRvck1hYy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL0RyYWdn
aW5nU2ltdWxhdG9yTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxODU0ZGNmMGI5MjhjN2Q0M2YzMmM3OTMw
NGQ0NDgxOTk5ZTAzYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL21h
Yy9EcmFnZ2luZ1NpbXVsYXRvck1hYy5tbQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJEcmFnZ2luZ1NpbXVsYXRvci5oIgorCisjaWYg
RU5BQkxFKERSQUdfU1VQUE9SVCkgJiYgUExBVEZPUk0oTUFDKSAmJiBXS19BUElfRU5BQkxFRAor
CisjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBEcmFnZ2luZ1Np
bXVsYXRvciB7CisgICAgUmV0YWluUHRyPFRlc3RXS1dlYlZpZXc+IF93ZWJWaWV3OworfQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihUZXN0V0tXZWJWaWV3ICopd2ViVmlldwor
eworICAgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgICAgIF93ZWJWaWV3ID0gd2Vi
VmlldzsKKyAgICAgICAgW193ZWJWaWV3IHNldFVJRGVsZWdhdGU6c2VsZl07CisgICAgICAgIFtf
d2ViVmlldyBfc2V0SW5wdXREZWxlZ2F0ZTpzZWxmXTsKKyAgICB9CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIGlmIChbX3dlYlZpZXcgVUlEZWxlZ2F0ZV0g
PT0gc2VsZikKKyAgICAgICAgW193ZWJWaWV3IHNldFVJRGVsZWdhdGU6bmlsXTsKKworICAgIGlm
IChbX3dlYlZpZXcgX2lucHV0RGVsZWdhdGVdID09IHNlbGYpCisgICAgICAgIFtfd2ViVmlldyBf
c2V0SW5wdXREZWxlZ2F0ZTpuaWxdOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2
b2lkKXJ1bkZyb206KENHUG9pbnQpc3RhcnRMb2NhdGlvbiB0bzooQ0dQb2ludCllbmRMb2NhdGlv
bgoreworICAgIC8vIEZJWE1FOiBBZGQgYSBtZWNoYW5pc20gdG8gc2ltdWxhdGUgZHJhZ2dpbmcg
b24gbWFjT1MuCisgICAgVU5VU0VEX1BBUkFNKHN0YXJ0TG9jYXRpb24pOworICAgIFVOVVNFRF9Q
QVJBTShlbmRMb2NhdGlvbik7Cit9CisKKy0gKE5TQXJyYXk8X1dLQXR0YWNobWVudCAqPiAqKWlu
c2VydGVkQXR0YWNobWVudHMKK3sKKyAgICByZXR1cm4gQFsgXTsKK30KKworLSAoTlNBcnJheTxf
V0tBdHRhY2htZW50ICo+ICopcmVtb3ZlZEF0dGFjaG1lbnRzCit7CisgICAgcmV0dXJuIEBbIF07
Cit9CisKKy0gKERyYWdBbmREcm9wUGhhc2UpcGhhc2UKK3sKKyAgICByZXR1cm4gRHJhZ0FuZERy
b3BQaGFzZUNhbmNlbGxlZDsKK30KKworQGVuZAorCisjZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQ
UE9SVCkgJiYgUExBVEZPUk0oTUFDKSAmJiBXS19BUElfRU5BQkxFRAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346838</attachid>
            <date>2018-08-09 09:45:34 -0700</date>
            <delta_ts>2018-08-09 10:19:46 -0700</delta_ts>
            <desc>Rename to DragAndDropSimulator</desc>
            <filename>bug-188439-20180809094533.patch</filename>
            <type>text/plain</type>
            <size>307550</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0NjkxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWJlYWUyYTMxYmQzN2YyY2ZkZGY1MThlYjg2ODRiYWUx
YjMwNjEyOC4uZDhlYmVkMjBiZTE4YzJmNmIwYmVkZDNiODVkNWY1YTVhZDcxNWJkZiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEx
NiBAQAorMjAxOC0wOC0wOSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
KworICAgICAgICBbaU9TIFdLMl0gUmVuYW1lIGFuZCByZWZhY3RvciBEYXRhSW50ZXJhY3Rpb25U
ZXN0cyBhbmQgRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg0MzkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBEYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgKGN1cnJlbnRseSB1c2VkIGZvciBkcmFnIGFuZCBkcm9wIHRlc3Rpbmcgb24gaU9TKSBzbyB0
aGF0IGl0IGV4aXN0cyBhY3Jvc3MKKyAgICAgICAgbWFjT1MgYW5kIGlPUywgYW5kIHJlbmFtZSBp
dCB0byBEcmFnQW5kRHJvcFNpbXVsYXRvci4gQWRkaXRpb25hbGx5LCByZW5hbWUgRGF0YUludGVy
YWN0aW9uVGVzdHMgdG8KKyAgICAgICAgRHJhZ0FuZERyb3BUZXN0cy4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMu
bW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL2lvcy9EcmFnQW5kRHJvcFRlc3RzSU9TLm1tOiBSZW5hbWVkIGZyb20gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRGF0YUludGVyYWN0aW9uVGVzdHMubW0uCisgICAgICAg
ICh0ZXN0SWNvbkltYWdlKToKKyAgICAgICAgKHRlc3RaSVBBcmNoaXZlKToKKyAgICAgICAgKC1b
VUlJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmll
cjp3aXRoRGF0YTpdKToKKyAgICAgICAgKC1bVGVzdFdLV2ViVmlldyBlZGl0b3JDb250YWluc0lt
YWdlRWxlbWVudF0pOgorICAgICAgICAoLVtUZXN0V0tXZWJWaWV3IGVkaXRvclZhbHVlXSk6Cisg
ICAgICAgIChtYWtlQ0dSZWN0VmFsdWUpOgorICAgICAgICAoY2hlY2tDR1JlY3RJc0VxdWFsVG9D
R1JlY3RXaXRoTG9nZ2luZyk6CisgICAgICAgIChjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dp
bmcpOgorICAgICAgICAoY2hlY2tSaWNoVGV4dFR5cGVQcmVjZWRlc1BsYWluVGV4dFR5cGUpOgor
ICAgICAgICAoY2hlY2tGaXJzdFR5cGVJc1ByZXNlbnRBbmRTZWNvbmRUeXBlSXNNaXNzaW5nKToK
KyAgICAgICAgKGNoZWNrVHlwZUlkZW50aWZpZXJJc1JlZ2lzdGVyZWRBdEluZGV4KToKKyAgICAg
ICAgKGNoZWNrRXN0aW1hdGVkU2l6ZSk6CisgICAgICAgIChjaGVja1N1Z2dlc3RlZE5hbWVBbmRF
c3RpbWF0ZWRTaXplKToKKyAgICAgICAgKGNoZWNrU3RyaW5nQXJyYXlzQXJlRXF1YWwpOgorICAg
ICAgICAoY2hlY2tEcmFnQ2FyZXRSZWN0SXNDb250YWluZWRJblJlY3QpOgorICAgICAgICAoY2hl
Y2tKU09OV2l0aExvZ2dpbmcpOgorICAgICAgICAodGVzdEljb25JbWFnZURhdGEpOgorICAgICAg
ICAocnVuVGVzdFdpdGhUZW1wb3JhcnlUZXh0RmlsZSk6CisgICAgICAgIChydW5UZXN0V2l0aFRl
bXBvcmFyeUZvbGRlcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OnNldFVwVGVzdFdlYlZpZXdGb3JEYXRhVHJhbnNmZXJJdGVtcyk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6dGVzdEljb25JbWFnZURhdGEpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvY29jb2EvRHJhZ0FuZERyb3BTaW11bGF0b3IuaDogUmVuYW1lZCBmcm9t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5oLgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvaW9zL0RyYWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tOiBSZW5h
bWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
Lm1tLgorICAgICAgICAoLVtXS1dlYlZpZXcgZHJvcEludGVyYWN0aW9uRGVsZWdhdGVdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlXSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBkcm9wSW50ZXJhY3Rpb25dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRyYWdJ
bnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtNb2NrRHJhZ0Ryb3BTZXNzaW9uIGluaXRXaXRoSXRl
bXM6bG9jYXRpb246d2luZG93OmFsbG93TW92ZTpdKToKKyAgICAgICAgKC1bTW9ja0RyYWdEcm9w
U2Vzc2lvbiBhbGxvd3NNb3ZlT3BlcmF0aW9uXSk6CisgICAgICAgICgtW01vY2tEcmFnRHJvcFNl
c3Npb24gaXNSZXN0cmljdGVkVG9EcmFnZ2luZ0FwcGxpY2F0aW9uXSk6CisgICAgICAgICgtW01v
Y2tEcmFnRHJvcFNlc3Npb24gaGFzSXRlbXNDb25mb3JtaW5nVG9UeXBlSWRlbnRpZmllcnM6XSk6
CisgICAgICAgICgtW01vY2tEcmFnRHJvcFNlc3Npb24gY2FuTG9hZE9iamVjdHNPZkNsYXNzOl0p
OgorICAgICAgICAoLVtNb2NrRHJhZ0Ryb3BTZXNzaW9uIGNhbkxvYWRPYmplY3RzT2ZDbGFzc2Vz
Ol0pOgorICAgICAgICAoLVtNb2NrRHJhZ0Ryb3BTZXNzaW9uIGl0ZW1zXSk6CisgICAgICAgICgt
W01vY2tEcmFnRHJvcFNlc3Npb24gc2V0SXRlbXM6XSk6CisgICAgICAgICgtW01vY2tEcmFnRHJv
cFNlc3Npb24gYWRkSXRlbXM6XSk6CisgICAgICAgICgtW01vY2tEcmFnRHJvcFNlc3Npb24gbG9j
YXRpb25JblZpZXc6XSk6CisgICAgICAgICgtW01vY2tEcm9wU2Vzc2lvbiBpbml0V2l0aFByb3Zp
ZGVyczpsb2NhdGlvbjp3aW5kb3c6YWxsb3dNb3ZlOl0pOgorICAgICAgICAoLVtNb2NrRHJvcFNl
c3Npb24gaXNMb2NhbF0pOgorICAgICAgICAoLVtNb2NrRHJvcFNlc3Npb24gcHJvZ3Jlc3NdKToK
KyAgICAgICAgKC1bTW9ja0Ryb3BTZXNzaW9uIHNldFByb2dyZXNzSW5kaWNhdG9yU3R5bGU6XSk6
CisgICAgICAgICgtW01vY2tEcm9wU2Vzc2lvbiBwcm9ncmVzc0luZGljYXRvclN0eWxlXSk6Cisg
ICAgICAgICgtW01vY2tEcm9wU2Vzc2lvbiBvcGVyYXRpb25NYXNrXSk6CisgICAgICAgICgtW01v
Y2tEcm9wU2Vzc2lvbiBsb2NhbERyYWdTZXNzaW9uXSk6CisgICAgICAgICgtW01vY2tEcm9wU2Vz
c2lvbiBoYXNJdGVtc0NvbmZvcm1pbmdUb1R5cGVJZGVudGlmaWVyOl0pOgorICAgICAgICAoLVtN
b2NrRHJvcFNlc3Npb24gY2FuQ3JlYXRlSXRlbXNPZkNsYXNzOl0pOgorICAgICAgICAoLVtNb2Nr
RHJvcFNlc3Npb24gbG9hZE9iamVjdHNPZkNsYXNzOmNvbXBsZXRpb246XSk6CisgICAgICAgICgt
W01vY2tEcmFnU2Vzc2lvbiBpbml0V2l0aFdpbmRvdzphbGxvd01vdmU6XSk6CisgICAgICAgICgt
W01vY2tEcmFnU2Vzc2lvbiBsb2NhbE9wZXJhdGlvbk1hc2tdKToKKyAgICAgICAgKC1bTW9ja0Ry
YWdTZXNzaW9uIGV4dGVybmFsT3BlcmF0aW9uTWFza10pOgorICAgICAgICAoLVtNb2NrRHJhZ1Nl
c3Npb24gc2Vzc2lvbl0pOgorICAgICAgICAoLVtNb2NrRHJhZ1Nlc3Npb24gbG9jYWxDb250ZXh0
XSk6CisgICAgICAgICgtW01vY2tEcmFnU2Vzc2lvbiBzZXRMb2NhbENvbnRleHQ6XSk6CisgICAg
ICAgIChkcmFnQW5kRHJvcEV2ZW50TmFtZXMpOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNpbXVs
YXRvckFwcGxpY2F0aW9uIF9jYW5jZWxBbGxUb3VjaGVzXSk6CisgICAgICAgICgtW0RyYWdBbmRE
cm9wU2ltdWxhdG9yIGluaXRXaXRoV2ViVmlldzpdKToKKyAgICAgICAgKC1bRHJhZ0FuZERyb3BT
aW11bGF0b3IgZGVhbGxvY10pOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRvciBfcmVz
ZXRTaW11bGF0ZWRTdGF0ZV0pOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRvciBvYnNl
cnZlZEV2ZW50TmFtZXNdKToKKyAgICAgICAgKC1bRHJhZ0FuZERyb3BTaW11bGF0b3Igc2ltdWxh
dGVBbGxUb3VjaGVzQ2FuY2VsZWQ6XSk6CisgICAgICAgICgtW0RyYWdBbmREcm9wU2ltdWxhdG9y
IHJ1bkZyb206dG86XSk6CisgICAgICAgICgtW0RyYWdBbmREcm9wU2ltdWxhdG9yIHJ1bkZyb206
dG86YWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zOl0pOgorICAgICAgICAoLVtEcmFnQW5k
RHJvcFNpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk6CisgICAgICAgICgtW0RyYWdBbmRE
cm9wU2ltdWxhdG9yIF9jb25jbHVkZURyb3BBbmRQZXJmb3JtT3BlcmF0aW9uSWZOZWNlc3Nhcnld
KToKKyAgICAgICAgKC1bRHJhZ0FuZERyb3BTaW11bGF0b3IgX2VucXVldWVQZW5kaW5nQWRkaXRp
b25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zXSk6CisgICAgICAgICgtW0RyYWdBbmREcm9wU2ltdWxh
dG9yIF9zZW5kUXVldWVkQWRkaXRpb25hbEl0ZW1SZXF1ZXN0XSk6CisgICAgICAgICgtW0RyYWdB
bmREcm9wU2ltdWxhdG9yIF9hZHZhbmNlUHJvZ3Jlc3NdKToKKyAgICAgICAgKC1bRHJhZ0FuZERy
b3BTaW11bGF0b3IgX2N1cnJlbnRMb2NhdGlvbl0pOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNp
bXVsYXRvciBfc2NoZWR1bGVBZHZhbmNlUHJvZ3Jlc3NdKToKKyAgICAgICAgKC1bRHJhZ0FuZERy
b3BTaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10pOgorICAgICAgICAoLVtEcmFnQW5kRHJv
cFNpbXVsYXRvciBleHRlcm5hbEl0ZW1Qcm92aWRlcnNdKToKKyAgICAgICAgKC1bRHJhZ0FuZERy
b3BTaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOl0pOgorICAgICAgICAoLVtEcmFn
QW5kRHJvcFNpbXVsYXRvciBwaGFzZV0pOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRv
ciBsaWZ0UHJldmlld3NdKToKKyAgICAgICAgKC1bRHJhZ0FuZERyb3BTaW11bGF0b3IgbGFzdEtu
b3duRHJhZ0NhcmV0UmVjdF0pOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRvciB3YWl0
Rm9ySW5wdXRTZXNzaW9uXSk6CisgICAgICAgICgtW0RyYWdBbmREcm9wU2ltdWxhdG9yIGluc2Vy
dGVkQXR0YWNobWVudHNdKToKKyAgICAgICAgKC1bRHJhZ0FuZERyb3BTaW11bGF0b3IgcmVtb3Zl
ZEF0dGFjaG1lbnRzXSk6CisgICAgICAgICgtW0RyYWdBbmREcm9wU2ltdWxhdG9yIGVuZERhdGFU
cmFuc2Zlcl0pOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRvciBfd2ViVmlldzpkYXRh
SW50ZXJhY3Rpb25PcGVyYXRpb25XYXNIYW5kbGVkOmZvclNlc3Npb246aXRlbVByb3ZpZGVyczpd
KToKKyAgICAgICAgKC1bRHJhZ0FuZERyb3BTaW11bGF0b3IgX3dlYlZpZXc6d2lsbFVwZGF0ZURh
dGFJbnRlcmFjdGlvbk9wZXJhdGlvblRvT3BlcmF0aW9uOmZvclNlc3Npb246XSk6CisgICAgICAg
ICgtW0RyYWdBbmREcm9wU2ltdWxhdG9yIF93ZWJWaWV3OmFkanVzdGVkRGF0YUludGVyYWN0aW9u
SXRlbVByb3ZpZGVyc0Zvckl0ZW1Qcm92aWRlcjpyZXByZXNlbnRpbmdPYmplY3RzOmFkZGl0aW9u
YWxEYXRhOl0pOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRvciBfd2ViVmlldzpzaG93
Q3VzdG9tU2hlZXRGb3JFbGVtZW50Ol0pOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRv
ciBfd2ViVmlldzp3aWxsUGVyZm9ybURyb3BXaXRoU2Vzc2lvbjpdKToKKyAgICAgICAgKC1bRHJh
Z0FuZERyb3BTaW11bGF0b3IgX3dlYlZpZXc6ZGlkSW5zZXJ0QXR0YWNobWVudDpdKToKKyAgICAg
ICAgKC1bRHJhZ0FuZERyb3BTaW11bGF0b3IgX3dlYlZpZXc6ZGlkUmVtb3ZlQXR0YWNobWVudDpd
KToKKyAgICAgICAgKC1bRHJhZ0FuZERyb3BTaW11bGF0b3IgX3dlYlZpZXc6Zm9jdXNTaG91bGRT
dGFydElucHV0U2Vzc2lvbjpdKToKKyAgICAgICAgKC1bRHJhZ0FuZERyb3BTaW11bGF0b3IgX3dl
YlZpZXc6ZGlkU3RhcnRJbnB1dFNlc3Npb246XSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9p
b3MvVUlLaXRTUEkuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL21hYy9EcmFnQW5kRHJvcFNp
bXVsYXRvck1hYy5tbTogQWRkZWQuCisgICAgICAgICgtW0RyYWdBbmREcm9wU2ltdWxhdG9yIGlu
aXRXaXRoV2ViVmlldzpdKToKKyAgICAgICAgKC1bRHJhZ0FuZERyb3BTaW11bGF0b3IgZGVhbGxv
Y10pOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRvciBydW5Gcm9tOnRvOl0pOgorICAg
ICAgICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRvciBpbnNlcnRlZEF0dGFjaG1lbnRzXSk6CisgICAg
ICAgICgtW0RyYWdBbmREcm9wU2ltdWxhdG9yIHJlbW92ZWRBdHRhY2htZW50c10pOgorCiAyMDE4
LTA4LTA4ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAg
IFtpT1NdIGZhc3QvZXZlbnRzL2lvcy9jb250ZW50ZWRpdGFibGUtYXV0b2NhcGl0YWxpemUuaHRt
bCBpcyBhIGZsYWt5IGZhaWx1cmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggM2UwMzZjMzNm
ZDQ2MTc5ZjQwMDM5MDEyYmQwOGQ0NWZjZjYwOWIxMy4uNDMyYWIzOGQ0ZjEyZGM4ZTU1NDBjOGVh
NmIwODFhOWQ0YTcxMzM1NCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTgwOCw2ICs4MDgs
NyBAQAogCQlGNDVCNjNGRTFGMTlENDEwMDA5RDM4QjkgLyogQWN0aW9uU2hlZXRUZXN0cy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NUI2M0ZDMUYx
OUQ0MTAwMDlEMzhCOSAvKiBBY3Rpb25TaGVldFRlc3RzLm1tICovOyB9OwogCQlGNDVFMTU3MzIx
MTJDRTI5MDAzMDdFODIgLyogS2V5Ym9hcmRJbnB1dFRlc3RzSU9TLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ1RTE1NzIyMTEyQ0UyOTAwMzA3RTgy
IC8qIEtleWJvYXJkSW5wdXRUZXN0c0lPUy5tbSAqLzsgfTsKIAkJRjQ1RTE1NzYyMTEyQ0U2MjAw
MzA3RTgyIC8qIFRlc3RJbnB1dERlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ1RTE1NzUyMTEyQ0U2MjAwMzA3RTgyIC8qIFRlc3RJbnB1
dERlbGVnYXRlLm1tICovOyB9OworCQlGNDYxMjhCNzIxMUM4RUQ1MDBEOUZBREIgLyogRHJhZ0Fu
ZERyb3BTaW11bGF0b3JNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNDYxMjhCNjIxMUM4RUQ1MDBEOUZBREIgLyogRHJhZ0FuZERyb3BTaW11bGF0
b3JNYWMubW0gKi87IH07CiAJCUY0NjRBRjkyMjBCQjY2RUEwMDdGOUIxOCAvKiBSZW5kZXJpbmdQ
cm9ncmVzc1Rlc3RzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjQ2NEFGOTEyMEJCNjZFQTAwN0Y5QjE4IC8qIFJlbmRlcmluZ1Byb2dyZXNzVGVzdHMu
bW0gKi87IH07CiAJCUY0Njg0OUJFMUVFRjU4RTQwMEI5MzdGRSAvKiBVSVBhc3RlYm9hcmRUZXN0
cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0Njg0
OUJEMUVFRjU4RTQwMEI5MzdGRSAvKiBVSVBhc3RlYm9hcmRUZXN0cy5tbSAqLzsgfTsKIAkJRjQ2
ODQ5QzAxRUVGNUVGMzAwQjkzN0ZFIC8qIHJpY2gtYW5kLXBsYWluLXRleHQuaHRtbCBpbiBDb3B5
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDY4NDlCRjFF
RUY1RURDMDBCOTM3RkUgLyogcmljaC1hbmQtcGxhaW4tdGV4dC5odG1sICovOyB9OwpAQCAtODI5
LDggKzgzMCw4IEBACiAJCUY0Q0Q3NEM2MjBGREFDRkEwMERFMzc5NCAvKiB0ZXh0LXdpdGgtYXN5
bmMtc2NyaXB0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjRDRDc0QzUyMEZEQUNGNTAwREUzNzk0IC8qIHRleHQtd2l0aC1hc3luYy1z
Y3JpcHQuaHRtbCAqLzsgfTsKIAkJRjRDRDc0QzkyMEZEQjQ5NjAwREUzNzk0IC8qIFRlc3RVUkxT
Y2hlbWVIYW5kbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjRDRDc0QzgyMEZEQjQ5NjAwREUzNzk0IC8qIFRlc3RVUkxTY2hlbWVIYW5kbGVyLm1t
ICovOyB9OwogCQlGNEQyOTg2RTIwRkVFNzM3MDA5MkQ2MzYgLyogUnVuU2NyaXB0QWZ0ZXJEb2N1
bWVudExvYWQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNEQyOTg2RDIwRkVFNzM3MDA5MkQ2MzYgLyogUnVuU2NyaXB0QWZ0ZXJEb2N1bWVudExvYWQu
bW0gKi87IH07Ci0JCUY0RDRGM0I2MUU0RTJCQ0IwMEJCMjc2NyAvKiBEYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNEQ0RjNCNDFFNEUyQkNCMDBCQjI3NjcgLyogRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLm1t
ICovOyB9OwotCQlGNEQ0RjNCOTFFNEUzNkU0MDBCQjI3NjcgLyogRGF0YUludGVyYWN0aW9uVGVz
dHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEQ0
RjNCNzFFNEUzNkU0MDBCQjI3NjcgLyogRGF0YUludGVyYWN0aW9uVGVzdHMubW0gKi87IH07CisJ
CUY0RDRGM0I2MUU0RTJCQ0IwMEJCMjc2NyAvKiBEcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RDRGM0I0MUU0
RTJCQ0IwMEJCMjc2NyAvKiBEcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbSAqLzsgfTsKKwkJRjRE
NEYzQjkxRTRFMzZFNDAwQkIyNzY3IC8qIERyYWdBbmREcm9wVGVzdHNJT1MubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEQ0RjNCNzFFNEUzNkU0MDBC
QjI3NjcgLyogRHJhZ0FuZERyb3BUZXN0c0lPUy5tbSAqLzsgfTsKIAkJRjRENUU0RTgxRjBDNUQz
ODAwOEMxQTQ5IC8qIGRyYWdzdGFydC1jbGVhci1zZWxlY3Rpb24uaHRtbCBpbiBDb3B5IFJlc291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEQ1RTRFNzFGMEM1RDI3
MDA4QzFBNDkgLyogZHJhZ3N0YXJ0LWNsZWFyLXNlbGVjdGlvbi5odG1sICovOyB9OwogCQlGNEQ2
NURBODFGNUU0NzA0MDA5RDhDMjcgLyogc2VsZWN0ZWQtdGV4dC1pbWFnZS1saW5rLWFuZC1lZGl0
YWJsZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY0RDY1REE3MUY1RTQ2QzAwMDlEOEMyNyAvKiBzZWxlY3RlZC10ZXh0LWltYWdlLWxp
bmstYW5kLWVkaXRhYmxlLmh0bWwgKi87IH07CiAJCUY0REVGNkVEMUU5QjREQjYwMDQ4RUY2MSAv
KiBpbWFnZS1pbi1saW5rLWFuZC1pbnB1dC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0REVGNkVDMUU5QjREOTUwMDQ4RUY2MSAvKiBp
bWFnZS1pbi1saW5rLWFuZC1pbnB1dC5odG1sICovOyB9OwpAQCAtMjAzMiw2ICsyMDMzLDggQEAK
IAkJRjQ1RTE1NzIyMTEyQ0UyOTAwMzA3RTgyIC8qIEtleWJvYXJkSW5wdXRUZXN0c0lPUy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEtleWJvYXJkSW5wdXRUZXN0c0lPUy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ1RTE1NzQyMTEyQ0U2MjAwMzA3RTgyIC8qIFRlc3RJbnB1
dERlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlc3RJbnB1dERlbGVnYXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NUUxNTc1MjExMkNFNjIwMDMwN0U4MiAvKiBUZXN0SW5w
dXREZWxlZ2F0ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRlc3RJbnB1dERlbGVnYXRlLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNDYxMjhCNDIxMUM4NjFBMDBEOUZBREIg
LyogRHJhZ0FuZERyb3BTaW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRHJhZ0FuZERyb3BTaW11bGF0b3IuaDsgcGF0aCA9IGNvY29hL0RyYWdBbmREcm9wU2ltdWxh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0NjEyOEI2MjExQzhFRDUwMEQ5
RkFEQiAvKiBEcmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IERyYWdBbmREcm9wU2ltdWxhdG9yTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGNDY0QUY5MTIwQkI2NkVBMDA3RjlCMTggLyogUmVuZGVyaW5nUHJvZ3Jlc3NUZXN0cy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbmRlcmluZ1Byb2dyZXNzVGVzdHMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0Njg0OUJEMUVFRjU4RTQwMEI5MzdGRSAvKiBVSVBhc3Rl
Ym9hcmRUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFVJUGFzdGVib2FyZFRlc3RzLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDY4NDlCRjFFRUY1RURDMDBCOTM3RkUg
LyogcmljaC1hbmQtcGxhaW4tdGV4dC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gInJpY2gtYW5kLXBsYWluLXRl
eHQuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDU1LDkgKzIwNTgsOCBA
QAogCQlGNENENzRDNzIwRkRCNDk2MDBERTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGVzdFVSTFNjaGVtZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRjRDRDc0QzgyMEZEQjQ5NjAwREUzNzk0IC8qIFRlc3RVUkxTY2hlbWVIYW5k
bGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGVzdFVSTFNjaGVtZUhhbmRsZXIubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0RDI5ODZEMjBGRUU3MzcwMDkyRDYzNiAvKiBS
dW5TY3JpcHRBZnRlckRvY3VtZW50TG9hZC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJ1blNj
cmlwdEFmdGVyRG9jdW1lbnRMb2FkLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
NEQ0RjNCNDFFNEUyQkNCMDBCQjI3NjcgLyogRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGNEQ0RjNCNTFFNEUyQkNC
MDBCQjI3NjcgLyogRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlGNEQ0RjNCNzFFNEUzNkU0MDBCQjI3NjcgLyogRGF0YUludGVyYWN0
aW9uVGVzdHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEYXRh
SW50ZXJhY3Rpb25UZXN0cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRENEYz
QjQxRTRFMkJDQjAwQkIyNzY3IC8qIERyYWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRHJhZ0FuZERyb3BTaW11bGF0b3JJT1Mu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0RDRGM0I3MUU0RTM2RTQwMEJCMjc2
NyAvKiBEcmFnQW5kRHJvcFRlc3RzSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gRHJhZ0FuZERyb3BUZXN0c0lPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRjRENUU0RTcxRjBDNUQyNzAwOEMxQTQ5IC8qIGRyYWdzdGFydC1jbGVhci1zZWxl
Y3Rpb24uaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJkcmFnc3RhcnQtY2xlYXItc2VsZWN0aW9uLmh0bWwiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEQ2NURBNzFGNUU0NkMwMDA5RDhDMjcgLyog
c2VsZWN0ZWQtdGV4dC1pbWFnZS1saW5rLWFuZC1lZGl0YWJsZS5odG1sICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5odG1sOyBwYXRoID0gInNlbGVjdGVkLXRleHQtaW1hZ2UtbGluay1hbmQtZWRpdGFibGUuaHRt
bCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0REVGNkVDMUU5QjREOTUwMDQ4RUY2
MSAvKiBpbWFnZS1pbi1saW5rLWFuZC1pbnB1dC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBw
YXRoID0gImltYWdlLWluLWxpbmstYW5kLWlucHV0Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjE5NSw2ICsyMTk3LDcgQEAKIAkJCQlBMTNFQkI0NDFCODczMzJCMDAwOTcx
MTAgLyogV2ViUHJvY2Vzc1BsdWdJbiAqLywKIAkJCQlGNDUxN0I2ODIwNTRFMEFDMDBDMjY3MjEg
LyogQ2xhc3NNZXRob2RTd2l6emxlci5oICovLAogCQkJCUY0NTE3QjY5MjA1NEUwQUMwMEMyNjcy
MSAvKiBDbGFzc01ldGhvZFN3aXp6bGVyLm1tICovLAorCQkJCUY0NjEyOEI0MjExQzg2MUEwMEQ5
RkFEQiAvKiBEcmFnQW5kRHJvcFNpbXVsYXRvci5oICovLAogCQkJCUY0NEQwNjQ4MUYzOTYyRTMw
MDFBMEUyOSAvKiBFZGl0aW5nVGVzdEhhcm5lc3MuaCAqLywKIAkJCQlGNDREMDY0OTFGMzk2MkUz
MDAxQTBFMjkgLyogRWRpdGluZ1Rlc3RIYXJuZXNzLm1tICovLAogCQkJCTVDNzI2RDZEMUQzRUUw
NjgwMEM1RTFBMSAvKiBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyLmggKi8sCkBAIC0yNDEwLDggKzI0
MTMsNyBAQAogCQkyRTk2NjBEQzE2QzA3RDdCMDAzNzFCNDIgLyogaW9zICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlGNEQ0RjNCNTFFNEUyQkNCMDBCQjI3
NjcgLyogRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmggKi8sCi0JCQkJRjRENEYzQjQxRTRFMkJD
QjAwQkIyNzY3IC8qIERhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5tbSAqLywKKwkJCQlGNEQ0RjNC
NDFFNEUyQkNCMDBCQjI3NjcgLyogRHJhZ0FuZERyb3BTaW11bGF0b3JJT1MubW0gKi8sCiAJCQkJ
MkU3NzY1Q0MxNkM0RDgwQTAwQkEyQkIxIC8qIG1haW5JT1MubW0gKi8sCiAJCQkJRjQ1MTdCNjUy
MDU0QzQ5NTAwQzI2NzIxIC8qIFRlc3RXS1dlYlZpZXdDb250cm9sbGVyLmggKi8sCiAJCQkJRjQ1
MTdCNjYyMDU0QzQ5NTAwQzI2NzIxIC8qIFRlc3RXS1dlYlZpZXdDb250cm9sbGVyLm1tICovLApA
QCAtMjQ5Niw3ICsyNDk4LDcgQEAKIAkJCQlBMUM0RkI2RjFCQUNDRUZBMDAzNzQyRDAgLyogUmVz
b3VyY2VzICovLAogCQkJCTJFMjA1QkEzMUY1Mjc3NDYwMDU5NTJERCAvKiBBY2Nlc3NpYmlsaXR5
VGVzdHNJT1MubW0gKi8sCiAJCQkJRjQ1QjYzRkMxRjE5RDQxMDAwOUQzOEI5IC8qIEFjdGlvblNo
ZWV0VGVzdHMubW0gKi8sCi0JCQkJRjRENEYzQjcxRTRFMzZFNDAwQkIyNzY3IC8qIERhdGFJbnRl
cmFjdGlvblRlc3RzLm1tICovLAorCQkJCUY0RDRGM0I3MUU0RTM2RTQwMEJCMjc2NyAvKiBEcmFn
QW5kRHJvcFRlc3RzSU9TLm1tICovLAogCQkJCUY0NUUxNTcyMjExMkNFMjkwMDMwN0U4MiAvKiBL
ZXlib2FyZElucHV0VGVzdHNJT1MubW0gKi8sCiAJCQkJNTc0RjU1Q0UyMDREMzc2MzAwMjk0OEM2
IC8qIExvY2FsQXV0aGVudGljYXRvci5tbSAqLywKIAkJCQk3NTYwOTE3NzE5MjU5QzU5MDA5RUYw
NkUgLyogTWVtb3J5Q2FjaGVBZGRJbWFnZVRvQ2FjaGVJT1MubW0gKi8sCkBAIC0zMDk2LDYgKzMw
OTgsNyBAQAogCQlCQ0E2MUMzQTExNzAwQjk0MDA0NjBEMUUgLyogbWFjICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlGNDYxMjhCNjIxMUM4RUQ1MDBEOUZB
REIgLyogRHJhZ0FuZERyb3BTaW11bGF0b3JNYWMubW0gKi8sCiAJCQkJMUFFREUyMjQxM0U1RTdB
MDAwRTYyRkU4IC8qIEluamVjdGVkQnVuZGxlQ29udHJvbGxlck1hYy5tbSAqLywKIAkJCQlDMDgx
MjI0MDEzRkMxNzI0MDBEQzM5QUUgLyogSmF2YVNjcmlwdFRlc3RNYWMubW0gKi8sCiAJCQkJMkU3
NzY1Q0UxNkM0RDgxMTAwQkEyQkIxIC8qIG1haW5NYWMubW0gKi8sCkBAIC0zNjcwLDggKzM2NzMs
NiBAQAogCQkJCTQ2QTkxMTU5MjEwOEU2NzgwMDc4RDQwRCAvKiBDdXN0b21Vc2VyQWdlbnQubW0g
aW4gU291cmNlcyAqLywKIAkJCQk3NTFCMDVENjFGOEVBQzQxMDAyOEEwOUUgLyogRGF0YWJhc2VU
cmFja2VyVGVzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEQzRDRjc3MUQyRDlERDgwMEVDQ0M5
NCAvKiBEYXRhRGV0ZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJRjRENEYzQjYxRTRFMkJD
QjAwQkIyNzY3IC8qIERhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5tbSBpbiBTb3VyY2VzICovLAot
CQkJCUY0RDRGM0I5MUU0RTM2RTQwMEJCMjc2NyAvKiBEYXRhSW50ZXJhY3Rpb25UZXN0cy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTUxOEVFNTFEMjBBNzhEMzYwMEUwMjRGMyAvKiBEZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQxNjQ2RTIxRDE4
NjJDRDAwMDE1QTFBIC8qIERlZmVycmVkVmlld0luV2luZG93U3RhdGVDaGFuZ2UubW0gaW4gU291
cmNlcyAqLywKIAkJCQk3Q0NFN0VCOTFBNDExQTdFMDA0NDdDNEMgLyogRGV2aWNlU2NhbGVGYWN0
b3JJbkRhc2hib2FyZFJlZ2lvbnMubW0gaW4gU291cmNlcyAqLywKQEAgLTM2OTQsNiArMzY5NSw5
IEBACiAJCQkJN0NDRTdGMjMxQTQxMUFGNjAwNDQ3QzRDIC8qIERvd25sb2FkLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0NDRTdFRUUxQTQxMUFFNjAwNDQ3QzRDIC8qIERvd25sb2FkRGVjaWRlRGVz
dGluYXRpb25DcmFzaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNEJGQTY4RTFFNEFEMDgwMDAx
NTQyOTggLyogRHJhZ0FuZERyb3BQYXN0ZWJvYXJkVGVzdHMubW0gaW4gU291cmNlcyAqLywKKwkJ
CQlGNEQ0RjNCNjFFNEUyQkNCMDBCQjI3NjcgLyogRHJhZ0FuZERyb3BTaW11bGF0b3JJT1MubW0g
aW4gU291cmNlcyAqLywKKwkJCQlGNDYxMjhCNzIxMUM4RUQ1MDBEOUZBREIgLyogRHJhZ0FuZERy
b3BTaW11bGF0b3JNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQlGNEQ0RjNCOTFFNEUzNkU0MDBC
QjI3NjcgLyogRHJhZ0FuZERyb3BUZXN0c0lPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExNTUw
MjJBMUUwNTAyMEIwMEEyNEM1NyAvKiBEdXBsaWNhdGVDb21wbGV0aW9uSGFuZGxlckNhbGxzLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQkUxQTQxMUE3RTAwNDQ3QzRDIC8qIER5bmFtaWNE
ZXZpY2VTY2FsZUZhY3Rvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDMEJGODkyMURENTk5QjYw
MEIwMDMyOCAvKiBFYXJseUtWT0NyYXNoLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0
cy5tbQppbmRleCA0Njg5ZGE0M2IzYjdiMTkxYWIwODFkZjFlY2JhYjQyODFkYzAzOGJmLi5kOGY1
NmJkMzcyNzliNjNjZjRiODUzMmZmZTg0MjNjYWI3YWJmYjJjIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMu
bW0KQEAgLTI1LDcgKzI1LDcgQEAKIAogI2ltcG9ydCAiY29uZmlnLmgiCiAKLSNpbXBvcnQgIkRh
dGFJbnRlcmFjdGlvblNpbXVsYXRvci5oIgorI2ltcG9ydCAiRHJhZ0FuZERyb3BTaW11bGF0b3Iu
aCIKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3
LmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLmgiCkBAIC0xMTk0LDE1
ICsxMTk0LDE1IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHNNYWMsIEluc2VydFBhc3RlZEZpbGVV
UkxzQXNBdHRhY2htZW50cykKIFRFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIEluc2VydERyb3Bw
ZWRJbWFnZUFzQXR0YWNobWVudCkKIHsKICAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVz
dGluZ0F0dGFjaG1lbnRzKCk7Ci0gICAgYXV0byBkcmFnZ2luZ1NpbXVsYXRvciA9IGFkb3B0TlMo
W1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3
LmdldCgpXSk7CisgICAgYXV0byBkcmFnQW5kRHJvcFNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFn
QW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsK
ICAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbTlNJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsK
ICAgICBbaXRlbSByZWdpc3RlckRhdGE6dGVzdEltYWdlRGF0YSgpIHR5cGU6KE5TU3RyaW5nICop
a1VUVHlwZVBOR107Ci0gICAgW2RyYWdnaW5nU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3Zp
ZGVyczpAWyBpdGVtLmdldCgpIF1dOwotICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBydW5Gcm9tOkNH
UG9pbnRaZXJvIHRvOkNHUG9pbnRNYWtlKDUwLCA1MCldOworICAgIFtkcmFnQW5kRHJvcFNpbXVs
YXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbS5nZXQoKSBdXTsKKyAgICBbZHJh
Z0FuZERyb3BTaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50WmVybyB0bzpDR1BvaW50TWFrZSg1MCwg
NTApXTsKIAotICAgIEVYUEVDVF9FUSgxVSwgW2RyYWdnaW5nU2ltdWxhdG9yIGluc2VydGVkQXR0
YWNobWVudHNdLmNvdW50KTsKLSAgICBFWFBFQ1RfRVEoMFUsIFtkcmFnZ2luZ1NpbXVsYXRvciBy
ZW1vdmVkQXR0YWNobWVudHNdLmNvdW50KTsKLSAgICBhdXRvIGF0dGFjaG1lbnQgPSByZXRhaW5Q
dHIoW2RyYWdnaW5nU2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVudHNdLmZpcnN0T2JqZWN0KTsK
KyAgICBFWFBFQ1RfRVEoMVUsIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBpbnNlcnRlZEF0dGFjaG1l
bnRzXS5jb3VudCk7CisgICAgRVhQRUNUX0VRKDBVLCBbZHJhZ0FuZERyb3BTaW11bGF0b3IgcmVt
b3ZlZEF0dGFjaG1lbnRzXS5jb3VudCk7CisgICAgYXV0byBhdHRhY2htZW50ID0gcmV0YWluUHRy
KFtkcmFnQW5kRHJvcFNpbXVsYXRvciBpbnNlcnRlZEF0dGFjaG1lbnRzXS5maXJzdE9iamVjdCk7
CiAgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6dGVzdEltYWdlRGF0YSgp
XTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoInB1YmxpYy5wbmciLCBbd2ViVmlldyB2YWx1ZU9mQXR0
cmlidXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7CiAKQEAgLTEy
MTcsMTcgKzEyMTcsMTcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0c0lPUywgSW5zZXJ0RHJvcHBl
ZEltYWdlQXNBdHRhY2htZW50KQogVEVTVChXS0F0dGFjaG1lbnRUZXN0c0lPUywgSW5zZXJ0RHJv
cHBlZEF0dHJpYnV0ZWRTdHJpbmdDb250YWluaW5nQXR0YWNobWVudCkKIHsKICAgICBhdXRvIHdl
YlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7Ci0gICAgYXV0byBkcmFnZ2lu
Z1NpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGlu
aXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgYXV0byBkcmFnQW5kRHJvcFNpbXVs
YXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJW
aWV3OndlYlZpZXcuZ2V0KCldKTsKICAgICBhdXRvIGltYWdlID0gYWRvcHROUyhbW05TVGV4dEF0
dGFjaG1lbnQgYWxsb2NdIGluaXRXaXRoRGF0YTp0ZXN0SW1hZ2VEYXRhKCkgb2ZUeXBlOihOU1N0
cmluZyAqKWtVVFR5cGVQTkddKTsKICAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbTlNJdGVtUHJv
dmlkZXIgYWxsb2NdIGluaXRdKTsKICAgICBbaXRlbSByZWdpc3Rlck9iamVjdDpbTlNBdHRyaWJ1
dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNobWVudDppbWFnZS5nZXQoKV0gdmlz
aWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbF07CiAKLSAg
ICBbZHJhZ2dpbmdTaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW0uZ2V0
KCkgXV07Ci0gICAgW2RyYWdnaW5nU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludFplcm8gdG86Q0dQ
b2ludE1ha2UoNTAsIDUwKV07CisgICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHNldEV4dGVybmFs
SXRlbVByb3ZpZGVyczpAWyBpdGVtLmdldCgpIF1dOworICAgIFtkcmFnQW5kRHJvcFNpbXVsYXRv
ciBydW5Gcm9tOkNHUG9pbnRaZXJvIHRvOkNHUG9pbnRNYWtlKDUwLCA1MCldOwogCi0gICAgRVhQ
RUNUX0VRKDFVLCBbZHJhZ2dpbmdTaW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10uY291bnQp
OwotICAgIEVYUEVDVF9FUSgwVSwgW2RyYWdnaW5nU2ltdWxhdG9yIHJlbW92ZWRBdHRhY2htZW50
c10uY291bnQpOwotICAgIGF1dG8gYXR0YWNobWVudCA9IHJldGFpblB0cihbZHJhZ2dpbmdTaW11
bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10uZmlyc3RPYmplY3QpOworICAgIEVYUEVDVF9FUSgx
VSwgW2RyYWdBbmREcm9wU2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVudHNdLmNvdW50KTsKKyAg
ICBFWFBFQ1RfRVEoMFUsIFtkcmFnQW5kRHJvcFNpbXVsYXRvciByZW1vdmVkQXR0YWNobWVudHNd
LmNvdW50KTsKKyAgICBhdXRvIGF0dGFjaG1lbnQgPSByZXRhaW5QdHIoW2RyYWdBbmREcm9wU2lt
dWxhdG9yIGluc2VydGVkQXR0YWNobWVudHNdLmZpcnN0T2JqZWN0KTsKIAogICAgIGF1dG8gc2l6
ZSA9IHBsYXRmb3JtSW1hZ2VXaXRoRGF0YShbYXR0YWNobWVudCBzeW5jaHJvbm91c2x5UmVxdWVz
dERhdGE6bmlsXSkuc2l6ZTsKICAgICBFWFBFQ1RfRVEoMjE1Liwgc2l6ZS53aWR0aCk7CkBAIC0x
MjYwLDE0ICsxMjYwLDE0IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIEluc2VydERyb3Bw
ZWRSaWNoQW5kUGxhaW5UZXh0RmlsZXNBc0F0dGFjaG1lbnRzKQogICAgIFtwbGFpblRleHRJdGVt
IHNldFN1Z2dlc3RlZE5hbWU6QCJ3b3JsZC50eHQiXTsKIAogICAgIGF1dG8gd2ViVmlldyA9IHdl
YlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKLSAgICBhdXRvIGRyYWdnaW5nU2ltdWxhdG9y
ID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJW
aWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZHJhZ2dpbmdTaW11bGF0b3Igc2V0RXh0ZXJuYWxJ
dGVtUHJvdmlkZXJzOkBbIHJpY2hUZXh0SXRlbS5nZXQoKSwgcGxhaW5UZXh0SXRlbS5nZXQoKSBd
XTsKLSAgICBbZHJhZ2dpbmdTaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50WmVybyB0bzpDR1BvaW50
TWFrZSg1MCwgNTApXTsKKyAgICBhdXRvIGRyYWdBbmREcm9wU2ltdWxhdG9yID0gYWRvcHROUyhb
W0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQo
KV0pOworICAgIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6
QFsgcmljaFRleHRJdGVtLmdldCgpLCBwbGFpblRleHRJdGVtLmdldCgpIF1dOworICAgIFtkcmFn
QW5kRHJvcFNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRaZXJvIHRvOkNHUG9pbnRNYWtlKDUwLCA1
MCldOwogCi0gICAgRVhQRUNUX0VRKDJVLCBbZHJhZ2dpbmdTaW11bGF0b3IgaW5zZXJ0ZWRBdHRh
Y2htZW50c10uY291bnQpOwotICAgIEVYUEVDVF9FUSgwVSwgW2RyYWdnaW5nU2ltdWxhdG9yIHJl
bW92ZWRBdHRhY2htZW50c10uY291bnQpOworICAgIEVYUEVDVF9FUSgyVSwgW2RyYWdBbmREcm9w
U2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVudHNdLmNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMFUs
IFtkcmFnQW5kRHJvcFNpbXVsYXRvciByZW1vdmVkQXR0YWNobWVudHNdLmNvdW50KTsKIAotICAg
IGZvciAoX1dLQXR0YWNobWVudCAqYXR0YWNobWVudCBpbiBbZHJhZ2dpbmdTaW11bGF0b3IgaW5z
ZXJ0ZWRBdHRhY2htZW50c10pIHsKKyAgICBmb3IgKF9XS0F0dGFjaG1lbnQgKmF0dGFjaG1lbnQg
aW4gW2RyYWdBbmREcm9wU2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVudHNdKSB7CiAgICAgICAg
IE5TRXJyb3IgKmVycm9yID0gbmlsOwogICAgICAgICBFWFBFQ1RfR1QoW2F0dGFjaG1lbnQgc3lu
Y2hyb25vdXNseVJlcXVlc3REYXRhOiZlcnJvcl0ubGVuZ3RoLCAwVSk7CiAgICAgICAgIEVYUEVD
VF9UUlVFKCFlcnJvcik7CkBAIC0xMjkzLDEzICsxMjkzLDEzIEBAIFRFU1QoV0tBdHRhY2htZW50
VGVzdHNJT1MsIEluc2VydERyb3BwZWRaaXBBcmNoaXZlQXNBdHRhY2htZW50KQogICAgIFtpdGVt
IHNldFN1Z2dlc3RlZE5hbWU6QCJhcmNoaXZlLnppcCJdOwogCiAgICAgYXV0byB3ZWJWaWV3ID0g
d2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOwotICAgIGF1dG8gZHJhZ2dpbmdTaW11bGF0
b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdl
YlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBzZXRFeHRlcm5h
bEl0ZW1Qcm92aWRlcnM6QFsgaXRlbS5nZXQoKSBdXTsKLSAgICBbZHJhZ2dpbmdTaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50WmVybyB0bzpDR1BvaW50TWFrZSg1MCwgNTApXTsKKyAgICBhdXRvIGRy
YWdBbmREcm9wU2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtkcmFnQW5kRHJvcFNpbXVs
YXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbS5nZXQoKSBdXTsKKyAgICBbZHJh
Z0FuZERyb3BTaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50WmVybyB0bzpDR1BvaW50TWFrZSg1MCwg
NTApXTsKIAotICAgIEVYUEVDVF9FUSgxVSwgW2RyYWdnaW5nU2ltdWxhdG9yIGluc2VydGVkQXR0
YWNobWVudHNdLmNvdW50KTsKLSAgICBFWFBFQ1RfRVEoMFUsIFtkcmFnZ2luZ1NpbXVsYXRvciBy
ZW1vdmVkQXR0YWNobWVudHNdLmNvdW50KTsKLSAgICBbW2RyYWdnaW5nU2ltdWxhdG9yIGluc2Vy
dGVkQXR0YWNobWVudHNdLmZpcnN0T2JqZWN0IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOmRhdGFd
OworICAgIEVYUEVDVF9FUSgxVSwgW2RyYWdBbmREcm9wU2ltdWxhdG9yIGluc2VydGVkQXR0YWNo
bWVudHNdLmNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMFUsIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBy
ZW1vdmVkQXR0YWNobWVudHNdLmNvdW50KTsKKyAgICBbW2RyYWdBbmREcm9wU2ltdWxhdG9yIGlu
c2VydGVkQXR0YWNobWVudHNdLmZpcnN0T2JqZWN0IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOmRh
dGFdOwogICAgIEVYUEVDVF9FUSgxLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYXR0YWNobWVudCcpLmxlbmd0aCJdLmlu
dFZhbHVlKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoImFyY2hpdmUuemlwIiwgW3dlYlZpZXcgdmFs
dWVPZkF0dHJpYnV0ZTpAInRpdGxlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsK
ICAgICBFWFBFQ1RfV0tfU1RSRVEoImFwcGxpY2F0aW9uL3ppcCIsIFt3ZWJWaWV3IHZhbHVlT2ZB
dHRyaWJ1dGU6QCJ0eXBlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKQEAgLTEz
MjMsMTQgKzEzMjMsMTQgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0c0lPUywgSW5zZXJ0RHJvcHBl
ZEl0ZW1Qcm92aWRlcnNJbk9yZGVyKQogICAgIFtzZWNvbmRBdHRhY2htZW50SXRlbSBzZXRTdWdn
ZXN0ZWROYW1lOkAic2Vjb25kLnBkZiJdOwogCiAgICAgYXV0byB3ZWJWaWV3ID0gd2ViVmlld0Zv
clRlc3RpbmdBdHRhY2htZW50cygpOwotICAgIGF1dG8gZHJhZ2dpbmdTaW11bGF0b3IgPSBhZG9w
dE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2Vi
Vmlldy5nZXQoKV0pOwotICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92
aWRlcnM6QFsgZmlyc3RBdHRhY2htZW50SXRlbS5nZXQoKSwgaW5saW5lVGV4dEl0ZW0uZ2V0KCks
IHNlY29uZEF0dGFjaG1lbnRJdGVtLmdldCgpIF1dOwotICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBy
dW5Gcm9tOkNHUG9pbnRaZXJvIHRvOkNHUG9pbnRNYWtlKDUwLCA1MCldOworICAgIGF1dG8gZHJh
Z0FuZERyb3BTaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2Nd
IGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW2RyYWdBbmREcm9wU2ltdWxh
dG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBmaXJzdEF0dGFjaG1lbnRJdGVtLmdldCgp
LCBpbmxpbmVUZXh0SXRlbS5nZXQoKSwgc2Vjb25kQXR0YWNobWVudEl0ZW0uZ2V0KCkgXV07Cisg
ICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludFplcm8gdG86Q0dQb2ludE1h
a2UoNTAsIDUwKV07CiAKLSAgICBFWFBFQ1RfRVEoMlUsIFtkcmFnZ2luZ1NpbXVsYXRvciBpbnNl
cnRlZEF0dGFjaG1lbnRzXS5jb3VudCk7Ci0gICAgRVhQRUNUX0VRKDBVLCBbZHJhZ2dpbmdTaW11
bGF0b3IgcmVtb3ZlZEF0dGFjaG1lbnRzXS5jb3VudCk7CisgICAgRVhQRUNUX0VRKDJVLCBbZHJh
Z0FuZERyb3BTaW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10uY291bnQpOworICAgIEVYUEVD
VF9FUSgwVSwgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHJlbW92ZWRBdHRhY2htZW50c10uY291bnQp
OwogCi0gICAgZm9yIChfV0tBdHRhY2htZW50ICphdHRhY2htZW50IGluIFtkcmFnZ2luZ1NpbXVs
YXRvciBpbnNlcnRlZEF0dGFjaG1lbnRzXSkgeworICAgIGZvciAoX1dLQXR0YWNobWVudCAqYXR0
YWNobWVudCBpbiBbZHJhZ0FuZERyb3BTaW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10pIHsK
ICAgICAgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CiAgICAgICAgIEVYUEVDVF9HVChbYXR0YWNo
bWVudCBzeW5jaHJvbm91c2x5UmVxdWVzdERhdGE6JmVycm9yXS5sZW5ndGgsIDBVKTsKICAgICAg
ICAgRVhQRUNUX1RSVUUoIWVycm9yKTsKQEAgLTEzNTUsMjggKzEzNTUsMjggQEAgVEVTVChXS0F0
dGFjaG1lbnRUZXN0c0lPUywgRHJhZ0F0dGFjaG1lbnRJbnNlcnRlZEFzRmlsZSkKICAgICBbaXRl
bSBzZXRTdWdnZXN0ZWROYW1lOkAiZG9jdW1lbnQucGRmIl07CiAKICAgICBhdXRvIHdlYlZpZXcg
PSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7Ci0gICAgYXV0byBkcmFnZ2luZ1NpbXVs
YXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRo
V2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RyYWdnaW5nU2ltdWxhdG9yIHNldEV4dGVy
bmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtLmdldCgpIF1dOwotICAgIFtkcmFnZ2luZ1NpbXVsYXRv
ciBydW5Gcm9tOkNHUG9pbnRaZXJvIHRvOkNHUG9pbnRNYWtlKDUwLCA1MCldOworICAgIGF1dG8g
ZHJhZ0FuZERyb3BTaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxs
b2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW2RyYWdBbmREcm9wU2lt
dWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtLmdldCgpIF1dOworICAgIFtk
cmFnQW5kRHJvcFNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRaZXJvIHRvOkNHUG9pbnRNYWtlKDUw
LCA1MCldOwogCiAgICAgLy8gRmlyc3QsIHZlcmlmeSB0aGF0IHRoZSBhdHRhY2htZW50IHdhcyBz
dWNjZXNzZnVsbHkgZHJvcHBlZC4KLSAgICBFWFBFQ1RfRVEoMVUsIFtkcmFnZ2luZ1NpbXVsYXRv
ciBpbnNlcnRlZEF0dGFjaG1lbnRzXS5jb3VudCk7Ci0gICAgX1dLQXR0YWNobWVudCAqYXR0YWNo
bWVudCA9IFtkcmFnZ2luZ1NpbXVsYXRvciBpbnNlcnRlZEF0dGFjaG1lbnRzXS5maXJzdE9iamVj
dDsKKyAgICBFWFBFQ1RfRVEoMVUsIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBpbnNlcnRlZEF0dGFj
aG1lbnRzXS5jb3VudCk7CisgICAgX1dLQXR0YWNobWVudCAqYXR0YWNobWVudCA9IFtkcmFnQW5k
RHJvcFNpbXVsYXRvciBpbnNlcnRlZEF0dGFjaG1lbnRzXS5maXJzdE9iamVjdDsKICAgICBbYXR0
YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTpkYXRhLmdldCgpXTsKICAgICBFWFBFQ1Rf
V0tfU1RSRVEoImRvY3VtZW50LnBkZiIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0aXRs
ZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7CiAgICAgRVhQRUNUX1dLX1NUUkVR
KCJhcHBsaWNhdGlvbi9wZGYiLCBbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9y
UXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7CiAKICAgICBbd2ViVmlldyBldmFsdWF0ZUph
dmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSIgY29tcGxldGlvbkhh
bmRsZXI6bmlsXTsKLSAgICBbZHJhZ2dpbmdTaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlk
ZXJzOkBbIF1dOwotICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDI1
LCAyNSkgdG86Q0dQb2ludE1ha2UoLTEwMCwgLTEwMCldOworICAgIFtkcmFnQW5kRHJvcFNpbXVs
YXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgXV07CisgICAgW2RyYWdBbmREcm9wU2lt
dWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjUsIDI1KSB0bzpDR1BvaW50TWFrZSgtMTAwLCAt
MTAwKV07CiAKICAgICAvLyBOZXh0LCB2ZXJpZnkgdGhhdCBkcmFnZ2luZyB0aGUgYXR0YWNobWVu
dCBwcm9kdWNlcyBhbiBpdGVtIHByb3ZpZGVyIHdpdGggYSBQREYgYXR0YWNobWVudC4KLSAgICBF
WFBFQ1RfRVEoMVUsIFtkcmFnZ2luZ1NpbXVsYXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5jb3Vu
dCk7Ci0gICAgTlNJdGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciA9IFtkcmFnZ2luZ1NpbXVsYXRv
ciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdDsKKyAgICBFWFBFQ1RfRVEoMVUsIFtk
cmFnQW5kRHJvcFNpbXVsYXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5jb3VudCk7CisgICAgTlNJ
dGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciA9IFtkcmFnQW5kRHJvcFNpbXVsYXRvciBzb3VyY2VJ
dGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdDsKICAgICBFWFBFQ1RfRVEoVUlQcmVmZXJyZWRQcmVz
ZW50YXRpb25TdHlsZUF0dGFjaG1lbnQsIGl0ZW1Qcm92aWRlci5wcmVmZXJyZWRQcmVzZW50YXRp
b25TdHlsZSk7CiAgICAgW2l0ZW1Qcm92aWRlciBleHBlY3RUeXBlOihOU1N0cmluZyAqKWtVVFR5
cGVQREYgd2l0aERhdGE6ZGF0YS5nZXQoKV07CiAgICAgRVhQRUNUX1dLX1NUUkVRKCJkb2N1bWVu
dC5wZGYiLCBbaXRlbVByb3ZpZGVyIHN1Z2dlc3RlZE5hbWVdKTsKLSAgICBbZHJhZ2dpbmdTaW11
bGF0b3IgZW5kRGF0YVRyYW5zZmVyXTsKKyAgICBbZHJhZ0FuZERyb3BTaW11bGF0b3IgZW5kRGF0
YVRyYW5zZmVyXTsKIH0KIAogVEVTVChXS0F0dGFjaG1lbnRUZXN0c0lPUywgRHJhZ0F0dGFjaG1l
bnRJbnNlcnRlZEFzRGF0YSkKQEAgLTEzOTYsMTYgKzEzOTYsMTYgQEAgVEVTVChXS0F0dGFjaG1l
bnRUZXN0c0lPUywgRHJhZ0F0dGFjaG1lbnRJbnNlcnRlZEFzRGF0YSkKICAgICBFWFBFQ1RfV0tf
U1RSRVEoImFwcGxpY2F0aW9uL3BkZiIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0eXBl
IiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKIAogICAgIFt3ZWJWaWV3IGV2YWx1
YXRlSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIiBjb21wbGV0
aW9uSGFuZGxlcjpuaWxdOwotICAgIGF1dG8gZHJhZ2dpbmdTaW11bGF0b3IgPSBhZG9wdE5TKFtb
RGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5n
ZXQoKV0pOwotICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDI1LCAy
NSkgdG86Q0dQb2ludE1ha2UoLTEwMCwgLTEwMCldOworICAgIGF1dG8gZHJhZ0FuZERyb3BTaW11
bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoMjUsIDI1KSB0bzpDR1BvaW50TWFrZSgtMTAwLCAtMTAwKV07CiAKICAgICAv
LyBOZXh0LCB2ZXJpZnkgdGhhdCBkcmFnZ2luZyB0aGUgYXR0YWNobWVudCBwcm9kdWNlcyBhbiBp
dGVtIHByb3ZpZGVyIHdpdGggYSBQREYgYXR0YWNobWVudC4KLSAgICBFWFBFQ1RfRVEoMVUsIFtk
cmFnZ2luZ1NpbXVsYXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5jb3VudCk7Ci0gICAgTlNJdGVt
UHJvdmlkZXIgKml0ZW1Qcm92aWRlciA9IFtkcmFnZ2luZ1NpbXVsYXRvciBzb3VyY2VJdGVtUHJv
dmlkZXJzXS5maXJzdE9iamVjdDsKKyAgICBFWFBFQ1RfRVEoMVUsIFtkcmFnQW5kRHJvcFNpbXVs
YXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5jb3VudCk7CisgICAgTlNJdGVtUHJvdmlkZXIgKml0
ZW1Qcm92aWRlciA9IFtkcmFnQW5kRHJvcFNpbXVsYXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5m
aXJzdE9iamVjdDsKICAgICBFWFBFQ1RfRVEoVUlQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUF0
dGFjaG1lbnQsIGl0ZW1Qcm92aWRlci5wcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZSk7CiAgICAg
W2l0ZW1Qcm92aWRlciBleHBlY3RUeXBlOihOU1N0cmluZyAqKWtVVFR5cGVQREYgd2l0aERhdGE6
ZGF0YS5nZXQoKV07CiAgICAgRVhQRUNUX1dLX1NUUkVRKCJkb2N1bWVudC5wZGYiLCBbaXRlbVBy
b3ZpZGVyIHN1Z2dlc3RlZE5hbWVdKTsKLSAgICBbZHJhZ2dpbmdTaW11bGF0b3IgZW5kRGF0YVRy
YW5zZmVyXTsKKyAgICBbZHJhZ0FuZERyb3BTaW11bGF0b3IgZW5kRGF0YVRyYW5zZmVyXTsKIH0K
IAogVEVTVChXS0F0dGFjaG1lbnRUZXN0c0lPUywgRHJhZ0luUGxhY2VWaWRlb0F0dGFjaG1lbnRF
bGVtZW50KQpAQCAtMTQyNSwxNSArMTQyNSwxNSBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9T
LCBEcmFnSW5QbGFjZVZpZGVvQXR0YWNobWVudEVsZW1lbnQpCiAgICAgRVhQRUNUX1dLX1NUUkVR
KCJ2aWRlby9tcDQiLCBbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9yUXVlcnlT
ZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7CiAKICAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3Jp
cHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSIgY29tcGxldGlvbkhhbmRsZXI6
bmlsXTsKLSAgICBhdXRvIGRyYWdnaW5nU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAg
ICBbZHJhZ2dpbmdTaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyNSwgMjUpIHRvOkNHUG9p
bnRNYWtlKC0xMDAsIC0xMDApXTsKKyAgICBhdXRvIGRyYWdBbmREcm9wU2ltdWxhdG9yID0gYWRv
cHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmll
dy5nZXQoKV0pOworICAgIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtl
KDI1LCAyNSkgdG86Q0dQb2ludE1ha2UoLTEwMCwgLTEwMCldOwogCi0gICAgRVhQRUNUX0VRKDFV
LCBbZHJhZ2dpbmdTaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10uY291bnQpOwotICAgIE5T
SXRlbVByb3ZpZGVyICppdGVtUHJvdmlkZXIgPSBbZHJhZ2dpbmdTaW11bGF0b3Igc291cmNlSXRl
bVByb3ZpZGVyc10uZmlyc3RPYmplY3Q7CisgICAgRVhQRUNUX0VRKDFVLCBbZHJhZ0FuZERyb3BT
aW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10uY291bnQpOworICAgIE5TSXRlbVByb3ZpZGVy
ICppdGVtUHJvdmlkZXIgPSBbZHJhZ0FuZERyb3BTaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVy
c10uZmlyc3RPYmplY3Q7CiAgICAgRVhQRUNUX0VRKFVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5
bGVBdHRhY2htZW50LCBpdGVtUHJvdmlkZXIucHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGUpOwog
ICAgIFtpdGVtUHJvdmlkZXIgZXhwZWN0VHlwZTooTlNTdHJpbmcgKilrVVRUeXBlTVBFRzQgd2l0
aERhdGE6ZGF0YS5nZXQoKV07CiAgICAgRVhQRUNUX1dLX1NUUkVRKCJ2aWRlby5tcDQiLCBbaXRl
bVByb3ZpZGVyIHN1Z2dlc3RlZE5hbWVdKTsKLSAgICBbZHJhZ2dpbmdTaW11bGF0b3IgZW5kRGF0
YVRyYW5zZmVyXTsKKyAgICBbZHJhZ0FuZERyb3BTaW11bGF0b3IgZW5kRGF0YVRyYW5zZmVyXTsK
IH0KIAogVEVTVChXS0F0dGFjaG1lbnRUZXN0c0lPUywgTW92ZUF0dGFjaG1lbnRFbGVtZW50QXNJ
Y29uQnlEcmFnZ2luZykKQEAgLTE0NTIsMTYgKzE0NTIsMTYgQEAgVEVTVChXS0F0dGFjaG1lbnRU
ZXN0c0lPUywgTW92ZUF0dGFjaG1lbnRFbGVtZW50QXNJY29uQnlEcmFnZ2luZykKICAgICBbd2Vi
VmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIkluc2VydFBhcmFncmFwaCIg
YXJndW1lbnQ6bmlsXTsKICAgICBbd2ViVmlldyBleHBlY3RFbGVtZW50VGFnOkAiQVRUQUNITUVO
VCIgdG9Db21lQmVmb3JlOkAiU1RST05HIl07CiAKLSAgICBhdXRvIGRyYWdnaW5nU2ltdWxhdG9y
ID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJW
aWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZHJhZ2dpbmdTaW11bGF0b3IgcnVuRnJvbTpDR1Bv
aW50TWFrZSgyNSwgMjUpIHRvOkNHUG9pbnRNYWtlKDI1LCA0MjUpXTsKKyAgICBhdXRvIGRyYWdB
bmREcm9wU2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBp
bml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtkcmFnQW5kRHJvcFNpbXVsYXRv
ciBydW5Gcm9tOkNHUG9pbnRNYWtlKDI1LCAyNSkgdG86Q0dQb2ludE1ha2UoMjUsIDQyNSldOwog
Ci0gICAgYXR0YWNobWVudCA9IFtbZHJhZ2dpbmdTaW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50
c10gZmlyc3RPYmplY3RdOworICAgIGF0dGFjaG1lbnQgPSBbW2RyYWdBbmREcm9wU2ltdWxhdG9y
IGluc2VydGVkQXR0YWNobWVudHNdIGZpcnN0T2JqZWN0XTsKICAgICBbYXR0YWNobWVudCBleHBl
Y3RSZXF1ZXN0ZWREYXRhVG9CZTpkYXRhLmdldCgpXTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoImRv
Y3VtZW50LnBkZiIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0aXRsZSIgZm9yUXVlcnlT
ZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKCJhcHBsaWNhdGlv
bi9wZGYiLCBbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3Rv
cjpAImF0dGFjaG1lbnQiXSk7CiAKICAgICBbd2ViVmlldyBleHBlY3RFbGVtZW50VGFnOkAiU1RS
T05HIiB0b0NvbWVCZWZvcmU6QCJBVFRBQ0hNRU5UIl07Ci0gICAgW2RyYWdnaW5nU2ltdWxhdG9y
IGVuZERhdGFUcmFuc2Zlcl07CisgICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIGVuZERhdGFUcmFu
c2Zlcl07CiB9CiAKIFRFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIE1vdmVJblBsYWNlQXR0YWNo
bWVudEVsZW1lbnRCeURyYWdnaW5nKQpAQCAtMTQ4MSwxNiArMTQ4MSwxNiBAQCBURVNUKFdLQXR0
YWNobWVudFRlc3RzSU9TLCBNb3ZlSW5QbGFjZUF0dGFjaG1lbnRFbGVtZW50QnlEcmFnZ2luZykK
ICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIkluc2VydFBh
cmFncmFwaCIgYXJndW1lbnQ6bmlsXTsKICAgICBbd2ViVmlldyBleHBlY3RFbGVtZW50VGFnOkAi
QVRUQUNITUVOVCIgdG9Db21lQmVmb3JlOkAiU1RST05HIl07CiAKLSAgICBhdXRvIGRyYWdnaW5n
U2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5p
dFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZHJhZ2dpbmdTaW11bGF0b3IgcnVu
RnJvbTpDR1BvaW50TWFrZSgyNSwgMjUpIHRvOkNHUG9pbnRNYWtlKDI1LCA0MjUpXTsKKyAgICBh
dXRvIGRyYWdBbmREcm9wU2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9y
IGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtkcmFnQW5kRHJv
cFNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDI1LCAyNSkgdG86Q0dQb2ludE1ha2UoMjUs
IDQyNSldOwogCi0gICAgYXR0YWNobWVudCA9IFtbZHJhZ2dpbmdTaW11bGF0b3IgaW5zZXJ0ZWRB
dHRhY2htZW50c10gZmlyc3RPYmplY3RdOworICAgIGF0dGFjaG1lbnQgPSBbW2RyYWdBbmREcm9w
U2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVudHNdIGZpcnN0T2JqZWN0XTsKICAgICBbYXR0YWNo
bWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTpkYXRhLmdldCgpXTsKICAgICBFWFBFQ1RfV0tf
U1RSRVEoImljb24ucG5nIiwgW3dlYlZpZXcgdmFsdWVPZkF0dHJpYnV0ZTpAInRpdGxlIiBmb3JR
dWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoImltYWdl
L3BuZyIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0eXBlIiBmb3JRdWVyeVNlbGVjdG9y
OkAiYXR0YWNobWVudCJdKTsKIAogICAgIFt3ZWJWaWV3IGV4cGVjdEVsZW1lbnRUYWc6QCJTVFJP
TkciIHRvQ29tZUJlZm9yZTpAIkFUVEFDSE1FTlQiXTsKLSAgICBbZHJhZ2dpbmdTaW11bGF0b3Ig
ZW5kRGF0YVRyYW5zZmVyXTsKKyAgICBbZHJhZ0FuZERyb3BTaW11bGF0b3IgZW5kRGF0YVRyYW5z
ZmVyXTsKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvaW9zL0RhdGFJbnRlcmFjdGlvblRlc3RzLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9pb3MvRGF0YUludGVyYWN0aW9uVGVzdHMubW0KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGU1YmE4N2JiYjQxZGFmOTczNzQzMWQwOGE4NmRhYzAyZDFhNWE5
YTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRGF0YUludGVyYWN0aW9uVGVzdHMubW0KKysrIC9kZXYv
bnVsbApAQCAtMSwxOTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKLQotI2ltcG9ydCAiRGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgotI2ltcG9ydCAi
VGVzdFdLV2ViVmlldy5oIgotI2ltcG9ydCAiVUlLaXRTUEkuaCIKLSNpbXBvcnQgIldLV2ViVmll
d0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKLSNpbXBvcnQgPE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2Jp
bGVDb3JlU2VydmljZXMuaD4KLSNpbXBvcnQgPFVJS2l0L05TSXRlbVByb3ZpZGVyK1VJS2l0QWRk
aXRpb25zLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KLSNpbXBv
cnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dL
UHJvY2Vzc1Bvb2xQcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJh
dGlvblByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJk
Lmg+Ci0jaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+Ci0jaW1w
b3J0IDx3dGYvU2Vjb25kcy5oPgotCi10eXBlZGVmIHZvaWQgKF5GaWxlTG9hZENvbXBsZXRpb25C
bG9jaykoTlNVUkwgKiwgQk9PTCwgTlNFcnJvciAqKTsKLXR5cGVkZWYgdm9pZCAoXkRhdGFMb2Fk
Q29tcGxldGlvbkJsb2NrKShOU0RhdGEgKiwgTlNFcnJvciAqKTsKLXR5cGVkZWYgdm9pZCAoXlVJ
SXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0aW9uQmxvY2spKE5TRGF0YSAqLCBOU0Vycm9yICop
OwotCi0jaWYgIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0KLUBpbnRlcmZhY2UgVUlJdGVtUHJv
dmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnMgOiBOU09iamVjdAotQGVuZAotCi0jZW5kaWYKLQot
QGludGVyZmFjZSBVSUl0ZW1Qcm92aWRlcigpCi0rIChVSUl0ZW1Qcm92aWRlciAqKWl0ZW1Qcm92
aWRlcldpdGhVUkw6KE5TVVJMICopdXJsIHRpdGxlOihOU1N0cmluZyAqKXRpdGxlOwotLSAodm9p
ZCkgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcg
Kil0eXBlSWRlbnRpZmllciBvcHRpb25zOihVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0
aW9ucyopb3B0aW9ucyBsb2FkSGFuZGxlcjooTlNQcm9ncmVzcyAqICheKSh2b2lkICheVUlJdGVt
UHJvdmlkZXJEYXRhTG9hZENvbXBsZXRpb25CbG9jaykoTlNEYXRhICppdGVtLCBOU0Vycm9yICpl
cnJvcikpKSBsb2FkSGFuZGxlcjsKLUBlbmQKLQotc3RhdGljIE5TU3RyaW5nICpJbmplY3RlZEJ1
bmRsZVBhc3RlYm9hcmREYXRhVHlwZSA9IEAib3JnLndlYmtpdC5kYXRhIjsKLQotc3RhdGljIFVJ
SW1hZ2UgKnRlc3RJY29uSW1hZ2UoKQotewotICAgIHJldHVybiBbVUlJbWFnZSBpbWFnZU5hbWVk
OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMvaWNvbi5wbmciXTsKLX0KLQotc3RhdGljIE5TRGF0
YSAqdGVzdFpJUEFyY2hpdmUoKQotewotICAgIE5TVVJMICp6aXBGaWxlVVJMID0gW1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAImNvbXByZXNzZWQtZmlsZXMiIHdpdGhFeHRl
bnNpb246QCJ6aXAiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07Ci0g
ICAgcmV0dXJuIFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mVVJMOnppcEZpbGVVUkxdOwotfQot
Ci1AaW1wbGVtZW50YXRpb24gVUlJdGVtUHJvdmlkZXIgKERhdGFJbnRlcmFjdGlvblRlc3RzKQot
Ci0tICh2b2lkKXJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5T
U3RyaW5nICopdHlwZUlkZW50aWZpZXIgd2l0aERhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBS
ZXRhaW5QdHI8TlNEYXRhPiByZXRhaW5lZERhdGEgPSBkYXRhOwotICAgIFtzZWxmIHJlZ2lzdGVy
RGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6dHlwZUlkZW50aWZpZXIgdmlzaWJp
bGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGwgbG9h
ZEhhbmRsZXI6IFtyZXRhaW5lZERhdGFdIChEYXRhTG9hZENvbXBsZXRpb25CbG9jayBibG9jaykg
LT4gTlNQcm9ncmVzcyAqIHsKLSAgICAgICAgYmxvY2socmV0YWluZWREYXRhLmdldCgpLCBuaWwp
OwotICAgICAgICByZXR1cm4gW05TUHJvZ3Jlc3MgZGlzY3JldGVQcm9ncmVzc1dpdGhUb3RhbFVu
aXRDb3VudDoxMDBdOwotICAgIH1dOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0
V0tXZWJWaWV3IChEYXRhSW50ZXJhY3Rpb25UZXN0cykKLQotLSAoQk9PTCllZGl0b3JDb250YWlu
c0ltYWdlRWxlbWVudAotewotICAgIHJldHVybiBbc2VsZiBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiISFlZGl0b3IucXVlcnlTZWxlY3RvcignaW1nJykiXS5ib29sVmFsdWU7Ci19Ci0K
LS0gKE5TU3RyaW5nICopZWRpdG9yVmFsdWUKLXsKLSAgICByZXR1cm4gW3NlbGYgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci52YWx1ZSJdOwotfQotCi1AZW5kCi0KLXN0YXRp
YyBOU1ZhbHVlICptYWtlQ0dSZWN0VmFsdWUoQ0dGbG9hdCB4LCBDR0Zsb2F0IHksIENHRmxvYXQg
d2lkdGgsIENHRmxvYXQgaGVpZ2h0KQotewotICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhD
R1JlY3Q6Q0dSZWN0TWFrZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KV07Ci19Ci0KLXN0YXRpYyB2b2lk
IGNoZWNrQ0dSZWN0SXNFcXVhbFRvQ0dSZWN0V2l0aExvZ2dpbmcoQ0dSZWN0IGV4cGVjdGVkLCBD
R1JlY3Qgb2JzZXJ2ZWQpCi17Ci0gICAgQk9PTCBpc0VxdWFsID0gQ0dSZWN0RXF1YWxUb1JlY3Qo
ZXhwZWN0ZWQsIG9ic2VydmVkKTsKLSAgICBFWFBFQ1RfVFJVRShpc0VxdWFsKTsKLSAgICBpZiAo
IWlzRXF1YWwpCi0gICAgICAgIE5TTG9nKEAiRXhwZWN0ZWQ6ICVAIGJ1dCBvYnNlcnZlZDogJUAi
LCBOU1N0cmluZ0Zyb21DR1JlY3QoZXhwZWN0ZWQpLCBOU1N0cmluZ0Zyb21DR1JlY3Qob2JzZXJ2
ZWQpKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKE5T
QXJyYXkgKmV4cGVjdGVkLCBOU0FycmF5ICpvYnNlcnZlZCkKLXsKLSAgICBpZiAoIVtleHBlY3Rl
ZCBpc0VxdWFsVG9BcnJheTpvYnNlcnZlZF0pCi0gICAgICAgIE5TTG9nKEAiRXhwZWN0ZWQgc2Vs
ZWN0aW9uIHJlY3RzOiAlQCBidXQgb2JzZXJ2ZWQ6ICVAIiwgZXhwZWN0ZWQsIG9ic2VydmVkKTsK
LSAgICBFWFBFQ1RfVFJVRShbZXhwZWN0ZWQgaXNFcXVhbFRvQXJyYXk6b2JzZXJ2ZWRdKTsKLX0K
LQotc3RhdGljIHZvaWQgY2hlY2tSaWNoVGV4dFR5cGVQcmVjZWRlc1BsYWluVGV4dFR5cGUoRGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yICpzaW11bGF0b3IpCi17Ci0gICAgLy8gQXQgbGVhc3Qgb25l
IG9mICJjb20uYXBwbGUuZmxhdC1ydGZkIiBvciAicHVibGljLnJ0ZiIgaXMgZXhwZWN0ZWQgdG8g
aGF2ZSBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuICJwdWJsaWMudXRmOC1wbGFpbi10ZXh0Ii4KLSAg
ICBOU0FycmF5ICpyZWdpc3RlcmVkVHlwZXMgPSBbc2ltdWxhdG9yLnNvdXJjZUl0ZW1Qcm92aWRl
cnMuZmlyc3RPYmplY3QgcmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVyc107Ci0gICAgYXV0byBpbmRl
eE9mUlRGVHlwZSA9IFtyZWdpc3RlcmVkVHlwZXMgaW5kZXhPZk9iamVjdDooTlNTdHJpbmcgKilr
VVRUeXBlUlRGXTsKLSAgICBhdXRvIGluZGV4T2ZGbGF0UlRGRFR5cGUgPSBbcmVnaXN0ZXJlZFR5
cGVzIGluZGV4T2ZPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZUZsYXRSVEZEXTsKLSAgICBhdXRv
IGluZGV4T2ZQbGFpblRleHRUeXBlID0gW3JlZ2lzdGVyZWRUeXBlcyBpbmRleE9mT2JqZWN0OihO
U1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0XTsKLSAgICBFWFBFQ1RfTkUoKE5TSW50ZWdl
cilpbmRleE9mUGxhaW5UZXh0VHlwZSwgTlNOb3RGb3VuZCk7Ci0gICAgRVhQRUNUX1RSVUUoKGlu
ZGV4T2ZSVEZUeXBlICE9IE5TTm90Rm91bmQgJiYgaW5kZXhPZlJURlR5cGUgPCBpbmRleE9mUGxh
aW5UZXh0VHlwZSkgfHwgKGluZGV4T2ZGbGF0UlRGRFR5cGUgIT0gTlNOb3RGb3VuZCAmJiBpbmRl
eE9mRmxhdFJURkRUeXBlIDwgaW5kZXhPZlBsYWluVGV4dFR5cGUpKTsKLX0KLQotc3RhdGljIHZv
aWQgY2hlY2tGaXJzdFR5cGVJc1ByZXNlbnRBbmRTZWNvbmRUeXBlSXNNaXNzaW5nKERhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciAqc2ltdWxhdG9yLCBDRlN0cmluZ1JlZiBmaXJzdFR5cGUsIENGU3Ry
aW5nUmVmIHNlY29uZFR5cGUpCi17Ci0gICAgTlNBcnJheSAqcmVnaXN0ZXJlZFR5cGVzID0gW3Np
bXVsYXRvci5zb3VyY2VJdGVtUHJvdmlkZXJzLmZpcnN0T2JqZWN0IHJlZ2lzdGVyZWRUeXBlSWRl
bnRpZmllcnNdOwotICAgIEVYUEVDVF9UUlVFKFtyZWdpc3RlcmVkVHlwZXMgY29udGFpbnNPYmpl
Y3Q6KE5TU3RyaW5nICopZmlyc3RUeXBlXSk7Ci0gICAgRVhQRUNUX0ZBTFNFKFtyZWdpc3RlcmVk
VHlwZXMgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nICopc2Vjb25kVHlwZV0pOwotfQotCi1zdGF0
aWMgdm9pZCBjaGVja1R5cGVJZGVudGlmaWVySXNSZWdpc3RlcmVkQXRJbmRleChEYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3IgKnNpbXVsYXRvciwgTlNTdHJpbmcgKnR5cGUsIE5TVUludGVnZXIgaW5k
ZXgpCi17Ci0gICAgTlNBcnJheSAqcmVnaXN0ZXJlZFR5cGVzID0gW3NpbXVsYXRvci5zb3VyY2VJ
dGVtUHJvdmlkZXJzLmZpcnN0T2JqZWN0IHJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnNdOwotICAg
IEVYUEVDVF9HVChyZWdpc3RlcmVkVHlwZXMuY291bnQsIGluZGV4KTsKLSAgICBFWFBFQ1RfV0tf
U1RSRVEodHlwZS5VVEY4U3RyaW5nLCBbcmVnaXN0ZXJlZFR5cGVzW2luZGV4XSBVVEY4U3RyaW5n
XSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNrRXN0aW1hdGVkU2l6ZShEYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IgKnNpbXVsYXRvciwgQ0dTaXplIGVzdGltYXRlZFNpemUpCi17Ci0gICAgVUlJdGVt
UHJvdmlkZXIgKnNvdXJjZUl0ZW1Qcm92aWRlciA9IFtzaW11bGF0b3Igc291cmNlSXRlbVByb3Zp
ZGVyc10uZmlyc3RPYmplY3Q7Ci0gICAgRVhQRUNUX0VRKGVzdGltYXRlZFNpemUud2lkdGgsIHNv
dXJjZUl0ZW1Qcm92aWRlci5wcmVmZXJyZWRQcmVzZW50YXRpb25TaXplLndpZHRoKTsKLSAgICBF
WFBFQ1RfRVEoZXN0aW1hdGVkU2l6ZS5oZWlnaHQsIHNvdXJjZUl0ZW1Qcm92aWRlci5wcmVmZXJy
ZWRQcmVzZW50YXRpb25TaXplLmhlaWdodCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNrU3VnZ2Vz
dGVkTmFtZUFuZEVzdGltYXRlZFNpemUoRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yICpzaW11bGF0
b3IsIE5TU3RyaW5nICpzdWdnZXN0ZWROYW1lLCBDR1NpemUgZXN0aW1hdGVkU2l6ZSkKLXsKLSAg
ICBVSUl0ZW1Qcm92aWRlciAqc291cmNlSXRlbVByb3ZpZGVyID0gW3NpbXVsYXRvciBzb3VyY2VJ
dGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdDsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoc3VnZ2VzdGVk
TmFtZS5VVEY4U3RyaW5nLCBzb3VyY2VJdGVtUHJvdmlkZXIuc3VnZ2VzdGVkTmFtZS5VVEY4U3Ry
aW5nKTsKLSAgICBFWFBFQ1RfRVEoZXN0aW1hdGVkU2l6ZS53aWR0aCwgc291cmNlSXRlbVByb3Zp
ZGVyLnByZWZlcnJlZFByZXNlbnRhdGlvblNpemUud2lkdGgpOwotICAgIEVYUEVDVF9FUShlc3Rp
bWF0ZWRTaXplLmhlaWdodCwgc291cmNlSXRlbVByb3ZpZGVyLnByZWZlcnJlZFByZXNlbnRhdGlv
blNpemUuaGVpZ2h0KTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tTdHJpbmdBcnJheXNBcmVFcXVh
bChOU0FycmF5PE5TU3RyaW5nICo+ICpleHBlY3RlZCwgTlNBcnJheTxOU1N0cmluZyAqPiAqb2Jz
ZXJ2ZWQpCi17Ci0gICAgRVhQRUNUX0VRKGV4cGVjdGVkLmNvdW50LCBvYnNlcnZlZC5jb3VudCk7
Ci0gICAgZm9yIChOU1VJbnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCBleHBlY3RlZC5jb3VudDsg
KytpbmRleCkgewotICAgICAgICBOU1N0cmluZyAqZXhwZWN0ZWRTdHJpbmcgPSBbZXhwZWN0ZWQg
b2JqZWN0QXRJbmRleDppbmRleF07Ci0gICAgICAgIE5TU3RyaW5nICpvYnNlcnZlZFN0cmluZyA9
IFtvYnNlcnZlZCBvYmplY3RBdEluZGV4OmluZGV4XTsKLSAgICAgICAgRVhQRUNUX1dLX1NUUkVR
KGV4cGVjdGVkU3RyaW5nLCBvYnNlcnZlZFN0cmluZyk7Ci0gICAgICAgIGlmICghW2V4cGVjdGVk
U3RyaW5nIGlzRXF1YWxUb1N0cmluZzpvYnNlcnZlZFN0cmluZ10pCi0gICAgICAgICAgICBOU0xv
ZyhAIkV4cGVjdGVkIG9ic2VydmVkIHN0cmluZzogJUAgdG8gbWF0Y2ggZXhwZWN0ZWQgc3RyaW5n
OiAlQCBhdCBpbmRleDogJXR1Iiwgb2JzZXJ2ZWRTdHJpbmcsIGV4cGVjdGVkU3RyaW5nLCBpbmRl
eCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBjaGVja0RyYWdDYXJldFJlY3RJc0NvbnRhaW5l
ZEluUmVjdChDR1JlY3QgY2FyZXRSZWN0LCBDR1JlY3QgY29udGFpbmVyUmVjdCkKLXsKLSAgICBC
T09MIGNvbnRhaW5lZCA9IENHUmVjdENvbnRhaW5zUmVjdChjb250YWluZXJSZWN0LCBjYXJldFJl
Y3QpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRhaW5lZCk7Ci0gICAgaWYgKCFjb250YWluZWQpCi0g
ICAgICAgIE5TTG9nKEAiRXhwZWN0ZWQgY2FyZXQgcmVjdDogJUAgdG8gZml0IHdpdGhpbiBjb250
YWluZXIgcmVjdDogJUAiLCBOU1N0cmluZ0Zyb21DR1JlY3QoY2FyZXRSZWN0KSwgTlNTdHJpbmdG
cm9tQ0dSZWN0KGNvbnRhaW5lclJlY3QpKTsKLX0KLQotI2lmIF9fSVBIT05FX09TX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDExMDMwMAotCi1zdGF0aWMgdm9pZCBjaGVja0pTT05XaXRoTG9nZ2lu
ZyhOU1N0cmluZyAqanNvblN0cmluZywgTlNEaWN0aW9uYXJ5ICpleHBlY3RlZCkKLXsKLSAgICBC
T09MIHN1Y2Nlc3MgPSBUZXN0V2ViS2l0QVBJOjpVdGlsOjpqc29uTWF0Y2hlc0V4cGVjdGVkVmFs
dWVzKGpzb25TdHJpbmcsIGV4cGVjdGVkKTsKLSAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKLSAg
ICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIE5TTG9nKEAiRXhwZWN0ZWQgSlNPTjogJUAgdG8gbWF0
Y2ggdmFsdWVzOiAlQCIsIGpzb25TdHJpbmcsIGV4cGVjdGVkKTsKLX0KLQotc3RhdGljIE5TRGF0
YSAqdGVzdEljb25JbWFnZURhdGEoKQotewotICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRoQ29u
dGVudHNPZlVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiaWNvbiIg
d2l0aEV4dGVuc2lvbjpAInBuZyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJj
ZXMiXV07Ci19Ci0KLXN0YXRpYyB2b2lkIHJ1blRlc3RXaXRoVGVtcG9yYXJ5VGV4dEZpbGUodm9p
ZChecnVuVGVzdCkoTlNVUkwgKmZpbGVVUkwpKQotewotICAgIE5TU3RyaW5nICpmaWxlTmFtZSA9
IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiZHJhZy1kcm9wLXRleHQtZmlsZS0lQC50eHQi
LCBbTlNVVUlEIFVVSURdLlVVSURTdHJpbmddOwotICAgIFJldGFpblB0cjxOU1VSTD4gdGVtcG9y
YXJ5RmlsZSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkg
c3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OmZpbGVOYW1lXSBpc0RpcmVjdG9yeTpOT107
Ci0gICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6dGVt
cG9yYXJ5RmlsZS5nZXQoKSBlcnJvcjpuaWxdOwotCi0gICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7
Ci0gICAgW0AiVGhpcyBpcyBhIHRpbnkgYmxvYiBvZiB0ZXh0LiIgd3JpdGVUb1VSTDp0ZW1wb3Jh
cnlGaWxlLmdldCgpIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5n
IGVycm9yOiZlcnJvcl07Ci0KLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIE5TTG9nKEAiRXJyb3Ig
d3JpdGluZyB0ZW1wb3JhcnkgZmlsZTogJUAiLCBlcnJvcik7Ci0KLSAgICBAdHJ5IHsKLSAgICAg
ICAgcnVuVGVzdCh0ZW1wb3JhcnlGaWxlLmdldCgpKTsKLSAgICB9IEBmaW5hbGx5IHsKLSAgICAg
ICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6dGVtcG9y
YXJ5RmlsZS5nZXQoKSBlcnJvcjpuaWxdOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgcnVuVGVz
dFdpdGhUZW1wb3JhcnlGb2xkZXIodm9pZChecnVuVGVzdCkoTlNVUkwgKmZvbGRlclVSTCkpCi17
Ci0gICAgTlNTdHJpbmcgKmZvbGRlck5hbWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
InNvbWUuZGlyZWN0b3J5LSVAIiwgW05TVVVJRCBVVUlEXS5VVUlEU3RyaW5nXTsKLSAgICBSZXRh
aW5QdHI8TlNVUkw+IHRlbXBvcmFyeUZvbGRlciA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05T
VGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OmZvbGRl
ck5hbWVdIGlzRGlyZWN0b3J5OllFU107Ci0gICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5h
Z2VyXSByZW1vdmVJdGVtQXRVUkw6dGVtcG9yYXJ5Rm9sZGVyLmdldCgpIGVycm9yOm5pbF07Ci0K
LSAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKLSAgICBOU0ZpbGVNYW5hZ2VyICpkZWZhdWx0TWFu
YWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAgICBbZGVmYXVsdE1hbmFn
ZXIgY3JlYXRlRGlyZWN0b3J5QXRVUkw6dGVtcG9yYXJ5Rm9sZGVyLmdldCgpIHdpdGhJbnRlcm1l
ZGlhdGVEaXJlY3RvcmllczpOTyBhdHRyaWJ1dGVzOm5pbCBlcnJvcjomZXJyb3JdOwotICAgIFt0
ZXN0SWNvbkltYWdlRGF0YSgpIHdyaXRlVG9VUkw6W3RlbXBvcmFyeUZvbGRlci5nZXQoKSBVUkxC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJpY29uLnBuZyIgaXNEaXJlY3Rvcnk6Tk9dIGF0b21p
Y2FsbHk6WUVTXTsKLSAgICBbdGVzdFpJUEFyY2hpdmUoKSB3cml0ZVRvVVJMOlt0ZW1wb3JhcnlG
b2xkZXIuZ2V0KCkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYXJjaGl2ZS56aXAiIGlz
RGlyZWN0b3J5Ok5PXSBhdG9taWNhbGx5OllFU107Ci0KLSAgICBOU1VSTCAqZmlyc3RTdWJkaXJl
Y3RvcnkgPSBbdGVtcG9yYXJ5Rm9sZGVyLmdldCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dDpAInN1YmRpcmVjdG9yeTEiIGlzRGlyZWN0b3J5OllFU107Ci0gICAgW2RlZmF1bHRNYW5hZ2Vy
IGNyZWF0ZURpcmVjdG9yeUF0VVJMOmZpcnN0U3ViZGlyZWN0b3J5IHdpdGhJbnRlcm1lZGlhdGVE
aXJlY3RvcmllczpOTyBhdHRyaWJ1dGVzOm5pbCBlcnJvcjomZXJyb3JdOwotICAgIFtAIkkgYW0g
YSB0ZXh0IGZpbGUgaW4gdGhlIGZpcnN0IHN1YmRpcmVjdG9yeS4iIHdyaXRlVG9VUkw6W2ZpcnN0
U3ViZGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAInRleHQtZmlsZS0xLnR4
dCIgaXNEaXJlY3Rvcnk6Tk9dIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0Vu
Y29kaW5nIGVycm9yOiZlcnJvcl07Ci0KLSAgICBOU1VSTCAqc2Vjb25kU3ViZGlyZWN0b3J5ID0g
W3RlbXBvcmFyeUZvbGRlci5nZXQoKSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJzdWJk
aXJlY3RvcnkyIiBpc0RpcmVjdG9yeTpZRVNdOwotICAgIFtkZWZhdWx0TWFuYWdlciBjcmVhdGVE
aXJlY3RvcnlBdFVSTDpzZWNvbmRTdWJkaXJlY3Rvcnkgd2l0aEludGVybWVkaWF0ZURpcmVjdG9y
aWVzOk5PIGF0dHJpYnV0ZXM6bmlsIGVycm9yOiZlcnJvcl07Ci0gICAgW0AiSSBhbSBhIHRleHQg
ZmlsZSBpbiB0aGUgc2Vjb25kIHN1YmRpcmVjdG9yeS4iIHdyaXRlVG9VUkw6W3NlY29uZFN1YmRp
cmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJ0ZXh0LWZpbGUtMi50eHQiIGlz
RGlyZWN0b3J5Ok5PXSBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
ZyBlcnJvcjomZXJyb3JdOwotCi0gICAgaWYgKGVycm9yKQotICAgICAgICBOU0xvZyhAIkVycm9y
IHdyaXRpbmcgdGVtcG9yYXJ5IGZpbGU6ICVAIiwgZXJyb3IpOwotCi0gICAgQHRyeSB7Ci0gICAg
ICAgIHJ1blRlc3QodGVtcG9yYXJ5Rm9sZGVyLmdldCgpKTsKLSAgICB9IEBmaW5hbGx5IHsKLSAg
ICAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6dGVt
cG9yYXJ5Rm9sZGVyLmdldCgpIGVycm9yOm5pbF07Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gX19J
UEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMzAwCi0KLW5hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJIHsKLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgSW1hZ2VUb0NvbnRlbnRF
ZGl0YWJsZSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImltYWdlLWFuZC1jb250ZW50
ZWRpdGFibGUiXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHRO
UyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZp
ZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2lu
dE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIEVYUEVDVF9U
UlVFKFt3ZWJWaWV3IGVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk7Ci0KLSAgICBOU0FycmF5
ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIG9ic2VydmVk
RXZlbnROYW1lc107Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWlu
c09iamVjdDpEYXRhSW50ZXJhY3Rpb25FbnRlckV2ZW50TmFtZV0pOwotICAgIEVYUEVDVF9UUlVF
KFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uT3ZlckV2
ZW50TmFtZV0pOwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNP
YmplY3Q6RGF0YUludGVyYWN0aW9uUGVyZm9ybU9wZXJhdGlvbkV2ZW50TmFtZV0pOwotICAgIGNo
ZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUoMSwgMjAxLCAy
MTUsIDE3NCkgXSwgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3Rz
XSk7Ci0gICAgY2hlY2tGaXJzdFR5cGVJc1ByZXNlbnRBbmRTZWNvbmRUeXBlSXNNaXNzaW5nKGRh
dGFJbnRlcmFjdGlvblNpbXVsYXRvci5nZXQoKSwga1VUVHlwZVBORywga1VUVHlwZUZpbGVVUkwp
OwotICAgIGNoZWNrRXN0aW1hdGVkU2l6ZShkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCks
IHsgMjE1LCAxNzQgfSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIENhblN0YXJ0
RHJhZ09uRW5vcm1vdXNJbWFnZSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjxpbWcgc3Jj
PSdlbm9ybW91cy5zdmcnPjwvaW1nPiJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0
aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsK
LQotICAgIE5TQXJyYXkgKnJlZ2lzdGVyZWRUeXBlcyA9IFtbZGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0IHJlZ2lzdGVyZWRUeXBlSWRlbnRp
ZmllcnNdOwotICAgIEVYUEVDVF9XS19TVFJFUSgoTlNTdHJpbmcgKilrVVRUeXBlU2NhbGFibGVW
ZWN0b3JHcmFwaGljcywgW3JlZ2lzdGVyZWRUeXBlcyBmaXJzdE9iamVjdF0pOwotfQotCi1URVNU
KERhdGFJbnRlcmFjdGlvblRlc3RzLCBJbWFnZVRvVGV4dGFyZWEpCi17Ci0gICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRl
c3RQYWdlTmFtZWQ6QCJpbWFnZS1hbmQtdGV4dGFyZWEiXTsKLQotICAgIGF1dG8gZGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAw
LCAzMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVd
KTsKLQotICAgIE5TQXJyYXkgKm9ic2VydmVkRXZlbnROYW1lcyA9IFtkYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3Igb2JzZXJ2ZWRFdmVudE5hbWVzXTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRF
dmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbkVudGVyRXZlbnROYW1lXSk7
Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpEYXRh
SW50ZXJhY3Rpb25PdmVyRXZlbnROYW1lXSk7Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZl
bnROYW1lcyBjb250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25QZXJmb3JtT3BlcmF0aW9uRXZl
bnROYW1lXSk7Ci0gICAgY2hlY2tGaXJzdFR5cGVJc1ByZXNlbnRBbmRTZWNvbmRUeXBlSXNNaXNz
aW5nKGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5nZXQoKSwga1VUVHlwZVBORywga1VUVHlwZUZp
bGVVUkwpOwotICAgIGNoZWNrRXN0aW1hdGVkU2l6ZShkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Iu
Z2V0KCksIHsgMjE1LCAxNzQgfSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIElt
YWdlSW5MaW5rVG9JbnB1dCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImltYWdlLWlu
LWxpbmstYW5kLWlucHV0Il07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9
IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmll
dzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9t
OkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBF
WFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8iLCBbd2ViVmlldyBlZGl0b3JW
YWx1ZV0uVVRGOFN0cmluZyk7Ci0gICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBb
IG1ha2VDR1JlY3RWYWx1ZSgxMDEsIDI0MSwgMjA1NywgMjMyKSBdLCBbZGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKLSAgICBjaGVja1N1Z2dlc3RlZE5hbWVB
bmRFc3RpbWF0ZWRTaXplKGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5nZXQoKSwgQCJpY29uLnBu
ZyIsIHsgMjE1LCAxNzQgfSk7Ci0gICAgY2hlY2tUeXBlSWRlbnRpZmllcklzUmVnaXN0ZXJlZEF0
SW5kZXgoZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmdldCgpLCAoTlNTdHJpbmcgKilrVVRUeXBl
UE5HLCAwKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgSW1hZ2VJbkxpbmtXaXRo
b3V0SFJFRlRvSW5wdXQpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsK
LSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJpbWFnZS1pbi1s
aW5rLWFuZC1pbnB1dCJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJsaW5rLmhyZWYgPSAnJyJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdl
YlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVu
RnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0g
ICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0pOwotICAgIGNoZWNr
RXN0aW1hdGVkU2l6ZShkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCksIHsgMjE1LCAxNzQg
fSk7Ci0gICAgY2hlY2tUeXBlSWRlbnRpZmllcklzUmVnaXN0ZXJlZEF0SW5kZXgoZGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yLmdldCgpLCAoTlNTdHJpbmcgKilrVVRUeXBlUE5HLCAwKTsKLX0KLQot
VEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgSW1hZ2VEb2VzTm90VXNlRWxlbWVudFNpemVBc0Vz
dGltYXRlZFNpemUpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAg
ICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJnaWYtYW5kLWZpbGUt
aW5wdXQiXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhb
W0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcu
Z2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206IHsgMTAwLCAx
MDAgfSB0bzogeyAxMDAsIDMwMCB9XTsKLQotICAgIGNoZWNrVHlwZUlkZW50aWZpZXJJc1JlZ2lz
dGVyZWRBdEluZGV4KGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5nZXQoKSwgKE5TU3RyaW5nICop
a1VUVHlwZUdJRiwgMCk7Ci0gICAgY2hlY2tTdWdnZXN0ZWROYW1lQW5kRXN0aW1hdGVkU2l6ZShk
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCksIEAiYXBwbGUuZ2lmIiwgeyA1MiwgNjQgfSk7
Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJhcHBsZS5naWYgKGltYWdlL2dpZikiLCBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnRleHRDb250ZW50Il0pOwotfQot
Ci1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBDb250ZW50RWRpdGFibGVUb0NvbnRlbnRFZGl0
YWJsZSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIGF1dG8g
ZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIFt3ZWJW
aWV3IGxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOwotICAg
IFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igd2FpdEZvcklucHV0U2Vzc2lvbl07Ci0gICAgW2Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNH
UG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfRVEoW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAInNvdXJjZS50ZXh0Q29udGVudCJdLmxlbmd0aCwgMFVMKTsK
LSAgICBFWFBFQ1RfV0tfU1RSRVEoIkhlbGxvIHdvcmxkIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdLlVURjhTdHJpbmcpOwotCi0g
ICAgTlNBcnJheSAqb2JzZXJ2ZWRFdmVudE5hbWVzID0gW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciBvYnNlcnZlZEV2ZW50TmFtZXNdOwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFt
ZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uRW50ZXJFdmVudE5hbWVdKTsKLSAgICBF
WFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFj
dGlvbk92ZXJFdmVudE5hbWVdKTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVz
IGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvblBlcmZvcm1PcGVyYXRpb25FdmVudE5hbWVd
KTsKLSAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgbWFrZUNHUmVjdFZhbHVl
KDEsIDIwMSwgOTYxLCAyMjcpIF0sIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgZmluYWxTZWxl
Y3Rpb25SZWN0c10pOwotICAgIGNoZWNrUmljaFRleHRUeXBlUHJlY2VkZXNQbGFpblRleHRUeXBl
KGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5nZXQoKSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0
aW9uVGVzdHMsIENvbnRlbnRFZGl0YWJsZVRvVGV4dGFyZWEpCi17Ci0gICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9
IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmll
dzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VOYW1lZDpAImNv
bnRlbnRlZGl0YWJsZS1hbmQtdGV4dGFyZWEiXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yIHdhaXRGb3JJbnB1dFNlc3Npb25dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwot
Ci0gICAgRVhQRUNUX0VRKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJz
b3VyY2UudGV4dENvbnRlbnQiXS5sZW5ndGgsIDBVTCk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJI
ZWxsbyB3b3JsZCIsIFt3ZWJWaWV3IGVkaXRvclZhbHVlXS5VVEY4U3RyaW5nKTsKLQotICAgIE5T
QXJyYXkgKm9ic2VydmVkRXZlbnROYW1lcyA9IFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igb2Jz
ZXJ2ZWRFdmVudE5hbWVzXTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNv
bnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbkVudGVyRXZlbnROYW1lXSk7Ci0gICAgRVhQRUNU
X1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25P
dmVyRXZlbnROYW1lXSk7Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250
YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25QZXJmb3JtT3BlcmF0aW9uRXZlbnROYW1lXSk7Ci0g
ICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1ZSg2LCAy
MDMsIDk5MCwgMjMyKSBdLCBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9u
UmVjdHNdKTsKLSAgICBjaGVja1JpY2hUZXh0VHlwZVByZWNlZGVzUGxhaW5UZXh0VHlwZShkYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCkpOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRl
c3RzLCBDb250ZW50RWRpdGFibGVNb3ZlUGFyYWdyYXBocykKLXsKLSAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtl
KDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0g
YWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3
OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIFt3ZWJWaWV3IGxvYWRUZXN0UGFnZU5hbWVkOkAidHdv
LXBhcmFncmFwaC1jb250ZW50ZWRpdGFibGUiXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yIHdhaXRGb3JJbnB1dFNlc3Npb25dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgyNTAsIDQ1MCldOwot
Ci0gICAgTlNTdHJpbmcgKmZpbmFsVGV4dENvbnRlbnQgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il07Ci0gICAgTlNVSW50ZWdlciBm
aXJzdFBhcmFncmFwaE9mZnNldCA9IFtmaW5hbFRleHRDb250ZW50IHJhbmdlT2ZTdHJpbmc6QCJU
aGlzIGlzIHRoZSBmaXJzdCBwYXJhZ3JhcGgiXS5sb2NhdGlvbjsKLSAgICBOU1VJbnRlZ2VyIHNl
Y29uZFBhcmFncmFwaE9mZnNldCA9IFtmaW5hbFRleHRDb250ZW50IHJhbmdlT2ZTdHJpbmc6QCJU
aGlzIGlzIHRoZSBzZWNvbmQgcGFyYWdyYXBoIl0ubG9jYXRpb247Ci0KLSAgICBFWFBFQ1RfRkFM
U0UoZmlyc3RQYXJhZ3JhcGhPZmZzZXQgPT0gTlNOb3RGb3VuZCk7Ci0gICAgRVhQRUNUX0ZBTFNF
KHNlY29uZFBhcmFncmFwaE9mZnNldCA9PSBOU05vdEZvdW5kKTsKLSAgICBFWFBFQ1RfR1QoZmly
c3RQYXJhZ3JhcGhPZmZzZXQsIHNlY29uZFBhcmFncmFwaE9mZnNldCk7Ci0gICAgY2hlY2tTZWxl
Y3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1ZSgxOTAsIDEwMCwgMTMwLCAy
MCksIG1ha2VDR1JlY3RWYWx1ZSgwLCAxMjAsIDMyMCwgMTAwKSwgbWFrZUNHUmVjdFZhbHVlKDAs
IDIyMCwgMjUyLCAyMCkgXSwgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBmaW5hbFNlbGVjdGlv
blJlY3RzXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERyYWdJbWFnZUZyb21D
b250ZW50RWRpdGFibGUpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsK
LSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0K
LSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJjb250ZW50ZWRp
dGFibGUtYW5kLXRhcmdldCJdOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJv
bTpDR1BvaW50TWFrZSgxMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAg
IEVYUEVDVF9XS19TVFJFUSgiUEFTUyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJ0YXJnZXQudGV4dENvbnRlbnQiXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9u
VGVzdHMsIFRleHRBcmVhVG9JbnB1dCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwg
NTAwKV0pOwotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKLQotICAgIFt3ZWJWaWV3IGxvYWRUZXN0UGFnZU5hbWVkOkAidGV4dGFyZWEtdG8taW5w
dXQiXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHdhaXRGb3JJbnB1dFNlc3Npb25d
OwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAs
IDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgRVhQRUNUX0VRKFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2UudmFsdWUiXS5sZW5ndGgsIDBV
TCk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJIZWxsbyB3b3JsZCIsIFt3ZWJWaWV3IGVkaXRvclZh
bHVlXS5VVEY4U3RyaW5nKTsKLSAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsg
bWFrZUNHUmVjdFZhbHVlKDEwMSwgMjQxLCA5OTAsIDIzMikgXSwgW2RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9u
VGVzdHMsIFNpbmdsZVBsYWluVGV4dFdvcmRUeXBlSWRlbnRpZmllcnMpCi17Ci0gICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRo
V2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VOYW1l
ZDpAInRleHRhcmVhLXRvLWlucHV0Il07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciB3
YWl0Rm9ySW5wdXRTZXNzaW9uXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAic291cmNlLnZhbHVlID0gJ3BuZXVtb25vdWx0cmFtaWNyb3Njb3BpY3NpbGljb3Zv
bGNhbm9jb25pb3NpcyciXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAic291cmNlLnNlbGVjdGlvblN0YXJ0ID0gMCJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2Uuc2VsZWN0aW9uRW5kID0gc291cmNlLnZhbHVl
Lmxlbmd0aCJdOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50
TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgTlNJdGVtUHJv
dmlkZXIgKml0ZW1Qcm92aWRlciA9IFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc291cmNlSXRl
bVByb3ZpZGVyc10uZmlyc3RPYmplY3Q7Ci0gICAgTlNBcnJheSAqcmVnaXN0ZXJlZFR5cGVzID0g
W2l0ZW1Qcm92aWRlciByZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzXTsKLSAgICBFWFBFQ1RfRVEo
MVVMLCByZWdpc3RlcmVkVHlwZXMuY291bnQpOwotICAgIEVYUEVDVF9XS19TVFJFUShbKE5TU3Ry
aW5nICopa1VUVHlwZVVURjhQbGFpblRleHQgVVRGOFN0cmluZ10sIFtyZWdpc3RlcmVkVHlwZXMu
Zmlyc3RPYmplY3QgVVRGOFN0cmluZ10pOwotICAgIEVYUEVDVF9FUShbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic291cmNlLnZhbHVlIl0ubGVuZ3RoLCAwVUwpOwotICAg
IEVYUEVDVF9FUShVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlSW5saW5lLCBpdGVtUHJvdmlk
ZXIucHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGUpOwotICAgIEVYUEVDVF9XS19TVFJFUSgicG5l
dW1vbm91bHRyYW1pY3Jvc2NvcGljc2lsaWNvdm9sY2Fub2Nvbmlvc2lzIiwgW3dlYlZpZXcgZWRp
dG9yVmFsdWVdLlVURjhTdHJpbmcpOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBT
aW5nbGVQbGFpblRleHRVUkxUeXBlSWRlbnRpZmllcnMpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldKTsKLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFk
b3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3
ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VOYW1lZDpAInRleHRh
cmVhLXRvLWlucHV0Il07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciB3YWl0Rm9ySW5w
dXRTZXNzaW9uXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
c291cmNlLnZhbHVlID0gJ2h0dHBzOi8vd2Via2l0Lm9yZy8nIl07Ci0gICAgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNvdXJjZS5zZWxlY3Rpb25TdGFydCA9IDAiXTsK
LSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic291cmNlLnNlbGVj
dGlvbkVuZCA9IHNvdXJjZS52YWx1ZS5sZW5ndGgiXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAz
MDApXTsKLQotICAgIE5TSXRlbVByb3ZpZGVyICppdGVtUHJvdmlkZXIgPSBbZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0OwotICAgIE5TQXJy
YXkgKnJlZ2lzdGVyZWRUeXBlcyA9IFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJlZFR5cGVJZGVudGlm
aWVyc107Ci0gICAgRVhQRUNUX0VRKDJVTCwgcmVnaXN0ZXJlZFR5cGVzLmNvdW50KTsKLSAgICBF
WFBFQ1RfV0tfU1RSRVEoWyhOU1N0cmluZyAqKWtVVFR5cGVVUkwgVVRGOFN0cmluZ10sIFtyZWdp
c3RlcmVkVHlwZXMuZmlyc3RPYmplY3QgVVRGOFN0cmluZ10pOwotICAgIEVYUEVDVF9XS19TVFJF
UShbKE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRleHQgVVRGOFN0cmluZ10sIFtyZWdpc3Rl
cmVkVHlwZXMubGFzdE9iamVjdCBVVEY4U3RyaW5nXSk7Ci0gICAgRVhQRUNUX0VRKDBVTCwgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNvdXJjZS52YWx1ZSJdLmxlbmd0
aCk7Ci0gICAgRVhQRUNUX0VRKFVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVJbmxpbmUsIGl0
ZW1Qcm92aWRlci5wcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZSk7Ci0gICAgRVhQRUNUX1dLX1NU
UkVRKCJodHRwczovL3dlYmtpdC5vcmcvIiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVdLlVURjhTdHJp
bmcpOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBMaW5rVG9JbnB1dCkKLXsKLSAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImxpbmstYW5kLWlucHV0Il07Ci0KLSAgICBhdXRvIGRh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRN
YWtlKDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxl
LmNvbS8iLCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0uVVRGOFN0cmluZyk7Ci0KLSAgICBfX2Jsb2Nr
IGJvb2wgZG9uZUxvYWRpbmdVUkwgPSBmYWxzZTsKLSAgICBVSUl0ZW1Qcm92aWRlciAqc291cmNl
SXRlbVByb3ZpZGVyID0gW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzb3VyY2VJdGVtUHJvdmlk
ZXJzXS5maXJzdE9iamVjdDsKLSAgICBbc291cmNlSXRlbVByb3ZpZGVyIGxvYWRPYmplY3RPZkNs
YXNzOltOU1VSTCBjbGFzc10gY29tcGxldGlvbkhhbmRsZXI6XihpZCBvYmplY3QsIE5TRXJyb3Ig
KmVycm9yKSB7Ci0gICAgICAgIE5TVVJMICp1cmwgPSBvYmplY3Q7Ci0gICAgICAgIEVYUEVDVF9X
S19TVFJFUSgiSGVsbG8gd29ybGQiLCB1cmwuX3RpdGxlLlVURjhTdHJpbmcgPzogIiIpOwotICAg
ICAgICBkb25lTG9hZGluZ1VSTCA9IHRydWU7Ci0gICAgfV07Ci0gICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lTG9hZGluZ1VSTCk7Ci0KLSAgICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50
TmFtZXMgPSBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIG9ic2VydmVkRXZlbnROYW1lc107Ci0g
ICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpEYXRhSW50
ZXJhY3Rpb25FbnRlckV2ZW50TmFtZV0pOwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50
TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uT3ZlckV2ZW50TmFtZV0pOwotICAg
IEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVy
YWN0aW9uUGVyZm9ybU9wZXJhdGlvbkV2ZW50TmFtZV0pOwotICAgIGNoZWNrU2VsZWN0aW9uUmVj
dHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUoMTAxLCAyNzMsIDIwNTcsIDIzMikgXSwg
W2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7Ci0gICAgY2hl
Y2tUeXBlSWRlbnRpZmllcklzUmVnaXN0ZXJlZEF0SW5kZXgoZGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yLmdldCgpLCAoTlNTdHJpbmcgKilrVVRUeXBlVVJMLCAwKTsKLX0KLQotVEVTVChEYXRhSW50
ZXJhY3Rpb25UZXN0cywgQmFja2dyb3VuZEltYWdlTGlua1RvSW5wdXQpCi17Ci0gICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9h
ZFRlc3RQYWdlTmFtZWQ6QCJiYWNrZ3JvdW5kLWltYWdlLWxpbmstYW5kLWlucHV0Il07Ci0KLSAg
ICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAg
W2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRv
OkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8v
d3d3LmFwcGxlLmNvbS8iLCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0uVVRGOFN0cmluZyk7Ci0KLSAg
ICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
IG9ic2VydmVkRXZlbnROYW1lc107Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1l
cyBjb250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25FbnRlckV2ZW50TmFtZV0pOwotICAgIEVY
UEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0
aW9uT3ZlckV2ZW50TmFtZV0pOwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMg
Y29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uUGVyZm9ybU9wZXJhdGlvbkV2ZW50TmFtZV0p
OwotICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUo
MTAxLCAyNDEsIDIwNTcsIDIzMikgXSwgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBmaW5hbFNl
bGVjdGlvblJlY3RzXSk7Ci0gICAgY2hlY2tUeXBlSWRlbnRpZmllcklzUmVnaXN0ZXJlZEF0SW5k
ZXgoZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmdldCgpLCAoTlNTdHJpbmcgKilrVVRUeXBlVVJM
LCAwKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgQ2FuUHJldmVudFN0YXJ0KQot
ewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3lu
Y2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAicHJldmVudC1zdGFydCJdOwotCi0gICAgYXV0
byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1Bv
aW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgRVhQRUNUX0VRKERhdGFJbnRlcmFjdGlvbkNhbmNl
bGxlZCwgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBwaGFzZV0pOwotICAgIEVYUEVDVF9GQUxT
RShbd2ViVmlldyBlZGl0b3JDb250YWluc0ltYWdlRWxlbWVudF0pOwotCi0gICAgTlNBcnJheSAq
b2JzZXJ2ZWRFdmVudE5hbWVzID0gW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBvYnNlcnZlZEV2
ZW50TmFtZXNdOwotICAgIEVYUEVDVF9GQUxTRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5z
T2JqZWN0OkRhdGFJbnRlcmFjdGlvbkVudGVyRXZlbnROYW1lXSk7Ci0gICAgRVhQRUNUX0ZBTFNF
KFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uT3ZlckV2
ZW50TmFtZV0pOwotICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBdLCBbZGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKLX0KLQotVEVTVChE
YXRhSW50ZXJhY3Rpb25UZXN0cywgQ2FuUHJldmVudE9wZXJhdGlvbikKLXsKLSAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
VGVzdFBhZ2VOYW1lZDpAInByZXZlbnQtb3BlcmF0aW9uIl07Ci0KLSAgICBhdXRvIGRhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxs
b2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEw
MCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfRkFMU0UoW3dlYlZpZXcgZWRpdG9yQ29udGFpbnNJbWFn
ZUVsZW1lbnRdKTsKLQotICAgIE5TQXJyYXkgKm9ic2VydmVkRXZlbnROYW1lcyA9IFtkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3Igb2JzZXJ2ZWRFdmVudE5hbWVzXTsKLSAgICBFWFBFQ1RfVFJVRShb
b2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbkVudGVyRXZl
bnROYW1lXSk7Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09i
amVjdDpEYXRhSW50ZXJhY3Rpb25PdmVyRXZlbnROYW1lXSk7Ci0gICAgY2hlY2tTZWxlY3Rpb25S
ZWN0c1dpdGhMb2dnaW5nKEBbIF0sIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgZmluYWxTZWxl
Y3Rpb25SZWN0c10pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFbnRlckFuZExl
YXZlRXZlbnRzKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAibGluay1hbmQtaW5wdXQi
XTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCld
KTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAw
LCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCA0NTApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgi
IiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVdLlVURjhTdHJpbmcpOwotCi0gICAgTlNBcnJheSAqb2Jz
ZXJ2ZWRFdmVudE5hbWVzID0gW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBvYnNlcnZlZEV2ZW50
TmFtZXNdOwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmpl
Y3Q6RGF0YUludGVyYWN0aW9uRW50ZXJFdmVudE5hbWVdKTsKLSAgICBFWFBFQ1RfVFJVRShbb2Jz
ZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbk92ZXJFdmVudE5h
bWVdKTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0
OkRhdGFJbnRlcmFjdGlvbkxlYXZlRXZlbnROYW1lXSk7Ci0gICAgRVhQRUNUX0ZBTFNFKFtvYnNl
cnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uUGVyZm9ybU9wZXJh
dGlvbkV2ZW50TmFtZV0pOwotICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBd
LCBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKLX0KLQot
VEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgQ2FuU3RhcnREcmFnT25EaXZXaXRoRHJhZ2dhYmxl
QXR0cmlidXRlKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiY3VzdG9tLWRyYWdnYWJs
ZS1kaXYiXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhb
W0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcu
Z2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1h
a2UoMTAwLCAxMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMjUwKV07Ci0KLSAgICBFWFBFQ1RfR1Qo
W2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5jb3VudCwgMFVM
KTsKLSAgICBOU0l0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyID0gW2RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdDsKLSAgICBFWFBFQ1RfRVEo
VUlQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUlubGluZSwgaXRlbVByb3ZpZGVyLnByZWZlcnJl
ZFByZXNlbnRhdGlvblN0eWxlKTsKLSAgICBFWFBFQ1RfVFJVRShbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiISFkZXN0aW5hdGlvbi5xdWVyeVNlbGVjdG9yKCcjaXRlbScp
Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUShAIlBBU1MiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAiaXRlbS50ZXh0Q29udGVudCJdKTsKLX0KLQotVEVTVChEYXRhSW50
ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VQbGFpblRleHRUb0lGcmFtZSkKLXsKLSAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlMb2FkVGVzdFBhZ2VOYW1lZDpAImNvbnRlbnRlZGl0YWJsZS1pbi1pZnJhbWUiXTsKLQotICAg
IGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0
XSk7Ci0gICAgW2l0ZW1Qcm92aWRlciByZWdpc3Rlck9iamVjdDpAIkhlbGxvIHdvcmxkIiB2aXNp
YmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07
Ci0KLSAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW3NpbXVsYXRv
ciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAg
IFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgwLCAwKSB0bzpDR1BvaW50TWFrZSgxNjAs
IDI1MCldOwotCi0gICAgYXV0byBjb250YWluZXJMZWZ0ID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0
Il0uZmxvYXRWYWx1ZTsKLSAgICBhdXRvIGNvbnRhaW5lclRvcCA9IFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCku
dG9wIl0uZmxvYXRWYWx1ZTsKLSAgICBhdXRvIGNvbnRhaW5lcldpZHRoID0gW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKS53aWR0aCJdLmZsb2F0VmFsdWU7Ci0gICAgYXV0byBjb250YWluZXJIZWlnaHQgPSBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY29udGFpbmVyLmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpLmhlaWdodCJdLmZsb2F0VmFsdWU7Ci0gICAgY2hlY2tEcmFnQ2FyZXRSZWN0
SXNDb250YWluZWRJblJlY3QoW3NpbXVsYXRvciBsYXN0S25vd25EcmFnQ2FyZXRSZWN0XSwgQ0dS
ZWN0TWFrZShjb250YWluZXJMZWZ0LCBjb250YWluZXJUb3AsIGNvbnRhaW5lcldpZHRoLCBjb250
YWluZXJIZWlnaHQpKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxT
b3VyY2VJbmxpbmVUZXh0VG9GaWxlSW5wdXQpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6
QCJmaWxlLXVwbG9hZGluZyJdOwotCi0gICAgYXV0byBzaW11bGF0ZWRJdGVtUHJvdmlkZXIgPSBh
ZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbc2ltdWxhdGVkSXRl
bVByb3ZpZGVyIHNldFByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlOlVJUHJlZmVycmVkUHJlc2Vu
dGF0aW9uU3R5bGVJbmxpbmVdOwotICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXIgcmVnaXN0ZXJP
YmplY3Q6QCJUaGlzIGl0ZW0gcHJvdmlkZXIgcmVxdWVzdGVkIGlubGluZSBwcmVzZW50YXRpb24g
c3R5bGUuIiB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5
QWxsXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3Zp
ZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAwKSB0bzpDR1BvaW50TWFr
ZSgxMDAsIDEwMCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0pOwotfQotCi1URVNUKERhdGFJ
bnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUpTT05Ub0ZpbGVJbnB1dCkKLXsKLSAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2FkaW5nIl07Ci0KLSAgICBhdXRvIHNpbXVs
YXRlZEpTT05JdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGlu
aXRdKTsKLSAgICBOU0RhdGEgKmpzb25EYXRhID0gW0AieyBcImZvb1wiOiBcImJhclwiLCAgXCJi
YXJcIjogXCJiYXpcIiB9IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107
Ci0gICAgW3NpbXVsYXRlZEpTT05JdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRp
b25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSlNPTiB3aXRoRGF0YTpqc29u
RGF0YV07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tE
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3Lmdl
dCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92
aWRlcnM6QFsgc2ltdWxhdGVkSlNPTkl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAxMDApIHRvOkNHUG9p
bnRNYWtlKDEwMCwgMTAwKV07Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoImFwcGxpY2F0aW9uL2pz
b24iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVl
Il0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUltYWdl
VG9GaWxlSW5wdXQpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAg
ICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGlu
ZyJdOwotCi0gICAgYXV0byBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tV
SUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIE5TRGF0YSAqaW1hZ2VEYXRhID0gVUlJ
bWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSk7Ci0gICAgW3NpbXVs
YXRlZEltYWdlSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlk
ZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUpQRUcgd2l0aERhdGE6aW1hZ2VEYXRhXTsKLQot
ICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAg
ICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBz
aW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAxMDApIHRvOkNHUG9pbnRNYWtlKDEw
MCwgMTAwKV07Ci0KLSAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07Ci0gICAgRVhQRUNUX1dLX1NU
UkVRKCJpbWFnZS9qcGVnIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7Ci19Ci0KLVRFU1QoRGF0
YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlSFRNTFRvVXBsb2FkQXJlYSkKLXsKLSAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2FkaW5nIl07Ci0KLSAgICBhdXRvIHNp
bXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2Nd
IGluaXRdKTsKLSAgICBOU0RhdGEgKmh0bWxEYXRhID0gW0AiPGJvZHkgY29udGVudGVkaXRhYmxl
PjwvYm9keT4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKLSAgICBb
c2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5
cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOmh0bWxEYXRhXTsK
LSAgICBbc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciBzZXRTdWdnZXN0ZWROYW1lOkAiaW5kZXgu
aHRtbCJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtb
RGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5n
ZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0U2hvdWxkQWxsb3dNb3Zl
T3BlcmF0aW9uOk5PXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFs
SXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAg
IFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDMwMCkg
dG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIE5TU3RyaW5nICpvdXRwdXRWYWx1ZSA9
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXTsK
LSAgICBFWFBFQ1RfV0tfU1RSRVEoInRleHQvaHRtbCIsIG91dHB1dFZhbHVlLlVURjhTdHJpbmcp
OwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZU1vdmVPcGVy
YXRpb25Ob3RBbGxvd2VkKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7
Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxv
YWRpbmciXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidXBs
b2FkLmRyb3BFZmZlY3QgPSAnbW92ZSciXTsKLQotICAgIGF1dG8gc2ltdWxhdGVkSFRNTEl0ZW1Q
cm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIE5T
RGF0YSAqaHRtbERhdGEgPSBbQCI8Ym9keSBjb250ZW50ZWRpdGFibGU+PC9ib2R5PiIgZGF0YVVz
aW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICAgIFtzaW11bGF0ZWRIVE1MSXRl
bVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5T
U3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERhdGE6aHRtbERhdGFdOwotCi0gICAgYXV0byBkYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
IGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3Igc2V0U2hvdWxkQWxsb3dNb3ZlT3BlcmF0aW9uOk5PXTsKLSAgICBbZGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0
ZWRIVE1MSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDMwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDAp
XTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25U
ZXN0cywgRXh0ZXJuYWxTb3VyY2VaSVBBcmNoaXZlQW5kVVJMVG9TaW5nbGVGaWxlSW5wdXQpCi17
Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5j
aHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOwotCi0gICAgYXV0
byBhcmNoaXZlUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRd
KTsKLSAgICBbYXJjaGl2ZVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlw
ZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZVppcEFyY2hpdmUgd2l0aERhdGE6dGVzdFpJ
UEFyY2hpdmUoKV07Ci0KLSAgICBhdXRvIHVybFByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVBy
b3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW3VybFByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OltO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93ZWJraXQub3JnIl0gdmlzaWJpbGl0eTpVSUl0
ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOwotCi0gICAgYXV0
byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGFyY2hpdmVQ
cm92aWRlci5nZXQoKSwgdXJsUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAwKSB0bzpDR1BvaW50TWFrZSgx
MDAsIDEwMCldOwotCi0gICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOwotICAgIEVYUEVDVF9XS19T
VFJFUSgiYXBwbGljYXRpb24vemlwIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7Ci19Ci0KLVRF
U1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlWklQQXJjaGl2ZVRvVXBsb2Fk
QXJlYSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2FkaW5nIl07Ci0K
LSAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10g
aW5pdF0pOwotICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JU
eXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlWmlwQXJjaGl2ZSB3aXRoRGF0YTp0ZXN0
WklQQXJjaGl2ZSgpXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRv
cHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFs
SXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMzAwKSB0bzpDR1BvaW50TWFr
ZSgxMDAsIDMwMCldOwotCi0gICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOwotICAgIEVYUEVDVF9X
S19TVFJFUSgiYXBwbGljYXRpb24vemlwIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7Ci19Ci0K
LVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlSW1hZ2VBbmRIVE1MVG9T
aW5nbGVGaWxlSW5wdXQpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsK
LSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9h
ZGluZyJdOwotCi0gICAgYXV0byBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciA9IGFkb3B0TlMo
W1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIE5TRGF0YSAqaW1hZ2VEYXRhID0g
VUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSk7Ci0gICAgW3Np
bXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlw
ZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUpQRUcgd2l0aERhdGE6aW1hZ2VEYXRhXTsK
LQotICAgIGF1dG8gc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIE5TRGF0YSAqaHRtbERhdGEgPSBbQCI8Ym9keSBj
b250ZW50ZWRpdGFibGU+PC9ib2R5PiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5j
b2RpbmddOwotICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJl
c2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERh
dGE6aHRtbERhdGFdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9w
dE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2Vi
Vmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJ
dGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0KCksIHNpbXVsYXRl
ZEltYWdlSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAxMDAp
XTsKLQotICAgIE5TU3RyaW5nICpvdXRwdXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIiIs
IG91dHB1dFZhbHVlLlVURjhTdHJpbmcpOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3Rz
LCBFeHRlcm5hbFNvdXJjZUltYWdlQW5kSFRNTFRvTXVsdGlwbGVGaWxlSW5wdXQpCi17Ci0gICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91
c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOwotICAgIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJpbnB1dC5zZXRBdHRyaWJ1dGUoJ211bHRpcGxl
JywgJycpIl07Ci0KLSAgICBhdXRvIHNpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyID0gYWRvcHRO
UyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgTlNEYXRhICppbWFnZURhdGEg
PSBVSUltYWdlSlBFR1JlcHJlc2VudGF0aW9uKHRlc3RJY29uSW1hZ2UoKSwgMC41KTsKLSAgICBb
c2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JU
eXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSlBFRyB3aXRoRGF0YTppbWFnZURhdGFd
OwotCi0gICAgYXV0byBzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRl
bVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgTlNEYXRhICpodG1sRGF0YSA9IFtAIjxib2R5
IGNvbnRlbnRlZGl0YWJsZT48L2JvZHk+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdF
bmNvZGluZ107Ci0gICAgW3NpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVw
cmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3aXRo
RGF0YTpodG1sRGF0YV07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFk
b3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3
ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5h
bEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlci5nZXQoKSwgc2ltdWxh
dGVkSW1hZ2VJdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDEw
MCldOwotCi0gICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOwotICAgIEVYUEVDVF9XS19TVFJFUSgi
aW1hZ2UvanBlZywgdGV4dC9odG1sIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7Ci19Ci0KLVRF
U1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlSW1hZ2VBbmRIVE1MVG9VcGxv
YWRBcmVhKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsK
LQotICAgIGF1dG8gc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVt
UHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBOU0RhdGEgKmltYWdlRGF0YSA9IFVJSW1hZ2VK
UEVHUmVwcmVzZW50YXRpb24odGVzdEljb25JbWFnZSgpLCAwLjUpOwotICAgIFtzaW11bGF0ZWRJ
bWFnZUl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlm
aWVyOihOU1N0cmluZyAqKWtVVFR5cGVKUEVHIHdpdGhEYXRhOmltYWdlRGF0YV07Ci0KLSAgICBh
dXRvIGZpcnN0U2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92
aWRlciBhbGxvY10gaW5pdF0pOwotICAgIE5TRGF0YSAqZmlyc3RIVE1MRGF0YSA9IFtAIjxib2R5
IGNvbnRlbnRlZGl0YWJsZT48L2JvZHk+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdF
bmNvZGluZ107Ci0gICAgW2ZpcnN0U2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciByZWdpc3RlckRh
dGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1M
IHdpdGhEYXRhOmZpcnN0SFRNTERhdGFdOwotCi0gICAgYXV0byBzZWNvbmRTaW11bGF0ZWRIVE1M
SXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0g
ICAgTlNEYXRhICpzZWNvbmRIVE1MRGF0YSA9IFtAIjxodG1sPjxib2R5PmhlbGxvIHdvcmxkPC9i
b2R5PjwvaHRtbD4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKLSAg
ICBbc2Vjb25kU2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRh
dGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOnNl
Y29uZEhUTUxEYXRhXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRv
cHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldFNob3VsZEFs
bG93TW92ZU9wZXJhdGlvbjpOT107Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRF
eHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIuZ2V0KCks
IGZpcnN0U2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlci5nZXQoKSwgc2Vjb25kU2ltdWxhdGVkSFRN
TEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1
bkZyb206Q0dQb2ludE1ha2UoMjAwLCAzMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0K
LSAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJpbWFnZS9q
cGVnLCB0ZXh0L2h0bWwsIHRleHQvaHRtbCIsIG91dHB1dFZhbHVlLlVURjhTdHJpbmcpOwotfQot
Ci1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUhUTUxUb0NvbnRlbnRF
ZGl0YWJsZSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50
ZWRpdGFibGUiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
Z2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkiXTsKLQotICAgIGF1dG8gZGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBhdXRvIGl0ZW1Qcm92aWRl
ciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIE5TRGF0YSAq
aHRtbERhdGEgPSBbQCI8aDE+VGhpcyBpcyBhIHRlc3Q8L2gxPiIgZGF0YVVzaW5nRW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVw
cmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3aXRo
RGF0YTpodG1sRGF0YV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5h
bEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1h
a2UoMTAwLCAzMDApXTsKLQotICAgIE5TU3RyaW5nICp0ZXh0Q29udGVudCA9IFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXTsKLSAgICBF
WFBFQ1RfV0tfU1RSRVEoIlRoaXMgaXMgYSB0ZXN0IiwgdGV4dENvbnRlbnQuVVRGOFN0cmluZyk7
Ci0gICAgRVhQRUNUX1RSVUUoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
IiEhZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ2gxJykiXS5ib29sVmFsdWUpOwotfQotCi1URVNUKERh
dGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUJvbGRTeXN0ZW1BdHRyaWJ1dGVkU3Ry
aW5nVG9Db250ZW50RWRpdGFibGUpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRv
Zm9jdXMtY29udGVudGVkaXRhYmxlIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07Ci0KLSAgICBh
dXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgTlNE
aWN0aW9uYXJ5ICp0ZXh0QXR0cmlidXRlcyA9IEB7IE5TRm9udEF0dHJpYnV0ZU5hbWU6IFtVSUZv
bnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6MjBdIH07Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpy
aWNoVGV4dCA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIlRo
aXMgaXMgYSB0ZXN0IiBhdHRyaWJ1dGVzOnRleHRBdHRyaWJ1dGVzXTsKLSAgICBhdXRvIGl0ZW1Q
cm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdFdpdGhPYmplY3Q6
cmljaFRleHRdKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRl
bVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50TWFrZSgx
MDAsIDMwMCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVRKCJUaGlzIGlzIGEgdGVzdCIsIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXS5V
VEY4U3RyaW5nKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3Vy
Y2VDb2xvcmVkQXR0cmlidXRlZFN0cmluZ1RvQ29udGVudEVkaXRhYmxlKQotewotICAgIGF1dG8g
d2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNH
UmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxv
YWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOwotICAgIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVB
bGxSYW5nZXMoKSJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9w
dE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2Vi
Vmlldy5nZXQoKV0pOwotICAgIE5TRGljdGlvbmFyeSAqdGV4dEF0dHJpYnV0ZXMgPSBAeyBOU0Zv
cmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWU6IFtVSUNvbG9yIHJlZENvbG9yXSB9OwotICAgIE5T
QXR0cmlidXRlZFN0cmluZyAqcmljaFRleHQgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10g
aW5pdFdpdGhTdHJpbmc6QCJUaGlzIGlzIGEgdGVzdCIgYXR0cmlidXRlczp0ZXh0QXR0cmlidXRl
c107Ci0gICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxs
b2NdIGluaXRXaXRoT2JqZWN0OnJpY2hUZXh0XSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOwot
ICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQw
MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgicmdi
KDI1NSwgMCwgMCkiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0
Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdwJykpLmNvbG9yIl0pOwotICAg
IEVYUEVDVF9XS19TVFJFUSgiVGhpcyBpcyBhIHRlc3QiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il0uVVRGOFN0cmluZyk7Ci19Ci0K
LVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlTXVsdGlwbGVVUkxzVG9D
b250ZW50RWRpdGFibGUpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsK
LSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMt
Y29udGVudGVkaXRhYmxlIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07Ci0KLSAgICBhdXRvIGRh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgYXV0byBmaXJz
dEl0ZW0gPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbZmly
c3RJdGVtIHJlZ2lzdGVyT2JqZWN0OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93d3cu
YXBwbGUuY29tL2lwaG9uZS8iXSB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRp
b25PcHRpb25zVmlzaWJpbGl0eUFsbF07Ci0gICAgYXV0byBzZWNvbmRJdGVtID0gYWRvcHROUyhb
W1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW3NlY29uZEl0ZW0gcmVnaXN0ZXJP
YmplY3Q6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBsZS5jb20vbWFjLyJd
IHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5
QWxsXTsKLSAgICBhdXRvIHRoaXJkSXRlbSA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxv
Y10gaW5pdF0pOwotICAgIFt0aGlyZEl0ZW0gcmVnaXN0ZXJPYmplY3Q6W05TVVJMIFVSTFdpdGhT
dHJpbmc6QCJodHRwczovL3dlYmtpdC5vcmcvIl0gdmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJl
cHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOwotICAgIFtkYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGZpcnN0SXRlbS5nZXQoKSwgc2Vj
b25kSXRlbS5nZXQoKSwgdGhpcmRJdGVtLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAw
LCAzMDApXTsKLQotICAgIE5TQXJyYXkgKmRyb3BwZWRVUkxzID0gW3dlYlZpZXcgb2JqZWN0QnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAIkFycmF5LmZyb20oZWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwo
J2EnKSkubWFwKGEgPT4gYS5ocmVmKSJdOwotICAgIEVYUEVDVF9FUSgzVUwsIGRyb3BwZWRVUkxz
LmNvdW50KTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhv
bmUvIiwgZHJvcHBlZFVSTHNbMF0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93d3cu
YXBwbGUuY29tL21hYy8iLCBkcm9wcGVkVVJMc1sxXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJo
dHRwczovL3dlYmtpdC5vcmcvIiwgZHJvcHBlZFVSTHNbMl0pOwotCi0gICAgTlNBcnJheSAqbGlu
a3NTZXBhcmF0ZWRCeUxpbmUgPSBbW3dlYlZpZXcgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAImVkaXRvci5pbm5lclRleHQiXSBjb21wb25lbnRzU2VwYXJhdGVkQnlDaGFyYWN0ZXJzSW5T
ZXQ6W05TQ2hhcmFjdGVyU2V0IG5ld2xpbmVDaGFyYWN0ZXJTZXRdXTsKLSAgICBFWFBFQ1RfRVEo
M1VMLCBsaW5rc1NlcGFyYXRlZEJ5TGluZS5jb3VudCk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJo
dHRwczovL3d3dy5hcHBsZS5jb20vaXBob25lLyIsIGxpbmtzU2VwYXJhdGVkQnlMaW5lWzBdKTsK
LSAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9tYWMvIiwgbGlua3NT
ZXBhcmF0ZWRCeUxpbmVbMV0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93ZWJraXQu
b3JnLyIsIGxpbmtzU2VwYXJhdGVkQnlMaW5lWzJdKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rp
b25UZXN0cywgUmVzcGVjdHNFeHRlcm5hbFNvdXJjZUZpZGVsaXR5UmFua2luZ3MpCi17Ci0gICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91
c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07Ci0gICAg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJl
bW92ZUFsbFJhbmdlcygpIl07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9
IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmll
dzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICAvLyBIZXJlLCBvdXIgc291cmNlIGl0ZW0gcHJvdmlk
ZXIgdmVuZHMgdHdvIHJlcHJlc2VudGF0aW9uczogcGxhaW4gdGV4dCwgYW5kIHRoZW4gYW4gaW1h
Z2UuIElmIHdlIGRvbid0IHJlc3BlY3QgdGhlCi0gICAgLy8gZmlkZWxpdHkgb3JkZXIgcmVxdWVz
dGVkIGJ5IHRoZSBzb3VyY2UsIHdlJ2xsIGVuZCB1cCBhc3N1bWluZyB0aGF0IHRoZSBpbWFnZSBp
cyBhIGhpZ2hlciBmaWRlbGl0eSByZXByZXNlbnRhdGlvbgotICAgIC8vIHRoYW4gdGhlIHBsYWlu
IHRleHQsIGFuZCBlcnJvbmVvdXNseSBpbnNlcnQgdGhlIGltYWdlLiBJZiB3ZSByZXNwZWN0IHNv
dXJjZSBmaWRlbGl0aWVzLCB3ZSdsbCBpbnNlcnQgdGV4dCByYXRoZXIKLSAgICAvLyB0aGFuIGFu
IGltYWdlLgotICAgIGF1dG8gc2ltdWxhdGVkSXRlbVByb3ZpZGVyV2l0aFRleHRGaXJzdCA9IGFk
b3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtzaW11bGF0ZWRJdGVt
UHJvdmlkZXJXaXRoVGV4dEZpcnN0IHJlZ2lzdGVyT2JqZWN0OkAiSGVsbG8gd29ybGQiIHZpc2li
aWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsK
LSAgICBbc2ltdWxhdGVkSXRlbVByb3ZpZGVyV2l0aFRleHRGaXJzdCByZWdpc3Rlck9iamVjdDp0
ZXN0SWNvbkltYWdlKCkgdmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0
aW9uc1Zpc2liaWxpdHlBbGxdOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0
ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRlcldpdGhUZXh0Rmlyc3Qu
Z2V0KCkgXV07Ci0KLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2lu
dE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0gICAgRVhQRUNUX1dL
X1NUUkVRKCJIZWxsbyB3b3JsZCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXSk7Ci0gICAgRVhQRUNUX0ZBTFNFKFt3ZWJWaWV3IGVk
aXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk7Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAImVkaXRvci5pbm5lckhUTUwgPSAnJyJdOwotCi0gICAgLy8gTm93IHdl
IHJlZ2lzdGVyIHRoZSBpdGVtIHByb3ZpZGVycyBpbiByZXZlcnNlLCBhbmQgZXhwZWN0IHRoZSBp
bWFnZSB0byBiZSBpbnNlcnRlZCBpbnN0ZWFkIG9mIHRleHQuCi0gICAgYXV0byBzaW11bGF0ZWRJ
dGVtUHJvdmlkZXJXaXRoSW1hZ2VGaXJzdCA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxv
Y10gaW5pdF0pOwotICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXJXaXRoSW1hZ2VGaXJzdCByZWdp
c3Rlck9iamVjdDp0ZXN0SWNvbkltYWdlKCkgdmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJl
c2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOwotICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlk
ZXJXaXRoSW1hZ2VGaXJzdCByZWdpc3Rlck9iamVjdDpAIkhlbGxvIHdvcmxkIiB2aXNpYmlsaXR5
OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07Ci0gICAg
W2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2lt
dWxhdGVkSXRlbVByb3ZpZGVyV2l0aEltYWdlRmlyc3QuZ2V0KCkgXV07Ci0KLSAgICBbZGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9p
bnRNYWtlKDEwMCwgMzAwKV07Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il0pOwotICAgIEVY
UEVDVF9UUlVFKFt3ZWJWaWV3IGVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk7Ci19Ci0KLVRF
U1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlVVRGOFBsYWluVGV4dE9ubHkp
Ci17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxl
Il07Ci0KLSAgICBOU1N0cmluZyAqdGV4dFBheWxvYWQgPSBAIkNlY2kgbidlc3QgcGFzIHVuZSBz
dHJpbmciOwotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKLSAgICBhdXRvIHNpbXVsYXRlZEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXIgcmVnaXN0
ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooX19icmlkZ2UgTlNTdHJpbmcg
KilrVVRUeXBlVVRGOFBsYWluVGV4dCBvcHRpb25zOm5pbCBsb2FkSGFuZGxlcjpeTlNQcm9ncmVz
cyAqKFVJSXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkJsb2Nr
KQotICAgIHsKLSAgICAgICAgY29tcGxldGlvbkJsb2NrKFt0ZXh0UGF5bG9hZCBkYXRhVXNpbmdF
bmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10sIG5pbCk7Ci0gICAgICAgIHJldHVybiBbTlNQ
cm9ncmVzcyBkaXNjcmV0ZVByb2dyZXNzV2l0aFRvdGFsVW5pdENvdW50OjEwMF07Ci0gICAgfV07
Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6
QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAw
LCAzMDApXTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEodGV4dFBheWxvYWQuVVRGOFN0cmluZywgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJd
LlVURjhTdHJpbmcpOwotICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtl
Q0dSZWN0VmFsdWUoMSwgMjAxLCAxOTM2LCAyMjcpIF0sIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgZmluYWxTZWxlY3Rpb25SZWN0c10pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3Rz
LCBFeHRlcm5hbFNvdXJjZUpQRUdPbmx5KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIw
LCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAi
YXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0
V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIGF1dG8gc2ltdWxhdGVkSXRlbVByb3Zp
ZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW3NpbXVs
YXRlZEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlm
aWVyOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVKUEVHIG9wdGlvbnM6bmlsIGxvYWRIYW5k
bGVyOl5OU1Byb2dyZXNzICooVUlJdGVtUHJvdmlkZXJEYXRhTG9hZENvbXBsZXRpb25CbG9jayBj
b21wbGV0aW9uQmxvY2spCi0gICAgewotICAgICAgICBjb21wbGV0aW9uQmxvY2soVUlJbWFnZUpQ
RUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSksIG5pbCk7Ci0gICAgICAgIHJl
dHVybiBbTlNQcm9ncmVzcyBkaXNjcmV0ZVByb2dyZXNzV2l0aFRvdGFsVW5pdENvdW50OjEwMF07
Ci0gICAgfV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Q
cm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2lu
dE1ha2UoMTAwLCAzMDApXTsKLSAgICBFWFBFQ1RfVFJVRShbd2ViVmlldyBlZGl0b3JDb250YWlu
c0ltYWdlRWxlbWVudF0pOwotICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBt
YWtlQ0dSZWN0VmFsdWUoMSwgMjAxLCAyMTUsIDE3NCkgXSwgW2RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVz
dHMsIEV4dGVybmFsU291cmNlVGl0bGVkTlNVUkwpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFt
ZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07
Ci0KLSAgICBOU1VSTCAqdGl0bGVkVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczov
L3d3dy5hcHBsZS5jb20iXTsKLSAgICB0aXRsZWRVUkwuX3RpdGxlID0gQCJBcHBsZSI7Ci0gICAg
YXV0byBzaW11bGF0ZWRJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxs
b2NdIGluaXRdKTsKLSAgICBbc2ltdWxhdGVkSXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OnRp
dGxlZFVSTCB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlz
aWJpbGl0eUFsbF07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0
TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0
ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQ
b2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiQXBwbGUiLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnF1ZXJ5U2VsZWN0b3Io
J2EnKS50ZXh0Q29udGVudCJdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFw
cGxlLmNvbS8iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9y
LnF1ZXJ5U2VsZWN0b3IoJ2EnKS5ocmVmIl0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRl
c3RzLCBFeHRlcm5hbFNvdXJjZUZpbGVVUkwpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6
QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07Ci0K
LSAgICBOU1VSTCAqVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJmaWxlOi8vL3NvbWUvZmls
ZS90aGF0L2lzL25vdC9yZWFsIl07Ci0gICAgVUlJdGVtUHJvdmlkZXIgKnNpbXVsYXRlZEl0ZW1Q
cm92aWRlciA9IFtVSUl0ZW1Qcm92aWRlciBpdGVtUHJvdmlkZXJXaXRoVVJMOlVSTCB0aXRsZTpA
IiJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQo
KV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlk
ZXJzOkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRlciBdXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwg
MzAwKV07Ci0KLSAgICBFWFBFQ1RfRkFMU0UoW1t3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCIhIWVkaXRvci5xdWVyeVNlbGVjdG9yKCdhJykiXSBib29sVmFsdWVdKTsKLSAg
ICBFWFBFQ1RfV0tfU1RSRVEoIkhlbGxvIHdvcmxkXG5maWxlOi8vL3NvbWUvZmlsZS90aGF0L2lz
L25vdC9yZWFsIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3Vt
ZW50LmJvZHkuaW5uZXJUZXh0Il0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBF
eHRlcm5hbFNvdXJjZU92ZXJyaWRlRHJvcEZpbGVVcGxvYWQpCi17Ci0gICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQ
YWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOwotCi0gICAgYXV0byBzaW11bGF0ZWRJbWFnZUl0
ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAg
IE5TRGF0YSAqaW1hZ2VEYXRhID0gVUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbklt
YWdlKCksIDAuNSk7Ci0gICAgW3NpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0
YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUpQRUcg
d2l0aERhdGE6aW1hZ2VEYXRhXTsKLQotICAgIGF1dG8gc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRl
ciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIE5TRGF0YSAq
Zmlyc3RIVE1MRGF0YSA9IFtAIjxib2R5IGNvbnRlbnRlZGl0YWJsZT48L2JvZHk+IiBkYXRhVXNp
bmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107Ci0gICAgW3NpbXVsYXRlZEhUTUxJdGVt
UHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNT
dHJpbmcgKilrVVRUeXBlSFRNTCB3aXRoRGF0YTpmaXJzdEhUTUxEYXRhXTsKLSAgICBbc2ltdWxh
dGVkSFRNTEl0ZW1Qcm92aWRlciBzZXRQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZTpVSVByZWZl
cnJlZFByZXNlbnRhdGlvblN0eWxlQXR0YWNobWVudF07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2Nd
IGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciBzZXRPdmVycmlkZVBlcmZvcm1Ecm9wQmxvY2s6Xk5TQXJyYXk8VUlEcmFnSXRlbSAq
PiAqKGlkIDxVSURyb3BTZXNzaW9uPiBzZXNzaW9uKQotICAgIHsKLSAgICAgICAgRVhQRUNUX0VR
KDJVTCwgc2Vzc2lvbi5pdGVtcy5jb3VudCk7Ci0gICAgICAgIFVJRHJhZ0l0ZW0gKmZpcnN0SXRl
bSA9IHNlc3Npb24uaXRlbXNbMF07Ci0gICAgICAgIFVJRHJhZ0l0ZW0gKnNlY29uZEl0ZW0gPSBz
ZXNzaW9uLml0ZW1zWzFdOwotICAgICAgICBFWFBFQ1RfVFJVRShbZmlyc3RJdGVtLml0ZW1Qcm92
aWRlci5yZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzIGlzRXF1YWw6QFsgKE5TU3RyaW5nICopa1VU
VHlwZUpQRUcgXV0pOwotICAgICAgICBFWFBFQ1RfVFJVRShbc2Vjb25kSXRlbS5pdGVtUHJvdmlk
ZXIucmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVycyBpc0VxdWFsOkBbIChOU1N0cmluZyAqKWtVVFR5
cGVIVE1MIF1dKTsKLSAgICAgICAgcmV0dXJuIEBbIHNlY29uZEl0ZW0gXTsKLSAgICB9XTsKLSAg
ICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBz
aW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlci5nZXQoKSwgc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRl
ci5nZXQoKSBdXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2lu
dE1ha2UoMjAwLCAzMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBOU1N0cmlu
ZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
b3V0cHV0LnZhbHVlIl07Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJ0ZXh0L2h0bWwiLCBvdXRwdXRW
YWx1ZS5VVEY4U3RyaW5nKTsKLX0KLQotI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDExMDMwMAotCi1zdGF0aWMgUmV0YWluUHRyPFRlc3RXS1dlYlZpZXc+IHNldFVwVGVz
dFdlYlZpZXdGb3JEYXRhVHJhbnNmZXJJdGVtcygpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFt
ZWQ6QCJEYXRhVHJhbnNmZXJJdGVtLWdldEFzRW50cnkiXTsKLQotICAgIGF1dG8gcHJlZmVyZW5j
ZXMgPSAoV0tQcmVmZXJlbmNlc1JlZilbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0gcHJlZmVyZW5j
ZXNdOwotICAgIFdLUHJlZmVyZW5jZXNTZXREYXRhVHJhbnNmZXJJdGVtc0VuYWJsZWQocHJlZmVy
ZW5jZXMsIHRydWUpOwotICAgIFdLUHJlZmVyZW5jZXNTZXREaXJlY3RvcnlVcGxvYWRFbmFibGVk
KHByZWZlcmVuY2VzLCB0cnVlKTsKLQotICAgIHJldHVybiB3ZWJWaWV3OwotfQotCi1URVNUKERh
dGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZURhdGFUcmFuc2Zlckl0ZW1HZXRGb2xk
ZXJBc0VudHJ5KQotewotICAgIC8vIFRoZSBleHBlY3RlZCBvdXRwdXQgaXMgc29ydGVkIGJ5IGFs
cGhhYmV0aWNhbCBvcmRlciBoZXJlIGZvciBjb25zaXN0ZW50IGJlaGF2aW9yIGFjcm9zcyBkaWZm
ZXJlbnQgdGVzdCBlbnZpcm9ubWVudHMuCi0gICAgLy8gU2VlIERhdGFUcmFuc2Zlckl0ZW0tZ2V0
QXNFbnRyeS5odG1sIGZvciBtb3JlIGRldGFpbHMuCi0gICAgTlNBcnJheTxOU1N0cmluZyAqPiAq
ZXhwZWN0ZWRPdXRwdXQgPSBAWwotICAgICAgICBAIkZvdW5kIGRhdGEgdHJhbnNmZXIgaXRlbSAo
a2luZDogJ2ZpbGUnLCB0eXBlOiAnJykiLAotICAgICAgICBAIkRJUjogL3NvbWVkaXJlY3Rvcnki
LAotICAgICAgICBAIkRJUjogL3NvbWVkaXJlY3Rvcnkvc3ViZGlyZWN0b3J5MSIsCi0gICAgICAg
IEAiRElSOiAvc29tZWRpcmVjdG9yeS9zdWJkaXJlY3RvcnkyIiwKLSAgICAgICAgW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCJGSUxFOiAvc29tZWRpcmVjdG9yeS9hcmNoaXZlLnppcCAoJ2Fw
cGxpY2F0aW9uL3ppcCcsICV0dSBieXRlcykiLCB0ZXN0WklQQXJjaGl2ZSgpLmxlbmd0aF0sCi0g
ICAgICAgIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRklMRTogL3NvbWVkaXJlY3Rvcnkv
aWNvbi5wbmcgKCdpbWFnZS9wbmcnLCAldHUgYnl0ZXMpIiwgdGVzdEljb25JbWFnZURhdGEoKS5s
ZW5ndGhdLAotICAgICAgICBAIkZJTEU6IC9zb21lZGlyZWN0b3J5L3N1YmRpcmVjdG9yeTEvdGV4
dC1maWxlLTEudHh0ICgndGV4dC9wbGFpbicsIDQzIGJ5dGVzKSIsCi0gICAgICAgIEAiRklMRTog
L3NvbWVkaXJlY3Rvcnkvc3ViZGlyZWN0b3J5Mi90ZXh0LWZpbGUtMi50eHQgKCd0ZXh0L3BsYWlu
JywgNDQgYnl0ZXMpIgotICAgIF07Ci0KLSAgICBhdXRvIHdlYlZpZXcgPSBzZXRVcFRlc3RXZWJW
aWV3Rm9yRGF0YVRyYW5zZmVySXRlbXMoKTsKLSAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNl
OwotICAgIFt3ZWJWaWV3IHBlcmZvcm1BZnRlclJlY2VpdmluZ01lc3NhZ2U6QCJkcm9wcGVkIiBh
Y3Rpb246XigpIHsKLSAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgfV07Ci0KLSAgICBydW5UZXN0
V2l0aFRlbXBvcmFyeUZvbGRlciheKE5TVVJMICpmb2xkZXJVUkwpIHsKLSAgICAgICAgYXV0byBp
dGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbTlNJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAg
ICAgICAgW2l0ZW1Qcm92aWRlciBzZXRTdWdnZXN0ZWROYW1lOkAic29tZWRpcmVjdG9yeSJdOwot
ICAgICAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRmlsZVJlcHJlc2VudGF0aW9uRm9yVHlwZUlk
ZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUZvbGRlciBmaWxlT3B0aW9uczowIHZpc2liaWxp
dHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGwgbG9hZEhhbmRsZXI6
W2NhcHR1cmVkRm9sZGVyVVJMID0gcmV0YWluUHRyKGZvbGRlclVSTCldIChGaWxlTG9hZENvbXBs
ZXRpb25CbG9jayBjb21wbGV0aW9uSGFuZGxlcikgLT4gTlNQcm9ncmVzcyAqIHsKLSAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGNhcHR1cmVkRm9sZGVyVVJMLmdldCgpLCBOTywgbmlsKTsK
LSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIH1dOwotCi0gICAgICAgIGF1dG8gZGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICAgICAgW2RhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3Zp
ZGVyLmdldCgpIF1dOwotICAgICAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFrZSgxNTAsIDUwKV07Ci0gICAgfSk7Ci0K
LSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwotICAgIEVYUEVDVF9XS19TVFJF
UShbZXhwZWN0ZWRPdXRwdXQgY29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiXG4iXSwgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdKTsKLX0KLQot
VEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VEYXRhVHJhbnNmZXJJdGVt
R2V0UGxhaW5UZXh0RmlsZUFzRW50cnkpCi17Ci0gICAgTlNBcnJheTxOU1N0cmluZyAqPiAqZXhw
ZWN0ZWRPdXRwdXQgPSBAWwotICAgICAgICBAIkZvdW5kIGRhdGEgdHJhbnNmZXIgaXRlbSAoa2lu
ZDogJ2ZpbGUnLCB0eXBlOiAndGV4dC9wbGFpbicpIiwKLSAgICAgICAgQCJGSUxFOiAvZm9vLnR4
dCAoJ3RleHQvcGxhaW4nLCAyOCBieXRlcykiCi0gICAgXTsKLQotICAgIGF1dG8gd2ViVmlldyA9
IHNldFVwVGVzdFdlYlZpZXdGb3JEYXRhVHJhbnNmZXJJdGVtcygpOwotICAgIF9fYmxvY2sgYm9v
bCBkb25lID0gZmFsc2U7Ci0gICAgW3dlYlZpZXcgcGVyZm9ybUFmdGVyUmVjZWl2aW5nTWVzc2Fn
ZTpAImRyb3BwZWQiIGFjdGlvbjpeKCkgewotICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICB9XTsK
LQotICAgIHJ1blRlc3RXaXRoVGVtcG9yYXJ5VGV4dEZpbGUoXihOU1VSTCAqZmlsZVVSTCkgewot
ICAgICAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxv
Y10gaW5pdF0pOwotICAgICAgICBbaXRlbVByb3ZpZGVyIHNldFN1Z2dlc3RlZE5hbWU6QCJmb28i
XTsKLSAgICAgICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckZpbGVSZXByZXNlbnRhdGlvbkZvclR5
cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0IGZpbGVPcHRpb25z
OjAgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbCBs
b2FkSGFuZGxlcjpbY2FwdHVyZWRGaWxlVVJMID0gcmV0YWluUHRyKGZpbGVVUkwpXShGaWxlTG9h
ZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uSGFuZGxlcikgLT4gTlNQcm9ncmVzcyAqIHsKLSAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNhcHR1cmVkRmlsZVVSTC5nZXQoKSwgTk8sIG5p
bCk7Ci0gICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICB9XTsKLQotICAgICAgICBhdXRv
IGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgICAgIFtk
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Q
cm92aWRlci5nZXQoKSBdXTsKLSAgICAgICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5G
cm9tOkNHUG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTUwLCA1MCldOwotICAgIH0p
OwotCi0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKLSAgICBFWFBFQ1RfV0tf
U1RSRVEoW2V4cGVjdGVkT3V0cHV0IGNvbXBvbmVudHNKb2luZWRCeVN0cmluZzpAIlxuIl0sIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSk7Ci19
Ci0KLSNlbmRpZiAvLyBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAzMDAK
LQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VPdmVycmlkZURyb3BJ
bnNlcnRVUkwpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBb
d2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVu
dGVkaXRhYmxlIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
ImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07Ci0KLSAgICBhdXRvIGRhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxs
b2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBzZXRPdmVycmlkZVBlcmZvcm1Ecm9wQmxvY2s6Xk5TQXJyYXk8VUlEcmFnSXRl
bSAqPiAqKGlkIDxVSURyb3BTZXNzaW9uPiBzZXNzaW9uKQotICAgIHsKLSAgICAgICAgTlNNdXRh
YmxlQXJyYXk8VUlEcmFnSXRlbSAqPiAqYWxsb3dlZEl0ZW1zID0gW05TTXV0YWJsZUFycmF5IGFy
cmF5XTsKLSAgICAgICAgZm9yIChVSURyYWdJdGVtICppdGVtIGluIHNlc3Npb24uaXRlbXMpIHsK
LSAgICAgICAgICAgIGlmIChbaXRlbS5pdGVtUHJvdmlkZXIucmVnaXN0ZXJlZFR5cGVJZGVudGlm
aWVycyBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilrVVRUeXBlVVJMXSkKLSAgICAgICAgICAg
ICAgICBbYWxsb3dlZEl0ZW1zIGFkZE9iamVjdDppdGVtXTsKLSAgICAgICAgfQotICAgICAgICBF
WFBFQ1RfRVEoMVVMLCBhbGxvd2VkSXRlbXMuY291bnQpOwotICAgICAgICByZXR1cm4gYWxsb3dl
ZEl0ZW1zOwotICAgIH1dOwotCi0gICAgYXV0byBmaXJzdEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMo
W1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtmaXJzdEl0ZW1Qcm92aWRlciBy
ZWdpc3Rlck9iamVjdDpAIlRoaXMgaXMgYSBzdHJpbmcuIiB2aXNpYmlsaXR5OlVJSXRlbVByb3Zp
ZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07Ci0gICAgYXV0byBzZWNvbmRJ
dGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAg
ICBbc2Vjb25kSXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OltOU1VSTCBVUkxXaXRoU3RyaW5n
OkAiaHR0cHM6Ly93ZWJraXQub3JnLyJdIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNl
bnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBmaXJzdEl0ZW1Qcm92aWRlci5nZXQoKSwg
c2Vjb25kSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDAp
XTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93ZWJraXQub3JnLyIsIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXSk7Ci19
Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIE92ZXJyaWRlRGF0YUludGVyYWN0aW9uT3Bl
cmF0aW9uKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2ltcGxlIl07Ci0KLSAgICBh
dXRvIHNpbXVsYXRlZEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxv
Y10gaW5pdF0pOwotICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVz
ZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3aXRoRGF0
YTpbQCI8Ym9keT48L2JvZHk+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z11dOwotCi0gICAgX19ibG9jayBib29sIGZpbmlzaGVkTG9hZGluZ0RhdGEgPSBmYWxzZTsKLSAg
ICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAg
W2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2lt
dWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3Igc2V0T3ZlcnJpZGVEYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25CbG9jazpeTlNVSW50ZWdlcihO
U1VJbnRlZ2VyIG9wZXJhdGlvbiwgaWQgc2Vzc2lvbikKLSAgICB7Ci0gICAgICAgIEVYUEVDVF9F
USgwVSwgb3BlcmF0aW9uKTsKLSAgICAgICAgcmV0dXJuIFVJRHJvcE9wZXJhdGlvbkNvcHk7Ci0g
ICAgfV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXREYXRhSW50ZXJhY3Rpb25P
cGVyYXRpb25Db21wbGV0aW9uQmxvY2s6XihCT09MIGhhbmRsZWQsIE5TQXJyYXkgKml0ZW1Qcm92
aWRlcnMpIHsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKGhhbmRsZWQpOwotICAgICAgICBbaXRlbVBy
b3ZpZGVycy5maXJzdE9iamVjdCBsb2FkRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZp
ZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgY29tcGxldGlvbkhhbmRsZXI6XihOU0RhdGEgKmRh
dGEsIE5TRXJyb3IgKmVycm9yKSB7Ci0gICAgICAgICAgICBOU1N0cmluZyAqdGV4dCA9IFtbW05T
U3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6ZGF0YSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNv
ZGluZ10gYXV0b3JlbGVhc2VdOwotICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCI8Ym9keT48
L2JvZHk+IiwgdGV4dC5VVEY4U3RyaW5nKTsKLSAgICAgICAgICAgIEVYUEVDVF9GQUxTRSghIWVy
cm9yKTsKLSAgICAgICAgICAgIGZpbmlzaGVkTG9hZGluZ0RhdGEgPSB0cnVlOwotICAgICAgICB9
XTsKLSAgICB9XTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2lu
dE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0gICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZExvYWRpbmdEYXRhKTsKLX0KLQotVEVTVChEYXRhSW50
ZXJhY3Rpb25UZXN0cywgSW5qZWN0ZWRCdW5kbGVPdmVycmlkZVBlcmZvcm1Ud29TdGVwRHJvcCkK
LXsKLSAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gX3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NOYW1l
OkAiQnVuZGxlRWRpdGluZ0RlbGVnYXRlUGx1Z0luIl07Ci0gICAgW2NvbmZpZ3VyYXRpb24ucHJv
Y2Vzc1Bvb2wgX3NldE9iamVjdDpAWUVTIGZvckJ1bmRsZVBhcmFtZXRlcjpAIkJ1bmRsZU92ZXJy
aWRlUGVyZm9ybVR3b1N0ZXBEcm9wIl07Ci0KLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwg
NTAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dKTsKLSAgICBbd2ViVmlldyBsb2FkVGVz
dFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKLSAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFu
Z2VzKCkiXTsKLQotICAgIGF1dG8gc2ltdWxhdGVkSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJ
SXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRlciBy
ZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtV
VFR5cGVVVEY4UGxhaW5UZXh0IG9wdGlvbnM6bmlsIGxvYWRIYW5kbGVyOl5OU1Byb2dyZXNzICoo
VUlJdGVtUHJvdmlkZXJEYXRhTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uQmxvY2spCi0g
ICAgewotICAgICAgICBjb21wbGV0aW9uQmxvY2soW0AiSGVsbG8gd29ybGQiIGRhdGFVc2luZ0Vu
Y29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSwgbmlsKTsKLSAgICAgICAgcmV0dXJuIFtOU1By
b2dyZXNzIGRpc2NyZXRlUHJvZ3Jlc3NXaXRoVG90YWxVbml0Q291bnQ6MTAwXTsKLSAgICB9XTsK
LQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsK
LSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpA
WyBzaW11bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50TWFrZSgxMDAs
IDMwMCldOwotCi0gICAgRVhQRUNUX0VRKDBVTCwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdLmxlbmd0aCk7Ci19Ci0KLVRFU1QoRGF0
YUludGVyYWN0aW9uVGVzdHMsIEluamVjdGVkQnVuZGxlQWxsb3dQZXJmb3JtVHdvU3RlcERyb3Ap
Ci17Ci0gICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtXS1dlYlZp
ZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVzdFBsdWdJbkNsYXNzTmFt
ZTpAIkJ1bmRsZUVkaXRpbmdEZWxlZ2F0ZVBsdWdJbiJdOwotICAgIFtjb25maWd1cmF0aW9uLnBy
b2Nlc3NQb29sIF9zZXRPYmplY3Q6QE5PIGZvckJ1bmRsZVBhcmFtZXRlcjpAIkJ1bmRsZU92ZXJy
aWRlUGVyZm9ybVR3b1N0ZXBEcm9wIl07Ci0KLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwg
NTAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dKTsKLSAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07Ci0g
ICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigp
LnJlbW92ZUFsbFJhbmdlcygpIl07Ci0KLSAgICBhdXRvIHNpbXVsYXRlZEl0ZW1Qcm92aWRlciA9
IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtzaW11bGF0ZWRJ
dGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjoo
TlNTdHJpbmcgKilrVVRUeXBlVVRGOFBsYWluVGV4dCBvcHRpb25zOm5pbCBsb2FkSGFuZGxlcjpe
TlNQcm9ncmVzcyAqKFVJSXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxl
dGlvbkJsb2NrKQotICAgIHsKLSAgICAgICAgY29tcGxldGlvbkJsb2NrKFtAIkhlbGxvIHdvcmxk
IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10sIG5pbCk7Ci0gICAgICAg
IHJldHVybiBbTlNQcm9ncmVzcyBkaXNjcmV0ZVByb2dyZXNzV2l0aFRvdGFsVW5pdENvdW50OjEw
MF07Ci0gICAgfV07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0
TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0
ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQ
b2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiSGVsbG8gd29ybGQi
LCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250
ZW50Il0uVVRGOFN0cmluZyk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEluamVj
dGVkQnVuZGxlSW1hZ2VFbGVtZW50RGF0YSkKLXsKLSAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9u
ICpjb25maWd1cmF0aW9uID0gW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gX3Rlc3RfY29uZmlndXJh
dGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NOYW1lOkAiQnVuZGxlRWRpdGluZ0RlbGVnYXRlUGx1Z0lu
Il07Ci0gICAgW2NvbmZpZ3VyYXRpb24gX3NldEF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZDpZRVNd
OwotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbl0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpA
ImltYWdlLWFuZC1jb250ZW50ZWRpdGFibGUiXTsKLQotICAgIF9fYmxvY2sgUmV0YWluUHRyPE5T
U3RyaW5nPiBpbmplY3RlZFN0cmluZzsKLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRD
b252ZXJ0SXRlbVByb3ZpZGVyc0Jsb2NrOl5OU0FycmF5ICooVUlJdGVtUHJvdmlkZXIgKml0ZW1Q
cm92aWRlciwgTlNBcnJheSAqLCBOU0RpY3Rpb25hcnkgKmRhdGEpCi0gICAgewotICAgICAgICBp
bmplY3RlZFN0cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmRh
dGFbSW5qZWN0ZWRCdW5kbGVQYXN0ZWJvYXJkRGF0YVR5cGVdIGVuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nXSk7Ci0gICAgICAgIHJldHVybiBAWyBpdGVtUHJvdmlkZXIgXTsKLSAgICB9XTsK
LQotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAs
IDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDI1MCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVRKCJo
ZWxsbyIsIFtpbmplY3RlZFN0cmluZyBVVEY4U3RyaW5nXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVy
YWN0aW9uVGVzdHMsIEluamVjdGVkQnVuZGxlQXR0YWNobWVudEVsZW1lbnREYXRhKQotewotICAg
IFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBfdGVzdF9jb25maWd1cmF0aW9uV2l0aFRlc3RQbHVnSW5DbGFzc05hbWU6QCJCdW5k
bGVFZGl0aW5nRGVsZWdhdGVQbHVnSW4iXTsKLSAgICBbY29uZmlndXJhdGlvbiBfc2V0QXR0YWNo
bWVudEVsZW1lbnRFbmFibGVkOllFU107Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXR0YWNobWVudC1lbGVtZW50Il07Ci0KLSAgICBfX2Js
b2NrIFJldGFpblB0cjxOU1N0cmluZz4gaW5qZWN0ZWRTdHJpbmc7Ci0gICAgYXV0byBkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFs
bG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3Igc2V0Q29udmVydEl0ZW1Qcm92aWRlcnNCbG9jazpeTlNBcnJheSAqKFVJSXRl
bVByb3ZpZGVyICppdGVtUHJvdmlkZXIsIE5TQXJyYXkgKiwgTlNEaWN0aW9uYXJ5ICpkYXRhKQot
ICAgIHsKLSAgICAgICAgaW5qZWN0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2Nd
IGluaXRXaXRoRGF0YTpkYXRhW0luamVjdGVkQnVuZGxlUGFzdGVib2FyZERhdGFUeXBlXSBlbmNv
ZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pOwotICAgICAgICByZXR1cm4gQFsgaXRlbVByb3Zp
ZGVyIF07Ci0gICAgfV07Ci0KLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFrZSg1MCwgNDAwKV07Ci0KLSAgICBFWFBF
Q1RfV0tfU1RSRVEoImhlbGxvIiwgW2luamVjdGVkU3RyaW5nIFVURjhTdHJpbmddKTsKLSAgICBF
WFBFQ1RfVFJVRShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2Vs
ZWN0aW9uKCkuaXNDb2xsYXBzZWQiXS5ib29sVmFsdWUpOwotfQotCi1URVNUKERhdGFJbnRlcmFj
dGlvblRlc3RzLCBMYXJnZUltYWdlVG9UYXJnZXREaXYpCi17Ci0gICAgYXV0byB0ZXN0V2ViVmll
d0NvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10g
aW5pdF0pOwotICAgIFtbdGVzdFdlYlZpZXdDb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0
TGFyZ2VJbWFnZUFzeW5jRGVjb2RpbmdFbmFibGVkOk5PXTsKLQotICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRpb246dGVzdFdlYlZpZXdDb25maWd1cmF0aW9uLmdl
dCgpXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZGl2
LWFuZC1sYXJnZS1pbWFnZSJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
PSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZp
ZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJv
bTpDR1BvaW50TWFrZSgyMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMjAwLCAxNTApXTsKLSAgICBF
WFBFQ1RfV0tfU1RSRVEoIlBBU1MiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAidGFyZ2V0LnRleHRDb250ZW50Il0uVVRGOFN0cmluZyk7Ci0gICAgY2hlY2tGaXJzdFR5
cGVJc1ByZXNlbnRBbmRTZWNvbmRUeXBlSXNNaXNzaW5nKGRhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ci5nZXQoKSwga1VUVHlwZVBORywga1VUVHlwZUZpbGVVUkwpOwotICAgIGNoZWNrRXN0aW1hdGVk
U2l6ZShkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCksIHsgMjAwMCwgMjAwMCB9KTsKLX0K
LQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgTGlua1dpdGhFbXB0eUhSRUYpCi17Ci0gICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91
c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJsaW5rLWFuZC1pbnB1dCJdOwotICAgIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdhJyku
aHJlZiA9ICcnIl07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0
TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9p
bnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1Rf
RVEoRGF0YUludGVyYWN0aW9uQ2FuY2VsbGVkLCBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHBo
YXNlXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0uVVRG
OFN0cmluZyk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIENhbmNlbGxlZExpZnRE
b2VzTm90Q2F1c2VTdWJzZXF1ZW50RHJhZ3NUb0ZhaWwpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdl
TmFtZWQ6QCJsaW5rLWFuZC10YXJnZXQtZGl2Il07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGlu
aXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBzZXRDb252ZXJ0SXRlbVByb3ZpZGVyc0Jsb2NrOl5OU0FycmF5ICooVUlJdGVtUHJvdmlk
ZXIgKiwgTlNBcnJheSAqLCBOU0RpY3Rpb25hcnkgKikKLSAgICB7Ci0gICAgICAgIHJldHVybiBA
WyBdOwotICAgIH1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1Bv
aW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotICAgIEVYUEVDVF9F
UShEYXRhSW50ZXJhY3Rpb25DYW5jZWxsZWQsIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcGhh
c2VdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJ0YXJnZXQudGV4dENvbnRlbnQiXSk7Ci0gICAgTlNTdHJpbmcgKm91dHB1
dFRleHQgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnRl
eHRDb250ZW50Il07Ci0gICAgY2hlY2tTdHJpbmdBcnJheXNBcmVFcXVhbChAW0AiZHJhZ3N0YXJ0
IiwgQCJkcmFnZW5kIl0sIFtvdXRwdXRUZXh0IGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpA
IiAiXSk7Ci0KLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0
cHV0LmlubmVySFRNTCA9ICcnIl07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRD
b252ZXJ0SXRlbVByb3ZpZGVyc0Jsb2NrOl5OU0FycmF5ICooVUlJdGVtUHJvdmlkZXIgKml0ZW1Q
cm92aWRlciwgTlNBcnJheSAqLCBOU0RpY3Rpb25hcnkgKikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBAWyBpdGVtUHJvdmlkZXIgXTsKLSAgICB9XTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDAp
XTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIlBBU1MiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAidGFyZ2V0LnRleHRDb250ZW50Il0pOwotICAgIFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudGV4dENvbnRlbnQiXTsKLSAgICBjaGVj
a1N0cmluZ0FycmF5c0FyZUVxdWFsKEBbQCJkcmFnc3RhcnQiLCBAImRyYWdlbmQiXSwgW291dHB1
dFRleHQgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiICJdKTsKLX0KLQotc3RhdGljIHZv
aWQgdGVzdERyYWdBbmREcm9wT250b1RhcmdldEVsZW1lbnRzKFRlc3RXS1dlYlZpZXcgKndlYlZp
ZXcpCi17Ci0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlld10pOwotICAgIFtzaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRvOkNHUG9pbnRNYWtlKDUwLCAyNTApXTsKLSAg
ICBFWFBFQ1RfV0tfU1RSRVEoInJnYigwLCAxMjgsIDApIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImdldENvbXB1dGVkU3R5bGUodGFyZ2V0MSkuYmFja2dyb3VuZENv
bG9yIl0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiUEFTUyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJ0YXJnZXQxLnRleHRDb250ZW50Il0pOwotCi0gICAgW3NpbXVs
YXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2UoMjUwLCA1MCld
OwotICAgIEVYUEVDVF9XS19TVFJFUSgicmdiKDAsIDEyOCwgMCkiLCBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQyKS5iYWNrZ3Jv
dW5kQ29sb3IiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJQQVNTIiwgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRhcmdldDIudGV4dENvbnRlbnQiXSk7Ci0KLSAgICBb
c2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFrZSgyNTAs
IDI1MCldOwotICAgIEVYUEVDVF9XS19TVFJFUSgicmdiKDAsIDEyOCwgMCkiLCBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQzKS5i
YWNrZ3JvdW5kQ29sb3IiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJQQVNTIiwgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRhcmdldDMudGV4dENvbnRlbnQiXSk7Ci19
Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERyYWdFdmVudENsaWVudENvb3JkaW5hdGVz
QmFzaWMpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkcm9wLXRhcmdldHMiXTsKLQot
ICAgIHRlc3REcmFnQW5kRHJvcE9udG9UYXJnZXRFbGVtZW50cyh3ZWJWaWV3LmdldCgpKTsKLX0K
LQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRHJhZ0V2ZW50Q2xpZW50Q29vcmRpbmF0ZXNX
aXRoU2Nyb2xsT2Zmc2V0KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7
Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHJvcC10YXJn
ZXRzIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3Vt
ZW50LmJvZHkuc3R5bGUubWFyZ2luID0gJzEwMDBweCAwJyJdOwotICAgIFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9s
bFRvcCA9IDEwMDAiXTsKLSAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0
ZV07Ci0KLSAgICB0ZXN0RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMod2ViVmlldy5nZXQo
KSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERyYWdFdmVudFBhZ2VDb29yZGlu
YXRlc0Jhc2ljKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHJvcC10YXJnZXRzIl07
Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIndpbmRvdy51c2VQ
YWdlQ29vcmRpbmF0ZXMgPSB0cnVlIl07Ci0KLSAgICB0ZXN0RHJhZ0FuZERyb3BPbnRvVGFyZ2V0
RWxlbWVudHMod2ViVmlldy5nZXQoKSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMs
IERyYWdFdmVudFBhZ2VDb29yZGluYXRlc1dpdGhTY3JvbGxPZmZzZXQpCi17Ci0gICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9h
ZFRlc3RQYWdlTmFtZWQ6QCJkcm9wLXRhcmdldHMiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW4gPSAnMTAwMHB4
IDAnIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3Vt
ZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gMTAwMCJdOwotICAgIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3aW5kb3cudXNlUGFnZUNvb3JkaW5hdGVzID0g
dHJ1ZSJdOwotICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKLQot
ICAgIHRlc3REcmFnQW5kRHJvcE9udG9UYXJnZXRFbGVtZW50cyh3ZWJWaWV3LmdldCgpKTsKLX0K
LQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRG9Ob3RDcmFzaFdoZW5TZWxlY3Rpb25Jc0Ns
ZWFyZWRJbkRyYWdTdGFydCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImRyYWdzdGFy
dC1jbGVhci1zZWxlY3Rpb24iXTsKLQotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCAxMDApIHRvOkNH
UG9pbnRNYWtlKDEwMCwgMTAwKV07Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoIlBBU1MiLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGFyYWdyYXBoLnRleHRDb250ZW50
Il0pOwotfQotCi0vLyBGSVhNRTogUmUtZW5hYmxlIHRoaXMgdGVzdCBvbmNlIHdlIHJlc29sdmUg
PGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUyMDQ+Ci0jaWYgX19J
UEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA8PSAxMTA0MDEKLVRFU1QoRGF0YUludGVyYWN0
aW9uVGVzdHMsIEN1c3RvbUFjdGlvblNoZWV0UG9wb3ZlcikKLXsKLSAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtl
KDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBh
Z2VOYW1lZDpAImxpbmstYW5kLXRhcmdldC1kaXYiXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10g
aW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yIHNldFNob3VsZEVuc3VyZVVJQXBwbGljYXRpb246WUVTXTsKLQotICAgIF9fYmxvY2sg
Qk9PTCBkaWRJbnZva2VDdXN0b21BY3Rpb25TaGVldCA9IE5POwotICAgIFtkYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3Igc2V0U2hvd0N1c3RvbUFjdGlvblNoZWV0QmxvY2s6XkJPT0woX1dLQWN0aXZh
dGVkRWxlbWVudEluZm8gKmVsZW1lbnQpCi0gICAgewotICAgICAgICBFWFBFQ1RfRVEoX1dLQWN0
aXZhdGVkRWxlbWVudFR5cGVMaW5rLCBlbGVtZW50LnR5cGUpOwotICAgICAgICBFWFBFQ1RfV0tf
U1RSRVEoIkhlbGxvIHdvcmxkIiwgZWxlbWVudC50aXRsZS5VVEY4U3RyaW5nKTsKLSAgICAgICAg
ZGlkSW52b2tlQ3VzdG9tQWN0aW9uU2hlZXQgPSBZRVM7Ci0gICAgICAgIHJldHVybiBZRVM7Ci0g
ICAgfV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtl
KDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0gICAgRVhQRUNUX1RSVUUoZGlk
SW52b2tlQ3VzdG9tQWN0aW9uU2hlZXQpOwotICAgIEVYUEVDVF9XS19TVFJFUSgiUEFTUyIsIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0YXJnZXQudGV4dENvbnRlbnQi
XS5VVEY4U3RyaW5nKTsKLX0KLSNlbmRpZgotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBV
bnJlc3BvbnNpdmVQYWdlRG9lc05vdEhhbmdVSSkKLXsKLSAgICBfV0tQcm9jZXNzUG9vbENvbmZp
Z3VyYXRpb24gKnByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiA9IFtbW19XS1Byb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotICAgIHByb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbi5pZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzRm9yVGVzdGluZyA9
IFlFUzsKLQotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRpb246
W1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdIHByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbjpwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb25dKTsKLSAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzaW1wbGUiXTsKLSAgICBbd2Vi
VmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aGlsZSgxKTsiIGNvbXBsZXRpb25IYW5kbGVyOm5p
bF07Ci0KLSAgICAvLyBUaGUgdGVzdCBwYXNzZXMgaWYgd2UgY2FuIHByZXBhcmUgZm9yIGRhdGEg
aW50ZXJhY3Rpb24gd2l0aG91dCB0aW1pbmcgb3V0LgotICAgIGF1dG8gZHJhZ1Nlc3Npb24gPSBh
ZG9wdE5TKFtbTW9ja0RyYWdTZXNzaW9uIGFsbG9jXSBpbml0XSk7Ci0gICAgWyhpZCA8VUlEcmFn
SW50ZXJhY3Rpb25EZWxlZ2F0ZV9Gb3JXZWJLaXRPbmx5Pilbd2ViVmlldyBkcmFnSW50ZXJhY3Rp
b25EZWxlZ2F0ZV0gX2RyYWdJbnRlcmFjdGlvbjpbd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25dIHBy
ZXBhcmVGb3JTZXNzaW9uOmRyYWdTZXNzaW9uLmdldCgpIGNvbXBsZXRpb246XigpIHsgfV07Ci19
Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIFdlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmRM
b2FkaW5nKQotewotICAgIHN0YXRpYyBOU1N0cmluZyAqZmFzdFN0cmluZyA9IEAiVGhpcyBkYXRh
IGxvYWRzIHF1aWNrbHkiOwotICAgIHN0YXRpYyBOU1N0cmluZyAqc2xvd1N0cmluZyA9IEAiVGhp
cyBkYXRhIGxvYWRzIHNsb3dseSI7Ci0KLSAgICBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkICpw
YXN0ZWJvYXJkID0gW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5zdGFuY2VdOwot
ICAgIGF1dG8gZmFzdEl0ZW0gPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRd
KTsKLSAgICBbZmFzdEl0ZW0gcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRp
ZmllcjooTlNTdHJpbmcgKilrVVRUeXBlVVRGOFBsYWluVGV4dCBvcHRpb25zOm5pbCBsb2FkSGFu
ZGxlcjpeTlNQcm9ncmVzcyAqKFVJSXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sg
Y29tcGxldGlvbkJsb2NrKQotICAgIHsKLSAgICAgICAgY29tcGxldGlvbkJsb2NrKFtmYXN0U3Ry
aW5nIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSwgbmlsKTsKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICB9XTsKLQotICAgIGF1dG8gc2xvd0l0ZW0gPSBhZG9wdE5TKFtb
VUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbc2xvd0l0ZW0gcmVnaXN0ZXJEYXRh
UmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlVVRGOFBs
YWluVGV4dCBvcHRpb25zOm5pbCBsb2FkSGFuZGxlcjpeTlNQcm9ncmVzcyAqKFVJSXRlbVByb3Zp
ZGVyRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkJsb2NrKQotICAgIHsKLSAgICAg
ICAgc2xlZXAoMl9zKTsKLSAgICAgICAgY29tcGxldGlvbkJsb2NrKFtzbG93U3RyaW5nIGRhdGFV
c2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSwgbmlsKTsKLSAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICB9XTsKLQotICAgIF9fYmxvY2sgYm9vbCBoYXNSdW5GaXJzdENvbXBsZXRpb25C
bG9jayA9IGZhbHNlOwotICAgIHBhc3RlYm9hcmQuaXRlbVByb3ZpZGVycyA9IEBbIGZhc3RJdGVt
LmdldCgpLCBzbG93SXRlbS5nZXQoKSBdOwotICAgIFtwYXN0ZWJvYXJkIGRvQWZ0ZXJMb2FkaW5n
UHJvdmlkZWRDb250ZW50SW50b0ZpbGVVUkxzOl4oTlNBcnJheTxOU1VSTCAqPiAqdXJscykgewot
ICAgICAgICBFWFBFQ1RfRVEoMlVMLCB1cmxzLmNvdW50KTsKLSAgICAgICAgYXV0byBmaXJzdFN0
cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDb250ZW50c09mVVJMOnVy
bHNbMF0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXSk7Ci0gICAgICAg
IGF1dG8gc2Vjb25kU3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENv
bnRlbnRzT2ZVUkw6dXJsc1sxXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpu
aWxdKTsKLSAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGZhc3RTdHJpbmcsIFtmaXJzdFN0cmluZyBV
VEY4U3RyaW5nXSk7Ci0gICAgICAgIEVYUEVDVF9XS19TVFJFUShzbG93U3RyaW5nLCBbc2Vjb25k
U3RyaW5nIFVURjhTdHJpbmddKTsKLSAgICAgICAgaGFzUnVuRmlyc3RDb21wbGV0aW9uQmxvY2sg
PSB0cnVlOwotICAgIH0gc3luY2hyb25vdXNUaW1lb3V0OjYwMF07Ci0gICAgRVhQRUNUX1RSVUUo
aGFzUnVuRmlyc3RDb21wbGV0aW9uQmxvY2spOwotCi0gICAgX19ibG9jayBib29sIGhhc1J1blNl
Y29uZENvbXBsZXRpb25CbG9jayA9IGZhbHNlOwotICAgIFtwYXN0ZWJvYXJkIGRvQWZ0ZXJMb2Fk
aW5nUHJvdmlkZWRDb250ZW50SW50b0ZpbGVVUkxzOl4oTlNBcnJheTxOU1VSTCAqPiAqdXJscykg
ewotICAgICAgICBFWFBFQ1RfRVEoMlVMLCB1cmxzLmNvdW50KTsKLSAgICAgICAgYXV0byBmaXJz
dFN0cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDb250ZW50c09mVVJM
OnVybHNbMF0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXSk7Ci0gICAg
ICAgIGF1dG8gc2Vjb25kU3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0
aENvbnRlbnRzT2ZVUkw6dXJsc1sxXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJv
cjpuaWxdKTsKLSAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGZhc3RTdHJpbmcsIFtmaXJzdFN0cmlu
ZyBVVEY4U3RyaW5nXSk7Ci0gICAgICAgIEVYUEVDVF9XS19TVFJFUShzbG93U3RyaW5nLCBbc2Vj
b25kU3RyaW5nIFVURjhTdHJpbmddKTsKLSAgICAgICAgaGFzUnVuU2Vjb25kQ29tcGxldGlvbkJs
b2NrID0gdHJ1ZTsKLSAgICB9IHN5bmNocm9ub3VzVGltZW91dDowXTsKLSAgICBFWFBFQ1RfRkFM
U0UoaGFzUnVuU2Vjb25kQ29tcGxldGlvbkJsb2NrKTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmhhc1J1blNlY29uZENvbXBsZXRpb25CbG9jayk7Ci19Ci0KLVRFU1QoRGF0YUludGVy
YWN0aW9uVGVzdHMsIERvTm90Q3Jhc2hXaGVuU2VsZWN0aW9uTW92ZXNPZmZzY3JlZW5BZnRlckRy
YWdTdGFydCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImRyYWdzdGFydC1jaGFuZ2Ut
c2VsZWN0aW9uLW9mZnNjcmVlbiJdOwotCi0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtb
RGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5n
ZXQoKV0pOwotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDEwMCkgdG86
Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiRkFSIE9GRlND
UkVFTiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rp
b24oKS5nZXRSYW5nZUF0KDApLnRvU3RyaW5nKCkiXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0
aW9uVGVzdHMsIEFkZGl0aW9uYWxJdGVtc0NhbkJlUHJldmVudGVkT25EcmFnU3RhcnQpCi17Ci0g
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzZWxlY3RlZC10ZXh0LWltYWdlLWxpbmstYW5kLWVk
aXRhYmxlIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImxp
bmsuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgZSA9PiBlLnByZXZlbnREZWZhdWx0KCkp
Il07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImltYWdlLmFk
ZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIGUgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKSJdOwot
Ci0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
IGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtzaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRvOkNHUG9pbnRNYWtlKDUwLCA0MDApIGFkZGl0
aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uczpAewotICAgICAgICBAMC4zMzogW05TVmFsdWUgdmFs
dWVXaXRoQ0dQb2ludDpDR1BvaW50TWFrZSg1MCwgMTUwKV0sCi0gICAgICAgIEAwLjY2OiBbTlNW
YWx1ZSB2YWx1ZVdpdGhDR1BvaW50OkNHUG9pbnRNYWtlKDUwLCAyNTApXQotICAgIH1dOwotICAg
IEVYUEVDVF9XS19TVFJFUSgiQUJDRCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9u
VGVzdHMsIEFkZGl0aW9uYWxMaW5rQW5kSW1hZ2VJbnRvQ29udGVudEVkaXRhYmxlKQotewotICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2VsZWN0ZWQtdGV4dC1pbWFnZS1saW5rLWFuZC1lZGl0
YWJsZSJdOwotCi0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtz
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRvOkNHUG9pbnRNYWtlKDUwLCA0
MDApIGFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uczpAewotICAgICAgICBAMC4zMzogW05T
VmFsdWUgdmFsdWVXaXRoQ0dQb2ludDpDR1BvaW50TWFrZSg1MCwgMTUwKV0sCi0gICAgICAgIEAw
LjY2OiBbTlNWYWx1ZSB2YWx1ZVdpdGhDR1BvaW50OkNHUG9pbnRNYWtlKDUwLCAyNTApXQotICAg
IH1dOwotICAgIEVYUEVDVF9XS19TVFJFUSgiQUJDREEgbGluayIsIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXSk7Ci0gICAgRVhQRUNU
X1RSVUUoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIiEhZWRpdG9yLnF1
ZXJ5U2VsZWN0b3IoJ2ltZycpIl0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93d3cu
YXBwbGUuY29tLyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0
b3IucXVlcnlTZWxlY3RvcignYScpLmhyZWYiXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9u
VGVzdHMsIERyYWdMaWZ0UHJldmlld0RhdGFUcmFuc2ZlclNldERyYWdJbWFnZSkKLXsKLSAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlMb2FkVGVzdFBhZ2VOYW1lZDpAIkRhdGFUcmFuc2Zlci1zZXREcmFnSW1hZ2UiXTsKLSAgICBh
dXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2Nd
IGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICAvLyBVc2UgRGF0YVRyYW5z
ZmVyLnNldERyYWdJbWFnZSB0byBzcGVjaWZ5IGFuIGV4aXN0aW5nIGltYWdlIGVsZW1lbnQgaW4g
dGhlIERPTS4KLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86
Q0dQb2ludE1ha2UoMjUwLCA1MCldOwotICAgIGNoZWNrQ0dSZWN0SXNFcXVhbFRvQ0dSZWN0V2l0
aExvZ2dpbmcoe3sxMDAsIDUwfSwgezIxNSwgMTc0fX0sIFtzaW11bGF0b3IgbGlmdFByZXZpZXdz
XVswXS52aWV3LmZyYW1lKTsKLQotICAgIC8vIFVzZSBEYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdl
IHRvIHNwZWNpZnkgYW4gZXhpc3RpbmcgaW1hZ2UgZWxlbWVudCBpbiB0aGUgRE9NLCB3aXRoIHgg
YW5kIHkgb2Zmc2V0cy4KLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAsIDE1
MCkgdG86Q0dQb2ludE1ha2UoMjUwLCAxNTApXTsKLSAgICBjaGVja0NHUmVjdElzRXF1YWxUb0NH
UmVjdFdpdGhMb2dnaW5nKHt7LTkwLCA1MH0sIHsyMTUsIDE3NH19LCBbc2ltdWxhdG9yIGxpZnRQ
cmV2aWV3c11bMF0udmlldy5mcmFtZSk7Ci0KLSAgICAvLyBVc2UgRGF0YVRyYW5zZmVyLnNldERy
YWdJbWFnZSB0byBzcGVjaWZ5IGEgbmV3bHkgY3JlYXRlZCBJbWFnZSwgZGlzY29ubmVjdGVkIGZy
b20gdGhlIERPTS4KLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCAyNTAp
IHRvOkNHUG9pbnRNYWtlKDI1MCwgMjUwKV07Ci0gICAgY2hlY2tDR1JlY3RJc0VxdWFsVG9DR1Jl
Y3RXaXRoTG9nZ2luZyh7ezEwMCwgMjUwfSwgezIxNSwgMTc0fX0sIFtzaW11bGF0b3IgbGlmdFBy
ZXZpZXdzXVswXS52aWV3LmZyYW1lKTsKLQotICAgIC8vIERvbid0IHVzZSBEYXRhVHJhbnNmZXIu
c2V0RHJhZ0ltYWdlIGFuZCBmYWxsIGJhY2sgdG8gc25hcHNob3R0aW5nIHRoZSBkcmFnZ2VkIGVs
ZW1lbnQuCi0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCAzNTApIHRvOkNH
UG9pbnRNYWtlKDI1MCwgMzUwKV07Ci0gICAgY2hlY2tDR1JlY3RJc0VxdWFsVG9DR1JlY3RXaXRo
TG9nZ2luZyh7ezAsIDMwMH0sIHszMDAsIDEwMH19LCBbc2ltdWxhdG9yIGxpZnRQcmV2aWV3c11b
MF0udmlldy5mcmFtZSk7Ci0KLSAgICAvLyBQZXJmb3JtIGEgbm9ybWFsIGRyYWcgb24gYW4gaW1h
Z2UuCi0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA0NTApIHRvOkNHUG9p
bnRNYWtlKDI1MCwgNDUwKV07Ci0gICAgY2hlY2tDR1JlY3RJc0VxdWFsVG9DR1JlY3RXaXRoTG9n
Z2luZyh7ezAsIDQwMH0sIHsyMTUsIDE3NH19LCBbc2ltdWxhdG9yIGxpZnRQcmV2aWV3c11bMF0u
dmlldy5mcmFtZSk7Ci19Ci0KLSNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMTAzMDAKLQotc3RhdGljIE5TRGF0YSAqdGVzdEljb25JbWFnZURhdGEoKQotewotICAgIHJl
dHVybiBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZkZpbGU6W1tOU0J1bmRsZSBtYWluQnVuZGxl
XSBwYXRoRm9yUmVzb3VyY2U6QCJpY29uIiBvZlR5cGU6QCJwbmciIGluRGlyZWN0b3J5OkAiVGVz
dFdlYktpdEFQSS5yZXNvdXJjZXMiXV07Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMs
IERhdGFUcmFuc2ZlckdldERhdGFXaGVuRHJvcHBpbmdJbWFnZUFuZE1hcmt1cCkKLXsKLSAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFdLUHJlZmVyZW5jZXNTZXRDdXN0
b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoKFdLUHJlZmVyZW5jZXNSZWYpW3dlYlZpZXcgY29uZmln
dXJhdGlvbl0ucHJlZmVyZW5jZXMsIHRydWUpOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlM
b2FkVGVzdFBhZ2VOYW1lZDpAIkRhdGFUcmFuc2ZlciJdOwotCi0gICAgYXV0byBzaW11bGF0b3Ig
PSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZp
ZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJ
SXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckRh
dGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVQTkcg
d2l0aERhdGE6dGVzdEljb25JbWFnZURhdGEoKV07Ci0gICAgTlNTdHJpbmcgKm1hcmt1cFN0cmlu
ZyA9IEAiPHNjcmlwdD5iYXIoKTwvc2NyaXB0PjxzdHJvbmcgb25tb3VzZWRvd249amF2YXNjcmlw
dDp2b2lkKDApPkhFTExPIFdPUkxEPC9zdHJvbmc+IjsKLSAgICBbaXRlbVByb3ZpZGVyIHJlZ2lz
dGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlw
ZUhUTUwgd2l0aERhdGE6W21hcmt1cFN0cmluZyBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZ11dOwotICAgIFtpdGVtUHJvdmlkZXIgc2V0U3VnZ2VzdGVkTmFtZTpAImljb24i
XTsKLSAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlk
ZXIuZ2V0KCkgXV07Ci0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRaZXJvIHRvOkNHUG9p
bnRNYWtlKDUwLCAxMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiRmlsZXMsIHRleHQvaHRt
bCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0eXBlcy50ZXh0Q29u
dGVudCJdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIihTVFJJTkcsIHRleHQvaHRtbCksIChGSUxF
LCBpbWFnZS9wbmcpIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIml0
ZW1zLnRleHRDb250ZW50Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiKCdpY29uLnBuZycsIGlt
YWdlL3BuZykiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZmlsZXMu
dGV4dENvbnRlbnQiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidXJsRGF0YS50ZXh0Q29udGVudCJdKTsKLSAgICBFWFBF
Q1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0
ZXh0RGF0YS50ZXh0Q29udGVudCJdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIkhFTExPIFdPUkxE
IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImh0bWxEYXRhLnRleHRD
b250ZW50Il0pOwotICAgIEVYUEVDVF9GQUxTRShbW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAInJhd0hUTUxEYXRhLnRleHRDb250ZW50Il0gY29udGFpbnNTdHJpbmc6QCJz
Y3JpcHQiXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERhdGFUcmFuc2Zlckdl
dERhdGFXaGVuRHJvcHBpbmdQbGFpblRleHQpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6
QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOwotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHRO
UyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZp
ZXcuZ2V0KCldKTsKLQotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJzZWxlY3QocGxhaW4pIl07Ci0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUw
LCA3NSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOwotICAgIGNoZWNrSlNPTldpdGhMb2dnaW5n
KFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwg
QHsKLSAgICAgICAgQCJkcmFnb3ZlciI6IEB7IEAidGV4dC9wbGFpbiIgOiBAIiIgfSwKLSAgICAg
ICAgQCJkcm9wIjogQHsgQCJ0ZXh0L3BsYWluIiA6IEAiUGxhaW4gdGV4dCIgfQotICAgIH0pOwot
fQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEYXRhVHJhbnNmZXJHZXREYXRhV2hlbkRy
b3BwaW5nQ3VzdG9tRGF0YSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1bXAtZGF0
YXRyYW5zZmVyLXR5cGVzIl07Ci0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0p
OwotCi0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNlbGVjdChy
aWNoKSJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3cml0
ZUN1c3RvbURhdGEgPSB0cnVlIl07Ci0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtl
KDUwLCAyMjUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKLSAgICBjaGVja0pTT05XaXRoTG9n
Z2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVl
Il0sIEB7Ci0gICAgICAgIEAiZHJhZ292ZXIiIDogQHsKLSAgICAgICAgICAgIEAidGV4dC9wbGFp
biIgOiBAIiIsCi0gICAgICAgICAgICBAImZvby9wbGFpbiIgOiBAIiIsCi0gICAgICAgICAgICBA
InRleHQvaHRtbCIgOiBAIiIsCi0gICAgICAgICAgICBAImJhci9odG1sIiA6IEAiIiwKLSAgICAg
ICAgICAgIEAidGV4dC91cmktbGlzdCIgOiBAIiIsCi0gICAgICAgICAgICBAImJhei91cmktbGlz
dCIgOiBAIiIKLSAgICAgICAgfSwKLSAgICAgICAgQCJkcm9wIiA6IEB7Ci0gICAgICAgICAgICBA
InRleHQvcGxhaW4iIDogQCJiZW4gYml0ZGlkZGxlIiwKLSAgICAgICAgICAgIEAiZm9vL3BsYWlu
IiA6IEAiZXZhIGx1IGF0b3IiLAotICAgICAgICAgICAgQCJ0ZXh0L2h0bWwiIDogQCI8Yj5ib2xk
IHRleHQ8L2I+IiwKLSAgICAgICAgICAgIEAiYmFyL2h0bWwiIDogQCI8aT5pdGFsaWMgdGV4dDwv
aT4iLAotICAgICAgICAgICAgQCJ0ZXh0L3VyaS1saXN0IiA6IEAiaHR0cHM6Ly93d3cuYXBwbGUu
Y29tIiwKLSAgICAgICAgICAgIEAiYmF6L3VyaS1saXN0IiA6IEAiaHR0cHM6Ly93d3cud2Via2l0
Lm9yZyIKLSAgICAgICAgfQotICAgIH0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3Rz
LCBEYXRhVHJhbnNmZXJHZXREYXRhV2hlbkRyb3BwaW5nVVJMKQotewotICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0
UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKLSAgICBhdXRvIHNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAicmljaC5pbm5lckhUTUwgPSAnPGEgaHJlZj1cImh0dHBzOi8vd3d3LmFwcGxl
LmNvbS9cIj5UaGlzIGlzIGEgbGluay48L2E+JyJdOwotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpD
R1BvaW50TWFrZSg1MCwgMjI1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07Ci0gICAgY2hlY2tK
U09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91
dHB1dC52YWx1ZSJdLCBAewotICAgICAgICBAImRyYWdvdmVyIjogQHsKLSAgICAgICAgICAgIEAi
dGV4dC91cmktbGlzdCIgOiBAIiIsCi0gICAgICAgICAgICBAInRleHQvcGxhaW4iIDogQCIiCi0g
ICAgICAgIH0sCi0gICAgICAgIEAiZHJvcCI6IEB7Ci0gICAgICAgICAgICBAInRleHQvdXJpLWxp
c3QiIDogQCJodHRwczovL3d3dy5hcHBsZS5jb20vIiwKLSAgICAgICAgICAgIEAidGV4dC9wbGFp
biIgOiBAImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8iCi0gICAgICAgIH0KLSAgICB9KTsKLX0KLQot
VEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRGF0YVRyYW5zZmVyR2V0RGF0YVdoZW5Ecm9wcGlu
Z0ltYWdlV2l0aEZpbGVVUkwpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCld
KTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRh
dGF0cmFuc2Zlci10eXBlcyJdOwotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCld
KTsKLQotICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFs
bG9jXSBpbml0XSk7Ci0gICAgTlNVUkwgKmljb25VUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVd
IFVSTEZvclJlc291cmNlOkAiaWNvbiIgd2l0aEV4dGVuc2lvbjpAInBuZyIgc3ViZGlyZWN0b3J5
OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKLSAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVy
RmlsZVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZVBO
RyBmaWxlT3B0aW9uczowIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZp
c2liaWxpdHlBbGwgbG9hZEhhbmRsZXI6W3Byb3RlY3RlZEljb25VUkwgPSByZXRhaW5QdHIoaWNv
blVSTCldIChGaWxlTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uSGFuZGxlcikgLT4gTlNQ
cm9ncmVzcyAqIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocHJvdGVjdGVkSWNvblVSTC5n
ZXQoKSwgTk8sIG5pbCk7Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfV07Ci0gICAgW2l0ZW1Q
cm92aWRlciByZWdpc3Rlck9iamVjdDppY29uVVJMIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJS
ZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKLSAgICBbc2ltdWxhdG9yIHNldEV4
dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0KLSAgICBbc2lt
dWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCAzNzUpIHRvOkNHUG9pbnRNYWtlKDUwLCAz
NzUpXTsKLQotICAgIC8vIEZpbGUgVVJMcyBzaG91bGQgbmV2ZXIgYmUgZXhwb3NlZCBkaXJlY3Rs
eSB0byB3ZWIgY29udGVudCwgc28gRGF0YVRyYW5zZmVyLmdldERhdGEgc2hvdWxkIHJldHVybiBh
biBlbXB0eSBzdHJpbmcgaGVyZS4KLSAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7Ci0gICAgICAg
IEAiZHJhZ292ZXIiOiBAeyBAIkZpbGVzIjogQCIiLCBAInRleHQvdXJpLWxpc3QiOiBAIiIgfSwK
LSAgICAgICAgQCJkcm9wIjogQHsgQCJGaWxlcyI6IEAiIiwgQCJ0ZXh0L3VyaS1saXN0IjogQCIi
IH0KLSAgICB9KTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRGF0YVRyYW5zZmVy
R2V0RGF0YVdoZW5Ecm9wcGluZ0ltYWdlV2l0aEhUVFBVUkwpCi17Ci0gICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQ
YWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOwotICAgIGF1dG8gc2ltdWxhdG9y
ID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJW
aWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhb
W1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW2l0ZW1Qcm92aWRlciByZWdpc3Rl
ckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVK
UEVHIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGwg
bG9hZEhhbmRsZXI6Xk5TUHJvZ3Jlc3MgKihEYXRhTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0
aW9uSGFuZGxlcikKLSAgICB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFVJSW1hZ2VKUEVH
UmVwcmVzZW50YXRpb24odGVzdEljb25JbWFnZSgpLCAwLjUpLCBuaWwpOwotICAgICAgICByZXR1
cm4gbmlsOwotICAgIH1dOwotICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6W05TVVJM
IFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0Lm9yZyJdIHZpc2liaWxpdHk6VUlJdGVtUHJv
dmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKLSAgICBbc2ltdWxhdG9y
IHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0KLSAg
ICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCAzNzUpIHRvOkNHUG9pbnRNYWtl
KDUwLCAzNzUpXTsKLSAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7Ci0gICAgICAgIEAiZHJhZ292
ZXIiOiBAeyBAIkZpbGVzIjogQCIiLCBAInRleHQvdXJpLWxpc3QiOiBAIiIgfSwKLSAgICAgICAg
QCJkcm9wIjogQHsgQCJGaWxlcyI6IEAiIiwgQCJ0ZXh0L3VyaS1saXN0IjogQCJodHRwOi8vd2Vi
a2l0Lm9yZy8iIH0KLSAgICB9KTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRGF0
YVRyYW5zZmVyR2V0RGF0YVdoZW5Ecm9wcGluZ1Jlc3BlY3RzUHJlc2VudGF0aW9uU3R5bGUpCi17
Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5j
aHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOwot
ICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBh
bGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIHJ1blRlc3RXaXRo
VGVtcG9yYXJ5VGV4dEZpbGUoXihOU1VSTCAqZmlsZVVSTCkgewotICAgICAgICBhdXRvIGl0ZW1Q
cm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgICAg
ICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRmlsZVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZp
ZXI6KE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRleHQgZmlsZU9wdGlvbnM6MCB2aXNpYmls
aXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsIGxvYWRIYW5kbGVy
Oltwcm90ZWN0ZWRGaWxlVVJMID0gcmV0YWluUHRyKGZpbGVVUkwpXSAoRmlsZUxvYWRDb21wbGV0
aW9uQmxvY2sgY29tcGxldGlvbkhhbmRsZXIpIC0+IE5TUHJvZ3Jlc3MgKiB7Ci0gICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihwcm90ZWN0ZWRGaWxlVVJMLmdldCgpLCBOTywgbmlsKTsKLSAg
ICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIH1dOwotICAgICAgICBbc2ltdWxhdG9yIHNl
dEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0KLSAgICAg
ICAgW2l0ZW1Qcm92aWRlciBzZXRQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZTpVSVByZWZlcnJl
ZFByZXNlbnRhdGlvblN0eWxlQXR0YWNobWVudF07Ci0gICAgICAgIFtzaW11bGF0b3IgcnVuRnJv
bTpDR1BvaW50TWFrZSgzMDAsIDM3NSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOwotICAgICAg
ICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7Ci0gICAgICAgICAgICBAImRyYWdvdmVyIjogQHsgQCJG
aWxlcyIgOiBAIiIgfSwKLSAgICAgICAgICAgIEAiZHJvcCI6IEB7IEAiRmlsZXMiIDogQCIiIH0K
LSAgICAgICAgfSk7Ci0KLSAgICAgICAgW2l0ZW1Qcm92aWRlciBzZXRQcmVmZXJyZWRQcmVzZW50
YXRpb25TdHlsZTpVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlSW5saW5lXTsKLSAgICAgICAg
W3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgMzc1KSB0bzpDR1BvaW50TWFrZSg1
MCwgMzc1KV07Ci0gICAgICAgIGNoZWNrSlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwgQHsKLSAgICAgICAgICAgIEAi
ZHJhZ292ZXIiOiBAeyBAInRleHQvcGxhaW4iIDogQCIiIH0sCi0gICAgICAgICAgICBAImRyb3Ai
OiBAeyBAInRleHQvcGxhaW4iIDogQCJUaGlzIGlzIGEgdGlueSBibG9iIG9mIHRleHQuIiB9Ci0g
ICAgICAgIH0pOwotICAgIH0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEYXRh
VHJhbnNmZXJTZXREYXRhQ2Fubm90V3JpdGVQbGF0Zm9ybVR5cGVzKQotewotICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVj
dE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRU
ZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKLSAgICBhdXRvIHNpbXVs
YXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRo
V2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAic2VsZWN0KHJpY2gpIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImN1c3RvbURhdGEgPSB7ICd0ZXh0L3BsYWluJyA6ICdmb28nLCAn
Y29tLmFkb2JlLnBkZicgOiAndHJ5IGFuZCBkZWNvZGUgbWUhJyB9Il07Ci0gICAgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIndyaXRlQ3VzdG9tRGF0YSA9IHRydWUiXTsK
LQotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgMjI1KSB0bzpDR1BvaW50
TWFrZSg1MCwgMzc1KV07Ci0gICAgY2hlY2tGaXJzdFR5cGVJc1ByZXNlbnRBbmRTZWNvbmRUeXBl
SXNNaXNzaW5nKHNpbXVsYXRvci5nZXQoKSwga1VUVHlwZVVURjhQbGFpblRleHQsIGtVVFR5cGVQ
REYpOwotICAgIGNoZWNrSlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwgQHsKLSAgICAgICAgQCJkcmFnb3ZlciI6IEB7
Ci0gICAgICAgICAgICBAInRleHQvcGxhaW4iOiBAIiIsCi0gICAgICAgICAgICBAImNvbS5hZG9i
ZS5wZGYiOiBAIiIKLSAgICAgICAgfSwKLSAgICAgICAgQCJkcm9wIjogQHsKLSAgICAgICAgICAg
IEAidGV4dC9wbGFpbiI6IEAiZm9vIiwKLSAgICAgICAgICAgIEAiY29tLmFkb2JlLnBkZiI6IEAi
dHJ5IGFuZCBkZWNvZGUgbWUhIgotICAgICAgICB9Ci0gICAgfSk7Ci19Ci0KLVRFU1QoRGF0YUlu
dGVyYWN0aW9uVGVzdHMsIERhdGFUcmFuc2ZlckdldERhdGFSZWFkUGxhaW5BbmRSaWNoVGV4dCkK
LXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAIkRhdGFUcmFuc2ZlciJdOwotICAgIGF1dG8g
c2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5p
dFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIGF1dG8gaXRlbVByb3ZpZGVyID0g
YWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgTlNEaWN0aW9uYXJ5
ICp0ZXh0QXR0cmlidXRlcyA9IEB7IE5TRm9udEF0dHJpYnV0ZU5hbWU6IFtVSUZvbnQgYm9sZFN5
c3RlbUZvbnRPZlNpemU6MjBdIH07Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpyaWNoVGV4dCA9
IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIldlYktpdCIgYXR0
cmlidXRlczp0ZXh0QXR0cmlidXRlc107Ci0gICAgW2l0ZW1Qcm92aWRlciByZWdpc3Rlck9iamVj
dDpyaWNoVGV4dCB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmls
aXR5QWxsXTsKLSAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiaHR0cHM6Ly93d3cud2Via2l0Lm9yZy8iXSB2aXNpYmlsaXR5Ok5TSXRlbVByb3Zp
ZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsXTsKLSAgICBbaXRlbVByb3ZpZGVyIHJlZ2lz
dGVyT2JqZWN0OkAiV2ViS2l0IiB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRp
b25WaXNpYmlsaXR5QWxsXTsKLQotICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlk
ZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQ
b2ludFplcm8gdG86Q0dQb2ludE1ha2UoNTAsIDEwMCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVR
KCJ0ZXh0L2h0bWwsIHRleHQvcGxhaW4sIHRleHQvdXJpLWxpc3QiLCBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidHlwZXMudGV4dENvbnRlbnQiXSk7Ci0gICAgRVhQRUNU
X1dLX1NUUkVRKCJXZWJLaXQiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAidGV4dERhdGEudGV4dENvbnRlbnQiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczov
L3d3dy53ZWJraXQub3JnLyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJ1cmxEYXRhLnRleHRDb250ZW50Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiV2ViS2l0Iiwg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImh0bWxEYXRhLnRleHRDb250
ZW50Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiKFNUUklORywgdGV4dC9odG1sKSwgKFNUUklO
RywgdGV4dC9wbGFpbiksIChTVFJJTkcsIHRleHQvdXJpLWxpc3QpIiwgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIml0ZW1zLnRleHRDb250ZW50Il0pOwotICAgIEVYUEVD
VF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImZp
bGVzLnRleHRDb250ZW50Il0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEYXRh
VHJhbnNmZXJTdXBwcmVzc0dldERhdGFEdWVUb1ByZXNlbmNlT2ZUZXh0RmlsZSkKLXsKLSAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlMb2FkVGVzdFBhZ2VOYW1lZDpAIkRhdGFUcmFuc2ZlciJdOwotICAgIGF1dG8gc2ltdWxhdG9y
ID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJW
aWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhb
W1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW2l0ZW1Qcm92aWRlciByZWdpc3Rl
ck9iamVjdDpAIkhlbGxvIHdvcmxkIiB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50
YXRpb25WaXNpYmlsaXR5QWxsXTsKLSAgICBbaXRlbVByb3ZpZGVyIHNldFN1Z2dlc3RlZE5hbWU6
QCJoZWxsby50eHQiXTsKLQotICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJz
OkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2lu
dFplcm8gdG86Q0dQb2ludE1ha2UoNTAsIDEwMCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVRKCJG
aWxlcyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0eXBlcy50ZXh0
Q29udGVudCJdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJ0ZXh0RGF0YS50ZXh0Q29udGVudCJdKTsKLSAgICBFWFBFQ1Rf
V0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ1cmxE
YXRhLnRleHRDb250ZW50Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImh0bWxEYXRhLnRleHRDb250ZW50Il0pOwotICAg
IEVYUEVDVF9XS19TVFJFUSgiKEZJTEUsIHRleHQvcGxhaW4pIiwgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAIml0ZW1zLnRleHRDb250ZW50Il0pOwotICAgIEVYUEVDVF9X
S19TVFJFUSgiKCdoZWxsby50eHQnLCB0ZXh0L3BsYWluKSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJmaWxlcy50ZXh0Q29udGVudCJdKTsKLX0KLQotVEVTVChEYXRh
SW50ZXJhY3Rpb25UZXN0cywgRGF0YVRyYW5zZmVyR2V0RGF0YUNhbm5vdFJlYWRQcml2YXRlQXJi
aXRyYXJ5VHlwZXMpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAg
ICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFu
c2Zlci10eXBlcyJdOwotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQot
ICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBp
bml0XSk7Ci0gICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5
cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVNUDMgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92
aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxlcjpeTlNQcm9ncmVzcyAq
KERhdGFMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRpb25IYW5kbGVyKQotICAgIHsKLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoW0AidGhpcyBpcyBhIHRlc3QiIGRhdGFVc2luZ0VuY29kaW5n
Ok5TVVRGOFN0cmluZ0VuY29kaW5nXSwgbmlsKTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9
XTsKLSAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlk
ZW50aWZpZXI6QCJvcmcuV2ViS2l0LlRlc3RXZWJLaXRBUEkuY3VzdG9tLXBhc3RlYm9hcmQtdHlw
ZSIgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbCBs
b2FkSGFuZGxlcjpeTlNQcm9ncmVzcyAqKERhdGFMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRp
b25IYW5kbGVyKQotICAgIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoW0AidGhpcyBpcyBh
bm90aGVyIHRlc3QiIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSwgbmls
KTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9XTsKLSAgICBbc2ltdWxhdG9yIHNldEV4dGVy
bmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2l0ZW1Qcm92
aWRlciBzZXRQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZTpVSVByZWZlcnJlZFByZXNlbnRhdGlv
blN0eWxlSW5saW5lXTsKLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCAz
NzUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKLSAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7
Ci0gICAgICAgIEAiZHJhZ292ZXIiOiBAeyB9LAotICAgICAgICBAImRyb3AiOiBAeyB9Ci0gICAg
fSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERhdGFUcmFuc2ZlclNldERhdGFW
YWxpZFVSTCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1bXAtZGF0YXRyYW5zZmVy
LXR5cGVzIl07Ci0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotCi0gICAg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNlbGVjdChyaWNoKSJdOwot
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjdXN0b21EYXRhID0g
eyAndXJsJyA6ICdodHRwczovL3dlYmtpdC5vcmcvYi8xMjMnIH0iXTsKLSAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0b21EYXRhID0gdHJ1ZSJdOwot
Ci0gICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKLSAgICBbc2ltdWxhdG9yLmdldCgpIHNl
dE92ZXJyaWRlUGVyZm9ybURyb3BCbG9jazpeTlNBcnJheTxVSURyYWdJdGVtICo+ICooaWQgPFVJ
RHJvcFNlc3Npb24+IHNlc3Npb24pCi0gICAgewotICAgICAgICBFWFBFQ1RfRVEoMVVMLCBzZXNz
aW9uLml0ZW1zLmNvdW50KTsKLSAgICAgICAgYXV0byAqaXRlbSA9IHNlc3Npb24uaXRlbXNbMF0u
aXRlbVByb3ZpZGVyOwotICAgICAgICBFWFBFQ1RfVFJVRShbaXRlbS5yZWdpc3RlcmVkVHlwZUlk
ZW50aWZpZXJzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVVUkxdKTsKLSAgICAg
ICAgRVhQRUNUX1RSVUUoW2l0ZW0gY2FuTG9hZE9iamVjdE9mQ2xhc3M6IFtOU1VSTCBjbGFzc11d
KTsKLSAgICAgICAgW2l0ZW0gbG9hZE9iamVjdE9mQ2xhc3M6W05TVVJMIGNsYXNzXSBjb21wbGV0
aW9uSGFuZGxlcjpeKGlkPE5TSXRlbVByb3ZpZGVyUmVhZGluZz4gdXJsLCBOU0Vycm9yICplcnJv
cikgewotICAgICAgICAgICAgRVhQRUNUX1RSVUUoW3VybCBpc0tpbmRPZkNsYXNzOiBbTlNVUkwg
Y2xhc3NdXSk7Ci0gICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoWyhOU1VSTCAqKXVybCBhYnNv
bHV0ZVN0cmluZ10sIEAiaHR0cHM6Ly93ZWJraXQub3JnL2IvMTIzIik7Ci0gICAgICAgICAgICBk
b25lID0gdHJ1ZTsKLSAgICAgICAgfV07Ci0gICAgICAgIHJldHVybiBzZXNzaW9uLml0ZW1zOwot
ICAgIH1dOwotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgMjI1KSB0bzpD
R1BvaW50TWFrZSg1MCwgMzc1KV07Ci0KLSAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7Ci0gICAg
ICAgIEAiZHJhZ292ZXIiOiBAewotICAgICAgICAgICAgQCJ0ZXh0L3VyaS1saXN0IjogQCIiLAot
ICAgICAgICB9LAotICAgICAgICBAImRyb3AiOiBAewotICAgICAgICAgICAgQCJ0ZXh0L3VyaS1s
aXN0IjogQCJodHRwczovL3dlYmtpdC5vcmcvYi8xMjMiLAotICAgICAgICB9Ci0gICAgfSk7Ci0g
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKLX0KLQotVEVTVChEYXRhSW50ZXJh
Y3Rpb25UZXN0cywgRGF0YVRyYW5zZmVyU2V0RGF0YVVuZXNjYXBlZFVSTCkKLXsKLSAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlM
b2FkVGVzdFBhZ2VOYW1lZDpAImR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07Ci0gICAgYXV0byBz
aW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0
V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotCi0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAInNlbGVjdChyaWNoKSJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjdXN0b21EYXRhID0geyAndXJsJyA6ICdodHRwOi8vd2Vi
a2l0Lm9yZy9iL1x1NEY2MFx1NTk3RDs/eD04ICsgNicgfSJdOwotICAgIFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3cml0ZUN1c3RvbURhdGEgPSB0cnVlIl07Ci0KLSAg
ICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgIFtzaW11bGF0b3IuZ2V0KCkgc2V0T3Zl
cnJpZGVQZXJmb3JtRHJvcEJsb2NrOl5OU0FycmF5PFVJRHJhZ0l0ZW0gKj4gKihpZCA8VUlEcm9w
U2Vzc2lvbj4gc2Vzc2lvbikKLSAgICB7Ci0gICAgICAgIEVYUEVDVF9FUSgxVUwsIHNlc3Npb24u
aXRlbXMuY291bnQpOwotICAgICAgICBhdXRvICppdGVtID0gc2Vzc2lvbi5pdGVtc1swXS5pdGVt
UHJvdmlkZXI7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFtpdGVtLnJlZ2lzdGVyZWRUeXBlSWRlbnRp
ZmllcnMgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZVVSTF0pOwotICAgICAgICBF
WFBFQ1RfVFJVRShbaXRlbSBjYW5Mb2FkT2JqZWN0T2ZDbGFzczogW05TVVJMIGNsYXNzXV0pOwot
ICAgICAgICBbaXRlbSBsb2FkT2JqZWN0T2ZDbGFzczpbTlNVUkwgY2xhc3NdIGNvbXBsZXRpb25I
YW5kbGVyOl4oaWQ8TlNJdGVtUHJvdmlkZXJSZWFkaW5nPiB1cmwsIE5TRXJyb3IgKmVycm9yKSB7
Ci0gICAgICAgICAgICBFWFBFQ1RfVFJVRShbdXJsIGlzS2luZE9mQ2xhc3M6IFtOU1VSTCBjbGFz
c11dKTsKLSAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUShbKE5TVVJMICopdXJsIGFic29sdXRl
U3RyaW5nXSwgQCJodHRwOi8vd2Via2l0Lm9yZy9iLyVFNCVCRCVBMCVFNSVBNSVCRDs/eD04JTIw
KyUyMDYiKTsKLSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICB9XTsKLSAgICAgICAg
cmV0dXJuIHNlc3Npb24uaXRlbXM7Ci0gICAgfV07Ci0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNH
UG9pbnRNYWtlKDUwLCAyMjUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKLQotICAgIGNoZWNr
SlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJv
dXRwdXQudmFsdWUiXSwgQHsKLSAgICAgICAgQCJkcmFnb3ZlciI6IEB7Ci0gICAgICAgICAgICBA
InRleHQvdXJpLWxpc3QiOiBAIiIsCi0gICAgICAgIH0sCi0gICAgICAgIEAiZHJvcCI6IEB7Ci0g
ICAgICAgICAgICBAInRleHQvdXJpLWxpc3QiOiBAImh0dHA6Ly93ZWJraXQub3JnL2IvXHU0RjYw
XHU1OTdEOz94PTggKyA2IiwKLSAgICAgICAgfQotICAgIH0pOwotICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERhdGFU
cmFuc2ZlclNldERhdGFJbnZhbGlkVVJMKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIw
LCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAi
ZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKLSAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMo
W1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3
LmdldCgpXSk7Ci0KLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
c2VsZWN0KHJpY2gpIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAImN1c3RvbURhdGEgPSB7ICd1cmwnIDogJ3NvbWUgcmFuZG9tIHN0cmluZycgfSJdOwotICAg
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3cml0ZUN1c3RvbURhdGEg
PSB0cnVlIl07Ci0KLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDIyNSkg
dG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOwotICAgIE5TQXJyYXkgKnJlZ2lzdGVyZWRUeXBlcyA9
IFtzaW11bGF0b3IuZ2V0KCkuc291cmNlSXRlbVByb3ZpZGVycy5maXJzdE9iamVjdCByZWdpc3Rl
cmVkVHlwZUlkZW50aWZpZXJzXTsKLSAgICBFWFBFQ1RfRkFMU0UoW3JlZ2lzdGVyZWRUeXBlcyBj
b250YWluc09iamVjdDooTlNTdHJpbmcgKilrVVRUeXBlVVJMXSk7Ci0gICAgY2hlY2tKU09OV2l0
aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52
YWx1ZSJdLCBAewotICAgICAgICBAImRyYWdvdmVyIjogQHsKLSAgICAgICAgICAgIEAidGV4dC91
cmktbGlzdCI6IEAiIiwKLSAgICAgICAgfSwKLSAgICAgICAgQCJkcm9wIjogQHsKLSAgICAgICAg
ICAgIEAidGV4dC91cmktbGlzdCI6IEAic29tZSByYW5kb20gc3RyaW5nIiwKLSAgICAgICAgfQot
ICAgIH0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEYXRhVHJhbnNmZXJTYW5p
dGl6ZUhUTUwpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBb
d2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zl
ci10eXBlcyJdOwotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAg
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzZWxlY3QocmljaCkiXTsK
LSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY3VzdG9tRGF0YSA9
IHsgJ3RleHQvaHRtbCcgOiAnPG1ldGEgY29udGVudD1cInNlY3JldFwiPiIKLSAgICAgICAgIjxi
IG9ubW91c2VvdmVyPVwiZGFuZ2Vyb3VzQ29kZSgpXCI+aGVsbG88L2I+PCEtLSBzZWNyZXQtLT4s
IHdvcmxkPHNjcmlwdD5kYW5nZXJvdXNDb2RlKCk8L3NjcmlwdD4nIH0iXTsKLSAgICBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0b21EYXRhID0gdHJ1ZSJd
OwotCi0gICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKLSAgICBbc2ltdWxhdG9yLmdldCgp
IHNldE92ZXJyaWRlUGVyZm9ybURyb3BCbG9jazpeTlNBcnJheTxVSURyYWdJdGVtICo+ICooaWQg
PFVJRHJvcFNlc3Npb24+IHNlc3Npb24pCi0gICAgewotICAgICAgICBFWFBFQ1RfRVEoMVVMLCBz
ZXNzaW9uLml0ZW1zLmNvdW50KTsKLSAgICAgICAgYXV0byAqaXRlbSA9IHNlc3Npb24uaXRlbXNb
MF0uaXRlbVByb3ZpZGVyOwotICAgICAgICBFWFBFQ1RfVFJVRShbaXRlbS5yZWdpc3RlcmVkVHlw
ZUlkZW50aWZpZXJzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVIVE1MXSk7Ci0g
ICAgICAgIFtpdGVtIGxvYWREYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNT
dHJpbmcgKilrVVRUeXBlSFRNTCBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRGF0YSAqZGF0YSwgTlNF
cnJvciAqZXJyb3IpIHsKLSAgICAgICAgICAgIE5TU3RyaW5nICptYXJrdXAgPSBbW1tOU1N0cmlu
ZyBhbGxvY10gaW5pdFdpdGhEYXRhOihOU0RhdGEgKilkYXRhIGVuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nXSBhdXRvcmVsZWFzZV07Ci0gICAgICAgICAgICBFWFBFQ1RfVFJVRShbbWFya3Vw
IGNvbnRhaW5zU3RyaW5nOkAiaGVsbG8iXSk7Ci0gICAgICAgICAgICBFWFBFQ1RfVFJVRShbbWFy
a3VwIGNvbnRhaW5zU3RyaW5nOkAiLCB3b3JsZCJdKTsKLSAgICAgICAgICAgIEVYUEVDVF9GQUxT
RShbbWFya3VwIGNvbnRhaW5zU3RyaW5nOkAic2VjcmV0Il0pOwotICAgICAgICAgICAgRVhQRUNU
X0ZBTFNFKFttYXJrdXAgY29udGFpbnNTdHJpbmc6QCJkYW5nZXJvdXNDb2RlIl0pOwotICAgICAg
ICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgIH1dOwotICAgICAgICByZXR1cm4gc2Vzc2lvbi5p
dGVtczsKLSAgICB9XTsKLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDIy
NSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOwotCi0gICAgY2hlY2tKU09OV2l0aExvZ2dpbmco
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBA
ewotICAgICAgICBAImRyYWdvdmVyIjogQHsKLSAgICAgICAgICAgIEAidGV4dC9odG1sIjogQCIi
LAotICAgICAgICB9LAotICAgICAgICBAImRyb3AiOiBAewotICAgICAgICAgICAgQCJ0ZXh0L2h0
bWwiOiBAIjxtZXRhIGNvbnRlbnQ9XCJzZWNyZXRcIj48YiBvbm1vdXNlb3Zlcj1cImRhbmdlcm91
c0NvZGUoKVwiPmhlbGxvPC9iPjwhLS0gc2VjcmV0LS0+LCB3b3JsZDxzY3JpcHQ+ZGFuZ2Vyb3Vz
Q29kZSgpPC9zY3JpcHQ+IiwKLSAgICAgICAgfQotICAgIH0pOwotICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZSk7Ci19Ci0KLSNlbmRpZiAvLyBfX0lQSE9ORV9PU19WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMTAzMDAKLQotfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQotCi0j
ZW5kaWYgLy8gRU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL2lvcy9EcmFnQW5kRHJvcFRlc3RzSU9TLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9pb3MvRHJhZ0FuZERyb3BUZXN0c0lPUy5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjA0
OTQxOTBmYzI2OTU5ZmNkNDY4YzViM2E5MmVlNWRhMjM0YmQ1Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRHJhZ0FuZERyb3BUZXN0c0lPUy5tbQpAQCAt
MCwwICsxLDE5MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoRFJBR19TVVBQT1JUKSAmJiBQTEFURk9STShJT1MpICYmIFdLX0FQSV9FTkFCTEVECisK
KyNpbXBvcnQgIkRyYWdBbmREcm9wU2ltdWxhdG9yLmgiCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxp
dGllcy5oIgorI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCAiVUlLaXRTUEkuaCIK
KyNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKKyNpbXBvcnQgPE1vYmls
ZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2VydmljZXMuaD4KKyNpbXBvcnQgPFVJS2l0L05TSXRl
bVByb3ZpZGVyK1VJS2l0QWRkaXRpb25zLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNl
c1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJJdGVt
UHJvdmlkZXJQYXN0ZWJvYXJkLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uLmg+CisjaW1wb3J0IDx3dGYvU2Vjb25kcy5oPgorCit0eXBlZGVmIHZvaWQgKF5G
aWxlTG9hZENvbXBsZXRpb25CbG9jaykoTlNVUkwgKiwgQk9PTCwgTlNFcnJvciAqKTsKK3R5cGVk
ZWYgdm9pZCAoXkRhdGFMb2FkQ29tcGxldGlvbkJsb2NrKShOU0RhdGEgKiwgTlNFcnJvciAqKTsK
K3R5cGVkZWYgdm9pZCAoXlVJSXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0aW9uQmxvY2spKE5T
RGF0YSAqLCBOU0Vycm9yICopOworCisjaWYgIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCisKK0Bp
bnRlcmZhY2UgVUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnMgOiBOU09iamVjdAor
QGVuZAorCisjZW5kaWYKKworQGludGVyZmFjZSBVSUl0ZW1Qcm92aWRlcigpCisrIChVSUl0ZW1Q
cm92aWRlciAqKWl0ZW1Qcm92aWRlcldpdGhVUkw6KE5TVVJMICopdXJsIHRpdGxlOihOU1N0cmlu
ZyAqKXRpdGxlOworLSAodm9pZCkgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRl
bnRpZmllcjooTlNTdHJpbmcgKil0eXBlSWRlbnRpZmllciBvcHRpb25zOihVSUl0ZW1Qcm92aWRl
clJlcHJlc2VudGF0aW9uT3B0aW9ucyopb3B0aW9ucyBsb2FkSGFuZGxlcjooTlNQcm9ncmVzcyAq
ICheKSh2b2lkICheVUlJdGVtUHJvdmlkZXJEYXRhTG9hZENvbXBsZXRpb25CbG9jaykoTlNEYXRh
ICppdGVtLCBOU0Vycm9yICplcnJvcikpKSBsb2FkSGFuZGxlcjsKK0BlbmQKKworc3RhdGljIE5T
U3RyaW5nICpJbmplY3RlZEJ1bmRsZVBhc3RlYm9hcmREYXRhVHlwZSA9IEAib3JnLndlYmtpdC5k
YXRhIjsKKworc3RhdGljIFVJSW1hZ2UgKnRlc3RJY29uSW1hZ2UoKQoreworICAgIHJldHVybiBb
VUlJbWFnZSBpbWFnZU5hbWVkOkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMvaWNvbi5wbmciXTsK
K30KKworc3RhdGljIE5TRGF0YSAqdGVzdFpJUEFyY2hpdmUoKQoreworICAgIE5TVVJMICp6aXBG
aWxlVVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAImNvbXByZXNz
ZWQtZmlsZXMiIHdpdGhFeHRlbnNpb246QCJ6aXAiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRB
UEkucmVzb3VyY2VzIl07CisgICAgcmV0dXJuIFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mVVJM
OnppcEZpbGVVUkxdOworfQorCitAaW1wbGVtZW50YXRpb24gVUlJdGVtUHJvdmlkZXIgKERyYWdB
bmREcm9wVGVzdHMpCisKKy0gKHZvaWQpcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBl
SWRlbnRpZmllcjooTlNTdHJpbmcgKil0eXBlSWRlbnRpZmllciB3aXRoRGF0YTooTlNEYXRhICop
ZGF0YQoreworICAgIFJldGFpblB0cjxOU0RhdGE+IHJldGFpbmVkRGF0YSA9IGRhdGE7CisgICAg
W3NlbGYgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjp0eXBlSWRl
bnRpZmllciB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlz
aWJpbGl0eUFsbCBsb2FkSGFuZGxlcjogW3JldGFpbmVkRGF0YV0gKERhdGFMb2FkQ29tcGxldGlv
bkJsb2NrIGJsb2NrKSAtPiBOU1Byb2dyZXNzICogeworICAgICAgICBibG9jayhyZXRhaW5lZERh
dGEuZ2V0KCksIG5pbCk7CisgICAgICAgIHJldHVybiBbTlNQcm9ncmVzcyBkaXNjcmV0ZVByb2dy
ZXNzV2l0aFRvdGFsVW5pdENvdW50OjEwMF07CisgICAgfV07Cit9CisKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIFRlc3RXS1dlYlZpZXcgKERyYWdBbmREcm9wVGVzdHMpCisKKy0gKEJPT0wpZWRp
dG9yQ29udGFpbnNJbWFnZUVsZW1lbnQKK3sKKyAgICByZXR1cm4gW3NlbGYgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAIiEhZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIl0uYm9vbFZh
bHVlOworfQorCistIChOU1N0cmluZyAqKWVkaXRvclZhbHVlCit7CisgICAgcmV0dXJuIFtzZWxm
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudmFsdWUiXTsKK30KKworQGVu
ZAorCitzdGF0aWMgTlNWYWx1ZSAqbWFrZUNHUmVjdFZhbHVlKENHRmxvYXQgeCwgQ0dGbG9hdCB5
LCBDR0Zsb2F0IHdpZHRoLCBDR0Zsb2F0IGhlaWdodCkKK3sKKyAgICByZXR1cm4gW05TVmFsdWUg
dmFsdWVXaXRoQ0dSZWN0OkNHUmVjdE1ha2UoeCwgeSwgd2lkdGgsIGhlaWdodCldOworfQorCitz
dGF0aWMgdm9pZCBjaGVja0NHUmVjdElzRXF1YWxUb0NHUmVjdFdpdGhMb2dnaW5nKENHUmVjdCBl
eHBlY3RlZCwgQ0dSZWN0IG9ic2VydmVkKQoreworICAgIEJPT0wgaXNFcXVhbCA9IENHUmVjdEVx
dWFsVG9SZWN0KGV4cGVjdGVkLCBvYnNlcnZlZCk7CisgICAgRVhQRUNUX1RSVUUoaXNFcXVhbCk7
CisgICAgaWYgKCFpc0VxdWFsKQorICAgICAgICBOU0xvZyhAIkV4cGVjdGVkOiAlQCBidXQgb2Jz
ZXJ2ZWQ6ICVAIiwgTlNTdHJpbmdGcm9tQ0dSZWN0KGV4cGVjdGVkKSwgTlNTdHJpbmdGcm9tQ0dS
ZWN0KG9ic2VydmVkKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRo
TG9nZ2luZyhOU0FycmF5ICpleHBlY3RlZCwgTlNBcnJheSAqb2JzZXJ2ZWQpCit7CisgICAgaWYg
KCFbZXhwZWN0ZWQgaXNFcXVhbFRvQXJyYXk6b2JzZXJ2ZWRdKQorICAgICAgICBOU0xvZyhAIkV4
cGVjdGVkIHNlbGVjdGlvbiByZWN0czogJUAgYnV0IG9ic2VydmVkOiAlQCIsIGV4cGVjdGVkLCBv
YnNlcnZlZCk7CisgICAgRVhQRUNUX1RSVUUoW2V4cGVjdGVkIGlzRXF1YWxUb0FycmF5Om9ic2Vy
dmVkXSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrUmljaFRleHRUeXBlUHJlY2VkZXNQbGFpblRl
eHRUeXBlKERyYWdBbmREcm9wU2ltdWxhdG9yICpzaW11bGF0b3IpCit7CisgICAgLy8gQXQgbGVh
c3Qgb25lIG9mICJjb20uYXBwbGUuZmxhdC1ydGZkIiBvciAicHVibGljLnJ0ZiIgaXMgZXhwZWN0
ZWQgdG8gaGF2ZSBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuICJwdWJsaWMudXRmOC1wbGFpbi10ZXh0
Ii4KKyAgICBOU0FycmF5ICpyZWdpc3RlcmVkVHlwZXMgPSBbc2ltdWxhdG9yLnNvdXJjZUl0ZW1Q
cm92aWRlcnMuZmlyc3RPYmplY3QgcmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVyc107CisgICAgYXV0
byBpbmRleE9mUlRGVHlwZSA9IFtyZWdpc3RlcmVkVHlwZXMgaW5kZXhPZk9iamVjdDooTlNTdHJp
bmcgKilrVVRUeXBlUlRGXTsKKyAgICBhdXRvIGluZGV4T2ZGbGF0UlRGRFR5cGUgPSBbcmVnaXN0
ZXJlZFR5cGVzIGluZGV4T2ZPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZUZsYXRSVEZEXTsKKyAg
ICBhdXRvIGluZGV4T2ZQbGFpblRleHRUeXBlID0gW3JlZ2lzdGVyZWRUeXBlcyBpbmRleE9mT2Jq
ZWN0OihOU1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0XTsKKyAgICBFWFBFQ1RfTkUoKE5T
SW50ZWdlcilpbmRleE9mUGxhaW5UZXh0VHlwZSwgTlNOb3RGb3VuZCk7CisgICAgRVhQRUNUX1RS
VUUoKGluZGV4T2ZSVEZUeXBlICE9IE5TTm90Rm91bmQgJiYgaW5kZXhPZlJURlR5cGUgPCBpbmRl
eE9mUGxhaW5UZXh0VHlwZSkgfHwgKGluZGV4T2ZGbGF0UlRGRFR5cGUgIT0gTlNOb3RGb3VuZCAm
JiBpbmRleE9mRmxhdFJURkRUeXBlIDwgaW5kZXhPZlBsYWluVGV4dFR5cGUpKTsKK30KKworc3Rh
dGljIHZvaWQgY2hlY2tGaXJzdFR5cGVJc1ByZXNlbnRBbmRTZWNvbmRUeXBlSXNNaXNzaW5nKERy
YWdBbmREcm9wU2ltdWxhdG9yICpzaW11bGF0b3IsIENGU3RyaW5nUmVmIGZpcnN0VHlwZSwgQ0ZT
dHJpbmdSZWYgc2Vjb25kVHlwZSkKK3sKKyAgICBOU0FycmF5ICpyZWdpc3RlcmVkVHlwZXMgPSBb
c2ltdWxhdG9yLnNvdXJjZUl0ZW1Qcm92aWRlcnMuZmlyc3RPYmplY3QgcmVnaXN0ZXJlZFR5cGVJ
ZGVudGlmaWVyc107CisgICAgRVhQRUNUX1RSVUUoW3JlZ2lzdGVyZWRUeXBlcyBjb250YWluc09i
amVjdDooTlNTdHJpbmcgKilmaXJzdFR5cGVdKTsKKyAgICBFWFBFQ1RfRkFMU0UoW3JlZ2lzdGVy
ZWRUeXBlcyBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilzZWNvbmRUeXBlXSk7Cit9CisKK3N0
YXRpYyB2b2lkIGNoZWNrVHlwZUlkZW50aWZpZXJJc1JlZ2lzdGVyZWRBdEluZGV4KERyYWdBbmRE
cm9wU2ltdWxhdG9yICpzaW11bGF0b3IsIE5TU3RyaW5nICp0eXBlLCBOU1VJbnRlZ2VyIGluZGV4
KQoreworICAgIE5TQXJyYXkgKnJlZ2lzdGVyZWRUeXBlcyA9IFtzaW11bGF0b3Iuc291cmNlSXRl
bVByb3ZpZGVycy5maXJzdE9iamVjdCByZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzXTsKKyAgICBF
WFBFQ1RfR1QocmVnaXN0ZXJlZFR5cGVzLmNvdW50LCBpbmRleCk7CisgICAgRVhQRUNUX1dLX1NU
UkVRKHR5cGUuVVRGOFN0cmluZywgW3JlZ2lzdGVyZWRUeXBlc1tpbmRleF0gVVRGOFN0cmluZ10p
OworfQorCitzdGF0aWMgdm9pZCBjaGVja0VzdGltYXRlZFNpemUoRHJhZ0FuZERyb3BTaW11bGF0
b3IgKnNpbXVsYXRvciwgQ0dTaXplIGVzdGltYXRlZFNpemUpCit7CisgICAgVUlJdGVtUHJvdmlk
ZXIgKnNvdXJjZUl0ZW1Qcm92aWRlciA9IFtzaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10u
Zmlyc3RPYmplY3Q7CisgICAgRVhQRUNUX0VRKGVzdGltYXRlZFNpemUud2lkdGgsIHNvdXJjZUl0
ZW1Qcm92aWRlci5wcmVmZXJyZWRQcmVzZW50YXRpb25TaXplLndpZHRoKTsKKyAgICBFWFBFQ1Rf
RVEoZXN0aW1hdGVkU2l6ZS5oZWlnaHQsIHNvdXJjZUl0ZW1Qcm92aWRlci5wcmVmZXJyZWRQcmVz
ZW50YXRpb25TaXplLmhlaWdodCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrU3VnZ2VzdGVkTmFt
ZUFuZEVzdGltYXRlZFNpemUoRHJhZ0FuZERyb3BTaW11bGF0b3IgKnNpbXVsYXRvciwgTlNTdHJp
bmcgKnN1Z2dlc3RlZE5hbWUsIENHU2l6ZSBlc3RpbWF0ZWRTaXplKQoreworICAgIFVJSXRlbVBy
b3ZpZGVyICpzb3VyY2VJdGVtUHJvdmlkZXIgPSBbc2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRl
cnNdLmZpcnN0T2JqZWN0OworICAgIEVYUEVDVF9XS19TVFJFUShzdWdnZXN0ZWROYW1lLlVURjhT
dHJpbmcsIHNvdXJjZUl0ZW1Qcm92aWRlci5zdWdnZXN0ZWROYW1lLlVURjhTdHJpbmcpOworICAg
IEVYUEVDVF9FUShlc3RpbWF0ZWRTaXplLndpZHRoLCBzb3VyY2VJdGVtUHJvdmlkZXIucHJlZmVy
cmVkUHJlc2VudGF0aW9uU2l6ZS53aWR0aCk7CisgICAgRVhQRUNUX0VRKGVzdGltYXRlZFNpemUu
aGVpZ2h0LCBzb3VyY2VJdGVtUHJvdmlkZXIucHJlZmVycmVkUHJlc2VudGF0aW9uU2l6ZS5oZWln
aHQpOworfQorCitzdGF0aWMgdm9pZCBjaGVja1N0cmluZ0FycmF5c0FyZUVxdWFsKE5TQXJyYXk8
TlNTdHJpbmcgKj4gKmV4cGVjdGVkLCBOU0FycmF5PE5TU3RyaW5nICo+ICpvYnNlcnZlZCkKK3sK
KyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWQuY291bnQsIG9ic2VydmVkLmNvdW50KTsKKyAgICBmb3Ig
KE5TVUludGVnZXIgaW5kZXggPSAwOyBpbmRleCA8IGV4cGVjdGVkLmNvdW50OyArK2luZGV4KSB7
CisgICAgICAgIE5TU3RyaW5nICpleHBlY3RlZFN0cmluZyA9IFtleHBlY3RlZCBvYmplY3RBdElu
ZGV4OmluZGV4XTsKKyAgICAgICAgTlNTdHJpbmcgKm9ic2VydmVkU3RyaW5nID0gW29ic2VydmVk
IG9iamVjdEF0SW5kZXg6aW5kZXhdOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoZXhwZWN0ZWRT
dHJpbmcsIG9ic2VydmVkU3RyaW5nKTsKKyAgICAgICAgaWYgKCFbZXhwZWN0ZWRTdHJpbmcgaXNF
cXVhbFRvU3RyaW5nOm9ic2VydmVkU3RyaW5nXSkKKyAgICAgICAgICAgIE5TTG9nKEAiRXhwZWN0
ZWQgb2JzZXJ2ZWQgc3RyaW5nOiAlQCB0byBtYXRjaCBleHBlY3RlZCBzdHJpbmc6ICVAIGF0IGlu
ZGV4OiAldHUiLCBvYnNlcnZlZFN0cmluZywgZXhwZWN0ZWRTdHJpbmcsIGluZGV4KTsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrRHJhZ0NhcmV0UmVjdElzQ29udGFpbmVkSW5SZWN0KENH
UmVjdCBjYXJldFJlY3QsIENHUmVjdCBjb250YWluZXJSZWN0KQoreworICAgIEJPT0wgY29udGFp
bmVkID0gQ0dSZWN0Q29udGFpbnNSZWN0KGNvbnRhaW5lclJlY3QsIGNhcmV0UmVjdCk7CisgICAg
RVhQRUNUX1RSVUUoY29udGFpbmVkKTsKKyAgICBpZiAoIWNvbnRhaW5lZCkKKyAgICAgICAgTlNM
b2coQCJFeHBlY3RlZCBjYXJldCByZWN0OiAlQCB0byBmaXQgd2l0aGluIGNvbnRhaW5lciByZWN0
OiAlQCIsIE5TU3RyaW5nRnJvbUNHUmVjdChjYXJldFJlY3QpLCBOU1N0cmluZ0Zyb21DR1JlY3Qo
Y29udGFpbmVyUmVjdCkpOworfQorCisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTEwMzAwCisKK3N0YXRpYyB2b2lkIGNoZWNrSlNPTldpdGhMb2dnaW5nKE5TU3RyaW5n
ICpqc29uU3RyaW5nLCBOU0RpY3Rpb25hcnkgKmV4cGVjdGVkKQoreworICAgIEJPT0wgc3VjY2Vz
cyA9IFRlc3RXZWJLaXRBUEk6OlV0aWw6Ompzb25NYXRjaGVzRXhwZWN0ZWRWYWx1ZXMoanNvblN0
cmluZywgZXhwZWN0ZWQpOworICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOworICAgIGlmICghc3Vj
Y2VzcykKKyAgICAgICAgTlNMb2coQCJFeHBlY3RlZCBKU09OOiAlQCB0byBtYXRjaCB2YWx1ZXM6
ICVAIiwganNvblN0cmluZywgZXhwZWN0ZWQpOworfQorCitzdGF0aWMgTlNEYXRhICp0ZXN0SWNv
bkltYWdlRGF0YSgpCit7CisgICAgcmV0dXJuIFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mVVJM
OltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJpY29uIiB3aXRoRXh0ZW5z
aW9uOkAicG5nIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKK30K
Kworc3RhdGljIHZvaWQgcnVuVGVzdFdpdGhUZW1wb3JhcnlUZXh0RmlsZSh2b2lkKF5ydW5UZXN0
KShOU1VSTCAqZmlsZVVSTCkpCit7CisgICAgTlNTdHJpbmcgKmZpbGVOYW1lID0gW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCJkcmFnLWRyb3AtdGV4dC1maWxlLSVALnR4dCIsIFtOU1VVSUQg
VVVJRF0uVVVJRFN0cmluZ107CisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZW1wb3JhcnlGaWxlID0g
W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6ZmlsZU5hbWVdIGlzRGlyZWN0b3J5Ok5PXTsKKyAgICBbW05T
RmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDp0ZW1wb3JhcnlGaWxl
LmdldCgpIGVycm9yOm5pbF07CisKKyAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgICBbQCJU
aGlzIGlzIGEgdGlueSBibG9iIG9mIHRleHQuIiB3cml0ZVRvVVJMOnRlbXBvcmFyeUZpbGUuZ2V0
KCkgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6JmVy
cm9yXTsKKworICAgIGlmIChlcnJvcikKKyAgICAgICAgTlNMb2coQCJFcnJvciB3cml0aW5nIHRl
bXBvcmFyeSBmaWxlOiAlQCIsIGVycm9yKTsKKworICAgIEB0cnkgeworICAgICAgICBydW5UZXN0
KHRlbXBvcmFyeUZpbGUuZ2V0KCkpOworICAgIH0gQGZpbmFsbHkgeworICAgICAgICBbW05TRmls
ZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDp0ZW1wb3JhcnlGaWxlLmdl
dCgpIGVycm9yOm5pbF07CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBydW5UZXN0V2l0aFRlbXBv
cmFyeUZvbGRlcih2b2lkKF5ydW5UZXN0KShOU1VSTCAqZm9sZGVyVVJMKSkKK3sKKyAgICBOU1N0
cmluZyAqZm9sZGVyTmFtZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAic29tZS5kaXJl
Y3RvcnktJUAiLCBbTlNVVUlEIFVVSURdLlVVSURTdHJpbmddOworICAgIFJldGFpblB0cjxOU1VS
TD4gdGVtcG9yYXJ5Rm9sZGVyID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNUZW1wb3JhcnlE
aXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6Zm9sZGVyTmFtZV0gaXNE
aXJlY3Rvcnk6WUVTXTsKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92
ZUl0ZW1BdFVSTDp0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkgZXJyb3I6bmlsXTsKKworICAgIE5TRXJy
b3IgKmVycm9yID0gbmlsOworICAgIE5TRmlsZU1hbmFnZXIgKmRlZmF1bHRNYW5hZ2VyID0gW05T
RmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOworICAgIFtkZWZhdWx0TWFuYWdlciBjcmVhdGVE
aXJlY3RvcnlBdFVSTDp0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkgd2l0aEludGVybWVkaWF0ZURpcmVj
dG9yaWVzOk5PIGF0dHJpYnV0ZXM6bmlsIGVycm9yOiZlcnJvcl07CisgICAgW3Rlc3RJY29uSW1h
Z2VEYXRhKCkgd3JpdGVUb1VSTDpbdGVtcG9yYXJ5Rm9sZGVyLmdldCgpIFVSTEJ5QXBwZW5kaW5n
UGF0aENvbXBvbmVudDpAImljb24ucG5nIiBpc0RpcmVjdG9yeTpOT10gYXRvbWljYWxseTpZRVNd
OworICAgIFt0ZXN0WklQQXJjaGl2ZSgpIHdyaXRlVG9VUkw6W3RlbXBvcmFyeUZvbGRlci5nZXQo
KSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJhcmNoaXZlLnppcCIgaXNEaXJlY3Rvcnk6
Tk9dIGF0b21pY2FsbHk6WUVTXTsKKworICAgIE5TVVJMICpmaXJzdFN1YmRpcmVjdG9yeSA9IFt0
ZW1wb3JhcnlGb2xkZXIuZ2V0KCkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAic3ViZGly
ZWN0b3J5MSIgaXNEaXJlY3Rvcnk6WUVTXTsKKyAgICBbZGVmYXVsdE1hbmFnZXIgY3JlYXRlRGly
ZWN0b3J5QXRVUkw6Zmlyc3RTdWJkaXJlY3Rvcnkgd2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVz
Ok5PIGF0dHJpYnV0ZXM6bmlsIGVycm9yOiZlcnJvcl07CisgICAgW0AiSSBhbSBhIHRleHQgZmls
ZSBpbiB0aGUgZmlyc3Qgc3ViZGlyZWN0b3J5LiIgd3JpdGVUb1VSTDpbZmlyc3RTdWJkaXJlY3Rv
cnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAidGV4dC1maWxlLTEudHh0IiBpc0RpcmVj
dG9yeTpOT10gYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJy
b3I6JmVycm9yXTsKKworICAgIE5TVVJMICpzZWNvbmRTdWJkaXJlY3RvcnkgPSBbdGVtcG9yYXJ5
Rm9sZGVyLmdldCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAInN1YmRpcmVjdG9yeTIi
IGlzRGlyZWN0b3J5OllFU107CisgICAgW2RlZmF1bHRNYW5hZ2VyIGNyZWF0ZURpcmVjdG9yeUF0
VVJMOnNlY29uZFN1YmRpcmVjdG9yeSB3aXRoSW50ZXJtZWRpYXRlRGlyZWN0b3JpZXM6Tk8gYXR0
cmlidXRlczpuaWwgZXJyb3I6JmVycm9yXTsKKyAgICBbQCJJIGFtIGEgdGV4dCBmaWxlIGluIHRo
ZSBzZWNvbmQgc3ViZGlyZWN0b3J5LiIgd3JpdGVUb1VSTDpbc2Vjb25kU3ViZGlyZWN0b3J5IFVS
TEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAInRleHQtZmlsZS0yLnR4dCIgaXNEaXJlY3Rvcnk6
Tk9dIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOiZl
cnJvcl07CisKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIE5TTG9nKEAiRXJyb3Igd3JpdGluZyB0
ZW1wb3JhcnkgZmlsZTogJUAiLCBlcnJvcik7CisKKyAgICBAdHJ5IHsKKyAgICAgICAgcnVuVGVz
dCh0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkpOworICAgIH0gQGZpbmFsbHkgeworICAgICAgICBbW05T
RmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDp0ZW1wb3JhcnlGb2xk
ZXIuZ2V0KCkgZXJyb3I6bmlsXTsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBfX0lQSE9ORV9PU19W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAzMDAKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkg
eworCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEltYWdlVG9Db250ZW50RWRpdGFibGUpCit7Cisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJpbWFnZS1hbmQtY29udGVudGVkaXRhYmxlIl07CisK
KyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZy
b206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAg
IEVYUEVDVF9UUlVFKFt3ZWJWaWV3IGVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk7CisKKyAg
ICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbc2ltdWxhdG9yIG9ic2VydmVkRXZlbnRO
YW1lc107CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVj
dDpAImRyYWdlbnRlciJdKTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNv
bnRhaW5zT2JqZWN0OkAiZHJhZ292ZXIiXSk7CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZl
bnROYW1lcyBjb250YWluc09iamVjdDpAImRyb3AiXSk7CisgICAgY2hlY2tTZWxlY3Rpb25SZWN0
c1dpdGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1ZSgxLCAyMDEsIDIxNSwgMTc0KSBdLCBbc2lt
dWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKKyAgICBjaGVja0ZpcnN0VHlwZUlzUHJlc2Vu
dEFuZFNlY29uZFR5cGVJc01pc3Npbmcoc2ltdWxhdG9yLmdldCgpLCBrVVRUeXBlUE5HLCBrVVRU
eXBlRmlsZVVSTCk7CisgICAgY2hlY2tFc3RpbWF0ZWRTaXplKHNpbXVsYXRvci5nZXQoKSwgeyAy
MTUsIDE3NCB9KTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBDYW5TdGFydERyYWdPbkVu
b3Jtb3VzSW1hZ2UpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAg
ICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8aW1nIHNyYz0nZW5vcm1v
dXMuc3ZnJz48L2ltZz4iXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdB
bmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwor
ICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDEwMCkgdG86Q0dQb2ludE1h
a2UoMTAwLCAxMDApXTsKKworICAgIE5TQXJyYXkgKnJlZ2lzdGVyZWRUeXBlcyA9IFtbc2ltdWxh
dG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0IHJlZ2lzdGVyZWRUeXBlSWRlbnRp
ZmllcnNdOworICAgIEVYUEVDVF9XS19TVFJFUSgoTlNTdHJpbmcgKilrVVRUeXBlU2NhbGFibGVW
ZWN0b3JHcmFwaGljcywgW3JlZ2lzdGVyZWRUeXBlcyBmaXJzdE9iamVjdF0pOworfQorCitURVNU
KERyYWdBbmREcm9wVGVzdHMsIEltYWdlVG9UZXh0YXJlYSkKK3sKKyAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtl
KDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBh
Z2VOYW1lZDpAImltYWdlLWFuZC10ZXh0YXJlYSJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBh
ZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTAp
IHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3
ZWJWaWV3IGVkaXRvclZhbHVlXSk7CisKKyAgICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMg
PSBbc2ltdWxhdG9yIG9ic2VydmVkRXZlbnROYW1lc107CisgICAgRVhQRUNUX1RSVUUoW29ic2Vy
dmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyYWdlbnRlciJdKTsKKyAgICBFWFBFQ1Rf
VFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJhZ292ZXIiXSk7Cisg
ICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyb3Ai
XSk7CisgICAgY2hlY2tGaXJzdFR5cGVJc1ByZXNlbnRBbmRTZWNvbmRUeXBlSXNNaXNzaW5nKHNp
bXVsYXRvci5nZXQoKSwga1VUVHlwZVBORywga1VUVHlwZUZpbGVVUkwpOworICAgIGNoZWNrRXN0
aW1hdGVkU2l6ZShzaW11bGF0b3IuZ2V0KCksIHsgMjE1LCAxNzQgfSk7Cit9CisKK1RFU1QoRHJh
Z0FuZERyb3BUZXN0cywgSW1hZ2VJbkxpbmtUb0lucHV0KQoreworICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFn
ZU5hbWVkOkAiaW1hZ2UtaW4tbGluay1hbmQtaW5wdXQiXTsKKworICAgIGF1dG8gc2ltdWxhdG9y
ID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6
d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAs
IDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCJo
dHRwczovL3d3dy5hcHBsZS5jb20vIiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVdLlVURjhTdHJpbmcp
OworICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUo
MTAxLCAyNDEsIDIwNTcsIDIzMikgXSwgW3NpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7
CisgICAgY2hlY2tTdWdnZXN0ZWROYW1lQW5kRXN0aW1hdGVkU2l6ZShzaW11bGF0b3IuZ2V0KCks
IEAiaWNvbi5wbmciLCB7IDIxNSwgMTc0IH0pOworICAgIGNoZWNrVHlwZUlkZW50aWZpZXJJc1Jl
Z2lzdGVyZWRBdEluZGV4KHNpbXVsYXRvci5nZXQoKSwgKE5TU3RyaW5nICopa1VUVHlwZVBORywg
MCk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgSW1hZ2VJbkxpbmtXaXRob3V0SFJFRlRv
SW5wdXQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJpbWFnZS1pbi1saW5rLWFuZC1p
bnB1dCJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJsaW5r
LmhyZWYgPSAnJyJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERy
b3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAg
W3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEw
MCwgMzAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IGVkaXRvclZhbHVl
XSk7CisgICAgY2hlY2tFc3RpbWF0ZWRTaXplKHNpbXVsYXRvci5nZXQoKSwgeyAyMTUsIDE3NCB9
KTsKKyAgICBjaGVja1R5cGVJZGVudGlmaWVySXNSZWdpc3RlcmVkQXRJbmRleChzaW11bGF0b3Iu
Z2V0KCksIChOU1N0cmluZyAqKWtVVFR5cGVQTkcsIDApOworfQorCitURVNUKERyYWdBbmREcm9w
VGVzdHMsIEltYWdlRG9lc05vdFVzZUVsZW1lbnRTaXplQXNFc3RpbWF0ZWRTaXplKQoreworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZ2lmLWFuZC1maWxlLWlucHV0Il07CisKKyAgICBhdXRv
IHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdp
dGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206IHsgMTAw
LCAxMDAgfSB0bzogeyAxMDAsIDMwMCB9XTsKKworICAgIGNoZWNrVHlwZUlkZW50aWZpZXJJc1Jl
Z2lzdGVyZWRBdEluZGV4KHNpbXVsYXRvci5nZXQoKSwgKE5TU3RyaW5nICopa1VUVHlwZUdJRiwg
MCk7CisgICAgY2hlY2tTdWdnZXN0ZWROYW1lQW5kRXN0aW1hdGVkU2l6ZShzaW11bGF0b3IuZ2V0
KCksIEAiYXBwbGUuZ2lmIiwgeyA1MiwgNjQgfSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJhcHBs
ZS5naWYgKGltYWdlL2dpZikiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAib3V0cHV0LnRleHRDb250ZW50Il0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIENv
bnRlbnRFZGl0YWJsZVRvQ29udGVudEVkaXRhYmxlKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwg
MCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERy
b3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisKKyAg
ICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUi
XTsKKyAgICBbc2ltdWxhdG9yIHdhaXRGb3JJbnB1dFNlc3Npb25dOworICAgIFtzaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwor
CisgICAgRVhQRUNUX0VRKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJz
b3VyY2UudGV4dENvbnRlbnQiXS5sZW5ndGgsIDBVTCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJI
ZWxsbyB3b3JsZCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0
b3IudGV4dENvbnRlbnQiXS5VVEY4U3RyaW5nKTsKKworICAgIE5TQXJyYXkgKm9ic2VydmVkRXZl
bnROYW1lcyA9IFtzaW11bGF0b3Igb2JzZXJ2ZWRFdmVudE5hbWVzXTsKKyAgICBFWFBFQ1RfVFJV
RShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJhZ2VudGVyIl0pOworICAg
IEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6QCJkcmFnb3Zl
ciJdKTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0
OkAiZHJvcCJdKTsKKyAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgbWFrZUNH
UmVjdFZhbHVlKDEsIDIwMSwgOTYxLCAyMjcpIF0sIFtzaW11bGF0b3IgZmluYWxTZWxlY3Rpb25S
ZWN0c10pOworICAgIGNoZWNrUmljaFRleHRUeXBlUHJlY2VkZXNQbGFpblRleHRUeXBlKHNpbXVs
YXRvci5nZXQoKSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgQ29udGVudEVkaXRhYmxl
VG9UZXh0YXJlYSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAg
IGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBp
bml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgW3dlYlZpZXcgbG9hZFRlc3RQ
YWdlTmFtZWQ6QCJjb250ZW50ZWRpdGFibGUtYW5kLXRleHRhcmVhIl07CisgICAgW3NpbXVsYXRv
ciB3YWl0Rm9ySW5wdXRTZXNzaW9uXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1h
a2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIEVYUEVDVF9FUShb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic291cmNlLnRleHRDb250ZW50
Il0ubGVuZ3RoLCAwVUwpOworICAgIEVYUEVDVF9XS19TVFJFUSgiSGVsbG8gd29ybGQiLCBbd2Vi
VmlldyBlZGl0b3JWYWx1ZV0uVVRGOFN0cmluZyk7CisKKyAgICBOU0FycmF5ICpvYnNlcnZlZEV2
ZW50TmFtZXMgPSBbc2ltdWxhdG9yIG9ic2VydmVkRXZlbnROYW1lc107CisgICAgRVhQRUNUX1RS
VUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyYWdlbnRlciJdKTsKKyAg
ICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJhZ292
ZXIiXSk7CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVj
dDpAImRyb3AiXSk7CisgICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIG1ha2VD
R1JlY3RWYWx1ZSg2LCAyMDMsIDk5MCwgMjMyKSBdLCBbc2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9u
UmVjdHNdKTsKKyAgICBjaGVja1JpY2hUZXh0VHlwZVByZWNlZGVzUGxhaW5UZXh0VHlwZShzaW11
bGF0b3IuZ2V0KCkpOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIENvbnRlbnRFZGl0YWJs
ZU1vdmVQYXJhZ3JhcGhzKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7
CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxs
b2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisKKyAgICBbd2ViVmlldyBsb2Fk
VGVzdFBhZ2VOYW1lZDpAInR3by1wYXJhZ3JhcGgtY29udGVudGVkaXRhYmxlIl07CisgICAgW3Np
bXVsYXRvciB3YWl0Rm9ySW5wdXRTZXNzaW9uXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQ
b2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMjUwLCA0NTApXTsKKworICAgIE5TU3Ry
aW5nICpmaW5hbFRleHRDb250ZW50ID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdOworICAgIE5TVUludGVnZXIgZmlyc3RQYXJhZ3Jh
cGhPZmZzZXQgPSBbZmluYWxUZXh0Q29udGVudCByYW5nZU9mU3RyaW5nOkAiVGhpcyBpcyB0aGUg
Zmlyc3QgcGFyYWdyYXBoIl0ubG9jYXRpb247CisgICAgTlNVSW50ZWdlciBzZWNvbmRQYXJhZ3Jh
cGhPZmZzZXQgPSBbZmluYWxUZXh0Q29udGVudCByYW5nZU9mU3RyaW5nOkAiVGhpcyBpcyB0aGUg
c2Vjb25kIHBhcmFncmFwaCJdLmxvY2F0aW9uOworCisgICAgRVhQRUNUX0ZBTFNFKGZpcnN0UGFy
YWdyYXBoT2Zmc2V0ID09IE5TTm90Rm91bmQpOworICAgIEVYUEVDVF9GQUxTRShzZWNvbmRQYXJh
Z3JhcGhPZmZzZXQgPT0gTlNOb3RGb3VuZCk7CisgICAgRVhQRUNUX0dUKGZpcnN0UGFyYWdyYXBo
T2Zmc2V0LCBzZWNvbmRQYXJhZ3JhcGhPZmZzZXQpOworICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNX
aXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUoMTkwLCAxMDAsIDEzMCwgMjApLCBtYWtlQ0dS
ZWN0VmFsdWUoMCwgMTIwLCAzMjAsIDEwMCksIG1ha2VDR1JlY3RWYWx1ZSgwLCAyMjAsIDI1Miwg
MjApIF0sIFtzaW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0c10pOworfQorCitURVNUKERyYWdB
bmREcm9wVGVzdHMsIERyYWdJbWFnZUZyb21Db250ZW50RWRpdGFibGUpCit7CisgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMo
W1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImNv
bnRlbnRlZGl0YWJsZS1hbmQtdGFyZ2V0Il07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9p
bnRNYWtlKDEwMCwgMTAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNU
X1dLX1NUUkVRKCJQQVNTIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
InRhcmdldC50ZXh0Q29udGVudCJdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBUZXh0
QXJlYVRvSW5wdXQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAg
ICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10g
aW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIFt3ZWJWaWV3IGxvYWRUZXN0
UGFnZU5hbWVkOkAidGV4dGFyZWEtdG8taW5wdXQiXTsKKyAgICBbc2ltdWxhdG9yIHdhaXRGb3JJ
bnB1dFNlc3Npb25dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUw
KSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX0VRKFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2UudmFsdWUiXS5sZW5ndGgsIDBVTCk7
CisgICAgRVhQRUNUX1dLX1NUUkVRKCJIZWxsbyB3b3JsZCIsIFt3ZWJWaWV3IGVkaXRvclZhbHVl
XS5VVEY4U3RyaW5nKTsKKyAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgbWFr
ZUNHUmVjdFZhbHVlKDEwMSwgMjQxLCA5OTAsIDIzMikgXSwgW3NpbXVsYXRvciBmaW5hbFNlbGVj
dGlvblJlY3RzXSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgU2luZ2xlUGxhaW5UZXh0
V29yZFR5cGVJZGVudGlmaWVycykKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9y
IGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgW3dlYlZpZXcg
bG9hZFRlc3RQYWdlTmFtZWQ6QCJ0ZXh0YXJlYS10by1pbnB1dCJdOworICAgIFtzaW11bGF0b3Ig
d2FpdEZvcklucHV0U2Vzc2lvbl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAInNvdXJjZS52YWx1ZSA9ICdwbmV1bW9ub3VsdHJhbWljcm9zY29waWNzaWxpY292
b2xjYW5vY29uaW9zaXMnIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAInNvdXJjZS5zZWxlY3Rpb25TdGFydCA9IDAiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic291cmNlLnNlbGVjdGlvbkVuZCA9IHNvdXJjZS52YWx1
ZS5sZW5ndGgiXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkg
dG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIE5TSXRlbVByb3ZpZGVyICppdGVtUHJv
dmlkZXIgPSBbc2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0OworICAg
IE5TQXJyYXkgKnJlZ2lzdGVyZWRUeXBlcyA9IFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJlZFR5cGVJ
ZGVudGlmaWVyc107CisgICAgRVhQRUNUX0VRKDFVTCwgcmVnaXN0ZXJlZFR5cGVzLmNvdW50KTsK
KyAgICBFWFBFQ1RfV0tfU1RSRVEoWyhOU1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0IFVU
RjhTdHJpbmddLCBbcmVnaXN0ZXJlZFR5cGVzLmZpcnN0T2JqZWN0IFVURjhTdHJpbmddKTsKKyAg
ICBFWFBFQ1RfRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNvdXJj
ZS52YWx1ZSJdLmxlbmd0aCwgMFVMKTsKKyAgICBFWFBFQ1RfRVEoVUlQcmVmZXJyZWRQcmVzZW50
YXRpb25TdHlsZUlubGluZSwgaXRlbVByb3ZpZGVyLnByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxl
KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoInBuZXVtb25vdWx0cmFtaWNyb3Njb3BpY3NpbGljb3Zv
bGNhbm9jb25pb3NpcyIsIFt3ZWJWaWV3IGVkaXRvclZhbHVlXS5VVEY4U3RyaW5nKTsKK30KKwor
VEVTVChEcmFnQW5kRHJvcFRlc3RzLCBTaW5nbGVQbGFpblRleHRVUkxUeXBlSWRlbnRpZmllcnMp
Cit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIHNpbXVs
YXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJW
aWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIFt3ZWJWaWV3IGxvYWRUZXN0UGFnZU5hbWVkOkAi
dGV4dGFyZWEtdG8taW5wdXQiXTsKKyAgICBbc2ltdWxhdG9yIHdhaXRGb3JJbnB1dFNlc3Npb25d
OworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2UudmFs
dWUgPSAnaHR0cHM6Ly93ZWJraXQub3JnLyciXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAic291cmNlLnNlbGVjdGlvblN0YXJ0ID0gMCJdOworICAgIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2Uuc2VsZWN0aW9uRW5kID0g
c291cmNlLnZhbHVlLmxlbmd0aCJdOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFr
ZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgTlNJdGVtUHJvdmlk
ZXIgKml0ZW1Qcm92aWRlciA9IFtzaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10uZmlyc3RP
YmplY3Q7CisgICAgTlNBcnJheSAqcmVnaXN0ZXJlZFR5cGVzID0gW2l0ZW1Qcm92aWRlciByZWdp
c3RlcmVkVHlwZUlkZW50aWZpZXJzXTsKKyAgICBFWFBFQ1RfRVEoMlVMLCByZWdpc3RlcmVkVHlw
ZXMuY291bnQpOworICAgIEVYUEVDVF9XS19TVFJFUShbKE5TU3RyaW5nICopa1VUVHlwZVVSTCBV
VEY4U3RyaW5nXSwgW3JlZ2lzdGVyZWRUeXBlcy5maXJzdE9iamVjdCBVVEY4U3RyaW5nXSk7Cisg
ICAgRVhQRUNUX1dLX1NUUkVRKFsoTlNTdHJpbmcgKilrVVRUeXBlVVRGOFBsYWluVGV4dCBVVEY4
U3RyaW5nXSwgW3JlZ2lzdGVyZWRUeXBlcy5sYXN0T2JqZWN0IFVURjhTdHJpbmddKTsKKyAgICBF
WFBFQ1RfRVEoMFVMLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic291
cmNlLnZhbHVlIl0ubGVuZ3RoKTsKKyAgICBFWFBFQ1RfRVEoVUlQcmVmZXJyZWRQcmVzZW50YXRp
b25TdHlsZUlubGluZSwgaXRlbVByb3ZpZGVyLnByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlKTsK
KyAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd2Via2l0Lm9yZy8iLCBbd2ViVmlldyBlZGl0
b3JWYWx1ZV0uVVRGOFN0cmluZyk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgTGlua1Rv
SW5wdXQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJsaW5rLWFuZC1pbnB1dCJdOwor
CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxs
b2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBydW5G
cm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8iLCBbd2ViVmlldyBlZGl0
b3JWYWx1ZV0uVVRGOFN0cmluZyk7CisKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUxvYWRpbmdVUkwg
PSBmYWxzZTsKKyAgICBVSUl0ZW1Qcm92aWRlciAqc291cmNlSXRlbVByb3ZpZGVyID0gW3NpbXVs
YXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdDsKKyAgICBbc291cmNlSXRlbVBy
b3ZpZGVyIGxvYWRPYmplY3RPZkNsYXNzOltOU1VSTCBjbGFzc10gY29tcGxldGlvbkhhbmRsZXI6
XihpZCBvYmplY3QsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIE5TVVJMICp1cmwgPSBvYmpl
Y3Q7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUSgiSGVsbG8gd29ybGQiLCB1cmwuX3RpdGxlLlVU
RjhTdHJpbmcgPzogIiIpOworICAgICAgICBkb25lTG9hZGluZ1VSTCA9IHRydWU7CisgICAgfV07
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lTG9hZGluZ1VSTCk7CisKKyAgICBO
U0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbc2ltdWxhdG9yIG9ic2VydmVkRXZlbnROYW1l
c107CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpA
ImRyYWdlbnRlciJdKTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRh
aW5zT2JqZWN0OkAiZHJhZ292ZXIiXSk7CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnRO
YW1lcyBjb250YWluc09iamVjdDpAImRyb3AiXSk7CisgICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dp
dGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1ZSgxMDEsIDI3MywgMjA1NywgMjMyKSBdLCBbc2lt
dWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKKyAgICBjaGVja1R5cGVJZGVudGlmaWVySXNS
ZWdpc3RlcmVkQXRJbmRleChzaW11bGF0b3IuZ2V0KCksIChOU1N0cmluZyAqKWtVVFR5cGVVUkws
IDApOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEJhY2tncm91bmRJbWFnZUxpbmtUb0lu
cHV0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZp
ZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYmFja2dyb3VuZC1pbWFnZS1saW5r
LWFuZC1pbnB1dCJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERy
b3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAg
W3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEw
MCwgMzAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8i
LCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0uVVRGOFN0cmluZyk7CisKKyAgICBOU0FycmF5ICpvYnNl
cnZlZEV2ZW50TmFtZXMgPSBbc2ltdWxhdG9yIG9ic2VydmVkRXZlbnROYW1lc107CisgICAgRVhQ
RUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyYWdlbnRlciJd
KTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAi
ZHJhZ292ZXIiXSk7CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWlu
c09iamVjdDpAImRyb3AiXSk7CisgICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBb
IG1ha2VDR1JlY3RWYWx1ZSgxMDEsIDI0MSwgMjA1NywgMjMyKSBdLCBbc2ltdWxhdG9yIGZpbmFs
U2VsZWN0aW9uUmVjdHNdKTsKKyAgICBjaGVja1R5cGVJZGVudGlmaWVySXNSZWdpc3RlcmVkQXRJ
bmRleChzaW11bGF0b3IuZ2V0KCksIChOU1N0cmluZyAqKWtVVFR5cGVVUkwsIDApOworfQorCitU
RVNUKERyYWdBbmREcm9wVGVzdHMsIENhblByZXZlbnRTdGFydCkKK3sKKyAgICBhdXRvIHdlYlZp
ZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RN
YWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVz
dFBhZ2VOYW1lZDpAInByZXZlbnQtc3RhcnQiXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRv
cHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmll
dy5nZXQoKV0pOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0
bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX0VRKERyYWdBbmREcm9wUGhh
c2VDYW5jZWxsZWQsIFtzaW11bGF0b3IgcGhhc2VdKTsKKyAgICBFWFBFQ1RfRkFMU0UoW3dlYlZp
ZXcgZWRpdG9yQ29udGFpbnNJbWFnZUVsZW1lbnRdKTsKKworICAgIE5TQXJyYXkgKm9ic2VydmVk
RXZlbnROYW1lcyA9IFtzaW11bGF0b3Igb2JzZXJ2ZWRFdmVudE5hbWVzXTsKKyAgICBFWFBFQ1Rf
RkFMU0UoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyYWdlbnRlciJdKTsK
KyAgICBFWFBFQ1RfRkFMU0UoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRy
YWdvdmVyIl0pOworICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBdLCBbc2lt
dWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3Rz
LCBDYW5QcmV2ZW50T3BlcmF0aW9uKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1
MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAicHJl
dmVudC1vcGVyYXRpb24iXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdB
bmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwor
ICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFr
ZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX0ZBTFNFKFt3ZWJWaWV3IGVkaXRvckNvbnRhaW5z
SW1hZ2VFbGVtZW50XSk7CisKKyAgICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbc2lt
dWxhdG9yIG9ic2VydmVkRXZlbnROYW1lc107CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZl
bnROYW1lcyBjb250YWluc09iamVjdDpAImRyYWdlbnRlciJdKTsKKyAgICBFWFBFQ1RfVFJVRShb
b2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJhZ292ZXIiXSk7CisgICAgY2hl
Y2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIF0sIFtzaW11bGF0b3IgZmluYWxTZWxlY3Rp
b25SZWN0c10pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEVudGVyQW5kTGVhdmVFdmVu
dHMpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmll
dyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJsaW5rLWFuZC1pbnB1dCJdOworCisg
ICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2Nd
IGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBydW5Gcm9t
OkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgNDUwKV07CisKKyAgICBF
WFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IGVkaXRvclZhbHVlXS5VVEY4U3RyaW5nKTsKKwor
ICAgIE5TQXJyYXkgKm9ic2VydmVkRXZlbnROYW1lcyA9IFtzaW11bGF0b3Igb2JzZXJ2ZWRFdmVu
dE5hbWVzXTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2Jq
ZWN0OkAiZHJhZ2VudGVyIl0pOworICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMg
Y29udGFpbnNPYmplY3Q6QCJkcmFnb3ZlciJdKTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRF
dmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJhZ2xlYXZlIl0pOworICAgIEVYUEVDVF9GQUxT
RShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJvcCJdKTsKKyAgICBjaGVj
a1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgXSwgW3NpbXVsYXRvciBmaW5hbFNlbGVjdGlv
blJlY3RzXSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgQ2FuU3RhcnREcmFnT25EaXZX
aXRoRHJhZ2dhYmxlQXR0cmlidXRlKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1
MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiY3Vz
dG9tLWRyYWdnYWJsZS1kaXYiXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0Ry
YWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0p
OworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDEwMCkgdG86Q0dQb2lu
dE1ha2UoMTAwLCAyNTApXTsKKworICAgIEVYUEVDVF9HVChbc2ltdWxhdG9yIHNvdXJjZUl0ZW1Q
cm92aWRlcnNdLmNvdW50LCAwVUwpOworICAgIE5TSXRlbVByb3ZpZGVyICppdGVtUHJvdmlkZXIg
PSBbc2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0OworICAgIEVYUEVD
VF9FUShVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlSW5saW5lLCBpdGVtUHJvdmlkZXIucHJl
ZmVycmVkUHJlc2VudGF0aW9uU3R5bGUpOworICAgIEVYUEVDVF9UUlVFKFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCIhIWRlc3RpbmF0aW9uLnF1ZXJ5U2VsZWN0b3IoJyNp
dGVtJykiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKEAiUEFTUyIsIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJpdGVtLnRleHRDb250ZW50Il0pOworfQorCitURVNUKERy
YWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNlUGxhaW5UZXh0VG9JRnJhbWUpCit7CisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91
c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJjb250ZW50ZWRpdGFibGUtaW4taWZyYW1lIl07CisKKyAg
ICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5p
dF0pOworICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6QCJIZWxsbyB3b3JsZCIgdmlz
aWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxd
OworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3Ig
YWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBz
ZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtz
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgwLCAwKSB0bzpDR1BvaW50TWFrZSgxNjAsIDI1
MCldOworCisgICAgYXV0byBjb250YWluZXJMZWZ0ID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAImNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0Il0u
ZmxvYXRWYWx1ZTsKKyAgICBhdXRvIGNvbnRhaW5lclRvcCA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9w
Il0uZmxvYXRWYWx1ZTsKKyAgICBhdXRvIGNvbnRhaW5lcldpZHRoID0gW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo
KS53aWR0aCJdLmZsb2F0VmFsdWU7CisgICAgYXV0byBjb250YWluZXJIZWlnaHQgPSBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY29udGFpbmVyLmdldEJvdW5kaW5nQ2xp
ZW50UmVjdCgpLmhlaWdodCJdLmZsb2F0VmFsdWU7CisgICAgY2hlY2tEcmFnQ2FyZXRSZWN0SXND
b250YWluZWRJblJlY3QoW3NpbXVsYXRvciBsYXN0S25vd25EcmFnQ2FyZXRSZWN0XSwgQ0dSZWN0
TWFrZShjb250YWluZXJMZWZ0LCBjb250YWluZXJUb3AsIGNvbnRhaW5lcldpZHRoLCBjb250YWlu
ZXJIZWlnaHQpKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZUlu
bGluZVRleHRUb0ZpbGVJbnB1dCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUt
dXBsb2FkaW5nIl07CisKKyAgICBhdXRvIHNpbXVsYXRlZEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMo
W1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlk
ZXIgc2V0UHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGU6VUlQcmVmZXJyZWRQcmVzZW50YXRpb25T
dHlsZUlubGluZV07CisgICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRlciByZWdpc3Rlck9iamVjdDpA
IlRoaXMgaXRlbSBwcm92aWRlciByZXF1ZXN0ZWQgaW5saW5lIHByZXNlbnRhdGlvbiBzdHlsZS4i
IHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGxdOwor
CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxs
b2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRF
eHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOwor
ICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDEwMCkgdG86Q0dQb2ludE1h
a2UoMTAwLCAxMDApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdKTsKK30KKworVEVTVChEcmFn
QW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZUpTT05Ub0ZpbGVJbnB1dCkKK3sKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlM
b2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2FkaW5nIl07CisKKyAgICBhdXRvIHNpbXVsYXRl
ZEpTT05JdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRd
KTsKKyAgICBOU0RhdGEgKmpzb25EYXRhID0gW0AieyBcImZvb1wiOiBcImJhclwiLCAgXCJiYXJc
IjogXCJiYXpcIiB9IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107Cisg
ICAgW3NpbXVsYXRlZEpTT05JdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25G
b3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSlNPTiB3aXRoRGF0YTpqc29uRGF0
YV07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRv
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9y
IHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRKU09OSXRlbVByb3ZpZGVyLmdl
dCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDEwMCkgdG86
Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiYXBwbGljYXRp
b24vanNvbiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQu
dmFsdWUiXSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VJbWFn
ZVRvRmlsZUlucHV0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Cisg
ICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRp
bmciXTsKKworICAgIGF1dG8gc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtb
VUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBOU0RhdGEgKmltYWdlRGF0YSA9IFVJ
SW1hZ2VKUEVHUmVwcmVzZW50YXRpb24odGVzdEljb25JbWFnZSgpLCAwLjUpOworICAgIFtzaW11
bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJ
ZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVKUEVHIHdpdGhEYXRhOmltYWdlRGF0YV07CisK
KyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldEV4
dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlci5nZXQoKSBd
XTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAxMDApIHRvOkNHUG9p
bnRNYWtlKDEwMCwgMTAwKV07CisKKyAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07CisgICAgRVhQ
RUNUX1dLX1NUUkVRKCJpbWFnZS9qcGVnIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7Cit9CisK
K1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VIVE1MVG9VcGxvYWRBcmVhKQor
eworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3lu
Y2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsKKworICAgIGF1
dG8gc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBh
bGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqaHRtbERhdGEgPSBbQCI8Ym9keSBjb250ZW50ZWRp
dGFibGU+PC9ib2R5PiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwor
ICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9u
Rm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERhdGE6aHRtbERh
dGFdOworICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHNldFN1Z2dlc3RlZE5hbWU6QCJp
bmRleC5odG1sIl07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJv
cFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBb
c2ltdWxhdG9yIHNldFNob3VsZEFsbG93TW92ZU9wZXJhdGlvbjpOT107CisgICAgW3NpbXVsYXRv
ciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlci5n
ZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAzMDApIHRv
OkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07Cisg
ICAgRVhQRUNUX1dLX1NUUkVRKCJ0ZXh0L2h0bWwiLCBvdXRwdXRWYWx1ZS5VVEY4U3RyaW5nKTsK
K30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZU1vdmVPcGVyYXRpb25O
b3RBbGxvd2VkKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmci
XTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidXBsb2FkLmRy
b3BFZmZlY3QgPSAnbW92ZSciXTsKKworICAgIGF1dG8gc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRl
ciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAq
aHRtbERhdGEgPSBbQCI8Ym9keSBjb250ZW50ZWRpdGFibGU+PC9ib2R5PiIgZGF0YVVzaW5nRW5j
b2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOworICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3Zp
ZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5n
ICopa1VUVHlwZUhUTUwgd2l0aERhdGE6aHRtbERhdGFdOworCisgICAgYXV0byBzaW11bGF0b3Ig
PSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3
ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRTaG91bGRBbGxvd01vdmVPcGVyYXRp
b246Tk9dOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVs
YXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNH
UG9pbnRNYWtlKDIwMCwgMzAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQ
RUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
b3V0cHV0LnZhbHVlIl0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291
cmNlWklQQXJjaGl2ZUFuZFVSTFRvU2luZ2xlRmlsZUlucHV0KQoreworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0
UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsKKworICAgIGF1dG8gYXJjaGl2ZVByb3ZpZGVy
ID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2FyY2hpdmVQ
cm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0
cmluZyAqKWtVVFR5cGVaaXBBcmNoaXZlIHdpdGhEYXRhOnRlc3RaSVBBcmNoaXZlKCldOworCisg
ICAgYXV0byB1cmxQcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5p
dF0pOworICAgIFt1cmxQcm92aWRlciByZWdpc3Rlck9iamVjdDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpAImh0dHBzOi8vd2Via2l0Lm9yZyJdIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNl
bnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRv
cHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmll
dy5nZXQoKV0pOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGFy
Y2hpdmVQcm92aWRlci5nZXQoKSwgdXJsUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW3NpbXVsYXRv
ciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDEwMCld
OworCisgICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOworICAgIEVYUEVDVF9XS19TVFJFUSgiYXBw
bGljYXRpb24vemlwIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7Cit9CisKK1RFU1QoRHJhZ0Fu
ZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VaSVBBcmNoaXZlVG9VcGxvYWRBcmVhKQoreworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsKKworICAgIGF1dG8gaXRl
bVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAg
W2l0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVy
OihOU1N0cmluZyAqKWtVVFR5cGVaaXBBcmNoaXZlIHdpdGhEYXRhOnRlc3RaSVBBcmNoaXZlKCld
OworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3Ig
YWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBz
ZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtz
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDMwMCkgdG86Q0dQb2ludE1ha2UoMTAw
LCAzMDApXTsKKworICAgIE5TU3RyaW5nICpvdXRwdXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXTsKKyAgICBFWFBFQ1RfV0tfU1RS
RVEoImFwcGxpY2F0aW9uL3ppcCIsIG91dHB1dFZhbHVlLlVURjhTdHJpbmcpOworfQorCitURVNU
KERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNlSW1hZ2VBbmRIVE1MVG9TaW5nbGVGaWxl
SW5wdXQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOwor
CisgICAgYXV0byBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqaW1hZ2VEYXRhID0gVUlJbWFnZUpQ
RUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSk7CisgICAgW3NpbXVsYXRlZElt
YWdlSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZp
ZXI6KE5TU3RyaW5nICopa1VUVHlwZUpQRUcgd2l0aERhdGE6aW1hZ2VEYXRhXTsKKworICAgIGF1
dG8gc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBh
bGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqaHRtbERhdGEgPSBbQCI8Ym9keSBjb250ZW50ZWRp
dGFibGU+PC9ib2R5PiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwor
ICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9u
Rm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERhdGE6aHRtbERh
dGFdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0
b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRv
ciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlci5n
ZXQoKSwgc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW3NpbXVsYXRv
ciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDEwMCld
OworCisgICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOworICAgIEVYUEVDVF9XS19TVFJFUSgiIiwg
b3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0
ZXJuYWxTb3VyY2VJbWFnZUFuZEhUTUxUb011bHRpcGxlRmlsZUlucHV0KQoreworICAgIGF1dG8g
d2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNH
UmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxv
YWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsKKyAgICBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaW5wdXQuc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICcn
KSJdOworCisgICAgYXV0byBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tV
SUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqaW1hZ2VEYXRhID0gVUlJ
bWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSk7CisgICAgW3NpbXVs
YXRlZEltYWdlSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlk
ZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUpQRUcgd2l0aERhdGE6aW1hZ2VEYXRhXTsKKwor
ICAgIGF1dG8gc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92
aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqaHRtbERhdGEgPSBbQCI8Ym9keSBjb250
ZW50ZWRpdGFibGU+PC9ib2R5PiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmddOworICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2Vu
dGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERhdGE6
aHRtbERhdGFdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BT
aW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3Np
bXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSFRNTEl0ZW1Qcm92
aWRlci5nZXQoKSwgc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW3Np
bXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAwKSB0bzpDR1BvaW50TWFrZSgxMDAs
IDEwMCldOworCisgICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOworICAgIEVYUEVDVF9XS19TVFJF
USgiaW1hZ2UvanBlZywgdGV4dC9odG1sIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7Cit9CisK
K1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VJbWFnZUFuZEhUTUxUb1VwbG9h
ZEFyZWEpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOwor
CisgICAgYXV0byBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqaW1hZ2VEYXRhID0gVUlJbWFnZUpQ
RUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSk7CisgICAgW3NpbXVsYXRlZElt
YWdlSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZp
ZXI6KE5TU3RyaW5nICopa1VUVHlwZUpQRUcgd2l0aERhdGE6aW1hZ2VEYXRhXTsKKworICAgIGF1
dG8gZmlyc3RTaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3Zp
ZGVyIGFsbG9jXSBpbml0XSk7CisgICAgTlNEYXRhICpmaXJzdEhUTUxEYXRhID0gW0AiPGJvZHkg
Y29udGVudGVkaXRhYmxlPjwvYm9keT4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0Vu
Y29kaW5nXTsKKyAgICBbZmlyc3RTaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0
YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwg
d2l0aERhdGE6Zmlyc3RIVE1MRGF0YV07CisKKyAgICBhdXRvIHNlY29uZFNpbXVsYXRlZEhUTUxJ
dGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAg
ICBOU0RhdGEgKnNlY29uZEhUTUxEYXRhID0gW0AiPGh0bWw+PGJvZHk+aGVsbG8gd29ybGQ8L2Jv
ZHk+PC9odG1sPiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOworICAg
IFtzZWNvbmRTaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0
aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERhdGE6c2Vj
b25kSFRNTERhdGFdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERy
b3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAg
W3NpbXVsYXRvciBzZXRTaG91bGRBbGxvd01vdmVPcGVyYXRpb246Tk9dOworICAgIFtzaW11bGF0
b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVy
LmdldCgpLCBmaXJzdFNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0KCksIHNlY29uZFNpbXVs
YXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNH
UG9pbnRNYWtlKDIwMCwgMzAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgTlNT
dHJpbmcgKm91dHB1dFZhbHVlID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAIm91dHB1dC52YWx1ZSJdOworICAgIEVYUEVDVF9XS19TVFJFUSgiaW1hZ2UvanBlZywgdGV4
dC9odG1sLCB0ZXh0L2h0bWwiLCBvdXRwdXRWYWx1ZS5VVEY4U3RyaW5nKTsKK30KKworVEVTVChE
cmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZUhUTUxUb0NvbnRlbnRFZGl0YWJsZSkKK3sK
KyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNo
cm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsK
KyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9u
KCkucmVtb3ZlQWxsUmFuZ2VzKCkiXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhb
W0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQo
KV0pOworICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFs
bG9jXSBpbml0XSk7CisgICAgTlNEYXRhICpodG1sRGF0YSA9IFtAIjxoMT5UaGlzIGlzIGEgdGVz
dDwvaDE+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisgICAgW2l0
ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihO
U1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOmh0bWxEYXRhXTsKKyAgICBbc2ltdWxhdG9y
IHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAg
W3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50TWFrZSgx
MDAsIDMwMCldOworCisgICAgTlNTdHJpbmcgKnRleHRDb250ZW50ID0gW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdOworICAgIEVYUEVD
VF9XS19TVFJFUSgiVGhpcyBpcyBhIHRlc3QiLCB0ZXh0Q29udGVudC5VVEY4U3RyaW5nKTsKKyAg
ICBFWFBFQ1RfVFJVRShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiISFl
ZGl0b3IucXVlcnlTZWxlY3RvcignaDEnKSJdLmJvb2xWYWx1ZSk7Cit9CisKK1RFU1QoRHJhZ0Fu
ZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VCb2xkU3lzdGVtQXR0cmlidXRlZFN0cmluZ1RvQ29u
dGVudEVkaXRhYmxlKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Cisg
ICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNv
bnRlbnRlZGl0YWJsZSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSJdOworCisgICAgYXV0byBzaW11
bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgTlNEaWN0aW9uYXJ5ICp0ZXh0QXR0cmlidXRlcyA9
IEB7IE5TRm9udEF0dHJpYnV0ZU5hbWU6IFtVSUZvbnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6MjBd
IH07CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpyaWNoVGV4dCA9IFtbTlNBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIlRoaXMgaXMgYSB0ZXN0IiBhdHRyaWJ1dGVzOnRl
eHRBdHRyaWJ1dGVzXTsKKyAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdFdpdGhPYmplY3Q6cmljaFRleHRdKTsKKyAgICBbc2ltdWxhdG9y
IHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAg
W3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50TWFrZSgx
MDAsIDMwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCJUaGlzIGlzIGEgdGVzdCIsIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXS5V
VEY4U3RyaW5nKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZUNv
bG9yZWRBdHRyaWJ1dGVkU3RyaW5nVG9Db250ZW50RWRpdGFibGUpCit7CisgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRl
c3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07CisgICAgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJh
bmdlcygpIl07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNp
bXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBOU0Rp
Y3Rpb25hcnkgKnRleHRBdHRyaWJ1dGVzID0gQHsgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVO
YW1lOiBbVUlDb2xvciByZWRDb2xvcl0gfTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnJpY2hU
ZXh0ID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiVGhpcyBp
cyBhIHRlc3QiIGF0dHJpYnV0ZXM6dGV4dEF0dHJpYnV0ZXNdOworICAgIGF1dG8gaXRlbVByb3Zp
ZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0V2l0aE9iamVjdDpyaWNo
VGV4dF0pOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Q
cm92aWRlci5nZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAw
LCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
InJnYigyNTUsIDAsIDApIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
ImdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigncCcpKS5jb2xvciJdKTsK
KyAgICBFWFBFQ1RfV0tfU1RSRVEoIlRoaXMgaXMgYSB0ZXN0IiwgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdLlVURjhTdHJpbmcpOwor
fQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNlTXVsdGlwbGVVUkxzVG9D
b250ZW50RWRpdGFibGUpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsK
KyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMt
Y29udGVudGVkaXRhYmxlIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07CisKKyAgICBhdXRvIHNp
bXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhX
ZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBhdXRvIGZpcnN0SXRlbSA9IGFkb3B0TlMoW1tV
SUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtmaXJzdEl0ZW0gcmVnaXN0ZXJPYmpl
Y3Q6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBsZS5jb20vaXBob25lLyJd
IHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5
QWxsXTsKKyAgICBhdXRvIHNlY29uZEl0ZW0gPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxs
b2NdIGluaXRdKTsKKyAgICBbc2Vjb25kSXRlbSByZWdpc3Rlck9iamVjdDpbTlNVUkwgVVJMV2l0
aFN0cmluZzpAImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9tYWMvIl0gdmlzaWJpbGl0eTpVSUl0ZW1Q
cm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOworICAgIGF1dG8gdGhp
cmRJdGVtID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW3Ro
aXJkSXRlbSByZWdpc3Rlck9iamVjdDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd2Vi
a2l0Lm9yZy8iXSB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25z
VmlzaWJpbGl0eUFsbF07CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6
QFsgZmlyc3RJdGVtLmdldCgpLCBzZWNvbmRJdGVtLmdldCgpLCB0aGlyZEl0ZW0uZ2V0KCkgXV07
CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50
TWFrZSgxMDAsIDMwMCldOworCisgICAgTlNBcnJheSAqZHJvcHBlZFVSTHMgPSBbd2ViVmlldyBv
YmplY3RCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiQXJyYXkuZnJvbShlZGl0b3IucXVlcnlTZWxl
Y3RvckFsbCgnYScpKS5tYXAoYSA9PiBhLmhyZWYpIl07CisgICAgRVhQRUNUX0VRKDNVTCwgZHJv
cHBlZFVSTHMuY291bnQpOworICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93d3cuYXBwbGUu
Y29tL2lwaG9uZS8iLCBkcm9wcGVkVVJMc1swXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJodHRw
czovL3d3dy5hcHBsZS5jb20vbWFjLyIsIGRyb3BwZWRVUkxzWzFdKTsKKyAgICBFWFBFQ1RfV0tf
U1RSRVEoImh0dHBzOi8vd2Via2l0Lm9yZy8iLCBkcm9wcGVkVVJMc1syXSk7CisKKyAgICBOU0Fy
cmF5ICpsaW5rc1NlcGFyYXRlZEJ5TGluZSA9IFtbd2ViVmlldyBvYmplY3RCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAiZWRpdG9yLmlubmVyVGV4dCJdIGNvbXBvbmVudHNTZXBhcmF0ZWRCeUNoYXJh
Y3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQgbmV3bGluZUNoYXJhY3RlclNldF1dOworICAgIEVY
UEVDVF9FUSgzVUwsIGxpbmtzU2VwYXJhdGVkQnlMaW5lLmNvdW50KTsKKyAgICBFWFBFQ1RfV0tf
U1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUvIiwgbGlua3NTZXBhcmF0ZWRCeUxp
bmVbMF0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93d3cuYXBwbGUuY29tL21hYy8i
LCBsaW5rc1NlcGFyYXRlZEJ5TGluZVsxXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczov
L3dlYmtpdC5vcmcvIiwgbGlua3NTZXBhcmF0ZWRCeUxpbmVbMl0pOworfQorCitURVNUKERyYWdB
bmREcm9wVGVzdHMsIFJlc3BlY3RzRXh0ZXJuYWxTb3VyY2VGaWRlbGl0eVJhbmtpbmdzKQorewor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOwor
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24o
KS5yZW1vdmVBbGxSYW5nZXMoKSJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtb
RHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgp
XSk7CisKKyAgICAvLyBIZXJlLCBvdXIgc291cmNlIGl0ZW0gcHJvdmlkZXIgdmVuZHMgdHdvIHJl
cHJlc2VudGF0aW9uczogcGxhaW4gdGV4dCwgYW5kIHRoZW4gYW4gaW1hZ2UuIElmIHdlIGRvbid0
IHJlc3BlY3QgdGhlCisgICAgLy8gZmlkZWxpdHkgb3JkZXIgcmVxdWVzdGVkIGJ5IHRoZSBzb3Vy
Y2UsIHdlJ2xsIGVuZCB1cCBhc3N1bWluZyB0aGF0IHRoZSBpbWFnZSBpcyBhIGhpZ2hlciBmaWRl
bGl0eSByZXByZXNlbnRhdGlvbgorICAgIC8vIHRoYW4gdGhlIHBsYWluIHRleHQsIGFuZCBlcnJv
bmVvdXNseSBpbnNlcnQgdGhlIGltYWdlLiBJZiB3ZSByZXNwZWN0IHNvdXJjZSBmaWRlbGl0aWVz
LCB3ZSdsbCBpbnNlcnQgdGV4dCByYXRoZXIKKyAgICAvLyB0aGFuIGFuIGltYWdlLgorICAgIGF1
dG8gc2ltdWxhdGVkSXRlbVByb3ZpZGVyV2l0aFRleHRGaXJzdCA9IGFkb3B0TlMoW1tVSUl0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXJXaXRoVGV4
dEZpcnN0IHJlZ2lzdGVyT2JqZWN0OkAiSGVsbG8gd29ybGQiIHZpc2liaWxpdHk6VUlJdGVtUHJv
dmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKKyAgICBbc2ltdWxhdGVk
SXRlbVByb3ZpZGVyV2l0aFRleHRGaXJzdCByZWdpc3Rlck9iamVjdDp0ZXN0SWNvbkltYWdlKCkg
dmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlB
bGxdOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRl
ZEl0ZW1Qcm92aWRlcldpdGhUZXh0Rmlyc3QuZ2V0KCkgXV07CisKKyAgICBbc2ltdWxhdG9yIHJ1
bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Cisg
ICAgRVhQRUNUX1dLX1NUUkVRKCJIZWxsbyB3b3JsZCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX0ZBTFNF
KFt3ZWJWaWV3IGVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk7CisgICAgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci5pbm5lckhUTUwgPSAnJyJdOworCisg
ICAgLy8gTm93IHdlIHJlZ2lzdGVyIHRoZSBpdGVtIHByb3ZpZGVycyBpbiByZXZlcnNlLCBhbmQg
ZXhwZWN0IHRoZSBpbWFnZSB0byBiZSBpbnNlcnRlZCBpbnN0ZWFkIG9mIHRleHQuCisgICAgYXV0
byBzaW11bGF0ZWRJdGVtUHJvdmlkZXJXaXRoSW1hZ2VGaXJzdCA9IGFkb3B0TlMoW1tVSUl0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXJXaXRoSW1h
Z2VGaXJzdCByZWdpc3Rlck9iamVjdDp0ZXN0SWNvbkltYWdlKCkgdmlzaWJpbGl0eTpVSUl0ZW1Q
cm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOworICAgIFtzaW11bGF0
ZWRJdGVtUHJvdmlkZXJXaXRoSW1hZ2VGaXJzdCByZWdpc3Rlck9iamVjdDpAIkhlbGxvIHdvcmxk
IiB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0
eUFsbF07CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxh
dGVkSXRlbVByb3ZpZGVyV2l0aEltYWdlRmlyc3QuZ2V0KCkgXV07CisKKyAgICBbc2ltdWxhdG9y
IHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07
CisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9UUlVFKFt3ZWJWaWV3
IGVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0
cywgRXh0ZXJuYWxTb3VyY2VVVEY4UGxhaW5UZXh0T25seSkKK3sKKyAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtl
KDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBh
Z2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKKworICAgIE5TU3RyaW5nICp0
ZXh0UGF5bG9hZCA9IEAiQ2VjaSBuJ2VzdCBwYXMgdW5lIHN0cmluZyI7CisgICAgYXV0byBzaW11
bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgYXV0byBzaW11bGF0ZWRJdGVtUHJvdmlkZXIgPSBh
ZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbc2ltdWxhdGVkSXRl
bVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KF9f
YnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRleHQgb3B0aW9uczpuaWwgbG9hZEhh
bmRsZXI6Xk5TUHJvZ3Jlc3MgKihVSUl0ZW1Qcm92aWRlckRhdGFMb2FkQ29tcGxldGlvbkJsb2Nr
IGNvbXBsZXRpb25CbG9jaykKKyAgICB7CisgICAgICAgIGNvbXBsZXRpb25CbG9jayhbdGV4dFBh
eWxvYWQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddLCBuaWwpOworICAg
ICAgICByZXR1cm4gW05TUHJvZ3Jlc3MgZGlzY3JldGVQcm9ncmVzc1dpdGhUb3RhbFVuaXRDb3Vu
dDoxMDBdOworICAgIH1dOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJz
OkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZy
b206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisgICAg
RVhQRUNUX1dLX1NUUkVRKHRleHRQYXlsb2FkLlVURjhTdHJpbmcsIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXS5VVEY4U3RyaW5nKTsK
KyAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgbWFrZUNHUmVjdFZhbHVlKDEs
IDIwMSwgMTkzNiwgMjI3KSBdLCBbc2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKK30K
KworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZUpQRUdPbmx5KQoreworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOworCisg
ICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2Nd
IGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgYXV0byBzaW11bGF0ZWRJdGVt
UHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBb
c2ltdWxhdGVkSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlk
ZW50aWZpZXI6KF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZUpQRUcgb3B0aW9uczpuaWwgbG9h
ZEhhbmRsZXI6Xk5TUHJvZ3Jlc3MgKihVSUl0ZW1Qcm92aWRlckRhdGFMb2FkQ29tcGxldGlvbkJs
b2NrIGNvbXBsZXRpb25CbG9jaykKKyAgICB7CisgICAgICAgIGNvbXBsZXRpb25CbG9jayhVSUlt
YWdlSlBFR1JlcHJlc2VudGF0aW9uKHRlc3RJY29uSW1hZ2UoKSwgMC41KSwgbmlsKTsKKyAgICAg
ICAgcmV0dXJuIFtOU1Byb2dyZXNzIGRpc2NyZXRlUHJvZ3Jlc3NXaXRoVG90YWxVbml0Q291bnQ6
MTAwXTsKKyAgICB9XTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpA
WyBzaW11bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9t
OkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworICAgIEVY
UEVDVF9UUlVFKFt3ZWJWaWV3IGVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk7CisgICAgY2hl
Y2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1ZSgxLCAyMDEsIDIx
NSwgMTc0KSBdLCBbc2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKK30KKworVEVTVChE
cmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZVRpdGxlZE5TVVJMKQoreworICAgIGF1dG8g
d2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNH
UmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxv
YWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOworICAgIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVB
bGxSYW5nZXMoKSJdOworCisgICAgTlNVUkwgKnRpdGxlZFVSTCA9IFtOU1VSTCBVUkxXaXRoU3Ry
aW5nOkAiaHR0cHM6Ly93d3cuYXBwbGUuY29tIl07CisgICAgdGl0bGVkVVJMLl90aXRsZSA9IEAi
QXBwbGUiOworICAgIGF1dG8gc2ltdWxhdGVkSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRl
bVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRlciByZWdp
c3Rlck9iamVjdDp0aXRsZWRVUkwgdmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0
aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5T
KFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3Lmdl
dCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxh
dGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50
TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIEVYUEVDVF9X
S19TVFJFUSgiQXBwbGUiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
ZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ2EnKS50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tf
U1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ2EnKS5ocmVmIl0pOworfQorCitU
RVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNlRmlsZVVSTCkKK3sKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlM
b2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKKyAgICBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3Zl
QWxsUmFuZ2VzKCkiXTsKKworICAgIE5TVVJMICpVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpA
ImZpbGU6Ly8vc29tZS9maWxlL3RoYXQvaXMvbm90L3JlYWwiXTsKKyAgICBVSUl0ZW1Qcm92aWRl
ciAqc2ltdWxhdGVkSXRlbVByb3ZpZGVyID0gW1VJSXRlbVByb3ZpZGVyIGl0ZW1Qcm92aWRlcldp
dGhVUkw6VVJMIHRpdGxlOkAiIl07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tE
cmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCld
KTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJ
dGVtUHJvdmlkZXIgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwg
NDAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX0ZBTFNFKFtbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiISFlZGl0b3IucXVlcnlTZWxlY3Rv
cignYScpIl0gYm9vbFZhbHVlXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJIZWxsbyB3b3JsZFxu
ZmlsZTovLy9zb21lL2ZpbGUvdGhhdC9pcy9ub3QvcmVhbCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVyVGV4dCJdKTsKK30KKworVEVT
VChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZU92ZXJyaWRlRHJvcEZpbGVVcGxvYWQp
Cit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOworCisgICAg
YXV0byBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRl
ciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqaW1hZ2VEYXRhID0gVUlJbWFnZUpQRUdSZXBy
ZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSk7CisgICAgW3NpbXVsYXRlZEltYWdlSXRl
bVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5T
U3RyaW5nICopa1VUVHlwZUpQRUcgd2l0aERhdGE6aW1hZ2VEYXRhXTsKKworICAgIGF1dG8gc2lt
dWxhdGVkSFRNTEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10g
aW5pdF0pOworICAgIE5TRGF0YSAqZmlyc3RIVE1MRGF0YSA9IFtAIjxib2R5IGNvbnRlbnRlZGl0
YWJsZT48L2JvZHk+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107Cisg
ICAgW3NpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25G
b3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3aXRoRGF0YTpmaXJzdEhU
TUxEYXRhXTsKKyAgICBbc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciBzZXRQcmVmZXJyZWRQcmVz
ZW50YXRpb25TdHlsZTpVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlQXR0YWNobWVudF07CisK
KyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldE92
ZXJyaWRlUGVyZm9ybURyb3BCbG9jazpeTlNBcnJheTxVSURyYWdJdGVtICo+ICooaWQgPFVJRHJv
cFNlc3Npb24+IHNlc3Npb24pCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMlVMLCBzZXNzaW9u
Lml0ZW1zLmNvdW50KTsKKyAgICAgICAgVUlEcmFnSXRlbSAqZmlyc3RJdGVtID0gc2Vzc2lvbi5p
dGVtc1swXTsKKyAgICAgICAgVUlEcmFnSXRlbSAqc2Vjb25kSXRlbSA9IHNlc3Npb24uaXRlbXNb
MV07CisgICAgICAgIEVYUEVDVF9UUlVFKFtmaXJzdEl0ZW0uaXRlbVByb3ZpZGVyLnJlZ2lzdGVy
ZWRUeXBlSWRlbnRpZmllcnMgaXNFcXVhbDpAWyAoTlNTdHJpbmcgKilrVVRUeXBlSlBFRyBdXSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKFtzZWNvbmRJdGVtLml0ZW1Qcm92aWRlci5yZWdpc3RlcmVk
VHlwZUlkZW50aWZpZXJzIGlzRXF1YWw6QFsgKE5TU3RyaW5nICopa1VUVHlwZUhUTUwgXV0pOwor
ICAgICAgICByZXR1cm4gQFsgc2Vjb25kSXRlbSBdOworICAgIH1dOworICAgIFtzaW11bGF0b3Ig
c2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyLmdl
dCgpLCBzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDMwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsK
KworICAgIE5TU3RyaW5nICpvdXRwdXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoInRleHQv
aHRtbCIsIG91dHB1dFZhbHVlLlVURjhTdHJpbmcpOworfQorCisjaWYgX19JUEhPTkVfT1NfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMzAwCisKK3N0YXRpYyBSZXRhaW5QdHI8VGVzdFdLV2Vi
Vmlldz4gc2V0VXBUZXN0V2ViVmlld0ZvckRhdGFUcmFuc2Zlckl0ZW1zKCkKK3sKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlM
b2FkVGVzdFBhZ2VOYW1lZDpAIkRhdGFUcmFuc2Zlckl0ZW0tZ2V0QXNFbnRyeSJdOworCisgICAg
YXV0byBwcmVmZXJlbmNlcyA9IChXS1ByZWZlcmVuY2VzUmVmKVtbd2ViVmlldyBjb25maWd1cmF0
aW9uXSBwcmVmZXJlbmNlc107CisgICAgV0tQcmVmZXJlbmNlc1NldERhdGFUcmFuc2Zlckl0ZW1z
RW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldERpcmVjdG9y
eVVwbG9hZEVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOworCisgICAgcmV0dXJuIHdlYlZpZXc7
Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VEYXRhVHJhbnNmZXJJ
dGVtR2V0Rm9sZGVyQXNFbnRyeSkKK3sKKyAgICAvLyBUaGUgZXhwZWN0ZWQgb3V0cHV0IGlzIHNv
cnRlZCBieSBhbHBoYWJldGljYWwgb3JkZXIgaGVyZSBmb3IgY29uc2lzdGVudCBiZWhhdmlvciBh
Y3Jvc3MgZGlmZmVyZW50IHRlc3QgZW52aXJvbm1lbnRzLgorICAgIC8vIFNlZSBEYXRhVHJhbnNm
ZXJJdGVtLWdldEFzRW50cnkuaHRtbCBmb3IgbW9yZSBkZXRhaWxzLgorICAgIE5TQXJyYXk8TlNT
dHJpbmcgKj4gKmV4cGVjdGVkT3V0cHV0ID0gQFsKKyAgICAgICAgQCJGb3VuZCBkYXRhIHRyYW5z
ZmVyIGl0ZW0gKGtpbmQ6ICdmaWxlJywgdHlwZTogJycpIiwKKyAgICAgICAgQCJESVI6IC9zb21l
ZGlyZWN0b3J5IiwKKyAgICAgICAgQCJESVI6IC9zb21lZGlyZWN0b3J5L3N1YmRpcmVjdG9yeTEi
LAorICAgICAgICBAIkRJUjogL3NvbWVkaXJlY3Rvcnkvc3ViZGlyZWN0b3J5MiIsCisgICAgICAg
IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRklMRTogL3NvbWVkaXJlY3RvcnkvYXJjaGl2
ZS56aXAgKCdhcHBsaWNhdGlvbi96aXAnLCAldHUgYnl0ZXMpIiwgdGVzdFpJUEFyY2hpdmUoKS5s
ZW5ndGhdLAorICAgICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkZJTEU6IC9zb21l
ZGlyZWN0b3J5L2ljb24ucG5nICgnaW1hZ2UvcG5nJywgJXR1IGJ5dGVzKSIsIHRlc3RJY29uSW1h
Z2VEYXRhKCkubGVuZ3RoXSwKKyAgICAgICAgQCJGSUxFOiAvc29tZWRpcmVjdG9yeS9zdWJkaXJl
Y3RvcnkxL3RleHQtZmlsZS0xLnR4dCAoJ3RleHQvcGxhaW4nLCA0MyBieXRlcykiLAorICAgICAg
ICBAIkZJTEU6IC9zb21lZGlyZWN0b3J5L3N1YmRpcmVjdG9yeTIvdGV4dC1maWxlLTIudHh0ICgn
dGV4dC9wbGFpbicsIDQ0IGJ5dGVzKSIKKyAgICBdOworCisgICAgYXV0byB3ZWJWaWV3ID0gc2V0
VXBUZXN0V2ViVmlld0ZvckRhdGFUcmFuc2Zlckl0ZW1zKCk7CisgICAgX19ibG9jayBib29sIGRv
bmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBwZXJmb3JtQWZ0ZXJSZWNlaXZpbmdNZXNzYWdlOkAi
ZHJvcHBlZCIgYWN0aW9uOl4oKSB7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworCisg
ICAgcnVuVGVzdFdpdGhUZW1wb3JhcnlGb2xkZXIoXihOU1VSTCAqZm9sZGVyVVJMKSB7CisgICAg
ICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW05TSXRlbVByb3ZpZGVyIGFsbG9jXSBp
bml0XSk7CisgICAgICAgIFtpdGVtUHJvdmlkZXIgc2V0U3VnZ2VzdGVkTmFtZTpAInNvbWVkaXJl
Y3RvcnkiXTsKKyAgICAgICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckZpbGVSZXByZXNlbnRhdGlv
bkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVGb2xkZXIgZmlsZU9wdGlvbnM6
MCB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsIGxv
YWRIYW5kbGVyOltjYXB0dXJlZEZvbGRlclVSTCA9IHJldGFpblB0cihmb2xkZXJVUkwpXSAoRmls
ZUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkhhbmRsZXIpIC0+IE5TUHJvZ3Jlc3MgKiB7
CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjYXB0dXJlZEZvbGRlclVSTC5nZXQoKSwg
Tk8sIG5pbCk7CisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICB9XTsKKworICAgICAg
ICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10g
aW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICAgICAgW3NpbXVsYXRvciBzZXRF
eHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgICAgICBb
c2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFrZSgxNTAs
IDUwKV07CisgICAgfSk7CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwor
ICAgIEVYUEVDVF9XS19TVFJFUShbZXhwZWN0ZWRPdXRwdXQgY29tcG9uZW50c0pvaW5lZEJ5U3Ry
aW5nOkAiXG4iXSwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1
dC52YWx1ZSJdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZURh
dGFUcmFuc2Zlckl0ZW1HZXRQbGFpblRleHRGaWxlQXNFbnRyeSkKK3sKKyAgICBOU0FycmF5PE5T
U3RyaW5nICo+ICpleHBlY3RlZE91dHB1dCA9IEBbCisgICAgICAgIEAiRm91bmQgZGF0YSB0cmFu
c2ZlciBpdGVtIChraW5kOiAnZmlsZScsIHR5cGU6ICd0ZXh0L3BsYWluJykiLAorICAgICAgICBA
IkZJTEU6IC9mb28udHh0ICgndGV4dC9wbGFpbicsIDI4IGJ5dGVzKSIKKyAgICBdOworCisgICAg
YXV0byB3ZWJWaWV3ID0gc2V0VXBUZXN0V2ViVmlld0ZvckRhdGFUcmFuc2Zlckl0ZW1zKCk7Cisg
ICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBwZXJmb3JtQWZ0ZXJS
ZWNlaXZpbmdNZXNzYWdlOkAiZHJvcHBlZCIgYWN0aW9uOl4oKSB7CisgICAgICAgIGRvbmUgPSB0
cnVlOworICAgIH1dOworCisgICAgcnVuVGVzdFdpdGhUZW1wb3JhcnlUZXh0RmlsZSheKE5TVVJM
ICpmaWxlVVJMKSB7CisgICAgICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW05TSXRl
bVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtpdGVtUHJvdmlkZXIgc2V0U3VnZ2Vz
dGVkTmFtZTpAImZvbyJdOworICAgICAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRmlsZVJlcHJl
c2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRl
eHQgZmlsZU9wdGlvbnM6MCB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25W
aXNpYmlsaXR5QWxsIGxvYWRIYW5kbGVyOltjYXB0dXJlZEZpbGVVUkwgPSByZXRhaW5QdHIoZmls
ZVVSTCldKEZpbGVMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRpb25IYW5kbGVyKSAtPiBOU1By
b2dyZXNzICogeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY2FwdHVyZWRGaWxlVVJM
LmdldCgpLCBOTywgbmlsKTsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH1dOwor
CisgICAgICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9y
IGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgICAgICBbc2ltdWxh
dG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07Cisg
ICAgICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRvOkNHUG9pbnRN
YWtlKDE1MCwgNTApXTsKKyAgICB9KTsKKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
ZG9uZSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKFtleHBlY3RlZE91dHB1dCBjb21wb25lbnRzSm9p
bmVkQnlTdHJpbmc6QCJcbiJdLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAib3V0cHV0LnZhbHVlIl0pOworfQorCisjZW5kaWYgLy8gX19JUEhPTkVfT1NfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTEwMzAwCisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxT
b3VyY2VPdmVycmlkZURyb3BJbnNlcnRVUkwpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6
QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07CisK
KyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldE92
ZXJyaWRlUGVyZm9ybURyb3BCbG9jazpeTlNBcnJheTxVSURyYWdJdGVtICo+ICooaWQgPFVJRHJv
cFNlc3Npb24+IHNlc3Npb24pCisgICAgeworICAgICAgICBOU011dGFibGVBcnJheTxVSURyYWdJ
dGVtICo+ICphbGxvd2VkSXRlbXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAgICAgICBm
b3IgKFVJRHJhZ0l0ZW0gKml0ZW0gaW4gc2Vzc2lvbi5pdGVtcykgeworICAgICAgICAgICAgaWYg
KFtpdGVtLml0ZW1Qcm92aWRlci5yZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzIGNvbnRhaW5zT2Jq
ZWN0OihOU1N0cmluZyAqKWtVVFR5cGVVUkxdKQorICAgICAgICAgICAgICAgIFthbGxvd2VkSXRl
bXMgYWRkT2JqZWN0Oml0ZW1dOworICAgICAgICB9CisgICAgICAgIEVYUEVDVF9FUSgxVUwsIGFs
bG93ZWRJdGVtcy5jb3VudCk7CisgICAgICAgIHJldHVybiBhbGxvd2VkSXRlbXM7CisgICAgfV07
CisKKyAgICBhdXRvIGZpcnN0SXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVy
IGFsbG9jXSBpbml0XSk7CisgICAgW2ZpcnN0SXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OkAi
VGhpcyBpcyBhIHN0cmluZy4iIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlv
bk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKKyAgICBhdXRvIHNlY29uZEl0ZW1Qcm92aWRlciA9IGFk
b3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtzZWNvbmRJdGVtUHJv
dmlkZXIgcmVnaXN0ZXJPYmplY3Q6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3dlYmtp
dC5vcmcvIl0gdmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zp
c2liaWxpdHlBbGxdOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBb
IGZpcnN0SXRlbVByb3ZpZGVyLmdldCgpLCBzZWNvbmRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07Cisg
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50TWFr
ZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczovL3dlYmtpdC5vcmcv
IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29u
dGVudCJdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBPdmVycmlkZURyb3ApCit7Cisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzaW1wbGUiXTsKKworICAgIGF1dG8gc2ltdWxhdGVk
SXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Cisg
ICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5
cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOltAIjxib2R5Pjwv
Ym9keT4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07CisKKyAgICBf
X2Jsb2NrIGJvb2wgZmluaXNoZWRMb2FkaW5nRGF0YSA9IGZhbHNlOworICAgIGF1dG8gc2ltdWxh
dG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZp
ZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlk
ZXJzOkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHNl
dE92ZXJyaWRlRHJhZ1VwZGF0ZUJsb2NrOl5OU1VJbnRlZ2VyKE5TVUludGVnZXIgb3BlcmF0aW9u
LCBpZCBzZXNzaW9uKQorICAgIHsKKyAgICAgICAgRVhQRUNUX0VRKDBVLCBvcGVyYXRpb24pOwor
ICAgICAgICByZXR1cm4gVUlEcm9wT3BlcmF0aW9uQ29weTsKKyAgICB9XTsKKyAgICBbc2ltdWxh
dG9yIHNldERyb3BDb21wbGV0aW9uQmxvY2s6XihCT09MIGhhbmRsZWQsIE5TQXJyYXkgKml0ZW1Q
cm92aWRlcnMpIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGhhbmRsZWQpOworICAgICAgICBbaXRl
bVByb3ZpZGVycy5maXJzdE9iamVjdCBsb2FkRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50
aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgY29tcGxldGlvbkhhbmRsZXI6XihOU0RhdGEg
KmRhdGEsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgICAgICBOU1N0cmluZyAqdGV4dCA9IFtb
W05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6ZGF0YSBlbmNvZGluZzpOU1VURjhTdHJpbmdF
bmNvZGluZ10gYXV0b3JlbGVhc2VdOworICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCI8Ym9k
eT48L2JvZHk+IiwgdGV4dC5VVEY4U3RyaW5nKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSgh
IWVycm9yKTsKKyAgICAgICAgICAgIGZpbmlzaGVkTG9hZGluZ0RhdGEgPSB0cnVlOworICAgICAg
ICB9XTsKKyAgICB9XTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0
MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZmaW5pc2hlZExvYWRpbmdEYXRhKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBJ
bmplY3RlZEJ1bmRsZU92ZXJyaWRlUGVyZm9ybVR3b1N0ZXBEcm9wKQoreworICAgIFdLV2ViVmll
d0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBf
dGVzdF9jb25maWd1cmF0aW9uV2l0aFRlc3RQbHVnSW5DbGFzc05hbWU6QCJCdW5kbGVFZGl0aW5n
RGVsZWdhdGVQbHVnSW4iXTsKKyAgICBbY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2V0T2Jq
ZWN0OkBZRVMgZm9yQnVuZGxlUGFyYW1ldGVyOkAiQnVuZGxlT3ZlcnJpZGVQZXJmb3JtVHdvU3Rl
cERyb3AiXTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbl0pOworICAgIFt3ZWJWaWV3IGxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0
b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSJdOworCisgICAg
YXV0byBzaW11bGF0ZWRJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxs
b2NdIGluaXRdKTsKKyAgICBbc2ltdWxhdGVkSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJl
c2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRl
eHQgb3B0aW9uczpuaWwgbG9hZEhhbmRsZXI6Xk5TUHJvZ3Jlc3MgKihVSUl0ZW1Qcm92aWRlckRh
dGFMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRpb25CbG9jaykKKyAgICB7CisgICAgICAgIGNv
bXBsZXRpb25CbG9jayhbQCJIZWxsbyB3b3JsZCIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3Ry
aW5nRW5jb2RpbmddLCBuaWwpOworICAgICAgICByZXR1cm4gW05TUHJvZ3Jlc3MgZGlzY3JldGVQ
cm9ncmVzc1dpdGhUb3RhbFVuaXRDb3VudDoxMDBdOworICAgIH1dOworCisgICAgYXV0byBzaW11
bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92
aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsK
KworICAgIEVYUEVDVF9FUSgwVUwsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXS5sZW5ndGgpOworfQorCitURVNUKERyYWdBbmREcm9w
VGVzdHMsIEluamVjdGVkQnVuZGxlQWxsb3dQZXJmb3JtVHdvU3RlcERyb3ApCit7CisgICAgV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtXS1dlYlZpZXdDb25maWd1cmF0
aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVzdFBsdWdJbkNsYXNzTmFtZTpAIkJ1bmRsZUVk
aXRpbmdEZWxlZ2F0ZVBsdWdJbiJdOworICAgIFtjb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF9z
ZXRPYmplY3Q6QE5PIGZvckJ1bmRsZVBhcmFtZXRlcjpAIkJ1bmRsZU92ZXJyaWRlUGVyZm9ybVR3
b1N0ZXBEcm9wIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKSBjb25maWd1
cmF0aW9uOmNvbmZpZ3VyYXRpb25dKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRl
c3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07CisgICAgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJh
bmdlcygpIl07CisKKyAgICBhdXRvIHNpbXVsYXRlZEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tV
SUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXIg
cmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilr
VVRUeXBlVVRGOFBsYWluVGV4dCBvcHRpb25zOm5pbCBsb2FkSGFuZGxlcjpeTlNQcm9ncmVzcyAq
KFVJSXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkJsb2NrKQor
ICAgIHsKKyAgICAgICAgY29tcGxldGlvbkJsb2NrKFtAIkhlbGxvIHdvcmxkIiBkYXRhVXNpbmdF
bmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10sIG5pbCk7CisgICAgICAgIHJldHVybiBbTlNQ
cm9ncmVzcyBkaXNjcmV0ZVByb2dyZXNzV2l0aFRvdGFsVW5pdENvdW50OjEwMF07CisgICAgfV07
CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBh
bGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNl
dEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07
CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50
TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCJIZWxsbyB3b3JsZCIsIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQi
XS5VVEY4U3RyaW5nKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBJbmplY3RlZEJ1bmRs
ZUltYWdlRWxlbWVudERhdGEpCit7CisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmln
dXJhdGlvbiA9IFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRo
VGVzdFBsdWdJbkNsYXNzTmFtZTpAIkJ1bmRsZUVkaXRpbmdEZWxlZ2F0ZVBsdWdJbiJdOworICAg
IFtjb25maWd1cmF0aW9uIF9zZXRBdHRhY2htZW50RWxlbWVudEVuYWJsZWQ6WUVTXTsKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25d
KTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJpbWFnZS1h
bmQtY29udGVudGVkaXRhYmxlIl07CisKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxOU1N0cmluZz4g
aW5qZWN0ZWRTdHJpbmc7CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERy
b3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAg
W3NpbXVsYXRvciBzZXRDb252ZXJ0SXRlbVByb3ZpZGVyc0Jsb2NrOl5OU0FycmF5ICooVUlJdGVt
UHJvdmlkZXIgKml0ZW1Qcm92aWRlciwgTlNBcnJheSAqLCBOU0RpY3Rpb25hcnkgKmRhdGEpCisg
ICAgeworICAgICAgICBpbmplY3RlZFN0cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10g
aW5pdFdpdGhEYXRhOmRhdGFbSW5qZWN0ZWRCdW5kbGVQYXN0ZWJvYXJkRGF0YVR5cGVdIGVuY29k
aW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSk7CisgICAgICAgIHJldHVybiBAWyBpdGVtUHJvdmlk
ZXIgXTsKKyAgICB9XTsKKworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAs
IDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDI1MCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCJo
ZWxsbyIsIFtpbmplY3RlZFN0cmluZyBVVEY4U3RyaW5nXSk7Cit9CisKK1RFU1QoRHJhZ0FuZERy
b3BUZXN0cywgSW5qZWN0ZWRCdW5kbGVBdHRhY2htZW50RWxlbWVudERhdGEpCit7CisgICAgV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtXS1dlYlZpZXdDb25maWd1cmF0
aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVzdFBsdWdJbkNsYXNzTmFtZTpAIkJ1bmRsZUVk
aXRpbmdEZWxlZ2F0ZVBsdWdJbiJdOworICAgIFtjb25maWd1cmF0aW9uIF9zZXRBdHRhY2htZW50
RWxlbWVudEVuYWJsZWQ6WUVTXTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKSBj
b25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5
TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdHRhY2htZW50LWVsZW1lbnQiXTsKKworICAgIF9fYmxvY2sg
UmV0YWluUHRyPE5TU3RyaW5nPiBpbmplY3RlZFN0cmluZzsKKyAgICBhdXRvIHNpbXVsYXRvciA9
IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldENvbnZlcnRJdGVtUHJvdmlkZXJzQmxv
Y2s6Xk5TQXJyYXkgKihVSUl0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyLCBOU0FycmF5ICosIE5T
RGljdGlvbmFyeSAqZGF0YSkKKyAgICB7CisgICAgICAgIGluamVjdGVkU3RyaW5nID0gYWRvcHRO
UyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6ZGF0YVtJbmplY3RlZEJ1bmRsZVBhc3Rl
Ym9hcmREYXRhVHlwZV0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKKyAgICAgICAg
cmV0dXJuIEBbIGl0ZW1Qcm92aWRlciBdOworICAgIH1dOworCisgICAgW3NpbXVsYXRvciBydW5G
cm9tOkNHUG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2UoNTAsIDQwMCldOworCisgICAg
RVhQRUNUX1dLX1NUUkVRKCJoZWxsbyIsIFtpbmplY3RlZFN0cmluZyBVVEY4U3RyaW5nXSk7Cisg
ICAgRVhQRUNUX1RSVUUoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdl
dFNlbGVjdGlvbigpLmlzQ29sbGFwc2VkIl0uYm9vbFZhbHVlKTsKK30KKworVEVTVChEcmFnQW5k
RHJvcFRlc3RzLCBMYXJnZUltYWdlVG9UYXJnZXREaXYpCit7CisgICAgYXV0byB0ZXN0V2ViVmll
d0NvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10g
aW5pdF0pOworICAgIFtbdGVzdFdlYlZpZXdDb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0
TGFyZ2VJbWFnZUFzeW5jRGVjb2RpbmdFbmFibGVkOk5PXTsKKworICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRpb246dGVzdFdlYlZpZXdDb25maWd1cmF0aW9uLmdl
dCgpXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZGl2
LWFuZC1sYXJnZS1pbWFnZSJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJh
Z0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7
CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgNDAwKSB0bzpDR1BvaW50
TWFrZSgyMDAsIDE1MCldOworICAgIEVYUEVDVF9XS19TVFJFUSgiUEFTUyIsIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0YXJnZXQudGV4dENvbnRlbnQiXS5VVEY4U3Ry
aW5nKTsKKyAgICBjaGVja0ZpcnN0VHlwZUlzUHJlc2VudEFuZFNlY29uZFR5cGVJc01pc3Npbmco
c2ltdWxhdG9yLmdldCgpLCBrVVRUeXBlUE5HLCBrVVRUeXBlRmlsZVVSTCk7CisgICAgY2hlY2tF
c3RpbWF0ZWRTaXplKHNpbXVsYXRvci5nZXQoKSwgeyAyMDAwLCAyMDAwIH0pOworfQorCitURVNU
KERyYWdBbmREcm9wVGVzdHMsIExpbmtXaXRoRW1wdHlIUkVGKQoreworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0
UGFnZU5hbWVkOkAibGluay1hbmQtaW5wdXQiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYScpLmhyZWYgPSAnJyJd
OworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3Ig
YWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBy
dW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisK
KyAgICBFWFBFQ1RfRVEoRHJhZ0FuZERyb3BQaGFzZUNhbmNlbGxlZCwgW3NpbXVsYXRvciBwaGFz
ZV0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVdLlVURjhT
dHJpbmcpOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIENhbmNlbGxlZExpZnREb2VzTm90
Q2F1c2VTdWJzZXF1ZW50RHJhZ3NUb0ZhaWwpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6
QCJsaW5rLWFuZC10YXJnZXQtZGl2Il07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMo
W1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldENvbnZlcnRJdGVtUHJvdmlkZXJzQmxvY2s6Xk5TQXJy
YXkgKihVSUl0ZW1Qcm92aWRlciAqLCBOU0FycmF5ICosIE5TRGljdGlvbmFyeSAqKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEBbIF07CisgICAgfV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNH
UG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisgICAgRVhQRUNU
X0VRKERyYWdBbmREcm9wUGhhc2VDYW5jZWxsZWQsIFtzaW11bGF0b3IgcGhhc2VdKTsKKyAgICBF
WFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJ0YXJnZXQudGV4dENvbnRlbnQiXSk7CisgICAgTlNTdHJpbmcgKm91dHB1dFRleHQgPSBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnRleHRDb250ZW50Il07
CisgICAgY2hlY2tTdHJpbmdBcnJheXNBcmVFcXVhbChAW0AiZHJhZ3N0YXJ0IiwgQCJkcmFnZW5k
Il0sIFtvdXRwdXRUZXh0IGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIiAiXSk7CisKKyAg
ICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LmlubmVySFRN
TCA9ICcnIl07CisgICAgW3NpbXVsYXRvciBzZXRDb252ZXJ0SXRlbVByb3ZpZGVyc0Jsb2NrOl5O
U0FycmF5ICooVUlJdGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciwgTlNBcnJheSAqLCBOU0RpY3Rp
b25hcnkgKikKKyAgICB7CisgICAgICAgIHJldHVybiBAWyBpdGVtUHJvdmlkZXIgXTsKKyAgICB9
XTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2lu
dE1ha2UoMTAwLCAzMDApXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlBBU1MiLCBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGFyZ2V0LnRleHRDb250ZW50Il0pOworICAg
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudGV4dENvbnRl
bnQiXTsKKyAgICBjaGVja1N0cmluZ0FycmF5c0FyZUVxdWFsKEBbQCJkcmFnc3RhcnQiLCBAImRy
YWdlbmQiXSwgW291dHB1dFRleHQgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiICJdKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdERyYWdBbmREcm9wT250b1RhcmdldEVsZW1lbnRzKFRlc3RX
S1dlYlZpZXcgKndlYlZpZXcpCit7CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJh
Z0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3XSk7CisgICAg
W3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2UoNTAs
IDI1MCldOworICAgIEVYUEVDVF9XS19TVFJFUSgicmdiKDAsIDEyOCwgMCkiLCBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQxKS5i
YWNrZ3JvdW5kQ29sb3IiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJQQVNTIiwgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRhcmdldDEudGV4dENvbnRlbnQiXSk7CisK
KyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFr
ZSgyNTAsIDUwKV07CisgICAgRVhQRUNUX1dLX1NUUkVRKCJyZ2IoMCwgMTI4LCAwKSIsIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRDb21wdXRlZFN0eWxlKHRhcmdl
dDIpLmJhY2tncm91bmRDb2xvciJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlBBU1MiLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGFyZ2V0Mi50ZXh0Q29udGVudCJd
KTsKKworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRvOkNHUG9p
bnRNYWtlKDI1MCwgMjUwKV07CisgICAgRVhQRUNUX1dLX1NUUkVRKCJyZ2IoMCwgMTI4LCAwKSIs
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRDb21wdXRlZFN0eWxl
KHRhcmdldDMpLmJhY2tncm91bmRDb2xvciJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlBBU1Mi
LCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGFyZ2V0My50ZXh0Q29u
dGVudCJdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEcmFnRXZlbnRDbGllbnRDb29y
ZGluYXRlc0Jhc2ljKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Cisg
ICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHJvcC10YXJnZXRz
Il07CisKKyAgICB0ZXN0RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMod2ViVmlldy5nZXQo
KSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRHJhZ0V2ZW50Q2xpZW50Q29vcmRpbmF0
ZXNXaXRoU2Nyb2xsT2Zmc2V0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDAp
XSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHJvcC10
YXJnZXRzIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRv
Y3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gJzEwMDBweCAwJyJdOworICAgIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNj
cm9sbFRvcCA9IDEwMDAiXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVw
ZGF0ZV07CisKKyAgICB0ZXN0RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMod2ViVmlldy5n
ZXQoKSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRHJhZ0V2ZW50UGFnZUNvb3JkaW5h
dGVzQmFzaWMpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBb
d2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkcm9wLXRhcmdldHMiXTsK
KyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid2luZG93LnVzZVBh
Z2VDb29yZGluYXRlcyA9IHRydWUiXTsKKworICAgIHRlc3REcmFnQW5kRHJvcE9udG9UYXJnZXRF
bGVtZW50cyh3ZWJWaWV3LmdldCgpKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEcmFn
RXZlbnRQYWdlQ29vcmRpbmF0ZXNXaXRoU2Nyb2xsT2Zmc2V0KQoreworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0
UGFnZU5hbWVkOkAiZHJvcC10YXJnZXRzIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gJzEwMDBweCAwJyJd
OworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5z
Y3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IDEwMDAiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid2luZG93LnVzZVBhZ2VDb29yZGluYXRlcyA9IHRydWUi
XTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07CisKKyAgICB0
ZXN0RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMod2ViVmlldy5nZXQoKSk7Cit9CisKK1RF
U1QoRHJhZ0FuZERyb3BUZXN0cywgRG9Ob3RDcmFzaFdoZW5TZWxlY3Rpb25Jc0NsZWFyZWRJbkRy
YWdTdGFydCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImRyYWdzdGFydC1jbGVhci1z
ZWxlY3Rpb24iXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9w
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtz
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAw
LCAxMDApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiUEFTUyIsIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJwYXJhZ3JhcGgudGV4dENvbnRlbnQiXSk7Cit9CisKKy8v
IEZJWE1FOiBSZS1lbmFibGUgdGhpcyB0ZXN0IG9uY2Ugd2UgcmVzb2x2ZSA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTIwND4KKyNpZiBfX0lQSE9ORV9PU19WRVJT
SU9OX01BWF9BTExPV0VEIDw9IDExMDQwMQorVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBDdXN0b21B
Y3Rpb25TaGVldFBvcG92ZXIpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCld
KTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJsaW5rLWFu
ZC10YXJnZXQtZGl2Il07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5k
RHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAg
ICBbc2ltdWxhdG9yIHNldFNob3VsZEVuc3VyZVVJQXBwbGljYXRpb246WUVTXTsKKworICAgIF9f
YmxvY2sgQk9PTCBkaWRJbnZva2VDdXN0b21BY3Rpb25TaGVldCA9IE5POworICAgIFtzaW11bGF0
b3Igc2V0U2hvd0N1c3RvbUFjdGlvblNoZWV0QmxvY2s6XkJPT0woX1dLQWN0aXZhdGVkRWxlbWVu
dEluZm8gKmVsZW1lbnQpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoX1dLQWN0aXZhdGVkRWxl
bWVudFR5cGVMaW5rLCBlbGVtZW50LnR5cGUpOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIkhl
bGxvIHdvcmxkIiwgZWxlbWVudC50aXRsZS5VVEY4U3RyaW5nKTsKKyAgICAgICAgZGlkSW52b2tl
Q3VzdG9tQWN0aW9uU2hlZXQgPSBZRVM7CisgICAgICAgIHJldHVybiBZRVM7CisgICAgfV07Cisg
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtl
KDEwMCwgMzAwKV07CisgICAgRVhQRUNUX1RSVUUoZGlkSW52b2tlQ3VzdG9tQWN0aW9uU2hlZXQp
OworICAgIEVYUEVDVF9XS19TVFJFUSgiUEFTUyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJ0YXJnZXQudGV4dENvbnRlbnQiXS5VVEY4U3RyaW5nKTsKK30KKyNlbmRp
ZgorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIFVucmVzcG9uc2l2ZVBhZ2VEb2VzTm90SGFuZ1VJ
KQoreworICAgIF9XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbiAqcHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uID0gW1tbX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRv
cmVsZWFzZV07CisgICAgcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmlnbm9yZVN5bmNocm9ub3Vz
TWVzc2FnaW5nVGltZW91dHNGb3JUZXN0aW5nID0gWUVTOworCisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCkgY29uZmlndXJhdGlvbjpbW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFs
bG9jXSBpbml0XSBhdXRvcmVsZWFzZV0gcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOnByb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbl0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBh
Z2VOYW1lZDpAInNpbXBsZSJdOworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAIndo
aWxlKDEpOyIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKworICAgIC8vIFRoZSB0ZXN0IHBhc3Nl
cyBpZiB3ZSBjYW4gcHJlcGFyZSBmb3IgYSBkcmFnIHNlc3Npb24gd2l0aG91dCB0aW1pbmcgb3V0
LgorICAgIGF1dG8gZHJhZ1Nlc3Npb24gPSBhZG9wdE5TKFtbTW9ja0RyYWdTZXNzaW9uIGFsbG9j
XSBpbml0XSk7CisgICAgWyhpZCA8VUlEcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV9Gb3JXZWJLaXRP
bmx5Pilbd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gX2RyYWdJbnRlcmFjdGlvbjpb
d2ViVmlldyBkcmFnSW50ZXJhY3Rpb25dIHByZXBhcmVGb3JTZXNzaW9uOmRyYWdTZXNzaW9uLmdl
dCgpIGNvbXBsZXRpb246XigpIHsgfV07Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgV2Vi
SXRlbVByb3ZpZGVyUGFzdGVib2FyZExvYWRpbmcpCit7CisgICAgc3RhdGljIE5TU3RyaW5nICpm
YXN0U3RyaW5nID0gQCJUaGlzIGRhdGEgbG9hZHMgcXVpY2tseSI7CisgICAgc3RhdGljIE5TU3Ry
aW5nICpzbG93U3RyaW5nID0gQCJUaGlzIGRhdGEgbG9hZHMgc2xvd2x5IjsKKworICAgIFdlYkl0
ZW1Qcm92aWRlclBhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbV2ViSXRlbVByb3ZpZGVyUGFzdGVi
b2FyZCBzaGFyZWRJbnN0YW5jZV07CisgICAgYXV0byBmYXN0SXRlbSA9IGFkb3B0TlMoW1tVSUl0
ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtmYXN0SXRlbSByZWdpc3RlckRhdGFSZXBy
ZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5U
ZXh0IG9wdGlvbnM6bmlsIGxvYWRIYW5kbGVyOl5OU1Byb2dyZXNzICooVUlJdGVtUHJvdmlkZXJE
YXRhTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uQmxvY2spCisgICAgeworICAgICAgICBj
b21wbGV0aW9uQmxvY2soW2Zhc3RTdHJpbmcgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5n
RW5jb2RpbmddLCBuaWwpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH1dOworCisgICAgYXV0
byBzbG93SXRlbSA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAg
IFtzbG93SXRlbSByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihO
U1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0IG9wdGlvbnM6bmlsIGxvYWRIYW5kbGVyOl5O
U1Byb2dyZXNzICooVUlJdGVtUHJvdmlkZXJEYXRhTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0
aW9uQmxvY2spCisgICAgeworICAgICAgICBzbGVlcCgyX3MpOworICAgICAgICBjb21wbGV0aW9u
QmxvY2soW3Nsb3dTdHJpbmcgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rpbmdd
LCBuaWwpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH1dOworCisgICAgX19ibG9jayBib29s
IGhhc1J1bkZpcnN0Q29tcGxldGlvbkJsb2NrID0gZmFsc2U7CisgICAgcGFzdGVib2FyZC5pdGVt
UHJvdmlkZXJzID0gQFsgZmFzdEl0ZW0uZ2V0KCksIHNsb3dJdGVtLmdldCgpIF07CisgICAgW3Bh
c3RlYm9hcmQgZG9BZnRlckxvYWRpbmdQcm92aWRlZENvbnRlbnRJbnRvRmlsZVVSTHM6XihOU0Fy
cmF5PE5TVVJMICo+ICp1cmxzKSB7CisgICAgICAgIEVYUEVDVF9FUSgyVUwsIHVybHMuY291bnQp
OworICAgICAgICBhdXRvIGZpcnN0U3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBp
bml0V2l0aENvbnRlbnRzT2ZVUkw6dXJsc1swXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
ZyBlcnJvcjpuaWxdKTsKKyAgICAgICAgYXV0byBzZWNvbmRTdHJpbmcgPSBhZG9wdE5TKFtbTlNT
dHJpbmcgYWxsb2NdIGluaXRXaXRoQ29udGVudHNPZlVSTDp1cmxzWzFdIGVuY29kaW5nOk5TVVRG
OFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoZmFz
dFN0cmluZywgW2ZpcnN0U3RyaW5nIFVURjhTdHJpbmddKTsKKyAgICAgICAgRVhQRUNUX1dLX1NU
UkVRKHNsb3dTdHJpbmcsIFtzZWNvbmRTdHJpbmcgVVRGOFN0cmluZ10pOworICAgICAgICBoYXNS
dW5GaXJzdENvbXBsZXRpb25CbG9jayA9IHRydWU7CisgICAgfSBzeW5jaHJvbm91c1RpbWVvdXQ6
NjAwXTsKKyAgICBFWFBFQ1RfVFJVRShoYXNSdW5GaXJzdENvbXBsZXRpb25CbG9jayk7CisKKyAg
ICBfX2Jsb2NrIGJvb2wgaGFzUnVuU2Vjb25kQ29tcGxldGlvbkJsb2NrID0gZmFsc2U7CisgICAg
W3Bhc3RlYm9hcmQgZG9BZnRlckxvYWRpbmdQcm92aWRlZENvbnRlbnRJbnRvRmlsZVVSTHM6XihO
U0FycmF5PE5TVVJMICo+ICp1cmxzKSB7CisgICAgICAgIEVYUEVDVF9FUSgyVUwsIHVybHMuY291
bnQpOworICAgICAgICBhdXRvIGZpcnN0U3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9j
XSBpbml0V2l0aENvbnRlbnRzT2ZVUkw6dXJsc1swXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNv
ZGluZyBlcnJvcjpuaWxdKTsKKyAgICAgICAgYXV0byBzZWNvbmRTdHJpbmcgPSBhZG9wdE5TKFtb
TlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ29udGVudHNPZlVSTDp1cmxzWzFdIGVuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEo
ZmFzdFN0cmluZywgW2ZpcnN0U3RyaW5nIFVURjhTdHJpbmddKTsKKyAgICAgICAgRVhQRUNUX1dL
X1NUUkVRKHNsb3dTdHJpbmcsIFtzZWNvbmRTdHJpbmcgVVRGOFN0cmluZ10pOworICAgICAgICBo
YXNSdW5TZWNvbmRDb21wbGV0aW9uQmxvY2sgPSB0cnVlOworICAgIH0gc3luY2hyb25vdXNUaW1l
b3V0OjBdOworICAgIEVYUEVDVF9GQUxTRShoYXNSdW5TZWNvbmRDb21wbGV0aW9uQmxvY2spOwor
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmaGFzUnVuU2Vjb25kQ29tcGxldGlvbkJsb2Nr
KTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEb05vdENyYXNoV2hlblNlbGVjdGlvbk1v
dmVzT2Zmc2NyZWVuQWZ0ZXJEcmFnU3RhcnQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6
QCJkcmFnc3RhcnQtY2hhbmdlLXNlbGVjdGlvbi1vZmZzY3JlZW4iXTsKKworICAgIGF1dG8gc2lt
dWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdl
YlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFr
ZSgxMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsKKworICAgIEVYUEVDVF9XS19T
VFJFUSgiRkFSIE9GRlNDUkVFTiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJnZXRTZWxlY3Rpb24oKS5nZXRSYW5nZUF0KDApLnRvU3RyaW5nKCkiXSk7Cit9CisKK1RF
U1QoRHJhZ0FuZERyb3BUZXN0cywgQWRkaXRpb25hbEl0ZW1zQ2FuQmVQcmV2ZW50ZWRPbkRyYWdT
dGFydCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNlbGVjdGVkLXRleHQtaW1hZ2Ut
bGluay1hbmQtZWRpdGFibGUiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAibGluay5hZGRFdmVudExpc3RlbmVyKCdkcmFnc3RhcnQnLCBlID0+IGUucHJldmVu
dERlZmF1bHQoKSkiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAiaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgZSA9PiBlLnByZXZlbnREZWZh
dWx0KCkpIl07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNp
bXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2lt
dWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFrZSg1MCwgNDAw
KSBhZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnM6QHsKKyAgICAgICAgQDAuMzM6IFtOU1Zh
bHVlIHZhbHVlV2l0aENHUG9pbnQ6Q0dQb2ludE1ha2UoNTAsIDE1MCldLAorICAgICAgICBAMC42
NjogW05TVmFsdWUgdmFsdWVXaXRoQ0dQb2ludDpDR1BvaW50TWFrZSg1MCwgMjUwKV0KKyAgICB9
XTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIkFCQ0QiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il0pOworfQorCitURVNUKERyYWdBbmRE
cm9wVGVzdHMsIEFkZGl0aW9uYWxMaW5rQW5kSW1hZ2VJbnRvQ29udGVudEVkaXRhYmxlKQorewor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2VsZWN0ZWQtdGV4dC1pbWFnZS1saW5rLWFuZC1l
ZGl0YWJsZSJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BT
aW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3Np
bXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2UoNTAsIDQw
MCkgYWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zOkB7CisgICAgICAgIEAwLjMzOiBbTlNW
YWx1ZSB2YWx1ZVdpdGhDR1BvaW50OkNHUG9pbnRNYWtlKDUwLCAxNTApXSwKKyAgICAgICAgQDAu
NjY6IFtOU1ZhbHVlIHZhbHVlV2l0aENHUG9pbnQ6Q0dQb2ludE1ha2UoNTAsIDI1MCldCisgICAg
fV07CisgICAgRVhQRUNUX1dLX1NUUkVRKCJBQkNEQSBsaW5rIiwgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1Rf
VFJVRShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiISFlZGl0b3IucXVl
cnlTZWxlY3RvcignaW1nJykiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczovL3d3dy5h
cHBsZS5jb20vIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRv
ci5xdWVyeVNlbGVjdG9yKCdhJykuaHJlZiJdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3Rz
LCBEcmFnTGlmdFByZXZpZXdEYXRhVHJhbnNmZXJTZXREcmFnSW1hZ2UpCit7CisgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9h
ZFRlc3RQYWdlTmFtZWQ6QCJEYXRhVHJhbnNmZXItc2V0RHJhZ0ltYWdlIl07CisgICAgYXV0byBz
aW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRo
V2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisKKyAgICAvLyBVc2UgRGF0YVRyYW5zZmVyLnNldERy
YWdJbWFnZSB0byBzcGVjaWZ5IGFuIGV4aXN0aW5nIGltYWdlIGVsZW1lbnQgaW4gdGhlIERPTS4K
KyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1h
a2UoMjUwLCA1MCldOworICAgIGNoZWNrQ0dSZWN0SXNFcXVhbFRvQ0dSZWN0V2l0aExvZ2dpbmco
e3sxMDAsIDUwfSwgezIxNSwgMTc0fX0sIFtzaW11bGF0b3IgbGlmdFByZXZpZXdzXVswXS52aWV3
LmZyYW1lKTsKKworICAgIC8vIFVzZSBEYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlIHRvIHNwZWNp
ZnkgYW4gZXhpc3RpbmcgaW1hZ2UgZWxlbWVudCBpbiB0aGUgRE9NLCB3aXRoIHggYW5kIHkgb2Zm
c2V0cy4KKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAsIDE1MCkgdG86Q0dQ
b2ludE1ha2UoMjUwLCAxNTApXTsKKyAgICBjaGVja0NHUmVjdElzRXF1YWxUb0NHUmVjdFdpdGhM
b2dnaW5nKHt7LTkwLCA1MH0sIHsyMTUsIDE3NH19LCBbc2ltdWxhdG9yIGxpZnRQcmV2aWV3c11b
MF0udmlldy5mcmFtZSk7CisKKyAgICAvLyBVc2UgRGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSB0
byBzcGVjaWZ5IGEgbmV3bHkgY3JlYXRlZCBJbWFnZSwgZGlzY29ubmVjdGVkIGZyb20gdGhlIERP
TS4KKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCAyNTApIHRvOkNHUG9p
bnRNYWtlKDI1MCwgMjUwKV07CisgICAgY2hlY2tDR1JlY3RJc0VxdWFsVG9DR1JlY3RXaXRoTG9n
Z2luZyh7ezEwMCwgMjUwfSwgezIxNSwgMTc0fX0sIFtzaW11bGF0b3IgbGlmdFByZXZpZXdzXVsw
XS52aWV3LmZyYW1lKTsKKworICAgIC8vIERvbid0IHVzZSBEYXRhVHJhbnNmZXIuc2V0RHJhZ0lt
YWdlIGFuZCBmYWxsIGJhY2sgdG8gc25hcHNob3R0aW5nIHRoZSBkcmFnZ2VkIGVsZW1lbnQuCisg
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCAzNTApIHRvOkNHUG9pbnRNYWtl
KDI1MCwgMzUwKV07CisgICAgY2hlY2tDR1JlY3RJc0VxdWFsVG9DR1JlY3RXaXRoTG9nZ2luZyh7
ezAsIDMwMH0sIHszMDAsIDEwMH19LCBbc2ltdWxhdG9yIGxpZnRQcmV2aWV3c11bMF0udmlldy5m
cmFtZSk7CisKKyAgICAvLyBQZXJmb3JtIGEgbm9ybWFsIGRyYWcgb24gYW4gaW1hZ2UuCisgICAg
W3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA0NTApIHRvOkNHUG9pbnRNYWtlKDI1
MCwgNDUwKV07CisgICAgY2hlY2tDR1JlY3RJc0VxdWFsVG9DR1JlY3RXaXRoTG9nZ2luZyh7ezAs
IDQwMH0sIHsyMTUsIDE3NH19LCBbc2ltdWxhdG9yIGxpZnRQcmV2aWV3c11bMF0udmlldy5mcmFt
ZSk7Cit9CisKKyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAzMDAK
Kworc3RhdGljIE5TRGF0YSAqdGVzdEljb25JbWFnZURhdGEoKQoreworICAgIHJldHVybiBbTlNE
YXRhIGRhdGFXaXRoQ29udGVudHNPZkZpbGU6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBwYXRoRm9y
UmVzb3VyY2U6QCJpY29uIiBvZlR5cGU6QCJwbmciIGluRGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXV07Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRGF0YVRyYW5zZmVy
R2V0RGF0YVdoZW5Ecm9wcGluZ0ltYWdlQW5kTWFya3VwKQoreworICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEN1c3RvbVBhc3RlYm9hcmRE
YXRhRW5hYmxlZCgoV0tQcmVmZXJlbmNlc1JlZilbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcmVm
ZXJlbmNlcywgdHJ1ZSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5h
bWVkOkAiRGF0YVRyYW5zZmVyIl07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tE
cmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCld
KTsKKyAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxv
Y10gaW5pdF0pOworICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25G
b3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlUE5HIHdpdGhEYXRhOnRlc3RJY29u
SW1hZ2VEYXRhKCldOworICAgIE5TU3RyaW5nICptYXJrdXBTdHJpbmcgPSBAIjxzY3JpcHQ+YmFy
KCk8L3NjcmlwdD48c3Ryb25nIG9ubW91c2Vkb3duPWphdmFzY3JpcHQ6dm9pZCgwKT5IRUxMTyBX
T1JMRDwvc3Ryb25nPiI7CisgICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRh
dGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOltt
YXJrdXBTdHJpbmcgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKKyAg
ICBbaXRlbVByb3ZpZGVyIHNldFN1Z2dlc3RlZE5hbWU6QCJpY29uIl07CisgICAgW3NpbXVsYXRv
ciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAg
IFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50WmVybyB0bzpDR1BvaW50TWFrZSg1MCwgMTAwKV07
CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIkZpbGVzLCB0ZXh0L2h0bWwiLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidHlwZXMudGV4dENvbnRlbnQiXSk7CisgICAgRVhQ
RUNUX1dLX1NUUkVRKCIoU1RSSU5HLCB0ZXh0L2h0bWwpLCAoRklMRSwgaW1hZ2UvcG5nKSIsIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJpdGVtcy50ZXh0Q29udGVudCJd
KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIignaWNvbi5wbmcnLCBpbWFnZS9wbmcpIiwgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImZpbGVzLnRleHRDb250ZW50Il0pOwor
ICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAInVybERhdGEudGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGV4dERhdGEudGV4dENvbnRl
bnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJIRUxMTyBXT1JMRCIsIFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJodG1sRGF0YS50ZXh0Q29udGVudCJdKTsKKyAgICBF
WFBFQ1RfRkFMU0UoW1t3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJyYXdI
VE1MRGF0YS50ZXh0Q29udGVudCJdIGNvbnRhaW5zU3RyaW5nOkAic2NyaXB0Il0pOworfQorCitU
RVNUKERyYWdBbmREcm9wVGVzdHMsIERhdGFUcmFuc2ZlckdldERhdGFXaGVuRHJvcHBpbmdQbGFp
blRleHQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10
eXBlcyJdOworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxh
dG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNlbGVjdChwbGFpbikiXTsKKyAgICBb
c2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDc1KSB0bzpDR1BvaW50TWFrZSg1MCwg
Mzc1KV07CisgICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAeworICAgICAgICBAImRyYWdvdmVyIjog
QHsgQCJ0ZXh0L3BsYWluIiA6IEAiIiB9LAorICAgICAgICBAImRyb3AiOiBAeyBAInRleHQvcGxh
aW4iIDogQCJQbGFpbiB0ZXh0IiB9CisgICAgfSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0
cywgRGF0YVRyYW5zZmVyR2V0RGF0YVdoZW5Ecm9wcGluZ0N1c3RvbURhdGEpCit7CisgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5
TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOworICAgIGF1dG8g
c2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0
aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAInNlbGVjdChyaWNoKSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJ3cml0ZUN1c3RvbURhdGEgPSB0cnVlIl07CisgICAgW3NpbXVs
YXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCAyMjUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUp
XTsKKyAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7CisgICAgICAgIEAiZHJhZ292ZXIiIDogQHsK
KyAgICAgICAgICAgIEAidGV4dC9wbGFpbiIgOiBAIiIsCisgICAgICAgICAgICBAImZvby9wbGFp
biIgOiBAIiIsCisgICAgICAgICAgICBAInRleHQvaHRtbCIgOiBAIiIsCisgICAgICAgICAgICBA
ImJhci9odG1sIiA6IEAiIiwKKyAgICAgICAgICAgIEAidGV4dC91cmktbGlzdCIgOiBAIiIsCisg
ICAgICAgICAgICBAImJhei91cmktbGlzdCIgOiBAIiIKKyAgICAgICAgfSwKKyAgICAgICAgQCJk
cm9wIiA6IEB7CisgICAgICAgICAgICBAInRleHQvcGxhaW4iIDogQCJiZW4gYml0ZGlkZGxlIiwK
KyAgICAgICAgICAgIEAiZm9vL3BsYWluIiA6IEAiZXZhIGx1IGF0b3IiLAorICAgICAgICAgICAg
QCJ0ZXh0L2h0bWwiIDogQCI8Yj5ib2xkIHRleHQ8L2I+IiwKKyAgICAgICAgICAgIEAiYmFyL2h0
bWwiIDogQCI8aT5pdGFsaWMgdGV4dDwvaT4iLAorICAgICAgICAgICAgQCJ0ZXh0L3VyaS1saXN0
IiA6IEAiaHR0cHM6Ly93d3cuYXBwbGUuY29tIiwKKyAgICAgICAgICAgIEAiYmF6L3VyaS1saXN0
IiA6IEAiaHR0cHM6Ly93d3cud2Via2l0Lm9yZyIKKyAgICAgICAgfQorICAgIH0pOworfQorCitU
RVNUKERyYWdBbmREcm9wVGVzdHMsIERhdGFUcmFuc2ZlckdldERhdGFXaGVuRHJvcHBpbmdVUkwp
Cit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJd
OworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFs
bG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInJpY2guaW5uZXJIVE1MID0gJzxhIGhyZWY9XCJo
dHRwczovL3d3dy5hcHBsZS5jb20vXCI+VGhpcyBpcyBhIGxpbmsuPC9hPiciXTsKKyAgICBbc2lt
dWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDIyNSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3
NSldOworICAgIGNoZWNrSlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwgQHsKKyAgICAgICAgQCJkcmFnb3ZlciI6IEB7
CisgICAgICAgICAgICBAInRleHQvdXJpLWxpc3QiIDogQCIiLAorICAgICAgICAgICAgQCJ0ZXh0
L3BsYWluIiA6IEAiIgorICAgICAgICB9LAorICAgICAgICBAImRyb3AiOiBAeworICAgICAgICAg
ICAgQCJ0ZXh0L3VyaS1saXN0IiA6IEAiaHR0cHM6Ly93d3cuYXBwbGUuY29tLyIsCisgICAgICAg
ICAgICBAInRleHQvcGxhaW4iIDogQCJodHRwczovL3d3dy5hcHBsZS5jb20vIgorICAgICAgICB9
CisgICAgfSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRGF0YVRyYW5zZmVyR2V0RGF0
YVdoZW5Ecm9wcGluZ0ltYWdlV2l0aEZpbGVVUkwpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFt
ZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRv
cHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmll
dy5nZXQoKV0pOworCisgICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJv
dmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBOU1VSTCAqaWNvblVSTCA9IFtbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJpY29uIiB3aXRoRXh0ZW5zaW9uOkAicG5nIiBzdWJk
aXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIFtpdGVtUHJvdmlkZXIg
cmVnaXN0ZXJGaWxlUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilr
VVRUeXBlUE5HIGZpbGVPcHRpb25zOjAgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2Vu
dGF0aW9uVmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxlcjpbcHJvdGVjdGVkSWNvblVSTCA9IHJldGFp
blB0cihpY29uVVJMKV0gKEZpbGVMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRpb25IYW5kbGVy
KSAtPiBOU1Byb2dyZXNzICogeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihwcm90ZWN0ZWRJ
Y29uVVJMLmdldCgpLCBOTywgbmlsKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9XTsKKyAg
ICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0Omljb25VUkwgdmlzaWJpbGl0eTpVSUl0ZW1Q
cm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOworICAgIFtzaW11bGF0
b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKwor
ICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDM3NSkgdG86Q0dQb2ludE1h
a2UoNTAsIDM3NSldOworCisgICAgLy8gRmlsZSBVUkxzIHNob3VsZCBuZXZlciBiZSBleHBvc2Vk
IGRpcmVjdGx5IHRvIHdlYiBjb250ZW50LCBzbyBEYXRhVHJhbnNmZXIuZ2V0RGF0YSBzaG91bGQg
cmV0dXJuIGFuIGVtcHR5IHN0cmluZyBoZXJlLgorICAgIGNoZWNrSlNPTldpdGhMb2dnaW5nKFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwgQHsK
KyAgICAgICAgQCJkcmFnb3ZlciI6IEB7IEAiRmlsZXMiOiBAIiIsIEAidGV4dC91cmktbGlzdCI6
IEAiIiB9LAorICAgICAgICBAImRyb3AiOiBAeyBAIkZpbGVzIjogQCIiLCBAInRleHQvdXJpLWxp
c3QiOiBAIiIgfQorICAgIH0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIERhdGFUcmFu
c2ZlckdldERhdGFXaGVuRHJvcHBpbmdJbWFnZVdpdGhIVFRQVVJMKQoreworICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVj
dE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRU
ZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKKyAgICBhdXRvIHNpbXVs
YXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJW
aWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhb
W1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2l0ZW1Qcm92aWRlciByZWdpc3Rl
ckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVK
UEVHIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGwg
bG9hZEhhbmRsZXI6Xk5TUHJvZ3Jlc3MgKihEYXRhTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0
aW9uSGFuZGxlcikKKyAgICB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFVJSW1hZ2VKUEVH
UmVwcmVzZW50YXRpb24odGVzdEljb25JbWFnZSgpLCAwLjUpLCBuaWwpOworICAgICAgICByZXR1
cm4gbmlsOworICAgIH1dOworICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6W05TVVJM
IFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0Lm9yZyJdIHZpc2liaWxpdHk6VUlJdGVtUHJv
dmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKKyAgICBbc2ltdWxhdG9y
IHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisKKyAg
ICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCAzNzUpIHRvOkNHUG9pbnRNYWtl
KDUwLCAzNzUpXTsKKyAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7CisgICAgICAgIEAiZHJhZ292
ZXIiOiBAeyBAIkZpbGVzIjogQCIiLCBAInRleHQvdXJpLWxpc3QiOiBAIiIgfSwKKyAgICAgICAg
QCJkcm9wIjogQHsgQCJGaWxlcyI6IEAiIiwgQCJ0ZXh0L3VyaS1saXN0IjogQCJodHRwOi8vd2Vi
a2l0Lm9yZy8iIH0KKyAgICB9KTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEYXRhVHJh
bnNmZXJHZXREYXRhV2hlbkRyb3BwaW5nUmVzcGVjdHNQcmVzZW50YXRpb25TdHlsZSkKK3sKKyAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07CisgICAg
YXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGlu
aXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisKKyAgICBydW5UZXN0V2l0aFRlbXBvcmFy
eVRleHRGaWxlKF4oTlNVUkwgKmZpbGVVUkwpIHsKKyAgICAgICAgYXV0byBpdGVtUHJvdmlkZXIg
PSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW2l0ZW1Q
cm92aWRlciByZWdpc3RlckZpbGVSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0
cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0IGZpbGVPcHRpb25zOjAgdmlzaWJpbGl0eTpOU0l0
ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxlcjpbcHJvdGVj
dGVkRmlsZVVSTCA9IHJldGFpblB0cihmaWxlVVJMKV0gKEZpbGVMb2FkQ29tcGxldGlvbkJsb2Nr
IGNvbXBsZXRpb25IYW5kbGVyKSAtPiBOU1Byb2dyZXNzICogeworICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIocHJvdGVjdGVkRmlsZVVSTC5nZXQoKSwgTk8sIG5pbCk7CisgICAgICAgICAg
ICByZXR1cm4gbmlsOworICAgICAgICB9XTsKKyAgICAgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5h
bEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOworCisgICAgICAgIFtpdGVt
UHJvdmlkZXIgc2V0UHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGU6VUlQcmVmZXJyZWRQcmVzZW50
YXRpb25TdHlsZUF0dGFjaG1lbnRdOworICAgICAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2lu
dE1ha2UoMzAwLCAzNzUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKKyAgICAgICAgY2hlY2tK
U09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91
dHB1dC52YWx1ZSJdLCBAeworICAgICAgICAgICAgQCJkcmFnb3ZlciI6IEB7IEAiRmlsZXMiIDog
QCIiIH0sCisgICAgICAgICAgICBAImRyb3AiOiBAeyBAIkZpbGVzIiA6IEAiIiB9CisgICAgICAg
IH0pOworCisgICAgICAgIFtpdGVtUHJvdmlkZXIgc2V0UHJlZmVycmVkUHJlc2VudGF0aW9uU3R5
bGU6VUlQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUlubGluZV07CisgICAgICAgIFtzaW11bGF0
b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDM3NSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSld
OworICAgICAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7CisgICAgICAgICAgICBAImRyYWdvdmVy
IjogQHsgQCJ0ZXh0L3BsYWluIiA6IEAiIiB9LAorICAgICAgICAgICAgQCJkcm9wIjogQHsgQCJ0
ZXh0L3BsYWluIiA6IEAiVGhpcyBpcyBhIHRpbnkgYmxvYiBvZiB0ZXh0LiIgfQorICAgICAgICB9
KTsKKyAgICB9KTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEYXRhVHJhbnNmZXJTZXRE
YXRhQ2Fubm90V3JpdGVQbGF0Zm9ybVR5cGVzKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwg
MzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVk
OkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0
TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcu
Z2V0KCldKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJz
ZWxlY3QocmljaCkiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAiY3VzdG9tRGF0YSA9IHsgJ3RleHQvcGxhaW4nIDogJ2ZvbycsICdjb20uYWRvYmUucGRmJyA6
ICd0cnkgYW5kIGRlY29kZSBtZSEnIH0iXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0b21EYXRhID0gdHJ1ZSJdOworCisgICAgW3NpbXVsYXRv
ciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCAyMjUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsK
KyAgICBjaGVja0ZpcnN0VHlwZUlzUHJlc2VudEFuZFNlY29uZFR5cGVJc01pc3Npbmcoc2ltdWxh
dG9yLmdldCgpLCBrVVRUeXBlVVRGOFBsYWluVGV4dCwga1VUVHlwZVBERik7CisgICAgY2hlY2tK
U09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91
dHB1dC52YWx1ZSJdLCBAeworICAgICAgICBAImRyYWdvdmVyIjogQHsKKyAgICAgICAgICAgIEAi
dGV4dC9wbGFpbiI6IEAiIiwKKyAgICAgICAgICAgIEAiY29tLmFkb2JlLnBkZiI6IEAiIgorICAg
ICAgICB9LAorICAgICAgICBAImRyb3AiOiBAeworICAgICAgICAgICAgQCJ0ZXh0L3BsYWluIjog
QCJmb28iLAorICAgICAgICAgICAgQCJjb20uYWRvYmUucGRmIjogQCJ0cnkgYW5kIGRlY29kZSBt
ZSEiCisgICAgICAgIH0KKyAgICB9KTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEYXRh
VHJhbnNmZXJHZXREYXRhUmVhZFBsYWluQW5kUmljaFRleHQpCit7CisgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQ
YWdlTmFtZWQ6QCJEYXRhVHJhbnNmZXIiXTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMo
W1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKKworICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVy
IGFsbG9jXSBpbml0XSk7CisgICAgTlNEaWN0aW9uYXJ5ICp0ZXh0QXR0cmlidXRlcyA9IEB7IE5T
Rm9udEF0dHJpYnV0ZU5hbWU6IFtVSUZvbnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6MjBdIH07Cisg
ICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpyaWNoVGV4dCA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0V2l0aFN0cmluZzpAIldlYktpdCIgYXR0cmlidXRlczp0ZXh0QXR0cmlidXRlc107
CisgICAgW2l0ZW1Qcm92aWRlciByZWdpc3Rlck9iamVjdDpyaWNoVGV4dCB2aXNpYmlsaXR5Ok5T
SXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsXTsKKyAgICBbaXRlbVByb3Zp
ZGVyIHJlZ2lzdGVyT2JqZWN0OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93d3cud2Vi
a2l0Lm9yZy8iXSB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmls
aXR5QWxsXTsKKyAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OkAiV2ViS2l0IiB2aXNp
YmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsXTsKKworICAg
IFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQo
KSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludFplcm8gdG86Q0dQb2ludE1ha2Uo
NTAsIDEwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCJ0ZXh0L2h0bWwsIHRleHQvcGxhaW4s
IHRleHQvdXJpLWxpc3QiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
dHlwZXMudGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJXZWJLaXQiLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGV4dERhdGEudGV4dENvbnRlbnQi
XSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczovL3d3dy53ZWJraXQub3JnLyIsIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ1cmxEYXRhLnRleHRDb250ZW50Il0p
OworICAgIEVYUEVDVF9XS19TVFJFUSgiV2ViS2l0IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAImh0bWxEYXRhLnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9XS19T
VFJFUSgiKFNUUklORywgdGV4dC9odG1sKSwgKFNUUklORywgdGV4dC9wbGFpbiksIChTVFJJTkcs
IHRleHQvdXJpLWxpc3QpIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
Iml0ZW1zLnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImZpbGVzLnRleHRDb250ZW50Il0pOworfQor
CitURVNUKERyYWdBbmREcm9wVGVzdHMsIERhdGFUcmFuc2ZlclN1cHByZXNzR2V0RGF0YUR1ZVRv
UHJlc2VuY2VPZlRleHRGaWxlKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDAp
XSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiRGF0YVRy
YW5zZmVyIl07CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11
bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisKKyAgICBhdXRv
IGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwor
ICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6QCJIZWxsbyB3b3JsZCIgdmlzaWJpbGl0
eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbF07CisgICAgW2l0ZW1Q
cm92aWRlciBzZXRTdWdnZXN0ZWROYW1lOkAiaGVsbG8udHh0Il07CisKKyAgICBbc2ltdWxhdG9y
IHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAg
W3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRaZXJvIHRvOkNHUG9pbnRNYWtlKDUwLCAxMDApXTsK
KworICAgIEVYUEVDVF9XS19TVFJFUSgiRmlsZXMiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAidHlwZXMudGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVR
KCIiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGV4dERhdGEudGV4
dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAidXJsRGF0YS50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJodG1s
RGF0YS50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIihGSUxFLCB0ZXh0L3Bs
YWluKSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJpdGVtcy50ZXh0
Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIignaGVsbG8udHh0JywgdGV4dC9wbGFp
bikiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZmlsZXMudGV4dENv
bnRlbnQiXSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRGF0YVRyYW5zZmVyR2V0RGF0
YUNhbm5vdFJlYWRQcml2YXRlQXJiaXRyYXJ5VHlwZXMpCit7CisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdl
TmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOworICAgIGF1dG8gc2ltdWxhdG9yID0g
YWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2Vi
Vmlldy5nZXQoKV0pOworCisgICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVt
UHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJl
cHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZU1QMyB2aXNp
YmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsIGxvYWRIYW5k
bGVyOl5OU1Byb2dyZXNzICooRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkhhbmRs
ZXIpCisgICAgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihbQCJ0aGlzIGlzIGEgdGVzdCIg
ZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddLCBuaWwpOworICAgICAgICBy
ZXR1cm4gbmlsOworICAgIH1dOworICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVz
ZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjpAIm9yZy5XZWJLaXQuVGVzdFdlYktpdEFQSS5jdXN0
b20tcGFzdGVib2FyZC10eXBlIiB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRp
b25WaXNpYmlsaXR5QWxsIGxvYWRIYW5kbGVyOl5OU1Byb2dyZXNzICooRGF0YUxvYWRDb21wbGV0
aW9uQmxvY2sgY29tcGxldGlvbkhhbmRsZXIpCisgICAgeworICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihbQCJ0aGlzIGlzIGFub3RoZXIgdGVzdCIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3Ry
aW5nRW5jb2RpbmddLCBuaWwpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH1dOworICAgIFtz
aW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBd
XTsKKyAgICBbaXRlbVByb3ZpZGVyIHNldFByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlOlVJUHJl
ZmVycmVkUHJlc2VudGF0aW9uU3R5bGVJbmxpbmVdOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpD
R1BvaW50TWFrZSgzMDAsIDM3NSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOworICAgIGNoZWNr
SlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJv
dXRwdXQudmFsdWUiXSwgQHsKKyAgICAgICAgQCJkcmFnb3ZlciI6IEB7IH0sCisgICAgICAgIEAi
ZHJvcCI6IEB7IH0KKyAgICB9KTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEYXRhVHJh
bnNmZXJTZXREYXRhVmFsaWRVUkwpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1w
LWRhdGF0cmFuc2Zlci10eXBlcyJdOworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0Ry
YWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0p
OworCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNlbGVjdChy
aWNoKSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjdXN0
b21EYXRhID0geyAndXJsJyA6ICdodHRwczovL3dlYmtpdC5vcmcvYi8xMjMnIH0iXTsKKyAgICBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0b21EYXRhID0g
dHJ1ZSJdOworCisgICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBbc2ltdWxhdG9y
LmdldCgpIHNldE92ZXJyaWRlUGVyZm9ybURyb3BCbG9jazpeTlNBcnJheTxVSURyYWdJdGVtICo+
ICooaWQgPFVJRHJvcFNlc3Npb24+IHNlc3Npb24pCisgICAgeworICAgICAgICBFWFBFQ1RfRVEo
MVVMLCBzZXNzaW9uLml0ZW1zLmNvdW50KTsKKyAgICAgICAgYXV0byAqaXRlbSA9IHNlc3Npb24u
aXRlbXNbMF0uaXRlbVByb3ZpZGVyOworICAgICAgICBFWFBFQ1RfVFJVRShbaXRlbS5yZWdpc3Rl
cmVkVHlwZUlkZW50aWZpZXJzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVVUkxd
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW2l0ZW0gY2FuTG9hZE9iamVjdE9mQ2xhc3M6IFtOU1VS
TCBjbGFzc11dKTsKKyAgICAgICAgW2l0ZW0gbG9hZE9iamVjdE9mQ2xhc3M6W05TVVJMIGNsYXNz
XSBjb21wbGV0aW9uSGFuZGxlcjpeKGlkPE5TSXRlbVByb3ZpZGVyUmVhZGluZz4gdXJsLCBOU0Vy
cm9yICplcnJvcikgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoW3VybCBpc0tpbmRPZkNsYXNz
OiBbTlNVUkwgY2xhc3NdXSk7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoWyhOU1VSTCAq
KXVybCBhYnNvbHV0ZVN0cmluZ10sIEAiaHR0cHM6Ly93ZWJraXQub3JnL2IvMTIzIik7CisgICAg
ICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfV07CisgICAgICAgIHJldHVybiBzZXNzaW9u
Lml0ZW1zOworICAgIH1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwg
MjI1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07CisKKyAgICBjaGVja0pTT05XaXRoTG9nZ2lu
Zyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0s
IEB7CisgICAgICAgIEAiZHJhZ292ZXIiOiBAeworICAgICAgICAgICAgQCJ0ZXh0L3VyaS1saXN0
IjogQCIiLAorICAgICAgICB9LAorICAgICAgICBAImRyb3AiOiBAeworICAgICAgICAgICAgQCJ0
ZXh0L3VyaS1saXN0IjogQCJodHRwczovL3dlYmtpdC5vcmcvYi8xMjMiLAorICAgICAgICB9Cisg
ICAgfSk7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKK30KKworVEVTVChE
cmFnQW5kRHJvcFRlc3RzLCBEYXRhVHJhbnNmZXJTZXREYXRhVW5lc2NhcGVkVVJMKQoreworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKKyAgICBh
dXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5p
dFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJzZWxlY3QocmljaCkiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY3VzdG9tRGF0YSA9IHsgJ3VybCcgOiAnaHR0cDovL3dl
YmtpdC5vcmcvYi9cdTRGNjBcdTU5N0Q7P3g9OCArIDYnIH0iXTsKKyAgICBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0b21EYXRhID0gdHJ1ZSJdOworCisg
ICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBbc2ltdWxhdG9yLmdldCgpIHNldE92
ZXJyaWRlUGVyZm9ybURyb3BCbG9jazpeTlNBcnJheTxVSURyYWdJdGVtICo+ICooaWQgPFVJRHJv
cFNlc3Npb24+IHNlc3Npb24pCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMVVMLCBzZXNzaW9u
Lml0ZW1zLmNvdW50KTsKKyAgICAgICAgYXV0byAqaXRlbSA9IHNlc3Npb24uaXRlbXNbMF0uaXRl
bVByb3ZpZGVyOworICAgICAgICBFWFBFQ1RfVFJVRShbaXRlbS5yZWdpc3RlcmVkVHlwZUlkZW50
aWZpZXJzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVVUkxdKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoW2l0ZW0gY2FuTG9hZE9iamVjdE9mQ2xhc3M6IFtOU1VSTCBjbGFzc11dKTsK
KyAgICAgICAgW2l0ZW0gbG9hZE9iamVjdE9mQ2xhc3M6W05TVVJMIGNsYXNzXSBjb21wbGV0aW9u
SGFuZGxlcjpeKGlkPE5TSXRlbVByb3ZpZGVyUmVhZGluZz4gdXJsLCBOU0Vycm9yICplcnJvcikg
eworICAgICAgICAgICAgRVhQRUNUX1RSVUUoW3VybCBpc0tpbmRPZkNsYXNzOiBbTlNVUkwgY2xh
c3NdXSk7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoWyhOU1VSTCAqKXVybCBhYnNvbHV0
ZVN0cmluZ10sIEAiaHR0cDovL3dlYmtpdC5vcmcvYi8lRTQlQkQlQTAlRTUlQTUlQkQ7P3g9OCUy
MCslMjA2Iik7CisgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfV07CisgICAgICAg
IHJldHVybiBzZXNzaW9uLml0ZW1zOworICAgIH1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpD
R1BvaW50TWFrZSg1MCwgMjI1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07CisKKyAgICBjaGVj
a0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
b3V0cHV0LnZhbHVlIl0sIEB7CisgICAgICAgIEAiZHJhZ292ZXIiOiBAeworICAgICAgICAgICAg
QCJ0ZXh0L3VyaS1saXN0IjogQCIiLAorICAgICAgICB9LAorICAgICAgICBAImRyb3AiOiBAewor
ICAgICAgICAgICAgQCJ0ZXh0L3VyaS1saXN0IjogQCJodHRwOi8vd2Via2l0Lm9yZy9iL1x1NEY2
MFx1NTk3RDs/eD04ICsgNiIsCisgICAgICAgIH0KKyAgICB9KTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmUpOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIERhdGFUcmFu
c2ZlclNldERhdGFJbnZhbGlkVVJMKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1
MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVt
cC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tE
cmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCld
KTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzZWxlY3Qo
cmljaCkiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY3Vz
dG9tRGF0YSA9IHsgJ3VybCcgOiAnc29tZSByYW5kb20gc3RyaW5nJyB9Il07CisgICAgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIndyaXRlQ3VzdG9tRGF0YSA9IHRydWUi
XTsKKworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgMjI1KSB0bzpDR1Bv
aW50TWFrZSg1MCwgMzc1KV07CisgICAgTlNBcnJheSAqcmVnaXN0ZXJlZFR5cGVzID0gW3NpbXVs
YXRvci5nZXQoKS5zb3VyY2VJdGVtUHJvdmlkZXJzLmZpcnN0T2JqZWN0IHJlZ2lzdGVyZWRUeXBl
SWRlbnRpZmllcnNdOworICAgIEVYUEVDVF9GQUxTRShbcmVnaXN0ZXJlZFR5cGVzIGNvbnRhaW5z
T2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVVUkxdKTsKKyAgICBjaGVja0pTT05XaXRoTG9nZ2lu
Zyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0s
IEB7CisgICAgICAgIEAiZHJhZ292ZXIiOiBAeworICAgICAgICAgICAgQCJ0ZXh0L3VyaS1saXN0
IjogQCIiLAorICAgICAgICB9LAorICAgICAgICBAImRyb3AiOiBAeworICAgICAgICAgICAgQCJ0
ZXh0L3VyaS1saXN0IjogQCJzb21lIHJhbmRvbSBzdHJpbmciLAorICAgICAgICB9CisgICAgfSk7
Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRGF0YVRyYW5zZmVyU2FuaXRpemVIVE1MKQor
eworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3lu
Y2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsK
KyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzZWxlY3QocmljaCkiXTsKKyAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY3VzdG9tRGF0YSA9IHsgJ3RleHQvaHRtbCcg
OiAnPG1ldGEgY29udGVudD1cInNlY3JldFwiPiIKKyAgICAgICAgIjxiIG9ubW91c2VvdmVyPVwi
ZGFuZ2Vyb3VzQ29kZSgpXCI+aGVsbG88L2I+PCEtLSBzZWNyZXQtLT4sIHdvcmxkPHNjcmlwdD5k
YW5nZXJvdXNDb2RlKCk8L3NjcmlwdD4nIH0iXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0b21EYXRhID0gdHJ1ZSJdOworCisgICAgX19ibG9j
ayBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBbc2ltdWxhdG9yLmdldCgpIHNldE92ZXJyaWRlUGVy
Zm9ybURyb3BCbG9jazpeTlNBcnJheTxVSURyYWdJdGVtICo+ICooaWQgPFVJRHJvcFNlc3Npb24+
IHNlc3Npb24pCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMVVMLCBzZXNzaW9uLml0ZW1zLmNv
dW50KTsKKyAgICAgICAgYXV0byAqaXRlbSA9IHNlc3Npb24uaXRlbXNbMF0uaXRlbVByb3ZpZGVy
OworICAgICAgICBFWFBFQ1RfVFJVRShbaXRlbS5yZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzIGNv
bnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVIVE1MXSk7CisgICAgICAgIFtpdGVtIGxv
YWREYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBl
SFRNTCBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRGF0YSAqZGF0YSwgTlNFcnJvciAqZXJyb3IpIHsK
KyAgICAgICAgICAgIE5TU3RyaW5nICptYXJrdXAgPSBbW1tOU1N0cmluZyBhbGxvY10gaW5pdFdp
dGhEYXRhOihOU0RhdGEgKilkYXRhIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSBhdXRv
cmVsZWFzZV07CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShbbWFya3VwIGNvbnRhaW5zU3RyaW5n
OkAiaGVsbG8iXSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShbbWFya3VwIGNvbnRhaW5zU3Ry
aW5nOkAiLCB3b3JsZCJdKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShbbWFya3VwIGNvbnRh
aW5zU3RyaW5nOkAic2VjcmV0Il0pOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKFttYXJrdXAg
Y29udGFpbnNTdHJpbmc6QCJkYW5nZXJvdXNDb2RlIl0pOworICAgICAgICAgICAgZG9uZSA9IHRy
dWU7CisgICAgICAgIH1dOworICAgICAgICByZXR1cm4gc2Vzc2lvbi5pdGVtczsKKyAgICB9XTsK
KyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDIyNSkgdG86Q0dQb2ludE1h
a2UoNTAsIDM3NSldOworCisgICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAeworICAgICAgICBAImRy
YWdvdmVyIjogQHsKKyAgICAgICAgICAgIEAidGV4dC9odG1sIjogQCIiLAorICAgICAgICB9LAor
ICAgICAgICBAImRyb3AiOiBAeworICAgICAgICAgICAgQCJ0ZXh0L2h0bWwiOiBAIjxtZXRhIGNv
bnRlbnQ9XCJzZWNyZXRcIj48YiBvbm1vdXNlb3Zlcj1cImRhbmdlcm91c0NvZGUoKVwiPmhlbGxv
PC9iPjwhLS0gc2VjcmV0LS0+LCB3b3JsZDxzY3JpcHQ+ZGFuZ2Vyb3VzQ29kZSgpPC9zY3JpcHQ+
IiwKKyAgICAgICAgfQorICAgIH0pOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZSk7Cit9CisKKyNlbmRpZiAvLyBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MTAzMDAKKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYgLy8gRU5BQkxF
KERSQUdfU1VQUE9SVCkgJiYgUExBVEZPUk0oSU9TKSAmJiBXS19BUElfRU5BQkxFRApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9EcmFnQW5kRHJvcFNpbXVsYXRvci5oIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9EcmFnQW5kRHJvcFNpbXVsYXRvci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYzYjEyODg2NzVhYTM3NGVjYjFkMTNjZWZjMzU3YTcwZDRjMTk2OTEKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0RyYWdBbmREcm9wU2ltdWxhdG9yLmgK
QEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShEUkFHX1NVUFBPUlQpICYmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIlRlc3RXS1dlYlZp
ZXcuaCIKKyNpbXBvcnQgPFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvX1dLSW5wdXREZWxlZ2F0ZS5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CisKKyNp
ZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCA8VUlLaXQvTlNJ
dGVtUHJvdmlkZXIrVUlLaXRBZGRpdGlvbnMuaD4KKyNlbmRpZgorCit0eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBEcmFnQW5kRHJvcFBoYXNlKSB7CisgICAgRHJhZ0FuZERyb3BQaGFzZUNhbmNl
bGxlZCA9IDAsCisgICAgRHJhZ0FuZERyb3BQaGFzZUJlZ2lubmluZyA9IDEsCisgICAgRHJhZ0Fu
ZERyb3BQaGFzZUJlZ2FuID0gMiwKKyAgICBEcmFnQW5kRHJvcFBoYXNlRW50ZXJlZCA9IDMsCisg
ICAgRHJhZ0FuZERyb3BQaGFzZVBlcmZvcm1pbmdEcm9wID0gNAorfTsKKworI2lmIFBMQVRGT1JN
KElPUykKKwordHlwZWRlZiBOU0RpY3Rpb25hcnk8TlNOdW1iZXIgKiwgTlNWYWx1ZSAqPiAqUHJv
Z3Jlc3NUb0NHUG9pbnRWYWx1ZU1hcDsKKworQGludGVyZmFjZSBNb2NrRHJhZ0Ryb3BTZXNzaW9u
IDogTlNPYmplY3QgPFVJRHJhZ0Ryb3BTZXNzaW9uPiB7CitAcHJpdmF0ZQorICAgIFJldGFpblB0
cjxOU0FycmF5PiBfbW9ja0l0ZW1zOworICAgIFJldGFpblB0cjxVSVdpbmRvdz4gX3dpbmRvdzsK
K30KK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBDR1BvaW50IG1vY2tMb2NhdGlvbkluV2luZG93Owor
QHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgYWxsb3dNb3ZlOworQGVuZAorCitAaW50ZXJmYWNl
IE1vY2tEcm9wU2Vzc2lvbiA6IE1vY2tEcmFnRHJvcFNlc3Npb24gPFVJRHJvcFNlc3Npb24+CitA
ZW5kCisKK0BpbnRlcmZhY2UgTW9ja0RyYWdTZXNzaW9uIDogTW9ja0RyYWdEcm9wU2Vzc2lvbiA8
VUlEcmFnU2Vzc2lvbj4KK0BlbmQKKworQGludGVyZmFjZSBXS1dlYlZpZXcgKERyYWdBbmREcm9w
VGVzdGluZykKKy0gKGlkIDxVSURyb3BJbnRlcmFjdGlvbkRlbGVnYXRlPilkcm9wSW50ZXJhY3Rp
b25EZWxlZ2F0ZTsKKy0gKGlkIDxVSURyYWdJbnRlcmFjdGlvbkRlbGVnYXRlPilkcmFnSW50ZXJh
Y3Rpb25EZWxlZ2F0ZTsKKy0gKFVJRHJvcEludGVyYWN0aW9uICopZHJvcEludGVyYWN0aW9uOwor
LSAoVUlEcmFnSW50ZXJhY3Rpb24gKilkcmFnSW50ZXJhY3Rpb247CitAZW5kCisKKyNlbmRpZiAv
LyBQTEFURk9STShJT1MpCisKK0BpbnRlcmZhY2UgRHJhZ0FuZERyb3BTaW11bGF0b3IgOiBOU09i
amVjdDxXS1VJRGVsZWdhdGVQcml2YXRlLCBfV0tJbnB1dERlbGVnYXRlPgorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihUZXN0V0tXZWJWaWV3ICopd2ViVmlldzsKKy8vIFRoZSBz
dGFydCBsb2NhdGlvbiwgZW5kIGxvY2F0aW9uLCBhbmQgbG9jYXRpb25zIG9mIGFkZGl0aW9uYWwg
aXRlbSByZXF1ZXN0cyBhcmUgYWxsIGluIHdpbmRvdyBjb29yZGluYXRlcy4KKy0gKHZvaWQpcnVu
RnJvbTooQ0dQb2ludClzdGFydExvY2F0aW9uIHRvOihDR1BvaW50KWVuZExvY2F0aW9uOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5PF9XS0F0dGFjaG1lbnQgKj4gKmlu
c2VydGVkQXR0YWNobWVudHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJy
YXk8X1dLQXR0YWNobWVudCAqPiAqcmVtb3ZlZEF0dGFjaG1lbnRzOworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBEcmFnQW5kRHJvcFBoYXNlIHBoYXNlOworCisjaWYgUExBVEZPUk0o
SU9TKQorCistICh2b2lkKXJ1bkZyb206KENHUG9pbnQpc3RhcnRMb2NhdGlvbiB0bzooQ0dQb2lu
dCllbmRMb2NhdGlvbiBhZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnM6KFByb2dyZXNzVG9D
R1BvaW50VmFsdWVNYXApYWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zOworLSAodm9pZCl3
YWl0Rm9ySW5wdXRTZXNzaW9uOworLSAodm9pZCllbmREYXRhVHJhbnNmZXI7CisKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljKSBCT09MIGFsbG93c0ZvY3VzVG9TdGFydElucHV0U2Vzc2lvbjsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljKSBCT09MIHNob3VsZEVuc3VyZVVJQXBwbGljYXRpb247CitAcHJvcGVy
dHkgKG5vbmF0b21pYykgQk9PTCBzaG91bGRBbGxvd01vdmVPcGVyYXRpb247CitAcHJvcGVydHkg
KG5vbmF0b21pYykgQmxvY2tQdHI8Qk9PTChfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKT4gc2hv
d0N1c3RvbUFjdGlvblNoZWV0QmxvY2s7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQmxvY2tQdHI8
TlNBcnJheSAqKFVJSXRlbVByb3ZpZGVyICosIE5TQXJyYXkgKiwgTlNEaWN0aW9uYXJ5ICopPiBj
b252ZXJ0SXRlbVByb3ZpZGVyc0Jsb2NrOworQHByb3BlcnR5IChub25hdG9taWMpIEJsb2NrUHRy
PE5TQXJyYXkgKihpZCA8VUlEcm9wU2Vzc2lvbj4pPiBvdmVycmlkZVBlcmZvcm1Ecm9wQmxvY2s7
CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBOU0FycmF5ICpleHRlcm5hbEl0ZW1Qcm92
aWRlcnM7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQmxvY2tQdHI8TlNVSW50ZWdlcihOU1VJbnRl
Z2VyLCBpZCk+IG92ZXJyaWRlRHJhZ1VwZGF0ZUJsb2NrOworQHByb3BlcnR5IChub25hdG9taWMp
IEJsb2NrUHRyPHZvaWQoQk9PTCwgTlNBcnJheSAqKT4gZHJvcENvbXBsZXRpb25CbG9jazsKKwor
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5ICpzb3VyY2VJdGVtUHJvdmlk
ZXJzOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5ICpvYnNlcnZlZEV2
ZW50TmFtZXM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXkgKmZpbmFs
U2VsZWN0aW9uUmVjdHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBs
YXN0S25vd25EcmFnQ2FyZXRSZWN0OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBO
U0FycmF5PFVJVGFyZ2V0ZWREcmFnUHJldmlldyAqPiAqbGlmdFByZXZpZXdzOworCisjZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKQorCitAZW5kCisKKyNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JU
KSAmJiBXS19BUElfRU5BQkxFRApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3Mv
RGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Qz
NzIwNThjNDk2NzY2YTYyYzA5MGJhODc3M2Y0YzUxODgyYTAwMy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikK
LQotI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgotI2ltcG9ydCA8VUlLaXQvTlNJdGVtUHJvdmlk
ZXIrVUlLaXRBZGRpdGlvbnMuaD4KLQotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1w
b3J0IDxVSUtpdC9OU1N0cmluZytVSUl0ZW1Qcm92aWRlci5oPgotI2ltcG9ydCA8VUlLaXQvTlNV
UkwrVUlJdGVtUHJvdmlkZXIuaD4KLSNpbXBvcnQgPFVJS2l0L1VJSW1hZ2UrVUlJdGVtUHJvdmlk
ZXIuaD4KLSNpbXBvcnQgPFVJS2l0L1VJSXRlbVByb3ZpZGVyLmg+Ci0jaW1wb3J0IDxVSUtpdC9V
SUl0ZW1Qcm92aWRlcl9Qcml2YXRlLmg+Ci0jZWxzZQotCi1AaW50ZXJmYWNlIE5TVVJMICgpCi1A
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgc2V0dGVyPV9zZXRUaXRsZTopIE5TU3RyaW5nICpf
dGl0bGU7Ci1AZW5kCi0KLSNkZWZpbmUgVUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlv
bnNWaXNpYmlsaXR5QWxsIE5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxs
Ci0KLUBwcm90b2NvbCBVSUl0ZW1Qcm92aWRlclJlYWRpbmcgPE5TSXRlbVByb3ZpZGVyUmVhZGlu
Zz4KLQotQHJlcXVpcmVkCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJdGVtUHJvdmlkZXJEYXRh
OihOU0RhdGEgKilkYXRhIHR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKXR5cGVJZGVudGlmaWVy
IGVycm9yOihOU0Vycm9yICoqKW91dEVycm9yOwotCi1AZW5kCi0KLUBwcm90b2NvbCBVSUl0ZW1Q
cm92aWRlcldyaXRpbmcgPE5TSXRlbVByb3ZpZGVyV3JpdGluZz4KLQotQHJlcXVpcmVkCi0tIChO
U1Byb2dyZXNzICopbG9hZERhdGFXaXRoVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopdHlwZUlk
ZW50aWZpZXIgZm9ySXRlbVByb3ZpZGVyQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRGF0
YSAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOwotCi1AZW5kCi0KLUBpbnRlcmZhY2Ug
TlNBdHRyaWJ1dGVkU3RyaW5nICgpIDxVSUl0ZW1Qcm92aWRlclJlYWRpbmcsIFVJSXRlbVByb3Zp
ZGVyV3JpdGluZz4KLUBlbmQKLUBpbnRlcmZhY2UgTlNTdHJpbmcgKCkgPFVJSXRlbVByb3ZpZGVy
UmVhZGluZywgVUlJdGVtUHJvdmlkZXJXcml0aW5nPgotQGVuZAotQGludGVyZmFjZSBOU1VSTCAo
KSA8VUlJdGVtUHJvdmlkZXJSZWFkaW5nLCBVSUl0ZW1Qcm92aWRlcldyaXRpbmc+Ci1AZW5kCi1A
aW50ZXJmYWNlIFVJSW1hZ2UgKCkgPFVJSXRlbVByb3ZpZGVyUmVhZGluZywgVUlJdGVtUHJvdmlk
ZXJXcml0aW5nPgotQGVuZAotCi1AaW50ZXJmYWNlIFVJSXRlbVByb3ZpZGVyIDogTlNJdGVtUHJv
dmlkZXIKLUBlbmQKLQotI2VuZGlmCi0KLSNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+Ci0jaW1wb3J0
IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L19XS0lucHV0
RGVsZWdhdGUuaD4KLSNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgotCi1AY2xhc3MgTW9ja0Ryb3BT
ZXNzaW9uOwotQGNsYXNzIE1vY2tEcmFnU2Vzc2lvbjsKLQotQGludGVyZmFjZSBNb2NrRHJhZ0Ry
b3BTZXNzaW9uIDogTlNPYmplY3QgPFVJRHJhZ0Ryb3BTZXNzaW9uPiB7Ci1AcHJpdmF0ZQotICAg
IFJldGFpblB0cjxOU0FycmF5PiBfbW9ja0l0ZW1zOwotICAgIFJldGFpblB0cjxVSVdpbmRvdz4g
X3dpbmRvdzsKLX0KLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBDR1BvaW50IG1vY2tMb2NhdGlvbklu
V2luZG93OwotQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgYWxsb3dNb3ZlOwotQGVuZAotCi1A
aW50ZXJmYWNlIE1vY2tEcm9wU2Vzc2lvbiA6IE1vY2tEcmFnRHJvcFNlc3Npb24gPFVJRHJvcFNl
c3Npb24+Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTW9ja0RyYWdTZXNzaW9uIDogTW9ja0RyYWdEcm9w
U2Vzc2lvbiA8VUlEcmFnU2Vzc2lvbj4KLUBlbmQKLQotZXh0ZXJuIE5TU3RyaW5nICogY29uc3Qg
RGF0YUludGVyYWN0aW9uRW50ZXJFdmVudE5hbWU7Ci1leHRlcm4gTlNTdHJpbmcgKiBjb25zdCBE
YXRhSW50ZXJhY3Rpb25PdmVyRXZlbnROYW1lOwotZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgRGF0
YUludGVyYWN0aW9uUGVyZm9ybU9wZXJhdGlvbkV2ZW50TmFtZTsKLWV4dGVybiBOU1N0cmluZyAq
IGNvbnN0IERhdGFJbnRlcmFjdGlvbkxlYXZlRXZlbnROYW1lOwotZXh0ZXJuIE5TU3RyaW5nICog
Y29uc3QgRGF0YUludGVyYWN0aW9uU3RhcnRFdmVudE5hbWU7Ci0KLXR5cGVkZWYgTlNEaWN0aW9u
YXJ5PE5TTnVtYmVyICosIE5TVmFsdWUgKj4gKlByb2dyZXNzVG9DR1BvaW50VmFsdWVNYXA7Ci0K
LXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIERhdGFJbnRlcmFjdGlvblBoYXNlKSB7Ci0gICAg
RGF0YUludGVyYWN0aW9uQ2FuY2VsbGVkID0gMCwKLSAgICBEYXRhSW50ZXJhY3Rpb25CZWdpbm5p
bmcgPSAxLAotICAgIERhdGFJbnRlcmFjdGlvbkJlZ2FuID0gMiwKLSAgICBEYXRhSW50ZXJhY3Rp
b25FbnRlcmVkID0gMywKLSAgICBEYXRhSW50ZXJhY3Rpb25QZXJmb3JtaW5nID0gNAotfTsKLQot
QGludGVyZmFjZSBXS1dlYlZpZXcgKERyYWdBbmREcm9wVGVzdGluZykKLS0gKGlkIDxVSURyb3BJ
bnRlcmFjdGlvbkRlbGVnYXRlPilkcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZTsKLS0gKGlkIDxVSURy
YWdJbnRlcmFjdGlvbkRlbGVnYXRlPilkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZTsKLS0gKFVJRHJv
cEludGVyYWN0aW9uICopZHJvcEludGVyYWN0aW9uOwotLSAoVUlEcmFnSW50ZXJhY3Rpb24gKilk
cmFnSW50ZXJhY3Rpb247Ci1AZW5kCi0KLUBpbnRlcmZhY2UgRGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yIDogTlNPYmplY3Q8V0tVSURlbGVnYXRlUHJpdmF0ZSwgX1dLSW5wdXREZWxlZ2F0ZT4gewot
QHByaXZhdGUKLSAgICBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gX3dlYlZpZXc7Ci0gICAgUmV0
YWluUHRyPE1vY2tEcmFnU2Vzc2lvbj4gX2RyYWdTZXNzaW9uOwotICAgIFJldGFpblB0cjxNb2Nr
RHJvcFNlc3Npb24+IF9kcm9wU2Vzc2lvbjsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+
IF9vYnNlcnZlZEV2ZW50TmFtZXM7Ci0gICAgUmV0YWluUHRyPE5TQXJyYXk+IF9leHRlcm5hbEl0
ZW1Qcm92aWRlcnM7Ci0gICAgUmV0YWluUHRyPE5TQXJyYXkgKj4gX3NvdXJjZUl0ZW1Qcm92aWRl
cnM7Ci0gICAgUmV0YWluUHRyPE5TQXJyYXkgKj4gX2ZpbmFsU2VsZWN0aW9uUmVjdHM7Ci0gICAg
Q0dQb2ludCBfc3RhcnRMb2NhdGlvbjsKLSAgICBDR1BvaW50IF9lbmRMb2NhdGlvbjsKLSAgICBD
R1JlY3QgX2xhc3RLbm93bkRyYWdDYXJldFJlY3Q7Ci0KLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxl
RGljdGlvbmFyeTxOU051bWJlciAqLCBOU1ZhbHVlICo+Pl9yZW1haW5pbmdBZGRpdGlvbmFsSXRl
bVJlcXVlc3RMb2NhdGlvbnNCeVByb2dyZXNzOwotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJh
eTxOU1ZhbHVlICo+Pl9xdWV1ZWRBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnM7Ci0gICAg
UmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PFVJVGFyZ2V0ZWREcmFnUHJldmlldyAqPj4gX2xpZnRQ
cmV2aWV3czsKLQotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxfV0tBdHRhY2htZW50ICo+
PiBfaW5zZXJ0ZWRBdHRhY2htZW50czsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk8X1dL
QXR0YWNobWVudCAqPj4gX3JlbW92ZWRBdHRhY2htZW50czsKLQotICAgIGJvb2wgX2lzRG9uZVdh
aXRpbmdGb3JJbnB1dFNlc3Npb247Ci0gICAgZG91YmxlIF9jdXJyZW50UHJvZ3Jlc3M7Ci0gICAg
Ym9vbCBfaXNEb25lV2l0aEN1cnJlbnRSdW47Ci0gICAgRGF0YUludGVyYWN0aW9uUGhhc2UgX3Bo
YXNlOwotCi0gICAgUmV0YWluUHRyPFVJRHJvcFByb3Bvc2FsPiBfY3VycmVudERyb3BQcm9wb3Nh
bDsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlldzooVGVzdFdLV2ViVmlldyAq
KXdlYlZpZXc7Ci0vLyBUaGUgc3RhcnQgbG9jYXRpb24sIGVuZCBsb2NhdGlvbiwgYW5kIGxvY2F0
aW9ucyBvZiBhZGRpdGlvbmFsIGl0ZW0gcmVxdWVzdHMgYXJlIGFsbCBpbiB3aW5kb3cgY29vcmRp
bmF0ZXMuCi0tICh2b2lkKXJ1bkZyb206KENHUG9pbnQpc3RhcnRMb2NhdGlvbiB0bzooQ0dQb2lu
dCllbmRMb2NhdGlvbjsKLS0gKHZvaWQpcnVuRnJvbTooQ0dQb2ludClzdGFydExvY2F0aW9uIHRv
OihDR1BvaW50KWVuZExvY2F0aW9uIGFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uczooUHJv
Z3Jlc3NUb0NHUG9pbnRWYWx1ZU1hcClhZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnM7Ci0t
ICh2b2lkKXdhaXRGb3JJbnB1dFNlc3Npb247Ci0tICh2b2lkKWVuZERhdGFUcmFuc2ZlcjsKLQot
QHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgYWxsb3dzRm9jdXNUb1N0YXJ0SW5wdXRTZXNzaW9u
OwotQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgc2hvdWxkRW5zdXJlVUlBcHBsaWNhdGlvbjsK
LUBwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHNob3VsZEFsbG93TW92ZU9wZXJhdGlvbjsKLUBw
cm9wZXJ0eSAobm9uYXRvbWljKSBCbG9ja1B0cjxCT09MKF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZv
ICopPiBzaG93Q3VzdG9tQWN0aW9uU2hlZXRCbG9jazsKLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBC
bG9ja1B0cjxOU0FycmF5ICooVUlJdGVtUHJvdmlkZXIgKiwgTlNBcnJheSAqLCBOU0RpY3Rpb25h
cnkgKik+IGNvbnZlcnRJdGVtUHJvdmlkZXJzQmxvY2s7Ci1AcHJvcGVydHkgKG5vbmF0b21pYykg
QmxvY2tQdHI8TlNBcnJheSAqKGlkIDxVSURyb3BTZXNzaW9uPik+IG92ZXJyaWRlUGVyZm9ybURy
b3BCbG9jazsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIE5TQXJyYXkgKmV4dGVybmFs
SXRlbVByb3ZpZGVyczsKLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBCbG9ja1B0cjxOU1VJbnRlZ2Vy
KE5TVUludGVnZXIsIGlkKT4gb3ZlcnJpZGVEYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25CbG9jazsK
LUBwcm9wZXJ0eSAobm9uYXRvbWljKSBCbG9ja1B0cjx2b2lkKEJPT0wsIE5TQXJyYXkgKik+IGRh
dGFJbnRlcmFjdGlvbk9wZXJhdGlvbkNvbXBsZXRpb25CbG9jazsKLQotQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBOU0FycmF5ICpzb3VyY2VJdGVtUHJvdmlkZXJzOwotQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXM7Ci1AcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXkgKmZpbmFsU2VsZWN0aW9uUmVjdHM7
Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIERhdGFJbnRlcmFjdGlvblBoYXNlIHBo
YXNlOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBDR1JlY3QgbGFzdEtub3duRHJh
Z0NhcmV0UmVjdDsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBcnJheTxVSVRh
cmdldGVkRHJhZ1ByZXZpZXcgKj4gKmxpZnRQcmV2aWV3czsKLQotQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBOU0FycmF5PF9XS0F0dGFjaG1lbnQgKj4gKmluc2VydGVkQXR0YWNobWVu
dHM7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXk8X1dLQXR0YWNobWVu
dCAqPiAqcmVtb3ZlZEF0dGFjaG1lbnRzOwotCi1AZW5kCi0KLSNlbmRpZiAvLyBFTkFCTEUoREFU
QV9JTlRFUkFDVElPTikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvci5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU2YjBi
MWZmM2JmZjBiNGI5OGY3ZDdkMWE4N2NiODdiMmMzMDg0NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3IubW0KKysrIC9kZXYvbnVsbApAQCAtMSw2NzUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IuaCIKLQotI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQotCi0jaW1wb3J0ICJJ
bnN0YW5jZU1ldGhvZFN3aXp6bGVyLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgot
I2ltcG9ydCAiVUlLaXRTUEkuaCIKLQotI2ltcG9ydCA8VUlLaXQvVUlEcmFnSW50ZXJhY3Rpb24u
aD4KLSNpbXBvcnQgPFVJS2l0L1VJRHJhZ0l0ZW0uaD4KLSNpbXBvcnQgPFVJS2l0L1VJSW50ZXJh
Y3Rpb24uaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+Ci0jaW1wb3J0IDxX
ZWJLaXQvX1dLRm9jdXNlZEVsZW1lbnRJbmZvLmg+Ci0jaW1wb3J0IDxXZWJLaXQvX1dLRm9ybUlu
cHV0U2Vzc2lvbi5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL1Nv
ZnRMaW5raW5nLmg+Ci0KLVNPRlRfTElOS19GUkFNRVdPUksoVUlLaXQpCi1TT0ZUX0xJTksoVUlL
aXQsIFVJQXBwbGljYXRpb25JbnN0YW50aWF0ZVNpbmdsZXRvbiwgdm9pZCwgKENsYXNzIHNpbmds
ZXRvbkNsYXNzKSwgKHNpbmdsZXRvbkNsYXNzKSkKLQotdXNpbmcgbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEk7Ci0KLUBpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKERyYWdBbmREcm9wVGVzdGluZykK
LQotLSAoVUlWaWV3ICopX2RyYWdEcm9wSW50ZXJhY3Rpb25WaWV3Ci17Ci0gICAgcmV0dXJuIFtz
ZWxmIHZhbHVlRm9yS2V5OkAiX2N1cnJlbnRDb250ZW50VmlldyJdOwotfQotCi0tIChpZCA8VUlE
cm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZT4pZHJvcEludGVyYWN0aW9uRGVsZWdhdGUKLXsKLSAgICBy
ZXR1cm4gKGlkIDxVSURyb3BJbnRlcmFjdGlvbkRlbGVnYXRlPilzZWxmLl9kcmFnRHJvcEludGVy
YWN0aW9uVmlldzsKLX0KLQotLSAoaWQgPFVJRHJhZ0ludGVyYWN0aW9uRGVsZWdhdGU+KWRyYWdJ
bnRlcmFjdGlvbkRlbGVnYXRlCi17Ci0gICAgcmV0dXJuIChpZCA8VUlEcmFnSW50ZXJhY3Rpb25E
ZWxlZ2F0ZT4pc2VsZi5fZHJhZ0Ryb3BJbnRlcmFjdGlvblZpZXc7Ci19Ci0KLS0gKFVJRHJvcElu
dGVyYWN0aW9uICopZHJvcEludGVyYWN0aW9uCi17Ci0gICAgVUlWaWV3ICppbnRlcmFjdGlvblZp
ZXcgPSBzZWxmLl9kcmFnRHJvcEludGVyYWN0aW9uVmlldzsKLSAgICBmb3IgKGlkIDxVSUludGVy
YWN0aW9uPiBpbnRlcmFjdGlvbiBpbiBpbnRlcmFjdGlvblZpZXcuaW50ZXJhY3Rpb25zKSB7Ci0g
ICAgICAgIGlmIChbaW50ZXJhY3Rpb24gaXNLaW5kT2ZDbGFzczpbVUlEcm9wSW50ZXJhY3Rpb24g
Y2xhc3NdXSkKLSAgICAgICAgICAgIHJldHVybiAoVUlEcm9wSW50ZXJhY3Rpb24gKilpbnRlcmFj
dGlvbjsKLSAgICB9Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoVUlEcmFnSW50ZXJhY3Rpb24g
KilkcmFnSW50ZXJhY3Rpb24KLXsKLSAgICBVSVZpZXcgKmludGVyYWN0aW9uVmlldyA9IHNlbGYu
X2RyYWdEcm9wSW50ZXJhY3Rpb25WaWV3OwotICAgIGZvciAoaWQgPFVJSW50ZXJhY3Rpb24+IGlu
dGVyYWN0aW9uIGluIGludGVyYWN0aW9uVmlldy5pbnRlcmFjdGlvbnMpIHsKLSAgICAgICAgaWYg
KFtpbnRlcmFjdGlvbiBpc0tpbmRPZkNsYXNzOltVSURyYWdJbnRlcmFjdGlvbiBjbGFzc11dKQot
ICAgICAgICAgICAgcmV0dXJuIChVSURyYWdJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uOwotICAg
IH0KLSAgICByZXR1cm4gbmlsOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBNb2NrRHJh
Z0Ryb3BTZXNzaW9uCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEl0ZW1zOihOU0FycmF5IDxV
SURyYWdJdGVtICo+KilpdGVtcyBsb2NhdGlvbjooQ0dQb2ludClsb2NhdGlvbkluV2luZG93IHdp
bmRvdzooVUlXaW5kb3cgKil3aW5kb3cgYWxsb3dNb3ZlOihCT09MKWFsbG93TW92ZQotewotICAg
IGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7Ci0gICAgICAgIF9tb2NrSXRlbXMgPSBpdGVtczsK
LSAgICAgICAgX21vY2tMb2NhdGlvbkluV2luZG93ID0gbG9jYXRpb25JbldpbmRvdzsKLSAgICAg
ICAgX3dpbmRvdyA9IHdpbmRvdzsKLSAgICAgICAgX2FsbG93TW92ZSA9IGFsbG93TW92ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKEJPT0wpYWxsb3dzTW92ZU9wZXJhdGlvbgot
ewotICAgIHJldHVybiBfYWxsb3dNb3ZlOwotfQotCi0tIChCT09MKWlzUmVzdHJpY3RlZFRvRHJh
Z2dpbmdBcHBsaWNhdGlvbgotewotICAgIHJldHVybiBOTzsKLX0KLQotLSAoQk9PTCloYXNJdGVt
c0NvbmZvcm1pbmdUb1R5cGVJZGVudGlmaWVyczooTlNBcnJheTxOU1N0cmluZyAqPiAqKXR5cGVJ
ZGVudGlmaWVycwotewotICAgIGZvciAoTlNTdHJpbmcgKnR5cGVJZGVudGlmaWVyIGluIHR5cGVJ
ZGVudGlmaWVycykgewotICAgICAgICBCT09MIGhhc0l0ZW1Db25mb3JtaW5nVG9UeXBlID0gTk87
Ci0gICAgICAgIGZvciAoVUlEcmFnSXRlbSAqaXRlbSBpbiBzZWxmLml0ZW1zKQotICAgICAgICAg
ICAgaGFzSXRlbUNvbmZvcm1pbmdUb1R5cGUgfD0gW1tpdGVtLml0ZW1Qcm92aWRlciByZWdpc3Rl
cmVkVHlwZUlkZW50aWZpZXJzXSBjb250YWluc09iamVjdDp0eXBlSWRlbnRpZmllcl07Ci0gICAg
ICAgIGlmICghaGFzSXRlbUNvbmZvcm1pbmdUb1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gTk87
Ci0gICAgfQotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKEJPT0wpY2FuTG9hZE9iamVjdHNPZkNs
YXNzOihDbGFzczxVSUl0ZW1Qcm92aWRlclJlYWRpbmc+KWFDbGFzcwotewotICAgIGZvciAoVUlE
cmFnSXRlbSAqaXRlbSBpbiBzZWxmLml0ZW1zKSB7Ci0gICAgICAgIGlmIChbaXRlbS5pdGVtUHJv
dmlkZXIgY2FuTG9hZE9iamVjdE9mQ2xhc3M6YUNsYXNzXSkKLSAgICAgICAgICAgIHJldHVybiBZ
RVM7Ci0gICAgfQotICAgIHJldHVybiBOTzsKLX0KLQotLSAoQk9PTCljYW5Mb2FkT2JqZWN0c09m
Q2xhc3NlczooTlNBcnJheTxDbGFzczxVSUl0ZW1Qcm92aWRlclJlYWRpbmc+PiAqKWNsYXNzZXMK
LXsKLSAgICBmb3IgKENsYXNzPFVJSXRlbVByb3ZpZGVyUmVhZGluZz4gYUNsYXNzIGluIGNsYXNz
ZXMpIHsKLSAgICAgICAgQk9PTCBjYW5Mb2FkID0gTk87Ci0gICAgICAgIGZvciAoVUlEcmFnSXRl
bSAqaXRlbSBpbiBzZWxmLml0ZW1zKQotICAgICAgICAgICAgY2FuTG9hZCB8PSBbaXRlbS5pdGVt
UHJvdmlkZXIgY2FuTG9hZE9iamVjdE9mQ2xhc3M6YUNsYXNzXTsKLSAgICAgICAgaWYgKCFjYW5M
b2FkKQotICAgICAgICAgICAgcmV0dXJuIE5POwotICAgIH0KLSAgICByZXR1cm4gWUVTOwotfQot
Ci0tIChOU0FycmF5PFVJRHJhZ0l0ZW0gKj4gKilpdGVtcwotewotICAgIHJldHVybiBfbW9ja0l0
ZW1zLmdldCgpOwotfQotCi0tICh2b2lkKXNldEl0ZW1zOihOU0FycmF5PFVJRHJhZ0l0ZW0gKj4g
KilpdGVtcwotewotICAgIF9tb2NrSXRlbXMgPSBpdGVtczsKLX0KLQotLSAodm9pZClhZGRJdGVt
czooTlNBcnJheTxVSURyYWdJdGVtICo+ICopaXRlbXMKLXsKLSAgICBpZiAoIVtpdGVtcyBjb3Vu
dF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghW19tb2NrSXRlbXMgY291bnRdKQotICAg
ICAgICBfbW9ja0l0ZW1zID0gaXRlbXM7Ci0gICAgZWxzZQotICAgICAgICBfbW9ja0l0ZW1zID0g
W19tb2NrSXRlbXMgYXJyYXlCeUFkZGluZ09iamVjdHNGcm9tQXJyYXk6aXRlbXNdOwotfQotCi0t
IChDR1BvaW50KWxvY2F0aW9uSW5WaWV3OihVSVZpZXcgKil2aWV3Ci17Ci0gICAgcmV0dXJuIFtf
d2luZG93IGNvbnZlcnRQb2ludDpfbW9ja0xvY2F0aW9uSW5XaW5kb3cgdG9WaWV3OnZpZXddOwot
fQotCi1AZW5kCi0KLU5TU3RyaW5nICogY29uc3QgRGF0YUludGVyYWN0aW9uRW50ZXJFdmVudE5h
bWUgPSBAImRyYWdlbnRlciI7Ci1OU1N0cmluZyAqIGNvbnN0IERhdGFJbnRlcmFjdGlvbk92ZXJF
dmVudE5hbWUgPSBAImRyYWdvdmVyIjsKLU5TU3RyaW5nICogY29uc3QgRGF0YUludGVyYWN0aW9u
UGVyZm9ybU9wZXJhdGlvbkV2ZW50TmFtZSA9IEAiZHJvcCI7Ci1OU1N0cmluZyAqIGNvbnN0IERh
dGFJbnRlcmFjdGlvbkxlYXZlRXZlbnROYW1lID0gQCJkcmFnbGVhdmUiOwotTlNTdHJpbmcgKiBj
b25zdCBEYXRhSW50ZXJhY3Rpb25TdGFydEV2ZW50TmFtZSA9IEAiZHJhZ3N0YXJ0IjsKLQotQGlt
cGxlbWVudGF0aW9uIE1vY2tEcm9wU2Vzc2lvbgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
cm92aWRlcnM6KE5TQXJyYXk8VUlJdGVtUHJvdmlkZXIgKj4gKilwcm92aWRlcnMgbG9jYXRpb246
KENHUG9pbnQpbG9jYXRpb25JbldpbmRvdyB3aW5kb3c6KFVJV2luZG93ICopd2luZG93IGFsbG93
TW92ZTooQk9PTClhbGxvd01vdmUKLXsKLSAgICBhdXRvIGl0ZW1zID0gYWRvcHROUyhbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0gICAgZm9yIChVSUl0ZW1Qcm92aWRlciAqaXRlbVBy
b3ZpZGVyIGluIHByb3ZpZGVycykKLSAgICAgICAgW2l0ZW1zIGFkZE9iamVjdDpbW1tVSURyYWdJ
dGVtIGFsbG9jXSBpbml0V2l0aEl0ZW1Qcm92aWRlcjppdGVtUHJvdmlkZXJdIGF1dG9yZWxlYXNl
XV07Ci0KLSAgICByZXR1cm4gW3N1cGVyIGluaXRXaXRoSXRlbXM6aXRlbXMuZ2V0KCkgbG9jYXRp
b246bG9jYXRpb25JbldpbmRvdyB3aW5kb3c6d2luZG93IGFsbG93TW92ZTphbGxvd01vdmVdOwot
fQotCi0tIChCT09MKWlzTG9jYWwKLXsKLSAgICByZXR1cm4gWUVTOwotfQotCi0tIChOU1Byb2dy
ZXNzICopcHJvZ3Jlc3MKLXsKLSAgICByZXR1cm4gW05TUHJvZ3Jlc3MgZGlzY3JldGVQcm9ncmVz
c1dpdGhUb3RhbFVuaXRDb3VudDoxMDBdOwotfQotCi0tICh2b2lkKXNldFByb2dyZXNzSW5kaWNh
dG9yU3R5bGU6KFVJRHJvcFNlc3Npb25Qcm9ncmVzc0luZGljYXRvclN0eWxlKXByb2dyZXNzSW5k
aWNhdG9yU3R5bGUKLXsKLX0KLQotLSAoVUlEcm9wU2Vzc2lvblByb2dyZXNzSW5kaWNhdG9yU3R5
bGUpcHJvZ3Jlc3NJbmRpY2F0b3JTdHlsZQotewotICAgIHJldHVybiBVSURyb3BTZXNzaW9uUHJv
Z3Jlc3NJbmRpY2F0b3JTdHlsZU5vbmU7Ci19Ci0KLS0gKE5TVUludGVnZXIpb3BlcmF0aW9uTWFz
awotewotICAgIHJldHVybiAwOwotfQotCi0tIChpZCA8VUlEcmFnU2Vzc2lvbj4pbG9jYWxEcmFn
U2Vzc2lvbgotewotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKEJPT0wpaGFzSXRlbXNDb25mb3Jt
aW5nVG9UeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKil0eXBlSWRlbnRpZmllcgotewotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBOTzsKLX0KLQotLSAoQk9PTCljYW5DcmVh
dGVJdGVtc09mQ2xhc3M6KENsYXNzPFVJSXRlbVByb3ZpZGVyUmVhZGluZz4pYUNsYXNzCi17Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIE5POwotfQotCi0tIChOU1Byb2dy
ZXNzICopbG9hZE9iamVjdHNPZkNsYXNzOihDbGFzczxOU0l0ZW1Qcm92aWRlclJlYWRpbmc+KWFD
bGFzcyBjb21wbGV0aW9uOih2b2lkKF4pKE5TQXJyYXk8X19raW5kb2YgaWQgPE5TSXRlbVByb3Zp
ZGVyUmVhZGluZz4+ICpvYmplY3RzKSljb21wbGV0aW9uCi17Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTW9j
a0RyYWdTZXNzaW9uIHsKLSAgICBSZXRhaW5QdHI8aWQ+IF9sb2NhbENvbnRleHQ7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFdpbmRvdzooVUlXaW5kb3cgKil3aW5kb3cgYWxsb3dNb3Zl
OihCT09MKWFsbG93TW92ZQotewotICAgIHJldHVybiBbc3VwZXIgaW5pdFdpdGhJdGVtczpAWyBd
IGxvY2F0aW9uOkNHUG9pbnRaZXJvIHdpbmRvdzp3aW5kb3cgYWxsb3dNb3ZlOmFsbG93TW92ZV07
Ci19Ci0KLS0gKE5TVUludGVnZXIpbG9jYWxPcGVyYXRpb25NYXNrCi17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS0gKE5TVUludGVnZXIpZXh0ZXJuYWxP
cGVyYXRpb25NYXNrCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLS0gKGlkKXNlc3Npb24KLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChpZClsb2Nh
bENvbnRleHQKLXsKLSAgICByZXR1cm4gX2xvY2FsQ29udGV4dC5nZXQoKTsKLX0KLQotLSAodm9p
ZClzZXRMb2NhbENvbnRleHQ6KGlkKWxvY2FsQ29udGV4dAotewotICAgIF9sb2NhbENvbnRleHQg
PSBsb2NhbENvbnRleHQ7Ci19Ci0KLUBlbmQKLQotc3RhdGljIGRvdWJsZSBwcm9ncmVzc0luY3Jl
bWVudFN0ZXAgPSAwLjAzMzsKLXN0YXRpYyBkb3VibGUgcHJvZ3Jlc3NUaW1lU3RlcCA9IDAuMDE2
Owotc3RhdGljIE5TU3RyaW5nICpUZXN0V2ViS2l0QVBJU2ltdWxhdGVDYW5jZWxBbGxUb3VjaGVz
Tm90aWZpY2F0aW9uTmFtZSA9IEAiVGVzdFdlYktpdEFQSVNpbXVsYXRlQ2FuY2VsQWxsVG91Y2hl
c05vdGlmaWNhdGlvbk5hbWUiOwotCi1zdGF0aWMgTlNBcnJheSAqZGF0YUludGVyYWN0aW9uRXZl
bnROYW1lcygpCi17Ci0gICAgc3RhdGljIE5TQXJyYXkgKmV2ZW50TmFtZXMgPSBuaWw7Ci0gICAg
c3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47Ci0gICAgZGlzcGF0Y2hfb25jZSgmb25j
ZVRva2VuLCBeKCkgewotICAgICAgICBldmVudE5hbWVzID0gQFsgRGF0YUludGVyYWN0aW9uRW50
ZXJFdmVudE5hbWUsIERhdGFJbnRlcmFjdGlvbk92ZXJFdmVudE5hbWUsIERhdGFJbnRlcmFjdGlv
blBlcmZvcm1PcGVyYXRpb25FdmVudE5hbWUsIERhdGFJbnRlcmFjdGlvbkxlYXZlRXZlbnROYW1l
LCBEYXRhSW50ZXJhY3Rpb25TdGFydEV2ZW50TmFtZSBdOwotICAgIH0pOwotICAgIHJldHVybiBl
dmVudE5hbWVzOwotfQotCi1AaW50ZXJmYWNlIERhdGFJbnRlcmFjdGlvblNpbXVsYXRvckFwcGxp
Y2F0aW9uIDogVUlBcHBsaWNhdGlvbgotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gRGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yQXBwbGljYXRpb24KLS0gKHZvaWQpX2NhbmNlbEFsbFRvdWNoZXMKLXsK
LSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHBvc3ROb3RpZmljYXRp
b25OYW1lOlRlc3RXZWJLaXRBUElTaW11bGF0ZUNhbmNlbEFsbFRvdWNoZXNOb3RpZmljYXRpb25O
YW1lIG9iamVjdDpuaWxdOwotfQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gRGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXc6KFRlc3RXS1dl
YlZpZXcgKil3ZWJWaWV3Ci17Ci0gICAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKLSAgICAg
ICAgX3dlYlZpZXcgPSB3ZWJWaWV3OwotICAgICAgICBfc2hvdWxkRW5zdXJlVUlBcHBsaWNhdGlv
biA9IE5POwotICAgICAgICBfc2hvdWxkQWxsb3dNb3ZlT3BlcmF0aW9uID0gWUVTOwotICAgICAg
ICBfaXNEb25lV2FpdGluZ0ZvcklucHV0U2Vzc2lvbiA9IHRydWU7Ci0gICAgICAgIFtfd2ViVmll
dyBzZXRVSURlbGVnYXRlOnNlbGZdOwotICAgICAgICBbX3dlYlZpZXcgX3NldElucHV0RGVsZWdh
dGU6c2VsZl07Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MK
LXsKLSAgICBpZiAoW193ZWJWaWV3IFVJRGVsZWdhdGVdID09IHNlbGYpCi0gICAgICAgIFtfd2Vi
VmlldyBzZXRVSURlbGVnYXRlOm5pbF07Ci0KLSAgICBpZiAoW193ZWJWaWV3IF9pbnB1dERlbGVn
YXRlXSA9PSBzZWxmKQotICAgICAgICBbX3dlYlZpZXcgX3NldElucHV0RGVsZWdhdGU6bmlsXTsK
LQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClfcmVzZXRTaW11bGF0ZWRTdGF0
ZQotewotICAgIF9waGFzZSA9IERhdGFJbnRlcmFjdGlvbkJlZ2lubmluZzsKLSAgICBfY3VycmVu
dFByb2dyZXNzID0gMDsKLSAgICBfaXNEb25lV2l0aEN1cnJlbnRSdW4gPSBmYWxzZTsKLSAgICBf
b2JzZXJ2ZWRFdmVudE5hbWVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
XSk7Ci0gICAgX2luc2VydGVkQXR0YWNobWVudHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRdKTsKLSAgICBfcmVtb3ZlZEF0dGFjaG1lbnRzID0gYWRvcHROUyhbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0gICAgX2ZpbmFsU2VsZWN0aW9uUmVjdHMgPSBAWyBd
OwotICAgIF9kcmFnU2Vzc2lvbiA9IG5pbDsKLSAgICBfZHJvcFNlc3Npb24gPSBuaWw7Ci0gICAg
X2N1cnJlbnREcm9wUHJvcG9zYWwgPSBuaWw7Ci0gICAgX2xhc3RLbm93bkRyYWdDYXJldFJlY3Qg
PSBDR1JlY3RaZXJvOwotICAgIF9yZW1haW5pbmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlv
bnNCeVByb2dyZXNzID0gbmlsOwotICAgIF9xdWV1ZWRBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2Nh
dGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAgICBfbGlm
dFByZXZpZXdzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci19Ci0K
LS0gKE5TQXJyYXkgKilvYnNlcnZlZEV2ZW50TmFtZXMKLXsKLSAgICByZXR1cm4gX29ic2VydmVk
RXZlbnROYW1lcy5nZXQoKTsKLX0KLQotLSAodm9pZClzaW11bGF0ZUFsbFRvdWNoZXNDYW5jZWxl
ZDooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBbTlNPYmplY3QgY2FuY2Vs
UHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9y
KF9hZHZhbmNlUHJvZ3Jlc3MpIG9iamVjdDpuaWxdOwotICAgIF9waGFzZSA9IERhdGFJbnRlcmFj
dGlvbkNhbmNlbGxlZDsKLSAgICBfY3VycmVudFByb2dyZXNzID0gMTsKLSAgICBfaXNEb25lV2l0
aEN1cnJlbnRSdW4gPSB0cnVlOwotICAgIGlmIChfZHJhZ1Nlc3Npb24pCi0gICAgICAgIFtbX3dl
YlZpZXcgZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVdIGRyYWdJbnRlcmFjdGlvbjpbX3dlYlZpZXcg
ZHJhZ0ludGVyYWN0aW9uXSBzZXNzaW9uOl9kcmFnU2Vzc2lvbi5nZXQoKSBkaWRFbmRXaXRoT3Bl
cmF0aW9uOlVJRHJvcE9wZXJhdGlvbkNhbmNlbF07Ci19Ci0KLS0gKHZvaWQpcnVuRnJvbTooQ0dQ
b2ludClzdGFydExvY2F0aW9uIHRvOihDR1BvaW50KWVuZExvY2F0aW9uCi17Ci0gICAgW3NlbGYg
cnVuRnJvbTpzdGFydExvY2F0aW9uIHRvOmVuZExvY2F0aW9uIGFkZGl0aW9uYWxJdGVtUmVxdWVz
dExvY2F0aW9uczpuaWxdOwotfQotCi0tICh2b2lkKXJ1bkZyb206KENHUG9pbnQpc3RhcnRMb2Nh
dGlvbiB0bzooQ0dQb2ludCllbmRMb2NhdGlvbiBhZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlv
bnM6KFByb2dyZXNzVG9DR1BvaW50VmFsdWVNYXApYWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRp
b25zCi17Ci0gICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKmRlZmF1bHRDZW50ZXIgPSBbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07Ci0gICAgW2RlZmF1bHRDZW50ZXIgYWRkT2Jz
ZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Ioc2ltdWxhdGVBbGxUb3VjaGVzQ2FuY2VsZWQ6
KSBuYW1lOlRlc3RXZWJLaXRBUElTaW11bGF0ZUNhbmNlbEFsbFRvdWNoZXNOb3RpZmljYXRpb25O
YW1lIG9iamVjdDpuaWxdOwotCi0gICAgaWYgKF9zaG91bGRFbnN1cmVVSUFwcGxpY2F0aW9uKQot
ICAgICAgICBVSUFwcGxpY2F0aW9uSW5zdGFudGlhdGVTaW5nbGV0b24oW0RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvckFwcGxpY2F0aW9uIGNsYXNzXSk7Ci0KLSAgICBbc2VsZiBfcmVzZXRTaW11bGF0
ZWRTdGF0ZV07Ci0KLSAgICBpZiAoYWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zKQotICAg
ICAgICBfcmVtYWluaW5nQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zQnlQcm9ncmVzcyA9
IGFkb3B0TlMoW2FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9ucyBtdXRhYmxlQ29weV0pOwot
Ci0gICAgUmV0YWluUHRyPERhdGFJbnRlcmFjdGlvblNpbXVsYXRvcj4gc3Ryb25nU2VsZiA9IHNl
bGY7Ci0gICAgZm9yIChOU1N0cmluZyAqZXZlbnROYW1lIGluIGRhdGFJbnRlcmFjdGlvbkV2ZW50
TmFtZXMoKSkgewotICAgICAgICBEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgKndlYWtTZWxmID0g
c3Ryb25nU2VsZi5nZXQoKTsKLSAgICAgICAgW3dlYWtTZWxmLT5fd2ViVmlldyBwZXJmb3JtQWZ0
ZXJSZWNlaXZpbmdNZXNzYWdlOmV2ZW50TmFtZSBhY3Rpb246XigpIHsKLSAgICAgICAgICAgIFt3
ZWFrU2VsZi0+X29ic2VydmVkRXZlbnROYW1lcyBhZGRPYmplY3Q6ZXZlbnROYW1lXTsKLSAgICAg
ICAgfV07Ci0gICAgfQotCi0gICAgX3N0YXJ0TG9jYXRpb24gPSBzdGFydExvY2F0aW9uOwotICAg
IF9lbmRMb2NhdGlvbiA9IGVuZExvY2F0aW9uOwotCi0gICAgaWYgKHNlbGYuZXh0ZXJuYWxJdGVt
UHJvdmlkZXJzLmNvdW50KSB7Ci0gICAgICAgIF9kcm9wU2Vzc2lvbiA9IGFkb3B0TlMoW1tNb2Nr
RHJvcFNlc3Npb24gYWxsb2NdIGluaXRXaXRoUHJvdmlkZXJzOnNlbGYuZXh0ZXJuYWxJdGVtUHJv
dmlkZXJzIGxvY2F0aW9uOl9zdGFydExvY2F0aW9uIHdpbmRvdzpbX3dlYlZpZXcgd2luZG93XSBh
bGxvd01vdmU6c2VsZi5zaG91bGRBbGxvd01vdmVPcGVyYXRpb25dKTsKLSAgICAgICAgX3BoYXNl
ID0gRGF0YUludGVyYWN0aW9uQmVnYW47Ci0gICAgICAgIFtzZWxmIF9hZHZhbmNlUHJvZ3Jlc3Nd
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIF9kcmFnU2Vzc2lvbiA9IGFkb3B0TlMoW1tNb2NrRHJh
Z1Nlc3Npb24gYWxsb2NdIGluaXRXaXRoV2luZG93Oltfd2ViVmlldyB3aW5kb3ddIGFsbG93TW92
ZTpzZWxmLnNob3VsZEFsbG93TW92ZU9wZXJhdGlvbl0pOwotICAgICAgICBbX2RyYWdTZXNzaW9u
IHNldE1vY2tMb2NhdGlvbkluV2luZG93Ol9zdGFydExvY2F0aW9uXTsKLSAgICAgICAgWyhpZCA8
VUlEcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV9Gb3JXZWJLaXRPbmx5PilbX3dlYlZpZXcgZHJhZ0lu
dGVyYWN0aW9uRGVsZWdhdGVdIF9kcmFnSW50ZXJhY3Rpb246W193ZWJWaWV3IGRyYWdJbnRlcmFj
dGlvbl0gcHJlcGFyZUZvclNlc3Npb246X2RyYWdTZXNzaW9uLmdldCgpIGNvbXBsZXRpb246Xigp
IHsKLSAgICAgICAgICAgIERhdGFJbnRlcmFjdGlvblNpbXVsYXRvciAqd2Vha1NlbGYgPSBzdHJv
bmdTZWxmLmdldCgpOwotICAgICAgICAgICAgaWYgKHdlYWtTZWxmLT5fcGhhc2UgPT0gRGF0YUlu
dGVyYWN0aW9uQ2FuY2VsbGVkKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAg
ICAgd2Vha1NlbGYtPl9waGFzZSA9IERhdGFJbnRlcmFjdGlvbkJlZ2lubmluZzsKLSAgICAgICAg
ICAgIFt3ZWFrU2VsZiBfYWR2YW5jZVByb2dyZXNzXTsKLSAgICAgICAgfV07Ci0gICAgfQotCi0g
ICAgVXRpbDo6cnVuKCZfaXNEb25lV2l0aEN1cnJlbnRSdW4pOwotICAgIFtfd2ViVmlldyBjbGVh
ck1lc3NhZ2VIYW5kbGVyczpkYXRhSW50ZXJhY3Rpb25FdmVudE5hbWVzKCldOwotICAgIF9maW5h
bFNlbGVjdGlvblJlY3RzID0gW193ZWJWaWV3IHNlbGVjdGlvblJlY3RzQWZ0ZXJQcmVzZW50YXRp
b25VcGRhdGVdOwotCi0gICAgW2RlZmF1bHRDZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07Ci19
Ci0KLS0gKE5TQXJyYXkgKilmaW5hbFNlbGVjdGlvblJlY3RzCi17Ci0gICAgcmV0dXJuIF9maW5h
bFNlbGVjdGlvblJlY3RzLmdldCgpOwotfQotCi0tICh2b2lkKV9jb25jbHVkZURhdGFJbnRlcmFj
dGlvbkFuZFBlcmZvcm1PcGVyYXRpb25JZk5lY2Vzc2FyeQotewotICAgIF9sYXN0S25vd25EcmFn
Q2FyZXRSZWN0ID0gW193ZWJWaWV3IF9kcmFnQ2FyZXRSZWN0XTsKLSAgICBhdXRvIG9wZXJhdGlv
biA9IFtfY3VycmVudERyb3BQcm9wb3NhbCBvcGVyYXRpb25dOwotICAgIGlmIChvcGVyYXRpb24g
IT0gVUlEcm9wT3BlcmF0aW9uQ2FuY2VsICYmIG9wZXJhdGlvbiAhPSBVSURyb3BPcGVyYXRpb25G
b3JiaWRkZW4pIHsKLSAgICAgICAgW1tfd2ViVmlldyBkcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZV0g
ZHJvcEludGVyYWN0aW9uOltfd2ViVmlldyBkcm9wSW50ZXJhY3Rpb25dIHBlcmZvcm1Ecm9wOl9k
cm9wU2Vzc2lvbi5nZXQoKV07Ci0gICAgICAgIF9waGFzZSA9IERhdGFJbnRlcmFjdGlvblBlcmZv
cm1pbmc7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgX2lzRG9uZVdpdGhDdXJyZW50UnVuID0gWUVT
OwotICAgICAgICBfcGhhc2UgPSBEYXRhSW50ZXJhY3Rpb25DYW5jZWxsZWQ7Ci0gICAgfQotCi0g
ICAgW1tfd2ViVmlldyBkcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJvcEludGVyYWN0aW9uOltf
d2ViVmlldyBkcm9wSW50ZXJhY3Rpb25dIHNlc3Npb25EaWRFbmQ6X2Ryb3BTZXNzaW9uLmdldCgp
XTsKLQotICAgIGlmIChfZHJhZ1Nlc3Npb24pCi0gICAgICAgIFtbX3dlYlZpZXcgZHJhZ0ludGVy
YWN0aW9uRGVsZWdhdGVdIGRyYWdJbnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9u
XSBzZXNzaW9uOl9kcmFnU2Vzc2lvbi5nZXQoKSBkaWRFbmRXaXRoT3BlcmF0aW9uOm9wZXJhdGlv
bl07Ci19Ci0KLS0gKHZvaWQpX2VucXVldWVQZW5kaW5nQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9j
YXRpb25zCi17Ci0gICAgTlNNdXRhYmxlQXJyYXkgKnByb2dyZXNzVmFsdWVzVG9SZW1vdmUgPSBb
TlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIGZvciAoTlNOdW1iZXIgKnByb2dyZXNzVmFsdWUg
aW4gX3JlbWFpbmluZ0FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uc0J5UHJvZ3Jlc3MuZ2V0
KCkpIHsKLSAgICAgICAgZG91YmxlIHByb2dyZXNzID0gcHJvZ3Jlc3NWYWx1ZS5kb3VibGVWYWx1
ZTsKLSAgICAgICAgaWYgKHByb2dyZXNzID4gX2N1cnJlbnRQcm9ncmVzcykKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBbcHJvZ3Jlc3NWYWx1ZXNUb1JlbW92ZSBhZGRPYmplY3Q6cHJv
Z3Jlc3NWYWx1ZV07Ci0gICAgICAgIFtfcXVldWVkQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRp
b25zIGFkZE9iamVjdDpbX3JlbWFpbmluZ0FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uc0J5
UHJvZ3Jlc3Mgb2JqZWN0Rm9yS2V5OnByb2dyZXNzVmFsdWVdXTsKLSAgICB9Ci0KLSAgICBmb3Ig
KE5TTnVtYmVyICpwcm9ncmVzc1RvUmVtb3ZlIGluIHByb2dyZXNzVmFsdWVzVG9SZW1vdmUpCi0g
ICAgICAgIFtfcmVtYWluaW5nQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zQnlQcm9ncmVz
cyByZW1vdmVPYmplY3RGb3JLZXk6cHJvZ3Jlc3NUb1JlbW92ZV07Ci19Ci0KLS0gKEJPT0wpX3Nl
bmRRdWV1ZWRBZGRpdGlvbmFsSXRlbVJlcXVlc3QKLXsKLSAgICBpZiAoIVtfcXVldWVkQWRkaXRp
b25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zIGNvdW50XSkKLSAgICAgICAgcmV0dXJuIE5POwotCi0g
ICAgUmV0YWluUHRyPE5TVmFsdWU+IHJlcXVlc3RMb2NhdGlvblZhbHVlID0gW19xdWV1ZWRBZGRp
dGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnMgb2JqZWN0QXRJbmRleDowXTsKLSAgICBbX3F1ZXVl
ZEFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9ucyByZW1vdmVPYmplY3RBdEluZGV4OjBdOwot
Ci0gICAgYXV0byByZXF1ZXN0TG9jYXRpb24gPSBbW193ZWJWaWV3IHdpbmRvd10gY29udmVydFBv
aW50OltyZXF1ZXN0TG9jYXRpb25WYWx1ZSBDR1BvaW50VmFsdWVdIHRvVmlldzpfd2ViVmlldy5n
ZXQoKV07Ci0gICAgWyhpZCA8VUlEcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV9Qcm9wb3NlZF9TUElf
MzMxNDY4MDM+KVtfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gX2RyYWdJbnRlcmFj
dGlvbjpbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uXSBpdGVtc0ZvckFkZGluZ1RvU2Vzc2lvbjpf
ZHJhZ1Nlc3Npb24uZ2V0KCkgd2l0aFRvdWNoQXRQb2ludDpyZXF1ZXN0TG9jYXRpb24gY29tcGxl
dGlvbjpbZHJhZ1Nlc3Npb24gPSBfZHJhZ1Nlc3Npb24sIGRyb3BTZXNzaW9uID0gX2Ryb3BTZXNz
aW9uXSAoTlNBcnJheSAqaXRlbXMpIHsKLSAgICAgICAgW2RyYWdTZXNzaW9uIGFkZEl0ZW1zOml0
ZW1zXTsKLSAgICAgICAgW2Ryb3BTZXNzaW9uIGFkZEl0ZW1zOml0ZW1zXTsKLSAgICB9XTsKLSAg
ICByZXR1cm4gWUVTOwotfQotCi0tICh2b2lkKV9hZHZhbmNlUHJvZ3Jlc3MKLXsKLSAgICBbc2Vs
ZiBfZW5xdWV1ZVBlbmRpbmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnNdOwotICAgIGlm
IChbc2VsZiBfc2VuZFF1ZXVlZEFkZGl0aW9uYWxJdGVtUmVxdWVzdF0pIHsKLSAgICAgICAgW3Nl
bGYgX3NjaGVkdWxlQWR2YW5jZVByb2dyZXNzXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIF9sYXN0S25vd25EcmFnQ2FyZXRSZWN0ID0gW193ZWJWaWV3IF9kcmFnQ2FyZXRSZWN0XTsK
LSAgICBfY3VycmVudFByb2dyZXNzICs9IHByb2dyZXNzSW5jcmVtZW50U3RlcDsKLSAgICBDR1Bv
aW50IGxvY2F0aW9uSW5XaW5kb3cgPSBzZWxmLl9jdXJyZW50TG9jYXRpb247Ci0gICAgW19kcmFn
U2Vzc2lvbiBzZXRNb2NrTG9jYXRpb25JbldpbmRvdzpsb2NhdGlvbkluV2luZG93XTsKLSAgICBb
X2Ryb3BTZXNzaW9uIHNldE1vY2tMb2NhdGlvbkluV2luZG93OmxvY2F0aW9uSW5XaW5kb3ddOwot
Ci0gICAgaWYgKF9jdXJyZW50UHJvZ3Jlc3MgPj0gMSkgewotICAgICAgICBfY3VycmVudFByb2dy
ZXNzID0gMTsKLSAgICAgICAgW3NlbGYgX2NvbmNsdWRlRGF0YUludGVyYWN0aW9uQW5kUGVyZm9y
bU9wZXJhdGlvbklmTmVjZXNzYXJ5XTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN3
aXRjaCAoX3BoYXNlKSB7Ci0gICAgY2FzZSBEYXRhSW50ZXJhY3Rpb25CZWdpbm5pbmc6IHsKLSAg
ICAgICAgTlNNdXRhYmxlQXJyYXk8VUlJdGVtUHJvdmlkZXIgKj4gKml0ZW1Qcm92aWRlcnMgPSBb
TlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICBOU0FycmF5ICppdGVtcyA9IFtbX3dlYlZp
ZXcgZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVdIGRyYWdJbnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJh
Z0ludGVyYWN0aW9uXSBpdGVtc0ZvckJlZ2lubmluZ1Nlc3Npb246X2RyYWdTZXNzaW9uLmdldCgp
XTsKLSAgICAgICAgaWYgKCFpdGVtcy5jb3VudCkgewotICAgICAgICAgICAgX3BoYXNlID0gRGF0
YUludGVyYWN0aW9uQ2FuY2VsbGVkOwotICAgICAgICAgICAgX2N1cnJlbnRQcm9ncmVzcyA9IDE7
Ci0gICAgICAgICAgICBfaXNEb25lV2l0aEN1cnJlbnRSdW4gPSB0cnVlOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChVSURyYWdJdGVtICppdGVtIGluIGl0
ZW1zKSB7Ci0gICAgICAgICAgICBbaXRlbVByb3ZpZGVycyBhZGRPYmplY3Q6aXRlbS5pdGVtUHJv
dmlkZXJdOwotICAgICAgICAgICAgVUlUYXJnZXRlZERyYWdQcmV2aWV3ICpsaWZ0UHJldmlldyA9
IFtbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVdIGRyYWdJbnRlcmFjdGlvbjpbX3dl
YlZpZXcgZHJhZ0ludGVyYWN0aW9uXSBwcmV2aWV3Rm9yTGlmdGluZ0l0ZW06aXRlbSBzZXNzaW9u
Ol9kcmFnU2Vzc2lvbi5nZXQoKV07Ci0gICAgICAgICAgICBFWFBFQ1RfVFJVRSghIWxpZnRQcmV2
aWV3KTsKLSAgICAgICAgICAgIGlmIChsaWZ0UHJldmlldykKLSAgICAgICAgICAgICAgICBbX2xp
ZnRQcmV2aWV3cyBhZGRPYmplY3Q6bGlmdFByZXZpZXddOwotICAgICAgICB9Ci0KLSAgICAgICAg
X2Ryb3BTZXNzaW9uID0gYWRvcHROUyhbW01vY2tEcm9wU2Vzc2lvbiBhbGxvY10gaW5pdFdpdGhQ
cm92aWRlcnM6aXRlbVByb3ZpZGVycyBsb2NhdGlvbjpzZWxmLl9jdXJyZW50TG9jYXRpb24gd2lu
ZG93Oltfd2ViVmlldyB3aW5kb3ddIGFsbG93TW92ZTpzZWxmLnNob3VsZEFsbG93TW92ZU9wZXJh
dGlvbl0pOwotICAgICAgICBbX2RyYWdTZXNzaW9uIHNldEl0ZW1zOml0ZW1zXTsKLSAgICAgICAg
X3NvdXJjZUl0ZW1Qcm92aWRlcnMgPSBpdGVtUHJvdmlkZXJzOwotICAgICAgICBpZiAoc2VsZi5z
aG93Q3VzdG9tQWN0aW9uU2hlZXRCbG9jaykgewotICAgICAgICAgICAgLy8gRGVmZXIgcHJvZ3Jl
c3MgdW50aWwgdGhlIGN1c3RvbSBhY3Rpb24gc2hlZXQgaXMgZGlzbWlzc2VkLgotICAgICAgICAg
ICAgYXV0byBzdGFydExvY2F0aW9uSW5WaWV3ID0gW1tfd2ViVmlldyB3aW5kb3ddIGNvbnZlcnRQ
b2ludDpfc3RhcnRMb2NhdGlvbiB0b1ZpZXc6X3dlYlZpZXcuZ2V0KCldOwotICAgICAgICAgICAg
W193ZWJWaWV3IF9zaW11bGF0ZUxvbmdQcmVzc0FjdGlvbkF0TG9jYXRpb246c3RhcnRMb2NhdGlv
bkluVmlld107Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBbW193
ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcmFnSW50ZXJhY3Rpb246W193ZWJWaWV3
IGRyYWdJbnRlcmFjdGlvbl0gc2Vzc2lvbldpbGxCZWdpbjpfZHJhZ1Nlc3Npb24uZ2V0KCldOwot
Ci0gICAgICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHJldGFpbmVkV2ViVmlldyA9IF93ZWJWaWV3
OwotICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeKCkg
ewotICAgICAgICAgICAgW3JldGFpbmVkV2ViVmlldyByZXNpZ25GaXJzdFJlc3BvbmRlcl07Ci0g
ICAgICAgIH0pOwotCi0gICAgICAgIF9waGFzZSA9IERhdGFJbnRlcmFjdGlvbkJlZ2FuOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBEYXRhSW50ZXJhY3Rpb25CZWdhbjoKLSAgICAg
ICAgW1tfd2ViVmlldyBkcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJvcEludGVyYWN0aW9uOltf
d2ViVmlldyBkcm9wSW50ZXJhY3Rpb25dIHNlc3Npb25EaWRFbnRlcjpfZHJvcFNlc3Npb24uZ2V0
KCldOwotICAgICAgICBfcGhhc2UgPSBEYXRhSW50ZXJhY3Rpb25FbnRlcmVkOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIERhdGFJbnRlcmFjdGlvbkVudGVyZWQ6IHsKLSAgICAgICAgX2N1cnJl
bnREcm9wUHJvcG9zYWwgPSBbW193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcm9w
SW50ZXJhY3Rpb246W193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbl0gc2Vzc2lvbkRpZFVwZGF0ZTpf
ZHJvcFNlc3Npb24uZ2V0KCldOwotICAgICAgICBpZiAoIVtzZWxmIHNob3VsZEFsbG93TW92ZU9w
ZXJhdGlvbl0gJiYgW19jdXJyZW50RHJvcFByb3Bvc2FsIG9wZXJhdGlvbl0gPT0gVUlEcm9wT3Bl
cmF0aW9uTW92ZSkKLSAgICAgICAgICAgIF9jdXJyZW50RHJvcFByb3Bvc2FsID0gYWRvcHROUyhb
W1VJRHJvcFByb3Bvc2FsIGFsbG9jXSBpbml0V2l0aERyb3BPcGVyYXRpb246VUlEcm9wT3BlcmF0
aW9uQ2FuY2VsXSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBbc2VsZiBfc2NoZWR1bGVBZHZhbmNlUHJvZ3Jlc3NdOwot
fQotCi0tIChDR1BvaW50KV9jdXJyZW50TG9jYXRpb24KLXsKLSAgICBDR0Zsb2F0IGRpc3RhbmNl
WCA9IF9lbmRMb2NhdGlvbi54IC0gX3N0YXJ0TG9jYXRpb24ueDsKLSAgICBDR0Zsb2F0IGRpc3Rh
bmNlWSA9IF9lbmRMb2NhdGlvbi55IC0gX3N0YXJ0TG9jYXRpb24ueTsKLSAgICByZXR1cm4gQ0dQ
b2ludE1ha2UoX3N0YXJ0TG9jYXRpb24ueCArIF9jdXJyZW50UHJvZ3Jlc3MgKiBkaXN0YW5jZVgs
IF9zdGFydExvY2F0aW9uLnkgKyBfY3VycmVudFByb2dyZXNzICogZGlzdGFuY2VZKTsKLX0KLQot
LSAodm9pZClfc2NoZWR1bGVBZHZhbmNlUHJvZ3Jlc3MKLXsKLSAgICBbTlNPYmplY3QgY2FuY2Vs
UHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9y
KF9hZHZhbmNlUHJvZ3Jlc3MpIG9iamVjdDpuaWxdOwotICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rv
cjpAc2VsZWN0b3IoX2FkdmFuY2VQcm9ncmVzcykgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTpw
cm9ncmVzc1RpbWVTdGVwXTsKLX0KLQotLSAoTlNBcnJheSAqKXNvdXJjZUl0ZW1Qcm92aWRlcnMK
LXsKLSAgICByZXR1cm4gX3NvdXJjZUl0ZW1Qcm92aWRlcnMuZ2V0KCk7Ci19Ci0KLS0gKE5TQXJy
YXkgKilleHRlcm5hbEl0ZW1Qcm92aWRlcnMKLXsKLSAgICByZXR1cm4gX2V4dGVybmFsSXRlbVBy
b3ZpZGVycy5nZXQoKTsKLX0KLQotLSAodm9pZClzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6KE5T
QXJyYXkgKilleHRlcm5hbEl0ZW1Qcm92aWRlcnMKLXsKLSAgICBfZXh0ZXJuYWxJdGVtUHJvdmlk
ZXJzID0gYWRvcHROUyhbZXh0ZXJuYWxJdGVtUHJvdmlkZXJzIGNvcHldKTsKLX0KLQotLSAoRGF0
YUludGVyYWN0aW9uUGhhc2UpcGhhc2UKLXsKLSAgICByZXR1cm4gX3BoYXNlOwotfQotCi0tIChO
U0FycmF5PFVJVGFyZ2V0ZWREcmFnUHJldmlldyAqPiAqKWxpZnRQcmV2aWV3cwotewotICAgIHJl
dHVybiBfbGlmdFByZXZpZXdzLmdldCgpOwotfQotCi0tIChDR1JlY3QpbGFzdEtub3duRHJhZ0Nh
cmV0UmVjdAotewotICAgIHJldHVybiBfbGFzdEtub3duRHJhZ0NhcmV0UmVjdDsKLX0KLQotLSAo
dm9pZCl3YWl0Rm9ySW5wdXRTZXNzaW9uCi17Ci0gICAgX2lzRG9uZVdhaXRpbmdGb3JJbnB1dFNl
c3Npb24gPSBmYWxzZTsKLQotICAgIC8vIFdhaXRpbmcgZm9yIGFuIGlucHV0IHNlc3Npb24gaW1w
bGllcyB0aGF0IHdlIHNob3VsZCBhbGxvdyBpbnB1dCBzZXNzaW9ucyB0byBiZWdpbi4KLSAgICBz
ZWxmLmFsbG93c0ZvY3VzVG9TdGFydElucHV0U2Vzc2lvbiA9IFlFUzsKLQotICAgIFV0aWw6OnJ1
bigmX2lzRG9uZVdhaXRpbmdGb3JJbnB1dFNlc3Npb24pOwotfQotCi0tIChOU0FycmF5PF9XS0F0
dGFjaG1lbnQgKj4gKilpbnNlcnRlZEF0dGFjaG1lbnRzCi17Ci0gICAgcmV0dXJuIF9pbnNlcnRl
ZEF0dGFjaG1lbnRzLmdldCgpOwotfQotCi0tIChOU0FycmF5PF9XS0F0dGFjaG1lbnQgKj4gKily
ZW1vdmVkQXR0YWNobWVudHMKLXsKLSAgICByZXR1cm4gX3JlbW92ZWRBdHRhY2htZW50cy5nZXQo
KTsKLX0KLQotLSAodm9pZCllbmREYXRhVHJhbnNmZXIKLXsKLSAgICBbW193ZWJWaWV3IGRyYWdJ
bnRlcmFjdGlvbkRlbGVnYXRlXSBkcmFnSW50ZXJhY3Rpb246W193ZWJWaWV3IGRyYWdJbnRlcmFj
dGlvbl0gc2Vzc2lvbkRpZFRyYW5zZmVySXRlbXM6X2RyYWdTZXNzaW9uLmdldCgpXTsKLX0KLQot
I3ByYWdtYSBtYXJrIC0gV0tVSURlbGVnYXRlUHJpdmF0ZQotCi0tICh2b2lkKV93ZWJWaWV3OihX
S1dlYlZpZXcgKil3ZWJWaWV3IGRhdGFJbnRlcmFjdGlvbk9wZXJhdGlvbldhc0hhbmRsZWQ6KEJP
T0wpaGFuZGxlZCBmb3JTZXNzaW9uOihpZClzZXNzaW9uIGl0ZW1Qcm92aWRlcnM6KE5TQXJyYXk8
VUlJdGVtUHJvdmlkZXIgKj4gKilpdGVtUHJvdmlkZXJzCi17Ci0gICAgX2lzRG9uZVdpdGhDdXJy
ZW50UnVuID0gdHJ1ZTsKLQotICAgIGlmIChzZWxmLmRhdGFJbnRlcmFjdGlvbk9wZXJhdGlvbkNv
bXBsZXRpb25CbG9jaykKLSAgICAgICAgc2VsZi5kYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25Db21w
bGV0aW9uQmxvY2soaGFuZGxlZCwgaXRlbVByb3ZpZGVycyk7Ci19Ci0KLS0gKE5TVUludGVnZXIp
X3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgd2lsbFVwZGF0ZURhdGFJbnRlcmFjdGlvbk9w
ZXJhdGlvblRvT3BlcmF0aW9uOihOU1VJbnRlZ2VyKW9wZXJhdGlvbiBmb3JTZXNzaW9uOihpZClz
ZXNzaW9uCi17Ci0gICAgcmV0dXJuIHNlbGYub3ZlcnJpZGVEYXRhSW50ZXJhY3Rpb25PcGVyYXRp
b25CbG9jayA/IHNlbGYub3ZlcnJpZGVEYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25CbG9jayhvcGVy
YXRpb24sIHNlc3Npb24pIDogb3BlcmF0aW9uOwotfQotCi0tIChOU0FycmF5ICopX3dlYlZpZXc6
KFdLV2ViVmlldyAqKXdlYlZpZXcgYWRqdXN0ZWREYXRhSW50ZXJhY3Rpb25JdGVtUHJvdmlkZXJz
Rm9ySXRlbVByb3ZpZGVyOihVSUl0ZW1Qcm92aWRlciAqKWl0ZW1Qcm92aWRlciByZXByZXNlbnRp
bmdPYmplY3RzOihOU0FycmF5ICopcmVwcmVzZW50aW5nT2JqZWN0cyBhZGRpdGlvbmFsRGF0YToo
TlNEaWN0aW9uYXJ5ICopYWRkaXRpb25hbERhdGEKLXsKLSAgICByZXR1cm4gc2VsZi5jb252ZXJ0
SXRlbVByb3ZpZGVyc0Jsb2NrID8gc2VsZi5jb252ZXJ0SXRlbVByb3ZpZGVyc0Jsb2NrKGl0ZW1Q
cm92aWRlciwgcmVwcmVzZW50aW5nT2JqZWN0cywgYWRkaXRpb25hbERhdGEpIDogQFsgaXRlbVBy
b3ZpZGVyIF07Ci19Ci0KLS0gKEJPT0wpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc2hv
d0N1c3RvbVNoZWV0Rm9yRWxlbWVudDooX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKillbGVtZW50
Ci17Ci0gICAgaWYgKCFzZWxmLnNob3dDdXN0b21BY3Rpb25TaGVldEJsb2NrKQotICAgICAgICBy
ZXR1cm4gTk87Ci0KLSAgICBSZXRhaW5QdHI8RGF0YUludGVyYWN0aW9uU2ltdWxhdG9yPiBzdHJv
bmdTZWxmID0gc2VsZjsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBeKCkgewotICAgICAgICBEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgKndlYWtTZWxmID0g
c3Ryb25nU2VsZi5nZXQoKTsKLSAgICAgICAgW1t3ZWFrU2VsZi0+X3dlYlZpZXcgZHJhZ0ludGVy
YWN0aW9uRGVsZWdhdGVdIGRyYWdJbnRlcmFjdGlvbjpbd2Vha1NlbGYtPl93ZWJWaWV3IGRyYWdJ
bnRlcmFjdGlvbl0gc2Vzc2lvbldpbGxCZWdpbjp3ZWFrU2VsZi0+X2RyYWdTZXNzaW9uLmdldCgp
XTsKLSAgICAgICAgd2Vha1NlbGYtPl9waGFzZSA9IERhdGFJbnRlcmFjdGlvbkJlZ2FuOwotICAg
ICAgICBbd2Vha1NlbGYgX3NjaGVkdWxlQWR2YW5jZVByb2dyZXNzXTsKLSAgICB9KTsKLQotICAg
IHJldHVybiBzZWxmLnNob3dDdXN0b21BY3Rpb25TaGVldEJsb2NrKGVsZW1lbnQpOwotfQotCi0t
IChOU0FycmF5PFVJRHJhZ0l0ZW0gKj4gKilfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyB3
aWxsUGVyZm9ybURyb3BXaXRoU2Vzc2lvbjooaWQgPFVJRHJvcFNlc3Npb24+KXNlc3Npb24KLXsK
LSAgICByZXR1cm4gc2VsZi5vdmVycmlkZVBlcmZvcm1Ecm9wQmxvY2sgPyBzZWxmLm92ZXJyaWRl
UGVyZm9ybURyb3BCbG9jayhzZXNzaW9uKSA6IHNlc3Npb24uaXRlbXM7Ci19Ci0KLS0gKHZvaWQp
X3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkSW5zZXJ0QXR0YWNobWVudDooX1dLQXR0
YWNobWVudCAqKWF0dGFjaG1lbnQKLXsKLSAgICBbX2luc2VydGVkQXR0YWNobWVudHMgYWRkT2Jq
ZWN0OmF0dGFjaG1lbnRdOwotfQotCi0tICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJW
aWV3IGRpZFJlbW92ZUF0dGFjaG1lbnQ6KF9XS0F0dGFjaG1lbnQgKilhdHRhY2htZW50Ci17Ci0g
ICAgW19yZW1vdmVkQXR0YWNobWVudHMgYWRkT2JqZWN0OmF0dGFjaG1lbnRdOwotfQotCi0jcHJh
Z21hIG1hcmsgLSBfV0tJbnB1dERlbGVnYXRlCi0KLS0gKEJPT0wpX3dlYlZpZXc6KFdLV2ViVmll
dyAqKXdlYlZpZXcgZm9jdXNTaG91bGRTdGFydElucHV0U2Vzc2lvbjooaWQgPF9XS0ZvY3VzZWRF
bGVtZW50SW5mbz4paW5mbwotewotICAgIHJldHVybiBfYWxsb3dzRm9jdXNUb1N0YXJ0SW5wdXRT
ZXNzaW9uOwotfQotCi0tICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZFN0
YXJ0SW5wdXRTZXNzaW9uOihpZCA8X1dLRm9ybUlucHV0U2Vzc2lvbj4paW5wdXRTZXNzaW9uCi17
Ci0gICAgX2lzRG9uZVdhaXRpbmdGb3JJbnB1dFNlc3Npb24gPSB0cnVlOwotfQotCi1AZW5kCi0K
LSNlbmRpZiAvLyBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvaW9zL0RyYWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9pb3MvRHJhZ0FuZERyb3BTaW11bGF0b3JJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDNlZWNk
OTQ5NGQ1OTY0ZjUwNzExNzA5ZDYwMmYxM2Q2ODk0Y2FiZQotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RyYWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tCkBAIC0wLDAg
KzEsNjg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRy
YWdBbmREcm9wU2ltdWxhdG9yLmgiCisKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiBQTEFU
Rk9STShJT1MpICYmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIkluc3RhbmNlTWV0aG9kU3dp
enpsZXIuaCIKKyNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJVSUtpdFNQ
SS5oIgorCisjaW1wb3J0IDxVSUtpdC9VSURyYWdJbnRlcmFjdGlvbi5oPgorI2ltcG9ydCA8VUlL
aXQvVUlEcmFnSXRlbS5oPgorI2ltcG9ydCA8VUlLaXQvVUlJbnRlcmFjdGlvbi5oPgorI2ltcG9y
dCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tGb2N1c2Vk
RWxlbWVudEluZm8uaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tGb3JtSW5wdXRTZXNzaW9uLmg+Cisj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKwor
U09GVF9MSU5LX0ZSQU1FV09SSyhVSUtpdCkKK1NPRlRfTElOSyhVSUtpdCwgVUlBcHBsaWNhdGlv
bkluc3RhbnRpYXRlU2luZ2xldG9uLCB2b2lkLCAoQ2xhc3Mgc2luZ2xldG9uQ2xhc3MpLCAoc2lu
Z2xldG9uQ2xhc3MpKQorCit1c2luZyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSTsKKworQGltcGxl
bWVudGF0aW9uIFdLV2ViVmlldyAoRHJhZ0FuZERyb3BUZXN0aW5nKQorCistIChVSVZpZXcgKilf
ZHJhZ0Ryb3BJbnRlcmFjdGlvblZpZXcKK3sKKyAgICByZXR1cm4gW3NlbGYgdmFsdWVGb3JLZXk6
QCJfY3VycmVudENvbnRlbnRWaWV3Il07Cit9CisKKy0gKGlkIDxVSURyb3BJbnRlcmFjdGlvbkRl
bGVnYXRlPilkcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZQoreworICAgIHJldHVybiAoaWQgPFVJRHJv
cEludGVyYWN0aW9uRGVsZWdhdGU+KXNlbGYuX2RyYWdEcm9wSW50ZXJhY3Rpb25WaWV3OworfQor
CistIChpZCA8VUlEcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZT4pZHJhZ0ludGVyYWN0aW9uRGVsZWdh
dGUKK3sKKyAgICByZXR1cm4gKGlkIDxVSURyYWdJbnRlcmFjdGlvbkRlbGVnYXRlPilzZWxmLl9k
cmFnRHJvcEludGVyYWN0aW9uVmlldzsKK30KKworLSAoVUlEcm9wSW50ZXJhY3Rpb24gKilkcm9w
SW50ZXJhY3Rpb24KK3sKKyAgICBVSVZpZXcgKmludGVyYWN0aW9uVmlldyA9IHNlbGYuX2RyYWdE
cm9wSW50ZXJhY3Rpb25WaWV3OworICAgIGZvciAoaWQgPFVJSW50ZXJhY3Rpb24+IGludGVyYWN0
aW9uIGluIGludGVyYWN0aW9uVmlldy5pbnRlcmFjdGlvbnMpIHsKKyAgICAgICAgaWYgKFtpbnRl
cmFjdGlvbiBpc0tpbmRPZkNsYXNzOltVSURyb3BJbnRlcmFjdGlvbiBjbGFzc11dKQorICAgICAg
ICAgICAgcmV0dXJuIChVSURyb3BJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uOworICAgIH0KKyAg
ICByZXR1cm4gbmlsOworfQorCistIChVSURyYWdJbnRlcmFjdGlvbiAqKWRyYWdJbnRlcmFjdGlv
bgoreworICAgIFVJVmlldyAqaW50ZXJhY3Rpb25WaWV3ID0gc2VsZi5fZHJhZ0Ryb3BJbnRlcmFj
dGlvblZpZXc7CisgICAgZm9yIChpZCA8VUlJbnRlcmFjdGlvbj4gaW50ZXJhY3Rpb24gaW4gaW50
ZXJhY3Rpb25WaWV3LmludGVyYWN0aW9ucykgeworICAgICAgICBpZiAoW2ludGVyYWN0aW9uIGlz
S2luZE9mQ2xhc3M6W1VJRHJhZ0ludGVyYWN0aW9uIGNsYXNzXV0pCisgICAgICAgICAgICByZXR1
cm4gKFVJRHJhZ0ludGVyYWN0aW9uICopaW50ZXJhY3Rpb247CisgICAgfQorICAgIHJldHVybiBu
aWw7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE1vY2tEcmFnRHJvcFNlc3Npb24KKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSXRlbXM6KE5TQXJyYXkgPFVJRHJhZ0l0ZW0gKj4qKWl0
ZW1zIGxvY2F0aW9uOihDR1BvaW50KWxvY2F0aW9uSW5XaW5kb3cgd2luZG93OihVSVdpbmRvdyAq
KXdpbmRvdyBhbGxvd01vdmU6KEJPT0wpYWxsb3dNb3ZlCit7CisgICAgaWYgKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pIHsKKyAgICAgICAgX21vY2tJdGVtcyA9IGl0ZW1zOworICAgICAgICBfbW9ja0xv
Y2F0aW9uSW5XaW5kb3cgPSBsb2NhdGlvbkluV2luZG93OworICAgICAgICBfd2luZG93ID0gd2lu
ZG93OworICAgICAgICBfYWxsb3dNb3ZlID0gYWxsb3dNb3ZlOworICAgIH0KKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAoQk9PTClhbGxvd3NNb3ZlT3BlcmF0aW9uCit7CisgICAgcmV0dXJuIF9h
bGxvd01vdmU7Cit9CisKKy0gKEJPT0wpaXNSZXN0cmljdGVkVG9EcmFnZ2luZ0FwcGxpY2F0aW9u
Cit7CisgICAgcmV0dXJuIE5POworfQorCistIChCT09MKWhhc0l0ZW1zQ29uZm9ybWluZ1RvVHlw
ZUlkZW50aWZpZXJzOihOU0FycmF5PE5TU3RyaW5nICo+ICopdHlwZUlkZW50aWZpZXJzCit7Cisg
ICAgZm9yIChOU1N0cmluZyAqdHlwZUlkZW50aWZpZXIgaW4gdHlwZUlkZW50aWZpZXJzKSB7Cisg
ICAgICAgIEJPT0wgaGFzSXRlbUNvbmZvcm1pbmdUb1R5cGUgPSBOTzsKKyAgICAgICAgZm9yIChV
SURyYWdJdGVtICppdGVtIGluIHNlbGYuaXRlbXMpCisgICAgICAgICAgICBoYXNJdGVtQ29uZm9y
bWluZ1RvVHlwZSB8PSBbW2l0ZW0uaXRlbVByb3ZpZGVyIHJlZ2lzdGVyZWRUeXBlSWRlbnRpZmll
cnNdIGNvbnRhaW5zT2JqZWN0OnR5cGVJZGVudGlmaWVyXTsKKyAgICAgICAgaWYgKCFoYXNJdGVt
Q29uZm9ybWluZ1RvVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgcmV0
dXJuIFlFUzsKK30KKworLSAoQk9PTCljYW5Mb2FkT2JqZWN0c09mQ2xhc3M6KENsYXNzPFVJSXRl
bVByb3ZpZGVyUmVhZGluZz4pYUNsYXNzCit7CisgICAgZm9yIChVSURyYWdJdGVtICppdGVtIGlu
IHNlbGYuaXRlbXMpIHsKKyAgICAgICAgaWYgKFtpdGVtLml0ZW1Qcm92aWRlciBjYW5Mb2FkT2Jq
ZWN0T2ZDbGFzczphQ2xhc3NdKQorICAgICAgICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAg
cmV0dXJuIE5POworfQorCistIChCT09MKWNhbkxvYWRPYmplY3RzT2ZDbGFzc2VzOihOU0FycmF5
PENsYXNzPFVJSXRlbVByb3ZpZGVyUmVhZGluZz4+ICopY2xhc3NlcworeworICAgIGZvciAoQ2xh
c3M8VUlJdGVtUHJvdmlkZXJSZWFkaW5nPiBhQ2xhc3MgaW4gY2xhc3NlcykgeworICAgICAgICBC
T09MIGNhbkxvYWQgPSBOTzsKKyAgICAgICAgZm9yIChVSURyYWdJdGVtICppdGVtIGluIHNlbGYu
aXRlbXMpCisgICAgICAgICAgICBjYW5Mb2FkIHw9IFtpdGVtLml0ZW1Qcm92aWRlciBjYW5Mb2Fk
T2JqZWN0T2ZDbGFzczphQ2xhc3NdOworICAgICAgICBpZiAoIWNhbkxvYWQpCisgICAgICAgICAg
ICByZXR1cm4gTk87CisgICAgfQorICAgIHJldHVybiBZRVM7Cit9CisKKy0gKE5TQXJyYXk8VUlE
cmFnSXRlbSAqPiAqKWl0ZW1zCit7CisgICAgcmV0dXJuIF9tb2NrSXRlbXMuZ2V0KCk7Cit9CisK
Ky0gKHZvaWQpc2V0SXRlbXM6KE5TQXJyYXk8VUlEcmFnSXRlbSAqPiAqKWl0ZW1zCit7CisgICAg
X21vY2tJdGVtcyA9IGl0ZW1zOworfQorCistICh2b2lkKWFkZEl0ZW1zOihOU0FycmF5PFVJRHJh
Z0l0ZW0gKj4gKilpdGVtcworeworICAgIGlmICghW2l0ZW1zIGNvdW50XSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFbX21vY2tJdGVtcyBjb3VudF0pCisgICAgICAgIF9tb2NrSXRlbXMg
PSBpdGVtczsKKyAgICBlbHNlCisgICAgICAgIF9tb2NrSXRlbXMgPSBbX21vY2tJdGVtcyBhcnJh
eUJ5QWRkaW5nT2JqZWN0c0Zyb21BcnJheTppdGVtc107Cit9CisKKy0gKENHUG9pbnQpbG9jYXRp
b25JblZpZXc6KFVJVmlldyAqKXZpZXcKK3sKKyAgICByZXR1cm4gW193aW5kb3cgY29udmVydFBv
aW50Ol9tb2NrTG9jYXRpb25JbldpbmRvdyB0b1ZpZXc6dmlld107Cit9CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIE1vY2tEcm9wU2Vzc2lvbgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
cm92aWRlcnM6KE5TQXJyYXk8VUlJdGVtUHJvdmlkZXIgKj4gKilwcm92aWRlcnMgbG9jYXRpb246
KENHUG9pbnQpbG9jYXRpb25JbldpbmRvdyB3aW5kb3c6KFVJV2luZG93ICopd2luZG93IGFsbG93
TW92ZTooQk9PTClhbGxvd01vdmUKK3sKKyAgICBhdXRvIGl0ZW1zID0gYWRvcHROUyhbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgZm9yIChVSUl0ZW1Qcm92aWRlciAqaXRlbVBy
b3ZpZGVyIGluIHByb3ZpZGVycykKKyAgICAgICAgW2l0ZW1zIGFkZE9iamVjdDpbW1tVSURyYWdJ
dGVtIGFsbG9jXSBpbml0V2l0aEl0ZW1Qcm92aWRlcjppdGVtUHJvdmlkZXJdIGF1dG9yZWxlYXNl
XV07CisKKyAgICByZXR1cm4gW3N1cGVyIGluaXRXaXRoSXRlbXM6aXRlbXMuZ2V0KCkgbG9jYXRp
b246bG9jYXRpb25JbldpbmRvdyB3aW5kb3c6d2luZG93IGFsbG93TW92ZTphbGxvd01vdmVdOwor
fQorCistIChCT09MKWlzTG9jYWwKK3sKKyAgICByZXR1cm4gWUVTOworfQorCistIChOU1Byb2dy
ZXNzICopcHJvZ3Jlc3MKK3sKKyAgICByZXR1cm4gW05TUHJvZ3Jlc3MgZGlzY3JldGVQcm9ncmVz
c1dpdGhUb3RhbFVuaXRDb3VudDoxMDBdOworfQorCistICh2b2lkKXNldFByb2dyZXNzSW5kaWNh
dG9yU3R5bGU6KFVJRHJvcFNlc3Npb25Qcm9ncmVzc0luZGljYXRvclN0eWxlKXByb2dyZXNzSW5k
aWNhdG9yU3R5bGUKK3sKK30KKworLSAoVUlEcm9wU2Vzc2lvblByb2dyZXNzSW5kaWNhdG9yU3R5
bGUpcHJvZ3Jlc3NJbmRpY2F0b3JTdHlsZQoreworICAgIHJldHVybiBVSURyb3BTZXNzaW9uUHJv
Z3Jlc3NJbmRpY2F0b3JTdHlsZU5vbmU7Cit9CisKKy0gKE5TVUludGVnZXIpb3BlcmF0aW9uTWFz
aworeworICAgIHJldHVybiAwOworfQorCistIChpZCA8VUlEcmFnU2Vzc2lvbj4pbG9jYWxEcmFn
U2Vzc2lvbgoreworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKEJPT0wpaGFzSXRlbXNDb25mb3Jt
aW5nVG9UeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKil0eXBlSWRlbnRpZmllcgoreworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBOTzsKK30KKworLSAoQk9PTCljYW5DcmVh
dGVJdGVtc09mQ2xhc3M6KENsYXNzPFVJSXRlbVByb3ZpZGVyUmVhZGluZz4pYUNsYXNzCit7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE5POworfQorCistIChOU1Byb2dy
ZXNzICopbG9hZE9iamVjdHNPZkNsYXNzOihDbGFzczxOU0l0ZW1Qcm92aWRlclJlYWRpbmc+KWFD
bGFzcyBjb21wbGV0aW9uOih2b2lkKF4pKE5TQXJyYXk8X19raW5kb2YgaWQgPE5TSXRlbVByb3Zp
ZGVyUmVhZGluZz4+ICpvYmplY3RzKSljb21wbGV0aW9uCit7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIG5pbDsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gTW9j
a0RyYWdTZXNzaW9uIHsKKyAgICBSZXRhaW5QdHI8aWQ+IF9sb2NhbENvbnRleHQ7Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFdpbmRvdzooVUlXaW5kb3cgKil3aW5kb3cgYWxsb3dNb3Zl
OihCT09MKWFsbG93TW92ZQoreworICAgIHJldHVybiBbc3VwZXIgaW5pdFdpdGhJdGVtczpAWyBd
IGxvY2F0aW9uOkNHUG9pbnRaZXJvIHdpbmRvdzp3aW5kb3cgYWxsb3dNb3ZlOmFsbG93TW92ZV07
Cit9CisKKy0gKE5TVUludGVnZXIpbG9jYWxPcGVyYXRpb25NYXNrCit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKKy0gKE5TVUludGVnZXIpZXh0ZXJuYWxP
cGVyYXRpb25NYXNrCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKKy0gKGlkKXNlc3Npb24KK3sKKyAgICByZXR1cm4gbmlsOworfQorCistIChpZClsb2Nh
bENvbnRleHQKK3sKKyAgICByZXR1cm4gX2xvY2FsQ29udGV4dC5nZXQoKTsKK30KKworLSAodm9p
ZClzZXRMb2NhbENvbnRleHQ6KGlkKWxvY2FsQ29udGV4dAoreworICAgIF9sb2NhbENvbnRleHQg
PSBsb2NhbENvbnRleHQ7Cit9CisKK0BlbmQKKworc3RhdGljIGRvdWJsZSBwcm9ncmVzc0luY3Jl
bWVudFN0ZXAgPSAwLjAzMzsKK3N0YXRpYyBkb3VibGUgcHJvZ3Jlc3NUaW1lU3RlcCA9IDAuMDE2
Oworc3RhdGljIE5TU3RyaW5nICpUZXN0V2ViS2l0QVBJU2ltdWxhdGVDYW5jZWxBbGxUb3VjaGVz
Tm90aWZpY2F0aW9uTmFtZSA9IEAiVGVzdFdlYktpdEFQSVNpbXVsYXRlQ2FuY2VsQWxsVG91Y2hl
c05vdGlmaWNhdGlvbk5hbWUiOworCitzdGF0aWMgTlNBcnJheSAqZHJhZ0FuZERyb3BFdmVudE5h
bWVzKCkKK3sKKyAgICBzdGF0aWMgTlNBcnJheSAqZXZlbnROYW1lcyA9IG5pbDsKKyAgICBzdGF0
aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9r
ZW4sIF4oKSB7CisgICAgICAgIGV2ZW50TmFtZXMgPSBAWyBAImRyYWdlbnRlciIsIEAiZHJhZ292
ZXIiLCBAImRyb3AiLCBAImRyYWdsZWF2ZSIsIEAiZHJhZ3N0YXJ0IiBdOworICAgIH0pOworICAg
IHJldHVybiBldmVudE5hbWVzOworfQorCitAaW50ZXJmYWNlIERyYWdBbmREcm9wU2ltdWxhdG9y
QXBwbGljYXRpb24gOiBVSUFwcGxpY2F0aW9uCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBEcmFn
QW5kRHJvcFNpbXVsYXRvckFwcGxpY2F0aW9uCistICh2b2lkKV9jYW5jZWxBbGxUb3VjaGVzCit7
CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBwb3N0Tm90aWZpY2F0
aW9uTmFtZTpUZXN0V2ViS2l0QVBJU2ltdWxhdGVDYW5jZWxBbGxUb3VjaGVzTm90aWZpY2F0aW9u
TmFtZSBvYmplY3Q6bmlsXTsKK30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIERyYWdBbmREcm9w
U2ltdWxhdG9yIHsKKyAgICBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gX3dlYlZpZXc7CisgICAg
UmV0YWluUHRyPE1vY2tEcmFnU2Vzc2lvbj4gX2RyYWdTZXNzaW9uOworICAgIFJldGFpblB0cjxN
b2NrRHJvcFNlc3Npb24+IF9kcm9wU2Vzc2lvbjsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJy
YXk+IF9vYnNlcnZlZEV2ZW50TmFtZXM7CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IF9leHRlcm5h
bEl0ZW1Qcm92aWRlcnM7CisgICAgUmV0YWluUHRyPE5TQXJyYXkgKj4gX3NvdXJjZUl0ZW1Qcm92
aWRlcnM7CisgICAgUmV0YWluUHRyPE5TQXJyYXkgKj4gX2ZpbmFsU2VsZWN0aW9uUmVjdHM7Cisg
ICAgQ0dQb2ludCBfc3RhcnRMb2NhdGlvbjsKKyAgICBDR1BvaW50IF9lbmRMb2NhdGlvbjsKKyAg
ICBDR1JlY3QgX2xhc3RLbm93bkRyYWdDYXJldFJlY3Q7CisKKyAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlRGljdGlvbmFyeTxOU051bWJlciAqLCBOU1ZhbHVlICo+Pl9yZW1haW5pbmdBZGRpdGlvbmFs
SXRlbVJlcXVlc3RMb2NhdGlvbnNCeVByb2dyZXNzOworICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheTxOU1ZhbHVlICo+Pl9xdWV1ZWRBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnM7Cisg
ICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PFVJVGFyZ2V0ZWREcmFnUHJldmlldyAqPj4gX2xp
ZnRQcmV2aWV3czsKKworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxfV0tBdHRhY2htZW50
ICo+PiBfaW5zZXJ0ZWRBdHRhY2htZW50czsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk8
X1dLQXR0YWNobWVudCAqPj4gX3JlbW92ZWRBdHRhY2htZW50czsKKworICAgIGJvb2wgX2lzRG9u
ZVdhaXRpbmdGb3JJbnB1dFNlc3Npb247CisgICAgZG91YmxlIF9jdXJyZW50UHJvZ3Jlc3M7Cisg
ICAgYm9vbCBfaXNEb25lV2l0aEN1cnJlbnRSdW47CisgICAgRHJhZ0FuZERyb3BQaGFzZSBfcGhh
c2U7CisKKyAgICBSZXRhaW5QdHI8VUlEcm9wUHJvcG9zYWw+IF9jdXJyZW50RHJvcFByb3Bvc2Fs
OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihUZXN0V0tXZWJWaWV3ICop
d2ViVmlldworeworICAgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgICAgIF93ZWJW
aWV3ID0gd2ViVmlldzsKKyAgICAgICAgX3Nob3VsZEVuc3VyZVVJQXBwbGljYXRpb24gPSBOTzsK
KyAgICAgICAgX3Nob3VsZEFsbG93TW92ZU9wZXJhdGlvbiA9IFlFUzsKKyAgICAgICAgX2lzRG9u
ZVdhaXRpbmdGb3JJbnB1dFNlc3Npb24gPSB0cnVlOworICAgICAgICBbX3dlYlZpZXcgc2V0VUlE
ZWxlZ2F0ZTpzZWxmXTsKKyAgICAgICAgW193ZWJWaWV3IF9zZXRJbnB1dERlbGVnYXRlOnNlbGZd
OworICAgIH0KKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAg
aWYgKFtfd2ViVmlldyBVSURlbGVnYXRlXSA9PSBzZWxmKQorICAgICAgICBbX3dlYlZpZXcgc2V0
VUlEZWxlZ2F0ZTpuaWxdOworCisgICAgaWYgKFtfd2ViVmlldyBfaW5wdXREZWxlZ2F0ZV0gPT0g
c2VsZikKKyAgICAgICAgW193ZWJWaWV3IF9zZXRJbnB1dERlbGVnYXRlOm5pbF07CisKKyAgICBb
c3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpX3Jlc2V0U2ltdWxhdGVkU3RhdGUKK3sKKyAg
ICBfcGhhc2UgPSBEcmFnQW5kRHJvcFBoYXNlQmVnaW5uaW5nOworICAgIF9jdXJyZW50UHJvZ3Jl
c3MgPSAwOworICAgIF9pc0RvbmVXaXRoQ3VycmVudFJ1biA9IGZhbHNlOworICAgIF9vYnNlcnZl
ZEV2ZW50TmFtZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAg
ICBfaW5zZXJ0ZWRBdHRhY2htZW50cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOworICAgIF9yZW1vdmVkQXR0YWNobWVudHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRdKTsKKyAgICBfZmluYWxTZWxlY3Rpb25SZWN0cyA9IEBbIF07CisgICAg
X2RyYWdTZXNzaW9uID0gbmlsOworICAgIF9kcm9wU2Vzc2lvbiA9IG5pbDsKKyAgICBfY3VycmVu
dERyb3BQcm9wb3NhbCA9IG5pbDsKKyAgICBfbGFzdEtub3duRHJhZ0NhcmV0UmVjdCA9IENHUmVj
dFplcm87CisgICAgX3JlbWFpbmluZ0FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uc0J5UHJv
Z3Jlc3MgPSBuaWw7CisgICAgX3F1ZXVlZEFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9ucyA9
IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworICAgIF9saWZ0UHJldmll
d3MgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKK30KKworLSAoTlNB
cnJheSAqKW9ic2VydmVkRXZlbnROYW1lcworeworICAgIHJldHVybiBfb2JzZXJ2ZWRFdmVudE5h
bWVzLmdldCgpOworfQorCistICh2b2lkKXNpbXVsYXRlQWxsVG91Y2hlc0NhbmNlbGVkOihOU05v
dGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91
c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX2FkdmFu
Y2VQcm9ncmVzcykgb2JqZWN0Om5pbF07CisgICAgX3BoYXNlID0gRHJhZ0FuZERyb3BQaGFzZUNh
bmNlbGxlZDsKKyAgICBfY3VycmVudFByb2dyZXNzID0gMTsKKyAgICBfaXNEb25lV2l0aEN1cnJl
bnRSdW4gPSB0cnVlOworICAgIGlmIChfZHJhZ1Nlc3Npb24pCisgICAgICAgIFtbX3dlYlZpZXcg
ZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVdIGRyYWdJbnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJhZ0lu
dGVyYWN0aW9uXSBzZXNzaW9uOl9kcmFnU2Vzc2lvbi5nZXQoKSBkaWRFbmRXaXRoT3BlcmF0aW9u
OlVJRHJvcE9wZXJhdGlvbkNhbmNlbF07Cit9CisKKy0gKHZvaWQpcnVuRnJvbTooQ0dQb2ludClz
dGFydExvY2F0aW9uIHRvOihDR1BvaW50KWVuZExvY2F0aW9uCit7CisgICAgW3NlbGYgcnVuRnJv
bTpzdGFydExvY2F0aW9uIHRvOmVuZExvY2F0aW9uIGFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0
aW9uczpuaWxdOworfQorCistICh2b2lkKXJ1bkZyb206KENHUG9pbnQpc3RhcnRMb2NhdGlvbiB0
bzooQ0dQb2ludCllbmRMb2NhdGlvbiBhZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnM6KFBy
b2dyZXNzVG9DR1BvaW50VmFsdWVNYXApYWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zCit7
CisgICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKmRlZmF1bHRDZW50ZXIgPSBbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl07CisgICAgW2RlZmF1bHRDZW50ZXIgYWRkT2JzZXJ2ZXI6
c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Ioc2ltdWxhdGVBbGxUb3VjaGVzQ2FuY2VsZWQ6KSBuYW1l
OlRlc3RXZWJLaXRBUElTaW11bGF0ZUNhbmNlbEFsbFRvdWNoZXNOb3RpZmljYXRpb25OYW1lIG9i
amVjdDpuaWxdOworCisgICAgaWYgKF9zaG91bGRFbnN1cmVVSUFwcGxpY2F0aW9uKQorICAgICAg
ICBVSUFwcGxpY2F0aW9uSW5zdGFudGlhdGVTaW5nbGV0b24oW0RyYWdBbmREcm9wU2ltdWxhdG9y
QXBwbGljYXRpb24gY2xhc3NdKTsKKworICAgIFtzZWxmIF9yZXNldFNpbXVsYXRlZFN0YXRlXTsK
KworICAgIGlmIChhZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnMpCisgICAgICAgIF9yZW1h
aW5pbmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnNCeVByb2dyZXNzID0gYWRvcHROUyhb
YWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zIG11dGFibGVDb3B5XSk7CisKKyAgICBmb3Ig
KE5TU3RyaW5nICpldmVudE5hbWUgaW4gZHJhZ0FuZERyb3BFdmVudE5hbWVzKCkpIHsKKyAgICAg
ICAgW193ZWJWaWV3IHBlcmZvcm1BZnRlclJlY2VpdmluZ01lc3NhZ2U6ZXZlbnROYW1lIGFjdGlv
bjpbc3Ryb25nU2VsZiA9IHJldGFpblB0cihzZWxmKSwgbmFtZSA9IHJldGFpblB0cihldmVudE5h
bWUpXSB7CisgICAgICAgICAgICBbc3Ryb25nU2VsZi0+X29ic2VydmVkRXZlbnROYW1lcyBhZGRP
YmplY3Q6bmFtZS5nZXQoKV07CisgICAgICAgIH1dOworICAgIH0KKworICAgIF9zdGFydExvY2F0
aW9uID0gc3RhcnRMb2NhdGlvbjsKKyAgICBfZW5kTG9jYXRpb24gPSBlbmRMb2NhdGlvbjsKKwor
ICAgIGlmIChzZWxmLmV4dGVybmFsSXRlbVByb3ZpZGVycy5jb3VudCkgeworICAgICAgICBfZHJv
cFNlc3Npb24gPSBhZG9wdE5TKFtbTW9ja0Ryb3BTZXNzaW9uIGFsbG9jXSBpbml0V2l0aFByb3Zp
ZGVyczpzZWxmLmV4dGVybmFsSXRlbVByb3ZpZGVycyBsb2NhdGlvbjpfc3RhcnRMb2NhdGlvbiB3
aW5kb3c6W193ZWJWaWV3IHdpbmRvd10gYWxsb3dNb3ZlOnNlbGYuc2hvdWxkQWxsb3dNb3ZlT3Bl
cmF0aW9uXSk7CisgICAgICAgIF9waGFzZSA9IERyYWdBbmREcm9wUGhhc2VCZWdhbjsKKyAgICAg
ICAgW3NlbGYgX2FkdmFuY2VQcm9ncmVzc107CisgICAgfSBlbHNlIHsKKyAgICAgICAgX2RyYWdT
ZXNzaW9uID0gYWRvcHROUyhbW01vY2tEcmFnU2Vzc2lvbiBhbGxvY10gaW5pdFdpdGhXaW5kb3c6
W193ZWJWaWV3IHdpbmRvd10gYWxsb3dNb3ZlOnNlbGYuc2hvdWxkQWxsb3dNb3ZlT3BlcmF0aW9u
XSk7CisgICAgICAgIFtfZHJhZ1Nlc3Npb24gc2V0TW9ja0xvY2F0aW9uSW5XaW5kb3c6X3N0YXJ0
TG9jYXRpb25dOworICAgICAgICBbKGlkIDxVSURyYWdJbnRlcmFjdGlvbkRlbGVnYXRlX0Zvcldl
YktpdE9ubHk+KVtfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gX2RyYWdJbnRlcmFj
dGlvbjpbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uXSBwcmVwYXJlRm9yU2Vzc2lvbjpfZHJhZ1Nl
c3Npb24uZ2V0KCkgY29tcGxldGlvbjpbc3Ryb25nU2VsZiA9IHJldGFpblB0cihzZWxmKV0gewor
ICAgICAgICAgICAgaWYgKHN0cm9uZ1NlbGYtPl9waGFzZSA9PSBEcmFnQW5kRHJvcFBoYXNlQ2Fu
Y2VsbGVkKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgc3Ryb25nU2Vs
Zi0+X3BoYXNlID0gRHJhZ0FuZERyb3BQaGFzZUJlZ2lubmluZzsKKyAgICAgICAgICAgIFtzdHJv
bmdTZWxmIF9hZHZhbmNlUHJvZ3Jlc3NdOworICAgICAgICB9XTsKKyAgICB9CisKKyAgICBVdGls
OjpydW4oJl9pc0RvbmVXaXRoQ3VycmVudFJ1bik7CisgICAgW193ZWJWaWV3IGNsZWFyTWVzc2Fn
ZUhhbmRsZXJzOmRyYWdBbmREcm9wRXZlbnROYW1lcygpXTsKKyAgICBfZmluYWxTZWxlY3Rpb25S
ZWN0cyA9IFtfd2ViVmlldyBzZWxlY3Rpb25SZWN0c0FmdGVyUHJlc2VudGF0aW9uVXBkYXRlXTsK
KworICAgIFtkZWZhdWx0Q2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGZdOworfQorCistIChOU0Fy
cmF5ICopZmluYWxTZWxlY3Rpb25SZWN0cworeworICAgIHJldHVybiBfZmluYWxTZWxlY3Rpb25S
ZWN0cy5nZXQoKTsKK30KKworLSAodm9pZClfY29uY2x1ZGVEcm9wQW5kUGVyZm9ybU9wZXJhdGlv
bklmTmVjZXNzYXJ5Cit7CisgICAgX2xhc3RLbm93bkRyYWdDYXJldFJlY3QgPSBbX3dlYlZpZXcg
X2RyYWdDYXJldFJlY3RdOworICAgIGF1dG8gb3BlcmF0aW9uID0gW19jdXJyZW50RHJvcFByb3Bv
c2FsIG9wZXJhdGlvbl07CisgICAgaWYgKG9wZXJhdGlvbiAhPSBVSURyb3BPcGVyYXRpb25DYW5j
ZWwgJiYgb3BlcmF0aW9uICE9IFVJRHJvcE9wZXJhdGlvbkZvcmJpZGRlbikgeworICAgICAgICBb
W193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcm9wSW50ZXJhY3Rpb246W193ZWJW
aWV3IGRyb3BJbnRlcmFjdGlvbl0gcGVyZm9ybURyb3A6X2Ryb3BTZXNzaW9uLmdldCgpXTsKKyAg
ICAgICAgX3BoYXNlID0gRHJhZ0FuZERyb3BQaGFzZVBlcmZvcm1pbmdEcm9wOworICAgIH0gZWxz
ZSB7CisgICAgICAgIF9pc0RvbmVXaXRoQ3VycmVudFJ1biA9IFlFUzsKKyAgICAgICAgX3BoYXNl
ID0gRHJhZ0FuZERyb3BQaGFzZUNhbmNlbGxlZDsKKyAgICB9CisKKyAgICBbW193ZWJWaWV3IGRy
b3BJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcm9wSW50ZXJhY3Rpb246W193ZWJWaWV3IGRyb3BJbnRl
cmFjdGlvbl0gc2Vzc2lvbkRpZEVuZDpfZHJvcFNlc3Npb24uZ2V0KCldOworCisgICAgaWYgKF9k
cmFnU2Vzc2lvbikKKyAgICAgICAgW1tfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0g
ZHJhZ0ludGVyYWN0aW9uOltfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25dIHNlc3Npb246X2RyYWdT
ZXNzaW9uLmdldCgpIGRpZEVuZFdpdGhPcGVyYXRpb246b3BlcmF0aW9uXTsKK30KKworLSAodm9p
ZClfZW5xdWV1ZVBlbmRpbmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnMKK3sKKyAgICBO
U011dGFibGVBcnJheSAqcHJvZ3Jlc3NWYWx1ZXNUb1JlbW92ZSA9IFtOU011dGFibGVBcnJheSBh
cnJheV07CisgICAgZm9yIChOU051bWJlciAqcHJvZ3Jlc3NWYWx1ZSBpbiBfcmVtYWluaW5nQWRk
aXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zQnlQcm9ncmVzcy5nZXQoKSkgeworICAgICAgICBk
b3VibGUgcHJvZ3Jlc3MgPSBwcm9ncmVzc1ZhbHVlLmRvdWJsZVZhbHVlOworICAgICAgICBpZiAo
cHJvZ3Jlc3MgPiBfY3VycmVudFByb2dyZXNzKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIFtwcm9ncmVzc1ZhbHVlc1RvUmVtb3ZlIGFkZE9iamVjdDpwcm9ncmVzc1ZhbHVlXTsKKyAg
ICAgICAgW19xdWV1ZWRBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnMgYWRkT2JqZWN0Oltf
cmVtYWluaW5nQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zQnlQcm9ncmVzcyBvYmplY3RG
b3JLZXk6cHJvZ3Jlc3NWYWx1ZV1dOworICAgIH0KKworICAgIGZvciAoTlNOdW1iZXIgKnByb2dy
ZXNzVG9SZW1vdmUgaW4gcHJvZ3Jlc3NWYWx1ZXNUb1JlbW92ZSkKKyAgICAgICAgW19yZW1haW5p
bmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnNCeVByb2dyZXNzIHJlbW92ZU9iamVjdEZv
cktleTpwcm9ncmVzc1RvUmVtb3ZlXTsKK30KKworLSAoQk9PTClfc2VuZFF1ZXVlZEFkZGl0aW9u
YWxJdGVtUmVxdWVzdAoreworICAgIGlmICghW19xdWV1ZWRBZGRpdGlvbmFsSXRlbVJlcXVlc3RM
b2NhdGlvbnMgY291bnRdKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICBSZXRhaW5QdHI8TlNW
YWx1ZT4gcmVxdWVzdExvY2F0aW9uVmFsdWUgPSBbX3F1ZXVlZEFkZGl0aW9uYWxJdGVtUmVxdWVz
dExvY2F0aW9ucyBvYmplY3RBdEluZGV4OjBdOworICAgIFtfcXVldWVkQWRkaXRpb25hbEl0ZW1S
ZXF1ZXN0TG9jYXRpb25zIHJlbW92ZU9iamVjdEF0SW5kZXg6MF07CisKKyAgICBhdXRvIHJlcXVl
c3RMb2NhdGlvbiA9IFtbX3dlYlZpZXcgd2luZG93XSBjb252ZXJ0UG9pbnQ6W3JlcXVlc3RMb2Nh
dGlvblZhbHVlIENHUG9pbnRWYWx1ZV0gdG9WaWV3Ol93ZWJWaWV3LmdldCgpXTsKKyAgICBbKGlk
IDxVSURyYWdJbnRlcmFjdGlvbkRlbGVnYXRlX1Byb3Bvc2VkX1NQSV8zMzE0NjgwMz4pW193ZWJW
aWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlXSBfZHJhZ0ludGVyYWN0aW9uOltfd2ViVmlldyBk
cmFnSW50ZXJhY3Rpb25dIGl0ZW1zRm9yQWRkaW5nVG9TZXNzaW9uOl9kcmFnU2Vzc2lvbi5nZXQo
KSB3aXRoVG91Y2hBdFBvaW50OnJlcXVlc3RMb2NhdGlvbiBjb21wbGV0aW9uOltkcmFnU2Vzc2lv
biA9IF9kcmFnU2Vzc2lvbiwgZHJvcFNlc3Npb24gPSBfZHJvcFNlc3Npb25dIChOU0FycmF5ICpp
dGVtcykgeworICAgICAgICBbZHJhZ1Nlc3Npb24gYWRkSXRlbXM6aXRlbXNdOworICAgICAgICBb
ZHJvcFNlc3Npb24gYWRkSXRlbXM6aXRlbXNdOworICAgIH1dOworICAgIHJldHVybiBZRVM7Cit9
CisKKy0gKHZvaWQpX2FkdmFuY2VQcm9ncmVzcworeworICAgIFtzZWxmIF9lbnF1ZXVlUGVuZGlu
Z0FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uc107CisgICAgaWYgKFtzZWxmIF9zZW5kUXVl
dWVkQWRkaXRpb25hbEl0ZW1SZXF1ZXN0XSkgeworICAgICAgICBbc2VsZiBfc2NoZWR1bGVBZHZh
bmNlUHJvZ3Jlc3NdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgX2xhc3RLbm93bkRy
YWdDYXJldFJlY3QgPSBbX3dlYlZpZXcgX2RyYWdDYXJldFJlY3RdOworICAgIF9jdXJyZW50UHJv
Z3Jlc3MgKz0gcHJvZ3Jlc3NJbmNyZW1lbnRTdGVwOworICAgIENHUG9pbnQgbG9jYXRpb25Jbldp
bmRvdyA9IHNlbGYuX2N1cnJlbnRMb2NhdGlvbjsKKyAgICBbX2RyYWdTZXNzaW9uIHNldE1vY2tM
b2NhdGlvbkluV2luZG93OmxvY2F0aW9uSW5XaW5kb3ddOworICAgIFtfZHJvcFNlc3Npb24gc2V0
TW9ja0xvY2F0aW9uSW5XaW5kb3c6bG9jYXRpb25JbldpbmRvd107CisKKyAgICBpZiAoX2N1cnJl
bnRQcm9ncmVzcyA+PSAxKSB7CisgICAgICAgIF9jdXJyZW50UHJvZ3Jlc3MgPSAxOworICAgICAg
ICBbc2VsZiBfY29uY2x1ZGVEcm9wQW5kUGVyZm9ybU9wZXJhdGlvbklmTmVjZXNzYXJ5XTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN3aXRjaCAoX3BoYXNlKSB7CisgICAgY2FzZSBE
cmFnQW5kRHJvcFBoYXNlQmVnaW5uaW5nOiB7CisgICAgICAgIE5TTXV0YWJsZUFycmF5PFVJSXRl
bVByb3ZpZGVyICo+ICppdGVtUHJvdmlkZXJzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAg
ICAgICAgTlNBcnJheSAqaXRlbXMgPSBbW193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRl
XSBkcmFnSW50ZXJhY3Rpb246W193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbl0gaXRlbXNGb3JCZWdp
bm5pbmdTZXNzaW9uOl9kcmFnU2Vzc2lvbi5nZXQoKV07CisgICAgICAgIGlmICghaXRlbXMuY291
bnQpIHsKKyAgICAgICAgICAgIF9waGFzZSA9IERyYWdBbmREcm9wUGhhc2VDYW5jZWxsZWQ7Cisg
ICAgICAgICAgICBfY3VycmVudFByb2dyZXNzID0gMTsKKyAgICAgICAgICAgIF9pc0RvbmVXaXRo
Q3VycmVudFJ1biA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKFVJRHJhZ0l0ZW0gKml0ZW0gaW4gaXRlbXMpIHsKKyAgICAgICAgICAgIFtpdGVt
UHJvdmlkZXJzIGFkZE9iamVjdDppdGVtLml0ZW1Qcm92aWRlcl07CisgICAgICAgICAgICBVSVRh
cmdldGVkRHJhZ1ByZXZpZXcgKmxpZnRQcmV2aWV3ID0gW1tfd2ViVmlldyBkcmFnSW50ZXJhY3Rp
b25EZWxlZ2F0ZV0gZHJhZ0ludGVyYWN0aW9uOltfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25dIHBy
ZXZpZXdGb3JMaWZ0aW5nSXRlbTppdGVtIHNlc3Npb246X2RyYWdTZXNzaW9uLmdldCgpXTsKKyAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKCEhbGlmdFByZXZpZXcpOworICAgICAgICAgICAgaWYgKGxp
ZnRQcmV2aWV3KQorICAgICAgICAgICAgICAgIFtfbGlmdFByZXZpZXdzIGFkZE9iamVjdDpsaWZ0
UHJldmlld107CisgICAgICAgIH0KKworICAgICAgICBfZHJvcFNlc3Npb24gPSBhZG9wdE5TKFtb
TW9ja0Ryb3BTZXNzaW9uIGFsbG9jXSBpbml0V2l0aFByb3ZpZGVyczppdGVtUHJvdmlkZXJzIGxv
Y2F0aW9uOnNlbGYuX2N1cnJlbnRMb2NhdGlvbiB3aW5kb3c6W193ZWJWaWV3IHdpbmRvd10gYWxs
b3dNb3ZlOnNlbGYuc2hvdWxkQWxsb3dNb3ZlT3BlcmF0aW9uXSk7CisgICAgICAgIFtfZHJhZ1Nl
c3Npb24gc2V0SXRlbXM6aXRlbXNdOworICAgICAgICBfc291cmNlSXRlbVByb3ZpZGVycyA9IGl0
ZW1Qcm92aWRlcnM7CisgICAgICAgIGlmIChzZWxmLnNob3dDdXN0b21BY3Rpb25TaGVldEJsb2Nr
KSB7CisgICAgICAgICAgICAvLyBEZWZlciBwcm9ncmVzcyB1bnRpbCB0aGUgY3VzdG9tIGFjdGlv
biBzaGVldCBpcyBkaXNtaXNzZWQuCisgICAgICAgICAgICBhdXRvIHN0YXJ0TG9jYXRpb25JblZp
ZXcgPSBbW193ZWJWaWV3IHdpbmRvd10gY29udmVydFBvaW50Ol9zdGFydExvY2F0aW9uIHRvVmll
dzpfd2ViVmlldy5nZXQoKV07CisgICAgICAgICAgICBbX3dlYlZpZXcgX3NpbXVsYXRlTG9uZ1By
ZXNzQWN0aW9uQXRMb2NhdGlvbjpzdGFydExvY2F0aW9uSW5WaWV3XTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFtbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uRGVs
ZWdhdGVdIGRyYWdJbnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uXSBzZXNzaW9u
V2lsbEJlZ2luOl9kcmFnU2Vzc2lvbi5nZXQoKV07CisKKyAgICAgICAgUmV0YWluUHRyPFdLV2Vi
Vmlldz4gcmV0YWluZWRXZWJWaWV3ID0gX3dlYlZpZXc7CisgICAgICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF4oKSB7CisgICAgICAgICAgICBbcmV0YWluZWRX
ZWJWaWV3IHJlc2lnbkZpcnN0UmVzcG9uZGVyXTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgX3Bo
YXNlID0gRHJhZ0FuZERyb3BQaGFzZUJlZ2FuOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBEcmFnQW5kRHJvcFBoYXNlQmVnYW46CisgICAgICAgIFtbX3dlYlZpZXcgZHJvcEludGVy
YWN0aW9uRGVsZWdhdGVdIGRyb3BJbnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJvcEludGVyYWN0aW9u
XSBzZXNzaW9uRGlkRW50ZXI6X2Ryb3BTZXNzaW9uLmdldCgpXTsKKyAgICAgICAgX3BoYXNlID0g
RHJhZ0FuZERyb3BQaGFzZUVudGVyZWQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRHJhZ0Fu
ZERyb3BQaGFzZUVudGVyZWQ6IHsKKyAgICAgICAgX2N1cnJlbnREcm9wUHJvcG9zYWwgPSBbW193
ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcm9wSW50ZXJhY3Rpb246W193ZWJWaWV3
IGRyb3BJbnRlcmFjdGlvbl0gc2Vzc2lvbkRpZFVwZGF0ZTpfZHJvcFNlc3Npb24uZ2V0KCldOwor
ICAgICAgICBpZiAoIVtzZWxmIHNob3VsZEFsbG93TW92ZU9wZXJhdGlvbl0gJiYgW19jdXJyZW50
RHJvcFByb3Bvc2FsIG9wZXJhdGlvbl0gPT0gVUlEcm9wT3BlcmF0aW9uTW92ZSkKKyAgICAgICAg
ICAgIF9jdXJyZW50RHJvcFByb3Bvc2FsID0gYWRvcHROUyhbW1VJRHJvcFByb3Bvc2FsIGFsbG9j
XSBpbml0V2l0aERyb3BPcGVyYXRpb246VUlEcm9wT3BlcmF0aW9uQ2FuY2VsXSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBbc2VsZiBfc2NoZWR1bGVBZHZhbmNlUHJvZ3Jlc3NdOworfQorCistIChDR1BvaW50KV9jdXJy
ZW50TG9jYXRpb24KK3sKKyAgICBDR0Zsb2F0IGRpc3RhbmNlWCA9IF9lbmRMb2NhdGlvbi54IC0g
X3N0YXJ0TG9jYXRpb24ueDsKKyAgICBDR0Zsb2F0IGRpc3RhbmNlWSA9IF9lbmRMb2NhdGlvbi55
IC0gX3N0YXJ0TG9jYXRpb24ueTsKKyAgICByZXR1cm4gQ0dQb2ludE1ha2UoX3N0YXJ0TG9jYXRp
b24ueCArIF9jdXJyZW50UHJvZ3Jlc3MgKiBkaXN0YW5jZVgsIF9zdGFydExvY2F0aW9uLnkgKyBf
Y3VycmVudFByb2dyZXNzICogZGlzdGFuY2VZKTsKK30KKworLSAodm9pZClfc2NoZWR1bGVBZHZh
bmNlUHJvZ3Jlc3MKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVz
dHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9hZHZhbmNlUHJvZ3Jlc3MpIG9i
amVjdDpuaWxdOworICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX2FkdmFuY2VQ
cm9ncmVzcykgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTpwcm9ncmVzc1RpbWVTdGVwXTsKK30K
KworLSAoTlNBcnJheSAqKXNvdXJjZUl0ZW1Qcm92aWRlcnMKK3sKKyAgICByZXR1cm4gX3NvdXJj
ZUl0ZW1Qcm92aWRlcnMuZ2V0KCk7Cit9CisKKy0gKE5TQXJyYXkgKilleHRlcm5hbEl0ZW1Qcm92
aWRlcnMKK3sKKyAgICByZXR1cm4gX2V4dGVybmFsSXRlbVByb3ZpZGVycy5nZXQoKTsKK30KKwor
LSAodm9pZClzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6KE5TQXJyYXkgKilleHRlcm5hbEl0ZW1Q
cm92aWRlcnMKK3sKKyAgICBfZXh0ZXJuYWxJdGVtUHJvdmlkZXJzID0gYWRvcHROUyhbZXh0ZXJu
YWxJdGVtUHJvdmlkZXJzIGNvcHldKTsKK30KKworLSAoRHJhZ0FuZERyb3BQaGFzZSlwaGFzZQor
eworICAgIHJldHVybiBfcGhhc2U7Cit9CisKKy0gKE5TQXJyYXk8VUlUYXJnZXRlZERyYWdQcmV2
aWV3ICo+ICopbGlmdFByZXZpZXdzCit7CisgICAgcmV0dXJuIF9saWZ0UHJldmlld3MuZ2V0KCk7
Cit9CisKKy0gKENHUmVjdClsYXN0S25vd25EcmFnQ2FyZXRSZWN0Cit7CisgICAgcmV0dXJuIF9s
YXN0S25vd25EcmFnQ2FyZXRSZWN0OworfQorCistICh2b2lkKXdhaXRGb3JJbnB1dFNlc3Npb24K
K3sKKyAgICBfaXNEb25lV2FpdGluZ0ZvcklucHV0U2Vzc2lvbiA9IGZhbHNlOworCisgICAgLy8g
V2FpdGluZyBmb3IgYW4gaW5wdXQgc2Vzc2lvbiBpbXBsaWVzIHRoYXQgd2Ugc2hvdWxkIGFsbG93
IGlucHV0IHNlc3Npb25zIHRvIGJlZ2luLgorICAgIHNlbGYuYWxsb3dzRm9jdXNUb1N0YXJ0SW5w
dXRTZXNzaW9uID0gWUVTOworCisgICAgVXRpbDo6cnVuKCZfaXNEb25lV2FpdGluZ0ZvcklucHV0
U2Vzc2lvbik7Cit9CisKKy0gKE5TQXJyYXk8X1dLQXR0YWNobWVudCAqPiAqKWluc2VydGVkQXR0
YWNobWVudHMKK3sKKyAgICByZXR1cm4gX2luc2VydGVkQXR0YWNobWVudHMuZ2V0KCk7Cit9CisK
Ky0gKE5TQXJyYXk8X1dLQXR0YWNobWVudCAqPiAqKXJlbW92ZWRBdHRhY2htZW50cworeworICAg
IHJldHVybiBfcmVtb3ZlZEF0dGFjaG1lbnRzLmdldCgpOworfQorCistICh2b2lkKWVuZERhdGFU
cmFuc2ZlcgoreworICAgIFtbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVdIGRyYWdJ
bnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uXSBzZXNzaW9uRGlkVHJhbnNmZXJJ
dGVtczpfZHJhZ1Nlc3Npb24uZ2V0KCldOworfQorCisjcHJhZ21hIG1hcmsgLSBXS1VJRGVsZWdh
dGVQcml2YXRlCisKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGF0YUlu
dGVyYWN0aW9uT3BlcmF0aW9uV2FzSGFuZGxlZDooQk9PTCloYW5kbGVkIGZvclNlc3Npb246KGlk
KXNlc3Npb24gaXRlbVByb3ZpZGVyczooTlNBcnJheTxVSUl0ZW1Qcm92aWRlciAqPiAqKWl0ZW1Q
cm92aWRlcnMKK3sKKyAgICBfaXNEb25lV2l0aEN1cnJlbnRSdW4gPSB0cnVlOworCisgICAgaWYg
KHNlbGYuZHJvcENvbXBsZXRpb25CbG9jaykKKyAgICAgICAgc2VsZi5kcm9wQ29tcGxldGlvbkJs
b2NrKGhhbmRsZWQsIGl0ZW1Qcm92aWRlcnMpOworfQorCistIChOU1VJbnRlZ2VyKV93ZWJWaWV3
OihXS1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxVcGRhdGVEYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25U
b09wZXJhdGlvbjooTlNVSW50ZWdlcilvcGVyYXRpb24gZm9yU2Vzc2lvbjooaWQpc2Vzc2lvbgor
eworICAgIHJldHVybiBzZWxmLm92ZXJyaWRlRHJhZ1VwZGF0ZUJsb2NrID8gc2VsZi5vdmVycmlk
ZURyYWdVcGRhdGVCbG9jayhvcGVyYXRpb24sIHNlc3Npb24pIDogb3BlcmF0aW9uOworfQorCist
IChOU0FycmF5ICopX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgYWRqdXN0ZWREYXRhSW50
ZXJhY3Rpb25JdGVtUHJvdmlkZXJzRm9ySXRlbVByb3ZpZGVyOihVSUl0ZW1Qcm92aWRlciAqKWl0
ZW1Qcm92aWRlciByZXByZXNlbnRpbmdPYmplY3RzOihOU0FycmF5ICopcmVwcmVzZW50aW5nT2Jq
ZWN0cyBhZGRpdGlvbmFsRGF0YTooTlNEaWN0aW9uYXJ5ICopYWRkaXRpb25hbERhdGEKK3sKKyAg
ICByZXR1cm4gc2VsZi5jb252ZXJ0SXRlbVByb3ZpZGVyc0Jsb2NrID8gc2VsZi5jb252ZXJ0SXRl
bVByb3ZpZGVyc0Jsb2NrKGl0ZW1Qcm92aWRlciwgcmVwcmVzZW50aW5nT2JqZWN0cywgYWRkaXRp
b25hbERhdGEpIDogQFsgaXRlbVByb3ZpZGVyIF07Cit9CisKKy0gKEJPT0wpX3dlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXcgc2hvd0N1c3RvbVNoZWV0Rm9yRWxlbWVudDooX1dLQWN0aXZhdGVk
RWxlbWVudEluZm8gKillbGVtZW50Cit7CisgICAgaWYgKCFzZWxmLnNob3dDdXN0b21BY3Rpb25T
aGVldEJsb2NrKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nU2VsZiA9IHJldGFpblB0cihzZWxmKV0gewor
ICAgICAgICBbW3N0cm9uZ1NlbGYtPl93ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlXSBk
cmFnSW50ZXJhY3Rpb246W3N0cm9uZ1NlbGYtPl93ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbl0gc2Vz
c2lvbldpbGxCZWdpbjpzdHJvbmdTZWxmLT5fZHJhZ1Nlc3Npb24uZ2V0KCldOworICAgICAgICBz
dHJvbmdTZWxmLT5fcGhhc2UgPSBEcmFnQW5kRHJvcFBoYXNlQmVnYW47CisgICAgICAgIFtzdHJv
bmdTZWxmIF9zY2hlZHVsZUFkdmFuY2VQcm9ncmVzc107CisgICAgfSk7CisKKyAgICByZXR1cm4g
c2VsZi5zaG93Q3VzdG9tQWN0aW9uU2hlZXRCbG9jayhlbGVtZW50KTsKK30KKworLSAoTlNBcnJh
eTxVSURyYWdJdGVtICo+ICopX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgd2lsbFBlcmZv
cm1Ecm9wV2l0aFNlc3Npb246KGlkIDxVSURyb3BTZXNzaW9uPilzZXNzaW9uCit7CisgICAgcmV0
dXJuIHNlbGYub3ZlcnJpZGVQZXJmb3JtRHJvcEJsb2NrID8gc2VsZi5vdmVycmlkZVBlcmZvcm1E
cm9wQmxvY2soc2Vzc2lvbikgOiBzZXNzaW9uLml0ZW1zOworfQorCistICh2b2lkKV93ZWJWaWV3
OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEluc2VydEF0dGFjaG1lbnQ6KF9XS0F0dGFjaG1lbnQg
KilhdHRhY2htZW50Cit7CisgICAgW19pbnNlcnRlZEF0dGFjaG1lbnRzIGFkZE9iamVjdDphdHRh
Y2htZW50XTsKK30KKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRS
ZW1vdmVBdHRhY2htZW50OihfV0tBdHRhY2htZW50ICopYXR0YWNobWVudAoreworICAgIFtfcmVt
b3ZlZEF0dGFjaG1lbnRzIGFkZE9iamVjdDphdHRhY2htZW50XTsKK30KKworI3ByYWdtYSBtYXJr
IC0gX1dLSW5wdXREZWxlZ2F0ZQorCistIChCT09MKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJW
aWV3IGZvY3VzU2hvdWxkU3RhcnRJbnB1dFNlc3Npb246KGlkIDxfV0tGb2N1c2VkRWxlbWVudElu
Zm8+KWluZm8KK3sKKyAgICByZXR1cm4gX2FsbG93c0ZvY3VzVG9TdGFydElucHV0U2Vzc2lvbjsK
K30KKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRTdGFydElucHV0
U2Vzc2lvbjooaWQgPF9XS0Zvcm1JbnB1dFNlc3Npb24+KWlucHV0U2Vzc2lvbgoreworICAgIF9p
c0RvbmVXYWl0aW5nRm9ySW5wdXRTZXNzaW9uID0gdHJ1ZTsKK30KKworQGVuZAorCisjZW5kaWYg
Ly8gRU5BQkxFKERSQUdfU1VQUE9SVCkgJiYgUExBVEZPUk0oSU9TKSAmJiBXS19BUElfRU5BQkxF
RApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvVUlLaXRTUEkuaCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvaW9zL1VJS2l0U1BJLmgKaW5kZXggOGVkZDA1MmEwMzg0YjBjNzk0Zjk5
ZWQ3MDdiZjQ1YTFlNzI5MGZmMi4uOGVjZjMwNWVmYmU3NzE0MzhkMDI0Zjc3MGU5NWRlZWM1MGQx
ZjFkMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvVUlLaXRTUEkuaAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9VSUtpdFNQSS5oCkBAIC0zOSw3ICszOSwxMiBAQAog
QHByb3RvY29sIFVJRHJhZ1Nlc3Npb247CiBAY2xhc3MgVUlEcmFnSW50ZXJhY3Rpb247CiBAY2xh
c3MgVUlEcmFnSXRlbTsKKyNpbXBvcnQgPFVJS2l0L05TU3RyaW5nK1VJSXRlbVByb3ZpZGVyLmg+
CisjaW1wb3J0IDxVSUtpdC9OU1VSTCtVSUl0ZW1Qcm92aWRlci5oPgogI2ltcG9ydCA8VUlLaXQv
VUlEcmFnSW50ZXJhY3Rpb25fUHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlJbWFnZStVSUl0
ZW1Qcm92aWRlci5oPgorI2ltcG9ydCA8VUlLaXQvVUlJdGVtUHJvdmlkZXIuaD4KKyNpbXBvcnQg
PFVJS2l0L1VJSXRlbVByb3ZpZGVyX1ByaXZhdGUuaD4KICNlbmRpZiAvLyBFTkFCTEUoRFJBR19T
VVBQT1JUKQogCiAjZWxzZQpAQCAtNzAsNiArNzUsNDIgQEAgV1RGX0VYVEVSTl9DX0VORAogLSAo
dm9pZCloYW5kbGVLZXlXZWJFdmVudDooV2ViRXZlbnQgKil0aGVFdmVudCB3aXRoQ29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKFdlYkV2ZW50ICosIEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyOwog
QGVuZAogCisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKworQGludGVyZmFjZSBOU1VSTCAoKQor
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1fc2V0VGl0bGU6KSBOU1N0cmluZyAq
X3RpdGxlOworQGVuZAorCisjZGVmaW5lIFVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRp
b25zVmlzaWJpbGl0eUFsbCBOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFs
bAorCitAcHJvdG9jb2wgVUlJdGVtUHJvdmlkZXJSZWFkaW5nIDxOU0l0ZW1Qcm92aWRlclJlYWRp
bmc+CisKK0ByZXF1aXJlZAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSXRlbVByb3ZpZGVyRGF0
YTooTlNEYXRhICopZGF0YSB0eXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKil0eXBlSWRlbnRpZmll
ciBlcnJvcjooTlNFcnJvciAqKilvdXRFcnJvcjsKKworQGVuZAorCitAcHJvdG9jb2wgVUlJdGVt
UHJvdmlkZXJXcml0aW5nIDxOU0l0ZW1Qcm92aWRlcldyaXRpbmc+CisKK0ByZXF1aXJlZAorLSAo
TlNQcm9ncmVzcyAqKWxvYWREYXRhV2l0aFR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKXR5cGVJ
ZGVudGlmaWVyIGZvckl0ZW1Qcm92aWRlckNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0Rh
dGEgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKworQGVuZAorCitAaW50ZXJmYWNl
IE5TQXR0cmlidXRlZFN0cmluZyAoKSA8VUlJdGVtUHJvdmlkZXJSZWFkaW5nLCBVSUl0ZW1Qcm92
aWRlcldyaXRpbmc+CitAZW5kCitAaW50ZXJmYWNlIE5TU3RyaW5nICgpIDxVSUl0ZW1Qcm92aWRl
clJlYWRpbmcsIFVJSXRlbVByb3ZpZGVyV3JpdGluZz4KK0BlbmQKK0BpbnRlcmZhY2UgTlNVUkwg
KCkgPFVJSXRlbVByb3ZpZGVyUmVhZGluZywgVUlJdGVtUHJvdmlkZXJXcml0aW5nPgorQGVuZAor
QGludGVyZmFjZSBVSUltYWdlICgpIDxVSUl0ZW1Qcm92aWRlclJlYWRpbmcsIFVJSXRlbVByb3Zp
ZGVyV3JpdGluZz4KK0BlbmQKKworQGludGVyZmFjZSBVSUl0ZW1Qcm92aWRlciA6IE5TSXRlbVBy
b3ZpZGVyCitAZW5kCisKKyNlbmRpZgorCiAjZW5kaWYKIAogQHByb3RvY29sIFVJVGV4dElucHV0
VHJhaXRzX1ByaXZhdGVfUHJvcG9zZWRfU1BJXzM0NTgzNjI4IDxVSVRleHRJbnB1dFByaXZhdGU+
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9EcmFnQW5kRHJvcFNpbXVsYXRv
ck1hYy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL0RyYWdBbmREcm9wU2ltdWxhdG9yTWFj
Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjlhNzkxOGNjNDgzOWE4NzU3YmFmNjBiODhmMjM4NjFhZDIyZDBhNWYK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9EcmFnQW5kRHJvcFNp
bXVsYXRvck1hYy5tbQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJEcmFnQW5kRHJvcFNpbXVsYXRvci5oIgorCisjaWYgRU5BQkxFKERS
QUdfU1VQUE9SVCkgJiYgUExBVEZPUk0oTUFDKSAmJiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0
ICJUZXN0V0tXZWJWaWV3LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBEcmFnQW5kRHJvcFNpbXVsYXRv
ciB7CisgICAgUmV0YWluUHRyPFRlc3RXS1dlYlZpZXc+IF93ZWJWaWV3OworfQorCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihUZXN0V0tXZWJWaWV3ICopd2ViVmlldworeworICAg
IGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgICAgIF93ZWJWaWV3ID0gd2ViVmlldzsK
KyAgICAgICAgW193ZWJWaWV3IHNldFVJRGVsZWdhdGU6c2VsZl07CisgICAgICAgIFtfd2ViVmll
dyBfc2V0SW5wdXREZWxlZ2F0ZTpzZWxmXTsKKyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIGlmIChbX3dlYlZpZXcgVUlEZWxlZ2F0ZV0gPT0gc2Vs
ZikKKyAgICAgICAgW193ZWJWaWV3IHNldFVJRGVsZWdhdGU6bmlsXTsKKworICAgIGlmIChbX3dl
YlZpZXcgX2lucHV0RGVsZWdhdGVdID09IHNlbGYpCisgICAgICAgIFtfd2ViVmlldyBfc2V0SW5w
dXREZWxlZ2F0ZTpuaWxdOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXJ1
bkZyb206KENHUG9pbnQpc3RhcnRMb2NhdGlvbiB0bzooQ0dQb2ludCllbmRMb2NhdGlvbgorewor
ICAgIC8vIEZJWE1FOiBBZGQgYSBtZWNoYW5pc20gdG8gc2ltdWxhdGUgZHJhZ2dpbmcgb24gbWFj
T1MuCisgICAgVU5VU0VEX1BBUkFNKHN0YXJ0TG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTShl
bmRMb2NhdGlvbik7Cit9CisKKy0gKE5TQXJyYXk8X1dLQXR0YWNobWVudCAqPiAqKWluc2VydGVk
QXR0YWNobWVudHMKK3sKKyAgICByZXR1cm4gQFsgXTsKK30KKworLSAoTlNBcnJheTxfV0tBdHRh
Y2htZW50ICo+ICopcmVtb3ZlZEF0dGFjaG1lbnRzCit7CisgICAgcmV0dXJuIEBbIF07Cit9CisK
Ky0gKERyYWdBbmREcm9wUGhhc2UpcGhhc2UKK3sKKyAgICByZXR1cm4gRHJhZ0FuZERyb3BQaGFz
ZUNhbmNlbGxlZDsKK30KKworQGVuZAorCisjZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkg
JiYgUExBVEZPUk0oTUFDKSAmJiBXS19BUElfRU5BQkxFRAo=
</data>
<flag name="review"
          id="364666"
          type_id="1"
          status="+"
          setter="aestes"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346849</attachid>
            <date>2018-08-09 11:21:51 -0700</date>
            <delta_ts>2018-08-09 12:02:28 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-188439-20180809112150.patch</filename>
            <type>text/plain</type>
            <size>307564</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0NjkxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWJlYWUyYTMxYmQzN2YyY2ZkZGY1MThlYjg2ODRiYWUx
YjMwNjEyOC4uMWM5ZjBmZTI0YzgwMmEzZjJlMTQ3MDQ3MjRkMmE1MmU1ZTc1MzJmMyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEx
NiBAQAorMjAxOC0wOC0wOSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
KworICAgICAgICBbaU9TIFdLMl0gUmVuYW1lIGFuZCByZWZhY3RvciBEYXRhSW50ZXJhY3Rpb25U
ZXN0cyBhbmQgRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg0MzkKKworICAgICAgICBSZXZpZXdlZCBieSBB
bmR5IEVzdGVzIGFuZCBNZWdhbiBHYXJkbmVyLgorCisgICAgICAgIFJlZmFjdG9yIERhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciAoY3VycmVudGx5IHVzZWQgZm9yIGRyYWcgYW5kIGRyb3AgdGVzdGlu
ZyBvbiBpT1MpIHNvIHRoYXQgaXQgZXhpc3RzIGFjcm9zcworICAgICAgICBtYWNPUyBhbmQgaU9T
LCBhbmQgcmVuYW1lIGl0IHRvIERyYWdBbmREcm9wU2ltdWxhdG9yLiBBZGRpdGlvbmFsbHksIHJl
bmFtZSBEYXRhSW50ZXJhY3Rpb25UZXN0cyB0bworICAgICAgICBEcmFnQW5kRHJvcFRlc3RzLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0
dGFjaG1lbnRUZXN0cy5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0RyYWdBbmREcm9wVGVzdHNJT1MubW06IFJlbmFt
ZWQgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9EYXRhSW50ZXJhY3Rpb25UZXN0
cy5tbS4KKyAgICAgICAgKHRlc3RJY29uSW1hZ2UpOgorICAgICAgICAodGVzdFpJUEFyY2hpdmUp
OgorICAgICAgICAoLVtVSUl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZv
clR5cGVJZGVudGlmaWVyOndpdGhEYXRhOl0pOgorICAgICAgICAoLVtUZXN0V0tXZWJWaWV3IGVk
aXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk6CisgICAgICAgICgtW1Rlc3RXS1dlYlZpZXcgZWRp
dG9yVmFsdWVdKToKKyAgICAgICAgKG1ha2VDR1JlY3RWYWx1ZSk6CisgICAgICAgIChjaGVja0NH
UmVjdElzRXF1YWxUb0NHUmVjdFdpdGhMb2dnaW5nKToKKyAgICAgICAgKGNoZWNrU2VsZWN0aW9u
UmVjdHNXaXRoTG9nZ2luZyk6CisgICAgICAgIChjaGVja1JpY2hUZXh0VHlwZVByZWNlZGVzUGxh
aW5UZXh0VHlwZSk6CisgICAgICAgIChjaGVja0ZpcnN0VHlwZUlzUHJlc2VudEFuZFNlY29uZFR5
cGVJc01pc3NpbmcpOgorICAgICAgICAoY2hlY2tUeXBlSWRlbnRpZmllcklzUmVnaXN0ZXJlZEF0
SW5kZXgpOgorICAgICAgICAoY2hlY2tFc3RpbWF0ZWRTaXplKToKKyAgICAgICAgKGNoZWNrU3Vn
Z2VzdGVkTmFtZUFuZEVzdGltYXRlZFNpemUpOgorICAgICAgICAoY2hlY2tTdHJpbmdBcnJheXNB
cmVFcXVhbCk6CisgICAgICAgIChjaGVja0RyYWdDYXJldFJlY3RJc0NvbnRhaW5lZEluUmVjdCk6
CisgICAgICAgIChjaGVja0pTT05XaXRoTG9nZ2luZyk6CisgICAgICAgICh0ZXN0SWNvbkltYWdl
RGF0YSk6CisgICAgICAgIChydW5UZXN0V2l0aFRlbXBvcmFyeVRleHRGaWxlKToKKyAgICAgICAg
KHJ1blRlc3RXaXRoVGVtcG9yYXJ5Rm9sZGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6c2V0VXBUZXN0V2ViVmlld0ZvckRhdGFUcmFu
c2Zlckl0ZW1zKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3REcmFnQW5kRHJvcE9udG9U
YXJnZXRFbGVtZW50cyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0SWNvbkltYWdlRGF0
YSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9EcmFnQW5kRHJvcFNpbXVsYXRvci5o
OiBSZW5hbWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yLmguCisgICAgICAgICogVGVzdFdlYktpdEFQSS9pb3MvRHJhZ0FuZERyb3BTaW11bGF0
b3JJT1MubW06IFJlbmFtZWQgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL2lvcy9EYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3IubW0uCisgICAgICAgICgtW1dLV2ViVmlldyBkcm9wSW50ZXJhY3Rpb25E
ZWxlZ2F0ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRyb3BJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uXSk6CisgICAgICAgICgtW01vY2tEcmFnRHJvcFNlc3Np
b24gaW5pdFdpdGhJdGVtczpsb2NhdGlvbjp3aW5kb3c6YWxsb3dNb3ZlOl0pOgorICAgICAgICAo
LVtNb2NrRHJhZ0Ryb3BTZXNzaW9uIGFsbG93c01vdmVPcGVyYXRpb25dKToKKyAgICAgICAgKC1b
TW9ja0RyYWdEcm9wU2Vzc2lvbiBpc1Jlc3RyaWN0ZWRUb0RyYWdnaW5nQXBwbGljYXRpb25dKToK
KyAgICAgICAgKC1bTW9ja0RyYWdEcm9wU2Vzc2lvbiBoYXNJdGVtc0NvbmZvcm1pbmdUb1R5cGVJ
ZGVudGlmaWVyczpdKToKKyAgICAgICAgKC1bTW9ja0RyYWdEcm9wU2Vzc2lvbiBjYW5Mb2FkT2Jq
ZWN0c09mQ2xhc3M6XSk6CisgICAgICAgICgtW01vY2tEcmFnRHJvcFNlc3Npb24gY2FuTG9hZE9i
amVjdHNPZkNsYXNzZXM6XSk6CisgICAgICAgICgtW01vY2tEcmFnRHJvcFNlc3Npb24gaXRlbXNd
KToKKyAgICAgICAgKC1bTW9ja0RyYWdEcm9wU2Vzc2lvbiBzZXRJdGVtczpdKToKKyAgICAgICAg
KC1bTW9ja0RyYWdEcm9wU2Vzc2lvbiBhZGRJdGVtczpdKToKKyAgICAgICAgKC1bTW9ja0RyYWdE
cm9wU2Vzc2lvbiBsb2NhdGlvbkluVmlldzpdKToKKyAgICAgICAgKC1bTW9ja0Ryb3BTZXNzaW9u
IGluaXRXaXRoUHJvdmlkZXJzOmxvY2F0aW9uOndpbmRvdzphbGxvd01vdmU6XSk6CisgICAgICAg
ICgtW01vY2tEcm9wU2Vzc2lvbiBpc0xvY2FsXSk6CisgICAgICAgICgtW01vY2tEcm9wU2Vzc2lv
biBwcm9ncmVzc10pOgorICAgICAgICAoLVtNb2NrRHJvcFNlc3Npb24gc2V0UHJvZ3Jlc3NJbmRp
Y2F0b3JTdHlsZTpdKToKKyAgICAgICAgKC1bTW9ja0Ryb3BTZXNzaW9uIHByb2dyZXNzSW5kaWNh
dG9yU3R5bGVdKToKKyAgICAgICAgKC1bTW9ja0Ryb3BTZXNzaW9uIG9wZXJhdGlvbk1hc2tdKToK
KyAgICAgICAgKC1bTW9ja0Ryb3BTZXNzaW9uIGxvY2FsRHJhZ1Nlc3Npb25dKToKKyAgICAgICAg
KC1bTW9ja0Ryb3BTZXNzaW9uIGhhc0l0ZW1zQ29uZm9ybWluZ1RvVHlwZUlkZW50aWZpZXI6XSk6
CisgICAgICAgICgtW01vY2tEcm9wU2Vzc2lvbiBjYW5DcmVhdGVJdGVtc09mQ2xhc3M6XSk6Cisg
ICAgICAgICgtW01vY2tEcm9wU2Vzc2lvbiBsb2FkT2JqZWN0c09mQ2xhc3M6Y29tcGxldGlvbjpd
KToKKyAgICAgICAgKC1bTW9ja0RyYWdTZXNzaW9uIGluaXRXaXRoV2luZG93OmFsbG93TW92ZTpd
KToKKyAgICAgICAgKC1bTW9ja0RyYWdTZXNzaW9uIGxvY2FsT3BlcmF0aW9uTWFza10pOgorICAg
ICAgICAoLVtNb2NrRHJhZ1Nlc3Npb24gZXh0ZXJuYWxPcGVyYXRpb25NYXNrXSk6CisgICAgICAg
ICgtW01vY2tEcmFnU2Vzc2lvbiBzZXNzaW9uXSk6CisgICAgICAgICgtW01vY2tEcmFnU2Vzc2lv
biBsb2NhbENvbnRleHRdKToKKyAgICAgICAgKC1bTW9ja0RyYWdTZXNzaW9uIHNldExvY2FsQ29u
dGV4dDpdKToKKyAgICAgICAgKGRyYWdBbmREcm9wRXZlbnROYW1lcyk6CisgICAgICAgICgtW0Ry
YWdBbmREcm9wU2ltdWxhdG9yQXBwbGljYXRpb24gX2NhbmNlbEFsbFRvdWNoZXNdKToKKyAgICAg
ICAgKC1bRHJhZ0FuZERyb3BTaW11bGF0b3IgaW5pdFdpdGhXZWJWaWV3Ol0pOgorICAgICAgICAo
LVtEcmFnQW5kRHJvcFNpbXVsYXRvciBkZWFsbG9jXSk6CisgICAgICAgICgtW0RyYWdBbmREcm9w
U2ltdWxhdG9yIF9yZXNldFNpbXVsYXRlZFN0YXRlXSk6CisgICAgICAgICgtW0RyYWdBbmREcm9w
U2ltdWxhdG9yIG9ic2VydmVkRXZlbnROYW1lc10pOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNp
bXVsYXRvciBzaW11bGF0ZUFsbFRvdWNoZXNDYW5jZWxlZDpdKToKKyAgICAgICAgKC1bRHJhZ0Fu
ZERyb3BTaW11bGF0b3IgcnVuRnJvbTp0bzpdKToKKyAgICAgICAgKC1bRHJhZ0FuZERyb3BTaW11
bGF0b3IgcnVuRnJvbTp0bzphZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnM6XSk6CisgICAg
ICAgICgtW0RyYWdBbmREcm9wU2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKToKKyAgICAg
ICAgKC1bRHJhZ0FuZERyb3BTaW11bGF0b3IgX2NvbmNsdWRlRHJvcEFuZFBlcmZvcm1PcGVyYXRp
b25JZk5lY2Vzc2FyeV0pOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRvciBfZW5xdWV1
ZVBlbmRpbmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnNdKToKKyAgICAgICAgKC1bRHJh
Z0FuZERyb3BTaW11bGF0b3IgX3NlbmRRdWV1ZWRBZGRpdGlvbmFsSXRlbVJlcXVlc3RdKToKKyAg
ICAgICAgKC1bRHJhZ0FuZERyb3BTaW11bGF0b3IgX2FkdmFuY2VQcm9ncmVzc10pOgorICAgICAg
ICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRvciBfY3VycmVudExvY2F0aW9uXSk6CisgICAgICAgICgt
W0RyYWdBbmREcm9wU2ltdWxhdG9yIF9zY2hlZHVsZUFkdmFuY2VQcm9ncmVzc10pOgorICAgICAg
ICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXSk6CisgICAgICAg
ICgtW0RyYWdBbmREcm9wU2ltdWxhdG9yIGV4dGVybmFsSXRlbVByb3ZpZGVyc10pOgorICAgICAg
ICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6XSk6Cisg
ICAgICAgICgtW0RyYWdBbmREcm9wU2ltdWxhdG9yIHBoYXNlXSk6CisgICAgICAgICgtW0RyYWdB
bmREcm9wU2ltdWxhdG9yIGxpZnRQcmV2aWV3c10pOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNp
bXVsYXRvciBsYXN0S25vd25EcmFnQ2FyZXRSZWN0XSk6CisgICAgICAgICgtW0RyYWdBbmREcm9w
U2ltdWxhdG9yIHdhaXRGb3JJbnB1dFNlc3Npb25dKToKKyAgICAgICAgKC1bRHJhZ0FuZERyb3BT
aW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10pOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNp
bXVsYXRvciByZW1vdmVkQXR0YWNobWVudHNdKToKKyAgICAgICAgKC1bRHJhZ0FuZERyb3BTaW11
bGF0b3IgZW5kRGF0YVRyYW5zZmVyXSk6CisgICAgICAgICgtW0RyYWdBbmREcm9wU2ltdWxhdG9y
IF93ZWJWaWV3OmRhdGFJbnRlcmFjdGlvbk9wZXJhdGlvbldhc0hhbmRsZWQ6Zm9yU2Vzc2lvbjpp
dGVtUHJvdmlkZXJzOl0pOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRvciBfd2ViVmll
dzp3aWxsVXBkYXRlRGF0YUludGVyYWN0aW9uT3BlcmF0aW9uVG9PcGVyYXRpb246Zm9yU2Vzc2lv
bjpdKToKKyAgICAgICAgKC1bRHJhZ0FuZERyb3BTaW11bGF0b3IgX3dlYlZpZXc6YWRqdXN0ZWRE
YXRhSW50ZXJhY3Rpb25JdGVtUHJvdmlkZXJzRm9ySXRlbVByb3ZpZGVyOnJlcHJlc2VudGluZ09i
amVjdHM6YWRkaXRpb25hbERhdGE6XSk6CisgICAgICAgICgtW0RyYWdBbmREcm9wU2ltdWxhdG9y
IF93ZWJWaWV3OnNob3dDdXN0b21TaGVldEZvckVsZW1lbnQ6XSk6CisgICAgICAgICgtW0RyYWdB
bmREcm9wU2ltdWxhdG9yIF93ZWJWaWV3OndpbGxQZXJmb3JtRHJvcFdpdGhTZXNzaW9uOl0pOgor
ICAgICAgICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRvciBfd2ViVmlldzpkaWRJbnNlcnRBdHRhY2ht
ZW50Ol0pOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRvciBfd2ViVmlldzpkaWRSZW1v
dmVBdHRhY2htZW50Ol0pOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRvciBfd2ViVmll
dzpmb2N1c1Nob3VsZFN0YXJ0SW5wdXRTZXNzaW9uOl0pOgorICAgICAgICAoLVtEcmFnQW5kRHJv
cFNpbXVsYXRvciBfd2ViVmlldzpkaWRTdGFydElucHV0U2Vzc2lvbjpdKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL2lvcy9VSUtpdFNQSS5oOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvbWFj
L0RyYWdBbmREcm9wU2ltdWxhdG9yTWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bRHJhZ0FuZERy
b3BTaW11bGF0b3IgaW5pdFdpdGhXZWJWaWV3Ol0pOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNp
bXVsYXRvciBkZWFsbG9jXSk6CisgICAgICAgICgtW0RyYWdBbmREcm9wU2ltdWxhdG9yIHJ1bkZy
b206dG86XSk6CisgICAgICAgICgtW0RyYWdBbmREcm9wU2ltdWxhdG9yIGluc2VydGVkQXR0YWNo
bWVudHNdKToKKyAgICAgICAgKC1bRHJhZ0FuZERyb3BTaW11bGF0b3IgcmVtb3ZlZEF0dGFjaG1l
bnRzXSk6CisKIDIwMTgtMDgtMDggIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5j
b20+CiAKICAgICAgICAgW2lPU10gZmFzdC9ldmVudHMvaW9zL2NvbnRlbnRlZGl0YWJsZS1hdXRv
Y2FwaXRhbGl6ZS5odG1sIGlzIGEgZmxha3kgZmFpbHVyZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAzZTAzNmMzM2ZkNDYxNzlmNDAwMzkwMTJiZDA4ZDQ1ZmNmNjA5YjEzLi40MzJhYjM4ZDRm
MTJkYzhlNTU0MGM4ZWE2YjA4MWE5ZDRhNzEzMzU0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtODA4LDYgKzgwOCw3IEBACiAJCUY0NUI2M0ZFMUYxOUQ0MTAwMDlEMzhCOSAvKiBBY3Rpb25T
aGVldFRlc3RzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjQ1QjYzRkMxRjE5RDQxMDAwOUQzOEI5IC8qIEFjdGlvblNoZWV0VGVzdHMubW0gKi87IH07
CiAJCUY0NUUxNTczMjExMkNFMjkwMDMwN0U4MiAvKiBLZXlib2FyZElucHV0VGVzdHNJT1MubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDVFMTU3MjIx
MTJDRTI5MDAzMDdFODIgLyogS2V5Ym9hcmRJbnB1dFRlc3RzSU9TLm1tICovOyB9OwogCQlGNDVF
MTU3NjIxMTJDRTYyMDAzMDdFODIgLyogVGVzdElucHV0RGVsZWdhdGUubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDVFMTU3NTIxMTJDRTYyMDAzMDdF
ODIgLyogVGVzdElucHV0RGVsZWdhdGUubW0gKi87IH07CisJCUY0NjEyOEI3MjExQzhFRDUwMEQ5
RkFEQiAvKiBEcmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NjEyOEI2MjExQzhFRDUwMEQ5RkFEQiAvKiBEcmFn
QW5kRHJvcFNpbXVsYXRvck1hYy5tbSAqLzsgfTsKIAkJRjQ2NEFGOTIyMEJCNjZFQTAwN0Y5QjE4
IC8qIFJlbmRlcmluZ1Byb2dyZXNzVGVzdHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNDY0QUY5MTIwQkI2NkVBMDA3RjlCMTggLyogUmVuZGVyaW5n
UHJvZ3Jlc3NUZXN0cy5tbSAqLzsgfTsKIAkJRjQ2ODQ5QkUxRUVGNThFNDAwQjkzN0ZFIC8qIFVJ
UGFzdGVib2FyZFRlc3RzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjQ2ODQ5QkQxRUVGNThFNDAwQjkzN0ZFIC8qIFVJUGFzdGVib2FyZFRlc3RzLm1t
ICovOyB9OwogCQlGNDY4NDlDMDFFRUY1RUYzMDBCOTM3RkUgLyogcmljaC1hbmQtcGxhaW4tdGV4
dC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY0Njg0OUJGMUVFRjVFREMwMEI5MzdGRSAvKiByaWNoLWFuZC1wbGFpbi10ZXh0Lmh0bWwg
Ki87IH07CkBAIC04MjksOCArODMwLDggQEAKIAkJRjRDRDc0QzYyMEZEQUNGQTAwREUzNzk0IC8q
IHRleHQtd2l0aC1hc3luYy1zY3JpcHQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNENENzRDNTIwRkRBQ0Y1MDBERTM3OTQgLyogdGV4
dC13aXRoLWFzeW5jLXNjcmlwdC5odG1sICovOyB9OwogCQlGNENENzRDOTIwRkRCNDk2MDBERTM3
OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNENENzRDODIwRkRCNDk2MDBERTM3OTQgLyogVGVzdFVSTFNj
aGVtZUhhbmRsZXIubW0gKi87IH07CiAJCUY0RDI5ODZFMjBGRUU3MzcwMDkyRDYzNiAvKiBSdW5T
Y3JpcHRBZnRlckRvY3VtZW50TG9hZC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY0RDI5ODZEMjBGRUU3MzcwMDkyRDYzNiAvKiBSdW5TY3JpcHRBZnRl
ckRvY3VtZW50TG9hZC5tbSAqLzsgfTsKLQkJRjRENEYzQjYxRTRFMkJDQjAwQkIyNzY3IC8qIERh
dGFJbnRlcmFjdGlvblNpbXVsYXRvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY0RDRGM0I0MUU0RTJCQ0IwMEJCMjc2NyAvKiBEYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IubW0gKi87IH07Ci0JCUY0RDRGM0I5MUU0RTM2RTQwMEJCMjc2NyAvKiBEYXRh
SW50ZXJhY3Rpb25UZXN0cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY0RDRGM0I3MUU0RTM2RTQwMEJCMjc2NyAvKiBEYXRhSW50ZXJhY3Rpb25UZXN0
cy5tbSAqLzsgfTsKKwkJRjRENEYzQjYxRTRFMkJDQjAwQkIyNzY3IC8qIERyYWdBbmREcm9wU2lt
dWxhdG9ySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjRENEYzQjQxRTRFMkJDQjAwQkIyNzY3IC8qIERyYWdBbmREcm9wU2ltdWxhdG9ySU9TLm1t
ICovOyB9OworCQlGNEQ0RjNCOTFFNEUzNkU0MDBCQjI3NjcgLyogRHJhZ0FuZERyb3BUZXN0c0lP
Uy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RDRG
M0I3MUU0RTM2RTQwMEJCMjc2NyAvKiBEcmFnQW5kRHJvcFRlc3RzSU9TLm1tICovOyB9OwogCQlG
NEQ1RTRFODFGMEM1RDM4MDA4QzFBNDkgLyogZHJhZ3N0YXJ0LWNsZWFyLXNlbGVjdGlvbi5odG1s
IGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0
RDVFNEU3MUYwQzVEMjcwMDhDMUE0OSAvKiBkcmFnc3RhcnQtY2xlYXItc2VsZWN0aW9uLmh0bWwg
Ki87IH07CiAJCUY0RDY1REE4MUY1RTQ3MDQwMDlEOEMyNyAvKiBzZWxlY3RlZC10ZXh0LWltYWdl
LWxpbmstYW5kLWVkaXRhYmxlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjRENjVEQTcxRjVFNDZDMDAwOUQ4QzI3IC8qIHNlbGVjdGVk
LXRleHQtaW1hZ2UtbGluay1hbmQtZWRpdGFibGUuaHRtbCAqLzsgfTsKIAkJRjRERUY2RUQxRTlC
NERCNjAwNDhFRjYxIC8qIGltYWdlLWluLWxpbmstYW5kLWlucHV0Lmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRERUY2RUMxRTlCNEQ5
NTAwNDhFRjYxIC8qIGltYWdlLWluLWxpbmstYW5kLWlucHV0Lmh0bWwgKi87IH07CkBAIC0yMDMy
LDYgKzIwMzMsOCBAQAogCQlGNDVFMTU3MjIxMTJDRTI5MDAzMDdFODIgLyogS2V5Ym9hcmRJbnB1
dFRlc3RzSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gS2V5Ym9hcmRJbnB1dFRlc3RzSU9T
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDVFMTU3NDIxMTJDRTYyMDAzMDdF
ODIgLyogVGVzdElucHV0RGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVzdElucHV0RGVsZWdh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ1RTE1NzUyMTEyQ0U2MjAwMzA3
RTgyIC8qIFRlc3RJbnB1dERlbGVnYXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGVzdElu
cHV0RGVsZWdhdGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0NjEyOEI0MjEx
Qzg2MUEwMEQ5RkFEQiAvKiBEcmFnQW5kRHJvcFNpbXVsYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBEcmFnQW5kRHJvcFNpbXVsYXRvci5oOyBwYXRoID0gY29jb2EvRHJh
Z0FuZERyb3BTaW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjQ2MTI4
QjYyMTFDOEVENTAwRDlGQURCIC8qIERyYWdBbmREcm9wU2ltdWxhdG9yTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gRHJhZ0FuZERyb3BTaW11bGF0b3JNYWMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUY0NjRBRjkxMjBCQjY2RUEwMDdGOUIxOCAvKiBSZW5kZXJpbmdQcm9n
cmVzc1Rlc3RzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVuZGVyaW5nUHJvZ3Jlc3NUZXN0
cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ2ODQ5QkQxRUVGNThFNDAwQjkz
N0ZFIC8qIFVJUGFzdGVib2FyZFRlc3RzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVUlQYXN0
ZWJvYXJkVGVzdHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0Njg0OUJGMUVF
RjVFREMwMEI5MzdGRSAvKiByaWNoLWFuZC1wbGFpbi10ZXh0Lmh0bWwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAicmlj
aC1hbmQtcGxhaW4tdGV4dC5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIw
NTUsOSArMjA1OCw4IEBACiAJCUY0Q0Q3NEM3MjBGREI0OTYwMERFMzc5NCAvKiBUZXN0VVJMU2No
ZW1lSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXN0VVJMU2NoZW1lSGFuZGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNENENzRDODIwRkRCNDk2MDBERTM3OTQgLyogVGVz
dFVSTFNjaGVtZUhhbmRsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXN0VVJMU2NoZW1l
SGFuZGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjREMjk4NkQyMEZFRTcz
NzAwOTJENjM2IC8qIFJ1blNjcmlwdEFmdGVyRG9jdW1lbnRMb2FkLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gUnVuU2NyaXB0QWZ0ZXJEb2N1bWVudExvYWQubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUY0RDRGM0I0MUU0RTJCQ0IwMEJCMjc2NyAvKiBEYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUY0
RDRGM0I1MUU0RTJCQ0IwMEJCMjc2NyAvKiBEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUY0RDRGM0I3MUU0RTM2RTQwMEJCMjc2NyAv
KiBEYXRhSW50ZXJhY3Rpb25UZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IERhdGFJbnRlcmFjdGlvblRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGNEQ0RjNCNDFFNEUyQkNCMDBCQjI3NjcgLyogRHJhZ0FuZERyb3BTaW11bGF0b3JJ
T1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEcmFnQW5kRHJv
cFNpbXVsYXRvcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRENEYzQjcx
RTRFMzZFNDAwQkIyNzY3IC8qIERyYWdBbmREcm9wVGVzdHNJT1MubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEcmFnQW5kRHJvcFRlc3RzSU9TLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNEQ1RTRFNzFGMEM1RDI3MDA4QzFBNDkgLyogZHJhZ3N0
YXJ0LWNsZWFyLXNlbGVjdGlvbi5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImRyYWdzdGFydC1jbGVhci1zZWxl
Y3Rpb24uaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0RDY1REE3MUY1RTQ2
QzAwMDlEOEMyNyAvKiBzZWxlY3RlZC10ZXh0LWltYWdlLWxpbmstYW5kLWVkaXRhYmxlLmh0bWwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAic2VsZWN0ZWQtdGV4dC1pbWFnZS1saW5rLWFu
ZC1lZGl0YWJsZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRERUY2RUMx
RTlCNEQ5NTAwNDhFRjYxIC8qIGltYWdlLWluLWxpbmstYW5kLWlucHV0Lmh0bWwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0Lmh0bWw7IHBhdGggPSAiaW1hZ2UtaW4tbGluay1hbmQtaW5wdXQuaHRtbCI7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTk1LDYgKzIxOTcsNyBAQAogCQkJCUExM0VCQjQ0
MUI4NzMzMkIwMDA5NzExMCAvKiBXZWJQcm9jZXNzUGx1Z0luICovLAogCQkJCUY0NTE3QjY4MjA1
NEUwQUMwMEMyNjcyMSAvKiBDbGFzc01ldGhvZFN3aXp6bGVyLmggKi8sCiAJCQkJRjQ1MTdCNjky
MDU0RTBBQzAwQzI2NzIxIC8qIENsYXNzTWV0aG9kU3dpenpsZXIubW0gKi8sCisJCQkJRjQ2MTI4
QjQyMTFDODYxQTAwRDlGQURCIC8qIERyYWdBbmREcm9wU2ltdWxhdG9yLmggKi8sCiAJCQkJRjQ0
RDA2NDgxRjM5NjJFMzAwMUEwRTI5IC8qIEVkaXRpbmdUZXN0SGFybmVzcy5oICovLAogCQkJCUY0
NEQwNjQ5MUYzOTYyRTMwMDFBMEUyOSAvKiBFZGl0aW5nVGVzdEhhcm5lc3MubW0gKi8sCiAJCQkJ
NUM3MjZENkQxRDNFRTA2ODAwQzVFMUExIC8qIEluc3RhbmNlTWV0aG9kU3dpenpsZXIuaCAqLywK
QEAgLTI0MTAsOCArMjQxMyw3IEBACiAJCTJFOTY2MERDMTZDMDdEN0IwMDM3MUI0MiAvKiBpb3Mg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUY0RDRGM0I1
MUU0RTJCQ0IwMEJCMjc2NyAvKiBEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuaCAqLywKLQkJCQlG
NEQ0RjNCNDFFNEUyQkNCMDBCQjI3NjcgLyogRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLm1tICov
LAorCQkJCUY0RDRGM0I0MUU0RTJCQ0IwMEJCMjc2NyAvKiBEcmFnQW5kRHJvcFNpbXVsYXRvcklP
Uy5tbSAqLywKIAkJCQkyRTc3NjVDQzE2QzREODBBMDBCQTJCQjEgLyogbWFpbklPUy5tbSAqLywK
IAkJCQlGNDUxN0I2NTIwNTRDNDk1MDBDMjY3MjEgLyogVGVzdFdLV2ViVmlld0NvbnRyb2xsZXIu
aCAqLywKIAkJCQlGNDUxN0I2NjIwNTRDNDk1MDBDMjY3MjEgLyogVGVzdFdLV2ViVmlld0NvbnRy
b2xsZXIubW0gKi8sCkBAIC0yNDk2LDcgKzI0OTgsNyBAQAogCQkJCUExQzRGQjZGMUJBQ0NFRkEw
MDM3NDJEMCAvKiBSZXNvdXJjZXMgKi8sCiAJCQkJMkUyMDVCQTMxRjUyNzc0NjAwNTk1MkREIC8q
IEFjY2Vzc2liaWxpdHlUZXN0c0lPUy5tbSAqLywKIAkJCQlGNDVCNjNGQzFGMTlENDEwMDA5RDM4
QjkgLyogQWN0aW9uU2hlZXRUZXN0cy5tbSAqLywKLQkJCQlGNEQ0RjNCNzFFNEUzNkU0MDBCQjI3
NjcgLyogRGF0YUludGVyYWN0aW9uVGVzdHMubW0gKi8sCisJCQkJRjRENEYzQjcxRTRFMzZFNDAw
QkIyNzY3IC8qIERyYWdBbmREcm9wVGVzdHNJT1MubW0gKi8sCiAJCQkJRjQ1RTE1NzIyMTEyQ0Uy
OTAwMzA3RTgyIC8qIEtleWJvYXJkSW5wdXRUZXN0c0lPUy5tbSAqLywKIAkJCQk1NzRGNTVDRTIw
NEQzNzYzMDAyOTQ4QzYgLyogTG9jYWxBdXRoZW50aWNhdG9yLm1tICovLAogCQkJCTc1NjA5MTc3
MTkyNTlDNTkwMDlFRjA2RSAvKiBNZW1vcnlDYWNoZUFkZEltYWdlVG9DYWNoZUlPUy5tbSAqLywK
QEAgLTMwOTYsNiArMzA5OCw3IEBACiAJCUJDQTYxQzNBMTE3MDBCOTQwMDQ2MEQxRSAvKiBtYWMg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUY0NjEyOEI2
MjExQzhFRDUwMEQ5RkFEQiAvKiBEcmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbSAqLywKIAkJCQkx
QUVERTIyNDEzRTVFN0EwMDBFNjJGRTggLyogSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyTWFjLm1t
ICovLAogCQkJCUMwODEyMjQwMTNGQzE3MjQwMERDMzlBRSAvKiBKYXZhU2NyaXB0VGVzdE1hYy5t
bSAqLywKIAkJCQkyRTc3NjVDRTE2QzREODExMDBCQTJCQjEgLyogbWFpbk1hYy5tbSAqLywKQEAg
LTM2NzAsOCArMzY3Myw2IEBACiAJCQkJNDZBOTExNTkyMTA4RTY3ODAwNzhENDBEIC8qIEN1c3Rv
bVVzZXJBZ2VudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTc1MUIwNUQ2MUY4RUFDNDEwMDI4QTA5
RSAvKiBEYXRhYmFzZVRyYWNrZXJUZXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRDNENGNzcx
RDJEOUREODAwRUNDQzk0IC8qIERhdGFEZXRlY3Rpb24ubW0gaW4gU291cmNlcyAqLywKLQkJCQlG
NEQ0RjNCNjFFNEUyQkNCMDBCQjI3NjcgLyogRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLm1tIGlu
IFNvdXJjZXMgKi8sCi0JCQkJRjRENEYzQjkxRTRFMzZFNDAwQkIyNzY3IC8qIERhdGFJbnRlcmFj
dGlvblRlc3RzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4RUU1MUQyMEE3OEQzNjAwRTAyNEYz
IC8qIERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24ubW0gaW4gU291cmNlcyAqLywKIAkJ
CQkyRDE2NDZFMjFEMTg2MkNEMDAwMTVBMUEgLyogRGVmZXJyZWRWaWV3SW5XaW5kb3dTdGF0ZUNo
YW5nZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUI5MUE0MTFBN0UwMDQ0N0M0QyAvKiBE
ZXZpY2VTY2FsZUZhY3RvckluRGFzaGJvYXJkUmVnaW9ucy5tbSBpbiBTb3VyY2VzICovLApAQCAt
MzY5NCw2ICszNjk1LDkgQEAKIAkJCQk3Q0NFN0YyMzFBNDExQUY2MDA0NDdDNEMgLyogRG93bmxv
YWQubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VFRTFBNDExQUU2MDA0NDdDNEMgLyogRG93
bmxvYWREZWNpZGVEZXN0aW5hdGlvbkNyYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY0QkZB
NjhFMUU0QUQwODAwMDE1NDI5OCAvKiBEcmFnQW5kRHJvcFBhc3RlYm9hcmRUZXN0cy5tbSBpbiBT
b3VyY2VzICovLAorCQkJCUY0RDRGM0I2MUU0RTJCQ0IwMEJCMjc2NyAvKiBEcmFnQW5kRHJvcFNp
bXVsYXRvcklPUy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUY0NjEyOEI3MjExQzhFRDUwMEQ5RkFE
QiAvKiBEcmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUY0RDRG
M0I5MUU0RTM2RTQwMEJCMjc2NyAvKiBEcmFnQW5kRHJvcFRlc3RzSU9TLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTE1NTAyMkExRTA1MDIwQjAwQTI0QzU3IC8qIER1cGxpY2F0ZUNvbXBsZXRpb25I
YW5kbGVyQ2FsbHMubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VCRTFBNDExQTdFMDA0NDdD
NEMgLyogRHluYW1pY0RldmljZVNjYWxlRmFjdG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMw
QkY4OTIxREQ1OTlCNjAwQjAwMzI4IC8qIEVhcmx5S1ZPQ3Jhc2gubW0gaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRh
Y2htZW50VGVzdHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dL
QXR0YWNobWVudFRlc3RzLm1tCmluZGV4IDQ2ODlkYTQzYjNiN2IxOTFhYjA4MWRmMWVjYmFiNDI4
MWRjMDM4YmYuLmQ4ZjU2YmQzNzI3OWI2M2NmNGI4NTMyZmZlODQyM2NhYjdhYmZiMmMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50
VGVzdHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0
dGFjaG1lbnRUZXN0cy5tbQpAQCAtMjUsNyArMjUsNyBAQAogCiAjaW1wb3J0ICJjb25maWcuaCIK
IAotI2ltcG9ydCAiRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmgiCisjaW1wb3J0ICJEcmFnQW5k
RHJvcFNpbXVsYXRvci5oIgogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQg
IlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMu
aCIKQEAgLTExOTQsMTUgKzExOTQsMTUgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0c01hYywgSW5z
ZXJ0UGFzdGVkRmlsZVVSTHNBc0F0dGFjaG1lbnRzKQogVEVTVChXS0F0dGFjaG1lbnRUZXN0c0lP
UywgSW5zZXJ0RHJvcHBlZEltYWdlQXNBdHRhY2htZW50KQogewogICAgIGF1dG8gd2ViVmlldyA9
IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKLSAgICBhdXRvIGRyYWdnaW5nU2ltdWxh
dG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhX
ZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBhdXRvIGRyYWdBbmREcm9wU2ltdWxhdG9yID0g
YWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2Vi
Vmlldy5nZXQoKV0pOwogICAgIGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBh
bGxvY10gaW5pdF0pOwogICAgIFtpdGVtIHJlZ2lzdGVyRGF0YTp0ZXN0SW1hZ2VEYXRhKCkgdHlw
ZTooTlNTdHJpbmcgKilrVVRUeXBlUE5HXTsKLSAgICBbZHJhZ2dpbmdTaW11bGF0b3Igc2V0RXh0
ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW0uZ2V0KCkgXV07Ci0gICAgW2RyYWdnaW5nU2ltdWxh
dG9yIHJ1bkZyb206Q0dQb2ludFplcm8gdG86Q0dQb2ludE1ha2UoNTAsIDUwKV07CisgICAgW2Ry
YWdBbmREcm9wU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtLmdldCgp
IF1dOworICAgIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRaZXJvIHRvOkNH
UG9pbnRNYWtlKDUwLCA1MCldOwogCi0gICAgRVhQRUNUX0VRKDFVLCBbZHJhZ2dpbmdTaW11bGF0
b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10uY291bnQpOwotICAgIEVYUEVDVF9FUSgwVSwgW2RyYWdn
aW5nU2ltdWxhdG9yIHJlbW92ZWRBdHRhY2htZW50c10uY291bnQpOwotICAgIGF1dG8gYXR0YWNo
bWVudCA9IHJldGFpblB0cihbZHJhZ2dpbmdTaW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10u
Zmlyc3RPYmplY3QpOworICAgIEVYUEVDVF9FUSgxVSwgW2RyYWdBbmREcm9wU2ltdWxhdG9yIGlu
c2VydGVkQXR0YWNobWVudHNdLmNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMFUsIFtkcmFnQW5kRHJv
cFNpbXVsYXRvciByZW1vdmVkQXR0YWNobWVudHNdLmNvdW50KTsKKyAgICBhdXRvIGF0dGFjaG1l
bnQgPSByZXRhaW5QdHIoW2RyYWdBbmREcm9wU2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVudHNd
LmZpcnN0T2JqZWN0KTsKICAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTp0
ZXN0SW1hZ2VEYXRhKCldOwogICAgIEVYUEVDVF9XS19TVFJFUSgicHVibGljLnBuZyIsIFt3ZWJW
aWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0eXBlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVu
dCJdKTsKIApAQCAtMTIxNywxNyArMTIxNywxNyBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9T
LCBJbnNlcnREcm9wcGVkSW1hZ2VBc0F0dGFjaG1lbnQpCiBURVNUKFdLQXR0YWNobWVudFRlc3Rz
SU9TLCBJbnNlcnREcm9wcGVkQXR0cmlidXRlZFN0cmluZ0NvbnRhaW5pbmdBdHRhY2htZW50KQog
ewogICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKLSAg
ICBhdXRvIGRyYWdnaW5nU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBhdXRvIGRy
YWdBbmREcm9wU2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwogICAgIGF1dG8gaW1hZ2UgPSBhZG9w
dE5TKFtbTlNUZXh0QXR0YWNobWVudCBhbGxvY10gaW5pdFdpdGhEYXRhOnRlc3RJbWFnZURhdGEo
KSBvZlR5cGU6KE5TU3RyaW5nICopa1VUVHlwZVBOR10pOwogICAgIGF1dG8gaXRlbSA9IGFkb3B0
TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwogICAgIFtpdGVtIHJlZ2lzdGVyT2Jq
ZWN0OltOU0F0dHJpYnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN0cmluZ1dpdGhBdHRhY2htZW50Omlt
YWdlLmdldCgpXSB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmls
aXR5QWxsXTsKIAotICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRl
cnM6QFsgaXRlbS5nZXQoKSBdXTsKLSAgICBbZHJhZ2dpbmdTaW11bGF0b3IgcnVuRnJvbTpDR1Bv
aW50WmVybyB0bzpDR1BvaW50TWFrZSg1MCwgNTApXTsKKyAgICBbZHJhZ0FuZERyb3BTaW11bGF0
b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW0uZ2V0KCkgXV07CisgICAgW2RyYWdB
bmREcm9wU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludFplcm8gdG86Q0dQb2ludE1ha2UoNTAsIDUw
KV07CiAKLSAgICBFWFBFQ1RfRVEoMVUsIFtkcmFnZ2luZ1NpbXVsYXRvciBpbnNlcnRlZEF0dGFj
aG1lbnRzXS5jb3VudCk7Ci0gICAgRVhQRUNUX0VRKDBVLCBbZHJhZ2dpbmdTaW11bGF0b3IgcmVt
b3ZlZEF0dGFjaG1lbnRzXS5jb3VudCk7Ci0gICAgYXV0byBhdHRhY2htZW50ID0gcmV0YWluUHRy
KFtkcmFnZ2luZ1NpbXVsYXRvciBpbnNlcnRlZEF0dGFjaG1lbnRzXS5maXJzdE9iamVjdCk7Cisg
ICAgRVhQRUNUX0VRKDFVLCBbZHJhZ0FuZERyb3BTaW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50
c10uY291bnQpOworICAgIEVYUEVDVF9FUSgwVSwgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHJlbW92
ZWRBdHRhY2htZW50c10uY291bnQpOworICAgIGF1dG8gYXR0YWNobWVudCA9IHJldGFpblB0cihb
ZHJhZ0FuZERyb3BTaW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10uZmlyc3RPYmplY3QpOwog
CiAgICAgYXV0byBzaXplID0gcGxhdGZvcm1JbWFnZVdpdGhEYXRhKFthdHRhY2htZW50IHN5bmNo
cm9ub3VzbHlSZXF1ZXN0RGF0YTpuaWxdKS5zaXplOwogICAgIEVYUEVDVF9FUSgyMTUuLCBzaXpl
LndpZHRoKTsKQEAgLTEyNjAsMTQgKzEyNjAsMTQgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0c0lP
UywgSW5zZXJ0RHJvcHBlZFJpY2hBbmRQbGFpblRleHRGaWxlc0FzQXR0YWNobWVudHMpCiAgICAg
W3BsYWluVGV4dEl0ZW0gc2V0U3VnZ2VzdGVkTmFtZTpAIndvcmxkLnR4dCJdOwogCiAgICAgYXV0
byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOwotICAgIGF1dG8gZHJh
Z2dpbmdTaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkcmFnZ2luZ1NpbXVsYXRv
ciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgcmljaFRleHRJdGVtLmdldCgpLCBwbGFpblRl
eHRJdGVtLmdldCgpIF1dOwotICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRa
ZXJvIHRvOkNHUG9pbnRNYWtlKDUwLCA1MCldOworICAgIGF1dG8gZHJhZ0FuZERyb3BTaW11bGF0
b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmll
dzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHNldEV4dGVybmFs
SXRlbVByb3ZpZGVyczpAWyByaWNoVGV4dEl0ZW0uZ2V0KCksIHBsYWluVGV4dEl0ZW0uZ2V0KCkg
XV07CisgICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludFplcm8gdG86Q0dQ
b2ludE1ha2UoNTAsIDUwKV07CiAKLSAgICBFWFBFQ1RfRVEoMlUsIFtkcmFnZ2luZ1NpbXVsYXRv
ciBpbnNlcnRlZEF0dGFjaG1lbnRzXS5jb3VudCk7Ci0gICAgRVhQRUNUX0VRKDBVLCBbZHJhZ2dp
bmdTaW11bGF0b3IgcmVtb3ZlZEF0dGFjaG1lbnRzXS5jb3VudCk7CisgICAgRVhQRUNUX0VRKDJV
LCBbZHJhZ0FuZERyb3BTaW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10uY291bnQpOworICAg
IEVYUEVDVF9FUSgwVSwgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHJlbW92ZWRBdHRhY2htZW50c10u
Y291bnQpOwogCi0gICAgZm9yIChfV0tBdHRhY2htZW50ICphdHRhY2htZW50IGluIFtkcmFnZ2lu
Z1NpbXVsYXRvciBpbnNlcnRlZEF0dGFjaG1lbnRzXSkgeworICAgIGZvciAoX1dLQXR0YWNobWVu
dCAqYXR0YWNobWVudCBpbiBbZHJhZ0FuZERyb3BTaW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50
c10pIHsKICAgICAgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CiAgICAgICAgIEVYUEVDVF9HVChb
YXR0YWNobWVudCBzeW5jaHJvbm91c2x5UmVxdWVzdERhdGE6JmVycm9yXS5sZW5ndGgsIDBVKTsK
ICAgICAgICAgRVhQRUNUX1RSVUUoIWVycm9yKTsKQEAgLTEyOTMsMTMgKzEyOTMsMTMgQEAgVEVT
VChXS0F0dGFjaG1lbnRUZXN0c0lPUywgSW5zZXJ0RHJvcHBlZFppcEFyY2hpdmVBc0F0dGFjaG1l
bnQpCiAgICAgW2l0ZW0gc2V0U3VnZ2VzdGVkTmFtZTpAImFyY2hpdmUuemlwIl07CiAKICAgICBh
dXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7Ci0gICAgYXV0byBk
cmFnZ2luZ1NpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxs
b2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RyYWdnaW5nU2ltdWxh
dG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtLmdldCgpIF1dOwotICAgIFtkcmFn
Z2luZ1NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRaZXJvIHRvOkNHUG9pbnRNYWtlKDUwLCA1MCld
OworICAgIGF1dG8gZHJhZ0FuZERyb3BTaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BT
aW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW2Ry
YWdBbmREcm9wU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtLmdldCgp
IF1dOworICAgIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRaZXJvIHRvOkNH
UG9pbnRNYWtlKDUwLCA1MCldOwogCi0gICAgRVhQRUNUX0VRKDFVLCBbZHJhZ2dpbmdTaW11bGF0
b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10uY291bnQpOwotICAgIEVYUEVDVF9FUSgwVSwgW2RyYWdn
aW5nU2ltdWxhdG9yIHJlbW92ZWRBdHRhY2htZW50c10uY291bnQpOwotICAgIFtbZHJhZ2dpbmdT
aW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10uZmlyc3RPYmplY3QgZXhwZWN0UmVxdWVzdGVk
RGF0YVRvQmU6ZGF0YV07CisgICAgRVhQRUNUX0VRKDFVLCBbZHJhZ0FuZERyb3BTaW11bGF0b3Ig
aW5zZXJ0ZWRBdHRhY2htZW50c10uY291bnQpOworICAgIEVYUEVDVF9FUSgwVSwgW2RyYWdBbmRE
cm9wU2ltdWxhdG9yIHJlbW92ZWRBdHRhY2htZW50c10uY291bnQpOworICAgIFtbZHJhZ0FuZERy
b3BTaW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10uZmlyc3RPYmplY3QgZXhwZWN0UmVxdWVz
dGVkRGF0YVRvQmU6ZGF0YV07CiAgICAgRVhQRUNUX0VRKDEsIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhdHRhY2htZW50
JykubGVuZ3RoIl0uaW50VmFsdWUpOwogICAgIEVYUEVDVF9XS19TVFJFUSgiYXJjaGl2ZS56aXAi
LCBbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidGl0bGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJh
dHRhY2htZW50Il0pOwogICAgIEVYUEVDVF9XS19TVFJFUSgiYXBwbGljYXRpb24vemlwIiwgW3dl
YlZpZXcgdmFsdWVPZkF0dHJpYnV0ZTpAInR5cGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2ht
ZW50Il0pOwpAQCAtMTMyMywxNCArMTMyMywxNCBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9T
LCBJbnNlcnREcm9wcGVkSXRlbVByb3ZpZGVyc0luT3JkZXIpCiAgICAgW3NlY29uZEF0dGFjaG1l
bnRJdGVtIHNldFN1Z2dlc3RlZE5hbWU6QCJzZWNvbmQucGRmIl07CiAKICAgICBhdXRvIHdlYlZp
ZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7Ci0gICAgYXV0byBkcmFnZ2luZ1Np
bXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RyYWdnaW5nU2ltdWxhdG9yIHNldEV4
dGVybmFsSXRlbVByb3ZpZGVyczpAWyBmaXJzdEF0dGFjaG1lbnRJdGVtLmdldCgpLCBpbmxpbmVU
ZXh0SXRlbS5nZXQoKSwgc2Vjb25kQXR0YWNobWVudEl0ZW0uZ2V0KCkgXV07Ci0gICAgW2RyYWdn
aW5nU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludFplcm8gdG86Q0dQb2ludE1ha2UoNTAsIDUwKV07
CisgICAgYXV0byBkcmFnQW5kRHJvcFNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNp
bXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbZHJh
Z0FuZERyb3BTaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGZpcnN0QXR0YWNo
bWVudEl0ZW0uZ2V0KCksIGlubGluZVRleHRJdGVtLmdldCgpLCBzZWNvbmRBdHRhY2htZW50SXRl
bS5nZXQoKSBdXTsKKyAgICBbZHJhZ0FuZERyb3BTaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50WmVy
byB0bzpDR1BvaW50TWFrZSg1MCwgNTApXTsKIAotICAgIEVYUEVDVF9FUSgyVSwgW2RyYWdnaW5n
U2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVudHNdLmNvdW50KTsKLSAgICBFWFBFQ1RfRVEoMFUs
IFtkcmFnZ2luZ1NpbXVsYXRvciByZW1vdmVkQXR0YWNobWVudHNdLmNvdW50KTsKKyAgICBFWFBF
Q1RfRVEoMlUsIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBpbnNlcnRlZEF0dGFjaG1lbnRzXS5jb3Vu
dCk7CisgICAgRVhQRUNUX0VRKDBVLCBbZHJhZ0FuZERyb3BTaW11bGF0b3IgcmVtb3ZlZEF0dGFj
aG1lbnRzXS5jb3VudCk7CiAKLSAgICBmb3IgKF9XS0F0dGFjaG1lbnQgKmF0dGFjaG1lbnQgaW4g
W2RyYWdnaW5nU2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVudHNdKSB7CisgICAgZm9yIChfV0tB
dHRhY2htZW50ICphdHRhY2htZW50IGluIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBpbnNlcnRlZEF0
dGFjaG1lbnRzXSkgewogICAgICAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKICAgICAgICAgRVhQ
RUNUX0dUKFthdHRhY2htZW50IHN5bmNocm9ub3VzbHlSZXF1ZXN0RGF0YTomZXJyb3JdLmxlbmd0
aCwgMFUpOwogICAgICAgICBFWFBFQ1RfVFJVRSghZXJyb3IpOwpAQCAtMTM1NSwyOCArMTM1NSwy
OCBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBEcmFnQXR0YWNobWVudEluc2VydGVkQXNG
aWxlKQogICAgIFtpdGVtIHNldFN1Z2dlc3RlZE5hbWU6QCJkb2N1bWVudC5wZGYiXTsKIAogICAg
IGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKLSAgICBhdXRv
IGRyYWdnaW5nU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBh
bGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZHJhZ2dpbmdTaW11
bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW0uZ2V0KCkgXV07Ci0gICAgW2Ry
YWdnaW5nU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludFplcm8gdG86Q0dQb2ludE1ha2UoNTAsIDUw
KV07CisgICAgYXV0byBkcmFnQW5kRHJvcFNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJv
cFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBb
ZHJhZ0FuZERyb3BTaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW0uZ2V0
KCkgXV07CisgICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludFplcm8gdG86
Q0dQb2ludE1ha2UoNTAsIDUwKV07CiAKICAgICAvLyBGaXJzdCwgdmVyaWZ5IHRoYXQgdGhlIGF0
dGFjaG1lbnQgd2FzIHN1Y2Nlc3NmdWxseSBkcm9wcGVkLgotICAgIEVYUEVDVF9FUSgxVSwgW2Ry
YWdnaW5nU2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVudHNdLmNvdW50KTsKLSAgICBfV0tBdHRh
Y2htZW50ICphdHRhY2htZW50ID0gW2RyYWdnaW5nU2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVu
dHNdLmZpcnN0T2JqZWN0OworICAgIEVYUEVDVF9FUSgxVSwgW2RyYWdBbmREcm9wU2ltdWxhdG9y
IGluc2VydGVkQXR0YWNobWVudHNdLmNvdW50KTsKKyAgICBfV0tBdHRhY2htZW50ICphdHRhY2ht
ZW50ID0gW2RyYWdBbmREcm9wU2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVudHNdLmZpcnN0T2Jq
ZWN0OwogICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOmRhdGEuZ2V0KCld
OwogICAgIEVYUEVDVF9XS19TVFJFUSgiZG9jdW1lbnQucGRmIiwgW3dlYlZpZXcgdmFsdWVPZkF0
dHJpYnV0ZTpAInRpdGxlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKICAgICBF
WFBFQ1RfV0tfU1RSRVEoImFwcGxpY2F0aW9uL3BkZiIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1
dGU6QCJ0eXBlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKIAogICAgIFt3ZWJW
aWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygp
IiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOwotICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBzZXRFeHRl
cm5hbEl0ZW1Qcm92aWRlcnM6QFsgXV07Ci0gICAgW2RyYWdnaW5nU2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoMjUsIDI1KSB0bzpDR1BvaW50TWFrZSgtMTAwLCAtMTAwKV07CisgICAgW2Ry
YWdBbmREcm9wU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBdXTsKKyAgICBb
ZHJhZ0FuZERyb3BTaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyNSwgMjUpIHRvOkNHUG9p
bnRNYWtlKC0xMDAsIC0xMDApXTsKIAogICAgIC8vIE5leHQsIHZlcmlmeSB0aGF0IGRyYWdnaW5n
IHRoZSBhdHRhY2htZW50IHByb2R1Y2VzIGFuIGl0ZW0gcHJvdmlkZXIgd2l0aCBhIFBERiBhdHRh
Y2htZW50LgotICAgIEVYUEVDVF9FUSgxVSwgW2RyYWdnaW5nU2ltdWxhdG9yIHNvdXJjZUl0ZW1Q
cm92aWRlcnNdLmNvdW50KTsKLSAgICBOU0l0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyID0gW2Ry
YWdnaW5nU2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0OworICAgIEVY
UEVDVF9FUSgxVSwgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmNv
dW50KTsKKyAgICBOU0l0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyID0gW2RyYWdBbmREcm9wU2lt
dWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0OwogICAgIEVYUEVDVF9FUShV
SVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlQXR0YWNobWVudCwgaXRlbVByb3ZpZGVyLnByZWZl
cnJlZFByZXNlbnRhdGlvblN0eWxlKTsKICAgICBbaXRlbVByb3ZpZGVyIGV4cGVjdFR5cGU6KE5T
U3RyaW5nICopa1VUVHlwZVBERiB3aXRoRGF0YTpkYXRhLmdldCgpXTsKICAgICBFWFBFQ1RfV0tf
U1RSRVEoImRvY3VtZW50LnBkZiIsIFtpdGVtUHJvdmlkZXIgc3VnZ2VzdGVkTmFtZV0pOwotICAg
IFtkcmFnZ2luZ1NpbXVsYXRvciBlbmREYXRhVHJhbnNmZXJdOworICAgIFtkcmFnQW5kRHJvcFNp
bXVsYXRvciBlbmREYXRhVHJhbnNmZXJdOwogfQogCiBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9T
LCBEcmFnQXR0YWNobWVudEluc2VydGVkQXNEYXRhKQpAQCAtMTM5NiwxNiArMTM5NiwxNiBAQCBU
RVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBEcmFnQXR0YWNobWVudEluc2VydGVkQXNEYXRhKQog
ICAgIEVYUEVDVF9XS19TVFJFUSgiYXBwbGljYXRpb24vcGRmIiwgW3dlYlZpZXcgdmFsdWVPZkF0
dHJpYnV0ZTpAInR5cGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2htZW50Il0pOwogCiAgICAg
W3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFu
Z2VzKCkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07Ci0gICAgYXV0byBkcmFnZ2luZ1NpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RyYWdnaW5nU2ltdWxhdG9yIHJ1bkZyb206Q0dQ
b2ludE1ha2UoMjUsIDI1KSB0bzpDR1BvaW50TWFrZSgtMTAwLCAtMTAwKV07CisgICAgYXV0byBk
cmFnQW5kRHJvcFNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbZHJhZ0FuZERyb3BTaW11
bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyNSwgMjUpIHRvOkNHUG9pbnRNYWtlKC0xMDAsIC0x
MDApXTsKIAogICAgIC8vIE5leHQsIHZlcmlmeSB0aGF0IGRyYWdnaW5nIHRoZSBhdHRhY2htZW50
IHByb2R1Y2VzIGFuIGl0ZW0gcHJvdmlkZXIgd2l0aCBhIFBERiBhdHRhY2htZW50LgotICAgIEVY
UEVDVF9FUSgxVSwgW2RyYWdnaW5nU2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmNvdW50
KTsKLSAgICBOU0l0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyID0gW2RyYWdnaW5nU2ltdWxhdG9y
IHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0OworICAgIEVYUEVDVF9FUSgxVSwgW2Ry
YWdBbmREcm9wU2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmNvdW50KTsKKyAgICBOU0l0
ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyID0gW2RyYWdBbmREcm9wU2ltdWxhdG9yIHNvdXJjZUl0
ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0OwogICAgIEVYUEVDVF9FUShVSVByZWZlcnJlZFByZXNl
bnRhdGlvblN0eWxlQXR0YWNobWVudCwgaXRlbVByb3ZpZGVyLnByZWZlcnJlZFByZXNlbnRhdGlv
blN0eWxlKTsKICAgICBbaXRlbVByb3ZpZGVyIGV4cGVjdFR5cGU6KE5TU3RyaW5nICopa1VUVHlw
ZVBERiB3aXRoRGF0YTpkYXRhLmdldCgpXTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoImRvY3VtZW50
LnBkZiIsIFtpdGVtUHJvdmlkZXIgc3VnZ2VzdGVkTmFtZV0pOwotICAgIFtkcmFnZ2luZ1NpbXVs
YXRvciBlbmREYXRhVHJhbnNmZXJdOworICAgIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBlbmREYXRh
VHJhbnNmZXJdOwogfQogCiBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBEcmFnSW5QbGFjZVZp
ZGVvQXR0YWNobWVudEVsZW1lbnQpCkBAIC0xNDI1LDE1ICsxNDI1LDE1IEBAIFRFU1QoV0tBdHRh
Y2htZW50VGVzdHNJT1MsIERyYWdJblBsYWNlVmlkZW9BdHRhY2htZW50RWxlbWVudCkKICAgICBF
WFBFQ1RfV0tfU1RSRVEoInZpZGVvL21wNCIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0
eXBlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKIAogICAgIFt3ZWJWaWV3IGV2
YWx1YXRlSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIiBjb21w
bGV0aW9uSGFuZGxlcjpuaWxdOwotICAgIGF1dG8gZHJhZ2dpbmdTaW11bGF0b3IgPSBhZG9wdE5T
KFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmll
dy5nZXQoKV0pOwotICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDI1
LCAyNSkgdG86Q0dQb2ludE1ha2UoLTEwMCwgLTEwMCldOworICAgIGF1dG8gZHJhZ0FuZERyb3BT
aW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRo
V2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHJ1bkZy
b206Q0dQb2ludE1ha2UoMjUsIDI1KSB0bzpDR1BvaW50TWFrZSgtMTAwLCAtMTAwKV07CiAKLSAg
ICBFWFBFQ1RfRVEoMVUsIFtkcmFnZ2luZ1NpbXVsYXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5j
b3VudCk7Ci0gICAgTlNJdGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciA9IFtkcmFnZ2luZ1NpbXVs
YXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdDsKKyAgICBFWFBFQ1RfRVEoMVUs
IFtkcmFnQW5kRHJvcFNpbXVsYXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5jb3VudCk7CisgICAg
TlNJdGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciA9IFtkcmFnQW5kRHJvcFNpbXVsYXRvciBzb3Vy
Y2VJdGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdDsKICAgICBFWFBFQ1RfRVEoVUlQcmVmZXJyZWRQ
cmVzZW50YXRpb25TdHlsZUF0dGFjaG1lbnQsIGl0ZW1Qcm92aWRlci5wcmVmZXJyZWRQcmVzZW50
YXRpb25TdHlsZSk7CiAgICAgW2l0ZW1Qcm92aWRlciBleHBlY3RUeXBlOihOU1N0cmluZyAqKWtV
VFR5cGVNUEVHNCB3aXRoRGF0YTpkYXRhLmdldCgpXTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoInZp
ZGVvLm1wNCIsIFtpdGVtUHJvdmlkZXIgc3VnZ2VzdGVkTmFtZV0pOwotICAgIFtkcmFnZ2luZ1Np
bXVsYXRvciBlbmREYXRhVHJhbnNmZXJdOworICAgIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBlbmRE
YXRhVHJhbnNmZXJdOwogfQogCiBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBNb3ZlQXR0YWNo
bWVudEVsZW1lbnRBc0ljb25CeURyYWdnaW5nKQpAQCAtMTQ1MiwxNiArMTQ1MiwxNiBAQCBURVNU
KFdLQXR0YWNobWVudFRlc3RzSU9TLCBNb3ZlQXR0YWNobWVudEVsZW1lbnRBc0ljb25CeURyYWdn
aW5nKQogICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiSW5z
ZXJ0UGFyYWdyYXBoIiBhcmd1bWVudDpuaWxdOwogICAgIFt3ZWJWaWV3IGV4cGVjdEVsZW1lbnRU
YWc6QCJBVFRBQ0hNRU5UIiB0b0NvbWVCZWZvcmU6QCJTVFJPTkciXTsKIAotICAgIGF1dG8gZHJh
Z2dpbmdTaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkcmFnZ2luZ1NpbXVsYXRv
ciBydW5Gcm9tOkNHUG9pbnRNYWtlKDI1LCAyNSkgdG86Q0dQb2ludE1ha2UoMjUsIDQyNSldOwor
ICAgIGF1dG8gZHJhZ0FuZERyb3BTaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11
bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW2RyYWdB
bmREcm9wU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjUsIDI1KSB0bzpDR1BvaW50TWFr
ZSgyNSwgNDI1KV07CiAKLSAgICBhdHRhY2htZW50ID0gW1tkcmFnZ2luZ1NpbXVsYXRvciBpbnNl
cnRlZEF0dGFjaG1lbnRzXSBmaXJzdE9iamVjdF07CisgICAgYXR0YWNobWVudCA9IFtbZHJhZ0Fu
ZERyb3BTaW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10gZmlyc3RPYmplY3RdOwogICAgIFth
dHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOmRhdGEuZ2V0KCldOwogICAgIEVYUEVD
VF9XS19TVFJFUSgiZG9jdW1lbnQucGRmIiwgW3dlYlZpZXcgdmFsdWVPZkF0dHJpYnV0ZTpAInRp
dGxlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKICAgICBFWFBFQ1RfV0tfU1RS
RVEoImFwcGxpY2F0aW9uL3BkZiIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0eXBlIiBm
b3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKIAogICAgIFt3ZWJWaWV3IGV4cGVjdEVs
ZW1lbnRUYWc6QCJTVFJPTkciIHRvQ29tZUJlZm9yZTpAIkFUVEFDSE1FTlQiXTsKLSAgICBbZHJh
Z2dpbmdTaW11bGF0b3IgZW5kRGF0YVRyYW5zZmVyXTsKKyAgICBbZHJhZ0FuZERyb3BTaW11bGF0
b3IgZW5kRGF0YVRyYW5zZmVyXTsKIH0KIAogVEVTVChXS0F0dGFjaG1lbnRUZXN0c0lPUywgTW92
ZUluUGxhY2VBdHRhY2htZW50RWxlbWVudEJ5RHJhZ2dpbmcpCkBAIC0xNDgxLDE2ICsxNDgxLDE2
IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIE1vdmVJblBsYWNlQXR0YWNobWVudEVsZW1l
bnRCeURyYWdnaW5nKQogICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21t
YW5kOkAiSW5zZXJ0UGFyYWdyYXBoIiBhcmd1bWVudDpuaWxdOwogICAgIFt3ZWJWaWV3IGV4cGVj
dEVsZW1lbnRUYWc6QCJBVFRBQ0hNRU5UIiB0b0NvbWVCZWZvcmU6QCJTVFJPTkciXTsKIAotICAg
IGF1dG8gZHJhZ2dpbmdTaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkcmFnZ2lu
Z1NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDI1LCAyNSkgdG86Q0dQb2ludE1ha2UoMjUs
IDQyNSldOworICAgIGF1dG8gZHJhZ0FuZERyb3BTaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0Fu
ZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Cisg
ICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjUsIDI1KSB0bzpD
R1BvaW50TWFrZSgyNSwgNDI1KV07CiAKLSAgICBhdHRhY2htZW50ID0gW1tkcmFnZ2luZ1NpbXVs
YXRvciBpbnNlcnRlZEF0dGFjaG1lbnRzXSBmaXJzdE9iamVjdF07CisgICAgYXR0YWNobWVudCA9
IFtbZHJhZ0FuZERyb3BTaW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10gZmlyc3RPYmplY3Rd
OwogICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOmRhdGEuZ2V0KCldOwog
ICAgIEVYUEVDVF9XS19TVFJFUSgiaWNvbi5wbmciLCBbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRl
OkAidGl0bGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2htZW50Il0pOwogICAgIEVYUEVDVF9X
S19TVFJFUSgiaW1hZ2UvcG5nIiwgW3dlYlZpZXcgdmFsdWVPZkF0dHJpYnV0ZTpAInR5cGUiIGZv
clF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2htZW50Il0pOwogCiAgICAgW3dlYlZpZXcgZXhwZWN0RWxl
bWVudFRhZzpAIlNUUk9ORyIgdG9Db21lQmVmb3JlOkAiQVRUQUNITUVOVCJdOwotICAgIFtkcmFn
Z2luZ1NpbXVsYXRvciBlbmREYXRhVHJhbnNmZXJdOworICAgIFtkcmFnQW5kRHJvcFNpbXVsYXRv
ciBlbmREYXRhVHJhbnNmZXJdOwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRGF0YUludGVyYWN0aW9uVGVzdHMu
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9EYXRhSW50ZXJhY3Rpb25UZXN0cy5t
bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTViYTg3YmJiNDFkYWY5NzM3NDMxZDA4
YTg2ZGFjMDJkMWE1YTlhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9EYXRhSW50ZXJhY3Rpb25UZXN0
cy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDE5MTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQotCi0jaW1wb3J0
ICJEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuaCIKLSNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVz
LmgiCi0jaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0jaW1wb3J0ICJVSUtpdFNQSS5oIgotI2lt
cG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbkV4dHJhcy5oIgotI2ltcG9ydCA8TW9iaWxlQ29y
ZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2aWNlcy5oPgotI2ltcG9ydCA8VUlLaXQvTlNJdGVtUHJv
dmlkZXIrVUlLaXRBZGRpdGlvbnMuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUHJp
dmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmg+Ci0jaW1w
b3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dl
YlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYkl0ZW1Qcm92
aWRlclBhc3RlYm9hcmQuaD4KLSNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24uaD4KLSNpbXBvcnQgPHd0Zi9TZWNvbmRzLmg+Ci0KLXR5cGVkZWYgdm9pZCAoXkZpbGVM
b2FkQ29tcGxldGlvbkJsb2NrKShOU1VSTCAqLCBCT09MLCBOU0Vycm9yICopOwotdHlwZWRlZiB2
b2lkICheRGF0YUxvYWRDb21wbGV0aW9uQmxvY2spKE5TRGF0YSAqLCBOU0Vycm9yICopOwotdHlw
ZWRlZiB2b2lkICheVUlJdGVtUHJvdmlkZXJEYXRhTG9hZENvbXBsZXRpb25CbG9jaykoTlNEYXRh
ICosIE5TRXJyb3IgKik7Ci0KLSNpZiAhVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLQotQGludGVy
ZmFjZSBVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9ucyA6IE5TT2JqZWN0Ci1AZW5k
Ci0KLSNlbmRpZgotCi1AaW50ZXJmYWNlIFVJSXRlbVByb3ZpZGVyKCkKLSsgKFVJSXRlbVByb3Zp
ZGVyICopaXRlbVByb3ZpZGVyV2l0aFVSTDooTlNVUkwgKil1cmwgdGl0bGU6KE5TU3RyaW5nICop
dGl0bGU7Ci0tICh2b2lkKSByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlm
aWVyOihOU1N0cmluZyAqKXR5cGVJZGVudGlmaWVyIG9wdGlvbnM6KFVJSXRlbVByb3ZpZGVyUmVw
cmVzZW50YXRpb25PcHRpb25zKilvcHRpb25zIGxvYWRIYW5kbGVyOihOU1Byb2dyZXNzICogKF4p
KHZvaWQgKF5VSUl0ZW1Qcm92aWRlckRhdGFMb2FkQ29tcGxldGlvbkJsb2NrKShOU0RhdGEgKml0
ZW0sIE5TRXJyb3IgKmVycm9yKSkpIGxvYWRIYW5kbGVyOwotQGVuZAotCi1zdGF0aWMgTlNTdHJp
bmcgKkluamVjdGVkQnVuZGxlUGFzdGVib2FyZERhdGFUeXBlID0gQCJvcmcud2Via2l0LmRhdGEi
OwotCi1zdGF0aWMgVUlJbWFnZSAqdGVzdEljb25JbWFnZSgpCi17Ci0gICAgcmV0dXJuIFtVSUlt
YWdlIGltYWdlTmFtZWQ6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcy9pY29uLnBuZyJdOwotfQot
Ci1zdGF0aWMgTlNEYXRhICp0ZXN0WklQQXJjaGl2ZSgpCi17Ci0gICAgTlNVUkwgKnppcEZpbGVV
UkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiY29tcHJlc3NlZC1m
aWxlcyIgd2l0aEV4dGVuc2lvbjpAInppcCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5y
ZXNvdXJjZXMiXTsKLSAgICByZXR1cm4gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZVUkw6emlw
RmlsZVVSTF07Ci19Ci0KLUBpbXBsZW1lbnRhdGlvbiBVSUl0ZW1Qcm92aWRlciAoRGF0YUludGVy
YWN0aW9uVGVzdHMpCi0KLS0gKHZvaWQpcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBl
SWRlbnRpZmllcjooTlNTdHJpbmcgKil0eXBlSWRlbnRpZmllciB3aXRoRGF0YTooTlNEYXRhICop
ZGF0YQotewotICAgIFJldGFpblB0cjxOU0RhdGE+IHJldGFpbmVkRGF0YSA9IGRhdGE7Ci0gICAg
W3NlbGYgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjp0eXBlSWRl
bnRpZmllciB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlz
aWJpbGl0eUFsbCBsb2FkSGFuZGxlcjogW3JldGFpbmVkRGF0YV0gKERhdGFMb2FkQ29tcGxldGlv
bkJsb2NrIGJsb2NrKSAtPiBOU1Byb2dyZXNzICogewotICAgICAgICBibG9jayhyZXRhaW5lZERh
dGEuZ2V0KCksIG5pbCk7Ci0gICAgICAgIHJldHVybiBbTlNQcm9ncmVzcyBkaXNjcmV0ZVByb2dy
ZXNzV2l0aFRvdGFsVW5pdENvdW50OjEwMF07Ci0gICAgfV07Ci19Ci0KLUBlbmQKLQotQGltcGxl
bWVudGF0aW9uIFRlc3RXS1dlYlZpZXcgKERhdGFJbnRlcmFjdGlvblRlc3RzKQotCi0tIChCT09M
KWVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50Ci17Ci0gICAgcmV0dXJuIFtzZWxmIHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCIhIWVkaXRvci5xdWVyeVNlbGVjdG9yKCdpbWcnKSJdLmJv
b2xWYWx1ZTsKLX0KLQotLSAoTlNTdHJpbmcgKillZGl0b3JWYWx1ZQotewotICAgIHJldHVybiBb
c2VsZiBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnZhbHVlIl07Ci19Ci0K
LUBlbmQKLQotc3RhdGljIE5TVmFsdWUgKm1ha2VDR1JlY3RWYWx1ZShDR0Zsb2F0IHgsIENHRmxv
YXQgeSwgQ0dGbG9hdCB3aWR0aCwgQ0dGbG9hdCBoZWlnaHQpCi17Ci0gICAgcmV0dXJuIFtOU1Zh
bHVlIHZhbHVlV2l0aENHUmVjdDpDR1JlY3RNYWtlKHgsIHksIHdpZHRoLCBoZWlnaHQpXTsKLX0K
LQotc3RhdGljIHZvaWQgY2hlY2tDR1JlY3RJc0VxdWFsVG9DR1JlY3RXaXRoTG9nZ2luZyhDR1Jl
Y3QgZXhwZWN0ZWQsIENHUmVjdCBvYnNlcnZlZCkKLXsKLSAgICBCT09MIGlzRXF1YWwgPSBDR1Jl
Y3RFcXVhbFRvUmVjdChleHBlY3RlZCwgb2JzZXJ2ZWQpOwotICAgIEVYUEVDVF9UUlVFKGlzRXF1
YWwpOwotICAgIGlmICghaXNFcXVhbCkKLSAgICAgICAgTlNMb2coQCJFeHBlY3RlZDogJUAgYnV0
IG9ic2VydmVkOiAlQCIsIE5TU3RyaW5nRnJvbUNHUmVjdChleHBlY3RlZCksIE5TU3RyaW5nRnJv
bUNHUmVjdChvYnNlcnZlZCkpOwotfQotCi1zdGF0aWMgdm9pZCBjaGVja1NlbGVjdGlvblJlY3Rz
V2l0aExvZ2dpbmcoTlNBcnJheSAqZXhwZWN0ZWQsIE5TQXJyYXkgKm9ic2VydmVkKQotewotICAg
IGlmICghW2V4cGVjdGVkIGlzRXF1YWxUb0FycmF5Om9ic2VydmVkXSkKLSAgICAgICAgTlNMb2co
QCJFeHBlY3RlZCBzZWxlY3Rpb24gcmVjdHM6ICVAIGJ1dCBvYnNlcnZlZDogJUAiLCBleHBlY3Rl
ZCwgb2JzZXJ2ZWQpOwotICAgIEVYUEVDVF9UUlVFKFtleHBlY3RlZCBpc0VxdWFsVG9BcnJheTpv
YnNlcnZlZF0pOwotfQotCi1zdGF0aWMgdm9pZCBjaGVja1JpY2hUZXh0VHlwZVByZWNlZGVzUGxh
aW5UZXh0VHlwZShEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgKnNpbXVsYXRvcikKLXsKLSAgICAv
LyBBdCBsZWFzdCBvbmUgb2YgImNvbS5hcHBsZS5mbGF0LXJ0ZmQiIG9yICJwdWJsaWMucnRmIiBp
cyBleHBlY3RlZCB0byBoYXZlIGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gInB1YmxpYy51dGY4LXBs
YWluLXRleHQiLgotICAgIE5TQXJyYXkgKnJlZ2lzdGVyZWRUeXBlcyA9IFtzaW11bGF0b3Iuc291
cmNlSXRlbVByb3ZpZGVycy5maXJzdE9iamVjdCByZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzXTsK
LSAgICBhdXRvIGluZGV4T2ZSVEZUeXBlID0gW3JlZ2lzdGVyZWRUeXBlcyBpbmRleE9mT2JqZWN0
OihOU1N0cmluZyAqKWtVVFR5cGVSVEZdOwotICAgIGF1dG8gaW5kZXhPZkZsYXRSVEZEVHlwZSA9
IFtyZWdpc3RlcmVkVHlwZXMgaW5kZXhPZk9iamVjdDooTlNTdHJpbmcgKilrVVRUeXBlRmxhdFJU
RkRdOwotICAgIGF1dG8gaW5kZXhPZlBsYWluVGV4dFR5cGUgPSBbcmVnaXN0ZXJlZFR5cGVzIGlu
ZGV4T2ZPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRleHRdOwotICAgIEVYUEVD
VF9ORSgoTlNJbnRlZ2VyKWluZGV4T2ZQbGFpblRleHRUeXBlLCBOU05vdEZvdW5kKTsKLSAgICBF
WFBFQ1RfVFJVRSgoaW5kZXhPZlJURlR5cGUgIT0gTlNOb3RGb3VuZCAmJiBpbmRleE9mUlRGVHlw
ZSA8IGluZGV4T2ZQbGFpblRleHRUeXBlKSB8fCAoaW5kZXhPZkZsYXRSVEZEVHlwZSAhPSBOU05v
dEZvdW5kICYmIGluZGV4T2ZGbGF0UlRGRFR5cGUgPCBpbmRleE9mUGxhaW5UZXh0VHlwZSkpOwot
fQotCi1zdGF0aWMgdm9pZCBjaGVja0ZpcnN0VHlwZUlzUHJlc2VudEFuZFNlY29uZFR5cGVJc01p
c3NpbmcoRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yICpzaW11bGF0b3IsIENGU3RyaW5nUmVmIGZp
cnN0VHlwZSwgQ0ZTdHJpbmdSZWYgc2Vjb25kVHlwZSkKLXsKLSAgICBOU0FycmF5ICpyZWdpc3Rl
cmVkVHlwZXMgPSBbc2ltdWxhdG9yLnNvdXJjZUl0ZW1Qcm92aWRlcnMuZmlyc3RPYmplY3QgcmVn
aXN0ZXJlZFR5cGVJZGVudGlmaWVyc107Ci0gICAgRVhQRUNUX1RSVUUoW3JlZ2lzdGVyZWRUeXBl
cyBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilmaXJzdFR5cGVdKTsKLSAgICBFWFBFQ1RfRkFM
U0UoW3JlZ2lzdGVyZWRUeXBlcyBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilzZWNvbmRUeXBl
XSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNrVHlwZUlkZW50aWZpZXJJc1JlZ2lzdGVyZWRBdElu
ZGV4KERhdGFJbnRlcmFjdGlvblNpbXVsYXRvciAqc2ltdWxhdG9yLCBOU1N0cmluZyAqdHlwZSwg
TlNVSW50ZWdlciBpbmRleCkKLXsKLSAgICBOU0FycmF5ICpyZWdpc3RlcmVkVHlwZXMgPSBbc2lt
dWxhdG9yLnNvdXJjZUl0ZW1Qcm92aWRlcnMuZmlyc3RPYmplY3QgcmVnaXN0ZXJlZFR5cGVJZGVu
dGlmaWVyc107Ci0gICAgRVhQRUNUX0dUKHJlZ2lzdGVyZWRUeXBlcy5jb3VudCwgaW5kZXgpOwot
ICAgIEVYUEVDVF9XS19TVFJFUSh0eXBlLlVURjhTdHJpbmcsIFtyZWdpc3RlcmVkVHlwZXNbaW5k
ZXhdIFVURjhTdHJpbmddKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tFc3RpbWF0ZWRTaXplKERh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciAqc2ltdWxhdG9yLCBDR1NpemUgZXN0aW1hdGVkU2l6ZSkK
LXsKLSAgICBVSUl0ZW1Qcm92aWRlciAqc291cmNlSXRlbVByb3ZpZGVyID0gW3NpbXVsYXRvciBz
b3VyY2VJdGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdDsKLSAgICBFWFBFQ1RfRVEoZXN0aW1hdGVk
U2l6ZS53aWR0aCwgc291cmNlSXRlbVByb3ZpZGVyLnByZWZlcnJlZFByZXNlbnRhdGlvblNpemUu
d2lkdGgpOwotICAgIEVYUEVDVF9FUShlc3RpbWF0ZWRTaXplLmhlaWdodCwgc291cmNlSXRlbVBy
b3ZpZGVyLnByZWZlcnJlZFByZXNlbnRhdGlvblNpemUuaGVpZ2h0KTsKLX0KLQotc3RhdGljIHZv
aWQgY2hlY2tTdWdnZXN0ZWROYW1lQW5kRXN0aW1hdGVkU2l6ZShEYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IgKnNpbXVsYXRvciwgTlNTdHJpbmcgKnN1Z2dlc3RlZE5hbWUsIENHU2l6ZSBlc3RpbWF0
ZWRTaXplKQotewotICAgIFVJSXRlbVByb3ZpZGVyICpzb3VyY2VJdGVtUHJvdmlkZXIgPSBbc2lt
dWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0OwotICAgIEVYUEVDVF9XS19T
VFJFUShzdWdnZXN0ZWROYW1lLlVURjhTdHJpbmcsIHNvdXJjZUl0ZW1Qcm92aWRlci5zdWdnZXN0
ZWROYW1lLlVURjhTdHJpbmcpOwotICAgIEVYUEVDVF9FUShlc3RpbWF0ZWRTaXplLndpZHRoLCBz
b3VyY2VJdGVtUHJvdmlkZXIucHJlZmVycmVkUHJlc2VudGF0aW9uU2l6ZS53aWR0aCk7Ci0gICAg
RVhQRUNUX0VRKGVzdGltYXRlZFNpemUuaGVpZ2h0LCBzb3VyY2VJdGVtUHJvdmlkZXIucHJlZmVy
cmVkUHJlc2VudGF0aW9uU2l6ZS5oZWlnaHQpOwotfQotCi1zdGF0aWMgdm9pZCBjaGVja1N0cmlu
Z0FycmF5c0FyZUVxdWFsKE5TQXJyYXk8TlNTdHJpbmcgKj4gKmV4cGVjdGVkLCBOU0FycmF5PE5T
U3RyaW5nICo+ICpvYnNlcnZlZCkKLXsKLSAgICBFWFBFQ1RfRVEoZXhwZWN0ZWQuY291bnQsIG9i
c2VydmVkLmNvdW50KTsKLSAgICBmb3IgKE5TVUludGVnZXIgaW5kZXggPSAwOyBpbmRleCA8IGV4
cGVjdGVkLmNvdW50OyArK2luZGV4KSB7Ci0gICAgICAgIE5TU3RyaW5nICpleHBlY3RlZFN0cmlu
ZyA9IFtleHBlY3RlZCBvYmplY3RBdEluZGV4OmluZGV4XTsKLSAgICAgICAgTlNTdHJpbmcgKm9i
c2VydmVkU3RyaW5nID0gW29ic2VydmVkIG9iamVjdEF0SW5kZXg6aW5kZXhdOwotICAgICAgICBF
WFBFQ1RfV0tfU1RSRVEoZXhwZWN0ZWRTdHJpbmcsIG9ic2VydmVkU3RyaW5nKTsKLSAgICAgICAg
aWYgKCFbZXhwZWN0ZWRTdHJpbmcgaXNFcXVhbFRvU3RyaW5nOm9ic2VydmVkU3RyaW5nXSkKLSAg
ICAgICAgICAgIE5TTG9nKEAiRXhwZWN0ZWQgb2JzZXJ2ZWQgc3RyaW5nOiAlQCB0byBtYXRjaCBl
eHBlY3RlZCBzdHJpbmc6ICVAIGF0IGluZGV4OiAldHUiLCBvYnNlcnZlZFN0cmluZywgZXhwZWN0
ZWRTdHJpbmcsIGluZGV4KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNrRHJhZ0NhcmV0
UmVjdElzQ29udGFpbmVkSW5SZWN0KENHUmVjdCBjYXJldFJlY3QsIENHUmVjdCBjb250YWluZXJS
ZWN0KQotewotICAgIEJPT0wgY29udGFpbmVkID0gQ0dSZWN0Q29udGFpbnNSZWN0KGNvbnRhaW5l
clJlY3QsIGNhcmV0UmVjdCk7Ci0gICAgRVhQRUNUX1RSVUUoY29udGFpbmVkKTsKLSAgICBpZiAo
IWNvbnRhaW5lZCkKLSAgICAgICAgTlNMb2coQCJFeHBlY3RlZCBjYXJldCByZWN0OiAlQCB0byBm
aXQgd2l0aGluIGNvbnRhaW5lciByZWN0OiAlQCIsIE5TU3RyaW5nRnJvbUNHUmVjdChjYXJldFJl
Y3QpLCBOU1N0cmluZ0Zyb21DR1JlY3QoY29udGFpbmVyUmVjdCkpOwotfQotCi0jaWYgX19JUEhP
TkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMzAwCi0KLXN0YXRpYyB2b2lkIGNoZWNr
SlNPTldpdGhMb2dnaW5nKE5TU3RyaW5nICpqc29uU3RyaW5nLCBOU0RpY3Rpb25hcnkgKmV4cGVj
dGVkKQotewotICAgIEJPT0wgc3VjY2VzcyA9IFRlc3RXZWJLaXRBUEk6OlV0aWw6Ompzb25NYXRj
aGVzRXhwZWN0ZWRWYWx1ZXMoanNvblN0cmluZywgZXhwZWN0ZWQpOwotICAgIEVYUEVDVF9UUlVF
KHN1Y2Nlc3MpOwotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgTlNMb2coQCJFeHBlY3RlZCBK
U09OOiAlQCB0byBtYXRjaCB2YWx1ZXM6ICVAIiwganNvblN0cmluZywgZXhwZWN0ZWQpOwotfQot
Ci1zdGF0aWMgTlNEYXRhICp0ZXN0SWNvbkltYWdlRGF0YSgpCi17Ci0gICAgcmV0dXJuIFtOU0Rh
dGEgZGF0YVdpdGhDb250ZW50c09mVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVz
b3VyY2U6QCJpY29uIiB3aXRoRXh0ZW5zaW9uOkAicG5nIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2Vi
S2l0QVBJLnJlc291cmNlcyJdXTsKLX0KLQotc3RhdGljIHZvaWQgcnVuVGVzdFdpdGhUZW1wb3Jh
cnlUZXh0RmlsZSh2b2lkKF5ydW5UZXN0KShOU1VSTCAqZmlsZVVSTCkpCi17Ci0gICAgTlNTdHJp
bmcgKmZpbGVOYW1lID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJkcmFnLWRyb3AtdGV4
dC1maWxlLSVALnR4dCIsIFtOU1VVSUQgVVVJRF0uVVVJRFN0cmluZ107Ci0gICAgUmV0YWluUHRy
PE5TVVJMPiB0ZW1wb3JhcnlGaWxlID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNUZW1wb3Jh
cnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6ZmlsZU5hbWVdIGlz
RGlyZWN0b3J5Ok5PXTsKLSAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92
ZUl0ZW1BdFVSTDp0ZW1wb3JhcnlGaWxlLmdldCgpIGVycm9yOm5pbF07Ci0KLSAgICBOU0Vycm9y
ICplcnJvciA9IG5pbDsKLSAgICBbQCJUaGlzIGlzIGEgdGlueSBibG9iIG9mIHRleHQuIiB3cml0
ZVRvVVJMOnRlbXBvcmFyeUZpbGUuZ2V0KCkgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4
U3RyaW5nRW5jb2RpbmcgZXJyb3I6JmVycm9yXTsKLQotICAgIGlmIChlcnJvcikKLSAgICAgICAg
TlNMb2coQCJFcnJvciB3cml0aW5nIHRlbXBvcmFyeSBmaWxlOiAlQCIsIGVycm9yKTsKLQotICAg
IEB0cnkgewotICAgICAgICBydW5UZXN0KHRlbXBvcmFyeUZpbGUuZ2V0KCkpOwotICAgIH0gQGZp
bmFsbHkgewotICAgICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0
ZW1BdFVSTDp0ZW1wb3JhcnlGaWxlLmdldCgpIGVycm9yOm5pbF07Ci0gICAgfQotfQotCi1zdGF0
aWMgdm9pZCBydW5UZXN0V2l0aFRlbXBvcmFyeUZvbGRlcih2b2lkKF5ydW5UZXN0KShOU1VSTCAq
Zm9sZGVyVVJMKSkKLXsKLSAgICBOU1N0cmluZyAqZm9sZGVyTmFtZSA9IFtOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAic29tZS5kaXJlY3RvcnktJUAiLCBbTlNVVUlEIFVVSURdLlVVSURTdHJp
bmddOwotICAgIFJldGFpblB0cjxOU1VSTD4gdGVtcG9yYXJ5Rm9sZGVyID0gW05TVVJMIGZpbGVV
UkxXaXRoUGF0aDpbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhD
b21wb25lbnQ6Zm9sZGVyTmFtZV0gaXNEaXJlY3Rvcnk6WUVTXTsKLSAgICBbW05TRmlsZU1hbmFn
ZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDp0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkg
ZXJyb3I6bmlsXTsKLQotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwotICAgIE5TRmlsZU1hbmFn
ZXIgKmRlZmF1bHRNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAg
IFtkZWZhdWx0TWFuYWdlciBjcmVhdGVEaXJlY3RvcnlBdFVSTDp0ZW1wb3JhcnlGb2xkZXIuZ2V0
KCkgd2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOk5PIGF0dHJpYnV0ZXM6bmlsIGVycm9yOiZl
cnJvcl07Ci0gICAgW3Rlc3RJY29uSW1hZ2VEYXRhKCkgd3JpdGVUb1VSTDpbdGVtcG9yYXJ5Rm9s
ZGVyLmdldCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImljb24ucG5nIiBpc0RpcmVj
dG9yeTpOT10gYXRvbWljYWxseTpZRVNdOwotICAgIFt0ZXN0WklQQXJjaGl2ZSgpIHdyaXRlVG9V
Ukw6W3RlbXBvcmFyeUZvbGRlci5nZXQoKSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJh
cmNoaXZlLnppcCIgaXNEaXJlY3Rvcnk6Tk9dIGF0b21pY2FsbHk6WUVTXTsKLQotICAgIE5TVVJM
ICpmaXJzdFN1YmRpcmVjdG9yeSA9IFt0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkgVVJMQnlBcHBlbmRp
bmdQYXRoQ29tcG9uZW50OkAic3ViZGlyZWN0b3J5MSIgaXNEaXJlY3Rvcnk6WUVTXTsKLSAgICBb
ZGVmYXVsdE1hbmFnZXIgY3JlYXRlRGlyZWN0b3J5QXRVUkw6Zmlyc3RTdWJkaXJlY3Rvcnkgd2l0
aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOk5PIGF0dHJpYnV0ZXM6bmlsIGVycm9yOiZlcnJvcl07
Ci0gICAgW0AiSSBhbSBhIHRleHQgZmlsZSBpbiB0aGUgZmlyc3Qgc3ViZGlyZWN0b3J5LiIgd3Jp
dGVUb1VSTDpbZmlyc3RTdWJkaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAi
dGV4dC1maWxlLTEudHh0IiBpc0RpcmVjdG9yeTpOT10gYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6JmVycm9yXTsKLQotICAgIE5TVVJMICpzZWNvbmRT
dWJkaXJlY3RvcnkgPSBbdGVtcG9yYXJ5Rm9sZGVyLmdldCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENv
bXBvbmVudDpAInN1YmRpcmVjdG9yeTIiIGlzRGlyZWN0b3J5OllFU107Ci0gICAgW2RlZmF1bHRN
YW5hZ2VyIGNyZWF0ZURpcmVjdG9yeUF0VVJMOnNlY29uZFN1YmRpcmVjdG9yeSB3aXRoSW50ZXJt
ZWRpYXRlRGlyZWN0b3JpZXM6Tk8gYXR0cmlidXRlczpuaWwgZXJyb3I6JmVycm9yXTsKLSAgICBb
QCJJIGFtIGEgdGV4dCBmaWxlIGluIHRoZSBzZWNvbmQgc3ViZGlyZWN0b3J5LiIgd3JpdGVUb1VS
TDpbc2Vjb25kU3ViZGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAInRleHQt
ZmlsZS0yLnR4dCIgaXNEaXJlY3Rvcnk6Tk9dIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRG
OFN0cmluZ0VuY29kaW5nIGVycm9yOiZlcnJvcl07Ci0KLSAgICBpZiAoZXJyb3IpCi0gICAgICAg
IE5TTG9nKEAiRXJyb3Igd3JpdGluZyB0ZW1wb3JhcnkgZmlsZTogJUAiLCBlcnJvcik7Ci0KLSAg
ICBAdHJ5IHsKLSAgICAgICAgcnVuVGVzdCh0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkpOwotICAgIH0g
QGZpbmFsbHkgewotICAgICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92
ZUl0ZW1BdFVSTDp0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkgZXJyb3I6bmlsXTsKLSAgICB9Ci19Ci0K
LSNlbmRpZiAvLyBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAzMDAKLQot
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBJ
bWFnZVRvQ29udGVudEVkaXRhYmxlKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1
MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiaW1h
Z2UtYW5kLWNvbnRlbnRlZGl0YWJsZSJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0
aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwot
Ci0gICAgRVhQRUNUX1RSVUUoW3dlYlZpZXcgZWRpdG9yQ29udGFpbnNJbWFnZUVsZW1lbnRdKTsK
LQotICAgIE5TQXJyYXkgKm9ic2VydmVkRXZlbnROYW1lcyA9IFtkYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3Igb2JzZXJ2ZWRFdmVudE5hbWVzXTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVu
dE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbkVudGVyRXZlbnROYW1lXSk7Ci0g
ICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpEYXRhSW50
ZXJhY3Rpb25PdmVyRXZlbnROYW1lXSk7Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnRO
YW1lcyBjb250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25QZXJmb3JtT3BlcmF0aW9uRXZlbnRO
YW1lXSk7Ci0gICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RW
YWx1ZSgxLCAyMDEsIDIxNSwgMTc0KSBdLCBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGZpbmFs
U2VsZWN0aW9uUmVjdHNdKTsKLSAgICBjaGVja0ZpcnN0VHlwZUlzUHJlc2VudEFuZFNlY29uZFR5
cGVJc01pc3NpbmcoZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmdldCgpLCBrVVRUeXBlUE5HLCBr
VVRUeXBlRmlsZVVSTCk7Ci0gICAgY2hlY2tFc3RpbWF0ZWRTaXplKGRhdGFJbnRlcmFjdGlvblNp
bXVsYXRvci5nZXQoKSwgeyAyMTUsIDE3NCB9KTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25U
ZXN0cywgQ2FuU3RhcnREcmFnT25Fbm9ybW91c0ltYWdlKQotewotICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3Ry
aW5nOkAiPGltZyBzcmM9J2Vub3Jtb3VzLnN2Zyc+PC9pbWc+Il07Ci0KLSAgICBhdXRvIGRhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
YWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgMTAwKSB0bzpDR1BvaW50TWFr
ZSgxMDAsIDEwMCldOwotCi0gICAgTlNBcnJheSAqcmVnaXN0ZXJlZFR5cGVzID0gW1tkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10uZmlyc3RPYmplY3QgcmVnaXN0
ZXJlZFR5cGVJZGVudGlmaWVyc107Ci0gICAgRVhQRUNUX1dLX1NUUkVRKChOU1N0cmluZyAqKWtV
VFR5cGVTY2FsYWJsZVZlY3RvckdyYXBoaWNzLCBbcmVnaXN0ZXJlZFR5cGVzIGZpcnN0T2JqZWN0
XSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEltYWdlVG9UZXh0YXJlYSkKLXsK
LSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNo
cm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImltYWdlLWFuZC10ZXh0YXJlYSJdOwotCi0gICAg
YXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtk
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpD
R1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmll
dyBlZGl0b3JWYWx1ZV0pOwotCi0gICAgTlNBcnJheSAqb2JzZXJ2ZWRFdmVudE5hbWVzID0gW2Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBvYnNlcnZlZEV2ZW50TmFtZXNdOwotICAgIEVYUEVDVF9U
UlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uRW50
ZXJFdmVudE5hbWVdKTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRh
aW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbk92ZXJFdmVudE5hbWVdKTsKLSAgICBFWFBFQ1RfVFJV
RShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvblBlcmZv
cm1PcGVyYXRpb25FdmVudE5hbWVdKTsKLSAgICBjaGVja0ZpcnN0VHlwZUlzUHJlc2VudEFuZFNl
Y29uZFR5cGVJc01pc3NpbmcoZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmdldCgpLCBrVVRUeXBl
UE5HLCBrVVRUeXBlRmlsZVVSTCk7Ci0gICAgY2hlY2tFc3RpbWF0ZWRTaXplKGRhdGFJbnRlcmFj
dGlvblNpbXVsYXRvci5nZXQoKSwgeyAyMTUsIDE3NCB9KTsKLX0KLQotVEVTVChEYXRhSW50ZXJh
Y3Rpb25UZXN0cywgSW1hZ2VJbkxpbmtUb0lucHV0KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwg
MCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5h
bWVkOkAiaW1hZ2UtaW4tbGluay1hbmQtaW5wdXQiXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10g
aW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAz
MDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93d3cuYXBwbGUuY29tLyIsIFt3
ZWJWaWV3IGVkaXRvclZhbHVlXS5VVEY4U3RyaW5nKTsKLSAgICBjaGVja1NlbGVjdGlvblJlY3Rz
V2l0aExvZ2dpbmcoQFsgbWFrZUNHUmVjdFZhbHVlKDEwMSwgMjQxLCAyMDU3LCAyMzIpIF0sIFtk
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0c10pOwotICAgIGNoZWNr
U3VnZ2VzdGVkTmFtZUFuZEVzdGltYXRlZFNpemUoZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmdl
dCgpLCBAImljb24ucG5nIiwgeyAyMTUsIDE3NCB9KTsKLSAgICBjaGVja1R5cGVJZGVudGlmaWVy
SXNSZWdpc3RlcmVkQXRJbmRleChkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCksIChOU1N0
cmluZyAqKWtVVFR5cGVQTkcsIDApOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBJ
bWFnZUluTGlua1dpdGhvdXRIUkVGVG9JbnB1dCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAs
IDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1l
ZDpAImltYWdlLWluLWxpbmstYW5kLWlucHV0Il07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImxpbmsuaHJlZiA9ICcnIl07Ci0KLSAgICBhdXRvIGRhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxs
b2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEw
MCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IGVkaXRvclZhbHVl
XSk7Ci0gICAgY2hlY2tFc3RpbWF0ZWRTaXplKGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5nZXQo
KSwgeyAyMTUsIDE3NCB9KTsKLSAgICBjaGVja1R5cGVJZGVudGlmaWVySXNSZWdpc3RlcmVkQXRJ
bmRleChkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCksIChOU1N0cmluZyAqKWtVVFR5cGVQ
TkcsIDApOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBJbWFnZURvZXNOb3RVc2VF
bGVtZW50U2l6ZUFzRXN0aW1hdGVkU2l6ZSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpA
ImdpZi1hbmQtZmlsZS1pbnB1dCJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdl
YlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVu
RnJvbTogeyAxMDAsIDEwMCB9IHRvOiB7IDEwMCwgMzAwIH1dOwotCi0gICAgY2hlY2tUeXBlSWRl
bnRpZmllcklzUmVnaXN0ZXJlZEF0SW5kZXgoZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmdldCgp
LCAoTlNTdHJpbmcgKilrVVRUeXBlR0lGLCAwKTsKLSAgICBjaGVja1N1Z2dlc3RlZE5hbWVBbmRF
c3RpbWF0ZWRTaXplKGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5nZXQoKSwgQCJhcHBsZS5naWYi
LCB7IDUyLCA2NCB9KTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoImFwcGxlLmdpZiAoaW1hZ2UvZ2lm
KSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudGV4dENv
bnRlbnQiXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIENvbnRlbnRFZGl0YWJs
ZVRvQ29udGVudEVkaXRhYmxlKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDAp
XSk7Ci0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0p
OwotCi0gICAgW3dlYlZpZXcgbG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVk
aXRhYmxlIl07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciB3YWl0Rm9ySW5wdXRTZXNz
aW9uXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2Uo
MTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIEVYUEVDVF9FUShbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic291cmNlLnRleHRDb250ZW50Il0u
bGVuZ3RoLCAwVUwpOwotICAgIEVYUEVDVF9XS19TVFJFUSgiSGVsbG8gd29ybGQiLCBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il0uVVRG
OFN0cmluZyk7Ci0KLSAgICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbZGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yIG9ic2VydmVkRXZlbnROYW1lc107Ci0gICAgRVhQRUNUX1RSVUUoW29i
c2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25FbnRlckV2ZW50
TmFtZV0pOwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmpl
Y3Q6RGF0YUludGVyYWN0aW9uT3ZlckV2ZW50TmFtZV0pOwotICAgIEVYUEVDVF9UUlVFKFtvYnNl
cnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uUGVyZm9ybU9wZXJh
dGlvbkV2ZW50TmFtZV0pOwotICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBt
YWtlQ0dSZWN0VmFsdWUoMSwgMjAxLCA5NjEsIDIyNykgXSwgW2RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7Ci0gICAgY2hlY2tSaWNoVGV4dFR5cGVQcmVjZWRl
c1BsYWluVGV4dFR5cGUoZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmdldCgpKTsKLX0KLQotVEVT
VChEYXRhSW50ZXJhY3Rpb25UZXN0cywgQ29udGVudEVkaXRhYmxlVG9UZXh0YXJlYSkKLXsKLSAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIGF1dG8gZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10g
aW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIFt3ZWJWaWV3IGxvYWRUZXN0
UGFnZU5hbWVkOkAiY29udGVudGVkaXRhYmxlLWFuZC10ZXh0YXJlYSJdOwotICAgIFtkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3Igd2FpdEZvcklucHV0U2Vzc2lvbl07Ci0gICAgW2RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtl
KDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAInNvdXJjZS50ZXh0Q29udGVudCJdLmxlbmd0aCwgMFVMKTsKLSAgICBFWFBF
Q1RfV0tfU1RSRVEoIkhlbGxvIHdvcmxkIiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVdLlVURjhTdHJp
bmcpOwotCi0gICAgTlNBcnJheSAqb2JzZXJ2ZWRFdmVudE5hbWVzID0gW2RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBvYnNlcnZlZEV2ZW50TmFtZXNdOwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZl
ZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uRW50ZXJFdmVudE5hbWVd
KTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRh
dGFJbnRlcmFjdGlvbk92ZXJFdmVudE5hbWVdKTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRF
dmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvblBlcmZvcm1PcGVyYXRpb25F
dmVudE5hbWVdKTsKLSAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgbWFrZUNH
UmVjdFZhbHVlKDYsIDIwMywgOTkwLCAyMzIpIF0sIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
ZmluYWxTZWxlY3Rpb25SZWN0c10pOwotICAgIGNoZWNrUmljaFRleHRUeXBlUHJlY2VkZXNQbGFp
blRleHRUeXBlKGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5nZXQoKSk7Ci19Ci0KLVRFU1QoRGF0
YUludGVyYWN0aW9uVGVzdHMsIENvbnRlbnRFZGl0YWJsZU1vdmVQYXJhZ3JhcGhzKQotewotICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgYXV0byBkYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBp
bml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotCi0gICAgW3dlYlZpZXcgbG9hZFRlc3RQ
YWdlTmFtZWQ6QCJ0d28tcGFyYWdyYXBoLWNvbnRlbnRlZGl0YWJsZSJdOwotICAgIFtkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3Igd2FpdEZvcklucHV0U2Vzc2lvbl07Ci0gICAgW2RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtl
KDI1MCwgNDUwKV07Ci0KLSAgICBOU1N0cmluZyAqZmluYWxUZXh0Q29udGVudCA9IFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXTsKLSAg
ICBOU1VJbnRlZ2VyIGZpcnN0UGFyYWdyYXBoT2Zmc2V0ID0gW2ZpbmFsVGV4dENvbnRlbnQgcmFu
Z2VPZlN0cmluZzpAIlRoaXMgaXMgdGhlIGZpcnN0IHBhcmFncmFwaCJdLmxvY2F0aW9uOwotICAg
IE5TVUludGVnZXIgc2Vjb25kUGFyYWdyYXBoT2Zmc2V0ID0gW2ZpbmFsVGV4dENvbnRlbnQgcmFu
Z2VPZlN0cmluZzpAIlRoaXMgaXMgdGhlIHNlY29uZCBwYXJhZ3JhcGgiXS5sb2NhdGlvbjsKLQot
ICAgIEVYUEVDVF9GQUxTRShmaXJzdFBhcmFncmFwaE9mZnNldCA9PSBOU05vdEZvdW5kKTsKLSAg
ICBFWFBFQ1RfRkFMU0Uoc2Vjb25kUGFyYWdyYXBoT2Zmc2V0ID09IE5TTm90Rm91bmQpOwotICAg
IEVYUEVDVF9HVChmaXJzdFBhcmFncmFwaE9mZnNldCwgc2Vjb25kUGFyYWdyYXBoT2Zmc2V0KTsK
LSAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgbWFrZUNHUmVjdFZhbHVlKDE5
MCwgMTAwLCAxMzAsIDIwKSwgbWFrZUNHUmVjdFZhbHVlKDAsIDEyMCwgMzIwLCAxMDApLCBtYWtl
Q0dSZWN0VmFsdWUoMCwgMjIwLCAyNTIsIDIwKSBdLCBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
IGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywg
RHJhZ0ltYWdlRnJvbUNvbnRlbnRFZGl0YWJsZSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAs
IDMyMCwgNTAwKV0pOwotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHRO
UyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZp
ZXcuZ2V0KCldKTsKLQotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1l
ZDpAImNvbnRlbnRlZGl0YWJsZS1hbmQtdGFyZ2V0Il07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgMTAwKSB0bzpDR1BvaW50TWFrZSgxMDAs
IDMwMCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVRKCJQQVNTIiwgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAInRhcmdldC50ZXh0Q29udGVudCJdKTsKLX0KLQotVEVTVChE
YXRhSW50ZXJhY3Rpb25UZXN0cywgVGV4dEFyZWFUb0lucHV0KQotewotICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
PSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZp
ZXc6d2ViVmlldy5nZXQoKV0pOwotCi0gICAgW3dlYlZpZXcgbG9hZFRlc3RQYWdlTmFtZWQ6QCJ0
ZXh0YXJlYS10by1pbnB1dCJdOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igd2FpdEZv
cklucHV0U2Vzc2lvbl07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNH
UG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBFWFBF
Q1RfRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNvdXJjZS52YWx1
ZSJdLmxlbmd0aCwgMFVMKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIkhlbGxvIHdvcmxkIiwgW3dl
YlZpZXcgZWRpdG9yVmFsdWVdLlVURjhTdHJpbmcpOwotICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNX
aXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUoMTAxLCAyNDEsIDk5MCwgMjMyKSBdLCBbZGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKLX0KLQotVEVTVChE
YXRhSW50ZXJhY3Rpb25UZXN0cywgU2luZ2xlUGxhaW5UZXh0V29yZFR5cGVJZGVudGlmaWVycykK
LXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIGF1dG8gZGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBh
bGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIFt3ZWJWaWV3IGxv
YWRUZXN0UGFnZU5hbWVkOkAidGV4dGFyZWEtdG8taW5wdXQiXTsKLSAgICBbZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yIHdhaXRGb3JJbnB1dFNlc3Npb25dOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2UudmFsdWUgPSAncG5ldW1vbm91bHRyYW1pY3Jv
c2NvcGljc2lsaWNvdm9sY2Fub2Nvbmlvc2lzJyJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2Uuc2VsZWN0aW9uU3RhcnQgPSAwIl07Ci0gICAgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNvdXJjZS5zZWxlY3Rpb25FbmQg
PSBzb3VyY2UudmFsdWUubGVuZ3RoIl07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBy
dW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0K
LSAgICBOU0l0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyID0gW2RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBzb3VyY2VJdGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdDsKLSAgICBOU0FycmF5ICpyZWdp
c3RlcmVkVHlwZXMgPSBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnNdOwot
ICAgIEVYUEVDVF9FUSgxVUwsIHJlZ2lzdGVyZWRUeXBlcy5jb3VudCk7Ci0gICAgRVhQRUNUX1dL
X1NUUkVRKFsoTlNTdHJpbmcgKilrVVRUeXBlVVRGOFBsYWluVGV4dCBVVEY4U3RyaW5nXSwgW3Jl
Z2lzdGVyZWRUeXBlcy5maXJzdE9iamVjdCBVVEY4U3RyaW5nXSk7Ci0gICAgRVhQRUNUX0VRKFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2UudmFsdWUiXS5sZW5n
dGgsIDBVTCk7Ci0gICAgRVhQRUNUX0VRKFVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVJbmxp
bmUsIGl0ZW1Qcm92aWRlci5wcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZSk7Ci0gICAgRVhQRUNU
X1dLX1NUUkVRKCJwbmV1bW9ub3VsdHJhbWljcm9zY29waWNzaWxpY292b2xjYW5vY29uaW9zaXMi
LCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0uVVRGOFN0cmluZyk7Ci19Ci0KLVRFU1QoRGF0YUludGVy
YWN0aW9uVGVzdHMsIFNpbmdsZVBsYWluVGV4dFVSTFR5cGVJZGVudGlmaWVycykKLXsKLSAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIGF1dG8gZGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5p
dFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIFt3ZWJWaWV3IGxvYWRUZXN0UGFn
ZU5hbWVkOkAidGV4dGFyZWEtdG8taW5wdXQiXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yIHdhaXRGb3JJbnB1dFNlc3Npb25dOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJzb3VyY2UudmFsdWUgPSAnaHR0cHM6Ly93ZWJraXQub3JnLyciXTsKLSAg
ICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic291cmNlLnNlbGVjdGlv
blN0YXJ0ID0gMCJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJzb3VyY2Uuc2VsZWN0aW9uRW5kID0gc291cmNlLnZhbHVlLmxlbmd0aCJdOwotICAgIFtkYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1Bv
aW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgTlNJdGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciA9
IFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10uZmlyc3RPYmpl
Y3Q7Ci0gICAgTlNBcnJheSAqcmVnaXN0ZXJlZFR5cGVzID0gW2l0ZW1Qcm92aWRlciByZWdpc3Rl
cmVkVHlwZUlkZW50aWZpZXJzXTsKLSAgICBFWFBFQ1RfRVEoMlVMLCByZWdpc3RlcmVkVHlwZXMu
Y291bnQpOwotICAgIEVYUEVDVF9XS19TVFJFUShbKE5TU3RyaW5nICopa1VUVHlwZVVSTCBVVEY4
U3RyaW5nXSwgW3JlZ2lzdGVyZWRUeXBlcy5maXJzdE9iamVjdCBVVEY4U3RyaW5nXSk7Ci0gICAg
RVhQRUNUX1dLX1NUUkVRKFsoTlNTdHJpbmcgKilrVVRUeXBlVVRGOFBsYWluVGV4dCBVVEY4U3Ry
aW5nXSwgW3JlZ2lzdGVyZWRUeXBlcy5sYXN0T2JqZWN0IFVURjhTdHJpbmddKTsKLSAgICBFWFBF
Q1RfRVEoMFVMLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic291cmNl
LnZhbHVlIl0ubGVuZ3RoKTsKLSAgICBFWFBFQ1RfRVEoVUlQcmVmZXJyZWRQcmVzZW50YXRpb25T
dHlsZUlubGluZSwgaXRlbVByb3ZpZGVyLnByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlKTsKLSAg
ICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd2Via2l0Lm9yZy8iLCBbd2ViVmlldyBlZGl0b3JW
YWx1ZV0uVVRGOFN0cmluZyk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIExpbmtU
b0lucHV0KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAibGluay1hbmQtaW5wdXQiXTsK
LQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsK
LSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1
MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0
cHM6Ly93d3cuYXBwbGUuY29tLyIsIFt3ZWJWaWV3IGVkaXRvclZhbHVlXS5VVEY4U3RyaW5nKTsK
LQotICAgIF9fYmxvY2sgYm9vbCBkb25lTG9hZGluZ1VSTCA9IGZhbHNlOwotICAgIFVJSXRlbVBy
b3ZpZGVyICpzb3VyY2VJdGVtUHJvdmlkZXIgPSBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNv
dXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0OwotICAgIFtzb3VyY2VJdGVtUHJvdmlkZXIg
bG9hZE9iamVjdE9mQ2xhc3M6W05TVVJMIGNsYXNzXSBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIG9i
amVjdCwgTlNFcnJvciAqZXJyb3IpIHsKLSAgICAgICAgTlNVUkwgKnVybCA9IG9iamVjdDsKLSAg
ICAgICAgRVhQRUNUX1dLX1NUUkVRKCJIZWxsbyB3b3JsZCIsIHVybC5fdGl0bGUuVVRGOFN0cmlu
ZyA/OiAiIik7Ci0gICAgICAgIGRvbmVMb2FkaW5nVVJMID0gdHJ1ZTsKLSAgICB9XTsKLSAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVMb2FkaW5nVVJMKTsKLQotICAgIE5TQXJyYXkg
Km9ic2VydmVkRXZlbnROYW1lcyA9IFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igb2JzZXJ2ZWRF
dmVudE5hbWVzXTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5z
T2JqZWN0OkRhdGFJbnRlcmFjdGlvbkVudGVyRXZlbnROYW1lXSk7Ci0gICAgRVhQRUNUX1RSVUUo
W29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25PdmVyRXZl
bnROYW1lXSk7Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09i
amVjdDpEYXRhSW50ZXJhY3Rpb25QZXJmb3JtT3BlcmF0aW9uRXZlbnROYW1lXSk7Ci0gICAgY2hl
Y2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1ZSgxMDEsIDI3Mywg
MjA1NywgMjMyKSBdLCBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVj
dHNdKTsKLSAgICBjaGVja1R5cGVJZGVudGlmaWVySXNSZWdpc3RlcmVkQXRJbmRleChkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCksIChOU1N0cmluZyAqKWtVVFR5cGVVUkwsIDApOwotfQot
Ci1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBCYWNrZ3JvdW5kSW1hZ2VMaW5rVG9JbnB1dCkK
LXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImJhY2tncm91bmQtaW1hZ2UtbGluay1hbmQt
aW5wdXQiXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhb
W0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcu
Z2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1h
a2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIEVYUEVDVF9XS19T
VFJFUSgiaHR0cHM6Ly93d3cuYXBwbGUuY29tLyIsIFt3ZWJWaWV3IGVkaXRvclZhbHVlXS5VVEY4
U3RyaW5nKTsKLQotICAgIE5TQXJyYXkgKm9ic2VydmVkRXZlbnROYW1lcyA9IFtkYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3Igb2JzZXJ2ZWRFdmVudE5hbWVzXTsKLSAgICBFWFBFQ1RfVFJVRShbb2Jz
ZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbkVudGVyRXZlbnRO
YW1lXSk7Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVj
dDpEYXRhSW50ZXJhY3Rpb25PdmVyRXZlbnROYW1lXSk7Ci0gICAgRVhQRUNUX1RSVUUoW29ic2Vy
dmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25QZXJmb3JtT3BlcmF0
aW9uRXZlbnROYW1lXSk7Ci0gICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIG1h
a2VDR1JlY3RWYWx1ZSgxMDEsIDI0MSwgMjA1NywgMjMyKSBdLCBbZGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKLSAgICBjaGVja1R5cGVJZGVudGlmaWVySXNS
ZWdpc3RlcmVkQXRJbmRleChkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuZ2V0KCksIChOU1N0cmlu
ZyAqKWtVVFR5cGVVUkwsIDApOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBDYW5Q
cmV2ZW50U3RhcnQpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAg
ICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJwcmV2ZW50LXN0YXJ0
Il07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgp
XSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEw
MCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfRVEoRGF0YUlu
dGVyYWN0aW9uQ2FuY2VsbGVkLCBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHBoYXNlXSk7Ci0g
ICAgRVhQRUNUX0ZBTFNFKFt3ZWJWaWV3IGVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk7Ci0K
LSAgICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbZGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yIG9ic2VydmVkRXZlbnROYW1lc107Ci0gICAgRVhQRUNUX0ZBTFNFKFtvYnNlcnZlZEV2ZW50
TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uRW50ZXJFdmVudE5hbWVdKTsKLSAg
ICBFWFBFQ1RfRkFMU0UoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpEYXRhSW50
ZXJhY3Rpb25PdmVyRXZlbnROYW1lXSk7Ci0gICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dn
aW5nKEBbIF0sIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0c10p
OwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBDYW5QcmV2ZW50T3BlcmF0aW9uKQot
ewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3lu
Y2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAicHJldmVudC1vcGVyYXRpb24iXTsKLQotICAg
IGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBb
ZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86
Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIEVYUEVDVF9GQUxTRShbd2ViVmlldyBlZGl0
b3JDb250YWluc0ltYWdlRWxlbWVudF0pOwotCi0gICAgTlNBcnJheSAqb2JzZXJ2ZWRFdmVudE5h
bWVzID0gW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBvYnNlcnZlZEV2ZW50TmFtZXNdOwotICAg
IEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVy
YWN0aW9uRW50ZXJFdmVudE5hbWVdKTsKLSAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5h
bWVzIGNvbnRhaW5zT2JqZWN0OkRhdGFJbnRlcmFjdGlvbk92ZXJFdmVudE5hbWVdKTsKLSAgICBj
aGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgXSwgW2RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVz
dHMsIEVudGVyQW5kTGVhdmVFdmVudHMpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAs
IDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJs
aW5rLWFuZC1pbnB1dCJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBh
ZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6
d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpD
R1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDQ1MCldOwotCi0gICAgRVhQ
RUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBlZGl0b3JWYWx1ZV0uVVRGOFN0cmluZyk7Ci0KLSAg
ICBOU0FycmF5ICpvYnNlcnZlZEV2ZW50TmFtZXMgPSBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
IG9ic2VydmVkRXZlbnROYW1lc107Ci0gICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1l
cyBjb250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rpb25FbnRlckV2ZW50TmFtZV0pOwotICAgIEVY
UEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0
aW9uT3ZlckV2ZW50TmFtZV0pOwotICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMg
Y29udGFpbnNPYmplY3Q6RGF0YUludGVyYWN0aW9uTGVhdmVFdmVudE5hbWVdKTsKLSAgICBFWFBF
Q1RfRkFMU0UoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpEYXRhSW50ZXJhY3Rp
b25QZXJmb3JtT3BlcmF0aW9uRXZlbnROYW1lXSk7Ci0gICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dp
dGhMb2dnaW5nKEBbIF0sIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgZmluYWxTZWxlY3Rpb25S
ZWN0c10pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBDYW5TdGFydERyYWdPbkRp
dldpdGhEcmFnZ2FibGVBdHRyaWJ1dGUpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAs
IDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJj
dXN0b20tZHJhZ2dhYmxlLWRpdiJdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdl
YlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVu
RnJvbTpDR1BvaW50TWFrZSgxMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAyNTApXTsKLQot
ICAgIEVYUEVDVF9HVChbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRl
cnNdLmNvdW50LCAwVUwpOwotICAgIE5TSXRlbVByb3ZpZGVyICppdGVtUHJvdmlkZXIgPSBbZGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0Owot
ICAgIEVYUEVDVF9FUShVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlSW5saW5lLCBpdGVtUHJv
dmlkZXIucHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGUpOwotICAgIEVYUEVDVF9UUlVFKFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCIhIWRlc3RpbmF0aW9uLnF1ZXJ5U2Vs
ZWN0b3IoJyNpdGVtJykiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKEAiUEFTUyIsIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJpdGVtLnRleHRDb250ZW50Il0pOwotfQot
Ci1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZVBsYWluVGV4dFRvSUZy
YW1lKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZp
ZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiY29udGVudGVkaXRhYmxlLWluLWlm
cmFtZSJdOwotCi0gICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlk
ZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OkAiSGVs
bG8gd29ybGQiIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNW
aXNpYmlsaXR5QWxsXTsKLQotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsK
LSAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIu
Z2V0KCkgXV07Ci0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDAsIDApIHRvOkNH
UG9pbnRNYWtlKDE2MCwgMjUwKV07Ci0KLSAgICBhdXRvIGNvbnRhaW5lckxlZnQgPSBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY29udGFpbmVyLmdldEJvdW5kaW5nQ2xp
ZW50UmVjdCgpLmxlZnQiXS5mbG9hdFZhbHVlOwotICAgIGF1dG8gY29udGFpbmVyVG9wID0gW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImNvbnRhaW5lci5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKS50b3AiXS5mbG9hdFZhbHVlOwotICAgIGF1dG8gY29udGFpbmVyV2lkdGgg
PSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY29udGFpbmVyLmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIl0uZmxvYXRWYWx1ZTsKLSAgICBhdXRvIGNvbnRhaW5l
ckhlaWdodCA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjb250YWlu
ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0Il0uZmxvYXRWYWx1ZTsKLSAgICBjaGVj
a0RyYWdDYXJldFJlY3RJc0NvbnRhaW5lZEluUmVjdChbc2ltdWxhdG9yIGxhc3RLbm93bkRyYWdD
YXJldFJlY3RdLCBDR1JlY3RNYWtlKGNvbnRhaW5lckxlZnQsIGNvbnRhaW5lclRvcCwgY29udGFp
bmVyV2lkdGgsIGNvbnRhaW5lckhlaWdodCkpOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRl
c3RzLCBFeHRlcm5hbFNvdXJjZUlubGluZVRleHRUb0ZpbGVJbnB1dCkKLXsKLSAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
VGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2FkaW5nIl07Ci0KLSAgICBhdXRvIHNpbXVsYXRlZEl0
ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAg
IFtzaW11bGF0ZWRJdGVtUHJvdmlkZXIgc2V0UHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGU6VUlQ
cmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUlubGluZV07Ci0gICAgW3NpbXVsYXRlZEl0ZW1Qcm92
aWRlciByZWdpc3Rlck9iamVjdDpAIlRoaXMgaXRlbSBwcm92aWRlciByZXF1ZXN0ZWQgaW5saW5l
IHByZXNlbnRhdGlvbiBzdHlsZS4iIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRh
dGlvblZpc2liaWxpdHlBbGxdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
PSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZp
ZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0
ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAg
ICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAxMDAp
IHRvOkNHUG9pbnRNYWtlKDEwMCwgMTAwKV07Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSk7Ci19
Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlSlNPTlRvRmlsZUlu
cHV0KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZp
ZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsKLQot
ICAgIGF1dG8gc2ltdWxhdGVkSlNPTkl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92
aWRlciBhbGxvY10gaW5pdF0pOwotICAgIE5TRGF0YSAqanNvbkRhdGEgPSBbQCJ7IFwiZm9vXCI6
IFwiYmFyXCIsICBcImJhclwiOiBcImJhelwiIH0iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0
cmluZ0VuY29kaW5nXTsKLSAgICBbc2ltdWxhdGVkSlNPTkl0ZW1Qcm92aWRlciByZWdpc3RlckRh
dGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVKU09O
IHdpdGhEYXRhOmpzb25EYXRhXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
ID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJW
aWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4
dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRKU09OSXRlbVByb3ZpZGVyLmdldCgpIF1d
OwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAs
IDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgi
YXBwbGljYXRpb24vanNvbiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJvdXRwdXQudmFsdWUiXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVy
bmFsU291cmNlSW1hZ2VUb0ZpbGVJbnB1dCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpA
ImZpbGUtdXBsb2FkaW5nIl07Ci0KLSAgICBhdXRvIHNpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVy
ID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgTlNEYXRhICpp
bWFnZURhdGEgPSBVSUltYWdlSlBFR1JlcHJlc2VudGF0aW9uKHRlc3RJY29uSW1hZ2UoKSwgMC41
KTsKLSAgICBbc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50
YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSlBFRyB3aXRoRGF0YTpp
bWFnZURhdGFdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5T
KFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmll
dy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVt
UHJvdmlkZXJzOkBbIHNpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtk
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDEwMCkgdG86
Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsKLQotICAgIE5TU3RyaW5nICpvdXRwdXRWYWx1ZSA9IFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXTsKLSAg
ICBFWFBFQ1RfV0tfU1RSRVEoImltYWdlL2pwZWciLCBvdXRwdXRWYWx1ZS5VVEY4U3RyaW5nKTsK
LX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VIVE1MVG9VcGxv
YWRBcmVhKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsK
LQotICAgIGF1dG8gc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIE5TRGF0YSAqaHRtbERhdGEgPSBbQCI8Ym9keSBj
b250ZW50ZWRpdGFibGU+PC9ib2R5PiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5j
b2RpbmddOwotICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJl
c2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERh
dGE6aHRtbERhdGFdOwotICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHNldFN1Z2dlc3Rl
ZE5hbWU6QCJpbmRleC5odG1sIl07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRT
aG91bGRBbGxvd01vdmVPcGVyYXRpb246Tk9dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIu
Z2V0KCkgXV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRN
YWtlKDIwMCwgMzAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgTlNTdHJpbmcg
Km91dHB1dFZhbHVlID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91
dHB1dC52YWx1ZSJdOwotICAgIEVYUEVDVF9XS19TVFJFUSgidGV4dC9odG1sIiwgb3V0cHV0VmFs
dWUuVVRGOFN0cmluZyk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFs
U291cmNlTW92ZU9wZXJhdGlvbk5vdEFsbG93ZWQpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFt
ZWQ6QCJmaWxlLXVwbG9hZGluZyJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJ1cGxvYWQuZHJvcEVmZmVjdCA9ICdtb3ZlJyJdOwotCi0gICAgYXV0byBzaW11
bGF0ZWRIVE1MSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBp
bml0XSk7Ci0gICAgTlNEYXRhICpodG1sRGF0YSA9IFtAIjxib2R5IGNvbnRlbnRlZGl0YWJsZT48
L2JvZHk+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107Ci0gICAgW3Np
bXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBl
SWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3aXRoRGF0YTpodG1sRGF0YV07Ci0K
LSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0g
ICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRTaG91bGRBbGxvd01vdmVPcGVyYXRpb246
Tk9dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlk
ZXJzOkBbIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMzAwKSB0bzpDR1BvaW50
TWFrZSgxMDAsIDMwMCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0pOwotfQotCi1URVNUKERh
dGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZVpJUEFyY2hpdmVBbmRVUkxUb1Npbmds
ZUZpbGVJbnB1dCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAg
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2FkaW5n
Il07Ci0KLSAgICBhdXRvIGFyY2hpdmVQcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRl
ciBhbGxvY10gaW5pdF0pOwotICAgIFthcmNoaXZlUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVz
ZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlWmlwQXJjaGl2ZSB3
aXRoRGF0YTp0ZXN0WklQQXJjaGl2ZSgpXTsKLQotICAgIGF1dG8gdXJsUHJvdmlkZXIgPSBhZG9w
dE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbdXJsUHJvdmlkZXIgcmVn
aXN0ZXJPYmplY3Q6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3dlYmtpdC5vcmciXSB2
aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFs
bF07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgp
XSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRl
cnM6QFsgYXJjaGl2ZVByb3ZpZGVyLmdldCgpLCB1cmxQcm92aWRlci5nZXQoKSBdXTsKLSAgICBb
ZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAxMDApIHRv
OkNHUG9pbnRNYWtlKDEwMCwgMTAwKV07Ci0KLSAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07Ci0g
ICAgRVhQRUNUX1dLX1NUUkVRKCJhcHBsaWNhdGlvbi96aXAiLCBvdXRwdXRWYWx1ZS5VVEY4U3Ry
aW5nKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VaSVBB
cmNoaXZlVG9VcGxvYWRBcmVhKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDAp
XSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11
cGxvYWRpbmciXTsKLQotICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVBy
b3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXBy
ZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVaaXBBcmNoaXZl
IHdpdGhEYXRhOnRlc3RaSVBBcmNoaXZlKCldOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0
V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAg
ICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAzMDAp
IHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUg
PSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07
Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJhcHBsaWNhdGlvbi96aXAiLCBvdXRwdXRWYWx1ZS5VVEY4
U3RyaW5nKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VJ
bWFnZUFuZEhUTUxUb1NpbmdsZUZpbGVJbnB1dCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAs
IDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1l
ZDpAImZpbGUtdXBsb2FkaW5nIl07Ci0KLSAgICBhdXRvIHNpbXVsYXRlZEltYWdlSXRlbVByb3Zp
ZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgTlNEYXRh
ICppbWFnZURhdGEgPSBVSUltYWdlSlBFR1JlcHJlc2VudGF0aW9uKHRlc3RJY29uSW1hZ2UoKSwg
MC41KTsKLSAgICBbc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVz
ZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSlBFRyB3aXRoRGF0
YTppbWFnZURhdGFdOwotCi0gICAgYXV0byBzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyID0gYWRv
cHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgTlNEYXRhICpodG1sRGF0
YSA9IFtAIjxib2R5IGNvbnRlbnRlZGl0YWJsZT48L2JvZHk+IiBkYXRhVXNpbmdFbmNvZGluZzpO
U1VURjhTdHJpbmdFbmNvZGluZ107Ci0gICAgW3NpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgcmVn
aXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRU
eXBlSFRNTCB3aXRoRGF0YTpodG1sRGF0YV07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlci5n
ZXQoKSwgc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAwKSB0bzpDR1BvaW50
TWFrZSgxMDAsIDEwMCldOwotCi0gICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOwotICAgIEVYUEVD
VF9XS19TVFJFUSgiIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7Ci19Ci0KLVRFU1QoRGF0YUlu
dGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlSW1hZ2VBbmRIVE1MVG9NdWx0aXBsZUZpbGVJ
bnB1dCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2FkaW5nIl07Ci0g
ICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImlucHV0LnNldEF0dHJp
YnV0ZSgnbXVsdGlwbGUnLCAnJykiXTsKLQotICAgIGF1dG8gc2ltdWxhdGVkSW1hZ2VJdGVtUHJv
dmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBOU0Rh
dGEgKmltYWdlRGF0YSA9IFVJSW1hZ2VKUEVHUmVwcmVzZW50YXRpb24odGVzdEljb25JbWFnZSgp
LCAwLjUpOwotICAgIFtzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXBy
ZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVKUEVHIHdpdGhE
YXRhOmltYWdlRGF0YV07Ci0KLSAgICBhdXRvIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgPSBh
ZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBOU0RhdGEgKmh0bWxE
YXRhID0gW0AiPGJvZHkgY29udGVudGVkaXRhYmxlPjwvYm9keT4iIGRhdGFVc2luZ0VuY29kaW5n
Ok5TVVRGOFN0cmluZ0VuY29kaW5nXTsKLSAgICBbc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciBy
ZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtV
VFR5cGVIVE1MIHdpdGhEYXRhOmh0bWxEYXRhXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5p
dFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVy
LmdldCgpLCBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAxMDApIHRvOkNHUG9p
bnRNYWtlKDEwMCwgMTAwKV07Ci0KLSAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07Ci0gICAgRVhQ
RUNUX1dLX1NUUkVRKCJpbWFnZS9qcGVnLCB0ZXh0L2h0bWwiLCBvdXRwdXRWYWx1ZS5VVEY4U3Ry
aW5nKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VJbWFn
ZUFuZEhUTUxUb1VwbG9hZEFyZWEpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxl
LXVwbG9hZGluZyJdOwotCi0gICAgYXV0byBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciA9IGFk
b3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIE5TRGF0YSAqaW1hZ2VE
YXRhID0gVUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSk7Ci0g
ICAgW3NpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9u
Rm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUpQRUcgd2l0aERhdGE6aW1hZ2VE
YXRhXTsKLQotICAgIGF1dG8gZmlyc3RTaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyID0gYWRvcHRO
UyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgTlNEYXRhICpmaXJzdEhUTUxE
YXRhID0gW0AiPGJvZHkgY29udGVudGVkaXRhYmxlPjwvYm9keT4iIGRhdGFVc2luZ0VuY29kaW5n
Ok5TVVRGOFN0cmluZ0VuY29kaW5nXTsKLSAgICBbZmlyc3RTaW11bGF0ZWRIVE1MSXRlbVByb3Zp
ZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5n
ICopa1VUVHlwZUhUTUwgd2l0aERhdGE6Zmlyc3RIVE1MRGF0YV07Ci0KLSAgICBhdXRvIHNlY29u
ZFNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxs
b2NdIGluaXRdKTsKLSAgICBOU0RhdGEgKnNlY29uZEhUTUxEYXRhID0gW0AiPGh0bWw+PGJvZHk+
aGVsbG8gd29ybGQ8L2JvZHk+PC9odG1sPiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5n
RW5jb2RpbmddOwotICAgIFtzZWNvbmRTaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHJlZ2lzdGVy
RGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhU
TUwgd2l0aERhdGE6c2Vjb25kSFRNTERhdGFdOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0
V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3Igc2V0U2hvdWxkQWxsb3dNb3ZlT3BlcmF0aW9uOk5PXTsKLSAgICBbZGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJbWFnZUl0ZW1Q
cm92aWRlci5nZXQoKSwgZmlyc3RTaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyLmdldCgpLCBzZWNv
bmRTaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDMwMCkgdG86Q0dQb2ludE1ha2Uo
MTAwLCAzMDApXTsKLQotICAgIE5TU3RyaW5nICpvdXRwdXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXTsKLSAgICBFWFBFQ1RfV0tf
U1RSRVEoImltYWdlL2pwZWcsIHRleHQvaHRtbCwgdGV4dC9odG1sIiwgb3V0cHV0VmFsdWUuVVRG
OFN0cmluZyk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNl
SFRNTFRvQ29udGVudEVkaXRhYmxlKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1
MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0
b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSJdOwotCi0gICAg
YXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIGF1
dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7
Ci0gICAgTlNEYXRhICpodG1sRGF0YSA9IFtAIjxoMT5UaGlzIGlzIGEgdGVzdDwvaDE+IiBkYXRh
VXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107Ci0gICAgW2l0ZW1Qcm92aWRlciBy
ZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtV
VFR5cGVIVE1MIHdpdGhEYXRhOmh0bWxEYXRhXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0g
ICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAw
KSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgTlNTdHJpbmcgKnRleHRDb250ZW50
ID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29u
dGVudCJdOwotICAgIEVYUEVDVF9XS19TVFJFUSgiVGhpcyBpcyBhIHRlc3QiLCB0ZXh0Q29udGVu
dC5VVEY4U3RyaW5nKTsKLSAgICBFWFBFQ1RfVFJVRShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiISFlZGl0b3IucXVlcnlTZWxlY3RvcignaDEnKSJdLmJvb2xWYWx1ZSk7
Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlQm9sZFN5c3Rl
bUF0dHJpYnV0ZWRTdHJpbmdUb0NvbnRlbnRFZGl0YWJsZSkKLXsKLSAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtl
KDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBh
Z2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKLSAgICBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2Vz
KCkiXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKLSAgICBOU0RpY3Rpb25hcnkgKnRleHRBdHRyaWJ1dGVzID0gQHsgTlNGb250QXR0cmli
dXRlTmFtZTogW1VJRm9udCBib2xkU3lzdGVtRm9udE9mU2l6ZToyMF0gfTsKLSAgICBOU0F0dHJp
YnV0ZWRTdHJpbmcgKnJpY2hUZXh0ID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRX
aXRoU3RyaW5nOkAiVGhpcyBpcyBhIHRlc3QiIGF0dHJpYnV0ZXM6dGV4dEF0dHJpYnV0ZXNdOwot
ICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBp
bml0V2l0aE9iamVjdDpyaWNoVGV4dF0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
c2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBb
ZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRv
OkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfV0tfU1RSRVEoIlRoaXMgaXMg
YSB0ZXN0IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50
ZXh0Q29udGVudCJdLlVURjhTdHJpbmcpOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3Rz
LCBFeHRlcm5hbFNvdXJjZUNvbG9yZWRBdHRyaWJ1dGVkU3RyaW5nVG9Db250ZW50RWRpdGFibGUp
Ci17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxl
Il07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVj
dGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgTlNEaWN0aW9uYXJ5ICp0ZXh0QXR0cmli
dXRlcyA9IEB7IE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZTogW1VJQ29sb3IgcmVkQ29s
b3JdIH07Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpyaWNoVGV4dCA9IFtbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIlRoaXMgaXMgYSB0ZXN0IiBhdHRyaWJ1dGVz
OnRleHRBdHRyaWJ1dGVzXTsKLSAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0
ZW1Qcm92aWRlciBhbGxvY10gaW5pdFdpdGhPYmplY3Q6cmljaFRleHRdKTsKLSAgICBbZGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlk
ZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9p
bnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgRVhQRUNU
X1dLX1NUUkVRKCJyZ2IoMjU1LCAwLCAwKSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3AnKSku
Y29sb3IiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJUaGlzIGlzIGEgdGVzdCIsIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXS5VVEY4
U3RyaW5nKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VN
dWx0aXBsZVVSTHNUb0NvbnRlbnRFZGl0YWJsZSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAs
IDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1l
ZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkiXTsK
LQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsK
LSAgICBhdXRvIGZpcnN0SXRlbSA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5p
dF0pOwotICAgIFtmaXJzdEl0ZW0gcmVnaXN0ZXJPYmplY3Q6W05TVVJMIFVSTFdpdGhTdHJpbmc6
QCJodHRwczovL3d3dy5hcHBsZS5jb20vaXBob25lLyJdIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlk
ZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKLSAgICBhdXRvIHNlY29uZEl0
ZW0gPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbc2Vjb25k
SXRlbSByZWdpc3Rlck9iamVjdDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd3d3LmFw
cGxlLmNvbS9tYWMvIl0gdmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0
aW9uc1Zpc2liaWxpdHlBbGxdOwotICAgIGF1dG8gdGhpcmRJdGVtID0gYWRvcHROUyhbW1VJSXRl
bVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW3RoaXJkSXRlbSByZWdpc3Rlck9iamVjdDpb
TlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd2Via2l0Lm9yZy8iXSB2aXNpYmlsaXR5OlVJ
SXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07Ci0gICAgW2Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgZmlyc3RJ
dGVtLmdldCgpLCBzZWNvbmRJdGVtLmdldCgpLCB0aGlyZEl0ZW0uZ2V0KCkgXV07Ci0gICAgW2Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpD
R1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgTlNBcnJheSAqZHJvcHBlZFVSTHMgPSBbd2Vi
VmlldyBvYmplY3RCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiQXJyYXkuZnJvbShlZGl0b3IucXVl
cnlTZWxlY3RvckFsbCgnYScpKS5tYXAoYSA9PiBhLmhyZWYpIl07Ci0gICAgRVhQRUNUX0VRKDNV
TCwgZHJvcHBlZFVSTHMuY291bnQpOwotICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93d3cu
YXBwbGUuY29tL2lwaG9uZS8iLCBkcm9wcGVkVVJMc1swXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVR
KCJodHRwczovL3d3dy5hcHBsZS5jb20vbWFjLyIsIGRyb3BwZWRVUkxzWzFdKTsKLSAgICBFWFBF
Q1RfV0tfU1RSRVEoImh0dHBzOi8vd2Via2l0Lm9yZy8iLCBkcm9wcGVkVVJMc1syXSk7Ci0KLSAg
ICBOU0FycmF5ICpsaW5rc1NlcGFyYXRlZEJ5TGluZSA9IFtbd2ViVmlldyBvYmplY3RCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLmlubmVyVGV4dCJdIGNvbXBvbmVudHNTZXBhcmF0ZWRC
eUNoYXJhY3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQgbmV3bGluZUNoYXJhY3RlclNldF1dOwot
ICAgIEVYUEVDVF9FUSgzVUwsIGxpbmtzU2VwYXJhdGVkQnlMaW5lLmNvdW50KTsKLSAgICBFWFBF
Q1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUvIiwgbGlua3NTZXBhcmF0
ZWRCeUxpbmVbMF0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93d3cuYXBwbGUuY29t
L21hYy8iLCBsaW5rc1NlcGFyYXRlZEJ5TGluZVsxXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJo
dHRwczovL3dlYmtpdC5vcmcvIiwgbGlua3NTZXBhcmF0ZWRCeUxpbmVbMl0pOwotfQotCi1URVNU
KERhdGFJbnRlcmFjdGlvblRlc3RzLCBSZXNwZWN0c0V4dGVybmFsU291cmNlRmlkZWxpdHlSYW5r
aW5ncykKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRp
dGFibGUiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0
U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkiXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10g
aW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIC8vIEhlcmUsIG91ciBzb3Vy
Y2UgaXRlbSBwcm92aWRlciB2ZW5kcyB0d28gcmVwcmVzZW50YXRpb25zOiBwbGFpbiB0ZXh0LCBh
bmQgdGhlbiBhbiBpbWFnZS4gSWYgd2UgZG9uJ3QgcmVzcGVjdCB0aGUKLSAgICAvLyBmaWRlbGl0
eSBvcmRlciByZXF1ZXN0ZWQgYnkgdGhlIHNvdXJjZSwgd2UnbGwgZW5kIHVwIGFzc3VtaW5nIHRo
YXQgdGhlIGltYWdlIGlzIGEgaGlnaGVyIGZpZGVsaXR5IHJlcHJlc2VudGF0aW9uCi0gICAgLy8g
dGhhbiB0aGUgcGxhaW4gdGV4dCwgYW5kIGVycm9uZW91c2x5IGluc2VydCB0aGUgaW1hZ2UuIElm
IHdlIHJlc3BlY3Qgc291cmNlIGZpZGVsaXRpZXMsIHdlJ2xsIGluc2VydCB0ZXh0IHJhdGhlcgot
ICAgIC8vIHRoYW4gYW4gaW1hZ2UuCi0gICAgYXV0byBzaW11bGF0ZWRJdGVtUHJvdmlkZXJXaXRo
VGV4dEZpcnN0ID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAg
W3NpbXVsYXRlZEl0ZW1Qcm92aWRlcldpdGhUZXh0Rmlyc3QgcmVnaXN0ZXJPYmplY3Q6QCJIZWxs
byB3b3JsZCIgdmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zp
c2liaWxpdHlBbGxdOwotICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXJXaXRoVGV4dEZpcnN0IHJl
Z2lzdGVyT2JqZWN0OnRlc3RJY29uSW1hZ2UoKSB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVw
cmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVy
V2l0aFRleHRGaXJzdC5nZXQoKSBdXTsKLQotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsK
LSAgICBFWFBFQ1RfV0tfU1RSRVEoIkhlbGxvIHdvcmxkIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdKTsKLSAgICBFWFBFQ1RfRkFM
U0UoW3dlYlZpZXcgZWRpdG9yQ29udGFpbnNJbWFnZUVsZW1lbnRdKTsKLSAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLmlubmVySFRNTCA9ICcnIl07Ci0K
LSAgICAvLyBOb3cgd2UgcmVnaXN0ZXIgdGhlIGl0ZW0gcHJvdmlkZXJzIGluIHJldmVyc2UsIGFu
ZCBleHBlY3QgdGhlIGltYWdlIHRvIGJlIGluc2VydGVkIGluc3RlYWQgb2YgdGV4dC4KLSAgICBh
dXRvIHNpbXVsYXRlZEl0ZW1Qcm92aWRlcldpdGhJbWFnZUZpcnN0ID0gYWRvcHROUyhbW1VJSXRl
bVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRlcldpdGhJ
bWFnZUZpcnN0IHJlZ2lzdGVyT2JqZWN0OnRlc3RJY29uSW1hZ2UoKSB2aXNpYmlsaXR5OlVJSXRl
bVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07Ci0gICAgW3NpbXVs
YXRlZEl0ZW1Qcm92aWRlcldpdGhJbWFnZUZpcnN0IHJlZ2lzdGVyT2JqZWN0OkAiSGVsbG8gd29y
bGQiIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmls
aXR5QWxsXTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVBy
b3ZpZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXJXaXRoSW1hZ2VGaXJzdC5nZXQoKSBdXTsK
LQotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAs
IDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIiIs
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRl
bnQiXSk7Ci0gICAgRVhQRUNUX1RSVUUoW3dlYlZpZXcgZWRpdG9yQ29udGFpbnNJbWFnZUVsZW1l
bnRdKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VVVEY4
UGxhaW5UZXh0T25seSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwot
ICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1j
b250ZW50ZWRpdGFibGUiXTsKLQotICAgIE5TU3RyaW5nICp0ZXh0UGF5bG9hZCA9IEAiQ2VjaSBu
J2VzdCBwYXMgdW5lIHN0cmluZyI7Ci0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
PSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZp
ZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIGF1dG8gc2ltdWxhdGVkSXRlbVByb3ZpZGVyID0gYWRv
cHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW3NpbXVsYXRlZEl0ZW1Q
cm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihfX2Jy
aWRnZSBOU1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0IG9wdGlvbnM6bmlsIGxvYWRIYW5k
bGVyOl5OU1Byb2dyZXNzICooVUlJdGVtUHJvdmlkZXJEYXRhTG9hZENvbXBsZXRpb25CbG9jayBj
b21wbGV0aW9uQmxvY2spCi0gICAgewotICAgICAgICBjb21wbGV0aW9uQmxvY2soW3RleHRQYXls
b2FkIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSwgbmlsKTsKLSAgICAg
ICAgcmV0dXJuIFtOU1Byb2dyZXNzIGRpc2NyZXRlUHJvZ3Jlc3NXaXRoVG90YWxVbml0Q291bnQ6
MTAwXTsKLSAgICB9XTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFs
SXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2Rh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpD
R1BvaW50TWFrZSgxMDAsIDMwMCldOwotICAgIEVYUEVDVF9XS19TVFJFUSh0ZXh0UGF5bG9hZC5V
VEY4U3RyaW5nLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9y
LnRleHRDb250ZW50Il0uVVRGOFN0cmluZyk7Ci0gICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhM
b2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1ZSgxLCAyMDEsIDE5MzYsIDIyNykgXSwgW2RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7Ci19Ci0KLVRFU1QoRGF0YUlu
dGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlSlBFR09ubHkpCi17Ci0gICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRl
c3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07Ci0KLSAgICBhdXRvIGRh
dGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgYXV0byBzaW11
bGF0ZWRJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRd
KTsKLSAgICBbc2ltdWxhdGVkSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9u
Rm9yVHlwZUlkZW50aWZpZXI6KF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZUpQRUcgb3B0aW9u
czpuaWwgbG9hZEhhbmRsZXI6Xk5TUHJvZ3Jlc3MgKihVSUl0ZW1Qcm92aWRlckRhdGFMb2FkQ29t
cGxldGlvbkJsb2NrIGNvbXBsZXRpb25CbG9jaykKLSAgICB7Ci0gICAgICAgIGNvbXBsZXRpb25C
bG9jayhVSUltYWdlSlBFR1JlcHJlc2VudGF0aW9uKHRlc3RJY29uSW1hZ2UoKSwgMC41KSwgbmls
KTsKLSAgICAgICAgcmV0dXJuIFtOU1Byb2dyZXNzIGRpc2NyZXRlUHJvZ3Jlc3NXaXRoVG90YWxV
bml0Q291bnQ6MTAwXTsKLSAgICB9XTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNl
dEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07
Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwg
NDAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotICAgIEVYUEVDVF9UUlVFKFt3ZWJWaWV3
IGVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50XSk7Ci0gICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dp
dGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1ZSgxLCAyMDEsIDIxNSwgMTc0KSBdLCBbZGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKLX0KLQotVEVTVChEYXRh
SW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VUaXRsZWROU1VSTCkKLXsKLSAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlM
b2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKLSAgICBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3Zl
QWxsUmFuZ2VzKCkiXTsKLQotICAgIE5TVVJMICp0aXRsZWRVUkwgPSBbTlNVUkwgVVJMV2l0aFN0
cmluZzpAImh0dHBzOi8vd3d3LmFwcGxlLmNvbSJdOwotICAgIHRpdGxlZFVSTC5fdGl0bGUgPSBA
IkFwcGxlIjsKLSAgICBhdXRvIHNpbXVsYXRlZEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0
ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXIgcmVn
aXN0ZXJPYmplY3Q6dGl0bGVkVVJMIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRh
dGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdp
dGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
IHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCkg
XV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMw
MCwgNDAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVR
KCJBcHBsZSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3Iu
cXVlcnlTZWxlY3RvcignYScpLnRleHRDb250ZW50Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgi
aHR0cHM6Ly93d3cuYXBwbGUuY29tLyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJlZGl0b3IucXVlcnlTZWxlY3RvcignYScpLmhyZWYiXSk7Ci19Ci0KLVRFU1QoRGF0
YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlRmlsZVVSTCkKLXsKLSAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
VGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKLSAgICBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxs
UmFuZ2VzKCkiXTsKLQotICAgIE5TVVJMICpVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpAImZp
bGU6Ly8vc29tZS9maWxlL3RoYXQvaXMvbm90L3JlYWwiXTsKLSAgICBVSUl0ZW1Qcm92aWRlciAq
c2ltdWxhdGVkSXRlbVByb3ZpZGVyID0gW1VJSXRlbVByb3ZpZGVyIGl0ZW1Qcm92aWRlcldpdGhV
Ukw6VVJMIHRpdGxlOkAiIl07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9
IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmll
dzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRl
cm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyIF1dOwotICAgIFtkYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQ
b2ludE1ha2UoMTAwLCAzMDApXTsKLQotICAgIEVYUEVDVF9GQUxTRShbW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIiEhZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ2EnKSJdIGJv
b2xWYWx1ZV0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiSGVsbG8gd29ybGRcbmZpbGU6Ly8vc29t
ZS9maWxlL3RoYXQvaXMvbm90L3JlYWwiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lclRleHQiXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVy
YWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlT3ZlcnJpZGVEcm9wRmlsZVVwbG9hZCkKLXsKLSAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2FkaW5nIl07Ci0KLSAgICBhdXRvIHNp
bXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9j
XSBpbml0XSk7Ci0gICAgTlNEYXRhICppbWFnZURhdGEgPSBVSUltYWdlSlBFR1JlcHJlc2VudGF0
aW9uKHRlc3RJY29uSW1hZ2UoKSwgMC41KTsKLSAgICBbc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlk
ZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcg
KilrVVRUeXBlSlBFRyB3aXRoRGF0YTppbWFnZURhdGFdOwotCi0gICAgYXV0byBzaW11bGF0ZWRI
VE1MSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7
Ci0gICAgTlNEYXRhICpmaXJzdEhUTUxEYXRhID0gW0AiPGJvZHkgY29udGVudGVkaXRhYmxlPjwv
Ym9keT4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKLSAgICBbc2lt
dWxhdGVkSFRNTEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJ
ZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOmZpcnN0SFRNTERhdGFd
OwotICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHNldFByZWZlcnJlZFByZXNlbnRhdGlv
blN0eWxlOlVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVBdHRhY2htZW50XTsKLQotICAgIGF1
dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldE92ZXJyaWRlUGVyZm9ybURyb3BCbG9jazpeTlNBcnJh
eTxVSURyYWdJdGVtICo+ICooaWQgPFVJRHJvcFNlc3Npb24+IHNlc3Npb24pCi0gICAgewotICAg
ICAgICBFWFBFQ1RfRVEoMlVMLCBzZXNzaW9uLml0ZW1zLmNvdW50KTsKLSAgICAgICAgVUlEcmFn
SXRlbSAqZmlyc3RJdGVtID0gc2Vzc2lvbi5pdGVtc1swXTsKLSAgICAgICAgVUlEcmFnSXRlbSAq
c2Vjb25kSXRlbSA9IHNlc3Npb24uaXRlbXNbMV07Ci0gICAgICAgIEVYUEVDVF9UUlVFKFtmaXJz
dEl0ZW0uaXRlbVByb3ZpZGVyLnJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnMgaXNFcXVhbDpAWyAo
TlNTdHJpbmcgKilrVVRUeXBlSlBFRyBdXSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFtzZWNvbmRJ
dGVtLml0ZW1Qcm92aWRlci5yZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzIGlzRXF1YWw6QFsgKE5T
U3RyaW5nICopa1VUVHlwZUhUTUwgXV0pOwotICAgICAgICByZXR1cm4gQFsgc2Vjb25kSXRlbSBd
OwotICAgIH1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVt
UHJvdmlkZXJzOkBbIHNpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyLmdldCgpLCBzaW11bGF0ZWRI
VE1MSXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDMwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsK
LQotICAgIE5TU3RyaW5nICpvdXRwdXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoInRleHQv
aHRtbCIsIG91dHB1dFZhbHVlLlVURjhTdHJpbmcpOwotfQotCi0jaWYgX19JUEhPTkVfT1NfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMzAwCi0KLXN0YXRpYyBSZXRhaW5QdHI8VGVzdFdLV2Vi
Vmlldz4gc2V0VXBUZXN0V2ViVmlld0ZvckRhdGFUcmFuc2Zlckl0ZW1zKCkKLXsKLSAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlM
b2FkVGVzdFBhZ2VOYW1lZDpAIkRhdGFUcmFuc2Zlckl0ZW0tZ2V0QXNFbnRyeSJdOwotCi0gICAg
YXV0byBwcmVmZXJlbmNlcyA9IChXS1ByZWZlcmVuY2VzUmVmKVtbd2ViVmlldyBjb25maWd1cmF0
aW9uXSBwcmVmZXJlbmNlc107Ci0gICAgV0tQcmVmZXJlbmNlc1NldERhdGFUcmFuc2Zlckl0ZW1z
RW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldERpcmVjdG9y
eVVwbG9hZEVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwotCi0gICAgcmV0dXJuIHdlYlZpZXc7
Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlRGF0YVRyYW5z
ZmVySXRlbUdldEZvbGRlckFzRW50cnkpCi17Ci0gICAgLy8gVGhlIGV4cGVjdGVkIG91dHB1dCBp
cyBzb3J0ZWQgYnkgYWxwaGFiZXRpY2FsIG9yZGVyIGhlcmUgZm9yIGNvbnNpc3RlbnQgYmVoYXZp
b3IgYWNyb3NzIGRpZmZlcmVudCB0ZXN0IGVudmlyb25tZW50cy4KLSAgICAvLyBTZWUgRGF0YVRy
YW5zZmVySXRlbS1nZXRBc0VudHJ5Lmh0bWwgZm9yIG1vcmUgZGV0YWlscy4KLSAgICBOU0FycmF5
PE5TU3RyaW5nICo+ICpleHBlY3RlZE91dHB1dCA9IEBbCi0gICAgICAgIEAiRm91bmQgZGF0YSB0
cmFuc2ZlciBpdGVtIChraW5kOiAnZmlsZScsIHR5cGU6ICcnKSIsCi0gICAgICAgIEAiRElSOiAv
c29tZWRpcmVjdG9yeSIsCi0gICAgICAgIEAiRElSOiAvc29tZWRpcmVjdG9yeS9zdWJkaXJlY3Rv
cnkxIiwKLSAgICAgICAgQCJESVI6IC9zb21lZGlyZWN0b3J5L3N1YmRpcmVjdG9yeTIiLAotICAg
ICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkZJTEU6IC9zb21lZGlyZWN0b3J5L2Fy
Y2hpdmUuemlwICgnYXBwbGljYXRpb24vemlwJywgJXR1IGJ5dGVzKSIsIHRlc3RaSVBBcmNoaXZl
KCkubGVuZ3RoXSwKLSAgICAgICAgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGSUxFOiAv
c29tZWRpcmVjdG9yeS9pY29uLnBuZyAoJ2ltYWdlL3BuZycsICV0dSBieXRlcykiLCB0ZXN0SWNv
bkltYWdlRGF0YSgpLmxlbmd0aF0sCi0gICAgICAgIEAiRklMRTogL3NvbWVkaXJlY3Rvcnkvc3Vi
ZGlyZWN0b3J5MS90ZXh0LWZpbGUtMS50eHQgKCd0ZXh0L3BsYWluJywgNDMgYnl0ZXMpIiwKLSAg
ICAgICAgQCJGSUxFOiAvc29tZWRpcmVjdG9yeS9zdWJkaXJlY3RvcnkyL3RleHQtZmlsZS0yLnR4
dCAoJ3RleHQvcGxhaW4nLCA0NCBieXRlcykiCi0gICAgXTsKLQotICAgIGF1dG8gd2ViVmlldyA9
IHNldFVwVGVzdFdlYlZpZXdGb3JEYXRhVHJhbnNmZXJJdGVtcygpOwotICAgIF9fYmxvY2sgYm9v
bCBkb25lID0gZmFsc2U7Ci0gICAgW3dlYlZpZXcgcGVyZm9ybUFmdGVyUmVjZWl2aW5nTWVzc2Fn
ZTpAImRyb3BwZWQiIGFjdGlvbjpeKCkgewotICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICB9XTsK
LQotICAgIHJ1blRlc3RXaXRoVGVtcG9yYXJ5Rm9sZGVyKF4oTlNVUkwgKmZvbGRlclVSTCkgewot
ICAgICAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxv
Y10gaW5pdF0pOwotICAgICAgICBbaXRlbVByb3ZpZGVyIHNldFN1Z2dlc3RlZE5hbWU6QCJzb21l
ZGlyZWN0b3J5Il07Ci0gICAgICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJGaWxlUmVwcmVzZW50
YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlRm9sZGVyIGZpbGVPcHRp
b25zOjAgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFs
bCBsb2FkSGFuZGxlcjpbY2FwdHVyZWRGb2xkZXJVUkwgPSByZXRhaW5QdHIoZm9sZGVyVVJMKV0g
KEZpbGVMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRpb25IYW5kbGVyKSAtPiBOU1Byb2dyZXNz
ICogewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY2FwdHVyZWRGb2xkZXJVUkwuZ2V0
KCksIE5PLCBuaWwpOwotICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgfV07Ci0KLSAg
ICAgICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwot
ICAgICAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVy
czpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRvOkNHUG9pbnRNYWtlKDE1MCwgNTAp
XTsKLSAgICB9KTsKLQotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Ci0gICAg
RVhQRUNUX1dLX1NUUkVRKFtleHBlY3RlZE91dHB1dCBjb21wb25lbnRzSm9pbmVkQnlTdHJpbmc6
QCJcbiJdLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZh
bHVlIl0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZURh
dGFUcmFuc2Zlckl0ZW1HZXRQbGFpblRleHRGaWxlQXNFbnRyeSkKLXsKLSAgICBOU0FycmF5PE5T
U3RyaW5nICo+ICpleHBlY3RlZE91dHB1dCA9IEBbCi0gICAgICAgIEAiRm91bmQgZGF0YSB0cmFu
c2ZlciBpdGVtIChraW5kOiAnZmlsZScsIHR5cGU6ICd0ZXh0L3BsYWluJykiLAotICAgICAgICBA
IkZJTEU6IC9mb28udHh0ICgndGV4dC9wbGFpbicsIDI4IGJ5dGVzKSIKLSAgICBdOwotCi0gICAg
YXV0byB3ZWJWaWV3ID0gc2V0VXBUZXN0V2ViVmlld0ZvckRhdGFUcmFuc2Zlckl0ZW1zKCk7Ci0g
ICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKLSAgICBbd2ViVmlldyBwZXJmb3JtQWZ0ZXJS
ZWNlaXZpbmdNZXNzYWdlOkAiZHJvcHBlZCIgYWN0aW9uOl4oKSB7Ci0gICAgICAgIGRvbmUgPSB0
cnVlOwotICAgIH1dOwotCi0gICAgcnVuVGVzdFdpdGhUZW1wb3JhcnlUZXh0RmlsZSheKE5TVVJM
ICpmaWxlVVJMKSB7Ci0gICAgICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW05TSXRl
bVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIFtpdGVtUHJvdmlkZXIgc2V0U3VnZ2Vz
dGVkTmFtZTpAImZvbyJdOwotICAgICAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRmlsZVJlcHJl
c2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRl
eHQgZmlsZU9wdGlvbnM6MCB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25W
aXNpYmlsaXR5QWxsIGxvYWRIYW5kbGVyOltjYXB0dXJlZEZpbGVVUkwgPSByZXRhaW5QdHIoZmls
ZVVSTCldKEZpbGVMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRpb25IYW5kbGVyKSAtPiBOU1By
b2dyZXNzICogewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY2FwdHVyZWRGaWxlVVJM
LmdldCgpLCBOTywgbmlsKTsKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIH1dOwot
Ci0gICAgICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCld
KTsKLSAgICAgICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92
aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgICAgICBbZGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFrZSgxNTAs
IDUwKV07Ci0gICAgfSk7Ci0KLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwot
ICAgIEVYUEVDVF9XS19TVFJFUShbZXhwZWN0ZWRPdXRwdXQgY29tcG9uZW50c0pvaW5lZEJ5U3Ry
aW5nOkAiXG4iXSwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1
dC52YWx1ZSJdKTsKLX0KLQotI2VuZGlmIC8vIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDExMDMwMAotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJj
ZU92ZXJyaWRlRHJvcEluc2VydFVSTCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwg
NTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImF1
dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkiXTsKLQotICAg
IGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBb
ZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldE92ZXJyaWRlUGVyZm9ybURyb3BCbG9jazpeTlNB
cnJheTxVSURyYWdJdGVtICo+ICooaWQgPFVJRHJvcFNlc3Npb24+IHNlc3Npb24pCi0gICAgewot
ICAgICAgICBOU011dGFibGVBcnJheTxVSURyYWdJdGVtICo+ICphbGxvd2VkSXRlbXMgPSBbTlNN
dXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICBmb3IgKFVJRHJhZ0l0ZW0gKml0ZW0gaW4gc2Vz
c2lvbi5pdGVtcykgewotICAgICAgICAgICAgaWYgKFtpdGVtLml0ZW1Qcm92aWRlci5yZWdpc3Rl
cmVkVHlwZUlkZW50aWZpZXJzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVVUkxd
KQotICAgICAgICAgICAgICAgIFthbGxvd2VkSXRlbXMgYWRkT2JqZWN0Oml0ZW1dOwotICAgICAg
ICB9Ci0gICAgICAgIEVYUEVDVF9FUSgxVUwsIGFsbG93ZWRJdGVtcy5jb3VudCk7Ci0gICAgICAg
IHJldHVybiBhbGxvd2VkSXRlbXM7Ci0gICAgfV07Ci0KLSAgICBhdXRvIGZpcnN0SXRlbVByb3Zp
ZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW2ZpcnN0
SXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OkAiVGhpcyBpcyBhIHN0cmluZy4iIHZpc2liaWxp
dHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKLSAg
ICBhdXRvIHNlY29uZEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxv
Y10gaW5pdF0pOwotICAgIFtzZWNvbmRJdGVtUHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6W05TVVJM
IFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3dlYmtpdC5vcmcvIl0gdmlzaWJpbGl0eTpVSUl0ZW1Q
cm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOwotICAgIFtkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGZpcnN0SXRlbVBy
b3ZpZGVyLmdldCgpLCBzZWNvbmRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50
TWFrZSgxMDAsIDMwMCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczovL3dlYmtpdC5v
cmcvIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0
Q29udGVudCJdKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgT3ZlcnJpZGVEYXRh
SW50ZXJhY3Rpb25PcGVyYXRpb24pCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzaW1w
bGUiXTsKLQotICAgIGF1dG8gc2ltdWxhdGVkSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRl
bVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRlciByZWdp
c3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5
cGVIVE1MIHdpdGhEYXRhOltAIjxib2R5PjwvYm9keT4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRG
OFN0cmluZ0VuY29kaW5nXV07Ci0KLSAgICBfX2Jsb2NrIGJvb2wgZmluaXNoZWRMb2FkaW5nRGF0
YSA9IGZhbHNlOwotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhb
W0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcu
Z2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVBy
b3ZpZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07Ci0gICAgW2RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBzZXRPdmVycmlkZURhdGFJbnRlcmFjdGlvbk9wZXJhdGlvbkJsb2Nr
Ol5OU1VJbnRlZ2VyKE5TVUludGVnZXIgb3BlcmF0aW9uLCBpZCBzZXNzaW9uKQotICAgIHsKLSAg
ICAgICAgRVhQRUNUX0VRKDBVLCBvcGVyYXRpb24pOwotICAgICAgICByZXR1cm4gVUlEcm9wT3Bl
cmF0aW9uQ29weTsKLSAgICB9XTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldERh
dGFJbnRlcmFjdGlvbk9wZXJhdGlvbkNvbXBsZXRpb25CbG9jazpeKEJPT0wgaGFuZGxlZCwgTlNB
cnJheSAqaXRlbVByb3ZpZGVycykgewotICAgICAgICBFWFBFQ1RfRkFMU0UoaGFuZGxlZCk7Ci0g
ICAgICAgIFtpdGVtUHJvdmlkZXJzLmZpcnN0T2JqZWN0IGxvYWREYXRhUmVwcmVzZW50YXRpb25G
b3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCBjb21wbGV0aW9uSGFuZGxl
cjpeKE5TRGF0YSAqZGF0YSwgTlNFcnJvciAqZXJyb3IpIHsKLSAgICAgICAgICAgIE5TU3RyaW5n
ICp0ZXh0ID0gW1tbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpkYXRhIGVuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nXSBhdXRvcmVsZWFzZV07Ci0gICAgICAgICAgICBFWFBFQ1RfV0tf
U1RSRVEoIjxib2R5PjwvYm9keT4iLCB0ZXh0LlVURjhTdHJpbmcpOwotICAgICAgICAgICAgRVhQ
RUNUX0ZBTFNFKCEhZXJyb3IpOwotICAgICAgICAgICAgZmluaXNoZWRMb2FkaW5nRGF0YSA9IHRy
dWU7Ci0gICAgICAgIH1dOwotICAgIH1dOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsK
LSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkTG9hZGluZ0RhdGEpOwotfQot
Ci1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBJbmplY3RlZEJ1bmRsZU92ZXJyaWRlUGVyZm9y
bVR3b1N0ZXBEcm9wKQotewotICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRp
b24gPSBbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBfdGVzdF9jb25maWd1cmF0aW9uV2l0aFRlc3RQ
bHVnSW5DbGFzc05hbWU6QCJCdW5kbGVFZGl0aW5nRGVsZWdhdGVQbHVnSW4iXTsKLSAgICBbY29u
ZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2V0T2JqZWN0OkBZRVMgZm9yQnVuZGxlUGFyYW1ldGVy
OkAiQnVuZGxlT3ZlcnJpZGVQZXJmb3JtVHdvU3RlcERyb3AiXTsKLQotICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0pOwotICAgIFt3
ZWJWaWV3IGxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOwot
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24o
KS5yZW1vdmVBbGxSYW5nZXMoKSJdOwotCi0gICAgYXV0byBzaW11bGF0ZWRJdGVtUHJvdmlkZXIg
PSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbc2ltdWxhdGVk
SXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6
KE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRleHQgb3B0aW9uczpuaWwgbG9hZEhhbmRsZXI6
Xk5TUHJvZ3Jlc3MgKihVSUl0ZW1Qcm92aWRlckRhdGFMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBs
ZXRpb25CbG9jaykKLSAgICB7Ci0gICAgICAgIGNvbXBsZXRpb25CbG9jayhbQCJIZWxsbyB3b3Js
ZCIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddLCBuaWwpOwotICAgICAg
ICByZXR1cm4gW05TUHJvZ3Jlc3MgZGlzY3JldGVQcm9ncmVzc1dpdGhUb3RhbFVuaXRDb3VudDox
MDBdOwotICAgIH1dOwotCi0gICAgYXV0byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9w
dE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2Vi
Vmlldy5nZXQoKV0pOwotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJ
dGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbZGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNH
UG9pbnRNYWtlKDEwMCwgMzAwKV07Ci0KLSAgICBFWFBFQ1RfRVEoMFVMLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il0ubGVuZ3RoKTsK
LX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgSW5qZWN0ZWRCdW5kbGVBbGxvd1BlcmZv
cm1Ud29TdGVwRHJvcCkKLXsKLSAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0
aW9uID0gW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gX3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0
UGx1Z0luQ2xhc3NOYW1lOkAiQnVuZGxlRWRpdGluZ0RlbGVnYXRlUGx1Z0luIl07Ci0gICAgW2Nv
bmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3NldE9iamVjdDpATk8gZm9yQnVuZGxlUGFyYW1ldGVy
OkAiQnVuZGxlT3ZlcnJpZGVQZXJmb3JtVHdvU3RlcERyb3AiXTsKLQotICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0pOwotICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50
ZWRpdGFibGUiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
Z2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkiXTsKLQotICAgIGF1dG8gc2ltdWxhdGVk
SXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0g
ICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5
cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0IG9wdGlvbnM6bmls
IGxvYWRIYW5kbGVyOl5OU1Byb2dyZXNzICooVUlJdGVtUHJvdmlkZXJEYXRhTG9hZENvbXBsZXRp
b25CbG9jayBjb21wbGV0aW9uQmxvY2spCi0gICAgewotICAgICAgICBjb21wbGV0aW9uQmxvY2so
W0AiSGVsbG8gd29ybGQiIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSwg
bmlsKTsKLSAgICAgICAgcmV0dXJuIFtOU1Byb2dyZXNzIGRpc2NyZXRlUHJvZ3Jlc3NXaXRoVG90
YWxVbml0Q291bnQ6MTAwXTsKLSAgICB9XTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdp
dGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
IHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCkg
XV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMw
MCwgNDAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVR
KCJIZWxsbyB3b3JsZCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJl
ZGl0b3IudGV4dENvbnRlbnQiXS5VVEY4U3RyaW5nKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rp
b25UZXN0cywgSW5qZWN0ZWRCdW5kbGVJbWFnZUVsZW1lbnREYXRhKQotewotICAgIFdLV2ViVmll
d0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBf
dGVzdF9jb25maWd1cmF0aW9uV2l0aFRlc3RQbHVnSW5DbGFzc05hbWU6QCJCdW5kbGVFZGl0aW5n
RGVsZWdhdGVQbHVnSW4iXTsKLSAgICBbY29uZmlndXJhdGlvbiBfc2V0QXR0YWNobWVudEVsZW1l
bnRFbmFibGVkOllFU107Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCkgY29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRU
ZXN0UGFnZU5hbWVkOkAiaW1hZ2UtYW5kLWNvbnRlbnRlZGl0YWJsZSJdOwotCi0gICAgX19ibG9j
ayBSZXRhaW5QdHI8TlNTdHJpbmc+IGluamVjdGVkU3RyaW5nOwotICAgIGF1dG8gZGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yIHNldENvbnZlcnRJdGVtUHJvdmlkZXJzQmxvY2s6Xk5TQXJyYXkgKihVSUl0ZW1Q
cm92aWRlciAqaXRlbVByb3ZpZGVyLCBOU0FycmF5ICosIE5TRGljdGlvbmFyeSAqZGF0YSkKLSAg
ICB7Ci0gICAgICAgIGluamVjdGVkU3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBp
bml0V2l0aERhdGE6ZGF0YVtJbmplY3RlZEJ1bmRsZVBhc3RlYm9hcmREYXRhVHlwZV0gZW5jb2Rp
bmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKLSAgICAgICAgcmV0dXJuIEBbIGl0ZW1Qcm92aWRl
ciBdOwotICAgIH1dOwotCi0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNH
UG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMjUwKV07Ci0KLSAgICBFWFBF
Q1RfV0tfU1RSRVEoImhlbGxvIiwgW2luamVjdGVkU3RyaW5nIFVURjhTdHJpbmddKTsKLX0KLQot
VEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgSW5qZWN0ZWRCdW5kbGVBdHRhY2htZW50RWxlbWVu
dERhdGEpCi17Ci0gICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtX
S1dlYlZpZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVzdFBsdWdJbkNs
YXNzTmFtZTpAIkJ1bmRsZUVkaXRpbmdEZWxlZ2F0ZVBsdWdJbiJdOwotICAgIFtjb25maWd1cmF0
aW9uIF9zZXRBdHRhY2htZW50RWxlbWVudEVuYWJsZWQ6WUVTXTsKLSAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtl
KDAsIDAsIDMyMCwgNTAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dKTsKLSAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdHRhY2htZW50LWVsZW1lbnQi
XTsKLQotICAgIF9fYmxvY2sgUmV0YWluUHRyPE5TU3RyaW5nPiBpbmplY3RlZFN0cmluZzsKLSAg
ICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAg
W2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRDb252ZXJ0SXRlbVByb3ZpZGVyc0Jsb2NrOl5O
U0FycmF5ICooVUlJdGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciwgTlNBcnJheSAqLCBOU0RpY3Rp
b25hcnkgKmRhdGEpCi0gICAgewotICAgICAgICBpbmplY3RlZFN0cmluZyA9IGFkb3B0TlMoW1tO
U1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGFbSW5qZWN0ZWRCdW5kbGVQYXN0ZWJvYXJk
RGF0YVR5cGVdIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSk7Ci0gICAgICAgIHJldHVy
biBAWyBpdGVtUHJvdmlkZXIgXTsKLSAgICB9XTsKLQotICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRvOkNHUG9pbnRNYWtlKDUwLCA0MDAp
XTsKLQotICAgIEVYUEVDVF9XS19TVFJFUSgiaGVsbG8iLCBbaW5qZWN0ZWRTdHJpbmcgVVRGOFN0
cmluZ10pOwotICAgIEVYUEVDVF9UUlVFKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCJdLmJvb2xWYWx1ZSk7Ci19Ci0KLVRF
U1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIExhcmdlSW1hZ2VUb1RhcmdldERpdikKLXsKLSAgICBh
dXRvIHRlc3RXZWJWaWV3Q29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIGFsbG9jXSBpbml0XSk7Ci0gICAgW1t0ZXN0V2ViVmlld0NvbmZpZ3VyYXRpb24gcHJl
ZmVyZW5jZXNdIF9zZXRMYXJnZUltYWdlQXN5bmNEZWNvZGluZ0VuYWJsZWQ6Tk9dOwotCi0gICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCkgY29uZmlndXJhdGlvbjp0ZXN0V2ViVmlld0Nv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQ
YWdlTmFtZWQ6QCJkaXYtYW5kLWxhcmdlLWltYWdlIl07Ci0KLSAgICBhdXRvIGRhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2Nd
IGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgNDAwKSB0bzpDR1BvaW50TWFrZSgyMDAs
IDE1MCldOwotICAgIEVYUEVDVF9XS19TVFJFUSgiUEFTUyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJ0YXJnZXQudGV4dENvbnRlbnQiXS5VVEY4U3RyaW5nKTsKLSAg
ICBjaGVja0ZpcnN0VHlwZUlzUHJlc2VudEFuZFNlY29uZFR5cGVJc01pc3NpbmcoZGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yLmdldCgpLCBrVVRUeXBlUE5HLCBrVVRUeXBlRmlsZVVSTCk7Ci0gICAg
Y2hlY2tFc3RpbWF0ZWRTaXplKGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5nZXQoKSwgeyAyMDAw
LCAyMDAwIH0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBMaW5rV2l0aEVtcHR5
SFJFRikKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImxpbmstYW5kLWlucHV0Il07Ci0g
ICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5
U2VsZWN0b3IoJ2EnKS5ocmVmID0gJyciXTsKLQotICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdp
dGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
IHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsK
LQotICAgIEVYUEVDVF9FUShEYXRhSW50ZXJhY3Rpb25DYW5jZWxsZWQsIFtkYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IgcGhhc2VdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IGVk
aXRvclZhbHVlXS5VVEY4U3RyaW5nKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywg
Q2FuY2VsbGVkTGlmdERvZXNOb3RDYXVzZVN1YnNlcXVlbnREcmFnc1RvRmFpbCkKLXsKLSAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlMb2FkVGVzdFBhZ2VOYW1lZDpAImxpbmstYW5kLXRhcmdldC1kaXYiXTsKLQotICAgIGF1dG8g
ZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIHNldENvbnZlcnRJdGVtUHJvdmlkZXJzQmxvY2s6Xk5TQXJyYXkg
KihVSUl0ZW1Qcm92aWRlciAqLCBOU0FycmF5ICosIE5TRGljdGlvbmFyeSAqKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEBbIF07Ci0gICAgfV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07
Ci0gICAgRVhQRUNUX0VRKERhdGFJbnRlcmFjdGlvbkNhbmNlbGxlZCwgW2RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBwaGFzZV0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRhcmdldC50ZXh0Q29udGVudCJdKTsKLSAgICBO
U1N0cmluZyAqb3V0cHV0VGV4dCA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJvdXRwdXQudGV4dENvbnRlbnQiXTsKLSAgICBjaGVja1N0cmluZ0FycmF5c0FyZUVxdWFs
KEBbQCJkcmFnc3RhcnQiLCBAImRyYWdlbmQiXSwgW291dHB1dFRleHQgY29tcG9uZW50c1NlcGFy
YXRlZEJ5U3RyaW5nOkAiICJdKTsKLQotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJvdXRwdXQuaW5uZXJIVE1MID0gJyciXTsKLSAgICBbZGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yIHNldENvbnZlcnRJdGVtUHJvdmlkZXJzQmxvY2s6Xk5TQXJyYXkgKihVSUl0ZW1Q
cm92aWRlciAqaXRlbVByb3ZpZGVyLCBOU0FycmF5ICosIE5TRGljdGlvbmFyeSAqKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEBbIGl0ZW1Qcm92aWRlciBdOwotICAgIH1dOwotICAgIFtkYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50
TWFrZSgxMDAsIDMwMCldOwotICAgIEVYUEVDVF9XS19TVFJFUSgiUEFTUyIsIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0YXJnZXQudGV4dENvbnRlbnQiXSk7Ci0gICAg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC50ZXh0Q29udGVu
dCJdOwotICAgIGNoZWNrU3RyaW5nQXJyYXlzQXJlRXF1YWwoQFtAImRyYWdzdGFydCIsIEAiZHJh
Z2VuZCJdLCBbb3V0cHV0VGV4dCBjb21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6QCIgIl0pOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMoVGVzdFdL
V2ViVmlldyAqd2ViVmlldykKLXsKLSAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3XSk7Ci0g
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2Uo
NTAsIDI1MCldOwotICAgIEVYUEVDVF9XS19TVFJFUSgicmdiKDAsIDEyOCwgMCkiLCBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQx
KS5iYWNrZ3JvdW5kQ29sb3IiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJQQVNTIiwgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRhcmdldDEudGV4dENvbnRlbnQiXSk7
Ci0KLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50
TWFrZSgyNTAsIDUwKV07Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJyZ2IoMCwgMTI4LCAwKSIsIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRDb21wdXRlZFN0eWxlKHRh
cmdldDIpLmJhY2tncm91bmRDb2xvciJdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIlBBU1MiLCBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGFyZ2V0Mi50ZXh0Q29udGVu
dCJdKTsKLQotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRvOkNH
UG9pbnRNYWtlKDI1MCwgMjUwKV07Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJyZ2IoMCwgMTI4LCAw
KSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRDb21wdXRlZFN0
eWxlKHRhcmdldDMpLmJhY2tncm91bmRDb2xvciJdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIlBB
U1MiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGFyZ2V0My50ZXh0
Q29udGVudCJdKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRHJhZ0V2ZW50Q2xp
ZW50Q29vcmRpbmF0ZXNCYXNpYykKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImRyb3At
dGFyZ2V0cyJdOwotCi0gICAgdGVzdERyYWdBbmREcm9wT250b1RhcmdldEVsZW1lbnRzKHdlYlZp
ZXcuZ2V0KCkpOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEcmFnRXZlbnRDbGll
bnRDb29yZGluYXRlc1dpdGhTY3JvbGxPZmZzZXQpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFt
ZWQ6QCJkcm9wLXRhcmdldHMiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW4gPSAnMTAwMHB4IDAnIl07Ci0gICAg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnNjcm9sbGlu
Z0VsZW1lbnQuc2Nyb2xsVG9wID0gMTAwMCJdOwotICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJl
c2VudGF0aW9uVXBkYXRlXTsKLQotICAgIHRlc3REcmFnQW5kRHJvcE9udG9UYXJnZXRFbGVtZW50
cyh3ZWJWaWV3LmdldCgpKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRHJhZ0V2
ZW50UGFnZUNvb3JkaW5hdGVzQmFzaWMpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAs
IDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJk
cm9wLXRhcmdldHMiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAid2luZG93LnVzZVBhZ2VDb29yZGluYXRlcyA9IHRydWUiXTsKLQotICAgIHRlc3REcmFnQW5k
RHJvcE9udG9UYXJnZXRFbGVtZW50cyh3ZWJWaWV3LmdldCgpKTsKLX0KLQotVEVTVChEYXRhSW50
ZXJhY3Rpb25UZXN0cywgRHJhZ0V2ZW50UGFnZUNvb3JkaW5hdGVzV2l0aFNjcm9sbE9mZnNldCkK
LXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImRyb3AtdGFyZ2V0cyJdOwotICAgIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LnN0eWxlLm1h
cmdpbiA9ICcxMDAwcHggMCciXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSAxMDAwIl07Ci0g
ICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIndpbmRvdy51c2VQYWdl
Q29vcmRpbmF0ZXMgPSB0cnVlIl07Ci0gICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50YXRp
b25VcGRhdGVdOwotCi0gICAgdGVzdERyYWdBbmREcm9wT250b1RhcmdldEVsZW1lbnRzKHdlYlZp
ZXcuZ2V0KCkpOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEb05vdENyYXNoV2hl
blNlbGVjdGlvbklzQ2xlYXJlZEluRHJhZ1N0YXJ0KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwg
MCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5h
bWVkOkAiZHJhZ3N0YXJ0LWNsZWFyLXNlbGVjdGlvbiJdOwotCi0gICAgYXV0byBzaW11bGF0b3Ig
PSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZp
ZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgx
MDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsKLQotICAgIEVYUEVDVF9XS19TVFJF
USgiUEFTUyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJwYXJhZ3Jh
cGgudGV4dENvbnRlbnQiXSk7Ci19Ci0KLS8vIEZJWE1FOiBSZS1lbmFibGUgdGhpcyB0ZXN0IG9u
Y2Ugd2UgcmVzb2x2ZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NTIwND4KLSNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEIDw9IDExMDQwMQotVEVT
VChEYXRhSW50ZXJhY3Rpb25UZXN0cywgQ3VzdG9tQWN0aW9uU2hlZXRQb3BvdmVyKQotewotICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRUZXN0UGFnZU5hbWVkOkAibGluay1hbmQtdGFyZ2V0LWRpdiJdOwotCi0gICAgYXV0
byBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotICAgIFtkYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0U2hvdWxkRW5zdXJlVUlBcHBsaWNhdGlvbjpZRVNdOwot
Ci0gICAgX19ibG9jayBCT09MIGRpZEludm9rZUN1c3RvbUFjdGlvblNoZWV0ID0gTk87Ci0gICAg
W2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRTaG93Q3VzdG9tQWN0aW9uU2hlZXRCbG9jazpe
Qk9PTChfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIEVY
UEVDVF9FUShfV0tBY3RpdmF0ZWRFbGVtZW50VHlwZUxpbmssIGVsZW1lbnQudHlwZSk7Ci0gICAg
ICAgIEVYUEVDVF9XS19TVFJFUSgiSGVsbG8gd29ybGQiLCBlbGVtZW50LnRpdGxlLlVURjhTdHJp
bmcpOwotICAgICAgICBkaWRJbnZva2VDdXN0b21BY3Rpb25TaGVldCA9IFlFUzsKLSAgICAgICAg
cmV0dXJuIFlFUzsKLSAgICB9XTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZy
b206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKLSAgICBF
WFBFQ1RfVFJVRShkaWRJbnZva2VDdXN0b21BY3Rpb25TaGVldCk7Ci0gICAgRVhQRUNUX1dLX1NU
UkVRKCJQQVNTIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRhcmdl
dC50ZXh0Q29udGVudCJdLlVURjhTdHJpbmcpOwotfQotI2VuZGlmCi0KLVRFU1QoRGF0YUludGVy
YWN0aW9uVGVzdHMsIFVucmVzcG9uc2l2ZVBhZ2VEb2VzTm90SGFuZ1VJKQotewotICAgIF9XS1By
b2Nlc3NQb29sQ29uZmlndXJhdGlvbiAqcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uID0gW1tbX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci0gICAg
cHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91
dHNGb3JUZXN0aW5nID0gWUVTOwotCi0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCkg
Y29uZmlndXJhdGlvbjpbW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRv
cmVsZWFzZV0gcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOnByb2Nlc3NQb29sQ29uZmlndXJhdGlv
bl0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBs
ZSJdOwotICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAIndoaWxlKDEpOyIgY29tcGxl
dGlvbkhhbmRsZXI6bmlsXTsKLQotICAgIC8vIFRoZSB0ZXN0IHBhc3NlcyBpZiB3ZSBjYW4gcHJl
cGFyZSBmb3IgZGF0YSBpbnRlcmFjdGlvbiB3aXRob3V0IHRpbWluZyBvdXQuCi0gICAgYXV0byBk
cmFnU2Vzc2lvbiA9IGFkb3B0TlMoW1tNb2NrRHJhZ1Nlc3Npb24gYWxsb2NdIGluaXRdKTsKLSAg
ICBbKGlkIDxVSURyYWdJbnRlcmFjdGlvbkRlbGVnYXRlX0ZvcldlYktpdE9ubHk+KVt3ZWJWaWV3
IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlXSBfZHJhZ0ludGVyYWN0aW9uOlt3ZWJWaWV3IGRyYWdJ
bnRlcmFjdGlvbl0gcHJlcGFyZUZvclNlc3Npb246ZHJhZ1Nlc3Npb24uZ2V0KCkgY29tcGxldGlv
bjpeKCkgeyB9XTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgV2ViSXRlbVByb3Zp
ZGVyUGFzdGVib2FyZExvYWRpbmcpCi17Ci0gICAgc3RhdGljIE5TU3RyaW5nICpmYXN0U3RyaW5n
ID0gQCJUaGlzIGRhdGEgbG9hZHMgcXVpY2tseSI7Ci0gICAgc3RhdGljIE5TU3RyaW5nICpzbG93
U3RyaW5nID0gQCJUaGlzIGRhdGEgbG9hZHMgc2xvd2x5IjsKLQotICAgIFdlYkl0ZW1Qcm92aWRl
clBhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCBzaGFy
ZWRJbnN0YW5jZV07Ci0gICAgYXV0byBmYXN0SXRlbSA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRl
ciBhbGxvY10gaW5pdF0pOwotICAgIFtmYXN0SXRlbSByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlv
bkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0IG9wdGlv
bnM6bmlsIGxvYWRIYW5kbGVyOl5OU1Byb2dyZXNzICooVUlJdGVtUHJvdmlkZXJEYXRhTG9hZENv
bXBsZXRpb25CbG9jayBjb21wbGV0aW9uQmxvY2spCi0gICAgewotICAgICAgICBjb21wbGV0aW9u
QmxvY2soW2Zhc3RTdHJpbmcgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rpbmdd
LCBuaWwpOwotICAgICAgICByZXR1cm4gbmlsOwotICAgIH1dOwotCi0gICAgYXV0byBzbG93SXRl
bSA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtzbG93SXRl
bSByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAq
KWtVVFR5cGVVVEY4UGxhaW5UZXh0IG9wdGlvbnM6bmlsIGxvYWRIYW5kbGVyOl5OU1Byb2dyZXNz
ICooVUlJdGVtUHJvdmlkZXJEYXRhTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uQmxvY2sp
Ci0gICAgewotICAgICAgICBzbGVlcCgyX3MpOwotICAgICAgICBjb21wbGV0aW9uQmxvY2soW3Ns
b3dTdHJpbmcgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddLCBuaWwpOwot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIH1dOwotCi0gICAgX19ibG9jayBib29sIGhhc1J1bkZp
cnN0Q29tcGxldGlvbkJsb2NrID0gZmFsc2U7Ci0gICAgcGFzdGVib2FyZC5pdGVtUHJvdmlkZXJz
ID0gQFsgZmFzdEl0ZW0uZ2V0KCksIHNsb3dJdGVtLmdldCgpIF07Ci0gICAgW3Bhc3RlYm9hcmQg
ZG9BZnRlckxvYWRpbmdQcm92aWRlZENvbnRlbnRJbnRvRmlsZVVSTHM6XihOU0FycmF5PE5TVVJM
ICo+ICp1cmxzKSB7Ci0gICAgICAgIEVYUEVDVF9FUSgyVUwsIHVybHMuY291bnQpOwotICAgICAg
ICBhdXRvIGZpcnN0U3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENv
bnRlbnRzT2ZVUkw6dXJsc1swXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpu
aWxdKTsKLSAgICAgICAgYXV0byBzZWNvbmRTdHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxs
b2NdIGluaXRXaXRoQ29udGVudHNPZlVSTDp1cmxzWzFdIGVuY29kaW5nOk5TVVRGOFN0cmluZ0Vu
Y29kaW5nIGVycm9yOm5pbF0pOwotICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoZmFzdFN0cmluZywg
W2ZpcnN0U3RyaW5nIFVURjhTdHJpbmddKTsKLSAgICAgICAgRVhQRUNUX1dLX1NUUkVRKHNsb3dT
dHJpbmcsIFtzZWNvbmRTdHJpbmcgVVRGOFN0cmluZ10pOwotICAgICAgICBoYXNSdW5GaXJzdENv
bXBsZXRpb25CbG9jayA9IHRydWU7Ci0gICAgfSBzeW5jaHJvbm91c1RpbWVvdXQ6NjAwXTsKLSAg
ICBFWFBFQ1RfVFJVRShoYXNSdW5GaXJzdENvbXBsZXRpb25CbG9jayk7Ci0KLSAgICBfX2Jsb2Nr
IGJvb2wgaGFzUnVuU2Vjb25kQ29tcGxldGlvbkJsb2NrID0gZmFsc2U7Ci0gICAgW3Bhc3RlYm9h
cmQgZG9BZnRlckxvYWRpbmdQcm92aWRlZENvbnRlbnRJbnRvRmlsZVVSTHM6XihOU0FycmF5PE5T
VVJMICo+ICp1cmxzKSB7Ci0gICAgICAgIEVYUEVDVF9FUSgyVUwsIHVybHMuY291bnQpOwotICAg
ICAgICBhdXRvIGZpcnN0U3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0
aENvbnRlbnRzT2ZVUkw6dXJsc1swXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJv
cjpuaWxdKTsKLSAgICAgICAgYXV0byBzZWNvbmRTdHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcg
YWxsb2NdIGluaXRXaXRoQ29udGVudHNPZlVSTDp1cmxzWzFdIGVuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nIGVycm9yOm5pbF0pOwotICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoZmFzdFN0cmlu
ZywgW2ZpcnN0U3RyaW5nIFVURjhTdHJpbmddKTsKLSAgICAgICAgRVhQRUNUX1dLX1NUUkVRKHNs
b3dTdHJpbmcsIFtzZWNvbmRTdHJpbmcgVVRGOFN0cmluZ10pOwotICAgICAgICBoYXNSdW5TZWNv
bmRDb21wbGV0aW9uQmxvY2sgPSB0cnVlOwotICAgIH0gc3luY2hyb25vdXNUaW1lb3V0OjBdOwot
ICAgIEVYUEVDVF9GQUxTRShoYXNSdW5TZWNvbmRDb21wbGV0aW9uQmxvY2spOwotICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmaGFzUnVuU2Vjb25kQ29tcGxldGlvbkJsb2NrKTsKLX0KLQot
VEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRG9Ob3RDcmFzaFdoZW5TZWxlY3Rpb25Nb3Zlc09m
ZnNjcmVlbkFmdGVyRHJhZ1N0YXJ0KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1
MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHJh
Z3N0YXJ0LWNoYW5nZS1zZWxlY3Rpb24tb2Zmc2NyZWVuIl07Ci0KLSAgICBhdXRvIHNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtl
KDEwMCwgMTAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDEwMCldOwotCi0gICAgRVhQRUNUX1dLX1NU
UkVRKCJGQVIgT0ZGU0NSRUVOIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAImdldFNlbGVjdGlvbigpLmdldFJhbmdlQXQoMCkudG9TdHJpbmcoKSJdKTsKLX0KLQotVEVT
VChEYXRhSW50ZXJhY3Rpb25UZXN0cywgQWRkaXRpb25hbEl0ZW1zQ2FuQmVQcmV2ZW50ZWRPbkRy
YWdTdGFydCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNlbGVjdGVkLXRleHQtaW1h
Z2UtbGluay1hbmQtZWRpdGFibGUiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAibGluay5hZGRFdmVudExpc3RlbmVyKCdkcmFnc3RhcnQnLCBlID0+IGUucHJl
dmVudERlZmF1bHQoKSkiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAiaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgZSA9PiBlLnByZXZlbnRE
ZWZhdWx0KCkpIl07Ci0KLSAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJh
Y3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0g
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2Uo
NTAsIDQwMCkgYWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zOkB7Ci0gICAgICAgIEAwLjMz
OiBbTlNWYWx1ZSB2YWx1ZVdpdGhDR1BvaW50OkNHUG9pbnRNYWtlKDUwLCAxNTApXSwKLSAgICAg
ICAgQDAuNjY6IFtOU1ZhbHVlIHZhbHVlV2l0aENHUG9pbnQ6Q0dQb2ludE1ha2UoNTAsIDI1MCld
Ci0gICAgfV07Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJBQkNEIiwgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdKTsKLX0KLQotVEVTVChE
YXRhSW50ZXJhY3Rpb25UZXN0cywgQWRkaXRpb25hbExpbmtBbmRJbWFnZUludG9Db250ZW50RWRp
dGFibGUpCi17Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzZWxlY3RlZC10ZXh0LWltYWdl
LWxpbmstYW5kLWVkaXRhYmxlIl07Ci0KLSAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tE
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3Lmdl
dCgpXSk7Ci0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQ
b2ludE1ha2UoNTAsIDQwMCkgYWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zOkB7Ci0gICAg
ICAgIEAwLjMzOiBbTlNWYWx1ZSB2YWx1ZVdpdGhDR1BvaW50OkNHUG9pbnRNYWtlKDUwLCAxNTAp
XSwKLSAgICAgICAgQDAuNjY6IFtOU1ZhbHVlIHZhbHVlV2l0aENHUG9pbnQ6Q0dQb2ludE1ha2Uo
NTAsIDI1MCldCi0gICAgfV07Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCJBQkNEQSBsaW5rIiwgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJd
KTsKLSAgICBFWFBFQ1RfVFJVRShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAiISFlZGl0b3IucXVlcnlTZWxlY3RvcignaW1nJykiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVR
KCJodHRwczovL3d3dy5hcHBsZS5jb20vIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAImVkaXRvci5xdWVyeVNlbGVjdG9yKCdhJykuaHJlZiJdKTsKLX0KLQotVEVTVChE
YXRhSW50ZXJhY3Rpb25UZXN0cywgRHJhZ0xpZnRQcmV2aWV3RGF0YVRyYW5zZmVyU2V0RHJhZ0lt
YWdlKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZp
ZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiRGF0YVRyYW5zZmVyLXNldERyYWdJ
bWFnZSJdOwotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIC8v
IFVzZSBEYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlIHRvIHNwZWNpZnkgYW4gZXhpc3RpbmcgaW1h
Z2UgZWxlbWVudCBpbiB0aGUgRE9NLgotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFr
ZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgyNTAsIDUwKV07Ci0gICAgY2hlY2tDR1JlY3RJc0Vx
dWFsVG9DR1JlY3RXaXRoTG9nZ2luZyh7ezEwMCwgNTB9LCB7MjE1LCAxNzR9fSwgW3NpbXVsYXRv
ciBsaWZ0UHJldmlld3NdWzBdLnZpZXcuZnJhbWUpOwotCi0gICAgLy8gVXNlIERhdGFUcmFuc2Zl
ci5zZXREcmFnSW1hZ2UgdG8gc3BlY2lmeSBhbiBleGlzdGluZyBpbWFnZSBlbGVtZW50IGluIHRo
ZSBET00sIHdpdGggeCBhbmQgeSBvZmZzZXRzLgotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1Bv
aW50TWFrZSgxMCwgMTUwKSB0bzpDR1BvaW50TWFrZSgyNTAsIDE1MCldOwotICAgIGNoZWNrQ0dS
ZWN0SXNFcXVhbFRvQ0dSZWN0V2l0aExvZ2dpbmcoe3stOTAsIDUwfSwgezIxNSwgMTc0fX0sIFtz
aW11bGF0b3IgbGlmdFByZXZpZXdzXVswXS52aWV3LmZyYW1lKTsKLQotICAgIC8vIFVzZSBEYXRh
VHJhbnNmZXIuc2V0RHJhZ0ltYWdlIHRvIHNwZWNpZnkgYSBuZXdseSBjcmVhdGVkIEltYWdlLCBk
aXNjb25uZWN0ZWQgZnJvbSB0aGUgRE9NLgotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50
TWFrZSgxMDAsIDI1MCkgdG86Q0dQb2ludE1ha2UoMjUwLCAyNTApXTsKLSAgICBjaGVja0NHUmVj
dElzRXF1YWxUb0NHUmVjdFdpdGhMb2dnaW5nKHt7MTAwLCAyNTB9LCB7MjE1LCAxNzR9fSwgW3Np
bXVsYXRvciBsaWZ0UHJldmlld3NdWzBdLnZpZXcuZnJhbWUpOwotCi0gICAgLy8gRG9uJ3QgdXNl
IERhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UgYW5kIGZhbGwgYmFjayB0byBzbmFwc2hvdHRpbmcg
dGhlIGRyYWdnZWQgZWxlbWVudC4KLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2Uo
NTAsIDM1MCkgdG86Q0dQb2ludE1ha2UoMjUwLCAzNTApXTsKLSAgICBjaGVja0NHUmVjdElzRXF1
YWxUb0NHUmVjdFdpdGhMb2dnaW5nKHt7MCwgMzAwfSwgezMwMCwgMTAwfX0sIFtzaW11bGF0b3Ig
bGlmdFByZXZpZXdzXVswXS52aWV3LmZyYW1lKTsKLQotICAgIC8vIFBlcmZvcm0gYSBub3JtYWwg
ZHJhZyBvbiBhbiBpbWFnZS4KLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAs
IDQ1MCkgdG86Q0dQb2ludE1ha2UoMjUwLCA0NTApXTsKLSAgICBjaGVja0NHUmVjdElzRXF1YWxU
b0NHUmVjdFdpdGhMb2dnaW5nKHt7MCwgNDAwfSwgezIxNSwgMTc0fX0sIFtzaW11bGF0b3IgbGlm
dFByZXZpZXdzXVswXS52aWV3LmZyYW1lKTsKLX0KLQotI2lmIF9fSVBIT05FX09TX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDExMDMwMAotCi1zdGF0aWMgTlNEYXRhICp0ZXN0SWNvbkltYWdlRGF0
YSgpCi17Ci0gICAgcmV0dXJuIFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mRmlsZTpbW05TQnVu
ZGxlIG1haW5CdW5kbGVdIHBhdGhGb3JSZXNvdXJjZTpAImljb24iIG9mVHlwZTpAInBuZyIgaW5E
aXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKLX0KLQotVEVTVChEYXRhSW50
ZXJhY3Rpb25UZXN0cywgRGF0YVRyYW5zZmVyR2V0RGF0YVdoZW5Ecm9wcGluZ0ltYWdlQW5kTWFy
a3VwKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgV0tQcmVm
ZXJlbmNlc1NldEN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgoV0tQcmVmZXJlbmNlc1JlZilb
d2ViVmlldyBjb25maWd1cmF0aW9uXS5wcmVmZXJlbmNlcywgdHJ1ZSk7Ci0gICAgW3dlYlZpZXcg
c3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiRGF0YVRyYW5zZmVyIl07Ci0KLSAgICBh
dXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2Nd
IGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgYXV0byBpdGVtUHJvdmlkZXIg
PSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbaXRlbVByb3Zp
ZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5n
ICopa1VUVHlwZVBORyB3aXRoRGF0YTp0ZXN0SWNvbkltYWdlRGF0YSgpXTsKLSAgICBOU1N0cmlu
ZyAqbWFya3VwU3RyaW5nID0gQCI8c2NyaXB0PmJhcigpPC9zY3JpcHQ+PHN0cm9uZyBvbm1vdXNl
ZG93bj1qYXZhc2NyaXB0OnZvaWQoMCk+SEVMTE8gV09STEQ8L3N0cm9uZz4iOwotICAgIFtpdGVt
UHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNT
dHJpbmcgKilrVVRUeXBlSFRNTCB3aXRoRGF0YTpbbWFya3VwU3RyaW5nIGRhdGFVc2luZ0VuY29k
aW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07Ci0gICAgW2l0ZW1Qcm92aWRlciBzZXRTdWdnZXN0
ZWROYW1lOkAiaWNvbiJdOwotICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJz
OkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2lu
dFplcm8gdG86Q0dQb2ludE1ha2UoNTAsIDEwMCldOwotCi0gICAgRVhQRUNUX1dLX1NUUkVRKCJG
aWxlcywgdGV4dC9odG1sIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
InR5cGVzLnRleHRDb250ZW50Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiKFNUUklORywgdGV4
dC9odG1sKSwgKEZJTEUsIGltYWdlL3BuZykiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAiaXRlbXMudGV4dENvbnRlbnQiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCIo
J2ljb24ucG5nJywgaW1hZ2UvcG5nKSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJmaWxlcy50ZXh0Q29udGVudCJdKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ1cmxEYXRhLnRleHRDb250ZW50
Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAInRleHREYXRhLnRleHRDb250ZW50Il0pOwotICAgIEVYUEVDVF9XS19TVFJF
USgiSEVMTE8gV09STEQiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
aHRtbERhdGEudGV4dENvbnRlbnQiXSk7Ci0gICAgRVhQRUNUX0ZBTFNFKFtbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicmF3SFRNTERhdGEudGV4dENvbnRlbnQiXSBjb250
YWluc1N0cmluZzpAInNjcmlwdCJdKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywg
RGF0YVRyYW5zZmVyR2V0RGF0YVdoZW5Ecm9wcGluZ1BsYWluVGV4dCkKLXsKLSAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
VGVzdFBhZ2VOYW1lZDpAImR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07Ci0gICAgYXV0byBzaW11
bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0
aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotCi0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAInNlbGVjdChwbGFpbikiXTsKLSAgICBbc2ltdWxhdG9yIHJ1bkZyb206
Q0dQb2ludE1ha2UoNTAsIDc1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07Ci0gICAgY2hlY2tK
U09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91
dHB1dC52YWx1ZSJdLCBAewotICAgICAgICBAImRyYWdvdmVyIjogQHsgQCJ0ZXh0L3BsYWluIiA6
IEAiIiB9LAotICAgICAgICBAImRyb3AiOiBAeyBAInRleHQvcGxhaW4iIDogQCJQbGFpbiB0ZXh0
IiB9Ci0gICAgfSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERhdGFUcmFuc2Zl
ckdldERhdGFXaGVuRHJvcHBpbmdDdXN0b21EYXRhKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwg
MCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5h
bWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKLSAgICBhdXRvIHNpbXVsYXRvciA9IGFk
b3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3
ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAic2VsZWN0KHJpY2gpIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAIndyaXRlQ3VzdG9tRGF0YSA9IHRydWUiXTsKLSAgICBbc2ltdWxhdG9yIHJ1bkZy
b206Q0dQb2ludE1ha2UoNTAsIDIyNSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOwotICAgIGNo
ZWNrSlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJvdXRwdXQudmFsdWUiXSwgQHsKLSAgICAgICAgQCJkcmFnb3ZlciIgOiBAewotICAgICAgICAg
ICAgQCJ0ZXh0L3BsYWluIiA6IEAiIiwKLSAgICAgICAgICAgIEAiZm9vL3BsYWluIiA6IEAiIiwK
LSAgICAgICAgICAgIEAidGV4dC9odG1sIiA6IEAiIiwKLSAgICAgICAgICAgIEAiYmFyL2h0bWwi
IDogQCIiLAotICAgICAgICAgICAgQCJ0ZXh0L3VyaS1saXN0IiA6IEAiIiwKLSAgICAgICAgICAg
IEAiYmF6L3VyaS1saXN0IiA6IEAiIgotICAgICAgICB9LAotICAgICAgICBAImRyb3AiIDogQHsK
LSAgICAgICAgICAgIEAidGV4dC9wbGFpbiIgOiBAImJlbiBiaXRkaWRkbGUiLAotICAgICAgICAg
ICAgQCJmb28vcGxhaW4iIDogQCJldmEgbHUgYXRvciIsCi0gICAgICAgICAgICBAInRleHQvaHRt
bCIgOiBAIjxiPmJvbGQgdGV4dDwvYj4iLAotICAgICAgICAgICAgQCJiYXIvaHRtbCIgOiBAIjxp
Pml0YWxpYyB0ZXh0PC9pPiIsCi0gICAgICAgICAgICBAInRleHQvdXJpLWxpc3QiIDogQCJodHRw
czovL3d3dy5hcHBsZS5jb20iLAotICAgICAgICAgICAgQCJiYXovdXJpLWxpc3QiIDogQCJodHRw
czovL3d3dy53ZWJraXQub3JnIgotICAgICAgICB9Ci0gICAgfSk7Ci19Ci0KLVRFU1QoRGF0YUlu
dGVyYWN0aW9uVGVzdHMsIERhdGFUcmFuc2ZlckdldERhdGFXaGVuRHJvcHBpbmdVUkwpCi17Ci0g
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOwotICAg
IGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJyaWNoLmlubmVySFRNTCA9ICc8YSBocmVmPVwiaHR0
cHM6Ly93d3cuYXBwbGUuY29tL1wiPlRoaXMgaXMgYSBsaW5rLjwvYT4nIl07Ci0gICAgW3NpbXVs
YXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCAyMjUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUp
XTsKLSAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7Ci0gICAgICAgIEAiZHJhZ292ZXIiOiBAewot
ICAgICAgICAgICAgQCJ0ZXh0L3VyaS1saXN0IiA6IEAiIiwKLSAgICAgICAgICAgIEAidGV4dC9w
bGFpbiIgOiBAIiIKLSAgICAgICAgfSwKLSAgICAgICAgQCJkcm9wIjogQHsKLSAgICAgICAgICAg
IEAidGV4dC91cmktbGlzdCIgOiBAImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8iLAotICAgICAgICAg
ICAgQCJ0ZXh0L3BsYWluIiA6IEAiaHR0cHM6Ly93d3cuYXBwbGUuY29tLyIKLSAgICAgICAgfQot
ICAgIH0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEYXRhVHJhbnNmZXJHZXRE
YXRhV2hlbkRyb3BwaW5nSW1hZ2VXaXRoRmlsZVVSTCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAs
IDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VO
YW1lZDpAImR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07Ci0gICAgYXV0byBzaW11bGF0b3IgPSBh
ZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6
d2ViVmlldy5nZXQoKV0pOwotCi0gICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJ
dGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBOU1VSTCAqaWNvblVSTCA9IFtbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJpY29uIiB3aXRoRXh0ZW5zaW9uOkAicG5n
IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwotICAgIFtpdGVtUHJv
dmlkZXIgcmVnaXN0ZXJGaWxlUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJp
bmcgKilrVVRUeXBlUE5HIGZpbGVPcHRpb25zOjAgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJl
cHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxlcjpbcHJvdGVjdGVkSWNvblVSTCA9
IHJldGFpblB0cihpY29uVVJMKV0gKEZpbGVMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRpb25I
YW5kbGVyKSAtPiBOU1Byb2dyZXNzICogewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihwcm90
ZWN0ZWRJY29uVVJMLmdldCgpLCBOTywgbmlsKTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9
XTsKLSAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0Omljb25VUkwgdmlzaWJpbGl0eTpV
SUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOwotICAgIFtz
aW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBd
XTsKLQotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDM3NSkgdG86Q0dQ
b2ludE1ha2UoNTAsIDM3NSldOwotCi0gICAgLy8gRmlsZSBVUkxzIHNob3VsZCBuZXZlciBiZSBl
eHBvc2VkIGRpcmVjdGx5IHRvIHdlYiBjb250ZW50LCBzbyBEYXRhVHJhbnNmZXIuZ2V0RGF0YSBz
aG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBoZXJlLgotICAgIGNoZWNrSlNPTldpdGhMb2dn
aW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUi
XSwgQHsKLSAgICAgICAgQCJkcmFnb3ZlciI6IEB7IEAiRmlsZXMiOiBAIiIsIEAidGV4dC91cmkt
bGlzdCI6IEAiIiB9LAotICAgICAgICBAImRyb3AiOiBAeyBAIkZpbGVzIjogQCIiLCBAInRleHQv
dXJpLWxpc3QiOiBAIiIgfQotICAgIH0pOwotfQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3Rz
LCBEYXRhVHJhbnNmZXJHZXREYXRhV2hlbkRyb3BwaW5nSW1hZ2VXaXRoSFRUUFVSTCkKLXsKLSAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07Ci0gICAg
YXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotCi0gICAgYXV0byBpdGVtUHJvdmlk
ZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbaXRlbVBy
b3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3Ry
aW5nICopa1VUVHlwZUpQRUcgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9u
VmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxlcjpeTlNQcm9ncmVzcyAqKERhdGFMb2FkQ29tcGxldGlv
bkJsb2NrIGNvbXBsZXRpb25IYW5kbGVyKQotICAgIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoVUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSksIG5pbCk7
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfV07Ci0gICAgW2l0ZW1Qcm92aWRlciByZWdpc3Rl
ck9iamVjdDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly93ZWJraXQub3JnIl0gdmlzaWJp
bGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOwot
ICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5n
ZXQoKSBdXTsKLQotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDM3NSkg
dG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOwotICAgIGNoZWNrSlNPTldpdGhMb2dnaW5nKFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwgQHsKLSAg
ICAgICAgQCJkcmFnb3ZlciI6IEB7IEAiRmlsZXMiOiBAIiIsIEAidGV4dC91cmktbGlzdCI6IEAi
IiB9LAotICAgICAgICBAImRyb3AiOiBAeyBAIkZpbGVzIjogQCIiLCBAInRleHQvdXJpLWxpc3Qi
OiBAImh0dHA6Ly93ZWJraXQub3JnLyIgfQotICAgIH0pOwotfQotCi1URVNUKERhdGFJbnRlcmFj
dGlvblRlc3RzLCBEYXRhVHJhbnNmZXJHZXREYXRhV2hlbkRyb3BwaW5nUmVzcGVjdHNQcmVzZW50
YXRpb25TdHlsZSkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwotICAg
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1bXAtZGF0YXRyYW5z
ZmVyLXR5cGVzIl07Ci0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotCi0g
ICAgcnVuVGVzdFdpdGhUZW1wb3JhcnlUZXh0RmlsZSheKE5TVVJMICpmaWxlVVJMKSB7Ci0gICAg
ICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBp
bml0XSk7Ci0gICAgICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJGaWxlUmVwcmVzZW50YXRpb25G
b3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlVVRGOFBsYWluVGV4dCBmaWxlT3B0
aW9uczowIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlB
bGwgbG9hZEhhbmRsZXI6W3Byb3RlY3RlZEZpbGVVUkwgPSByZXRhaW5QdHIoZmlsZVVSTCldIChG
aWxlTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uSGFuZGxlcikgLT4gTlNQcm9ncmVzcyAq
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHByb3RlY3RlZEZpbGVVUkwuZ2V0KCks
IE5PLCBuaWwpOwotICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgfV07Ci0gICAgICAg
IFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQo
KSBdXTsKLQotICAgICAgICBbaXRlbVByb3ZpZGVyIHNldFByZWZlcnJlZFByZXNlbnRhdGlvblN0
eWxlOlVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVBdHRhY2htZW50XTsKLSAgICAgICAgW3Np
bXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgMzc1KSB0bzpDR1BvaW50TWFrZSg1MCwg
Mzc1KV07Ci0gICAgICAgIGNoZWNrSlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwgQHsKLSAgICAgICAgICAgIEAiZHJh
Z292ZXIiOiBAeyBAIkZpbGVzIiA6IEAiIiB9LAotICAgICAgICAgICAgQCJkcm9wIjogQHsgQCJG
aWxlcyIgOiBAIiIgfQotICAgICAgICB9KTsKLQotICAgICAgICBbaXRlbVByb3ZpZGVyIHNldFBy
ZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlOlVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVJbmxp
bmVdOwotICAgICAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCAzNzUpIHRv
OkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKLSAgICAgICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAewot
ICAgICAgICAgICAgQCJkcmFnb3ZlciI6IEB7IEAidGV4dC9wbGFpbiIgOiBAIiIgfSwKLSAgICAg
ICAgICAgIEAiZHJvcCI6IEB7IEAidGV4dC9wbGFpbiIgOiBAIlRoaXMgaXMgYSB0aW55IGJsb2Ig
b2YgdGV4dC4iIH0KLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0
aW9uVGVzdHMsIERhdGFUcmFuc2ZlclNldERhdGFDYW5ub3RXcml0ZVBsYXRmb3JtVHlwZXMpCi17
Ci0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5j
aHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOwot
ICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBh
bGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzZWxlY3QocmljaCkiXTsKLSAgICBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY3VzdG9tRGF0YSA9IHsgJ3RleHQvcGxh
aW4nIDogJ2ZvbycsICdjb20uYWRvYmUucGRmJyA6ICd0cnkgYW5kIGRlY29kZSBtZSEnIH0iXTsK
LSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0b21E
YXRhID0gdHJ1ZSJdOwotCi0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCAy
MjUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKLSAgICBjaGVja0ZpcnN0VHlwZUlzUHJlc2Vu
dEFuZFNlY29uZFR5cGVJc01pc3Npbmcoc2ltdWxhdG9yLmdldCgpLCBrVVRUeXBlVVRGOFBsYWlu
VGV4dCwga1VUVHlwZVBERik7Ci0gICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAewotICAgICAgICBA
ImRyYWdvdmVyIjogQHsKLSAgICAgICAgICAgIEAidGV4dC9wbGFpbiI6IEAiIiwKLSAgICAgICAg
ICAgIEAiY29tLmFkb2JlLnBkZiI6IEAiIgotICAgICAgICB9LAotICAgICAgICBAImRyb3AiOiBA
ewotICAgICAgICAgICAgQCJ0ZXh0L3BsYWluIjogQCJmb28iLAotICAgICAgICAgICAgQCJjb20u
YWRvYmUucGRmIjogQCJ0cnkgYW5kIGRlY29kZSBtZSEiCi0gICAgICAgIH0KLSAgICB9KTsKLX0K
LQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRGF0YVRyYW5zZmVyR2V0RGF0YVJlYWRQbGFp
bkFuZFJpY2hUZXh0KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0g
ICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiRGF0YVRyYW5zZmVy
Il07Ci0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotCi0gICAgYXV0byBp
dGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAg
ICBOU0RpY3Rpb25hcnkgKnRleHRBdHRyaWJ1dGVzID0gQHsgTlNGb250QXR0cmlidXRlTmFtZTog
W1VJRm9udCBib2xkU3lzdGVtRm9udE9mU2l6ZToyMF0gfTsKLSAgICBOU0F0dHJpYnV0ZWRTdHJp
bmcgKnJpY2hUZXh0ID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5n
OkAiV2ViS2l0IiBhdHRyaWJ1dGVzOnRleHRBdHRyaWJ1dGVzXTsKLSAgICBbaXRlbVByb3ZpZGVy
IHJlZ2lzdGVyT2JqZWN0OnJpY2hUZXh0IHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNl
bnRhdGlvblZpc2liaWxpdHlBbGxdOwotICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy53ZWJraXQub3JnLyJdIHZpc2liaWxp
dHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGxdOwotICAgIFtpdGVt
UHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6QCJXZWJLaXQiIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlk
ZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGxdOwotCi0gICAgW3NpbXVsYXRvciBzZXRFeHRl
cm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtzaW11bGF0
b3IgcnVuRnJvbTpDR1BvaW50WmVybyB0bzpDR1BvaW50TWFrZSg1MCwgMTAwKV07Ci0KLSAgICBF
WFBFQ1RfV0tfU1RSRVEoInRleHQvaHRtbCwgdGV4dC9wbGFpbiwgdGV4dC91cmktbGlzdCIsIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0eXBlcy50ZXh0Q29udGVudCJd
KTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIldlYktpdCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJ0ZXh0RGF0YS50ZXh0Q29udGVudCJdKTsKLSAgICBFWFBFQ1RfV0tf
U1RSRVEoImh0dHBzOi8vd3d3LndlYmtpdC5vcmcvIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAInVybERhdGEudGV4dENvbnRlbnQiXSk7Ci0gICAgRVhQRUNUX1dLX1NU
UkVRKCJXZWJLaXQiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaHRt
bERhdGEudGV4dENvbnRlbnQiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCIoU1RSSU5HLCB0ZXh0
L2h0bWwpLCAoU1RSSU5HLCB0ZXh0L3BsYWluKSwgKFNUUklORywgdGV4dC91cmktbGlzdCkiLCBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaXRlbXMudGV4dENvbnRlbnQi
XSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAiZmlsZXMudGV4dENvbnRlbnQiXSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0
aW9uVGVzdHMsIERhdGFUcmFuc2ZlclN1cHByZXNzR2V0RGF0YUR1ZVRvUHJlc2VuY2VPZlRleHRG
aWxlKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZp
ZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiRGF0YVRyYW5zZmVyIl07Ci0gICAg
YXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwotCi0gICAgYXV0byBpdGVtUHJvdmlk
ZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbaXRlbVBy
b3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OkAiSGVsbG8gd29ybGQiIHZpc2liaWxpdHk6TlNJdGVtUHJv
dmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGxdOwotICAgIFtpdGVtUHJvdmlkZXIgc2V0
U3VnZ2VzdGVkTmFtZTpAImhlbGxvLnR4dCJdOwotCi0gICAgW3NpbXVsYXRvciBzZXRFeHRlcm5h
bEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOwotICAgIFtzaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50WmVybyB0bzpDR1BvaW50TWFrZSg1MCwgMTAwKV07Ci0KLSAgICBFWFBF
Q1RfV0tfU1RSRVEoIkZpbGVzIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAInR5cGVzLnRleHRDb250ZW50Il0pOwotICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRleHREYXRhLnRleHRDb250ZW50Il0p
OwotICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAInVybERhdGEudGV4dENvbnRlbnQiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCIi
LCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaHRtbERhdGEudGV4dENv
bnRlbnQiXSk7Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCIoRklMRSwgdGV4dC9wbGFpbikiLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaXRlbXMudGV4dENvbnRlbnQiXSk7
Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCIoJ2hlbGxvLnR4dCcsIHRleHQvcGxhaW4pIiwgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImZpbGVzLnRleHRDb250ZW50Il0pOwot
fQotCi1URVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEYXRhVHJhbnNmZXJHZXREYXRhQ2Fubm90
UmVhZFByaXZhdGVBcmJpdHJhcnlUeXBlcykKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpA
ImR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07Ci0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5T
KFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmll
dy5nZXQoKV0pOwotCi0gICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJv
dmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJl
c2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZU1QMyB2aXNpYmls
aXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsIGxvYWRIYW5kbGVy
Ol5OU1Byb2dyZXNzICooRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkhhbmRsZXIp
Ci0gICAgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihbQCJ0aGlzIGlzIGEgdGVzdCIgZGF0
YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddLCBuaWwpOwotICAgICAgICByZXR1
cm4gbmlsOwotICAgIH1dOwotICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50
YXRpb25Gb3JUeXBlSWRlbnRpZmllcjpAIm9yZy5XZWJLaXQuVGVzdFdlYktpdEFQSS5jdXN0b20t
cGFzdGVib2FyZC10eXBlIiB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25W
aXNpYmlsaXR5QWxsIGxvYWRIYW5kbGVyOl5OU1Byb2dyZXNzICooRGF0YUxvYWRDb21wbGV0aW9u
QmxvY2sgY29tcGxldGlvbkhhbmRsZXIpCi0gICAgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihbQCJ0aGlzIGlzIGFub3RoZXIgdGVzdCIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5n
RW5jb2RpbmddLCBuaWwpOwotICAgICAgICByZXR1cm4gbmlsOwotICAgIH1dOwotICAgIFtzaW11
bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsK
LSAgICBbaXRlbVByb3ZpZGVyIHNldFByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlOlVJUHJlZmVy
cmVkUHJlc2VudGF0aW9uU3R5bGVJbmxpbmVdOwotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1Bv
aW50TWFrZSgzMDAsIDM3NSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOwotICAgIGNoZWNrSlNP
TldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRw
dXQudmFsdWUiXSwgQHsKLSAgICAgICAgQCJkcmFnb3ZlciI6IEB7IH0sCi0gICAgICAgIEAiZHJv
cCI6IEB7IH0KLSAgICB9KTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRGF0YVRy
YW5zZmVyU2V0RGF0YVZhbGlkVVJMKQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1
MDApXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVt
cC1kYXRhdHJhbnNmZXItdHlwZXMiXTsKLSAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tE
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3Lmdl
dCgpXSk7Ci0KLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic2Vs
ZWN0KHJpY2gpIl07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
ImN1c3RvbURhdGEgPSB7ICd1cmwnIDogJ2h0dHBzOi8vd2Via2l0Lm9yZy9iLzEyMycgfSJdOwot
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3cml0ZUN1c3RvbURh
dGEgPSB0cnVlIl07Ci0KLSAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgIFtzaW11
bGF0b3IuZ2V0KCkgc2V0T3ZlcnJpZGVQZXJmb3JtRHJvcEJsb2NrOl5OU0FycmF5PFVJRHJhZ0l0
ZW0gKj4gKihpZCA8VUlEcm9wU2Vzc2lvbj4gc2Vzc2lvbikKLSAgICB7Ci0gICAgICAgIEVYUEVD
VF9FUSgxVUwsIHNlc3Npb24uaXRlbXMuY291bnQpOwotICAgICAgICBhdXRvICppdGVtID0gc2Vz
c2lvbi5pdGVtc1swXS5pdGVtUHJvdmlkZXI7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFtpdGVtLnJl
Z2lzdGVyZWRUeXBlSWRlbnRpZmllcnMgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlw
ZVVSTF0pOwotICAgICAgICBFWFBFQ1RfVFJVRShbaXRlbSBjYW5Mb2FkT2JqZWN0T2ZDbGFzczog
W05TVVJMIGNsYXNzXV0pOwotICAgICAgICBbaXRlbSBsb2FkT2JqZWN0T2ZDbGFzczpbTlNVUkwg
Y2xhc3NdIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQ8TlNJdGVtUHJvdmlkZXJSZWFkaW5nPiB1cmws
IE5TRXJyb3IgKmVycm9yKSB7Ci0gICAgICAgICAgICBFWFBFQ1RfVFJVRShbdXJsIGlzS2luZE9m
Q2xhc3M6IFtOU1VSTCBjbGFzc11dKTsKLSAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUShbKE5T
VVJMICopdXJsIGFic29sdXRlU3RyaW5nXSwgQCJodHRwczovL3dlYmtpdC5vcmcvYi8xMjMiKTsK
LSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICB9XTsKLSAgICAgICAgcmV0dXJuIHNl
c3Npb24uaXRlbXM7Ci0gICAgfV07Ci0gICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtl
KDUwLCAyMjUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKLQotICAgIGNoZWNrSlNPTldpdGhM
b2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFs
dWUiXSwgQHsKLSAgICAgICAgQCJkcmFnb3ZlciI6IEB7Ci0gICAgICAgICAgICBAInRleHQvdXJp
LWxpc3QiOiBAIiIsCi0gICAgICAgIH0sCi0gICAgICAgIEAiZHJvcCI6IEB7Ci0gICAgICAgICAg
ICBAInRleHQvdXJpLWxpc3QiOiBAImh0dHBzOi8vd2Via2l0Lm9yZy9iLzEyMyIsCi0gICAgICAg
IH0KLSAgICB9KTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwotfQotCi1U
RVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEYXRhVHJhbnNmZXJTZXREYXRhVW5lc2NhcGVkVVJM
KQotewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgW3dlYlZpZXcg
c3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXItdHlwZXMi
XTsKLSAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0KLSAgICBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic2VsZWN0KHJpY2gpIl07Ci0gICAgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImN1c3RvbURhdGEgPSB7ICd1cmwn
IDogJ2h0dHA6Ly93ZWJraXQub3JnL2IvXHU0RjYwXHU1OTdEOz94PTggKyA2JyB9Il07Ci0gICAg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIndyaXRlQ3VzdG9tRGF0YSA9
IHRydWUiXTsKLQotICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7Ci0gICAgW3NpbXVsYXRv
ci5nZXQoKSBzZXRPdmVycmlkZVBlcmZvcm1Ecm9wQmxvY2s6Xk5TQXJyYXk8VUlEcmFnSXRlbSAq
PiAqKGlkIDxVSURyb3BTZXNzaW9uPiBzZXNzaW9uKQotICAgIHsKLSAgICAgICAgRVhQRUNUX0VR
KDFVTCwgc2Vzc2lvbi5pdGVtcy5jb3VudCk7Ci0gICAgICAgIGF1dG8gKml0ZW0gPSBzZXNzaW9u
Lml0ZW1zWzBdLml0ZW1Qcm92aWRlcjsKLSAgICAgICAgRVhQRUNUX1RSVUUoW2l0ZW0ucmVnaXN0
ZXJlZFR5cGVJZGVudGlmaWVycyBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilrVVRUeXBlVVJM
XSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFtpdGVtIGNhbkxvYWRPYmplY3RPZkNsYXNzOiBbTlNV
UkwgY2xhc3NdXSk7Ci0gICAgICAgIFtpdGVtIGxvYWRPYmplY3RPZkNsYXNzOltOU1VSTCBjbGFz
c10gY29tcGxldGlvbkhhbmRsZXI6XihpZDxOU0l0ZW1Qcm92aWRlclJlYWRpbmc+IHVybCwgTlNF
cnJvciAqZXJyb3IpIHsKLSAgICAgICAgICAgIEVYUEVDVF9UUlVFKFt1cmwgaXNLaW5kT2ZDbGFz
czogW05TVVJMIGNsYXNzXV0pOwotICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKFsoTlNVUkwg
Kil1cmwgYWJzb2x1dGVTdHJpbmddLCBAImh0dHA6Ly93ZWJraXQub3JnL2IvJUU0JUJEJUEwJUU1
JUE1JUJEOz94PTglMjArJTIwNiIpOwotICAgICAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAg
IH1dOwotICAgICAgICByZXR1cm4gc2Vzc2lvbi5pdGVtczsKLSAgICB9XTsKLSAgICBbc2ltdWxh
dG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDIyNSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSld
OwotCi0gICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAewotICAgICAgICBAImRyYWdvdmVyIjogQHsK
LSAgICAgICAgICAgIEAidGV4dC91cmktbGlzdCI6IEAiIiwKLSAgICAgICAgfSwKLSAgICAgICAg
QCJkcm9wIjogQHsKLSAgICAgICAgICAgIEAidGV4dC91cmktbGlzdCI6IEAiaHR0cDovL3dlYmtp
dC5vcmcvYi9cdTRGNjBcdTU5N0Q7P3g9OCArIDYiLAotICAgICAgICB9Ci0gICAgfSk7Ci0gICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKLX0KLQotVEVTVChEYXRhSW50ZXJhY3Rp
b25UZXN0cywgRGF0YVRyYW5zZmVyU2V0RGF0YUludmFsaWRVUkwpCi17Ci0gICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRl
c3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOwotICAgIGF1dG8gc2ltdWxh
dG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhX
ZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLQotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJzZWxlY3QocmljaCkiXTsKLSAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAiY3VzdG9tRGF0YSA9IHsgJ3VybCcgOiAnc29tZSByYW5kb20gc3Ry
aW5nJyB9Il07Ci0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIndy
aXRlQ3VzdG9tRGF0YSA9IHRydWUiXTsKLQotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50
TWFrZSg1MCwgMjI1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07Ci0gICAgTlNBcnJheSAqcmVn
aXN0ZXJlZFR5cGVzID0gW3NpbXVsYXRvci5nZXQoKS5zb3VyY2VJdGVtUHJvdmlkZXJzLmZpcnN0
T2JqZWN0IHJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnNdOwotICAgIEVYUEVDVF9GQUxTRShbcmVn
aXN0ZXJlZFR5cGVzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVVUkxdKTsKLSAg
ICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7Ci0gICAgICAgIEAiZHJhZ292ZXIiOiBAewotICAgICAg
ICAgICAgQCJ0ZXh0L3VyaS1saXN0IjogQCIiLAotICAgICAgICB9LAotICAgICAgICBAImRyb3Ai
OiBAewotICAgICAgICAgICAgQCJ0ZXh0L3VyaS1saXN0IjogQCJzb21lIHJhbmRvbSBzdHJpbmci
LAotICAgICAgICB9Ci0gICAgfSk7Ci19Ci0KLVRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERh
dGFUcmFuc2ZlclNhbml0aXplSFRNTCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwg
NTAwKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1
bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07Ci0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtb
RGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5n
ZXQoKV0pOwotCi0gICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNl
bGVjdChyaWNoKSJdOwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJjdXN0b21EYXRhID0geyAndGV4dC9odG1sJyA6ICc8bWV0YSBjb250ZW50PVwic2VjcmV0XCI+
IgotICAgICAgICAiPGIgb25tb3VzZW92ZXI9XCJkYW5nZXJvdXNDb2RlKClcIj5oZWxsbzwvYj48
IS0tIHNlY3JldC0tPiwgd29ybGQ8c2NyaXB0PmRhbmdlcm91c0NvZGUoKTwvc2NyaXB0PicgfSJd
OwotICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3cml0ZUN1c3Rv
bURhdGEgPSB0cnVlIl07Ci0KLSAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgIFtz
aW11bGF0b3IuZ2V0KCkgc2V0T3ZlcnJpZGVQZXJmb3JtRHJvcEJsb2NrOl5OU0FycmF5PFVJRHJh
Z0l0ZW0gKj4gKihpZCA8VUlEcm9wU2Vzc2lvbj4gc2Vzc2lvbikKLSAgICB7Ci0gICAgICAgIEVY
UEVDVF9FUSgxVUwsIHNlc3Npb24uaXRlbXMuY291bnQpOwotICAgICAgICBhdXRvICppdGVtID0g
c2Vzc2lvbi5pdGVtc1swXS5pdGVtUHJvdmlkZXI7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFtpdGVt
LnJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnMgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nICopa1VU
VHlwZUhUTUxdKTsKLSAgICAgICAgW2l0ZW0gbG9hZERhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJ
ZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNE
YXRhICpkYXRhLCBOU0Vycm9yICplcnJvcikgewotICAgICAgICAgICAgTlNTdHJpbmcgKm1hcmt1
cCA9IFtbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgZW5jb2Rp
bmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgICAgIEVYUEVD
VF9UUlVFKFttYXJrdXAgY29udGFpbnNTdHJpbmc6QCJoZWxsbyJdKTsKLSAgICAgICAgICAgIEVY
UEVDVF9UUlVFKFttYXJrdXAgY29udGFpbnNTdHJpbmc6QCIsIHdvcmxkIl0pOwotICAgICAgICAg
ICAgRVhQRUNUX0ZBTFNFKFttYXJrdXAgY29udGFpbnNTdHJpbmc6QCJzZWNyZXQiXSk7Ci0gICAg
ICAgICAgICBFWFBFQ1RfRkFMU0UoW21hcmt1cCBjb250YWluc1N0cmluZzpAImRhbmdlcm91c0Nv
ZGUiXSk7Ci0gICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAgfV07Ci0gICAgICAgIHJl
dHVybiBzZXNzaW9uLml0ZW1zOwotICAgIH1dOwotICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1Bv
aW50TWFrZSg1MCwgMjI1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07Ci0KLSAgICBjaGVja0pT
T05XaXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0
cHV0LnZhbHVlIl0sIEB7Ci0gICAgICAgIEAiZHJhZ292ZXIiOiBAewotICAgICAgICAgICAgQCJ0
ZXh0L2h0bWwiOiBAIiIsCi0gICAgICAgIH0sCi0gICAgICAgIEAiZHJvcCI6IEB7Ci0gICAgICAg
ICAgICBAInRleHQvaHRtbCI6IEAiPG1ldGEgY29udGVudD1cInNlY3JldFwiPjxiIG9ubW91c2Vv
dmVyPVwiZGFuZ2Vyb3VzQ29kZSgpXCI+aGVsbG88L2I+PCEtLSBzZWNyZXQtLT4sIHdvcmxkPHNj
cmlwdD5kYW5nZXJvdXNDb2RlKCk8L3NjcmlwdD4iLAotICAgICAgICB9Ci0gICAgfSk7Ci0gICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKLX0KLQotI2VuZGlmIC8vIF9fSVBIT05F
X09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDMwMAotCi19IC8vIG5hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJCi0KLSNlbmRpZiAvLyBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0RyYWdBbmREcm9wVGVzdHNJT1MubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9EcmFnQW5kRHJvcFRlc3RzSU9TLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmQ2MDQ5NDE5MGZjMjY5NTlmY2Q0NjhjNWIzYTkyZWU1ZGEyMzRiZDUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9EcmFnQW5kRHJvcFRl
c3RzSU9TLm1tCkBAIC0wLDAgKzEsMTkxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpICYmIFBMQVRGT1JNKElPUykgJiYgV0tf
QVBJX0VOQUJMRUQKKworI2ltcG9ydCAiRHJhZ0FuZERyb3BTaW11bGF0b3IuaCIKKyNpbXBvcnQg
IlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0
ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbkV4dHJhcy5oIgor
I2ltcG9ydCA8TW9iaWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2aWNlcy5oPgorI2ltcG9y
dCA8VUlLaXQvTlNJdGVtUHJvdmlkZXIrVUlLaXRBZGRpdGlvbnMuaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNS
ZWZQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KKyNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8
V2ViS2l0L1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tQ
cm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KKyNpbXBvcnQgPHd0Zi9TZWNvbmRzLmg+CisKK3R5
cGVkZWYgdm9pZCAoXkZpbGVMb2FkQ29tcGxldGlvbkJsb2NrKShOU1VSTCAqLCBCT09MLCBOU0Vy
cm9yICopOwordHlwZWRlZiB2b2lkICheRGF0YUxvYWRDb21wbGV0aW9uQmxvY2spKE5TRGF0YSAq
LCBOU0Vycm9yICopOwordHlwZWRlZiB2b2lkICheVUlJdGVtUHJvdmlkZXJEYXRhTG9hZENvbXBs
ZXRpb25CbG9jaykoTlNEYXRhICosIE5TRXJyb3IgKik7CisKKyNpZiAhVVNFKEFQUExFX0lOVEVS
TkFMX1NESykKKworQGludGVyZmFjZSBVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9u
cyA6IE5TT2JqZWN0CitAZW5kCisKKyNlbmRpZgorCitAaW50ZXJmYWNlIFVJSXRlbVByb3ZpZGVy
KCkKKysgKFVJSXRlbVByb3ZpZGVyICopaXRlbVByb3ZpZGVyV2l0aFVSTDooTlNVUkwgKil1cmwg
dGl0bGU6KE5TU3RyaW5nICopdGl0bGU7CistICh2b2lkKSByZWdpc3RlckRhdGFSZXByZXNlbnRh
dGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKXR5cGVJZGVudGlmaWVyIG9wdGlvbnM6
KFVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zKilvcHRpb25zIGxvYWRIYW5kbGVy
OihOU1Byb2dyZXNzICogKF4pKHZvaWQgKF5VSUl0ZW1Qcm92aWRlckRhdGFMb2FkQ29tcGxldGlv
bkJsb2NrKShOU0RhdGEgKml0ZW0sIE5TRXJyb3IgKmVycm9yKSkpIGxvYWRIYW5kbGVyOworQGVu
ZAorCitzdGF0aWMgTlNTdHJpbmcgKkluamVjdGVkQnVuZGxlUGFzdGVib2FyZERhdGFUeXBlID0g
QCJvcmcud2Via2l0LmRhdGEiOworCitzdGF0aWMgVUlJbWFnZSAqdGVzdEljb25JbWFnZSgpCit7
CisgICAgcmV0dXJuIFtVSUltYWdlIGltYWdlTmFtZWQ6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cy9pY29uLnBuZyJdOworfQorCitzdGF0aWMgTlNEYXRhICp0ZXN0WklQQXJjaGl2ZSgpCit7Cisg
ICAgTlNVUkwgKnppcEZpbGVVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291
cmNlOkAiY29tcHJlc3NlZC1maWxlcyIgd2l0aEV4dGVuc2lvbjpAInppcCIgc3ViZGlyZWN0b3J5
OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICByZXR1cm4gW05TRGF0YSBkYXRhV2l0
aENvbnRlbnRzT2ZVUkw6emlwRmlsZVVSTF07Cit9CisKK0BpbXBsZW1lbnRhdGlvbiBVSUl0ZW1Q
cm92aWRlciAoRHJhZ0FuZERyb3BUZXN0cykKKworLSAodm9pZClyZWdpc3RlckRhdGFSZXByZXNl
bnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKXR5cGVJZGVudGlmaWVyIHdpdGhE
YXRhOihOU0RhdGEgKilkYXRhCit7CisgICAgUmV0YWluUHRyPE5TRGF0YT4gcmV0YWluZWREYXRh
ID0gZGF0YTsKKyAgICBbc2VsZiByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVu
dGlmaWVyOnR5cGVJZGVudGlmaWVyIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRh
dGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsIGxvYWRIYW5kbGVyOiBbcmV0YWluZWREYXRhXSAoRGF0
YUxvYWRDb21wbGV0aW9uQmxvY2sgYmxvY2spIC0+IE5TUHJvZ3Jlc3MgKiB7CisgICAgICAgIGJs
b2NrKHJldGFpbmVkRGF0YS5nZXQoKSwgbmlsKTsKKyAgICAgICAgcmV0dXJuIFtOU1Byb2dyZXNz
IGRpc2NyZXRlUHJvZ3Jlc3NXaXRoVG90YWxVbml0Q291bnQ6MTAwXTsKKyAgICB9XTsKK30KKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFdLV2ViVmlldyAoRHJhZ0FuZERyb3BUZXN0cykK
KworLSAoQk9PTCllZGl0b3JDb250YWluc0ltYWdlRWxlbWVudAoreworICAgIHJldHVybiBbc2Vs
ZiBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiISFlZGl0b3IucXVlcnlTZWxlY3Rvcign
aW1nJykiXS5ib29sVmFsdWU7Cit9CisKKy0gKE5TU3RyaW5nICopZWRpdG9yVmFsdWUKK3sKKyAg
ICByZXR1cm4gW3NlbGYgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci52YWx1
ZSJdOworfQorCitAZW5kCisKK3N0YXRpYyBOU1ZhbHVlICptYWtlQ0dSZWN0VmFsdWUoQ0dGbG9h
dCB4LCBDR0Zsb2F0IHksIENHRmxvYXQgd2lkdGgsIENHRmxvYXQgaGVpZ2h0KQoreworICAgIHJl
dHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6Q0dSZWN0TWFrZSh4LCB5LCB3aWR0aCwgaGVp
Z2h0KV07Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrQ0dSZWN0SXNFcXVhbFRvQ0dSZWN0V2l0aExv
Z2dpbmcoQ0dSZWN0IGV4cGVjdGVkLCBDR1JlY3Qgb2JzZXJ2ZWQpCit7CisgICAgQk9PTCBpc0Vx
dWFsID0gQ0dSZWN0RXF1YWxUb1JlY3QoZXhwZWN0ZWQsIG9ic2VydmVkKTsKKyAgICBFWFBFQ1Rf
VFJVRShpc0VxdWFsKTsKKyAgICBpZiAoIWlzRXF1YWwpCisgICAgICAgIE5TTG9nKEAiRXhwZWN0
ZWQ6ICVAIGJ1dCBvYnNlcnZlZDogJUAiLCBOU1N0cmluZ0Zyb21DR1JlY3QoZXhwZWN0ZWQpLCBO
U1N0cmluZ0Zyb21DR1JlY3Qob2JzZXJ2ZWQpKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tTZWxl
Y3Rpb25SZWN0c1dpdGhMb2dnaW5nKE5TQXJyYXkgKmV4cGVjdGVkLCBOU0FycmF5ICpvYnNlcnZl
ZCkKK3sKKyAgICBpZiAoIVtleHBlY3RlZCBpc0VxdWFsVG9BcnJheTpvYnNlcnZlZF0pCisgICAg
ICAgIE5TTG9nKEAiRXhwZWN0ZWQgc2VsZWN0aW9uIHJlY3RzOiAlQCBidXQgb2JzZXJ2ZWQ6ICVA
IiwgZXhwZWN0ZWQsIG9ic2VydmVkKTsKKyAgICBFWFBFQ1RfVFJVRShbZXhwZWN0ZWQgaXNFcXVh
bFRvQXJyYXk6b2JzZXJ2ZWRdKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tSaWNoVGV4dFR5cGVQ
cmVjZWRlc1BsYWluVGV4dFR5cGUoRHJhZ0FuZERyb3BTaW11bGF0b3IgKnNpbXVsYXRvcikKK3sK
KyAgICAvLyBBdCBsZWFzdCBvbmUgb2YgImNvbS5hcHBsZS5mbGF0LXJ0ZmQiIG9yICJwdWJsaWMu
cnRmIiBpcyBleHBlY3RlZCB0byBoYXZlIGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gInB1YmxpYy51
dGY4LXBsYWluLXRleHQiLgorICAgIE5TQXJyYXkgKnJlZ2lzdGVyZWRUeXBlcyA9IFtzaW11bGF0
b3Iuc291cmNlSXRlbVByb3ZpZGVycy5maXJzdE9iamVjdCByZWdpc3RlcmVkVHlwZUlkZW50aWZp
ZXJzXTsKKyAgICBhdXRvIGluZGV4T2ZSVEZUeXBlID0gW3JlZ2lzdGVyZWRUeXBlcyBpbmRleE9m
T2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVSVEZdOworICAgIGF1dG8gaW5kZXhPZkZsYXRSVEZE
VHlwZSA9IFtyZWdpc3RlcmVkVHlwZXMgaW5kZXhPZk9iamVjdDooTlNTdHJpbmcgKilrVVRUeXBl
RmxhdFJURkRdOworICAgIGF1dG8gaW5kZXhPZlBsYWluVGV4dFR5cGUgPSBbcmVnaXN0ZXJlZFR5
cGVzIGluZGV4T2ZPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRleHRdOworICAg
IEVYUEVDVF9ORSgoTlNJbnRlZ2VyKWluZGV4T2ZQbGFpblRleHRUeXBlLCBOU05vdEZvdW5kKTsK
KyAgICBFWFBFQ1RfVFJVRSgoaW5kZXhPZlJURlR5cGUgIT0gTlNOb3RGb3VuZCAmJiBpbmRleE9m
UlRGVHlwZSA8IGluZGV4T2ZQbGFpblRleHRUeXBlKSB8fCAoaW5kZXhPZkZsYXRSVEZEVHlwZSAh
PSBOU05vdEZvdW5kICYmIGluZGV4T2ZGbGF0UlRGRFR5cGUgPCBpbmRleE9mUGxhaW5UZXh0VHlw
ZSkpOworfQorCitzdGF0aWMgdm9pZCBjaGVja0ZpcnN0VHlwZUlzUHJlc2VudEFuZFNlY29uZFR5
cGVJc01pc3NpbmcoRHJhZ0FuZERyb3BTaW11bGF0b3IgKnNpbXVsYXRvciwgQ0ZTdHJpbmdSZWYg
Zmlyc3RUeXBlLCBDRlN0cmluZ1JlZiBzZWNvbmRUeXBlKQoreworICAgIE5TQXJyYXkgKnJlZ2lz
dGVyZWRUeXBlcyA9IFtzaW11bGF0b3Iuc291cmNlSXRlbVByb3ZpZGVycy5maXJzdE9iamVjdCBy
ZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzXTsKKyAgICBFWFBFQ1RfVFJVRShbcmVnaXN0ZXJlZFR5
cGVzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWZpcnN0VHlwZV0pOworICAgIEVYUEVDVF9G
QUxTRShbcmVnaXN0ZXJlZFR5cGVzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKXNlY29uZFR5
cGVdKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tUeXBlSWRlbnRpZmllcklzUmVnaXN0ZXJlZEF0
SW5kZXgoRHJhZ0FuZERyb3BTaW11bGF0b3IgKnNpbXVsYXRvciwgTlNTdHJpbmcgKnR5cGUsIE5T
VUludGVnZXIgaW5kZXgpCit7CisgICAgTlNBcnJheSAqcmVnaXN0ZXJlZFR5cGVzID0gW3NpbXVs
YXRvci5zb3VyY2VJdGVtUHJvdmlkZXJzLmZpcnN0T2JqZWN0IHJlZ2lzdGVyZWRUeXBlSWRlbnRp
ZmllcnNdOworICAgIEVYUEVDVF9HVChyZWdpc3RlcmVkVHlwZXMuY291bnQsIGluZGV4KTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEodHlwZS5VVEY4U3RyaW5nLCBbcmVnaXN0ZXJlZFR5cGVzW2luZGV4
XSBVVEY4U3RyaW5nXSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrRXN0aW1hdGVkU2l6ZShEcmFn
QW5kRHJvcFNpbXVsYXRvciAqc2ltdWxhdG9yLCBDR1NpemUgZXN0aW1hdGVkU2l6ZSkKK3sKKyAg
ICBVSUl0ZW1Qcm92aWRlciAqc291cmNlSXRlbVByb3ZpZGVyID0gW3NpbXVsYXRvciBzb3VyY2VJ
dGVtUHJvdmlkZXJzXS5maXJzdE9iamVjdDsKKyAgICBFWFBFQ1RfRVEoZXN0aW1hdGVkU2l6ZS53
aWR0aCwgc291cmNlSXRlbVByb3ZpZGVyLnByZWZlcnJlZFByZXNlbnRhdGlvblNpemUud2lkdGgp
OworICAgIEVYUEVDVF9FUShlc3RpbWF0ZWRTaXplLmhlaWdodCwgc291cmNlSXRlbVByb3ZpZGVy
LnByZWZlcnJlZFByZXNlbnRhdGlvblNpemUuaGVpZ2h0KTsKK30KKworc3RhdGljIHZvaWQgY2hl
Y2tTdWdnZXN0ZWROYW1lQW5kRXN0aW1hdGVkU2l6ZShEcmFnQW5kRHJvcFNpbXVsYXRvciAqc2lt
dWxhdG9yLCBOU1N0cmluZyAqc3VnZ2VzdGVkTmFtZSwgQ0dTaXplIGVzdGltYXRlZFNpemUpCit7
CisgICAgVUlJdGVtUHJvdmlkZXIgKnNvdXJjZUl0ZW1Qcm92aWRlciA9IFtzaW11bGF0b3Igc291
cmNlSXRlbVByb3ZpZGVyc10uZmlyc3RPYmplY3Q7CisgICAgRVhQRUNUX1dLX1NUUkVRKHN1Z2dl
c3RlZE5hbWUuVVRGOFN0cmluZywgc291cmNlSXRlbVByb3ZpZGVyLnN1Z2dlc3RlZE5hbWUuVVRG
OFN0cmluZyk7CisgICAgRVhQRUNUX0VRKGVzdGltYXRlZFNpemUud2lkdGgsIHNvdXJjZUl0ZW1Q
cm92aWRlci5wcmVmZXJyZWRQcmVzZW50YXRpb25TaXplLndpZHRoKTsKKyAgICBFWFBFQ1RfRVEo
ZXN0aW1hdGVkU2l6ZS5oZWlnaHQsIHNvdXJjZUl0ZW1Qcm92aWRlci5wcmVmZXJyZWRQcmVzZW50
YXRpb25TaXplLmhlaWdodCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrU3RyaW5nQXJyYXlzQXJl
RXF1YWwoTlNBcnJheTxOU1N0cmluZyAqPiAqZXhwZWN0ZWQsIE5TQXJyYXk8TlNTdHJpbmcgKj4g
Km9ic2VydmVkKQoreworICAgIEVYUEVDVF9FUShleHBlY3RlZC5jb3VudCwgb2JzZXJ2ZWQuY291
bnQpOworICAgIGZvciAoTlNVSW50ZWdlciBpbmRleCA9IDA7IGluZGV4IDwgZXhwZWN0ZWQuY291
bnQ7ICsraW5kZXgpIHsKKyAgICAgICAgTlNTdHJpbmcgKmV4cGVjdGVkU3RyaW5nID0gW2V4cGVj
dGVkIG9iamVjdEF0SW5kZXg6aW5kZXhdOworICAgICAgICBOU1N0cmluZyAqb2JzZXJ2ZWRTdHJp
bmcgPSBbb2JzZXJ2ZWQgb2JqZWN0QXRJbmRleDppbmRleF07CisgICAgICAgIEVYUEVDVF9XS19T
VFJFUShleHBlY3RlZFN0cmluZywgb2JzZXJ2ZWRTdHJpbmcpOworICAgICAgICBpZiAoIVtleHBl
Y3RlZFN0cmluZyBpc0VxdWFsVG9TdHJpbmc6b2JzZXJ2ZWRTdHJpbmddKQorICAgICAgICAgICAg
TlNMb2coQCJFeHBlY3RlZCBvYnNlcnZlZCBzdHJpbmc6ICVAIHRvIG1hdGNoIGV4cGVjdGVkIHN0
cmluZzogJUAgYXQgaW5kZXg6ICV0dSIsIG9ic2VydmVkU3RyaW5nLCBleHBlY3RlZFN0cmluZywg
aW5kZXgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY2hlY2tEcmFnQ2FyZXRSZWN0SXNDb250
YWluZWRJblJlY3QoQ0dSZWN0IGNhcmV0UmVjdCwgQ0dSZWN0IGNvbnRhaW5lclJlY3QpCit7Cisg
ICAgQk9PTCBjb250YWluZWQgPSBDR1JlY3RDb250YWluc1JlY3QoY29udGFpbmVyUmVjdCwgY2Fy
ZXRSZWN0KTsKKyAgICBFWFBFQ1RfVFJVRShjb250YWluZWQpOworICAgIGlmICghY29udGFpbmVk
KQorICAgICAgICBOU0xvZyhAIkV4cGVjdGVkIGNhcmV0IHJlY3Q6ICVAIHRvIGZpdCB3aXRoaW4g
Y29udGFpbmVyIHJlY3Q6ICVAIiwgTlNTdHJpbmdGcm9tQ0dSZWN0KGNhcmV0UmVjdCksIE5TU3Ry
aW5nRnJvbUNHUmVjdChjb250YWluZXJSZWN0KSk7Cit9CisKKyNpZiBfX0lQSE9ORV9PU19WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMTAzMDAKKworc3RhdGljIHZvaWQgY2hlY2tKU09OV2l0aExv
Z2dpbmcoTlNTdHJpbmcgKmpzb25TdHJpbmcsIE5TRGljdGlvbmFyeSAqZXhwZWN0ZWQpCit7Cisg
ICAgQk9PTCBzdWNjZXNzID0gVGVzdFdlYktpdEFQSTo6VXRpbDo6anNvbk1hdGNoZXNFeHBlY3Rl
ZFZhbHVlcyhqc29uU3RyaW5nLCBleHBlY3RlZCk7CisgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7
CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICBOU0xvZyhAIkV4cGVjdGVkIEpTT046ICVAIHRv
IG1hdGNoIHZhbHVlczogJUAiLCBqc29uU3RyaW5nLCBleHBlY3RlZCk7Cit9CisKK3N0YXRpYyBO
U0RhdGEgKnRlc3RJY29uSW1hZ2VEYXRhKCkKK3sKKyAgICByZXR1cm4gW05TRGF0YSBkYXRhV2l0
aENvbnRlbnRzT2ZVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAImlj
b24iIHdpdGhFeHRlbnNpb246QCJwbmciIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVz
b3VyY2VzIl1dOworfQorCitzdGF0aWMgdm9pZCBydW5UZXN0V2l0aFRlbXBvcmFyeVRleHRGaWxl
KHZvaWQoXnJ1blRlc3QpKE5TVVJMICpmaWxlVVJMKSkKK3sKKyAgICBOU1N0cmluZyAqZmlsZU5h
bWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImRyYWctZHJvcC10ZXh0LWZpbGUtJUAu
dHh0IiwgW05TVVVJRCBVVUlEXS5VVUlEU3RyaW5nXTsKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRl
bXBvcmFyeUZpbGUgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9y
eSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpmaWxlTmFtZV0gaXNEaXJlY3Rvcnk6
Tk9dOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0VVJM
OnRlbXBvcmFyeUZpbGUuZ2V0KCkgZXJyb3I6bmlsXTsKKworICAgIE5TRXJyb3IgKmVycm9yID0g
bmlsOworICAgIFtAIlRoaXMgaXMgYSB0aW55IGJsb2Igb2YgdGV4dC4iIHdyaXRlVG9VUkw6dGVt
cG9yYXJ5RmlsZS5nZXQoKSBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNv
ZGluZyBlcnJvcjomZXJyb3JdOworCisgICAgaWYgKGVycm9yKQorICAgICAgICBOU0xvZyhAIkVy
cm9yIHdyaXRpbmcgdGVtcG9yYXJ5IGZpbGU6ICVAIiwgZXJyb3IpOworCisgICAgQHRyeSB7Cisg
ICAgICAgIHJ1blRlc3QodGVtcG9yYXJ5RmlsZS5nZXQoKSk7CisgICAgfSBAZmluYWxseSB7Cisg
ICAgICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0VVJMOnRl
bXBvcmFyeUZpbGUuZ2V0KCkgZXJyb3I6bmlsXTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHJ1
blRlc3RXaXRoVGVtcG9yYXJ5Rm9sZGVyKHZvaWQoXnJ1blRlc3QpKE5TVVJMICpmb2xkZXJVUkwp
KQoreworICAgIE5TU3RyaW5nICpmb2xkZXJOYW1lID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCJzb21lLmRpcmVjdG9yeS0lQCIsIFtOU1VVSUQgVVVJRF0uVVVJRFN0cmluZ107CisgICAg
UmV0YWluUHRyPE5TVVJMPiB0ZW1wb3JhcnlGb2xkZXIgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRo
OltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpm
b2xkZXJOYW1lXSBpc0RpcmVjdG9yeTpZRVNdOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0
TWFuYWdlcl0gcmVtb3ZlSXRlbUF0VVJMOnRlbXBvcmFyeUZvbGRlci5nZXQoKSBlcnJvcjpuaWxd
OworCisgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisgICAgTlNGaWxlTWFuYWdlciAqZGVmYXVs
dE1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07CisgICAgW2RlZmF1bHRN
YW5hZ2VyIGNyZWF0ZURpcmVjdG9yeUF0VVJMOnRlbXBvcmFyeUZvbGRlci5nZXQoKSB3aXRoSW50
ZXJtZWRpYXRlRGlyZWN0b3JpZXM6Tk8gYXR0cmlidXRlczpuaWwgZXJyb3I6JmVycm9yXTsKKyAg
ICBbdGVzdEljb25JbWFnZURhdGEoKSB3cml0ZVRvVVJMOlt0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkg
VVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiaWNvbi5wbmciIGlzRGlyZWN0b3J5Ok5PXSBh
dG9taWNhbGx5OllFU107CisgICAgW3Rlc3RaSVBBcmNoaXZlKCkgd3JpdGVUb1VSTDpbdGVtcG9y
YXJ5Rm9sZGVyLmdldCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImFyY2hpdmUuemlw
IiBpc0RpcmVjdG9yeTpOT10gYXRvbWljYWxseTpZRVNdOworCisgICAgTlNVUkwgKmZpcnN0U3Vi
ZGlyZWN0b3J5ID0gW3RlbXBvcmFyeUZvbGRlci5nZXQoKSBVUkxCeUFwcGVuZGluZ1BhdGhDb21w
b25lbnQ6QCJzdWJkaXJlY3RvcnkxIiBpc0RpcmVjdG9yeTpZRVNdOworICAgIFtkZWZhdWx0TWFu
YWdlciBjcmVhdGVEaXJlY3RvcnlBdFVSTDpmaXJzdFN1YmRpcmVjdG9yeSB3aXRoSW50ZXJtZWRp
YXRlRGlyZWN0b3JpZXM6Tk8gYXR0cmlidXRlczpuaWwgZXJyb3I6JmVycm9yXTsKKyAgICBbQCJJ
IGFtIGEgdGV4dCBmaWxlIGluIHRoZSBmaXJzdCBzdWJkaXJlY3RvcnkuIiB3cml0ZVRvVVJMOltm
aXJzdFN1YmRpcmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJ0ZXh0LWZpbGUt
MS50eHQiIGlzRGlyZWN0b3J5Ok5PXSBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZyBlcnJvcjomZXJyb3JdOworCisgICAgTlNVUkwgKnNlY29uZFN1YmRpcmVjdG9y
eSA9IFt0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAi
c3ViZGlyZWN0b3J5MiIgaXNEaXJlY3Rvcnk6WUVTXTsKKyAgICBbZGVmYXVsdE1hbmFnZXIgY3Jl
YXRlRGlyZWN0b3J5QXRVUkw6c2Vjb25kU3ViZGlyZWN0b3J5IHdpdGhJbnRlcm1lZGlhdGVEaXJl
Y3RvcmllczpOTyBhdHRyaWJ1dGVzOm5pbCBlcnJvcjomZXJyb3JdOworICAgIFtAIkkgYW0gYSB0
ZXh0IGZpbGUgaW4gdGhlIHNlY29uZCBzdWJkaXJlY3RvcnkuIiB3cml0ZVRvVVJMOltzZWNvbmRT
dWJkaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAidGV4dC1maWxlLTIudHh0
IiBpc0RpcmVjdG9yeTpOT10gYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5j
b2RpbmcgZXJyb3I6JmVycm9yXTsKKworICAgIGlmIChlcnJvcikKKyAgICAgICAgTlNMb2coQCJF
cnJvciB3cml0aW5nIHRlbXBvcmFyeSBmaWxlOiAlQCIsIGVycm9yKTsKKworICAgIEB0cnkgewor
ICAgICAgICBydW5UZXN0KHRlbXBvcmFyeUZvbGRlci5nZXQoKSk7CisgICAgfSBAZmluYWxseSB7
CisgICAgICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0VVJM
OnRlbXBvcmFyeUZvbGRlci5nZXQoKSBlcnJvcjpuaWxdOworICAgIH0KK30KKworI2VuZGlmIC8v
IF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDMwMAorCituYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgSW1hZ2VUb0NvbnRlbnRF
ZGl0YWJsZSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImltYWdlLWFuZC1jb250ZW50
ZWRpdGFibGUiXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9w
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtz
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAs
IDMwMCldOworCisgICAgRVhQRUNUX1RSVUUoW3dlYlZpZXcgZWRpdG9yQ29udGFpbnNJbWFnZUVs
ZW1lbnRdKTsKKworICAgIE5TQXJyYXkgKm9ic2VydmVkRXZlbnROYW1lcyA9IFtzaW11bGF0b3Ig
b2JzZXJ2ZWRFdmVudE5hbWVzXTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVz
IGNvbnRhaW5zT2JqZWN0OkAiZHJhZ2VudGVyIl0pOworICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZl
ZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6QCJkcmFnb3ZlciJdKTsKKyAgICBFWFBFQ1RfVFJV
RShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJvcCJdKTsKKyAgICBjaGVj
a1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgbWFrZUNHUmVjdFZhbHVlKDEsIDIwMSwgMjE1
LCAxNzQpIF0sIFtzaW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0c10pOworICAgIGNoZWNrRmly
c3RUeXBlSXNQcmVzZW50QW5kU2Vjb25kVHlwZUlzTWlzc2luZyhzaW11bGF0b3IuZ2V0KCksIGtV
VFR5cGVQTkcsIGtVVFR5cGVGaWxlVVJMKTsKKyAgICBjaGVja0VzdGltYXRlZFNpemUoc2ltdWxh
dG9yLmdldCgpLCB7IDIxNSwgMTc0IH0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIENh
blN0YXJ0RHJhZ09uRW5vcm1vdXNJbWFnZSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjxp
bWcgc3JjPSdlbm9ybW91cy5zdmcnPjwvaW1nPiJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBh
ZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgMTAw
KSB0bzpDR1BvaW50TWFrZSgxMDAsIDEwMCldOworCisgICAgTlNBcnJheSAqcmVnaXN0ZXJlZFR5
cGVzID0gW1tzaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10uZmlyc3RPYmplY3QgcmVnaXN0
ZXJlZFR5cGVJZGVudGlmaWVyc107CisgICAgRVhQRUNUX1dLX1NUUkVRKChOU1N0cmluZyAqKWtV
VFR5cGVTY2FsYWJsZVZlY3RvckdyYXBoaWNzLCBbcmVnaXN0ZXJlZFR5cGVzIGZpcnN0T2JqZWN0
XSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgSW1hZ2VUb1RleHRhcmVhKQoreworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiaW1hZ2UtYW5kLXRleHRhcmVhIl07CisKKyAgICBhdXRv
IHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdp
dGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2lu
dE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIEVYUEVDVF9X
S19TVFJFUSgiIiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVdKTsKKworICAgIE5TQXJyYXkgKm9ic2Vy
dmVkRXZlbnROYW1lcyA9IFtzaW11bGF0b3Igb2JzZXJ2ZWRFdmVudE5hbWVzXTsKKyAgICBFWFBF
Q1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJhZ2VudGVyIl0p
OworICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6QCJk
cmFnb3ZlciJdKTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5z
T2JqZWN0OkAiZHJvcCJdKTsKKyAgICBjaGVja0ZpcnN0VHlwZUlzUHJlc2VudEFuZFNlY29uZFR5
cGVJc01pc3Npbmcoc2ltdWxhdG9yLmdldCgpLCBrVVRUeXBlUE5HLCBrVVRUeXBlRmlsZVVSTCk7
CisgICAgY2hlY2tFc3RpbWF0ZWRTaXplKHNpbXVsYXRvci5nZXQoKSwgeyAyMTUsIDE3NCB9KTsK
K30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBJbWFnZUluTGlua1RvSW5wdXQpCit7CisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91
c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJpbWFnZS1pbi1saW5rLWFuZC1pbnB1dCJdOworCisgICAg
YXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGlu
aXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNH
UG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBFWFBF
Q1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8iLCBbd2ViVmlldyBlZGl0b3JWYWx1
ZV0uVVRGOFN0cmluZyk7CisgICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIG1h
a2VDR1JlY3RWYWx1ZSgxMDEsIDI0MSwgMjA1NywgMjMyKSBdLCBbc2ltdWxhdG9yIGZpbmFsU2Vs
ZWN0aW9uUmVjdHNdKTsKKyAgICBjaGVja1N1Z2dlc3RlZE5hbWVBbmRFc3RpbWF0ZWRTaXplKHNp
bXVsYXRvci5nZXQoKSwgQCJpY29uLnBuZyIsIHsgMjE1LCAxNzQgfSk7CisgICAgY2hlY2tUeXBl
SWRlbnRpZmllcklzUmVnaXN0ZXJlZEF0SW5kZXgoc2ltdWxhdG9yLmdldCgpLCAoTlNTdHJpbmcg
KilrVVRUeXBlUE5HLCAwKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBJbWFnZUluTGlu
a1dpdGhvdXRIUkVGVG9JbnB1dCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImltYWdl
LWluLWxpbmstYW5kLWlucHV0Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAImxpbmsuaHJlZiA9ICcnIl07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0
TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcu
Z2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86
Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZp
ZXcgZWRpdG9yVmFsdWVdKTsKKyAgICBjaGVja0VzdGltYXRlZFNpemUoc2ltdWxhdG9yLmdldCgp
LCB7IDIxNSwgMTc0IH0pOworICAgIGNoZWNrVHlwZUlkZW50aWZpZXJJc1JlZ2lzdGVyZWRBdElu
ZGV4KHNpbXVsYXRvci5nZXQoKSwgKE5TU3RyaW5nICopa1VUVHlwZVBORywgMCk7Cit9CisKK1RF
U1QoRHJhZ0FuZERyb3BUZXN0cywgSW1hZ2VEb2VzTm90VXNlRWxlbWVudFNpemVBc0VzdGltYXRl
ZFNpemUpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJnaWYtYW5kLWZpbGUtaW5wdXQi
XTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9y
IGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3Ig
cnVuRnJvbTogeyAxMDAsIDEwMCB9IHRvOiB7IDEwMCwgMzAwIH1dOworCisgICAgY2hlY2tUeXBl
SWRlbnRpZmllcklzUmVnaXN0ZXJlZEF0SW5kZXgoc2ltdWxhdG9yLmdldCgpLCAoTlNTdHJpbmcg
KilrVVRUeXBlR0lGLCAwKTsKKyAgICBjaGVja1N1Z2dlc3RlZE5hbWVBbmRFc3RpbWF0ZWRTaXpl
KHNpbXVsYXRvci5nZXQoKSwgQCJhcHBsZS5naWYiLCB7IDUyLCA2NCB9KTsKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEoImFwcGxlLmdpZiAoaW1hZ2UvZ2lmKSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudGV4dENvbnRlbnQiXSk7Cit9CisKK1RFU1QoRHJhZ0Fu
ZERyb3BUZXN0cywgQ29udGVudEVkaXRhYmxlVG9Db250ZW50RWRpdGFibGUpCit7CisgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0
TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcu
Z2V0KCldKTsKKworICAgIFt3ZWJWaWV3IGxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNv
bnRlbnRlZGl0YWJsZSJdOworICAgIFtzaW11bGF0b3Igd2FpdEZvcklucHV0U2Vzc2lvbl07Cisg
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtl
KDEwMCwgMzAwKV07CisKKyAgICBFWFBFQ1RfRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAInNvdXJjZS50ZXh0Q29udGVudCJdLmxlbmd0aCwgMFVMKTsKKyAgICBFWFBF
Q1RfV0tfU1RSRVEoIkhlbGxvIHdvcmxkIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdLlVURjhTdHJpbmcpOworCisgICAgTlNBcnJh
eSAqb2JzZXJ2ZWRFdmVudE5hbWVzID0gW3NpbXVsYXRvciBvYnNlcnZlZEV2ZW50TmFtZXNdOwor
ICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6QCJkcmFn
ZW50ZXIiXSk7CisgICAgRVhQRUNUX1RSVUUoW29ic2VydmVkRXZlbnROYW1lcyBjb250YWluc09i
amVjdDpAImRyYWdvdmVyIl0pOworICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMg
Y29udGFpbnNPYmplY3Q6QCJkcm9wIl0pOworICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9n
Z2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUoMSwgMjAxLCA5NjEsIDIyNykgXSwgW3NpbXVsYXRvciBm
aW5hbFNlbGVjdGlvblJlY3RzXSk7CisgICAgY2hlY2tSaWNoVGV4dFR5cGVQcmVjZWRlc1BsYWlu
VGV4dFR5cGUoc2ltdWxhdG9yLmdldCgpKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBD
b250ZW50RWRpdGFibGVUb1RleHRhcmVhKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIw
LCA1MDApXSk7CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11
bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisKKyAgICBbd2Vi
VmlldyBsb2FkVGVzdFBhZ2VOYW1lZDpAImNvbnRlbnRlZGl0YWJsZS1hbmQtdGV4dGFyZWEiXTsK
KyAgICBbc2ltdWxhdG9yIHdhaXRGb3JJbnB1dFNlc3Npb25dOworICAgIFtzaW11bGF0b3IgcnVu
RnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisg
ICAgRVhQRUNUX0VRKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3Vy
Y2UudGV4dENvbnRlbnQiXS5sZW5ndGgsIDBVTCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJIZWxs
byB3b3JsZCIsIFt3ZWJWaWV3IGVkaXRvclZhbHVlXS5VVEY4U3RyaW5nKTsKKworICAgIE5TQXJy
YXkgKm9ic2VydmVkRXZlbnROYW1lcyA9IFtzaW11bGF0b3Igb2JzZXJ2ZWRFdmVudE5hbWVzXTsK
KyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJh
Z2VudGVyIl0pOworICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNP
YmplY3Q6QCJkcmFnb3ZlciJdKTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVz
IGNvbnRhaW5zT2JqZWN0OkAiZHJvcCJdKTsKKyAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExv
Z2dpbmcoQFsgbWFrZUNHUmVjdFZhbHVlKDYsIDIwMywgOTkwLCAyMzIpIF0sIFtzaW11bGF0b3Ig
ZmluYWxTZWxlY3Rpb25SZWN0c10pOworICAgIGNoZWNrUmljaFRleHRUeXBlUHJlY2VkZXNQbGFp
blRleHRUeXBlKHNpbXVsYXRvci5nZXQoKSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywg
Q29udGVudEVkaXRhYmxlTW92ZVBhcmFncmFwaHMpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJv
cFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAg
IFt3ZWJWaWV3IGxvYWRUZXN0UGFnZU5hbWVkOkAidHdvLXBhcmFncmFwaC1jb250ZW50ZWRpdGFi
bGUiXTsKKyAgICBbc2ltdWxhdG9yIHdhaXRGb3JJbnB1dFNlc3Npb25dOworICAgIFtzaW11bGF0
b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgyNTAsIDQ1MCld
OworCisgICAgTlNTdHJpbmcgKmZpbmFsVGV4dENvbnRlbnQgPSBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il07CisgICAgTlNVSW50ZWdl
ciBmaXJzdFBhcmFncmFwaE9mZnNldCA9IFtmaW5hbFRleHRDb250ZW50IHJhbmdlT2ZTdHJpbmc6
QCJUaGlzIGlzIHRoZSBmaXJzdCBwYXJhZ3JhcGgiXS5sb2NhdGlvbjsKKyAgICBOU1VJbnRlZ2Vy
IHNlY29uZFBhcmFncmFwaE9mZnNldCA9IFtmaW5hbFRleHRDb250ZW50IHJhbmdlT2ZTdHJpbmc6
QCJUaGlzIGlzIHRoZSBzZWNvbmQgcGFyYWdyYXBoIl0ubG9jYXRpb247CisKKyAgICBFWFBFQ1Rf
RkFMU0UoZmlyc3RQYXJhZ3JhcGhPZmZzZXQgPT0gTlNOb3RGb3VuZCk7CisgICAgRVhQRUNUX0ZB
TFNFKHNlY29uZFBhcmFncmFwaE9mZnNldCA9PSBOU05vdEZvdW5kKTsKKyAgICBFWFBFQ1RfR1Qo
Zmlyc3RQYXJhZ3JhcGhPZmZzZXQsIHNlY29uZFBhcmFncmFwaE9mZnNldCk7CisgICAgY2hlY2tT
ZWxlY3Rpb25SZWN0c1dpdGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1ZSgxOTAsIDEwMCwgMTMw
LCAyMCksIG1ha2VDR1JlY3RWYWx1ZSgwLCAxMjAsIDMyMCwgMTAwKSwgbWFrZUNHUmVjdFZhbHVl
KDAsIDIyMCwgMjUyLCAyMCkgXSwgW3NpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7Cit9
CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRHJhZ0ltYWdlRnJvbUNvbnRlbnRFZGl0YWJsZSkK
K3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gc2ltdWxh
dG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZp
ZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0
UGFnZU5hbWVkOkAiY29udGVudGVkaXRhYmxlLWFuZC10YXJnZXQiXTsKKyAgICBbc2ltdWxhdG9y
IHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCAxMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07
CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlBBU1MiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAidGFyZ2V0LnRleHRDb250ZW50Il0pOworfQorCitURVNUKERyYWdBbmRE
cm9wVGVzdHMsIFRleHRBcmVhVG9JbnB1dCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2lt
dWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgW3dl
YlZpZXcgbG9hZFRlc3RQYWdlTmFtZWQ6QCJ0ZXh0YXJlYS10by1pbnB1dCJdOworICAgIFtzaW11
bGF0b3Igd2FpdEZvcklucHV0U2Vzc2lvbl07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9p
bnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBFWFBFQ1Rf
RVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNvdXJjZS52YWx1ZSJd
Lmxlbmd0aCwgMFVMKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIkhlbGxvIHdvcmxkIiwgW3dlYlZp
ZXcgZWRpdG9yVmFsdWVdLlVURjhTdHJpbmcpOworICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRo
TG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUoMTAxLCAyNDEsIDk5MCwgMjMyKSBdLCBbc2ltdWxh
dG9yIGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBT
aW5nbGVQbGFpblRleHRXb3JkVHlwZUlkZW50aWZpZXJzKQoreworICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0Fu
ZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisK
KyAgICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VOYW1lZDpAInRleHRhcmVhLXRvLWlucHV0Il07Cisg
ICAgW3NpbXVsYXRvciB3YWl0Rm9ySW5wdXRTZXNzaW9uXTsKKyAgICBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic291cmNlLnZhbHVlID0gJ3BuZXVtb25vdWx0cmFtaWNy
b3Njb3BpY3NpbGljb3ZvbGNhbm9jb25pb3NpcyciXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAic291cmNlLnNlbGVjdGlvblN0YXJ0ID0gMCJdOworICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2Uuc2VsZWN0aW9uRW5k
ID0gc291cmNlLnZhbHVlLmxlbmd0aCJdOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50
TWFrZSgxMDAsIDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgTlNJdGVtUHJv
dmlkZXIgKml0ZW1Qcm92aWRlciA9IFtzaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10uZmly
c3RPYmplY3Q7CisgICAgTlNBcnJheSAqcmVnaXN0ZXJlZFR5cGVzID0gW2l0ZW1Qcm92aWRlciBy
ZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzXTsKKyAgICBFWFBFQ1RfRVEoMVVMLCByZWdpc3RlcmVk
VHlwZXMuY291bnQpOworICAgIEVYUEVDVF9XS19TVFJFUShbKE5TU3RyaW5nICopa1VUVHlwZVVU
RjhQbGFpblRleHQgVVRGOFN0cmluZ10sIFtyZWdpc3RlcmVkVHlwZXMuZmlyc3RPYmplY3QgVVRG
OFN0cmluZ10pOworICAgIEVYUEVDVF9FUShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAic291cmNlLnZhbHVlIl0ubGVuZ3RoLCAwVUwpOworICAgIEVYUEVDVF9FUShVSVBy
ZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlSW5saW5lLCBpdGVtUHJvdmlkZXIucHJlZmVycmVkUHJl
c2VudGF0aW9uU3R5bGUpOworICAgIEVYUEVDVF9XS19TVFJFUSgicG5ldW1vbm91bHRyYW1pY3Jv
c2NvcGljc2lsaWNvdm9sY2Fub2Nvbmlvc2lzIiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVdLlVURjhT
dHJpbmcpOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIFNpbmdsZVBsYWluVGV4dFVSTFR5
cGVJZGVudGlmaWVycykKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwor
ICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgW3dlYlZpZXcgbG9hZFRl
c3RQYWdlTmFtZWQ6QCJ0ZXh0YXJlYS10by1pbnB1dCJdOworICAgIFtzaW11bGF0b3Igd2FpdEZv
cklucHV0U2Vzc2lvbl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAInNvdXJjZS52YWx1ZSA9ICdodHRwczovL3dlYmtpdC5vcmcvJyJdOworICAgIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzb3VyY2Uuc2VsZWN0aW9uU3RhcnQgPSAw
Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNvdXJjZS5z
ZWxlY3Rpb25FbmQgPSBzb3VyY2UudmFsdWUubGVuZ3RoIl07CisgICAgW3NpbXVsYXRvciBydW5G
cm9tOkNHUG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAg
ICBOU0l0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyID0gW3NpbXVsYXRvciBzb3VyY2VJdGVtUHJv
dmlkZXJzXS5maXJzdE9iamVjdDsKKyAgICBOU0FycmF5ICpyZWdpc3RlcmVkVHlwZXMgPSBbaXRl
bVByb3ZpZGVyIHJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnNdOworICAgIEVYUEVDVF9FUSgyVUws
IHJlZ2lzdGVyZWRUeXBlcy5jb3VudCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKFsoTlNTdHJpbmcg
KilrVVRUeXBlVVJMIFVURjhTdHJpbmddLCBbcmVnaXN0ZXJlZFR5cGVzLmZpcnN0T2JqZWN0IFVU
RjhTdHJpbmddKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoWyhOU1N0cmluZyAqKWtVVFR5cGVVVEY4
UGxhaW5UZXh0IFVURjhTdHJpbmddLCBbcmVnaXN0ZXJlZFR5cGVzLmxhc3RPYmplY3QgVVRGOFN0
cmluZ10pOworICAgIEVYUEVDVF9FUSgwVUwsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJzb3VyY2UudmFsdWUiXS5sZW5ndGgpOworICAgIEVYUEVDVF9FUShVSVByZWZl
cnJlZFByZXNlbnRhdGlvblN0eWxlSW5saW5lLCBpdGVtUHJvdmlkZXIucHJlZmVycmVkUHJlc2Vu
dGF0aW9uU3R5bGUpOworICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93ZWJraXQub3JnLyIs
IFt3ZWJWaWV3IGVkaXRvclZhbHVlXS5VVEY4U3RyaW5nKTsKK30KKworVEVTVChEcmFnQW5kRHJv
cFRlc3RzLCBMaW5rVG9JbnB1dCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImxpbmst
YW5kLWlucHV0Il07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJv
cFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBb
c2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAw
LCAzMDApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93d3cuYXBwbGUuY29tLyIs
IFt3ZWJWaWV3IGVkaXRvclZhbHVlXS5VVEY4U3RyaW5nKTsKKworICAgIF9fYmxvY2sgYm9vbCBk
b25lTG9hZGluZ1VSTCA9IGZhbHNlOworICAgIFVJSXRlbVByb3ZpZGVyICpzb3VyY2VJdGVtUHJv
dmlkZXIgPSBbc2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZpcnN0T2JqZWN0OworICAg
IFtzb3VyY2VJdGVtUHJvdmlkZXIgbG9hZE9iamVjdE9mQ2xhc3M6W05TVVJMIGNsYXNzXSBjb21w
bGV0aW9uSGFuZGxlcjpeKGlkIG9iamVjdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgTlNV
UkwgKnVybCA9IG9iamVjdDsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCJIZWxsbyB3b3JsZCIs
IHVybC5fdGl0bGUuVVRGOFN0cmluZyA/OiAiIik7CisgICAgICAgIGRvbmVMb2FkaW5nVVJMID0g
dHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVMb2FkaW5n
VVJMKTsKKworICAgIE5TQXJyYXkgKm9ic2VydmVkRXZlbnROYW1lcyA9IFtzaW11bGF0b3Igb2Jz
ZXJ2ZWRFdmVudE5hbWVzXTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNv
bnRhaW5zT2JqZWN0OkAiZHJhZ2VudGVyIl0pOworICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2
ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6QCJkcmFnb3ZlciJdKTsKKyAgICBFWFBFQ1RfVFJVRShb
b2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJvcCJdKTsKKyAgICBjaGVja1Nl
bGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgbWFrZUNHUmVjdFZhbHVlKDEwMSwgMjczLCAyMDU3
LCAyMzIpIF0sIFtzaW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0c10pOworICAgIGNoZWNrVHlw
ZUlkZW50aWZpZXJJc1JlZ2lzdGVyZWRBdEluZGV4KHNpbXVsYXRvci5nZXQoKSwgKE5TU3RyaW5n
ICopa1VUVHlwZVVSTCwgMCk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgQmFja2dyb3Vu
ZEltYWdlTGlua1RvSW5wdXQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCld
KTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJiYWNrZ3Jv
dW5kLWltYWdlLWxpbmstYW5kLWlucHV0Il07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0
TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcu
Z2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86
Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93
d3cuYXBwbGUuY29tLyIsIFt3ZWJWaWV3IGVkaXRvclZhbHVlXS5VVEY4U3RyaW5nKTsKKworICAg
IE5TQXJyYXkgKm9ic2VydmVkRXZlbnROYW1lcyA9IFtzaW11bGF0b3Igb2JzZXJ2ZWRFdmVudE5h
bWVzXTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0
OkAiZHJhZ2VudGVyIl0pOworICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29u
dGFpbnNPYmplY3Q6QCJkcmFnb3ZlciJdKTsKKyAgICBFWFBFQ1RfVFJVRShbb2JzZXJ2ZWRFdmVu
dE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJvcCJdKTsKKyAgICBjaGVja1NlbGVjdGlvblJlY3Rz
V2l0aExvZ2dpbmcoQFsgbWFrZUNHUmVjdFZhbHVlKDEwMSwgMjQxLCAyMDU3LCAyMzIpIF0sIFtz
aW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0c10pOworICAgIGNoZWNrVHlwZUlkZW50aWZpZXJJ
c1JlZ2lzdGVyZWRBdEluZGV4KHNpbXVsYXRvci5nZXQoKSwgKE5TU3RyaW5nICopa1VUVHlwZVVS
TCwgMCk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgQ2FuUHJldmVudFN0YXJ0KQorewor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAicHJldmVudC1zdGFydCJdOworCisgICAgYXV0byBz
aW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRo
V2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRN
YWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBFWFBFQ1RfRVEo
RHJhZ0FuZERyb3BQaGFzZUNhbmNlbGxlZCwgW3NpbXVsYXRvciBwaGFzZV0pOworICAgIEVYUEVD
VF9GQUxTRShbd2ViVmlldyBlZGl0b3JDb250YWluc0ltYWdlRWxlbWVudF0pOworCisgICAgTlNB
cnJheSAqb2JzZXJ2ZWRFdmVudE5hbWVzID0gW3NpbXVsYXRvciBvYnNlcnZlZEV2ZW50TmFtZXNd
OworICAgIEVYUEVDVF9GQUxTRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAi
ZHJhZ2VudGVyIl0pOworICAgIEVYUEVDVF9GQUxTRShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRh
aW5zT2JqZWN0OkAiZHJhZ292ZXIiXSk7CisgICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dpdGhMb2dn
aW5nKEBbIF0sIFtzaW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0c10pOworfQorCitURVNUKERy
YWdBbmREcm9wVGVzdHMsIENhblByZXZlbnRPcGVyYXRpb24pCit7CisgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQ
YWdlTmFtZWQ6QCJwcmV2ZW50LW9wZXJhdGlvbiJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBh
ZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgNTAp
IHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBFWFBFQ1RfRkFMU0UoW3dlYlZpZXcg
ZWRpdG9yQ29udGFpbnNJbWFnZUVsZW1lbnRdKTsKKworICAgIE5TQXJyYXkgKm9ic2VydmVkRXZl
bnROYW1lcyA9IFtzaW11bGF0b3Igb2JzZXJ2ZWRFdmVudE5hbWVzXTsKKyAgICBFWFBFQ1RfVFJV
RShbb2JzZXJ2ZWRFdmVudE5hbWVzIGNvbnRhaW5zT2JqZWN0OkAiZHJhZ2VudGVyIl0pOworICAg
IEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6QCJkcmFnb3Zl
ciJdKTsKKyAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgXSwgW3NpbXVsYXRv
ciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRW50
ZXJBbmRMZWF2ZUV2ZW50cykKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImxpbmstYW5k
LWlucHV0Il07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNp
bXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2lt
dWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCA0
NTApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgZWRpdG9yVmFsdWVdLlVU
RjhTdHJpbmcpOworCisgICAgTlNBcnJheSAqb2JzZXJ2ZWRFdmVudE5hbWVzID0gW3NpbXVsYXRv
ciBvYnNlcnZlZEV2ZW50TmFtZXNdOworICAgIEVYUEVDVF9UUlVFKFtvYnNlcnZlZEV2ZW50TmFt
ZXMgY29udGFpbnNPYmplY3Q6QCJkcmFnZW50ZXIiXSk7CisgICAgRVhQRUNUX1RSVUUoW29ic2Vy
dmVkRXZlbnROYW1lcyBjb250YWluc09iamVjdDpAImRyYWdvdmVyIl0pOworICAgIEVYUEVDVF9U
UlVFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6QCJkcmFnbGVhdmUiXSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKFtvYnNlcnZlZEV2ZW50TmFtZXMgY29udGFpbnNPYmplY3Q6QCJkcm9w
Il0pOworICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBdLCBbc2ltdWxhdG9y
IGZpbmFsU2VsZWN0aW9uUmVjdHNdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBDYW5T
dGFydERyYWdPbkRpdldpdGhEcmFnZ2FibGVBdHRyaWJ1dGUpCit7CisgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQ
YWdlTmFtZWQ6QCJjdXN0b20tZHJhZ2dhYmxlLWRpdiJdOworCisgICAgYXV0byBzaW11bGF0b3Ig
PSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3
ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwg
MTAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDI1MCldOworCisgICAgRVhQRUNUX0dUKFtzaW11bGF0
b3Igc291cmNlSXRlbVByb3ZpZGVyc10uY291bnQsIDBVTCk7CisgICAgTlNJdGVtUHJvdmlkZXIg
Kml0ZW1Qcm92aWRlciA9IFtzaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10uZmlyc3RPYmpl
Y3Q7CisgICAgRVhQRUNUX0VRKFVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVJbmxpbmUsIGl0
ZW1Qcm92aWRlci5wcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZSk7CisgICAgRVhQRUNUX1RSVUUo
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIiEhZGVzdGluYXRpb24ucXVl
cnlTZWxlY3RvcignI2l0ZW0nKSJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoQCJQQVNTIiwgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIml0ZW0udGV4dENvbnRlbnQiXSk7
Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VQbGFpblRleHRUb0lG
cmFtZSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImNvbnRlbnRlZGl0YWJsZS1pbi1p
ZnJhbWUiXTsKKworICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3Zp
ZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2l0ZW1Qcm92aWRlciByZWdpc3Rlck9iamVjdDpAIkhl
bGxvIHdvcmxkIiB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25z
VmlzaWJpbGl0eUFsbF07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5k
RHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAg
ICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0
KCkgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDAsIDApIHRvOkNHUG9p
bnRNYWtlKDE2MCwgMjUwKV07CisKKyAgICBhdXRvIGNvbnRhaW5lckxlZnQgPSBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpLmxlZnQiXS5mbG9hdFZhbHVlOworICAgIGF1dG8gY29udGFpbmVyVG9wID0gW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImNvbnRhaW5lci5nZXRCb3VuZGluZ0Ns
aWVudFJlY3QoKS50b3AiXS5mbG9hdFZhbHVlOworICAgIGF1dG8gY29udGFpbmVyV2lkdGggPSBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY29udGFpbmVyLmdldEJvdW5k
aW5nQ2xpZW50UmVjdCgpLndpZHRoIl0uZmxvYXRWYWx1ZTsKKyAgICBhdXRvIGNvbnRhaW5lckhl
aWdodCA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjb250YWluZXIu
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0Il0uZmxvYXRWYWx1ZTsKKyAgICBjaGVja0Ry
YWdDYXJldFJlY3RJc0NvbnRhaW5lZEluUmVjdChbc2ltdWxhdG9yIGxhc3RLbm93bkRyYWdDYXJl
dFJlY3RdLCBDR1JlY3RNYWtlKGNvbnRhaW5lckxlZnQsIGNvbnRhaW5lclRvcCwgY29udGFpbmVy
V2lkdGgsIGNvbnRhaW5lckhlaWdodCkpOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4
dGVybmFsU291cmNlSW5saW5lVGV4dFRvRmlsZUlucHV0KQoreworICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFn
ZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsKKworICAgIGF1dG8gc2ltdWxhdGVkSXRlbVByb3Zp
ZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW3NpbXVs
YXRlZEl0ZW1Qcm92aWRlciBzZXRQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZTpVSVByZWZlcnJl
ZFByZXNlbnRhdGlvblN0eWxlSW5saW5lXTsKKyAgICBbc2ltdWxhdGVkSXRlbVByb3ZpZGVyIHJl
Z2lzdGVyT2JqZWN0OkAiVGhpcyBpdGVtIHByb3ZpZGVyIHJlcXVlc3RlZCBpbmxpbmUgcHJlc2Vu
dGF0aW9uIHN0eWxlLiIgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlz
aWJpbGl0eUFsbF07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJv
cFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBb
c2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlk
ZXIuZ2V0KCkgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAw
KSB0bzpDR1BvaW50TWFrZSgxMDAsIDEwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0pOwor
fQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNlSlNPTlRvRmlsZUlucHV0
KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcg
c3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsKKworICAg
IGF1dG8gc2ltdWxhdGVkSlNPTkl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRl
ciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqanNvbkRhdGEgPSBbQCJ7IFwiZm9vXCI6IFwi
YmFyXCIsICBcImJhclwiOiBcImJhelwiIH0iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nXTsKKyAgICBbc2ltdWxhdGVkSlNPTkl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFS
ZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVKU09OIHdp
dGhEYXRhOmpzb25EYXRhXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdB
bmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwor
ICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEpTT05J
dGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtl
KDIwMCwgMTAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDEwMCldOworCisgICAgRVhQRUNUX1dLX1NU
UkVRKCJhcHBsaWNhdGlvbi9qc29uIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAIm91dHB1dC52YWx1ZSJdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRl
cm5hbFNvdXJjZUltYWdlVG9GaWxlSW5wdXQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6
QCJmaWxlLXVwbG9hZGluZyJdOworCisgICAgYXV0byBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRl
ciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAq
aW1hZ2VEYXRhID0gVUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAu
NSk7CisgICAgW3NpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2Vu
dGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUpQRUcgd2l0aERhdGE6
aW1hZ2VEYXRhXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9w
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtz
aW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEltYWdlSXRlbVBy
b3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAs
IDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsKKworICAgIE5TU3RyaW5nICpvdXRwdXRW
YWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFs
dWUiXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImltYWdlL2pwZWciLCBvdXRwdXRWYWx1ZS5VVEY4
U3RyaW5nKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZUhUTUxU
b1VwbG9hZEFyZWEpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAg
ICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGlu
ZyJdOworCisgICAgYXV0byBzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJ
SXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgTlNEYXRhICpodG1sRGF0YSA9IFtAIjxi
b2R5IGNvbnRlbnRlZGl0YWJsZT48L2JvZHk+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZ107CisgICAgW3NpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRh
UmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3
aXRoRGF0YTpodG1sRGF0YV07CisgICAgW3NpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgc2V0U3Vn
Z2VzdGVkTmFtZTpAImluZGV4Lmh0bWwiXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHRO
UyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5n
ZXQoKV0pOworICAgIFtzaW11bGF0b3Igc2V0U2hvdWxkQWxsb3dNb3ZlT3BlcmF0aW9uOk5PXTsK
KyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRIVE1M
SXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFr
ZSgyMDAsIDMwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIE5TU3RyaW5nICpv
dXRwdXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRw
dXQudmFsdWUiXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoInRleHQvaHRtbCIsIG91dHB1dFZhbHVl
LlVURjhTdHJpbmcpOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNl
TW92ZU9wZXJhdGlvbk5vdEFsbG93ZWQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAs
IDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJm
aWxlLXVwbG9hZGluZyJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJ1cGxvYWQuZHJvcEVmZmVjdCA9ICdtb3ZlJyJdOworCisgICAgYXV0byBzaW11bGF0ZWRI
VE1MSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7
CisgICAgTlNEYXRhICpodG1sRGF0YSA9IFtAIjxib2R5IGNvbnRlbnRlZGl0YWJsZT48L2JvZHk+
IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisgICAgW3NpbXVsYXRl
ZEhUTUxJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRp
ZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3aXRoRGF0YTpodG1sRGF0YV07CisKKyAgICBh
dXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5p
dFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldFNob3VsZEFs
bG93TW92ZU9wZXJhdGlvbjpOT107CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92
aWRlcnM6QFsgc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAgICBbc2ltdWxh
dG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAzMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAw
KV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0
cywgRXh0ZXJuYWxTb3VyY2VaSVBBcmNoaXZlQW5kVVJMVG9TaW5nbGVGaWxlSW5wdXQpCit7Cisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOworCisgICAgYXV0byBh
cmNoaXZlUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsK
KyAgICBbYXJjaGl2ZVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlk
ZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZVppcEFyY2hpdmUgd2l0aERhdGE6dGVzdFpJUEFy
Y2hpdmUoKV07CisKKyAgICBhdXRvIHVybFByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3Zp
ZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW3VybFByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OltOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93ZWJraXQub3JnIl0gdmlzaWJpbGl0eTpVSUl0ZW1Q
cm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOworCisgICAgYXV0byBz
aW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRo
V2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Q
cm92aWRlcnM6QFsgYXJjaGl2ZVByb3ZpZGVyLmdldCgpLCB1cmxQcm92aWRlci5nZXQoKSBdXTsK
KyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAxMDApIHRvOkNHUG9pbnRN
YWtlKDEwMCwgMTAwKV07CisKKyAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07CisgICAgRVhQRUNU
X1dLX1NUUkVRKCJhcHBsaWNhdGlvbi96aXAiLCBvdXRwdXRWYWx1ZS5VVEY4U3RyaW5nKTsKK30K
KworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZVpJUEFyY2hpdmVUb1VwbG9h
ZEFyZWEpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOwor
CisgICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2Nd
IGluaXRdKTsKKyAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9y
VHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZVppcEFyY2hpdmUgd2l0aERhdGE6dGVz
dFpJUEFyY2hpdmUoKV07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5k
RHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAg
ICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0
KCkgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMzAwKSB0bzpD
R1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOworICAg
IEVYUEVDVF9XS19TVFJFUSgiYXBwbGljYXRpb24vemlwIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmlu
Zyk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VJbWFnZUFuZEhU
TUxUb1NpbmdsZUZpbGVJbnB1dCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUt
dXBsb2FkaW5nIl07CisKKyAgICBhdXRvIHNpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyID0gYWRv
cHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgTlNEYXRhICppbWFnZURh
dGEgPSBVSUltYWdlSlBFR1JlcHJlc2VudGF0aW9uKHRlc3RJY29uSW1hZ2UoKSwgMC41KTsKKyAg
ICBbc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25G
b3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSlBFRyB3aXRoRGF0YTppbWFnZURh
dGFdOworCisgICAgYXV0byBzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJ
SXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgTlNEYXRhICpodG1sRGF0YSA9IFtAIjxi
b2R5IGNvbnRlbnRlZGl0YWJsZT48L2JvZHk+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZ107CisgICAgW3NpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRh
UmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3
aXRoRGF0YTpodG1sRGF0YV07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFn
QW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsK
KyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRIVE1M
SXRlbVByb3ZpZGVyLmdldCgpLCBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlci5nZXQoKSBdXTsK
KyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAxMDApIHRvOkNHUG9pbnRN
YWtlKDEwMCwgMTAwKV07CisKKyAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07CisgICAgRVhQRUNU
X1dLX1NUUkVRKCIiLCBvdXRwdXRWYWx1ZS5VVEY4U3RyaW5nKTsKK30KKworVEVTVChEcmFnQW5k
RHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZUltYWdlQW5kSFRNTFRvTXVsdGlwbGVGaWxlSW5wdXQp
Cit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOworICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJpbnB1dC5zZXRBdHRyaWJ1dGUo
J211bHRpcGxlJywgJycpIl07CisKKyAgICBhdXRvIHNpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVy
ID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgTlNEYXRhICpp
bWFnZURhdGEgPSBVSUltYWdlSlBFR1JlcHJlc2VudGF0aW9uKHRlc3RJY29uSW1hZ2UoKSwgMC41
KTsKKyAgICBbc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50
YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSlBFRyB3aXRoRGF0YTpp
bWFnZURhdGFdOworCisgICAgYXV0byBzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyID0gYWRvcHRO
UyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgTlNEYXRhICpodG1sRGF0YSA9
IFtAIjxib2R5IGNvbnRlbnRlZGl0YWJsZT48L2JvZHk+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VU
RjhTdHJpbmdFbmNvZGluZ107CisgICAgW3NpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgcmVnaXN0
ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBl
SFRNTCB3aXRoRGF0YTpodG1sRGF0YV07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMo
W1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0
ZWRIVE1MSXRlbVByb3ZpZGVyLmdldCgpLCBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlci5nZXQo
KSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAxMDApIHRvOkNH
UG9pbnRNYWtlKDEwMCwgMTAwKV07CisKKyAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07CisgICAg
RVhQRUNUX1dLX1NUUkVRKCJpbWFnZS9qcGVnLCB0ZXh0L2h0bWwiLCBvdXRwdXRWYWx1ZS5VVEY4
U3RyaW5nKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZUltYWdl
QW5kSFRNTFRvVXBsb2FkQXJlYSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUt
dXBsb2FkaW5nIl07CisKKyAgICBhdXRvIHNpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyID0gYWRv
cHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgTlNEYXRhICppbWFnZURh
dGEgPSBVSUltYWdlSlBFR1JlcHJlc2VudGF0aW9uKHRlc3RJY29uSW1hZ2UoKSwgMC41KTsKKyAg
ICBbc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25G
b3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSlBFRyB3aXRoRGF0YTppbWFnZURh
dGFdOworCisgICAgYXV0byBmaXJzdFNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgPSBhZG9wdE5T
KFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBOU0RhdGEgKmZpcnN0SFRNTERh
dGEgPSBbQCI8Ym9keSBjb250ZW50ZWRpdGFibGU+PC9ib2R5PiIgZGF0YVVzaW5nRW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmddOworICAgIFtmaXJzdFNpbXVsYXRlZEhUTUxJdGVtUHJvdmlk
ZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcg
KilrVVRUeXBlSFRNTCB3aXRoRGF0YTpmaXJzdEhUTUxEYXRhXTsKKworICAgIGF1dG8gc2Vjb25k
U2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxv
Y10gaW5pdF0pOworICAgIE5TRGF0YSAqc2Vjb25kSFRNTERhdGEgPSBbQCI8aHRtbD48Ym9keT5o
ZWxsbyB3b3JsZDwvYm9keT48L2h0bWw+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdF
bmNvZGluZ107CisgICAgW3NlY29uZFNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgcmVnaXN0ZXJE
YXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRN
TCB3aXRoRGF0YTpzZWNvbmRIVE1MRGF0YV07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0
TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcu
Z2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldFNob3VsZEFsbG93TW92ZU9wZXJhdGlvbjpOT107
CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSW1h
Z2VJdGVtUHJvdmlkZXIuZ2V0KCksIGZpcnN0U2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlci5nZXQo
KSwgc2Vjb25kU2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAgICBbc2ltdWxh
dG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAzMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAw
KV07CisKKyAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07CisgICAgRVhQRUNUX1dLX1NUUkVRKCJp
bWFnZS9qcGVnLCB0ZXh0L2h0bWwsIHRleHQvaHRtbCIsIG91dHB1dFZhbHVlLlVURjhTdHJpbmcp
OworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNlSFRNTFRvQ29udGVu
dEVkaXRhYmxlKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRl
bnRlZGl0YWJsZSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJnZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSJdOworCisgICAgYXV0byBzaW11bGF0
b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmll
dzp3ZWJWaWV3LmdldCgpXSk7CisgICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJ
dGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBOU0RhdGEgKmh0bWxEYXRhID0gW0AiPGgx
PlRoaXMgaXMgYSB0ZXN0PC9oMT4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29k
aW5nXTsKKyAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlw
ZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERhdGE6aHRtbERhdGFdOwor
ICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5n
ZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRv
OkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBOU1N0cmluZyAqdGV4dENvbnRlbnQgPSBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50
Il07CisgICAgRVhQRUNUX1dLX1NUUkVRKCJUaGlzIGlzIGEgdGVzdCIsIHRleHRDb250ZW50LlVU
RjhTdHJpbmcpOworICAgIEVYUEVDVF9UUlVFKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCIhIWVkaXRvci5xdWVyeVNlbGVjdG9yKCdoMScpIl0uYm9vbFZhbHVlKTsKK30K
KworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZUJvbGRTeXN0ZW1BdHRyaWJ1
dGVkU3RyaW5nVG9Db250ZW50RWRpdGFibGUpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6
QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07CisK
KyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBOU0RpY3Rpb25hcnkgKnRl
eHRBdHRyaWJ1dGVzID0gQHsgTlNGb250QXR0cmlidXRlTmFtZTogW1VJRm9udCBib2xkU3lzdGVt
Rm9udE9mU2l6ZToyMF0gfTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnJpY2hUZXh0ID0gW1tO
U0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiVGhpcyBpcyBhIHRlc3Qi
IGF0dHJpYnV0ZXM6dGV4dEF0dHJpYnV0ZXNdOworICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRv
cHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0V2l0aE9iamVjdDpyaWNoVGV4dF0pOwor
ICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5n
ZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRv
OkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlRoaXMgaXMg
YSB0ZXN0IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50
ZXh0Q29udGVudCJdLlVURjhTdHJpbmcpOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4
dGVybmFsU291cmNlQ29sb3JlZEF0dHJpYnV0ZWRTdHJpbmdUb0NvbnRlbnRFZGl0YWJsZSkKK3sK
KyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNo
cm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsK
KyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9u
KCkucmVtb3ZlQWxsUmFuZ2VzKCkiXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhb
W0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQo
KV0pOworICAgIE5TRGljdGlvbmFyeSAqdGV4dEF0dHJpYnV0ZXMgPSBAeyBOU0ZvcmVncm91bmRD
b2xvckF0dHJpYnV0ZU5hbWU6IFtVSUNvbG9yIHJlZENvbG9yXSB9OworICAgIE5TQXR0cmlidXRl
ZFN0cmluZyAqcmljaFRleHQgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhT
dHJpbmc6QCJUaGlzIGlzIGEgdGVzdCIgYXR0cmlidXRlczp0ZXh0QXR0cmlidXRlc107CisgICAg
YXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRX
aXRoT2JqZWN0OnJpY2hUZXh0XSk7CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92
aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpD
R1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIEVY
UEVDVF9XS19TVFJFUSgicmdiKDI1NSwgMCwgMCkiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdw
JykpLmNvbG9yIl0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiVGhpcyBpcyBhIHRlc3QiLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il0u
VVRGOFN0cmluZyk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VN
dWx0aXBsZVVSTHNUb0NvbnRlbnRFZGl0YWJsZSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAs
IDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1l
ZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkiXTsK
KworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFs
bG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIGF1dG8gZmlyc3RJdGVt
ID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2ZpcnN0SXRl
bSByZWdpc3Rlck9iamVjdDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd3d3LmFwcGxl
LmNvbS9pcGhvbmUvIl0gdmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0
aW9uc1Zpc2liaWxpdHlBbGxdOworICAgIGF1dG8gc2Vjb25kSXRlbSA9IGFkb3B0TlMoW1tVSUl0
ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtzZWNvbmRJdGVtIHJlZ2lzdGVyT2JqZWN0
OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93d3cuYXBwbGUuY29tL21hYy8iXSB2aXNp
YmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07
CisgICAgYXV0byB0aGlyZEl0ZW0gPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGlu
aXRdKTsKKyAgICBbdGhpcmRJdGVtIHJlZ2lzdGVyT2JqZWN0OltOU1VSTCBVUkxXaXRoU3RyaW5n
OkAiaHR0cHM6Ly93ZWJraXQub3JnLyJdIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNl
bnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsXTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFs
SXRlbVByb3ZpZGVyczpAWyBmaXJzdEl0ZW0uZ2V0KCksIHNlY29uZEl0ZW0uZ2V0KCksIHRoaXJk
SXRlbS5nZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0
MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBOU0FycmF5ICpkcm9wcGVkVVJM
cyA9IFt3ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJBcnJheS5mcm9tKGVk
aXRvci5xdWVyeVNlbGVjdG9yQWxsKCdhJykpLm1hcChhID0+IGEuaHJlZikiXTsKKyAgICBFWFBF
Q1RfRVEoM1VMLCBkcm9wcGVkVVJMcy5jb3VudCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJodHRw
czovL3d3dy5hcHBsZS5jb20vaXBob25lLyIsIGRyb3BwZWRVUkxzWzBdKTsKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9tYWMvIiwgZHJvcHBlZFVSTHNbMV0pOwor
ICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93ZWJraXQub3JnLyIsIGRyb3BwZWRVUkxzWzJd
KTsKKworICAgIE5TQXJyYXkgKmxpbmtzU2VwYXJhdGVkQnlMaW5lID0gW1t3ZWJWaWV3IG9iamVj
dEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IuaW5uZXJUZXh0Il0gY29tcG9uZW50c1Nl
cGFyYXRlZEJ5Q2hhcmFjdGVyc0luU2V0OltOU0NoYXJhY3RlclNldCBuZXdsaW5lQ2hhcmFjdGVy
U2V0XV07CisgICAgRVhQRUNUX0VRKDNVTCwgbGlua3NTZXBhcmF0ZWRCeUxpbmUuY291bnQpOwor
ICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93d3cuYXBwbGUuY29tL2lwaG9uZS8iLCBsaW5r
c1NlcGFyYXRlZEJ5TGluZVswXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJodHRwczovL3d3dy5h
cHBsZS5jb20vbWFjLyIsIGxpbmtzU2VwYXJhdGVkQnlMaW5lWzFdKTsKKyAgICBFWFBFQ1RfV0tf
U1RSRVEoImh0dHBzOi8vd2Via2l0Lm9yZy8iLCBsaW5rc1NlcGFyYXRlZEJ5TGluZVsyXSk7Cit9
CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgUmVzcGVjdHNFeHRlcm5hbFNvdXJjZUZpZGVsaXR5
UmFua2luZ3MpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBb
d2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVu
dGVkaXRhYmxlIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
ImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07CisKKyAgICBhdXRvIHNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3
OndlYlZpZXcuZ2V0KCldKTsKKworICAgIC8vIEhlcmUsIG91ciBzb3VyY2UgaXRlbSBwcm92aWRl
ciB2ZW5kcyB0d28gcmVwcmVzZW50YXRpb25zOiBwbGFpbiB0ZXh0LCBhbmQgdGhlbiBhbiBpbWFn
ZS4gSWYgd2UgZG9uJ3QgcmVzcGVjdCB0aGUKKyAgICAvLyBmaWRlbGl0eSBvcmRlciByZXF1ZXN0
ZWQgYnkgdGhlIHNvdXJjZSwgd2UnbGwgZW5kIHVwIGFzc3VtaW5nIHRoYXQgdGhlIGltYWdlIGlz
IGEgaGlnaGVyIGZpZGVsaXR5IHJlcHJlc2VudGF0aW9uCisgICAgLy8gdGhhbiB0aGUgcGxhaW4g
dGV4dCwgYW5kIGVycm9uZW91c2x5IGluc2VydCB0aGUgaW1hZ2UuIElmIHdlIHJlc3BlY3Qgc291
cmNlIGZpZGVsaXRpZXMsIHdlJ2xsIGluc2VydCB0ZXh0IHJhdGhlcgorICAgIC8vIHRoYW4gYW4g
aW1hZ2UuCisgICAgYXV0byBzaW11bGF0ZWRJdGVtUHJvdmlkZXJXaXRoVGV4dEZpcnN0ID0gYWRv
cHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW3NpbXVsYXRlZEl0ZW1Q
cm92aWRlcldpdGhUZXh0Rmlyc3QgcmVnaXN0ZXJPYmplY3Q6QCJIZWxsbyB3b3JsZCIgdmlzaWJp
bGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOwor
ICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXJXaXRoVGV4dEZpcnN0IHJlZ2lzdGVyT2JqZWN0OnRl
c3RJY29uSW1hZ2UoKSB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRp
b25zVmlzaWJpbGl0eUFsbF07CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRl
cnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyV2l0aFRleHRGaXJzdC5nZXQoKSBdXTsKKworICAg
IFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2Uo
MTAwLCAzMDApXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIkhlbGxvIHdvcmxkIiwgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoW3dlYlZpZXcgZWRpdG9yQ29udGFpbnNJbWFnZUVsZW1lbnRdKTsKKyAg
ICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLmlubmVySFRN
TCA9ICcnIl07CisKKyAgICAvLyBOb3cgd2UgcmVnaXN0ZXIgdGhlIGl0ZW0gcHJvdmlkZXJzIGlu
IHJldmVyc2UsIGFuZCBleHBlY3QgdGhlIGltYWdlIHRvIGJlIGluc2VydGVkIGluc3RlYWQgb2Yg
dGV4dC4KKyAgICBhdXRvIHNpbXVsYXRlZEl0ZW1Qcm92aWRlcldpdGhJbWFnZUZpcnN0ID0gYWRv
cHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW3NpbXVsYXRlZEl0ZW1Q
cm92aWRlcldpdGhJbWFnZUZpcnN0IHJlZ2lzdGVyT2JqZWN0OnRlc3RJY29uSW1hZ2UoKSB2aXNp
YmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07
CisgICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRlcldpdGhJbWFnZUZpcnN0IHJlZ2lzdGVyT2JqZWN0
OkAiSGVsbG8gd29ybGQiIHZpc2liaWxpdHk6VUlJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvbk9w
dGlvbnNWaXNpYmlsaXR5QWxsXTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3Zp
ZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXJXaXRoSW1hZ2VGaXJzdC5nZXQoKSBdXTsKKwor
ICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1h
a2UoMTAwLCAzMDApXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNU
X1RSVUUoW3dlYlZpZXcgZWRpdG9yQ29udGFpbnNJbWFnZUVsZW1lbnRdKTsKK30KKworVEVTVChE
cmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJjZVVURjhQbGFpblRleHRPbmx5KQoreworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOworCisg
ICAgTlNTdHJpbmcgKnRleHRQYXlsb2FkID0gQCJDZWNpIG4nZXN0IHBhcyB1bmUgc3RyaW5nIjsK
KyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBhdXRvIHNpbXVsYXRlZEl0
ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAg
IFtzaW11bGF0ZWRJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBl
SWRlbnRpZmllcjooX19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlVVRGOFBsYWluVGV4dCBvcHRp
b25zOm5pbCBsb2FkSGFuZGxlcjpeTlNQcm9ncmVzcyAqKFVJSXRlbVByb3ZpZGVyRGF0YUxvYWRD
b21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkJsb2NrKQorICAgIHsKKyAgICAgICAgY29tcGxldGlv
bkJsb2NrKFt0ZXh0UGF5bG9hZCBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z10sIG5pbCk7CisgICAgICAgIHJldHVybiBbTlNQcm9ncmVzcyBkaXNjcmV0ZVByb2dyZXNzV2l0
aFRvdGFsVW5pdENvdW50OjEwMF07CisgICAgfV07CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5h
bEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtz
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAw
LCAzMDApXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEodGV4dFBheWxvYWQuVVRGOFN0cmluZywgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJd
LlVURjhTdHJpbmcpOworICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtl
Q0dSZWN0VmFsdWUoMSwgMjAxLCAxOTM2LCAyMjcpIF0sIFtzaW11bGF0b3IgZmluYWxTZWxlY3Rp
b25SZWN0c10pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNlSlBF
R09ubHkpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVk
aXRhYmxlIl07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNp
bXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBhdXRv
IHNpbXVsYXRlZEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10g
aW5pdF0pOworICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50
YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooX19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlSlBFRyBv
cHRpb25zOm5pbCBsb2FkSGFuZGxlcjpeTlNQcm9ncmVzcyAqKFVJSXRlbVByb3ZpZGVyRGF0YUxv
YWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkJsb2NrKQorICAgIHsKKyAgICAgICAgY29tcGxl
dGlvbkJsb2NrKFVJSW1hZ2VKUEVHUmVwcmVzZW50YXRpb24odGVzdEljb25JbWFnZSgpLCAwLjUp
LCBuaWwpOworICAgICAgICByZXR1cm4gW05TUHJvZ3Jlc3MgZGlzY3JldGVQcm9ncmVzc1dpdGhU
b3RhbFVuaXRDb3VudDoxMDBdOworICAgIH1dOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJ
dGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAgICBbc2lt
dWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwg
MzAwKV07CisgICAgRVhQRUNUX1RSVUUoW3dlYlZpZXcgZWRpdG9yQ29udGFpbnNJbWFnZUVsZW1l
bnRdKTsKKyAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgbWFrZUNHUmVjdFZh
bHVlKDEsIDIwMSwgMjE1LCAxNzQpIF0sIFtzaW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0c10p
OworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNlVGl0bGVkTlNVUkwp
Cit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxl
Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVj
dGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIl07CisKKyAgICBOU1VSTCAqdGl0bGVkVVJMID0gW05T
VVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBsZS5jb20iXTsKKyAgICB0aXRsZWRV
UkwuX3RpdGxlID0gQCJBcHBsZSI7CisgICAgYXV0byBzaW11bGF0ZWRJdGVtUHJvdmlkZXIgPSBh
ZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbc2ltdWxhdGVkSXRl
bVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OnRpdGxlZFVSTCB2aXNpYmlsaXR5OlVJSXRlbVByb3Zp
ZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07CisKKyAgICBhdXRvIHNpbXVs
YXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJW
aWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3Zp
ZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW3NpbXVsYXRvciBy
dW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwor
CisgICAgRVhQRUNUX1dLX1NUUkVRKCJBcHBsZSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJlZGl0b3IucXVlcnlTZWxlY3RvcignYScpLnRleHRDb250ZW50Il0pOwor
ICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93d3cuYXBwbGUuY29tLyIsIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IucXVlcnlTZWxlY3RvcignYScpLmhy
ZWYiXSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRXh0ZXJuYWxTb3VyY2VGaWxlVVJM
KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcg
c3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJs
ZSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxl
Y3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSJdOworCisgICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBV
UkxXaXRoU3RyaW5nOkAiZmlsZTovLy9zb21lL2ZpbGUvdGhhdC9pcy9ub3QvcmVhbCJdOworICAg
IFVJSXRlbVByb3ZpZGVyICpzaW11bGF0ZWRJdGVtUHJvdmlkZXIgPSBbVUlJdGVtUHJvdmlkZXIg
aXRlbVByb3ZpZGVyV2l0aFVSTDpVUkwgdGl0bGU6QCIiXTsKKworICAgIGF1dG8gc2ltdWxhdG9y
ID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6
d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJz
OkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRlciBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQ
b2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBFWFBF
Q1RfRkFMU0UoW1t3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCIhIWVkaXRv
ci5xdWVyeVNlbGVjdG9yKCdhJykiXSBib29sVmFsdWVdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
IkhlbGxvIHdvcmxkXG5maWxlOi8vL3NvbWUvZmlsZS90aGF0L2lzL25vdC9yZWFsIiwgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5uZXJUZXh0
Il0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4dGVybmFsU291cmNlT3ZlcnJpZGVE
cm9wRmlsZVVwbG9hZCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwor
ICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2Fk
aW5nIl07CisKKyAgICBhdXRvIHNpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyID0gYWRvcHROUyhb
W1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgTlNEYXRhICppbWFnZURhdGEgPSBV
SUltYWdlSlBFR1JlcHJlc2VudGF0aW9uKHRlc3RJY29uSW1hZ2UoKSwgMC41KTsKKyAgICBbc2lt
dWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBl
SWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSlBFRyB3aXRoRGF0YTppbWFnZURhdGFdOwor
CisgICAgYXV0byBzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVBy
b3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgTlNEYXRhICpmaXJzdEhUTUxEYXRhID0gW0AiPGJv
ZHkgY29udGVudGVkaXRhYmxlPjwvYm9keT4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nXTsKKyAgICBbc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFS
ZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdp
dGhEYXRhOmZpcnN0SFRNTERhdGFdOworICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHNl
dFByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlOlVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVB
dHRhY2htZW50XTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9w
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtz
aW11bGF0b3Igc2V0T3ZlcnJpZGVQZXJmb3JtRHJvcEJsb2NrOl5OU0FycmF5PFVJRHJhZ0l0ZW0g
Kj4gKihpZCA8VUlEcm9wU2Vzc2lvbj4gc2Vzc2lvbikKKyAgICB7CisgICAgICAgIEVYUEVDVF9F
USgyVUwsIHNlc3Npb24uaXRlbXMuY291bnQpOworICAgICAgICBVSURyYWdJdGVtICpmaXJzdEl0
ZW0gPSBzZXNzaW9uLml0ZW1zWzBdOworICAgICAgICBVSURyYWdJdGVtICpzZWNvbmRJdGVtID0g
c2Vzc2lvbi5pdGVtc1sxXTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW2ZpcnN0SXRlbS5pdGVtUHJv
dmlkZXIucmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVycyBpc0VxdWFsOkBbIChOU1N0cmluZyAqKWtV
VFR5cGVKUEVHIF1dKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW3NlY29uZEl0ZW0uaXRlbVByb3Zp
ZGVyLnJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnMgaXNFcXVhbDpAWyAoTlNTdHJpbmcgKilrVVRU
eXBlSFRNTCBdXSk7CisgICAgICAgIHJldHVybiBAWyBzZWNvbmRJdGVtIF07CisgICAgfV07Cisg
ICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSW1hZ2VJ
dGVtUHJvdmlkZXIuZ2V0KCksIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0KCkgXV07Cisg
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMzAwKSB0bzpDR1BvaW50TWFr
ZSgxMDAsIDMwMCldOworCisgICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOworICAgIEVYUEVDVF9X
S19TVFJFUSgidGV4dC9odG1sIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7Cit9CisKKyNpZiBf
X0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAzMDAKKworc3RhdGljIFJldGFp
blB0cjxUZXN0V0tXZWJWaWV3PiBzZXRVcFRlc3RXZWJWaWV3Rm9yRGF0YVRyYW5zZmVySXRlbXMo
KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcg
c3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiRGF0YVRyYW5zZmVySXRlbS1nZXRBc0Vu
dHJ5Il07CisKKyAgICBhdXRvIHByZWZlcmVuY2VzID0gKFdLUHJlZmVyZW5jZXNSZWYpW1t3ZWJW
aWV3IGNvbmZpZ3VyYXRpb25dIHByZWZlcmVuY2VzXTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0RGF0
YVRyYW5zZmVySXRlbXNFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVu
Y2VzU2V0RGlyZWN0b3J5VXBsb2FkRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CisKKyAgICBy
ZXR1cm4gd2ViVmlldzsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHRlcm5hbFNvdXJj
ZURhdGFUcmFuc2Zlckl0ZW1HZXRGb2xkZXJBc0VudHJ5KQoreworICAgIC8vIFRoZSBleHBlY3Rl
ZCBvdXRwdXQgaXMgc29ydGVkIGJ5IGFscGhhYmV0aWNhbCBvcmRlciBoZXJlIGZvciBjb25zaXN0
ZW50IGJlaGF2aW9yIGFjcm9zcyBkaWZmZXJlbnQgdGVzdCBlbnZpcm9ubWVudHMuCisgICAgLy8g
U2VlIERhdGFUcmFuc2Zlckl0ZW0tZ2V0QXNFbnRyeS5odG1sIGZvciBtb3JlIGRldGFpbHMuCisg
ICAgTlNBcnJheTxOU1N0cmluZyAqPiAqZXhwZWN0ZWRPdXRwdXQgPSBAWworICAgICAgICBAIkZv
dW5kIGRhdGEgdHJhbnNmZXIgaXRlbSAoa2luZDogJ2ZpbGUnLCB0eXBlOiAnJykiLAorICAgICAg
ICBAIkRJUjogL3NvbWVkaXJlY3RvcnkiLAorICAgICAgICBAIkRJUjogL3NvbWVkaXJlY3Rvcnkv
c3ViZGlyZWN0b3J5MSIsCisgICAgICAgIEAiRElSOiAvc29tZWRpcmVjdG9yeS9zdWJkaXJlY3Rv
cnkyIiwKKyAgICAgICAgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGSUxFOiAvc29tZWRp
cmVjdG9yeS9hcmNoaXZlLnppcCAoJ2FwcGxpY2F0aW9uL3ppcCcsICV0dSBieXRlcykiLCB0ZXN0
WklQQXJjaGl2ZSgpLmxlbmd0aF0sCisgICAgICAgIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiRklMRTogL3NvbWVkaXJlY3RvcnkvaWNvbi5wbmcgKCdpbWFnZS9wbmcnLCAldHUgYnl0ZXMp
IiwgdGVzdEljb25JbWFnZURhdGEoKS5sZW5ndGhdLAorICAgICAgICBAIkZJTEU6IC9zb21lZGly
ZWN0b3J5L3N1YmRpcmVjdG9yeTEvdGV4dC1maWxlLTEudHh0ICgndGV4dC9wbGFpbicsIDQzIGJ5
dGVzKSIsCisgICAgICAgIEAiRklMRTogL3NvbWVkaXJlY3Rvcnkvc3ViZGlyZWN0b3J5Mi90ZXh0
LWZpbGUtMi50eHQgKCd0ZXh0L3BsYWluJywgNDQgYnl0ZXMpIgorICAgIF07CisKKyAgICBhdXRv
IHdlYlZpZXcgPSBzZXRVcFRlc3RXZWJWaWV3Rm9yRGF0YVRyYW5zZmVySXRlbXMoKTsKKyAgICBf
X2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IHBlcmZvcm1BZnRlclJlY2Vp
dmluZ01lc3NhZ2U6QCJkcm9wcGVkIiBhY3Rpb246XigpIHsKKyAgICAgICAgZG9uZSA9IHRydWU7
CisgICAgfV07CisKKyAgICBydW5UZXN0V2l0aFRlbXBvcmFyeUZvbGRlciheKE5TVVJMICpmb2xk
ZXJVUkwpIHsKKyAgICAgICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbTlNJdGVtUHJv
dmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW2l0ZW1Qcm92aWRlciBzZXRTdWdnZXN0ZWRO
YW1lOkAic29tZWRpcmVjdG9yeSJdOworICAgICAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRmls
ZVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUZvbGRl
ciBmaWxlT3B0aW9uczowIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZp
c2liaWxpdHlBbGwgbG9hZEhhbmRsZXI6W2NhcHR1cmVkRm9sZGVyVVJMID0gcmV0YWluUHRyKGZv
bGRlclVSTCldIChGaWxlTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uSGFuZGxlcikgLT4g
TlNQcm9ncmVzcyAqIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNhcHR1cmVkRm9s
ZGVyVVJMLmdldCgpLCBOTywgbmlsKTsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAg
IH1dOworCisgICAgICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2lt
dWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgICAgICBb
c2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkg
XV07CisgICAgICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRvOkNH
UG9pbnRNYWtlKDE1MCwgNTApXTsKKyAgICB9KTsKKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKFtleHBlY3RlZE91dHB1dCBjb21wb25l
bnRzSm9pbmVkQnlTdHJpbmc6QCJcbiJdLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAib3V0cHV0LnZhbHVlIl0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4
dGVybmFsU291cmNlRGF0YVRyYW5zZmVySXRlbUdldFBsYWluVGV4dEZpbGVBc0VudHJ5KQorewor
ICAgIE5TQXJyYXk8TlNTdHJpbmcgKj4gKmV4cGVjdGVkT3V0cHV0ID0gQFsKKyAgICAgICAgQCJG
b3VuZCBkYXRhIHRyYW5zZmVyIGl0ZW0gKGtpbmQ6ICdmaWxlJywgdHlwZTogJ3RleHQvcGxhaW4n
KSIsCisgICAgICAgIEAiRklMRTogL2Zvby50eHQgKCd0ZXh0L3BsYWluJywgMjggYnl0ZXMpIgor
ICAgIF07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBzZXRVcFRlc3RXZWJWaWV3Rm9yRGF0YVRyYW5z
ZmVySXRlbXMoKTsKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3
IHBlcmZvcm1BZnRlclJlY2VpdmluZ01lc3NhZ2U6QCJkcm9wcGVkIiBhY3Rpb246XigpIHsKKyAg
ICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisKKyAgICBydW5UZXN0V2l0aFRlbXBvcmFyeVRl
eHRGaWxlKF4oTlNVUkwgKmZpbGVVUkwpIHsKKyAgICAgICAgYXV0byBpdGVtUHJvdmlkZXIgPSBh
ZG9wdE5TKFtbTlNJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW2l0ZW1Qcm92
aWRlciBzZXRTdWdnZXN0ZWROYW1lOkAiZm9vIl07CisgICAgICAgIFtpdGVtUHJvdmlkZXIgcmVn
aXN0ZXJGaWxlUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRU
eXBlVVRGOFBsYWluVGV4dCBmaWxlT3B0aW9uczowIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJS
ZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGwgbG9hZEhhbmRsZXI6W2NhcHR1cmVkRmlsZVVSTCA9
IHJldGFpblB0cihmaWxlVVJMKV0oRmlsZUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkhh
bmRsZXIpIC0+IE5TUHJvZ3Jlc3MgKiB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihj
YXB0dXJlZEZpbGVVUkwuZ2V0KCksIE5PLCBuaWwpOworICAgICAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICAgICAgfV07CisKKyAgICAgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0Fu
ZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Cisg
ICAgICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRl
ci5nZXQoKSBdXTsKKyAgICAgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA1
MCkgdG86Q0dQb2ludE1ha2UoMTUwLCA1MCldOworICAgIH0pOworCisgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2V4cGVjdGVkT3V0cHV0
IGNvbXBvbmVudHNKb2luZWRCeVN0cmluZzpAIlxuIl0sIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSk7Cit9CisKKyNlbmRpZiAvLyBfX0lQSE9O
RV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAzMDAKKworVEVTVChEcmFnQW5kRHJvcFRl
c3RzLCBFeHRlcm5hbFNvdXJjZU92ZXJyaWRlRHJvcEluc2VydFVSTCkKK3sKKyAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
VGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKKyAgICBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxs
UmFuZ2VzKCkiXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9w
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtz
aW11bGF0b3Igc2V0T3ZlcnJpZGVQZXJmb3JtRHJvcEJsb2NrOl5OU0FycmF5PFVJRHJhZ0l0ZW0g
Kj4gKihpZCA8VUlEcm9wU2Vzc2lvbj4gc2Vzc2lvbikKKyAgICB7CisgICAgICAgIE5TTXV0YWJs
ZUFycmF5PFVJRHJhZ0l0ZW0gKj4gKmFsbG93ZWRJdGVtcyA9IFtOU011dGFibGVBcnJheSBhcnJh
eV07CisgICAgICAgIGZvciAoVUlEcmFnSXRlbSAqaXRlbSBpbiBzZXNzaW9uLml0ZW1zKSB7Cisg
ICAgICAgICAgICBpZiAoW2l0ZW0uaXRlbVByb3ZpZGVyLnJlZ2lzdGVyZWRUeXBlSWRlbnRpZmll
cnMgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZVVSTF0pCisgICAgICAgICAgICAg
ICAgW2FsbG93ZWRJdGVtcyBhZGRPYmplY3Q6aXRlbV07CisgICAgICAgIH0KKyAgICAgICAgRVhQ
RUNUX0VRKDFVTCwgYWxsb3dlZEl0ZW1zLmNvdW50KTsKKyAgICAgICAgcmV0dXJuIGFsbG93ZWRJ
dGVtczsKKyAgICB9XTsKKworICAgIGF1dG8gZmlyc3RJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtb
VUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbZmlyc3RJdGVtUHJvdmlkZXIgcmVn
aXN0ZXJPYmplY3Q6QCJUaGlzIGlzIGEgc3RyaW5nLiIgdmlzaWJpbGl0eTpVSUl0ZW1Qcm92aWRl
clJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOworICAgIGF1dG8gc2Vjb25kSXRl
bVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAg
W3NlY29uZEl0ZW1Qcm92aWRlciByZWdpc3Rlck9iamVjdDpbTlNVUkwgVVJMV2l0aFN0cmluZzpA
Imh0dHBzOi8vd2Via2l0Lm9yZy8iXSB2aXNpYmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50
YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0
ZW1Qcm92aWRlcnM6QFsgZmlyc3RJdGVtUHJvdmlkZXIuZ2V0KCksIHNlY29uZEl0ZW1Qcm92aWRl
ci5nZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDAp
IHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBz
Oi8vd2Via2l0Lm9yZy8iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
ZWRpdG9yLnRleHRDb250ZW50Il0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIE92ZXJy
aWRlRHJvcCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBsZSJdOworCisgICAg
YXV0byBzaW11bGF0ZWRJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxs
b2NdIGluaXRdKTsKKyAgICBbc2ltdWxhdGVkSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJl
c2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERh
dGE6W0AiPGJvZHk+PC9ib2R5PiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmddXTsKKworICAgIF9fYmxvY2sgYm9vbCBmaW5pc2hlZExvYWRpbmdEYXRhID0gZmFsc2U7Cisg
ICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2Nd
IGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBzZXRFeHRl
cm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAg
IFtzaW11bGF0b3Igc2V0T3ZlcnJpZGVEcmFnVXBkYXRlQmxvY2s6Xk5TVUludGVnZXIoTlNVSW50
ZWdlciBvcGVyYXRpb24sIGlkIHNlc3Npb24pCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMFUs
IG9wZXJhdGlvbik7CisgICAgICAgIHJldHVybiBVSURyb3BPcGVyYXRpb25Db3B5OworICAgIH1d
OworICAgIFtzaW11bGF0b3Igc2V0RHJvcENvbXBsZXRpb25CbG9jazpeKEJPT0wgaGFuZGxlZCwg
TlNBcnJheSAqaXRlbVByb3ZpZGVycykgeworICAgICAgICBFWFBFQ1RfRkFMU0UoaGFuZGxlZCk7
CisgICAgICAgIFtpdGVtUHJvdmlkZXJzLmZpcnN0T2JqZWN0IGxvYWREYXRhUmVwcmVzZW50YXRp
b25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCBjb21wbGV0aW9uSGFu
ZGxlcjpeKE5TRGF0YSAqZGF0YSwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgICAgIE5TU3Ry
aW5nICp0ZXh0ID0gW1tbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpkYXRhIGVuY29kaW5n
Ok5TVVRGOFN0cmluZ0VuY29kaW5nXSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICBFWFBFQ1Rf
V0tfU1RSRVEoIjxib2R5PjwvYm9keT4iLCB0ZXh0LlVURjhTdHJpbmcpOworICAgICAgICAgICAg
RVhQRUNUX0ZBTFNFKCEhZXJyb3IpOworICAgICAgICAgICAgZmluaXNoZWRMb2FkaW5nRGF0YSA9
IHRydWU7CisgICAgICAgIH1dOworICAgIH1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1Bv
aW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkTG9hZGluZ0RhdGEpOworfQorCitURVNUKERyYWdB
bmREcm9wVGVzdHMsIEluamVjdGVkQnVuZGxlT3ZlcnJpZGVQZXJmb3JtVHdvU3RlcERyb3ApCit7
CisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtXS1dlYlZpZXdD
b25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVzdFBsdWdJbkNsYXNzTmFtZTpA
IkJ1bmRsZUVkaXRpbmdEZWxlZ2F0ZVBsdWdJbiJdOworICAgIFtjb25maWd1cmF0aW9uLnByb2Nl
c3NQb29sIF9zZXRPYmplY3Q6QFlFUyBmb3JCdW5kbGVQYXJhbWV0ZXI6QCJCdW5kbGVPdmVycmlk
ZVBlcmZvcm1Ud29TdGVwRHJvcCJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSk7CisgICAgW3dlYlZpZXcgbG9hZFRlc3RQ
YWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07CisgICAgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdl
cygpIl07CisKKyAgICBhdXRvIHNpbXVsYXRlZEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0
ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXIgcmVn
aXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRU
eXBlVVRGOFBsYWluVGV4dCBvcHRpb25zOm5pbCBsb2FkSGFuZGxlcjpeTlNQcm9ncmVzcyAqKFVJ
SXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkJsb2NrKQorICAg
IHsKKyAgICAgICAgY29tcGxldGlvbkJsb2NrKFtAIkhlbGxvIHdvcmxkIiBkYXRhVXNpbmdFbmNv
ZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10sIG5pbCk7CisgICAgICAgIHJldHVybiBbTlNQcm9n
cmVzcyBkaXNjcmV0ZVByb2dyZXNzV2l0aFRvdGFsVW5pdENvdW50OjEwMF07CisgICAgfV07CisK
KyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldEV4
dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07Cisg
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50TWFr
ZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX0VRKDBVTCwgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdLmxlbmd0aCk7Cit9CisKK1RF
U1QoRHJhZ0FuZERyb3BUZXN0cywgSW5qZWN0ZWRCdW5kbGVBbGxvd1BlcmZvcm1Ud29TdGVwRHJv
cCkKK3sKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gX3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NO
YW1lOkAiQnVuZGxlRWRpdGluZ0RlbGVnYXRlUGx1Z0luIl07CisgICAgW2NvbmZpZ3VyYXRpb24u
cHJvY2Vzc1Bvb2wgX3NldE9iamVjdDpATk8gZm9yQnVuZGxlUGFyYW1ldGVyOkAiQnVuZGxlT3Zl
cnJpZGVQZXJmb3JtVHdvU3RlcERyb3AiXTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIw
LCA1MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0pOworICAgIFt3ZWJWaWV3IHN5bmNo
cm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsK
KyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9u
KCkucmVtb3ZlQWxsUmFuZ2VzKCkiXTsKKworICAgIGF1dG8gc2ltdWxhdGVkSXRlbVByb3ZpZGVy
ID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW3NpbXVsYXRl
ZEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVy
OihOU1N0cmluZyAqKWtVVFR5cGVVVEY4UGxhaW5UZXh0IG9wdGlvbnM6bmlsIGxvYWRIYW5kbGVy
Ol5OU1Byb2dyZXNzICooVUlJdGVtUHJvdmlkZXJEYXRhTG9hZENvbXBsZXRpb25CbG9jayBjb21w
bGV0aW9uQmxvY2spCisgICAgeworICAgICAgICBjb21wbGV0aW9uQmxvY2soW0AiSGVsbG8gd29y
bGQiIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSwgbmlsKTsKKyAgICAg
ICAgcmV0dXJuIFtOU1Byb2dyZXNzIGRpc2NyZXRlUHJvZ3Jlc3NXaXRoVG90YWxVbml0Q291bnQ6
MTAwXTsKKyAgICB9XTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmRE
cm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAg
IFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEl0ZW1Qcm92
aWRlci5nZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0
MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIkhl
bGxvIHdvcmxkIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRv
ci50ZXh0Q29udGVudCJdLlVURjhTdHJpbmcpOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMs
IEluamVjdGVkQnVuZGxlSW1hZ2VFbGVtZW50RGF0YSkKK3sKKyAgICBXS1dlYlZpZXdDb25maWd1
cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gX3Rlc3RfY29u
ZmlndXJhdGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NOYW1lOkAiQnVuZGxlRWRpdGluZ0RlbGVnYXRl
UGx1Z0luIl07CisgICAgW2NvbmZpZ3VyYXRpb24gX3NldEF0dGFjaG1lbnRFbGVtZW50RW5hYmxl
ZDpZRVNdOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRpb246
Y29uZmlndXJhdGlvbl0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VO
YW1lZDpAImltYWdlLWFuZC1jb250ZW50ZWRpdGFibGUiXTsKKworICAgIF9fYmxvY2sgUmV0YWlu
UHRyPE5TU3RyaW5nPiBpbmplY3RlZFN0cmluZzsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0
TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcu
Z2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHNldENvbnZlcnRJdGVtUHJvdmlkZXJzQmxvY2s6Xk5T
QXJyYXkgKihVSUl0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyLCBOU0FycmF5ICosIE5TRGljdGlv
bmFyeSAqZGF0YSkKKyAgICB7CisgICAgICAgIGluamVjdGVkU3RyaW5nID0gYWRvcHROUyhbW05T
U3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6ZGF0YVtJbmplY3RlZEJ1bmRsZVBhc3RlYm9hcmRE
YXRhVHlwZV0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKKyAgICAgICAgcmV0dXJu
IEBbIGl0ZW1Qcm92aWRlciBdOworICAgIH1dOworCisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNH
UG9pbnRNYWtlKDEwMCwgNTApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMjUwKV07CisKKyAgICBFWFBF
Q1RfV0tfU1RSRVEoImhlbGxvIiwgW2luamVjdGVkU3RyaW5nIFVURjhTdHJpbmddKTsKK30KKwor
VEVTVChEcmFnQW5kRHJvcFRlc3RzLCBJbmplY3RlZEJ1bmRsZUF0dGFjaG1lbnRFbGVtZW50RGF0
YSkKK3sKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gX3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NO
YW1lOkAiQnVuZGxlRWRpdGluZ0RlbGVnYXRlUGx1Z0luIl07CisgICAgW2NvbmZpZ3VyYXRpb24g
X3NldEF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZDpZRVNdOworICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwg
MCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0pOworICAgIFt3ZWJWaWV3
IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImF0dGFjaG1lbnQtZWxlbWVudCJdOwor
CisgICAgX19ibG9jayBSZXRhaW5QdHI8TlNTdHJpbmc+IGluamVjdGVkU3RyaW5nOworICAgIGF1
dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0
V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3Igc2V0Q29udmVydEl0
ZW1Qcm92aWRlcnNCbG9jazpeTlNBcnJheSAqKFVJSXRlbVByb3ZpZGVyICppdGVtUHJvdmlkZXIs
IE5TQXJyYXkgKiwgTlNEaWN0aW9uYXJ5ICpkYXRhKQorICAgIHsKKyAgICAgICAgaW5qZWN0ZWRT
dHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpkYXRhW0luamVj
dGVkQnVuZGxlUGFzdGVib2FyZERhdGFUeXBlXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z10pOworICAgICAgICByZXR1cm4gQFsgaXRlbVByb3ZpZGVyIF07CisgICAgfV07CisKKyAgICBb
c2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFrZSg1MCwg
NDAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImhlbGxvIiwgW2luamVjdGVkU3RyaW5nIFVU
RjhTdHJpbmddKTsKKyAgICBFWFBFQ1RfVFJVRShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQiXS5ib29sVmFsdWUpOworfQor
CitURVNUKERyYWdBbmREcm9wVGVzdHMsIExhcmdlSW1hZ2VUb1RhcmdldERpdikKK3sKKyAgICBh
dXRvIHRlc3RXZWJWaWV3Q29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgW1t0ZXN0V2ViVmlld0NvbmZpZ3VyYXRpb24gcHJl
ZmVyZW5jZXNdIF9zZXRMYXJnZUltYWdlQXN5bmNEZWNvZGluZ0VuYWJsZWQ6Tk9dOworCisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCkgY29uZmlndXJhdGlvbjp0ZXN0V2ViVmlld0Nv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQ
YWdlTmFtZWQ6QCJkaXYtYW5kLWxhcmdlLWltYWdlIl07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9
IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXcuZ2V0KCldKTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCA0
MDApIHRvOkNHUG9pbnRNYWtlKDIwMCwgMTUwKV07CisgICAgRVhQRUNUX1dLX1NUUkVRKCJQQVNT
IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRhcmdldC50ZXh0Q29u
dGVudCJdLlVURjhTdHJpbmcpOworICAgIGNoZWNrRmlyc3RUeXBlSXNQcmVzZW50QW5kU2Vjb25k
VHlwZUlzTWlzc2luZyhzaW11bGF0b3IuZ2V0KCksIGtVVFR5cGVQTkcsIGtVVFR5cGVGaWxlVVJM
KTsKKyAgICBjaGVja0VzdGltYXRlZFNpemUoc2ltdWxhdG9yLmdldCgpLCB7IDIwMDAsIDIwMDAg
fSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgTGlua1dpdGhFbXB0eUhSRUYpCit7Cisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJsaW5rLWFuZC1pbnB1dCJdOworICAgIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdh
JykuaHJlZiA9ICcnIl07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5k
RHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAg
ICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2Uo
MTAwLCAzMDApXTsKKworICAgIEVYUEVDVF9FUShEcmFnQW5kRHJvcFBoYXNlQ2FuY2VsbGVkLCBb
c2ltdWxhdG9yIHBoYXNlXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBlZGl0
b3JWYWx1ZV0uVVRGOFN0cmluZyk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgQ2FuY2Vs
bGVkTGlmdERvZXNOb3RDYXVzZVN1YnNlcXVlbnREcmFnc1RvRmFpbCkKK3sKKyAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
VGVzdFBhZ2VOYW1lZDpAImxpbmstYW5kLXRhcmdldC1kaXYiXTsKKworICAgIGF1dG8gc2ltdWxh
dG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZp
ZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtzaW11bGF0b3Igc2V0Q29udmVydEl0ZW1Qcm92aWRl
cnNCbG9jazpeTlNBcnJheSAqKFVJSXRlbVByb3ZpZGVyICosIE5TQXJyYXkgKiwgTlNEaWN0aW9u
YXJ5ICopCisgICAgeworICAgICAgICByZXR1cm4gQFsgXTsKKyAgICB9XTsKKyAgICBbc2ltdWxh
dG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDAp
XTsKKyAgICBFWFBFQ1RfRVEoRHJhZ0FuZERyb3BQaGFzZUNhbmNlbGxlZCwgW3NpbXVsYXRvciBw
aGFzZV0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAInRhcmdldC50ZXh0Q29udGVudCJdKTsKKyAgICBOU1N0cmluZyAqb3V0
cHV0VGV4dCA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQu
dGV4dENvbnRlbnQiXTsKKyAgICBjaGVja1N0cmluZ0FycmF5c0FyZUVxdWFsKEBbQCJkcmFnc3Rh
cnQiLCBAImRyYWdlbmQiXSwgW291dHB1dFRleHQgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5n
OkAiICJdKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJv
dXRwdXQuaW5uZXJIVE1MID0gJyciXTsKKyAgICBbc2ltdWxhdG9yIHNldENvbnZlcnRJdGVtUHJv
dmlkZXJzQmxvY2s6Xk5TQXJyYXkgKihVSUl0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyLCBOU0Fy
cmF5ICosIE5TRGljdGlvbmFyeSAqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEBbIGl0ZW1Qcm92
aWRlciBdOworICAgIH1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAs
IDUwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworICAgIEVYUEVDVF9XS19TVFJFUSgiUEFT
UyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0YXJnZXQudGV4dENv
bnRlbnQiXSk7CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91
dHB1dC50ZXh0Q29udGVudCJdOworICAgIGNoZWNrU3RyaW5nQXJyYXlzQXJlRXF1YWwoQFtAImRy
YWdzdGFydCIsIEAiZHJhZ2VuZCJdLCBbb3V0cHV0VGV4dCBjb21wb25lbnRzU2VwYXJhdGVkQnlT
dHJpbmc6QCIgIl0pOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RHJhZ0FuZERyb3BPbnRvVGFyZ2V0
RWxlbWVudHMoVGVzdFdLV2ViVmlldyAqd2ViVmlldykKK3sKKyAgICBhdXRvIHNpbXVsYXRvciA9
IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXddKTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpD
R1BvaW50TWFrZSg1MCwgMjUwKV07CisgICAgRVhQRUNUX1dLX1NUUkVRKCJyZ2IoMCwgMTI4LCAw
KSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRDb21wdXRlZFN0
eWxlKHRhcmdldDEpLmJhY2tncm91bmRDb2xvciJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlBB
U1MiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGFyZ2V0MS50ZXh0
Q29udGVudCJdKTsKKworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNTAp
IHRvOkNHUG9pbnRNYWtlKDI1MCwgNTApXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoInJnYigwLCAx
MjgsIDApIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldENvbXB1
dGVkU3R5bGUodGFyZ2V0MikuYmFja2dyb3VuZENvbG9yIl0pOworICAgIEVYUEVDVF9XS19TVFJF
USgiUEFTUyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0YXJnZXQy
LnRleHRDb250ZW50Il0pOworCisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUw
LCA1MCkgdG86Q0dQb2ludE1ha2UoMjUwLCAyNTApXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoInJn
YigwLCAxMjgsIDApIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdl
dENvbXB1dGVkU3R5bGUodGFyZ2V0MykuYmFja2dyb3VuZENvbG9yIl0pOworICAgIEVYUEVDVF9X
S19TVFJFUSgiUEFTUyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0
YXJnZXQzLnRleHRDb250ZW50Il0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIERyYWdF
dmVudENsaWVudENvb3JkaW5hdGVzQmFzaWMpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6
QCJkcm9wLXRhcmdldHMiXTsKKworICAgIHRlc3REcmFnQW5kRHJvcE9udG9UYXJnZXRFbGVtZW50
cyh3ZWJWaWV3LmdldCgpKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEcmFnRXZlbnRD
bGllbnRDb29yZGluYXRlc1dpdGhTY3JvbGxPZmZzZXQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdl
TmFtZWQ6QCJkcm9wLXRhcmdldHMiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW4gPSAnMTAwMHB4IDAnIl07Cisg
ICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnNjcm9s
bGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gMTAwMCJdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0
UHJlc2VudGF0aW9uVXBkYXRlXTsKKworICAgIHRlc3REcmFnQW5kRHJvcE9udG9UYXJnZXRFbGVt
ZW50cyh3ZWJWaWV3LmdldCgpKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEcmFnRXZl
bnRQYWdlQ29vcmRpbmF0ZXNCYXNpYykKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwg
NTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImRy
b3AtdGFyZ2V0cyJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJ3aW5kb3cudXNlUGFnZUNvb3JkaW5hdGVzID0gdHJ1ZSJdOworCisgICAgdGVzdERyYWdBbmRE
cm9wT250b1RhcmdldEVsZW1lbnRzKHdlYlZpZXcuZ2V0KCkpOworfQorCitURVNUKERyYWdBbmRE
cm9wVGVzdHMsIERyYWdFdmVudFBhZ2VDb29yZGluYXRlc1dpdGhTY3JvbGxPZmZzZXQpCit7Cisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkcm9wLXRhcmdldHMiXTsKKyAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW4g
PSAnMTAwMHB4IDAnIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAImRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gMTAwMCJdOworICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3aW5kb3cudXNlUGFnZUNvb3Jk
aW5hdGVzID0gdHJ1ZSJdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9uVXBk
YXRlXTsKKworICAgIHRlc3REcmFnQW5kRHJvcE9udG9UYXJnZXRFbGVtZW50cyh3ZWJWaWV3Lmdl
dCgpKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEb05vdENyYXNoV2hlblNlbGVjdGlv
bklzQ2xlYXJlZEluRHJhZ1N0YXJ0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1
MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHJh
Z3N0YXJ0LWNsZWFyLXNlbGVjdGlvbiJdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5T
KFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3Lmdl
dCgpXSk7CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDEwMCwgMTAwKSB0bzpD
R1BvaW50TWFrZSgxMDAsIDEwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCJQQVNTIiwgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInBhcmFncmFwaC50ZXh0Q29udGVu
dCJdKTsKK30KKworLy8gRklYTUU6IFJlLWVuYWJsZSB0aGlzIHRlc3Qgb25jZSB3ZSByZXNvbHZl
IDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MjA0PgorI2lmIF9f
SVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPD0gMTEwNDAxCitURVNUKERyYWdBbmREcm9w
VGVzdHMsIEN1c3RvbUFjdGlvblNoZWV0UG9wb3ZlcikKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAs
IDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VO
YW1lZDpAImxpbmstYW5kLXRhcmdldC1kaXYiXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRv
cHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmll
dy5nZXQoKV0pOworICAgIFtzaW11bGF0b3Igc2V0U2hvdWxkRW5zdXJlVUlBcHBsaWNhdGlvbjpZ
RVNdOworCisgICAgX19ibG9jayBCT09MIGRpZEludm9rZUN1c3RvbUFjdGlvblNoZWV0ID0gTk87
CisgICAgW3NpbXVsYXRvciBzZXRTaG93Q3VzdG9tQWN0aW9uU2hlZXRCbG9jazpeQk9PTChfV0tB
Y3RpdmF0ZWRFbGVtZW50SW5mbyAqZWxlbWVudCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9FUShf
V0tBY3RpdmF0ZWRFbGVtZW50VHlwZUxpbmssIGVsZW1lbnQudHlwZSk7CisgICAgICAgIEVYUEVD
VF9XS19TVFJFUSgiSGVsbG8gd29ybGQiLCBlbGVtZW50LnRpdGxlLlVURjhTdHJpbmcpOworICAg
ICAgICBkaWRJbnZva2VDdXN0b21BY3Rpb25TaGVldCA9IFlFUzsKKyAgICAgICAgcmV0dXJuIFlF
UzsKKyAgICB9XTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMTAwLCA1MCkg
dG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKyAgICBFWFBFQ1RfVFJVRShkaWRJbnZva2VDdXN0
b21BY3Rpb25TaGVldCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJQQVNTIiwgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRhcmdldC50ZXh0Q29udGVudCJdLlVURjhTdHJp
bmcpOworfQorI2VuZGlmCisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgVW5yZXNwb25zaXZlUGFn
ZURvZXNOb3RIYW5nVUkpCit7CisgICAgX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uICpwcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24gPSBbW1tfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gYWxs
b2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICBwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaWdu
b3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0c0ZvclRlc3RpbmcgPSBZRVM7CisKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKSBjb25maWd1cmF0aW9uOltbW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXSBwcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb246cHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2ltcGxlIl07CisgICAgW3dlYlZpZXcgZXZhbHVhdGVK
YXZhU2NyaXB0OkAid2hpbGUoMSk7IiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworCisgICAgLy8g
VGhlIHRlc3QgcGFzc2VzIGlmIHdlIGNhbiBwcmVwYXJlIGZvciBhIGRyYWcgc2Vzc2lvbiB3aXRo
b3V0IHRpbWluZyBvdXQuCisgICAgYXV0byBkcmFnU2Vzc2lvbiA9IGFkb3B0TlMoW1tNb2NrRHJh
Z1Nlc3Npb24gYWxsb2NdIGluaXRdKTsKKyAgICBbKGlkIDxVSURyYWdJbnRlcmFjdGlvbkRlbGVn
YXRlX0ZvcldlYktpdE9ubHk+KVt3ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlXSBfZHJh
Z0ludGVyYWN0aW9uOlt3ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbl0gcHJlcGFyZUZvclNlc3Npb246
ZHJhZ1Nlc3Npb24uZ2V0KCkgY29tcGxldGlvbjpeKCkgeyB9XTsKK30KKworVEVTVChEcmFnQW5k
RHJvcFRlc3RzLCBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkTG9hZGluZykKK3sKKyAgICBzdGF0
aWMgTlNTdHJpbmcgKmZhc3RTdHJpbmcgPSBAIlRoaXMgZGF0YSBsb2FkcyBxdWlja2x5IjsKKyAg
ICBzdGF0aWMgTlNTdHJpbmcgKnNsb3dTdHJpbmcgPSBAIlRoaXMgZGF0YSBsb2FkcyBzbG93bHki
OworCisgICAgV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtXZWJJdGVt
UHJvdmlkZXJQYXN0ZWJvYXJkIHNoYXJlZEluc3RhbmNlXTsKKyAgICBhdXRvIGZhc3RJdGVtID0g
YWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2Zhc3RJdGVtIHJl
Z2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VU
VHlwZVVURjhQbGFpblRleHQgb3B0aW9uczpuaWwgbG9hZEhhbmRsZXI6Xk5TUHJvZ3Jlc3MgKihV
SUl0ZW1Qcm92aWRlckRhdGFMb2FkQ29tcGxldGlvbkJsb2NrIGNvbXBsZXRpb25CbG9jaykKKyAg
ICB7CisgICAgICAgIGNvbXBsZXRpb25CbG9jayhbZmFzdFN0cmluZyBkYXRhVXNpbmdFbmNvZGlu
ZzpOU1VURjhTdHJpbmdFbmNvZGluZ10sIG5pbCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAg
fV07CisKKyAgICBhdXRvIHNsb3dJdGVtID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9j
XSBpbml0XSk7CisgICAgW3Nsb3dJdGVtIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlw
ZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRleHQgb3B0aW9uczpuaWwg
bG9hZEhhbmRsZXI6Xk5TUHJvZ3Jlc3MgKihVSUl0ZW1Qcm92aWRlckRhdGFMb2FkQ29tcGxldGlv
bkJsb2NrIGNvbXBsZXRpb25CbG9jaykKKyAgICB7CisgICAgICAgIHNsZWVwKDJfcyk7CisgICAg
ICAgIGNvbXBsZXRpb25CbG9jayhbc2xvd1N0cmluZyBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhT
dHJpbmdFbmNvZGluZ10sIG5pbCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfV07CisKKyAg
ICBfX2Jsb2NrIGJvb2wgaGFzUnVuRmlyc3RDb21wbGV0aW9uQmxvY2sgPSBmYWxzZTsKKyAgICBw
YXN0ZWJvYXJkLml0ZW1Qcm92aWRlcnMgPSBAWyBmYXN0SXRlbS5nZXQoKSwgc2xvd0l0ZW0uZ2V0
KCkgXTsKKyAgICBbcGFzdGVib2FyZCBkb0FmdGVyTG9hZGluZ1Byb3ZpZGVkQ29udGVudEludG9G
aWxlVVJMczpeKE5TQXJyYXk8TlNVUkwgKj4gKnVybHMpIHsKKyAgICAgICAgRVhQRUNUX0VRKDJV
TCwgdXJscy5jb3VudCk7CisgICAgICAgIGF1dG8gZmlyc3RTdHJpbmcgPSBhZG9wdE5TKFtbTlNT
dHJpbmcgYWxsb2NdIGluaXRXaXRoQ29udGVudHNPZlVSTDp1cmxzWzBdIGVuY29kaW5nOk5TVVRG
OFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF0pOworICAgICAgICBhdXRvIHNlY29uZFN0cmluZyA9
IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDb250ZW50c09mVVJMOnVybHNbMV0g
ZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXSk7CisgICAgICAgIEVYUEVD
VF9XS19TVFJFUShmYXN0U3RyaW5nLCBbZmlyc3RTdHJpbmcgVVRGOFN0cmluZ10pOworICAgICAg
ICBFWFBFQ1RfV0tfU1RSRVEoc2xvd1N0cmluZywgW3NlY29uZFN0cmluZyBVVEY4U3RyaW5nXSk7
CisgICAgICAgIGhhc1J1bkZpcnN0Q29tcGxldGlvbkJsb2NrID0gdHJ1ZTsKKyAgICB9IHN5bmNo
cm9ub3VzVGltZW91dDo2MDBdOworICAgIEVYUEVDVF9UUlVFKGhhc1J1bkZpcnN0Q29tcGxldGlv
bkJsb2NrKTsKKworICAgIF9fYmxvY2sgYm9vbCBoYXNSdW5TZWNvbmRDb21wbGV0aW9uQmxvY2sg
PSBmYWxzZTsKKyAgICBbcGFzdGVib2FyZCBkb0FmdGVyTG9hZGluZ1Byb3ZpZGVkQ29udGVudElu
dG9GaWxlVVJMczpeKE5TQXJyYXk8TlNVUkwgKj4gKnVybHMpIHsKKyAgICAgICAgRVhQRUNUX0VR
KDJVTCwgdXJscy5jb3VudCk7CisgICAgICAgIGF1dG8gZmlyc3RTdHJpbmcgPSBhZG9wdE5TKFtb
TlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ29udGVudHNPZlVSTDp1cmxzWzBdIGVuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF0pOworICAgICAgICBhdXRvIHNlY29uZFN0cmlu
ZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDb250ZW50c09mVVJMOnVybHNb
MV0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXSk7CisgICAgICAgIEVY
UEVDVF9XS19TVFJFUShmYXN0U3RyaW5nLCBbZmlyc3RTdHJpbmcgVVRGOFN0cmluZ10pOworICAg
ICAgICBFWFBFQ1RfV0tfU1RSRVEoc2xvd1N0cmluZywgW3NlY29uZFN0cmluZyBVVEY4U3RyaW5n
XSk7CisgICAgICAgIGhhc1J1blNlY29uZENvbXBsZXRpb25CbG9jayA9IHRydWU7CisgICAgfSBz
eW5jaHJvbm91c1RpbWVvdXQ6MF07CisgICAgRVhQRUNUX0ZBTFNFKGhhc1J1blNlY29uZENvbXBs
ZXRpb25CbG9jayk7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZoYXNSdW5TZWNvbmRD
b21wbGV0aW9uQmxvY2spOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIERvTm90Q3Jhc2hX
aGVuU2VsZWN0aW9uTW92ZXNPZmZzY3JlZW5BZnRlckRyYWdTdGFydCkKK3sKKyAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
VGVzdFBhZ2VOYW1lZDpAImRyYWdzdGFydC1jaGFuZ2Utc2VsZWN0aW9uLW9mZnNjcmVlbiJdOwor
CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxs
b2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW3NpbXVsYXRvciBydW5G
cm9tOkNHUG9pbnRNYWtlKDEwMCwgMTAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDEwMCldOworCisg
ICAgRVhQRUNUX1dLX1NUUkVRKCJGQVIgT0ZGU0NSRUVOIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLmdldFJhbmdlQXQoMCkudG9TdHJpbmco
KSJdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBBZGRpdGlvbmFsSXRlbXNDYW5CZVBy
ZXZlbnRlZE9uRHJhZ1N0YXJ0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDAp
XSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2VsZWN0
ZWQtdGV4dC1pbWFnZS1saW5rLWFuZC1lZGl0YWJsZSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcs
IGUgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJpbWFnZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnc3RhcnQnLCBlID0+
IGUucHJldmVudERlZmF1bHQoKSkiXTsKKworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhb
W0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQo
KV0pOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRvOkNHUG9p
bnRNYWtlKDUwLCA0MDApIGFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uczpAeworICAgICAg
ICBAMC4zMzogW05TVmFsdWUgdmFsdWVXaXRoQ0dQb2ludDpDR1BvaW50TWFrZSg1MCwgMTUwKV0s
CisgICAgICAgIEAwLjY2OiBbTlNWYWx1ZSB2YWx1ZVdpdGhDR1BvaW50OkNHUG9pbnRNYWtlKDUw
LCAyNTApXQorICAgIH1dOworICAgIEVYUEVDVF9XS19TVFJFUSgiQUJDRCIsIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXSk7Cit9CisK
K1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgQWRkaXRpb25hbExpbmtBbmRJbWFnZUludG9Db250ZW50
RWRpdGFibGUpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBb
d2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzZWxlY3RlZC10ZXh0LWlt
YWdlLWxpbmstYW5kLWVkaXRhYmxlIl07CisKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMo
W1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0
KCldKTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1Bv
aW50TWFrZSg1MCwgNDAwKSBhZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnM6QHsKKyAgICAg
ICAgQDAuMzM6IFtOU1ZhbHVlIHZhbHVlV2l0aENHUG9pbnQ6Q0dQb2ludE1ha2UoNTAsIDE1MCld
LAorICAgICAgICBAMC42NjogW05TVmFsdWUgdmFsdWVXaXRoQ0dQb2ludDpDR1BvaW50TWFrZSg1
MCwgMjUwKV0KKyAgICB9XTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIkFCQ0RBIGxpbmsiLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il0p
OworICAgIEVYUEVDVF9UUlVFKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCIhIWVkaXRvci5xdWVyeVNlbGVjdG9yKCdpbWcnKSJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
Imh0dHBzOi8vd3d3LmFwcGxlLmNvbS8iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ2EnKS5ocmVmIl0pOworfQorCitURVNUKERy
YWdBbmREcm9wVGVzdHMsIERyYWdMaWZ0UHJldmlld0RhdGFUcmFuc2ZlclNldERyYWdJbWFnZSkK
K3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAIkRhdGFUcmFuc2Zlci1zZXREcmFnSW1hZ2Ui
XTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBh
bGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIC8vIFVzZSBEYXRh
VHJhbnNmZXIuc2V0RHJhZ0ltYWdlIHRvIHNwZWNpZnkgYW4gZXhpc3RpbmcgaW1hZ2UgZWxlbWVu
dCBpbiB0aGUgRE9NLgorICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAsIDUw
KSB0bzpDR1BvaW50TWFrZSgyNTAsIDUwKV07CisgICAgY2hlY2tDR1JlY3RJc0VxdWFsVG9DR1Jl
Y3RXaXRoTG9nZ2luZyh7ezEwMCwgNTB9LCB7MjE1LCAxNzR9fSwgW3NpbXVsYXRvciBsaWZ0UHJl
dmlld3NdWzBdLnZpZXcuZnJhbWUpOworCisgICAgLy8gVXNlIERhdGFUcmFuc2Zlci5zZXREcmFn
SW1hZ2UgdG8gc3BlY2lmeSBhbiBleGlzdGluZyBpbWFnZSBlbGVtZW50IGluIHRoZSBET00sIHdp
dGggeCBhbmQgeSBvZmZzZXRzLgorICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgx
MCwgMTUwKSB0bzpDR1BvaW50TWFrZSgyNTAsIDE1MCldOworICAgIGNoZWNrQ0dSZWN0SXNFcXVh
bFRvQ0dSZWN0V2l0aExvZ2dpbmcoe3stOTAsIDUwfSwgezIxNSwgMTc0fX0sIFtzaW11bGF0b3Ig
bGlmdFByZXZpZXdzXVswXS52aWV3LmZyYW1lKTsKKworICAgIC8vIFVzZSBEYXRhVHJhbnNmZXIu
c2V0RHJhZ0ltYWdlIHRvIHNwZWNpZnkgYSBuZXdseSBjcmVhdGVkIEltYWdlLCBkaXNjb25uZWN0
ZWQgZnJvbSB0aGUgRE9NLgorICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgxMDAs
IDI1MCkgdG86Q0dQb2ludE1ha2UoMjUwLCAyNTApXTsKKyAgICBjaGVja0NHUmVjdElzRXF1YWxU
b0NHUmVjdFdpdGhMb2dnaW5nKHt7MTAwLCAyNTB9LCB7MjE1LCAxNzR9fSwgW3NpbXVsYXRvciBs
aWZ0UHJldmlld3NdWzBdLnZpZXcuZnJhbWUpOworCisgICAgLy8gRG9uJ3QgdXNlIERhdGFUcmFu
c2Zlci5zZXREcmFnSW1hZ2UgYW5kIGZhbGwgYmFjayB0byBzbmFwc2hvdHRpbmcgdGhlIGRyYWdn
ZWQgZWxlbWVudC4KKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDM1MCkg
dG86Q0dQb2ludE1ha2UoMjUwLCAzNTApXTsKKyAgICBjaGVja0NHUmVjdElzRXF1YWxUb0NHUmVj
dFdpdGhMb2dnaW5nKHt7MCwgMzAwfSwgezMwMCwgMTAwfX0sIFtzaW11bGF0b3IgbGlmdFByZXZp
ZXdzXVswXS52aWV3LmZyYW1lKTsKKworICAgIC8vIFBlcmZvcm0gYSBub3JtYWwgZHJhZyBvbiBh
biBpbWFnZS4KKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDQ1MCkgdG86
Q0dQb2ludE1ha2UoMjUwLCA0NTApXTsKKyAgICBjaGVja0NHUmVjdElzRXF1YWxUb0NHUmVjdFdp
dGhMb2dnaW5nKHt7MCwgNDAwfSwgezIxNSwgMTc0fX0sIFtzaW11bGF0b3IgbGlmdFByZXZpZXdz
XVswXS52aWV3LmZyYW1lKTsKK30KKworI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDExMDMwMAorCitzdGF0aWMgTlNEYXRhICp0ZXN0SWNvbkltYWdlRGF0YSgpCit7Cisg
ICAgcmV0dXJuIFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mRmlsZTpbW05TQnVuZGxlIG1haW5C
dW5kbGVdIHBhdGhGb3JSZXNvdXJjZTpAImljb24iIG9mVHlwZTpAInBuZyIgaW5EaXJlY3Rvcnk6
QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3Rz
LCBEYXRhVHJhbnNmZXJHZXREYXRhV2hlbkRyb3BwaW5nSW1hZ2VBbmRNYXJrdXApCit7CisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q3Vz
dG9tUGFzdGVib2FyZERhdGFFbmFibGVkKChXS1ByZWZlcmVuY2VzUmVmKVt3ZWJWaWV3IGNvbmZp
Z3VyYXRpb25dLnByZWZlcmVuY2VzLCB0cnVlKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5
TG9hZFRlc3RQYWdlTmFtZWQ6QCJEYXRhVHJhbnNmZXIiXTsKKworICAgIGF1dG8gc2ltdWxhdG9y
ID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6
d2ViVmlldy5nZXQoKV0pOworICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRl
bVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2l0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFS
ZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVQTkcgd2l0
aERhdGE6dGVzdEljb25JbWFnZURhdGEoKV07CisgICAgTlNTdHJpbmcgKm1hcmt1cFN0cmluZyA9
IEAiPHNjcmlwdD5iYXIoKTwvc2NyaXB0PjxzdHJvbmcgb25tb3VzZWRvd249amF2YXNjcmlwdDp2
b2lkKDApPkhFTExPIFdPUkxEPC9zdHJvbmc+IjsKKyAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVy
RGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhU
TUwgd2l0aERhdGE6W21hcmt1cFN0cmluZyBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdF
bmNvZGluZ11dOworICAgIFtpdGVtUHJvdmlkZXIgc2V0U3VnZ2VzdGVkTmFtZTpAImljb24iXTsK
KyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIu
Z2V0KCkgXV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRaZXJvIHRvOkNHUG9pbnRN
YWtlKDUwLCAxMDApXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiRmlsZXMsIHRleHQvaHRtbCIs
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0eXBlcy50ZXh0Q29udGVu
dCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIihTVFJJTkcsIHRleHQvaHRtbCksIChGSUxFLCBp
bWFnZS9wbmcpIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIml0ZW1z
LnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiKCdpY29uLnBuZycsIGltYWdl
L3BuZykiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZmlsZXMudGV4
dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAidXJsRGF0YS50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0ZXh0
RGF0YS50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIkhFTExPIFdPUkxEIiwg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImh0bWxEYXRhLnRleHRDb250
ZW50Il0pOworICAgIEVYUEVDVF9GQUxTRShbW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAInJhd0hUTUxEYXRhLnRleHRDb250ZW50Il0gY29udGFpbnNTdHJpbmc6QCJzY3Jp
cHQiXSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRGF0YVRyYW5zZmVyR2V0RGF0YVdo
ZW5Ecm9wcGluZ1BsYWluVGV4dCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1bXAt
ZGF0YXRyYW5zZmVyLXR5cGVzIl07CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJh
Z0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7
CisKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic2VsZWN0KHBs
YWluKSJdOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNzUpIHRvOkNH
UG9pbnRNYWtlKDUwLCAzNzUpXTsKKyAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7CisgICAgICAg
IEAiZHJhZ292ZXIiOiBAeyBAInRleHQvcGxhaW4iIDogQCIiIH0sCisgICAgICAgIEAiZHJvcCI6
IEB7IEAidGV4dC9wbGFpbiIgOiBAIlBsYWluIHRleHQiIH0KKyAgICB9KTsKK30KKworVEVTVChE
cmFnQW5kRHJvcFRlc3RzLCBEYXRhVHJhbnNmZXJHZXREYXRhV2hlbkRyb3BwaW5nQ3VzdG9tRGF0
YSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3
IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1bXAtZGF0YXRyYW5zZmVyLXR5cGVz
Il07CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3Ig
YWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisKKyAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic2VsZWN0KHJpY2gpIl07CisgICAgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIndyaXRlQ3VzdG9tRGF0YSA9IHRydWUi
XTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDIyNSkgdG86Q0dQb2lu
dE1ha2UoNTAsIDM3NSldOworICAgIGNoZWNrSlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwgQHsKKyAgICAgICAgQCJk
cmFnb3ZlciIgOiBAeworICAgICAgICAgICAgQCJ0ZXh0L3BsYWluIiA6IEAiIiwKKyAgICAgICAg
ICAgIEAiZm9vL3BsYWluIiA6IEAiIiwKKyAgICAgICAgICAgIEAidGV4dC9odG1sIiA6IEAiIiwK
KyAgICAgICAgICAgIEAiYmFyL2h0bWwiIDogQCIiLAorICAgICAgICAgICAgQCJ0ZXh0L3VyaS1s
aXN0IiA6IEAiIiwKKyAgICAgICAgICAgIEAiYmF6L3VyaS1saXN0IiA6IEAiIgorICAgICAgICB9
LAorICAgICAgICBAImRyb3AiIDogQHsKKyAgICAgICAgICAgIEAidGV4dC9wbGFpbiIgOiBAImJl
biBiaXRkaWRkbGUiLAorICAgICAgICAgICAgQCJmb28vcGxhaW4iIDogQCJldmEgbHUgYXRvciIs
CisgICAgICAgICAgICBAInRleHQvaHRtbCIgOiBAIjxiPmJvbGQgdGV4dDwvYj4iLAorICAgICAg
ICAgICAgQCJiYXIvaHRtbCIgOiBAIjxpPml0YWxpYyB0ZXh0PC9pPiIsCisgICAgICAgICAgICBA
InRleHQvdXJpLWxpc3QiIDogQCJodHRwczovL3d3dy5hcHBsZS5jb20iLAorICAgICAgICAgICAg
QCJiYXovdXJpLWxpc3QiIDogQCJodHRwczovL3d3dy53ZWJraXQub3JnIgorICAgICAgICB9Cisg
ICAgfSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRGF0YVRyYW5zZmVyR2V0RGF0YVdo
ZW5Ecm9wcGluZ1VSTCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwor
ICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1bXAtZGF0YXRy
YW5zZmVyLXR5cGVzIl07CisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERy
b3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisKKyAg
ICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicmljaC5pbm5lckhUTUwg
PSAnPGEgaHJlZj1cImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9cIj5UaGlzIGlzIGEgbGluay48L2E+
JyJdOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgMjI1KSB0bzpDR1Bv
aW50TWFrZSg1MCwgMzc1KV07CisgICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAeworICAgICAgICBA
ImRyYWdvdmVyIjogQHsKKyAgICAgICAgICAgIEAidGV4dC91cmktbGlzdCIgOiBAIiIsCisgICAg
ICAgICAgICBAInRleHQvcGxhaW4iIDogQCIiCisgICAgICAgIH0sCisgICAgICAgIEAiZHJvcCI6
IEB7CisgICAgICAgICAgICBAInRleHQvdXJpLWxpc3QiIDogQCJodHRwczovL3d3dy5hcHBsZS5j
b20vIiwKKyAgICAgICAgICAgIEAidGV4dC9wbGFpbiIgOiBAImh0dHBzOi8vd3d3LmFwcGxlLmNv
bS8iCisgICAgICAgIH0KKyAgICB9KTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEYXRh
VHJhbnNmZXJHZXREYXRhV2hlbkRyb3BwaW5nSW1hZ2VXaXRoRmlsZVVSTCkKK3sKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlM
b2FkVGVzdFBhZ2VOYW1lZDpAImR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07CisgICAgYXV0byBz
aW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRo
V2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisKKyAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0
TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TVVJMICppY29uVVJMID0g
W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAImljb24iIHdpdGhFeHRlbnNp
b246QCJwbmciIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAg
W2l0ZW1Qcm92aWRlciByZWdpc3RlckZpbGVSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVy
OihOU1N0cmluZyAqKWtVVFR5cGVQTkcgZmlsZU9wdGlvbnM6MCB2aXNpYmlsaXR5Ok5TSXRlbVBy
b3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsIGxvYWRIYW5kbGVyOltwcm90ZWN0ZWRJ
Y29uVVJMID0gcmV0YWluUHRyKGljb25VUkwpXSAoRmlsZUxvYWRDb21wbGV0aW9uQmxvY2sgY29t
cGxldGlvbkhhbmRsZXIpIC0+IE5TUHJvZ3Jlc3MgKiB7CisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKHByb3RlY3RlZEljb25VUkwuZ2V0KCksIE5PLCBuaWwpOworICAgICAgICByZXR1cm4gbmls
OworICAgIH1dOworICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6aWNvblVSTCB2aXNp
YmlsaXR5OlVJSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25PcHRpb25zVmlzaWJpbGl0eUFsbF07
CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVy
LmdldCgpIF1dOworCisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgMzc1
KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07CisKKyAgICAvLyBGaWxlIFVSTHMgc2hvdWxkIG5l
dmVyIGJlIGV4cG9zZWQgZGlyZWN0bHkgdG8gd2ViIGNvbnRlbnQsIHNvIERhdGFUcmFuc2Zlci5n
ZXREYXRhIHNob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGhlcmUuCisgICAgY2hlY2tKU09O
V2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1
dC52YWx1ZSJdLCBAeworICAgICAgICBAImRyYWdvdmVyIjogQHsgQCJGaWxlcyI6IEAiIiwgQCJ0
ZXh0L3VyaS1saXN0IjogQCIiIH0sCisgICAgICAgIEAiZHJvcCI6IEB7IEAiRmlsZXMiOiBAIiIs
IEAidGV4dC91cmktbGlzdCI6IEAiIiB9CisgICAgfSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BU
ZXN0cywgRGF0YVRyYW5zZmVyR2V0RGF0YVdoZW5Ecm9wcGluZ0ltYWdlV2l0aEhUVFBVUkwpCit7
CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5j
aHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOwor
ICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgYXV0byBpdGVtUHJvdmlk
ZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbaXRlbVBy
b3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3Ry
aW5nICopa1VUVHlwZUpQRUcgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9u
VmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxlcjpeTlNQcm9ncmVzcyAqKERhdGFMb2FkQ29tcGxldGlv
bkJsb2NrIGNvbXBsZXRpb25IYW5kbGVyKQorICAgIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoVUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSksIG5pbCk7
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfV07CisgICAgW2l0ZW1Qcm92aWRlciByZWdpc3Rl
ck9iamVjdDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly93ZWJraXQub3JnIl0gdmlzaWJp
bGl0eTpVSUl0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGxdOwor
ICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5n
ZXQoKSBdXTsKKworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDM3NSkg
dG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOworICAgIGNoZWNrSlNPTldpdGhMb2dnaW5nKFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwgQHsKKyAg
ICAgICAgQCJkcmFnb3ZlciI6IEB7IEAiRmlsZXMiOiBAIiIsIEAidGV4dC91cmktbGlzdCI6IEAi
IiB9LAorICAgICAgICBAImRyb3AiOiBAeyBAIkZpbGVzIjogQCIiLCBAInRleHQvdXJpLWxpc3Qi
OiBAImh0dHA6Ly93ZWJraXQub3JnLyIgfQorICAgIH0pOworfQorCitURVNUKERyYWdBbmREcm9w
VGVzdHMsIERhdGFUcmFuc2ZlckdldERhdGFXaGVuRHJvcHBpbmdSZXNwZWN0c1ByZXNlbnRhdGlv
blN0eWxlKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHVtcC1kYXRhdHJhbnNmZXIt
dHlwZXMiXTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVs
YXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKworICAgIHJ1blRl
c3RXaXRoVGVtcG9yYXJ5VGV4dEZpbGUoXihOU1VSTCAqZmlsZVVSTCkgeworICAgICAgICBhdXRv
IGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwor
ICAgICAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRmlsZVJlcHJlc2VudGF0aW9uRm9yVHlwZUlk
ZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZVVURjhQbGFpblRleHQgZmlsZU9wdGlvbnM6MCB2
aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsIGxvYWRI
YW5kbGVyOltwcm90ZWN0ZWRGaWxlVVJMID0gcmV0YWluUHRyKGZpbGVVUkwpXSAoRmlsZUxvYWRD
b21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkhhbmRsZXIpIC0+IE5TUHJvZ3Jlc3MgKiB7CisgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihwcm90ZWN0ZWRGaWxlVVJMLmdldCgpLCBOTywgbmls
KTsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH1dOworICAgICAgICBbc2ltdWxh
dG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisK
KyAgICAgICAgW2l0ZW1Qcm92aWRlciBzZXRQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZTpVSVBy
ZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlQXR0YWNobWVudF07CisgICAgICAgIFtzaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDM3NSkgdG86Q0dQb2ludE1ha2UoNTAsIDM3NSldOwor
ICAgICAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7CisgICAgICAgICAgICBAImRyYWdvdmVyIjog
QHsgQCJGaWxlcyIgOiBAIiIgfSwKKyAgICAgICAgICAgIEAiZHJvcCI6IEB7IEAiRmlsZXMiIDog
QCIiIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgW2l0ZW1Qcm92aWRlciBzZXRQcmVmZXJyZWRQ
cmVzZW50YXRpb25TdHlsZTpVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlSW5saW5lXTsKKyAg
ICAgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgMzc1KSB0bzpDR1BvaW50
TWFrZSg1MCwgMzc1KV07CisgICAgICAgIGNoZWNrSlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwgQHsKKyAgICAgICAg
ICAgIEAiZHJhZ292ZXIiOiBAeyBAInRleHQvcGxhaW4iIDogQCIiIH0sCisgICAgICAgICAgICBA
ImRyb3AiOiBAeyBAInRleHQvcGxhaW4iIDogQCJUaGlzIGlzIGEgdGlueSBibG9iIG9mIHRleHQu
IiB9CisgICAgICAgIH0pOworICAgIH0pOworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIERh
dGFUcmFuc2ZlclNldERhdGFDYW5ub3RXcml0ZVBsYXRmb3JtVHlwZXMpCit7CisgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9h
ZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOworICAgIGF1dG8gc2lt
dWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdl
YlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAInNlbGVjdChyaWNoKSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJjdXN0b21EYXRhID0geyAndGV4dC9wbGFpbicgOiAnZm9vJywgJ2Nv
bS5hZG9iZS5wZGYnIDogJ3RyeSBhbmQgZGVjb2RlIG1lIScgfSJdOworICAgIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3cml0ZUN1c3RvbURhdGEgPSB0cnVlIl07CisK
KyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDIyNSkgdG86Q0dQb2ludE1h
a2UoNTAsIDM3NSldOworICAgIGNoZWNrRmlyc3RUeXBlSXNQcmVzZW50QW5kU2Vjb25kVHlwZUlz
TWlzc2luZyhzaW11bGF0b3IuZ2V0KCksIGtVVFR5cGVVVEY4UGxhaW5UZXh0LCBrVVRUeXBlUERG
KTsKKyAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7CisgICAgICAgIEAiZHJhZ292ZXIiOiBAewor
ICAgICAgICAgICAgQCJ0ZXh0L3BsYWluIjogQCIiLAorICAgICAgICAgICAgQCJjb20uYWRvYmUu
cGRmIjogQCIiCisgICAgICAgIH0sCisgICAgICAgIEAiZHJvcCI6IEB7CisgICAgICAgICAgICBA
InRleHQvcGxhaW4iOiBAImZvbyIsCisgICAgICAgICAgICBAImNvbS5hZG9iZS5wZGYiOiBAInRy
eSBhbmQgZGVjb2RlIG1lISIKKyAgICAgICAgfQorICAgIH0pOworfQorCitURVNUKERyYWdBbmRE
cm9wVGVzdHMsIERhdGFUcmFuc2ZlckdldERhdGFSZWFkUGxhaW5BbmRSaWNoVGV4dCkKK3sKKyAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAIkRhdGFUcmFuc2ZlciJdOworICAgIGF1dG8gc2ltdWxh
dG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZp
ZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtb
VUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBOU0RpY3Rpb25hcnkgKnRleHRBdHRy
aWJ1dGVzID0gQHsgTlNGb250QXR0cmlidXRlTmFtZTogW1VJRm9udCBib2xkU3lzdGVtRm9udE9m
U2l6ZToyMF0gfTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnJpY2hUZXh0ID0gW1tOU0F0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiV2ViS2l0IiBhdHRyaWJ1dGVzOnRl
eHRBdHRyaWJ1dGVzXTsKKyAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyT2JqZWN0OnJpY2hUZXh0
IHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGxdOwor
ICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJo
dHRwczovL3d3dy53ZWJraXQub3JnLyJdIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNl
bnRhdGlvblZpc2liaWxpdHlBbGxdOworICAgIFtpdGVtUHJvdmlkZXIgcmVnaXN0ZXJPYmplY3Q6
QCJXZWJLaXQiIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxp
dHlBbGxdOworCisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRl
bVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50WmVybyB0
bzpDR1BvaW50TWFrZSg1MCwgMTAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoInRleHQvaHRt
bCwgdGV4dC9wbGFpbiwgdGV4dC91cmktbGlzdCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJ0eXBlcy50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
IldlYktpdCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0ZXh0RGF0
YS50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LndlYmtp
dC5vcmcvIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInVybERhdGEu
dGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJXZWJLaXQiLCBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaHRtbERhdGEudGV4dENvbnRlbnQiXSk7Cisg
ICAgRVhQRUNUX1dLX1NUUkVRKCIoU1RSSU5HLCB0ZXh0L2h0bWwpLCAoU1RSSU5HLCB0ZXh0L3Bs
YWluKSwgKFNUUklORywgdGV4dC91cmktbGlzdCkiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiaXRlbXMudGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVR
KCIiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZmlsZXMudGV4dENv
bnRlbnQiXSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BUZXN0cywgRGF0YVRyYW5zZmVyU3VwcHJl
c3NHZXREYXRhRHVlVG9QcmVzZW5jZU9mVGV4dEZpbGUpCit7CisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdl
TmFtZWQ6QCJEYXRhVHJhbnNmZXIiXTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tE
cmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCld
KTsKKworICAgIGF1dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFs
bG9jXSBpbml0XSk7CisgICAgW2l0ZW1Qcm92aWRlciByZWdpc3Rlck9iamVjdDpAIkhlbGxvIHdv
cmxkIiB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxs
XTsKKyAgICBbaXRlbVByb3ZpZGVyIHNldFN1Z2dlc3RlZE5hbWU6QCJoZWxsby50eHQiXTsKKwor
ICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5n
ZXQoKSBdXTsKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludFplcm8gdG86Q0dQb2ludE1h
a2UoNTAsIDEwMCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCJGaWxlcyIsIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0eXBlcy50ZXh0Q29udGVudCJdKTsKKyAgICBF
WFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJ0ZXh0RGF0YS50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ1cmxEYXRhLnRleHRDb250ZW50Il0p
OworICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAImh0bWxEYXRhLnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9XS19TVFJFUSgi
KEZJTEUsIHRleHQvcGxhaW4pIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAIml0ZW1zLnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiKCdoZWxsby50
eHQnLCB0ZXh0L3BsYWluKSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJmaWxlcy50ZXh0Q29udGVudCJdKTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEYXRh
VHJhbnNmZXJHZXREYXRhQ2Fubm90UmVhZFByaXZhdGVBcmJpdHJhcnlUeXBlcykKK3sKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlMb2FkVGVzdFBhZ2VOYW1lZDpAImR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07CisgICAgYXV0
byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisKKyAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFk
b3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtpdGVtUHJvdmlkZXIg
cmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilr
VVRUeXBlTVAzIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxp
dHlBbGwgbG9hZEhhbmRsZXI6Xk5TUHJvZ3Jlc3MgKihEYXRhTG9hZENvbXBsZXRpb25CbG9jayBj
b21wbGV0aW9uSGFuZGxlcikKKyAgICB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFtAInRo
aXMgaXMgYSB0ZXN0IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10sIG5p
bCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfV07CisgICAgW2l0ZW1Qcm92aWRlciByZWdp
c3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOkAib3JnLldlYktpdC5UZXN0
V2ViS2l0QVBJLmN1c3RvbS1wYXN0ZWJvYXJkLXR5cGUiIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlk
ZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGwgbG9hZEhhbmRsZXI6Xk5TUHJvZ3Jlc3MgKihE
YXRhTG9hZENvbXBsZXRpb25CbG9jayBjb21wbGV0aW9uSGFuZGxlcikKKyAgICB7CisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKFtAInRoaXMgaXMgYW5vdGhlciB0ZXN0IiBkYXRhVXNpbmdFbmNv
ZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10sIG5pbCk7CisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgfV07CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVBy
b3ZpZGVyLmdldCgpIF1dOworICAgIFtpdGVtUHJvdmlkZXIgc2V0UHJlZmVycmVkUHJlc2VudGF0
aW9uU3R5bGU6VUlQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUlubGluZV07CisgICAgW3NpbXVs
YXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgMzc1KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1
KV07CisgICAgY2hlY2tKU09OV2l0aExvZ2dpbmcoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdLCBAeworICAgICAgICBAImRyYWdvdmVyIjogQHsg
fSwKKyAgICAgICAgQCJkcm9wIjogQHsgfQorICAgIH0pOworfQorCitURVNUKERyYWdBbmREcm9w
VGVzdHMsIERhdGFUcmFuc2ZlclNldERhdGFWYWxpZFVSTCkKK3sKKyAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtl
KDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBh
Z2VOYW1lZDpAImR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzIl07CisgICAgYXV0byBzaW11bGF0b3Ig
PSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3
ZWJWaWV3LmdldCgpXSk7CisKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAic2VsZWN0KHJpY2gpIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAImN1c3RvbURhdGEgPSB7ICd1cmwnIDogJ2h0dHBzOi8vd2Via2l0Lm9yZy9iLzEy
MycgfSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3cml0
ZUN1c3RvbURhdGEgPSB0cnVlIl07CisKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOwor
ICAgIFtzaW11bGF0b3IuZ2V0KCkgc2V0T3ZlcnJpZGVQZXJmb3JtRHJvcEJsb2NrOl5OU0FycmF5
PFVJRHJhZ0l0ZW0gKj4gKihpZCA8VUlEcm9wU2Vzc2lvbj4gc2Vzc2lvbikKKyAgICB7CisgICAg
ICAgIEVYUEVDVF9FUSgxVUwsIHNlc3Npb24uaXRlbXMuY291bnQpOworICAgICAgICBhdXRvICpp
dGVtID0gc2Vzc2lvbi5pdGVtc1swXS5pdGVtUHJvdmlkZXI7CisgICAgICAgIEVYUEVDVF9UUlVF
KFtpdGVtLnJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnMgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5n
ICopa1VUVHlwZVVSTF0pOworICAgICAgICBFWFBFQ1RfVFJVRShbaXRlbSBjYW5Mb2FkT2JqZWN0
T2ZDbGFzczogW05TVVJMIGNsYXNzXV0pOworICAgICAgICBbaXRlbSBsb2FkT2JqZWN0T2ZDbGFz
czpbTlNVUkwgY2xhc3NdIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQ8TlNJdGVtUHJvdmlkZXJSZWFk
aW5nPiB1cmwsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShbdXJs
IGlzS2luZE9mQ2xhc3M6IFtOU1VSTCBjbGFzc11dKTsKKyAgICAgICAgICAgIEVYUEVDVF9XS19T
VFJFUShbKE5TVVJMICopdXJsIGFic29sdXRlU3RyaW5nXSwgQCJodHRwczovL3dlYmtpdC5vcmcv
Yi8xMjMiKTsKKyAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICB9XTsKKyAgICAgICAg
cmV0dXJuIHNlc3Npb24uaXRlbXM7CisgICAgfV07CisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNH
UG9pbnRNYWtlKDUwLCAyMjUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKKworICAgIGNoZWNr
SlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJv
dXRwdXQudmFsdWUiXSwgQHsKKyAgICAgICAgQCJkcmFnb3ZlciI6IEB7CisgICAgICAgICAgICBA
InRleHQvdXJpLWxpc3QiOiBAIiIsCisgICAgICAgIH0sCisgICAgICAgIEAiZHJvcCI6IEB7Cisg
ICAgICAgICAgICBAInRleHQvdXJpLWxpc3QiOiBAImh0dHBzOi8vd2Via2l0Lm9yZy9iLzEyMyIs
CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUp
OworfQorCitURVNUKERyYWdBbmREcm9wVGVzdHMsIERhdGFUcmFuc2ZlclNldERhdGFVbmVzY2Fw
ZWRVUkwpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10
eXBlcyJdOworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxh
dG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNlbGVjdChyaWNoKSJdOworICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjdXN0b21EYXRhID0geyAndXJs
JyA6ICdodHRwOi8vd2Via2l0Lm9yZy9iL1x1NEY2MFx1NTk3RDs/eD04ICsgNicgfSJdOworICAg
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3cml0ZUN1c3RvbURhdGEg
PSB0cnVlIl07CisKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIFtzaW11bGF0
b3IuZ2V0KCkgc2V0T3ZlcnJpZGVQZXJmb3JtRHJvcEJsb2NrOl5OU0FycmF5PFVJRHJhZ0l0ZW0g
Kj4gKihpZCA8VUlEcm9wU2Vzc2lvbj4gc2Vzc2lvbikKKyAgICB7CisgICAgICAgIEVYUEVDVF9F
USgxVUwsIHNlc3Npb24uaXRlbXMuY291bnQpOworICAgICAgICBhdXRvICppdGVtID0gc2Vzc2lv
bi5pdGVtc1swXS5pdGVtUHJvdmlkZXI7CisgICAgICAgIEVYUEVDVF9UUlVFKFtpdGVtLnJlZ2lz
dGVyZWRUeXBlSWRlbnRpZmllcnMgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZVVS
TF0pOworICAgICAgICBFWFBFQ1RfVFJVRShbaXRlbSBjYW5Mb2FkT2JqZWN0T2ZDbGFzczogW05T
VVJMIGNsYXNzXV0pOworICAgICAgICBbaXRlbSBsb2FkT2JqZWN0T2ZDbGFzczpbTlNVUkwgY2xh
c3NdIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQ8TlNJdGVtUHJvdmlkZXJSZWFkaW5nPiB1cmwsIE5T
RXJyb3IgKmVycm9yKSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShbdXJsIGlzS2luZE9mQ2xh
c3M6IFtOU1VSTCBjbGFzc11dKTsKKyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUShbKE5TVVJM
ICopdXJsIGFic29sdXRlU3RyaW5nXSwgQCJodHRwOi8vd2Via2l0Lm9yZy9iLyVFNCVCRCVBMCVF
NSVBNSVCRDs/eD04JTIwKyUyMDYiKTsKKyAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAg
ICB9XTsKKyAgICAgICAgcmV0dXJuIHNlc3Npb24uaXRlbXM7CisgICAgfV07CisgICAgW3NpbXVs
YXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCAyMjUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUp
XTsKKworICAgIGNoZWNrSlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXSwgQHsKKyAgICAgICAgQCJkcmFnb3ZlciI6IEB7
CisgICAgICAgICAgICBAInRleHQvdXJpLWxpc3QiOiBAIiIsCisgICAgICAgIH0sCisgICAgICAg
IEAiZHJvcCI6IEB7CisgICAgICAgICAgICBAInRleHQvdXJpLWxpc3QiOiBAImh0dHA6Ly93ZWJr
aXQub3JnL2IvXHU0RjYwXHU1OTdEOz94PTggKyA2IiwKKyAgICAgICAgfQorICAgIH0pOworICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Cit9CisKK1RFU1QoRHJhZ0FuZERyb3BU
ZXN0cywgRGF0YVRyYW5zZmVyU2V0RGF0YUludmFsaWRVUkwpCit7CisgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQ
YWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFuc2Zlci10eXBlcyJdOworICAgIGF1dG8gc2ltdWxhdG9y
ID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6
d2ViVmlldy5nZXQoKV0pOworCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAInNlbGVjdChyaWNoKSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJjdXN0b21EYXRhID0geyAndXJsJyA6ICdzb21lIHJhbmRvbSBzdHJpbmcnIH0i
XTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid3JpdGVDdXN0
b21EYXRhID0gdHJ1ZSJdOworCisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUw
LCAyMjUpIHRvOkNHUG9pbnRNYWtlKDUwLCAzNzUpXTsKKyAgICBOU0FycmF5ICpyZWdpc3RlcmVk
VHlwZXMgPSBbc2ltdWxhdG9yLmdldCgpLnNvdXJjZUl0ZW1Qcm92aWRlcnMuZmlyc3RPYmplY3Qg
cmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVyc107CisgICAgRVhQRUNUX0ZBTFNFKFtyZWdpc3RlcmVk
VHlwZXMgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZVVSTF0pOworICAgIGNoZWNr
SlNPTldpdGhMb2dnaW5nKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJv
dXRwdXQudmFsdWUiXSwgQHsKKyAgICAgICAgQCJkcmFnb3ZlciI6IEB7CisgICAgICAgICAgICBA
InRleHQvdXJpLWxpc3QiOiBAIiIsCisgICAgICAgIH0sCisgICAgICAgIEAiZHJvcCI6IEB7Cisg
ICAgICAgICAgICBAInRleHQvdXJpLWxpc3QiOiBAInNvbWUgcmFuZG9tIHN0cmluZyIsCisgICAg
ICAgIH0KKyAgICB9KTsKK30KKworVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBEYXRhVHJhbnNmZXJT
YW5pdGl6ZUhUTUwpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAg
ICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkdW1wLWRhdGF0cmFu
c2Zlci10eXBlcyJdOworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9w
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworCisgICAg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNlbGVjdChyaWNoKSJdOwor
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjdXN0b21EYXRhID0g
eyAndGV4dC9odG1sJyA6ICc8bWV0YSBjb250ZW50PVwic2VjcmV0XCI+IgorICAgICAgICAiPGIg
b25tb3VzZW92ZXI9XCJkYW5nZXJvdXNDb2RlKClcIj5oZWxsbzwvYj48IS0tIHNlY3JldC0tPiwg
d29ybGQ8c2NyaXB0PmRhbmdlcm91c0NvZGUoKTwvc2NyaXB0PicgfSJdOworICAgIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3cml0ZUN1c3RvbURhdGEgPSB0cnVlIl07
CisKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIFtzaW11bGF0b3IuZ2V0KCkg
c2V0T3ZlcnJpZGVQZXJmb3JtRHJvcEJsb2NrOl5OU0FycmF5PFVJRHJhZ0l0ZW0gKj4gKihpZCA8
VUlEcm9wU2Vzc2lvbj4gc2Vzc2lvbikKKyAgICB7CisgICAgICAgIEVYUEVDVF9FUSgxVUwsIHNl
c3Npb24uaXRlbXMuY291bnQpOworICAgICAgICBhdXRvICppdGVtID0gc2Vzc2lvbi5pdGVtc1sw
XS5pdGVtUHJvdmlkZXI7CisgICAgICAgIEVYUEVDVF9UUlVFKFtpdGVtLnJlZ2lzdGVyZWRUeXBl
SWRlbnRpZmllcnMgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZUhUTUxdKTsKKyAg
ICAgICAgW2l0ZW0gbG9hZERhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0
cmluZyAqKWtVVFR5cGVIVE1MIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNEYXRhICpkYXRhLCBOU0Vy
cm9yICplcnJvcikgeworICAgICAgICAgICAgTlNTdHJpbmcgKm1hcmt1cCA9IFtbW05TU3RyaW5n
IGFsbG9jXSBpbml0V2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgZW5jb2Rpbmc6TlNVVEY4U3RyaW5n
RW5jb2RpbmddIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKFttYXJrdXAg
Y29udGFpbnNTdHJpbmc6QCJoZWxsbyJdKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKFttYXJr
dXAgY29udGFpbnNTdHJpbmc6QCIsIHdvcmxkIl0pOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNF
KFttYXJrdXAgY29udGFpbnNTdHJpbmc6QCJzZWNyZXQiXSk7CisgICAgICAgICAgICBFWFBFQ1Rf
RkFMU0UoW21hcmt1cCBjb250YWluc1N0cmluZzpAImRhbmdlcm91c0NvZGUiXSk7CisgICAgICAg
ICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfV07CisgICAgICAgIHJldHVybiBzZXNzaW9uLml0
ZW1zOworICAgIH1dOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgMjI1
KSB0bzpDR1BvaW50TWFrZSg1MCwgMzc1KV07CisKKyAgICBjaGVja0pTT05XaXRoTG9nZ2luZyhb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl0sIEB7
CisgICAgICAgIEAiZHJhZ292ZXIiOiBAeworICAgICAgICAgICAgQCJ0ZXh0L2h0bWwiOiBAIiIs
CisgICAgICAgIH0sCisgICAgICAgIEAiZHJvcCI6IEB7CisgICAgICAgICAgICBAInRleHQvaHRt
bCI6IEAiPG1ldGEgY29udGVudD1cInNlY3JldFwiPjxiIG9ubW91c2VvdmVyPVwiZGFuZ2Vyb3Vz
Q29kZSgpXCI+aGVsbG88L2I+PCEtLSBzZWNyZXQtLT4sIHdvcmxkPHNjcmlwdD5kYW5nZXJvdXND
b2RlKCk8L3NjcmlwdD4iLAorICAgICAgICB9CisgICAgfSk7CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKK30KKworI2VuZGlmIC8vIF9fSVBIT05FX09TX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDExMDMwMAorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNl
bmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiBQTEFURk9STShJT1MpICYmIFdLX0FQSV9F
TkFCTEVECmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0RyYWdBbmREcm9w
U2ltdWxhdG9yLmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0RyYWdBbmREcm9wU2ltdWxh
dG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjNiMTI4ODY3NWFhMzc0ZWNiMWQxM2NlZmMzNTdhNzBkNGMxOTY5
MQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvRHJhZ0FuZERy
b3BTaW11bGF0b3IuaApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkgJiYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9y
dCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9fV0tJbnB1dERlbGVnYXRlLmg+CisjaW1wb3J0IDx3dGYvQmxv
Y2tQdHIuaD4KKworI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIlVJS2l0U1BJLmgiCisjaW1w
b3J0IDxVSUtpdC9OU0l0ZW1Qcm92aWRlcitVSUtpdEFkZGl0aW9ucy5oPgorI2VuZGlmCisKK3R5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIERyYWdBbmREcm9wUGhhc2UpIHsKKyAgICBEcmFnQW5k
RHJvcFBoYXNlQ2FuY2VsbGVkID0gMCwKKyAgICBEcmFnQW5kRHJvcFBoYXNlQmVnaW5uaW5nID0g
MSwKKyAgICBEcmFnQW5kRHJvcFBoYXNlQmVnYW4gPSAyLAorICAgIERyYWdBbmREcm9wUGhhc2VF
bnRlcmVkID0gMywKKyAgICBEcmFnQW5kRHJvcFBoYXNlUGVyZm9ybWluZ0Ryb3AgPSA0Cit9Owor
CisjaWYgUExBVEZPUk0oSU9TKQorCit0eXBlZGVmIE5TRGljdGlvbmFyeTxOU051bWJlciAqLCBO
U1ZhbHVlICo+ICpQcm9ncmVzc1RvQ0dQb2ludFZhbHVlTWFwOworCitAaW50ZXJmYWNlIE1vY2tE
cmFnRHJvcFNlc3Npb24gOiBOU09iamVjdCA8VUlEcmFnRHJvcFNlc3Npb24+IHsKK0Bwcml2YXRl
CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IF9tb2NrSXRlbXM7CisgICAgUmV0YWluUHRyPFVJV2lu
ZG93PiBfd2luZG93OworfQorQHByb3BlcnR5IChub25hdG9taWMpIENHUG9pbnQgbW9ja0xvY2F0
aW9uSW5XaW5kb3c7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBhbGxvd01vdmU7CitAZW5k
CisKK0BpbnRlcmZhY2UgTW9ja0Ryb3BTZXNzaW9uIDogTW9ja0RyYWdEcm9wU2Vzc2lvbiA8VUlE
cm9wU2Vzc2lvbj4KK0BlbmQKKworQGludGVyZmFjZSBNb2NrRHJhZ1Nlc3Npb24gOiBNb2NrRHJh
Z0Ryb3BTZXNzaW9uIDxVSURyYWdTZXNzaW9uPgorQGVuZAorCitAaW50ZXJmYWNlIFdLV2ViVmll
dyAoRHJhZ0FuZERyb3BUZXN0aW5nKQorLSAoaWQgPFVJRHJvcEludGVyYWN0aW9uRGVsZWdhdGU+
KWRyb3BJbnRlcmFjdGlvbkRlbGVnYXRlOworLSAoaWQgPFVJRHJhZ0ludGVyYWN0aW9uRGVsZWdh
dGU+KWRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlOworLSAoVUlEcm9wSW50ZXJhY3Rpb24gKilkcm9w
SW50ZXJhY3Rpb247CistIChVSURyYWdJbnRlcmFjdGlvbiAqKWRyYWdJbnRlcmFjdGlvbjsKK0Bl
bmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKworQGludGVyZmFjZSBEcmFnQW5kRHJvcFNp
bXVsYXRvciA6IE5TT2JqZWN0PFdLVUlEZWxlZ2F0ZVByaXZhdGUsIF9XS0lucHV0RGVsZWdhdGU+
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXc6KFRlc3RXS1dlYlZpZXcgKil3ZWJW
aWV3OworLy8gVGhlIHN0YXJ0IGxvY2F0aW9uLCBlbmQgbG9jYXRpb24sIGFuZCBsb2NhdGlvbnMg
b2YgYWRkaXRpb25hbCBpdGVtIHJlcXVlc3RzIGFyZSBhbGwgaW4gd2luZG93IGNvb3JkaW5hdGVz
LgorLSAodm9pZClydW5Gcm9tOihDR1BvaW50KXN0YXJ0TG9jYXRpb24gdG86KENHUG9pbnQpZW5k
TG9jYXRpb247CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXk8X1dLQXR0
YWNobWVudCAqPiAqaW5zZXJ0ZWRBdHRhY2htZW50czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkb25seSkgTlNBcnJheTxfV0tBdHRhY2htZW50ICo+ICpyZW1vdmVkQXR0YWNobWVudHM7CitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIERyYWdBbmREcm9wUGhhc2UgcGhhc2U7CisK
KyNpZiBQTEFURk9STShJT1MpCisKKy0gKHZvaWQpcnVuRnJvbTooQ0dQb2ludClzdGFydExvY2F0
aW9uIHRvOihDR1BvaW50KWVuZExvY2F0aW9uIGFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9u
czooUHJvZ3Jlc3NUb0NHUG9pbnRWYWx1ZU1hcClhZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlv
bnM7CistICh2b2lkKXdhaXRGb3JJbnB1dFNlc3Npb247CistICh2b2lkKWVuZERhdGFUcmFuc2Zl
cjsKKworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgYWxsb3dzRm9jdXNUb1N0YXJ0SW5wdXRT
ZXNzaW9uOworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgc2hvdWxkRW5zdXJlVUlBcHBsaWNh
dGlvbjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHNob3VsZEFsbG93TW92ZU9wZXJhdGlv
bjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCbG9ja1B0cjxCT09MKF9XS0FjdGl2YXRlZEVsZW1l
bnRJbmZvICopPiBzaG93Q3VzdG9tQWN0aW9uU2hlZXRCbG9jazsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljKSBCbG9ja1B0cjxOU0FycmF5ICooVUlJdGVtUHJvdmlkZXIgKiwgTlNBcnJheSAqLCBOU0Rp
Y3Rpb25hcnkgKik+IGNvbnZlcnRJdGVtUHJvdmlkZXJzQmxvY2s7CitAcHJvcGVydHkgKG5vbmF0
b21pYykgQmxvY2tQdHI8TlNBcnJheSAqKGlkIDxVSURyb3BTZXNzaW9uPik+IG92ZXJyaWRlUGVy
Zm9ybURyb3BCbG9jazsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIE5TQXJyYXkgKmV4
dGVybmFsSXRlbVByb3ZpZGVyczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCbG9ja1B0cjxOU1VJ
bnRlZ2VyKE5TVUludGVnZXIsIGlkKT4gb3ZlcnJpZGVEcmFnVXBkYXRlQmxvY2s7CitAcHJvcGVy
dHkgKG5vbmF0b21pYykgQmxvY2tQdHI8dm9pZChCT09MLCBOU0FycmF5ICopPiBkcm9wQ29tcGxl
dGlvbkJsb2NrOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXkgKnNv
dXJjZUl0ZW1Qcm92aWRlcnM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJy
YXkgKm9ic2VydmVkRXZlbnROYW1lczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
TlNBcnJheSAqZmluYWxTZWxlY3Rpb25SZWN0czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgQ0dSZWN0IGxhc3RLbm93bkRyYWdDYXJldFJlY3Q7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIE5TQXJyYXk8VUlUYXJnZXRlZERyYWdQcmV2aWV3ICo+ICpsaWZ0UHJldmll
d3M7CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKK0BlbmQKKworI2VuZGlmIC8vIEVOQUJM
RShEUkFHX1NVUFBPUlQpICYmIFdLX0FQSV9FTkFCTEVECmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL2lvcy9EYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuaCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzZDM3MjA1OGM0OTY3NjZhNjJjMDkwYmE4NzczZjRjNTE4ODJhMDAzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShEQVRB
X0lOVEVSQUNUSU9OKQotCi0jaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0jaW1wb3J0IDxVSUtp
dC9OU0l0ZW1Qcm92aWRlcitVSUtpdEFkZGl0aW9ucy5oPgotCi0jaWYgVVNFKEFQUExFX0lOVEVS
TkFMX1NESykKLSNpbXBvcnQgPFVJS2l0L05TU3RyaW5nK1VJSXRlbVByb3ZpZGVyLmg+Ci0jaW1w
b3J0IDxVSUtpdC9OU1VSTCtVSUl0ZW1Qcm92aWRlci5oPgotI2ltcG9ydCA8VUlLaXQvVUlJbWFn
ZStVSUl0ZW1Qcm92aWRlci5oPgotI2ltcG9ydCA8VUlLaXQvVUlJdGVtUHJvdmlkZXIuaD4KLSNp
bXBvcnQgPFVJS2l0L1VJSXRlbVByb3ZpZGVyX1ByaXZhdGUuaD4KLSNlbHNlCi0KLUBpbnRlcmZh
Y2UgTlNVUkwgKCkKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCBzZXR0ZXI9X3NldFRpdGxl
OikgTlNTdHJpbmcgKl90aXRsZTsKLUBlbmQKLQotI2RlZmluZSBVSUl0ZW1Qcm92aWRlclJlcHJl
c2VudGF0aW9uT3B0aW9uc1Zpc2liaWxpdHlBbGwgTlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlv
blZpc2liaWxpdHlBbGwKLQotQHByb3RvY29sIFVJSXRlbVByb3ZpZGVyUmVhZGluZyA8TlNJdGVt
UHJvdmlkZXJSZWFkaW5nPgotCi1AcmVxdWlyZWQKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEl0
ZW1Qcm92aWRlckRhdGE6KE5TRGF0YSAqKWRhdGEgdHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICop
dHlwZUlkZW50aWZpZXIgZXJyb3I6KE5TRXJyb3IgKiopb3V0RXJyb3I7Ci0KLUBlbmQKLQotQHBy
b3RvY29sIFVJSXRlbVByb3ZpZGVyV3JpdGluZyA8TlNJdGVtUHJvdmlkZXJXcml0aW5nPgotCi1A
cmVxdWlyZWQKLS0gKE5TUHJvZ3Jlc3MgKilsb2FkRGF0YVdpdGhUeXBlSWRlbnRpZmllcjooTlNT
dHJpbmcgKil0eXBlSWRlbnRpZmllciBmb3JJdGVtUHJvdmlkZXJDb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikoTlNEYXRhICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7Ci0KLUBlbmQK
LQotQGludGVyZmFjZSBOU0F0dHJpYnV0ZWRTdHJpbmcgKCkgPFVJSXRlbVByb3ZpZGVyUmVhZGlu
ZywgVUlJdGVtUHJvdmlkZXJXcml0aW5nPgotQGVuZAotQGludGVyZmFjZSBOU1N0cmluZyAoKSA8
VUlJdGVtUHJvdmlkZXJSZWFkaW5nLCBVSUl0ZW1Qcm92aWRlcldyaXRpbmc+Ci1AZW5kCi1AaW50
ZXJmYWNlIE5TVVJMICgpIDxVSUl0ZW1Qcm92aWRlclJlYWRpbmcsIFVJSXRlbVByb3ZpZGVyV3Jp
dGluZz4KLUBlbmQKLUBpbnRlcmZhY2UgVUlJbWFnZSAoKSA8VUlJdGVtUHJvdmlkZXJSZWFkaW5n
LCBVSUl0ZW1Qcm92aWRlcldyaXRpbmc+Ci1AZW5kCi0KLUBpbnRlcmZhY2UgVUlJdGVtUHJvdmlk
ZXIgOiBOU0l0ZW1Qcm92aWRlcgotQGVuZAotCi0jZW5kaWYKLQotI2ltcG9ydCA8VUlLaXQvVUlL
aXQuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+Ci0jaW1wb3J0IDxX
ZWJLaXQvX1dLSW5wdXREZWxlZ2F0ZS5oPgotI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+Ci0KLUBj
bGFzcyBNb2NrRHJvcFNlc3Npb247Ci1AY2xhc3MgTW9ja0RyYWdTZXNzaW9uOwotCi1AaW50ZXJm
YWNlIE1vY2tEcmFnRHJvcFNlc3Npb24gOiBOU09iamVjdCA8VUlEcmFnRHJvcFNlc3Npb24+IHsK
LUBwcml2YXRlCi0gICAgUmV0YWluUHRyPE5TQXJyYXk+IF9tb2NrSXRlbXM7Ci0gICAgUmV0YWlu
UHRyPFVJV2luZG93PiBfd2luZG93OwotfQotQHByb3BlcnR5IChub25hdG9taWMpIENHUG9pbnQg
bW9ja0xvY2F0aW9uSW5XaW5kb3c7Ci1AcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBhbGxvd01v
dmU7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTW9ja0Ryb3BTZXNzaW9uIDogTW9ja0RyYWdEcm9wU2Vz
c2lvbiA8VUlEcm9wU2Vzc2lvbj4KLUBlbmQKLQotQGludGVyZmFjZSBNb2NrRHJhZ1Nlc3Npb24g
OiBNb2NrRHJhZ0Ryb3BTZXNzaW9uIDxVSURyYWdTZXNzaW9uPgotQGVuZAotCi1leHRlcm4gTlNT
dHJpbmcgKiBjb25zdCBEYXRhSW50ZXJhY3Rpb25FbnRlckV2ZW50TmFtZTsKLWV4dGVybiBOU1N0
cmluZyAqIGNvbnN0IERhdGFJbnRlcmFjdGlvbk92ZXJFdmVudE5hbWU7Ci1leHRlcm4gTlNTdHJp
bmcgKiBjb25zdCBEYXRhSW50ZXJhY3Rpb25QZXJmb3JtT3BlcmF0aW9uRXZlbnROYW1lOwotZXh0
ZXJuIE5TU3RyaW5nICogY29uc3QgRGF0YUludGVyYWN0aW9uTGVhdmVFdmVudE5hbWU7Ci1leHRl
cm4gTlNTdHJpbmcgKiBjb25zdCBEYXRhSW50ZXJhY3Rpb25TdGFydEV2ZW50TmFtZTsKLQotdHlw
ZWRlZiBOU0RpY3Rpb25hcnk8TlNOdW1iZXIgKiwgTlNWYWx1ZSAqPiAqUHJvZ3Jlc3NUb0NHUG9p
bnRWYWx1ZU1hcDsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgRGF0YUludGVyYWN0aW9u
UGhhc2UpIHsKLSAgICBEYXRhSW50ZXJhY3Rpb25DYW5jZWxsZWQgPSAwLAotICAgIERhdGFJbnRl
cmFjdGlvbkJlZ2lubmluZyA9IDEsCi0gICAgRGF0YUludGVyYWN0aW9uQmVnYW4gPSAyLAotICAg
IERhdGFJbnRlcmFjdGlvbkVudGVyZWQgPSAzLAotICAgIERhdGFJbnRlcmFjdGlvblBlcmZvcm1p
bmcgPSA0Ci19OwotCi1AaW50ZXJmYWNlIFdLV2ViVmlldyAoRHJhZ0FuZERyb3BUZXN0aW5nKQot
LSAoaWQgPFVJRHJvcEludGVyYWN0aW9uRGVsZWdhdGU+KWRyb3BJbnRlcmFjdGlvbkRlbGVnYXRl
OwotLSAoaWQgPFVJRHJhZ0ludGVyYWN0aW9uRGVsZWdhdGU+KWRyYWdJbnRlcmFjdGlvbkRlbGVn
YXRlOwotLSAoVUlEcm9wSW50ZXJhY3Rpb24gKilkcm9wSW50ZXJhY3Rpb247Ci0tIChVSURyYWdJ
bnRlcmFjdGlvbiAqKWRyYWdJbnRlcmFjdGlvbjsKLUBlbmQKLQotQGludGVyZmFjZSBEYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3IgOiBOU09iamVjdDxXS1VJRGVsZWdhdGVQcml2YXRlLCBfV0tJbnB1
dERlbGVnYXRlPiB7Ci1AcHJpdmF0ZQotICAgIFJldGFpblB0cjxUZXN0V0tXZWJWaWV3PiBfd2Vi
VmlldzsKLSAgICBSZXRhaW5QdHI8TW9ja0RyYWdTZXNzaW9uPiBfZHJhZ1Nlc3Npb247Ci0gICAg
UmV0YWluUHRyPE1vY2tEcm9wU2Vzc2lvbj4gX2Ryb3BTZXNzaW9uOwotICAgIFJldGFpblB0cjxO
U011dGFibGVBcnJheT4gX29ic2VydmVkRXZlbnROYW1lczsKLSAgICBSZXRhaW5QdHI8TlNBcnJh
eT4gX2V4dGVybmFsSXRlbVByb3ZpZGVyczsKLSAgICBSZXRhaW5QdHI8TlNBcnJheSAqPiBfc291
cmNlSXRlbVByb3ZpZGVyczsKLSAgICBSZXRhaW5QdHI8TlNBcnJheSAqPiBfZmluYWxTZWxlY3Rp
b25SZWN0czsKLSAgICBDR1BvaW50IF9zdGFydExvY2F0aW9uOwotICAgIENHUG9pbnQgX2VuZExv
Y2F0aW9uOwotICAgIENHUmVjdCBfbGFzdEtub3duRHJhZ0NhcmV0UmVjdDsKLQotICAgIFJldGFp
blB0cjxOU011dGFibGVEaWN0aW9uYXJ5PE5TTnVtYmVyICosIE5TVmFsdWUgKj4+X3JlbWFpbmlu
Z0FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uc0J5UHJvZ3Jlc3M7Ci0gICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PE5TVmFsdWUgKj4+X3F1ZXVlZEFkZGl0aW9uYWxJdGVtUmVxdWVzdExv
Y2F0aW9uczsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk8VUlUYXJnZXRlZERyYWdQcmV2
aWV3ICo+PiBfbGlmdFByZXZpZXdzOwotCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PF9X
S0F0dGFjaG1lbnQgKj4+IF9pbnNlcnRlZEF0dGFjaG1lbnRzOwotICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheTxfV0tBdHRhY2htZW50ICo+PiBfcmVtb3ZlZEF0dGFjaG1lbnRzOwotCi0gICAg
Ym9vbCBfaXNEb25lV2FpdGluZ0ZvcklucHV0U2Vzc2lvbjsKLSAgICBkb3VibGUgX2N1cnJlbnRQ
cm9ncmVzczsKLSAgICBib29sIF9pc0RvbmVXaXRoQ3VycmVudFJ1bjsKLSAgICBEYXRhSW50ZXJh
Y3Rpb25QaGFzZSBfcGhhc2U7Ci0KLSAgICBSZXRhaW5QdHI8VUlEcm9wUHJvcG9zYWw+IF9jdXJy
ZW50RHJvcFByb3Bvc2FsOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihU
ZXN0V0tXZWJWaWV3ICopd2ViVmlldzsKLS8vIFRoZSBzdGFydCBsb2NhdGlvbiwgZW5kIGxvY2F0
aW9uLCBhbmQgbG9jYXRpb25zIG9mIGFkZGl0aW9uYWwgaXRlbSByZXF1ZXN0cyBhcmUgYWxsIGlu
IHdpbmRvdyBjb29yZGluYXRlcy4KLS0gKHZvaWQpcnVuRnJvbTooQ0dQb2ludClzdGFydExvY2F0
aW9uIHRvOihDR1BvaW50KWVuZExvY2F0aW9uOwotLSAodm9pZClydW5Gcm9tOihDR1BvaW50KXN0
YXJ0TG9jYXRpb24gdG86KENHUG9pbnQpZW5kTG9jYXRpb24gYWRkaXRpb25hbEl0ZW1SZXF1ZXN0
TG9jYXRpb25zOihQcm9ncmVzc1RvQ0dQb2ludFZhbHVlTWFwKWFkZGl0aW9uYWxJdGVtUmVxdWVz
dExvY2F0aW9uczsKLS0gKHZvaWQpd2FpdEZvcklucHV0U2Vzc2lvbjsKLS0gKHZvaWQpZW5kRGF0
YVRyYW5zZmVyOwotCi1AcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBhbGxvd3NGb2N1c1RvU3Rh
cnRJbnB1dFNlc3Npb247Ci1AcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBzaG91bGRFbnN1cmVV
SUFwcGxpY2F0aW9uOwotQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgc2hvdWxkQWxsb3dNb3Zl
T3BlcmF0aW9uOwotQHByb3BlcnR5IChub25hdG9taWMpIEJsb2NrUHRyPEJPT0woX1dLQWN0aXZh
dGVkRWxlbWVudEluZm8gKik+IHNob3dDdXN0b21BY3Rpb25TaGVldEJsb2NrOwotQHByb3BlcnR5
IChub25hdG9taWMpIEJsb2NrUHRyPE5TQXJyYXkgKihVSUl0ZW1Qcm92aWRlciAqLCBOU0FycmF5
ICosIE5TRGljdGlvbmFyeSAqKT4gY29udmVydEl0ZW1Qcm92aWRlcnNCbG9jazsKLUBwcm9wZXJ0
eSAobm9uYXRvbWljKSBCbG9ja1B0cjxOU0FycmF5ICooaWQgPFVJRHJvcFNlc3Npb24+KT4gb3Zl
cnJpZGVQZXJmb3JtRHJvcEJsb2NrOwotQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNB
cnJheSAqZXh0ZXJuYWxJdGVtUHJvdmlkZXJzOwotQHByb3BlcnR5IChub25hdG9taWMpIEJsb2Nr
UHRyPE5TVUludGVnZXIoTlNVSW50ZWdlciwgaWQpPiBvdmVycmlkZURhdGFJbnRlcmFjdGlvbk9w
ZXJhdGlvbkJsb2NrOwotQHByb3BlcnR5IChub25hdG9taWMpIEJsb2NrUHRyPHZvaWQoQk9PTCwg
TlNBcnJheSAqKT4gZGF0YUludGVyYWN0aW9uT3BlcmF0aW9uQ29tcGxldGlvbkJsb2NrOwotCi1A
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXkgKnNvdXJjZUl0ZW1Qcm92aWRl
cnM7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXkgKm9ic2VydmVkRXZl
bnROYW1lczsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBcnJheSAqZmluYWxT
ZWxlY3Rpb25SZWN0czsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgRGF0YUludGVy
YWN0aW9uUGhhc2UgcGhhc2U7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVj
dCBsYXN0S25vd25EcmFnQ2FyZXRSZWN0OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBOU0FycmF5PFVJVGFyZ2V0ZWREcmFnUHJldmlldyAqPiAqbGlmdFByZXZpZXdzOwotCi1AcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXk8X1dLQXR0YWNobWVudCAqPiAqaW5z
ZXJ0ZWRBdHRhY2htZW50czsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBcnJh
eTxfV0tBdHRhY2htZW50ICo+ICpyZW1vdmVkQXR0YWNobWVudHM7Ci0KLUBlbmQKLQotI2VuZGlm
IC8vIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9pb3MvRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9pb3MvRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4NTZiMGIxZmYzYmZmMGI0Yjk4ZjdkN2QxYTg3Y2I4N2IyYzMwODQ0Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDY3
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRh
dGFJbnRlcmFjdGlvblNpbXVsYXRvci5oIgotCi0jaWYgRU5BQkxFKERBVEFfSU5URVJBQ1RJT04p
Ci0KLSNpbXBvcnQgIkluc3RhbmNlTWV0aG9kU3dpenpsZXIuaCIKLSNpbXBvcnQgIlBsYXRmb3Jt
VXRpbGl0aWVzLmgiCi0jaW1wb3J0ICJVSUtpdFNQSS5oIgotCi0jaW1wb3J0IDxVSUtpdC9VSURy
YWdJbnRlcmFjdGlvbi5oPgotI2ltcG9ydCA8VUlLaXQvVUlEcmFnSXRlbS5oPgotI2ltcG9ydCA8
VUlLaXQvVUlJbnRlcmFjdGlvbi5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUu
aD4KLSNpbXBvcnQgPFdlYktpdC9fV0tGb2N1c2VkRWxlbWVudEluZm8uaD4KLSNpbXBvcnQgPFdl
YktpdC9fV0tGb3JtSW5wdXRTZXNzaW9uLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0j
aW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KLQotU09GVF9MSU5LX0ZSQU1FV09SSyhVSUtpdCkK
LVNPRlRfTElOSyhVSUtpdCwgVUlBcHBsaWNhdGlvbkluc3RhbnRpYXRlU2luZ2xldG9uLCB2b2lk
LCAoQ2xhc3Mgc2luZ2xldG9uQ2xhc3MpLCAoc2luZ2xldG9uQ2xhc3MpKQotCi11c2luZyBuYW1l
c3BhY2UgVGVzdFdlYktpdEFQSTsKLQotQGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoRHJhZ0Fu
ZERyb3BUZXN0aW5nKQotCi0tIChVSVZpZXcgKilfZHJhZ0Ryb3BJbnRlcmFjdGlvblZpZXcKLXsK
LSAgICByZXR1cm4gW3NlbGYgdmFsdWVGb3JLZXk6QCJfY3VycmVudENvbnRlbnRWaWV3Il07Ci19
Ci0KLS0gKGlkIDxVSURyb3BJbnRlcmFjdGlvbkRlbGVnYXRlPilkcm9wSW50ZXJhY3Rpb25EZWxl
Z2F0ZQotewotICAgIHJldHVybiAoaWQgPFVJRHJvcEludGVyYWN0aW9uRGVsZWdhdGU+KXNlbGYu
X2RyYWdEcm9wSW50ZXJhY3Rpb25WaWV3OwotfQotCi0tIChpZCA8VUlEcmFnSW50ZXJhY3Rpb25E
ZWxlZ2F0ZT4pZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGUKLXsKLSAgICByZXR1cm4gKGlkIDxVSURy
YWdJbnRlcmFjdGlvbkRlbGVnYXRlPilzZWxmLl9kcmFnRHJvcEludGVyYWN0aW9uVmlldzsKLX0K
LQotLSAoVUlEcm9wSW50ZXJhY3Rpb24gKilkcm9wSW50ZXJhY3Rpb24KLXsKLSAgICBVSVZpZXcg
KmludGVyYWN0aW9uVmlldyA9IHNlbGYuX2RyYWdEcm9wSW50ZXJhY3Rpb25WaWV3OwotICAgIGZv
ciAoaWQgPFVJSW50ZXJhY3Rpb24+IGludGVyYWN0aW9uIGluIGludGVyYWN0aW9uVmlldy5pbnRl
cmFjdGlvbnMpIHsKLSAgICAgICAgaWYgKFtpbnRlcmFjdGlvbiBpc0tpbmRPZkNsYXNzOltVSURy
b3BJbnRlcmFjdGlvbiBjbGFzc11dKQotICAgICAgICAgICAgcmV0dXJuIChVSURyb3BJbnRlcmFj
dGlvbiAqKWludGVyYWN0aW9uOwotICAgIH0KLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChVSURy
YWdJbnRlcmFjdGlvbiAqKWRyYWdJbnRlcmFjdGlvbgotewotICAgIFVJVmlldyAqaW50ZXJhY3Rp
b25WaWV3ID0gc2VsZi5fZHJhZ0Ryb3BJbnRlcmFjdGlvblZpZXc7Ci0gICAgZm9yIChpZCA8VUlJ
bnRlcmFjdGlvbj4gaW50ZXJhY3Rpb24gaW4gaW50ZXJhY3Rpb25WaWV3LmludGVyYWN0aW9ucykg
ewotICAgICAgICBpZiAoW2ludGVyYWN0aW9uIGlzS2luZE9mQ2xhc3M6W1VJRHJhZ0ludGVyYWN0
aW9uIGNsYXNzXV0pCi0gICAgICAgICAgICByZXR1cm4gKFVJRHJhZ0ludGVyYWN0aW9uICopaW50
ZXJhY3Rpb247Ci0gICAgfQotICAgIHJldHVybiBuaWw7Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVu
dGF0aW9uIE1vY2tEcmFnRHJvcFNlc3Npb24KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSXRl
bXM6KE5TQXJyYXkgPFVJRHJhZ0l0ZW0gKj4qKWl0ZW1zIGxvY2F0aW9uOihDR1BvaW50KWxvY2F0
aW9uSW5XaW5kb3cgd2luZG93OihVSVdpbmRvdyAqKXdpbmRvdyBhbGxvd01vdmU6KEJPT0wpYWxs
b3dNb3ZlCi17Ci0gICAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKLSAgICAgICAgX21vY2tJ
dGVtcyA9IGl0ZW1zOwotICAgICAgICBfbW9ja0xvY2F0aW9uSW5XaW5kb3cgPSBsb2NhdGlvbklu
V2luZG93OwotICAgICAgICBfd2luZG93ID0gd2luZG93OwotICAgICAgICBfYWxsb3dNb3ZlID0g
YWxsb3dNb3ZlOwotICAgIH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoQk9PTClhbGxvd3NN
b3ZlT3BlcmF0aW9uCi17Ci0gICAgcmV0dXJuIF9hbGxvd01vdmU7Ci19Ci0KLS0gKEJPT0wpaXNS
ZXN0cmljdGVkVG9EcmFnZ2luZ0FwcGxpY2F0aW9uCi17Ci0gICAgcmV0dXJuIE5POwotfQotCi0t
IChCT09MKWhhc0l0ZW1zQ29uZm9ybWluZ1RvVHlwZUlkZW50aWZpZXJzOihOU0FycmF5PE5TU3Ry
aW5nICo+ICopdHlwZUlkZW50aWZpZXJzCi17Ci0gICAgZm9yIChOU1N0cmluZyAqdHlwZUlkZW50
aWZpZXIgaW4gdHlwZUlkZW50aWZpZXJzKSB7Ci0gICAgICAgIEJPT0wgaGFzSXRlbUNvbmZvcm1p
bmdUb1R5cGUgPSBOTzsKLSAgICAgICAgZm9yIChVSURyYWdJdGVtICppdGVtIGluIHNlbGYuaXRl
bXMpCi0gICAgICAgICAgICBoYXNJdGVtQ29uZm9ybWluZ1RvVHlwZSB8PSBbW2l0ZW0uaXRlbVBy
b3ZpZGVyIHJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnNdIGNvbnRhaW5zT2JqZWN0OnR5cGVJZGVu
dGlmaWVyXTsKLSAgICAgICAgaWYgKCFoYXNJdGVtQ29uZm9ybWluZ1RvVHlwZSkKLSAgICAgICAg
ICAgIHJldHVybiBOTzsKLSAgICB9Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAoQk9PTCljYW5M
b2FkT2JqZWN0c09mQ2xhc3M6KENsYXNzPFVJSXRlbVByb3ZpZGVyUmVhZGluZz4pYUNsYXNzCi17
Ci0gICAgZm9yIChVSURyYWdJdGVtICppdGVtIGluIHNlbGYuaXRlbXMpIHsKLSAgICAgICAgaWYg
KFtpdGVtLml0ZW1Qcm92aWRlciBjYW5Mb2FkT2JqZWN0T2ZDbGFzczphQ2xhc3NdKQotICAgICAg
ICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0gICAgcmV0dXJuIE5POwotfQotCi0tIChCT09MKWNh
bkxvYWRPYmplY3RzT2ZDbGFzc2VzOihOU0FycmF5PENsYXNzPFVJSXRlbVByb3ZpZGVyUmVhZGlu
Zz4+ICopY2xhc3NlcwotewotICAgIGZvciAoQ2xhc3M8VUlJdGVtUHJvdmlkZXJSZWFkaW5nPiBh
Q2xhc3MgaW4gY2xhc3NlcykgewotICAgICAgICBCT09MIGNhbkxvYWQgPSBOTzsKLSAgICAgICAg
Zm9yIChVSURyYWdJdGVtICppdGVtIGluIHNlbGYuaXRlbXMpCi0gICAgICAgICAgICBjYW5Mb2Fk
IHw9IFtpdGVtLml0ZW1Qcm92aWRlciBjYW5Mb2FkT2JqZWN0T2ZDbGFzczphQ2xhc3NdOwotICAg
ICAgICBpZiAoIWNhbkxvYWQpCi0gICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgfQotICAgIHJl
dHVybiBZRVM7Ci19Ci0KLS0gKE5TQXJyYXk8VUlEcmFnSXRlbSAqPiAqKWl0ZW1zCi17Ci0gICAg
cmV0dXJuIF9tb2NrSXRlbXMuZ2V0KCk7Ci19Ci0KLS0gKHZvaWQpc2V0SXRlbXM6KE5TQXJyYXk8
VUlEcmFnSXRlbSAqPiAqKWl0ZW1zCi17Ci0gICAgX21vY2tJdGVtcyA9IGl0ZW1zOwotfQotCi0t
ICh2b2lkKWFkZEl0ZW1zOihOU0FycmF5PFVJRHJhZ0l0ZW0gKj4gKilpdGVtcwotewotICAgIGlm
ICghW2l0ZW1zIGNvdW50XSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFbX21vY2tJdGVt
cyBjb3VudF0pCi0gICAgICAgIF9tb2NrSXRlbXMgPSBpdGVtczsKLSAgICBlbHNlCi0gICAgICAg
IF9tb2NrSXRlbXMgPSBbX21vY2tJdGVtcyBhcnJheUJ5QWRkaW5nT2JqZWN0c0Zyb21BcnJheTpp
dGVtc107Ci19Ci0KLS0gKENHUG9pbnQpbG9jYXRpb25JblZpZXc6KFVJVmlldyAqKXZpZXcKLXsK
LSAgICByZXR1cm4gW193aW5kb3cgY29udmVydFBvaW50Ol9tb2NrTG9jYXRpb25JbldpbmRvdyB0
b1ZpZXc6dmlld107Ci19Ci0KLUBlbmQKLQotTlNTdHJpbmcgKiBjb25zdCBEYXRhSW50ZXJhY3Rp
b25FbnRlckV2ZW50TmFtZSA9IEAiZHJhZ2VudGVyIjsKLU5TU3RyaW5nICogY29uc3QgRGF0YUlu
dGVyYWN0aW9uT3ZlckV2ZW50TmFtZSA9IEAiZHJhZ292ZXIiOwotTlNTdHJpbmcgKiBjb25zdCBE
YXRhSW50ZXJhY3Rpb25QZXJmb3JtT3BlcmF0aW9uRXZlbnROYW1lID0gQCJkcm9wIjsKLU5TU3Ry
aW5nICogY29uc3QgRGF0YUludGVyYWN0aW9uTGVhdmVFdmVudE5hbWUgPSBAImRyYWdsZWF2ZSI7
Ci1OU1N0cmluZyAqIGNvbnN0IERhdGFJbnRlcmFjdGlvblN0YXJ0RXZlbnROYW1lID0gQCJkcmFn
c3RhcnQiOwotCi1AaW1wbGVtZW50YXRpb24gTW9ja0Ryb3BTZXNzaW9uCi0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFByb3ZpZGVyczooTlNBcnJheTxVSUl0ZW1Qcm92aWRlciAqPiAqKXByb3Zp
ZGVycyBsb2NhdGlvbjooQ0dQb2ludClsb2NhdGlvbkluV2luZG93IHdpbmRvdzooVUlXaW5kb3cg
Kil3aW5kb3cgYWxsb3dNb3ZlOihCT09MKWFsbG93TW92ZQotewotICAgIGF1dG8gaXRlbXMgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAgICBmb3IgKFVJSXRlbVBy
b3ZpZGVyICppdGVtUHJvdmlkZXIgaW4gcHJvdmlkZXJzKQotICAgICAgICBbaXRlbXMgYWRkT2Jq
ZWN0OltbW1VJRHJhZ0l0ZW0gYWxsb2NdIGluaXRXaXRoSXRlbVByb3ZpZGVyOml0ZW1Qcm92aWRl
cl0gYXV0b3JlbGVhc2VdXTsKLQotICAgIHJldHVybiBbc3VwZXIgaW5pdFdpdGhJdGVtczppdGVt
cy5nZXQoKSBsb2NhdGlvbjpsb2NhdGlvbkluV2luZG93IHdpbmRvdzp3aW5kb3cgYWxsb3dNb3Zl
OmFsbG93TW92ZV07Ci19Ci0KLS0gKEJPT0wpaXNMb2NhbAotewotICAgIHJldHVybiBZRVM7Ci19
Ci0KLS0gKE5TUHJvZ3Jlc3MgKilwcm9ncmVzcwotewotICAgIHJldHVybiBbTlNQcm9ncmVzcyBk
aXNjcmV0ZVByb2dyZXNzV2l0aFRvdGFsVW5pdENvdW50OjEwMF07Ci19Ci0KLS0gKHZvaWQpc2V0
UHJvZ3Jlc3NJbmRpY2F0b3JTdHlsZTooVUlEcm9wU2Vzc2lvblByb2dyZXNzSW5kaWNhdG9yU3R5
bGUpcHJvZ3Jlc3NJbmRpY2F0b3JTdHlsZQotewotfQotCi0tIChVSURyb3BTZXNzaW9uUHJvZ3Jl
c3NJbmRpY2F0b3JTdHlsZSlwcm9ncmVzc0luZGljYXRvclN0eWxlCi17Ci0gICAgcmV0dXJuIFVJ
RHJvcFNlc3Npb25Qcm9ncmVzc0luZGljYXRvclN0eWxlTm9uZTsKLX0KLQotLSAoTlNVSW50ZWdl
cilvcGVyYXRpb25NYXNrCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS0gKGlkIDxVSURyYWdTZXNz
aW9uPilsb2NhbERyYWdTZXNzaW9uCi17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoQk9PTClo
YXNJdGVtc0NvbmZvcm1pbmdUb1R5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKXR5cGVJZGVudGlm
aWVyCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIE5POwotfQotCi0t
IChCT09MKWNhbkNyZWF0ZUl0ZW1zT2ZDbGFzczooQ2xhc3M8VUlJdGVtUHJvdmlkZXJSZWFkaW5n
PilhQ2xhc3MKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gTk87Ci19
Ci0KLS0gKE5TUHJvZ3Jlc3MgKilsb2FkT2JqZWN0c09mQ2xhc3M6KENsYXNzPE5TSXRlbVByb3Zp
ZGVyUmVhZGluZz4pYUNsYXNzIGNvbXBsZXRpb246KHZvaWQoXikoTlNBcnJheTxfX2tpbmRvZiBp
ZCA8TlNJdGVtUHJvdmlkZXJSZWFkaW5nPj4gKm9iamVjdHMpKWNvbXBsZXRpb24KLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbmlsOwotfQotCi1AZW5kCi0KLUBpbXBs
ZW1lbnRhdGlvbiBNb2NrRHJhZ1Nlc3Npb24gewotICAgIFJldGFpblB0cjxpZD4gX2xvY2FsQ29u
dGV4dDsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2luZG93OihVSVdpbmRvdyAqKXdp
bmRvdyBhbGxvd01vdmU6KEJPT0wpYWxsb3dNb3ZlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBpbml0
V2l0aEl0ZW1zOkBbIF0gbG9jYXRpb246Q0dQb2ludFplcm8gd2luZG93OndpbmRvdyBhbGxvd01v
dmU6YWxsb3dNb3ZlXTsKLX0KLQotLSAoTlNVSW50ZWdlcilsb2NhbE9wZXJhdGlvbk1hc2sKLXsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotLSAoTlNVSW50
ZWdlcilleHRlcm5hbE9wZXJhdGlvbk1hc2sKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gMDsKLX0KLQotLSAoaWQpc2Vzc2lvbgotewotICAgIHJldHVybiBuaWw7Ci19
Ci0KLS0gKGlkKWxvY2FsQ29udGV4dAotewotICAgIHJldHVybiBfbG9jYWxDb250ZXh0LmdldCgp
OwotfQotCi0tICh2b2lkKXNldExvY2FsQ29udGV4dDooaWQpbG9jYWxDb250ZXh0Ci17Ci0gICAg
X2xvY2FsQ29udGV4dCA9IGxvY2FsQ29udGV4dDsKLX0KLQotQGVuZAotCi1zdGF0aWMgZG91Ymxl
IHByb2dyZXNzSW5jcmVtZW50U3RlcCA9IDAuMDMzOwotc3RhdGljIGRvdWJsZSBwcm9ncmVzc1Rp
bWVTdGVwID0gMC4wMTY7Ci1zdGF0aWMgTlNTdHJpbmcgKlRlc3RXZWJLaXRBUElTaW11bGF0ZUNh
bmNlbEFsbFRvdWNoZXNOb3RpZmljYXRpb25OYW1lID0gQCJUZXN0V2ViS2l0QVBJU2ltdWxhdGVD
YW5jZWxBbGxUb3VjaGVzTm90aWZpY2F0aW9uTmFtZSI7Ci0KLXN0YXRpYyBOU0FycmF5ICpkYXRh
SW50ZXJhY3Rpb25FdmVudE5hbWVzKCkKLXsKLSAgICBzdGF0aWMgTlNBcnJheSAqZXZlbnROYW1l
cyA9IG5pbDsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKLSAgICBkaXNw
YXRjaF9vbmNlKCZvbmNlVG9rZW4sIF4oKSB7Ci0gICAgICAgIGV2ZW50TmFtZXMgPSBAWyBEYXRh
SW50ZXJhY3Rpb25FbnRlckV2ZW50TmFtZSwgRGF0YUludGVyYWN0aW9uT3ZlckV2ZW50TmFtZSwg
RGF0YUludGVyYWN0aW9uUGVyZm9ybU9wZXJhdGlvbkV2ZW50TmFtZSwgRGF0YUludGVyYWN0aW9u
TGVhdmVFdmVudE5hbWUsIERhdGFJbnRlcmFjdGlvblN0YXJ0RXZlbnROYW1lIF07Ci0gICAgfSk7
Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXM7Ci19Ci0KLUBpbnRlcmZhY2UgRGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yQXBwbGljYXRpb24gOiBVSUFwcGxpY2F0aW9uCi1AZW5kCi0KLUBpbXBsZW1lbnRh
dGlvbiBEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3JBcHBsaWNhdGlvbgotLSAodm9pZClfY2FuY2Vs
QWxsVG91Y2hlcwotewotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
cG9zdE5vdGlmaWNhdGlvbk5hbWU6VGVzdFdlYktpdEFQSVNpbXVsYXRlQ2FuY2VsQWxsVG91Y2hl
c05vdGlmaWNhdGlvbk5hbWUgb2JqZWN0Om5pbF07Ci19Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2Vi
VmlldzooVGVzdFdLV2ViVmlldyAqKXdlYlZpZXcKLXsKLSAgICBpZiAoc2VsZiA9IFtzdXBlciBp
bml0XSkgewotICAgICAgICBfd2ViVmlldyA9IHdlYlZpZXc7Ci0gICAgICAgIF9zaG91bGRFbnN1
cmVVSUFwcGxpY2F0aW9uID0gTk87Ci0gICAgICAgIF9zaG91bGRBbGxvd01vdmVPcGVyYXRpb24g
PSBZRVM7Ci0gICAgICAgIF9pc0RvbmVXYWl0aW5nRm9ySW5wdXRTZXNzaW9uID0gdHJ1ZTsKLSAg
ICAgICAgW193ZWJWaWV3IHNldFVJRGVsZWdhdGU6c2VsZl07Ci0gICAgICAgIFtfd2ViVmlldyBf
c2V0SW5wdXREZWxlZ2F0ZTpzZWxmXTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpZGVhbGxvYwotewotICAgIGlmIChbX3dlYlZpZXcgVUlEZWxlZ2F0ZV0gPT0gc2VsZikK
LSAgICAgICAgW193ZWJWaWV3IHNldFVJRGVsZWdhdGU6bmlsXTsKLQotICAgIGlmIChbX3dlYlZp
ZXcgX2lucHV0RGVsZWdhdGVdID09IHNlbGYpCi0gICAgICAgIFtfd2ViVmlldyBfc2V0SW5wdXRE
ZWxlZ2F0ZTpuaWxdOwotCi0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKV9yZXNl
dFNpbXVsYXRlZFN0YXRlCi17Ci0gICAgX3BoYXNlID0gRGF0YUludGVyYWN0aW9uQmVnaW5uaW5n
OwotICAgIF9jdXJyZW50UHJvZ3Jlc3MgPSAwOwotICAgIF9pc0RvbmVXaXRoQ3VycmVudFJ1biA9
IGZhbHNlOwotICAgIF9vYnNlcnZlZEV2ZW50TmFtZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRdKTsKLSAgICBfaW5zZXJ0ZWRBdHRhY2htZW50cyA9IGFkb3B0TlMoW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotICAgIF9yZW1vdmVkQXR0YWNobWVudHMgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAgICBfZmluYWxTZWxlY3Rp
b25SZWN0cyA9IEBbIF07Ci0gICAgX2RyYWdTZXNzaW9uID0gbmlsOwotICAgIF9kcm9wU2Vzc2lv
biA9IG5pbDsKLSAgICBfY3VycmVudERyb3BQcm9wb3NhbCA9IG5pbDsKLSAgICBfbGFzdEtub3du
RHJhZ0NhcmV0UmVjdCA9IENHUmVjdFplcm87Ci0gICAgX3JlbWFpbmluZ0FkZGl0aW9uYWxJdGVt
UmVxdWVzdExvY2F0aW9uc0J5UHJvZ3Jlc3MgPSBuaWw7Ci0gICAgX3F1ZXVlZEFkZGl0aW9uYWxJ
dGVtUmVxdWVzdExvY2F0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dF0pOwotICAgIF9saWZ0UHJldmlld3MgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRdKTsKLX0KLQotLSAoTlNBcnJheSAqKW9ic2VydmVkRXZlbnROYW1lcwotewotICAgIHJl
dHVybiBfb2JzZXJ2ZWRFdmVudE5hbWVzLmdldCgpOwotfQotCi0tICh2b2lkKXNpbXVsYXRlQWxs
VG91Y2hlc0NhbmNlbGVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIFtO
U09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxl
Y3RvcjpAc2VsZWN0b3IoX2FkdmFuY2VQcm9ncmVzcykgb2JqZWN0Om5pbF07Ci0gICAgX3BoYXNl
ID0gRGF0YUludGVyYWN0aW9uQ2FuY2VsbGVkOwotICAgIF9jdXJyZW50UHJvZ3Jlc3MgPSAxOwot
ICAgIF9pc0RvbmVXaXRoQ3VycmVudFJ1biA9IHRydWU7Ci0gICAgaWYgKF9kcmFnU2Vzc2lvbikK
LSAgICAgICAgW1tfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJhZ0ludGVyYWN0
aW9uOltfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25dIHNlc3Npb246X2RyYWdTZXNzaW9uLmdldCgp
IGRpZEVuZFdpdGhPcGVyYXRpb246VUlEcm9wT3BlcmF0aW9uQ2FuY2VsXTsKLX0KLQotLSAodm9p
ZClydW5Gcm9tOihDR1BvaW50KXN0YXJ0TG9jYXRpb24gdG86KENHUG9pbnQpZW5kTG9jYXRpb24K
LXsKLSAgICBbc2VsZiBydW5Gcm9tOnN0YXJ0TG9jYXRpb24gdG86ZW5kTG9jYXRpb24gYWRkaXRp
b25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zOm5pbF07Ci19Ci0KLS0gKHZvaWQpcnVuRnJvbTooQ0dQ
b2ludClzdGFydExvY2F0aW9uIHRvOihDR1BvaW50KWVuZExvY2F0aW9uIGFkZGl0aW9uYWxJdGVt
UmVxdWVzdExvY2F0aW9uczooUHJvZ3Jlc3NUb0NHUG9pbnRWYWx1ZU1hcClhZGRpdGlvbmFsSXRl
bVJlcXVlc3RMb2NhdGlvbnMKLXsKLSAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqZGVmYXVsdENl
bnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKLSAgICBbZGVmYXVs
dENlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihzaW11bGF0ZUFsbFRv
dWNoZXNDYW5jZWxlZDopIG5hbWU6VGVzdFdlYktpdEFQSVNpbXVsYXRlQ2FuY2VsQWxsVG91Y2hl
c05vdGlmaWNhdGlvbk5hbWUgb2JqZWN0Om5pbF07Ci0KLSAgICBpZiAoX3Nob3VsZEVuc3VyZVVJ
QXBwbGljYXRpb24pCi0gICAgICAgIFVJQXBwbGljYXRpb25JbnN0YW50aWF0ZVNpbmdsZXRvbihb
RGF0YUludGVyYWN0aW9uU2ltdWxhdG9yQXBwbGljYXRpb24gY2xhc3NdKTsKLQotICAgIFtzZWxm
IF9yZXNldFNpbXVsYXRlZFN0YXRlXTsKLQotICAgIGlmIChhZGRpdGlvbmFsSXRlbVJlcXVlc3RM
b2NhdGlvbnMpCi0gICAgICAgIF9yZW1haW5pbmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlv
bnNCeVByb2dyZXNzID0gYWRvcHROUyhbYWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zIG11
dGFibGVDb3B5XSk7Ci0KLSAgICBSZXRhaW5QdHI8RGF0YUludGVyYWN0aW9uU2ltdWxhdG9yPiBz
dHJvbmdTZWxmID0gc2VsZjsKLSAgICBmb3IgKE5TU3RyaW5nICpldmVudE5hbWUgaW4gZGF0YUlu
dGVyYWN0aW9uRXZlbnROYW1lcygpKSB7Ci0gICAgICAgIERhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciAqd2Vha1NlbGYgPSBzdHJvbmdTZWxmLmdldCgpOwotICAgICAgICBbd2Vha1NlbGYtPl93ZWJW
aWV3IHBlcmZvcm1BZnRlclJlY2VpdmluZ01lc3NhZ2U6ZXZlbnROYW1lIGFjdGlvbjpeKCkgewot
ICAgICAgICAgICAgW3dlYWtTZWxmLT5fb2JzZXJ2ZWRFdmVudE5hbWVzIGFkZE9iamVjdDpldmVu
dE5hbWVdOwotICAgICAgICB9XTsKLSAgICB9Ci0KLSAgICBfc3RhcnRMb2NhdGlvbiA9IHN0YXJ0
TG9jYXRpb247Ci0gICAgX2VuZExvY2F0aW9uID0gZW5kTG9jYXRpb247Ci0KLSAgICBpZiAoc2Vs
Zi5leHRlcm5hbEl0ZW1Qcm92aWRlcnMuY291bnQpIHsKLSAgICAgICAgX2Ryb3BTZXNzaW9uID0g
YWRvcHROUyhbW01vY2tEcm9wU2Vzc2lvbiBhbGxvY10gaW5pdFdpdGhQcm92aWRlcnM6c2VsZi5l
eHRlcm5hbEl0ZW1Qcm92aWRlcnMgbG9jYXRpb246X3N0YXJ0TG9jYXRpb24gd2luZG93Oltfd2Vi
VmlldyB3aW5kb3ddIGFsbG93TW92ZTpzZWxmLnNob3VsZEFsbG93TW92ZU9wZXJhdGlvbl0pOwot
ICAgICAgICBfcGhhc2UgPSBEYXRhSW50ZXJhY3Rpb25CZWdhbjsKLSAgICAgICAgW3NlbGYgX2Fk
dmFuY2VQcm9ncmVzc107Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgX2RyYWdTZXNzaW9uID0gYWRv
cHROUyhbW01vY2tEcmFnU2Vzc2lvbiBhbGxvY10gaW5pdFdpdGhXaW5kb3c6W193ZWJWaWV3IHdp
bmRvd10gYWxsb3dNb3ZlOnNlbGYuc2hvdWxkQWxsb3dNb3ZlT3BlcmF0aW9uXSk7Ci0gICAgICAg
IFtfZHJhZ1Nlc3Npb24gc2V0TW9ja0xvY2F0aW9uSW5XaW5kb3c6X3N0YXJ0TG9jYXRpb25dOwot
ICAgICAgICBbKGlkIDxVSURyYWdJbnRlcmFjdGlvbkRlbGVnYXRlX0ZvcldlYktpdE9ubHk+KVtf
d2ViVmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gX2RyYWdJbnRlcmFjdGlvbjpbX3dlYlZp
ZXcgZHJhZ0ludGVyYWN0aW9uXSBwcmVwYXJlRm9yU2Vzc2lvbjpfZHJhZ1Nlc3Npb24uZ2V0KCkg
Y29tcGxldGlvbjpeKCkgewotICAgICAgICAgICAgRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yICp3
ZWFrU2VsZiA9IHN0cm9uZ1NlbGYuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAod2Vha1NlbGYtPl9w
aGFzZSA9PSBEYXRhSW50ZXJhY3Rpb25DYW5jZWxsZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgICAgICB3ZWFrU2VsZi0+X3BoYXNlID0gRGF0YUludGVyYWN0aW9uQmVnaW5u
aW5nOwotICAgICAgICAgICAgW3dlYWtTZWxmIF9hZHZhbmNlUHJvZ3Jlc3NdOwotICAgICAgICB9
XTsKLSAgICB9Ci0KLSAgICBVdGlsOjpydW4oJl9pc0RvbmVXaXRoQ3VycmVudFJ1bik7Ci0gICAg
W193ZWJWaWV3IGNsZWFyTWVzc2FnZUhhbmRsZXJzOmRhdGFJbnRlcmFjdGlvbkV2ZW50TmFtZXMo
KV07Ci0gICAgX2ZpbmFsU2VsZWN0aW9uUmVjdHMgPSBbX3dlYlZpZXcgc2VsZWN0aW9uUmVjdHNB
ZnRlclByZXNlbnRhdGlvblVwZGF0ZV07Ci0KLSAgICBbZGVmYXVsdENlbnRlciByZW1vdmVPYnNl
cnZlcjpzZWxmXTsKLX0KLQotLSAoTlNBcnJheSAqKWZpbmFsU2VsZWN0aW9uUmVjdHMKLXsKLSAg
ICByZXR1cm4gX2ZpbmFsU2VsZWN0aW9uUmVjdHMuZ2V0KCk7Ci19Ci0KLS0gKHZvaWQpX2NvbmNs
dWRlRGF0YUludGVyYWN0aW9uQW5kUGVyZm9ybU9wZXJhdGlvbklmTmVjZXNzYXJ5Ci17Ci0gICAg
X2xhc3RLbm93bkRyYWdDYXJldFJlY3QgPSBbX3dlYlZpZXcgX2RyYWdDYXJldFJlY3RdOwotICAg
IGF1dG8gb3BlcmF0aW9uID0gW19jdXJyZW50RHJvcFByb3Bvc2FsIG9wZXJhdGlvbl07Ci0gICAg
aWYgKG9wZXJhdGlvbiAhPSBVSURyb3BPcGVyYXRpb25DYW5jZWwgJiYgb3BlcmF0aW9uICE9IFVJ
RHJvcE9wZXJhdGlvbkZvcmJpZGRlbikgewotICAgICAgICBbW193ZWJWaWV3IGRyb3BJbnRlcmFj
dGlvbkRlbGVnYXRlXSBkcm9wSW50ZXJhY3Rpb246W193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbl0g
cGVyZm9ybURyb3A6X2Ryb3BTZXNzaW9uLmdldCgpXTsKLSAgICAgICAgX3BoYXNlID0gRGF0YUlu
dGVyYWN0aW9uUGVyZm9ybWluZzsKLSAgICB9IGVsc2UgewotICAgICAgICBfaXNEb25lV2l0aEN1
cnJlbnRSdW4gPSBZRVM7Ci0gICAgICAgIF9waGFzZSA9IERhdGFJbnRlcmFjdGlvbkNhbmNlbGxl
ZDsKLSAgICB9Ci0KLSAgICBbW193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcm9w
SW50ZXJhY3Rpb246W193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbl0gc2Vzc2lvbkRpZEVuZDpfZHJv
cFNlc3Npb24uZ2V0KCldOwotCi0gICAgaWYgKF9kcmFnU2Vzc2lvbikKLSAgICAgICAgW1tfd2Vi
VmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJhZ0ludGVyYWN0aW9uOltfd2ViVmlldyBk
cmFnSW50ZXJhY3Rpb25dIHNlc3Npb246X2RyYWdTZXNzaW9uLmdldCgpIGRpZEVuZFdpdGhPcGVy
YXRpb246b3BlcmF0aW9uXTsKLX0KLQotLSAodm9pZClfZW5xdWV1ZVBlbmRpbmdBZGRpdGlvbmFs
SXRlbVJlcXVlc3RMb2NhdGlvbnMKLXsKLSAgICBOU011dGFibGVBcnJheSAqcHJvZ3Jlc3NWYWx1
ZXNUb1JlbW92ZSA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgZm9yIChOU051bWJlciAq
cHJvZ3Jlc3NWYWx1ZSBpbiBfcmVtYWluaW5nQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25z
QnlQcm9ncmVzcy5nZXQoKSkgewotICAgICAgICBkb3VibGUgcHJvZ3Jlc3MgPSBwcm9ncmVzc1Zh
bHVlLmRvdWJsZVZhbHVlOwotICAgICAgICBpZiAocHJvZ3Jlc3MgPiBfY3VycmVudFByb2dyZXNz
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFtwcm9ncmVzc1ZhbHVlc1RvUmVtb3Zl
IGFkZE9iamVjdDpwcm9ncmVzc1ZhbHVlXTsKLSAgICAgICAgW19xdWV1ZWRBZGRpdGlvbmFsSXRl
bVJlcXVlc3RMb2NhdGlvbnMgYWRkT2JqZWN0OltfcmVtYWluaW5nQWRkaXRpb25hbEl0ZW1SZXF1
ZXN0TG9jYXRpb25zQnlQcm9ncmVzcyBvYmplY3RGb3JLZXk6cHJvZ3Jlc3NWYWx1ZV1dOwotICAg
IH0KLQotICAgIGZvciAoTlNOdW1iZXIgKnByb2dyZXNzVG9SZW1vdmUgaW4gcHJvZ3Jlc3NWYWx1
ZXNUb1JlbW92ZSkKLSAgICAgICAgW19yZW1haW5pbmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2Nh
dGlvbnNCeVByb2dyZXNzIHJlbW92ZU9iamVjdEZvcktleTpwcm9ncmVzc1RvUmVtb3ZlXTsKLX0K
LQotLSAoQk9PTClfc2VuZFF1ZXVlZEFkZGl0aW9uYWxJdGVtUmVxdWVzdAotewotICAgIGlmICgh
W19xdWV1ZWRBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnMgY291bnRdKQotICAgICAgICBy
ZXR1cm4gTk87Ci0KLSAgICBSZXRhaW5QdHI8TlNWYWx1ZT4gcmVxdWVzdExvY2F0aW9uVmFsdWUg
PSBbX3F1ZXVlZEFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9ucyBvYmplY3RBdEluZGV4OjBd
OwotICAgIFtfcXVldWVkQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zIHJlbW92ZU9iamVj
dEF0SW5kZXg6MF07Ci0KLSAgICBhdXRvIHJlcXVlc3RMb2NhdGlvbiA9IFtbX3dlYlZpZXcgd2lu
ZG93XSBjb252ZXJ0UG9pbnQ6W3JlcXVlc3RMb2NhdGlvblZhbHVlIENHUG9pbnRWYWx1ZV0gdG9W
aWV3Ol93ZWJWaWV3LmdldCgpXTsKLSAgICBbKGlkIDxVSURyYWdJbnRlcmFjdGlvbkRlbGVnYXRl
X1Byb3Bvc2VkX1NQSV8zMzE0NjgwMz4pW193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRl
XSBfZHJhZ0ludGVyYWN0aW9uOltfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25dIGl0ZW1zRm9yQWRk
aW5nVG9TZXNzaW9uOl9kcmFnU2Vzc2lvbi5nZXQoKSB3aXRoVG91Y2hBdFBvaW50OnJlcXVlc3RM
b2NhdGlvbiBjb21wbGV0aW9uOltkcmFnU2Vzc2lvbiA9IF9kcmFnU2Vzc2lvbiwgZHJvcFNlc3Np
b24gPSBfZHJvcFNlc3Npb25dIChOU0FycmF5ICppdGVtcykgewotICAgICAgICBbZHJhZ1Nlc3Np
b24gYWRkSXRlbXM6aXRlbXNdOwotICAgICAgICBbZHJvcFNlc3Npb24gYWRkSXRlbXM6aXRlbXNd
OwotICAgIH1dOwotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKHZvaWQpX2FkdmFuY2VQcm9ncmVz
cwotewotICAgIFtzZWxmIF9lbnF1ZXVlUGVuZGluZ0FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0
aW9uc107Ci0gICAgaWYgKFtzZWxmIF9zZW5kUXVldWVkQWRkaXRpb25hbEl0ZW1SZXF1ZXN0XSkg
ewotICAgICAgICBbc2VsZiBfc2NoZWR1bGVBZHZhbmNlUHJvZ3Jlc3NdOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgX2xhc3RLbm93bkRyYWdDYXJldFJlY3QgPSBbX3dlYlZpZXcgX2Ry
YWdDYXJldFJlY3RdOwotICAgIF9jdXJyZW50UHJvZ3Jlc3MgKz0gcHJvZ3Jlc3NJbmNyZW1lbnRT
dGVwOwotICAgIENHUG9pbnQgbG9jYXRpb25JbldpbmRvdyA9IHNlbGYuX2N1cnJlbnRMb2NhdGlv
bjsKLSAgICBbX2RyYWdTZXNzaW9uIHNldE1vY2tMb2NhdGlvbkluV2luZG93OmxvY2F0aW9uSW5X
aW5kb3ddOwotICAgIFtfZHJvcFNlc3Npb24gc2V0TW9ja0xvY2F0aW9uSW5XaW5kb3c6bG9jYXRp
b25JbldpbmRvd107Ci0KLSAgICBpZiAoX2N1cnJlbnRQcm9ncmVzcyA+PSAxKSB7Ci0gICAgICAg
IF9jdXJyZW50UHJvZ3Jlc3MgPSAxOwotICAgICAgICBbc2VsZiBfY29uY2x1ZGVEYXRhSW50ZXJh
Y3Rpb25BbmRQZXJmb3JtT3BlcmF0aW9uSWZOZWNlc3NhcnldOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgc3dpdGNoIChfcGhhc2UpIHsKLSAgICBjYXNlIERhdGFJbnRlcmFjdGlvbkJl
Z2lubmluZzogewotICAgICAgICBOU011dGFibGVBcnJheTxVSUl0ZW1Qcm92aWRlciAqPiAqaXRl
bVByb3ZpZGVycyA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgICAgIE5TQXJyYXkgKml0
ZW1zID0gW1tfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJhZ0ludGVyYWN0aW9u
Oltfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25dIGl0ZW1zRm9yQmVnaW5uaW5nU2Vzc2lvbjpfZHJh
Z1Nlc3Npb24uZ2V0KCldOwotICAgICAgICBpZiAoIWl0ZW1zLmNvdW50KSB7Ci0gICAgICAgICAg
ICBfcGhhc2UgPSBEYXRhSW50ZXJhY3Rpb25DYW5jZWxsZWQ7Ci0gICAgICAgICAgICBfY3VycmVu
dFByb2dyZXNzID0gMTsKLSAgICAgICAgICAgIF9pc0RvbmVXaXRoQ3VycmVudFJ1biA9IHRydWU7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKFVJRHJhZ0l0
ZW0gKml0ZW0gaW4gaXRlbXMpIHsKLSAgICAgICAgICAgIFtpdGVtUHJvdmlkZXJzIGFkZE9iamVj
dDppdGVtLml0ZW1Qcm92aWRlcl07Ci0gICAgICAgICAgICBVSVRhcmdldGVkRHJhZ1ByZXZpZXcg
KmxpZnRQcmV2aWV3ID0gW1tfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJhZ0lu
dGVyYWN0aW9uOltfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25dIHByZXZpZXdGb3JMaWZ0aW5nSXRl
bTppdGVtIHNlc3Npb246X2RyYWdTZXNzaW9uLmdldCgpXTsKLSAgICAgICAgICAgIEVYUEVDVF9U
UlVFKCEhbGlmdFByZXZpZXcpOwotICAgICAgICAgICAgaWYgKGxpZnRQcmV2aWV3KQotICAgICAg
ICAgICAgICAgIFtfbGlmdFByZXZpZXdzIGFkZE9iamVjdDpsaWZ0UHJldmlld107Ci0gICAgICAg
IH0KLQotICAgICAgICBfZHJvcFNlc3Npb24gPSBhZG9wdE5TKFtbTW9ja0Ryb3BTZXNzaW9uIGFs
bG9jXSBpbml0V2l0aFByb3ZpZGVyczppdGVtUHJvdmlkZXJzIGxvY2F0aW9uOnNlbGYuX2N1cnJl
bnRMb2NhdGlvbiB3aW5kb3c6W193ZWJWaWV3IHdpbmRvd10gYWxsb3dNb3ZlOnNlbGYuc2hvdWxk
QWxsb3dNb3ZlT3BlcmF0aW9uXSk7Ci0gICAgICAgIFtfZHJhZ1Nlc3Npb24gc2V0SXRlbXM6aXRl
bXNdOwotICAgICAgICBfc291cmNlSXRlbVByb3ZpZGVycyA9IGl0ZW1Qcm92aWRlcnM7Ci0gICAg
ICAgIGlmIChzZWxmLnNob3dDdXN0b21BY3Rpb25TaGVldEJsb2NrKSB7Ci0gICAgICAgICAgICAv
LyBEZWZlciBwcm9ncmVzcyB1bnRpbCB0aGUgY3VzdG9tIGFjdGlvbiBzaGVldCBpcyBkaXNtaXNz
ZWQuCi0gICAgICAgICAgICBhdXRvIHN0YXJ0TG9jYXRpb25JblZpZXcgPSBbW193ZWJWaWV3IHdp
bmRvd10gY29udmVydFBvaW50Ol9zdGFydExvY2F0aW9uIHRvVmlldzpfd2ViVmlldy5nZXQoKV07
Ci0gICAgICAgICAgICBbX3dlYlZpZXcgX3NpbXVsYXRlTG9uZ1ByZXNzQWN0aW9uQXRMb2NhdGlv
bjpzdGFydExvY2F0aW9uSW5WaWV3XTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIFtbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVdIGRyYWdJbnRlcmFj
dGlvbjpbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uXSBzZXNzaW9uV2lsbEJlZ2luOl9kcmFnU2Vz
c2lvbi5nZXQoKV07Ci0KLSAgICAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gcmV0YWluZWRXZWJW
aWV3ID0gX3dlYlZpZXc7Ci0gICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIF4oKSB7Ci0gICAgICAgICAgICBbcmV0YWluZWRXZWJWaWV3IHJlc2lnbkZpcnN0
UmVzcG9uZGVyXTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgX3BoYXNlID0gRGF0YUludGVyYWN0
aW9uQmVnYW47Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIERhdGFJbnRlcmFjdGlv
bkJlZ2FuOgotICAgICAgICBbW193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcm9w
SW50ZXJhY3Rpb246W193ZWJWaWV3IGRyb3BJbnRlcmFjdGlvbl0gc2Vzc2lvbkRpZEVudGVyOl9k
cm9wU2Vzc2lvbi5nZXQoKV07Ci0gICAgICAgIF9waGFzZSA9IERhdGFJbnRlcmFjdGlvbkVudGVy
ZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRGF0YUludGVyYWN0aW9uRW50ZXJlZDogewot
ICAgICAgICBfY3VycmVudERyb3BQcm9wb3NhbCA9IFtbX3dlYlZpZXcgZHJvcEludGVyYWN0aW9u
RGVsZWdhdGVdIGRyb3BJbnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJvcEludGVyYWN0aW9uXSBzZXNz
aW9uRGlkVXBkYXRlOl9kcm9wU2Vzc2lvbi5nZXQoKV07Ci0gICAgICAgIGlmICghW3NlbGYgc2hv
dWxkQWxsb3dNb3ZlT3BlcmF0aW9uXSAmJiBbX2N1cnJlbnREcm9wUHJvcG9zYWwgb3BlcmF0aW9u
XSA9PSBVSURyb3BPcGVyYXRpb25Nb3ZlKQotICAgICAgICAgICAgX2N1cnJlbnREcm9wUHJvcG9z
YWwgPSBhZG9wdE5TKFtbVUlEcm9wUHJvcG9zYWwgYWxsb2NdIGluaXRXaXRoRHJvcE9wZXJhdGlv
bjpVSURyb3BPcGVyYXRpb25DYW5jZWxdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIFtzZWxmIF9zY2hlZHVsZUFkdmFu
Y2VQcm9ncmVzc107Ci19Ci0KLS0gKENHUG9pbnQpX2N1cnJlbnRMb2NhdGlvbgotewotICAgIENH
RmxvYXQgZGlzdGFuY2VYID0gX2VuZExvY2F0aW9uLnggLSBfc3RhcnRMb2NhdGlvbi54OwotICAg
IENHRmxvYXQgZGlzdGFuY2VZID0gX2VuZExvY2F0aW9uLnkgLSBfc3RhcnRMb2NhdGlvbi55Owot
ICAgIHJldHVybiBDR1BvaW50TWFrZShfc3RhcnRMb2NhdGlvbi54ICsgX2N1cnJlbnRQcm9ncmVz
cyAqIGRpc3RhbmNlWCwgX3N0YXJ0TG9jYXRpb24ueSArIF9jdXJyZW50UHJvZ3Jlc3MgKiBkaXN0
YW5jZVkpOwotfQotCi0tICh2b2lkKV9zY2hlZHVsZUFkdmFuY2VQcm9ncmVzcwotewotICAgIFtO
U09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxl
Y3RvcjpAc2VsZWN0b3IoX2FkdmFuY2VQcm9ncmVzcykgb2JqZWN0Om5pbF07Ci0gICAgW3NlbGYg
cGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfYWR2YW5jZVByb2dyZXNzKSB3aXRoT2JqZWN0Om5p
bCBhZnRlckRlbGF5OnByb2dyZXNzVGltZVN0ZXBdOwotfQotCi0tIChOU0FycmF5ICopc291cmNl
SXRlbVByb3ZpZGVycwotewotICAgIHJldHVybiBfc291cmNlSXRlbVByb3ZpZGVycy5nZXQoKTsK
LX0KLQotLSAoTlNBcnJheSAqKWV4dGVybmFsSXRlbVByb3ZpZGVycwotewotICAgIHJldHVybiBf
ZXh0ZXJuYWxJdGVtUHJvdmlkZXJzLmdldCgpOwotfQotCi0tICh2b2lkKXNldEV4dGVybmFsSXRl
bVByb3ZpZGVyczooTlNBcnJheSAqKWV4dGVybmFsSXRlbVByb3ZpZGVycwotewotICAgIF9leHRl
cm5hbEl0ZW1Qcm92aWRlcnMgPSBhZG9wdE5TKFtleHRlcm5hbEl0ZW1Qcm92aWRlcnMgY29weV0p
OwotfQotCi0tIChEYXRhSW50ZXJhY3Rpb25QaGFzZSlwaGFzZQotewotICAgIHJldHVybiBfcGhh
c2U7Ci19Ci0KLS0gKE5TQXJyYXk8VUlUYXJnZXRlZERyYWdQcmV2aWV3ICo+ICopbGlmdFByZXZp
ZXdzCi17Ci0gICAgcmV0dXJuIF9saWZ0UHJldmlld3MuZ2V0KCk7Ci19Ci0KLS0gKENHUmVjdCls
YXN0S25vd25EcmFnQ2FyZXRSZWN0Ci17Ci0gICAgcmV0dXJuIF9sYXN0S25vd25EcmFnQ2FyZXRS
ZWN0OwotfQotCi0tICh2b2lkKXdhaXRGb3JJbnB1dFNlc3Npb24KLXsKLSAgICBfaXNEb25lV2Fp
dGluZ0ZvcklucHV0U2Vzc2lvbiA9IGZhbHNlOwotCi0gICAgLy8gV2FpdGluZyBmb3IgYW4gaW5w
dXQgc2Vzc2lvbiBpbXBsaWVzIHRoYXQgd2Ugc2hvdWxkIGFsbG93IGlucHV0IHNlc3Npb25zIHRv
IGJlZ2luLgotICAgIHNlbGYuYWxsb3dzRm9jdXNUb1N0YXJ0SW5wdXRTZXNzaW9uID0gWUVTOwot
Ci0gICAgVXRpbDo6cnVuKCZfaXNEb25lV2FpdGluZ0ZvcklucHV0U2Vzc2lvbik7Ci19Ci0KLS0g
KE5TQXJyYXk8X1dLQXR0YWNobWVudCAqPiAqKWluc2VydGVkQXR0YWNobWVudHMKLXsKLSAgICBy
ZXR1cm4gX2luc2VydGVkQXR0YWNobWVudHMuZ2V0KCk7Ci19Ci0KLS0gKE5TQXJyYXk8X1dLQXR0
YWNobWVudCAqPiAqKXJlbW92ZWRBdHRhY2htZW50cwotewotICAgIHJldHVybiBfcmVtb3ZlZEF0
dGFjaG1lbnRzLmdldCgpOwotfQotCi0tICh2b2lkKWVuZERhdGFUcmFuc2ZlcgotewotICAgIFtb
X3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVdIGRyYWdJbnRlcmFjdGlvbjpbX3dlYlZp
ZXcgZHJhZ0ludGVyYWN0aW9uXSBzZXNzaW9uRGlkVHJhbnNmZXJJdGVtczpfZHJhZ1Nlc3Npb24u
Z2V0KCldOwotfQotCi0jcHJhZ21hIG1hcmsgLSBXS1VJRGVsZWdhdGVQcml2YXRlCi0KLS0gKHZv
aWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGF0YUludGVyYWN0aW9uT3BlcmF0aW9u
V2FzSGFuZGxlZDooQk9PTCloYW5kbGVkIGZvclNlc3Npb246KGlkKXNlc3Npb24gaXRlbVByb3Zp
ZGVyczooTlNBcnJheTxVSUl0ZW1Qcm92aWRlciAqPiAqKWl0ZW1Qcm92aWRlcnMKLXsKLSAgICBf
aXNEb25lV2l0aEN1cnJlbnRSdW4gPSB0cnVlOwotCi0gICAgaWYgKHNlbGYuZGF0YUludGVyYWN0
aW9uT3BlcmF0aW9uQ29tcGxldGlvbkJsb2NrKQotICAgICAgICBzZWxmLmRhdGFJbnRlcmFjdGlv
bk9wZXJhdGlvbkNvbXBsZXRpb25CbG9jayhoYW5kbGVkLCBpdGVtUHJvdmlkZXJzKTsKLX0KLQot
LSAoTlNVSW50ZWdlcilfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyB3aWxsVXBkYXRlRGF0
YUludGVyYWN0aW9uT3BlcmF0aW9uVG9PcGVyYXRpb246KE5TVUludGVnZXIpb3BlcmF0aW9uIGZv
clNlc3Npb246KGlkKXNlc3Npb24KLXsKLSAgICByZXR1cm4gc2VsZi5vdmVycmlkZURhdGFJbnRl
cmFjdGlvbk9wZXJhdGlvbkJsb2NrID8gc2VsZi5vdmVycmlkZURhdGFJbnRlcmFjdGlvbk9wZXJh
dGlvbkJsb2NrKG9wZXJhdGlvbiwgc2Vzc2lvbikgOiBvcGVyYXRpb247Ci19Ci0KLS0gKE5TQXJy
YXkgKilfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBhZGp1c3RlZERhdGFJbnRlcmFjdGlv
bkl0ZW1Qcm92aWRlcnNGb3JJdGVtUHJvdmlkZXI6KFVJSXRlbVByb3ZpZGVyICopaXRlbVByb3Zp
ZGVyIHJlcHJlc2VudGluZ09iamVjdHM6KE5TQXJyYXkgKilyZXByZXNlbnRpbmdPYmplY3RzIGFk
ZGl0aW9uYWxEYXRhOihOU0RpY3Rpb25hcnkgKilhZGRpdGlvbmFsRGF0YQotewotICAgIHJldHVy
biBzZWxmLmNvbnZlcnRJdGVtUHJvdmlkZXJzQmxvY2sgPyBzZWxmLmNvbnZlcnRJdGVtUHJvdmlk
ZXJzQmxvY2soaXRlbVByb3ZpZGVyLCByZXByZXNlbnRpbmdPYmplY3RzLCBhZGRpdGlvbmFsRGF0
YSkgOiBAWyBpdGVtUHJvdmlkZXIgXTsKLX0KLQotLSAoQk9PTClfd2ViVmlldzooV0tXZWJWaWV3
ICopd2ViVmlldyBzaG93Q3VzdG9tU2hlZXRGb3JFbGVtZW50OihfV0tBY3RpdmF0ZWRFbGVtZW50
SW5mbyAqKWVsZW1lbnQKLXsKLSAgICBpZiAoIXNlbGYuc2hvd0N1c3RvbUFjdGlvblNoZWV0Qmxv
Y2spCi0gICAgICAgIHJldHVybiBOTzsKLQotICAgIFJldGFpblB0cjxEYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3I+IHN0cm9uZ1NlbGYgPSBzZWxmOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIF4oKSB7Ci0gICAgICAgIERhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciAqd2Vha1NlbGYgPSBzdHJvbmdTZWxmLmdldCgpOwotICAgICAgICBbW3dlYWtTZWxmLT5fd2Vi
VmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJhZ0ludGVyYWN0aW9uOlt3ZWFrU2VsZi0+
X3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uXSBzZXNzaW9uV2lsbEJlZ2luOndlYWtTZWxmLT5fZHJh
Z1Nlc3Npb24uZ2V0KCldOwotICAgICAgICB3ZWFrU2VsZi0+X3BoYXNlID0gRGF0YUludGVyYWN0
aW9uQmVnYW47Ci0gICAgICAgIFt3ZWFrU2VsZiBfc2NoZWR1bGVBZHZhbmNlUHJvZ3Jlc3NdOwot
ICAgIH0pOwotCi0gICAgcmV0dXJuIHNlbGYuc2hvd0N1c3RvbUFjdGlvblNoZWV0QmxvY2soZWxl
bWVudCk7Ci19Ci0KLS0gKE5TQXJyYXk8VUlEcmFnSXRlbSAqPiAqKV93ZWJWaWV3OihXS1dlYlZp
ZXcgKil3ZWJWaWV3IHdpbGxQZXJmb3JtRHJvcFdpdGhTZXNzaW9uOihpZCA8VUlEcm9wU2Vzc2lv
bj4pc2Vzc2lvbgotewotICAgIHJldHVybiBzZWxmLm92ZXJyaWRlUGVyZm9ybURyb3BCbG9jayA/
IHNlbGYub3ZlcnJpZGVQZXJmb3JtRHJvcEJsb2NrKHNlc3Npb24pIDogc2Vzc2lvbi5pdGVtczsK
LX0KLQotLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRJbnNlcnRBdHRh
Y2htZW50OihfV0tBdHRhY2htZW50ICopYXR0YWNobWVudAotewotICAgIFtfaW5zZXJ0ZWRBdHRh
Y2htZW50cyBhZGRPYmplY3Q6YXR0YWNobWVudF07Ci19Ci0KLS0gKHZvaWQpX3dlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXcgZGlkUmVtb3ZlQXR0YWNobWVudDooX1dLQXR0YWNobWVudCAqKWF0
dGFjaG1lbnQKLXsKLSAgICBbX3JlbW92ZWRBdHRhY2htZW50cyBhZGRPYmplY3Q6YXR0YWNobWVu
dF07Ci19Ci0KLSNwcmFnbWEgbWFyayAtIF9XS0lucHV0RGVsZWdhdGUKLQotLSAoQk9PTClfd2Vi
VmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBmb2N1c1Nob3VsZFN0YXJ0SW5wdXRTZXNzaW9uOihp
ZCA8X1dLRm9jdXNlZEVsZW1lbnRJbmZvPilpbmZvCi17Ci0gICAgcmV0dXJuIF9hbGxvd3NGb2N1
c1RvU3RhcnRJbnB1dFNlc3Npb247Ci19Ci0KLS0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAq
KXdlYlZpZXcgZGlkU3RhcnRJbnB1dFNlc3Npb246KGlkIDxfV0tGb3JtSW5wdXRTZXNzaW9uPilp
bnB1dFNlc3Npb24KLXsKLSAgICBfaXNEb25lV2FpdGluZ0ZvcklucHV0U2Vzc2lvbiA9IHRydWU7
Ci19Ci0KLUBlbmQKLQotI2VuZGlmIC8vIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRHJhZ0FuZERyb3BTaW11bGF0b3JJT1MubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40M2VlY2Q5NDk0ZDU5NjRmNTA3MTE3MDlkNjAyZjEzZDY4OTRjYWJlCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRHJhZ0FuZERyb3BTaW11bGF0b3JJ
T1MubW0KQEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRHJhZ0FuZERyb3BTaW11bGF0b3IuaCIKKworI2lmIEVOQUJMRShEUkFHX1NV
UFBPUlQpICYmIFBMQVRGT1JNKElPUykgJiYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiSW5z
dGFuY2VNZXRob2RTd2l6emxlci5oIgorI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNp
bXBvcnQgIlVJS2l0U1BJLmgiCisKKyNpbXBvcnQgPFVJS2l0L1VJRHJhZ0ludGVyYWN0aW9uLmg+
CisjaW1wb3J0IDxVSUtpdC9VSURyYWdJdGVtLmg+CisjaW1wb3J0IDxVSUtpdC9VSUludGVyYWN0
aW9uLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2Vi
S2l0L19XS0ZvY3VzZWRFbGVtZW50SW5mby5oPgorI2ltcG9ydCA8V2ViS2l0L19XS0Zvcm1JbnB1
dFNlc3Npb24uaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9Tb2Z0
TGlua2luZy5oPgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKFVJS2l0KQorU09GVF9MSU5LKFVJS2l0
LCBVSUFwcGxpY2F0aW9uSW5zdGFudGlhdGVTaW5nbGV0b24sIHZvaWQsIChDbGFzcyBzaW5nbGV0
b25DbGFzcyksIChzaW5nbGV0b25DbGFzcykpCisKK3VzaW5nIG5hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJOworCitAaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChEcmFnQW5kRHJvcFRlc3RpbmcpCisK
Ky0gKFVJVmlldyAqKV9kcmFnRHJvcEludGVyYWN0aW9uVmlldworeworICAgIHJldHVybiBbc2Vs
ZiB2YWx1ZUZvcktleTpAIl9jdXJyZW50Q29udGVudFZpZXciXTsKK30KKworLSAoaWQgPFVJRHJv
cEludGVyYWN0aW9uRGVsZWdhdGU+KWRyb3BJbnRlcmFjdGlvbkRlbGVnYXRlCit7CisgICAgcmV0
dXJuIChpZCA8VUlEcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZT4pc2VsZi5fZHJhZ0Ryb3BJbnRlcmFj
dGlvblZpZXc7Cit9CisKKy0gKGlkIDxVSURyYWdJbnRlcmFjdGlvbkRlbGVnYXRlPilkcmFnSW50
ZXJhY3Rpb25EZWxlZ2F0ZQoreworICAgIHJldHVybiAoaWQgPFVJRHJhZ0ludGVyYWN0aW9uRGVs
ZWdhdGU+KXNlbGYuX2RyYWdEcm9wSW50ZXJhY3Rpb25WaWV3OworfQorCistIChVSURyb3BJbnRl
cmFjdGlvbiAqKWRyb3BJbnRlcmFjdGlvbgoreworICAgIFVJVmlldyAqaW50ZXJhY3Rpb25WaWV3
ID0gc2VsZi5fZHJhZ0Ryb3BJbnRlcmFjdGlvblZpZXc7CisgICAgZm9yIChpZCA8VUlJbnRlcmFj
dGlvbj4gaW50ZXJhY3Rpb24gaW4gaW50ZXJhY3Rpb25WaWV3LmludGVyYWN0aW9ucykgeworICAg
ICAgICBpZiAoW2ludGVyYWN0aW9uIGlzS2luZE9mQ2xhc3M6W1VJRHJvcEludGVyYWN0aW9uIGNs
YXNzXV0pCisgICAgICAgICAgICByZXR1cm4gKFVJRHJvcEludGVyYWN0aW9uICopaW50ZXJhY3Rp
b247CisgICAgfQorICAgIHJldHVybiBuaWw7Cit9CisKKy0gKFVJRHJhZ0ludGVyYWN0aW9uICop
ZHJhZ0ludGVyYWN0aW9uCit7CisgICAgVUlWaWV3ICppbnRlcmFjdGlvblZpZXcgPSBzZWxmLl9k
cmFnRHJvcEludGVyYWN0aW9uVmlldzsKKyAgICBmb3IgKGlkIDxVSUludGVyYWN0aW9uPiBpbnRl
cmFjdGlvbiBpbiBpbnRlcmFjdGlvblZpZXcuaW50ZXJhY3Rpb25zKSB7CisgICAgICAgIGlmIChb
aW50ZXJhY3Rpb24gaXNLaW5kT2ZDbGFzczpbVUlEcmFnSW50ZXJhY3Rpb24gY2xhc3NdXSkKKyAg
ICAgICAgICAgIHJldHVybiAoVUlEcmFnSW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbjsKKyAgICB9
CisgICAgcmV0dXJuIG5pbDsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gTW9ja0RyYWdE
cm9wU2Vzc2lvbgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJdGVtczooTlNBcnJheSA8VUlE
cmFnSXRlbSAqPiopaXRlbXMgbG9jYXRpb246KENHUG9pbnQpbG9jYXRpb25JbldpbmRvdyB3aW5k
b3c6KFVJV2luZG93ICopd2luZG93IGFsbG93TW92ZTooQk9PTClhbGxvd01vdmUKK3sKKyAgICBp
ZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgICAgICBfbW9ja0l0ZW1zID0gaXRlbXM7Cisg
ICAgICAgIF9tb2NrTG9jYXRpb25JbldpbmRvdyA9IGxvY2F0aW9uSW5XaW5kb3c7CisgICAgICAg
IF93aW5kb3cgPSB3aW5kb3c7CisgICAgICAgIF9hbGxvd01vdmUgPSBhbGxvd01vdmU7CisgICAg
fQorICAgIHJldHVybiBzZWxmOworfQorCistIChCT09MKWFsbG93c01vdmVPcGVyYXRpb24KK3sK
KyAgICByZXR1cm4gX2FsbG93TW92ZTsKK30KKworLSAoQk9PTClpc1Jlc3RyaWN0ZWRUb0RyYWdn
aW5nQXBwbGljYXRpb24KK3sKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKEJPT0wpaGFzSXRlbXND
b25mb3JtaW5nVG9UeXBlSWRlbnRpZmllcnM6KE5TQXJyYXk8TlNTdHJpbmcgKj4gKil0eXBlSWRl
bnRpZmllcnMKK3sKKyAgICBmb3IgKE5TU3RyaW5nICp0eXBlSWRlbnRpZmllciBpbiB0eXBlSWRl
bnRpZmllcnMpIHsKKyAgICAgICAgQk9PTCBoYXNJdGVtQ29uZm9ybWluZ1RvVHlwZSA9IE5POwor
ICAgICAgICBmb3IgKFVJRHJhZ0l0ZW0gKml0ZW0gaW4gc2VsZi5pdGVtcykKKyAgICAgICAgICAg
IGhhc0l0ZW1Db25mb3JtaW5nVG9UeXBlIHw9IFtbaXRlbS5pdGVtUHJvdmlkZXIgcmVnaXN0ZXJl
ZFR5cGVJZGVudGlmaWVyc10gY29udGFpbnNPYmplY3Q6dHlwZUlkZW50aWZpZXJdOworICAgICAg
ICBpZiAoIWhhc0l0ZW1Db25mb3JtaW5nVG9UeXBlKQorICAgICAgICAgICAgcmV0dXJuIE5POwor
ICAgIH0KKyAgICByZXR1cm4gWUVTOworfQorCistIChCT09MKWNhbkxvYWRPYmplY3RzT2ZDbGFz
czooQ2xhc3M8VUlJdGVtUHJvdmlkZXJSZWFkaW5nPilhQ2xhc3MKK3sKKyAgICBmb3IgKFVJRHJh
Z0l0ZW0gKml0ZW0gaW4gc2VsZi5pdGVtcykgeworICAgICAgICBpZiAoW2l0ZW0uaXRlbVByb3Zp
ZGVyIGNhbkxvYWRPYmplY3RPZkNsYXNzOmFDbGFzc10pCisgICAgICAgICAgICByZXR1cm4gWUVT
OworICAgIH0KKyAgICByZXR1cm4gTk87Cit9CisKKy0gKEJPT0wpY2FuTG9hZE9iamVjdHNPZkNs
YXNzZXM6KE5TQXJyYXk8Q2xhc3M8VUlJdGVtUHJvdmlkZXJSZWFkaW5nPj4gKiljbGFzc2VzCit7
CisgICAgZm9yIChDbGFzczxVSUl0ZW1Qcm92aWRlclJlYWRpbmc+IGFDbGFzcyBpbiBjbGFzc2Vz
KSB7CisgICAgICAgIEJPT0wgY2FuTG9hZCA9IE5POworICAgICAgICBmb3IgKFVJRHJhZ0l0ZW0g
Kml0ZW0gaW4gc2VsZi5pdGVtcykKKyAgICAgICAgICAgIGNhbkxvYWQgfD0gW2l0ZW0uaXRlbVBy
b3ZpZGVyIGNhbkxvYWRPYmplY3RPZkNsYXNzOmFDbGFzc107CisgICAgICAgIGlmICghY2FuTG9h
ZCkKKyAgICAgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgcmV0dXJuIFlFUzsKK30KKwor
LSAoTlNBcnJheTxVSURyYWdJdGVtICo+ICopaXRlbXMKK3sKKyAgICByZXR1cm4gX21vY2tJdGVt
cy5nZXQoKTsKK30KKworLSAodm9pZClzZXRJdGVtczooTlNBcnJheTxVSURyYWdJdGVtICo+ICop
aXRlbXMKK3sKKyAgICBfbW9ja0l0ZW1zID0gaXRlbXM7Cit9CisKKy0gKHZvaWQpYWRkSXRlbXM6
KE5TQXJyYXk8VUlEcmFnSXRlbSAqPiAqKWl0ZW1zCit7CisgICAgaWYgKCFbaXRlbXMgY291bnRd
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIVtfbW9ja0l0ZW1zIGNvdW50XSkKKyAgICAg
ICAgX21vY2tJdGVtcyA9IGl0ZW1zOworICAgIGVsc2UKKyAgICAgICAgX21vY2tJdGVtcyA9IFtf
bW9ja0l0ZW1zIGFycmF5QnlBZGRpbmdPYmplY3RzRnJvbUFycmF5Oml0ZW1zXTsKK30KKworLSAo
Q0dQb2ludClsb2NhdGlvbkluVmlldzooVUlWaWV3ICopdmlldworeworICAgIHJldHVybiBbX3dp
bmRvdyBjb252ZXJ0UG9pbnQ6X21vY2tMb2NhdGlvbkluV2luZG93IHRvVmlldzp2aWV3XTsKK30K
KworQGVuZAorCitAaW1wbGVtZW50YXRpb24gTW9ja0Ryb3BTZXNzaW9uCisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFByb3ZpZGVyczooTlNBcnJheTxVSUl0ZW1Qcm92aWRlciAqPiAqKXByb3Zp
ZGVycyBsb2NhdGlvbjooQ0dQb2ludClsb2NhdGlvbkluV2luZG93IHdpbmRvdzooVUlXaW5kb3cg
Kil3aW5kb3cgYWxsb3dNb3ZlOihCT09MKWFsbG93TW92ZQoreworICAgIGF1dG8gaXRlbXMgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICBmb3IgKFVJSXRlbVBy
b3ZpZGVyICppdGVtUHJvdmlkZXIgaW4gcHJvdmlkZXJzKQorICAgICAgICBbaXRlbXMgYWRkT2Jq
ZWN0OltbW1VJRHJhZ0l0ZW0gYWxsb2NdIGluaXRXaXRoSXRlbVByb3ZpZGVyOml0ZW1Qcm92aWRl
cl0gYXV0b3JlbGVhc2VdXTsKKworICAgIHJldHVybiBbc3VwZXIgaW5pdFdpdGhJdGVtczppdGVt
cy5nZXQoKSBsb2NhdGlvbjpsb2NhdGlvbkluV2luZG93IHdpbmRvdzp3aW5kb3cgYWxsb3dNb3Zl
OmFsbG93TW92ZV07Cit9CisKKy0gKEJPT0wpaXNMb2NhbAoreworICAgIHJldHVybiBZRVM7Cit9
CisKKy0gKE5TUHJvZ3Jlc3MgKilwcm9ncmVzcworeworICAgIHJldHVybiBbTlNQcm9ncmVzcyBk
aXNjcmV0ZVByb2dyZXNzV2l0aFRvdGFsVW5pdENvdW50OjEwMF07Cit9CisKKy0gKHZvaWQpc2V0
UHJvZ3Jlc3NJbmRpY2F0b3JTdHlsZTooVUlEcm9wU2Vzc2lvblByb2dyZXNzSW5kaWNhdG9yU3R5
bGUpcHJvZ3Jlc3NJbmRpY2F0b3JTdHlsZQoreworfQorCistIChVSURyb3BTZXNzaW9uUHJvZ3Jl
c3NJbmRpY2F0b3JTdHlsZSlwcm9ncmVzc0luZGljYXRvclN0eWxlCit7CisgICAgcmV0dXJuIFVJ
RHJvcFNlc3Npb25Qcm9ncmVzc0luZGljYXRvclN0eWxlTm9uZTsKK30KKworLSAoTlNVSW50ZWdl
cilvcGVyYXRpb25NYXNrCit7CisgICAgcmV0dXJuIDA7Cit9CisKKy0gKGlkIDxVSURyYWdTZXNz
aW9uPilsb2NhbERyYWdTZXNzaW9uCit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoQk9PTClo
YXNJdGVtc0NvbmZvcm1pbmdUb1R5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKXR5cGVJZGVudGlm
aWVyCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE5POworfQorCist
IChCT09MKWNhbkNyZWF0ZUl0ZW1zT2ZDbGFzczooQ2xhc3M8VUlJdGVtUHJvdmlkZXJSZWFkaW5n
PilhQ2xhc3MKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTk87Cit9
CisKKy0gKE5TUHJvZ3Jlc3MgKilsb2FkT2JqZWN0c09mQ2xhc3M6KENsYXNzPE5TSXRlbVByb3Zp
ZGVyUmVhZGluZz4pYUNsYXNzIGNvbXBsZXRpb246KHZvaWQoXikoTlNBcnJheTxfX2tpbmRvZiBp
ZCA8TlNJdGVtUHJvdmlkZXJSZWFkaW5nPj4gKm9iamVjdHMpKWNvbXBsZXRpb24KK3sKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbmlsOworfQorCitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBNb2NrRHJhZ1Nlc3Npb24geworICAgIFJldGFpblB0cjxpZD4gX2xvY2FsQ29u
dGV4dDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2luZG93OihVSVdpbmRvdyAqKXdp
bmRvdyBhbGxvd01vdmU6KEJPT0wpYWxsb3dNb3ZlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbml0
V2l0aEl0ZW1zOkBbIF0gbG9jYXRpb246Q0dQb2ludFplcm8gd2luZG93OndpbmRvdyBhbGxvd01v
dmU6YWxsb3dNb3ZlXTsKK30KKworLSAoTlNVSW50ZWdlcilsb2NhbE9wZXJhdGlvbk1hc2sKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworLSAoTlNVSW50
ZWdlcilleHRlcm5hbE9wZXJhdGlvbk1hc2sKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gMDsKK30KKworLSAoaWQpc2Vzc2lvbgoreworICAgIHJldHVybiBuaWw7Cit9
CisKKy0gKGlkKWxvY2FsQ29udGV4dAoreworICAgIHJldHVybiBfbG9jYWxDb250ZXh0LmdldCgp
OworfQorCistICh2b2lkKXNldExvY2FsQ29udGV4dDooaWQpbG9jYWxDb250ZXh0Cit7CisgICAg
X2xvY2FsQ29udGV4dCA9IGxvY2FsQ29udGV4dDsKK30KKworQGVuZAorCitzdGF0aWMgZG91Ymxl
IHByb2dyZXNzSW5jcmVtZW50U3RlcCA9IDAuMDMzOworc3RhdGljIGRvdWJsZSBwcm9ncmVzc1Rp
bWVTdGVwID0gMC4wMTY7CitzdGF0aWMgTlNTdHJpbmcgKlRlc3RXZWJLaXRBUElTaW11bGF0ZUNh
bmNlbEFsbFRvdWNoZXNOb3RpZmljYXRpb25OYW1lID0gQCJUZXN0V2ViS2l0QVBJU2ltdWxhdGVD
YW5jZWxBbGxUb3VjaGVzTm90aWZpY2F0aW9uTmFtZSI7CisKK3N0YXRpYyBOU0FycmF5ICpkcmFn
QW5kRHJvcEV2ZW50TmFtZXMoKQoreworICAgIHN0YXRpYyBOU0FycmF5ICpldmVudE5hbWVzID0g
bmlsOworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAgIGRpc3BhdGNo
X29uY2UoJm9uY2VUb2tlbiwgXigpIHsKKyAgICAgICAgZXZlbnROYW1lcyA9IEBbIEAiZHJhZ2Vu
dGVyIiwgQCJkcmFnb3ZlciIsIEAiZHJvcCIsIEAiZHJhZ2xlYXZlIiwgQCJkcmFnc3RhcnQiIF07
CisgICAgfSk7CisgICAgcmV0dXJuIGV2ZW50TmFtZXM7Cit9CisKK0BpbnRlcmZhY2UgRHJhZ0Fu
ZERyb3BTaW11bGF0b3JBcHBsaWNhdGlvbiA6IFVJQXBwbGljYXRpb24KK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIERyYWdBbmREcm9wU2ltdWxhdG9yQXBwbGljYXRpb24KKy0gKHZvaWQpX2NhbmNl
bEFsbFRvdWNoZXMKK3sKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJd
IHBvc3ROb3RpZmljYXRpb25OYW1lOlRlc3RXZWJLaXRBUElTaW11bGF0ZUNhbmNlbEFsbFRvdWNo
ZXNOb3RpZmljYXRpb25OYW1lIG9iamVjdDpuaWxdOworfQorQGVuZAorCitAaW1wbGVtZW50YXRp
b24gRHJhZ0FuZERyb3BTaW11bGF0b3IgeworICAgIFJldGFpblB0cjxUZXN0V0tXZWJWaWV3PiBf
d2ViVmlldzsKKyAgICBSZXRhaW5QdHI8TW9ja0RyYWdTZXNzaW9uPiBfZHJhZ1Nlc3Npb247Cisg
ICAgUmV0YWluUHRyPE1vY2tEcm9wU2Vzc2lvbj4gX2Ryb3BTZXNzaW9uOworICAgIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gX29ic2VydmVkRXZlbnROYW1lczsKKyAgICBSZXRhaW5QdHI8TlNB
cnJheT4gX2V4dGVybmFsSXRlbVByb3ZpZGVyczsKKyAgICBSZXRhaW5QdHI8TlNBcnJheSAqPiBf
c291cmNlSXRlbVByb3ZpZGVyczsKKyAgICBSZXRhaW5QdHI8TlNBcnJheSAqPiBfZmluYWxTZWxl
Y3Rpb25SZWN0czsKKyAgICBDR1BvaW50IF9zdGFydExvY2F0aW9uOworICAgIENHUG9pbnQgX2Vu
ZExvY2F0aW9uOworICAgIENHUmVjdCBfbGFzdEtub3duRHJhZ0NhcmV0UmVjdDsKKworICAgIFJl
dGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PE5TTnVtYmVyICosIE5TVmFsdWUgKj4+X3JlbWFp
bmluZ0FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uc0J5UHJvZ3Jlc3M7CisgICAgUmV0YWlu
UHRyPE5TTXV0YWJsZUFycmF5PE5TVmFsdWUgKj4+X3F1ZXVlZEFkZGl0aW9uYWxJdGVtUmVxdWVz
dExvY2F0aW9uczsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk8VUlUYXJnZXRlZERyYWdQ
cmV2aWV3ICo+PiBfbGlmdFByZXZpZXdzOworCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PF9XS0F0dGFjaG1lbnQgKj4+IF9pbnNlcnRlZEF0dGFjaG1lbnRzOworICAgIFJldGFpblB0cjxO
U011dGFibGVBcnJheTxfV0tBdHRhY2htZW50ICo+PiBfcmVtb3ZlZEF0dGFjaG1lbnRzOworCisg
ICAgYm9vbCBfaXNEb25lV2FpdGluZ0ZvcklucHV0U2Vzc2lvbjsKKyAgICBkb3VibGUgX2N1cnJl
bnRQcm9ncmVzczsKKyAgICBib29sIF9pc0RvbmVXaXRoQ3VycmVudFJ1bjsKKyAgICBEcmFnQW5k
RHJvcFBoYXNlIF9waGFzZTsKKworICAgIFJldGFpblB0cjxVSURyb3BQcm9wb3NhbD4gX2N1cnJl
bnREcm9wUHJvcG9zYWw7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXc6KFRl
c3RXS1dlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsK
KyAgICAgICAgX3dlYlZpZXcgPSB3ZWJWaWV3OworICAgICAgICBfc2hvdWxkRW5zdXJlVUlBcHBs
aWNhdGlvbiA9IE5POworICAgICAgICBfc2hvdWxkQWxsb3dNb3ZlT3BlcmF0aW9uID0gWUVTOwor
ICAgICAgICBfaXNEb25lV2FpdGluZ0ZvcklucHV0U2Vzc2lvbiA9IHRydWU7CisgICAgICAgIFtf
d2ViVmlldyBzZXRVSURlbGVnYXRlOnNlbGZdOworICAgICAgICBbX3dlYlZpZXcgX3NldElucHV0
RGVsZWdhdGU6c2VsZl07CisgICAgfQorICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRl
YWxsb2MKK3sKKyAgICBpZiAoW193ZWJWaWV3IFVJRGVsZWdhdGVdID09IHNlbGYpCisgICAgICAg
IFtfd2ViVmlldyBzZXRVSURlbGVnYXRlOm5pbF07CisKKyAgICBpZiAoW193ZWJWaWV3IF9pbnB1
dERlbGVnYXRlXSA9PSBzZWxmKQorICAgICAgICBbX3dlYlZpZXcgX3NldElucHV0RGVsZWdhdGU6
bmlsXTsKKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClfcmVzZXRTaW11bGF0
ZWRTdGF0ZQoreworICAgIF9waGFzZSA9IERyYWdBbmREcm9wUGhhc2VCZWdpbm5pbmc7CisgICAg
X2N1cnJlbnRQcm9ncmVzcyA9IDA7CisgICAgX2lzRG9uZVdpdGhDdXJyZW50UnVuID0gZmFsc2U7
CisgICAgX29ic2VydmVkRXZlbnROYW1lcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdF0pOworICAgIF9pbnNlcnRlZEF0dGFjaG1lbnRzID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgX3JlbW92ZWRBdHRhY2htZW50cyA9IGFkb3B0TlMo
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworICAgIF9maW5hbFNlbGVjdGlvblJlY3Rz
ID0gQFsgXTsKKyAgICBfZHJhZ1Nlc3Npb24gPSBuaWw7CisgICAgX2Ryb3BTZXNzaW9uID0gbmls
OworICAgIF9jdXJyZW50RHJvcFByb3Bvc2FsID0gbmlsOworICAgIF9sYXN0S25vd25EcmFnQ2Fy
ZXRSZWN0ID0gQ0dSZWN0WmVybzsKKyAgICBfcmVtYWluaW5nQWRkaXRpb25hbEl0ZW1SZXF1ZXN0
TG9jYXRpb25zQnlQcm9ncmVzcyA9IG5pbDsKKyAgICBfcXVldWVkQWRkaXRpb25hbEl0ZW1SZXF1
ZXN0TG9jYXRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Cisg
ICAgX2xpZnRQcmV2aWV3cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0p
OworfQorCistIChOU0FycmF5ICopb2JzZXJ2ZWRFdmVudE5hbWVzCit7CisgICAgcmV0dXJuIF9v
YnNlcnZlZEV2ZW50TmFtZXMuZ2V0KCk7Cit9CisKKy0gKHZvaWQpc2ltdWxhdGVBbGxUb3VjaGVz
Q2FuY2VsZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgW05TT2JqZWN0
IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3RvcihfYWR2YW5jZVByb2dyZXNzKSBvYmplY3Q6bmlsXTsKKyAgICBfcGhhc2UgPSBEcmFn
QW5kRHJvcFBoYXNlQ2FuY2VsbGVkOworICAgIF9jdXJyZW50UHJvZ3Jlc3MgPSAxOworICAgIF9p
c0RvbmVXaXRoQ3VycmVudFJ1biA9IHRydWU7CisgICAgaWYgKF9kcmFnU2Vzc2lvbikKKyAgICAg
ICAgW1tfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJhZ0ludGVyYWN0aW9uOltf
d2ViVmlldyBkcmFnSW50ZXJhY3Rpb25dIHNlc3Npb246X2RyYWdTZXNzaW9uLmdldCgpIGRpZEVu
ZFdpdGhPcGVyYXRpb246VUlEcm9wT3BlcmF0aW9uQ2FuY2VsXTsKK30KKworLSAodm9pZClydW5G
cm9tOihDR1BvaW50KXN0YXJ0TG9jYXRpb24gdG86KENHUG9pbnQpZW5kTG9jYXRpb24KK3sKKyAg
ICBbc2VsZiBydW5Gcm9tOnN0YXJ0TG9jYXRpb24gdG86ZW5kTG9jYXRpb24gYWRkaXRpb25hbEl0
ZW1SZXF1ZXN0TG9jYXRpb25zOm5pbF07Cit9CisKKy0gKHZvaWQpcnVuRnJvbTooQ0dQb2ludClz
dGFydExvY2F0aW9uIHRvOihDR1BvaW50KWVuZExvY2F0aW9uIGFkZGl0aW9uYWxJdGVtUmVxdWVz
dExvY2F0aW9uczooUHJvZ3Jlc3NUb0NHUG9pbnRWYWx1ZU1hcClhZGRpdGlvbmFsSXRlbVJlcXVl
c3RMb2NhdGlvbnMKK3sKKyAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqZGVmYXVsdENlbnRlciA9
IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKKyAgICBbZGVmYXVsdENlbnRl
ciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihzaW11bGF0ZUFsbFRvdWNoZXND
YW5jZWxlZDopIG5hbWU6VGVzdFdlYktpdEFQSVNpbXVsYXRlQ2FuY2VsQWxsVG91Y2hlc05vdGlm
aWNhdGlvbk5hbWUgb2JqZWN0Om5pbF07CisKKyAgICBpZiAoX3Nob3VsZEVuc3VyZVVJQXBwbGlj
YXRpb24pCisgICAgICAgIFVJQXBwbGljYXRpb25JbnN0YW50aWF0ZVNpbmdsZXRvbihbRHJhZ0Fu
ZERyb3BTaW11bGF0b3JBcHBsaWNhdGlvbiBjbGFzc10pOworCisgICAgW3NlbGYgX3Jlc2V0U2lt
dWxhdGVkU3RhdGVdOworCisgICAgaWYgKGFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9ucykK
KyAgICAgICAgX3JlbWFpbmluZ0FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uc0J5UHJvZ3Jl
c3MgPSBhZG9wdE5TKFthZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnMgbXV0YWJsZUNvcHld
KTsKKworICAgIGZvciAoTlNTdHJpbmcgKmV2ZW50TmFtZSBpbiBkcmFnQW5kRHJvcEV2ZW50TmFt
ZXMoKSkgeworICAgICAgICBbX3dlYlZpZXcgcGVyZm9ybUFmdGVyUmVjZWl2aW5nTWVzc2FnZTpl
dmVudE5hbWUgYWN0aW9uOltzdHJvbmdTZWxmID0gcmV0YWluUHRyKHNlbGYpLCBuYW1lID0gcmV0
YWluUHRyKGV2ZW50TmFtZSldIHsKKyAgICAgICAgICAgIFtzdHJvbmdTZWxmLT5fb2JzZXJ2ZWRF
dmVudE5hbWVzIGFkZE9iamVjdDpuYW1lLmdldCgpXTsKKyAgICAgICAgfV07CisgICAgfQorCisg
ICAgX3N0YXJ0TG9jYXRpb24gPSBzdGFydExvY2F0aW9uOworICAgIF9lbmRMb2NhdGlvbiA9IGVu
ZExvY2F0aW9uOworCisgICAgaWYgKHNlbGYuZXh0ZXJuYWxJdGVtUHJvdmlkZXJzLmNvdW50KSB7
CisgICAgICAgIF9kcm9wU2Vzc2lvbiA9IGFkb3B0TlMoW1tNb2NrRHJvcFNlc3Npb24gYWxsb2Nd
IGluaXRXaXRoUHJvdmlkZXJzOnNlbGYuZXh0ZXJuYWxJdGVtUHJvdmlkZXJzIGxvY2F0aW9uOl9z
dGFydExvY2F0aW9uIHdpbmRvdzpbX3dlYlZpZXcgd2luZG93XSBhbGxvd01vdmU6c2VsZi5zaG91
bGRBbGxvd01vdmVPcGVyYXRpb25dKTsKKyAgICAgICAgX3BoYXNlID0gRHJhZ0FuZERyb3BQaGFz
ZUJlZ2FuOworICAgICAgICBbc2VsZiBfYWR2YW5jZVByb2dyZXNzXTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBfZHJhZ1Nlc3Npb24gPSBhZG9wdE5TKFtbTW9ja0RyYWdTZXNzaW9uIGFsbG9jXSBp
bml0V2l0aFdpbmRvdzpbX3dlYlZpZXcgd2luZG93XSBhbGxvd01vdmU6c2VsZi5zaG91bGRBbGxv
d01vdmVPcGVyYXRpb25dKTsKKyAgICAgICAgW19kcmFnU2Vzc2lvbiBzZXRNb2NrTG9jYXRpb25J
bldpbmRvdzpfc3RhcnRMb2NhdGlvbl07CisgICAgICAgIFsoaWQgPFVJRHJhZ0ludGVyYWN0aW9u
RGVsZWdhdGVfRm9yV2ViS2l0T25seT4pW193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRl
XSBfZHJhZ0ludGVyYWN0aW9uOltfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25dIHByZXBhcmVGb3JT
ZXNzaW9uOl9kcmFnU2Vzc2lvbi5nZXQoKSBjb21wbGV0aW9uOltzdHJvbmdTZWxmID0gcmV0YWlu
UHRyKHNlbGYpXSB7CisgICAgICAgICAgICBpZiAoc3Ryb25nU2VsZi0+X3BoYXNlID09IERyYWdB
bmREcm9wUGhhc2VDYW5jZWxsZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICBzdHJvbmdTZWxmLT5fcGhhc2UgPSBEcmFnQW5kRHJvcFBoYXNlQmVnaW5uaW5nOworICAg
ICAgICAgICAgW3N0cm9uZ1NlbGYgX2FkdmFuY2VQcm9ncmVzc107CisgICAgICAgIH1dOworICAg
IH0KKworICAgIFV0aWw6OnJ1bigmX2lzRG9uZVdpdGhDdXJyZW50UnVuKTsKKyAgICBbX3dlYlZp
ZXcgY2xlYXJNZXNzYWdlSGFuZGxlcnM6ZHJhZ0FuZERyb3BFdmVudE5hbWVzKCldOworICAgIF9m
aW5hbFNlbGVjdGlvblJlY3RzID0gW193ZWJWaWV3IHNlbGVjdGlvblJlY3RzQWZ0ZXJQcmVzZW50
YXRpb25VcGRhdGVdOworCisgICAgW2RlZmF1bHRDZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07
Cit9CisKKy0gKE5TQXJyYXkgKilmaW5hbFNlbGVjdGlvblJlY3RzCit7CisgICAgcmV0dXJuIF9m
aW5hbFNlbGVjdGlvblJlY3RzLmdldCgpOworfQorCistICh2b2lkKV9jb25jbHVkZURyb3BBbmRQ
ZXJmb3JtT3BlcmF0aW9uSWZOZWNlc3NhcnkKK3sKKyAgICBfbGFzdEtub3duRHJhZ0NhcmV0UmVj
dCA9IFtfd2ViVmlldyBfZHJhZ0NhcmV0UmVjdF07CisgICAgYXV0byBvcGVyYXRpb24gPSBbX2N1
cnJlbnREcm9wUHJvcG9zYWwgb3BlcmF0aW9uXTsKKyAgICBpZiAob3BlcmF0aW9uICE9IFVJRHJv
cE9wZXJhdGlvbkNhbmNlbCAmJiBvcGVyYXRpb24gIT0gVUlEcm9wT3BlcmF0aW9uRm9yYmlkZGVu
KSB7CisgICAgICAgIFtbX3dlYlZpZXcgZHJvcEludGVyYWN0aW9uRGVsZWdhdGVdIGRyb3BJbnRl
cmFjdGlvbjpbX3dlYlZpZXcgZHJvcEludGVyYWN0aW9uXSBwZXJmb3JtRHJvcDpfZHJvcFNlc3Np
b24uZ2V0KCldOworICAgICAgICBfcGhhc2UgPSBEcmFnQW5kRHJvcFBoYXNlUGVyZm9ybWluZ0Ry
b3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgX2lzRG9uZVdpdGhDdXJyZW50UnVuID0gWUVTOwor
ICAgICAgICBfcGhhc2UgPSBEcmFnQW5kRHJvcFBoYXNlQ2FuY2VsbGVkOworICAgIH0KKworICAg
IFtbX3dlYlZpZXcgZHJvcEludGVyYWN0aW9uRGVsZWdhdGVdIGRyb3BJbnRlcmFjdGlvbjpbX3dl
YlZpZXcgZHJvcEludGVyYWN0aW9uXSBzZXNzaW9uRGlkRW5kOl9kcm9wU2Vzc2lvbi5nZXQoKV07
CisKKyAgICBpZiAoX2RyYWdTZXNzaW9uKQorICAgICAgICBbW193ZWJWaWV3IGRyYWdJbnRlcmFj
dGlvbkRlbGVnYXRlXSBkcmFnSW50ZXJhY3Rpb246W193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbl0g
c2Vzc2lvbjpfZHJhZ1Nlc3Npb24uZ2V0KCkgZGlkRW5kV2l0aE9wZXJhdGlvbjpvcGVyYXRpb25d
OworfQorCistICh2b2lkKV9lbnF1ZXVlUGVuZGluZ0FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0
aW9ucworeworICAgIE5TTXV0YWJsZUFycmF5ICpwcm9ncmVzc1ZhbHVlc1RvUmVtb3ZlID0gW05T
TXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICBmb3IgKE5TTnVtYmVyICpwcm9ncmVzc1ZhbHVlIGlu
IF9yZW1haW5pbmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnNCeVByb2dyZXNzLmdldCgp
KSB7CisgICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IHByb2dyZXNzVmFsdWUuZG91YmxlVmFsdWU7
CisgICAgICAgIGlmIChwcm9ncmVzcyA+IF9jdXJyZW50UHJvZ3Jlc3MpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgW3Byb2dyZXNzVmFsdWVzVG9SZW1vdmUgYWRkT2JqZWN0OnByb2dy
ZXNzVmFsdWVdOworICAgICAgICBbX3F1ZXVlZEFkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9u
cyBhZGRPYmplY3Q6W19yZW1haW5pbmdBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnNCeVBy
b2dyZXNzIG9iamVjdEZvcktleTpwcm9ncmVzc1ZhbHVlXV07CisgICAgfQorCisgICAgZm9yIChO
U051bWJlciAqcHJvZ3Jlc3NUb1JlbW92ZSBpbiBwcm9ncmVzc1ZhbHVlc1RvUmVtb3ZlKQorICAg
ICAgICBbX3JlbWFpbmluZ0FkZGl0aW9uYWxJdGVtUmVxdWVzdExvY2F0aW9uc0J5UHJvZ3Jlc3Mg
cmVtb3ZlT2JqZWN0Rm9yS2V5OnByb2dyZXNzVG9SZW1vdmVdOworfQorCistIChCT09MKV9zZW5k
UXVldWVkQWRkaXRpb25hbEl0ZW1SZXF1ZXN0Cit7CisgICAgaWYgKCFbX3F1ZXVlZEFkZGl0aW9u
YWxJdGVtUmVxdWVzdExvY2F0aW9ucyBjb3VudF0pCisgICAgICAgIHJldHVybiBOTzsKKworICAg
IFJldGFpblB0cjxOU1ZhbHVlPiByZXF1ZXN0TG9jYXRpb25WYWx1ZSA9IFtfcXVldWVkQWRkaXRp
b25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zIG9iamVjdEF0SW5kZXg6MF07CisgICAgW19xdWV1ZWRB
ZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnMgcmVtb3ZlT2JqZWN0QXRJbmRleDowXTsKKwor
ICAgIGF1dG8gcmVxdWVzdExvY2F0aW9uID0gW1tfd2ViVmlldyB3aW5kb3ddIGNvbnZlcnRQb2lu
dDpbcmVxdWVzdExvY2F0aW9uVmFsdWUgQ0dQb2ludFZhbHVlXSB0b1ZpZXc6X3dlYlZpZXcuZ2V0
KCldOworICAgIFsoaWQgPFVJRHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVfUHJvcG9zZWRfU1BJXzMz
MTQ2ODAzPilbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9uRGVsZWdhdGVdIF9kcmFnSW50ZXJhY3Rp
b246W193ZWJWaWV3IGRyYWdJbnRlcmFjdGlvbl0gaXRlbXNGb3JBZGRpbmdUb1Nlc3Npb246X2Ry
YWdTZXNzaW9uLmdldCgpIHdpdGhUb3VjaEF0UG9pbnQ6cmVxdWVzdExvY2F0aW9uIGNvbXBsZXRp
b246W2RyYWdTZXNzaW9uID0gX2RyYWdTZXNzaW9uLCBkcm9wU2Vzc2lvbiA9IF9kcm9wU2Vzc2lv
bl0gKE5TQXJyYXkgKml0ZW1zKSB7CisgICAgICAgIFtkcmFnU2Vzc2lvbiBhZGRJdGVtczppdGVt
c107CisgICAgICAgIFtkcm9wU2Vzc2lvbiBhZGRJdGVtczppdGVtc107CisgICAgfV07CisgICAg
cmV0dXJuIFlFUzsKK30KKworLSAodm9pZClfYWR2YW5jZVByb2dyZXNzCit7CisgICAgW3NlbGYg
X2VucXVldWVQZW5kaW5nQWRkaXRpb25hbEl0ZW1SZXF1ZXN0TG9jYXRpb25zXTsKKyAgICBpZiAo
W3NlbGYgX3NlbmRRdWV1ZWRBZGRpdGlvbmFsSXRlbVJlcXVlc3RdKSB7CisgICAgICAgIFtzZWxm
IF9zY2hlZHVsZUFkdmFuY2VQcm9ncmVzc107CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBfbGFzdEtub3duRHJhZ0NhcmV0UmVjdCA9IFtfd2ViVmlldyBfZHJhZ0NhcmV0UmVjdF07Cisg
ICAgX2N1cnJlbnRQcm9ncmVzcyArPSBwcm9ncmVzc0luY3JlbWVudFN0ZXA7CisgICAgQ0dQb2lu
dCBsb2NhdGlvbkluV2luZG93ID0gc2VsZi5fY3VycmVudExvY2F0aW9uOworICAgIFtfZHJhZ1Nl
c3Npb24gc2V0TW9ja0xvY2F0aW9uSW5XaW5kb3c6bG9jYXRpb25JbldpbmRvd107CisgICAgW19k
cm9wU2Vzc2lvbiBzZXRNb2NrTG9jYXRpb25JbldpbmRvdzpsb2NhdGlvbkluV2luZG93XTsKKwor
ICAgIGlmIChfY3VycmVudFByb2dyZXNzID49IDEpIHsKKyAgICAgICAgX2N1cnJlbnRQcm9ncmVz
cyA9IDE7CisgICAgICAgIFtzZWxmIF9jb25jbHVkZURyb3BBbmRQZXJmb3JtT3BlcmF0aW9uSWZO
ZWNlc3NhcnldOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3dpdGNoIChfcGhhc2Up
IHsKKyAgICBjYXNlIERyYWdBbmREcm9wUGhhc2VCZWdpbm5pbmc6IHsKKyAgICAgICAgTlNNdXRh
YmxlQXJyYXk8VUlJdGVtUHJvdmlkZXIgKj4gKml0ZW1Qcm92aWRlcnMgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXldOworICAgICAgICBOU0FycmF5ICppdGVtcyA9IFtbX3dlYlZpZXcgZHJhZ0ludGVy
YWN0aW9uRGVsZWdhdGVdIGRyYWdJbnRlcmFjdGlvbjpbX3dlYlZpZXcgZHJhZ0ludGVyYWN0aW9u
XSBpdGVtc0ZvckJlZ2lubmluZ1Nlc3Npb246X2RyYWdTZXNzaW9uLmdldCgpXTsKKyAgICAgICAg
aWYgKCFpdGVtcy5jb3VudCkgeworICAgICAgICAgICAgX3BoYXNlID0gRHJhZ0FuZERyb3BQaGFz
ZUNhbmNlbGxlZDsKKyAgICAgICAgICAgIF9jdXJyZW50UHJvZ3Jlc3MgPSAxOworICAgICAgICAg
ICAgX2lzRG9uZVdpdGhDdXJyZW50UnVuID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGZvciAoVUlEcmFnSXRlbSAqaXRlbSBpbiBpdGVtcykgeworICAg
ICAgICAgICAgW2l0ZW1Qcm92aWRlcnMgYWRkT2JqZWN0Oml0ZW0uaXRlbVByb3ZpZGVyXTsKKyAg
ICAgICAgICAgIFVJVGFyZ2V0ZWREcmFnUHJldmlldyAqbGlmdFByZXZpZXcgPSBbW193ZWJWaWV3
IGRyYWdJbnRlcmFjdGlvbkRlbGVnYXRlXSBkcmFnSW50ZXJhY3Rpb246W193ZWJWaWV3IGRyYWdJ
bnRlcmFjdGlvbl0gcHJldmlld0ZvckxpZnRpbmdJdGVtOml0ZW0gc2Vzc2lvbjpfZHJhZ1Nlc3Np
b24uZ2V0KCldOworICAgICAgICAgICAgRVhQRUNUX1RSVUUoISFsaWZ0UHJldmlldyk7CisgICAg
ICAgICAgICBpZiAobGlmdFByZXZpZXcpCisgICAgICAgICAgICAgICAgW19saWZ0UHJldmlld3Mg
YWRkT2JqZWN0OmxpZnRQcmV2aWV3XTsKKyAgICAgICAgfQorCisgICAgICAgIF9kcm9wU2Vzc2lv
biA9IGFkb3B0TlMoW1tNb2NrRHJvcFNlc3Npb24gYWxsb2NdIGluaXRXaXRoUHJvdmlkZXJzOml0
ZW1Qcm92aWRlcnMgbG9jYXRpb246c2VsZi5fY3VycmVudExvY2F0aW9uIHdpbmRvdzpbX3dlYlZp
ZXcgd2luZG93XSBhbGxvd01vdmU6c2VsZi5zaG91bGRBbGxvd01vdmVPcGVyYXRpb25dKTsKKyAg
ICAgICAgW19kcmFnU2Vzc2lvbiBzZXRJdGVtczppdGVtc107CisgICAgICAgIF9zb3VyY2VJdGVt
UHJvdmlkZXJzID0gaXRlbVByb3ZpZGVyczsKKyAgICAgICAgaWYgKHNlbGYuc2hvd0N1c3RvbUFj
dGlvblNoZWV0QmxvY2spIHsKKyAgICAgICAgICAgIC8vIERlZmVyIHByb2dyZXNzIHVudGlsIHRo
ZSBjdXN0b20gYWN0aW9uIHNoZWV0IGlzIGRpc21pc3NlZC4KKyAgICAgICAgICAgIGF1dG8gc3Rh
cnRMb2NhdGlvbkluVmlldyA9IFtbX3dlYlZpZXcgd2luZG93XSBjb252ZXJ0UG9pbnQ6X3N0YXJ0
TG9jYXRpb24gdG9WaWV3Ol93ZWJWaWV3LmdldCgpXTsKKyAgICAgICAgICAgIFtfd2ViVmlldyBf
c2ltdWxhdGVMb25nUHJlc3NBY3Rpb25BdExvY2F0aW9uOnN0YXJ0TG9jYXRpb25JblZpZXddOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgW1tfd2ViVmlldyBkcmFn
SW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJhZ0ludGVyYWN0aW9uOltfd2ViVmlldyBkcmFnSW50ZXJh
Y3Rpb25dIHNlc3Npb25XaWxsQmVnaW46X2RyYWdTZXNzaW9uLmdldCgpXTsKKworICAgICAgICBS
ZXRhaW5QdHI8V0tXZWJWaWV3PiByZXRhaW5lZFdlYlZpZXcgPSBfd2ViVmlldzsKKyAgICAgICAg
ZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXigpIHsKKyAgICAgICAg
ICAgIFtyZXRhaW5lZFdlYlZpZXcgcmVzaWduRmlyc3RSZXNwb25kZXJdOworICAgICAgICB9KTsK
KworICAgICAgICBfcGhhc2UgPSBEcmFnQW5kRHJvcFBoYXNlQmVnYW47CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIERyYWdBbmREcm9wUGhhc2VCZWdhbjoKKyAgICAgICAgW1tfd2Vi
VmlldyBkcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZV0gZHJvcEludGVyYWN0aW9uOltfd2ViVmlldyBk
cm9wSW50ZXJhY3Rpb25dIHNlc3Npb25EaWRFbnRlcjpfZHJvcFNlc3Npb24uZ2V0KCldOworICAg
ICAgICBfcGhhc2UgPSBEcmFnQW5kRHJvcFBoYXNlRW50ZXJlZDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBEcmFnQW5kRHJvcFBoYXNlRW50ZXJlZDogeworICAgICAgICBfY3VycmVudERyb3BQ
cm9wb3NhbCA9IFtbX3dlYlZpZXcgZHJvcEludGVyYWN0aW9uRGVsZWdhdGVdIGRyb3BJbnRlcmFj
dGlvbjpbX3dlYlZpZXcgZHJvcEludGVyYWN0aW9uXSBzZXNzaW9uRGlkVXBkYXRlOl9kcm9wU2Vz
c2lvbi5nZXQoKV07CisgICAgICAgIGlmICghW3NlbGYgc2hvdWxkQWxsb3dNb3ZlT3BlcmF0aW9u
XSAmJiBbX2N1cnJlbnREcm9wUHJvcG9zYWwgb3BlcmF0aW9uXSA9PSBVSURyb3BPcGVyYXRpb25N
b3ZlKQorICAgICAgICAgICAgX2N1cnJlbnREcm9wUHJvcG9zYWwgPSBhZG9wdE5TKFtbVUlEcm9w
UHJvcG9zYWwgYWxsb2NdIGluaXRXaXRoRHJvcE9wZXJhdGlvbjpVSURyb3BPcGVyYXRpb25DYW5j
ZWxdKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIFtzZWxmIF9zY2hlZHVsZUFkdmFuY2VQcm9ncmVzc107Cit9CisKKy0g
KENHUG9pbnQpX2N1cnJlbnRMb2NhdGlvbgoreworICAgIENHRmxvYXQgZGlzdGFuY2VYID0gX2Vu
ZExvY2F0aW9uLnggLSBfc3RhcnRMb2NhdGlvbi54OworICAgIENHRmxvYXQgZGlzdGFuY2VZID0g
X2VuZExvY2F0aW9uLnkgLSBfc3RhcnRMb2NhdGlvbi55OworICAgIHJldHVybiBDR1BvaW50TWFr
ZShfc3RhcnRMb2NhdGlvbi54ICsgX2N1cnJlbnRQcm9ncmVzcyAqIGRpc3RhbmNlWCwgX3N0YXJ0
TG9jYXRpb24ueSArIF9jdXJyZW50UHJvZ3Jlc3MgKiBkaXN0YW5jZVkpOworfQorCistICh2b2lk
KV9zY2hlZHVsZUFkdmFuY2VQcm9ncmVzcworeworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91
c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX2FkdmFu
Y2VQcm9ncmVzcykgb2JqZWN0Om5pbF07CisgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxl
Y3RvcihfYWR2YW5jZVByb2dyZXNzKSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OnByb2dyZXNz
VGltZVN0ZXBdOworfQorCistIChOU0FycmF5ICopc291cmNlSXRlbVByb3ZpZGVycworeworICAg
IHJldHVybiBfc291cmNlSXRlbVByb3ZpZGVycy5nZXQoKTsKK30KKworLSAoTlNBcnJheSAqKWV4
dGVybmFsSXRlbVByb3ZpZGVycworeworICAgIHJldHVybiBfZXh0ZXJuYWxJdGVtUHJvdmlkZXJz
LmdldCgpOworfQorCistICh2b2lkKXNldEV4dGVybmFsSXRlbVByb3ZpZGVyczooTlNBcnJheSAq
KWV4dGVybmFsSXRlbVByb3ZpZGVycworeworICAgIF9leHRlcm5hbEl0ZW1Qcm92aWRlcnMgPSBh
ZG9wdE5TKFtleHRlcm5hbEl0ZW1Qcm92aWRlcnMgY29weV0pOworfQorCistIChEcmFnQW5kRHJv
cFBoYXNlKXBoYXNlCit7CisgICAgcmV0dXJuIF9waGFzZTsKK30KKworLSAoTlNBcnJheTxVSVRh
cmdldGVkRHJhZ1ByZXZpZXcgKj4gKilsaWZ0UHJldmlld3MKK3sKKyAgICByZXR1cm4gX2xpZnRQ
cmV2aWV3cy5nZXQoKTsKK30KKworLSAoQ0dSZWN0KWxhc3RLbm93bkRyYWdDYXJldFJlY3QKK3sK
KyAgICByZXR1cm4gX2xhc3RLbm93bkRyYWdDYXJldFJlY3Q7Cit9CisKKy0gKHZvaWQpd2FpdEZv
cklucHV0U2Vzc2lvbgoreworICAgIF9pc0RvbmVXYWl0aW5nRm9ySW5wdXRTZXNzaW9uID0gZmFs
c2U7CisKKyAgICAvLyBXYWl0aW5nIGZvciBhbiBpbnB1dCBzZXNzaW9uIGltcGxpZXMgdGhhdCB3
ZSBzaG91bGQgYWxsb3cgaW5wdXQgc2Vzc2lvbnMgdG8gYmVnaW4uCisgICAgc2VsZi5hbGxvd3NG
b2N1c1RvU3RhcnRJbnB1dFNlc3Npb24gPSBZRVM7CisKKyAgICBVdGlsOjpydW4oJl9pc0RvbmVX
YWl0aW5nRm9ySW5wdXRTZXNzaW9uKTsKK30KKworLSAoTlNBcnJheTxfV0tBdHRhY2htZW50ICo+
ICopaW5zZXJ0ZWRBdHRhY2htZW50cworeworICAgIHJldHVybiBfaW5zZXJ0ZWRBdHRhY2htZW50
cy5nZXQoKTsKK30KKworLSAoTlNBcnJheTxfV0tBdHRhY2htZW50ICo+ICopcmVtb3ZlZEF0dGFj
aG1lbnRzCit7CisgICAgcmV0dXJuIF9yZW1vdmVkQXR0YWNobWVudHMuZ2V0KCk7Cit9CisKKy0g
KHZvaWQpZW5kRGF0YVRyYW5zZmVyCit7CisgICAgW1tfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25E
ZWxlZ2F0ZV0gZHJhZ0ludGVyYWN0aW9uOltfd2ViVmlldyBkcmFnSW50ZXJhY3Rpb25dIHNlc3Np
b25EaWRUcmFuc2Zlckl0ZW1zOl9kcmFnU2Vzc2lvbi5nZXQoKV07Cit9CisKKyNwcmFnbWEgbWFy
ayAtIFdLVUlEZWxlZ2F0ZVByaXZhdGUKKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICop
d2ViVmlldyBkYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25XYXNIYW5kbGVkOihCT09MKWhhbmRsZWQg
Zm9yU2Vzc2lvbjooaWQpc2Vzc2lvbiBpdGVtUHJvdmlkZXJzOihOU0FycmF5PFVJSXRlbVByb3Zp
ZGVyICo+ICopaXRlbVByb3ZpZGVycworeworICAgIF9pc0RvbmVXaXRoQ3VycmVudFJ1biA9IHRy
dWU7CisKKyAgICBpZiAoc2VsZi5kcm9wQ29tcGxldGlvbkJsb2NrKQorICAgICAgICBzZWxmLmRy
b3BDb21wbGV0aW9uQmxvY2soaGFuZGxlZCwgaXRlbVByb3ZpZGVycyk7Cit9CisKKy0gKE5TVUlu
dGVnZXIpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgd2lsbFVwZGF0ZURhdGFJbnRlcmFj
dGlvbk9wZXJhdGlvblRvT3BlcmF0aW9uOihOU1VJbnRlZ2VyKW9wZXJhdGlvbiBmb3JTZXNzaW9u
OihpZClzZXNzaW9uCit7CisgICAgcmV0dXJuIHNlbGYub3ZlcnJpZGVEcmFnVXBkYXRlQmxvY2sg
PyBzZWxmLm92ZXJyaWRlRHJhZ1VwZGF0ZUJsb2NrKG9wZXJhdGlvbiwgc2Vzc2lvbikgOiBvcGVy
YXRpb247Cit9CisKKy0gKE5TQXJyYXkgKilfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBh
ZGp1c3RlZERhdGFJbnRlcmFjdGlvbkl0ZW1Qcm92aWRlcnNGb3JJdGVtUHJvdmlkZXI6KFVJSXRl
bVByb3ZpZGVyICopaXRlbVByb3ZpZGVyIHJlcHJlc2VudGluZ09iamVjdHM6KE5TQXJyYXkgKily
ZXByZXNlbnRpbmdPYmplY3RzIGFkZGl0aW9uYWxEYXRhOihOU0RpY3Rpb25hcnkgKilhZGRpdGlv
bmFsRGF0YQoreworICAgIHJldHVybiBzZWxmLmNvbnZlcnRJdGVtUHJvdmlkZXJzQmxvY2sgPyBz
ZWxmLmNvbnZlcnRJdGVtUHJvdmlkZXJzQmxvY2soaXRlbVByb3ZpZGVyLCByZXByZXNlbnRpbmdP
YmplY3RzLCBhZGRpdGlvbmFsRGF0YSkgOiBAWyBpdGVtUHJvdmlkZXIgXTsKK30KKworLSAoQk9P
TClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBzaG93Q3VzdG9tU2hlZXRGb3JFbGVtZW50
OihfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKWVsZW1lbnQKK3sKKyAgICBpZiAoIXNlbGYuc2hv
d0N1c3RvbUFjdGlvblNoZWV0QmxvY2spCisgICAgICAgIHJldHVybiBOTzsKKworICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdTZWxmID0gcmV0YWlu
UHRyKHNlbGYpXSB7CisgICAgICAgIFtbc3Ryb25nU2VsZi0+X3dlYlZpZXcgZHJhZ0ludGVyYWN0
aW9uRGVsZWdhdGVdIGRyYWdJbnRlcmFjdGlvbjpbc3Ryb25nU2VsZi0+X3dlYlZpZXcgZHJhZ0lu
dGVyYWN0aW9uXSBzZXNzaW9uV2lsbEJlZ2luOnN0cm9uZ1NlbGYtPl9kcmFnU2Vzc2lvbi5nZXQo
KV07CisgICAgICAgIHN0cm9uZ1NlbGYtPl9waGFzZSA9IERyYWdBbmREcm9wUGhhc2VCZWdhbjsK
KyAgICAgICAgW3N0cm9uZ1NlbGYgX3NjaGVkdWxlQWR2YW5jZVByb2dyZXNzXTsKKyAgICB9KTsK
KworICAgIHJldHVybiBzZWxmLnNob3dDdXN0b21BY3Rpb25TaGVldEJsb2NrKGVsZW1lbnQpOwor
fQorCistIChOU0FycmF5PFVJRHJhZ0l0ZW0gKj4gKilfd2ViVmlldzooV0tXZWJWaWV3ICopd2Vi
VmlldyB3aWxsUGVyZm9ybURyb3BXaXRoU2Vzc2lvbjooaWQgPFVJRHJvcFNlc3Npb24+KXNlc3Np
b24KK3sKKyAgICByZXR1cm4gc2VsZi5vdmVycmlkZVBlcmZvcm1Ecm9wQmxvY2sgPyBzZWxmLm92
ZXJyaWRlUGVyZm9ybURyb3BCbG9jayhzZXNzaW9uKSA6IHNlc3Npb24uaXRlbXM7Cit9CisKKy0g
KHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkSW5zZXJ0QXR0YWNobWVudDoo
X1dLQXR0YWNobWVudCAqKWF0dGFjaG1lbnQKK3sKKyAgICBbX2luc2VydGVkQXR0YWNobWVudHMg
YWRkT2JqZWN0OmF0dGFjaG1lbnRdOworfQorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcg
Kil3ZWJWaWV3IGRpZFJlbW92ZUF0dGFjaG1lbnQ6KF9XS0F0dGFjaG1lbnQgKilhdHRhY2htZW50
Cit7CisgICAgW19yZW1vdmVkQXR0YWNobWVudHMgYWRkT2JqZWN0OmF0dGFjaG1lbnRdOworfQor
CisjcHJhZ21hIG1hcmsgLSBfV0tJbnB1dERlbGVnYXRlCisKKy0gKEJPT0wpX3dlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXcgZm9jdXNTaG91bGRTdGFydElucHV0U2Vzc2lvbjooaWQgPF9XS0Zv
Y3VzZWRFbGVtZW50SW5mbz4paW5mbworeworICAgIHJldHVybiBfYWxsb3dzRm9jdXNUb1N0YXJ0
SW5wdXRTZXNzaW9uOworfQorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3
IGRpZFN0YXJ0SW5wdXRTZXNzaW9uOihpZCA8X1dLRm9ybUlucHV0U2Vzc2lvbj4paW5wdXRTZXNz
aW9uCit7CisgICAgX2lzRG9uZVdhaXRpbmdGb3JJbnB1dFNlc3Npb24gPSB0cnVlOworfQorCitA
ZW5kCisKKyNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiBQTEFURk9STShJT1MpICYm
IFdLX0FQSV9FTkFCTEVECmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9VSUtp
dFNQSS5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvVUlLaXRTUEkuaAppbmRleCA4ZWRkMDUy
YTAzODRiMGM3OTRmOTllZDcwN2JmNDVhMWU3MjkwZmYyLi44ZWNmMzA1ZWZiZTc3MTQzOGQwMjRm
NzcwZTk1ZGVlYzUwZDFmMWQyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9V
SUtpdFNQSS5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL1VJS2l0U1BJLmgKQEAgLTM5
LDcgKzM5LDEyIEBACiBAcHJvdG9jb2wgVUlEcmFnU2Vzc2lvbjsKIEBjbGFzcyBVSURyYWdJbnRl
cmFjdGlvbjsKIEBjbGFzcyBVSURyYWdJdGVtOworI2ltcG9ydCA8VUlLaXQvTlNTdHJpbmcrVUlJ
dGVtUHJvdmlkZXIuaD4KKyNpbXBvcnQgPFVJS2l0L05TVVJMK1VJSXRlbVByb3ZpZGVyLmg+CiAj
aW1wb3J0IDxVSUtpdC9VSURyYWdJbnRlcmFjdGlvbl9Qcml2YXRlLmg+CisjaW1wb3J0IDxVSUtp
dC9VSUltYWdlK1VJSXRlbVByb3ZpZGVyLmg+CisjaW1wb3J0IDxVSUtpdC9VSUl0ZW1Qcm92aWRl
ci5oPgorI2ltcG9ydCA8VUlLaXQvVUlJdGVtUHJvdmlkZXJfUHJpdmF0ZS5oPgogI2VuZGlmIC8v
IEVOQUJMRShEUkFHX1NVUFBPUlQpCiAKICNlbHNlCkBAIC03MCw2ICs3NSw0MiBAQCBXVEZfRVhU
RVJOX0NfRU5ECiAtICh2b2lkKWhhbmRsZUtleVdlYkV2ZW50OihXZWJFdmVudCAqKXRoZUV2ZW50
IHdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV2ViRXZlbnQgKiwgQk9PTCkpY29tcGxl
dGlvbkhhbmRsZXI7CiBAZW5kCiAKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorCitAaW50ZXJm
YWNlIE5TVVJMICgpCitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgc2V0dGVyPV9zZXRUaXRs
ZTopIE5TU3RyaW5nICpfdGl0bGU7CitAZW5kCisKKyNkZWZpbmUgVUlJdGVtUHJvdmlkZXJSZXBy
ZXNlbnRhdGlvbk9wdGlvbnNWaXNpYmlsaXR5QWxsIE5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRp
b25WaXNpYmlsaXR5QWxsCisKK0Bwcm90b2NvbCBVSUl0ZW1Qcm92aWRlclJlYWRpbmcgPE5TSXRl
bVByb3ZpZGVyUmVhZGluZz4KKworQHJlcXVpcmVkCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJ
dGVtUHJvdmlkZXJEYXRhOihOU0RhdGEgKilkYXRhIHR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAq
KXR5cGVJZGVudGlmaWVyIGVycm9yOihOU0Vycm9yICoqKW91dEVycm9yOworCitAZW5kCisKK0Bw
cm90b2NvbCBVSUl0ZW1Qcm92aWRlcldyaXRpbmcgPE5TSXRlbVByb3ZpZGVyV3JpdGluZz4KKwor
QHJlcXVpcmVkCistIChOU1Byb2dyZXNzICopbG9hZERhdGFXaXRoVHlwZUlkZW50aWZpZXI6KE5T
U3RyaW5nICopdHlwZUlkZW50aWZpZXIgZm9ySXRlbVByb3ZpZGVyQ29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKE5TRGF0YSAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworCitAZW5k
CisKK0BpbnRlcmZhY2UgTlNBdHRyaWJ1dGVkU3RyaW5nICgpIDxVSUl0ZW1Qcm92aWRlclJlYWRp
bmcsIFVJSXRlbVByb3ZpZGVyV3JpdGluZz4KK0BlbmQKK0BpbnRlcmZhY2UgTlNTdHJpbmcgKCkg
PFVJSXRlbVByb3ZpZGVyUmVhZGluZywgVUlJdGVtUHJvdmlkZXJXcml0aW5nPgorQGVuZAorQGlu
dGVyZmFjZSBOU1VSTCAoKSA8VUlJdGVtUHJvdmlkZXJSZWFkaW5nLCBVSUl0ZW1Qcm92aWRlcldy
aXRpbmc+CitAZW5kCitAaW50ZXJmYWNlIFVJSW1hZ2UgKCkgPFVJSXRlbVByb3ZpZGVyUmVhZGlu
ZywgVUlJdGVtUHJvdmlkZXJXcml0aW5nPgorQGVuZAorCitAaW50ZXJmYWNlIFVJSXRlbVByb3Zp
ZGVyIDogTlNJdGVtUHJvdmlkZXIKK0BlbmQKKworI2VuZGlmCisKICNlbmRpZgogCiBAcHJvdG9j
b2wgVUlUZXh0SW5wdXRUcmFpdHNfUHJpdmF0ZV9Qcm9wb3NlZF9TUElfMzQ1ODM2MjggPFVJVGV4
dElucHV0UHJpdmF0ZT4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL0RyYWdB
bmREcm9wU2ltdWxhdG9yTWFjLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvRHJhZ0FuZERy
b3BTaW11bGF0b3JNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE3OTE4Y2M0ODM5YTg3NTdiYWY2MGI4OGYy
Mzg2MWFkMjJkMGE1ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFj
L0RyYWdBbmREcm9wU2ltdWxhdG9yTWFjLm1tCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRyYWdBbmREcm9wU2ltdWxhdG9yLmgiCisK
KyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiBQTEFURk9STShNQUMpICYmIFdLX0FQSV9FTkFC
TEVECisKKyNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKKworQGltcGxlbWVudGF0aW9uIERyYWdB
bmREcm9wU2ltdWxhdG9yIHsKKyAgICBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gX3dlYlZpZXc7
Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXc6KFRlc3RXS1dlYlZpZXcgKil3
ZWJWaWV3Cit7CisgICAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICAgICAgX3dlYlZp
ZXcgPSB3ZWJWaWV3OworICAgICAgICBbX3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpzZWxmXTsKKyAg
ICAgICAgW193ZWJWaWV3IF9zZXRJbnB1dERlbGVnYXRlOnNlbGZdOworICAgIH0KKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgaWYgKFtfd2ViVmlldyBVSURl
bGVnYXRlXSA9PSBzZWxmKQorICAgICAgICBbX3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpuaWxdOwor
CisgICAgaWYgKFtfd2ViVmlldyBfaW5wdXREZWxlZ2F0ZV0gPT0gc2VsZikKKyAgICAgICAgW193
ZWJWaWV3IF9zZXRJbnB1dERlbGVnYXRlOm5pbF07CisKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9
CisKKy0gKHZvaWQpcnVuRnJvbTooQ0dQb2ludClzdGFydExvY2F0aW9uIHRvOihDR1BvaW50KWVu
ZExvY2F0aW9uCit7CisgICAgLy8gRklYTUU6IEFkZCBhIG1lY2hhbmlzbSB0byBzaW11bGF0ZSBk
cmFnZ2luZyBvbiBtYWNPUy4KKyAgICBVTlVTRURfUEFSQU0oc3RhcnRMb2NhdGlvbik7CisgICAg
VU5VU0VEX1BBUkFNKGVuZExvY2F0aW9uKTsKK30KKworLSAoTlNBcnJheTxfV0tBdHRhY2htZW50
ICo+ICopaW5zZXJ0ZWRBdHRhY2htZW50cworeworICAgIHJldHVybiBAWyBdOworfQorCistIChO
U0FycmF5PF9XS0F0dGFjaG1lbnQgKj4gKilyZW1vdmVkQXR0YWNobWVudHMKK3sKKyAgICByZXR1
cm4gQFsgXTsKK30KKworLSAoRHJhZ0FuZERyb3BQaGFzZSlwaGFzZQoreworICAgIHJldHVybiBE
cmFnQW5kRHJvcFBoYXNlQ2FuY2VsbGVkOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBFTkFCTEUo
RFJBR19TVVBQT1JUKSAmJiBQTEFURk9STShNQUMpICYmIFdLX0FQSV9FTkFCTEVECg==
</data>

          </attachment>
      

    </bug>

</bugzilla>