<?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>3917</bug_id>
          
          <creation_ts>2005-07-09 00:58:35 -0700</creation_ts>
          <short_desc>DumpKCanvasTree needed for SVG layout testing with KCanvas</short_desc>
          <delta_ts>2005-08-06 12:01:26 -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>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>14268</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-07-09 00:58:35 -0700</bug_when>
    <thetext>We need an equivilent DumpKCanvasTree, like DumpRenderTree for khml.  This will allow for much faster 
KSVG regression testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15997</commentid>
    <comment_count>1</comment_count>
      <attachid>3235</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-08-05 18:44:05 -0700</bug_when>
    <thetext>Created attachment 3235
A preliminary patch, which seems to work except for a pesky crash</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16011</commentid>
    <comment_count>2</comment_count>
      <attachid>3237</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-08-06 02:29:33 -0700</bug_when>
    <thetext>Created attachment 3237
DumpKCanvasTree tool, including a few necessary WebCore+SVG changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16012</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-08-06 02:35:23 -0700</bug_when>
    <thetext>There are several components to this most recent patch.

#1 fixes the previous crash, by removing the &quot;delete renderingDevice&quot; from KCanvas, the 
renderingDevice is treated as a singleton under WebCore.
#2 adds two methods to KCanvasContainer to allow traversal of children
#3 includes a full &quot;first pass&quot; implementation of DumpKCanvasTree (modeled after DumpRenderTree)
#4 includes KCanvasTreeDebug.* support files, and renderTreeAsExternalRepresentation addition to 
DrawDocument
#5 includes missing operator&lt;&lt;(float) and operator&lt;&lt;(double) for QTextStream (declared but not 
previously defined).
#6 includes a somewhat unrelated fix to bison build script, removing bison generated headers before 
running bison to prevent double-concat.
#7 includes run-webkit-tests-svg script for running DumpKCanvasTree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16019</commentid>
    <comment_count>4</comment_count>
      <attachid>3237</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-06 10:40:48 -0700</bug_when>
    <thetext>Comment on attachment 3237
DumpKCanvasTree tool, including a few necessary WebCore+SVG changes.

I&apos;m not really happy with the copy and paste approach to developing scripts.
And also I&apos;m worried that there are too many scripts. It&apos;s now to the point
where almost half the scripts in the scripts directory are SVG-specific -- I
worked hard to keep the number of scripts needed for WebKit to a minimum and
this is pulling in the other direction. For example, WebKit has two build
scripts, and SVG has a lot more. Having a script named run-webkit-tests-svg
makes it harder to use bash completion to type run-webkit-tests.

All that having been said, I guess it&apos;s OK to land this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16028</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-08-06 11:48:31 -0700</bug_when>
    <thetext>Darin and I talked about this offline, and I followed up with:
http://bugzilla.opendarwin.org/show_bug.cgi?id=4300</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3235</attachid>
            <date>2005-08-05 18:44:05 -0700</date>
            <delta_ts>2005-08-06 02:29:33 -0700</delta_ts>
            <desc>A preliminary patch, which seems to work except for a pesky crash</desc>
            <filename>dumpkcanvastree.patch</filename>
            <type>text/plain</type>
            <size>24222</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IC4vRHVtcEtDYW52YXNUcmVlL0R1bXBLQ2FudmFzVHJlZS5tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IER1bXBLQ2FudmFzVHJlZS5tCmRpZmYgLU4gLi9EdW1wS0NhbnZhc1RyZWUvRHVtcEtD
YW52YXNUcmVlLm0KLS0tIC4vRHVtcEtDYW52YXNUcmVlL0R1bXBLQ2FudmFzVHJlZS5tCTEgSmFu
IDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIC4vRHVtcEtDYW52YXNUcmVlL0R1bXBLQ2FudmFzVHJl
ZS5tCTYgQXVnIDIwMDUgMDE6Mjc6MDUgLTAwMDAKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0IDxXZWJDb3JlK1NWRy9EcmF3RG9jdW1lbnRQcml2YXRlLmg+CisKK3N0YXRp
YyB2b2lkIGR1bXBSZW5kZXJUcmVlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKworaW50IG1haW4o
aW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBOU0F1dG9yZWxlYXNlUG9vbCAq
cG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdOworCisgICAgaWYgKGFyZ2Mg
PT0gMiAmJiBzdHJjbXAoYXJndlsxXSwgIi0iKSA9PSAwKSB7CisgICAgICAgIGNoYXIgZmlsZW5h
bWVCdWZmZXJbMjA0OF07CisgICAgICAgIHdoaWxlIChmZ2V0cyhmaWxlbmFtZUJ1ZmZlciwgc2l6
ZW9mKGZpbGVuYW1lQnVmZmVyKSwgc3RkaW4pKSB7CisgICAgICAgICAgICBjaGFyICpuZXdMaW5l
Q2hhcmFjdGVyID0gc3RyY2hyKGZpbGVuYW1lQnVmZmVyLCAnXG4nKTsKKyAgICAgICAgICAgIGlm
IChuZXdMaW5lQ2hhcmFjdGVyKSB7CisgICAgICAgICAgICAgICAgKm5ld0xpbmVDaGFyYWN0ZXIg
PSAnXDAnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZHVtcFJlbmRlclRyZWUoZmlsZW5h
bWVCdWZmZXIpOworICAgICAgICAgICAgcHV0cygiI0VPRiIpOworICAgICAgICAgICAgZmZsdXNo
KHN0ZG91dCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgaTsKKyAgICAg
ICAgZm9yIChpID0gMTsgaSAhPSBhcmdjOyArK2kpIHsKKyAgICAgICAgICAgIGR1bXBSZW5kZXJU
cmVlKGFyZ3ZbaV0pOworICAgICAgICB9CisgICAgfQorCisgICAgW3Bvb2wgcmVsZWFzZV07Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBSZW5kZXJUcmVlKGNvbnN0IGNoYXIg
KmZpbGVuYW1lKQoreworICAgIE5TU3RyaW5nICpzdmdQYXRoID0gW05TU3RyaW5nIHN0cmluZ1dp
dGhVVEY4U3RyaW5nOmZpbGVuYW1lXTsKKyAgICBpZiAoc3ZnUGF0aCA9PSBuaWwpIHsKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJjYW4ndCBwYXJzZSBmaWxlbmFtZSBhcyBVVEYtOFxuIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wg
PSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKKyAgICBEcmF3RG9jdW1lbnQgKmRv
Y3VtZW50ID0gW1tEcmF3RG9jdW1lbnQgYWxsb2NdIGluaXRXaXRoQ29udGVudHNPZkZpbGU6c3Zn
UGF0aF07CisgICAgCisgICAgTlNTdHJpbmcgKnJlc3VsdCA9IFtkb2N1bWVudCByZW5kZXJUcmVl
QXNFeHRlcm5hbFJlcHJlc2VudGF0aW9uXTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcHV0
cygiZXJyb3IiKTsKKyAgICBlbHNlCisgICAgICAgIGZwdXRzKFtyZXN1bHQgVVRGOFN0cmluZ10s
IHN0ZG91dCk7CisgICAgCisgICAgW2RvY3VtZW50IHJlbGVhc2VdOworICAgIFtwb29sIHJlbGVh
c2VdOworfQpJbmRleDogLi9EdW1wS0NhbnZhc1RyZWUvRHVtcEtDYW52YXNUcmVlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogcHJvamVjdC5wYnhwcm9qCmRp
ZmYgLU4gLi9EdW1wS0NhbnZhc1RyZWUvRHVtcEtDYW52YXNUcmVlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKLS0tIC4vRHVtcEtDYW52YXNUcmVlL0R1bXBLQ2FudmFzVHJlZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIC4vRHVtcEtDYW52
YXNUcmVlL0R1bXBLQ2FudmFzVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCTYgQXVnIDIw
MDUgMDE6Mjc6MDcgLTAwMDAKQEAgLTAsMCArMSwyNjUgQEAKKy8vICEkKlVURjgqJCEKK3sKKwlh
cmNoaXZlVmVyc2lvbiA9IDE7CisJY2xhc3NlcyA9IHsKKwl9OworCW9iamVjdFZlcnNpb24gPSA0
MjsKKwlvYmplY3RzID0geworCisvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCQk4
REQ3NkY5QTA0ODZBQTc2MDBEOTZCNUUgLyogRHVtcEtDYW52YXNUcmVlLm0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEZCNzc5NkZFODQxNTVEQzAyQUFD
MDcgLyogRHVtcEtDYW52YXNUcmVlLm0gKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsg
fTsgfTsKKwkJOERENzZGOUMwNDg2QUE3NjAwRDk2QjVFIC8qIEZvdW5kYXRpb24uZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhGQjc3
OUVGRTg0MTU1REMwMkFBQzA3IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9OworCQlBODEw
RTRCQzA4QTQ0NjI4MDAzMzNEOTggLyogV2ViQ29yZStTVkcuZnJhbWV3b3JrIGluIEZyYW1ld29y
a3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxMEU0QkIwOEE0NDYyODAw
MzMzRDk4IC8qIFdlYkNvcmUrU1ZHLmZyYW1ld29yayAqLzsgfTsKKy8qIEVuZCBQQlhCdWlsZEZp
bGUgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhCdWlsZFN0eWxlIHNlY3Rpb24gKi8KKwkJMDE0
Q0VBNEYwMDE4Q0U0ODExQ0EyOTIzIC8qIERlYnVnICovID0geworCQkJaXNhID0gUEJYQnVpbGRT
dHlsZTsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5POwor
CQkJCUdDQ19EWU5BTUlDX05PX1BJQyA9IE5POworCQkJCUdDQ19FTkFCTEVfRklYX0FORF9DT05U
SU5VRSA9IFlFUzsKKwkJCQlHQ0NfR0VORVJBVEVfREVCVUdHSU5HX1NZTUJPTFMgPSBZRVM7CisJ
CQkJR0NDX09QVElNSVpBVElPTl9MRVZFTCA9IDA7CisJCQkJWkVST19MSU5LID0gWUVTOworCQkJ
fTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJMDE0Q0VBNTAwMDE4Q0U0ODExQ0EyOTIzIC8q
IFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBQQlhCdWlsZFN0eWxlOworCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gWUVTOworCQkJCUdDQ19FTkFCTEVfRklYX0FO
RF9DT05USU5VRSA9IE5POworCQkJCVpFUk9fTElOSyA9IE5POworCQkJfTsKKwkJCW5hbWUgPSBS
ZWxlYXNlOworCQl9OworLyogRW5kIFBCWEJ1aWxkU3R5bGUgc2VjdGlvbiAqLworCisvKiBCZWdp
biBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJOERENzZGOUUwNDg2QUE3NjAw
RDk2QjVFIC8qIENvcHlGaWxlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWENvcHlGaWxlc0J1aWxkUGhh
c2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSA4OworCQkJZHN0UGF0aCA9IC91c3Ivc2hhcmUvbWFu
L21hbjEvOworCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDA7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMTsKKwkJfTsKKy8qIEVuZCBQ
QlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYRmlsZVJlZmVy
ZW5jZSBzZWN0aW9uICovCisJCTA4RkI3Nzk2RkU4NDE1NURDMDJBQUMwNyAvKiBEdW1wS0NhbnZh
c1RyZWUubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gRHVtcEtDYW52YXNU
cmVlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4RkI3NzlFRkU4NDE1NURDMDJB
QUMwNyAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gRm91bmRhdGlv
bi5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9u
LmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKKwkJOERENzZGQTEwNDg2
QUE3NjAwRDk2QjVFIC8qIER1bXBLQ2FudmFzVHJlZSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5j
bHVkZUluSW5kZXggPSAwOyBwYXRoID0gRHVtcEtDYW52YXNUcmVlOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OworCQlBODEwRTRCQjA4QTQ0NjI4MDAzMzNEOTggLyogV2ViQ29y
ZStTVkcuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IHBhdGggPSAiV2ViQ29yZStTVkcuZnJhbWV3b3Jr
Ijsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKy8qIEVuZCBQQlhGaWxlUmVm
ZXJlbmNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2Vj
dGlvbiAqLworCQk4REQ3NkY5QjA0ODZBQTc2MDBEOTZCNUUgLyogRnJhbWV3b3JrcyAqLyA9IHsK
KwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0g
MjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCThERDc2RjlDMDQ4NkFBNzYwMEQ5NkI1RSAv
KiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCUE4MTBFNEJDMDhB
NDQ2MjgwMDMzM0Q5OCAvKiBXZWJDb3JlK1NWRy5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywK
KwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsK
Ky8qIEVuZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBC
WEdyb3VwIHNlY3Rpb24gKi8KKwkJMDhGQjc3OTRGRTg0MTU1REMwMkFBQzA3IC8qIER1bXBLQ2Fu
dmFzVHJlZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
MDhGQjc3OTVGRTg0MTU1REMwMkFBQzA3IC8qIFNvdXJjZSAqLywKKwkJCQkwOEZCNzc5REZFODQx
NTVEQzAyQUFDMDcgLyogRXh0ZXJuYWwgRnJhbWV3b3JrcyBhbmQgTGlicmFyaWVzICovLAorCQkJ
CTFBQjY3NEFERkU5RDU0QjUxMUNBMkNCQiAvKiBQcm9kdWN0cyAqLywKKwkJCSk7CisJCQluYW1l
ID0gRHVtcEtDYW52YXNUcmVlOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJ
MDhGQjc3OTVGRTg0MTU1REMwMkFBQzA3IC8qIFNvdXJjZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMDhGQjc3OTZGRTg0MTU1REMwMkFBQzA3IC8qIER1
bXBLQ2FudmFzVHJlZS5tICovLAorCQkJKTsKKwkJCW5hbWUgPSBTb3VyY2U7CisJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOworCQl9OworCQkwOEZCNzc5REZFODQxNTVEQzAyQUFDMDcgLyogRXh0
ZXJuYWwgRnJhbWV3b3JrcyBhbmQgTGlicmFyaWVzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBODEwRTRCQjA4QTQ0NjI4MDAzMzNEOTggLyogV2ViQ29y
ZStTVkcuZnJhbWV3b3JrICovLAorCQkJCTA4RkI3NzlFRkU4NDE1NURDMDJBQUMwNyAvKiBGb3Vu
ZGF0aW9uLmZyYW1ld29yayAqLywKKwkJCSk7CisJCQluYW1lID0gIkV4dGVybmFsIEZyYW1ld29y
a3MgYW5kIExpYnJhcmllcyI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkx
QUI2NzRBREZFOUQ1NEI1MTFDQTJDQkIgLyogUHJvZHVjdHMgKi8gPSB7CisJCQlpc2EgPSBQQlhH
cm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCThERDc2RkExMDQ4NkFBNzYwMEQ5NkI1RSAvKiBE
dW1wS0NhbnZhc1RyZWUgKi8sCisJCQkpOworCQkJbmFtZSA9IFByb2R1Y3RzOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKy8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICovCisKKy8q
IEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCisJCThERDc2Rjk2MDQ4NkFBNzYwMEQ5
NkI1RSAvKiBEdW1wS0NhbnZhc1RyZWUgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7
CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gQTgxMERFRDUwOEE0MEYzMTAwMzMzRDk4IC8q
IEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJEdW1wS0NhbnZh
c1RyZWUiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJOERENzZGOTkwNDg2QUE3NjAwRDk2
QjVFIC8qIFNvdXJjZXMgKi8sCisJCQkJOERENzZGOUIwNDg2QUE3NjAwRDk2QjVFIC8qIEZyYW1l
d29ya3MgKi8sCisJCQkJOERENzZGOUUwNDg2QUE3NjAwRDk2QjVFIC8qIENvcHlGaWxlcyAqLywK
KwkJCSk7CisJCQlidWlsZFJ1bGVzID0gKAorCQkJKTsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJ
CQkJR0NDX0dFTkVSQVRFX0RFQlVHR0lOR19TWU1CT0xTID0gTk87CisJCQkJR0NDX01PREVMX1RV
TklORyA9IEc1OworCQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVM7CisJCQkJ
R0NDX1BSRUZJWF9IRUFERVIgPSBEdW1wS0NhbnZhc1RyZWVfUHJlZml4LnBjaDsKKwkJCQlHQ0Nf
V0FSTl9BQk9VVF9SRVRVUk5fVFlQRSA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9VTlVTRURfVkFSSUFC
TEUgPSBZRVM7CisJCQkJSU5TVEFMTF9QQVRIID0gIiQoSE9NRSkvYmluIjsKKwkJCQlQUkVCSU5E
SU5HID0gTk87CisJCQkJUFJPRFVDVF9OQU1FID0gRHVtcEtDYW52YXNUcmVlOworCQkJfTsKKwkJ
CWRlcGVuZGVuY2llcyA9ICgKKwkJCSk7CisJCQluYW1lID0gRHVtcEtDYW52YXNUcmVlOworCQkJ
cHJvZHVjdEluc3RhbGxQYXRoID0gIiQoSE9NRSkvYmluIjsKKwkJCXByb2R1Y3ROYW1lID0gRHVt
cEtDYW52YXNUcmVlOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDhERDc2RkExMDQ4NkFBNzYwMEQ5
NkI1RSAvKiBEdW1wS0NhbnZhc1RyZWUgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUu
cHJvZHVjdC10eXBlLnRvb2wiOworCQl9OworLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9u
ICovCisKKy8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLworCQkwOEZCNzc5M0ZFODQxNTVE
QzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CisJCQlpc2EgPSBQQlhQcm9qZWN0Owor
CQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEE4MTBERUQ5MDhBNDBGMzEwMDMzM0Q5OCAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIkR1bXBLQ2FudmFzVHJlZSIg
Ki87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJfTsKKwkJCWJ1aWxkU3R5bGVzID0gKAorCQkJ
CTAxNENFQTRGMDAxOENFNDgxMUNBMjkyMyAvKiBEZWJ1ZyAqLywKKwkJCQkwMTRDRUE1MDAwMThD
RTQ4MTFDQTI5MjMgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQloYXNTY2FubmVkRm9yRW5jb2Rp
bmdzID0gMTsKKwkJCW1haW5Hcm91cCA9IDA4RkI3Nzk0RkU4NDE1NURDMDJBQUMwNyAvKiBEdW1w
S0NhbnZhc1RyZWUgKi87CisJCQlwcm9qZWN0RGlyUGF0aCA9ICIiOworCQkJdGFyZ2V0cyA9ICgK
KwkJCQk4REQ3NkY5NjA0ODZBQTc2MDBEOTZCNUUgLyogRHVtcEtDYW52YXNUcmVlICovLAorCQkJ
KTsKKwkJfTsKKy8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYU291
cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQk4REQ3NkY5OTA0ODZBQTc2MDBEOTZCNUUgLyog
U291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCThERDc2RjlBMDQ4NkFB
NzYwMEQ5NkI1RSAvKiBEdW1wS0NhbnZhc1RyZWUubSBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBC
WFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gWENCdWlsZENvbmZpZ3Vy
YXRpb24gc2VjdGlvbiAqLworCQlBODEwREVENjA4QTQwRjMxMDAzMzNEOTggLyogRGV2ZWxvcG1l
bnQgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGlu
Z3MgPSB7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5POworCQkJCUdDQ19EWU5BTUlDX05PX1BJ
QyA9IE5POworCQkJCUdDQ19FTkFCTEVfRklYX0FORF9DT05USU5VRSA9IFlFUzsKKwkJCQlHQ0Nf
R0VORVJBVEVfREVCVUdHSU5HX1NZTUJPTFMgPSBZRVM7CisJCQkJR0NDX01PREVMX1RVTklORyA9
IEc1OworCQkJCUdDQ19PUFRJTUlaQVRJT05fTEVWRUwgPSAwOworCQkJCUdDQ19QUkVDT01QSUxF
X1BSRUZJWF9IRUFERVIgPSBZRVM7CisJCQkJR0NDX1dBUk5fQUJPVVRfUkVUVVJOX1RZUEUgPSBZ
RVM7CisJCQkJR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVTOworCQkJCUlOU1RBTExfUEFU
SCA9ICIkKEhPTUUpL2JpbiI7CisJCQkJUFJFQklORElORyA9IE5POworCQkJCVBST0RVQ1RfTkFN
RSA9IER1bXBLQ2FudmFzVHJlZTsKKwkJCQlaRVJPX0xJTksgPSBZRVM7CisJCQl9OworCQkJbmFt
ZSA9IERldmVsb3BtZW50OworCQl9OworCQlBODEwREVENzA4QTQwRjMxMDAzMzNEOTggLyogRGVw
bG95bWVudCAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gWUVTOworCQkJCUdDQ19FTkFCTEVf
RklYX0FORF9DT05USU5VRSA9IE5POworCQkJCUdDQ19HRU5FUkFURV9ERUJVR0dJTkdfU1lNQk9M
UyA9IE5POworCQkJCUdDQ19NT0RFTF9UVU5JTkcgPSBHNTsKKwkJCQlHQ0NfUFJFQ09NUElMRV9Q
UkVGSVhfSEVBREVSID0gWUVTOworCQkJCUdDQ19XQVJOX0FCT1VUX1JFVFVSTl9UWVBFID0gWUVT
OworCQkJCUdDQ19XQVJOX1VOVVNFRF9WQVJJQUJMRSA9IFlFUzsKKwkJCQlJTlNUQUxMX1BBVEgg
PSAiJChIT01FKS9iaW4iOworCQkJCVBSRUJJTkRJTkcgPSBOTzsKKwkJCQlQUk9EVUNUX05BTUUg
PSBEdW1wS0NhbnZhc1RyZWU7CisJCQkJWkVST19MSU5LID0gTk87CisJCQl9OworCQkJbmFtZSA9
IERlcGxveW1lbnQ7CisJCX07CisJCUE4MTBERUQ4MDhBNDBGMzEwMDMzM0Q5OCAvKiBEZWZhdWx0
ICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdz
ID0geworCQkJCUdDQ19HRU5FUkFURV9ERUJVR0dJTkdfU1lNQk9MUyA9IE5POworCQkJCUdDQ19N
T0RFTF9UVU5JTkcgPSBHNTsKKwkJCQlHQ0NfUFJFQ09NUElMRV9QUkVGSVhfSEVBREVSID0gWUVT
OworCQkJCUdDQ19XQVJOX0FCT1VUX1JFVFVSTl9UWVBFID0gWUVTOworCQkJCUdDQ19XQVJOX1VO
VVNFRF9WQVJJQUJMRSA9IFlFUzsKKwkJCQlJTlNUQUxMX1BBVEggPSAiJChIT01FKS9iaW4iOwor
CQkJCVBSRUJJTkRJTkcgPSBOTzsKKwkJCQlQUk9EVUNUX05BTUUgPSBEdW1wS0NhbnZhc1RyZWU7
CisJCQl9OworCQkJbmFtZSA9IERlZmF1bHQ7CisJCX07CisJCUE4MTBERURBMDhBNDBGMzEwMDMz
M0Q5OCAvKiBEZXZlbG9wbWVudCAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9u
OworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCX07CisJCQluYW1lID0gRGV2ZWxvcG1lbnQ7CisJ
CX07CisJCUE4MTBERURCMDhBNDBGMzEwMDMzM0Q5OCAvKiBEZXBsb3ltZW50ICovID0geworCQkJ
aXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJfTsK
KwkJCW5hbWUgPSBEZXBsb3ltZW50OworCQl9OworCQlBODEwREVEQzA4QTQwRjMxMDAzMzNEOTgg
LyogRGVmYXVsdCAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVp
bGRTZXR0aW5ncyA9IHsKKwkJCX07CisJCQluYW1lID0gRGVmYXVsdDsKKwkJfTsKKy8qIEVuZCBY
Q0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCisKKy8qIEJlZ2luIFhDQ29uZmlndXJhdGlv
bkxpc3Qgc2VjdGlvbiAqLworCQlBODEwREVENTA4QTQwRjMxMDAzMzNEOTggLyogQnVpbGQgY29u
ZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkR1bXBLQ2FudmFzVHJlZSIgKi8g
PSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9u
cyA9ICgKKwkJCQlBODEwREVENjA4QTQwRjMxMDAzMzNEOTggLyogRGV2ZWxvcG1lbnQgKi8sCisJ
CQkJQTgxMERFRDcwOEE0MEYzMTAwMzMzRDk4IC8qIERlcGxveW1lbnQgKi8sCisJCQkJQTgxMERF
RDgwOEE0MEYzMTAwMzMzRDk4IC8qIERlZmF1bHQgKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVm
YXVsdDsKKwkJfTsKKwkJQTgxMERFRDkwOEE0MEYzMTAwMzMzRDk4IC8qIEJ1aWxkIGNvbmZpZ3Vy
YXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiRHVtcEtDYW52YXNUcmVlIiAqLyA9IHsKKwkJCWlz
YSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJ
CUE4MTBERURBMDhBNDBGMzEwMDMzM0Q5OCAvKiBEZXZlbG9wbWVudCAqLywKKwkJCQlBODEwREVE
QjA4QTQwRjMxMDAzMzNEOTggLyogRGVwbG95bWVudCAqLywKKwkJCQlBODEwREVEQzA4QTQwRjMx
MDAzMzNEOTggLyogRGVmYXVsdCAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklz
VmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWZhdWx0OworCQl9
OworLyogRW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLworCX07CisJcm9vdE9iamVj
dCA9IDA4RkI3NzkzRkU4NDE1NURDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKK30KSW5k
ZXg6IC4vU2NyaXB0cy9idWlsZC1kdW1wa2NhbnZhc3RyZWUKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
YnVpbGQtZHVtcGtjYW52YXN0cmVlCmRpZmYgLU4gLi9TY3JpcHRzL2J1aWxkLWR1bXBrY2FudmFz
dHJlZQotLS0gLi9TY3JpcHRzL2J1aWxkLWR1bXBrY2FudmFzdHJlZQkxIEphbiAxOTcwIDAwOjAw
OjAwIC0wMDAwCisrKyAuL1NjcmlwdHMvYnVpbGQtZHVtcGtjYW52YXN0cmVlCTYgQXVnIDIwMDUg
MDE6Mjc6MTEgLTAwMDAKQEAgLTAsMCArMSw0NyBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKKyMg
Q29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKKyMgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyMgICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisjIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFNpbXBsaWZpZWQgYnVpbGQgc2Ny
aXB0IGZvciBXZWJLaXQgT3BlbiBTb3VyY2UgUHJvamVjdC4KKyMgTW9kaWZpZWQgY29weSBvZiBi
dWlsZC1kdW1wcmVuZGVydHJlZS4gUGVyaGFwcyB0aGVzZSBjb3VsZCBzaGFyZSBjb2RlLgorCit1
c2Ugc3RyaWN0OwordXNlIEZpbmRCaW47Cit1c2UgbGliICRGaW5kQmluOjpCaW47Cit1c2Ugd2Vi
a2l0ZGlyczsKKworY2hlY2tSZXF1aXJlZFN5c3RlbUNvbmZpZygpOworc2V0Q29uZmlndXJhdGlv
bigpOworY2hkaXJXZWJLaXQoKTsKK215IEBvcHRpb25zID0gWGNvZGVPcHRpb25zKCk7CisKKyMg
Q2hlY2sgdG8gc2VlIHRoYXQgYWxsIHRoZSBmcmFtZXdvcmtzIGFyZSBidWlsdC4KK2NoZWNrU1ZH
RnJhbWV3b3JrcygpOworCisjIEJ1aWxkCitjaGRpciAiV2ViS2l0VG9vbHMvRHVtcEtDYW52YXNU
cmVlIiBvciBkaWU7CitleGl0IHN5c3RlbSAieGNvZGVidWlsZCIsICItcHJvamVjdCIsICJEdW1w
S0NhbnZhc1RyZWUueGNvZGVwcm9qIiwgQG9wdGlvbnM7CkluZGV4OiAuL1NjcmlwdHMvcnVuLXdl
YmtpdC10ZXN0cy1zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogcnVuLXdlYmtpdC10ZXN0cy1zdmcK
ZGlmZiAtTiAuL1NjcmlwdHMvcnVuLXdlYmtpdC10ZXN0cy1zdmcKLS0tIC4vU2NyaXB0cy9ydW4t
d2Via2l0LXRlc3RzLXN2ZwkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyAuL1NjcmlwdHMv
cnVuLXdlYmtpdC10ZXN0cy1zdmcJNiBBdWcgMjAwNSAwMToyNzoxMSAtMDAwMApAQCAtMCwwICsx
LDI1MyBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKKyMgQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyMgMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyMgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorIyBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjIFNjcmlwdCB0byBydW4gdGhlIFdlYiBLaXQgT3BlbiBTb3VyY2UgUHJvamVj
dCBsYXlvdXQgdGVzdHMuCisKK3VzZSBzdHJpY3Q7Cit1c2UgSVBDOjpPcGVuMjsKK3VzZSBGaW5k
QmluOwordXNlIEN3ZDsKK3VzZSBsaWIgJEZpbmRCaW46OkJpbjsKK3VzZSB3ZWJraXRkaXJzOwor
CisjIFJ1biBhbGwgdGhlIHRlc3RzIHBhc3NlZCBpbiBvbiB0aGUgY29tbWFuZCBsaW5lLgorIyBJ
ZiBubyB0ZXN0cyBhcmUgcGFzc2VkLCBmaW5kIGFsbCB0aGUgLnN2ZyBmaWxlcyBpbiB0aGUgdGVz
dCBkaXJlY3RvcnkuCisKKyMgUnVuIGVhY2ggdGV4dC4KKyMgQ29tcGFyZSBhZ2FpbnN0IHRoZSBl
eGlzdGluZyBmaWxlIHh4eC1leHBlY3RlZC50eHQuCisjIElmIHRoZXJlIGlzIGEgbWlzbWF0Y2gs
IGdlbmVyYXRlIHh4eC1hY3R1YWwudHh0IGFuZCB4eHgtZGlmZnMudHh0LgorCisjIEF0IHRoZSBl
bmQsIHJlcG9ydDoKKyMgICB0aGUgbnVtYmVyIG9mIHRlc3RzIHRoYXQgZ290IHRoZSBleHBlY3Rl
ZCByZXN1bHRzCisjICAgdGhlIG51bWJlciBvZiB0ZXN0cyB0aGF0IHJhbiwgYnV0IGRpZCBub3Qg
Z2V0IHRoZSBleHBlY3RlZCByZXN1bHRzCisjICAgdGhlIG51bWJlciBvZiB0ZXN0cyB0aGF0IGZh
aWxlZCB0byBydW4KKyMgICB0aGUgbnVtYmVyIG9mIHRlc3RzIHRoYXQgd2VyZSBydW4gYnV0IGhh
ZCBubyBleHBlY3RlZCByZXN1bHRzIHRvIGNvbXBhcmUgYWdhaW5zdAorCitzZXRDb25maWd1cmF0
aW9uKCk7CitteSAkcHJvZHVjdERpciA9IHByb2R1Y3REaXIoKTsKKworY2hkaXJXZWJLaXQoKTsK
KworbXkgJHJlc3VsdCA9IHN5c3RlbSAiV2ViS2l0VG9vbHMvU2NyaXB0cy9idWlsZC1kdW1wa2Nh
bnZhc3RyZWUiLCBAQVJHVjsKK2V4aXQgJHJlc3VsdCBpZiAkcmVzdWx0OworCitteSAkdG9vbCA9
ICIkcHJvZHVjdERpci9EdW1wS0NhbnZhc1RyZWUiOworZGllICJjYW4ndCBmaW5kIGV4ZWN1dGFi
bGUgRHVtcEtDYW52YXNUcmVlIHRvb2wgKGxvb2tlZCBpbiAkcHJvZHVjdERpcilcbiIgaWYgIS14
ICR0b29sOworCitjaGVja1NWR0ZyYW1ld29ya3MoKTsKKworbXkgJHdvcmtpbmdEaXIgPSBnZXRj
d2QoKTsKK215ICRTVkdTdXBwb3J0RGlyZWN0b3J5ID0gIiR3b3JraW5nRGlyL1NWR1N1cHBvcnQi
OworbXkgJHRlc3REaXJlY3RvcnkgPSAiJFNWR1N1cHBvcnREaXJlY3RvcnkvbGF5b3V0LXRlc3Rz
IjsKK215ICR0ZXN0UmVzdWx0c0RpcmVjdG9yeSA9ICIvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMi
OworbXkgJHRlc3RSZXN1bHRzID0gIiR0ZXN0UmVzdWx0c0RpcmVjdG9yeS9yZXN1bHRzLmh0bWwi
OworCiskRU5We0RZTERfRlJBTUVXT1JLX1BBVEh9ID0gJHByb2R1Y3REaXI7CisKK215IEB0ZXN0
czsKKworbXkgJGZpbmRBcmd1bWVudHMgPSAiXFwoIC1uYW1lIHJlc291cmNlcyBcXCEgLXBydW5l
IFxcKSAtb3IgLW5hbWUgJyouc3ZnJyI7CitteSAkZm91bmRUZXN0TmFtZSA9IDA7Citmb3IgbXkg
JHRlc3QgKEBBUkdWKSB7CisgICAgbmV4dCBpZiAkdGVzdCA9fiAvXi0vOworICAgICRmb3VuZFRl
c3ROYW1lID0gMTsKKyAgICAkdGVzdCA9fiBzL14kdGVzdERpcmVjdG9yeVwvLy87CisgICAgaWYg
KCR0ZXN0ID1+IC9eXC8vKSB7CisgICAgICAgIHByaW50ICJjYW4ndCBydW4gdGVzdCBvdXRzaWRl
ICR0ZXN0RGlyZWN0b3J5XG4iOworICAgIH0gZWxzaWYgKC1mICIkdGVzdERpcmVjdG9yeS8kdGVz
dCIpIHsKKyAgICAgICAgaWYgKCR0ZXN0ICF+IC9cLihzdmcpJC8pIHsKKyAgICAgICAgICAgIHBy
aW50ICJ0ZXN0ICR0ZXN0IGRvZXMgbm90IGhhdmUgYW4gLnN2ZyBleHRlbnNpb25cbiI7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoIEB0ZXN0cywgJHRlc3Q7CisgICAgICAgIH0K
KyAgICB9IGVsc2lmICgtZCAiJHRlc3REaXJlY3RvcnkvJHRlc3QiKSB7CisgICAgICAgIHB1c2gg
QHRlc3RzLCBtYXAgeyBjaG9tcDsgcy1eJHRlc3REaXJlY3RvcnkvLS07ICRfOyB9IGBmaW5kIC1M
cyAkdGVzdERpcmVjdG9yeS8kdGVzdCAkZmluZEFyZ3VtZW50c2A7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgcHJpbnQgInRlc3QgJHRlc3Qgbm90IGZvdW5kXG4iOworICAgIH0KK30KK2lmICghJGZv
dW5kVGVzdE5hbWUpIHsKKyAgICBAdGVzdHMgPSBtYXAgeyBjaG9tcDsgcy1eJHRlc3REaXJlY3Rv
cnkvLS07ICRfOyB9IGBmaW5kIC1McyAkdGVzdERpcmVjdG9yeSAkZmluZEFyZ3VtZW50c2A7Cit9
CisKK2RpZSAibm8gdGVzdHMgdG8gcnVuXG4iIGlmICFAdGVzdHM7CisKK215ICVjb3VudHM7Citt
eSAldGVzdHM7CitteSAkY291bnQ7CisKK29wZW4yKFwqSU4sIFwqT1VULCAkdG9vbCwgIi0iKSBv
ciBkaWU7CisKKyR8ID0gMTsKKworZm9yIG15ICR0ZXN0IChAdGVzdHMpIHsKKyAgICBuZXh0IGlm
ICR0ZXN0IGVxICdyZXN1bHRzLmh0bWwnOworICAgIAorICAgIG15ICRiYXNlID0gJHRlc3Q7Cisg
ICAgJGJhc2UgPX4gcy9cLihzdmcpJC8vOworICAgIAorICAgIHByaW50ICJydW5uaW5nICRiYXNl
IHRlc3QiOworICAgIAorICAgIG15ICRyZXN1bHQ7CisKKyAgICBwcmludCBPVVQgIiR0ZXN0RGly
ZWN0b3J5LyR0ZXN0XG4iOworCisgICAgbXkgJGFjdHVhbCA9ICIiOworICAgIHdoaWxlICg8SU4+
KSB7CisgICAgICAgIGxhc3QgaWYgLyNFT0YkLzsKKyAgICAgICAgJGFjdHVhbCAuPSAkXzsKKyAg
ICB9CisgICAgCisgICAgbXkgJGV4cGVjdGVkOworICAgIGlmIChvcGVuIEVYUEVDVEVELCAiPCIs
ICIkdGVzdERpcmVjdG9yeS8kYmFzZS1leHBlY3RlZC50eHQiKSB7CisgICAgICAgICRleHBlY3Rl
ZCA9ICIiOworICAgICAgICB3aGlsZSAoPEVYUEVDVEVEPikgeworICAgICAgICAgICAgJGV4cGVj
dGVkIC49ICRfOworICAgICAgICB9CisgICAgICAgIGNsb3NlIEVYUEVDVEVEOworICAgIH0KKyAg
ICBpZiAoIWRlZmluZWQgJGV4cGVjdGVkKSB7CisgICAgICAgIHByaW50ICIgLT4gbmV3IHRlc3Rc
biI7ICAgICAgICAKKyAgICAgICAgJHJlc3VsdCA9ICJuZXciOworICAgICAgICBvcGVuIEVYUEVD
VEVELCAiPiIsICIkdGVzdERpcmVjdG9yeS8kYmFzZS1leHBlY3RlZC50eHQiIG9yIGRpZSAiY291
bGQgbm90IGNyZWF0ZSAkdGVzdERpcmVjdG9yeS8kYmFzZS1leHBlY3RlZC50eHRcbiI7CisgICAg
ICAgIHByaW50IEVYUEVDVEVEICRhY3R1YWw7CisgICAgICAgIGNsb3NlIEVYUEVDVEVEOworICAg
ICAgICB1bmxpbmsgIiR0ZXN0UmVzdWx0c0RpcmVjdG9yeS8kYmFzZS1hY3R1YWwudHh0IjsKKyAg
ICAgICAgdW5saW5rICIkdGVzdFJlc3VsdHNEaXJlY3RvcnkvJGJhc2UtZGlmZnMudHh0IjsKKyAg
ICB9IGVsc2lmICgkYWN0dWFsIGVxICRleHBlY3RlZCkgeworICAgICAgICBwcmludCAiIC0+IHN1
Y2NlZWRlZFxuIjsgICAgICAgIAorICAgICAgICAkcmVzdWx0ID0gIm1hdGNoIjsKKyAgICAgICAg
dW5saW5rICIkdGVzdFJlc3VsdHNEaXJlY3RvcnkvJGJhc2UtYWN0dWFsLnR4dCI7CisgICAgICAg
IHVubGluayAiJHRlc3RSZXN1bHRzRGlyZWN0b3J5LyRiYXNlLWRpZmZzLnR4dCI7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgcHJpbnQgIiAtPiBmYWlsZWRcbiI7ICAgICAgICAKKyAgICAgICAgJHJl
c3VsdCA9ICJtaXNtYXRjaCI7CisgICAgICAgIG15ICRkaXIgPSAiJHRlc3RSZXN1bHRzRGlyZWN0
b3J5LyRiYXNlIjsKKyAgICAgICAgJGRpciA9fiBzfC9bXi9dKyR8fDsKKyAgICAgICAgc3lzdGVt
ICJta2RpciIsICItcCIsICRkaXI7CisgICAgICAgIG9wZW4gQUNUVUFMLCAiPiIsICIkdGVzdFJl
c3VsdHNEaXJlY3RvcnkvJGJhc2UtYWN0dWFsLnR4dCIgb3IgZGllOworICAgICAgICBwcmludCBB
Q1RVQUwgJGFjdHVhbDsKKyAgICAgICAgY2xvc2UgQUNUVUFMOworICAgICAgICBzeXN0ZW0gImRp
ZmYgLXUgJHRlc3REaXJlY3RvcnkvJGJhc2UtZXhwZWN0ZWQudHh0ICR0ZXN0UmVzdWx0c0RpcmVj
dG9yeS8kYmFzZS1hY3R1YWwudHh0ID4gJHRlc3RSZXN1bHRzRGlyZWN0b3J5LyRiYXNlLWRpZmZz
LnR4dCI7CisgICAgfQorICAgIAorICAgICRjb3VudCArPSAxOworICAgICRjb3VudHN7JHJlc3Vs
dH0gKz0gMTsKKyAgICBwdXNoIEB7JHRlc3RzeyRyZXN1bHR9fSwgJHRlc3Q7Cit9CisKK2Nsb3Nl
IElOOworY2xvc2UgT1VUOworCitteSAldGV4dCA9ICgKKyAgICBtYXRjaCA9PiAic3VjY2VlZGVk
IiwKKyAgICBtaXNtYXRjaCA9PiAiaGFkIGluY29ycmVjdCBsYXlvdXQiLAorICAgIG5ldyA9PiAi
d2VyZSBuZXciLAorICAgIGZhaWwgPT4gImZhaWxlZCAodG9vbCBkaWQgbm90IGV4ZWN1dGUgc3Vj
Y2Vzc2Z1bGx5KSIsCispOworCitwcmludCAiXG4iOworCitpZiAoJGNvdW50c3ttYXRjaH0gJiYg
JGNvdW50c3ttYXRjaH0gPT0gJGNvdW50KSB7CisgICAgcHJpbnQgImFsbCAkY291bnQgdGVzdCBj
YXNlcyBzdWNjZWVkZWRcbiI7CisgICAgdW5saW5rICR0ZXN0UmVzdWx0czsKK30gZWxzZSB7Cisg
ICAgZm9yIG15ICR0eXBlICgibWF0Y2giLCAibWlzbWF0Y2giLCAibmV3IiwgImZhaWwiKSB7Cisg
ICAgICAgIG15ICRjID0gJGNvdW50c3skdHlwZX07CisgICAgICAgIGlmICgkYykgeworICAgICAg
ICAgICAgbXkgJHQgPSAkdGV4dHskdHlwZX07CisgICAgICAgICAgICBteSAkbWVzc2FnZTsKKyAg
ICAgICAgICAgIGlmICgkYyA9PSAxKSB7CisgICAgICAgICAgICAgICAgJHQgPX4gcy93ZXJlL3dh
cy87CisgICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSBzcHJpbnRmICIxIHRlc3QgY2FzZSAoJWQl
JSkgJXNcbiIsIDEgKiAxMDAgLyAkY291bnQsICR0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAkbWVzc2FnZSA9IHNwcmludGYgIiVkIHRlc3QgY2FzZXMgKCVkJSUpICVz
XG4iLCAkYywgJGMgKiAxMDAgLyAkY291bnQsICR0OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgJG1lc3NhZ2UgPX4gcy1cKDAlXCktKDwxJSktOworICAgICAgICAgICAgcHJpbnQgJG1lc3Nh
Z2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3lzdGVtICJta2RpciIsICItcCIsICR0
ZXN0UmVzdWx0c0RpcmVjdG9yeTsKKworICAgIG9wZW4gSFRNTCwgIj4iLCAkdGVzdFJlc3VsdHMg
b3IgZGllOworICAgIHByaW50IEhUTUwgIjxodG1sPlxuIjsKKyAgICBwcmludCBIVE1MICI8aGVh
ZD5cbiI7CisgICAgcHJpbnQgSFRNTCAiPHRpdGxlPkxheW91dCBUZXN0IFJlc3VsdHM8L3RpdGxl
PlxuIjsKKyAgICBwcmludCBIVE1MICI8L2hlYWQ+XG4iOworICAgIHByaW50IEhUTUwgIjxib2R5
PlxuIjsKKworICAgIGlmICgkY291bnRze21pc21hdGNofSkgeworICAgICAgICBwcmludCBIVE1M
ICI8cD5UZXN0cyB3aGVyZSByZXN1bHRzIGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgcmVzdWx0czo8
L3A+XG4iOworICAgICAgICBwcmludCBIVE1MICI8dGFibGU+XG4iOworICAgICAgICBmb3IgbXkg
JHRlc3QgKEB7JHRlc3Rze21pc21hdGNofX0pIHsKKyAgICAgICAgICAgIG15ICRiYXNlID0gJHRl
c3Q7CisgICAgICAgICAgICAkYmFzZSA9fiBzL1wuKGh0bWx8eG1sfHhodG1sKSQvLzsKKyAgICAg
ICAgICAgIHByaW50IEhUTUwgIjx0cj5cbiI7CisgICAgICAgICAgICBwcmludCBIVE1MICI8dGQ+
PGEgaHJlZj1cIiR0ZXN0RGlyZWN0b3J5LyR0ZXN0XCI+JGJhc2U8L2E+PC90ZD5cbiI7CisgICAg
ICAgICAgICBwcmludCBIVE1MICI8dGQ+PGEgaHJlZj1cIiR0ZXN0RGlyZWN0b3J5LyRiYXNlLWV4
cGVjdGVkLnR4dFwiPmV4cGVjdGVkPC9hPjwvdGQ+XG4iOworICAgICAgICAgICAgcHJpbnQgSFRN
TCAiPHRkPjxhIGhyZWY9XCIkYmFzZS1hY3R1YWwudHh0XCI+YWN0dWFsPC9hPjwvdGQ+XG4iOwor
ICAgICAgICAgICAgcHJpbnQgSFRNTCAiPHRkPjxhIGhyZWY9XCIkYmFzZS1kaWZmcy50eHRcIj5k
aWZmczwvYT48L3RkPlxuIjsKKyAgICAgICAgICAgIHByaW50IEhUTUwgIjwvdHI+XG4iOworICAg
ICAgICB9CisgICAgICAgIHByaW50IEhUTUwgIjwvdGFibGU+XG4iOworICAgIH0KKworICAgIGlm
ICgkY291bnRze2ZhaWx9KSB7CisgICAgICAgIHByaW50IEhUTUwgIjxwPlRlc3RzIHRoYXQgY2F1
c2VkIHRoZSBEdW1wUmVuZGVyVHJlZSB0b29sIHRvIGZhaWw6PC9wPlxuIjsKKyAgICAgICAgcHJp
bnQgSFRNTCAiPHRhYmxlPlxuIjsKKyAgICAgICAgZm9yIG15ICR0ZXN0IChAeyR0ZXN0c3tmYWls
fX0pIHsKKyAgICAgICAgICAgIG15ICRiYXNlID0gJHRlc3Q7CisgICAgICAgICAgICAkYmFzZSA9
fiBzL1wuKGh0bWx8eG1sfHhodG1sKSQvLzsKKyAgICAgICAgICAgIHByaW50IEhUTUwgIjx0cj5c
biI7CisgICAgICAgICAgICBwcmludCBIVE1MICI8dGQ+PGEgaHJlZj1cIiR0ZXN0RGlyZWN0b3J5
LyR0ZXN0XCI+JGJhc2U8L2E+PC90ZD5cbiI7CisgICAgICAgICAgICBwcmludCBIVE1MICI8L3Ry
PlxuIjsKKyAgICAgICAgfQorICAgICAgICBwcmludCBIVE1MICI8L3RhYmxlPlxuIjsKKyAgICB9
CisKKyAgICBpZiAoJGNvdW50c3tuZXd9KSB7CisgICAgICAgIHByaW50IEhUTUwgIjxwPlRlc3Rz
IHRoYXQgaGFkIG5vIGV4cGVjdGVkIHJlc3VsdHMgKHByb2JhYmx5IG5ldyk6PC9wPlxuIjsKKyAg
ICAgICAgcHJpbnQgSFRNTCAiPHRhYmxlPlxuIjsKKyAgICAgICAgZm9yIG15ICR0ZXN0IChAeyR0
ZXN0c3tuZXd9fSkgeworICAgICAgICAgICAgbXkgJGJhc2UgPSAkdGVzdDsKKyAgICAgICAgICAg
ICRiYXNlID1+IHMvXC4oaHRtbHx4bWx8eGh0bWwpJC8vOworICAgICAgICAgICAgcHJpbnQgSFRN
TCAiPHRyPlxuIjsKKyAgICAgICAgICAgIHByaW50IEhUTUwgIjx0ZD48YSBocmVmPVwiJHRlc3RE
aXJlY3RvcnkvJHRlc3RcIj4kYmFzZTwvYT48L3RkPlxuIjsKKyAgICAgICAgICAgIHByaW50IEhU
TUwgIjx0ZD48YSBocmVmPVwiJHRlc3REaXJlY3RvcnkvJGJhc2UtZXhwZWN0ZWQudHh0XCI+cmVz
dWx0czwvYT48L3RkPlxuIjsKKyAgICAgICAgICAgIHByaW50IEhUTUwgIjwvdHI+XG4iOworICAg
ICAgICB9CisgICAgICAgIHByaW50IEhUTUwgIjwvdGFibGU+XG4iOworICAgIH0KKworICAgIHBy
aW50IEhUTUwgIjwvYm9keT5cbiI7CisgICAgcHJpbnQgSFRNTCAiPC9odG1sPlxuIjsKKyAgICBj
bG9zZSBIVE1MOworICAgIAorICAgIHN5c3RlbSAib3BlbiIsICR0ZXN0UmVzdWx0czsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3237</attachid>
            <date>2005-08-06 02:29:33 -0700</date>
            <delta_ts>2005-08-06 10:40:48 -0700</delta_ts>
            <desc>DumpKCanvasTree tool, including a few necessary WebCore+SVG changes.</desc>
            <filename>dumpkcanvastree.patch</filename>
            <type>text/plain</type>
            <size>43063</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IC4vU1ZHU3VwcG9ydC9rY2FudmFzL0tDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tjYW52YXMvS0NhbnZhcy5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIC4vU1ZHU3VwcG9ydC9rY2FudmFzL0tDYW52
YXMuY3BwCi0tLSAuL1NWR1N1cHBvcnQva2NhbnZhcy9LQ2FudmFzLmNwcAk5IEp1bCAyMDA1IDA2
OjUzOjEzIC0wMDAwCTEuMQorKysgLi9TVkdTdXBwb3J0L2tjYW52YXMvS0NhbnZhcy5jcHAJNiBB
dWcgMjAwNSAwODo1Njo1MyAtMDAwMApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAJewogCQlk
ZWxldGUgcmVnaXN0cnk7CiAJCWRlbGV0ZSByb290Q29udGFpbmVyOwotCQlkZWxldGUgcmVuZGVy
aW5nRGV2aWNlOworCQkvL2RlbGV0ZSByZW5kZXJpbmdEZXZpY2U7ICAvLyBTaG91bGQgbm90IGRl
bGV0ZSB0aGUgcmVuZGVyaW5nIGRldmljZSEKIAl9CiAKIAlRU2l6ZSBjYW52YXNTaXplOwpJbmRl
eDogLi9TVkdTdXBwb3J0L2tjYW52YXMvS0NhbnZhc0NvbnRhaW5lci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2NhbnZhcy9LQ2FudmFzQ29udGFpbmVyLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEgLi9TVkdTdXBwb3J0
L2tjYW52YXMvS0NhbnZhc0NvbnRhaW5lci5jcHAKLS0tIC4vU1ZHU3VwcG9ydC9rY2FudmFzL0tD
YW52YXNDb250YWluZXIuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MTMgLTAwMDAJMS4xCisrKyAuL1NW
R1N1cHBvcnQva2NhbnZhcy9LQ2FudmFzQ29udGFpbmVyLmNwcAk2IEF1ZyAyMDA1IDA4OjU2OjUz
IC0wMDAwCkBAIC0yNjcsNiArMjY3LDE2IEBAIGJvb2wgS0NhbnZhc0NvbnRhaW5lcjo6bG93ZXJJ
dGVtKEtDYW52YXMKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorS0NhbnZhc0l0ZW0gKktDYW52YXNDb250
YWluZXI6OmZpcnN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+Zmlyc3Q7Cit9CisKK0tDYW52
YXNJdGVtICpLQ2FudmFzQ29udGFpbmVyOjpsYXN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+
bGFzdDsKK30KKwogdm9pZCBLQ2FudmFzQ29udGFpbmVyOjpjb2xsaXNpb25zKGNvbnN0IFFQb2lu
dCAmcCwgS0NhbnZhc0l0ZW1MaXN0ICZoaXRzKSBjb25zdAogewogCWlmKHAueCgpIDwgMCB8fCBw
LnkoKSA8IDApCkluZGV4OiAuL1NWR1N1cHBvcnQva2NhbnZhcy9LQ2FudmFzQ29udGFpbmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2NhbnZhcy9LQ2FudmFz
Q29udGFpbmVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIC4v
U1ZHU3VwcG9ydC9rY2FudmFzL0tDYW52YXNDb250YWluZXIuaAotLS0gLi9TVkdTdXBwb3J0L2tj
YW52YXMvS0NhbnZhc0NvbnRhaW5lci5oCTkgSnVsIDIwMDUgMDY6NTM6MTMgLTAwMDAJMS4xCisr
KyAuL1NWR1N1cHBvcnQva2NhbnZhcy9LQ2FudmFzQ29udGFpbmVyLmgJNiBBdWcgMjAwNSAwODo1
Njo1MyAtMDAwMApAQCAtNTQsNyArNTQsMTAgQEAgcHVibGljOgogCQogCXZpcnR1YWwgdm9pZCBp
bnZhbGlkYXRlKCkgY29uc3Q7CiAJdmlydHVhbCBRUmVjdCBiYm94KGJvb2wgaW5jbHVkZVN0cm9r
ZSA9IHRydWUpIGNvbnN0OwotCisgICAgICAgIAorICAgICAgICBLQ2FudmFzSXRlbSAqZmlyc3Qo
KSBjb25zdDsKKyAgICAgICAgS0NhbnZhc0l0ZW0gKmxhc3QoKSBjb25zdDsKKyAgICAgICAgCiBw
cml2YXRlOgogCWZyaWVuZCBjbGFzcyBLQ2FudmFzSXRlbTsKIApJbmRleDogLi9TVkdTdXBwb3J0
L2tjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogS0NhbnZh
c1RyZWVEZWJ1Zy5jcHAKZGlmZiAtTiAuL1NWR1N1cHBvcnQva2NhbnZhcy9LQ2FudmFzVHJlZURl
YnVnLmNwcAotLS0gLi9TVkdTdXBwb3J0L2tjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAJMSBK
YW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgLi9TVkdTdXBwb3J0L2tjYW52YXMvS0NhbnZhc1Ry
ZWVEZWJ1Zy5jcHAJNiBBdWcgMjAwNSAwODo1Njo1MyAtMDAwMApAQCAtMCwwICsxLDEzNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAoQykgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiS0NhbnZhc1RyZWVEZWJ1Zy5oIgorCisjaW5jbHVk
ZSA8a2NhbnZhcy9LQ2FudmFzTWF0cml4Lmg+CisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzSXRl
bS5oPgorI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0NvbnRhaW5lci5oPgorI2luY2x1ZGUgPGtj
YW52YXMvZGV2aWNlL0tSZW5kZXJpbmdTdHlsZS5oPgorCisjaW5jbHVkZSA8a3N2ZzIvaW1wbC9T
VkdTdHlsZWRFbGVtZW50SW1wbC5oPgorCisjaW5jbHVkZSA8cXRleHRzdHJlYW0uaD4KKworc3Rh
dGljIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFFUZXh0U3RyZWFtICZ0cywgY29uc3QgUVJlY3Qg
JnIpCit7CisgICAgcmV0dXJuIHRzIDw8ICJhdCAoIiA8PCByLngoKSA8PCAiLCIgPDwgci55KCkg
PDwgIikgc2l6ZSAiIDw8IHIud2lkdGgoKSA8PCAieCIgPDwgci5oZWlnaHQoKTsKK30KKworc3Rh
dGljIHZvaWQgd3JpdGVJbmRlbnQoUVRleHRTdHJlYW0gJnRzLCBpbnQgaW5kZW50KQoreworICAg
IGZvciAoaW50IGkgPSAwOyBpICE9IGluZGVudDsgKytpKSB7CisgICAgICAgIHRzIDw8ICIgICI7
CisgICAgfQorfQorCitzdGF0aWMgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoUVRleHRTdHJlYW0g
JnRzLCBjb25zdCBLQ2FudmFzTWF0cml4ICZtKQoreworICAgIHRzIDw8ICJ7bT0oKCIgPDwgbS5h
KCkgPDwgIiwiIDw8IG0uYigpIDw8ICIpKCIgPDwgbS5jKCkgPDwgIiwiIDw8IG0uZCgpIDw8ICIp
KSI7CisgICAgdHMgPDwgIiB0PSgiIDw8IG0uZSgpIDw8ICIsIiA8PCBtLmYoKSA8PCAiKX0iOwor
ICAgIHJldHVybiB0czsKK30KKworI2RlZmluZSBESUZGRVJTX0ZST01fUEFSRU5UKHBhdGgpIChv
LnBhcmVudCgpICYmIChvLnBhcmVudCgpLT5wYXRoICE9IG8ucGF0aCkpCisKK3N0YXRpYyBRVGV4
dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmVhbSAmdHMsIGNvbnN0IEtDYW52YXNJdGVtICZv
KQoreworICAgIHRzIDw8ICIgIiA8PCBvLmJib3goKTsKKyAgICAKKyAgICBpZiAoRElGRkVSU19G
Uk9NX1BBUkVOVChzdHlsZSgpLT52aXNpYmxlKCkpICYmICFvLnN0eWxlKCktPnZpc2libGUoKSkK
KyAgICAgICAgdHMgPDwgIiBbSElEREVOXSI7CisgICAgaWYgKERJRkZFUlNfRlJPTV9QQVJFTlQo
c3R5bGUoKS0+b2JqZWN0TWF0cml4KCkpKQorICAgICAgICB0cyA8PCAiIFt0cmFuc2Zvcm09IiA8
PCBvLnN0eWxlKCktPm9iamVjdE1hdHJpeCgpIDw8ICJdIjsKKyAgICBpZiAoRElGRkVSU19GUk9N
X1BBUkVOVChzdHlsZSgpLT5jb2xvckludGVycG9sYXRpb24oKSkpCisgICAgICAgIHRzIDw8ICIg
W2NvbG9yIGludGVycG9sYXRpb249IiA8PCBvLnN0eWxlKCktPmNvbG9ySW50ZXJwb2xhdGlvbigp
IDw8ICJdIjsKKyAgICBpZiAoRElGRkVSU19GUk9NX1BBUkVOVChzdHlsZSgpLT5pbWFnZVJlbmRl
cmluZygpKSkKKyAgICAgICAgdHMgPDwgIiBbaW1hZ2UgcmVuZGVyaW5nPSIgPDwgby5zdHlsZSgp
LT5pbWFnZVJlbmRlcmluZygpIDw8ICJdIjsKKyAgICBpZiAoRElGRkVSU19GUk9NX1BBUkVOVChz
dHlsZSgpLT5vcGFjaXR5KCkpKQorICAgICAgICB0cyA8PCAiIFtvcGFjaXR5PSIgPDwgby5zdHls
ZSgpLT5vcGFjaXR5KCkgPDwgIl0iOworICAgIGlmIChvLnN0eWxlKCktPmlzU3Ryb2tlZCgpICYm
IERJRkZFUlNfRlJPTV9QQVJFTlQoc3R5bGUoKS0+c3Ryb2tlUGFpbnRlcigpKSkKKyAgICAgICAg
dHMgPDwgIiBbc3Ryb2tlPSIgPDwgby5zdHlsZSgpLT5zdHJva2VQYWludGVyKCkgPDwgIl0iOwor
ICAgIGlmIChvLnN0eWxlKCktPmlzRmlsbGVkKCkgJiYgRElGRkVSU19GUk9NX1BBUkVOVChzdHls
ZSgpLT5maWxsUGFpbnRlcigpKSkKKyAgICAgICAgdHMgPDwgIiBbZmlsbD0iIDw8IG8uc3R5bGUo
KS0+ZmlsbFBhaW50ZXIoKSA8PCAiXSI7CisgICAgaWYgKCFvLnN0eWxlKCktPmNsaXBQYXRocygp
LmlzRW1wdHkoKSkKKyAgICAgICAgdHMgPDwgIiBbY2xpcCBwYXRocz0iIDw8IG8uc3R5bGUoKS0+
Y2xpcFBhdGhzKCkuam9pbigiLCAiKSA8PCAiXSI7CisgICAgaWYgKG8uc3R5bGUoKS0+aGFzTWFy
a2VycygpKSB7CisgICAgICAgIGlmIChvLnN0eWxlKCktPnN0YXJ0TWFya2VyKCkpCisgICAgICAg
ICAgICB0cyA8PCAiIFtzdGFydCBtYXJrZXI9IiA8PCBvLnN0eWxlKCktPnN0YXJ0TWFya2VyKCkg
PDwgIl0iOworICAgICAgICBpZiAoby5zdHlsZSgpLT5taWRNYXJrZXIoKSkKKyAgICAgICAgICAg
IHRzIDw8ICIgW21pZGRsZSBtYXJrZXI9IiA8PCBvLnN0eWxlKCktPm1pZE1hcmtlcigpIDw8ICJd
IjsKKyAgICAgICAgaWYgKG8uc3R5bGUoKS0+ZW5kTWFya2VyKCkpCisgICAgICAgICAgICB0cyA8
PCAiIFtlbmQgbWFya2VyPSIgPDwgby5zdHlsZSgpLT5lbmRNYXJrZXIoKSA8PCAiXSI7CisgICAg
fQorICAgIGlmIChESUZGRVJTX0ZST01fUEFSRU5UKHN0eWxlKCktPmZpbHRlcigpKSkKKyAgICAg
ICAgdHMgPDwgIiBbZmlsdGVyPSIgPDwgby5zdHlsZSgpLT5maWx0ZXIoKSA8PCAiXSI7CisgICAg
CisgICAgcmV0dXJuIHRzOworfQorCitzdGF0aWMgUVN0cmluZyBnZXRUYWdOYW1lKHZvaWQgKm5v
ZGUpCit7CisgICAgS1NWRzo6U1ZHU3R5bGVkRWxlbWVudEltcGwgKmVsZW0gPSBzdGF0aWNfY2Fz
dDxLU1ZHOjpTVkdTdHlsZWRFbGVtZW50SW1wbCAqPihub2RlKTsKKyAgICBpZiAoZWxlbSkKKyAg
ICAgICAgcmV0dXJuIGVsZW0tPm5vZGVOYW1lKCkuc3RyaW5nKCk7CisgICAgcmV0dXJuIFFTdHJp
bmcoKTsKK30KKwordm9pZCB3cml0ZShRVGV4dFN0cmVhbSAmdHMsIEtDYW52YXNJdGVtICppdGVt
LCBpbnQgaW5kZW50ID0gMCkKK3sKKyAgICBpZiAoaXRlbSkKKyAgICB7CisgICAgICAgIHdyaXRl
SW5kZW50KHRzLCBpbmRlbnQpOworICAgICAgICBpZihpdGVtLT5pc0NvbnRhaW5lcigpKQorICAg
ICAgICAgICAgdHMgPDwgIktDYW52YXNDb250YWluZXIiOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB0cyA8PCAiS0NhbnZhc0l0ZW0iOworICAgICAgICAKKyAgICAgICAgaWYgKGl0ZW0tPnVz
ZXJEYXRhKCkpIHsKKyAgICAgICAgICAgIFFTdHJpbmcgdGFnTmFtZSA9IGdldFRhZ05hbWUoaXRl
bS0+dXNlckRhdGEoKSk7CisgICAgICAgICAgICBpZiAoIXRhZ05hbWUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgdHMgPDwgIiB7IiA8PCB0YWdOYW1lIDw8ICJ9IjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdHMgPDwgKml0ZW0gPDwgZW5kbDsKKyAg
ICAgICAgCisgICAgICAgIGlmKGl0ZW0tPmlzQ29udGFpbmVyKCkpIHsKKyAgICAgICAgICAgIEtD
YW52YXNDb250YWluZXIgKnBhcmVudCA9IHN0YXRpY19jYXN0PEtDYW52YXNDb250YWluZXIgKj4o
aXRlbSk7CisgICAgICAgICAgICBmb3IgKEtDYW52YXNJdGVtICpjaGlsZCA9IHBhcmVudC0+Zmly
c3QoKTsgY2hpbGQgIT0gTlVMTDsgY2hpbGQgPSBjaGlsZC0+bmV4dCgpKQorICAgICAgICAgICAg
ICAgIHdyaXRlKHRzLCBjaGlsZCwgaW5kZW50ICsgMSk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K1FTdHJpbmcgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihLQ2FudmFzSXRlbSAqaXRlbSkKK3sKKyAg
ICBRU3RyaW5nIHM7CisgICAgeworICAgICAgICBRVGV4dFN0cmVhbSB0cygmcyk7CisgICAgICAg
IHdyaXRlKHRzLCBpdGVtKTsKKyAgICB9CisgICAgcmV0dXJuIHM7Cit9CkluZGV4OiAuL1NWR1N1
cHBvcnQva2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogS0Nh
bnZhc1RyZWVEZWJ1Zy5oCmRpZmYgLU4gLi9TVkdTdXBwb3J0L2tjYW52YXMvS0NhbnZhc1RyZWVE
ZWJ1Zy5oCi0tLSAuL1NWR1N1cHBvcnQva2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmgJMSBKYW4g
MTk3MCAwMDowMDowMCAtMDAwMAorKysgLi9TVkdTdXBwb3J0L2tjYW52YXMvS0NhbnZhc1RyZWVE
ZWJ1Zy5oCTYgQXVnIDIwMDUgMDg6NTY6NTMgLTAwMDAKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgPHFzdHJpbmcuaD4KKworY2xhc3MgS0NhbnZh
c0l0ZW07CisKK1FTdHJpbmcgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihLQ2FudmFzSXRlbSAqKTsK
SW5kZXg6IC4vU1ZHU3VwcG9ydC9XZWJDb3JlK1NWRy9EcmF3RG9jdW1lbnQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQvV2ViQ29yZStTVkcvRHJhd0RvY3VtZW50
Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSAuL1NWR1N1cHBv
cnQvV2ViQ29yZStTVkcvRHJhd0RvY3VtZW50Lm1tCi0tLSAuL1NWR1N1cHBvcnQvV2ViQ29yZStT
VkcvRHJhd0RvY3VtZW50Lm1tCTI5IEp1bCAyMDA1IDIwOjIyOjUxIC0wMDAwCTEuMQorKysgLi9T
VkdTdXBwb3J0L1dlYkNvcmUrU1ZHL0RyYXdEb2N1bWVudC5tbQk2IEF1ZyAyMDA1IDA4OjU4OjM1
IC0wMDAwCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0IDxrY2FudmFzL0tDYW52YXMuaD4KICNp
bXBvcnQgPGtjYW52YXMvS0NhbnZhc0l0ZW0uaD4KICNpbXBvcnQgPGtjYW52YXMvS0NhbnZhc0Nv
bnRhaW5lci5oPgorI2ltcG9ydCA8a2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmg+CiAjaW1wb3J0
IDxrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc1ZpZXdRdWFydHouaD4KICNpbXBvcnQgPGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lmg+CiAKQEAgLTQ1Niw2
ICs0NTcsMTMgQEAgTlNDdXJzb3IgKmN1cnNvckZvclN0eWxlKEtET006OlJlbmRlclN0eQogICAg
IHJldHVybiBOU1NpemUoY2FudmFzLT5jYW52YXNTaXplKCkpOwogfQogCistIChOU1N0cmluZyAq
KXJlbmRlclRyZWVBc0V4dGVybmFsUmVwcmVzZW50YXRpb24KK3sKKyAgICBLQ2FudmFzICpjYW52
YXMgPSBbc2VsZiBjYW52YXNdOworICAgIGlmIChjYW52YXMpCisgICAgICAgIHJldHVybiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKGNhbnZhcy0+cm9vdENvbnRhaW5lcigpKS5nZXROU1N0cmluZygp
OworICAgIHJldHVybiBuaWw7Cit9CiAKIC0gKHZvaWQpc2l6ZUNhbnZhc1RvRml0Q29udGVudAog
ewpJbmRleDogLi9TVkdTdXBwb3J0L1dlYkNvcmUrU1ZHL0RyYXdEb2N1bWVudFByaXZhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9XZWJDb3JlK1NWRy9EcmF3
RG9jdW1lbnRQcml2YXRlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIC4vU1ZHU3VwcG9ydC9XZWJDb3JlK1NWRy9EcmF3RG9jdW1lbnRQcml2YXRlLmgKLS0tIC4v
U1ZHU3VwcG9ydC9XZWJDb3JlK1NWRy9EcmF3RG9jdW1lbnRQcml2YXRlLmgJMjkgSnVsIDIwMDUg
MjA6MjI6NTEgLTAwMDAJMS4xCisrKyAuL1NWR1N1cHBvcnQvV2ViQ29yZStTVkcvRHJhd0RvY3Vt
ZW50UHJpdmF0ZS5oCTYgQXVnIDIwMDUgMDg6NTg6MzUgLTAwMDAKQEAgLTY3LDYgKzY3LDcgQEAK
IAogLSAoTlNTaXplKWNhbnZhc1NpemU7CiAtICh2b2lkKXNpemVDYW52YXNUb0ZpdENvbnRlbnQ7
CistIChOU1N0cmluZyAqKXJlbmRlclRyZWVBc0V4dGVybmFsUmVwcmVzZW50YXRpb247CiAKIC8q
CiAgVGhpcyBjdXJyZW50bHkgKGhhY2tpc2hseSkgbWFuaXB1bGF0ZXMgdGhlIHJlbmRlciB0cmVl
LgpJbmRleDogLi9XZWJDb3JlL2t3cS9LV1FUZXh0U3RyZWFtLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FUZXh0U3RyZWFtLm1tLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjE1CmRpZmYgLXAgLXUgLXIxLjE1IC4vV2ViQ29yZS9rd3EvS1dRVGV4dFN0cmVh
bS5tbQotLS0gLi9XZWJDb3JlL2t3cS9LV1FUZXh0U3RyZWFtLm1tCTIzIE1heSAyMDA0IDIyOjQ1
OjI4IC0wMDAwCTEuMTUKKysrIC4vV2ViQ29yZS9rd3EvS1dRVGV4dFN0cmVhbS5tbQk2IEF1ZyAy
MDA1IDA5OjAwOjM1IC0wMDAwCkBAIC05NSw2ICs5NSwyMCBAQCBRVGV4dFN0cmVhbSAmUVRleHRT
dHJlYW06Om9wZXJhdG9yPDwodW5zCiAgICAgcmV0dXJuICp0aGlzIDw8IGJ1ZmZlcjsKIH0KIAor
UVRleHRTdHJlYW0gJlFUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGZsb2F0IGYpCit7CisgICAgY2hh
ciBidWZmZXJbaW50ZWdlck9yUG9pbnRlckFzU3RyaW5nQnVmZmVyU2l6ZV07CisgICAgc3ByaW50
ZihidWZmZXIsICIlZiIsIGYpOworICAgIHJldHVybiAqdGhpcyA8PCBidWZmZXI7Cit9CisKK1FU
ZXh0U3RyZWFtICZRVGV4dFN0cmVhbTo6b3BlcmF0b3I8PChkb3VibGUgZCkKK3sKKyAgICBjaGFy
IGJ1ZmZlcltpbnRlZ2VyT3JQb2ludGVyQXNTdHJpbmdCdWZmZXJTaXplXTsKKyAgICBzcHJpbnRm
KGJ1ZmZlciwgIiVmIiwgZCk7CisgICAgcmV0dXJuICp0aGlzIDw8IGJ1ZmZlcjsKK30KKwogUVRl
eHRTdHJlYW0gJlFUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGNvbnN0IGNoYXIgKnMpCiB7CiAgICAg
aWYgKF9oYXNCeXRlQXJyYXkpIHsKSW5kZXg6IC4vV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcK
ZGlmZiAtcCAtdSAtcjEuNyAuL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCi0tLSAuL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCTYgQXVn
IDIwMDUgMDI6MzA6MzAgLTAwMDAJMS43CisrKyAuL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCTYgQXVnIDIwMDUgMDk6MDY6MjAgLTAwMDAKQEAgLTYyMyw2ICs2MjMs
OCBAQAogCQk5M0YxOUIxNjA4MjQ1RTU5MDAxRTlBQkMgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3
b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjgy
MTYyOTkwMjlGNEZCNTAxMDAwMTMxIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsK
IAkJOTNGMTlCMTcwODI0NUU1OTAwMUU5QUJDIC8qIGxpYmljdWNvcmUuZHlsaWIgaW4gRnJhbWV3
b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0YxRDMxQTA1NThDQzVD
MDA4MjFCQzAgLyogbGliaWN1Y29yZS5keWxpYiAqLzsgfTsKIAkJOTNGMTlCMTgwODI0NUU1OTAw
MUU5QUJDIC8qIGxpYnhzbHQuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDA2MzMwNzA3MzFBNzcyMDBEQjFGRDEgLyogbGlieHNsdC5keWxp
YiAqLzsgfTsKKwkJQTgxMEUzOTUwOEE0MTYwRjAwMzMzRDk4IC8qIEtDYW52YXNUcmVlRGVidWcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTBFMzkz
MDhBNDE2MEYwMDMzM0Q5OCAvKiBLQ2FudmFzVHJlZURlYnVnLmggKi87IH07CisJCUE4MTBFMzk2
MDhBNDE2MEYwMDMzM0Q5OCAvKiBLQ2FudmFzVHJlZURlYnVnLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTBFMzk0MDhBNDE2MEYwMDMzM0Q5OCAv
KiBLQ2FudmFzVHJlZURlYnVnLmNwcCAqLzsgfTsKIAkJQTgyMTJBODcwODc5NEEyMzAwNjc3MzU5
IC8qIGNzc19iYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzhGNjE4QjA0MDU5NEJBMDBBODAwMDQgLyogY3NzX2Jhc2UuaCAqLzsgfTsKIAkJQTgy
MTJBODgwODc5NEEyMzAwNjc3MzU5IC8qIGNzc19ydWxlaW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QxNjUwMkRFNDJFNjAxODYzNUNBIC8q
IGNzc19ydWxlaW1wbC5oICovOyB9OwogCQlBODIxMkE4OTA4Nzk0QTIzMDA2NzczNTkgLyogY3Nz
X3N0eWxlc2hlZXRpbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNTIzRDE2NzAyREU0MkU2MDE4NjM1Q0EgLyogY3NzX3N0eWxlc2hlZXRpbXBsLmgg
Ki87IH07CkBAIC0yMzc5LDcgKzIzODEsNyBAQAogCQkJCSIkKERFUklWRURfRklMRV9ESVIpLyQo
SU5QVVRfRklMRV9CQVNFKS5oIiwKIAkJCQkiJChERVJJVkVEX0ZJTEVfRElSKS8kKElOUFVUX0ZJ
TEVfQkFTRSkuY3BwIiwKIAkJCSk7Ci0JCQlzY3JpcHQgPSAiWyBcIiRJTlBVVF9GSUxFX0JBU0Vc
IiA9IFwicGFyc2VyXCIgXSAmJiBleHBvcnQgUFJFRklYX0JBU0U9XCJjc3NcIiAmJiBlY2hvIFwi
c3VjY2VzcyEgY3NzXCJcblsgXCIkSU5QVVRfRklMRV9CQVNFXCIgPSBcImtkb21wYXJzZXJjc3Nc
IiBdICYmIGV4cG9ydCBQUkVGSVhfQkFTRT1cIiRJTlBVVF9GSUxFX0JBU0VcIiAgJiYgZWNobyBc
InN1Y2Nlc3MhICRJTlBVVF9GSUxFX0JBU0VcIlxuWyBcIiRJTlBVVF9GSUxFX0JBU0VcIiA9IFwi
eHBhdGhcIiBdICYmIGV4cG9ydCBQUkVGSVhfQkFTRT1cIiRJTlBVVF9GSUxFX0JBU0VcIiAgJiYg
ZWNobyBcInN1Y2Nlc3MhICRJTlBVVF9GSUxFX0JBU0VcIlxuWyAteiBcIiRQUkVGSVhfQkFTRVwi
IF0gJiYgZWNobyBcIlVuaGFuZGxlZCB5YWNjIGZpbGVuYW1lIFxcXCIkSU5QVVRfRklMRV9CQVNF
XFxcIiwgZWRpdCBidWlsZCBydWxlLlwiICYmIGV4aXQgMVxuZXhwb3J0IFlZPVwieXlcIlxuXG5i
aXNvbiAtZCAtcCBcIiRQUkVGSVhfQkFTRSRZWVwiIFwiJElOUFVUX0ZJTEVfUEFUSFwiIC1vIFwi
JERFUklWRURfRklMRV9ESVIvJElOUFVUX0ZJTEVfQkFTRS5jcHBcIlxucm0gXCIkREVSSVZFRF9G
SUxFX0RJUi8kSU5QVVRfRklMRV9CQVNFLmhcIlxuY2F0IFwiJERFUklWRURfRklMRV9ESVIvJElO
UFVUX0ZJTEVfQkFTRS5jcHAuaFwiIFwiJERFUklWRURfRklMRV9ESVIvJElOUFVUX0ZJTEVfQkFT
RS5ocHBcIiA+IFwiJERFUklWRURfRklMRV9ESVIvJElOUFVUX0ZJTEVfQkFTRS5oXCIgMj4gL2Rl
di9udWxsIHx8IGVjaG8gLW4iOworCQkJc2NyaXB0ID0gIlsgXCIkSU5QVVRfRklMRV9CQVNFXCIg
PSBcInBhcnNlclwiIF0gJiYgZXhwb3J0IFBSRUZJWF9CQVNFPVwiY3NzXCIgJiYgZWNobyBcInN1
Y2Nlc3MhIGNzc1wiXG5bIFwiJElOUFVUX0ZJTEVfQkFTRVwiID0gXCJrZG9tcGFyc2VyY3NzXCIg
XSAmJiBleHBvcnQgUFJFRklYX0JBU0U9XCIkSU5QVVRfRklMRV9CQVNFXCIgICYmIGVjaG8gXCJz
dWNjZXNzISAkSU5QVVRfRklMRV9CQVNFXCJcblsgXCIkSU5QVVRfRklMRV9CQVNFXCIgPSBcInhw
YXRoXCIgXSAmJiBleHBvcnQgUFJFRklYX0JBU0U9XCIkSU5QVVRfRklMRV9CQVNFXCIgICYmIGVj
aG8gXCJzdWNjZXNzISAkSU5QVVRfRklMRV9CQVNFXCJcblsgLXogXCIkUFJFRklYX0JBU0VcIiBd
ICYmIGVjaG8gXCJVbmhhbmRsZWQgeWFjYyBmaWxlbmFtZSBcXFwiJElOUFVUX0ZJTEVfQkFTRVxc
XCIsIGVkaXQgYnVpbGQgcnVsZS5cIiAmJiBleGl0IDFcbmV4cG9ydCBZWT1cInl5XCJcblxucm0g
XCIkREVSSVZFRF9GSUxFX0RJUi8kSU5QVVRfRklMRV9CQVNFLipcIlxuYmlzb24gLWQgLXAgXCIk
UFJFRklYX0JBU0UkWVlcIiBcIiRJTlBVVF9GSUxFX1BBVEhcIiAtbyBcIiRERVJJVkVEX0ZJTEVf
RElSLyRJTlBVVF9GSUxFX0JBU0UuY3BwXCJcbmNhdCBcIiRERVJJVkVEX0ZJTEVfRElSLyRJTlBV
VF9GSUxFX0JBU0UuY3BwLmhcIiBcIiRERVJJVkVEX0ZJTEVfRElSLyRJTlBVVF9GSUxFX0JBU0Uu
aHBwXCIgPiBcIiRERVJJVkVEX0ZJTEVfRElSLyRJTlBVVF9GSUxFX0JBU0UuaFwiIDI+IC9kZXYv
bnVsbCB8fCBlY2hvIC1uIjsKIAkJfTsKIC8qIEVuZCBQQlhCdWlsZFJ1bGUgc2VjdGlvbiAqLwog
CkBAIC0yNTg4LDYgKzI1OTAsOCBAQAogCQk5M0YxOUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyogSW5m
by5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQueG1sOyBwYXRoID0gSW5mby5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTNGMTlCMUEwODI0NUU1QTAwMUU5QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29y
azsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gV2ViQ29yZS5mcmFtZXdvcms7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTkzRjFEMzFBMDU1OENDNUMwMDgyMUJDMCAv
KiBsaWJpY3Vjb3JlLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJpY3Vjb3JlLmR5
bGliOyBwYXRoID0gL3Vzci9saWIvbGliaWN1Y29yZS5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJz
b2x1dGU+IjsgfTsKKwkJQTgxMEUzOTMwOEE0MTYwRjAwMzMzRDk4IC8qIEtDYW52YXNUcmVlRGVi
dWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS0NhbnZhc1RyZWVEZWJ1Zy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODEwRTM5NDA4QTQxNjBGMDAzMzNEOTgg
LyogS0NhbnZhc1RyZWVEZWJ1Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBLQ2FudmFzVHJlZURlYnVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTgyMTJEMDcwODc5NEEyMzAwNjc3MzU5IC8qIFdlYkNvcmUrU1ZHLmZyYW1ld29yayAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdv
cms7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9ICJXZWJDb3JlK1NWRy5mcmFtZXdvcmsiOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlBODVEN0EyRjA4NzlFQkE5MDA2
QTkxNzIgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IFF1YXJ0ekNv
cmUuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvUXVhcnR6Q29y
ZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCUE4NUQ3QThDMDg3
OUVDNjQwMDZBOTE3MiAvKiBLV1FXTWF0cml4Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEtXUVdNYXRyaXgubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NzI5LDYgKzU3MzMsOCBAQAogCQkJCUE4QzBGQjhDMDg5NzAxRjgwMEJBNTExNCAvKiBL
Q2FudmFzVHlwZXMuaCAqLywKIAkJCQlBOEMwRkI4RDA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZh
c1ZpZXcuY3BwICovLAogCQkJCUE4QzBGQjhFMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzVmll
dy5oICovLAorCQkJCUE4MTBFMzkzMDhBNDE2MEYwMDMzM0Q5OCAvKiBLQ2FudmFzVHJlZURlYnVn
LmggKi8sCisJCQkJQTgxMEUzOTQwOEE0MTYwRjAwMzMzRDk4IC8qIEtDYW52YXNUcmVlRGVidWcu
Y3BwICovLAogCQkJKTsKIAkJCW5hbWUgPSBrY2FudmFzOwogCQkJcGF0aCA9IC4uL1NWR1N1cHBv
cnQva2NhbnZhczsKQEAgLTc4MzQsNiArNzg0MCw3IEBACiAJCQkJQThDMDA1RjcwODk3NEVGQzAw
QkE1MTE0IC8qIEtET01DYWNoZWRTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEMw
MDVGODA4OTc0RjAxMDBCQTUxMTQgLyogS0RPTUNhY2hlZE9iamVjdENsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJN0U2RkVFREEwODk4NTgyMzAwQzQ0QzNGIC8qIFdlYkNvcmVTY3JpcHREZWJ1
Z2dlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTgxMEUzOTUwOEE0MTYwRjAwMzMzRDk4IC8qIEtD
YW52YXNUcmVlRGVidWcuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTAwNDAsNiArMTAwNDcsNyBAQAog
CQkJCUE4QzAwNUVEMDg5NzRFQjUwMEJBNTExNCAvKiBLRE9NQ2FjaGVkU2NyaXB0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE4QzAwNUY2MDg5NzRFRjcwMEJBNTExNCAvKiBLRE9NQ2FjaGVkU3R5
bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTZGRUVEQjA4OTg1ODIzMDBDNDRDM0Yg
LyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQTgxMEUzOTYw
OEE0MTYwRjAwMzMzRDk4IC8qIEtDYW52YXNUcmVlRGVidWcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Cklu
ZGV4OiAuL1dlYktpdFRvb2xzL0R1bXBLQ2FudmFzVHJlZS9EdW1wS0NhbnZhc1RyZWUubQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiBEdW1wS0NhbnZhc1RyZWUubQpkaWZmIC1OIC4vV2ViS2l0VG9vbHMv
RHVtcEtDYW52YXNUcmVlL0R1bXBLQ2FudmFzVHJlZS5tCi0tLSAuL1dlYktpdFRvb2xzL0R1bXBL
Q2FudmFzVHJlZS9EdW1wS0NhbnZhc1RyZWUubQkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisr
KyAuL1dlYktpdFRvb2xzL0R1bXBLQ2FudmFzVHJlZS9EdW1wS0NhbnZhc1RyZWUubQk2IEF1ZyAy
MDA1IDA5OjA3OjExIC0wMDAwCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCA8V2ViQ29yZStTVkcvRHJhd0RvY3VtZW50UHJpdmF0ZS5oPgorCitzdGF0aWMgdm9pZCBkdW1w
UmVuZGVyVHJlZShjb25zdCBjaGFyICpmaWxlbmFtZSk7CisKK2ludCBtYWluKGludCBhcmdjLCBj
b25zdCBjaGFyICphcmd2W10pCit7CisgICAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05T
QXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKKworICAgIGlmIChhcmdjID09IDIgJiYgc3Ry
Y21wKGFyZ3ZbMV0sICItIikgPT0gMCkgeworICAgICAgICBjaGFyIGZpbGVuYW1lQnVmZmVyWzIw
NDhdOworICAgICAgICB3aGlsZSAoZmdldHMoZmlsZW5hbWVCdWZmZXIsIHNpemVvZihmaWxlbmFt
ZUJ1ZmZlciksIHN0ZGluKSkgeworICAgICAgICAgICAgY2hhciAqbmV3TGluZUNoYXJhY3RlciA9
IHN0cmNocihmaWxlbmFtZUJ1ZmZlciwgJ1xuJyk7CisgICAgICAgICAgICBpZiAobmV3TGluZUNo
YXJhY3RlcikgeworICAgICAgICAgICAgICAgICpuZXdMaW5lQ2hhcmFjdGVyID0gJ1wwJzsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGR1bXBSZW5kZXJUcmVlKGZpbGVuYW1lQnVmZmVyKTsK
KyAgICAgICAgICAgIHB1dHMoIiNFT0YiKTsKKyAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvciAoaSA9
IDE7IGkgIT0gYXJnYzsgKytpKSB7CisgICAgICAgICAgICBkdW1wUmVuZGVyVHJlZShhcmd2W2ld
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFtwb29sIHJlbGVhc2VdOworICAgIHJldHVybiAw
OworfQorCitzdGF0aWMgdm9pZCBkdW1wUmVuZGVyVHJlZShjb25zdCBjaGFyICpmaWxlbmFtZSkK
K3sKKyAgICBOU1N0cmluZyAqc3ZnUGF0aCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmlu
ZzpmaWxlbmFtZV07CisgICAgaWYgKHN2Z1BhdGggPT0gbmlsKSB7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiY2FuJ3QgcGFyc2UgZmlsZW5hbWUgYXMgVVRGLThcbiIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIE5TQXV0b3JlbGVhc2VQb29sICpwb29sID0gW1tOU0F1dG9y
ZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07CisgICAgRHJhd0RvY3VtZW50ICpkb2N1bWVudCA9IFtb
RHJhd0RvY3VtZW50IGFsbG9jXSBpbml0V2l0aENvbnRlbnRzT2ZGaWxlOnN2Z1BhdGhdOworICAg
IAorICAgIE5TU3RyaW5nICpyZXN1bHQgPSBbZG9jdW1lbnQgcmVuZGVyVHJlZUFzRXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbl07CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHB1dHMoImVycm9yIik7
CisgICAgZWxzZQorICAgICAgICBmcHV0cyhbcmVzdWx0IFVURjhTdHJpbmddLCBzdGRvdXQpOwor
ICAgIAorICAgIFtkb2N1bWVudCByZWxlYXNlXTsKKyAgICBbcG9vbCByZWxlYXNlXTsKK30KSW5k
ZXg6IC4vV2ViS2l0VG9vbHMvRHVtcEtDYW52YXNUcmVlL0R1bXBLQ2FudmFzVHJlZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHByb2plY3QucGJ4cHJvagpk
aWZmIC1OIC4vV2ViS2l0VG9vbHMvRHVtcEtDYW52YXNUcmVlL0R1bXBLQ2FudmFzVHJlZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCi0tLSAuL1dlYktpdFRvb2xzL0R1bXBLQ2FudmFzVHJlZS9E
dW1wS0NhbnZhc1RyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkxIEphbiAxOTcwIDAwOjAw
OjAwIC0wMDAwCisrKyAuL1dlYktpdFRvb2xzL0R1bXBLQ2FudmFzVHJlZS9EdW1wS0NhbnZhc1Ry
ZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagk2IEF1ZyAyMDA1IDA5OjA3OjEyIC0wMDAwCkBA
IC0wLDAgKzEsMjY1IEBACisvLyAhJCpVVEY4KiQhCit7CisJYXJjaGl2ZVZlcnNpb24gPSAxOwor
CWNsYXNzZXMgPSB7CisJfTsKKwlvYmplY3RWZXJzaW9uID0gNDI7CisJb2JqZWN0cyA9IHsKKwor
LyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKwkJOERENzZGOUEwNDg2QUE3NjAwRDk2
QjVFIC8qIER1bXBLQ2FudmFzVHJlZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDhGQjc3OTZGRTg0MTU1REMwMkFBQzA3IC8qIER1bXBLQ2FudmFzVHJl
ZS5tICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CisJCThERDc2RjlDMDQ4
NkFBNzYwMEQ5NkI1RSAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4RkI3NzlFRkU4NDE1NURDMDJBQUMwNyAv
KiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJQTgxMEU0QkMwOEE0NDYyODAwMzMzRDk4
IC8qIFdlYkNvcmUrU1ZHLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTBFNEJCMDhBNDQ2MjgwMDMzM0Q5OCAvKiBXZWJDb3JlK1NW
Ry5mcmFtZXdvcmsgKi87IH07CisvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKworLyog
QmVnaW4gUEJYQnVpbGRTdHlsZSBzZWN0aW9uICovCisJCTAxNENFQTRGMDAxOENFNDgxMUNBMjky
MyAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFBCWEJ1aWxkU3R5bGU7CisJCQlidWlsZFNldHRp
bmdzID0geworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCQlHQ0NfRFlOQU1JQ19OT19Q
SUMgPSBOTzsKKwkJCQlHQ0NfRU5BQkxFX0ZJWF9BTkRfQ09OVElOVUUgPSBZRVM7CisJCQkJR0ND
X0dFTkVSQVRFX0RFQlVHR0lOR19TWU1CT0xTID0gWUVTOworCQkJCUdDQ19PUFRJTUlaQVRJT05f
TEVWRUwgPSAwOworCQkJCVpFUk9fTElOSyA9IFlFUzsKKwkJCX07CisJCQluYW1lID0gRGVidWc7
CisJCX07CisJCTAxNENFQTUwMDAxOENFNDgxMUNBMjkyMyAvKiBSZWxlYXNlICovID0geworCQkJ
aXNhID0gUEJYQnVpbGRTdHlsZTsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09QWV9QSEFT
RV9TVFJJUCA9IFlFUzsKKwkJCQlHQ0NfRU5BQkxFX0ZJWF9BTkRfQ09OVElOVUUgPSBOTzsKKwkJ
CQlaRVJPX0xJTksgPSBOTzsKKwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKy8qIEVu
ZCBQQlhCdWlsZFN0eWxlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYQ29weUZpbGVzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCisJCThERDc2RjlFMDQ4NkFBNzYwMEQ5NkI1RSAvKiBDb3B5RmlsZXMg
Ki8gPSB7CisJCQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25N
YXNrID0gODsKKwkJCWRzdFBhdGggPSAvdXNyL3NoYXJlL21hbi9tYW4xLzsKKwkJCWRzdFN1YmZv
bGRlclNwZWMgPSAwOworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDE7CisJCX07CisvKiBFbmQgUEJYQ29weUZpbGVzQnVpbGRQaGFz
ZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQkw
OEZCNzc5NkZFODQxNTVEQzAyQUFDMDcgLyogRHVtcEtDYW52YXNUcmVlLm0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IER1bXBLQ2FudmFzVHJlZS5tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwOEZCNzc5RUZFODQxNTVEQzAyQUFDMDcgLyogRm91bmRhdGlvbi5m
cmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEZvdW5kYXRpb24uZnJhbWV3b3JrOyBwYXRoID0g
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvRm91bmRhdGlvbi5mcmFtZXdvcms7IHNvdXJjZVRy
ZWUgPSAiPGFic29sdXRlPiI7IH07CisJCThERDc2RkExMDQ4NkFBNzYwMEQ5NkI1RSAvKiBEdW1w
S0NhbnZhc1RyZWUgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0
aCA9IER1bXBLQ2FudmFzVHJlZTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
KwkJQTgxMEU0QkIwOEE0NDYyODAwMzMzRDk4IC8qIFdlYkNvcmUrU1ZHLmZyYW1ld29yayAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJh
bWV3b3JrOyBwYXRoID0gIldlYkNvcmUrU1ZHLmZyYW1ld29yayI7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CisvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisK
Ky8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJOERENzZGOUIw
NDg2QUE3NjAwRDk2QjVFIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdv
cmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxl
cyA9ICgKKwkJCQk4REQ3NkY5QzA0ODZBQTc2MDBEOTZCNUUgLyogRm91bmRhdGlvbi5mcmFtZXdv
cmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQlBODEwRTRCQzA4QTQ0NjI4MDAzMzNEOTggLyogV2Vi
Q29yZStTVkcuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisvKiBFbmQgUEJYRnJhbWV3b3Jr
c0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCisJ
CTA4RkI3Nzk0RkU4NDE1NURDMDJBQUMwNyAvKiBEdW1wS0NhbnZhc1RyZWUgKi8gPSB7CisJCQlp
c2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTA4RkI3Nzk1RkU4NDE1NURDMDJB
QUMwNyAvKiBTb3VyY2UgKi8sCisJCQkJMDhGQjc3OURGRTg0MTU1REMwMkFBQzA3IC8qIEV4dGVy
bmFsIEZyYW1ld29ya3MgYW5kIExpYnJhcmllcyAqLywKKwkJCQkxQUI2NzRBREZFOUQ1NEI1MTFD
QTJDQkIgLyogUHJvZHVjdHMgKi8sCisJCQkpOworCQkJbmFtZSA9IER1bXBLQ2FudmFzVHJlZTsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTA4RkI3Nzk1RkU4NDE1NURDMDJB
QUMwNyAvKiBTb3VyY2UgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTA4RkI3Nzk2RkU4NDE1NURDMDJBQUMwNyAvKiBEdW1wS0NhbnZhc1RyZWUubSAqLywK
KwkJCSk7CisJCQluYW1lID0gU291cmNlOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJ
fTsKKwkJMDhGQjc3OURGRTg0MTU1REMwMkFBQzA3IC8qIEV4dGVybmFsIEZyYW1ld29ya3MgYW5k
IExpYnJhcmllcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJQTgxMEU0QkIwOEE0NDYyODAwMzMzRDk4IC8qIFdlYkNvcmUrU1ZHLmZyYW1ld29yayAqLywK
KwkJCQkwOEZCNzc5RUZFODQxNTVEQzAyQUFDMDcgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi8s
CisJCQkpOworCQkJbmFtZSA9ICJFeHRlcm5hbCBGcmFtZXdvcmtzIGFuZCBMaWJyYXJpZXMiOwor
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMUFCNjc0QURGRTlENTRCNTExQ0Ey
Q0JCIC8qIFByb2R1Y3RzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQk4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUgLyogRHVtcEtDYW52YXNUcmVlICovLAor
CQkJKTsKKwkJCW5hbWUgPSBQcm9kdWN0czsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CisvKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhOYXRpdmVUYXJn
ZXQgc2VjdGlvbiAqLworCQk4REQ3NkY5NjA0ODZBQTc2MDBEOTZCNUUgLyogRHVtcEtDYW52YXNU
cmVlICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0
aW9uTGlzdCA9IEE4MTBERUQ1MDhBNDBGMzEwMDMzM0Q5OCAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiRHVtcEtDYW52YXNUcmVlIiAqLzsKKwkJCWJ1aWxk
UGhhc2VzID0gKAorCQkJCThERDc2Rjk5MDQ4NkFBNzYwMEQ5NkI1RSAvKiBTb3VyY2VzICovLAor
CQkJCThERDc2RjlCMDQ4NkFBNzYwMEQ5NkI1RSAvKiBGcmFtZXdvcmtzICovLAorCQkJCThERDc2
RjlFMDQ4NkFBNzYwMEQ5NkI1RSAvKiBDb3B5RmlsZXMgKi8sCisJCQkpOworCQkJYnVpbGRSdWxl
cyA9ICgKKwkJCSk7CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUdDQ19HRU5FUkFURV9ERUJV
R0dJTkdfU1lNQk9MUyA9IE5POworCQkJCUdDQ19NT0RFTF9UVU5JTkcgPSBHNTsKKwkJCQlHQ0Nf
UFJFQ09NUElMRV9QUkVGSVhfSEVBREVSID0gWUVTOworCQkJCUdDQ19QUkVGSVhfSEVBREVSID0g
RHVtcEtDYW52YXNUcmVlX1ByZWZpeC5wY2g7CisJCQkJR0NDX1dBUk5fQUJPVVRfUkVUVVJOX1RZ
UEUgPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVTOworCQkJCUlOU1RB
TExfUEFUSCA9ICIkKEhPTUUpL2JpbiI7CisJCQkJUFJFQklORElORyA9IE5POworCQkJCVBST0RV
Q1RfTkFNRSA9IER1bXBLQ2FudmFzVHJlZTsKKwkJCX07CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJ
CQkpOworCQkJbmFtZSA9IER1bXBLQ2FudmFzVHJlZTsKKwkJCXByb2R1Y3RJbnN0YWxsUGF0aCA9
ICIkKEhPTUUpL2JpbiI7CisJCQlwcm9kdWN0TmFtZSA9IER1bXBLQ2FudmFzVHJlZTsKKwkJCXBy
b2R1Y3RSZWZlcmVuY2UgPSA4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUgLyogRHVtcEtDYW52YXNU
cmVlICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsK
KwkJfTsKKy8qIEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhQ
cm9qZWN0IHNlY3Rpb24gKi8KKwkJMDhGQjc3OTNGRTg0MTU1REMwMkFBQzA3IC8qIFByb2plY3Qg
b2JqZWN0ICovID0geworCQkJaXNhID0gUEJYUHJvamVjdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlv
bkxpc3QgPSBBODEwREVEOTA4QTQwRjMxMDAzMzNEOTggLyogQnVpbGQgY29uZmlndXJhdGlvbiBs
aXN0IGZvciBQQlhQcm9qZWN0ICJEdW1wS0NhbnZhc1RyZWUiICovOworCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCX07CisJCQlidWlsZFN0eWxlcyA9ICgKKwkJCQkwMTRDRUE0RjAwMThDRTQ4MTFD
QTI5MjMgLyogRGVidWcgKi8sCisJCQkJMDE0Q0VBNTAwMDE4Q0U0ODExQ0EyOTIzIC8qIFJlbGVh
c2UgKi8sCisJCQkpOworCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CisJCQltYWluR3Jv
dXAgPSAwOEZCNzc5NEZFODQxNTVEQzAyQUFDMDcgLyogRHVtcEtDYW52YXNUcmVlICovOworCQkJ
cHJvamVjdERpclBhdGggPSAiIjsKKwkJCXRhcmdldHMgPSAoCisJCQkJOERENzZGOTYwNDg2QUE3
NjAwRDk2QjVFIC8qIER1bXBLQ2FudmFzVHJlZSAqLywKKwkJCSk7CisJCX07CisvKiBFbmQgUEJY
UHJvamVjdCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rp
b24gKi8KKwkJOERENzZGOTkwNDg2QUE3NjAwRDk2QjVFIC8qIFNvdXJjZXMgKi8gPSB7CisJCQlp
c2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7CisJCQlmaWxlcyA9ICgKKwkJCQk4REQ3NkY5QTA0ODZBQTc2MDBEOTZCNUUgLyogRHVtcEtD
YW52YXNUcmVlLm0gaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQaGFzZSBz
ZWN0aW9uICovCisKKy8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KKwkJ
QTgxMERFRDYwOEE0MEYzMTAwMzMzRDk4IC8qIERldmVsb3BtZW50ICovID0geworCQkJaXNhID0g
WENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPUFlfUEhB
U0VfU1RSSVAgPSBOTzsKKwkJCQlHQ0NfRFlOQU1JQ19OT19QSUMgPSBOTzsKKwkJCQlHQ0NfRU5B
QkxFX0ZJWF9BTkRfQ09OVElOVUUgPSBZRVM7CisJCQkJR0NDX0dFTkVSQVRFX0RFQlVHR0lOR19T
WU1CT0xTID0gWUVTOworCQkJCUdDQ19NT0RFTF9UVU5JTkcgPSBHNTsKKwkJCQlHQ0NfT1BUSU1J
WkFUSU9OX0xFVkVMID0gMDsKKwkJCQlHQ0NfUFJFQ09NUElMRV9QUkVGSVhfSEVBREVSID0gWUVT
OworCQkJCUdDQ19XQVJOX0FCT1VUX1JFVFVSTl9UWVBFID0gWUVTOworCQkJCUdDQ19XQVJOX1VO
VVNFRF9WQVJJQUJMRSA9IFlFUzsKKwkJCQlJTlNUQUxMX1BBVEggPSAiJChIT01FKS9iaW4iOwor
CQkJCVBSRUJJTkRJTkcgPSBOTzsKKwkJCQlQUk9EVUNUX05BTUUgPSBEdW1wS0NhbnZhc1RyZWU7
CisJCQkJWkVST19MSU5LID0gWUVTOworCQkJfTsKKwkJCW5hbWUgPSBEZXZlbG9wbWVudDsKKwkJ
fTsKKwkJQTgxMERFRDcwOEE0MEYzMTAwMzMzRDk4IC8qIERlcGxveW1lbnQgKi8gPSB7CisJCQlp
c2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09Q
WV9QSEFTRV9TVFJJUCA9IFlFUzsKKwkJCQlHQ0NfRU5BQkxFX0ZJWF9BTkRfQ09OVElOVUUgPSBO
TzsKKwkJCQlHQ0NfR0VORVJBVEVfREVCVUdHSU5HX1NZTUJPTFMgPSBOTzsKKwkJCQlHQ0NfTU9E
RUxfVFVOSU5HID0gRzU7CisJCQkJR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUzsK
KwkJCQlHQ0NfV0FSTl9BQk9VVF9SRVRVUk5fVFlQRSA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9VTlVT
RURfVkFSSUFCTEUgPSBZRVM7CisJCQkJSU5TVEFMTF9QQVRIID0gIiQoSE9NRSkvYmluIjsKKwkJ
CQlQUkVCSU5ESU5HID0gTk87CisJCQkJUFJPRFVDVF9OQU1FID0gRHVtcEtDYW52YXNUcmVlOwor
CQkJCVpFUk9fTElOSyA9IE5POworCQkJfTsKKwkJCW5hbWUgPSBEZXBsb3ltZW50OworCQl9Owor
CQlBODEwREVEODA4QTQwRjMxMDAzMzNEOTggLyogRGVmYXVsdCAqLyA9IHsKKwkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlHQ0NfR0VORVJB
VEVfREVCVUdHSU5HX1NZTUJPTFMgPSBOTzsKKwkJCQlHQ0NfTU9ERUxfVFVOSU5HID0gRzU7CisJ
CQkJR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9BQk9V
VF9SRVRVUk5fVFlQRSA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9VTlVTRURfVkFSSUFCTEUgPSBZRVM7
CisJCQkJSU5TVEFMTF9QQVRIID0gIiQoSE9NRSkvYmluIjsKKwkJCQlQUkVCSU5ESU5HID0gTk87
CisJCQkJUFJPRFVDVF9OQU1FID0gRHVtcEtDYW52YXNUcmVlOworCQkJfTsKKwkJCW5hbWUgPSBE
ZWZhdWx0OworCQl9OworCQlBODEwREVEQTA4QTQwRjMxMDAzMzNEOTggLyogRGV2ZWxvcG1lbnQg
Ki8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3Mg
PSB7CisJCQl9OworCQkJbmFtZSA9IERldmVsb3BtZW50OworCQl9OworCQlBODEwREVEQjA4QTQw
RjMxMDAzMzNEOTggLyogRGVwbG95bWVudCAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1
cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCX07CisJCQluYW1lID0gRGVwbG95bWVu
dDsKKwkJfTsKKwkJQTgxMERFREMwOEE0MEYzMTAwMzMzRDk4IC8qIERlZmF1bHQgKi8gPSB7CisJ
CQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQl9
OworCQkJbmFtZSA9IERlZmF1bHQ7CisJCX07CisvKiBFbmQgWENCdWlsZENvbmZpZ3VyYXRpb24g
c2VjdGlvbiAqLworCisvKiBCZWdpbiBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KKwkJ
QTgxMERFRDUwOEE0MEYzMTAwMzMzRDk4IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3Ig
UEJYTmF0aXZlVGFyZ2V0ICJEdW1wS0NhbnZhc1RyZWUiICovID0geworCQkJaXNhID0gWENDb25m
aWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJQTgxMERFRDYw
OEE0MEYzMTAwMzMzRDk4IC8qIERldmVsb3BtZW50ICovLAorCQkJCUE4MTBERUQ3MDhBNDBGMzEw
MDMzM0Q5OCAvKiBEZXBsb3ltZW50ICovLAorCQkJCUE4MTBERUQ4MDhBNDBGMzEwMDMzM0Q5OCAv
KiBEZWZhdWx0ICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0g
MDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlZmF1bHQ7CisJCX07CisJCUE4MTBE
RUQ5MDhBNDBGMzEwMDMzM0Q5OCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFBy
b2plY3QgIkR1bXBLQ2FudmFzVHJlZSIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25M
aXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQlBODEwREVEQTA4QTQwRjMxMDAz
MzNEOTggLyogRGV2ZWxvcG1lbnQgKi8sCisJCQkJQTgxMERFREIwOEE0MEYzMTAwMzMzRDk4IC8q
IERlcGxveW1lbnQgKi8sCisJCQkJQTgxMERFREMwOEE0MEYzMTAwMzMzRDk4IC8qIERlZmF1bHQg
Ki8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVm
YXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVmYXVsdDsKKwkJfTsKKy8qIEVuZCBYQ0NvbmZpZ3Vy
YXRpb25MaXN0IHNlY3Rpb24gKi8KKwl9OworCXJvb3RPYmplY3QgPSAwOEZCNzc5M0ZFODQxNTVE
QzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87Cit9CkluZGV4OiAuL1dlYktpdFRvb2xzL1Nj
cmlwdHMvYnVpbGQtZHVtcGtjYW52YXN0cmVlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGJ1aWxkLWR1
bXBrY2FudmFzdHJlZQpkaWZmIC1OIC4vV2ViS2l0VG9vbHMvU2NyaXB0cy9idWlsZC1kdW1wa2Nh
bnZhc3RyZWUKLS0tIC4vV2ViS2l0VG9vbHMvU2NyaXB0cy9idWlsZC1kdW1wa2NhbnZhc3RyZWUJ
MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgLi9XZWJLaXRUb29scy9TY3JpcHRzL2J1aWxk
LWR1bXBrY2FudmFzdHJlZQk2IEF1ZyAyMDA1IDA5OjA3OjE3IC0wMDAwCkBAIC0wLDAgKzEsNDcg
QEAKKyMhL3Vzci9iaW4vcGVybCAtdworCisjIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIworIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisjIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisjICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisjICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
IyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
IyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorIyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworIyBTaW1wbGlmaWVkIGJ1aWxkIHNjcmlwdCBmb3IgV2ViS2l0IE9wZW4gU291cmNlIFBy
b2plY3QuCisjIE1vZGlmaWVkIGNvcHkgb2YgYnVpbGQtZHVtcHJlbmRlcnRyZWUuIFBlcmhhcHMg
dGhlc2UgY291bGQgc2hhcmUgY29kZS4KKwordXNlIHN0cmljdDsKK3VzZSBGaW5kQmluOwordXNl
IGxpYiAkRmluZEJpbjo6QmluOwordXNlIHdlYmtpdGRpcnM7CisKK2NoZWNrUmVxdWlyZWRTeXN0
ZW1Db25maWcoKTsKK3NldENvbmZpZ3VyYXRpb24oKTsKK2NoZGlyV2ViS2l0KCk7CitteSBAb3B0
aW9ucyA9IFhjb2RlT3B0aW9ucygpOworCisjIENoZWNrIHRvIHNlZSB0aGF0IGFsbCB0aGUgZnJh
bWV3b3JrcyBhcmUgYnVpbHQuCitjaGVja1NWR0ZyYW1ld29ya3MoKTsKKworIyBCdWlsZAorY2hk
aXIgIldlYktpdFRvb2xzL0R1bXBLQ2FudmFzVHJlZSIgb3IgZGllOworZXhpdCBzeXN0ZW0gInhj
b2RlYnVpbGQiLCAiLXByb2plY3QiLCAiRHVtcEtDYW52YXNUcmVlLnhjb2RlcHJvaiIsIEBvcHRp
b25zOwpJbmRleDogLi9XZWJLaXRUb29scy9TY3JpcHRzL2N2cy1jcmVhdGUtcGF0Y2gKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYktpdFRvb2xzL1NjcmlwdHMvY3ZzLWNyZWF0ZS1w
YXRjaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXAgLXUgLXIxLjUgLi9XZWJLaXRU
b29scy9TY3JpcHRzL2N2cy1jcmVhdGUtcGF0Y2gKLS0tIC4vV2ViS2l0VG9vbHMvU2NyaXB0cy9j
dnMtY3JlYXRlLXBhdGNoCTMwIEp1biAyMDA1IDIzOjE4OjMzIC0wMDAwCTEuNQorKysgLi9XZWJL
aXRUb29scy9TY3JpcHRzL2N2cy1jcmVhdGUtcGF0Y2gJNiBBdWcgMjAwNSAwOTowNzoxNyAtMDAw
MApAQCAtMTQzLDcgKzE0Myw3IEBAIHN1YiBkaWZmCiBmb3IgbXkgJHBhdGggKHNvcnQga2V5cyAl
cGF0aHMpIHsKICAgICBteSAkcHJlZml4ID0gJHBhdGggZXEgIi4iID8gIiIgOiAiJHBhdGgvIjsK
ICAgICBpZiAoLWQgJHBhdGgpIHsKLSAgICAgICAgZm9yIG15ICRDVlMgKGBmaW5kICckcGF0aCcg
LW5hbWUgQ1ZTYCkgeworICAgICAgICBmb3IgbXkgJENWUyAoYGZpbmQgLUwgJyRwYXRoJyAtbmFt
ZSBDVlNgKSB7CiAgICAgICAgICAgICBjaG9tcCAkQ1ZTOwogICAgICAgICAgICAgZGllICJjYW4n
dCBoYW5kbGUgZmlsZXMgbmFtZWQgQ1ZTIGxpa2UgXCIkQ1ZTXCJcbiIgaWYgIS1kICRDVlM7CiAg
ICAgICAgICAgICBteSAkZGlyID0gJENWUzsKSW5kZXg6IC4vV2ViS2l0VG9vbHMvU2NyaXB0cy9y
dW4td2Via2l0LXRlc3RzLXN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBydW4td2Via2l0LXRlc3Rz
LXN2ZwpkaWZmIC1OIC4vV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Via2l0LXRlc3RzLXN2Zwot
LS0gLi9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtdGVzdHMtc3ZnCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIC4vV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Via2l0LXRlc3Rz
LXN2Zwk2IEF1ZyAyMDA1IDA5OjA3OjE4IC0wMDAwCkBAIC0wLDAgKzEsMjUzIEBACisjIS91c3Iv
YmluL3BlcmwgLXcKKworIyBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorIyAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorIyAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorIyAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyMg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisjIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgU2Ny
aXB0IHRvIHJ1biB0aGUgV2ViIEtpdCBPcGVuIFNvdXJjZSBQcm9qZWN0IGxheW91dCB0ZXN0cy4K
KwordXNlIHN0cmljdDsKK3VzZSBJUEM6Ok9wZW4yOwordXNlIEZpbmRCaW47Cit1c2UgQ3dkOwor
dXNlIGxpYiAkRmluZEJpbjo6QmluOwordXNlIHdlYmtpdGRpcnM7CisKKyMgUnVuIGFsbCB0aGUg
dGVzdHMgcGFzc2VkIGluIG9uIHRoZSBjb21tYW5kIGxpbmUuCisjIElmIG5vIHRlc3RzIGFyZSBw
YXNzZWQsIGZpbmQgYWxsIHRoZSAuc3ZnIGZpbGVzIGluIHRoZSB0ZXN0IGRpcmVjdG9yeS4KKwor
IyBSdW4gZWFjaCB0ZXh0LgorIyBDb21wYXJlIGFnYWluc3QgdGhlIGV4aXN0aW5nIGZpbGUgeHh4
LWV4cGVjdGVkLnR4dC4KKyMgSWYgdGhlcmUgaXMgYSBtaXNtYXRjaCwgZ2VuZXJhdGUgeHh4LWFj
dHVhbC50eHQgYW5kIHh4eC1kaWZmcy50eHQuCisKKyMgQXQgdGhlIGVuZCwgcmVwb3J0OgorIyAg
IHRoZSBudW1iZXIgb2YgdGVzdHMgdGhhdCBnb3QgdGhlIGV4cGVjdGVkIHJlc3VsdHMKKyMgICB0
aGUgbnVtYmVyIG9mIHRlc3RzIHRoYXQgcmFuLCBidXQgZGlkIG5vdCBnZXQgdGhlIGV4cGVjdGVk
IHJlc3VsdHMKKyMgICB0aGUgbnVtYmVyIG9mIHRlc3RzIHRoYXQgZmFpbGVkIHRvIHJ1bgorIyAg
IHRoZSBudW1iZXIgb2YgdGVzdHMgdGhhdCB3ZXJlIHJ1biBidXQgaGFkIG5vIGV4cGVjdGVkIHJl
c3VsdHMgdG8gY29tcGFyZSBhZ2FpbnN0CisKK3NldENvbmZpZ3VyYXRpb24oKTsKK215ICRwcm9k
dWN0RGlyID0gcHJvZHVjdERpcigpOworCitjaGRpcldlYktpdCgpOworCitteSAkcmVzdWx0ID0g
c3lzdGVtICJXZWJLaXRUb29scy9TY3JpcHRzL2J1aWxkLWR1bXBrY2FudmFzdHJlZSIsIEBBUkdW
OworZXhpdCAkcmVzdWx0IGlmICRyZXN1bHQ7CisKK215ICR0b29sID0gIiRwcm9kdWN0RGlyL0R1
bXBLQ2FudmFzVHJlZSI7CitkaWUgImNhbid0IGZpbmQgZXhlY3V0YWJsZSBEdW1wS0NhbnZhc1Ry
ZWUgdG9vbCAobG9va2VkIGluICRwcm9kdWN0RGlyKVxuIiBpZiAhLXggJHRvb2w7CisKK2NoZWNr
U1ZHRnJhbWV3b3JrcygpOworCitteSAkd29ya2luZ0RpciA9IGdldGN3ZCgpOworbXkgJFNWR1N1
cHBvcnREaXJlY3RvcnkgPSAiJHdvcmtpbmdEaXIvU1ZHU3VwcG9ydCI7CitteSAkdGVzdERpcmVj
dG9yeSA9ICIkU1ZHU3VwcG9ydERpcmVjdG9yeS9sYXlvdXQtdGVzdHMiOworbXkgJHRlc3RSZXN1
bHRzRGlyZWN0b3J5ID0gIi90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cyI7CitteSAkdGVzdFJlc3Vs
dHMgPSAiJHRlc3RSZXN1bHRzRGlyZWN0b3J5L3Jlc3VsdHMuaHRtbCI7CisKKyRFTlZ7RFlMRF9G
UkFNRVdPUktfUEFUSH0gPSAkcHJvZHVjdERpcjsKKworbXkgQHRlc3RzOworCitteSAkZmluZEFy
Z3VtZW50cyA9ICJcXCggLW5hbWUgcmVzb3VyY2VzIFxcISAtcHJ1bmUgXFwpIC1vciAtbmFtZSAn
Ki5zdmcnIjsKK215ICRmb3VuZFRlc3ROYW1lID0gMDsKK2ZvciBteSAkdGVzdCAoQEFSR1YpIHsK
KyAgICBuZXh0IGlmICR0ZXN0ID1+IC9eLS87CisgICAgJGZvdW5kVGVzdE5hbWUgPSAxOworICAg
ICR0ZXN0ID1+IHMvXiR0ZXN0RGlyZWN0b3J5XC8vLzsKKyAgICBpZiAoJHRlc3QgPX4gL15cLy8p
IHsKKyAgICAgICAgcHJpbnQgImNhbid0IHJ1biB0ZXN0IG91dHNpZGUgJHRlc3REaXJlY3Rvcnlc
biI7CisgICAgfSBlbHNpZiAoLWYgIiR0ZXN0RGlyZWN0b3J5LyR0ZXN0IikgeworICAgICAgICBp
ZiAoJHRlc3QgIX4gL1wuKHN2ZykkLykgeworICAgICAgICAgICAgcHJpbnQgInRlc3QgJHRlc3Qg
ZG9lcyBub3QgaGF2ZSBhbiAuc3ZnIGV4dGVuc2lvblxuIjsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHB1c2ggQHRlc3RzLCAkdGVzdDsKKyAgICAgICAgfQorICAgIH0gZWxzaWYgKC1k
ICIkdGVzdERpcmVjdG9yeS8kdGVzdCIpIHsKKyAgICAgICAgcHVzaCBAdGVzdHMsIG1hcCB7IGNo
b21wOyBzLV4kdGVzdERpcmVjdG9yeS8tLTsgJF87IH0gYGZpbmQgLUxzICR0ZXN0RGlyZWN0b3J5
LyR0ZXN0ICRmaW5kQXJndW1lbnRzYDsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmludCAidGVz
dCAkdGVzdCBub3QgZm91bmRcbiI7CisgICAgfQorfQoraWYgKCEkZm91bmRUZXN0TmFtZSkgewor
ICAgIEB0ZXN0cyA9IG1hcCB7IGNob21wOyBzLV4kdGVzdERpcmVjdG9yeS8tLTsgJF87IH0gYGZp
bmQgLUxzICR0ZXN0RGlyZWN0b3J5ICRmaW5kQXJndW1lbnRzYDsKK30KKworZGllICJubyB0ZXN0
cyB0byBydW5cbiIgaWYgIUB0ZXN0czsKKworbXkgJWNvdW50czsKK215ICV0ZXN0czsKK215ICRj
b3VudDsKKworb3BlbjIoXCpJTiwgXCpPVVQsICR0b29sLCAiLSIpIG9yIGRpZTsKKworJHwgPSAx
OworCitmb3IgbXkgJHRlc3QgKEB0ZXN0cykgeworICAgIG5leHQgaWYgJHRlc3QgZXEgJ3Jlc3Vs
dHMuaHRtbCc7CisgICAgCisgICAgbXkgJGJhc2UgPSAkdGVzdDsKKyAgICAkYmFzZSA9fiBzL1wu
KHN2ZykkLy87CisgICAgCisgICAgcHJpbnQgInJ1bm5pbmcgJGJhc2UgdGVzdCI7CisgICAgCisg
ICAgbXkgJHJlc3VsdDsKKworICAgIHByaW50IE9VVCAiJHRlc3REaXJlY3RvcnkvJHRlc3RcbiI7
CisKKyAgICBteSAkYWN0dWFsID0gIiI7CisgICAgd2hpbGUgKDxJTj4pIHsKKyAgICAgICAgbGFz
dCBpZiAvI0VPRiQvOworICAgICAgICAkYWN0dWFsIC49ICRfOworICAgIH0KKyAgICAKKyAgICBt
eSAkZXhwZWN0ZWQ7CisgICAgaWYgKG9wZW4gRVhQRUNURUQsICI8IiwgIiR0ZXN0RGlyZWN0b3J5
LyRiYXNlLWV4cGVjdGVkLnR4dCIpIHsKKyAgICAgICAgJGV4cGVjdGVkID0gIiI7CisgICAgICAg
IHdoaWxlICg8RVhQRUNURUQ+KSB7CisgICAgICAgICAgICAkZXhwZWN0ZWQgLj0gJF87CisgICAg
ICAgIH0KKyAgICAgICAgY2xvc2UgRVhQRUNURUQ7CisgICAgfQorICAgIGlmICghZGVmaW5lZCAk
ZXhwZWN0ZWQpIHsKKyAgICAgICAgcHJpbnQgIiAtPiBuZXcgdGVzdFxuIjsgICAgICAgIAorICAg
ICAgICAkcmVzdWx0ID0gIm5ldyI7CisgICAgICAgIG9wZW4gRVhQRUNURUQsICI+IiwgIiR0ZXN0
RGlyZWN0b3J5LyRiYXNlLWV4cGVjdGVkLnR4dCIgb3IgZGllICJjb3VsZCBub3QgY3JlYXRlICR0
ZXN0RGlyZWN0b3J5LyRiYXNlLWV4cGVjdGVkLnR4dFxuIjsKKyAgICAgICAgcHJpbnQgRVhQRUNU
RUQgJGFjdHVhbDsKKyAgICAgICAgY2xvc2UgRVhQRUNURUQ7CisgICAgICAgIHVubGluayAiJHRl
c3RSZXN1bHRzRGlyZWN0b3J5LyRiYXNlLWFjdHVhbC50eHQiOworICAgICAgICB1bmxpbmsgIiR0
ZXN0UmVzdWx0c0RpcmVjdG9yeS8kYmFzZS1kaWZmcy50eHQiOworICAgIH0gZWxzaWYgKCRhY3R1
YWwgZXEgJGV4cGVjdGVkKSB7CisgICAgICAgIHByaW50ICIgLT4gc3VjY2VlZGVkXG4iOyAgICAg
ICAgCisgICAgICAgICRyZXN1bHQgPSAibWF0Y2giOworICAgICAgICB1bmxpbmsgIiR0ZXN0UmVz
dWx0c0RpcmVjdG9yeS8kYmFzZS1hY3R1YWwudHh0IjsKKyAgICAgICAgdW5saW5rICIkdGVzdFJl
c3VsdHNEaXJlY3RvcnkvJGJhc2UtZGlmZnMudHh0IjsKKyAgICB9IGVsc2UgeworICAgICAgICBw
cmludCAiIC0+IGZhaWxlZFxuIjsgICAgICAgIAorICAgICAgICAkcmVzdWx0ID0gIm1pc21hdGNo
IjsKKyAgICAgICAgbXkgJGRpciA9ICIkdGVzdFJlc3VsdHNEaXJlY3RvcnkvJGJhc2UiOworICAg
ICAgICAkZGlyID1+IHN8L1teL10rJHx8OworICAgICAgICBzeXN0ZW0gIm1rZGlyIiwgIi1wIiwg
JGRpcjsKKyAgICAgICAgb3BlbiBBQ1RVQUwsICI+IiwgIiR0ZXN0UmVzdWx0c0RpcmVjdG9yeS8k
YmFzZS1hY3R1YWwudHh0IiBvciBkaWU7CisgICAgICAgIHByaW50IEFDVFVBTCAkYWN0dWFsOwor
ICAgICAgICBjbG9zZSBBQ1RVQUw7CisgICAgICAgIHN5c3RlbSAiZGlmZiAtdSBcIiR0ZXN0RGly
ZWN0b3J5LyRiYXNlLWV4cGVjdGVkLnR4dFwiIFwiJHRlc3RSZXN1bHRzRGlyZWN0b3J5LyRiYXNl
LWFjdHVhbC50eHRcIiA+IFwiJHRlc3RSZXN1bHRzRGlyZWN0b3J5LyRiYXNlLWRpZmZzLnR4dFwi
IjsKKyAgICB9CisgICAgCisgICAgJGNvdW50ICs9IDE7CisgICAgJGNvdW50c3skcmVzdWx0fSAr
PSAxOworICAgIHB1c2ggQHskdGVzdHN7JHJlc3VsdH19LCAkdGVzdDsKK30KKworY2xvc2UgSU47
CitjbG9zZSBPVVQ7CisKK215ICV0ZXh0ID0gKAorICAgIG1hdGNoID0+ICJzdWNjZWVkZWQiLAor
ICAgIG1pc21hdGNoID0+ICJoYWQgaW5jb3JyZWN0IGxheW91dCIsCisgICAgbmV3ID0+ICJ3ZXJl
IG5ldyIsCisgICAgZmFpbCA9PiAiZmFpbGVkICh0b29sIGRpZCBub3QgZXhlY3V0ZSBzdWNjZXNz
ZnVsbHkpIiwKKyk7CisKK3ByaW50ICJcbiI7CisKK2lmICgkY291bnRze21hdGNofSAmJiAkY291
bnRze21hdGNofSA9PSAkY291bnQpIHsKKyAgICBwcmludCAiYWxsICRjb3VudCB0ZXN0IGNhc2Vz
IHN1Y2NlZWRlZFxuIjsKKyAgICB1bmxpbmsgJHRlc3RSZXN1bHRzOworfSBlbHNlIHsKKyAgICBm
b3IgbXkgJHR5cGUgKCJtYXRjaCIsICJtaXNtYXRjaCIsICJuZXciLCAiZmFpbCIpIHsKKyAgICAg
ICAgbXkgJGMgPSAkY291bnRzeyR0eXBlfTsKKyAgICAgICAgaWYgKCRjKSB7CisgICAgICAgICAg
ICBteSAkdCA9ICR0ZXh0eyR0eXBlfTsKKyAgICAgICAgICAgIG15ICRtZXNzYWdlOworICAgICAg
ICAgICAgaWYgKCRjID09IDEpIHsKKyAgICAgICAgICAgICAgICAkdCA9fiBzL3dlcmUvd2FzLzsK
KyAgICAgICAgICAgICAgICAkbWVzc2FnZSA9IHNwcmludGYgIjEgdGVzdCBjYXNlICglZCUlKSAl
c1xuIiwgMSAqIDEwMCAvICRjb3VudCwgJHQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICRtZXNzYWdlID0gc3ByaW50ZiAiJWQgdGVzdCBjYXNlcyAoJWQlJSkgJXNcbiIs
ICRjLCAkYyAqIDEwMCAvICRjb3VudCwgJHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAk
bWVzc2FnZSA9fiBzLVwoMCVcKS0oPDElKS07CisgICAgICAgICAgICBwcmludCAkbWVzc2FnZTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzeXN0ZW0gIm1rZGlyIiwgIi1wIiwgJHRlc3RS
ZXN1bHRzRGlyZWN0b3J5OworCisgICAgb3BlbiBIVE1MLCAiPiIsICR0ZXN0UmVzdWx0cyBvciBk
aWU7CisgICAgcHJpbnQgSFRNTCAiPGh0bWw+XG4iOworICAgIHByaW50IEhUTUwgIjxoZWFkPlxu
IjsKKyAgICBwcmludCBIVE1MICI8dGl0bGU+TGF5b3V0IFRlc3QgUmVzdWx0czwvdGl0bGU+XG4i
OworICAgIHByaW50IEhUTUwgIjwvaGVhZD5cbiI7CisgICAgcHJpbnQgSFRNTCAiPGJvZHk+XG4i
OworCisgICAgaWYgKCRjb3VudHN7bWlzbWF0Y2h9KSB7CisgICAgICAgIHByaW50IEhUTUwgIjxw
PlRlc3RzIHdoZXJlIHJlc3VsdHMgZGlkIG5vdCBtYXRjaCBleHBlY3RlZCByZXN1bHRzOjwvcD5c
biI7CisgICAgICAgIHByaW50IEhUTUwgIjx0YWJsZT5cbiI7CisgICAgICAgIGZvciBteSAkdGVz
dCAoQHskdGVzdHN7bWlzbWF0Y2h9fSkgeworICAgICAgICAgICAgbXkgJGJhc2UgPSAkdGVzdDsK
KyAgICAgICAgICAgICRiYXNlID1+IHMvXC4oc3ZnKSQvLzsKKyAgICAgICAgICAgIHByaW50IEhU
TUwgIjx0cj5cbiI7CisgICAgICAgICAgICBwcmludCBIVE1MICI8dGQ+PGEgaHJlZj1cIiR0ZXN0
RGlyZWN0b3J5LyR0ZXN0XCI+JGJhc2U8L2E+PC90ZD5cbiI7CisgICAgICAgICAgICBwcmludCBI
VE1MICI8dGQ+PGEgaHJlZj1cIiR0ZXN0RGlyZWN0b3J5LyRiYXNlLWV4cGVjdGVkLnR4dFwiPmV4
cGVjdGVkPC9hPjwvdGQ+XG4iOworICAgICAgICAgICAgcHJpbnQgSFRNTCAiPHRkPjxhIGhyZWY9
XCIkYmFzZS1hY3R1YWwudHh0XCI+YWN0dWFsPC9hPjwvdGQ+XG4iOworICAgICAgICAgICAgcHJp
bnQgSFRNTCAiPHRkPjxhIGhyZWY9XCIkYmFzZS1kaWZmcy50eHRcIj5kaWZmczwvYT48L3RkPlxu
IjsKKyAgICAgICAgICAgIHByaW50IEhUTUwgIjwvdHI+XG4iOworICAgICAgICB9CisgICAgICAg
IHByaW50IEhUTUwgIjwvdGFibGU+XG4iOworICAgIH0KKworICAgIGlmICgkY291bnRze2ZhaWx9
KSB7CisgICAgICAgIHByaW50IEhUTUwgIjxwPlRlc3RzIHRoYXQgY2F1c2VkIHRoZSBEdW1wUmVu
ZGVyVHJlZSB0b29sIHRvIGZhaWw6PC9wPlxuIjsKKyAgICAgICAgcHJpbnQgSFRNTCAiPHRhYmxl
PlxuIjsKKyAgICAgICAgZm9yIG15ICR0ZXN0IChAeyR0ZXN0c3tmYWlsfX0pIHsKKyAgICAgICAg
ICAgIG15ICRiYXNlID0gJHRlc3Q7CisgICAgICAgICAgICAkYmFzZSA9fiBzL1wuKGh0bWx8eG1s
fHhodG1sKSQvLzsKKyAgICAgICAgICAgIHByaW50IEhUTUwgIjx0cj5cbiI7CisgICAgICAgICAg
ICBwcmludCBIVE1MICI8dGQ+PGEgaHJlZj1cIiR0ZXN0RGlyZWN0b3J5LyR0ZXN0XCI+JGJhc2U8
L2E+PC90ZD5cbiI7CisgICAgICAgICAgICBwcmludCBIVE1MICI8L3RyPlxuIjsKKyAgICAgICAg
fQorICAgICAgICBwcmludCBIVE1MICI8L3RhYmxlPlxuIjsKKyAgICB9CisKKyAgICBpZiAoJGNv
dW50c3tuZXd9KSB7CisgICAgICAgIHByaW50IEhUTUwgIjxwPlRlc3RzIHRoYXQgaGFkIG5vIGV4
cGVjdGVkIHJlc3VsdHMgKHByb2JhYmx5IG5ldyk6PC9wPlxuIjsKKyAgICAgICAgcHJpbnQgSFRN
TCAiPHRhYmxlPlxuIjsKKyAgICAgICAgZm9yIG15ICR0ZXN0IChAeyR0ZXN0c3tuZXd9fSkgewor
ICAgICAgICAgICAgbXkgJGJhc2UgPSAkdGVzdDsKKyAgICAgICAgICAgICRiYXNlID1+IHMvXC4o
c3ZnKSQvLzsKKyAgICAgICAgICAgIHByaW50IEhUTUwgIjx0cj5cbiI7CisgICAgICAgICAgICBw
cmludCBIVE1MICI8dGQ+PGEgaHJlZj1cIiR0ZXN0RGlyZWN0b3J5LyR0ZXN0XCI+JGJhc2U8L2E+
PC90ZD5cbiI7CisgICAgICAgICAgICBwcmludCBIVE1MICI8dGQ+PGEgaHJlZj1cIiR0ZXN0RGly
ZWN0b3J5LyRiYXNlLWV4cGVjdGVkLnR4dFwiPnJlc3VsdHM8L2E+PC90ZD5cbiI7CisgICAgICAg
ICAgICBwcmludCBIVE1MICI8L3RyPlxuIjsKKyAgICAgICAgfQorICAgICAgICBwcmludCBIVE1M
ICI8L3RhYmxlPlxuIjsKKyAgICB9CisKKyAgICBwcmludCBIVE1MICI8L2JvZHk+XG4iOworICAg
IHByaW50IEhUTUwgIjwvaHRtbD5cbiI7CisgICAgY2xvc2UgSFRNTDsKKyAgICAKKyAgICBzeXN0
ZW0gIm9wZW4iLCAkdGVzdFJlc3VsdHM7Cit9Cg==
</data>
<flag name="review"
          id="318"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>