<?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>176168</bug_id>
          
          <creation_ts>2017-08-31 09:47:55 -0700</creation_ts>
          <short_desc>Implement FileSystemDirectoryEntry.getDirectory()</short_desc>
          <delta_ts>2017-09-02 14:31:55 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>https://wicg.github.io/entries-api/#dom-filesystemdirectoryentry-getdirectory</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>175976</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1343961</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-08-31 09:47:55 -0700</bug_when>
    <thetext>Implement FileSystemDirectoryEntry.getDirectory():
- https://wicg.github.io/entries-api/#dom-filesystemdirectoryentry-getdirectory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343962</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-31 09:48:07 -0700</bug_when>
    <thetext>&lt;rdar://problem/34187787&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344737</commentid>
    <comment_count>2</comment_count>
      <attachid>319690</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-01 21:21:03 -0700</bug_when>
    <thetext>Created attachment 319690
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344738</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-01 21:22:52 -0700</bug_when>
    <thetext>Attachment 319690 did not pass style-queue:


ERROR: Source/WebCore/Modules/entriesapi/FileSystemDirectoryEntry.cpp:73:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/Modules/entriesapi/FileSystemDirectoryEntry.cpp:78:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344823</commentid>
    <comment_count>4</comment_count>
      <attachid>319690</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-02 10:59:54 -0700</bug_when>
    <thetext>Comment on attachment 319690
Patch

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

&gt; Source/WebCore/Modules/entriesapi/DOMFileSystem.cpp:288
&gt; +        callOnMainThread([this, context = makeRef(context), completionCallback = WTFMove(completionCallback)]() mutable {

Why is it safe to call on main thread without a ref/deref to make sure DOMFileSystem (&quot;this&quot;) is still alive?

&gt; Source/WebCore/Modules/entriesapi/DOMFileSystem.cpp:297
&gt; +        callOnMainThread([this, context = WTFMove(context), resolvedVirtualPath = crossThreadCopy(resolvedVirtualPath), entryType = metadata.type, completionCallback = WTFMove(completionCallback)]() mutable {

Ditto.

&gt; Source/WebCore/Modules/entriesapi/FileSystemDirectoryEntry.cpp:54
&gt; +    filesystem().getEntry(context, *this, path, flags, [this, pendingActivity = makePendingActivity(*this), matches = WTFMove(matches), successCallback = WTFMove(successCallback), errorCallback = WTFMove(errorCallback)](auto&amp;&amp; result) {

No need to ref/deref &quot;this&quot; here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344864</commentid>
    <comment_count>5</comment_count>
      <attachid>319690</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-02 14:02:43 -0700</bug_when>
    <thetext>Comment on attachment 319690
Patch

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

&gt;&gt; Source/WebCore/Modules/entriesapi/DOMFileSystem.cpp:288
&gt;&gt; +        callOnMainThread([this, context = makeRef(context), completionCallback = WTFMove(completionCallback)]() mutable {
&gt; 
&gt; Why is it safe to call on main thread without a ref/deref to make sure DOMFileSystem (&quot;this&quot;) is still alive?

The file and directory entries hold a strong reference to their DOMFileSystem. Those operations (such as getFile) are requested by those entries. The file and directory entries make sure they stay alive during async operations via ActiveDOMObject&apos;s PendingActivity and therefore keep their DOMFileSystem alive during the async operation.

&gt;&gt; Source/WebCore/Modules/entriesapi/DOMFileSystem.cpp:297
&gt;&gt; +        callOnMainThread([this, context = WTFMove(context), resolvedVirtualPath = crossThreadCopy(resolvedVirtualPath), entryType = metadata.type, completionCallback = WTFMove(completionCallback)]() mutable {
&gt; 
&gt; Ditto.

Same comment as above. until the completionCallback is called, |this| is kept alive by the client (directory or file entry).

&gt;&gt; Source/WebCore/Modules/entriesapi/FileSystemDirectoryEntry.cpp:54
&gt;&gt; +    filesystem().getEntry(context, *this, path, flags, [this, pendingActivity = makePendingActivity(*this), matches = WTFMove(matches), successCallback = WTFMove(successCallback), errorCallback = WTFMove(errorCallback)](auto&amp;&amp; result) {
&gt; 
&gt; No need to ref/deref &quot;this&quot; here?

pendingActivity = makePendingActivity(*this) keeps us and our wrapper alive until destroyed (i.e. when the async operation finishes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344868</commentid>
    <comment_count>6</comment_count>
      <attachid>319690</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-02 14:31:53 -0700</bug_when>
    <thetext>Comment on attachment 319690
Patch

Clearing flags on attachment: 319690

Committed r221540: &lt;http://trac.webkit.org/changeset/221540&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344869</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-02 14:31:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319690</attachid>
            <date>2017-09-01 21:21:03 -0700</date>
            <delta_ts>2017-09-02 14:31:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176168-20170901212102.patch</filename>
            <type>text/plain</type>
            <size>23468</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhmNzRlZjQwOTAwZGI2
MDQyODk0NGRhNWM2Y2NlYjY5ZGE3YTgwNy4uMDc4MGE4ODUwZGFiYTEzZTdhMDJhNjA4YWM5ZDFj
ODU2Y2JmODRhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI5IEBACiAyMDE3LTA5LTAxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgSW1wbGVtZW50IEZpbGVTeXN0
ZW1EaXJlY3RvcnlFbnRyeS5nZXREaXJlY3RvcnkoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MTY4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
NDE4Nzc4Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnQgRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5LmdldERpcmVjdG9yeSgpIGFzIHBl
cjoKKyAgICAgICAgLSBodHRwczovL3dpY2cuZ2l0aHViLmlvL2VudHJpZXMtYXBpLyNkb20tZmls
ZXN5c3RlbWRpcmVjdG9yeWVudHJ5LWdldGRpcmVjdG9yeQorCisgICAgICAgIFRlc3Q6IGVkaXRp
bmcvcGFzdGVib2FyZC9kYXRhdHJhbnNmZXItaXRlbXMtZHJvcC1nZXREaXJlY3RvcnkuaHRtbAor
CisgICAgICAgICogTW9kdWxlcy9lbnRyaWVzYXBpL0RPTUZpbGVTeXN0ZW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aXNWYWxpZFZpcnR1YWxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29s
dmVSZWxhdGl2ZVZpcnR1YWxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZpbGVTeXN0ZW06
OmdldEVudHJ5KToKKyAgICAgICAgKiBNb2R1bGVzL2VudHJpZXNhcGkvRE9NRmlsZVN5c3RlbS5o
OgorICAgICAgICAqIE1vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5OjpnZXRFbnRy
eSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlU3lzdGVtRGlyZWN0b3J5RW50cnk6OmdldEZpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5OjpnZXREaXJlY3Rv
cnkpOgorICAgICAgICAqIE1vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50
cnkuaDoKKworMjAxNy0wOS0wMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCiAg
ICAgICAgIEltcGxlbWVudCBGaWxlU3lzdGVtRGlyZWN0b3J5RW50cnkuZ2V0RmlsZSgpCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYxNjcKICAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzM0MTg3Nzc1PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9lbnRyaWVzYXBpL0RPTUZpbGVTeXN0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9lbnRyaWVzYXBpL0RPTUZpbGVTeXN0ZW0uY3BwCmluZGV4IDZiMGEzYmIxNDViMGVlZjdm
ODE3YzBlYjIzN2YwYmFlZTRlYWJkNGMuLjQ4YzQxN2YxMGI1ZTFhYTlkN2QzM2M1ODVhYjU5NDhm
MTdmOTIxZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9E
T01GaWxlU3lzdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkv
RE9NRmlsZVN5c3RlbS5jcHAKQEAgLTEzMCw3ICsxMzAsNyBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlk
VmlydHVhbFBhdGgoU3RyaW5nVmlldyB2aXJ0dWFsUGF0aCkKICAgICBpZiAodmlydHVhbFBhdGgu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHZpcnR1YWxQYXRoWzBd
ID09ICcvJykKLSAgICAgICAgcmV0dXJuIGlzVmFsaWRSZWxhdGl2ZVZpcnR1YWxQYXRoKHZpcnR1
YWxQYXRoLnN1YnN0cmluZygxKSk7CisgICAgICAgIHJldHVybiB2aXJ0dWFsUGF0aC5sZW5ndGgo
KSA9PSAxIHx8IGlzVmFsaWRSZWxhdGl2ZVZpcnR1YWxQYXRoKHZpcnR1YWxQYXRoLnN1YnN0cmlu
ZygxKSk7CiAgICAgcmV0dXJuIGlzVmFsaWRSZWxhdGl2ZVZpcnR1YWxQYXRoKHZpcnR1YWxQYXRo
KTsKIH0KIApAQCAtMTY0LDcgKzE2NCw3IEBAIHN0YXRpYyBTdHJpbmcgcmVzb2x2ZVJlbGF0aXZl
VmlydHVhbFBhdGgoY29uc3QgU3RyaW5nJiBiYXNlVmlydHVhbFBhdGgsIFN0cmluZ1ZpCiB7CiAg
ICAgQVNTRVJUKGJhc2VWaXJ0dWFsUGF0aFswXSA9PSAnLycpOwogICAgIGlmIChyZWxhdGl2ZVZp
cnR1YWxQYXRoWzBdID09ICcvJykKLSAgICAgICAgcmV0dXJuIHJlc29sdmVSZWxhdGl2ZVZpcnR1
YWxQYXRoKEFTQ0lJTGl0ZXJhbCgiLyIpLCByZWxhdGl2ZVZpcnR1YWxQYXRoLnN1YnN0cmluZygx
KSk7CisgICAgICAgIHJldHVybiByZWxhdGl2ZVZpcnR1YWxQYXRoLmxlbmd0aCgpID09IDEgPyBy
ZWxhdGl2ZVZpcnR1YWxQYXRoLnRvU3RyaW5nKCkgOiByZXNvbHZlUmVsYXRpdmVWaXJ0dWFsUGF0
aChBU0NJSUxpdGVyYWwoIi8iKSwgcmVsYXRpdmVWaXJ0dWFsUGF0aC5zdWJzdHJpbmcoMSkpOwog
CiAgICAgYXV0byB2aXJ0dWFsUGF0aFNlZ21lbnRzID0gYmFzZVZpcnR1YWxQYXRoLnNwbGl0KCcv
Jyk7CiAgICAgYXV0byByZWxhdGl2ZVBhdGhTZWdtZW50cyA9IHJlbGF0aXZlVmlydHVhbFBhdGgu
c3BsaXQoJy8nKTsKQEAgLTI2MSwyMiArMjYxLDkgQEAgdm9pZCBET01GaWxlU3lzdGVtOjpnZXRQ
YXJlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgRmlsZVN5c3RlbUVudHJ5Jgog
ICAgIH0pOwogfQogCi1zdGF0aWMgRXhjZXB0aW9uT3I8U3RyaW5nPiB2YWxpZGF0ZVBhdGhJc0Zp
bGUoY29uc3QgU3RyaW5nJiBmdWxsUGF0aCwgU3RyaW5nJiYgdmlydHVhbFBhdGgpCi17Ci0gICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBGaWxlTWV0YWRhdGEgbWV0YWRhdGE7Ci0g
ICAgaWYgKCFnZXRGaWxlTWV0YWRhdGEoZnVsbFBhdGgsIG1ldGFkYXRhLCBTaG91bGRGb2xsb3dT
eW1ib2xpY0xpbmtzOjpObykpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVy
cm9yLCBBU0NJSUxpdGVyYWwoIkZpbGUgZG9lcyBub3QgZXhpc3QiKSB9OwotCi0gICAgaWYgKG1l
dGFkYXRhLnR5cGUgIT0gRmlsZU1ldGFkYXRhOjpUeXBlRmlsZSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFR5cGVNaXNtYXRjaEVycm9yLCBBU0NJSUxpdGVyYWwoIkVudHJ5IGF0IHBhdGgg
aXMgbm90IGEgZmlsZSIpIH07Ci0KLSAgICByZXR1cm4gV1RGTW92ZSh2aXJ0dWFsUGF0aCk7Ci19
Ci0KIC8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vZW50cmllcy1hcGkvI2RvbS1maWxlc3lzdGVt
ZGlyZWN0b3J5ZW50cnktZ2V0ZmlsZQotdm9pZCBET01GaWxlU3lzdGVtOjpnZXRGaWxlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeSYgZGly
ZWN0b3J5LCBjb25zdCBTdHJpbmcmIHZpcnR1YWxQYXRoLCBjb25zdCBGaWxlU3lzdGVtRGlyZWN0
b3J5RW50cnk6OkZsYWdzJiBmbGFncywgR2V0RmlsZUNhbGxiYWNrJiYgY29tcGxldGlvbkNhbGxi
YWNrKQorLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9lbnRyaWVzLWFwaS8jZG9tLWZpbGVzeXN0
ZW1kaXJlY3RvcnllbnRyeS1nZXRkaXJlY3RvcnkKK3ZvaWQgRE9NRmlsZVN5c3RlbTo6Z2V0RW50
cnkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgRmlsZVN5c3RlbURpcmVjdG9yeUVu
dHJ5JiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgdmlydHVhbFBhdGgsIGNvbnN0IEZpbGVTeXN0
ZW1EaXJlY3RvcnlFbnRyeTo6RmxhZ3MmIGZsYWdzLCBHZXRFbnRyeUNhbGxiYWNrJiYgY29tcGxl
dGlvbkNhbGxiYWNrKQogewogICAgIEFTU0VSVCgmZGlyZWN0b3J5LmZpbGVzeXN0ZW0oKSA9PSB0
aGlzKTsKIApAQCAtMjk3LDEzICsyODQsMjggQEAgdm9pZCBET01GaWxlU3lzdGVtOjpnZXRGaWxl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEZpbGVTeXN0ZW1EaXJlY3RvcnkKICAg
ICBTdHJpbmcgcmVzb2x2ZWRWaXJ0dWFsUGF0aCA9IHJlc29sdmVSZWxhdGl2ZVZpcnR1YWxQYXRo
KGRpcmVjdG9yeS52aXJ0dWFsUGF0aCgpLCB2aXJ0dWFsUGF0aCk7CiAgICAgQVNTRVJUKHJlc29s
dmVkVmlydHVhbFBhdGhbMF0gPT0gJy8nKTsKICAgICBTdHJpbmcgZnVsbFBhdGggPSBldmFsdWF0
ZVBhdGgocmVzb2x2ZWRWaXJ0dWFsUGF0aCk7CisgICAgaWYgKGZ1bGxQYXRoID09IG1fcm9vdFBh
dGgpIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgY29udGV4dCA9IG1ha2VSZWYo
Y29udGV4dCksIGNvbXBsZXRpb25DYWxsYmFjayA9IFdURk1vdmUoY29tcGxldGlvbkNhbGxiYWNr
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhSZWY8RmlsZVN5
c3RlbUVudHJ5PiB7IHJvb3QoY29udGV4dCkgfSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm47CisgICAgfQorCiAgICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFt0aGlzLCBjb250ZXh0ID0g
bWFrZVJlZihjb250ZXh0KSwgZnVsbFBhdGggPSBjcm9zc1RocmVhZENvcHkoZnVsbFBhdGgpLCBy
ZXNvbHZlZFZpcnR1YWxQYXRoID0gY3Jvc3NUaHJlYWRDb3B5KHJlc29sdmVkVmlydHVhbFBhdGgp
LCBjb21wbGV0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGNvbXBsZXRpb25DYWxsYmFjayldKCkgbXV0
YWJsZSB7Ci0gICAgICAgIGF1dG8gdmFsaWRhdGVkVmlydHVhbFBhdGggPSB2YWxpZGF0ZVBhdGhJ
c0ZpbGUoZnVsbFBhdGgsIFdURk1vdmUocmVzb2x2ZWRWaXJ0dWFsUGF0aCkpOwotICAgICAgICBj
YWxsT25NYWluVGhyZWFkKFt0aGlzLCBjb250ZXh0ID0gV1RGTW92ZShjb250ZXh0KSwgdmFsaWRh
dGVkVmlydHVhbFBhdGggPSBjcm9zc1RocmVhZENvcHkodmFsaWRhdGVkVmlydHVhbFBhdGgpLCBj
b21wbGV0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGNvbXBsZXRpb25DYWxsYmFjayldKCkgbXV0YWJs
ZSB7Ci0gICAgICAgICAgICBpZiAodmFsaWRhdGVkVmlydHVhbFBhdGguaGFzRXhjZXB0aW9uKCkp
Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKHZhbGlkYXRlZFZpcnR1YWxQYXRo
LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
Y29tcGxldGlvbkNhbGxiYWNrKEZpbGVTeXN0ZW1GaWxlRW50cnk6OmNyZWF0ZShjb250ZXh0LCAq
dGhpcywgdmFsaWRhdGVkVmlydHVhbFBhdGgucmVsZWFzZVJldHVyblZhbHVlKCkpKTsKKyAgICAg
ICAgRmlsZU1ldGFkYXRhIG1ldGFkYXRhOworICAgICAgICBnZXRGaWxlTWV0YWRhdGEoZnVsbFBh
dGgsIG1ldGFkYXRhLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObyk7CisgICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoW3RoaXMsIGNvbnRleHQgPSBXVEZNb3ZlKGNvbnRleHQpLCByZXNvbHZl
ZFZpcnR1YWxQYXRoID0gY3Jvc3NUaHJlYWRDb3B5KHJlc29sdmVkVmlydHVhbFBhdGgpLCBlbnRy
eVR5cGUgPSBtZXRhZGF0YS50eXBlLCBjb21wbGV0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25DYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5VHlw
ZSkgeworICAgICAgICAgICAgY2FzZSBGaWxlTWV0YWRhdGE6OlR5cGVEaXJlY3Rvcnk6CisgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKFJlZjxGaWxlU3lzdGVtRW50cnk+IHsgRmls
ZVN5c3RlbURpcmVjdG9yeUVudHJ5OjpjcmVhdGUoY29udGV4dCwgKnRoaXMsIHJlc29sdmVkVmly
dHVhbFBhdGgpIH0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBG
aWxlTWV0YWRhdGE6OlR5cGVGaWxlOgorICAgICAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFj
ayhSZWY8RmlsZVN5c3RlbUVudHJ5PiB7IEZpbGVTeXN0ZW1GaWxlRW50cnk6OmNyZWF0ZShjb250
ZXh0LCAqdGhpcywgcmVzb2x2ZWRWaXJ0dWFsUGF0aCkgfSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGNvbXBsZXRpb25DYWxs
YmFjayhFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBmaW5k
IGVudHJ5IGF0IGdpdmVuIHBhdGgiKSB9KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRE9NRmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9lbnRyaWVzYXBpL0RPTUZpbGVTeXN0ZW0uaAppbmRleCBhODMzOThlOTUxODVkMzIw
MTVlODlmYzU0ZmMzYzg0Y2I1ZWJmMzAyLi4zMjRmMTU3Mzg0ODZmZDVhZWU4OWIxM2U1NDU2NWZm
ODBiZmRkZmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkv
RE9NRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9E
T01GaWxlU3lzdGVtLmgKQEAgLTU4LDggKzU4LDggQEAgcHVibGljOgogICAgIHVzaW5nIEdldFBh
cmVudENhbGxiYWNrID0gV1RGOjpGdW5jdGlvbjx2b2lkKEV4Y2VwdGlvbk9yPFJlZjxGaWxlU3lz
dGVtRGlyZWN0b3J5RW50cnk+PiYmKT47CiAgICAgdm9pZCBnZXRQYXJlbnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIEZpbGVTeXN0ZW1FbnRyeSYsIEdldFBhcmVudENhbGxiYWNrJiYpOwogCi0g
ICAgdXNpbmcgR2V0RmlsZUNhbGxiYWNrID0gV1RGOjpGdW5jdGlvbjx2b2lkKEV4Y2VwdGlvbk9y
PFJlZjxGaWxlU3lzdGVtRmlsZUVudHJ5Pj4mJik+OwotICAgIHZvaWQgZ2V0RmlsZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5JiwgY29uc3QgU3RyaW5n
JiB2aXJ0dWFsUGF0aCwgY29uc3QgRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5OjpGbGFncyYsIEdl
dEZpbGVDYWxsYmFjayYmKTsKKyAgICB1c2luZyBHZXRFbnRyeUNhbGxiYWNrID0gV1RGOjpGdW5j
dGlvbjx2b2lkKEV4Y2VwdGlvbk9yPFJlZjxGaWxlU3lzdGVtRW50cnk+PiYmKT47CisgICAgdm9p
ZCBnZXRFbnRyeShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRmlsZVN5c3RlbURpcmVjdG9yeUVu
dHJ5JiwgY29uc3QgU3RyaW5nJiB2aXJ0dWFsUGF0aCwgY29uc3QgRmlsZVN5c3RlbURpcmVjdG9y
eUVudHJ5OjpGbGFncyYsIEdldEVudHJ5Q2FsbGJhY2smJik7CiAKIHByaXZhdGU6CiAgICAgZXhw
bGljaXQgRE9NRmlsZVN5c3RlbShSZWY8RmlsZT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnku
Y3BwCmluZGV4IDFjMjgxMTY3NjlkNWU1ZjVkMWIzYmQ4MDQyM2U0YjA5NWE3MWNiZDUuLjU2NTZh
NDExYmEwNzEwZTMzNGU4NzhiZjViODMxZGM4ODBiNTllYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5
RW50cnkuY3BwCkBAIC00NiwyNiArNDYsMzYgQEAgUmVmPEZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFk
ZXI+IEZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeTo6Y3JlYXRlUmVhZGVyKFNjcmlwdEV4ZWMKICAg
ICByZXR1cm4gRmlsZVN5c3RlbURpcmVjdG9yeVJlYWRlcjo6Y3JlYXRlKGNvbnRleHQsICp0aGlz
KTsKIH0KIAotdm9pZCBGaWxlU3lzdGVtRGlyZWN0b3J5RW50cnk6OmdldEZpbGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGbGFncyYg
ZmxhZ3MsIFJlZlB0cjxGaWxlU3lzdGVtRW50cnlDYWxsYmFjaz4mJiBzdWNjZXNzQ2FsbGJhY2ss
IFJlZlB0cjxFcnJvckNhbGxiYWNrPiYmIGVycm9yQ2FsbGJhY2spCit2b2lkIEZpbGVTeXN0ZW1E
aXJlY3RvcnlFbnRyeTo6Z2V0RW50cnkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGbGFncyYgZmxhZ3MsIEVudHJ5TWF0Y2hpbmdGdW5j
dGlvbiYmIG1hdGNoZXMsIFJlZlB0cjxGaWxlU3lzdGVtRW50cnlDYWxsYmFjaz4mJiBzdWNjZXNz
Q2FsbGJhY2ssIFJlZlB0cjxFcnJvckNhbGxiYWNrPiYmIGVycm9yQ2FsbGJhY2spCiB7CiAgICAg
aWYgKCFzdWNjZXNzQ2FsbGJhY2sgJiYgIWVycm9yQ2FsbGJhY2spCiAgICAgICAgIHJldHVybjsK
IAotICAgIGZpbGVzeXN0ZW0oKS5nZXRGaWxlKGNvbnRleHQsICp0aGlzLCBwYXRoLCBmbGFncywg
W3RoaXMsIHBlbmRpbmdBY3Rpdml0eSA9IG1ha2VQZW5kaW5nQWN0aXZpdHkoKnRoaXMpLCBzdWNj
ZXNzQ2FsbGJhY2sgPSBXVEZNb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIGVycm9yQ2FsbGJhY2sgPSBX
VEZNb3ZlKGVycm9yQ2FsbGJhY2spXShhdXRvJiYgcmVzdWx0KSB7CisgICAgZmlsZXN5c3RlbSgp
LmdldEVudHJ5KGNvbnRleHQsICp0aGlzLCBwYXRoLCBmbGFncywgW3RoaXMsIHBlbmRpbmdBY3Rp
dml0eSA9IG1ha2VQZW5kaW5nQWN0aXZpdHkoKnRoaXMpLCBtYXRjaGVzID0gV1RGTW92ZShtYXRj
aGVzKSwgc3VjY2Vzc0NhbGxiYWNrID0gV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBlcnJvckNh
bGxiYWNrID0gV1RGTW92ZShlcnJvckNhbGxiYWNrKV0oYXV0byYmIHJlc3VsdCkgewogICAgICAg
ICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBpZiAoZXJyb3JDYWxs
YmFjaykKICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChET01FeGNl
cHRpb246OmNyZWF0ZShyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgYXV0byBlbnRyeSA9IHJlc3VsdC5yZWxlYXNlUmV0
dXJuVmFsdWUoKTsKKyAgICAgICAgaWYgKCFtYXRjaGVzKGVudHJ5KSkgeworICAgICAgICAgICAg
aWYgKGVycm9yQ2FsbGJhY2spCisgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjay0+aGFuZGxl
RXZlbnQoRE9NRXhjZXB0aW9uOjpjcmVhdGUoRXhjZXB0aW9uIHsgVHlwZU1pc21hdGNoRXJyb3Is
IEFTQ0lJTGl0ZXJhbCgiRW50cnkgYXQgZ2l2ZW4gcGF0aCBkb2VzIG5vdCBtYXRjaCBleHBlY3Rl
ZCB0eXBlIikgfSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGlm
IChzdWNjZXNzQ2FsbGJhY2spCi0gICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2
ZW50KHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CisgICAgICAgICAgICBzdWNjZXNzQ2Fs
bGJhY2stPmhhbmRsZUV2ZW50KFdURk1vdmUoZW50cnkpKTsKICAgICB9KTsKIH0KIAotdm9pZCBG
aWxlU3lzdGVtRGlyZWN0b3J5RW50cnk6OmdldERpcmVjdG9yeShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcmLCBjb25zdCBGbGFncyYsIFJlZlB0cjxGaWxlU3lz
dGVtRW50cnlDYWxsYmFjaz4mJiwgUmVmUHRyPEVycm9yQ2FsbGJhY2s+JiYgZXJyb3JDYWxsYmFj
aykKK3ZvaWQgRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5OjpnZXRGaWxlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRmxhZ3MmIGZsYWdz
LCBSZWZQdHI8RmlsZVN5c3RlbUVudHJ5Q2FsbGJhY2s+JiYgc3VjY2Vzc0NhbGxiYWNrLCBSZWZQ
dHI8RXJyb3JDYWxsYmFjaz4mJiBlcnJvckNhbGxiYWNrKQoreworICAgIGdldEVudHJ5KGNvbnRl
eHQsIHBhdGgsIGZsYWdzLCBbXShhdXRvJiBlbnRyeSkgeyByZXR1cm4gZW50cnkuaXNGaWxlKCk7
IH0sIFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShlcnJvckNhbGxiYWNrKSk7Cit9
CisKK3ZvaWQgRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5OjpnZXREaXJlY3RvcnkoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGbGFncyYg
ZmxhZ3MsIFJlZlB0cjxGaWxlU3lzdGVtRW50cnlDYWxsYmFjaz4mJiBzdWNjZXNzQ2FsbGJhY2ss
IFJlZlB0cjxFcnJvckNhbGxiYWNrPiYmIGVycm9yQ2FsbGJhY2spCiB7Ci0gICAgaWYgKGVycm9y
Q2FsbGJhY2spCi0gICAgICAgIGVycm9yQ2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2soY29udGV4
dCwgRE9NRXhjZXB0aW9uOjpjcmVhdGUoTm90U3VwcG9ydGVkRXJyb3IpKTsKKyAgICBnZXRFbnRy
eShjb250ZXh0LCBwYXRoLCBmbGFncywgW10oYXV0byYgZW50cnkpIHsgcmV0dXJuIGVudHJ5Lmlz
RGlyZWN0b3J5KCk7IH0sIFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShlcnJvckNh
bGxiYWNrKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnkuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50
cnkuaAppbmRleCAzY2RmZTliOGUxN2RkOTM5MDZiNWVlNzA3ZTdiZTUyYTdiODU3ZmZkLi5lNGVh
MzNmMzcwNGU4NDFlOWQwZWU2NjE4MDE0ZTM2ZGUyNzZlZjcyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1EaXJlY3RvcnlF
bnRyeS5oCkBAIC01Myw2ICs1Myw4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBib29sIGlz
RGlyZWN0b3J5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHVzaW5nIEVudHJ5
TWF0Y2hpbmdGdW5jdGlvbiA9IFdURjo6RnVuY3Rpb248Ym9vbChjb25zdCBGaWxlU3lzdGVtRW50
cnkmKT47CisgICAgdm9pZCBnZXRFbnRyeShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBGbGFncyYgb3B0aW9ucywgRW50cnlNYXRjaGluZ0Z1bmN0aW9u
JiYsIFJlZlB0cjxGaWxlU3lzdGVtRW50cnlDYWxsYmFjaz4mJiwgUmVmUHRyPEVycm9yQ2FsbGJh
Y2s+JiYpOwogCiAgICAgRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmLCBET01GaWxlU3lzdGVtJiwgY29uc3QgU3RyaW5nJiB2aXJ0dWFsUGF0aCk7CiB9Owpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDY4ZGFhN2UyNzUwMmQ3YTk2NTI1YjdhZTIxZDVlMzBmYjU2ZmRmNDMuLjc0MDJhZTUz
MTk3MmM2ODgwOTJhYWIzZDRkMTA4MWMzMTcwZDAyNGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxOSBAQAog
MjAxNy0wOS0wMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIElt
cGxlbWVudCBGaWxlU3lzdGVtRGlyZWN0b3J5RW50cnkuZ2V0RGlyZWN0b3J5KCkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjE2OAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMzQxODc3ODc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGxheW91dCB0ZXN0IGNvdmVyYWdlLgorCisgICAgICAgICog
ZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGF0cmFuc2Zlci1pdGVtcy1kcm9wLWdldERpcmVjdG9yeS1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9kYXRhdHJh
bnNmZXItaXRlbXMtZHJvcC1nZXREaXJlY3RvcnkuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnM6CisKKzIwMTctMDktMDEgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBJbXBsZW1lbnQgRmlsZVN5c3RlbURpcmVjdG9y
eUVudHJ5LmdldEZpbGUoKQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc2MTY3CiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNDE4Nzc3NT4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhdHJhbnNmZXItaXRlbXMt
ZHJvcC1nZXREaXJlY3RvcnktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0
ZWJvYXJkL2RhdGF0cmFuc2Zlci1pdGVtcy1kcm9wLWdldERpcmVjdG9yeS1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTIxZWZhZTE3Y2VmYjc0NTk1NGQzYzM0MjBmNGE3ZGYwMjIxZDE3ZAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhdHJhbnNm
ZXItaXRlbXMtZHJvcC1nZXREaXJlY3RvcnktZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNTAgQEAK
K0Jhc2ljIHRlc3QgY292ZXJhZ2UgZm9yIGZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeS5nZXREaXJl
Y3RvcnkoKQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBkYXRhVHJhbnNm
ZXIuaXRlbXMubGVuZ3RoIGlzIDEKKyogRXJyb3IgY2FzZTogY3JlYXRlIGZsYWcgaXMgc2V0IHRv
IHRydWUKK1BBU1MgZXgubmFtZSBpcyAiU2VjdXJpdHlFcnJvciIKKyogUmVndWxhciBjYXNlOiBn
ZXREaXJlY3RvcnkoJ3N1YmZvbGRlcjEnKQorUEFTUyBzdWJmb2xkZXIxRW50cnkubmFtZSBpcyAi
c3ViZm9sZGVyMSIKK1BBU1Mgc3ViZm9sZGVyMUVudHJ5LmZ1bGxQYXRoIGlzICIvdGVzdEZpbGVz
L3N1YmZvbGRlcjEiCitQQVNTIHN1YmZvbGRlcjFFbnRyeS5pc0RpcmVjdG9yeSBpcyB0cnVlCisq
IEVycm9yIGNhc2U6IGNhbGxpbmcgZ2V0RGlyZWN0b3J5KCkgd2l0aCBwYXRoIHRvIGZpbGUKK1BB
U1MgZXgubmFtZSBpcyAiVHlwZU1pc21hdGNoRXJyb3IiCisqIEVycm9yIGNhc2U6IGNhbGxpbmcg
Z2V0RGlyZWN0b3J5KCkgd2l0aCBwYXRoIGNvbnRhaW5pbmcgYmFja3NsYXNoCitQQVNTIGV4Lm5h
bWUgaXMgIlR5cGVNaXNtYXRjaEVycm9yIgorKiBFcnJvciBjYXNlOiBjYWxsaW5nIGdldERpcmVj
dG9yeSgpIHdpdGggcGF0aCB3aGljaCBkb2VzIG5vdCBleGlzdAorUEFTUyBleC5uYW1lIGlzICJO
b3RGb3VuZEVycm9yIgorKiBFcnJvciBjYXNlOiBjYWxsaW5nIGdldERpcmVjdG9yeSgpIHdpdGgg
cGF0aCBjb250YWluaW5nIGEgTlVMIGNoYXJhY3RlcgorUEFTUyBleC5uYW1lIGlzICJUeXBlTWlz
bWF0Y2hFcnJvciIKKyogUmVndWxhciBjYXNlOiBjYWxsaW5nIGdldERpcmVjdG9yeSgpIHdpdGgg
cGF0aCB0byByb290CitQQVNTIHJvb3RFbnRyeS5uYW1lIGlzICIiCitQQVNTIHJvb3RFbnRyeS5m
dWxsUGF0aCBpcyAiLyIKK1BBU1Mgcm9vdEVudHJ5LmlzRGlyZWN0b3J5IGlzIHRydWUKKyogUmVn
dWxhciBjYXNlOiBjYWxsaW5nIGdldERpcmVjdG9yeSgpIHdpdGggYWJzb2x1dGUgcGF0aAorUEFT
UyBzdWJmb2xkZXIyYUVudHJ5Lm5hbWUgaXMgInN1YmZvbGRlcjJhIgorUEFTUyBzdWJmb2xkZXIy
YUVudHJ5LmZ1bGxQYXRoIGlzICIvdGVzdEZpbGVzL3N1YmZvbGRlcjIvc3ViZm9sZGVyMmEiCitQ
QVNTIHN1YmZvbGRlcjJhRW50cnkuaXNEaXJlY3RvcnkgaXMgdHJ1ZQorKiBFZGdlIGNhc2U6IGNh
bGxpbmcgZ2V0RGlyZWN0b3J5KCkgd2l0aCByZWxhdGl2ZSBwYXRoIGNvbnRhaW5pbmcgJy4nIGFu
ZCAnLi4nCitQQVNTIHN1YmZvbGRlcjJhRW50cnkubmFtZSBpcyAic3ViZm9sZGVyMmEiCitQQVNT
IHN1YmZvbGRlcjJhRW50cnkuZnVsbFBhdGggaXMgIi90ZXN0RmlsZXMvc3ViZm9sZGVyMi9zdWJm
b2xkZXIyYSIKK1BBU1Mgc3ViZm9sZGVyMmFFbnRyeS5pc0RpcmVjdG9yeSBpcyB0cnVlCisqIEVk
Z2UgY2FzZTogY2FsbGluZyBnZXREaXJlY3RvcnkoKSB3aXRoIHJlbGF0aXZlIHBhdGggY29udGFp
bmluZyB0b28gbWFueSAnLi4nCitQQVNTIHN1YmZvbGRlcjFFbnRyeS5uYW1lIGlzICJzdWJmb2xk
ZXIxIgorUEFTUyBzdWJmb2xkZXIxRW50cnkuZnVsbFBhdGggaXMgIi90ZXN0RmlsZXMvc3ViZm9s
ZGVyMSIKK1BBU1Mgc3ViZm9sZGVyMUVudHJ5LmlzRGlyZWN0b3J5IGlzIHRydWUKKyogRWRnZSBj
YXNlOiBjYWxsaW5nIGdldERpcmVjdG9yeSgpIHdpdGggYWJzb2x1dGUgcGF0aCBjb250YWluaW5n
ICcuLicKK1BBU1Mgc3ViZm9sZGVyMUVudHJ5Lm5hbWUgaXMgInN1YmZvbGRlcjEiCitQQVNTIHN1
YmZvbGRlcjFFbnRyeS5mdWxsUGF0aCBpcyAiL3Rlc3RGaWxlcy9zdWJmb2xkZXIxIgorUEFTUyBz
dWJmb2xkZXIxRW50cnkuaXNEaXJlY3RvcnkgaXMgdHJ1ZQorKiBFZGdlIGNhc2U6IGNhbGxpbmcg
Z2V0RGlyZWN0b3J5KCkgd2l0aCBhYnNvbHV0ZSBwYXRoIGNvbnRhaW5pbmcgdG9vIG1hbnkgJy4u
JworUEFTUyBzdWJmb2xkZXIxRW50cnkubmFtZSBpcyAic3ViZm9sZGVyMSIKK1BBU1Mgc3ViZm9s
ZGVyMUVudHJ5LmZ1bGxQYXRoIGlzICIvdGVzdEZpbGVzL3N1YmZvbGRlcjEiCitQQVNTIHN1YmZv
bGRlcjFFbnRyeS5pc0RpcmVjdG9yeSBpcyB0cnVlCisqIEVycm9yIGNhc2U6IGNhbGxpbmcgZ2V0
RGlyZWN0b3J5KCkgd2l0aCBlbXB0eSBwYXRoCitQQVNTIGV4Lm5hbWUgaXMgIlR5cGVNaXNtYXRj
aEVycm9yIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhdHJhbnNm
ZXItaXRlbXMtZHJvcC1nZXREaXJlY3RvcnkuaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFz
dGVib2FyZC9kYXRhdHJhbnNmZXItaXRlbXMtZHJvcC1nZXREaXJlY3RvcnkuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mZGU3ZDBjY2E0Zjk2OGE1ZDdmNWE2NjdiMGNiYjcyZjVmNmE4OTZmCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGF0cmFuc2Zlci1pdGVt
cy1kcm9wLWdldERpcmVjdG9yeS5odG1sCkBAIC0wLDAgKzEsMTk3IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2VkaXRpbmcuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkcm9wem9uZSIgc3R5bGU9IndpZHRoOiAyMDBweDsgaGVp
Z2h0OiAyMDBweDsgYmFja2dyb3VuZC1jb2xvcjogZ3JleTsiPjwvZGl2PgorPHNjcmlwdD4KK2Rl
c2NyaXB0aW9uKCJCYXNpYyB0ZXN0IGNvdmVyYWdlIGZvciBmaWxlU3lzdGVtRGlyZWN0b3J5RW50
cnkuZ2V0RGlyZWN0b3J5KCkiKTsKK2pzVGVzdElzQXN5bmMgPSB0cnVlOworCitmdW5jdGlvbiBn
ZXREaXJlY3RvcnlBc1Byb21pc2UoZGlyZWN0b3J5LCBwYXRoLCBmbGFncykKK3sKKyAgICByZXR1
cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4geworICAgICAgICBkaXJlY3Rvcnku
Z2V0RGlyZWN0b3J5KHBhdGgsIGZsYWdzLCByZXNvbHZlLCByZWplY3QpOworICAgIH0pOworfQor
CitmdW5jdGlvbiB0ZXN0MSgpIHsKKyAgICBkZWJ1ZygiKiBFcnJvciBjYXNlOiBjcmVhdGUgZmxh
ZyBpcyBzZXQgdG8gdHJ1ZSIpOworICAgIHJldHVybiBnZXREaXJlY3RvcnlBc1Byb21pc2UoZGly
ZWN0b3J5RW50cnksICJzdWJmb2xkZXIxIiwgeyBjcmVhdGU6IHRydWUgfSkudGhlbihlbnRyeSA9
PiB7CisgICAgICAgIHRlc3RGYWlsZWQoIlNob3VsZCBmYWlsIHdoZW4gY3JlYXRlIGZsYWcgaXMg
dHJ1ZSIpOworICAgIH0sIGUgPT4geworICAgICAgICBleCA9IGU7CisgICAgICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygiZXgubmFtZSIsICJTZWN1cml0eUVycm9yIik7CisgICAgfSk7Cit9CisK
K2Z1bmN0aW9uIHRlc3QyKCkgeworICAgIGRlYnVnKCIqIFJlZ3VsYXIgY2FzZTogZ2V0RGlyZWN0
b3J5KCdzdWJmb2xkZXIxJykiKTsKKyAgICByZXR1cm4gZ2V0RGlyZWN0b3J5QXNQcm9taXNlKGRp
cmVjdG9yeUVudHJ5LCAic3ViZm9sZGVyMSIsIHt9KS50aGVuKGVudHJ5ID0+IHsKKyAgICAgICAg
c3ViZm9sZGVyMUVudHJ5ID0gZW50cnk7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygi
c3ViZm9sZGVyMUVudHJ5Lm5hbWUiLCAic3ViZm9sZGVyMSIpOworICAgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoInN1YmZvbGRlcjFFbnRyeS5mdWxsUGF0aCIsICIvdGVzdEZpbGVzL3N1YmZv
bGRlcjEiKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJzdWJmb2xkZXIxRW50cnkuaXNEaXJlY3Rv
cnkiKTsKKyAgICB9LCBlID0+IHsKKyAgICAgICAgdGVzdEZhaWxlZCgiZ2V0RGlyZWN0b3J5KCdz
dWJmb2xkZXIxJykgc2hvdWxkIHN1Y2NlZWQiKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gdGVz
dDMoKSB7CisgICAgZGVidWcoIiogRXJyb3IgY2FzZTogY2FsbGluZyBnZXREaXJlY3RvcnkoKSB3
aXRoIHBhdGggdG8gZmlsZSIpOworICAgIHJldHVybiBnZXREaXJlY3RvcnlBc1Byb21pc2UoZGly
ZWN0b3J5RW50cnksICJmaWxlMS50eHQiLCB7fSkudGhlbihlbnRyeSA9PiB7CisgICAgICAgIHRl
c3RGYWlsZWQoIlNob3VsZCBmYWlsIHdoZW4gcGF0aCBwb2ludHMgdG8gYSBmaWxlIik7CisgICAg
fSwgZSA9PiB7CisgICAgICAgIGV4ID0gZTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCJleC5uYW1lIiwgIlR5cGVNaXNtYXRjaEVycm9yIik7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9u
IHRlc3Q0KCkgeworICAgIGRlYnVnKCIqIEVycm9yIGNhc2U6IGNhbGxpbmcgZ2V0RGlyZWN0b3J5
KCkgd2l0aCBwYXRoIGNvbnRhaW5pbmcgYmFja3NsYXNoIik7CisgICAgcmV0dXJuIGdldERpcmVj
dG9yeUFzUHJvbWlzZShkaXJlY3RvcnlFbnRyeSwgIlxcc3ViZm9sZGVyMSIsIHt9KS50aGVuKGVu
dHJ5ID0+IHsKKyAgICAgICAgdGVzdEZhaWxlZCgiU2hvdWxkIGZhaWwgd2hlbiBwYXRoIGlzIGlu
dmFsaWQiKTsKKyAgICB9LCBlID0+IHsKKyAgICAgICAgZXggPSBlOworICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoImV4Lm5hbWUiLCAiVHlwZU1pc21hdGNoRXJyb3IiKTsKKyAgICB9KTsK
K30KKworZnVuY3Rpb24gdGVzdDUoKSB7CisgICAgZGVidWcoIiogRXJyb3IgY2FzZTogY2FsbGlu
ZyBnZXREaXJlY3RvcnkoKSB3aXRoIHBhdGggd2hpY2ggZG9lcyBub3QgZXhpc3QiKTsKKyAgICBy
ZXR1cm4gZ2V0RGlyZWN0b3J5QXNQcm9taXNlKGRpcmVjdG9yeUVudHJ5LCAiZG9lc25vdGV4aXN0
Iiwge30pLnRoZW4oZW50cnkgPT4geworICAgICAgICB0ZXN0RmFpbGVkKCJTaG91bGQgZmFpbCB3
aGVuIHBhdGggZG9lcyBub3QgZXhpc3QiKTsKKyAgICB9LCBlID0+IHsKKyAgICAgICAgZXggPSBl
OworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImV4Lm5hbWUiLCAiTm90Rm91bmRFcnJv
ciIpOworICAgIH0pOworfQorCitmdW5jdGlvbiB0ZXN0NigpIHsKKyAgICBkZWJ1ZygiKiBFcnJv
ciBjYXNlOiBjYWxsaW5nIGdldERpcmVjdG9yeSgpIHdpdGggcGF0aCBjb250YWluaW5nIGEgTlVM
IGNoYXJhY3RlciIpOworICAgIHJldHVybiBnZXREaXJlY3RvcnlBc1Byb21pc2UoZGlyZWN0b3J5
RW50cnksICJzdWJmb2xkZXIxXDAiLCB7fSkudGhlbihlbnRyeSA9PiB7CisgICAgICAgIHRlc3RG
YWlsZWQoIlNob3VsZCBmYWlsIHdoZW4gcGF0aCBpcyBpbnZhbGlkIik7CisgICAgfSwgZSA9PiB7
CisgICAgICAgIGV4ID0gZTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJleC5uYW1l
IiwgIlR5cGVNaXNtYXRjaEVycm9yIik7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHRlc3Q3KCkg
eworICAgIGRlYnVnKCIqIFJlZ3VsYXIgY2FzZTogY2FsbGluZyBnZXREaXJlY3RvcnkoKSB3aXRo
IHBhdGggdG8gcm9vdCIpOworICAgIHJldHVybiBnZXREaXJlY3RvcnlBc1Byb21pc2UoZGlyZWN0
b3J5RW50cnksICIvIiwge30pLnRoZW4oZW50cnkgPT4geworICAgICAgICByb290RW50cnkgPSBl
bnRyeTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyb290RW50cnkubmFtZSIsICIi
KTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyb290RW50cnkuZnVsbFBhdGgiLCAi
LyIpOworICAgICAgICBzaG91bGRCZVRydWUoInJvb3RFbnRyeS5pc0RpcmVjdG9yeSIpOworICAg
IH0sIGUgPT4geworICAgICAgICB0ZXN0RmFpbGVkKCJnZXREaXJlY3RvcnkoJy8nKSBzaG91bGQg
c3VjY2VlZCIpOworICAgIH0pOworfQorCitmdW5jdGlvbiB0ZXN0OCgpIHsKKyAgICBkZWJ1Zygi
KiBSZWd1bGFyIGNhc2U6IGNhbGxpbmcgZ2V0RGlyZWN0b3J5KCkgd2l0aCBhYnNvbHV0ZSBwYXRo
Iik7CisgICAgcmV0dXJuIGdldERpcmVjdG9yeUFzUHJvbWlzZShkaXJlY3RvcnlFbnRyeSwgIi90
ZXN0RmlsZXMvc3ViZm9sZGVyMi9zdWJmb2xkZXIyYSIsIHt9KS50aGVuKGVudHJ5ID0+IHsKKyAg
ICAgICAgc3ViZm9sZGVyMmFFbnRyeSA9IGVudHJ5OworICAgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoInN1YmZvbGRlcjJhRW50cnkubmFtZSIsICJzdWJmb2xkZXIyYSIpOworICAgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoInN1YmZvbGRlcjJhRW50cnkuZnVsbFBhdGgiLCAiL3Rlc3RG
aWxlcy9zdWJmb2xkZXIyL3N1YmZvbGRlcjJhIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgic3Vi
Zm9sZGVyMmFFbnRyeS5pc0RpcmVjdG9yeSIpOworICAgIH0sIGUgPT4geworICAgICAgICB0ZXN0
RmFpbGVkKCJnZXREaXJlY3RvcnkoJy90ZXN0RmlsZXMvc3ViZm9sZGVyMi9zdWJmb2xkZXIyYScp
IHNob3VsZCBzdWNjZWVkIik7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHRlc3Q5KCkgeworICAg
IGRlYnVnKCIqIEVkZ2UgY2FzZTogY2FsbGluZyBnZXREaXJlY3RvcnkoKSB3aXRoIHJlbGF0aXZl
IHBhdGggY29udGFpbmluZyAnLicgYW5kICcuLiciKTsKKyAgICByZXR1cm4gZ2V0RGlyZWN0b3J5
QXNQcm9taXNlKGRpcmVjdG9yeUVudHJ5LCAiLi4vdGVzdEZpbGVzLy4vLi9zdWJmb2xkZXIyLy4u
L3N1YmZvbGRlcjIvLi9zdWJmb2xkZXIyYSIsIHt9KS50aGVuKGVudHJ5ID0+IHsKKyAgICAgICAg
c3ViZm9sZGVyMmFFbnRyeSA9IGVudHJ5OworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
InN1YmZvbGRlcjJhRW50cnkubmFtZSIsICJzdWJmb2xkZXIyYSIpOworICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoInN1YmZvbGRlcjJhRW50cnkuZnVsbFBhdGgiLCAiL3Rlc3RGaWxlcy9z
dWJmb2xkZXIyL3N1YmZvbGRlcjJhIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgic3ViZm9sZGVy
MmFFbnRyeS5pc0RpcmVjdG9yeSIpOworICAgIH0sIGUgPT4geworICAgICAgICB0ZXN0RmFpbGVk
KCJnZXREaXJlY3RvcnkoJy4uL3Rlc3RGaWxlcy8uLy4vc3ViZm9sZGVyMi8uLi9zdWJmb2xkZXIy
Ly4vc3ViZm9sZGVyMmEnKSBzaG91bGQgc3VjY2VlZCIpOworICAgIH0pOworfQorCitmdW5jdGlv
biB0ZXN0MTAoKSB7CisgICAgZGVidWcoIiogRWRnZSBjYXNlOiBjYWxsaW5nIGdldERpcmVjdG9y
eSgpIHdpdGggcmVsYXRpdmUgcGF0aCBjb250YWluaW5nIHRvbyBtYW55ICcuLiciKTsKKyAgICBy
ZXR1cm4gZ2V0RGlyZWN0b3J5QXNQcm9taXNlKGRpcmVjdG9yeUVudHJ5LCAiLi4vLi4vLi4vLi4v
Li4vdGVzdEZpbGVzL3N1YmZvbGRlcjEiLCB7fSkudGhlbihlbnRyeSA9PiB7CisgICAgICAgIHN1
YmZvbGRlcjFFbnRyeSA9IGVudHJ5OworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInN1
YmZvbGRlcjFFbnRyeS5uYW1lIiwgInN1YmZvbGRlcjEiKTsKKyAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCJzdWJmb2xkZXIxRW50cnkuZnVsbFBhdGgiLCAiL3Rlc3RGaWxlcy9zdWJmb2xk
ZXIxIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgic3ViZm9sZGVyMUVudHJ5LmlzRGlyZWN0b3J5
Iik7CisgICAgfSwgZSA9PiB7CisgICAgICAgIHRlc3RGYWlsZWQoImdldERpcmVjdG9yeSgnLi4v
Li4vLi4vLi4vLi4vdGVzdEZpbGVzL3N1YmZvbGRlcjEnKSBzaG91bGQgc3VjY2VlZCIpOworICAg
IH0pOworfQorCitmdW5jdGlvbiB0ZXN0MTEoKSB7CisgICAgZGVidWcoIiogRWRnZSBjYXNlOiBj
YWxsaW5nIGdldERpcmVjdG9yeSgpIHdpdGggYWJzb2x1dGUgcGF0aCBjb250YWluaW5nICcuLici
KTsKKyAgICByZXR1cm4gZ2V0RGlyZWN0b3J5QXNQcm9taXNlKGRpcmVjdG9yeUVudHJ5LCAiL3Rl
c3RGaWxlcy8uLi90ZXN0RmlsZXMvc3ViZm9sZGVyMSIsIHt9KS50aGVuKGVudHJ5ID0+IHsKKyAg
ICAgICAgc3ViZm9sZGVyMUVudHJ5ID0gZW50cnk7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygic3ViZm9sZGVyMUVudHJ5Lm5hbWUiLCAic3ViZm9sZGVyMSIpOworICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoInN1YmZvbGRlcjFFbnRyeS5mdWxsUGF0aCIsICIvdGVzdEZpbGVz
L3N1YmZvbGRlcjEiKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJzdWJmb2xkZXIxRW50cnkuaXNE
aXJlY3RvcnkiKTsKKyAgICB9LCBlID0+IHsKKyAgICAgICAgdGVzdEZhaWxlZCgiZ2V0RGlyZWN0
b3J5KCcuLi8uLi8uLi8uLi8uLi90ZXN0RmlsZXMvc3ViZm9sZGVyMScpIHNob3VsZCBzdWNjZWVk
Iik7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHRlc3QxMigpIHsKKyAgICBkZWJ1ZygiKiBFZGdl
IGNhc2U6IGNhbGxpbmcgZ2V0RGlyZWN0b3J5KCkgd2l0aCBhYnNvbHV0ZSBwYXRoIGNvbnRhaW5p
bmcgdG9vIG1hbnkgJy4uJyIpOworICAgIHJldHVybiBnZXREaXJlY3RvcnlBc1Byb21pc2UoZGly
ZWN0b3J5RW50cnksICIvLi4vLi4vLi4vLi4vLi4vdGVzdEZpbGVzL3N1YmZvbGRlcjEiLCB7fSku
dGhlbihlbnRyeSA9PiB7CisgICAgICAgIHN1YmZvbGRlcjFFbnRyeSA9IGVudHJ5OworICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInN1YmZvbGRlcjFFbnRyeS5uYW1lIiwgInN1YmZvbGRl
cjEiKTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJzdWJmb2xkZXIxRW50cnkuZnVs
bFBhdGgiLCAiL3Rlc3RGaWxlcy9zdWJmb2xkZXIxIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgi
c3ViZm9sZGVyMUVudHJ5LmlzRGlyZWN0b3J5Iik7CisgICAgfSwgZSA9PiB7CisgICAgICAgIHRl
c3RGYWlsZWQoImdldERpcmVjdG9yeSgnLi4vLi4vLi4vLi4vLi4vdGVzdEZpbGVzL3N1YmZvbGRl
cjEnKSBzaG91bGQgc3VjY2VlZCIpOworICAgIH0pOworfQorCitmdW5jdGlvbiB0ZXN0MTMoKSB7
CisgICAgZGVidWcoIiogRXJyb3IgY2FzZTogY2FsbGluZyBnZXREaXJlY3RvcnkoKSB3aXRoIGVt
cHR5IHBhdGgiKTsKKyAgICByZXR1cm4gZ2V0RGlyZWN0b3J5QXNQcm9taXNlKGRpcmVjdG9yeUVu
dHJ5LCAiIiwge30pLnRoZW4oZW50cnkgPT4geworICAgICAgICB0ZXN0RmFpbGVkKCJTaG91bGQg
ZmFpbCB3aGVuIHBhdGggaXMgaW52YWxpZCIpOworICAgIH0sIGUgPT4geworICAgICAgICBleCA9
IGU7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiZXgubmFtZSIsICJUeXBlTWlzbWF0
Y2hFcnJvciIpOworICAgIH0pOworfQorCit2YXIgZHJvcHpvbmUgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnZHJvcHpvbmUnKTsKK2Ryb3B6b25lLm9uZHJvcCA9IGZ1bmN0aW9uKGUpIHsKKyAg
ICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXI7
CisKKyAgICBzaG91bGRCZSgiZGF0YVRyYW5zZmVyLml0ZW1zLmxlbmd0aCIsICIxIik7CisKKyAg
ICBkaXJlY3RvcnlFbnRyeSA9IGRhdGFUcmFuc2Zlci5pdGVtc1swXS53ZWJraXRHZXRBc0VudHJ5
KCk7CisgICAgdGVzdDEoKQorICAgIC50aGVuKHRlc3QyKQorICAgIC50aGVuKHRlc3QzKQorICAg
IC50aGVuKHRlc3Q0KQorICAgIC50aGVuKHRlc3Q1KQorICAgIC50aGVuKHRlc3Q2KQorICAgIC50
aGVuKHRlc3Q3KQorICAgIC50aGVuKHRlc3Q4KQorICAgIC50aGVuKHRlc3Q5KQorICAgIC50aGVu
KHRlc3QxMCkKKyAgICAudGhlbih0ZXN0MTEpCisgICAgLnRoZW4odGVzdDEyKQorICAgIC50aGVu
KHRlc3QxMykKKyAgICAudGhlbihmaW5pc2hKU1Rlc3QpOworfTsKKworZHJvcHpvbmUub25kcmFn
b3ZlciA9IGZ1bmN0aW9uKGV2KSB7CisgICAgZXYucHJldmVudERlZmF1bHQoKTsKK30KKworb25s
b2FkID0gZnVuY3Rpb24oKSB7CisgICAgZHJhZ0ZpbGVzT250b0VsZW1lbnQoZHJvcHpvbmUsIFsn
Li4vLi4vZmFzdC9mb3Jtcy9maWxlL3Jlc291cmNlcy90ZXN0RmlsZXMnXSk7Cit9Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dr
Mi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3Rh
dGlvbnMKaW5kZXggMWE2ZGIxZmY5YjQ4ZTZkYjhkYjg0ODJmODFjNWNmMThiYjNlYzg1Yi4uNjc5
NDhiNDlmMDc4ZDE4NGE0ZDMxOGE4OWIwZjk2NWVhMTMyYmIxZCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTU2Nyw2ICs1NjcsNyBAQCBlZGl0aW5nL3Bh
c3RlYm9hcmQvZGF0YXRyYW5zZmVyLWl0ZW1zLWRyb3AtZGlyZWN0b3J5UmVhZGVyLmh0bWwKIGVk
aXRpbmcvcGFzdGVib2FyZC9kYXRhdHJhbnNmZXItaXRlbXMtZHJvcC1kaXJlY3RvcnlSZWFkZXIt
ZXJyb3IuaHRtbAogZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGF0cmFuc2Zlci1pdGVtcy1kcm9wLWRp
cmVjdG9yeVJlYWRlci1yb290Lmh0bWwKIGVkaXRpbmcvcGFzdGVib2FyZC9kYXRhdHJhbnNmZXIt
aXRlbXMtZHJvcC1nZXRBc0VudHJ5Lmh0bWwKK2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhdHJhbnNm
ZXItaXRlbXMtZHJvcC1nZXREaXJlY3RvcnkuaHRtbAogZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGF0
cmFuc2Zlci1pdGVtcy1kcm9wLWdldEZpbGUuaHRtbAogZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGF0
cmFuc2Zlci1pdGVtcy1kcm9wLWdldFBhcmVudC1yb290Lmh0bWwKIGVkaXRpbmcvcGFzdGVib2Fy
ZC9kYXRhdHJhbnNmZXItaXRlbXMtZHJvcC1nZXRQYXJlbnQuaHRtbAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>