<?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>209247</bug_id>
          
          <creation_ts>2020-03-18 13:11:25 -0700</creation_ts>
          <short_desc>Several TextMarker attributes need to run on the main thread.</short_desc>
          <delta_ts>2020-03-18 21:19:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andres Gonzalez">andresg_22</reporter>
          <assigned_to name="Andres Gonzalez">andresg_22</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>darin</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1631323</commentid>
    <comment_count>0</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-03-18 13:11:25 -0700</bug_when>
    <thetext>Several TextMarker attributes need to run on the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631327</commentid>
    <comment_count>1</comment_count>
      <attachid>393894</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-03-18 13:21:36 -0700</bug_when>
    <thetext>Created attachment 393894
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631491</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-03-18 19:09:50 -0700</bug_when>
    <thetext>Committed r258673: &lt;https://trac.webkit.org/changeset/258673&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 393894.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631492</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-18 19:10:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/60613926&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631520</commentid>
    <comment_count>4</comment_count>
      <attachid>393894</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-18 20:26:37 -0700</bug_when>
    <thetext>Comment on attachment 393894
Patch

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

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:560
&gt; +static inline RetainPtr&lt;WebAccessibilityObjectWrapper&gt; retainWrapper(WebAccessibilityObjectWrapper* wrapper)
&gt; +{
&gt; +    return RetainPtr&lt;WebAccessibilityObjectWrapper&gt;(wrapper);
&gt; +}

I’m surprised we need this. Doesn’t the retainPtr function from RetainPtr.h work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631534</commentid>
    <comment_count>5</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-03-18 21:19:01 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #4)
&gt; Comment on attachment 393894 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=393894&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:560
&gt; &gt; +static inline RetainPtr&lt;WebAccessibilityObjectWrapper&gt; retainWrapper(WebAccessibilityObjectWrapper* wrapper)
&gt; &gt; +{
&gt; &gt; +    return RetainPtr&lt;WebAccessibilityObjectWrapper&gt;(wrapper);
&gt; &gt; +}
&gt; 
&gt; I’m surprised we need this. Doesn’t the retainPtr function from RetainPtr.h
&gt; work?

I misread your comment about this in a previous review as that should use a helper function, but didn&apos;t realize that retainPtr already existed. Fixed it in:

https://bugs.webkit.org/show_bug.cgi?id=209269

Thanks very much.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393894</attachid>
            <date>2020-03-18 13:21:36 -0700</date>
            <delta_ts>2020-03-18 19:09:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209247-20200318162135.patch</filename>
            <type>text/plain</type>
            <size>44976</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4NDk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzk2MjBmMTI3MzU2ZWY0
MDE2MjM5ODA5M2JiODhkYzI0NTFjYWUxZi4uN2FiOWM0OTM0ZDA2MmI3MTU5N2VhYmM3MDgyMjdm
ODUxMDNhOWUxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDIwLTAzLTE4ICBBbmRy
ZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KKworICAgICAgICBTZXZlcmFsIFRl
eHRNYXJrZXIgYXR0cmlidXRlcyBuZWVkIHRvIHJ1biBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkyNDcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIERpc3BhdGNoIHNl
dmVyYWwgVGV4dE1hcmtlciBwYXJhbWV0ZXJpemVkIGF0dHJpYnV0ZXMgdG8gdGhlIG1haW4KKyAg
ICAgICAgdGhyZWFkLgorICAgICAgICAtIEFkZGVkIGhlbHBlciBtZXRob2RzIHRvIHJldHVybiBU
ZXh0TWFya2VycyBhbmQgVGV4dE1hcmtlclJhbmdlcyBmb3IKKyAgICAgICAgZGlmZmZlcmVudCB1
bml0cyBvZiB0ZXh0IHN1Y2ggYXMgd29yZCBvciBzZW50ZW5jZS4KKyAgICAgICAgLSBBZGRlZCBh
IGhlbHBlciBmdW5jdGlvbiwgcmV0YWluV3JhcHBlciB0byBtYWtlIGNvZGUgYSBiaXQgbW9yZQor
ICAgICAgICByZWFkYWJsZSBpbiBsYW1iZGEgZGVmaW5pdGlvbnMuCisKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6dGV4
dE1hcmtlckZvclZpc2libGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0TWFya2Vy
UmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgIChyZXRhaW5XcmFw
cGVyKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYXR0YWNobWVu
dFZpZXddKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZG9BWEF0
dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6c3BlbGxDaGVjazpdKToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2li
bGVQb3NpdGlvbnM6ZW5kUG9zaXRpb246XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFzc29jaWF0ZWRQbHVnaW5QYXJlbnRdKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgd2luZG93RWxlbWVudDpdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5
U2hvd0NvbnRleHRNZW51XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIHRleHRNYXJrZXJSYW5nZUF0VGV4dE1hcmtlcjpmb3JVbml0Ol0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBsaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1h
cmtlcjpmb3JVbml0Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciB0ZXh0TWFya2VyRm9yVGV4dE1hcmtlcjphdFVuaXQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpmb3JQYXJh
bWV0ZXI6XSk6CisKIDIwMjAtMDMtMTYgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtDYWlyb10gUGF0aCBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRv
ciBtdXN0IGFsc28gY29weSBvdmVyIENUTQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0KaW5kZXggNmU5MDgyYzgwMGJmMGI0MTY0
ZWVhNDhmNmI5ZmRjYjMxNzAwYWQ1NS4uM2JhY2U5M2Y0ZTRlYmFiZTBjYjhmZTIyZjY1NWUzOWQ1
NTI2ZjI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhP
YmplY3RDYWNoZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9B
WE9iamVjdENhY2hlTWFjLm1tCkBAIC01NjcsNiArNTY3LDcgQEAgaWQgdGV4dE1hcmtlclJhbmdl
RnJvbU1hcmtlcnMoaWQgdGV4dE1hcmtlcjEsIGlkIHRleHRNYXJrZXIyKQogCiBpZCB0ZXh0TWFy
a2VyRm9yVmlzaWJsZVBvc2l0aW9uKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHZpc2libGVQb3MpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBBU1NFUlQoY2FjaGUpOwogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBuaWw7CkBA
IC01ODAsNiArNTgxLDcgQEAgaWQgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihBWE9iamVj
dENhY2hlKiBjYWNoZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXMKIAogaWQgdGV4dE1hcmtl
clJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMoQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgc3RhcnRQb3NpdGlvbiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmRQ
b3NpdGlvbikKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghY2FjaGUp
CiAgICAgICAgIHJldHVybiBuaWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJN
YWMubW0KaW5kZXggODUzNTFhMjcyMGRhZjY3ZmM2NWEwYTNiNzFjMDc1MzM3NzYxNTIwZC4uYjJi
ZmViN2VmMGY5ZmI4N2Y5ZGRmZWVjODI5MDE4ZGVmNjRjMDUwNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTU1NCwxMSArNTU0LDE2IEBAIGV4dGVybiAiQyIg
QVhVSUVsZW1lbnRSZWYgTlNBY2Nlc3NpYmlsaXR5Q3JlYXRlQVhVSUVsZW1lbnRSZWYoaWQgZWxl
bWVudCk7CiAgICAgW3N1cGVyIGRldGFjaF07CiB9CiAKK3N0YXRpYyBpbmxpbmUgUmV0YWluUHRy
PFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPiByZXRhaW5XcmFwcGVyKFdlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyKQoreworICAgIHJldHVybiBSZXRhaW5QdHI8V2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHdyYXBwZXIpOworfQorCiAtIChpZClhdHRhY2ht
ZW50VmlldwogewogICAgIEFTU0VSVChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50
KCkpOwogCi0gICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFs
dWVGcm9tTWFpblRocmVhZDxpZD4oW3Byb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8aWQ+IHsKKyAgICBy
ZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhy
ZWFkPGlkPihbcHJvdGVjdGVkU2VsZiA9IHJldGFpbldyYXBwZXIoc2VsZildICgpIC0+IFJldGFp
blB0cjxpZD4gewogICAgICAgICBhdXRvKiB3aWRnZXQgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4
QmFja2luZ09iamVjdC0+d2lkZ2V0Rm9yQXR0YWNobWVudFZpZXcoKTsKICAgICAgICAgaWYgKCF3
aWRnZXQpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwpAQCAtMTI0OCw3ICsxMjUzLDcgQEAgc3Rh
dGljIE5TU3RyaW5nKiBuc1N0cmluZ0ZvclJlcGxhY2VkTm9kZShOb2RlKiByZXBsYWNlZE5vZGUp
CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyopZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFy
a2VyUmFuZ2U6KGlkKXRleHRNYXJrZXJSYW5nZSBzcGVsbENoZWNrOihCT09MKXNwZWxsQ2hlY2sK
IHsKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFk
PE5TQXR0cmlidXRlZFN0cmluZyAqPihbJnRleHRNYXJrZXJSYW5nZSwgJnNwZWxsQ2hlY2ssIHBy
b3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNl
bGYpXSAoKSAtPiBOU0F0dHJpYnV0ZWRTdHJpbmcgKiB7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxOU0F0dHJpYnV0ZWRTdHJpbmcgKj4oWyZ0
ZXh0TWFya2VyUmFuZ2UsICZzcGVsbENoZWNrLCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluV3JhcHBl
cihzZWxmKV0gKCkgLT4gTlNBdHRyaWJ1dGVkU3RyaW5nICogewogICAgICAgICBhdXRvKiBiYWNr
aW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7CiAgICAgICAg
IGlmICghYmFja2luZ09iamVjdCkKICAgICAgICAgICAgIHJldHVybiBuaWw7CkBAIC0xMjkyLDEx
ICsxMjk3LDEzIEBAIHN0YXRpYyBOU1N0cmluZyogbnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUoTm9k
ZSogcmVwbGFjZWROb2RlKQogCiAtIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0
aW9uczooY29uc3QgVmlzaWJsZVBvc2l0aW9uJilzdGFydFBvc2l0aW9uIGVuZFBvc2l0aW9uOihj
b25zdCBWaXNpYmxlUG9zaXRpb24mKWVuZFBvc2l0aW9uCiB7Ci0gICAgYXV0byogYmFja2luZ09i
amVjdCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0OwotICAgIGlmICghYmFja2luZ09iamVjdCkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1
ZUZyb21NYWluVGhyZWFkPE5TQXR0cmlidXRlZFN0cmluZyAqPihbJnN0YXJ0UG9zaXRpb24sICZl
bmRQb3NpdGlvbiwgcHJvdGVjdGVkU2VsZiA9IHJldGFpbldyYXBwZXIoc2VsZildICgpIC0+IGlk
IHsKKyAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhC
YWNraW5nT2JqZWN0OworICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCisgICAgICAgICAgICBy
ZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRp
b25zKGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9z
aXRpb24pOworICAgICAgICByZXR1cm4gdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlv
bnMoYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCBzdGFydFBvc2l0aW9uLCBlbmRQb3Np
dGlvbik7CisgICAgfSk7CiB9CiAKIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0JF
R0lOCkBAIC0xOTExLDcgKzE5MTgsNyBAQCBzdGF0aWMgTlNNdXRhYmxlQXJyYXkgKmNvbnZlcnRT
dHJpbmdzVG9OU0FycmF5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2ZWN0b3IpCiAKIC0gKGlkKWFz
c29jaWF0ZWRQbHVnaW5QYXJlbnQKIHsKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmll
dmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbcHJvdGVjdGVkU2VsZiA9IFJl
dGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IFJldGFp
blB0cjxpZD4geworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNl
ZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFtwcm90ZWN0ZWRTZWxmID0gcmV0YWluV3JhcHBlcihz
ZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7CiAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3Qg
PSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKICAgICAgICAgaWYgKCFiYWNr
aW5nT2JqZWN0IHx8ICFiYWNraW5nT2JqZWN0LT5oYXNBcHBsZVBERkFubm90YXRpb25BdHRyaWJ1
dGUoKSkKICAgICAgICAgICAgIHJldHVybiBuaWw7CkBAIC0yMjgxLDcgKzIyODgsNyBAQCBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAogLSAoaWQpd2luZG93RWxlbWVudDooTlNT
dHJpbmcqKWF0dHJpYnV0ZU5hbWUKIHsKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmll
dmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbYXR0cmlidXRlTmFtZSwgcHJv
dGVjdGVkU2VsZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2Vs
ZildICgpIC0+IFJldGFpblB0cjxpZD4geworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRy
aWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFthdHRyaWJ1dGVOYW1lLCBw
cm90ZWN0ZWRTZWxmID0gcmV0YWluV3JhcHBlcihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7
CiAgICAgICAgIGlkIHJlbW90ZVBhcmVudCA9IFtwcm90ZWN0ZWRTZWxmIHJlbW90ZUFjY2Vzc2li
aWxpdHlQYXJlbnRPYmplY3RdOwogICAgICAgICBpZiAocmVtb3RlUGFyZW50KSB7CiAgICAgICAg
ICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgpAQCAtMjgxNiwxMyArMjgy
MywxMyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgcmV0
dXJuIE5TQWNjZXNzaWJpbGl0eVZlcnRpY2FsT3JpZW50YXRpb25WYWx1ZTsKIAogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFNlbGVjdGVkVGV4dE1hcmtlclJhbmdl
Il0pIHsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2Vk
VmFsdWVGcm9tTWFpblRocmVhZDxpZD4oW3Byb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8aWQ+IHsKKyAg
ICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9t
TWFpblRocmVhZDxpZD4oW3Byb3RlY3RlZFNlbGYgPSByZXRhaW5XcmFwcGVyKHNlbGYpXSAoKSAt
PiBSZXRhaW5QdHI8aWQ+IHsKICAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0
TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dOwogICAgICAgICB9KTsKICAgICB9CiAKICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdGFydFRleHRNYXJrZXIiXSkgewot
ICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZy
b21NYWluVGhyZWFkPGlkPihbcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4geworICAgICAgICBy
ZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhy
ZWFkPGlkPihbcHJvdGVjdGVkU2VsZiA9IHJldGFpbldyYXBwZXIoc2VsZildICgpIC0+IFJldGFp
blB0cjxpZD4gewogICAgICAgICAgICAgaWYgKGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0
ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4gW3By
b3RlY3RlZFNlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpzdGFydE9mRG9jdW1lbnQo
YmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKSldOwogICAgICAgICAgICAgcmV0dXJuIG5pbDsKQEAg
LTI4MzAsNyArMjgzNyw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAog
ICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEVuZFRl
eHRNYXJrZXIiXSkgewotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRv
cmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0
cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IFJldGFpblB0cjxp
ZD4geworICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRW
YWx1ZUZyb21NYWluVGhyZWFkPGlkPihbcHJvdGVjdGVkU2VsZiA9IHJldGFpbldyYXBwZXIoc2Vs
ZildICgpIC0+IFJldGFpblB0cjxpZD4gewogICAgICAgICAgICAgaWYgKGF1dG8qIGJhY2tpbmdP
YmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpl
bmRPZkRvY3VtZW50KGJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCkpXTsKICAgICAgICAgICAgIHJl
dHVybiBuaWw7CkBAIC0zMzk4LDcgKzM0MDUsNyBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFU
SU9OU19FTkQKIAogLSAodm9pZClhY2Nlc3NpYmlsaXR5U2hvd0NvbnRleHRNZW51CiB7Ci0gICAg
QWNjZXNzaWJpbGl0eTo6cGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRTZWxm
ID0gUmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0geworICAg
IEFjY2Vzc2liaWxpdHk6OnBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChbcHJvdGVjdGVkU2Vs
ZiA9IHJldGFpbldyYXBwZXIoc2VsZildIHsKICAgICAgICAgW3Byb3RlY3RlZFNlbGYgX2FjY2Vz
c2liaWxpdHlTaG93Q29udGV4dE1lbnVdOwogICAgIH0pOwogfQpAQCAtMzc1NSw2ICszNzYyLDE0
MCBAQCBzdGF0aWMgdm9pZCBmb3JtYXRGb3JEZWJ1Z2dlcihjb25zdCBWaXNpYmxlUG9zaXRpb25S
YW5nZSYgcmFuZ2UsIGNoYXIqIGJ1ZmZlciwgdQogfQogI2VuZGlmCiAKK2VudW0gY2xhc3MgVGV4
dFVuaXQgeworICAgIExlZnRXb3JkID0gMSwKKyAgICBSaWdodFdvcmQsCisgICAgTmV4dFdvcmRF
bmQsCisgICAgUHJldmlvdXNXb3JkU3RhcnQsCisgICAgU2VudGVuY2UsCisgICAgTmV4dFNlbnRl
bmNlRW5kLAorICAgIFByZXZpb3VzU2VudGVuY2VTdGFydCwKKyAgICBQYXJhZ3JhcGgsCisgICAg
TmV4dFBhcmFncmFwaEVuZCwKKyAgICBQcmV2aW91c1BhcmFncmFwaFN0YXJ0LAorICAgIExpbmUs
CisgICAgTGVmdExpbmUsCisgICAgUmlnaHRMaW5lLAorICAgIE5leHRMaW5lRW5kLAorICAgIFBy
ZXZpb3VzTGluZVN0YXJ0LAorfTsKKworLSAoaWQpdGV4dE1hcmtlclJhbmdlQXRUZXh0TWFya2Vy
OihpZCl0ZXh0TWFya2VyIGZvclVuaXQ6KFRleHRVbml0KXRleHRVbml0Cit7CisgICAgcmV0dXJu
IEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxp
ZD4oWyZ0ZXh0TWFya2VyLCAmdGV4dFVuaXQsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5XcmFwcGVy
KHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8aWQ+IHsKKyAgICAgICAgYXV0byogYmFja2luZ09iamVj
dCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OworICAgICAgICBpZiAoIWJh
Y2tpbmdPYmplY3QpCisgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgIGF1dG8qIGNh
Y2hlID0gYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgICAgICBpZiAoIWNhY2hl
KQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKworICAgICAgICBhdXRvIGNoYXJhY3Rlck9mZnNl
dCA9IGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXIoY2FjaGUsIHRleHRNYXJrZXIpOworICAg
ICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOworICAgICAgICBzd2l0Y2ggKHRleHRVbml0KSB7Cisg
ICAgICAgIGNhc2UgVGV4dFVuaXQ6OkxlZnRXb3JkOgorICAgICAgICAgICAgcmFuZ2UgPSBjYWNo
ZS0+bGVmdFdvcmRSYW5nZShjaGFyYWN0ZXJPZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVGV4dFVuaXQ6OlJpZ2h0V29yZDoKKyAgICAgICAgICAgIHJhbmdlID0gY2Fj
aGUtPnJpZ2h0V29yZFJhbmdlKGNoYXJhY3Rlck9mZnNldCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUZXh0VW5pdDo6U2VudGVuY2U6CisgICAgICAgICAgICByYW5nZSA9IGNh
Y2hlLT5zZW50ZW5jZUZvckNoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGV4dFVuaXQ6OlBhcmFncmFwaDoKKyAgICAgICAg
ICAgIHJhbmdlID0gY2FjaGUtPnBhcmFncmFwaEZvckNoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJP
ZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZShjYWNoZSwgcmFuZ2UpOwor
ICAgIH0pOworfQorCistIChpZClsaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcjooaWQp
dGV4dE1hcmtlciBmb3JVbml0OihUZXh0VW5pdCl0ZXh0VW5pdAoreworICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsm
dGV4dE1hcmtlciwgJnRleHRVbml0LCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluV3JhcHBlcihzZWxm
KV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7CisgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBw
cm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKKyAgICAgICAgaWYgKCFiYWNraW5n
T2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKworICAgICAgICBhdXRvKiBjYWNoZSA9
IGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICAgICAgaWYgKCFjYWNoZSkKKyAg
ICAgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAgICAgYXV0byB2aXNpYmxlUG9zaXRpb24gPSB2
aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKGNhY2hlLCB0ZXh0TWFya2VyKTsKKyAgICAgICAg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2U7CisgICAgICAgIHN3aXRj
aCAodGV4dFVuaXQpIHsKKyAgICAgICAgY2FzZSBUZXh0VW5pdDo6TGluZToKKyAgICAgICAgICAg
IHZpc2libGVQb3NpdGlvblJhbmdlID0gYmFja2luZ09iamVjdC0+bGluZVJhbmdlRm9yUG9zaXRp
b24odmlzaWJsZVBvc2l0aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRl
eHRVbml0OjpMZWZ0TGluZToKKyAgICAgICAgICAgIHZpc2libGVQb3NpdGlvblJhbmdlID0gYmFj
a2luZ09iamVjdC0+bGVmdExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zaXRpb24p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGV4dFVuaXQ6OlJpZ2h0TGluZToK
KyAgICAgICAgICAgIHZpc2libGVQb3NpdGlvblJhbmdlID0gYmFja2luZ09iamVjdC0+cmlnaHRM
aW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvc2l0aW9uKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0ZXh0TWFy
a2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyhiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hl
KCksIHZpc2libGVQb3NpdGlvblJhbmdlLnN0YXJ0LCB2aXNpYmxlUG9zaXRpb25SYW5nZS5lbmQp
OworICAgIH0pOworfQorCistIChpZCl0ZXh0TWFya2VyRm9yVGV4dE1hcmtlcjooaWQpdGV4dE1h
cmtlciBhdFVuaXQ6KFRleHRVbml0KXRleHRVbml0Cit7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZ0ZXh0TWFy
a2VyLCAmdGV4dFVuaXQsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5XcmFwcGVyKHNlbGYpXSAoKSAt
PiBSZXRhaW5QdHI8aWQ+IHsKKyAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3Rl
ZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OworICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3Qp
CisgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgIGF1dG8qIGNhY2hlID0gYmFja2lu
Z09iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgICAgICBpZiAoIWNhY2hlKQorICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgb2xkT2Zmc2V0ID0gY2hh
cmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcihjYWNoZSwgdGV4dE1hcmtlcik7CisgICAgICAgIENo
YXJhY3Rlck9mZnNldCBuZXdPZmZzZXQ7CisgICAgICAgIHN3aXRjaCAodGV4dFVuaXQpIHsKKyAg
ICAgICAgY2FzZSBUZXh0VW5pdDo6TmV4dFdvcmRFbmQ6CisgICAgICAgICAgICBuZXdPZmZzZXQg
PSBjYWNoZS0+bmV4dFdvcmRFbmRDaGFyYWN0ZXJPZmZzZXQob2xkT2Zmc2V0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFRleHRVbml0OjpQcmV2aW91c1dvcmRTdGFydDoKKyAg
ICAgICAgICAgIG5ld09mZnNldCA9IGNhY2hlLT5wcmV2aW91c1dvcmRTdGFydENoYXJhY3Rlck9m
ZnNldChvbGRPZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGV4dFVu
aXQ6Ok5leHRTZW50ZW5jZUVuZDoKKyAgICAgICAgICAgIG5ld09mZnNldCA9IGNhY2hlLT5uZXh0
U2VudGVuY2VFbmRDaGFyYWN0ZXJPZmZzZXQob2xkT2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFRleHRVbml0OjpQcmV2aW91c1NlbnRlbmNlU3RhcnQ6CisgICAgICAg
ICAgICBuZXdPZmZzZXQgPSBjYWNoZS0+cHJldmlvdXNTZW50ZW5jZVN0YXJ0Q2hhcmFjdGVyT2Zm
c2V0KG9sZE9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUZXh0VW5p
dDo6TmV4dFBhcmFncmFwaEVuZDoKKyAgICAgICAgICAgIG5ld09mZnNldCA9IGNhY2hlLT5uZXh0
UGFyYWdyYXBoRW5kQ2hhcmFjdGVyT2Zmc2V0KG9sZE9mZnNldCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUZXh0VW5pdDo6UHJldmlvdXNQYXJhZ3JhcGhTdGFydDoKKyAgICAg
ICAgICAgIG5ld09mZnNldCA9IGNhY2hlLT5wcmV2aW91c1BhcmFncmFwaFN0YXJ0Q2hhcmFjdGVy
T2Zmc2V0KG9sZE9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUZXh0
VW5pdDo6TmV4dExpbmVFbmQ6IHsKKyAgICAgICAgICAgIGF1dG8gdmlzaWJsZVBvc2l0aW9uID0g
dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihjYWNoZSwgdGV4dE1hcmtlcik7CisgICAgICAg
ICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihjYWNoZSwgYmFja2luZ09i
amVjdC0+bmV4dExpbmVFbmRQb3NpdGlvbih2aXNpYmxlUG9zaXRpb24pKTsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIFRleHRVbml0OjpQcmV2aW91c0xpbmVTdGFydDogeworICAgICAgICAgICAg
YXV0byB2aXNpYmxlUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKGNhY2hl
LCB0ZXh0TWFya2VyKTsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBv
c2l0aW9uKGNhY2hlLCBiYWNraW5nT2JqZWN0LT5wcmV2aW91c0xpbmVTdGFydFBvc2l0aW9uKHZp
c2libGVQb3NpdGlvbikpOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQoY2FjaGUsIG5ld09m
ZnNldCk7CisgICAgfSk7Cit9CisKIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0JF
R0lOCiAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1
dGUgZm9yUGFyYW1ldGVyOihpZClwYXJhbWV0ZXIKIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5U
QVRJT05TX0VORApAQCAtMzgxMCw3ICszOTUxLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1F
TlRBVElPTlNfRU5ECiAgICAgLy8gZGlzcGF0Y2gKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0VGV4dFdpdGhDcml0ZXJpYVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgIC8vIFRvIGJlIGRlcHJlY2F0ZWQuCi0gICAgICAgIGF1
dG8gcmVzdWx0ID0gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPFZl
Y3RvcjxTdHJpbmc+PihbZGljdGlvbmFyeSwgcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0cjxXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IFZlY3RvcjxTdHJpbmc+IHsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1h
aW5UaHJlYWQ8VmVjdG9yPFN0cmluZz4+KFtkaWN0aW9uYXJ5LCBwcm90ZWN0ZWRTZWxmID0gcmV0
YWluV3JhcHBlcihzZWxmKV0gKCkgLT4gVmVjdG9yPFN0cmluZz4gewogICAgICAgICAgICAgYXV0
byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0Owog
ICAgICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAgICAgICAgICAgICAgIHJldHVybiBW
ZWN0b3I8U3RyaW5nPigpOwpAQCAtMzgyOCw3ICszOTY5LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dFdpdGhDcml0ZXJpYVBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGVdKSB7CiAgICAgICAgIGF1dG8gY3JpdGVyaWEgPSBhY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENy
aXRlcmlhRm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShkaWN0aW9uYXJ5KTsKLSAgICAgICAgcmV0
dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxOU0FycmF5ICo+
KFsmY3JpdGVyaWEsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBOU0FycmF5ICogeworICAgICAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPE5TQXJy
YXkgKj4oWyZjcml0ZXJpYSwgcHJvdGVjdGVkU2VsZiA9IHJldGFpbldyYXBwZXIoc2VsZildICgp
IC0+IFJldGFpblB0cjxOU0FycmF5PiB7CiAgICAgICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0
ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7CiAgICAgICAgICAgICBpZiAo
IWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTM4NDYsNyAr
Mzk4Nyw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIH0KIAog
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0T3Bl
cmF0aW9uUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgYXV0byBvcGVyYXRpb25S
ZXN1bHQgPSBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8VmVjdG9y
PFN0cmluZz4+KFtkaWN0aW9uYXJ5LCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gVmVjdG9yPFN0cmluZz4geworICAg
ICAgICBhdXRvIG9wZXJhdGlvblJlc3VsdCA9IEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVG
cm9tTWFpblRocmVhZDxWZWN0b3I8U3RyaW5nPj4oW2RpY3Rpb25hcnksIHByb3RlY3RlZFNlbGYg
PSByZXRhaW5XcmFwcGVyKHNlbGYpXSAoKSAtPiBWZWN0b3I8U3RyaW5nPiB7CiAgICAgICAgICAg
ICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmpl
Y3Q7CiAgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIFZlY3RvcjxTdHJpbmc+KCk7CkBAIC0zODc3LDggKzQwMTgsMTIgQEAgQUxMT1dfREVQUkVD
QVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUVuZFRleHRNYXJrZXJGb3JCb3VuZHNQYXJhbWV0
ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmll
dmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJnJlY3QsIHByb3RlY3RlZFNl
bGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAt
PiBSZXRhaW5QdHI8aWQ+IHsKLSAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2Vs
Zi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICAgICAgcmV0dXJu
IEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxp
ZD4oWyZyZWN0LCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluV3JhcHBlcihzZWxmKV0gKCkgLT4gUmV0
YWluUHRyPGlkPiB7CisgICAgICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVk
U2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7CisgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmpl
Y3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKworICAgICAgICAgICAgYXV0byogY2Fj
aGUgPSBiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgICAgICAgICBpZiAoIWNh
Y2hlKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKQEAgLTM4ODksOCArNDAzNCwxMiBA
QCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICB9CiAKICAgICBpZiAo
W2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U3RhcnRUZXh0TWFya2Vy
Rm9yQm91bmRzUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZy
ZWN0LCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyPihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7Ci0gICAgICAgICAgICBhdXRvKiBjYWNo
ZSA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7
CisgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVl
RnJvbU1haW5UaHJlYWQ8aWQ+KFsmcmVjdCwgcHJvdGVjdGVkU2VsZiA9IHJldGFpbldyYXBwZXIo
c2VsZildICgpIC0+IFJldGFpblB0cjxpZD4geworICAgICAgICAgICAgYXV0byogYmFja2luZ09i
amVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OworICAgICAgICAgICAg
aWYgKCFiYWNraW5nT2JqZWN0KQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAg
ICAgICAgIGF1dG8qIGNhY2hlID0gYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAg
ICAgICAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogCkBAIC0z
OTAwLDYwICs0MDQ5LDg2IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAog
ICAgICAgICB9KTsKICAgICB9CiAKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5TGluZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXJQYXJhbWV0ZXJp
emVkQXR0cmlidXRlXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9u
ID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXTsKLSAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2UgPSBiYWNraW5nT2Jq
ZWN0LT5saW5lUmFuZ2VGb3JQb3NpdGlvbih2aXNpYmxlUG9zaXRpb24pOwotICAgICAgICByZXR1
cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dmlzaWJsZVBvc2l0
aW9uUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dmlzaWJsZVBvc2l0aW9uUmFuZ2UuZW5kXTsKLSAg
ICB9CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUxp
bmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pCisg
ICAgICAgIHJldHVybiBbc2VsZiBsaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcjp0ZXh0
TWFya2VyIGZvclVuaXQ6VGV4dFVuaXQ6OkxpbmVdOwogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1pc3NwZWxsaW5nVGV4dE1hcmtlclJhbmdlUGFy
YW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgYXV0byBjcml0ZXJpYSA9IGFjY2Vzc2li
aWxpdHlNaXNzcGVsbGluZ1NlYXJjaENyaXRlcmlhRm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShz
ZWxmLCBkaWN0aW9uYXJ5KTsKLSAgICAgICAgaWYgKGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IGJh
Y2tpbmdPYmplY3QtPmdldE1pc3NwZWxsaW5nUmFuZ2UoY3JpdGVyaWEuZmlyc3QsIGNyaXRlcmlh
LnNlY29uZCkpCi0gICAgICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJh
bmdlOm1pc3NwZWxsaW5nUmFuZ2VdOwotICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1
cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFk
PGlkPihbJmNyaXRlcmlhLCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluV3JhcHBlcihzZWxmKV0gKCkg
LT4gUmV0YWluUHRyPGlkPiB7CisgICAgICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJv
dGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7CisgICAgICAgICAgICBpZiAoIWJhY2tp
bmdPYmplY3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKworICAgICAgICAgICAgaWYg
KGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IGJhY2tpbmdPYmplY3QtPmdldE1pc3NwZWxsaW5nUmFu
Z2UoY3JpdGVyaWEuZmlyc3QsIGNyaXRlcmlhLnNlY29uZCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTptaXNzcGVsbGluZ1Jh
bmdlXTsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0pOwogICAgIH0KIAogICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
SXNWYWxpZFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlv
biBwb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOwot
ICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOiFwb3MuaXNOdWxsKCldOwor
ICAgICAgICBib29sIHJlc3VsdCA9IEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFp
blRocmVhZDxib29sPihbJnRleHRNYXJrZXIsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5XcmFwcGVy
KHNlbGYpXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MgPSBb
cHJvdGVjdGVkU2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOwor
ICAgICAgICAgICAgcmV0dXJuICFwb3MuaXNOdWxsKCk7CisgICAgICAgIH0pOworICAgICAgICBy
ZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnJlc3VsdF07CiAgICAgfQorCiAgICAgaWYg
KFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUluZGV4Rm9yVGV4dE1h
cmtlclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIHJldHVybiBbTlNOdW1iZXIg
bnVtYmVyV2l0aEludGVnZXI6W3NlbGYgX2luZGV4Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXV07
CisgICAgICAgIGF1dG8gcmVzdWx0ID0gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21N
YWluVGhyZWFkPE5TSW50ZWdlcj4oWyZ0ZXh0TWFya2VyLCBwcm90ZWN0ZWRTZWxmID0gcmV0YWlu
V3JhcHBlcihzZWxmKV0gKCkgLT4gTlNJbnRlZ2VyIHsKKyAgICAgICAgICAgIHJldHVybiBbcHJv
dGVjdGVkU2VsZiBfaW5kZXhGb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOworICAgICAgICB9KTsK
KyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpyZXN1bHRdOwogICAg
IH0KKwogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyRm9ySW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAgICByZXR1
cm4gW3NlbGYgX3RleHRNYXJrZXJGb3JJbmRleDpbbnVtYmVyIGludGVnZXJWYWx1ZV1dOworICAg
ICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21N
YWluVGhyZWFkPGlkPihbJm51bWJlciwgcHJvdGVjdGVkU2VsZiA9IHJldGFpbldyYXBwZXIoc2Vs
ZildICgpIC0+IFJldGFpblB0cjxpZD4geworICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRT
ZWxmIF90ZXh0TWFya2VyRm9ySW5kZXg6W251bWJlciBpbnRlZ2VyVmFsdWVdXTsKKyAgICAgICAg
fSk7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhVSUVs
ZW1lbnRGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYXhP
YmplY3QgPSBbc2VsZiBhY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2Vy
XTsKLSAgICAgICAgaWYgKCFheE9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAg
ICAgIGlmIChheE9iamVjdC0+aXNBdHRhY2htZW50KCkgJiYgW2F4T2JqZWN0LT53cmFwcGVyKCkg
YXR0YWNobWVudFZpZXddKQotICAgICAgICAgICAgcmV0dXJuIFtheE9iamVjdC0+d3JhcHBlcigp
IGF0dGFjaG1lbnRWaWV3XTsKLSAgICAgICAgcmV0dXJuIGF4T2JqZWN0LT53cmFwcGVyKCk7Cisg
ICAgICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHJldHVybiBhbiBJc29sYXRlZE9iamVjdCBpZiB0
aGlzIGlzIGNhbGxlZCBvbiB0aGUgQVggdGhyZWFkLgorICAgICAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJnRleHRN
YXJrZXIsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5XcmFwcGVyKHNlbGYpXSAoKSAtPiBSZXRhaW5Q
dHI8aWQ+IHsKKyAgICAgICAgICAgIGF1dG8qIGF4T2JqZWN0ID0gW3Byb3RlY3RlZFNlbGYgYWNj
ZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl07CisgICAgICAgICAgICBp
ZiAoIWF4T2JqZWN0KQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICBp
ZiAoYXhPYmplY3QtPmlzQXR0YWNobWVudCgpICYmIFtheE9iamVjdC0+d3JhcHBlcigpIGF0dGFj
aG1lbnRWaWV3XSkKKyAgICAgICAgICAgICAgICByZXR1cm4gW2F4T2JqZWN0LT53cmFwcGVyKCkg
YXR0YWNobWVudFZpZXddOworICAgICAgICAgICAgcmV0dXJuIGF4T2JqZWN0LT53cmFwcGVyKCk7
CisgICAgICAgIH0pOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpAIkFYVGV4dE1hcmtlclJhbmdlRm9yVUlFbGVtZW50Il0pIHsKLSAgICAgICAgcmV0dXJuIEFj
Y2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4o
WyZ1aUVsZW1lbnQsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8aWQ+IHsKKyAgICAgICAgcmV0dXJu
IEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxp
ZD4oWyZ1aUVsZW1lbnQsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5XcmFwcGVyKHNlbGYpXSAoKSAt
PiBSZXRhaW5QdHI8aWQ+IHsKICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSB1aUVs
ZW1lbnQuZ2V0KCktPmVsZW1lbnRSYW5nZSgpOwogICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0
ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTpyYW5nZV07CiAgICAgICAgIH0pOwogICAg
IH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTGluZUZvclRleHRN
YXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZp
c2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAgcmV0dXJu
IFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6YmFja2luZ09iamVjdC0+bGluZUZvclBv
c2l0aW9uKHZpc2libGVQb3MpXTsKKyAgICAgICAgaW50IHJlc3VsdCA9IEFjY2Vzc2liaWxpdHk6
OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxpbnQ+KFsmdGV4dE1hcmtlciwgcHJvdGVjdGVk
U2VsZiA9IHJldGFpbldyYXBwZXIoc2VsZildICgpIC0+IGludCB7CisgICAgICAgICAgICBhdXRv
KiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7Cisg
ICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0x
OworCisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtwcm90ZWN0ZWRT
ZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl07CisgICAgICAgICAg
ICByZXR1cm4gYmFja2luZ09iamVjdC0+bGluZUZvclBvc2l0aW9uKHZpc2libGVQb3MpOworICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OnJlc3VsdF07
CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhUZXh0TWFy
a2VyUmFuZ2VGb3JMaW5lIl0pIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5n
ZTsKLSAgICAgICAgaWYgKFtudW1iZXIgdW5zaWduZWRJbnRlZ2VyVmFsdWVdICE9IE5TTm90Rm91
bmQpCi0gICAgICAgICAgICB2cFJhbmdlID0gYmFja2luZ09iamVjdC0+dmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JMaW5lKFtudW1iZXIgdW5zaWduZWRJbnRWYWx1ZV0pOwotICAgICAgICByZXR1cm4g
W3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBl
bmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CisgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Ojpy
ZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmbnVtYmVyLCBwcm90
ZWN0ZWRTZWxmID0gcmV0YWluV3JhcHBlcihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7Cisg
ICAgICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJh
Y2tpbmdPYmplY3Q7CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlOwor
ICAgICAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QgJiYgW251bWJlciB1bnNpZ25lZEludGVnZXJW
YWx1ZV0gIT0gTlNOb3RGb3VuZCkKKyAgICAgICAgICAgICAgICB2cFJhbmdlID0gYmFja2luZ09i
amVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JMaW5lKFtudW1iZXIgdW5zaWduZWRJbnRWYWx1
ZV0pOworICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZy
b21WaXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRd
OworICAgICAgICB9KTsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJp
bmc6QCJBWFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSJdKSB7Ci0gICAgICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8U3RyaW5nPihbJnRleHRNYXJr
ZXJSYW5nZSwgcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcj4oc2VsZildICgpIC0+IFN0cmluZyB7CisgICAgICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8U3RyaW5nPihbJnRleHRNYXJrZXJSYW5n
ZSwgcHJvdGVjdGVkU2VsZiA9IHJldGFpbldyYXBwZXIoc2VsZildICgpIC0+IFN0cmluZyB7CiAg
ICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3Byb3RlY3RlZFNlbGYgcmFuZ2VGb3JU
ZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKICAgICAgICAgICAgIGF1dG8qIGJhY2tp
bmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKICAgICAgICAg
ICAgIHJldHVybiBiYWNraW5nT2JqZWN0ID8gYmFja2luZ09iamVjdC0+c3RyaW5nRm9yUmFuZ2Uo
cmFuZ2UpIDogU3RyaW5nKCk7CkBAIC0zOTY1LDI1ICs0MTQwLDM1IEBAIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICBpZiAoIXBvaW50U2V0KQogICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKIAotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVB
dXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJndlYkNvcmVQb2ludCwgcHJvdGVj
dGVkU2VsZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZild
ICgpIC0+IFJldGFpblB0cjxpZD4gewotICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0
ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgICAgICBy
ZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhy
ZWFkPGlkPihbJndlYkNvcmVQb2ludCwgcHJvdGVjdGVkU2VsZiA9IHJldGFpbldyYXBwZXIoc2Vs
ZildICgpIC0+IFJldGFpblB0cjxpZD4geworICAgICAgICAgICAgYXV0byogYmFja2luZ09iamVj
dCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OworICAgICAgICAgICAgaWYg
KCFiYWNraW5nT2JqZWN0KQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAgICAg
ICAgIGF1dG8qIGNhY2hlID0gYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgICAg
ICAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgICAg
ICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gY2FjaGUtPmNoYXJhY3Rlck9m
ZnNldEZvclBvaW50KHdlYkNvcmVQb2ludCwgcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdP
YmplY3QpOworICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IGNh
Y2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JQb2ludCh3ZWJDb3JlUG9pbnQsIGJhY2tpbmdPYmplY3Qp
OwogICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJGb3JDaGFyYWN0
ZXJPZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0XTsKICAgICAgICAgfSk7CiAgICAgfQogCiAgICAgaWYg
KFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhCb3VuZHNGb3JUZXh0TWFya2VyUmFuZ2Ui
XSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0TWFy
a2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKLSAgICAgICAgYXV0byBib3VuZHMgPSBGbG9hdFJl
Y3QoYmFja2luZ09iamVjdC0+Ym91bmRzRm9yUmFuZ2UocmFuZ2UpKTsKLSAgICAgICAgTlNSZWN0
IHJlY3QgPSBbc2VsZiBjb252ZXJ0UmVjdFRvU3BhY2U6Ym91bmRzIHNwYWNlOkFjY2Vzc2liaWxp
dHlDb252ZXJzaW9uU3BhY2U6OlNjcmVlbl07CisgICAgICAgIE5TUmVjdCByZWN0ID0gQWNjZXNz
aWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPE5TUmVjdD4oWyZ0ZXh0TWFya2Vy
UmFuZ2UsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5XcmFwcGVyKHNlbGYpXSAoKSAtPiBOU1JlY3Qg
eworICAgICAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCku
YXhCYWNraW5nT2JqZWN0OworICAgICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQorICAgICAg
ICAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOworCisgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gW3Byb3RlY3RlZFNlbGYgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtl
clJhbmdlXTsKKyAgICAgICAgICAgIGF1dG8gYm91bmRzID0gRmxvYXRSZWN0KGJhY2tpbmdPYmpl
Y3QtPmJvdW5kc0ZvclJhbmdlKHJhbmdlKSk7CisgICAgICAgICAgICByZXR1cm4gW3Byb3RlY3Rl
ZFNlbGYgY29udmVydFJlY3RUb1NwYWNlOmJvdW5kcyBzcGFjZTpBY2Nlc3NpYmlsaXR5Q29udmVy
c2lvblNwYWNlOjpTY3JlZW5dOworICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIFtOU1ZhbHVl
IHZhbHVlV2l0aFJlY3Q6cmVjdF07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUJvdW5kc0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJp
YnV0ZV0pIHsKLSAgICAgICAgTlNSZWN0IHJlY3QgPSBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZh
bHVlRnJvbU1haW5UaHJlYWQ8TlNSZWN0PihbJnJhbmdlLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWlu
UHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gTlNSZWN0IHsK
KyAgICAgICAgTlNSZWN0IHJlY3QgPSBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1h
aW5UaHJlYWQ8TlNSZWN0PihbJnJhbmdlLCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluV3JhcHBlcihz
ZWxmKV0gKCkgLT4gTlNSZWN0IHsKICAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBw
cm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKICAgICAgICAgICAgIGlmICghYmFj
a2luZ09iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKQEAgLTQwMTAs
MTggKzQxOTUsMjIgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAg
ICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+ZG9BWFN0cmluZ0ZvclJhbmdlKHBsYWluVGV4
dFJhbmdlKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRy
aWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8TlNTdHJpbmcgKj4oWyZyYW5nZSwgcHJvdGVjdGVkU2Vs
ZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+
IE5TU3RyaW5nICogewotICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLmdl
dCgpLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgICAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPFN0cmluZz4oWyZyYW5nZSwg
cHJvdGVjdGVkU2VsZiA9IHJldGFpbldyYXBwZXIoc2VsZildICgpIC0+IFN0cmluZyB7CisgICAg
ICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tp
bmdPYmplY3Q7CisgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IGJhY2tpbmdP
YmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICAgICAgICAgIGlmICghY2FjaGUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
LSAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZz
ZXRGb3JJbmRleChyYW5nZS5sb2NhdGlvbiwgcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdP
YmplY3QpOwotICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGNhY2hlLT5jaGFyYWN0
ZXJPZmZzZXRGb3JJbmRleChyYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aCwgcHJvdGVjdGVk
U2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QpOworICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0
IHN0YXJ0ID0gY2FjaGUtPmNoYXJhY3Rlck9mZnNldEZvckluZGV4KHJhbmdlLmxvY2F0aW9uLCBi
YWNraW5nT2JqZWN0KTsKKyAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBlbmQgPSBjYWNoZS0+
Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgocmFuZ2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGgsIGJh
Y2tpbmdPYmplY3QpOwogICAgICAgICAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051
bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKIAogICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNhY2hlLT5y
YW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnQsIGVuZCk7Ci0gICAgICAgICAg
ICByZXR1cm4gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPnN0cmluZ0ZvclJh
bmdlKHJhbmdlKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5zdHJpbmdGb3JS
YW5nZShyYW5nZSk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtNDA1NCw4ICs0MjQzLDEyIEBA
IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICBpZiAoIUFYT2Jq
ZWN0SXNUZXh0TWFya2VyKHRleHRNYXJrZXIxKSB8fCAhQVhPYmplY3RJc1RleHRNYXJrZXIodGV4
dE1hcmtlcjIpKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgICAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihb
dGV4dE1hcmtlcjEsIHRleHRNYXJrZXIyLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7Ci0g
ICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2Jq
ZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRy
aWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmdGV4dE1hcmtlcjEsICZ0
ZXh0TWFya2VyMiwgcHJvdGVjdGVkU2VsZiA9IHJldGFpbldyYXBwZXIoc2VsZildICgpIC0+IFJl
dGFpblB0cjxpZD4geworICAgICAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3Rl
ZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OworICAgICAgICAgICAgaWYgKCFiYWNraW5nT2Jq
ZWN0KQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAgICAgICAgIGF1dG8qIGNh
Y2hlID0gYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgICAgICAgICAgaWYgKCFj
YWNoZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogCkBAIC00MDY3LDE2NiArNDI2MCw4
NiBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICB9CiAKICAgICBp
ZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRUZXh0TWFya2VyRm9yVGV4dE1h
cmtlciJdKSB7Ci0gICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbc2Vs
ZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOwotICAgICAgICByZXR1
cm4gW3NlbGYgbmV4dFRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0
XTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZp
b3VzVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBDaGFyYWN0ZXJPZmZzZXQg
Y2hhcmFjdGVyT2Zmc2V0ID0gW3NlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0
TWFya2VyXTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHByZXZpb3VzVGV4dE1hcmtlckZvckNoYXJh
Y3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXRdOwotICAgIH0KLQotICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYTGVmdFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2Vy
Il0pIHsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2Vk
VmFsdWVGcm9tTWFpblRocmVhZDxpZD4oW3RleHRNYXJrZXIsIHByb3RlY3RlZFNlbGYgPSBSZXRh
aW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBSZXRhaW5Q
dHI8aWQ+IHsKLSAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5h
eEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKLSAgICAgICAgICAgIGlmICghY2FjaGUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKLQorICAgICAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJnRleHRN
YXJrZXIsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5XcmFwcGVyKHNlbGYpXSAoKSAtPiBSZXRhaW5Q
dHI8aWQ+IHsKICAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBb
cHJvdGVjdGVkU2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOwot
ICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNhY2hlLT5sZWZ0V29yZFJhbmdlKGNo
YXJhY3Rlck9mZnNldCk7Ci0gICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1h
cmtlclJhbmdlRnJvbVJhbmdlOnJhbmdlXTsKKyAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVk
U2VsZiBuZXh0VGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXRdOwog
ICAgICAgICB9KTsKICAgICB9CiAKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
QCJBWFJpZ2h0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBy
ZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhy
ZWFkPGlkPihbdGV4dE1hcmtlciwgcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0cjxXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4gewotICAgICAg
ICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdC0+
YXhPYmplY3RDYWNoZSgpOwotICAgICAgICAgICAgaWYgKCFjYWNoZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbmlsOwotCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQ
cmV2aW91c1RleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKKyAgICAgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZ0
ZXh0TWFya2VyLCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluV3JhcHBlcihzZWxmKV0gKCkgLT4gUmV0
YWluUHRyPGlkPiB7CiAgICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0
ID0gW3Byb3RlY3RlZFNlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2Vy
XTsKLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjYWNoZS0+cmlnaHRXb3JkUmFu
Z2UoY2hhcmFjdGVyT2Zmc2V0KTsKLSAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0
ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6cmFuZ2VdOworICAgICAgICAgICAgcmV0dXJuIFtwcm90
ZWN0ZWRTZWxmIHByZXZpb3VzVGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJP
ZmZzZXRdOwogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6QCJBWExlZnRMaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7Ci0g
ICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9u
Rm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5n
ZSB2cFJhbmdlID0gYmFja2luZ09iamVjdC0+bGVmdExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZSh2
aXNpYmxlUG9zKTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNp
YmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwotICAg
IH0KKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExlZnRXb3JkVGV4dE1h
cmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKQorICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtl
clJhbmdlQXRUZXh0TWFya2VyOnRleHRNYXJrZXIgZm9yVW5pdDpUZXh0VW5pdDo6TGVmdFdvcmRd
OwogCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhSaWdodExpbmVUZXh0
TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2Vy
KV07Ci0gICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBiYWNraW5nT2JqZWN0
LT5yaWdodExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zKTsKLSAgICAgICAgcmV0
dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3Rh
cnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwotICAgIH0KKyAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6QCJBWFJpZ2h0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIi
XSkKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUF0VGV4dE1hcmtlcjp0ZXh0
TWFya2VyIGZvclVuaXQ6VGV4dFVuaXQ6OlJpZ2h0V29yZF07CiAKLSAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFNlbnRlbmNlVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtl
ciJdKSB7Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNl
ZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFt0ZXh0TWFya2VyLCBwcm90ZWN0ZWRTZWxmID0gUmV0
YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gUmV0YWlu
UHRyPGlkPiB7Ci0gICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYuZ2V0KCku
YXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7Ci0gICAgICAgICAgICBpZiAoIWNhY2hl
KQotICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhMZWZ0TGluZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkKKyAg
ICAgICAgcmV0dXJuIFtzZWxmIGxpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyOnRleHRN
YXJrZXIgZm9yVW5pdDpUZXh0VW5pdDo6TGVmdExpbmVdOwogCi0gICAgICAgICAgICBDaGFyYWN0
ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gW3Byb3RlY3RlZFNlbGYgY2hhcmFjdGVyT2Zmc2V0
Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXTsKLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBjYWNoZS0+c2VudGVuY2VGb3JDaGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0KTsK
LSAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFu
Z2U6cmFuZ2VdOwotICAgICAgICB9KTsKLSAgICB9CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhSaWdodExpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pCisg
ICAgICAgIHJldHVybiBbc2VsZiBsaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcjp0ZXh0
TWFya2VyIGZvclVuaXQ6VGV4dFVuaXQ6OlJpZ2h0TGluZV07CiAKLSAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJr
ZXIiXSkgewotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFz
ZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbdGV4dE1hcmtlciwgcHJvdGVjdGVkU2VsZiA9IFJl
dGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IFJldGFp
blB0cjxpZD4gewotICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLmdldCgp
LmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwotICAgICAgICAgICAgaWYgKCFjYWNo
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzpAIkFYU2VudGVuY2VUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pCisg
ICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VBdFRleHRNYXJrZXI6dGV4dE1hcmtl
ciBmb3JVbml0OlRleHRVbml0OjpTZW50ZW5jZV07CiAKLSAgICAgICAgICAgIENoYXJhY3Rlck9m
ZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbcHJvdGVjdGVkU2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JU
ZXh0TWFya2VyOnRleHRNYXJrZXJdOwotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IGNhY2hlLT5wYXJhZ3JhcGhGb3JDaGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0KTsKLSAg
ICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6
cmFuZ2VdOwotICAgICAgICB9KTsKLSAgICB9CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRv
U3RyaW5nOkAiQVhQYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pCisgICAg
ICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VBdFRleHRNYXJrZXI6dGV4dE1hcmtlciBm
b3JVbml0OlRleHRVbml0OjpQYXJhZ3JhcGhdOwogCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhOZXh0V29yZEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKLSAg
ICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9t
TWFpblRocmVhZDxpZD4oW3RleHRNYXJrZXIsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8aWQ+IHsK
LSAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdP
YmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKLSAgICAgICAgICAgIGlmICghY2FjaGUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
QCJBWE5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkKKyAgICAgICAgcmV0dXJu
IFtzZWxmIHRleHRNYXJrZXJGb3JUZXh0TWFya2VyOnRleHRNYXJrZXIgYXRVbml0OlRleHRVbml0
OjpOZXh0V29yZEVuZF07CiAKLSAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJP
ZmZzZXQgPSBbcHJvdGVjdGVkU2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOnRleHRN
YXJrZXJdOwotICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IG5leHRFbmQgPSBjYWNoZS0+bmV4
dFdvcmRFbmRDaGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0KTsKLSAgICAgICAgICAgIHJl
dHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0Om5leHRFbmRd
OwotICAgICAgICB9KTsKLSAgICB9CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
OkAiQVhQcmV2aW91c1dvcmRTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pCisgICAgICAg
IHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyIGF0VW5pdDpU
ZXh0VW5pdDo6UHJldmlvdXNXb3JkU3RhcnRdOwogCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhQcmV2aW91c1dvcmRTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0p
IHsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFs
dWVGcm9tTWFpblRocmVhZDxpZD4oW3RleHRNYXJrZXIsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5Q
dHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8
aWQ+IHsKLSAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJh
Y2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKLSAgICAgICAgICAgIGlmICghY2FjaGUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6QCJBWE5leHRMaW5lRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkKKyAgICAgICAg
cmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JUZXh0TWFya2VyOnRleHRNYXJrZXIgYXRVbml0OlRl
eHRVbml0OjpOZXh0TGluZUVuZF07CiAKLSAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFy
YWN0ZXJPZmZzZXQgPSBbcHJvdGVjdGVkU2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2Vy
OnRleHRNYXJrZXJdOwotICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IHByZXZpb3VzU3RhcnQg
PSBjYWNoZS0+cHJldmlvdXNXb3JkU3RhcnRDaGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0
KTsKLSAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyRm9yQ2hhcmFj
dGVyT2Zmc2V0OnByZXZpb3VzU3RhcnRdOwotICAgICAgICB9KTsKLSAgICB9CisgICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2aW91c0xpbmVTdGFydFRleHRNYXJrZXJG
b3JUZXh0TWFya2VyIl0pCisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVGV4dE1h
cmtlcjp0ZXh0TWFya2VyIGF0VW5pdDpUZXh0VW5pdDo6UHJldmlvdXNMaW5lU3RhcnRdOwogCi0g
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0TGluZUVuZFRleHRNYXJr
ZXJGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3Mg
PSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAg
ICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOmJhY2tpbmdPYmpl
Y3QtPm5leHRMaW5lRW5kUG9zaXRpb24odmlzaWJsZVBvcyldOwotICAgIH0KKyAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRTZW50ZW5jZUVuZFRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyIl0pCisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVGV4dE1hcmtl
cjp0ZXh0TWFya2VyIGF0VW5pdDpUZXh0VW5pdDo6TmV4dFNlbnRlbmNlRW5kXTsKIAotICAgIGlm
IChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNMaW5lU3RhcnRUZXh0TWFy
a2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9z
ID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAg
ICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpiYWNraW5nT2Jq
ZWN0LT5wcmV2aW91c0xpbmVTdGFydFBvc2l0aW9uKHZpc2libGVQb3MpXTsKLSAgICB9CisgICAg
aWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2aW91c1NlbnRlbmNlU3RhcnRU
ZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKQorICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtl
ckZvclRleHRNYXJrZXI6dGV4dE1hcmtlciBhdFVuaXQ6VGV4dFVuaXQ6OlByZXZpb3VzU2VudGVu
Y2VTdGFydF07CiAKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRT
ZW50ZW5jZUVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAgcmV0dXJuIEFj
Y2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4o
W3RleHRNYXJrZXIsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8aWQ+IHsKLSAgICAgICAgICAgIGF1
dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0
Q2FjaGUoKTsKLSAgICAgICAgICAgIGlmICghY2FjaGUpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRQYXJhZ3Jh
cGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKQorICAgICAgICByZXR1cm4gW3NlbGYgdGV4
dE1hcmtlckZvclRleHRNYXJrZXI6dGV4dE1hcmtlciBhdFVuaXQ6VGV4dFVuaXQ6Ok5leHRQYXJh
Z3JhcGhFbmRdOwogCi0gICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0
ID0gW3Byb3RlY3RlZFNlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2Vy
XTsKLSAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBuZXh0RW5kID0gY2FjaGUtPm5leHRTZW50
ZW5jZUVuZENoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQpOwotICAgICAgICAgICAgcmV0
dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6bmV4dEVuZF07
Ci0gICAgICAgIH0pOwotICAgIH0KKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
QCJBWFByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKQorICAg
ICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclRleHRNYXJrZXI6dGV4dE1hcmtlciBhdFVu
aXQ6VGV4dFVuaXQ6OlByZXZpb3VzUGFyYWdyYXBoU3RhcnRdOwogCi0gICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2aW91c1NlbnRlbmNlU3RhcnRUZXh0TWFya2VyRm9y
VGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1
dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFt0ZXh0TWFya2VyLCBwcm90ZWN0ZWRT
ZWxmID0gUmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkg
LT4gUmV0YWluUHRyPGlkPiB7Ci0gICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNl
bGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7Ci0gICAgICAgICAgICBp
ZiAoIWNhY2hlKQorICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYU3R5bGVU
ZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2li
aWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZ0ZXh0
TWFya2VyLCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluV3JhcHBlcihzZWxmKV0gKCkgLT4gUmV0YWlu
UHRyPGlkPiB7CisgICAgICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2Vs
Zi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7CisgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3Qp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgICAgICAgICAgQ2hhcmFjdGVyT2Zm
c2V0IGNoYXJhY3Rlck9mZnNldCA9IFtwcm90ZWN0ZWRTZWxmIGNoYXJhY3Rlck9mZnNldEZvclRl
eHRNYXJrZXI6dGV4dE1hcmtlcl07Ci0gICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlv
dXNTdGFydCA9IGNhY2hlLT5wcmV2aW91c1NlbnRlbmNlU3RhcnRDaGFyYWN0ZXJPZmZzZXQoY2hh
cmFjdGVyT2Zmc2V0KTsKLSAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFy
a2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OnByZXZpb3VzU3RhcnRdOwotICAgICAgICB9KTsKLSAgICB9
Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRQYXJhZ3JhcGhF
bmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFt0ZXh0TWFy
a2VyLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyPihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7Ci0gICAgICAgICAgICBhdXRvKiBjYWNo
ZSA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7
CisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUo
KTsKICAgICAgICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsK
IAotICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IFtwcm90ZWN0
ZWRTZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl07Ci0gICAgICAg
ICAgICBDaGFyYWN0ZXJPZmZzZXQgbmV4dEVuZCA9IGNhY2hlLT5uZXh0UGFyYWdyYXBoRW5kQ2hh
cmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9mZnNldCk7Ci0gICAgICAgICAgICByZXR1cm4gW3Byb3Rl
Y3RlZFNlbGYgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpuZXh0RW5kXTsKKyAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2Vy
KGNhY2hlLCB0ZXh0TWFya2VyKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5n
ZSA9IGJhY2tpbmdPYmplY3QtPnN0eWxlUmFuZ2VGb3JQb3NpdGlvbih2aXNpYmxlUG9zKTsKKyAg
ICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9z
aXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwogICAgICAgICB9
KTsKICAgICB9CiAKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZp
b3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIHJl
dHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJl
YWQ8aWQ+KFt0ZXh0TWFya2VyLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7Ci0gICAgICAg
ICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5h
eE9iamVjdENhY2hlKCk7Ci0gICAgICAgICAgICBpZiAoIWNhY2hlKQotICAgICAgICAgICAgICAg
IHJldHVybiBuaWw7CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMZW5n
dGhGb3JUZXh0TWFya2VyUmFuZ2UiXSkgeworICAgICAgICBpbnQgbGVuZ3RoID0gQWNjZXNzaWJp
bGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGludD4oWyZ0ZXh0TWFya2VyUmFuZ2Us
IHByb3RlY3RlZFNlbGYgPSByZXRhaW5XcmFwcGVyKHNlbGYpXSAoKSAtPiBpbnQgeworICAgICAg
ICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5n
T2JqZWN0OworICAgICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQorICAgICAgICAgICAgICAg
IHJldHVybiAwOwogCi0gICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0
ID0gW3Byb3RlY3RlZFNlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2Vy
XTsKLSAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBwcmV2aW91c1N0YXJ0ID0gY2FjaGUtPnBy
ZXZpb3VzUGFyYWdyYXBoU3RhcnRDaGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0KTsKLSAg
ICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zm
c2V0OnByZXZpb3VzU3RhcnRdOworICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtw
cm90ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07Cisg
ICAgICAgICAgICByZXR1cm4gQVhPYmplY3RDYWNoZTo6bGVuZ3RoRm9yUmFuZ2UocmFuZ2UuZ2V0
KCkpOwogICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6QCJBWFN0eWxlVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAg
IFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4
dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJh
bmdlID0gYmFja2luZ09iamVjdC0+c3R5bGVSYW5nZUZvclBvc2l0aW9uKHZpc2libGVQb3MpOwot
ICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6
dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07Ci0gICAgfQotCi0gICAgaWYg
KFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMZW5ndGhGb3JUZXh0TWFya2VyUmFuZ2Ui
XSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0TWFy
a2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKLSAgICAgICAgaW50IGxlbmd0aCA9IEFYT2JqZWN0
Q2FjaGU6Omxlbmd0aEZvclJhbmdlKHJhbmdlLmdldCgpKTsKICAgICAgICAgaWYgKGxlbmd0aCA8
IDApCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51
bWJlcldpdGhJbnQ6bGVuZ3RoXTsKQEAgLTQyMzQsMTMgKzQzNDcsMTcgQEAgQUxMT1dfREVQUkVD
QVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICAvLyBVc2VkIG9ubHkgYnkgRHVtcFJlbmRl
clRyZWUgKHNvIGZhcikuCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhT
dGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UiXSkgewotICAgICAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdl
XTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2U6cmFu
Z2UgaXNTdGFydDpZRVNdOworICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVB
dXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJnRleHRNYXJrZXJSYW5nZSwgcHJv
dGVjdGVkU2VsZiA9IHJldGFpbldyYXBwZXIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4gewor
ICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtwcm90ZWN0ZWRTZWxmIHJhbmdlRm9y
VGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07CisgICAgICAgICAgICByZXR1cm4gW3By
b3RlY3RlZFNlbGYgc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZTpyYW5nZSBpc1N0YXJ0OllF
U107CisgICAgICAgIH0pOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpAIkFYRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSJdKSB7Ci0gICAgICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBbc2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFy
a2VyUmFuZ2VdOwotICAgICAgICByZXR1cm4gW3NlbGYgc3RhcnRPckVuZFRleHRNYXJrZXJGb3JS
YW5nZTpyYW5nZSBpc1N0YXJ0Ok5PXTsKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJl
dHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZ0ZXh0TWFya2VyUmFu
Z2UsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5XcmFwcGVyKHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8
aWQ+IHsKKyAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBbcHJvdGVjdGVkU2VsZiBy
YW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOworICAgICAgICAgICAgcmV0
dXJuIFtwcm90ZWN0ZWRTZWxmIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2U6cmFuZ2UgaXNT
dGFydDpOT107CisgICAgICAgIH0pOwogICAgIH0KIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lO
RykK
</data>

          </attachment>
      

    </bug>

</bugzilla>