<?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>110071</bug_id>
          
          <creation_ts>2013-02-17 19:43:40 -0800</creation_ts>
          <short_desc>AX: Upstream iOS Accessibility files</short_desc>
          <delta_ts>2013-02-17 21:57:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="chris fleizach">cfleizach</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>ddkilzer</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>835088</commentid>
    <comment_count>0</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-02-17 19:43:40 -0800</bug_when>
    <thetext>Add in the iOS accessibility files so that changes are easier to sync between platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835089</commentid>
    <comment_count>1</comment_count>
      <attachid>188790</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-02-17 19:45:54 -0800</bug_when>
    <thetext>Created attachment 188790
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835097</commentid>
    <comment_count>2</comment_count>
      <attachid>188790</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-02-17 20:22:59 -0800</bug_when>
    <thetext>Comment on attachment 188790
patch

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

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:26078
&gt;  				B22279740D00BF220071B782 /* SVGAElement.h in Headers */,
&gt; +				AAA728F716D1D8BC00D3BBC6 /* AccessibilityObjectWrapperIOS.h in Headers */,
&gt;  				24D912B113CA9A1F00D21915 /* SVGAltGlyphDefElement.h in Headers */,

Would be nice to sort this alphabetically.

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:28383
&gt;  				1C5FAED10DCFD90100D58F78 /* JSJavaScriptCallFrame.cpp in Sources */,
&gt; +				AAA728F616D1D8BC00D3BBC6 /* AccessibilityObjectIOS.mm in Sources */,
&gt;  				1C5FAEE70DCFDA6800D58F78 /* JSJavaScriptCallFrameCustom.cpp in Sources */,

Ditto.

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:29166
&gt;  				9BD0BF9412A42BF50072FD43 /* ScopedEventQueue.cpp in Sources */,
&gt; +				AAA728F816D1D8BC00D3BBC6 /* AccessibilityObjectWrapperIOS.mm in Sources */,
&gt;  				BCEC01BD0C274DAC009F4EC9 /* Screen.cpp in Sources */,

Ditto.

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:29402
&gt;  				B222799B0D00BF220071B782 /* SVGCircleElement.cpp in Sources */,
&gt; +				AAA728F916D1D8BC00D3BBC6 /* AXObjectCacheIOS.mm in Sources */,
&gt;  				B222799E0D00BF220071B782 /* SVGClipPathElement.cpp in Sources */,

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835106</commentid>
    <comment_count>3</comment_count>
      <attachid>188793</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-02-17 21:15:41 -0800</bug_when>
    <thetext>Created attachment 188793
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835108</commentid>
    <comment_count>4</comment_count>
      <attachid>188793</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-02-17 21:23:55 -0800</bug_when>
    <thetext>Comment on attachment 188793
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835126</commentid>
    <comment_count>5</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-02-17 21:57:55 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/143143</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188790</attachid>
            <date>2013-02-17 19:45:54 -0800</date>
            <delta_ts>2013-02-17 21:15:41 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>98972</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDE2NCBAQAogMjAxMy0wMi0xNyAgQ2hyaXMg
RmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCisgICAgICAgIEFYOiBVcHN0cmVhbSBp
T1MgQWNjZXNzaWJpbGl0eSBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTEwMDcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXBzdHJlYW0gdGhlIGlPUyBBY2Nlc3NpYmlsaXR5IGZpbGVzIGZvciBX
ZWJDb3JlLiAKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvczogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmRldGFjaFdyYXBwZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcik6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpmcmFtZUxvYWRpbmdFdmVudFBs
YXRmb3JtTm90aWZpY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Omhh
bmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OmhhbmRsZVNjcm9sbGVkVG9BbmNob3IpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1MubW06IEFkZGVkLgorICAgICAgICAoLVtXQUtWaWV3
IGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRdKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6ZGV0YWNoRnJvbVBhcmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpvdmVycmlkZUF0dGFjaG1lbnRQYXJlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eVBh
c3N3b3JkRmllbGRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dDo6YWNjZXNzaWJpbGl0eUlnbm9yZUF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eVBsYXRmb3JtSW5jbHVkZXNPYmplY3QpOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
Lmg6IEFkZGVkLgorICAgICAgICAoV0FLVmlldyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9p
b3MvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06IEFkZGVkLgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIgaW5pdFdpdGhUZXh0TWFya2VyOmNhY2hlOl0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBpbml0V2l0aERhdGE6Y2FjaGU6XSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIGluaXRXaXRoRGF0YTphY2Nlc3NpYmlsaXR5T2Jq
ZWN0Ol0pOgorICAgICAgICAoK1tXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2Vy
V2l0aFZpc2libGVQb3NpdGlvbjpjYWNoZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIgZGF0YVJlcHJlc2VudGF0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyIHZpc2libGVQb3NpdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciBkZXNjcmlwdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBpbml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGRldGFjaF0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eU9iamVj
dF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5Q2FuRnV6enlIaXRUZXN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIGFjY2Vzc2liaWxpdHlQb3N0UHJvY2Vzc0hpdFRlc3Q6XSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlIaXRUZXN0Ol0pOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5RWxlbWVu
dENvdW50XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vz
c2liaWxpdHlFbGVtZW50QXRJbmRleDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgaW5kZXhPZkFjY2Vzc2liaWxpdHlFbGVtZW50Ol0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5TGFuZ3VhZ2VdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlJc0xh
bmRtYXJrUm9sZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
X2FjY2Vzc2liaWxpdHlMaXN0QW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlMYW5kbWFya0FuY2VzdG9yXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5VGFibGVBbmNl
c3Rvcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNz
aWJpbGl0eVRyYWl0c0Zyb21BbmNlc3RvcnNdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVRyYWl0c10pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkZXRlcm1pbmVJc0FjY2Vzc2liaWxpdHlFbGVtZW50XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGlzQWNjZXNzaWJpbGl0
eUVsZW1lbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc3Ry
aW5nVmFsdWVTaG91bGRCZVVzZWRJbkxhYmVsXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlMYWJlbF0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0YWJsZUNlbGxQYXJlbnRdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGFibGVQYXJlbnRdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVRpdGxlRWxlbWVudF0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SGVh
ZGVyRWxlbWVudHNdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
YWNjZXNzaWJpbGl0eUVsZW1lbnRGb3JSb3c6YW5kQ29sdW1uOl0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5Um93UmFuZ2VdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUNvbHVtblJh
bmdlXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlQbGFjZWhvbGRlclZhbHVlXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlWYWx1ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SXNDb21ib0JveF0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SGludF0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5VVJMXSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9jb252ZXJ0SW50UmVjdFRv
U2NyZWVuQ29vcmRpbmF0ZXM6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIGFjY2Vzc2liaWxpdHlFbGVtZW50UmVjdF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QWN0aXZhdGlvblBvaW50XSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlGcmFtZV0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBjb250YWluc1VubmF0
dXJhbGx5U2VnbWVudGVkQ2hpbGRyZW5dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUNvbnRhaW5lcl0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudF0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVdl
YkRvY3VtZW50Vmlld10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBfYWNjZXNzaWJpbGl0eU5leHRFbGVtZW50c1dpdGhDb3VudDpdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlQcmV2aW91c0VsZW1lbnRz
V2l0aENvdW50Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBh
Y2Nlc3NpYmlsaXR5UmVxdWlyZWRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgYWNjZXNzaWJpbGl0eUZsb3dUb0VsZW1lbnRzXSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlMaW5rZWRFbGVtZW50XSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGlzQXR0YWNobWVudF0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eUFj
dGl2YXRlXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGF0dGFj
aG1lbnRWaWV3XSk6CisgICAgICAgIChyZW5kZXJlckZvclZpZXcpOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVBhcmVudEZvclN1YnZpZXc6
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHBvc3RGb2N1c0No
YW5nZU5vdGlmaWNhdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBwb3N0U2VsZWN0ZWRUZXh0Q2hhbmdlTm90aWZpY2F0aW9uXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHBvc3RMYXlvdXRDaGFuZ2VOb3RpZmljYXRpb25d
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgcG9zdExpdmVSZWdp
b25DaGFuZ2VOb3RpZmljYXRpb25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgcG9zdExvYWRDb21wbGV0ZU5vdGlmaWNhdGlvbl0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBwb3N0Q2hpbGRyZW5DaGFuZ2VkTm90aWZpY2F0aW9u
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHBvc3RJbnZhbGlk
U3RhdHVzQ2hhbmdlZE5vdGlmaWNhdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5RWxlbWVudERpZEJlY29tZUZvY3VzZWRdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eU1vZGlm
eVNlbGVjdGlvbjppbmNyZWFzZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgYWNjZXNzaWJpbGl0eUluY3JlYXNlU2VsZWN0aW9uOl0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5RGVjcmVhc2VTZWxlY3Rp
b246XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlNb3ZlU2VsZWN0aW9uVG9NYXJrZXI6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJbmNyZW1lbnRdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eURlY3JlbWVudF0pOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWRkQWNjZXNzaWJpbGl0eU9i
amVjdDp0b1RleHRNYXJrZXJBcnJheTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgc3RyaW5nRm9yVGV4dE1hcmtlcnM6XSk6CisgICAgICAgIChibG9ja3F1b3Rl
TGV2ZWwpOgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRCbG9ja3F1b3RlTGV2ZWwpOgor
ICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRIZWFkaW5nTGV2ZWwpOgorICAgICAgICAoQVhB
dHRyaWJ1dGVTdHJpbmdTZXRGb250KToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0TnVt
YmVyKToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUpOgorICAgICAgICAoQVhB
dHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dCk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFycmF5T2ZUZXh0Rm9yVGV4dE1hcmtlcnM6YXR0cmlidXRlZDpdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2NvbnZlcnRUb05TUmFuZ2U6
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9jb252ZXJ0VG9E
T01SYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgcG9z
aXRpb25Gb3JUZXh0TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgZWxlbWVudFRleHRSYW5nZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yVGV4dE1hcmtlcjpdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdlRm9y
U2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRl
eHRNYXJrZXJGb3JQb3NpdGlvbjpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgX3N0cmluZ0ZvclJhbmdlOmF0dHJpYnV0ZWQ6XSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHN0cmluZ0ZvclJhbmdlOl0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGVsZW1lbnRzRm9yUmFu
Z2U6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHNlbGVjdGlv
blJhbmdlU3RyaW5nXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IHNlbGVjdGVkVGV4dE1hcmtlcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBsaW5lRW5kTWFya2VyRm9yTWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBsaW5lU3RhcnRNYXJrZXJGb3JNYXJrZXI6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIG5leHRNYXJrZXJGb3JNYXJrZXI6XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHByZXZpb3VzTWFya2Vy
Rm9yTWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBm
cmFtZUZvclRleHRNYXJrZXJzOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciB0ZXh0TWFya2VyRm9yUG9pbnQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJZGVudGlmaWVyXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlTcGVlY2hIaW50XSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBUklB
SXNCdXN5XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vz
c2liaWxpdHlBUklBTGl2ZVJlZ2lvblN0YXR1c10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QVJJQVJlbGV2YW50U3RhdHVzXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBUklBTGl2
ZVJlZ2lvbklzQXRvbWljXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIGFjY2Vzc2liaWxpdHlJbnZhbGlkU3RhdHVzXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlNYXRoUm9vdEluZGV4T2JqZWN0XSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlNYXRo
UmFkaWNhbmRPYmplY3RdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgYWNjZXNzaWJpbGl0eU1hdGhOdW1lcmF0b3JPYmplY3RdKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eU1hdGhEZW5vbWluYXRvck9iamVj
dF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5TWF0aEJhc2VPYmplY3RdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgYWNjZXNzaWJpbGl0eU1hdGhTdWJzY3JpcHRPYmplY3RdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eU1hdGhTdXBlcnNjcmlwdE9i
amVjdF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3Np
YmlsaXR5TWF0aFVuZGVyT2JqZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlNYXRoT3Zlck9iamVjdF0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZE9wZW5TdHJp
bmddKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJp
bGl0eU1hdGhGZW5jZWRDbG9zZVN0cmluZ10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SXNNYXRoVG9wT2JqZWN0XSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlNYXRoVHlwZV0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5U2V0
UG9zdGVkTm90aWZpY2F0aW9uQ2FsbGJhY2s6d2l0aENvbnRleHQ6XSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmljYXRp
b246V2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGRlc2NyaXB0aW9uXSk6CisKKzIwMTMtMDItMTcgIENocmlzIEZsZWl6
YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKwogICAgICAgICBBWDogcmVuYW1lIFdlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIHRvIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFz
ZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMDYx
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDE0MzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDY3MSw2ICs0NjcxLDEw
IEBACiAJCUFBN0ZFRUE4MTZBNEU2RjMwMDRDMEMzMyAvKiBKU1NwZWVjaFN5bnRoZXNpc1ZvaWNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBN0ZF
RUEwMTZBNEU2RjMwMDRDMEMzMyAvKiBKU1NwZWVjaFN5bnRoZXNpc1ZvaWNlLmNwcCAqLzsgfTsK
IAkJQUE3RkVFQTkxNkE0RTZGMzAwNEMwQzMzIC8qIEpTU3BlZWNoU3ludGhlc2lzVm9pY2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBN0ZFRUExMTZB
NEU2RjMwMDRDMEMzMyAvKiBKU1NwZWVjaFN5bnRoZXNpc1ZvaWNlLmggKi87IH07CiAJCUFBN0ZF
RUFEMTZBNEU3NEIwMDRDMEMzMyAvKiBKU1NwZWVjaFN5bnRoZXNpcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE3RkVFQUMxNkE0RTc0QjAwNEMwQzMz
IC8qIEpTU3BlZWNoU3ludGhlc2lzLmggKi87IH07CisJCUFBQTcyOEY2MTZEMUQ4QkMwMEQzQkJD
NiAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQUFBNzI4RjAxNkQxRDhCQzAwRDNCQkM2IC8qIEFjY2Vzc2li
aWxpdHlPYmplY3RJT1MubW0gKi87IH07CisJCUFBQTcyOEY3MTZEMUQ4QkMwMEQzQkJDNiAvKiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQUFBNzI4RjExNkQxRDhCQzAwRDNCQkM2IC8qIEFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVySU9TLmggKi87IH07CisJCUFBQTcyOEY4MTZEMUQ4QkMwMEQzQkJD
NiAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBQTcyOEYyMTZEMUQ4QkMwMEQzQkJDNiAvKiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSAqLzsgfTsKKwkJQUFBNzI4RjkxNkQxRDhC
QzAwRDNCQkM2IC8qIEFYT2JqZWN0Q2FjaGVJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQUE3MjhGMzE2RDFEOEJDMDBEM0JCQzYgLyogQVhPYmpl
Y3RDYWNoZUlPUy5tbSAqLzsgfTsKIAkJQUFCNjA1NEUxNTg3NEM1ODAwN0I1MDMxIC8qIEluamVj
dGVkU2NyaXB0QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBQUI2MDU0QTE1ODc0QzU4MDA3QjUwMzEgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNw
cCAqLzsgfTsKIAkJQUFCNjA1NEYxNTg3NEM1ODAwN0I1MDMxIC8qIEluamVjdGVkU2NyaXB0QmFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUFCNjA1
NEIxNTg3NEM1ODAwN0I1MDMxIC8qIEluamVjdGVkU2NyaXB0QmFzZS5oICovOyB9OwogCQlBQUI2
MDU1MDE1ODc0QzU4MDA3QjUwMzEgLyogSW5qZWN0ZWRTY3JpcHRNb2R1bGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUFCNjA1NEMxNTg3NEM1ODAw
N0I1MDMxIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmNwcCAqLzsgfTsKQEAgLTEyMDY4LDYgKzEy
MDcyLDEwIEBACiAJCUFBN0ZFRUFDMTZBNEU3NEIwMDRDMEMzMyAvKiBKU1NwZWVjaFN5bnRoZXNp
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NwZWVjaFN5bnRoZXNpcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQTkwMzBGRTE1N0UxNkEwMDAyNzYyNDcg
LyogSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IHBhdGggPSBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5q
czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUE5MTI3NTAxNTdFMzVBNTAwNDU0RTU0
IC8qIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBQTcyOEYwMTZEMUQ4QkMwMEQzQkJDNiAvKiBBY2Nl
c3NpYmlsaXR5T2JqZWN0SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQWNjZXNzaWJpbGl0eU9iamVjdElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQUFBNzI4RjExNkQxRDhCQzAwRDNCQkM2IC8qIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVySU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVySU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBQTcyOEYy
MTZEMUQ4QkMwMEQzQkJDNiAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBQUE3MjhGMzE2RDFE
OEJDMDBEM0JCQzYgLyogQVhPYmplY3RDYWNoZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IEFYT2JqZWN0Q2FjaGVJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFBQjYwNTRBMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdEJh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRTY3Jp
cHRCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUFCNjA1NEIxNTg3NEM1
ODAwN0I1MDMxIC8qIEluamVjdGVkU2NyaXB0QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbmplY3RlZFNjcmlwdEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQUFCNjA1NEMxNTg3NEM1ODAwN0I1MDMxIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkU2NyaXB0TW9k
dWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1MzU2LDYgKzE1MzY0LDcg
QEAKIAkJMjlBODEyMDQwRkJCOUI0MTAwNTEwMjkzIC8qIGFjY2Vzc2liaWxpdHkgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUFBQTcyOEVGMTZEMUQ4QkMw
MEQzQkJDNiAvKiBpb3MgKi8sCiAJCQkJMjlBODEyMDUwRkJCOUI1MjAwNTEwMjkzIC8qIG1hYyAq
LywKIAkJCQkwRjI5QzE2RDEzMDBDMkUyMDAyRDc5NEUgLyogQWNjZXNzaWJpbGl0eUFsbEluT25l
LmNwcCAqLywKIAkJCQkyOTgxQ0E5RDEzMTgyMkVDMDBEMTJGMkEgLyogQWNjZXNzaWJpbGl0eUFS
SUFHcmlkLmNwcCAqLywKQEAgLTE5OTA4LDYgKzE5OTE3LDE3IEBACiAJCQluYW1lID0gU3BlZWNo
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQUFBNzI4RUYxNkQxRDhCQzAw
RDNCQkM2IC8qIGlvcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJQUFBNzI4RjAxNkQxRDhCQzAwRDNCQkM2IC8qIEFjY2Vzc2liaWxpdHlPYmplY3RJT1Mu
bW0gKi8sCisJCQkJQUFBNzI4RjExNkQxRDhCQzAwRDNCQkM2IC8qIEFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLmggKi8sCisJCQkJQUFBNzI4RjIxNkQxRDhCQzAwRDNCQkM2IC8qIEFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tICovLAorCQkJCUFBQTcyOEYzMTZEMUQ4QkMwMEQz
QkJDNiAvKiBBWE9iamVjdENhY2hlSU9TLm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBpb3M7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMUE5NDJERDE1QjVDRTIyMDBENTI1
RDEgLyogbWVkaWFzb3VyY2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKApAQCAtMjYwNTQsNiArMjYwNzQsNyBAQAogCQkJCTA4NzU1OEM2MTNCNEE1N0QwMEY0OTMw
NyAvKiBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTYyQzEyMTdEMTFBQjlFNzcwMDNDNDYyQyAvKiBTdXNwZW5kYWJsZVRpbWVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMjIyNzk3NDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQUVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUFBQTcyOEY3MTZEMUQ4QkMwMEQzQkJDNiAvKiBBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlcklPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjREOTEyQjExM0NBOUExRjAw
RDIxOTE1IC8qIFNWR0FsdEdseXBoRGVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2
NTNGMkUwRDk3MjdEMjAwQ0E5NzIzIC8qIFNWR0FsdEdseXBoRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjREOTEyQjgxM0NBOUE2OTAwRDIxOTE1IC8qIFNWR0FsdEdseXBoSXRlbUVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjgzNTgsNiArMjgzNzksNyBAQAogCQkJCTQ5RUVDRjA0
MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NDlDN0I5OTUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFDNUZBRUQxMERDRkQ5MDEwMEQ1OEY3OCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQUFBNzI4RjYxNkQxRDhCQzAwRDNCQkM2IC8qIEFjY2Vz
c2liaWxpdHlPYmplY3RJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQzVGQUVFNzBEQ0ZEQTY4
MDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4NjYyOUQ0MDlEQTJCNDgwMDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM1RjQ1NDIwRjdDM0I1RjAwRDdDMUZCIC8qIEpTTGF6eUV2ZW50
TGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTE0MCw2ICsyOTE2Miw3IEBACiAJCQkJ
MUNFMjRGOTcwRDdDQUYwRTAwN0UwNEMyIC8qIFNjaGVkdWxlUGFpck1hYy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxNjJDN0Y0MTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5QkQwQkY5NDEyQTQyQkY1MDA3MkZENDMgLyogU2NvcGVkRXZl
bnRRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBQUE3MjhGODE2RDFEOEJDMDBEM0JCQzYg
LyogQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlC
Q0VDMDFCRDBDMjc0REFDMDA5RjRFQzkgLyogU2NyZWVuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE4NEQ4MkMyMTFEMzQ3NDgwMDk3Mjk5MCAvKiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRjM5QkU5NUIxMjY3M0JGNDAwRTBBNjc0IC8qIFNjcmlwdEFy
Z3VtZW50cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5Mzc1LDYgKzI5Mzk4LDcgQEAKIAkJCQlC
MjIyNzk5NzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwOEZCMTdDMTEzQkM3RTkxMDAwNDAwODYgLyogU1ZHQXR0cmlidXRlVG9Q
cm9wZXJ0eU1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzk5QjBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHQ2lyY2xlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBQUE3MjhGOTE2
RDFEOEJDMDBEM0JCQzYgLyogQVhPYmplY3RDYWNoZUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUIyMjI3OTlFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDbGlwUGF0aEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjIyMjc5QTEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NvbG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyMjI3OUE0MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJJT1MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQg
YnkgQXBwbGUgdG8gdXNlIHRoaXMgZmlsZSB0byB0aGUgZXh0ZW50CisgKiBuZWNlc3NhcnkgdG8g
cmVsaW5rIHdpdGggTEdQTCBXZWJLaXQgZmlsZXMuCisgKgorICogTm8gbGljZW5zZSBvciByaWdo
dHMgYXJlIGdyYW50ZWQgYnkgQXBwbGUgZXhwcmVzc2x5IG9yIGJ5CisgKiBpbXBsaWNhdGlvbiwg
ZXN0b3BwZWwsIG9yIG90aGVyd2lzZSwgdG8gQXBwbGUgcGF0ZW50cyBhbmQKKyAqIHRyYWRlbWFy
a3MuIEZvciB0aGUgc2FrZSBvZiBjbGFyaXR5LCBubyBsaWNlbnNlIG9yIHJpZ2h0cyBhcmUKKyAq
IGdyYW50ZWQgYnkgQXBwbGUgZXhwcmVzc2x5IG9yIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCwg
b3Igb3RoZXJ3aXNlLAorICogdW5kZXIgYW55IEFwcGxlIHBhdGVudHMsIGNvcHlyaWdodHMgYW5k
IHRyYWRlbWFya3MgdG8gdW5kZXJseWluZworICogaW1wbGVtZW50YXRpb25zIG9mIGFueSBhcHBs
aWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIChBUElzKQorICogb3IgdG8gYW55IGZ1bmN0
aW9uYWxpdHkgdGhhdCBpcyBpbnZva2VkIGJ5IGNhbGxpbmcgYW55IEFQSS4KKyAqLworCisjaWZu
ZGVmIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TX2gKKyNkZWZpbmUgQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJJT1NfaAorCisjaWYgSEFWRShBQ0NFU1NJQklMSVRZKSAmJiBQTEFURk9S
TShJT1MpCisKKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiQWNjZXNzaWJp
bGl0eU9iamVjdC5oIgorCitAY2xhc3MgV0FLVmlldzsKKworQGludGVyZmFjZSBXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciA6IE5TT2JqZWN0IHsKKyAgICBXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0KiBtX29iamVjdDsKKyAgICAKKyAgICAvLyBDYWNoZWQgZGF0YSB0byBhdm9pZCBm
cmVxdWVudCByZS1jb21wdXRhdGlvbi4KKyAgICBpbnQgbV9pc0FjY2Vzc2liaWxpdHlFbGVtZW50
OworICAgIHVpbnQ2NF90IG1fYWNjZXNzaWJpbGl0eVRyYWl0c0Zyb21BbmNlc3RvcjsKK30KKwor
LSAoaWQpaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0OihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0KilheE9iamVjdDsKKy0gKHZvaWQpZGV0YWNoOworLSAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdCopYWNjZXNzaWJpbGl0eU9iamVjdDsKKworLSAoaWQpYWNjZXNzaWJpbGl0eUhp
dFRlc3Q6KENHUG9pbnQpcG9pbnQ7CistIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciAqKWFj
Y2Vzc2liaWxpdHlQb3N0UHJvY2Vzc0hpdFRlc3Q6KENHUG9pbnQpcG9pbnQ7CistIChCT09MKWFj
Y2Vzc2liaWxpdHlDYW5GdXp6eUhpdFRlc3Q7CisKKy0gKEJPT0wpaXNBY2Nlc3NpYmlsaXR5RWxl
bWVudDsKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUxhYmVsOworLSAoQ0dSZWN0KWFjY2Vz
c2liaWxpdHlGcmFtZTsKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eVZhbHVlOworCistIChO
U0ludGVnZXIpYWNjZXNzaWJpbGl0eUVsZW1lbnRDb3VudDsKKy0gKGlkKWFjY2Vzc2liaWxpdHlF
bGVtZW50QXRJbmRleDooTlNJbnRlZ2VyKWluZGV4OworLSAoTlNJbnRlZ2VyKWluZGV4T2ZBY2Nl
c3NpYmlsaXR5RWxlbWVudDooaWQpZWxlbWVudDsKKworLSAoQk9PTClpc0F0dGFjaG1lbnQ7Cist
IChXQUtWaWV3ICopYXR0YWNobWVudFZpZXc7CisKKy0gKHZvaWQpcG9zdEZvY3VzQ2hhbmdlTm90
aWZpY2F0aW9uOworLSAodm9pZClwb3N0U2VsZWN0ZWRUZXh0Q2hhbmdlTm90aWZpY2F0aW9uOwor
LSAodm9pZClwb3N0TGF5b3V0Q2hhbmdlTm90aWZpY2F0aW9uOworLSAodm9pZClwb3N0TGl2ZVJl
Z2lvbkNoYW5nZU5vdGlmaWNhdGlvbjsKKy0gKHZvaWQpcG9zdExvYWRDb21wbGV0ZU5vdGlmaWNh
dGlvbjsKKy0gKHZvaWQpcG9zdENoaWxkcmVuQ2hhbmdlZE5vdGlmaWNhdGlvbjsKKy0gKHZvaWQp
cG9zdEludmFsaWRTdGF0dXNDaGFuZ2VkTm90aWZpY2F0aW9uOworCisvLyBVc2VkIHRvIGluZm9y
bSBhbiBlbGVtZW50IHdoZW4gYSBub3RpZmljYXRpb24gaXMgcG9zdGVkIGZvciBpdC4gVXNlZCBi
eSBEUlQuCistICh2b2lkKWFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmljYXRpb246KFdlYkNvcmU6
OkFYT2JqZWN0Q2FjaGU6OkFYTm90aWZpY2F0aW9uKW5vdGlmaWNhdGlvbjsKKworQGVuZAorCisj
ZW5kaWYKKworI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1Mu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNz
aWJpbGl0eU9iamVjdElPUy5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1MubW0JKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiQWNjZXNz
aWJpbGl0eU9iamVjdC5oIgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oIgor
I2ltcG9ydCAiSFRNTElucHV0RWxlbWVudC5oIgorI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCisj
aW1wb3J0ICJXQUtWaWV3LmgiCisKKyNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpICYmIFBMQVRGT1JN
KElPUykKKworI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MuaCIKKworQGlu
dGVyZmFjZSBXQUtWaWV3IChpT1NBY2Nlc3NpYmlsaXR5KQorLSAoQk9PTClhY2Nlc3NpYmlsaXR5
SXNJZ25vcmVkOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0FLVmlldyAoaU9TQWNjZXNzaWJp
bGl0eSkKKworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkCit7CisgICAgcmV0dXJuIFlF
UzsKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit2b2lkIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OmRldGFjaEZyb21QYXJlbnQoKQoreworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlPYmplY3Q6Om92ZXJyaWRlQXR0YWNobWVudFBhcmVudChBY2Nlc3NpYmlsaXR5T2JqZWN0KikK
K3sKK30KKyAgICAKKy8vIEluIGlQaG9uZSBvbmx5IGNvZGUgZm9yIG5vdy4gSXQncyBkZWJhdGVh
YmxlIHdoZXRoZXIgdGhpcyBpcyBkZXNpcmVkIG9uIGFsbCBwbGF0Zm9ybXMuCitpbnQgQWNjZXNz
aWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eVBhc3N3b3JkRmllbGRMZW5ndGgoKQoreworICAg
IGlmICghaXNQYXNzd29yZEZpZWxkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIFJlbmRlck9i
amVjdCogcmVuZGVyT2JqZWN0ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dCo+KHRoaXMpLT5yZW5kZXJlcigpOworICAgIAorICAgIGlmICghcmVuZGVyT2JqZWN0IHx8ICFy
ZW5kZXJPYmplY3QtPm5vZGUoKSB8fCAhcmVuZGVyT2JqZWN0LT5ub2RlKCktPmlzSFRNTEVsZW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihyZW5kZXJPYmpl
Y3QtPm5vZGUoKSk7CisgICAgaWYgKCFpbnB1dEVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50LT52YWx1ZSgpLmxlbmd0aCgpOworfQor
Citib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFjY2Vzc2liaWxpdHlJZ25vcmVBdHRhY2htZW50
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gW1t3cmFwcGVyKCkgYXR0YWNobWVudFZpZXddIGFjY2Vz
c2liaWxpdHlJc0lnbm9yZWRdOworfQorICAgIAorQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lv
biBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5UGxhdGZvcm1JbmNsdWRlc09iamVj
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIERlZmF1bHRCZWhhdmlvcjsKK30KKyAgICAKK30gLy8g
V2ViQ29yZQorCisjZW5kaWYgLy8gSEFWRShBQ0NFU1NJQklMSVRZKSAmJiBQTEFURk9STShJT1Mp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVySU9TLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwNjkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBObyBs
aWNlbnNlIG9yIHJpZ2h0cyBhcmUgZ3JhbnRlZCBieSBBcHBsZSBleHByZXNzbHkgb3IgYnkgaW1w
bGljYXRpb24sCisgKiBlc3RvcHBlbCwgb3Igb3RoZXJ3aXNlLCB0byBBcHBsZSBjb3B5cmlnaHRz
LCBwYXRlbnRzLCB0cmFkZW1hcmtzLCB0cmFkZQorICogc2VjcmV0cyBvciBvdGhlciByaWdodHMu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcklPUy5oIgorCisjaWYgSEFWRShBQ0NFU1NJQklMSVRZKSAmJiBQTEFURk9STShJT1Mp
CisKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCIKKyNpbXBvcnQgIkFjY2Vz
c2liaWxpdHlUYWJsZS5oIgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5oIgorI2lt
cG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRnJhbWUuaCIKKyNpbXBvcnQgIkZyYW1lU2VsZWN0aW9u
LmgiCisjaW1wb3J0ICJGcmFtZVZpZXcuaCIKKyNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKKyNp
bXBvcnQgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgorI2ltcG9ydCAiSFRNTElucHV0RWxlbWVu
dC5oIgorI2ltcG9ydCAiSFRNTE5hbWVzLmgiCisjaW1wb3J0ICJJbnRSZWN0LmgiCisjaW1wb3J0
ICJJbnRTaXplLmgiCisjaW1wb3J0ICJSYW5nZS5oIgorI2ltcG9ydCAiUmVuZGVyVmlldy5oIgor
I2ltcG9ydCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgiCisjaW1wb3J0ICJUZXh0SXRl
cmF0b3IuaCIKKyNpbXBvcnQgIldBS1Njcm9sbFZpZXcuaCIKKyNpbXBvcnQgIldBS1ZpZXcuaCIK
KyNpbXBvcnQgIldBS1dpbmRvdy5oIgorI2ltcG9ydCAiV2ViQ29yZVRocmVhZC5oIgorI2ltcG9y
dCAidmlzaWJsZV91bml0cy5oIgorCisjaW1wb3J0IDxHcmFwaGljc1NlcnZpY2VzL0dyYXBoaWNz
U2VydmljZXMuaD4KKworQGludGVyZmFjZSBOU09iamVjdCAoQWNjZXNzaWJpbGl0eVByaXZhdGUp
CistICh2b2lkKV9hY2Nlc3NpYmlsaXR5VW5yZWdpc3RlcjsKKy0gKE5TU3RyaW5nICopYWNjZXNz
aWJpbGl0eUxhYmVsOworLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5VmFsdWU7CistIChCT09M
KWlzQWNjZXNzaWJpbGl0eUVsZW1lbnQ7CistIChOU0ludGVnZXIpYWNjZXNzaWJpbGl0eUVsZW1l
bnRDb3VudDsKKy0gKGlkKWFjY2Vzc2liaWxpdHlFbGVtZW50QXRJbmRleDooTlNJbnRlZ2VyKWlu
ZGV4OworLSAoTlNJbnRlZ2VyKWluZGV4T2ZBY2Nlc3NpYmlsaXR5RWxlbWVudDooaWQpZWxlbWVu
dDsKK0BlbmQKKworQGludGVyZmFjZSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciAoQWNj
ZXNzaWJpbGl0eVByaXZhdGUpCistIChpZClfYWNjZXNzaWJpbGl0eVdlYkRvY3VtZW50VmlldzsK
Ky0gKGlkKWFjY2Vzc2liaWxpdHlDb250YWluZXI7CistICh2b2lkKXNldEFjY2Vzc2liaWxpdHlM
YWJlbDooTlNTdHJpbmcgKilsYWJlbDsKKy0gKHZvaWQpc2V0QWNjZXNzaWJpbGl0eVZhbHVlOihO
U1N0cmluZyAqKXZhbHVlOworLSAoQk9PTCljb250YWluc1VubmF0dXJhbGx5U2VnbWVudGVkQ2hp
bGRyZW47CistIChOU0ludGVnZXIpcG9zaXRpb25Gb3JUZXh0TWFya2VyOihpZCltYXJrZXI7CitA
ZW5kCisKK0BpbnRlcmZhY2UgV0FLVmlldyAoaU9TQWNjZXNzaWJpbGl0eSkKKy0gKEJPT0wpYWNj
ZXNzaWJpbGl0eUlzSWdub3JlZDsKK0BlbmQKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCisvLyBUaGVzZSBhcmUgdG9rZW5zIGFjY2Vzc2li
aWxpdHkgdXNlcyB0byBkZW5vdGUgYXR0cmlidXRlcy4gCitzdGF0aWMgTlNTdHJpbmcgKiBjb25z
dCBVSUFjY2Vzc2liaWxpdHlUb2tlbkJsb2NrcXVvdGVMZXZlbCA9IEAiVUlBY2Nlc3NpYmlsaXR5
VG9rZW5CbG9ja3F1b3RlTGV2ZWwiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgVUlBY2Nlc3Np
YmlsaXR5VG9rZW5IZWFkaW5nTGV2ZWwgPSBAIlVJQWNjZXNzaWJpbGl0eVRva2VuSGVhZGluZ0xl
dmVsIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFVJQWNjZXNzaWJpbGl0eVRva2VuRm9udE5h
bWUgPSBAIlVJQWNjZXNzaWJpbGl0eVRva2VuRm9udE5hbWUiOworc3RhdGljIE5TU3RyaW5nICog
Y29uc3QgVUlBY2Nlc3NpYmlsaXR5VG9rZW5Gb250RmFtaWx5ID0gQCJVSUFjY2Vzc2liaWxpdHlU
b2tlbkZvbnRGYW1pbHkiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgVUlBY2Nlc3NpYmlsaXR5
VG9rZW5Gb250U2l6ZSA9IEAiVUlBY2Nlc3NpYmlsaXR5VG9rZW5Gb250U2l6ZSI7CitzdGF0aWMg
TlNTdHJpbmcgKiBjb25zdCBVSUFjY2Vzc2liaWxpdHlUb2tlbkJvbGQgPSBAIlVJQWNjZXNzaWJp
bGl0eVRva2VuQm9sZCI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBVSUFjY2Vzc2liaWxpdHlU
b2tlbkl0YWxpYyA9IEAiVUlBY2Nlc3NpYmlsaXR5VG9rZW5JdGFsaWMiOworc3RhdGljIE5TU3Ry
aW5nICogY29uc3QgVUlBY2Nlc3NpYmlsaXR5VG9rZW5VbmRlcmxpbmUgPSBAIlVJQWNjZXNzaWJp
bGl0eVRva2VuVW5kZXJsaW5lIjsKKworc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
KiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgKndyYXBwZXIpCit7CisgICAgd2hpbGUgKHdyYXBwZXIgJiYgIVt3cmFwcGVyIGlzQWNjZXNz
aWJpbGl0eUVsZW1lbnRdKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9
IFt3cmFwcGVyIGFjY2Vzc2liaWxpdHlPYmplY3RdOworICAgICAgICBpZiAoIW9iamVjdCkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgaWYgKFt3cmFwcGVyIGlzQXR0YWNo
bWVudF0gJiYgIVtbd3JhcHBlciBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUlzSWdub3Jl
ZF0pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBwYXJlbnRPYmplY3QgPSBvYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgp
OworICAgICAgICBpZiAoIXBhcmVudE9iamVjdCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIHdyYXBwZXIgPSBwYXJlbnRPYmplY3QtPndyYXBwZXIoKTsKKyAgICB9CisgICAgcmV0dXJu
IHdyYXBwZXI7Cit9CisKKyNwcmFnbWEgbWFyayBBY2Nlc3NpYmlsaXR5IFRleHQgTWFya2VyCisK
K0BpbnRlcmZhY2UgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgOiBOU09iamVjdAoreworICAg
IEFYT2JqZWN0Q2FjaGUqIF9jYWNoZTsKKyAgICBUZXh0TWFya2VyRGF0YSBfdGV4dE1hcmtlckRh
dGE7Cit9CisKKysgKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopdGV4dE1hcmtlcldpdGhW
aXNpYmxlUG9zaXRpb246KFZpc2libGVQb3NpdGlvbiYpdmlzaWJsZVBvcyBjYWNoZTooQVhPYmpl
Y3RDYWNoZSopY2FjaGU7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyCisKKy0gKGlkKWluaXRXaXRoVGV4dE1hcmtlcjooVGV4dE1hcmtlckRhdGEg
KilkYXRhIGNhY2hlOihBWE9iamVjdENhY2hlKiljYWNoZQoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9jYWNoZSA9IGNh
Y2hlOworICAgIG1lbWNweSgmX3RleHRNYXJrZXJEYXRhLCBkYXRhLCBzaXplb2YoVGV4dE1hcmtl
ckRhdGEpKTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaWQpaW5pdFdpdGhEYXRhOihOU0Rh
dGEgKilkYXRhIGNhY2hlOihBWE9iamVjdENhY2hlKiljYWNoZQoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9jYWNoZSA9
IGNhY2hlOworICAgIFtkYXRhIGdldEJ5dGVzOiZfdGV4dE1hcmtlckRhdGEgbGVuZ3RoOnNpemVv
ZihUZXh0TWFya2VyRGF0YSldOworICAgIAorICAgIHJldHVybiBzZWxmOworfQorCisvLyBUaGlz
IGlzIG5lZWRlZCBmb3IgZXh0ZXJuYWwgY2xpZW50cyB0byBiZSBhYmxlIHRvIGNyZWF0ZSBhIHRl
eHQgbWFya2VyIHdpdGhvdXQgaGF2aW5nIGEgcG9pbnRlciB0byB0aGUgY2FjaGUuCistIChpZClp
bml0V2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgYWNjZXNzaWJpbGl0eU9iamVjdDooQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgKil3cmFwcGVyCit7CisgICAgV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdCogYXhPYmplY3QgPSBbd3JhcHBlciBhY2Nlc3NpYmlsaXR5T2JqZWN0XTsgCisgICAg
aWYgKCFheE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICByZXR1cm4gW3Nl
bGYgaW5pdFdpdGhEYXRhOmRhdGEgY2FjaGU6YXhPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07Cit9
CisKKysgKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopdGV4dE1hcmtlcldpdGhWaXNpYmxl
UG9zaXRpb246KFZpc2libGVQb3NpdGlvbiYpdmlzaWJsZVBvcyBjYWNoZTooQVhPYmplY3RDYWNo
ZSopY2FjaGUKK3sKKyAgICBUZXh0TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKKyAgICBjYWNo
ZS0+dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRpb24odGV4dE1hcmtlckRhdGEsIHZpc2li
bGVQb3MpOworICAgIAorICAgIHJldHVybiBbW1tXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBh
bGxvY10gaW5pdFdpdGhUZXh0TWFya2VyOiZ0ZXh0TWFya2VyRGF0YSBjYWNoZTpjYWNoZV0gYXV0
b3JlbGVhc2VdOworfQorCistIChOU0RhdGEgKilkYXRhUmVwcmVzZW50YXRpb24KK3sKKyAgICBy
ZXR1cm4gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOiZfdGV4dE1hcmtlckRhdGEgbGVuZ3RoOnNpemVv
ZihUZXh0TWFya2VyRGF0YSldOworfQorCistIChWaXNpYmxlUG9zaXRpb24pdmlzaWJsZVBvc2l0
aW9uCit7CisgICAgcmV0dXJuIF9jYWNoZS0+dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRh
dGEoX3RleHRNYXJrZXJEYXRhKTsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbgorewor
ICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIltBWFRleHRNYXJrZXIgJXBd
ID0gbm9kZTogJXAgb2Zmc2V0OiAlZCIsIHNlbGYsIF90ZXh0TWFya2VyRGF0YS5ub2RlLCBfdGV4
dE1hcmtlckRhdGEub2Zmc2V0XTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIKKworLSAoaWQpaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OihBY2Nlc3NpYmlsaXR5T2JqZWN0KilheE9iamVjdAoreworICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIG1f
b2JqZWN0ID0gYXhPYmplY3Q7CisgICAgCisgICAgLy8gSW5pdGlhbGl6ZSB0byBhIHNlbnRpbmVs
IHZhbHVlLgorICAgIG1fYWNjZXNzaWJpbGl0eVRyYWl0c0Zyb21BbmNlc3RvciA9IFVMTE9OR19N
QVg7CisgICAgbV9pc0FjY2Vzc2liaWxpdHlFbGVtZW50ID0gLTE7CisgICAgCisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpZGV0YWNoCit7CisgICAgLy8gcmRhcjovLzg3OTg5NjAgTWFr
ZSBzdXJlIHRoZSBvYmplY3QgaXMgZ29uZSBlYXJseSwgc28gdGhhdCBhbnl0aGluZyBfYWNjZXNz
aWJpbGl0eVVucmVnaXN0ZXIgCisgICAgLy8gZG9lcyBjYW4ndCBjYWxsIGJhY2sgaW50byB0aGUg
cmVuZGVyIHRyZWUuCisgICAgbV9vYmplY3QgPSAwOworCisgICAgaWYgKFtzZWxmIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoX2FjY2Vzc2liaWxpdHlVbnJlZ2lzdGVyKV0pCisgICAgICAg
IFtzZWxmIF9hY2Nlc3NpYmlsaXR5VW5yZWdpc3Rlcl07Cit9CisKKy0gKHZvaWQpZGVhbGxvYwor
eworICAgIC8vIFdlIHNob3VsZCBoYXZlIGJlZW4gZGV0YWNoZWQgYmVmb3JlIGRlYWxsb2NhdGVk
LgorICAgIEFTU0VSVCghbV9vYmplY3QpOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAo
Qk9PTClfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsCit7CisgICAgLy8gcmRhcjovLzc5ODAzMTgg
aWYgd2Ugc3RhcnQgYSBjYWxsLCB0aGVuIGJsb2NrIGluIFdlYlRocmVhZExvY2soKSwgdGhlbiB3
ZSdyZSBkZWFsbG9jZWQgb24gYW5vdGhlciwgdGhyZWFkLCB3ZSBjb3VsZAorICAgIC8vIGNyYXNo
LCBzbyB3ZSBzaG91bGQgcmV0YWluIG91cnNlbGYgZm9yIHRoZSBkdXJhdGlvbiBvZiB1c2FnZSBo
ZXJlLgorICAgIFtbc2VsZiByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIFdlYlRocmVhZExv
Y2soKTsKKyAgICAKKyAgICAvLyBJZiB3ZSBjYW1lIGJhY2sgZnJvbSBvdXIgdGhyZWFkIGxvY2sg
YW5kIHdlIHdlcmUgZGV0YWNoZWQsIHdlIHdpbGwgbm8gbG9uZ2VyIGhhdmUgYW4gbV9vYmplY3Qu
CisgICAgaWYgKCFtX29iamVjdCkKKyAgICAgICAgcmV0dXJuIE5POworICAgIAorICAgIG1fb2Jq
ZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICBpZiAoIW1fb2JqZWN0KQorICAgICAgICBy
ZXR1cm4gTk87CisgICAgCisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoQWNjZXNzaWJpbGl0eU9i
amVjdCopYWNjZXNzaWJpbGl0eU9iamVjdAoreworICAgIHJldHVybiBtX29iamVjdDsKK30KKwor
Ly8gVGhlc2UgYXJlIGhlcmUgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGltcG9ydCBBWFJ1bnRp
bWUuCisvLyBUaGUgbWV0aG9kcyB3aWxsIGJlIHN3aXp6bGVkIHdoZW4gdGhlIGFjY2Vzc2liaWxp
dHkgYnVuZGxlIGlzIGxvYWRlZC4KKworLSAodWludDY0X3QpX2F4TGlua1RyYWl0IHsgcmV0dXJu
ICgxIDw8IDApOyB9CistICh1aW50NjRfdClfYXhWaXNpdGVkVHJhaXQgeyByZXR1cm4gKDEgPDwg
MSk7IH0KKy0gKHVpbnQ2NF90KV9heEhlYWRlclRyYWl0IHsgcmV0dXJuICgxIDw8IDIpOyB9Cist
ICh1aW50NjRfdClfYXhDb250YWluZWRCeUxpc3RUcmFpdCB7IHJldHVybiAoMSA8PCAzKTsgfQor
LSAodWludDY0X3QpX2F4Q29udGFpbmVkQnlUYWJsZVRyYWl0IHsgcmV0dXJuICgxIDw8IDQpOyB9
CistICh1aW50NjRfdClfYXhDb250YWluZWRCeUxhbmRtYXJrVHJhaXQgeyByZXR1cm4gKDEgPDwg
NSk7IH0KKy0gKHVpbnQ2NF90KV9heFdlYkNvbnRlbnRUcmFpdCB7IHJldHVybiAoMSA8PCA2KTsg
fQorLSAodWludDY0X3QpX2F4U2VjdXJlVGV4dEZpZWxkVHJhaXQgeyByZXR1cm4gKDEgPDwgNyk7
IH0KKy0gKHVpbnQ2NF90KV9heFRleHRFbnRyeVRyYWl0IHsgcmV0dXJuICgxIDw8IDgpOyB9Cist
ICh1aW50NjRfdClfYXhIYXNUZXh0Q3Vyc29yVHJhaXQgeyByZXR1cm4gKDEgPDwgOSk7IH0KKy0g
KHVpbnQ2NF90KV9heFRleHRPcGVyYXRpb25zQXZhaWxhYmxlVHJhaXQgeyByZXR1cm4gKDEgPDwg
MTApOyB9CistICh1aW50NjRfdClfYXhJbWFnZVRyYWl0IHsgcmV0dXJuICgxIDw8IDExKTsgfQor
LSAodWludDY0X3QpX2F4VGFiQnV0dG9uVHJhaXQgeyByZXR1cm4gKDEgPDwgMTIpOyB9CistICh1
aW50NjRfdClfYXhCdXR0b25UcmFpdCB7IHJldHVybiAoMSA8PCAxMyk7IH0KKy0gKHVpbnQ2NF90
KV9heFRvZ2dsZVRyYWl0IHsgcmV0dXJuICgxIDw8IDE0KTsgfQorLSAodWludDY0X3QpX2F4UG9w
dXBCdXR0b25UcmFpdCB7IHJldHVybiAoMSA8PCAxNSk7IH0KKy0gKHVpbnQ2NF90KV9heFN0YXRp
Y1RleHRUcmFpdCB7IHJldHVybiAoMSA8PCAxNik7IH0KKy0gKHVpbnQ2NF90KV9heEFkanVzdGFi
bGVUcmFpdCB7IHJldHVybiAoMSA8PCAxNyk7IH0KKy0gKHVpbnQ2NF90KV9heE1lbnVJdGVtVHJh
aXQgeyByZXR1cm4gKDEgPDwgMTgpOyB9CistICh1aW50NjRfdClfYXhTZWxlY3RlZFRyYWl0IHsg
cmV0dXJuICgxIDw8IDE5KTsgfQorLSAodWludDY0X3QpX2F4Tm90RW5hYmxlZFRyYWl0IHsgcmV0
dXJuICgxIDw8IDIwKTsgfQorLSAodWludDY0X3QpX2F4UmFkaW9CdXR0b25UcmFpdCB7IHJldHVy
biAoMSA8PCAyMSk7IH0KKworLSAoQk9PTClhY2Nlc3NpYmlsaXR5Q2FuRnV6enlIaXRUZXN0Cit7
CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gbV9vYmplY3QtPnJv
bGVWYWx1ZSgpOworICAgIC8vIEVsZW1lbnRzIHRoYXQgY2FuIGJlIHJldHVybmVkIHdoZW4gcGVy
Zm9ybWluZyBmdXp6eSBoaXQgdGVzdGluZy4KKyAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICBjYXNl
IEJ1dHRvblJvbGU6CisgICAgY2FzZSBDaGVja0JveFJvbGU6CisgICAgY2FzZSBDb21ib0JveFJv
bGU6CisgICAgY2FzZSBEaXNjbG9zdXJlVHJpYW5nbGVSb2xlOgorICAgIGNhc2UgSGVhZGluZ1Jv
bGU6CisgICAgY2FzZSBJbWFnZU1hcExpbmtSb2xlOgorICAgIGNhc2UgSW1hZ2VSb2xlOgorICAg
IGNhc2UgTGlua1JvbGU6CisgICAgY2FzZSBMaXN0Qm94Um9sZToKKyAgICBjYXNlIExpc3RCb3hP
cHRpb25Sb2xlOgorICAgIGNhc2UgTWVudUJ1dHRvblJvbGU6CisgICAgY2FzZSBNZW51SXRlbVJv
bGU6CisgICAgY2FzZSBQb3BVcEJ1dHRvblJvbGU6CisgICAgY2FzZSBSYWRpb0J1dHRvblJvbGU6
CisgICAgY2FzZSBTY3JvbGxCYXJSb2xlOgorICAgIGNhc2UgU2xpZGVyUm9sZToKKyAgICBjYXNl
IFN0YXRpY1RleHRSb2xlOgorICAgIGNhc2UgVGFiUm9sZToKKyAgICBjYXNlIFRleHRGaWVsZFJv
bGU6CisgICAgICAgIHJldHVybiAhbV9vYmplY3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCistIChBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciAqKWFjY2Vzc2liaWxpdHlQb3N0UHJvY2Vzc0hpdFRlc3Q6
KENHUG9pbnQpcG9pbnQKK3sKKyAgICBVTlVTRURfUEFSQU0ocG9pbnQpOworICAgIC8vIFRoZSBV
SUtpdCBhY2Nlc3NpYmlsaXR5IHdyYXBwZXIgd2lsbCBvdmVycmlkZSB0aGlzIGFuZCBwZXJmb3Jt
IHRoZSBwb3N0IHByb2Nlc3MgaGl0IHRlc3QuCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoaWQp
YWNjZXNzaWJpbGl0eUhpdFRlc3Q6KENHUG9pbnQpcG9pbnQKK3sKKyAgICBpZiAoIVtzZWxmIF9w
cmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAg
IC8vIFRyeSBhIGZ1enp5IGhpdCB0ZXN0IGZpcnN0IHRvIGZpbmQgYW4gYWNjZXNzaWJsZSBlbGVt
ZW50LgorICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBheE9iamVjdCA9IG1fb2JqZWN0
LT5hY2Nlc3NpYmlsaXR5SGl0VGVzdChJbnRQb2ludChwb2ludCkpOworICAgIGlmICghYXhPYmpl
Y3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgLy8gSWYgdGhpcyBpcyBhIGdvb2Qg
YWNjZXNzaWJsZSBvYmplY3QgdG8gcmV0dXJuLCBubyBleHRyYSB3b3JrIGlzIHJlcXVpcmVkLgor
ICAgIGlmIChbYXhPYmplY3QtPndyYXBwZXIoKSBhY2Nlc3NpYmlsaXR5Q2FuRnV6enlIaXRUZXN0
XSkKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihheE9iamVj
dC0+d3JhcHBlcigpKTsKKyAgICAKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgY2FuIHBvc3Qt
cHJvY2VzcyB0aGlzIGhpdCB0ZXN0IHRvIGZpbmQgYSBiZXR0ZXIgY2FuZGlkYXRlLgorICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gW2F4T2JqZWN0LT53cmFwcGVyKCkg
YWNjZXNzaWJpbGl0eVBvc3RQcm9jZXNzSGl0VGVzdDpwb2ludF07CisgICAgaWYgKHdyYXBwZXIp
CisgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3Iod3JhcHBlcik7
CisgICAgCisgICAgLy8gRmFsbCBiYWNrIHRvIGRlZmF1bHQgYmVoYXZpb3IuCisgICAgcmV0dXJu
IEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihheE9iamVjdC0+d3JhcHBlcigpKTsgICAg
Cit9CisKKy0gKE5TSW50ZWdlcilhY2Nlc3NpYmlsaXR5RWxlbWVudENvdW50Cit7CisgICAgaWYg
KCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIGlmIChbc2VsZiBpc0F0dGFjaG1lbnRdKQorICAgICAgICByZXR1cm4gW1tzZWxmIGF0
dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5RWxlbWVudENvdW50XTsKKyAgICAKKyAgICByZXR1
cm4gbV9vYmplY3QtPmNoaWxkcmVuKCkuc2l6ZSgpOworfQorCistIChpZClhY2Nlc3NpYmlsaXR5
RWxlbWVudEF0SW5kZXg6KE5TSW50ZWdlcilpbmRleAoreworICAgIGlmICghW3NlbGYgX3ByZXBh
cmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoW3Nl
bGYgaXNBdHRhY2htZW50XSkKKyAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10g
YWNjZXNzaWJpbGl0eUVsZW1lbnRBdEluZGV4OmluZGV4XTsKKyAgICAKKyAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBtX29iamVj
dC0+Y2hpbGRyZW4oKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA+PSBj
aGlsZHJlbi5zaXplKCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBjaGlsZHJlbltpbmRleF0tPndyYXBwZXIoKTsK
KyAgICBpZiAoY2hpbGRyZW5baW5kZXhdLT5pc0F0dGFjaG1lbnQoKSkKKyAgICAgICAgcmV0dXJu
IFt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XTsKKworICAgIHJldHVybiB3cmFwcGVyOworfQorCist
IChOU0ludGVnZXIpaW5kZXhPZkFjY2Vzc2liaWxpdHlFbGVtZW50OihpZCllbGVtZW50Cit7Cisg
ICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJu
IE5TTm90Rm91bmQ7CisgICAgCisgICAgaWYgKFtzZWxmIGlzQXR0YWNobWVudF0pCisgICAgICAg
IHJldHVybiBbW3NlbGYgYXR0YWNobWVudFZpZXddIGluZGV4T2ZBY2Nlc3NpYmlsaXR5RWxlbWVu
dDplbGVtZW50XTsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICB1bnNp
Z25lZCBjb3VudCA9IGNoaWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBr
IDwgY291bnQ7ICsraykgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogd3Jh
cHBlciA9IGNoaWxkcmVuW2tdLT53cmFwcGVyKCk7CisgICAgICAgIGlmICh3cmFwcGVyID09IGVs
ZW1lbnQgfHwgKGNoaWxkcmVuW2tdLT5pc0F0dGFjaG1lbnQoKSAmJiBbd3JhcHBlciBhdHRhY2ht
ZW50Vmlld10gPT0gZWxlbWVudCkpCisgICAgICAgICAgICByZXR1cm4gazsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIE5TTm90Rm91bmQ7Cit9CisKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0
eUxhbmd1YWdlCit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICByZXR1cm4gbV9vYmplY3QtPmxhbmd1YWdl
KCk7Cit9CisKKy0gKEJPT0wpX2FjY2Vzc2liaWxpdHlJc0xhbmRtYXJrUm9sZTooQWNjZXNzaWJp
bGl0eVJvbGUpcm9sZQoreworICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIExhbmRt
YXJrQXBwbGljYXRpb25Sb2xlOgorICAgICAgICBjYXNlIExhbmRtYXJrQmFubmVyUm9sZToKKyAg
ICAgICAgY2FzZSBMYW5kbWFya0NvbXBsZW1lbnRhcnlSb2xlOgorICAgICAgICBjYXNlIExhbmRt
YXJrQ29udGVudEluZm9Sb2xlOgorICAgICAgICBjYXNlIExhbmRtYXJrTWFpblJvbGU6CisgICAg
ICAgIGNhc2UgTGFuZG1hcmtOYXZpZ2F0aW9uUm9sZToKKyAgICAgICAgY2FzZSBMYW5kbWFya1Nl
YXJjaFJvbGU6CisgICAgICAgICAgICByZXR1cm4gWUVTOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIE5POworICAgIH0gICAgCit9CisKKy0gKEFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyKilfYWNjZXNzaWJpbGl0eUxpc3RBbmNlc3RvcgoreworICAgIGZvciAoQWNjZXNz
aWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdCgpOyBwYXJlbnQg
IT0gbmlsOyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7CisgICAgICAgIEFjY2Vz
c2liaWxpdHlSb2xlIHJvbGUgPSBwYXJlbnQtPnJvbGVWYWx1ZSgpOworICAgICAgICBpZiAocm9s
ZSA9PSBMaXN0Um9sZSB8fCByb2xlID09IExpc3RCb3hSb2xlKQorICAgICAgICAgICAgcmV0dXJu
IHBhcmVudC0+d3JhcHBlcigpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbmlsOworfQorCist
IChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlMYW5kbWFya0FuY2Vz
dG9yCit7CisgICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+
cGFyZW50T2JqZWN0KCk7IHBhcmVudCAhPSBuaWw7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2Jq
ZWN0KCkpIHsKKyAgICAgICAgaWYgKFtzZWxmIF9hY2Nlc3NpYmlsaXR5SXNMYW5kbWFya1JvbGU6
cGFyZW50LT5yb2xlVmFsdWUoKV0pCisgICAgICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVy
KCk7CisgICAgfQorCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIqKV9hY2Nlc3NpYmlsaXR5VGFibGVBbmNlc3RvcgoreworICAgIGZvciAoQWNjZXNz
aWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdCgpOyBwYXJlbnQg
IT0gbmlsOyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7CisgICAgICAgIGlmIChw
YXJlbnQtPnJvbGVWYWx1ZSgpID09IFRhYmxlUm9sZSkKKyAgICAgICAgICAgIHJldHVybiBwYXJl
bnQtPndyYXBwZXIoKTsgICAKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAo
dWludDY0X3QpX2FjY2Vzc2liaWxpdHlUcmFpdHNGcm9tQW5jZXN0b3JzCit7CisgICAgdWludDY0
X3QgdHJhaXRzID0gMDsKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gbV9vYmplY3QtPnJv
bGVWYWx1ZSgpOworICAgIAorICAgIC8vIFRyYWl0IGluZm9ybWF0aW9uIGFsc28gbmVlZHMgdG8g
YmUgZ2F0aGVyZWQgZnJvbSB0aGUgcGFyZW50cyBhYm92ZSB0aGUgb2JqZWN0LgorICAgIC8vIFRo
ZSBwYXJlbnRPYmplY3QgaXMgbmVlZGVkIGluc3RlYWQgb2YgdGhlIHVuaWdub3JlZFBhcmVudE9i
amVjdCwgYmVjYXVzZSBhIHRhYmxlIG1pZ2h0IGJlIGlnbm9yZWQsIGJ1dCBpbmZvcm1hdGlvbiBz
dGlsbCBuZWVkcyB0byBiZSBnYXRoZXJlZCBmcm9tIGl0LiAgICAKKyAgICBmb3IgKEFjY2Vzc2li
aWxpdHlPYmplY3QqIHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50ICE9
IG5pbDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgeworICAgICAgICBBY2Nlc3Np
YmlsaXR5Um9sZSBwYXJlbnRSb2xlID0gcGFyZW50LT5yb2xlVmFsdWUoKTsKKyAgICAgICAgaWYg
KHBhcmVudFJvbGUgPT0gV2ViQXJlYVJvbGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgICAgIHN3aXRjaCAocGFyZW50Um9sZSkgeworICAgICAgICAgICAgY2FzZSBMaW5rUm9s
ZToKKyAgICAgICAgICAgIGNhc2UgV2ViQ29yZUxpbmtSb2xlOgorICAgICAgICAgICAgICAgIHRy
YWl0cyB8PSBbc2VsZiBfYXhMaW5rVHJhaXRdOworICAgICAgICAgICAgICAgIGlmIChwYXJlbnQt
PmlzVmlzaXRlZCgpKQorICAgICAgICAgICAgICAgICAgICB0cmFpdHMgfD0gW3NlbGYgX2F4Vmlz
aXRlZFRyYWl0XTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSGVh
ZGluZ1JvbGU6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJhaXRzIHw9IFtzZWxm
IF9heEhlYWRlclRyYWl0XTsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIG9iamVjdCBoYXMg
dGhlIGhlYWRlciB0cmFpdCwgd2Ugc2hvdWxkIHNldCB0aGUgdmFsdWUKKyAgICAgICAgICAgICAg
ICAvLyB0byB0aGUgaGVhZGluZyBsZXZlbC4gSWYgaXQgd2FzIGEgc3RhdGljIHRleHQgZWxlbWVu
dCwgd2UgbmVlZCB0byBzdG9yZQorICAgICAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSBhcyB0aGUg
bGFiZWwsIGJlY2F1c2UgdGhlIGhlYWRpbmcgbGV2ZWwgbmVlZHMgdG8gdGhlIHZhbHVlLgorICAg
ICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gcGFyZW50
LT53cmFwcGVyKCk7CisgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0gU3RhdGljVGV4dFJvbGUp
IAorICAgICAgICAgICAgICAgICAgICBbc2VsZiBzZXRBY2Nlc3NpYmlsaXR5TGFiZWw6bV9vYmpl
Y3QtPnN0cmluZ1ZhbHVlKCldOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBbc2Vs
ZiBzZXRBY2Nlc3NpYmlsaXR5VmFsdWU6W3dyYXBwZXIgYWNjZXNzaWJpbGl0eVZhbHVlXV07Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIExp
c3RCb3hSb2xlOgorICAgICAgICAgICAgY2FzZSBMaXN0Um9sZToKKyAgICAgICAgICAgICAgICB0
cmFpdHMgfD0gW3NlbGYgX2F4Q29udGFpbmVkQnlMaXN0VHJhaXRdOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBUYWJsZVJvbGU6CisgICAgICAgICAgICAgICAgdHJh
aXRzIHw9IFtzZWxmIF9heENvbnRhaW5lZEJ5VGFibGVUcmFpdF07CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChbc2VsZiBf
YWNjZXNzaWJpbGl0eUlzTGFuZG1hcmtSb2xlOnBhcmVudFJvbGVdKQorICAgICAgICAgICAgICAg
ICAgICB0cmFpdHMgfD0gW3NlbGYgX2F4Q29udGFpbmVkQnlMYW5kbWFya1RyYWl0XTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJh
aXRzOworfQorCistICh1aW50NjRfdClhY2Nlc3NpYmlsaXR5VHJhaXRzCit7CisgICAgaWYgKCFb
c2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
CisgICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IG1fb2JqZWN0LT5yb2xlVmFsdWUoKTsKKyAg
ICB1aW50NjRfdCB0cmFpdHMgPSBbc2VsZiBfYXhXZWJDb250ZW50VHJhaXRdOworICAgIHN3aXRj
aCAocm9sZSkgeworICAgICAgICBjYXNlIExpbmtSb2xlOgorICAgICAgICBjYXNlIFdlYkNvcmVM
aW5rUm9sZToKKyAgICAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhMaW5rVHJhaXRdOworICAg
ICAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1Zpc2l0ZWQoKSkKKyAgICAgICAgICAgICAgICB0cmFp
dHMgfD0gW3NlbGYgX2F4VmlzaXRlZFRyYWl0XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAvLyBUZXh0RmllbGRSb2xlIGlzIGludGVuZGVkIHRvIGZhbGwgdGhyb3VnaCB0byBUZXh0QXJl
YVJvbGUsIGluIG9yZGVyIHRvIHBpY2sgdXAgdGhlIHRleHQgZW50cnkgYW5kIHRleHQgY3Vyc29y
IHRyYWl0cy4KKyAgICAgICAgY2FzZSBUZXh0RmllbGRSb2xlOgorICAgICAgICAgICAgaWYgKG1f
b2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSkKKyAgICAgICAgICAgICAgICB0cmFpdHMgfD0gW3Nl
bGYgX2F4U2VjdXJlVGV4dEZpZWxkVHJhaXRdOworICAgICAgICBjYXNlIFRleHRBcmVhUm9sZToK
KyAgICAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhUZXh0RW50cnlUcmFpdF07ICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAobV9vYmplY3QtPmlzRm9jdXNlZCgpKQorICAgICAgICAgICAg
ICAgIHRyYWl0cyB8PSAoW3NlbGYgX2F4SGFzVGV4dEN1cnNvclRyYWl0XSB8IFtzZWxmIF9heFRl
eHRPcGVyYXRpb25zQXZhaWxhYmxlVHJhaXRdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEltYWdlUm9sZToKKyAgICAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhJbWFnZVRy
YWl0XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRhYlJvbGU6CisgICAgICAg
ICAgICB0cmFpdHMgfD0gW3NlbGYgX2F4VGFiQnV0dG9uVHJhaXRdOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQnV0dG9uUm9sZToKKyAgICAgICAgICAgIHRyYWl0cyB8PSBbc2Vs
ZiBfYXhCdXR0b25UcmFpdF07CisgICAgICAgICAgICBpZiAobV9vYmplY3QtPmlzUHJlc3NlZCgp
KQorICAgICAgICAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhUb2dnbGVUcmFpdF07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQb3BVcEJ1dHRvblJvbGU6CisgICAgICAgICAg
ICB0cmFpdHMgfD0gW3NlbGYgX2F4UG9wdXBCdXR0b25UcmFpdF07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBSYWRpb0J1dHRvblJvbGU6CisgICAgICAgICAgICB0cmFpdHMgfD0g
W3NlbGYgX2F4UmFkaW9CdXR0b25UcmFpdF0gfCBbc2VsZiBfYXhUb2dnbGVUcmFpdF07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDaGVja0JveFJvbGU6CisgICAgICAgICAgICB0
cmFpdHMgfD0gKFtzZWxmIF9heEJ1dHRvblRyYWl0XSB8IFtzZWxmIF9heFRvZ2dsZVRyYWl0XSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIZWFkaW5nUm9sZToKKyAgICAgICAg
ICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhIZWFkZXJUcmFpdF07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBTdGF0aWNUZXh0Um9sZToKKyAgICAgICAgICAgIHRyYWl0cyB8PSBbc2Vs
ZiBfYXhTdGF0aWNUZXh0VHJhaXRdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
U2xpZGVyUm9sZToKKyAgICAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhBZGp1c3RhYmxlVHJh
aXRdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWVudUJ1dHRvblJvbGU6Cisg
ICAgICAgIGNhc2UgTWVudUl0ZW1Sb2xlOgorICAgICAgICAgICAgdHJhaXRzIHw9IFtzZWxmIF9h
eE1lbnVJdGVtVHJhaXRdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAobV9vYmplY3QtPmlzU2VsZWN0ZWQo
KSkKKyAgICAgICAgdHJhaXRzIHw9IFtzZWxmIF9heFNlbGVjdGVkVHJhaXRdOworCisgICAgaWYg
KCFtX29iamVjdC0+aXNFbmFibGVkKCkpCisgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhOb3RF
bmFibGVkVHJhaXRdOworICAgIAorICAgIGlmIChtX2FjY2Vzc2liaWxpdHlUcmFpdHNGcm9tQW5j
ZXN0b3IgPT0gVUxMT05HX01BWCkKKyAgICAgICAgbV9hY2Nlc3NpYmlsaXR5VHJhaXRzRnJvbUFu
Y2VzdG9yID0gW3NlbGYgX2FjY2Vzc2liaWxpdHlUcmFpdHNGcm9tQW5jZXN0b3JzXTsKKyAgICAK
KyAgICB0cmFpdHMgfD0gbV9hY2Nlc3NpYmlsaXR5VHJhaXRzRnJvbUFuY2VzdG9yOworCisgICAg
cmV0dXJuIHRyYWl0czsKK30KKworLSAoQk9PTClkZXRlcm1pbmVJc0FjY2Vzc2liaWxpdHlFbGVt
ZW50Cit7CisgICAgaWYgKCFtX29iamVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIC8vIEhvbm9yIHdoZW4gc29tZXRoaW5nIGV4cGxpY2l0bHkgbWFrZXMgdGhpcyBhbiBlbGVt
ZW50IChzdXBlciB3aWxsIGNvbnRhaW4gdGhhdCBsb2dpYykgCisgICAgaWYgKFtzdXBlciBpc0Fj
Y2Vzc2liaWxpdHlFbGVtZW50XSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAKKyAgICBtX29i
amVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgCisgICAgc3dpdGNoIChtX29iamVjdC0+
cm9sZVZhbHVlKCkpIHsKKyAgICAgICAgY2FzZSBUZXh0RmllbGRSb2xlOgorICAgICAgICBjYXNl
IFRleHRBcmVhUm9sZToKKyAgICAgICAgY2FzZSBCdXR0b25Sb2xlOgorICAgICAgICBjYXNlIFBv
cFVwQnV0dG9uUm9sZToKKyAgICAgICAgY2FzZSBDaGVja0JveFJvbGU6CisgICAgICAgIGNhc2Ug
UmFkaW9CdXR0b25Sb2xlOgorICAgICAgICBjYXNlIFNsaWRlclJvbGU6CisgICAgICAgIGNhc2Ug
TWVudUJ1dHRvblJvbGU6CisgICAgICAgIGNhc2UgVmFsdWVJbmRpY2F0b3JSb2xlOgorICAgICAg
ICBjYXNlIEltYWdlUm9sZToKKyAgICAgICAgY2FzZSBNZW51SXRlbVJvbGU6CisgICAgICAgIGNh
c2UgSW5jcmVtZW50b3JSb2xlOgorICAgICAgICBjYXNlIENvbWJvQm94Um9sZToKKyAgICAgICAg
Y2FzZSBEaXNjbG9zdXJlVHJpYW5nbGVSb2xlOgorICAgICAgICBjYXNlIEltYWdlTWFwUm9sZToK
KyAgICAgICAgY2FzZSBMaXN0TWFya2VyUm9sZToKKyAgICAgICAgY2FzZSBMaXN0Qm94T3B0aW9u
Um9sZToKKyAgICAgICAgY2FzZSBUYWJSb2xlOgorICAgICAgICBjYXNlIERvY3VtZW50TWF0aFJv
bGU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBTdGF0aWNUZXh0Um9s
ZToKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTWFueSB0ZXh0IGVsZW1lbnRzIG9ubHkgY29u
dGFpbiBhIHNwYWNlLgorICAgICAgICAgICAgaWYgKCFbW1tzZWxmIGFjY2Vzc2liaWxpdHlMYWJl
bF0gc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQgd2hpdGVz
cGFjZUNoYXJhY3RlclNldF1dIGxlbmd0aF0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgICAgICAvLyBUZXh0IGVsZW1lbnRzIHRoYXQgYXJlIGp1c3QgcGllY2VzIG9m
IGxpbmtzIG9yIGhlYWRlcnMgc2hvdWxkIG5vdCBiZSBleHBvc2VkLgorICAgICAgICAgICAgaWYg
KFtBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoW3NlbGYgYWNjZXNzaWJpbGl0eUNvbnRh
aW5lcl0pIGNvbnRhaW5zVW5uYXR1cmFsbHlTZWdtZW50ZWRDaGlsZHJlbl0pCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAvLyBEb24ndCBleHBvc2UgaGVhZGVycyBhcyBlbGVtZW50
czsgaW5zdGVhZCBleHBvc2UgdGhlaXIgY2hpbGRyZW4gYXMgZWxlbWVudHMsIHdpdGggdGhlIGhl
YWRlciB0cmFpdCAodW5sZXNzIHRoZXkgaGF2ZSBubyBjaGlsZHJlbikKKyAgICAgICAgY2FzZSBI
ZWFkaW5nUm9sZToKKyAgICAgICAgICAgIGlmICghW3NlbGYgYWNjZXNzaWJpbGl0eUVsZW1lbnRD
b3VudF0pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gTGlua3MgY2FuIHNvbWV0aW1lcyBiZSBl
bGVtZW50cyAod2hlbiB0aGV5IG9ubHkgY29udGFpbiBzdGF0aWMgdGV4dCBvciBkb24ndCBjb250
YWluIGFueXRoaW5nKS4KKyAgICAgICAgLy8gVGhleSBzaG91bGQgbm90IGJlIGVsZW1lbnRzIHdo
ZW4gY29udGFpbmluZyB0ZXh0IGFuZCBvdGhlciB0eXBlcy4KKyAgICAgICAgY2FzZSBXZWJDb3Jl
TGlua1JvbGU6CisgICAgICAgIGNhc2UgTGlua1JvbGU6CisgICAgICAgICAgICBpZiAoW3NlbGYg
Y29udGFpbnNVbm5hdHVyYWxseVNlZ21lbnRlZENoaWxkcmVuXSB8fCAhW3NlbGYgYWNjZXNzaWJp
bGl0eUVsZW1lbnRDb3VudF0pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gQWxsIG90aGVyIGVsZW1lbnRzIGFyZSBp
Z25vcmVkIG9uIHRoZSBpcGhvbmUuCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNhc2UgVW5r
bm93blJvbGU6CisgICAgICAgIGNhc2UgVGFiR3JvdXBSb2xlOgorICAgICAgICBjYXNlIFNjcm9s
bEFyZWFSb2xlOgorICAgICAgICBjYXNlIFRhYmxlUm9sZToKKyAgICAgICAgY2FzZSBBcHBsaWNh
dGlvblJvbGU6CisgICAgICAgIGNhc2UgR3JvdXBSb2xlOgorICAgICAgICBjYXNlIFJhZGlvR3Jv
dXBSb2xlOgorICAgICAgICBjYXNlIExpc3RSb2xlOgorICAgICAgICBjYXNlIExpc3RCb3hSb2xl
OgorICAgICAgICBjYXNlIFNjcm9sbEJhclJvbGU6CisgICAgICAgIGNhc2UgTWVudUJhclJvbGU6
CisgICAgICAgIGNhc2UgTWVudVJvbGU6CisgICAgICAgIGNhc2UgQ29sdW1uUm9sZToKKyAgICAg
ICAgY2FzZSBSb3dSb2xlOgorICAgICAgICBjYXNlIFRvb2xiYXJSb2xlOgorICAgICAgICBjYXNl
IEJ1c3lJbmRpY2F0b3JSb2xlOgorICAgICAgICBjYXNlIFByb2dyZXNzSW5kaWNhdG9yUm9sZToK
KyAgICAgICAgY2FzZSBXaW5kb3dSb2xlOgorICAgICAgICBjYXNlIERyYXdlclJvbGU6CisgICAg
ICAgIGNhc2UgU3lzdGVtV2lkZVJvbGU6CisgICAgICAgIGNhc2UgT3V0bGluZVJvbGU6CisgICAg
ICAgIGNhc2UgQnJvd3NlclJvbGU6CisgICAgICAgIGNhc2UgU3BsaXRHcm91cFJvbGU6CisgICAg
ICAgIGNhc2UgU3BsaXR0ZXJSb2xlOgorICAgICAgICBjYXNlIENvbG9yV2VsbFJvbGU6CisgICAg
ICAgIGNhc2UgR3Jvd0FyZWFSb2xlOgorICAgICAgICBjYXNlIFNoZWV0Um9sZToKKyAgICAgICAg
Y2FzZSBIZWxwVGFnUm9sZToKKyAgICAgICAgY2FzZSBNYXR0ZVJvbGU6CisgICAgICAgIGNhc2Ug
UnVsZXJSb2xlOgorICAgICAgICBjYXNlIFJ1bGVyTWFya2VyUm9sZToKKyAgICAgICAgY2FzZSBH
cmlkUm9sZToKKyAgICAgICAgY2FzZSBXZWJBcmVhUm9sZToKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKKy0gKEJPT0wpaXNBY2Nlc3NpYmlsaXR5RWxlbWVudAoreworICAg
IGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBO
TzsKKyAgICAKKyAgICBpZiAobV9pc0FjY2Vzc2liaWxpdHlFbGVtZW50ID09IC0xKQorICAgICAg
ICBtX2lzQWNjZXNzaWJpbGl0eUVsZW1lbnQgPSBbc2VsZiBkZXRlcm1pbmVJc0FjY2Vzc2liaWxp
dHlFbGVtZW50XTsKKyAgICAKKyAgICByZXR1cm4gbV9pc0FjY2Vzc2liaWxpdHlFbGVtZW50Owor
fQorCistIChCT09MKXN0cmluZ1ZhbHVlU2hvdWxkQmVVc2VkSW5MYWJlbAoreworICAgIGlmICht
X29iamVjdC0+aXNUZXh0Q29udHJvbCgpKQorICAgICAgICByZXR1cm4gTk87CisgICAgaWYgKG1f
b2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBQb3BVcEJ1dHRvblJvbGUpCisgICAgICAgIHJldHVybiBO
TzsKKyAgICAKKyAgICByZXR1cm4gWUVTOworfQorCistIChOU1N0cmluZyAqKWFjY2Vzc2liaWxp
dHlMYWJlbAoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICAvLyBjaGVjayBpZiB0aGUgbGFiZWwgd2FzIG92ZXJy
aWRlbgorICAgIE5TU3RyaW5nICpsYWJlbCA9IFtzdXBlciBhY2Nlc3NpYmlsaXR5TGFiZWxdOwor
ICAgIGlmIChsYWJlbCkKKyAgICAgICAgcmV0dXJuIGxhYmVsOworCisgICAgTlNTdHJpbmcqIHRp
dGxlID0gbV9vYmplY3QtPnRpdGxlKCk7CisgICAgaWYgKCFbdGl0bGUgbGVuZ3RoXSkKKyAgICAg
ICAgdGl0bGUgPSBtX29iamVjdC0+YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCk7CisKKyAgICAv
LyBFdmVyeXRoaW5nIGV4Y2VwdCBhIHRleHQgY29udHJvbCBuZWVkcyB0byByZXR1cm4gdGhlaXIg
c3RyaW5nIHZhbHVlIGluIHRoZSBheExhYmVsIChwZXIgaVBob25lIEFYIEFQSSkuCisgICAgaWYg
KCFbdGl0bGUgbGVuZ3RoXSAmJiBbc2VsZiBzdHJpbmdWYWx1ZVNob3VsZEJlVXNlZEluTGFiZWxd
KQorICAgICAgICB0aXRsZSA9IG1fb2JqZWN0LT5zdHJpbmdWYWx1ZSgpOworICAgIAorICAgIHJl
dHVybiB0aXRsZTsKK30KKworLSAoQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCopdGFibGVDZWxsUGFy
ZW50Cit7CisgICAgLy8gRmluZCBpZiB0aGlzIGVsZW1lbnQgaXMgaW4gYSB0YWJsZSBjZWxsLgor
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNlbGwgPSAwOworICAgIGZvciAoY2VsbCA9IG1fb2Jq
ZWN0OyBjZWxsICYmICFjZWxsLT5pc1RhYmxlQ2VsbCgpOyBjZWxsID0gY2VsbC0+cGFyZW50T2Jq
ZWN0KCkpIAorICAgIHsgfQorICAgIAorICAgIGlmICghY2VsbCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCo+KGNlbGwp
OworfQorCistIChBY2Nlc3NpYmlsaXR5VGFibGUqKXRhYmxlUGFyZW50Cit7CisgICAgLy8gRmlu
ZCBpZiB0aGUgcGFyZW50IHRhYmxlIGZvciB0aGUgdGFibGUgY2VsbC4KKyAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBwYXJlbnRUYWJsZSA9IDA7CisgICAgZm9yIChwYXJlbnRUYWJsZSA9IG1fb2Jq
ZWN0OyBwYXJlbnRUYWJsZSAmJiAhcGFyZW50VGFibGUtPmlzRGF0YVRhYmxlKCk7IHBhcmVudFRh
YmxlID0gcGFyZW50VGFibGUtPnBhcmVudE9iamVjdCgpKSAKKyAgICB7IH0KKyAgICAKKyAgICBp
ZiAoIXBhcmVudFRhYmxlKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4ocGFyZW50VGFibGUpOworfQorCistIChpZClh
Y2Nlc3NpYmlsaXR5VGl0bGVFbGVtZW50Cit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vz
c2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIHRpdGxlRWxlbWVudCA9IG1fb2JqZWN0LT50aXRsZVVJRWxlbWVudCgpOworICAgIGlm
ICh0aXRsZUVsZW1lbnQpCisgICAgICAgIHJldHVybiB0aXRsZUVsZW1lbnQtPndyYXBwZXIoKTsK
KworICAgIHJldHVybiBuaWw7Cit9CisKKy8vIE1lYW50IHRvIHJldHVybiByb3cgb3IgY29sdW1u
IGhlYWRlcnMgKG9yIG90aGVyIHRoaW5ncyBhcyB0aGUgZnV0dXJlIHBlcm1pdHMpLgorLSAoTlNB
cnJheSAqKWFjY2Vzc2liaWxpdHlIZWFkZXJFbGVtZW50cworeworICAgIGlmICghW3NlbGYgX3By
ZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsKiB0YWJsZUNlbGwgPSBbc2VsZiB0YWJsZUNlbGxQYXJlbnRdOwor
ICAgIGlmICghdGFibGVDZWxsKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIEFjY2Vz
c2liaWxpdHlUYWJsZSogdGFibGUgPSBbc2VsZiB0YWJsZVBhcmVudF07CisgICAgaWYgKCF0YWJs
ZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICAvLyBHZXQgdGhlIHJvdyBhbmQgY29s
dW1uIHJhbmdlLCBzbyB3ZSBjYW4gdXNlIHRoZW0gdG8gZmluZCB0aGUgaGVhZGVycy4KKyAgICBw
YWlyPGludCwgaW50PiByb3dSYW5nZTsKKyAgICBwYWlyPGludCwgaW50PiBjb2x1bW5SYW5nZTsK
KyAgICB0YWJsZUNlbGwtPnJvd0luZGV4UmFuZ2Uocm93UmFuZ2UpOworICAgIHRhYmxlQ2VsbC0+
Y29sdW1uSW5kZXhSYW5nZShjb2x1bW5SYW5nZSk7CisgICAgCisgICAgQWNjZXNzaWJpbGl0eU9i
amVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd0hlYWRlcnM7CisgICAgQWNjZXNz
aWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbHVtbkhlYWRlcnM7
CisgICAgdGFibGUtPnJvd0hlYWRlcnMocm93SGVhZGVycyk7CisgICAgdGFibGUtPmNvbHVtbkhl
YWRlcnMoY29sdW1uSGVhZGVycyk7CisgICAgCisgICAgTlNNdXRhYmxlQXJyYXkgKmhlYWRlcnMg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAgIAorICAgIHVuc2lnbmVkIGNvbHVtblJhbmdl
SW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29sdW1uUmFuZ2UuZmlyc3QpOworICAgIGlm
IChjb2x1bW5SYW5nZUluZGV4IDwgY29sdW1uSGVhZGVycy5zaXplKCkpIHsKKyAgICAgICAgUmVm
UHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNvbHVtbkhlYWRlciA9IGNvbHVtbkhlYWRlcnNbY29s
dW1uUmFuZ2UuZmlyc3RdOworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogd3Jh
cHBlciA9IGNvbHVtbkhlYWRlci0+d3JhcHBlcigpOworICAgICAgICBpZiAod3JhcHBlcikKKyAg
ICAgICAgICAgIFtoZWFkZXJzIGFkZE9iamVjdDp3cmFwcGVyXTsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCByb3dSYW5nZUluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJvd1JhbmdlLmZpcnN0
KTsKKyAgICBpZiAocm93UmFuZ2VJbmRleCA8IHJvd0hlYWRlcnMuc2l6ZSgpKSB7CisgICAgICAg
IFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiByb3dIZWFkZXIgPSByb3dIZWFkZXJzW3Jvd1Jh
bmdlLmZpcnN0XTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIg
PSByb3dIZWFkZXItPndyYXBwZXIoKTsKKyAgICAgICAgaWYgKHdyYXBwZXIpCisgICAgICAgICAg
ICBbaGVhZGVycyBhZGRPYmplY3Q6d3JhcHBlcl07CisgICAgfQorICAgICAgICAKKyAgICByZXR1
cm4gaGVhZGVyczsKK30KKworLSAoaWQpYWNjZXNzaWJpbGl0eUVsZW1lbnRGb3JSb3c6KE5TSW50
ZWdlcilyb3cgYW5kQ29sdW1uOihOU0ludGVnZXIpY29sdW1uCit7CisgICAgaWYgKCFbc2VsZiBf
cHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEFj
Y2Vzc2liaWxpdHlUYWJsZSogdGFibGUgPSBbc2VsZiB0YWJsZVBhcmVudF07CisgICAgaWYgKCF0
YWJsZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwq
IGNlbGwgPSB0YWJsZS0+Y2VsbEZvckNvbHVtbkFuZFJvdyhjb2x1bW4sIHJvdyk7CisgICAgaWYg
KCFjZWxsKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBjZWxsLT53cmFwcGVyKCk7
Cit9CisKKy0gKE5TUmFuZ2UpYWNjZXNzaWJpbGl0eVJvd1JhbmdlCit7CisgICAgaWYgKCFbc2Vs
ZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdl
KE5TTm90Rm91bmQsIDApOworCisgICAgaWYgKG1fb2JqZWN0LT5pc1JhZGlvQnV0dG9uKCkpIHsK
KyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
IHJhZGlvQnV0dG9uU2libGluZ3M7CisgICAgICAgIG1fb2JqZWN0LT5saW5rZWRVSUVsZW1lbnRz
KHJhZGlvQnV0dG9uU2libGluZ3MpOworICAgICAgICBpZiAocmFkaW9CdXR0b25TaWJsaW5ncy5z
aXplKCkgPD0gMSkKKyAgICAgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAw
KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShyYWRpb0J1dHRvblNpYmxp
bmdzLmZpbmQobV9vYmplY3QpLCByYWRpb0J1dHRvblNpYmxpbmdzLnNpemUoKSk7CisgICAgfQor
ICAgIAorICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIHRhYmxlQ2VsbCA9IFtzZWxmIHRhYmxl
Q2VsbFBhcmVudF07CisgICAgaWYgKCF0YWJsZUNlbGwpCisgICAgICAgIHJldHVybiBOU01ha2VS
YW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICAKKyAgICBwYWlyPGludCwgaW50PiByb3dSYW5nZTsK
KyAgICB0YWJsZUNlbGwtPnJvd0luZGV4UmFuZ2Uocm93UmFuZ2UpOworICAgIHJldHVybiBOU01h
a2VSYW5nZShyb3dSYW5nZS5maXJzdCwgcm93UmFuZ2Uuc2Vjb25kKTsKK30KKworLSAoTlNSYW5n
ZSlhY2Nlc3NpYmlsaXR5Q29sdW1uUmFuZ2UKK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNj
ZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwg
MCk7CisKKyAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiB0YWJsZUNlbGwgPSBbc2VsZiB0YWJs
ZUNlbGxQYXJlbnRdOworICAgIGlmICghdGFibGVDZWxsKQorICAgICAgICByZXR1cm4gTlNNYWtl
UmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgCisgICAgcGFpcjxpbnQsIGludD4gY29sdW1uUmFu
Z2U7CisgICAgdGFibGVDZWxsLT5jb2x1bW5JbmRleFJhbmdlKGNvbHVtblJhbmdlKTsKKyAgICBy
ZXR1cm4gTlNNYWtlUmFuZ2UoY29sdW1uUmFuZ2UuZmlyc3QsIGNvbHVtblJhbmdlLnNlY29uZCk7
Cit9CisKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eVBsYWNlaG9sZGVyVmFsdWUKK3sKKyAg
ICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgcmV0dXJuIG1fb2JqZWN0LT5wbGFjZWhvbGRlclZhbHVlKCk7Cit9CisKKy0g
KE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eVZhbHVlCit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFy
ZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICAvLyBj
aGVjayBpZiB0aGUgdmFsdWUgd2FzIG92ZXJyaWRlbgorICAgIE5TU3RyaW5nICp2YWx1ZSA9IFtz
dXBlciBhY2Nlc3NpYmlsaXR5VmFsdWVdOworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgcmV0dXJu
IHZhbHVlOworICAgIAorICAgIGlmIChtX29iamVjdC0+aXNDaGVja2JveE9yUmFkaW8oKSkgewor
ICAgICAgICBzd2l0Y2ggKG1fb2JqZWN0LT5jaGVja2JveE9yUmFkaW9WYWx1ZSgpKSB7CisgICAg
ICAgIGNhc2UgQnV0dG9uU3RhdGVPZmY6CisgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCIlZCIsIDBdOworICAgICAgICBjYXNlIEJ1dHRvblN0YXRlT246Cisg
ICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZCIsIDFdOwor
ICAgICAgICBjYXNlIEJ1dHRvblN0YXRlTWl4ZWQ6CisgICAgICAgICAgICByZXR1cm4gW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZCIsIDJdOworICAgICAgICB9CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCIlZCIsIDBdOworICAgIH0KKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlzQnV0dG9uKCkg
JiYgbV9vYmplY3QtPmlzUHJlc3NlZCgpKQorICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCIlZCIsIDFdOworCisgICAgLy8gcmRhcjovLzgxMzEzODggV2ViS2l0IHNo
b3VsZCBleHBvc2UgdGhlIHNhbWUgaW5mbyBhcyBVSUtpdCBmb3IgaXRzIHBhc3N3b3JkIGZpZWxk
cy4KKyAgICBpZiAobV9vYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpKSB7CisgICAgICAgIGludCBw
YXNzd29yZExlbmd0aCA9IG1fb2JqZWN0LT5hY2Nlc3NpYmlsaXR5UGFzc3dvcmRGaWVsZExlbmd0
aCgpOworICAgICAgICBOU011dGFibGVTdHJpbmcqIHN0cmluZyA9IFtOU011dGFibGVTdHJpbmcg
c3RyaW5nXTsKKyAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBwYXNzd29yZExlbmd0aDsgKytr
KQorICAgICAgICAgICAgW3N0cmluZyBhcHBlbmRTdHJpbmc6QCLigKIiXTsKKyAgICAgICAgcmV0
dXJuIHN0cmluZzsKKyAgICB9CisgICAgCisgICAgLy8gQSB0ZXh0IGNvbnRyb2wgc2hvdWxkIHJl
dHVybiBpdHMgdGV4dCBkYXRhIGFzIHRoZSBheFZhbHVlIChwZXIgaVBob25lIEFYIEFQSSkuCisg
ICAgaWYgKCFbc2VsZiBzdHJpbmdWYWx1ZVNob3VsZEJlVXNlZEluTGFiZWxdKQorICAgICAgICBy
ZXR1cm4gbV9vYmplY3QtPnN0cmluZ1ZhbHVlKCk7CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5p
c1Byb2dyZXNzSW5kaWNhdG9yKCkgfHwgbV9vYmplY3QtPmlzU2xpZGVyKCkpIHsKKyAgICAgICAg
Ly8gUHJlZmVyIGEgdmFsdWVEZXNjcmlwdGlvbiBpZiBwcm92aWRlZCBieSB0aGUgYXV0aG9yICh0
aHJvdWdoIGFyaWEtdmFsdWV0ZXh0KS4KKyAgICAgICAgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24g
PSBtX29iamVjdC0+dmFsdWVEZXNjcmlwdGlvbigpOworICAgICAgICBpZiAoIXZhbHVlRGVzY3Jp
cHRpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlRGVzY3JpcHRpb247CisK
KyAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJS4yZiIsIG1fb2Jq
ZWN0LT52YWx1ZUZvclJhbmdlKCldOworICAgIH0KKworICAgIGlmIChtX29iamVjdC0+aXNIZWFk
aW5nKCkpCisgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkIiwg
bV9vYmplY3QtPmhlYWRpbmdMZXZlbCgpXTsKKyAgICAKKyAgICByZXR1cm4gbmlsOworfQorCist
IChCT09MKWFjY2Vzc2liaWxpdHlJc0NvbWJvQm94Cit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFy
ZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgcmV0dXJuIG1f
b2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBDb21ib0JveFJvbGU7Cit9CisKKy0gKE5TU3RyaW5nICop
YWNjZXNzaWJpbGl0eUhpbnQKK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0
eUNhbGxdKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIG1fb2JqZWN0LT5oZWxw
VGV4dCgpOworfQorCistIChOU1VSTCAqKWFjY2Vzc2liaWxpdHlVUkwKK3sKKyAgICBpZiAoIVtz
ZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IAorICAgIEtVUkwgdXJsID0gbV9vYmplY3QtPnVybCgpOworICAgIGlmICh1cmwuaXNOdWxsKCkp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIChOU1VSTCopdXJsOworfQorCistIChD
R1JlY3QpX2NvbnZlcnRJbnRSZWN0VG9TY3JlZW5Db29yZGluYXRlczooSW50UmVjdClyZWN0Cit7
CisgICAgaWYgKCFtX29iamVjdCkKKyAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CisgICAgCisg
ICAgQ0dTaXplIHNpemUgPSBDR1NpemVNYWtlKHJlY3Quc2l6ZSgpLndpZHRoKCksIHJlY3Quc2l6
ZSgpLmhlaWdodCgpKTsKKyAgICBDR1BvaW50IHBvaW50ID0gQ0dQb2ludE1ha2UocmVjdC54KCks
IHJlY3QueSgpKTsKKyAgICAKKyAgICBDR1JlY3QgZnJhbWUgPSBDR1JlY3RNYWtlKHBvaW50Lngs
IHBvaW50LnksIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTsKKyAgICAKKyAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IG1fb2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOworICAgIGlmIChmcmFt
ZVZpZXcpIHsKKyAgICAgICAgV0FLVmlldyogdmlldyA9IGZyYW1lVmlldy0+ZG9jdW1lbnRWaWV3
KCk7CisgICAgICAgIGZyYW1lID0gW3ZpZXcgY29udmVydFJlY3Q6ZnJhbWUgdG9WaWV3Om5pbF07
CisgICAgfQorICAgIAorICAgIC8vIHdlIG5lZWQgdGhlIHdlYiBkb2N1bWVudCB2aWV3IHRvIGdp
dmUgdXMgb3VyIGZpbmFsIHNjcmVlbiBjb29yZGluYXRlcworICAgIC8vIGJlY2F1c2UgdGhhdCBj
YW4gdGFrZSBhY2NvdW50IG9mIHRoZSBzY3JvbGxlcgorICAgIGlkIHdlYkRvY3VtZW50ID0gW3Nl
bGYgX2FjY2Vzc2liaWxpdHlXZWJEb2N1bWVudFZpZXddOworICAgIGlmICh3ZWJEb2N1bWVudCkK
KyAgICAgICAgZnJhbWUgPSBbd2ViRG9jdW1lbnQgY29udmVydFJlY3Q6ZnJhbWUgdG9WaWV3Om5p
bF07CisgICAgCisgICAgcmV0dXJuIGZyYW1lOworfQorCisvLyBVc2VkIGJ5IFVJS2l0IGFjY2Vz
c2liaWxpdHkgYnVuZGxlIHRvIGhlbHAgZGV0ZXJtaW5lIGRpc3RhbmNlIGR1cmluZyBhIGhpdC10
ZXN0LgorLSAoQ0dSZWN0KWFjY2Vzc2liaWxpdHlFbGVtZW50UmVjdAoreworICAgIGlmICghW3Nl
bGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBDR1JlY3RaZXJv
OworICAgIAorICAgIExheW91dFJlY3QgcmVjdCA9IG1fb2JqZWN0LT5lbGVtZW50UmVjdCgpOwor
ICAgIHJldHVybiBDR1JlY3RNYWtlKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKK30KKworLy8gVGhlICJjZW50ZXIgcG9pbnQiIGlzIHdoZXJlIFZvaWNl
T3ZlciB3aWxsICJwcmVzcyIgYW4gb2JqZWN0LiBUaGlzIG1heSBub3QgYmUgdGhlIGFjdHVhbAor
Ly8gY2VudGVyIG9mIHRoZSBhY2Nlc3NpYmlsaXR5RnJhbWUKKy0gKENHUG9pbnQpYWNjZXNzaWJp
bGl0eUFjdGl2YXRpb25Qb2ludAoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmls
aXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBDR1BvaW50WmVybzsKKyAgICAKKyAgICBJbnRSZWN0
IHJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KG1fb2JqZWN0LT5ib3VuZGluZ0JveFJlY3QoKSk7
CisgICAgQ0dSZWN0IGNnUmVjdCA9IFtzZWxmIF9jb252ZXJ0SW50UmVjdFRvU2NyZWVuQ29vcmRp
bmF0ZXM6cmVjdF07CisgICAgcmV0dXJuIENHUG9pbnRNYWtlKENHUmVjdEdldE1pZFgoY2dSZWN0
KSwgQ0dSZWN0R2V0TWlkWShjZ1JlY3QpKTsKK30KKworLSAoQ0dSZWN0KWFjY2Vzc2liaWxpdHlG
cmFtZQoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAg
ICAgIHJldHVybiBDR1JlY3RaZXJvOworICAgIAorICAgIEludFJlY3QgcmVjdCA9IHBpeGVsU25h
cHBlZEludFJlY3QobV9vYmplY3QtPmVsZW1lbnRSZWN0KCkpOworICAgIHJldHVybiBbc2VsZiBf
Y29udmVydEludFJlY3RUb1NjcmVlbkNvb3JkaW5hdGVzOnJlY3RdOworfQorCisvLyBDaGVja3Mg
d2hldGhlciBhIGxpbmsgY29udGFpbnMgb25seSBzdGF0aWMgdGV4dCBhbmQgaW1hZ2VzIChhbmQg
aGFzIGJlZW4gZGl2aWRlZCB1bm5hdHVyYWxseSBieSA8c3BhbnM+IGFuZCBvdGhlciBuZWZhcmlv
dXMgbWVjaGFuaXNtcykuCistIChCT09MKWNvbnRhaW5zVW5uYXR1cmFsbHlTZWdtZW50ZWRDaGls
ZHJlbgoreworICAgIGlmICghbV9vYmplY3QpCisgICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAg
ICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gbV9vYmplY3QtPnJvbGVWYWx1ZSgpOworICAgIGlm
IChyb2xlICE9IExpbmtSb2xlICYmIHJvbGUgIT0gV2ViQ29yZUxpbmtSb2xlKQorICAgICAgICBy
ZXR1cm4gTk87CisgICAgCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7CisgICAgdW5zaWdu
ZWQgY2hpbGRyZW5TaXplID0gY2hpbGRyZW4uc2l6ZSgpOworCisgICAgLy8gSWYgdGhlcmUncyBv
bmx5IG9uZSBjaGlsZCwgdGhlbiBpdCBkb2Vzbid0IGhhdmUgc2VnbWVudGVkIGNoaWxkcmVuLiAK
KyAgICBpZiAoY2hpbGRyZW5TaXplID09IDEpCisgICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRyZW5TaXplOyArK2kpIHsKKyAgICAgICAg
QWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IGNoaWxkcmVuW2ldLT5yb2xlVmFsdWUoKTsKKyAgICAg
ICAgaWYgKHJvbGUgIT0gU3RhdGljVGV4dFJvbGUgJiYgcm9sZSAhPSBJbWFnZVJvbGUgJiYgcm9s
ZSAhPSBHcm91cFJvbGUpCisgICAgICAgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIAorICAg
IHJldHVybiBZRVM7Cit9CisKKy0gKGlkKWFjY2Vzc2liaWxpdHlDb250YWluZXIKK3sKKyAgICBp
ZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gbmls
OworICAgIAorICAgIC8vIEFzIGxvbmcgYXMgdGhlcmUncyBhIHBhcmVudCB3cmFwcGVyLCB0aGF0
J3MgdGhlIGNvcnJlY3QgY2hhaW4gdG8gY2xpbWIuCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
cGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOyAKKyAgICBpZiAocGFy
ZW50KQorICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CisKKyAgICAvLyBUaGUgb25s
eSBvYmplY3Qgd2l0aG91dCBhIHBhcmVudCB3cmFwcGVyIHNob3VsZCBiZSBhIHNjcm9sbCB2aWV3
LgorICAgIEFTU0VSVChtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldygpKTsKKyAg
ICAKKyAgICAvLyBWZXJpZnkgdGhpcyBpcyB0aGUgdG9wIGRvY3VtZW50LiBJZiBub3QsIHdlIG1p
Z2h0IG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgcGxhdGZvcm0gd2lkZ2V0LgorICAgIEZyYW1lVmll
dyogZnJhbWVWaWV3ID0gbV9vYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CisgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gbV9vYmplY3QtPmRvY3VtZW50KCk7CisgICAgaWYgKGRvY3VtZW50ICYm
IGZyYW1lVmlldyAmJiBkb2N1bWVudCAhPSBkb2N1bWVudC0+dG9wRG9jdW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZyYW1lVmlldy0+cGxhdGZvcm1XaWRnZXQoKTsKKyAgICAKKyAgICAvLyBUaGUg
dG9wIHNjcm9sbCB2aWV3J3MgcGFyZW50IGlzIHRoZSB3ZWIgZG9jdW1lbnQgdmlldy4KKyAgICBy
ZXR1cm4gW3NlbGYgX2FjY2Vzc2liaWxpdHlXZWJEb2N1bWVudFZpZXddOworfQorCistIChpZClh
Y2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudAoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVB
Y2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogZm9jdXNlZE9iaiA9IG1fb2JqZWN0LT5mb2N1c2VkVUlFbGVtZW50KCk7
CisgICAgCisgICAgaWYgKCFmb2N1c2VkT2JqKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAor
ICAgIHJldHVybiBmb2N1c2VkT2JqLT53cmFwcGVyKCk7Cit9CisKKy0gKGlkKV9hY2Nlc3NpYmls
aXR5V2ViRG9jdW1lbnRWaWV3Cit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxp
dHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8vIFRoaXMgbWV0aG9kIHBlcmZv
cm1zIHRoZSBjcnVjaWFsIHRhc2sgb2YgY29ubmVjdGluZyB0byB0aGUgVUlXZWJEb2N1bWVudFZp
ZXcuCisgICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgc2Ny
ZWVuIHBvc2l0aW9uIG9mIHRoZSBBWCBvYmplY3QuCisgICAgc3RhdGljIENsYXNzIHdlYlZpZXdD
bGFzcyA9IG5pbDsKKyAgICBpZiAoIXdlYlZpZXdDbGFzcykKKyAgICAgICAgd2ViVmlld0NsYXNz
ID0gTlNDbGFzc0Zyb21TdHJpbmcoQCJXZWJWaWV3Iik7CisKKyAgICBpZiAoIXdlYlZpZXdDbGFz
cykKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9
IG1fb2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOworCisgICAgaWYgKCFmcmFtZVZpZXcpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgLy8gSWYgdGhpcyBpcyB0aGUgdG9wIGxldmVs
IGZyYW1lLCB0aGUgVUlXZWJEb2N1bWVudFZpZXcgc2hvdWxkIGJlIHJldHVybmVkLgorICAgIGlk
IHBhcmVudFZpZXcgPSBmcmFtZVZpZXctPmRvY3VtZW50VmlldygpOworICAgIHdoaWxlIChwYXJl
bnRWaWV3ICYmICFbcGFyZW50VmlldyBpc0tpbmRPZkNsYXNzOndlYlZpZXdDbGFzc10pCisgICAg
ICAgIHBhcmVudFZpZXcgPSBbcGFyZW50VmlldyBzdXBlcnZpZXddOworICAgIAorICAgIC8vIFRo
ZSBwYXJlbnRWaWV3IHNob3VsZCBoYXZlIGFuIGFjY2Vzc2liaWxpdHlDb250YWluZXIsIGlmIHRo
ZSBVSUtpdCBhY2Nlc3NpYmlsaXR5IGJ1bmRsZSB3YXMgbG9hZGVkLiAKKyAgICAvLyBUaGUgZXhj
ZXB0aW9uIGlzIERSVCwgd2hpY2ggdGVzdHMgYWNjZXNzaWJpbGl0eSB3aXRob3V0IHRoZSBlbnRp
cmUgc3lzdGVtIHR1cm5pbmcgYWNjZXNzaWJpbGl0eSBvbi4gSGVuY2UsCisgICAgLy8gdGhpcyBj
aGVjayBzaG91bGQgYmUgdmFsaWQgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IERSVC4KKyAgICBBU1NF
UlQoW3BhcmVudFZpZXcgYWNjZXNzaWJpbGl0eUNvbnRhaW5lcl0gfHwgYXBwbGljYXRpb25Jc0R1
bXBSZW5kZXJUcmVlKCkpOworICAgIAorICAgIHJldHVybiBbcGFyZW50VmlldyBhY2Nlc3NpYmls
aXR5Q29udGFpbmVyXTsKK30KKworLSAoTlNBcnJheSAqKV9hY2Nlc3NpYmlsaXR5TmV4dEVsZW1l
bnRzV2l0aENvdW50OihVSW50MzIpY291bnQKK3sgICAgCisgICAgaWYgKCFbc2VsZiBfcHJlcGFy
ZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICByZXR1
cm4gW1tzZWxmIF9hY2Nlc3NpYmlsaXR5V2ViRG9jdW1lbnRWaWV3XSBfYWNjZXNzaWJpbGl0eU5l
eHRFbGVtZW50c1dpdGhDb3VudDpjb3VudF07Cit9CisKKy0gKE5TQXJyYXkgKilfYWNjZXNzaWJp
bGl0eVByZXZpb3VzRWxlbWVudHNXaXRoQ291bnQ6KFVJbnQzMiljb3VudAoreworICAgIGlmICgh
W3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgCisgICAgcmV0dXJuIFtbc2VsZiBfYWNjZXNzaWJpbGl0eVdlYkRvY3VtZW50Vmlld10gX2Fj
Y2Vzc2liaWxpdHlQcmV2aW91c0VsZW1lbnRzV2l0aENvdW50OmNvdW50XTsKK30KKworLSAoQk9P
TClhY2Nlc3NpYmlsaXR5UmVxdWlyZWQKK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNz
aWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICByZXR1cm4gbV9vYmplY3Qt
PmlzUmVxdWlyZWQoKTsKK30KKworLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlGbG93VG9FbGVt
ZW50cworeworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuOworICAgIG1fb2JqZWN0LT5hcmlhRmxvd1RvRWxl
bWVudHMoY2hpbGRyZW4pOworICAgIAorICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNoaWxkcmVuLnNp
emUoKTsKKyAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlX
aXRoQ2FwYWNpdHk6bGVuZ3RoXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBj
aGlsZHJlbltpXS0+d3JhcHBlcigpOworICAgICAgICBBU1NFUlQod3JhcHBlcik7CisgICAgICAg
IGlmICghd3JhcHBlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChjaGls
ZHJlbltpXS0+aXNBdHRhY2htZW50KCkgJiYgW3dyYXBwZXIgYXR0YWNobWVudFZpZXddKQorICAg
ICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbd3JhcHBlciBhdHRhY2htZW50Vmlld11dOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OndyYXBwZXJdOworICAgIH0K
KyAgICByZXR1cm4gYXJyYXk7Cit9CisKKy0gKGlkKWFjY2Vzc2liaWxpdHlMaW5rZWRFbGVtZW50
Cit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICAKKyAgICAvLyBJZiB0aGlzIHN0YXRpYyB0ZXh0IGluc2lkZSBvZiBh
IGxpbmssIGl0IHNob3VsZCB1c2UgaXRzIHBhcmVudCdzIGxpbmtlZCBlbGVtZW50LgorICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGVsZW1lbnQgPSBtX29iamVjdDsKKyAgICBpZiAobV9vYmplY3Qt
PnJvbGVWYWx1ZSgpID09IFN0YXRpY1RleHRSb2xlICYmIG1fb2JqZWN0LT5wYXJlbnRPYmplY3RV
bmlnbm9yZWQoKS0+aXNMaW5rKCkpCisgICAgICAgIGVsZW1lbnQgPSBtX29iamVjdC0+cGFyZW50
T2JqZWN0VW5pZ25vcmVkKCk7CisgICAgCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuOworICAgIGVsZW1lbnQtPmxpbmtlZFVJRWxl
bWVudHMoY2hpbGRyZW4pOworICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPT0gMCkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICAKKyAgICByZXR1cm4gY2hpbGRyZW5bMF0tPndyYXBwZXIoKTsKK30K
KworCistIChCT09MKWlzQXR0YWNobWVudAoreworICAgIGlmICghbV9vYmplY3QpCisgICAgICAg
IHJldHVybiBOTzsKKyAgICAKKyAgICByZXR1cm4gbV9vYmplY3QtPmlzQXR0YWNobWVudCgpOwor
fQorCistICh2b2lkKV9hY2Nlc3NpYmlsaXR5QWN0aXZhdGUKK3sKKyAgICBpZiAoIVtzZWxmIF9w
cmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm47CisKKyAgICBtX29iamVj
dC0+cHJlc3MoKTsKK30KKworLSAoV0FLVmlldyAqKWF0dGFjaG1lbnRWaWV3Cit7CisgICAgaWYg
KCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIEFTU0VSVChbc2VsZiBpc0F0dGFjaG1lbnRdKTsKKyAgICBXaWRnZXQqIHdpZGdldCA9
IG1fb2JqZWN0LT53aWRnZXRGb3JBdHRhY2htZW50VmlldygpOworICAgIGlmICghd2lkZ2V0KQor
ICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiB3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCk7
ICAgIAorfQorCitzdGF0aWMgUmVuZGVyT2JqZWN0KiByZW5kZXJlckZvclZpZXcoV0FLVmlldyog
dmlldykKK3sKKyAgICBpZiAoIVt2aWV3IGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woV2Vi
Q29yZUZyYW1lVmlldyldKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBXQUtWaWV3PFdl
YkNvcmVGcmFtZVZpZXc+KiBmcmFtZVZpZXcgPSAoV0FLVmlldzxXZWJDb3JlRnJhbWVWaWV3Piop
dmlldzsKKyAgICBGcmFtZSogZnJhbWUgPSBbZnJhbWVWaWV3IF93ZWJfZnJhbWVdOworICAgIGlm
ICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIE5vZGUqIG5vZGUgPSBmcmFt
ZS0+ZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKTsKK30KKworLSAoaWQp
X2FjY2Vzc2liaWxpdHlQYXJlbnRGb3JTdWJ2aWV3OihpZClzdWJ2aWV3Cit7ICAgCisgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IHJlbmRlcmVyRm9yVmlldyhzdWJ2aWV3KTsKKyAgICBpZiAo
IXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIG9iaiA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9y
Q3JlYXRlKHJlbmRlcmVyKTsKKyAgICBpZiAob2JqKQorICAgICAgICByZXR1cm4gb2JqLT5wYXJl
bnRPYmplY3RVbmlnbm9yZWQoKS0+d3JhcHBlcigpOworICAgIHJldHVybiBuaWw7Cit9CisKKy0g
KHZvaWQpcG9zdEZvY3VzQ2hhbmdlTm90aWZpY2F0aW9uCit7CisgICAgLy8gVGhlIFVJS2l0IGFj
Y2Vzc2liaWxpdHkgd3JhcHBlciB3aWxsIG92ZXJyaWRlIGFuZCBwb3N0IGFwcHJvcHJpYXRlIG5v
dGlmaWNhdGlvbi4KK30KKworLSAodm9pZClwb3N0U2VsZWN0ZWRUZXh0Q2hhbmdlTm90aWZpY2F0
aW9uCit7CisgICAgLy8gVGhlIFVJS2l0IGFjY2Vzc2liaWxpdHkgd3JhcHBlciB3aWxsIG92ZXJy
aWRlIGFuZCBwb3N0IGFwcHJvcHJpYXRlIG5vdGlmaWNhdGlvbi4gICAgCit9CisKKy0gKHZvaWQp
cG9zdExheW91dENoYW5nZU5vdGlmaWNhdGlvbgoreworICAgIC8vIFRoZSBVSUtpdCBhY2Nlc3Np
YmlsaXR5IHdyYXBwZXIgd2lsbCBvdmVycmlkZSBhbmQgcG9zdCBhcHByb3ByaWF0ZSBub3RpZmlj
YXRpb24uICAgICAgICAKK30KKworLSAodm9pZClwb3N0TGl2ZVJlZ2lvbkNoYW5nZU5vdGlmaWNh
dGlvbgoreworICAgIC8vIFRoZSBVSUtpdCBhY2Nlc3NpYmlsaXR5IHdyYXBwZXIgd2lsbCBvdmVy
cmlkZSBhbmQgcG9zdCBhcHByb3ByaWF0ZSBub3RpZmljYXRpb24uICAgIAorfQorCistICh2b2lk
KXBvc3RMb2FkQ29tcGxldGVOb3RpZmljYXRpb24KK3sKKyAgICAvLyBUaGUgVUlLaXQgYWNjZXNz
aWJpbGl0eSB3cmFwcGVyIHdpbGwgb3ZlcnJpZGUgYW5kIHBvc3QgYXBwcm9wcmlhdGUgbm90aWZp
Y2F0aW9uLiAgICAKK30KKworLSAodm9pZClwb3N0Q2hpbGRyZW5DaGFuZ2VkTm90aWZpY2F0aW9u
Cit7CisgICAgLy8gVGhlIFVJS2l0IGFjY2Vzc2liaWxpdHkgd3JhcHBlciB3aWxsIG92ZXJyaWRl
IGFuZCBwb3N0IGFwcHJvcHJpYXRlIG5vdGlmaWNhdGlvbi4gICAgCit9CisKKy0gKHZvaWQpcG9z
dEludmFsaWRTdGF0dXNDaGFuZ2VkTm90aWZpY2F0aW9uCit7CisgICAgLy8gVGhlIFVJS2l0IGFj
Y2Vzc2liaWxpdHkgd3JhcHBlciB3aWxsIG92ZXJyaWRlIGFuZCBwb3N0IGFwcHJvcHJpYXRlIG5v
dGlmaWNhdGlvbi4gICAgICAgIAorfQorCistICh2b2lkKWFjY2Vzc2liaWxpdHlFbGVtZW50RGlk
QmVjb21lRm9jdXNlZAoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2Fs
bF0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBUaGUgZm9jdXNlZCBWb2ljZU92ZXIg
ZWxlbWVudCBtaWdodCBiZSB0aGUgdGV4dCBpbnNpZGUgYSBsaW5rLgorICAgIC8vIEluIHRob3Nl
IGNhc2VzIHdlIHNob3VsZCBmb2N1cyBvbiB0aGUgbGluayBpdHNlbGYuCisgICAgZm9yIChBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBtX29iamVjdDsgb2JqZWN0ICE9IG5pbDsgb2JqZWN0
ID0gb2JqZWN0LT5wYXJlbnRPYmplY3QoKSkgeworICAgICAgICBpZiAob2JqZWN0LT5yb2xlVmFs
dWUoKSA9PSBXZWJBcmVhUm9sZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChv
YmplY3QtPmNhblNldEZvY3VzQXR0cmlidXRlKCkpIHsKKyAgICAgICAgICAgIG9iamVjdC0+c2V0
Rm9jdXNlZCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQor
CistICh2b2lkKWFjY2Vzc2liaWxpdHlNb2RpZnlTZWxlY3Rpb246KFRleHRHcmFudWxhcml0eSln
cmFudWxhcml0eSBpbmNyZWFzZTooQk9PTClpbmNyZWFzZQoreworICAgIGlmICghW3NlbGYgX3By
ZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBGcmFt
ZVNlbGVjdGlvbiogZnJhbWVTZWxlY3Rpb24gPSBtX29iamVjdC0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+c2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX29iamVj
dC0+c2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBtX29iamVj
dC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsKKyAgICAKKyAgICAvLyBCZWZvcmUgYSBzZWxlY3Rp
b24gd2l0aCBsZW5ndGggZXhpc3RzLCB0aGUgY3Vyc29yIHBvc2l0aW9uIG5lZWRzIHRvIG1vdmUg
dG8gdGhlIHJpZ2h0IHN0YXJ0aW5nIHBsYWNlLgorICAgIC8vIFRoYXQgc2hvdWxkIGJlIHRoZSBi
ZWdpbm5pbmcgb2YgdGhpcyBlbGVtZW50IChyYW5nZS5zdGFydCkuIEhvd2V2ZXIsIGlmIHRoZSBj
dXJzb3IgaXMgYWxyZWFkeSB3aXRoaW4gdGhlIAorICAgIC8vIHJhbmdlIG9mIHRoaXMgZWxlbWVu
dCAodGhlIGN1cnNvciBpcyByZXByZXNlbnRlZCBieSBzZWxlY3Rpb24pLCB0aGVuIHRoZSBjdXJz
b3IgZG9lcyBub3QgbmVlZCB0byBtb3ZlLgorICAgIGlmIChmcmFtZVNlbGVjdGlvbi0+aXNOb25l
KCkgJiYgKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSA8IHJhbmdlLnN0YXJ0IHx8IHNlbGVjdGlv
bi52aXNpYmxlRW5kKCkgPiByYW5nZS5lbmQpKQorICAgICAgICBmcmFtZVNlbGVjdGlvbi0+bW92
ZVRvKHJhbmdlLnN0YXJ0LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAKKyAgICBmcmFtZVNlbGVjdGlv
bi0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCAoaW5jcmVhc2UpID8g
RGlyZWN0aW9uUmlnaHQgOiBEaXJlY3Rpb25MZWZ0LCBncmFudWxhcml0eSwgVXNlclRyaWdnZXJl
ZCk7Cit9CisKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eUluY3JlYXNlU2VsZWN0aW9uOihUZXh0R3Jh
bnVsYXJpdHkpZ3JhbnVsYXJpdHkKK3sKKyAgICBbc2VsZiBhY2Nlc3NpYmlsaXR5TW9kaWZ5U2Vs
ZWN0aW9uOmdyYW51bGFyaXR5IGluY3JlYXNlOllFU107Cit9CisKKy0gKHZvaWQpYWNjZXNzaWJp
bGl0eURlY3JlYXNlU2VsZWN0aW9uOihUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkKK3sKKyAg
ICBbc2VsZiBhY2Nlc3NpYmlsaXR5TW9kaWZ5U2VsZWN0aW9uOmdyYW51bGFyaXR5IGluY3JlYXNl
Ok5PXTsKK30KKworLSAodm9pZClhY2Nlc3NpYmlsaXR5TW92ZVNlbGVjdGlvblRvTWFya2VyOihX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKW1hcmtlcgoreworICAgIGlmICghW3NlbGYgX3By
ZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uID0gW21hcmtlciB2aXNpYmxlUG9zaXRpb25dOwor
ICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEZyYW1lU2VsZWN0aW9uKiBmcmFtZVNlbGVjdGlvbiA9IG1fb2JqZWN0LT5kb2N1bWVudCgpLT5m
cmFtZSgpLT5zZWxlY3Rpb24oKTsKKyAgICBmcmFtZVNlbGVjdGlvbi0+bW92ZVRvKHZpc2libGVQ
b3NpdGlvbiwgVXNlclRyaWdnZXJlZCk7Cit9CisKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eUluY3Jl
bWVudAoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fb2JqZWN0LT5pbmNyZW1lbnQoKTsKK30KKworLSAodm9pZClh
Y2Nlc3NpYmlsaXR5RGVjcmVtZW50Cit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2li
aWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9vYmplY3QtPmRlY3JlbWVudCgp
OworfQorCisjcHJhZ21hIG1hcmsgQWNjZXNzaWJpbGl0eSBUZXh0IE1hcmtlciBIYW5kbGVycwor
CistIChCT09MKV9hZGRBY2Nlc3NpYmlsaXR5T2JqZWN0OihBY2Nlc3NpYmlsaXR5T2JqZWN0Kilh
eE9iamVjdCB0b1RleHRNYXJrZXJBcnJheTooTlNNdXRhYmxlQXJyYXkgKilhcnJheQoreworICAg
IGlmICghYXhPYmplY3QpCisgICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciogd3JhcHBlciA9IGF4T2JqZWN0LT53cmFwcGVyKCk7CisgICAgaWYg
KCF3cmFwcGVyKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICAvLyBEb24ndCBhZGQgdGhlIHNh
bWUgb2JqZWN0IHR3aWNlLCBidXQgc2luY2UgdGhpcyBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkLCB3
ZSBzaG91bGQgcmV0dXJuCisgICAgLy8gWUVTIGJlY2F1c2Ugd2Ugd2FudCB0byBpbmZvcm0gdGhh
dCBpdCdzIGluIHRoZSBhcnJheQorICAgIGlmIChbYXJyYXkgY29udGFpbnNPYmplY3Q6d3JhcHBl
cl0pCisgICAgICAgIHJldHVybiBZRVM7CisgICAgCisgICAgLy8gRXhwbGljaXR5IHNldCB0aGF0
IHRoaXMgaXMgbm93IGFuIGVsZW1lbnQgKGluIGNhc2Ugb3RoZXIgbG9naWMgdHJpZXMgdG8gb3Zl
cnJpZGUpLgorICAgIFt3cmFwcGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZ
RVNdIGZvcktleTpAImlzQWNjZXNzaWJpbGl0eUVsZW1lbnQiXTsgICAgCisgICAgW2FycmF5IGFk
ZE9iamVjdDp3cmFwcGVyXTsKKyAgICByZXR1cm4gWUVTOworfQorCistIChOU1N0cmluZyAqKXN0
cmluZ0ZvclRleHRNYXJrZXJzOihOU0FycmF5ICopbWFya2VycworeworICAgIGlmICghW3NlbGYg
X3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisg
ICAgaWYgKFttYXJrZXJzIGNvdW50XSAhPSAyKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAor
ICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBzdGFydE1hcmtlciA9IFttYXJrZXJzIG9i
amVjdEF0SW5kZXg6MF07CisgICAgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIGVuZE1hcmtl
ciA9IFttYXJrZXJzIG9iamVjdEF0SW5kZXg6MV07CisgICAgaWYgKCFbc3RhcnRNYXJrZXIgaXNL
aW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgY2xhc3NdXSB8fCAhW2VuZE1h
cmtlciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBjbGFzc11dKQor
ICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIC8vIGV4dHJhY3QgdGhlIHN0YXJ0IGFuZCBl
bmQgVmlzaWJsZVBvc2l0aW9uCisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0
aW9uID0gW3N0YXJ0TWFya2VyIHZpc2libGVQb3NpdGlvbl07CisgICAgaWYgKHN0YXJ0VmlzaWJs
ZVBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIFZpc2li
bGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24gPSBbZW5kTWFya2VyIHZpc2libGVQb3NpdGlv
bl07CisgICAgaWYgKGVuZFZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IFZpc2li
bGVQb3NpdGlvblJhbmdlKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLCBlbmRWaXNpYmxlUG9zaXRpb24p
OworICAgIHJldHVybiBtX29iamVjdC0+c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2Uodmlz
aWJsZVBvc1JhbmdlKTsKK30KKworc3RhdGljIGludCBibG9ja3F1b3RlTGV2ZWwoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikKK3sKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gMDsK
KyAgICAKKyAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSByZW5kZXJl
ci0+bm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlm
IChub2RlLT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpKQorICAgICAgICAgICAgcmVzdWx0ICs9
IDE7CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIEFY
QXR0cmlidXRlU3RyaW5nU2V0QmxvY2txdW90ZUxldmVsKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJp
bmcqIGF0dHJTdHJpbmcsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIE5TUmFuZ2UgcmFuZ2UpCit7
CisgICAgaW50IHF1b3RlTGV2ZWwgPSBibG9ja3F1b3RlTGV2ZWwocmVuZGVyZXIpOworICAgIAor
ICAgIGlmIChxdW90ZUxldmVsKQorICAgICAgICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6VUlB
Y2Nlc3NpYmlsaXR5VG9rZW5CbG9ja3F1b3RlTGV2ZWwgdmFsdWU6W05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6cXVvdGVMZXZlbF0gcmFuZ2U6cmFuZ2VdOworICAgIGVsc2UKKyAgICAgICAgW2F0dHJT
dHJpbmcgcmVtb3ZlQXR0cmlidXRlOlVJQWNjZXNzaWJpbGl0eVRva2VuQmxvY2txdW90ZUxldmVs
IHJhbmdlOnJhbmdlXTsKK30KKworc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRIZWFk
aW5nTGV2ZWwoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciwgTlNSYW5nZSByYW5nZSkKK3sKKyAgICBpZiAoIXJlbmRlcmVyKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0
ID0gcmVuZGVyZXItPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocmVu
ZGVyZXItPnBhcmVudCgpKTsKKyAgICBpbnQgcGFyZW50SGVhZGluZ0xldmVsID0gcGFyZW50T2Jq
ZWN0LT5oZWFkaW5nTGV2ZWwoKTsKKyAgICAKKyAgICBpZiAocGFyZW50SGVhZGluZ0xldmVsKQor
ICAgICAgICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6VUlBY2Nlc3NpYmlsaXR5VG9rZW5IZWFk
aW5nTGV2ZWwgdmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6cGFyZW50SGVhZGluZ0xldmVs
XSByYW5nZTpyYW5nZV07CisgICAgZWxzZQorICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRy
aWJ1dGU6VUlBY2Nlc3NpYmlsaXR5VG9rZW5IZWFkaW5nTGV2ZWwgcmFuZ2U6cmFuZ2VdOworfQor
CitzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoTlNNdXRhYmxlQXR0cmlidXRl
ZFN0cmluZyogYXR0clN0cmluZywgR1NGb250UmVmIGZvbnQsIE5TUmFuZ2UgcmFuZ2UpCit7Cisg
ICAgaWYgKCFmb250KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgY29uc3QgY2hhciogbmFt
ZUNTdHIgPSBHU0ZvbnRHZXRGdWxsTmFtZShmb250KTsKKyAgICBjb25zdCBjaGFyKiBmYW1pbHlD
U3RyID0gR1NGb250R2V0RmFtaWx5TmFtZShmb250KTsKKyAgICBOU051bWJlciogc2l6ZSA9IFtO
U051bWJlciBudW1iZXJXaXRoRmxvYXQ6R1NGb250R2V0U2l6ZShmb250KV07CisgICAgTlNOdW1i
ZXIqIGJvbGQgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6R1NGb250SXNCb2xkKGZvbnQpXTsK
KyAgICBHU0ZvbnRUcmFpdE1hc2sgdHJhaXRzID0gR1NGb250R2V0VHJhaXRzKGZvbnQpOworICAg
IGlmIChuYW1lQ1N0cikKKyAgICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0cmlidXRlOlVJQWNjZXNz
aWJpbGl0eVRva2VuRm9udE5hbWUgdmFsdWU6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5n
Om5hbWVDU3RyXSByYW5nZTpyYW5nZV07CisgICAgaWYgKGZhbWlseUNTdHIpCisgICAgICAgIFth
dHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTpVSUFjY2Vzc2liaWxpdHlUb2tlbkZvbnRGYW1pbHkgdmFs
dWU6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmZhbWlseUNTdHJdIHJhbmdlOnJhbmdl
XTsKKyAgICBpZiAoW3NpemUgYm9vbFZhbHVlXSkKKyAgICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0
cmlidXRlOlVJQWNjZXNzaWJpbGl0eVRva2VuRm9udFNpemUgdmFsdWU6c2l6ZSByYW5nZTpyYW5n
ZV07CisgICAgaWYgKFtib2xkIGJvb2xWYWx1ZV0gfHwgKHRyYWl0cyAmIEdTQm9sZEZvbnRNYXNr
KSkKKyAgICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0cmlidXRlOlVJQWNjZXNzaWJpbGl0eVRva2Vu
Qm9sZCB2YWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSByYW5nZTpyYW5nZV07Cisg
ICAgaWYgKHRyYWl0cyAmIEdTSXRhbGljRm9udE1hc2spCisgICAgICAgIFthdHRyU3RyaW5nIGFk
ZEF0dHJpYnV0ZTpVSUFjY2Vzc2liaWxpdHlUb2tlbkl0YWxpYyB2YWx1ZTpbTlNOdW1iZXIgbnVt
YmVyV2l0aEJvb2w6WUVTXSByYW5nZTpyYW5nZV07CisKK30KKworc3RhdGljIHZvaWQgQVhBdHRy
aWJ1dGVTdHJpbmdTZXROdW1iZXIoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmlu
ZywgTlNTdHJpbmcqIGF0dHJpYnV0ZSwgTlNOdW1iZXIqIG51bWJlciwgTlNSYW5nZSByYW5nZSkK
K3sKKyAgICBpZiAobnVtYmVyKQorICAgICAgICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6YXR0
cmlidXRlIHZhbHVlOm51bWJlciByYW5nZTpyYW5nZV07CisgICAgZWxzZQorICAgICAgICBbYXR0
clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6YXR0cmlidXRlIHJhbmdlOnJhbmdlXTsKK30KKworc3Rh
dGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOU011dGFibGVBdHRyaWJ1dGVkU3Ry
aW5nKiBhdHRyU3RyaW5nLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBOU1JhbmdlIHJhbmdlKQor
eworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgIAorICAg
IC8vIHNldCBiYXNpYyBmb250IGluZm8KKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0
clN0cmluZywgc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXRHU0ZvbnQoKSwgcmFuZ2Up
OworICAgICAgICAgICAgICAgIAorICAgIGludCBkZWNvciA9IHN0eWxlLT50ZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdCgpOworICAgIGlmICgoZGVjb3IgJiAoVU5ERVJMSU5FIHwgTElORV9USFJPVUdI
KSkgIT0gMCkgeworICAgICAgICAvLyBmaW5kIGNvbG9ycyB1c2luZyBxdWlyayBtb2RlIGFwcHJv
YWNoIChzdHJpY3QgbW9kZSB3b3VsZCB1c2UgY3VycmVudAorICAgICAgICAvLyBjb2xvciBmb3Ig
YWxsIGJ1dCB0aGUgcm9vdCBsaW5lIGJveCwgd2hpY2ggd291bGQgdXNlIGdldFRleHREZWNvcmF0
aW9uQ29sb3JzKQorICAgICAgICBDb2xvciB1bmRlcmxpbmUsIG92ZXJsaW5lLCBsaW5ldGhyb3Vn
aDsKKyAgICAgICAgcmVuZGVyZXItPmdldFRleHREZWNvcmF0aW9uQ29sb3JzKGRlY29yLCB1bmRl
cmxpbmUsIG92ZXJsaW5lLCBsaW5ldGhyb3VnaCk7CisgICAgICAgIAorICAgICAgICBpZiAoZGVj
b3IgJiBVTkRFUkxJTkUpCisgICAgICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihh
dHRyU3RyaW5nLCBVSUFjY2Vzc2liaWxpdHlUb2tlblVuZGVybGluZSwgW05TTnVtYmVyIG51bWJl
cldpdGhCb29sOllFU10sIHJhbmdlKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEFYQXR0cmli
dXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmlu
ZywgTm9kZSogbm9kZSwgY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuZ3RoKQoreworICAgIC8v
IHNraXAgaW52aXNpYmxlIHRleHQKKyAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICAvLyBlYXNpZXIgdG8gY2FsY3VsYXRlIHRoZSByYW5nZSBiZWZv
cmUgYXBwZW5kaW5nIHRoZSBzdHJpbmcKKyAgICBOU1JhbmdlIGF0dHJTdHJpbmdSYW5nZSA9IE5T
TWFrZVJhbmdlKFthdHRyU3RyaW5nIGxlbmd0aF0sIGxlbmd0aCk7CisgICAgCisgICAgLy8gYXBw
ZW5kIHRoZSBzdHJpbmcgZnJvbSB0aGlzIG5vZGUKKyAgICBbW2F0dHJTdHJpbmcgbXV0YWJsZVN0
cmluZ10gYXBwZW5kU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczpjaGFycyBs
ZW5ndGg6bGVuZ3RoXV07CisgICAgCisgICAgLy8gc2V0IG5ldyBhdHRyaWJ1dGVzCisgICAgQVhB
dHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShhdHRyU3RyaW5nLCBub2RlLT5yZW5kZXJlcigpLCBhdHRy
U3RyaW5nUmFuZ2UpOworICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0SGVhZGluZ0xldmVsKGF0dHJT
dHJpbmcsIG5vZGUtPnJlbmRlcmVyKCksIGF0dHJTdHJpbmdSYW5nZSk7CisgICAgQVhBdHRyaWJ1
dGVTdHJpbmdTZXRCbG9ja3F1b3RlTGV2ZWwoYXR0clN0cmluZywgbm9kZS0+cmVuZGVyZXIoKSwg
YXR0clN0cmluZ1JhbmdlKTsgICAgCit9CisKKworLy8gVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQg
dG8gcmV0dXJuIGFuIGFycmF5IG9mIHN0cmluZ3MgYW5kIGFjY2Vzc2liaWxpdHkgZWxlbWVudHMg
dGhhdCAKKy8vIHJlcHJlc2VudCB0aGUgb2JqZWN0cyBvbiBvbmUgbGluZSBvZiByZW5kZXJlZCB3
ZWIgY29udGVudC4gVGhlIGFycmF5IG9mIG1hcmtlcnMgc2VudAorLy8gaW4gc2hvdWxkIGJlIG9y
ZGVyZWQgYW5kIGNvbnRhaW4gb25seSBhIHN0YXJ0IGFuZCBlbmQgbWFya2VyLgorLSAoTlNBcnJh
eSAqKWFycmF5T2ZUZXh0Rm9yVGV4dE1hcmtlcnM6KE5TQXJyYXkgKiltYXJrZXJzIGF0dHJpYnV0
ZWQ6KEJPT0wpYXR0cmlidXRlZAoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmls
aXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoW21hcmtlcnMgY291bnRd
ICE9IDIpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgV2ViQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIqIHN0YXJ0TWFya2VyID0gW21hcmtlcnMgb2JqZWN0QXRJbmRleDowXTsKKyAgICBX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogZW5kTWFya2VyID0gW21hcmtlcnMgb2JqZWN0QXRJ
bmRleDoxXTsKKyAgICBpZiAoIVtzdGFydE1hcmtlciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciBjbGFzc11dIHx8ICFbZW5kTWFya2VyIGlzS2luZE9mQ2xhc3M6W1dl
YkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIGNsYXNzXV0pCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgCisgICAgLy8gZXh0cmFjdCB0aGUgc3RhcnQgYW5kIGVuZCBWaXNpYmxlUG9zaXRpb24KKyAg
ICBWaXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24gPSBbc3RhcnRNYXJrZXIgdmlz
aWJsZVBvc2l0aW9uXTsKKyAgICBpZiAoc3RhcnRWaXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQ
b3NpdGlvbiA9IFtlbmRNYXJrZXIgdmlzaWJsZVBvc2l0aW9uXTsKKyAgICBpZiAoZW5kVmlzaWJs
ZVBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIC8vIGl0
ZXJhdGUgb3ZlciB0aGUgcmFuZ2UgdG8gYnVpbGQgdGhlIEFYIGF0dHJpYnV0ZWQgc3RyaW5nCisg
ICAgTlNNdXRhYmxlQXJyYXkqIGFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07
CisgICAgVGV4dEl0ZXJhdG9yIGl0KG1ha2VSYW5nZShzdGFydFZpc2libGVQb3NpdGlvbiwgZW5k
VmlzaWJsZVBvc2l0aW9uKS5nZXQoKSk7CisgICAgZm9yICg7ICFpdC5hdEVuZCgpOyBpdC5hZHZh
bmNlKCkpIHsKKyAgICAgICAgLy8gbG9jYXRlIHRoZSBub2RlIGFuZCBzdGFydGluZyBvZmZzZXQg
Zm9yIHRoaXMgcmFuZ2UKKyAgICAgICAgaW50IGV4Y2VwdGlvbiA9IDA7CisgICAgICAgIE5vZGUq
IG5vZGUgPSBpdC5yYW5nZSgpLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pOworICAgICAgICBB
U1NFUlQobm9kZSA9PSBpdC5yYW5nZSgpLT5lbmRDb250YWluZXIoZXhjZXB0aW9uKSk7CisgICAg
ICAgIGludCBvZmZzZXQgPSBpdC5yYW5nZSgpLT5zdGFydE9mZnNldChleGNlcHRpb24pOworICAg
ICAgICAKKyAgICAgICAgLy8gbm9uLXplcm8gbGVuZ3RoIG1lYW5zIHRleHR1YWwgbm9kZSwgemVy
byBsZW5ndGggbWVhbnMgcmVwbGFjZWQgbm9kZSAoQUtBICJhdHRhY2htZW50cyIgaW4gQVgpCisg
ICAgICAgIGlmIChpdC5sZW5ndGgoKSAhPSAwKSB7CisgICAgICAgICAgICBpZiAoIWF0dHJpYnV0
ZWQpIHsKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGlzIGlzIHJlcHJlc2Vu
dGVkIGJ5IGEgbGluay4KKyAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsaW5r
T2JqZWN0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6YW5jaG9yRWxlbWVudEZvck5vZGUobm9kZSk7
CisgICAgICAgICAgICAgICAgaWYgKFtzZWxmIF9hZGRBY2Nlc3NpYmlsaXR5T2JqZWN0OmxpbmtP
YmplY3QgdG9UZXh0TWFya2VyQXJyYXk6YXJyYXldKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBOZXh0IGNoZWNrIGlm
IHRoaXMgcmVnaW9uIGlzIHJlcHJlc2VudGVkIGJ5IGEgaGVhZGluZy4KKyAgICAgICAgICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkaW5nT2JqZWN0ID0gQWNjZXNzaWJpbGl0eU9iamVj
dDo6aGVhZGluZ0VsZW1lbnRGb3JOb2RlKG5vZGUpOworICAgICAgICAgICAgICAgIGlmIChbc2Vs
ZiBfYWRkQWNjZXNzaWJpbGl0eU9iamVjdDpoZWFkaW5nT2JqZWN0IHRvVGV4dE1hcmtlckFycmF5
OmFycmF5XSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgU3RyaW5nIGxpc3RNYXJrZXJUZXh0ID0gbV9vYmplY3QtPmxpc3RN
YXJrZXJUZXh0Rm9yTm9kZUFuZFBvc2l0aW9uKG5vZGUsIFZpc2libGVQb3NpdGlvbihpdC5yYW5n
ZSgpLT5zdGFydFBvc2l0aW9uKCkpKTsgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgKCFsaXN0TWFya2VyVGV4dC5pc0VtcHR5KCkpIAorICAgICAgICAgICAgICAgICAgICBb
YXJyYXkgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczpsaXN0TWFya2Vy
VGV4dC5jaGFyYWN0ZXJzKCkgbGVuZ3RoOmxpc3RNYXJrZXJUZXh0Lmxlbmd0aCgpXV07CisgICAg
ICAgICAgICAgICAgLy8gVGhlcmUgd2FzIG5vdCBhbiBlbGVtZW50IHJlcHJlc2VudGF0aW9uLCBz
byBqdXN0IHJldHVybiB0aGUgdGV4dC4KKyAgICAgICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0
OltOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczppdC5jaGFyYWN0ZXJzKCkgbGVuZ3RoOml0
Lmxlbmd0aCgpXV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGxpc3RNYXJrZXJUZXh0ID0gbV9vYmplY3QtPmxp
c3RNYXJrZXJUZXh0Rm9yTm9kZUFuZFBvc2l0aW9uKG5vZGUsIFZpc2libGVQb3NpdGlvbihpdC5y
YW5nZSgpLT5zdGFydFBvc2l0aW9uKCkpKTsgCisKKyAgICAgICAgICAgICAgICBpZiAoIWxpc3RN
YXJrZXJUZXh0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBOU011dGFibGVBdHRy
aWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nID0gW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0XTsKKyAgICAgICAgICAgICAgICAgICAgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5k
VGV4dChhdHRyU3RyaW5nLCBub2RlLCBsaXN0TWFya2VyVGV4dC5jaGFyYWN0ZXJzKCksIGxpc3RN
YXJrZXJUZXh0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgW2FycmF5IGFkZE9iamVj
dDphdHRyU3RyaW5nXTsKKyAgICAgICAgICAgICAgICAgICAgW2F0dHJTdHJpbmcgcmVsZWFzZV07
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5T
TXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmF0dHJTdHJpbmcgPSBbW05TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcgYWxsb2NdIGluaXRdOworICAgICAgICAgICAgICAgIEFYQXR0cmlidXRlZFN0cmlu
Z0FwcGVuZFRleHQoYXR0clN0cmluZywgbm9kZSwgaXQuY2hhcmFjdGVycygpLCBpdC5sZW5ndGgo
KSk7CisgICAgICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDphdHRyU3RyaW5nXTsKKyAgICAg
ICAgICAgICAgICBbYXR0clN0cmluZyByZWxlYXNlXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIE5vZGUqIHJlcGxhY2VkTm9kZSA9IG5vZGUtPmNoaWxkTm9k
ZShvZmZzZXQpOworICAgICAgICAgICAgaWYgKHJlcGxhY2VkTm9kZSkgeworICAgICAgICAgICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCkt
PmdldE9yQ3JlYXRlKHJlcGxhY2VkTm9kZS0+cmVuZGVyZXIoKSk7CisgICAgICAgICAgICAgICAg
aWYgKG9iaiAmJiAhb2JqLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCisgICAgICAgICAgICAg
ICAgICAgIFtzZWxmIF9hZGRBY2Nlc3NpYmlsaXR5T2JqZWN0Om9iaiB0b1RleHRNYXJrZXJBcnJh
eTphcnJheV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0
dXJuIFthcnJheSBhdXRvcmVsZWFzZV07Cit9CisKKy0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFu
Z2U6KFJhbmdlICopcmFuZ2UKK3sKKyAgICBpZiAoIXJhbmdlIHx8ICFyYW5nZS0+c3RhcnRDb250
YWluZXIoKSkKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOworICAg
IAorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fb2JqZWN0LT5kb2N1bWVudCgpOworICAgIEZy
YW1lU2VsZWN0aW9uKiBmcmFtZVNlbGVjdGlvbiA9IGRvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rp
b24oKTsKKyAgICAKKyAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZnJhbWVTZWxlY3Rpb24t
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJv
b3QgPyBzZWxlY3Rpb25Sb290IDogZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIAor
ICAgIC8vIE1vdXNlIGV2ZW50cyBtYXkgY2F1c2UgVFNNIHRvIGF0dGVtcHQgdG8gY3JlYXRlIGFu
IE5TUmFuZ2UgZm9yIGEgcG9ydGlvbiBvZiB0aGUgdmlldworICAgIC8vIHRoYXQgaXMgbm90IGlu
c2lkZSB0aGUgY3VycmVudCBlZGl0YWJsZSByZWdpb24uICBUaGVzZSBjaGVja3MgZW5zdXJlIHdl
IGRvbid0IHByb2R1Y2UKKyAgICAvLyBwb3RlbnRpYWxseSBpbnZhbGlkIGRhdGEgd2hlbiByZXNw
b25kaW5nIHRvIHN1Y2ggcmVxdWVzdHMuCisgICAgaWYgKHJhbmdlLT5zdGFydENvbnRhaW5lcigp
ICE9IHNjb3BlICYmICFyYW5nZS0+c3RhcnRDb250YWluZXIoKS0+aXNEZXNjZW5kYW50T2Yoc2Nv
cGUpKQorICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgaWYg
KHJhbmdlLT5lbmRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPmVuZENvbnRhaW5lcigp
LT5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05v
dEZvdW5kLCAwKTsKKyAgICAKKyAgICBSZWZQdHI8UmFuZ2U+IHRlc3RSYW5nZSA9IFJhbmdlOjpj
cmVhdGUoc2NvcGUtPmRvY3VtZW50KCksIHNjb3BlLCAwLCByYW5nZS0+c3RhcnRDb250YWluZXIo
KSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgIEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCkgPT0gc2NvcGUpOworICAgIGludCBzdGFydFBvc2l0aW9uID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkpOworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUg
ZWM7CisgICAgdGVzdFJhbmdlLT5zZXRFbmQocmFuZ2UtPmVuZENvbnRhaW5lcigpLCByYW5nZS0+
ZW5kT2Zmc2V0KCksIGVjKTsKKyAgICBBU1NFUlQodGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigp
ID09IHNjb3BlKTsKKyAgICBpbnQgZW5kUG9zaXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKHRlc3RSYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIE5TTWFrZVJhbmdlKHN0YXJ0UG9zaXRp
b24sIGVuZFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbik7Cit9CisKKy0gKFBhc3NSZWZQdHI8UmFu
Z2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlCit7CisgICAgaWYgKG5zcmFu
Z2UubG9jYXRpb24gPiBJTlRfTUFYKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobnNyYW5n
ZS5sZW5ndGggPiBJTlRfTUFYIHx8IG5zcmFuZ2UubG9jYXRpb24gKyBuc3JhbmdlLmxlbmd0aCA+
IElOVF9NQVgpCisgICAgICAgIG5zcmFuZ2UubGVuZ3RoID0gSU5UX01BWCAtIG5zcmFuZ2UubG9j
YXRpb247CisgICAgICAgIAorICAgIC8vIG91ciBjcml0aWNhbCBhc3N1bXB0aW9uIGlzIHRoYXQg
d2UgYXJlIG9ubHkgY2FsbGVkIGJ5IGlucHV0IG1ldGhvZHMgdGhhdAorICAgIC8vIGNvbmNlbnRy
YXRlIG9uIGEgZ2l2ZW4gYXJlYSBjb250YWluaW5nIHRoZSBzZWxlY3Rpb24KKyAgICAvLyBXZSBo
YXZlIHRvIGRvIHRoaXMgYmVjYXVzZSBvZiB0ZXh0IGZpZWxkcyBhbmQgdGV4dGFyZWFzLiBUaGUg
RE9NIGZvciB0aG9zZSBpcyBub3QKKyAgICAvLyBkaXJlY3RseSBpbiB0aGUgZG9jdW1lbnQgRE9N
LCBzbyBzZXJpYWxpemF0aW9uIGlzIHByb2JsZW1hdGljLiBPdXIgc29sdXRpb24gaXMKKyAgICAv
LyB0byB1c2UgdGhlIHJvb3QgZWRpdGFibGUgZWxlbWVudCBvZiB0aGUgc2VsZWN0aW9uIHN0YXJ0
IGFzIHRoZSBwb3NpdGlvbmFsIGJhc2UuCisgICAgLy8gVGhhdCBmaXRzIHdpdGggQXBwS2l0J3Mg
aWRlYSBvZiBhbiBpbnB1dCBjb250ZXh0LgorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fb2Jq
ZWN0LT5kb2N1bWVudCgpOworICAgIEZyYW1lU2VsZWN0aW9uKiBmcmFtZVNlbGVjdGlvbiA9IGRv
Y3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKTsKKyAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290
ID0gZnJhbWVTZWxlY3Rpb24tPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBz
Y29wZSA9IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogZG9jdW1lbnQtPmRvY3VtZW50
RWxlbWVudCgpOworICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5k
TGVuZ3RoKHNjb3BlLCBuc3JhbmdlLmxvY2F0aW9uLCBuc3JhbmdlLmxlbmd0aCk7Cit9CisKKy8v
IFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHRvIHRha2UgYSB0ZXh0IG1hcmtlciByZXByZXNlbnRp
bmcgYSBWaXNpYmxlUG9zaXRpb24gYW5kIGNvbnZlcnQgaXQKKy8vIGludG8gYSBub3JtYWxpemVk
IGxvY2F0aW9uIHdpdGhpbiB0aGUgZG9jdW1lbnQuCistIChOU0ludGVnZXIpcG9zaXRpb25Gb3JU
ZXh0TWFya2VyOihXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKW1hcmtlcgoreworICAgIGlm
ICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBOU05v
dEZvdW5kOworCisgICAgaWYgKCFtYXJrZXIpCisgICAgICAgIHJldHVybiBOU05vdEZvdW5kOyAg
ICAKKworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKFttYXJrZXIgdmlzaWJsZVBvc2l0
aW9uXSk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOworICAgIE5TUmFuZ2UgbnNSYW5nZSA9IFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOnJh
bmdlLmdldCgpXTsKKyAgICByZXR1cm4gbnNSYW5nZS5sb2NhdGlvbjsKK30KKworLSAoTlNBcnJh
eSAqKXRleHRNYXJrZXJSYW5nZQoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmls
aXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgcmFuZ2UgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IHJhbmdlLnN0YXJ0OworICAgIFZpc2libGVQb3Np
dGlvbiBlbmRQb3NpdGlvbiA9IHJhbmdlLmVuZDsKKyAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlciogc3RhcnQgPSBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhW
aXNpYmxlUG9zaXRpb246c3RhcnRQb3NpdGlvbiBjYWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNo
ZSgpXTsKKyAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogZW5kID0gW1dlYkFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOmVuZFBvc2l0aW9u
IGNhY2hlOm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCldOworICAgIAorICAgIHJldHVybiBbTlNB
cnJheSBhcnJheVdpdGhPYmplY3RzOnN0YXJ0LCBlbmQsIG5pbF07Cit9CisKKy8vIEEgbWV0aG9k
IHRvIGdldCB0aGUgbm9ybWFsaXplZCB0ZXh0IGN1cnNvciByYW5nZSBvZiBhbiBlbGVtZW50LiBV
c2VkIGluIER1bXBSZW5kZXJUcmVlLgorLSAoTlNSYW5nZSllbGVtZW50VGV4dFJhbmdlCit7Cisg
ICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJu
IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOworCisgICAgTlNBcnJheSAqbWFya2VycyA9IFtz
ZWxmIHRleHRNYXJrZXJSYW5nZV07CisgICAgaWYgKFttYXJrZXJzIGNvdW50XSAhPSAyKQorICAg
ICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgCisgICAgV2ViQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIgKnN0YXJ0TWFya2VyID0gW21hcmtlcnMgb2JqZWN0QXRJbmRl
eDowXTsKKyAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqZW5kTWFya2VyID0gW21hcmtl
cnMgb2JqZWN0QXRJbmRleDoxXTsKKyAgICAKKyAgICBOU0ludGVnZXIgc3RhcnRQb3NpdGlvbiA9
IFtzZWxmIHBvc2l0aW9uRm9yVGV4dE1hcmtlcjpzdGFydE1hcmtlcl07CisgICAgTlNJbnRlZ2Vy
IGVuZFBvc2l0aW9uID0gW3NlbGYgcG9zaXRpb25Gb3JUZXh0TWFya2VyOmVuZE1hcmtlcl07Cisg
ICAgCisgICAgcmV0dXJuIE5TTWFrZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uIC0g
c3RhcnRQb3NpdGlvbik7Cit9CisKKy0gKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyICopYWNj
ZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXI6KFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
ICopbWFya2VyCit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmICghbWFya2VyKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIAorICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24gPSBbbWFya2Vy
IHZpc2libGVQb3NpdGlvbl07CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gbV9vYmpl
Y3QtPmFjY2Vzc2liaWxpdHlPYmplY3RGb3JQb3NpdGlvbih2aXNpYmxlUG9zaXRpb24pOworICAg
IGlmICghb2JqKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5VW5pZ25vcmVkQW5jZXN0b3Iob2JqLT53cmFwcGVyKCkpOworfQorCistIChOU0FycmF5
ICopdGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uCit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFy
ZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fb2JqZWN0LT5zZWxlY3Rpb24oKTsKKyAgICBpZiAo
c2VsZWN0aW9uLmlzTm9uZSgpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIFZpc2libGVQb3Np
dGlvbiBzdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOworICAgIFZpc2li
bGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CisKKyAgICBX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnRNYXJrZXIgPSBbV2ViQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhWaXNpYmxlUG9zaXRpb246c3RhcnRQb3NpdGlvbiBj
YWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKKyAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlciogZW5kTWFya2VyID0gW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJr
ZXJXaXRoVmlzaWJsZVBvc2l0aW9uOmVuZFBvc2l0aW9uIGNhY2hlOm1fb2JqZWN0LT5heE9iamVj
dENhY2hlKCldOworICAgIGlmICghc3RhcnRNYXJrZXIgfHwgIWVuZE1hcmtlcikKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICAKKyAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpz
dGFydE1hcmtlciwgZW5kTWFya2VyLCBuaWxdOworfQorCistIChXZWJBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlciAqKXRleHRNYXJrZXJGb3JQb3NpdGlvbjooTlNJbnRlZ2VyKXBvc2l0aW9uCit7Cisg
ICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3NlbGYgX2NvbnZlcnRUb0RP
TVJhbmdlOk5TTWFrZVJhbmdlKHBvc2l0aW9uLCAwKV07CisgICAgaWYgKCFyYW5nZSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IFZp
c2libGVTZWxlY3Rpb24ocmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pOworCisgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVQb3NpdGlvbiA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICBy
ZXR1cm4gW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoVmlzaWJsZVBv
c2l0aW9uOnZpc2libGVQb3NpdGlvbiBjYWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsK
K30KKworLSAoaWQpX3N0cmluZ0ZvclJhbmdlOihOU1JhbmdlKXJhbmdlIGF0dHJpYnV0ZWQ6KEJP
T0wpYXR0cmlidXRlZAoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2Fs
bF0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgV2ViQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIqIHN0YXJ0TWFya2VyID0gW3NlbGYgdGV4dE1hcmtlckZvclBvc2l0aW9uOnJhbmdlLmxv
Y2F0aW9uXTsKKyAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogZW5kTWFya2VyID0gW3Nl
bGYgdGV4dE1hcmtlckZvclBvc2l0aW9uOk5TTWF4UmFuZ2UocmFuZ2UpXTsKKyAgICAKKyAgICAv
LyBDbGllbnRzIGRvbid0IGFsd2F5cyBrbm93IHRoZSBleGFjdCByYW5nZSwgcmF0aGVyIHRoYW4g
Zm9yY2UgdGhlbSB0byBjb21wdXRlIGl0LAorICAgIC8vIGFsbG93IGNsaWVudHMgdG8gb3ZlcnNo
b290IGFuZCB1c2UgdGhlIG1heCB0ZXh0IG1hcmtlciByYW5nZS4KKyAgICBpZiAoIXN0YXJ0TWFy
a2VyIHx8ICFlbmRNYXJrZXIpIHsKKyAgICAgICAgTlNBcnJheSAqbWFya2VycyA9IFtzZWxmIHRl
eHRNYXJrZXJSYW5nZV07CisgICAgICAgIGlmIChbbWFya2VycyBjb3VudF0gIT0gMikKKyAgICAg
ICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIGlmICghc3RhcnRNYXJrZXIpCisgICAgICAgICAg
ICBzdGFydE1hcmtlciA9IFttYXJrZXJzIG9iamVjdEF0SW5kZXg6MF07CisgICAgICAgIGlmICgh
ZW5kTWFya2VyKQorICAgICAgICAgICAgZW5kTWFya2VyID0gW21hcmtlcnMgb2JqZWN0QXRJbmRl
eDoxXTsKKyAgICB9CisgICAgCisgICAgTlNBcnJheSogYXJyYXkgPSBbc2VsZiBhcnJheU9mVGV4
dEZvclRleHRNYXJrZXJzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6c3RhcnRNYXJrZXIsIGVu
ZE1hcmtlciwgbmlsXSBhdHRyaWJ1dGVkOmF0dHJpYnV0ZWRdOworICAgIENsYXNzIHJldHVybkNs
YXNzID0gYXR0cmlidXRlZCA/IFtOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXSA6IFtO
U011dGFibGVTdHJpbmcgY2xhc3NdOworICAgIGlkIHJldHVyblZhbHVlID0gW1tbcmV0dXJuQ2xh
c3MgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAKKyAgICBOU0ludGVnZXIgY291bnQg
PSBbYXJyYXkgY291bnRdOworICAgIGZvciAoTlNJbnRlZ2VyIGsgPSAwOyBrIDwgY291bnQ7ICsr
aykgeworICAgICAgICBpZCBvYmplY3QgPSBbYXJyYXkgb2JqZWN0QXRJbmRleDprXTsKKworICAg
ICAgICBpZiAoIVtvYmplY3QgaXNLaW5kT2ZDbGFzczpyZXR1cm5DbGFzc10pCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChhdHRyaWJ1dGVkKQorICAgICAgICAg
ICAgWyhOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICopcmV0dXJuVmFsdWUgYXBwZW5kQXR0cmli
dXRlZFN0cmluZzpvYmplY3RdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBbKE5TTXV0YWJs
ZVN0cmluZyAqKXJldHVyblZhbHVlIGFwcGVuZFN0cmluZzpvYmplY3RdOworICAgIH0KKyAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisKKworLy8gQSBjb252ZW5pZW5jZSBtZXRob2QgZm9yIGdl
dHRpbmcgdGhlIHRleHQgb2YgYSBOU1JhbmdlLiBDdXJyZW50bHkgdXNlZCBvbmx5IGJ5IERSVC4K
Ky0gKE5TU3RyaW5nICopc3RyaW5nRm9yUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKK3sKKyAgICByZXR1
cm4gW3NlbGYgX3N0cmluZ0ZvclJhbmdlOnJhbmdlIGF0dHJpYnV0ZWQ6Tk9dOworfQorCistIChO
U0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6KE5TUmFuZ2UpcmFu
Z2UKK3sKKyAgICByZXR1cm4gW3NlbGYgX3N0cmluZ0ZvclJhbmdlOnJhbmdlIGF0dHJpYnV0ZWQ6
WUVTXTsKK30KKworLy8gQSBjb252ZW5pZW5jZSBtZXRob2QgZm9yIGdldHRpbmcgdGhlIGFjY2Vz
c2liaWxpdHkgb2JqZWN0cyBvZiBhIE5TUmFuZ2UuIEN1cnJlbnRseSB1c2VkIG9ubHkgYnkgRFJU
LgorLSAoTlNBcnJheSAqKWVsZW1lbnRzRm9yUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKK3sKKyAgICBp
ZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gbmls
OworICAgIAorICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBzdGFydE1hcmtlciA9IFtz
ZWxmIHRleHRNYXJrZXJGb3JQb3NpdGlvbjpyYW5nZS5sb2NhdGlvbl07CisgICAgV2ViQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIqIGVuZE1hcmtlciA9IFtzZWxmIHRleHRNYXJrZXJGb3JQb3NpdGlv
bjpOU01heFJhbmdlKHJhbmdlKV07CisgICAgaWYgKCFzdGFydE1hcmtlciB8fCAhZW5kTWFya2Vy
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIE5TQXJyYXkqIGFycmF5ID0gW3NlbGYg
YXJyYXlPZlRleHRGb3JUZXh0TWFya2VyczpbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOnN0YXJ0
TWFya2VyLCBlbmRNYXJrZXIsIG5pbF0gYXR0cmlidXRlZDpOT107CisgICAgTlNNdXRhYmxlQXJy
YXkqIGVsZW1lbnRzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICBmb3IgKGlkIGVsZW1l
bnQgaW4gYXJyYXkpIHsKKyAgICAgICAgaWYgKCFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBjbGFzc11dKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIFtlbGVtZW50cyBhZGRPYmplY3Q6ZWxlbWVudF07CisgICAgfQorICAgIHJldHVybiBl
bGVtZW50czsKK30KKworLSAoTlNTdHJpbmcgKilzZWxlY3Rpb25SYW5nZVN0cmluZworeworICAg
IE5TQXJyYXkgKm1hcmtlcnMgPSBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dOwor
ICAgIHJldHVybiBbc2VsZiBzdHJpbmdGb3JUZXh0TWFya2VyczptYXJrZXJzXTsKK30KKworLSAo
V2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKilzZWxlY3RlZFRleHRNYXJrZXIKK3sKKyAgICBp
ZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gbmls
OworICAgIAorICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9vYmplY3QtPnNlbGVj
dGlvbigpOworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHNlbGVjdGlvbi52aXNpYmxl
U3RhcnQoKTsKKyAgICAKKyAgICAvLyBpZiB0aGVyZSdzIG5vIHNlbGVjdGlvbiwgc3RhcnQgYXQg
dGhlIHRvcCBvZiB0aGUgZG9jdW1lbnQKKyAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCisgICAg
ICAgIHBvc2l0aW9uID0gc3RhcnRPZkRvY3VtZW50KG1fb2JqZWN0LT5kb2N1bWVudCgpKTsKKyAg
ICAKKyAgICByZXR1cm4gW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRo
VmlzaWJsZVBvc2l0aW9uOnBvc2l0aW9uIGNhY2hlOm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCld
OworfQorCisvLyBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCB0byByZXR1cm4gdGhlIG1hcmtlciBh
dCB0aGUgZW5kIG9mIHRoZSBsaW5lIHN0YXJ0aW5nIGF0CisvLyB0aGUgbWFya2VyIHRoYXQgaXMg
cGFzc2VkIGludG8gdGhlIG1ldGhvZC4KKy0gKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICop
bGluZUVuZE1hcmtlckZvck1hcmtlcjooV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKiltYXJr
ZXIKK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgaWYgKCFtYXJrZXIpCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgCisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gW21hcmtlciB2aXNpYmxlUG9zaXRpb25d
OworICAgIFZpc2libGVQb3NpdGlvbiBsaW5lRW5kID0gbV9vYmplY3QtPm5leHRMaW5lRW5kUG9z
aXRpb24oc3RhcnQpOworICAgIAorICAgIHJldHVybiBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXIgdGV4dE1hcmtlcldpdGhWaXNpYmxlUG9zaXRpb246bGluZUVuZCBjYWNoZTptX29iamVjdC0+
YXhPYmplY3RDYWNoZSgpXTsKK30KKworLy8gVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgdG8gcmV0
dXJuIHRoZSBtYXJrZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHN0YXJ0aW5nIGF0CisvLyB0
aGUgbWFya2VyIHRoYXQgaXMgcGFzc2VkIGludG8gdGhlIG1ldGhvZC4KKy0gKFdlYkFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyICopbGluZVN0YXJ0TWFya2VyRm9yTWFya2VyOihXZWJBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciAqKW1hcmtlcgoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3Np
YmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoIW1hcmtlcikKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBbbWFy
a2VyIHZpc2libGVQb3NpdGlvbl07CisgICAgVmlzaWJsZVBvc2l0aW9uIGxpbmVTdGFydCA9IG1f
b2JqZWN0LT5wcmV2aW91c0xpbmVTdGFydFBvc2l0aW9uKHN0YXJ0KTsKKyAgICAKKyAgICByZXR1
cm4gW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0
aW9uOmxpbmVTdGFydCBjYWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKK30KKworLSAo
V2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKiluZXh0TWFya2VyRm9yTWFya2VyOihXZWJBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlciAqKW1hcmtlcgoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVB
Y2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoIW1hcmtl
cikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQg
PSBbbWFya2VyIHZpc2libGVQb3NpdGlvbl07CisgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRNYXJr
ZXIgPSBtX29iamVjdC0+bmV4dFZpc2libGVQb3NpdGlvbihzdGFydCk7CisgICAgCisgICAgcmV0
dXJuIFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3Np
dGlvbjpuZXh0TWFya2VyIGNhY2hlOm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCldOworfQorCisv
LyBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCB0byByZXR1cm4gdGhlIG1hcmtlciBhdCB0aGUgc3Rh
cnQgb2YgdGhlIGxpbmUgc3RhcnRpbmcgYXQKKy8vIHRoZSBtYXJrZXIgdGhhdCBpcyBwYXNzZWQg
aW50byB0aGUgbWV0aG9kLgorLSAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKilwcmV2aW91
c01hcmtlckZvck1hcmtlcjooV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKiltYXJrZXIKK3sK
KyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgaWYgKCFtYXJrZXIpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisg
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gW21hcmtlciB2aXNpYmxlUG9zaXRpb25dOworICAg
IFZpc2libGVQb3NpdGlvbiBwcmV2aW91c01hcmtlciA9IG1fb2JqZWN0LT5wcmV2aW91c1Zpc2li
bGVQb3NpdGlvbihzdGFydCk7CisgICAgCisgICAgcmV0dXJuIFtXZWJBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjpwcmV2aW91c01hcmtlciBjYWNo
ZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKK30KKworLy8gVGhpcyBtZXRob2QgaXMgaW50
ZW5kZWQgdG8gcmV0dXJuIHRoZSBib3VuZHMgb2YgYSB0ZXh0IG1hcmtlciByYW5nZSBpbiBzY3Jl
ZW4gY29vcmRpbmF0ZXMuCistIChDR1JlY3QpZnJhbWVGb3JUZXh0TWFya2VyczooTlNBcnJheSAq
KWFycmF5Cit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAg
ICAgICAgcmV0dXJuIENHUmVjdFplcm87CisKKyAgICBpZiAoW2FycmF5IGNvdW50XSAhPSAyKQor
ICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKKyAgICAKKyAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlciogc3RhcnRNYXJrZXIgPSBbYXJyYXkgb2JqZWN0QXRJbmRleDowXTsKKyAgICBXZWJB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogZW5kTWFya2VyID0gW2FycmF5IG9iamVjdEF0SW5kZXg6
MV07CisgICAgaWYgKCFbc3RhcnRNYXJrZXIgaXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIgY2xhc3NdXSB8fCAhW2VuZE1hcmtlciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlciBjbGFzc11dKQorICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsK
KworICAgIEludFJlY3QgcmVjdCA9IG1fb2JqZWN0LT5ib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25S
YW5nZShWaXNpYmxlUG9zaXRpb25SYW5nZShbc3RhcnRNYXJrZXIgdmlzaWJsZVBvc2l0aW9uXSwg
W2VuZE1hcmtlciB2aXNpYmxlUG9zaXRpb25dKSk7CisgICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0
SW50UmVjdFRvU2NyZWVuQ29vcmRpbmF0ZXM6cmVjdF07Cit9CisKKy0gKFdlYkFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyICopdGV4dE1hcmtlckZvclBvaW50OihDR1BvaW50KXBvaW50Cit7CisgICAg
aWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICAKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zID0gbV9vYmplY3QtPnZpc2libGVQb3Np
dGlvbkZvclBvaW50KEludFBvaW50KHBvaW50KSk7CisgICAgcmV0dXJuIFtXZWJBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjpwb3MgY2FjaGU6bV9v
YmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07Cit9CisKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0
eUlkZW50aWZpZXIKK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxd
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHJldHVybiBtX29iamVjdC0+Z2V0QXR0
cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKTsKK30KKworLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmls
aXR5U3BlZWNoSGludAoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2Fs
bF0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzd2l0Y2ggKG1fb2JqZWN0LT5zcGVha1By
b3BlcnR5KCkpIHsKKyAgICBkZWZhdWx0OgorICAgIGNhc2UgU3BlYWtOb3JtYWw6CisgICAgICAg
IHJldHVybiBAIm5vcm1hbCI7CisgICAgY2FzZSBTcGVha05vbmU6CisgICAgICAgIHJldHVybiBA
Im5vbmUiOworICAgIGNhc2UgU3BlYWtTcGVsbE91dDoKKyAgICAgICAgcmV0dXJuIEAic3BlbGwt
b3V0IjsKKyAgICBjYXNlIFNwZWFrRGlnaXRzOgorICAgICAgICByZXR1cm4gQCJkaWdpdHMiOwor
ICAgIGNhc2UgU3BlYWtMaXRlcmFsUHVuY3R1YXRpb246CisgICAgICAgIHJldHVybiBAImxpdGVy
YWwtcHVuY3R1YXRpb24iOworICAgIGNhc2UgU3BlYWtOb1B1bmN0dWF0aW9uOgorICAgICAgICBy
ZXR1cm4gQCJuby1wdW5jdHVhdGlvbiI7CisgICAgfQorICAgIAorICAgIHJldHVybiBuaWw7Cit9
CisKKy0gKEJPT0wpYWNjZXNzaWJpbGl0eUFSSUFJc0J1c3kKK3sKKyAgICBpZiAoIVtzZWxmIF9w
cmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0
dXJuIG1fb2JqZWN0LT5hcmlhTGl2ZVJlZ2lvbkJ1c3koKTsKK30KKworLSAoTlNTdHJpbmcgKilh
Y2Nlc3NpYmlsaXR5QVJJQUxpdmVSZWdpb25TdGF0dXMKK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVw
YXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJu
IG1fb2JqZWN0LT5hcmlhTGl2ZVJlZ2lvblN0YXR1cygpOworfQorCistIChOU1N0cmluZyAqKWFj
Y2Vzc2liaWxpdHlBUklBUmVsZXZhbnRTdGF0dXMKK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJl
QWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHJldHVy
biBtX29iamVjdC0+YXJpYUxpdmVSZWdpb25SZWxldmFudCgpOworfQorCistIChCT09MKWFjY2Vz
c2liaWxpdHlBUklBTGl2ZVJlZ2lvbklzQXRvbWljCit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFy
ZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICByZXR1
cm4gbV9vYmplY3QtPmFyaWFMaXZlUmVnaW9uQXRvbWljKCk7Cit9CisKKy0gKE5TU3RyaW5nICop
YWNjZXNzaWJpbGl0eUludmFsaWRTdGF0dXMKK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNj
ZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHJldHVybiBt
X29iamVjdC0+aW52YWxpZFN0YXR1cygpOworfQorCistIChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciAqKWFjY2Vzc2liaWxpdHlNYXRoUm9vdEluZGV4T2JqZWN0Cit7CisgICAgcmV0dXJu
IG1fb2JqZWN0LT5tYXRoUm9vdEluZGV4T2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aFJvb3RJbmRl
eE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworfQorCistIChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciAqKWFjY2Vzc2liaWxpdHlNYXRoUmFkaWNhbmRPYmplY3QKK3sKKyAgICByZXR1cm4g
bV9vYmplY3QtPm1hdGhSYWRpY2FuZE9iamVjdCgpID8gbV9vYmplY3QtPm1hdGhSYWRpY2FuZE9i
amVjdCgpLT53cmFwcGVyKCkgOiAwOworfQorCistIChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciAqKWFjY2Vzc2liaWxpdHlNYXRoTnVtZXJhdG9yT2JqZWN0Cit7CisgICAgcmV0dXJuIG1f
b2JqZWN0LT5tYXRoTnVtZXJhdG9yT2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aE51bWVyYXRvck9i
amVjdCgpLT53cmFwcGVyKCkgOiAwOworfQorCistIChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciAqKWFjY2Vzc2liaWxpdHlNYXRoRGVub21pbmF0b3JPYmplY3QKK3sKKyAgICByZXR1cm4g
bV9vYmplY3QtPm1hdGhEZW5vbWluYXRvck9iamVjdCgpID8gbV9vYmplY3QtPm1hdGhEZW5vbWlu
YXRvck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworfQorCistIChXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciAqKWFjY2Vzc2liaWxpdHlNYXRoQmFzZU9iamVjdAoreworICAgIHJldHVybiBt
X29iamVjdC0+bWF0aEJhc2VPYmplY3QoKSA/IG1fb2JqZWN0LT5tYXRoQmFzZU9iamVjdCgpLT53
cmFwcGVyKCkgOiAwOworfQorCistIChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciAqKWFj
Y2Vzc2liaWxpdHlNYXRoU3Vic2NyaXB0T2JqZWN0Cit7CisgICAgcmV0dXJuIG1fb2JqZWN0LT5t
YXRoU3Vic2NyaXB0T2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aFN1YnNjcmlwdE9iamVjdCgpLT53
cmFwcGVyKCkgOiAwOworfQorCistIChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciAqKWFj
Y2Vzc2liaWxpdHlNYXRoU3VwZXJzY3JpcHRPYmplY3QKK3sKKyAgICByZXR1cm4gbV9vYmplY3Qt
Pm1hdGhTdXBlcnNjcmlwdE9iamVjdCgpID8gbV9vYmplY3QtPm1hdGhTdXBlcnNjcmlwdE9iamVj
dCgpLT53cmFwcGVyKCkgOiAwOworfQorCistIChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciAqKWFjY2Vzc2liaWxpdHlNYXRoVW5kZXJPYmplY3QKK3sKKyAgICByZXR1cm4gbV9vYmplY3Qt
Pm1hdGhVbmRlck9iamVjdCgpID8gbV9vYmplY3QtPm1hdGhVbmRlck9iamVjdCgpLT53cmFwcGVy
KCkgOiAwOworfQorCistIChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciAqKWFjY2Vzc2li
aWxpdHlNYXRoT3Zlck9iamVjdAoreworICAgIHJldHVybiBtX29iamVjdC0+bWF0aE92ZXJPYmpl
Y3QoKSA/IG1fb2JqZWN0LT5tYXRoT3Zlck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworfQorCist
IChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlNYXRoRmVuY2VkT3BlblN0cmluZworeworICAgIHJl
dHVybiBtX29iamVjdC0+bWF0aEZlbmNlZE9wZW5TdHJpbmcoKTsKK30KKworLSAoTlNTdHJpbmcg
KilhY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZENsb3NlU3RyaW5nCit7CisgICAgcmV0dXJuIG1fb2Jq
ZWN0LT5tYXRoRmVuY2VkQ2xvc2VTdHJpbmcoKTsKK30KKworLSAoQk9PTClhY2Nlc3NpYmlsaXR5
SXNNYXRoVG9wT2JqZWN0Cit7CisgICAgcmV0dXJuIG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBE
b2N1bWVudE1hdGhSb2xlOworfQorCistIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlNYXRoVHlw
ZQoreworICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVlKCkgPT0gTWF0aEVsZW1lbnRSb2xlKSB7
CisgICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoRnJhY3Rpb24oKSkKKyAgICAgICAgICAgIHJl
dHVybiBAIkFYTWF0aEZyYWN0aW9uIjsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhGZW5j
ZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aEZlbmNlZCI7CisgICAgICAgIGlmICht
X29iamVjdC0+aXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSkKKyAgICAgICAgICAgIHJldHVy
biBAIkFYTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0IjsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5p
c01hdGhSb3coKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFJvdyI7CisgICAgICAgIGlm
IChtX29iamVjdC0+aXNNYXRoVW5kZXJPdmVyKCkpCisgICAgICAgICAgICByZXR1cm4gQCJBWE1h
dGhVbmRlck92ZXIiOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFNxdWFyZVJvb3QoKSkK
KyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFNxdWFyZVJvb3QiOworICAgICAgICBpZiAobV9v
YmplY3QtPmlzTWF0aFJvb3QoKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFJvb3QiOwor
ICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFRleHQoKSkKKyAgICAgICAgICAgIHJldHVybiBA
IkFYTWF0aFRleHQiOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aE51bWJlcigpKQorICAg
ICAgICAgICAgcmV0dXJuIEAiQVhNYXRoTnVtYmVyIjsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5p
c01hdGhJZGVudGlmaWVyKCkpCisgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhJZGVudGlmaWVy
IjsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhUYWJsZSgpKQorICAgICAgICAgICAgcmV0
dXJuIEAiQVhNYXRoVGFibGUiOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFRhYmxlUm93
KCkpCisgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhUYWJsZVJvdyI7CisgICAgICAgIGlmICht
X29iamVjdC0+aXNNYXRoVGFibGVDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhU
YWJsZUNlbGwiOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aEZlbmNlT3BlcmF0b3IoKSkK
KyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aEZlbmNlT3BlcmF0b3IiOworICAgICAgICBpZiAo
bV9vYmplY3QtPmlzTWF0aFNlcGFyYXRvck9wZXJhdG9yKCkpCisgICAgICAgICAgICByZXR1cm4g
QCJBWE1hdGhTZXBhcmF0b3JPcGVyYXRvciI7CisgICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRo
T3BlcmF0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aE9wZXJhdG9yIjsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIG5pbDsKK30KKworLy8gVGhlc2UgYXJlIHVzZWQgYnkgRFJUIHNv
IHRoYXQgaXQgY2FuIGtub3cgd2hlbiBub3RpZmljYXRpb25zIGFyZSBzZW50LgorLy8gU2luY2Ug
dGhleSBhcmUgc3RhdGljLCBvbmx5IG9uZSBjYWxsYmFjayBjYW4gYmUgaW5zdGFsbGVkIGF0IGEg
dGltZSAodGhhdCdzIGFsbCBEUlQgc2hvdWxkIG5lZWQpLgordHlwZWRlZiB2b2lkICgqQVhQb3N0
ZWROb3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwgTlNTdHJpbmcqIG5vdGlmaWNhdGlv
biwgdm9pZCogY29udGV4dCk7CitzdGF0aWMgQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjayBB
WE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gMDsKK3N0YXRpYyB2b2lkKiBBWFBvc3RlZE5vdGlmaWNh
dGlvbkNvbnRleHQgPSAwOworCistICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRQb3N0ZWROb3RpZmlj
YXRpb25DYWxsYmFjazooQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjaylmdW5jdGlvbiB3aXRo
Q29udGV4dDoodm9pZCopY29udGV4dAoreworICAgIEFYTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSBm
dW5jdGlvbjsKKyAgICBBWFBvc3RlZE5vdGlmaWNhdGlvbkNvbnRleHQgPSBjb250ZXh0OworfQor
CistICh2b2lkKWFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmljYXRpb246KFdlYkNvcmU6OkFYT2Jq
ZWN0Q2FjaGU6OkFYTm90aWZpY2F0aW9uKW5vdGlmaWNhdGlvblR5cGUKK3sKKyAgICBpZiAoQVhO
b3RpZmljYXRpb25DYWxsYmFjaykgeworICAgICAgICBOU1N0cmluZyAqbm90aWZpY2F0aW9uU3Ry
aW5nID0gbmlsOworICAgICAgICAKKyAgICAgICAgLy8gUGFzcyBhIHN0cmluZyBiYWNrIHRvIERS
VCB3aGljaCBpcyBlYXNpZXIgdG8gbWF0Y2ggdGhhbiBhbiBlbnVtIHR5cGUuCisgICAgICAgIHN3
aXRjaCAobm90aWZpY2F0aW9uVHlwZSkgeworICAgICAgICAgICAgY2FzZSBXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjpBWEFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkOgorICAgICAgICAgICAgY2FzZSBX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjpBWEZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkOgorICAgICAg
ICAgICAgICAgIG5vdGlmaWNhdGlvblN0cmluZyA9IEAiQVhGb2N1c0NoYW5nZWQiOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG5vdGlmaWNhdGlvblN0cmlu
ZykKKyAgICAgICAgICAgIEFYTm90aWZpY2F0aW9uQ2FsbGJhY2soc2VsZiwgbm90aWZpY2F0aW9u
U3RyaW5nLCBBWFBvc3RlZE5vdGlmaWNhdGlvbkNvbnRleHQpOworICAgIH0KK30KKworI2lmbmRl
ZiBOREVCVUcKKy0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24KK3sKKyAgICBDR1JlY3QgZnJhbWUg
PSBbc2VsZiBhY2Nlc3NpYmlsaXR5RnJhbWVdOworICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIlJvbGU6ICglZCkgLSBUZXh0OiAlQDogVmFsdWU6ICVAIC0tIEZyYW1lOiAl
ZiAlZiAlZiAlZiIsIG1fb2JqZWN0ID8gbV9vYmplY3QtPnJvbGVWYWx1ZSgpIDogMCwgW3NlbGYg
YWNjZXNzaWJpbGl0eUxhYmVsXSwgW3NlbGYgYWNjZXNzaWJpbGl0eVZhbHVlXSwgZnJhbWUub3Jp
Z2luLngsIGZyYW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdo
dF07Cit9CisjZW5kaWYKKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hl
SU9TLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3Mv
QVhPYmplY3RDYWNoZUlPUy5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiQVhPYmplY3RDYWNoZS5oIgorCisjaWYg
SEFWRShBQ0NFU1NJQklMSVRZKSAmJiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQgIkFjY2Vzc2li
aWxpdHlPYmplY3QuaCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLmgi
CisjaW1wb3J0ICJSZW5kZXJPYmplY3QuaCIKKworI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAor
dm9pZCBBWE9iamVjdENhY2hlOjpkZXRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
aikKK3sKKyAgICBbb2JqLT53cmFwcGVyKCkgZGV0YWNoXTsKKyAgICBvYmotPnNldFdyYXBwZXIo
MCk7Cit9CisKK3ZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmopCit7CisgICAgUmV0YWluUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
PiB3cmFwcGVyKEFkb3B0TlMsIFtbQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWxsb2NdIGlu
aXRXaXRoQWNjZXNzaWJpbGl0eU9iamVjdDpvYmpdKTsKKyAgICBvYmotPnNldFdyYXBwZXIod3Jh
cHBlci5nZXQoKSk7Cit9CisKK3ZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZp
Y2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiwgQVhOb3RpZmljYXRpb24gbm90aWZpY2F0
aW9uKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKG5v
dGlmaWNhdGlvbikgeworICAgICAgICBjYXNlIEFYQWN0aXZlRGVzY2VuZGFudENoYW5nZWQ6Cisg
ICAgICAgIGNhc2UgQVhGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZDoKKyAgICAgICAgICAgIFtvYmot
PndyYXBwZXIoKSBwb3N0Rm9jdXNDaGFuZ2VOb3RpZmljYXRpb25dOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQVhTZWxlY3RlZFRleHRDaGFuZ2VkOgorICAgICAgICAgICAgW29i
ai0+d3JhcHBlcigpIHBvc3RTZWxlY3RlZFRleHRDaGFuZ2VOb3RpZmljYXRpb25dOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVhMYXlvdXRDb21wbGV0ZToKKyAgICAgICAgICAg
IFtvYmotPndyYXBwZXIoKSBwb3N0TGF5b3V0Q2hhbmdlTm90aWZpY2F0aW9uXTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEFYTGl2ZVJlZ2lvbkNoYW5nZWQ6CisgICAgICAgICAg
ICBbb2JqLT53cmFwcGVyKCkgcG9zdExpdmVSZWdpb25DaGFuZ2VOb3RpZmljYXRpb25dOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVhDaGlsZHJlbkNoYW5nZWQ6CisgICAgICAg
ICAgICBbb2JqLT53cmFwcGVyKCkgcG9zdENoaWxkcmVuQ2hhbmdlZE5vdGlmaWNhdGlvbl07Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBWExvYWRDb21wbGV0ZToKKyAgICAgICAg
ICAgIFtvYmotPndyYXBwZXIoKSBwb3N0TG9hZENvbXBsZXRlTm90aWZpY2F0aW9uXTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFYSW52YWxpZFN0YXR1c0NoYW5nZWQ6CisgICAg
ICAgICAgICBbb2JqLT53cmFwcGVyKCkgcG9zdEludmFsaWRTdGF0dXNDaGFuZ2VkTm90aWZpY2F0
aW9uXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFYU2VsZWN0ZWRDaGlsZHJl
bkNoYW5nZWQ6CisgICAgICAgIGNhc2UgQVhWYWx1ZUNoYW5nZWQ6CisgICAgICAgIGNhc2UgQVhD
aGVja2VkU3RhdGVDaGFuZ2VkOgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIAorICAgIC8vIFVzZWQgYnkgRFJUIHRvIGtub3cgd2hlbiBub3RpZmljYXRp
b25zIGFyZSBwb3N0ZWQuCisgICAgW29iai0+d3JhcHBlcigpIGFjY2Vzc2liaWxpdHlQb3N0ZWRO
b3RpZmljYXRpb246bm90aWZpY2F0aW9uXTsKK30KKwordm9pZCBBWE9iamVjdENhY2hlOjpub2Rl
VGV4dENoYW5nZVBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWFRl
eHRDaGFuZ2UsIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmKQoreworfQorCit2b2lkIEFYT2JqZWN0
Q2FjaGU6OmZyYW1lTG9hZGluZ0V2ZW50UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0
eU9iamVjdCosIEFYTG9hZGluZ0V2ZW50KQoreworfQorCit2b2lkIEFYT2JqZWN0Q2FjaGU6Omhh
bmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKE5vZGUqLCBOb2RlKiBuZXdOb2RlKQoreworICAg
IHBvc3ROb3RpZmljYXRpb24obmV3Tm9kZSwgQVhGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZCwgdHJ1
ZSwgUG9zdEFzeW5jaHJvbm91c2x5KTsKK30KKwordm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVT
Y3JvbGxlZFRvQW5jaG9yKGNvbnN0IE5vZGUqKQoreworfQorICAgIAorfQorCisjZW5kaWYgLy8g
SEFWRShBQ0NFU1NJQklMSVRZKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188793</attachid>
            <date>2013-02-17 21:15:41 -0800</date>
            <delta_ts>2013-02-17 21:23:55 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>100516</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDE2NCBAQAogMjAxMy0wMi0xNyAgQ2hyaXMg
RmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCisgICAgICAgIEFYOiBVcHN0cmVhbSBp
T1MgQWNjZXNzaWJpbGl0eSBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTEwMDcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXBzdHJlYW0gdGhlIGlPUyBBY2Nlc3NpYmlsaXR5IGZpbGVzIGZvciBX
ZWJDb3JlLiAKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvczogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmRldGFjaFdyYXBwZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcik6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpmcmFtZUxvYWRpbmdFdmVudFBs
YXRmb3JtTm90aWZpY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Omhh
bmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OmhhbmRsZVNjcm9sbGVkVG9BbmNob3IpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1MubW06IEFkZGVkLgorICAgICAgICAoLVtXQUtWaWV3
IGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRdKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6ZGV0YWNoRnJvbVBhcmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpvdmVycmlkZUF0dGFjaG1lbnRQYXJlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eVBh
c3N3b3JkRmllbGRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dDo6YWNjZXNzaWJpbGl0eUlnbm9yZUF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eVBsYXRmb3JtSW5jbHVkZXNPYmplY3QpOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
Lmg6IEFkZGVkLgorICAgICAgICAoV0FLVmlldyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9p
b3MvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06IEFkZGVkLgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIgaW5pdFdpdGhUZXh0TWFya2VyOmNhY2hlOl0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBpbml0V2l0aERhdGE6Y2FjaGU6XSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIGluaXRXaXRoRGF0YTphY2Nlc3NpYmlsaXR5T2Jq
ZWN0Ol0pOgorICAgICAgICAoK1tXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2Vy
V2l0aFZpc2libGVQb3NpdGlvbjpjYWNoZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIgZGF0YVJlcHJlc2VudGF0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyIHZpc2libGVQb3NpdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciBkZXNjcmlwdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBpbml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGRldGFjaF0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eU9iamVj
dF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5Q2FuRnV6enlIaXRUZXN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIGFjY2Vzc2liaWxpdHlQb3N0UHJvY2Vzc0hpdFRlc3Q6XSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlIaXRUZXN0Ol0pOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5RWxlbWVu
dENvdW50XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vz
c2liaWxpdHlFbGVtZW50QXRJbmRleDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgaW5kZXhPZkFjY2Vzc2liaWxpdHlFbGVtZW50Ol0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5TGFuZ3VhZ2VdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlJc0xh
bmRtYXJrUm9sZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
X2FjY2Vzc2liaWxpdHlMaXN0QW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlMYW5kbWFya0FuY2VzdG9yXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5VGFibGVBbmNl
c3Rvcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNz
aWJpbGl0eVRyYWl0c0Zyb21BbmNlc3RvcnNdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVRyYWl0c10pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkZXRlcm1pbmVJc0FjY2Vzc2liaWxpdHlFbGVtZW50XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGlzQWNjZXNzaWJpbGl0
eUVsZW1lbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc3Ry
aW5nVmFsdWVTaG91bGRCZVVzZWRJbkxhYmVsXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlMYWJlbF0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0YWJsZUNlbGxQYXJlbnRdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGFibGVQYXJlbnRdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVRpdGxlRWxlbWVudF0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SGVh
ZGVyRWxlbWVudHNdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
YWNjZXNzaWJpbGl0eUVsZW1lbnRGb3JSb3c6YW5kQ29sdW1uOl0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5Um93UmFuZ2VdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUNvbHVtblJh
bmdlXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlQbGFjZWhvbGRlclZhbHVlXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlWYWx1ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SXNDb21ib0JveF0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SGludF0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5VVJMXSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9jb252ZXJ0SW50UmVjdFRv
U2NyZWVuQ29vcmRpbmF0ZXM6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIGFjY2Vzc2liaWxpdHlFbGVtZW50UmVjdF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QWN0aXZhdGlvblBvaW50XSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlGcmFtZV0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBjb250YWluc1VubmF0
dXJhbGx5U2VnbWVudGVkQ2hpbGRyZW5dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUNvbnRhaW5lcl0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudF0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVdl
YkRvY3VtZW50Vmlld10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBfYWNjZXNzaWJpbGl0eU5leHRFbGVtZW50c1dpdGhDb3VudDpdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlQcmV2aW91c0VsZW1lbnRz
V2l0aENvdW50Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBh
Y2Nlc3NpYmlsaXR5UmVxdWlyZWRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgYWNjZXNzaWJpbGl0eUZsb3dUb0VsZW1lbnRzXSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlMaW5rZWRFbGVtZW50XSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGlzQXR0YWNobWVudF0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eUFj
dGl2YXRlXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGF0dGFj
aG1lbnRWaWV3XSk6CisgICAgICAgIChyZW5kZXJlckZvclZpZXcpOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVBhcmVudEZvclN1YnZpZXc6
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHBvc3RGb2N1c0No
YW5nZU5vdGlmaWNhdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBwb3N0U2VsZWN0ZWRUZXh0Q2hhbmdlTm90aWZpY2F0aW9uXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHBvc3RMYXlvdXRDaGFuZ2VOb3RpZmljYXRpb25d
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgcG9zdExpdmVSZWdp
b25DaGFuZ2VOb3RpZmljYXRpb25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgcG9zdExvYWRDb21wbGV0ZU5vdGlmaWNhdGlvbl0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBwb3N0Q2hpbGRyZW5DaGFuZ2VkTm90aWZpY2F0aW9u
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHBvc3RJbnZhbGlk
U3RhdHVzQ2hhbmdlZE5vdGlmaWNhdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5RWxlbWVudERpZEJlY29tZUZvY3VzZWRdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eU1vZGlm
eVNlbGVjdGlvbjppbmNyZWFzZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgYWNjZXNzaWJpbGl0eUluY3JlYXNlU2VsZWN0aW9uOl0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5RGVjcmVhc2VTZWxlY3Rp
b246XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlNb3ZlU2VsZWN0aW9uVG9NYXJrZXI6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJbmNyZW1lbnRdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eURlY3JlbWVudF0pOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWRkQWNjZXNzaWJpbGl0eU9i
amVjdDp0b1RleHRNYXJrZXJBcnJheTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgc3RyaW5nRm9yVGV4dE1hcmtlcnM6XSk6CisgICAgICAgIChibG9ja3F1b3Rl
TGV2ZWwpOgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRCbG9ja3F1b3RlTGV2ZWwpOgor
ICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRIZWFkaW5nTGV2ZWwpOgorICAgICAgICAoQVhB
dHRyaWJ1dGVTdHJpbmdTZXRGb250KToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0TnVt
YmVyKToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUpOgorICAgICAgICAoQVhB
dHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dCk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFycmF5T2ZUZXh0Rm9yVGV4dE1hcmtlcnM6YXR0cmlidXRlZDpdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2NvbnZlcnRUb05TUmFuZ2U6
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9jb252ZXJ0VG9E
T01SYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgcG9z
aXRpb25Gb3JUZXh0TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgZWxlbWVudFRleHRSYW5nZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yVGV4dE1hcmtlcjpdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdlRm9y
U2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRl
eHRNYXJrZXJGb3JQb3NpdGlvbjpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgX3N0cmluZ0ZvclJhbmdlOmF0dHJpYnV0ZWQ6XSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHN0cmluZ0ZvclJhbmdlOl0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGVsZW1lbnRzRm9yUmFu
Z2U6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHNlbGVjdGlv
blJhbmdlU3RyaW5nXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IHNlbGVjdGVkVGV4dE1hcmtlcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBsaW5lRW5kTWFya2VyRm9yTWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBsaW5lU3RhcnRNYXJrZXJGb3JNYXJrZXI6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIG5leHRNYXJrZXJGb3JNYXJrZXI6XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHByZXZpb3VzTWFya2Vy
Rm9yTWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBm
cmFtZUZvclRleHRNYXJrZXJzOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciB0ZXh0TWFya2VyRm9yUG9pbnQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJZGVudGlmaWVyXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlTcGVlY2hIaW50XSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBUklB
SXNCdXN5XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vz
c2liaWxpdHlBUklBTGl2ZVJlZ2lvblN0YXR1c10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QVJJQVJlbGV2YW50U3RhdHVzXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBUklBTGl2
ZVJlZ2lvbklzQXRvbWljXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIGFjY2Vzc2liaWxpdHlJbnZhbGlkU3RhdHVzXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlNYXRoUm9vdEluZGV4T2JqZWN0XSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlNYXRo
UmFkaWNhbmRPYmplY3RdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgYWNjZXNzaWJpbGl0eU1hdGhOdW1lcmF0b3JPYmplY3RdKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eU1hdGhEZW5vbWluYXRvck9iamVj
dF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5TWF0aEJhc2VPYmplY3RdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgYWNjZXNzaWJpbGl0eU1hdGhTdWJzY3JpcHRPYmplY3RdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eU1hdGhTdXBlcnNjcmlwdE9i
amVjdF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3Np
YmlsaXR5TWF0aFVuZGVyT2JqZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlNYXRoT3Zlck9iamVjdF0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZE9wZW5TdHJp
bmddKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJp
bGl0eU1hdGhGZW5jZWRDbG9zZVN0cmluZ10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SXNNYXRoVG9wT2JqZWN0XSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlNYXRoVHlwZV0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5U2V0
UG9zdGVkTm90aWZpY2F0aW9uQ2FsbGJhY2s6d2l0aENvbnRleHQ6XSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmljYXRp
b246V2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGRlc2NyaXB0aW9uXSk6CisKKzIwMTMtMDItMTcgIENocmlzIEZsZWl6
YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKwogICAgICAgICBBWDogcmVuYW1lIFdlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIHRvIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFz
ZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMDYx
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDE0MzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDY3MSw2ICs0NjcxLDEw
IEBACiAJCUFBN0ZFRUE4MTZBNEU2RjMwMDRDMEMzMyAvKiBKU1NwZWVjaFN5bnRoZXNpc1ZvaWNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBN0ZF
RUEwMTZBNEU2RjMwMDRDMEMzMyAvKiBKU1NwZWVjaFN5bnRoZXNpc1ZvaWNlLmNwcCAqLzsgfTsK
IAkJQUE3RkVFQTkxNkE0RTZGMzAwNEMwQzMzIC8qIEpTU3BlZWNoU3ludGhlc2lzVm9pY2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBN0ZFRUExMTZB
NEU2RjMwMDRDMEMzMyAvKiBKU1NwZWVjaFN5bnRoZXNpc1ZvaWNlLmggKi87IH07CiAJCUFBN0ZF
RUFEMTZBNEU3NEIwMDRDMEMzMyAvKiBKU1NwZWVjaFN5bnRoZXNpcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE3RkVFQUMxNkE0RTc0QjAwNEMwQzMz
IC8qIEpTU3BlZWNoU3ludGhlc2lzLmggKi87IH07CisJCUFBQTcyOEY2MTZEMUQ4QkMwMEQzQkJD
NiAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQUFBNzI4RjAxNkQxRDhCQzAwRDNCQkM2IC8qIEFjY2Vzc2li
aWxpdHlPYmplY3RJT1MubW0gKi87IH07CisJCUFBQTcyOEY3MTZEMUQ4QkMwMEQzQkJDNiAvKiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQUFBNzI4RjExNkQxRDhCQzAwRDNCQkM2IC8qIEFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVySU9TLmggKi87IH07CisJCUFBQTcyOEY4MTZEMUQ4QkMwMEQzQkJD
NiAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBQTcyOEYyMTZEMUQ4QkMwMEQzQkJDNiAvKiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSAqLzsgfTsKKwkJQUFBNzI4RjkxNkQxRDhC
QzAwRDNCQkM2IC8qIEFYT2JqZWN0Q2FjaGVJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQUE3MjhGMzE2RDFEOEJDMDBEM0JCQzYgLyogQVhPYmpl
Y3RDYWNoZUlPUy5tbSAqLzsgfTsKIAkJQUFCNjA1NEUxNTg3NEM1ODAwN0I1MDMxIC8qIEluamVj
dGVkU2NyaXB0QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBQUI2MDU0QTE1ODc0QzU4MDA3QjUwMzEgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNw
cCAqLzsgfTsKIAkJQUFCNjA1NEYxNTg3NEM1ODAwN0I1MDMxIC8qIEluamVjdGVkU2NyaXB0QmFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUFCNjA1
NEIxNTg3NEM1ODAwN0I1MDMxIC8qIEluamVjdGVkU2NyaXB0QmFzZS5oICovOyB9OwogCQlBQUI2
MDU1MDE1ODc0QzU4MDA3QjUwMzEgLyogSW5qZWN0ZWRTY3JpcHRNb2R1bGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUFCNjA1NEMxNTg3NEM1ODAw
N0I1MDMxIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmNwcCAqLzsgfTsKQEAgLTEyMDY4LDYgKzEy
MDcyLDEwIEBACiAJCUFBN0ZFRUFDMTZBNEU3NEIwMDRDMEMzMyAvKiBKU1NwZWVjaFN5bnRoZXNp
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NwZWVjaFN5bnRoZXNpcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQTkwMzBGRTE1N0UxNkEwMDAyNzYyNDcg
LyogSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IHBhdGggPSBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5q
czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUE5MTI3NTAxNTdFMzVBNTAwNDU0RTU0
IC8qIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBQTcyOEYwMTZEMUQ4QkMwMEQzQkJDNiAvKiBBY2Nl
c3NpYmlsaXR5T2JqZWN0SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQWNjZXNzaWJpbGl0eU9iamVjdElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQUFBNzI4RjExNkQxRDhCQzAwRDNCQkM2IC8qIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVySU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVySU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBQTcyOEYy
MTZEMUQ4QkMwMEQzQkJDNiAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBQUE3MjhGMzE2RDFE
OEJDMDBEM0JCQzYgLyogQVhPYmplY3RDYWNoZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IEFYT2JqZWN0Q2FjaGVJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFBQjYwNTRBMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdEJh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRTY3Jp
cHRCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUFCNjA1NEIxNTg3NEM1
ODAwN0I1MDMxIC8qIEluamVjdGVkU2NyaXB0QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbmplY3RlZFNjcmlwdEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQUFCNjA1NEMxNTg3NEM1ODAwN0I1MDMxIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkU2NyaXB0TW9k
dWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1MzU2LDYgKzE1MzY0LDcg
QEAKIAkJMjlBODEyMDQwRkJCOUI0MTAwNTEwMjkzIC8qIGFjY2Vzc2liaWxpdHkgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUFBQTcyOEVGMTZEMUQ4QkMw
MEQzQkJDNiAvKiBpb3MgKi8sCiAJCQkJMjlBODEyMDUwRkJCOUI1MjAwNTEwMjkzIC8qIG1hYyAq
LywKIAkJCQkwRjI5QzE2RDEzMDBDMkUyMDAyRDc5NEUgLyogQWNjZXNzaWJpbGl0eUFsbEluT25l
LmNwcCAqLywKIAkJCQkyOTgxQ0E5RDEzMTgyMkVDMDBEMTJGMkEgLyogQWNjZXNzaWJpbGl0eUFS
SUFHcmlkLmNwcCAqLywKQEAgLTE5OTA4LDYgKzE5OTE3LDE3IEBACiAJCQluYW1lID0gU3BlZWNo
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQUFBNzI4RUYxNkQxRDhCQzAw
RDNCQkM2IC8qIGlvcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJQUFBNzI4RjAxNkQxRDhCQzAwRDNCQkM2IC8qIEFjY2Vzc2liaWxpdHlPYmplY3RJT1Mu
bW0gKi8sCisJCQkJQUFBNzI4RjExNkQxRDhCQzAwRDNCQkM2IC8qIEFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLmggKi8sCisJCQkJQUFBNzI4RjIxNkQxRDhCQzAwRDNCQkM2IC8qIEFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tICovLAorCQkJCUFBQTcyOEYzMTZEMUQ4QkMwMEQz
QkJDNiAvKiBBWE9iamVjdENhY2hlSU9TLm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBpb3M7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMUE5NDJERDE1QjVDRTIyMDBENTI1
RDEgLyogbWVkaWFzb3VyY2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKApAQCAtMjMxNzMsNiArMjMxOTMsNyBAQAogCQkJCTc2Q0REMkY1MTEwM0RBNjYwMDY4MDUy
MSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlB
Q0IyMTIxNDNFNzEyODAwNkJDQTVGIC8qIEFjY2Vzc2liaWxpdHlNb2NrT2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyOUE4MTIzNjBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eU9i
amVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUFBNzI4RjcxNkQxRDhCQzAwRDNCQkM2IC8qIEFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNDA5Qzk4
NTExNkQwREREMDA3MTk3QkQgLyogQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyOUE4MTIzOTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNDNEY2RUIxMTA4RjlBNTAwOTlE
MERCIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjY5MTcs
NyArMjY5MzgsOSBAQAogCQkJCTc2Q0REMkY2MTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmls
aXR5TWVudUxpc3RPcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzZDREQyRjQxMTAzREE2
NjAwNjgwNTIxIC8qIEFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTI5QUNCMjE0MTQzRTc0OTgwMDZCQ0E1RiAvKiBBY2Nlc3NpYmlsaXR5TW9ja09iamVj
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBQUE3MjhGNjE2RDFEOEJDMDBEM0JCQzYgLyogQWNj
ZXNzaWJpbGl0eU9iamVjdElPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTI5QTgxMjQ4MEZCQjlD
QTkwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJQUFBNzI4RjgxNkQxRDhCQzAwRDNCQkM2IC8qIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTQwOUM5ODQxMTZEMERERDAwNzE5N0JEIC8qIEFj
Y2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOUQ3
QkNGNjE0NDRBRjU4MDA3MDYxOUMgLyogQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjVEMzFERkExMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxi
YWNrLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjY5ODEsNiArMjcwMDQsNyBAQAogCQkJCTUxRTFF
Q0FGMEM5MUM1NDYwMERDMjU1QiAvKiBBdXRvZHJhaW5lZFBvb2wubW0gaW4gU291cmNlcyAqLywK
IAkJCQk0NTgzMEQ0RDE2NzlCNEY4MDBBQ0Y4QzMgLyogQXV0b3Njcm9sbENvbnRyb2xsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkYwNTAwQTE1NEYwOTAwMEE0MjM0IC8qIEF1dG9UYWJs
ZUxheW91dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBQUE3MjhGOTE2RDFEOEJDMDBEM0JCQzYg
LyogQVhPYmplY3RDYWNoZUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTI5QTgxMjRCMEZCQjlD
QTkwMDUxMDI5MyAvKiBBWE9iamVjdENhY2hlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNB
OEM4MUYxMUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQ0E4Q0E1RjExRTRFNkQxMDA4MTJGQjcgLyogQmFja0ZvcndhcmRMaXN0
SW1wbC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJ
T1MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0Fj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TX2gKKyNk
ZWZpbmUgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1NfaAorCisjaWYgSEFWRShBQ0NFU1NJ
QklMSVRZKSAmJiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisj
aW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorCitAY2xhc3MgV0FLVmlldzsKKworQGlu
dGVyZmFjZSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciA6IE5TT2JqZWN0IHsKKyAgICBX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtX29iamVjdDsKKyAgICAKKyAgICAvLyBDYWNo
ZWQgZGF0YSB0byBhdm9pZCBmcmVxdWVudCByZS1jb21wdXRhdGlvbi4KKyAgICBpbnQgbV9pc0Fj
Y2Vzc2liaWxpdHlFbGVtZW50OworICAgIHVpbnQ2NF90IG1fYWNjZXNzaWJpbGl0eVRyYWl0c0Zy
b21BbmNlc3RvcjsKK30KKworLSAoaWQpaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0OihXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KilheE9iamVjdDsKKy0gKHZvaWQpZGV0YWNoOworLSAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCopYWNjZXNzaWJpbGl0eU9iamVjdDsKKworLSAo
aWQpYWNjZXNzaWJpbGl0eUhpdFRlc3Q6KENHUG9pbnQpcG9pbnQ7CistIChBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciAqKWFjY2Vzc2liaWxpdHlQb3N0UHJvY2Vzc0hpdFRlc3Q6KENHUG9pbnQp
cG9pbnQ7CistIChCT09MKWFjY2Vzc2liaWxpdHlDYW5GdXp6eUhpdFRlc3Q7CisKKy0gKEJPT0wp
aXNBY2Nlc3NpYmlsaXR5RWxlbWVudDsKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUxhYmVs
OworLSAoQ0dSZWN0KWFjY2Vzc2liaWxpdHlGcmFtZTsKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJp
bGl0eVZhbHVlOworCistIChOU0ludGVnZXIpYWNjZXNzaWJpbGl0eUVsZW1lbnRDb3VudDsKKy0g
KGlkKWFjY2Vzc2liaWxpdHlFbGVtZW50QXRJbmRleDooTlNJbnRlZ2VyKWluZGV4OworLSAoTlNJ
bnRlZ2VyKWluZGV4T2ZBY2Nlc3NpYmlsaXR5RWxlbWVudDooaWQpZWxlbWVudDsKKworLSAoQk9P
TClpc0F0dGFjaG1lbnQ7CistIChXQUtWaWV3ICopYXR0YWNobWVudFZpZXc7CisKKy0gKHZvaWQp
cG9zdEZvY3VzQ2hhbmdlTm90aWZpY2F0aW9uOworLSAodm9pZClwb3N0U2VsZWN0ZWRUZXh0Q2hh
bmdlTm90aWZpY2F0aW9uOworLSAodm9pZClwb3N0TGF5b3V0Q2hhbmdlTm90aWZpY2F0aW9uOwor
LSAodm9pZClwb3N0TGl2ZVJlZ2lvbkNoYW5nZU5vdGlmaWNhdGlvbjsKKy0gKHZvaWQpcG9zdExv
YWRDb21wbGV0ZU5vdGlmaWNhdGlvbjsKKy0gKHZvaWQpcG9zdENoaWxkcmVuQ2hhbmdlZE5vdGlm
aWNhdGlvbjsKKy0gKHZvaWQpcG9zdEludmFsaWRTdGF0dXNDaGFuZ2VkTm90aWZpY2F0aW9uOwor
CisvLyBVc2VkIHRvIGluZm9ybSBhbiBlbGVtZW50IHdoZW4gYSBub3RpZmljYXRpb24gaXMgcG9z
dGVkIGZvciBpdC4gVXNlZCBieSBEUlQuCistICh2b2lkKWFjY2Vzc2liaWxpdHlQb3N0ZWROb3Rp
ZmljYXRpb246KFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OkFYTm90aWZpY2F0aW9uKW5vdGlmaWNh
dGlvbjsKKworQGVuZAorCisjZW5kaWYKKworI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVySU9TX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vz
c2liaWxpdHlPYmplY3RJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pb3MvQWNjZXNzaWJpbGl0eU9iamVjdElPUy5tbQkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1MubW0J
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5oIgorI2ltcG9ydCAiSFRNTElucHV0RWxlbWVudC5oIgorI2ltcG9ydCAi
UmVuZGVyT2JqZWN0LmgiCisjaW1wb3J0ICJXQUtWaWV3LmgiCisKKyNpZiBIQVZFKEFDQ0VTU0lC
SUxJVFkpICYmIFBMQVRGT1JNKElPUykKKworI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJJT1MuaCIKKworQGludGVyZmFjZSBXQUtWaWV3IChpT1NBY2Nlc3NpYmlsaXR5KQorLSAo
Qk9PTClhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0FL
VmlldyAoaU9TQWNjZXNzaWJpbGl0eSkKKworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
Cit7CisgICAgcmV0dXJuIFlFUzsKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgCit2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFjaEZyb21QYXJlbnQoKQoreworfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6Om92ZXJyaWRlQXR0YWNobWVudFBhcmVudChBY2Nl
c3NpYmlsaXR5T2JqZWN0KikKK3sKK30KKyAgICAKKy8vIEluIGlQaG9uZSBvbmx5IGNvZGUgZm9y
IG5vdy4gSXQncyBkZWJhdGVhYmxlIHdoZXRoZXIgdGhpcyBpcyBkZXNpcmVkIG9uIGFsbCBwbGF0
Zm9ybXMuCitpbnQgQWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eVBhc3N3b3JkRmll
bGRMZW5ndGgoKQoreworICAgIGlmICghaXNQYXNzd29yZEZpZWxkKCkpCisgICAgICAgIHJldHVy
biAwOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0gc3RhdGljX2Nhc3Q8QWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdCo+KHRoaXMpLT5yZW5kZXJlcigpOworICAgIAorICAgIGlmICgh
cmVuZGVyT2JqZWN0IHx8ICFyZW5kZXJPYmplY3QtPm5vZGUoKSB8fCAhcmVuZGVyT2JqZWN0LT5u
b2RlKCktPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQqPihyZW5kZXJPYmplY3QtPm5vZGUoKSk7CisgICAgaWYgKCFpbnB1dEVsZW1lbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50LT52YWx1
ZSgpLmxlbmd0aCgpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFjY2Vzc2liaWxp
dHlJZ25vcmVBdHRhY2htZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gW1t3cmFwcGVyKCkgYXR0
YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRdOworfQorICAgIAorQWNjZXNzaWJp
bGl0eU9iamVjdEluY2x1c2lvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5UGxh
dGZvcm1JbmNsdWRlc09iamVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIERlZmF1bHRCZWhhdmlv
cjsKK30KKyAgICAKK30gLy8gV2ViQ29yZQorCisjZW5kaWYgLy8gSEFWRShBQ0NFU1NJQklMSVRZ
KSAmJiBQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5t
bQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwODYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVySU9TLmgiCisKKyNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpICYmIFBMQVRGT1JN
KElPUykKKworI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oIgorI2ltcG9ydCAi
QWNjZXNzaWJpbGl0eVRhYmxlLmgiCisjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmgi
CisjaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGcmFtZS5oIgorI2ltcG9ydCAiRnJhbWVTZWxl
Y3Rpb24uaCIKKyNpbXBvcnQgIkZyYW1lVmlldy5oIgorI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5o
IgorI2ltcG9ydCAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW1wb3J0ICJIVE1MSW5wdXRF
bGVtZW50LmgiCisjaW1wb3J0ICJIVE1MTmFtZXMuaCIKKyNpbXBvcnQgIkludFJlY3QuaCIKKyNp
bXBvcnQgIkludFNpemUuaCIKKyNpbXBvcnQgIlJhbmdlLmgiCisjaW1wb3J0ICJSZW5kZXJWaWV3
LmgiCisjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaCIKKyNpbXBvcnQgIlRl
eHRJdGVyYXRvci5oIgorI2ltcG9ydCAiV0FLU2Nyb2xsVmlldy5oIgorI2ltcG9ydCAiV0FLVmll
dy5oIgorI2ltcG9ydCAiV0FLV2luZG93LmgiCisjaW1wb3J0ICJXZWJDb3JlVGhyZWFkLmgiCisj
aW1wb3J0ICJ2aXNpYmxlX3VuaXRzLmgiCisKKyNpbXBvcnQgPEdyYXBoaWNzU2VydmljZXMvR3Jh
cGhpY3NTZXJ2aWNlcy5oPgorCitAaW50ZXJmYWNlIE5TT2JqZWN0IChBY2Nlc3NpYmlsaXR5UHJp
dmF0ZSkKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlVbnJlZ2lzdGVyOworLSAoTlNTdHJpbmcgKilh
Y2Nlc3NpYmlsaXR5TGFiZWw7CistIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlWYWx1ZTsKKy0g
KEJPT0wpaXNBY2Nlc3NpYmlsaXR5RWxlbWVudDsKKy0gKE5TSW50ZWdlcilhY2Nlc3NpYmlsaXR5
RWxlbWVudENvdW50OworLSAoaWQpYWNjZXNzaWJpbGl0eUVsZW1lbnRBdEluZGV4OihOU0ludGVn
ZXIpaW5kZXg7CistIChOU0ludGVnZXIpaW5kZXhPZkFjY2Vzc2liaWxpdHlFbGVtZW50OihpZCll
bGVtZW50OworQGVuZAorCitAaW50ZXJmYWNlIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IChBY2Nlc3NpYmlsaXR5UHJpdmF0ZSkKKy0gKGlkKV9hY2Nlc3NpYmlsaXR5V2ViRG9jdW1lbnRW
aWV3OworLSAoaWQpYWNjZXNzaWJpbGl0eUNvbnRhaW5lcjsKKy0gKHZvaWQpc2V0QWNjZXNzaWJp
bGl0eUxhYmVsOihOU1N0cmluZyAqKWxhYmVsOworLSAodm9pZClzZXRBY2Nlc3NpYmlsaXR5VmFs
dWU6KE5TU3RyaW5nICopdmFsdWU7CistIChCT09MKWNvbnRhaW5zVW5uYXR1cmFsbHlTZWdtZW50
ZWRDaGlsZHJlbjsKKy0gKE5TSW50ZWdlcilwb3NpdGlvbkZvclRleHRNYXJrZXI6KGlkKW1hcmtl
cjsKK0BlbmQKKworQGludGVyZmFjZSBXQUtWaWV3IChpT1NBY2Nlc3NpYmlsaXR5KQorLSAoQk9P
TClhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkOworQGVuZAorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKKy8vIFRoZXNlIGFyZSB0b2tlbnMgYWNj
ZXNzaWJpbGl0eSB1c2VzIHRvIGRlbm90ZSBhdHRyaWJ1dGVzLiAKK3N0YXRpYyBOU1N0cmluZyAq
IGNvbnN0IFVJQWNjZXNzaWJpbGl0eVRva2VuQmxvY2txdW90ZUxldmVsID0gQCJVSUFjY2Vzc2li
aWxpdHlUb2tlbkJsb2NrcXVvdGVMZXZlbCI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBVSUFj
Y2Vzc2liaWxpdHlUb2tlbkhlYWRpbmdMZXZlbCA9IEAiVUlBY2Nlc3NpYmlsaXR5VG9rZW5IZWFk
aW5nTGV2ZWwiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgVUlBY2Nlc3NpYmlsaXR5VG9rZW5G
b250TmFtZSA9IEAiVUlBY2Nlc3NpYmlsaXR5VG9rZW5Gb250TmFtZSI7CitzdGF0aWMgTlNTdHJp
bmcgKiBjb25zdCBVSUFjY2Vzc2liaWxpdHlUb2tlbkZvbnRGYW1pbHkgPSBAIlVJQWNjZXNzaWJp
bGl0eVRva2VuRm9udEZhbWlseSI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBVSUFjY2Vzc2li
aWxpdHlUb2tlbkZvbnRTaXplID0gQCJVSUFjY2Vzc2liaWxpdHlUb2tlbkZvbnRTaXplIjsKK3N0
YXRpYyBOU1N0cmluZyAqIGNvbnN0IFVJQWNjZXNzaWJpbGl0eVRva2VuQm9sZCA9IEAiVUlBY2Nl
c3NpYmlsaXR5VG9rZW5Cb2xkIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFVJQWNjZXNzaWJp
bGl0eVRva2VuSXRhbGljID0gQCJVSUFjY2Vzc2liaWxpdHlUb2tlbkl0YWxpYyI7CitzdGF0aWMg
TlNTdHJpbmcgKiBjb25zdCBVSUFjY2Vzc2liaWxpdHlUb2tlblVuZGVybGluZSA9IEAiVUlBY2Nl
c3NpYmlsaXR5VG9rZW5VbmRlcmxpbmUiOworCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciAqd3JhcHBlcikKK3sKKyAgICB3aGlsZSAod3JhcHBlciAmJiAhW3dyYXBwZXIgaXNB
Y2Nlc3NpYmlsaXR5RWxlbWVudF0pIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2Jq
ZWN0ID0gW3dyYXBwZXIgYWNjZXNzaWJpbGl0eU9iamVjdF07CisgICAgICAgIGlmICghb2JqZWN0
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBpZiAoW3dyYXBwZXIgaXNB
dHRhY2htZW50XSAmJiAhW1t3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkXSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIHBhcmVudE9iamVjdCA9IG9iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25v
cmVkKCk7CisgICAgICAgIGlmICghcGFyZW50T2JqZWN0KQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgd3JhcHBlciA9IHBhcmVudE9iamVjdC0+d3JhcHBlcigpOworICAgIH0KKyAgICBy
ZXR1cm4gd3JhcHBlcjsKK30KKworI3ByYWdtYSBtYXJrIEFjY2Vzc2liaWxpdHkgVGV4dCBNYXJr
ZXIKKworQGludGVyZmFjZSBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciA6IE5TT2JqZWN0Cit7
CisgICAgQVhPYmplY3RDYWNoZSogX2NhY2hlOworICAgIFRleHRNYXJrZXJEYXRhIF90ZXh0TWFy
a2VyRGF0YTsKK30KKworKyAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKil0ZXh0TWFya2Vy
V2l0aFZpc2libGVQb3NpdGlvbjooVmlzaWJsZVBvc2l0aW9uJil2aXNpYmxlUG9zIGNhY2hlOihB
WE9iamVjdENhY2hlKiljYWNoZTsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIKKworLSAoaWQpaW5pdFdpdGhUZXh0TWFya2VyOihUZXh0TWFya2Vy
RGF0YSAqKWRhdGEgY2FjaGU6KEFYT2JqZWN0Q2FjaGUqKWNhY2hlCit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX2NhY2hl
ID0gY2FjaGU7CisgICAgbWVtY3B5KCZfdGV4dE1hcmtlckRhdGEsIGRhdGEsIHNpemVvZihUZXh0
TWFya2VyRGF0YSkpOworICAgIHJldHVybiBzZWxmOworfQorCistIChpZClpbml0V2l0aERhdGE6
KE5TRGF0YSAqKWRhdGEgY2FjaGU6KEFYT2JqZWN0Q2FjaGUqKWNhY2hlCit7CisgICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX2Nh
Y2hlID0gY2FjaGU7CisgICAgW2RhdGEgZ2V0Qnl0ZXM6Jl90ZXh0TWFya2VyRGF0YSBsZW5ndGg6
c2l6ZW9mKFRleHRNYXJrZXJEYXRhKV07CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy8v
IFRoaXMgaXMgbmVlZGVkIGZvciBleHRlcm5hbCBjbGllbnRzIHRvIGJlIGFibGUgdG8gY3JlYXRl
IGEgdGV4dCBtYXJrZXIgd2l0aG91dCBoYXZpbmcgYSBwb2ludGVyIHRvIHRoZSBjYWNoZS4KKy0g
KGlkKWluaXRXaXRoRGF0YTooTlNEYXRhICopZGF0YSBhY2Nlc3NpYmlsaXR5T2JqZWN0OihBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciAqKXdyYXBwZXIKK3sKKyAgICBXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBheE9iamVjdCA9IFt3cmFwcGVyIGFjY2Vzc2liaWxpdHlPYmplY3RdOyAK
KyAgICBpZiAoIWF4T2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHJldHVy
biBbc2VsZiBpbml0V2l0aERhdGE6ZGF0YSBjYWNoZTpheE9iamVjdC0+YXhPYmplY3RDYWNoZSgp
XTsKK30KKworKyAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKil0ZXh0TWFya2VyV2l0aFZp
c2libGVQb3NpdGlvbjooVmlzaWJsZVBvc2l0aW9uJil2aXNpYmxlUG9zIGNhY2hlOihBWE9iamVj
dENhY2hlKiljYWNoZQoreworICAgIFRleHRNYXJrZXJEYXRhIHRleHRNYXJrZXJEYXRhOworICAg
IGNhY2hlLT50ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbih0ZXh0TWFya2VyRGF0YSwg
dmlzaWJsZVBvcyk7CisgICAgCisgICAgcmV0dXJuIFtbW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyIGFsbG9jXSBpbml0V2l0aFRleHRNYXJrZXI6JnRleHRNYXJrZXJEYXRhIGNhY2hlOmNhY2hl
XSBhdXRvcmVsZWFzZV07Cit9CisKKy0gKE5TRGF0YSAqKWRhdGFSZXByZXNlbnRhdGlvbgorewor
ICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6Jl90ZXh0TWFya2VyRGF0YSBsZW5ndGg6
c2l6ZW9mKFRleHRNYXJrZXJEYXRhKV07Cit9CisKKy0gKFZpc2libGVQb3NpdGlvbil2aXNpYmxl
UG9zaXRpb24KK3sKKyAgICByZXR1cm4gX2NhY2hlLT52aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFy
a2VyRGF0YShfdGV4dE1hcmtlckRhdGEpOworfQorCistIChOU1N0cmluZyAqKWRlc2NyaXB0aW9u
Cit7CisgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiW0FYVGV4dE1hcmtl
ciAlcF0gPSBub2RlOiAlcCBvZmZzZXQ6ICVkIiwgc2VsZiwgX3RleHRNYXJrZXJEYXRhLm5vZGUs
IF90ZXh0TWFya2VyRGF0YS5vZmZzZXRdOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcgorCistIChpZClpbml0V2l0aEFjY2Vzc2liaWxp
dHlPYmplY3Q6KEFjY2Vzc2liaWxpdHlPYmplY3QqKWF4T2JqZWN0Cit7CisgICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisg
ICAgbV9vYmplY3QgPSBheE9iamVjdDsKKyAgICAKKyAgICAvLyBJbml0aWFsaXplIHRvIGEgc2Vu
dGluZWwgdmFsdWUuCisgICAgbV9hY2Nlc3NpYmlsaXR5VHJhaXRzRnJvbUFuY2VzdG9yID0gVUxM
T05HX01BWDsKKyAgICBtX2lzQWNjZXNzaWJpbGl0eUVsZW1lbnQgPSAtMTsKKyAgICAKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZXRhY2gKK3sKKyAgICAvLyByZGFyOi8vODc5ODk2
MCBNYWtlIHN1cmUgdGhlIG9iamVjdCBpcyBnb25lIGVhcmx5LCBzbyB0aGF0IGFueXRoaW5nIF9h
Y2Nlc3NpYmlsaXR5VW5yZWdpc3RlciAKKyAgICAvLyBkb2VzIGNhbid0IGNhbGwgYmFjayBpbnRv
IHRoZSByZW5kZXIgdHJlZS4KKyAgICBtX29iamVjdCA9IDA7CisKKyAgICBpZiAoW3NlbGYgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihfYWNjZXNzaWJpbGl0eVVucmVnaXN0ZXIpXSkKKyAg
ICAgICAgW3NlbGYgX2FjY2Vzc2liaWxpdHlVbnJlZ2lzdGVyXTsKK30KKworLSAodm9pZClkZWFs
bG9jCit7CisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYmVlbiBkZXRhY2hlZCBiZWZvcmUgZGVhbGxv
Y2F0ZWQuCisgICAgQVNTRVJUKCFtX29iamVjdCk7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQor
CistIChCT09MKV9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGwKK3sKKyAgICAvLyByZGFyOi8vNzk4
MDMxOCBpZiB3ZSBzdGFydCBhIGNhbGwsIHRoZW4gYmxvY2sgaW4gV2ViVGhyZWFkTG9jaygpLCB0
aGVuIHdlJ3JlIGRlYWxsb2NlZCBvbiBhbm90aGVyLCB0aHJlYWQsIHdlIGNvdWxkCisgICAgLy8g
Y3Jhc2gsIHNvIHdlIHNob3VsZCByZXRhaW4gb3Vyc2VsZiBmb3IgdGhlIGR1cmF0aW9uIG9mIHVz
YWdlIGhlcmUuCisgICAgW1tzZWxmIHJldGFpbl0gYXV0b3JlbGVhc2VdOworCisgICAgV2ViVGhy
ZWFkTG9jaygpOworICAgIAorICAgIC8vIElmIHdlIGNhbWUgYmFjayBmcm9tIG91ciB0aHJlYWQg
bG9jayBhbmQgd2Ugd2VyZSBkZXRhY2hlZCwgd2Ugd2lsbCBubyBsb25nZXIgaGF2ZSBhbiBtX29i
amVjdC4KKyAgICBpZiAoIW1fb2JqZWN0KQorICAgICAgICByZXR1cm4gTk87CisgICAgCisgICAg
bV9vYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgIGlmICghbV9vYmplY3QpCisgICAg
ICAgIHJldHVybiBOTzsKKyAgICAKKyAgICByZXR1cm4gWUVTOworfQorCistIChBY2Nlc3NpYmls
aXR5T2JqZWN0KilhY2Nlc3NpYmlsaXR5T2JqZWN0Cit7CisgICAgcmV0dXJuIG1fb2JqZWN0Owor
fQorCisvLyBUaGVzZSBhcmUgaGVyZSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gaW1wb3J0IEFY
UnVudGltZS4KKy8vIFRoZSBtZXRob2RzIHdpbGwgYmUgc3dpenpsZWQgd2hlbiB0aGUgYWNjZXNz
aWJpbGl0eSBidW5kbGUgaXMgbG9hZGVkLgorCistICh1aW50NjRfdClfYXhMaW5rVHJhaXQgeyBy
ZXR1cm4gKDEgPDwgMCk7IH0KKy0gKHVpbnQ2NF90KV9heFZpc2l0ZWRUcmFpdCB7IHJldHVybiAo
MSA8PCAxKTsgfQorLSAodWludDY0X3QpX2F4SGVhZGVyVHJhaXQgeyByZXR1cm4gKDEgPDwgMik7
IH0KKy0gKHVpbnQ2NF90KV9heENvbnRhaW5lZEJ5TGlzdFRyYWl0IHsgcmV0dXJuICgxIDw8IDMp
OyB9CistICh1aW50NjRfdClfYXhDb250YWluZWRCeVRhYmxlVHJhaXQgeyByZXR1cm4gKDEgPDwg
NCk7IH0KKy0gKHVpbnQ2NF90KV9heENvbnRhaW5lZEJ5TGFuZG1hcmtUcmFpdCB7IHJldHVybiAo
MSA8PCA1KTsgfQorLSAodWludDY0X3QpX2F4V2ViQ29udGVudFRyYWl0IHsgcmV0dXJuICgxIDw8
IDYpOyB9CistICh1aW50NjRfdClfYXhTZWN1cmVUZXh0RmllbGRUcmFpdCB7IHJldHVybiAoMSA8
PCA3KTsgfQorLSAodWludDY0X3QpX2F4VGV4dEVudHJ5VHJhaXQgeyByZXR1cm4gKDEgPDwgOCk7
IH0KKy0gKHVpbnQ2NF90KV9heEhhc1RleHRDdXJzb3JUcmFpdCB7IHJldHVybiAoMSA8PCA5KTsg
fQorLSAodWludDY0X3QpX2F4VGV4dE9wZXJhdGlvbnNBdmFpbGFibGVUcmFpdCB7IHJldHVybiAo
MSA8PCAxMCk7IH0KKy0gKHVpbnQ2NF90KV9heEltYWdlVHJhaXQgeyByZXR1cm4gKDEgPDwgMTEp
OyB9CistICh1aW50NjRfdClfYXhUYWJCdXR0b25UcmFpdCB7IHJldHVybiAoMSA8PCAxMik7IH0K
Ky0gKHVpbnQ2NF90KV9heEJ1dHRvblRyYWl0IHsgcmV0dXJuICgxIDw8IDEzKTsgfQorLSAodWlu
dDY0X3QpX2F4VG9nZ2xlVHJhaXQgeyByZXR1cm4gKDEgPDwgMTQpOyB9CistICh1aW50NjRfdClf
YXhQb3B1cEJ1dHRvblRyYWl0IHsgcmV0dXJuICgxIDw8IDE1KTsgfQorLSAodWludDY0X3QpX2F4
U3RhdGljVGV4dFRyYWl0IHsgcmV0dXJuICgxIDw8IDE2KTsgfQorLSAodWludDY0X3QpX2F4QWRq
dXN0YWJsZVRyYWl0IHsgcmV0dXJuICgxIDw8IDE3KTsgfQorLSAodWludDY0X3QpX2F4TWVudUl0
ZW1UcmFpdCB7IHJldHVybiAoMSA8PCAxOCk7IH0KKy0gKHVpbnQ2NF90KV9heFNlbGVjdGVkVHJh
aXQgeyByZXR1cm4gKDEgPDwgMTkpOyB9CistICh1aW50NjRfdClfYXhOb3RFbmFibGVkVHJhaXQg
eyByZXR1cm4gKDEgPDwgMjApOyB9CistICh1aW50NjRfdClfYXhSYWRpb0J1dHRvblRyYWl0IHsg
cmV0dXJuICgxIDw8IDIxKTsgfQorCistIChCT09MKWFjY2Vzc2liaWxpdHlDYW5GdXp6eUhpdFRl
c3QKK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIAorICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBtX29iamVj
dC0+cm9sZVZhbHVlKCk7CisgICAgLy8gRWxlbWVudHMgdGhhdCBjYW4gYmUgcmV0dXJuZWQgd2hl
biBwZXJmb3JtaW5nIGZ1enp5IGhpdCB0ZXN0aW5nLgorICAgIHN3aXRjaCAocm9sZSkgeworICAg
IGNhc2UgQnV0dG9uUm9sZToKKyAgICBjYXNlIENoZWNrQm94Um9sZToKKyAgICBjYXNlIENvbWJv
Qm94Um9sZToKKyAgICBjYXNlIERpc2Nsb3N1cmVUcmlhbmdsZVJvbGU6CisgICAgY2FzZSBIZWFk
aW5nUm9sZToKKyAgICBjYXNlIEltYWdlTWFwTGlua1JvbGU6CisgICAgY2FzZSBJbWFnZVJvbGU6
CisgICAgY2FzZSBMaW5rUm9sZToKKyAgICBjYXNlIExpc3RCb3hSb2xlOgorICAgIGNhc2UgTGlz
dEJveE9wdGlvblJvbGU6CisgICAgY2FzZSBNZW51QnV0dG9uUm9sZToKKyAgICBjYXNlIE1lbnVJ
dGVtUm9sZToKKyAgICBjYXNlIFBvcFVwQnV0dG9uUm9sZToKKyAgICBjYXNlIFJhZGlvQnV0dG9u
Um9sZToKKyAgICBjYXNlIFNjcm9sbEJhclJvbGU6CisgICAgY2FzZSBTbGlkZXJSb2xlOgorICAg
IGNhc2UgU3RhdGljVGV4dFJvbGU6CisgICAgY2FzZSBUYWJSb2xlOgorICAgIGNhc2UgVGV4dEZp
ZWxkUm9sZToKKyAgICAgICAgcmV0dXJuICFtX29iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3Jl
ZCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy0g
KEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyICopYWNjZXNzaWJpbGl0eVBvc3RQcm9jZXNzSGl0
VGVzdDooQ0dQb2ludClwb2ludAoreworICAgIFVOVVNFRF9QQVJBTShwb2ludCk7CisgICAgLy8g
VGhlIFVJS2l0IGFjY2Vzc2liaWxpdHkgd3JhcHBlciB3aWxsIG92ZXJyaWRlIHRoaXMgYW5kIHBl
cmZvcm0gdGhlIHBvc3QgcHJvY2VzcyBoaXQgdGVzdC4KKyAgICByZXR1cm4gbmlsOworfQorCist
IChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooQ0dQb2ludClwb2ludAoreworICAgIGlmICghW3Nl
bGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
CisgICAgLy8gVHJ5IGEgZnV6enkgaGl0IHRlc3QgZmlyc3QgdG8gZmluZCBhbiBhY2Nlc3NpYmxl
IGVsZW1lbnQuCisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGF4T2JqZWN0ID0gbV9v
YmplY3QtPmFjY2Vzc2liaWxpdHlIaXRUZXN0KEludFBvaW50KHBvaW50KSk7CisgICAgaWYgKCFh
eE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICAvLyBJZiB0aGlzIGlzIGEg
Z29vZCBhY2Nlc3NpYmxlIG9iamVjdCB0byByZXR1cm4sIG5vIGV4dHJhIHdvcmsgaXMgcmVxdWly
ZWQuCisgICAgaWYgKFtheE9iamVjdC0+d3JhcHBlcigpIGFjY2Vzc2liaWxpdHlDYW5GdXp6eUhp
dFRlc3RdKQorICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKGF4
T2JqZWN0LT53cmFwcGVyKCkpOworICAgIAorICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4g
cG9zdC1wcm9jZXNzIHRoaXMgaGl0IHRlc3QgdG8gZmluZCBhIGJldHRlciBjYW5kaWRhdGUuCisg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBbYXhPYmplY3QtPndyYXBw
ZXIoKSBhY2Nlc3NpYmlsaXR5UG9zdFByb2Nlc3NIaXRUZXN0OnBvaW50XTsKKyAgICBpZiAod3Jh
cHBlcikKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3Rvcih3cmFw
cGVyKTsKKyAgICAKKyAgICAvLyBGYWxsIGJhY2sgdG8gZGVmYXVsdCBiZWhhdmlvci4KKyAgICBy
ZXR1cm4gQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKGF4T2JqZWN0LT53cmFwcGVyKCkp
OyAgICAKK30KKworLSAoTlNJbnRlZ2VyKWFjY2Vzc2liaWxpdHlFbGVtZW50Q291bnQKK3sKKyAg
ICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgaWYgKFtzZWxmIGlzQXR0YWNobWVudF0pCisgICAgICAgIHJldHVybiBbW3Nl
bGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlFbGVtZW50Q291bnRdOworICAgIAorICAg
IHJldHVybiBtX29iamVjdC0+Y2hpbGRyZW4oKS5zaXplKCk7Cit9CisKKy0gKGlkKWFjY2Vzc2li
aWxpdHlFbGVtZW50QXRJbmRleDooTlNJbnRlZ2VyKWluZGV4Cit7CisgICAgaWYgKCFbc2VsZiBf
cHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlm
IChbc2VsZiBpc0F0dGFjaG1lbnRdKQorICAgICAgICByZXR1cm4gW1tzZWxmIGF0dGFjaG1lbnRW
aWV3XSBhY2Nlc3NpYmlsaXR5RWxlbWVudEF0SW5kZXg6aW5kZXhdOworICAgIAorICAgIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IG1f
b2JqZWN0LT5jaGlsZHJlbigpOworICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgp
ID49IGNoaWxkcmVuLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciogd3JhcHBlciA9IGNoaWxkcmVuW2luZGV4XS0+d3JhcHBl
cigpOworICAgIGlmIChjaGlsZHJlbltpbmRleF0tPmlzQXR0YWNobWVudCgpKQorICAgICAgICBy
ZXR1cm4gW3dyYXBwZXIgYXR0YWNobWVudFZpZXddOworCisgICAgcmV0dXJuIHdyYXBwZXI7Cit9
CisKKy0gKE5TSW50ZWdlcilpbmRleE9mQWNjZXNzaWJpbGl0eUVsZW1lbnQ6KGlkKWVsZW1lbnQK
K3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICBy
ZXR1cm4gTlNOb3RGb3VuZDsKKyAgICAKKyAgICBpZiAoW3NlbGYgaXNBdHRhY2htZW50XSkKKyAg
ICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10gaW5kZXhPZkFjY2Vzc2liaWxpdHlF
bGVtZW50OmVsZW1lbnRdOworICAgIAorICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOworICAg
IHVuc2lnbmVkIGNvdW50ID0gY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgayA9
IDA7IGsgPCBjb3VudDsgKytrKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
KiB3cmFwcGVyID0gY2hpbGRyZW5ba10tPndyYXBwZXIoKTsKKyAgICAgICAgaWYgKHdyYXBwZXIg
PT0gZWxlbWVudCB8fCAoY2hpbGRyZW5ba10tPmlzQXR0YWNobWVudCgpICYmIFt3cmFwcGVyIGF0
dGFjaG1lbnRWaWV3XSA9PSBlbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVybiBrOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gTlNOb3RGb3VuZDsKK30KKworLSAoTlNTdHJpbmcgKilhY2Nlc3Np
YmlsaXR5TGFuZ3VhZ2UKK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNh
bGxdKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHJldHVybiBtX29iamVjdC0+bGFu
Z3VhZ2UoKTsKK30KKworLSAoQk9PTClfYWNjZXNzaWJpbGl0eUlzTGFuZG1hcmtSb2xlOihBY2Nl
c3NpYmlsaXR5Um9sZSlyb2xlCit7CisgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2Ug
TGFuZG1hcmtBcHBsaWNhdGlvblJvbGU6CisgICAgICAgIGNhc2UgTGFuZG1hcmtCYW5uZXJSb2xl
OgorICAgICAgICBjYXNlIExhbmRtYXJrQ29tcGxlbWVudGFyeVJvbGU6CisgICAgICAgIGNhc2Ug
TGFuZG1hcmtDb250ZW50SW5mb1JvbGU6CisgICAgICAgIGNhc2UgTGFuZG1hcmtNYWluUm9sZToK
KyAgICAgICAgY2FzZSBMYW5kbWFya05hdmlnYXRpb25Sb2xlOgorICAgICAgICBjYXNlIExhbmRt
YXJrU2VhcmNoUm9sZToKKyAgICAgICAgICAgIHJldHVybiBZRVM7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gTk87CisgICAgfSAgICAKK30KKworLSAoQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIqKV9hY2Nlc3NpYmlsaXR5TGlzdEFuY2VzdG9yCit7CisgICAgZm9yIChB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7IHBh
cmVudCAhPSBuaWw7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKKyAgICAgICAg
QWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IHBhcmVudC0+cm9sZVZhbHVlKCk7CisgICAgICAgIGlm
IChyb2xlID09IExpc3RSb2xlIHx8IHJvbGUgPT0gTGlzdEJveFJvbGUpCisgICAgICAgICAgICBy
ZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBuaWw7Cit9
CisKKy0gKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilfYWNjZXNzaWJpbGl0eUxhbmRtYXJr
QW5jZXN0b3IKK3sKKyAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1fb2Jq
ZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50ICE9IG5pbDsgcGFyZW50ID0gcGFyZW50LT5wYXJl
bnRPYmplY3QoKSkgeworICAgICAgICBpZiAoW3NlbGYgX2FjY2Vzc2liaWxpdHlJc0xhbmRtYXJr
Um9sZTpwYXJlbnQtPnJvbGVWYWx1ZSgpXSkKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnQtPndy
YXBwZXIoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmlsOworfQorCistIChBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlUYWJsZUFuY2VzdG9yCit7CisgICAgZm9yIChB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7IHBh
cmVudCAhPSBuaWw7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKKyAgICAgICAg
aWYgKHBhcmVudC0+cm9sZVZhbHVlKCkgPT0gVGFibGVSb2xlKQorICAgICAgICAgICAgcmV0dXJu
IHBhcmVudC0+d3JhcHBlcigpOyAgIAorICAgIH0KKyAgICAKKyAgICByZXR1cm4gbmlsOworfQor
CistICh1aW50NjRfdClfYWNjZXNzaWJpbGl0eVRyYWl0c0Zyb21BbmNlc3RvcnMKK3sKKyAgICB1
aW50NjRfdCB0cmFpdHMgPSAwOworICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBtX29iamVj
dC0+cm9sZVZhbHVlKCk7CisgICAgCisgICAgLy8gVHJhaXQgaW5mb3JtYXRpb24gYWxzbyBuZWVk
cyB0byBiZSBnYXRoZXJlZCBmcm9tIHRoZSBwYXJlbnRzIGFib3ZlIHRoZSBvYmplY3QuCisgICAg
Ly8gVGhlIHBhcmVudE9iamVjdCBpcyBuZWVkZWQgaW5zdGVhZCBvZiB0aGUgdW5pZ25vcmVkUGFy
ZW50T2JqZWN0LCBiZWNhdXNlIGEgdGFibGUgbWlnaHQgYmUgaWdub3JlZCwgYnV0IGluZm9ybWF0
aW9uIHN0aWxsIG5lZWRzIHRvIGJlIGdhdGhlcmVkIGZyb20gaXQuICAgIAorICAgIGZvciAoQWNj
ZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdCgpOyBwYXJl
bnQgIT0gbmlsOyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7CisgICAgICAgIEFj
Y2Vzc2liaWxpdHlSb2xlIHBhcmVudFJvbGUgPSBwYXJlbnQtPnJvbGVWYWx1ZSgpOworICAgICAg
ICBpZiAocGFyZW50Um9sZSA9PSBXZWJBcmVhUm9sZSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAKKyAgICAgICAgc3dpdGNoIChwYXJlbnRSb2xlKSB7CisgICAgICAgICAgICBjYXNlIExp
bmtSb2xlOgorICAgICAgICAgICAgY2FzZSBXZWJDb3JlTGlua1JvbGU6CisgICAgICAgICAgICAg
ICAgdHJhaXRzIHw9IFtzZWxmIF9heExpbmtUcmFpdF07CisgICAgICAgICAgICAgICAgaWYgKHBh
cmVudC0+aXNWaXNpdGVkKCkpCisgICAgICAgICAgICAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBf
YXhWaXNpdGVkVHJhaXRdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBIZWFkaW5nUm9sZToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cmFpdHMgfD0g
W3NlbGYgX2F4SGVhZGVyVHJhaXRdOworICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgb2JqZWN0
IGhhcyB0aGUgaGVhZGVyIHRyYWl0LCB3ZSBzaG91bGQgc2V0IHRoZSB2YWx1ZQorICAgICAgICAg
ICAgICAgIC8vIHRvIHRoZSBoZWFkaW5nIGxldmVsLiBJZiBpdCB3YXMgYSBzdGF0aWMgdGV4dCBl
bGVtZW50LCB3ZSBuZWVkIHRvIHN0b3JlCisgICAgICAgICAgICAgICAgLy8gdGhlIHZhbHVlIGFz
IHRoZSBsYWJlbCwgYmVjYXVzZSB0aGUgaGVhZGluZyBsZXZlbCBuZWVkcyB0byB0aGUgdmFsdWUu
CisgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBw
YXJlbnQtPndyYXBwZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAocm9sZSA9PSBTdGF0aWNUZXh0
Um9sZSkgCisgICAgICAgICAgICAgICAgICAgIFtzZWxmIHNldEFjY2Vzc2liaWxpdHlMYWJlbDpt
X29iamVjdC0+c3RyaW5nVmFsdWUoKV07ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IFtzZWxmIHNldEFjY2Vzc2liaWxpdHlWYWx1ZTpbd3JhcHBlciBhY2Nlc3NpYmlsaXR5VmFsdWVd
XTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNh
c2UgTGlzdEJveFJvbGU6CisgICAgICAgICAgICBjYXNlIExpc3RSb2xlOgorICAgICAgICAgICAg
ICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhDb250YWluZWRCeUxpc3RUcmFpdF07CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRhYmxlUm9sZToKKyAgICAgICAgICAgICAg
ICB0cmFpdHMgfD0gW3NlbGYgX2F4Q29udGFpbmVkQnlUYWJsZVRyYWl0XTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKFtz
ZWxmIF9hY2Nlc3NpYmlsaXR5SXNMYW5kbWFya1JvbGU6cGFyZW50Um9sZV0pCisgICAgICAgICAg
ICAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhDb250YWluZWRCeUxhbmRtYXJrVHJhaXRdOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVy
biB0cmFpdHM7Cit9CisKKy0gKHVpbnQ2NF90KWFjY2Vzc2liaWxpdHlUcmFpdHMKK3sKKyAgICBp
ZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gMDsK
KyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gbV9vYmplY3QtPnJvbGVWYWx1ZSgp
OworICAgIHVpbnQ2NF90IHRyYWl0cyA9IFtzZWxmIF9heFdlYkNvbnRlbnRUcmFpdF07CisgICAg
c3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgTGlua1JvbGU6CisgICAgICAgIGNhc2UgV2Vi
Q29yZUxpbmtSb2xlOgorICAgICAgICAgICAgdHJhaXRzIHw9IFtzZWxmIF9heExpbmtUcmFpdF07
CisgICAgICAgICAgICBpZiAobV9vYmplY3QtPmlzVmlzaXRlZCgpKQorICAgICAgICAgICAgICAg
IHRyYWl0cyB8PSBbc2VsZiBfYXhWaXNpdGVkVHJhaXRdOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIC8vIFRleHRGaWVsZFJvbGUgaXMgaW50ZW5kZWQgdG8gZmFsbCB0aHJvdWdoIHRvIFRl
eHRBcmVhUm9sZSwgaW4gb3JkZXIgdG8gcGljayB1cCB0aGUgdGV4dCBlbnRyeSBhbmQgdGV4dCBj
dXJzb3IgdHJhaXRzLgorICAgICAgICBjYXNlIFRleHRGaWVsZFJvbGU6CisgICAgICAgICAgICBp
ZiAobV9vYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpKQorICAgICAgICAgICAgICAgIHRyYWl0cyB8
PSBbc2VsZiBfYXhTZWN1cmVUZXh0RmllbGRUcmFpdF07CisgICAgICAgIGNhc2UgVGV4dEFyZWFS
b2xlOgorICAgICAgICAgICAgdHJhaXRzIHw9IFtzZWxmIF9heFRleHRFbnRyeVRyYWl0XTsgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX29iamVjdC0+aXNGb2N1c2VkKCkpCisgICAgICAg
ICAgICAgICAgdHJhaXRzIHw9IChbc2VsZiBfYXhIYXNUZXh0Q3Vyc29yVHJhaXRdIHwgW3NlbGYg
X2F4VGV4dE9wZXJhdGlvbnNBdmFpbGFibGVUcmFpdF0pOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSW1hZ2VSb2xlOgorICAgICAgICAgICAgdHJhaXRzIHw9IFtzZWxmIF9heElt
YWdlVHJhaXRdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGFiUm9sZToKKyAg
ICAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhUYWJCdXR0b25UcmFpdF07CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBCdXR0b25Sb2xlOgorICAgICAgICAgICAgdHJhaXRzIHw9
IFtzZWxmIF9heEJ1dHRvblRyYWl0XTsKKyAgICAgICAgICAgIGlmIChtX29iamVjdC0+aXNQcmVz
c2VkKCkpCisgICAgICAgICAgICAgICAgdHJhaXRzIHw9IFtzZWxmIF9heFRvZ2dsZVRyYWl0XTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBvcFVwQnV0dG9uUm9sZToKKyAgICAg
ICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhQb3B1cEJ1dHRvblRyYWl0XTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFJhZGlvQnV0dG9uUm9sZToKKyAgICAgICAgICAgIHRyYWl0
cyB8PSBbc2VsZiBfYXhSYWRpb0J1dHRvblRyYWl0XSB8IFtzZWxmIF9heFRvZ2dsZVRyYWl0XTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENoZWNrQm94Um9sZToKKyAgICAgICAg
ICAgIHRyYWl0cyB8PSAoW3NlbGYgX2F4QnV0dG9uVHJhaXRdIHwgW3NlbGYgX2F4VG9nZ2xlVHJh
aXRdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEhlYWRpbmdSb2xlOgorICAg
ICAgICAgICAgdHJhaXRzIHw9IFtzZWxmIF9heEhlYWRlclRyYWl0XTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFN0YXRpY1RleHRSb2xlOgorICAgICAgICAgICAgdHJhaXRzIHw9
IFtzZWxmIF9heFN0YXRpY1RleHRUcmFpdF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTbGlkZXJSb2xlOgorICAgICAgICAgICAgdHJhaXRzIHw9IFtzZWxmIF9heEFkanVzdGFi
bGVUcmFpdF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNZW51QnV0dG9uUm9s
ZToKKyAgICAgICAgY2FzZSBNZW51SXRlbVJvbGU6CisgICAgICAgICAgICB0cmFpdHMgfD0gW3Nl
bGYgX2F4TWVudUl0ZW1UcmFpdF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChtX29iamVjdC0+aXNTZWxl
Y3RlZCgpKQorICAgICAgICB0cmFpdHMgfD0gW3NlbGYgX2F4U2VsZWN0ZWRUcmFpdF07CisKKyAg
ICBpZiAoIW1fb2JqZWN0LT5pc0VuYWJsZWQoKSkKKyAgICAgICAgdHJhaXRzIHw9IFtzZWxmIF9h
eE5vdEVuYWJsZWRUcmFpdF07CisgICAgCisgICAgaWYgKG1fYWNjZXNzaWJpbGl0eVRyYWl0c0Zy
b21BbmNlc3RvciA9PSBVTExPTkdfTUFYKQorICAgICAgICBtX2FjY2Vzc2liaWxpdHlUcmFpdHNG
cm9tQW5jZXN0b3IgPSBbc2VsZiBfYWNjZXNzaWJpbGl0eVRyYWl0c0Zyb21BbmNlc3RvcnNdOwor
ICAgIAorICAgIHRyYWl0cyB8PSBtX2FjY2Vzc2liaWxpdHlUcmFpdHNGcm9tQW5jZXN0b3I7CisK
KyAgICByZXR1cm4gdHJhaXRzOworfQorCistIChCT09MKWRldGVybWluZUlzQWNjZXNzaWJpbGl0
eUVsZW1lbnQKK3sKKyAgICBpZiAoIW1fb2JqZWN0KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgLy8gSG9ub3Igd2hlbiBzb21ldGhpbmcgZXhwbGljaXRseSBtYWtlcyB0aGlzIGFu
IGVsZW1lbnQgKHN1cGVyIHdpbGwgY29udGFpbiB0aGF0IGxvZ2ljKSAKKyAgICBpZiAoW3N1cGVy
IGlzQWNjZXNzaWJpbGl0eUVsZW1lbnRdKQorICAgICAgICByZXR1cm4gWUVTOworICAgIAorICAg
IG1fb2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fb2Jq
ZWN0LT5yb2xlVmFsdWUoKSkgeworICAgICAgICBjYXNlIFRleHRGaWVsZFJvbGU6CisgICAgICAg
IGNhc2UgVGV4dEFyZWFSb2xlOgorICAgICAgICBjYXNlIEJ1dHRvblJvbGU6CisgICAgICAgIGNh
c2UgUG9wVXBCdXR0b25Sb2xlOgorICAgICAgICBjYXNlIENoZWNrQm94Um9sZToKKyAgICAgICAg
Y2FzZSBSYWRpb0J1dHRvblJvbGU6CisgICAgICAgIGNhc2UgU2xpZGVyUm9sZToKKyAgICAgICAg
Y2FzZSBNZW51QnV0dG9uUm9sZToKKyAgICAgICAgY2FzZSBWYWx1ZUluZGljYXRvclJvbGU6Cisg
ICAgICAgIGNhc2UgSW1hZ2VSb2xlOgorICAgICAgICBjYXNlIE1lbnVJdGVtUm9sZToKKyAgICAg
ICAgY2FzZSBJbmNyZW1lbnRvclJvbGU6CisgICAgICAgIGNhc2UgQ29tYm9Cb3hSb2xlOgorICAg
ICAgICBjYXNlIERpc2Nsb3N1cmVUcmlhbmdsZVJvbGU6CisgICAgICAgIGNhc2UgSW1hZ2VNYXBS
b2xlOgorICAgICAgICBjYXNlIExpc3RNYXJrZXJSb2xlOgorICAgICAgICBjYXNlIExpc3RCb3hP
cHRpb25Sb2xlOgorICAgICAgICBjYXNlIFRhYlJvbGU6CisgICAgICAgIGNhc2UgRG9jdW1lbnRN
YXRoUm9sZToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFN0YXRpY1Rl
eHRSb2xlOgorICAgICAgICB7CisgICAgICAgICAgICAvLyBNYW55IHRleHQgZWxlbWVudHMgb25s
eSBjb250YWluIGEgc3BhY2UuCisgICAgICAgICAgICBpZiAoIVtbW3NlbGYgYWNjZXNzaWJpbGl0
eUxhYmVsXSBzdHJpbmdCeVRyaW1taW5nQ2hhcmFjdGVyc0luU2V0OltOU0NoYXJhY3RlclNldCB3
aGl0ZXNwYWNlQ2hhcmFjdGVyU2V0XV0gbGVuZ3RoXSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgICAgIC8vIFRleHQgZWxlbWVudHMgdGhhdCBhcmUganVzdCBwaWVj
ZXMgb2YgbGlua3Mgb3IgaGVhZGVycyBzaG91bGQgbm90IGJlIGV4cG9zZWQuCisgICAgICAgICAg
ICBpZiAoW0FjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3Rvcihbc2VsZiBhY2Nlc3NpYmlsaXR5
Q29udGFpbmVyXSkgY29udGFpbnNVbm5hdHVyYWxseVNlZ21lbnRlZENoaWxkcmVuXSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIC8vIERvbid0IGV4cG9zZSBoZWFkZXJzIGFzIGVs
ZW1lbnRzOyBpbnN0ZWFkIGV4cG9zZSB0aGVpciBjaGlsZHJlbiBhcyBlbGVtZW50cywgd2l0aCB0
aGUgaGVhZGVyIHRyYWl0ICh1bmxlc3MgdGhleSBoYXZlIG5vIGNoaWxkcmVuKQorICAgICAgICBj
YXNlIEhlYWRpbmdSb2xlOgorICAgICAgICAgICAgaWYgKCFbc2VsZiBhY2Nlc3NpYmlsaXR5RWxl
bWVudENvdW50XSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBMaW5rcyBjYW4gc29tZXRpbWVz
IGJlIGVsZW1lbnRzICh3aGVuIHRoZXkgb25seSBjb250YWluIHN0YXRpYyB0ZXh0IG9yIGRvbid0
IGNvbnRhaW4gYW55dGhpbmcpLgorICAgICAgICAvLyBUaGV5IHNob3VsZCBub3QgYmUgZWxlbWVu
dHMgd2hlbiBjb250YWluaW5nIHRleHQgYW5kIG90aGVyIHR5cGVzLgorICAgICAgICBjYXNlIFdl
YkNvcmVMaW5rUm9sZToKKyAgICAgICAgY2FzZSBMaW5rUm9sZToKKyAgICAgICAgICAgIGlmIChb
c2VsZiBjb250YWluc1VubmF0dXJhbGx5U2VnbWVudGVkQ2hpbGRyZW5dIHx8ICFbc2VsZiBhY2Nl
c3NpYmlsaXR5RWxlbWVudENvdW50XSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBBbGwgb3RoZXIgZWxlbWVudHMg
YXJlIGlnbm9yZWQgb24gdGhlIGlwaG9uZS4KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2Fz
ZSBVbmtub3duUm9sZToKKyAgICAgICAgY2FzZSBUYWJHcm91cFJvbGU6CisgICAgICAgIGNhc2Ug
U2Nyb2xsQXJlYVJvbGU6CisgICAgICAgIGNhc2UgVGFibGVSb2xlOgorICAgICAgICBjYXNlIEFw
cGxpY2F0aW9uUm9sZToKKyAgICAgICAgY2FzZSBHcm91cFJvbGU6CisgICAgICAgIGNhc2UgUmFk
aW9Hcm91cFJvbGU6CisgICAgICAgIGNhc2UgTGlzdFJvbGU6CisgICAgICAgIGNhc2UgTGlzdEJv
eFJvbGU6CisgICAgICAgIGNhc2UgU2Nyb2xsQmFyUm9sZToKKyAgICAgICAgY2FzZSBNZW51QmFy
Um9sZToKKyAgICAgICAgY2FzZSBNZW51Um9sZToKKyAgICAgICAgY2FzZSBDb2x1bW5Sb2xlOgor
ICAgICAgICBjYXNlIFJvd1JvbGU6CisgICAgICAgIGNhc2UgVG9vbGJhclJvbGU6CisgICAgICAg
IGNhc2UgQnVzeUluZGljYXRvclJvbGU6CisgICAgICAgIGNhc2UgUHJvZ3Jlc3NJbmRpY2F0b3JS
b2xlOgorICAgICAgICBjYXNlIFdpbmRvd1JvbGU6CisgICAgICAgIGNhc2UgRHJhd2VyUm9sZToK
KyAgICAgICAgY2FzZSBTeXN0ZW1XaWRlUm9sZToKKyAgICAgICAgY2FzZSBPdXRsaW5lUm9sZToK
KyAgICAgICAgY2FzZSBCcm93c2VyUm9sZToKKyAgICAgICAgY2FzZSBTcGxpdEdyb3VwUm9sZToK
KyAgICAgICAgY2FzZSBTcGxpdHRlclJvbGU6CisgICAgICAgIGNhc2UgQ29sb3JXZWxsUm9sZToK
KyAgICAgICAgY2FzZSBHcm93QXJlYVJvbGU6CisgICAgICAgIGNhc2UgU2hlZXRSb2xlOgorICAg
ICAgICBjYXNlIEhlbHBUYWdSb2xlOgorICAgICAgICBjYXNlIE1hdHRlUm9sZToKKyAgICAgICAg
Y2FzZSBSdWxlclJvbGU6CisgICAgICAgIGNhc2UgUnVsZXJNYXJrZXJSb2xlOgorICAgICAgICBj
YXNlIEdyaWRSb2xlOgorICAgICAgICBjYXNlIFdlYkFyZWFSb2xlOgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworLSAoQk9PTClpc0FjY2Vzc2liaWxpdHlFbGVtZW50Cit7
CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0
dXJuIE5POworICAgIAorICAgIGlmIChtX2lzQWNjZXNzaWJpbGl0eUVsZW1lbnQgPT0gLTEpCisg
ICAgICAgIG1faXNBY2Nlc3NpYmlsaXR5RWxlbWVudCA9IFtzZWxmIGRldGVybWluZUlzQWNjZXNz
aWJpbGl0eUVsZW1lbnRdOworICAgIAorICAgIHJldHVybiBtX2lzQWNjZXNzaWJpbGl0eUVsZW1l
bnQ7Cit9CisKKy0gKEJPT0wpc3RyaW5nVmFsdWVTaG91bGRCZVVzZWRJbkxhYmVsCit7CisgICAg
aWYgKG1fb2JqZWN0LT5pc1RleHRDb250cm9sKCkpCisgICAgICAgIHJldHVybiBOTzsKKyAgICBp
ZiAobV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IFBvcFVwQnV0dG9uUm9sZSkKKyAgICAgICAgcmV0
dXJuIE5POworICAgIAorICAgIHJldHVybiBZRVM7Cit9CisKKy0gKE5TU3RyaW5nICopYWNjZXNz
aWJpbGl0eUxhYmVsCit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxs
XSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8vIGNoZWNrIGlmIHRoZSBsYWJlbCB3YXMg
b3ZlcnJpZGVuCisgICAgTlNTdHJpbmcgKmxhYmVsID0gW3N1cGVyIGFjY2Vzc2liaWxpdHlMYWJl
bF07CisgICAgaWYgKGxhYmVsKQorICAgICAgICByZXR1cm4gbGFiZWw7CisKKyAgICBOU1N0cmlu
ZyogdGl0bGUgPSBtX29iamVjdC0+dGl0bGUoKTsKKyAgICBpZiAoIVt0aXRsZSBsZW5ndGhdKQor
ICAgICAgICB0aXRsZSA9IG1fb2JqZWN0LT5hY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKTsKKwor
ICAgIC8vIEV2ZXJ5dGhpbmcgZXhjZXB0IGEgdGV4dCBjb250cm9sIG5lZWRzIHRvIHJldHVybiB0
aGVpciBzdHJpbmcgdmFsdWUgaW4gdGhlIGF4TGFiZWwgKHBlciBpUGhvbmUgQVggQVBJKS4KKyAg
ICBpZiAoIVt0aXRsZSBsZW5ndGhdICYmIFtzZWxmIHN0cmluZ1ZhbHVlU2hvdWxkQmVVc2VkSW5M
YWJlbF0pCisgICAgICAgIHRpdGxlID0gbV9vYmplY3QtPnN0cmluZ1ZhbHVlKCk7CisgICAgCisg
ICAgcmV0dXJuIHRpdGxlOworfQorCistIChBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKil0YWJsZUNl
bGxQYXJlbnQKK3sKKyAgICAvLyBGaW5kIGlmIHRoaXMgZWxlbWVudCBpcyBpbiBhIHRhYmxlIGNl
bGwuCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY2VsbCA9IDA7CisgICAgZm9yIChjZWxsID0g
bV9vYmplY3Q7IGNlbGwgJiYgIWNlbGwtPmlzVGFibGVDZWxsKCk7IGNlbGwgPSBjZWxsLT5wYXJl
bnRPYmplY3QoKSkgCisgICAgeyB9CisgICAgCisgICAgaWYgKCFjZWxsKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKj4o
Y2VsbCk7Cit9CisKKy0gKEFjY2Vzc2liaWxpdHlUYWJsZSopdGFibGVQYXJlbnQKK3sKKyAgICAv
LyBGaW5kIGlmIHRoZSBwYXJlbnQgdGFibGUgZm9yIHRoZSB0YWJsZSBjZWxsLgorICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIHBhcmVudFRhYmxlID0gMDsKKyAgICBmb3IgKHBhcmVudFRhYmxlID0g
bV9vYmplY3Q7IHBhcmVudFRhYmxlICYmICFwYXJlbnRUYWJsZS0+aXNEYXRhVGFibGUoKTsgcGFy
ZW50VGFibGUgPSBwYXJlbnRUYWJsZS0+cGFyZW50T2JqZWN0KCkpIAorICAgIHsgfQorICAgIAor
ICAgIGlmICghcGFyZW50VGFibGUpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVy
biBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihwYXJlbnRUYWJsZSk7Cit9CisKKy0g
KGlkKWFjY2Vzc2liaWxpdHlUaXRsZUVsZW1lbnQKK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJl
QWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogdGl0bGVFbGVtZW50ID0gbV9vYmplY3QtPnRpdGxlVUlFbGVtZW50KCk7Cisg
ICAgaWYgKHRpdGxlRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIHRpdGxlRWxlbWVudC0+d3JhcHBl
cigpOworCisgICAgcmV0dXJuIG5pbDsKK30KKworLy8gTWVhbnQgdG8gcmV0dXJuIHJvdyBvciBj
b2x1bW4gaGVhZGVycyAob3Igb3RoZXIgdGhpbmdzIGFzIHRoZSBmdXR1cmUgcGVybWl0cykuCist
IChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUhlYWRlckVsZW1lbnRzCit7CisgICAgaWYgKCFbc2Vs
ZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIHRhYmxlQ2VsbCA9IFtzZWxmIHRhYmxlQ2VsbFBhcmVu
dF07CisgICAgaWYgKCF0YWJsZUNlbGwpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAg
QWNjZXNzaWJpbGl0eVRhYmxlKiB0YWJsZSA9IFtzZWxmIHRhYmxlUGFyZW50XTsKKyAgICBpZiAo
IXRhYmxlKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIC8vIEdldCB0aGUgcm93IGFu
ZCBjb2x1bW4gcmFuZ2UsIHNvIHdlIGNhbiB1c2UgdGhlbSB0byBmaW5kIHRoZSBoZWFkZXJzLgor
ICAgIHBhaXI8aW50LCBpbnQ+IHJvd1JhbmdlOworICAgIHBhaXI8aW50LCBpbnQ+IGNvbHVtblJh
bmdlOworICAgIHRhYmxlQ2VsbC0+cm93SW5kZXhSYW5nZShyb3dSYW5nZSk7CisgICAgdGFibGVD
ZWxsLT5jb2x1bW5JbmRleFJhbmdlKGNvbHVtblJhbmdlKTsKKyAgICAKKyAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93SGVhZGVyczsKKyAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29sdW1uSGVh
ZGVyczsKKyAgICB0YWJsZS0+cm93SGVhZGVycyhyb3dIZWFkZXJzKTsKKyAgICB0YWJsZS0+Y29s
dW1uSGVhZGVycyhjb2x1bW5IZWFkZXJzKTsKKyAgICAKKyAgICBOU011dGFibGVBcnJheSAqaGVh
ZGVycyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgICAgCisgICAgdW5zaWduZWQgY29sdW1u
UmFuZ2VJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2x1bW5SYW5nZS5maXJzdCk7Cisg
ICAgaWYgKGNvbHVtblJhbmdlSW5kZXggPCBjb2x1bW5IZWFkZXJzLnNpemUoKSkgeworICAgICAg
ICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gY29sdW1uSGVhZGVyID0gY29sdW1uSGVhZGVy
c1tjb2x1bW5SYW5nZS5maXJzdF07CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
KiB3cmFwcGVyID0gY29sdW1uSGVhZGVyLT53cmFwcGVyKCk7CisgICAgICAgIGlmICh3cmFwcGVy
KQorICAgICAgICAgICAgW2hlYWRlcnMgYWRkT2JqZWN0OndyYXBwZXJdOworICAgIH0KKworICAg
IHVuc2lnbmVkIHJvd1JhbmdlSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocm93UmFuZ2Uu
Zmlyc3QpOworICAgIGlmIChyb3dSYW5nZUluZGV4IDwgcm93SGVhZGVycy5zaXplKCkpIHsKKyAg
ICAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IHJvd0hlYWRlciA9IHJvd0hlYWRlcnNb
cm93UmFuZ2UuZmlyc3RdOworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogd3Jh
cHBlciA9IHJvd0hlYWRlci0+d3JhcHBlcigpOworICAgICAgICBpZiAod3JhcHBlcikKKyAgICAg
ICAgICAgIFtoZWFkZXJzIGFkZE9iamVjdDp3cmFwcGVyXTsKKyAgICB9CisgICAgICAgIAorICAg
IHJldHVybiBoZWFkZXJzOworfQorCistIChpZClhY2Nlc3NpYmlsaXR5RWxlbWVudEZvclJvdzoo
TlNJbnRlZ2VyKXJvdyBhbmRDb2x1bW46KE5TSW50ZWdlciljb2x1bW4KK3sKKyAgICBpZiAoIVtz
ZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgQWNjZXNzaWJpbGl0eVRhYmxlKiB0YWJsZSA9IFtzZWxmIHRhYmxlUGFyZW50XTsKKyAgICBp
ZiAoIXRhYmxlKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgQWNjZXNzaWJpbGl0eVRhYmxl
Q2VsbCogY2VsbCA9IHRhYmxlLT5jZWxsRm9yQ29sdW1uQW5kUm93KGNvbHVtbiwgcm93KTsKKyAg
ICBpZiAoIWNlbGwpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIGNlbGwtPndyYXBw
ZXIoKTsKK30KKworLSAoTlNSYW5nZSlhY2Nlc3NpYmlsaXR5Um93UmFuZ2UKK3sKKyAgICBpZiAo
IVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gTlNNYWtl
UmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisKKyAgICBpZiAobV9vYmplY3QtPmlzUmFkaW9CdXR0b24o
KSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3IgcmFkaW9CdXR0b25TaWJsaW5nczsKKyAgICAgICAgbV9vYmplY3QtPmxpbmtlZFVJRWxl
bWVudHMocmFkaW9CdXR0b25TaWJsaW5ncyk7CisgICAgICAgIGlmIChyYWRpb0J1dHRvblNpYmxp
bmdzLnNpemUoKSA8PSAxKQorICAgICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91
bmQsIDApOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKHJhZGlvQnV0dG9u
U2libGluZ3MuZmluZChtX29iamVjdCksIHJhZGlvQnV0dG9uU2libGluZ3Muc2l6ZSgpKTsKKyAg
ICB9CisgICAgCisgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogdGFibGVDZWxsID0gW3NlbGYg
dGFibGVDZWxsUGFyZW50XTsKKyAgICBpZiAoIXRhYmxlQ2VsbCkKKyAgICAgICAgcmV0dXJuIE5T
TWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOworICAgIAorICAgIHBhaXI8aW50LCBpbnQ+IHJvd1Jh
bmdlOworICAgIHRhYmxlQ2VsbC0+cm93SW5kZXhSYW5nZShyb3dSYW5nZSk7CisgICAgcmV0dXJu
IE5TTWFrZVJhbmdlKHJvd1JhbmdlLmZpcnN0LCByb3dSYW5nZS5zZWNvbmQpOworfQorCistIChO
U1JhbmdlKWFjY2Vzc2liaWxpdHlDb2x1bW5SYW5nZQoreworICAgIGlmICghW3NlbGYgX3ByZXBh
cmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZv
dW5kLCAwKTsKKworICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIHRhYmxlQ2VsbCA9IFtzZWxm
IHRhYmxlQ2VsbFBhcmVudF07CisgICAgaWYgKCF0YWJsZUNlbGwpCisgICAgICAgIHJldHVybiBO
U01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICAKKyAgICBwYWlyPGludCwgaW50PiBjb2x1
bW5SYW5nZTsKKyAgICB0YWJsZUNlbGwtPmNvbHVtbkluZGV4UmFuZ2UoY29sdW1uUmFuZ2UpOwor
ICAgIHJldHVybiBOU01ha2VSYW5nZShjb2x1bW5SYW5nZS5maXJzdCwgY29sdW1uUmFuZ2Uuc2Vj
b25kKTsKK30KKworLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5UGxhY2Vob2xkZXJWYWx1ZQor
eworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICByZXR1cm4gbV9vYmplY3QtPnBsYWNlaG9sZGVyVmFsdWUoKTsKK30K
KworLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5VmFsdWUKK3sKKyAgICBpZiAoIVtzZWxmIF9w
cmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAg
IC8vIGNoZWNrIGlmIHRoZSB2YWx1ZSB3YXMgb3ZlcnJpZGVuCisgICAgTlNTdHJpbmcgKnZhbHVl
ID0gW3N1cGVyIGFjY2Vzc2liaWxpdHlWYWx1ZV07CisgICAgaWYgKHZhbHVlKQorICAgICAgICBy
ZXR1cm4gdmFsdWU7CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc0NoZWNrYm94T3JSYWRpbygp
KSB7CisgICAgICAgIHN3aXRjaCAobV9vYmplY3QtPmNoZWNrYm94T3JSYWRpb1ZhbHVlKCkpIHsK
KyAgICAgICAgY2FzZSBCdXR0b25TdGF0ZU9mZjoKKyAgICAgICAgICAgIHJldHVybiBbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkIiwgMF07CisgICAgICAgIGNhc2UgQnV0dG9uU3RhdGVP
bjoKKyAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkIiwg
MV07CisgICAgICAgIGNhc2UgQnV0dG9uU3RhdGVNaXhlZDoKKyAgICAgICAgICAgIHJldHVybiBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkIiwgMl07CisgICAgICAgIH0KKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIiVkIiwgMF07CisgICAgfQorICAgIAorICAgIGlmIChtX29iamVjdC0+aXNCdXR0
b24oKSAmJiBtX29iamVjdC0+aXNQcmVzc2VkKCkpCisgICAgICAgIHJldHVybiBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIiVkIiwgMV07CisKKyAgICAvLyByZGFyOi8vODEzMTM4OCBXZWJL
aXQgc2hvdWxkIGV4cG9zZSB0aGUgc2FtZSBpbmZvIGFzIFVJS2l0IGZvciBpdHMgcGFzc3dvcmQg
ZmllbGRzLgorICAgIGlmIChtX29iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkpIHsKKyAgICAgICAg
aW50IHBhc3N3b3JkTGVuZ3RoID0gbV9vYmplY3QtPmFjY2Vzc2liaWxpdHlQYXNzd29yZEZpZWxk
TGVuZ3RoKCk7CisgICAgICAgIE5TTXV0YWJsZVN0cmluZyogc3RyaW5nID0gW05TTXV0YWJsZVN0
cmluZyBzdHJpbmddOworICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHBhc3N3b3JkTGVuZ3Ro
OyArK2spCisgICAgICAgICAgICBbc3RyaW5nIGFwcGVuZFN0cmluZzpAIuKAoiJdOworICAgICAg
ICByZXR1cm4gc3RyaW5nOworICAgIH0KKyAgICAKKyAgICAvLyBBIHRleHQgY29udHJvbCBzaG91
bGQgcmV0dXJuIGl0cyB0ZXh0IGRhdGEgYXMgdGhlIGF4VmFsdWUgKHBlciBpUGhvbmUgQVggQVBJ
KS4KKyAgICBpZiAoIVtzZWxmIHN0cmluZ1ZhbHVlU2hvdWxkQmVVc2VkSW5MYWJlbF0pCisgICAg
ICAgIHJldHVybiBtX29iamVjdC0+c3RyaW5nVmFsdWUoKTsKKyAgICAKKyAgICBpZiAobV9vYmpl
Y3QtPmlzUHJvZ3Jlc3NJbmRpY2F0b3IoKSB8fCBtX29iamVjdC0+aXNTbGlkZXIoKSkgeworICAg
ICAgICAvLyBQcmVmZXIgYSB2YWx1ZURlc2NyaXB0aW9uIGlmIHByb3ZpZGVkIGJ5IHRoZSBhdXRo
b3IgKHRocm91Z2ggYXJpYS12YWx1ZXRleHQpLgorICAgICAgICBTdHJpbmcgdmFsdWVEZXNjcmlw
dGlvbiA9IG1fb2JqZWN0LT52YWx1ZURlc2NyaXB0aW9uKCk7CisgICAgICAgIGlmICghdmFsdWVE
ZXNjcmlwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWVEZXNjcmlwdGlv
bjsKKworICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlLjJmIiwg
bV9vYmplY3QtPnZhbHVlRm9yUmFuZ2UoKV07CisgICAgfQorCisgICAgaWYgKG1fb2JqZWN0LT5p
c0hlYWRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
JWQiLCBtX29iamVjdC0+aGVhZGluZ0xldmVsKCldOworICAgIAorICAgIHJldHVybiBuaWw7Cit9
CisKKy0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzQ29tYm9Cb3gKK3sKKyAgICBpZiAoIVtzZWxmIF9w
cmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICByZXR1
cm4gbV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IENvbWJvQm94Um9sZTsKK30KKworLSAoTlNTdHJp
bmcgKilhY2Nlc3NpYmlsaXR5SGludAoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3Np
YmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gbV9vYmplY3Qt
PmhlbHBUZXh0KCk7Cit9CisKKy0gKE5TVVJMICopYWNjZXNzaWJpbGl0eVVSTAoreworICAgIGlm
ICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgCisgICAgS1VSTCB1cmwgPSBtX29iamVjdC0+dXJsKCk7CisgICAgaWYgKHVybC5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gKE5TVVJMKil1cmw7Cit9CisK
Ky0gKENHUmVjdClfY29udmVydEludFJlY3RUb1NjcmVlbkNvb3JkaW5hdGVzOihJbnRSZWN0KXJl
Y3QKK3sKKyAgICBpZiAoIW1fb2JqZWN0KQorICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKKyAg
ICAKKyAgICBDR1NpemUgc2l6ZSA9IENHU2l6ZU1ha2UocmVjdC5zaXplKCkud2lkdGgoKSwgcmVj
dC5zaXplKCkuaGVpZ2h0KCkpOworICAgIENHUG9pbnQgcG9pbnQgPSBDR1BvaW50TWFrZShyZWN0
LngoKSwgcmVjdC55KCkpOworICAgIAorICAgIENHUmVjdCBmcmFtZSA9IENHUmVjdE1ha2UocG9p
bnQueCwgcG9pbnQueSwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOworICAgIAorICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gbV9vYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CisgICAgaWYg
KGZyYW1lVmlldykgeworICAgICAgICBXQUtWaWV3KiB2aWV3ID0gZnJhbWVWaWV3LT5kb2N1bWVu
dFZpZXcoKTsKKyAgICAgICAgZnJhbWUgPSBbdmlldyBjb252ZXJ0UmVjdDpmcmFtZSB0b1ZpZXc6
bmlsXTsKKyAgICB9CisgICAgCisgICAgLy8gd2UgbmVlZCB0aGUgd2ViIGRvY3VtZW50IHZpZXcg
dG8gZ2l2ZSB1cyBvdXIgZmluYWwgc2NyZWVuIGNvb3JkaW5hdGVzCisgICAgLy8gYmVjYXVzZSB0
aGF0IGNhbiB0YWtlIGFjY291bnQgb2YgdGhlIHNjcm9sbGVyCisgICAgaWQgd2ViRG9jdW1lbnQg
PSBbc2VsZiBfYWNjZXNzaWJpbGl0eVdlYkRvY3VtZW50Vmlld107CisgICAgaWYgKHdlYkRvY3Vt
ZW50KQorICAgICAgICBmcmFtZSA9IFt3ZWJEb2N1bWVudCBjb252ZXJ0UmVjdDpmcmFtZSB0b1Zp
ZXc6bmlsXTsKKyAgICAKKyAgICByZXR1cm4gZnJhbWU7Cit9CisKKy8vIFVzZWQgYnkgVUlLaXQg
YWNjZXNzaWJpbGl0eSBidW5kbGUgdG8gaGVscCBkZXRlcm1pbmUgZGlzdGFuY2UgZHVyaW5nIGEg
aGl0LXRlc3QuCistIChDR1JlY3QpYWNjZXNzaWJpbGl0eUVsZW1lbnRSZWN0Cit7CisgICAgaWYg
KCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIENHUmVj
dFplcm87CisgICAgCisgICAgTGF5b3V0UmVjdCByZWN0ID0gbV9vYmplY3QtPmVsZW1lbnRSZWN0
KCk7CisgICAgcmV0dXJuIENHUmVjdE1ha2UocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpOworfQorCisvLyBUaGUgImNlbnRlciBwb2ludCIgaXMgd2hlcmUg
Vm9pY2VPdmVyIHdpbGwgInByZXNzIiBhbiBvYmplY3QuIFRoaXMgbWF5IG5vdCBiZSB0aGUgYWN0
dWFsCisvLyBjZW50ZXIgb2YgdGhlIGFjY2Vzc2liaWxpdHlGcmFtZQorLSAoQ0dQb2ludClhY2Nl
c3NpYmlsaXR5QWN0aXZhdGlvblBvaW50Cit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vz
c2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIENHUG9pbnRaZXJvOworICAgIAorICAgIElu
dFJlY3QgcmVjdCA9IHBpeGVsU25hcHBlZEludFJlY3QobV9vYmplY3QtPmJvdW5kaW5nQm94UmVj
dCgpKTsKKyAgICBDR1JlY3QgY2dSZWN0ID0gW3NlbGYgX2NvbnZlcnRJbnRSZWN0VG9TY3JlZW5D
b29yZGluYXRlczpyZWN0XTsKKyAgICByZXR1cm4gQ0dQb2ludE1ha2UoQ0dSZWN0R2V0TWlkWChj
Z1JlY3QpLCBDR1JlY3RHZXRNaWRZKGNnUmVjdCkpOworfQorCistIChDR1JlY3QpYWNjZXNzaWJp
bGl0eUZyYW1lCit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkK
KyAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CisgICAgCisgICAgSW50UmVjdCByZWN0ID0gcGl4
ZWxTbmFwcGVkSW50UmVjdChtX29iamVjdC0+ZWxlbWVudFJlY3QoKSk7CisgICAgcmV0dXJuIFtz
ZWxmIF9jb252ZXJ0SW50UmVjdFRvU2NyZWVuQ29vcmRpbmF0ZXM6cmVjdF07Cit9CisKKy8vIENo
ZWNrcyB3aGV0aGVyIGEgbGluayBjb250YWlucyBvbmx5IHN0YXRpYyB0ZXh0IGFuZCBpbWFnZXMg
KGFuZCBoYXMgYmVlbiBkaXZpZGVkIHVubmF0dXJhbGx5IGJ5IDxzcGFucz4gYW5kIG90aGVyIG5l
ZmFyaW91cyBtZWNoYW5pc21zKS4KKy0gKEJPT0wpY29udGFpbnNVbm5hdHVyYWxseVNlZ21lbnRl
ZENoaWxkcmVuCit7CisgICAgaWYgKCFtX29iamVjdCkKKyAgICAgICAgcmV0dXJuIE5POworICAg
IAorICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBtX29iamVjdC0+cm9sZVZhbHVlKCk7Cisg
ICAgaWYgKHJvbGUgIT0gTGlua1JvbGUgJiYgcm9sZSAhPSBXZWJDb3JlTGlua1JvbGUpCisgICAg
ICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICB1
bnNpZ25lZCBjaGlsZHJlblNpemUgPSBjaGlsZHJlbi5zaXplKCk7CisKKyAgICAvLyBJZiB0aGVy
ZSdzIG9ubHkgb25lIGNoaWxkLCB0aGVuIGl0IGRvZXNuJ3QgaGF2ZSBzZWdtZW50ZWQgY2hpbGRy
ZW4uIAorICAgIGlmIChjaGlsZHJlblNpemUgPT0gMSkKKyAgICAgICAgcmV0dXJuIE5POworICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGlsZHJlblNpemU7ICsraSkgeworICAg
ICAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gY2hpbGRyZW5baV0tPnJvbGVWYWx1ZSgpOwor
ICAgICAgICBpZiAocm9sZSAhPSBTdGF0aWNUZXh0Um9sZSAmJiByb2xlICE9IEltYWdlUm9sZSAm
JiByb2xlICE9IEdyb3VwUm9sZSkKKyAgICAgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoaWQpYWNjZXNzaWJpbGl0eUNvbnRhaW5lcgorewor
ICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgCisgICAgLy8gQXMgbG9uZyBhcyB0aGVyZSdzIGEgcGFyZW50IHdyYXBwZXIs
IHRoYXQncyB0aGUgY29ycmVjdCBjaGFpbiB0byBjbGltYi4KKyAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7IAorICAgIGlm
IChwYXJlbnQpCisgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKKworICAgIC8vIFRo
ZSBvbmx5IG9iamVjdCB3aXRob3V0IGEgcGFyZW50IHdyYXBwZXIgc2hvdWxkIGJlIGEgc2Nyb2xs
IHZpZXcuCisgICAgQVNTRVJUKG1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkp
OworICAgIAorICAgIC8vIFZlcmlmeSB0aGlzIGlzIHRoZSB0b3AgZG9jdW1lbnQuIElmIG5vdCwg
d2UgbWlnaHQgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBwbGF0Zm9ybSB3aWRnZXQuCisgICAgRnJh
bWVWaWV3KiBmcmFtZVZpZXcgPSBtX29iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKKyAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBtX29iamVjdC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoZG9jdW1l
bnQgJiYgZnJhbWVWaWV3ICYmIGRvY3VtZW50ICE9IGRvY3VtZW50LT50b3BEb2N1bWVudCgpKQor
ICAgICAgICByZXR1cm4gZnJhbWVWaWV3LT5wbGF0Zm9ybVdpZGdldCgpOworICAgIAorICAgIC8v
IFRoZSB0b3Agc2Nyb2xsIHZpZXcncyBwYXJlbnQgaXMgdGhlIHdlYiBkb2N1bWVudCB2aWV3Lgor
ICAgIHJldHVybiBbc2VsZiBfYWNjZXNzaWJpbGl0eVdlYkRvY3VtZW50Vmlld107Cit9CisKKy0g
KGlkKWFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50Cit7CisgICAgaWYgKCFbc2VsZiBfcHJl
cGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBmb2N1c2VkT2JqID0gbV9vYmplY3QtPmZvY3VzZWRVSUVsZW1l
bnQoKTsKKyAgICAKKyAgICBpZiAoIWZvY3VzZWRPYmopCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgCisgICAgcmV0dXJuIGZvY3VzZWRPYmotPndyYXBwZXIoKTsKK30KKworLSAoaWQpX2FjY2Vz
c2liaWxpdHlXZWJEb2N1bWVudFZpZXcKK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNz
aWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gVGhpcyBtZXRob2Qg
cGVyZm9ybXMgdGhlIGNydWNpYWwgdGFzayBvZiBjb25uZWN0aW5nIHRvIHRoZSBVSVdlYkRvY3Vt
ZW50Vmlldy4KKyAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBjb3JyZWN0bHkgY2FsY3VsYXRlIHRo
ZSBzY3JlZW4gcG9zaXRpb24gb2YgdGhlIEFYIG9iamVjdC4KKyAgICBzdGF0aWMgQ2xhc3Mgd2Vi
Vmlld0NsYXNzID0gbmlsOworICAgIGlmICghd2ViVmlld0NsYXNzKQorICAgICAgICB3ZWJWaWV3
Q2xhc3MgPSBOU0NsYXNzRnJvbVN0cmluZyhAIldlYlZpZXciKTsKKworICAgIGlmICghd2ViVmll
d0NsYXNzKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gbV9vYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CisKKyAgICBpZiAoIWZyYW1lVmll
dykKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICAvLyBJZiB0aGlzIGlzIHRoZSB0b3Ag
bGV2ZWwgZnJhbWUsIHRoZSBVSVdlYkRvY3VtZW50VmlldyBzaG91bGQgYmUgcmV0dXJuZWQuCisg
ICAgaWQgcGFyZW50VmlldyA9IGZyYW1lVmlldy0+ZG9jdW1lbnRWaWV3KCk7CisgICAgd2hpbGUg
KHBhcmVudFZpZXcgJiYgIVtwYXJlbnRWaWV3IGlzS2luZE9mQ2xhc3M6d2ViVmlld0NsYXNzXSkK
KyAgICAgICAgcGFyZW50VmlldyA9IFtwYXJlbnRWaWV3IHN1cGVydmlld107CisgICAgCisgICAg
Ly8gVGhlIHBhcmVudFZpZXcgc2hvdWxkIGhhdmUgYW4gYWNjZXNzaWJpbGl0eUNvbnRhaW5lciwg
aWYgdGhlIFVJS2l0IGFjY2Vzc2liaWxpdHkgYnVuZGxlIHdhcyBsb2FkZWQuIAorICAgIC8vIFRo
ZSBleGNlcHRpb24gaXMgRFJULCB3aGljaCB0ZXN0cyBhY2Nlc3NpYmlsaXR5IHdpdGhvdXQgdGhl
IGVudGlyZSBzeXN0ZW0gdHVybmluZyBhY2Nlc3NpYmlsaXR5IG9uLiBIZW5jZSwKKyAgICAvLyB0
aGlzIGNoZWNrIHNob3VsZCBiZSB2YWxpZCBmb3IgZXZlcnl0aGluZyBleGNlcHQgRFJULgorICAg
IEFTU0VSVChbcGFyZW50VmlldyBhY2Nlc3NpYmlsaXR5Q29udGFpbmVyXSB8fCBhcHBsaWNhdGlv
bklzRHVtcFJlbmRlclRyZWUoKSk7CisgICAgCisgICAgcmV0dXJuIFtwYXJlbnRWaWV3IGFjY2Vz
c2liaWxpdHlDb250YWluZXJdOworfQorCistIChOU0FycmF5ICopX2FjY2Vzc2liaWxpdHlOZXh0
RWxlbWVudHNXaXRoQ291bnQ6KFVJbnQzMiljb3VudAoreyAgICAKKyAgICBpZiAoIVtzZWxmIF9w
cmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAg
IHJldHVybiBbW3NlbGYgX2FjY2Vzc2liaWxpdHlXZWJEb2N1bWVudFZpZXddIF9hY2Nlc3NpYmls
aXR5TmV4dEVsZW1lbnRzV2l0aENvdW50OmNvdW50XTsKK30KKworLSAoTlNBcnJheSAqKV9hY2Nl
c3NpYmlsaXR5UHJldmlvdXNFbGVtZW50c1dpdGhDb3VudDooVUludDMyKWNvdW50Cit7CisgICAg
aWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICAKKyAgICByZXR1cm4gW1tzZWxmIF9hY2Nlc3NpYmlsaXR5V2ViRG9jdW1lbnRWaWV3
XSBfYWNjZXNzaWJpbGl0eVByZXZpb3VzRWxlbWVudHNXaXRoQ291bnQ6Y291bnRdOworfQorCist
IChCT09MKWFjY2Vzc2liaWxpdHlSZXF1aXJlZAoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVB
Y2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBOTzsKKworICAgIHJldHVybiBtX29i
amVjdC0+aXNSZXF1aXJlZCgpOworfQorCistIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUZsb3dU
b0VsZW1lbnRzCit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW47CisgICAgbV9vYmplY3QtPmFyaWFGbG93
VG9FbGVtZW50cyhjaGlsZHJlbik7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gY2hpbGRy
ZW4uc2l6ZSgpOworICAgIE5TTXV0YWJsZUFycmF5KiBhcnJheSA9IFtOU011dGFibGVBcnJheSBh
cnJheVdpdGhDYXBhY2l0eTpsZW5ndGhdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogd3JhcHBl
ciA9IGNoaWxkcmVuW2ldLT53cmFwcGVyKCk7CisgICAgICAgIEFTU0VSVCh3cmFwcGVyKTsKKyAg
ICAgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYg
KGNoaWxkcmVuW2ldLT5pc0F0dGFjaG1lbnQoKSAmJiBbd3JhcHBlciBhdHRhY2htZW50Vmlld10p
CisgICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0Olt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XV07
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6d3JhcHBlcl07Cisg
ICAgfQorICAgIHJldHVybiBhcnJheTsKK30KKworLSAoaWQpYWNjZXNzaWJpbGl0eUxpbmtlZEVs
ZW1lbnQKK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIAorICAgIC8vIElmIHRoaXMgc3RhdGljIHRleHQgaW5zaWRl
IG9mIGEgbGluaywgaXQgc2hvdWxkIHVzZSBpdHMgcGFyZW50J3MgbGlua2VkIGVsZW1lbnQuCisg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZWxlbWVudCA9IG1fb2JqZWN0OworICAgIGlmIChtX29i
amVjdC0+cm9sZVZhbHVlKCkgPT0gU3RhdGljVGV4dFJvbGUgJiYgbV9vYmplY3QtPnBhcmVudE9i
amVjdFVuaWdub3JlZCgpLT5pc0xpbmsoKSkKKyAgICAgICAgZWxlbWVudCA9IG1fb2JqZWN0LT5w
YXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW47CisgICAgZWxlbWVudC0+bGlua2Vk
VUlFbGVtZW50cyhjaGlsZHJlbik7CisgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA9PSAwKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHJldHVybiBjaGlsZHJlblswXS0+d3JhcHBlcigp
OworfQorCisKKy0gKEJPT0wpaXNBdHRhY2htZW50Cit7CisgICAgaWYgKCFtX29iamVjdCkKKyAg
ICAgICAgcmV0dXJuIE5POworICAgIAorICAgIHJldHVybiBtX29iamVjdC0+aXNBdHRhY2htZW50
KCk7Cit9CisKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlBY3RpdmF0ZQoreworICAgIGlmICghW3Nl
bGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybjsKKworICAgIG1f
b2JqZWN0LT5wcmVzcygpOworfQorCistIChXQUtWaWV3ICopYXR0YWNobWVudFZpZXcKK3sKKyAg
ICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgQVNTRVJUKFtzZWxmIGlzQXR0YWNobWVudF0pOworICAgIFdpZGdldCogd2lk
Z2V0ID0gbV9vYmplY3QtPndpZGdldEZvckF0dGFjaG1lbnRWaWV3KCk7CisgICAgaWYgKCF3aWRn
ZXQpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIHdpZGdldC0+cGxhdGZvcm1XaWRn
ZXQoKTsgICAgCit9CisKK3N0YXRpYyBSZW5kZXJPYmplY3QqIHJlbmRlcmVyRm9yVmlldyhXQUtW
aWV3KiB2aWV3KQoreworICAgIGlmICghW3ZpZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2Nv
bChXZWJDb3JlRnJhbWVWaWV3KV0pCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIFdBS1Zp
ZXc8V2ViQ29yZUZyYW1lVmlldz4qIGZyYW1lVmlldyA9IChXQUtWaWV3PFdlYkNvcmVGcmFtZVZp
ZXc+Kil2aWV3OworICAgIEZyYW1lKiBmcmFtZSA9IFtmcmFtZVZpZXcgX3dlYl9mcmFtZV07Cisg
ICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgTm9kZSogbm9kZSA9
IGZyYW1lLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKTsKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBub2RlLT5yZW5kZXJlcigpOworfQorCist
IChpZClfYWNjZXNzaWJpbGl0eVBhcmVudEZvclN1YnZpZXc6KGlkKXN1YnZpZXcKK3sgICAKKyAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcmVuZGVyZXJGb3JWaWV3KHN1YnZpZXcpOworICAg
IGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogb2JqID0gcmVuZGVyZXItPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+
Z2V0T3JDcmVhdGUocmVuZGVyZXIpOworICAgIGlmIChvYmopCisgICAgICAgIHJldHVybiBvYmot
PnBhcmVudE9iamVjdFVuaWdub3JlZCgpLT53cmFwcGVyKCk7CisgICAgcmV0dXJuIG5pbDsKK30K
KworLSAodm9pZClwb3N0Rm9jdXNDaGFuZ2VOb3RpZmljYXRpb24KK3sKKyAgICAvLyBUaGUgVUlL
aXQgYWNjZXNzaWJpbGl0eSB3cmFwcGVyIHdpbGwgb3ZlcnJpZGUgYW5kIHBvc3QgYXBwcm9wcmlh
dGUgbm90aWZpY2F0aW9uLgorfQorCistICh2b2lkKXBvc3RTZWxlY3RlZFRleHRDaGFuZ2VOb3Rp
ZmljYXRpb24KK3sKKyAgICAvLyBUaGUgVUlLaXQgYWNjZXNzaWJpbGl0eSB3cmFwcGVyIHdpbGwg
b3ZlcnJpZGUgYW5kIHBvc3QgYXBwcm9wcmlhdGUgbm90aWZpY2F0aW9uLiAgICAKK30KKworLSAo
dm9pZClwb3N0TGF5b3V0Q2hhbmdlTm90aWZpY2F0aW9uCit7CisgICAgLy8gVGhlIFVJS2l0IGFj
Y2Vzc2liaWxpdHkgd3JhcHBlciB3aWxsIG92ZXJyaWRlIGFuZCBwb3N0IGFwcHJvcHJpYXRlIG5v
dGlmaWNhdGlvbi4gICAgICAgIAorfQorCistICh2b2lkKXBvc3RMaXZlUmVnaW9uQ2hhbmdlTm90
aWZpY2F0aW9uCit7CisgICAgLy8gVGhlIFVJS2l0IGFjY2Vzc2liaWxpdHkgd3JhcHBlciB3aWxs
IG92ZXJyaWRlIGFuZCBwb3N0IGFwcHJvcHJpYXRlIG5vdGlmaWNhdGlvbi4gICAgCit9CisKKy0g
KHZvaWQpcG9zdExvYWRDb21wbGV0ZU5vdGlmaWNhdGlvbgoreworICAgIC8vIFRoZSBVSUtpdCBh
Y2Nlc3NpYmlsaXR5IHdyYXBwZXIgd2lsbCBvdmVycmlkZSBhbmQgcG9zdCBhcHByb3ByaWF0ZSBu
b3RpZmljYXRpb24uICAgIAorfQorCistICh2b2lkKXBvc3RDaGlsZHJlbkNoYW5nZWROb3RpZmlj
YXRpb24KK3sKKyAgICAvLyBUaGUgVUlLaXQgYWNjZXNzaWJpbGl0eSB3cmFwcGVyIHdpbGwgb3Zl
cnJpZGUgYW5kIHBvc3QgYXBwcm9wcmlhdGUgbm90aWZpY2F0aW9uLiAgICAKK30KKworLSAodm9p
ZClwb3N0SW52YWxpZFN0YXR1c0NoYW5nZWROb3RpZmljYXRpb24KK3sKKyAgICAvLyBUaGUgVUlL
aXQgYWNjZXNzaWJpbGl0eSB3cmFwcGVyIHdpbGwgb3ZlcnJpZGUgYW5kIHBvc3QgYXBwcm9wcmlh
dGUgbm90aWZpY2F0aW9uLiAgICAgICAgCit9CisKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eUVsZW1l
bnREaWRCZWNvbWVGb2N1c2VkCit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxp
dHlDYWxsXSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFRoZSBmb2N1c2VkIFZvaWNl
T3ZlciBlbGVtZW50IG1pZ2h0IGJlIHRoZSB0ZXh0IGluc2lkZSBhIGxpbmsuCisgICAgLy8gSW4g
dGhvc2UgY2FzZXMgd2Ugc2hvdWxkIGZvY3VzIG9uIHRoZSBsaW5rIGl0c2VsZi4KKyAgICBmb3Ig
KEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IG1fb2JqZWN0OyBvYmplY3QgIT0gbmlsOyBv
YmplY3QgPSBvYmplY3QtPnBhcmVudE9iamVjdCgpKSB7CisgICAgICAgIGlmIChvYmplY3QtPnJv
bGVWYWx1ZSgpID09IFdlYkFyZWFSb2xlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
aWYgKG9iamVjdC0+Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSkgeworICAgICAgICAgICAgb2JqZWN0
LT5zZXRGb2N1c2VkKHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
Cit9CisKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eU1vZGlmeVNlbGVjdGlvbjooVGV4dEdyYW51bGFy
aXR5KWdyYW51bGFyaXR5IGluY3JlYXNlOihCT09MKWluY3JlYXNlCit7CisgICAgaWYgKCFbc2Vs
ZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IEZyYW1lU2VsZWN0aW9uKiBmcmFtZVNlbGVjdGlvbiA9IG1fb2JqZWN0LT5kb2N1bWVudCgpLT5m
cmFtZSgpLT5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1f
b2JqZWN0LT5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSByYW5nZSA9IG1f
b2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZSgpOworICAgIAorICAgIC8vIEJlZm9yZSBhIHNl
bGVjdGlvbiB3aXRoIGxlbmd0aCBleGlzdHMsIHRoZSBjdXJzb3IgcG9zaXRpb24gbmVlZHMgdG8g
bW92ZSB0byB0aGUgcmlnaHQgc3RhcnRpbmcgcGxhY2UuCisgICAgLy8gVGhhdCBzaG91bGQgYmUg
dGhlIGJlZ2lubmluZyBvZiB0aGlzIGVsZW1lbnQgKHJhbmdlLnN0YXJ0KS4gSG93ZXZlciwgaWYg
dGhlIGN1cnNvciBpcyBhbHJlYWR5IHdpdGhpbiB0aGUgCisgICAgLy8gcmFuZ2Ugb2YgdGhpcyBl
bGVtZW50ICh0aGUgY3Vyc29yIGlzIHJlcHJlc2VudGVkIGJ5IHNlbGVjdGlvbiksIHRoZW4gdGhl
IGN1cnNvciBkb2VzIG5vdCBuZWVkIHRvIG1vdmUuCisgICAgaWYgKGZyYW1lU2VsZWN0aW9uLT5p
c05vbmUoKSAmJiAoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpIDwgcmFuZ2Uuc3RhcnQgfHwgc2Vs
ZWN0aW9uLnZpc2libGVFbmQoKSA+IHJhbmdlLmVuZCkpCisgICAgICAgIGZyYW1lU2VsZWN0aW9u
LT5tb3ZlVG8ocmFuZ2Uuc3RhcnQsIFVzZXJUcmlnZ2VyZWQpOworICAgIAorICAgIGZyYW1lU2Vs
ZWN0aW9uLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIChpbmNyZWFz
ZSkgPyBEaXJlY3Rpb25SaWdodCA6IERpcmVjdGlvbkxlZnQsIGdyYW51bGFyaXR5LCBVc2VyVHJp
Z2dlcmVkKTsKK30KKworLSAodm9pZClhY2Nlc3NpYmlsaXR5SW5jcmVhc2VTZWxlY3Rpb246KFRl
eHRHcmFudWxhcml0eSlncmFudWxhcml0eQoreworICAgIFtzZWxmIGFjY2Vzc2liaWxpdHlNb2Rp
ZnlTZWxlY3Rpb246Z3JhbnVsYXJpdHkgaW5jcmVhc2U6WUVTXTsKK30KKworLSAodm9pZClhY2Nl
c3NpYmlsaXR5RGVjcmVhc2VTZWxlY3Rpb246KFRleHRHcmFudWxhcml0eSlncmFudWxhcml0eQor
eworICAgIFtzZWxmIGFjY2Vzc2liaWxpdHlNb2RpZnlTZWxlY3Rpb246Z3JhbnVsYXJpdHkgaW5j
cmVhc2U6Tk9dOworfQorCistICh2b2lkKWFjY2Vzc2liaWxpdHlNb3ZlU2VsZWN0aW9uVG9NYXJr
ZXI6KFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopbWFya2VyCit7CisgICAgaWYgKCFbc2Vs
ZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24gPSBbbWFya2VyIHZpc2libGVQb3NpdGlv
bl07CisgICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRnJhbWVTZWxlY3Rpb24qIGZyYW1lU2VsZWN0aW9uID0gbV9vYmplY3QtPmRvY3VtZW50
KCktPmZyYW1lKCktPnNlbGVjdGlvbigpOworICAgIGZyYW1lU2VsZWN0aW9uLT5tb3ZlVG8odmlz
aWJsZVBvc2l0aW9uLCBVc2VyVHJpZ2dlcmVkKTsKK30KKworLSAodm9pZClhY2Nlc3NpYmlsaXR5
SW5jcmVtZW50Cit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9vYmplY3QtPmluY3JlbWVudCgpOworfQorCistICh2
b2lkKWFjY2Vzc2liaWxpdHlEZWNyZW1lbnQKK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNj
ZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm47CisKKyAgICBtX29iamVjdC0+ZGVjcmVt
ZW50KCk7Cit9CisKKyNwcmFnbWEgbWFyayBBY2Nlc3NpYmlsaXR5IFRleHQgTWFya2VyIEhhbmRs
ZXJzCisKKy0gKEJPT0wpX2FkZEFjY2Vzc2liaWxpdHlPYmplY3Q6KEFjY2Vzc2liaWxpdHlPYmpl
Y3QqKWF4T2JqZWN0IHRvVGV4dE1hcmtlckFycmF5OihOU011dGFibGVBcnJheSAqKWFycmF5Cit7
CisgICAgaWYgKCFheE9iamVjdCkKKyAgICAgICAgcmV0dXJuIE5POworICAgIAorICAgIEFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gYXhPYmplY3QtPndyYXBwZXIoKTsKKyAg
ICBpZiAoIXdyYXBwZXIpCisgICAgICAgIHJldHVybiBOTzsKKworICAgIC8vIERvbid0IGFkZCB0
aGUgc2FtZSBvYmplY3QgdHdpY2UsIGJ1dCBzaW5jZSB0aGlzIGhhcyBhbHJlYWR5IGJlZW4gYWRk
ZWQsIHdlIHNob3VsZCByZXR1cm4KKyAgICAvLyBZRVMgYmVjYXVzZSB3ZSB3YW50IHRvIGluZm9y
bSB0aGF0IGl0J3MgaW4gdGhlIGFycmF5CisgICAgaWYgKFthcnJheSBjb250YWluc09iamVjdDp3
cmFwcGVyXSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAKKyAgICAvLyBFeHBsaWNpdHkgc2V0
IHRoYXQgdGhpcyBpcyBub3cgYW4gZWxlbWVudCAoaW4gY2FzZSBvdGhlciBsb2dpYyB0cmllcyB0
byBvdmVycmlkZSkuCisgICAgW3dyYXBwZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhC
b29sOllFU10gZm9yS2V5OkAiaXNBY2Nlc3NpYmlsaXR5RWxlbWVudCJdOyAgICAKKyAgICBbYXJy
YXkgYWRkT2JqZWN0OndyYXBwZXJdOworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKE5TU3RyaW5n
ICopc3RyaW5nRm9yVGV4dE1hcmtlcnM6KE5TQXJyYXkgKiltYXJrZXJzCit7CisgICAgaWYgKCFb
c2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICAKKyAgICBpZiAoW21hcmtlcnMgY291bnRdICE9IDIpCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgCisgICAgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIHN0YXJ0TWFya2VyID0gW21hcmtl
cnMgb2JqZWN0QXRJbmRleDowXTsKKyAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogZW5k
TWFya2VyID0gW21hcmtlcnMgb2JqZWN0QXRJbmRleDoxXTsKKyAgICBpZiAoIVtzdGFydE1hcmtl
ciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBjbGFzc11dIHx8ICFb
ZW5kTWFya2VyIGlzS2luZE9mQ2xhc3M6W1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIGNsYXNz
XV0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgLy8gZXh0cmFjdCB0aGUgc3RhcnQg
YW5kIGVuZCBWaXNpYmxlUG9zaXRpb24KKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxl
UG9zaXRpb24gPSBbc3RhcnRNYXJrZXIgdmlzaWJsZVBvc2l0aW9uXTsKKyAgICBpZiAoc3RhcnRW
aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAg
VmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbiA9IFtlbmRNYXJrZXIgdmlzaWJsZVBv
c2l0aW9uXTsKKyAgICBpZiAoZW5kVmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc1JhbmdlID0g
VmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRWaXNpYmxlUG9zaXRpb24sIGVuZFZpc2libGVQb3Np
dGlvbik7CisgICAgcmV0dXJuIG1fb2JqZWN0LT5zdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5n
ZSh2aXNpYmxlUG9zUmFuZ2UpOworfQorCitzdGF0aWMgaW50IGJsb2NrcXVvdGVMZXZlbChSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVy
biAwOworICAgIAorICAgIGludCByZXN1bHQgPSAwOworICAgIGZvciAoTm9kZSogbm9kZSA9IHJl
bmRlcmVyLT5ub2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICAg
ICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYmxvY2txdW90ZVRhZykpCisgICAgICAgICAgICByZXN1
bHQgKz0gMTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZv
aWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRCbG9ja3F1b3RlTGV2ZWwoTlNNdXRhYmxlQXR0cmlidXRl
ZFN0cmluZyogYXR0clN0cmluZywgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgTlNSYW5nZSByYW5n
ZSkKK3sKKyAgICBpbnQgcXVvdGVMZXZlbCA9IGJsb2NrcXVvdGVMZXZlbChyZW5kZXJlcik7Cisg
ICAgCisgICAgaWYgKHF1b3RlTGV2ZWwpCisgICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0
ZTpVSUFjY2Vzc2liaWxpdHlUb2tlbkJsb2NrcXVvdGVMZXZlbCB2YWx1ZTpbTlNOdW1iZXIgbnVt
YmVyV2l0aEludDpxdW90ZUxldmVsXSByYW5nZTpyYW5nZV07CisgICAgZWxzZQorICAgICAgICBb
YXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6VUlBY2Nlc3NpYmlsaXR5VG9rZW5CbG9ja3F1b3Rl
TGV2ZWwgcmFuZ2U6cmFuZ2VdOworfQorCitzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1Nl
dEhlYWRpbmdMZXZlbChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBOU1JhbmdlIHJhbmdlKQoreworICAgIGlmICghcmVuZGVyZXIp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnRP
YmplY3QgPSByZW5kZXJlci0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0
ZShyZW5kZXJlci0+cGFyZW50KCkpOworICAgIGludCBwYXJlbnRIZWFkaW5nTGV2ZWwgPSBwYXJl
bnRPYmplY3QtPmhlYWRpbmdMZXZlbCgpOworICAgIAorICAgIGlmIChwYXJlbnRIZWFkaW5nTGV2
ZWwpCisgICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTpVSUFjY2Vzc2liaWxpdHlUb2tl
bkhlYWRpbmdMZXZlbCB2YWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpwYXJlbnRIZWFkaW5n
TGV2ZWxdIHJhbmdlOnJhbmdlXTsKKyAgICBlbHNlCisgICAgICAgIFthdHRyU3RyaW5nIHJlbW92
ZUF0dHJpYnV0ZTpVSUFjY2Vzc2liaWxpdHlUb2tlbkhlYWRpbmdMZXZlbCByYW5nZTpyYW5nZV07
Cit9CisKK3N0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChOU011dGFibGVBdHRy
aWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBHU0ZvbnRSZWYgZm9udCwgTlNSYW5nZSByYW5nZSkK
K3sKKyAgICBpZiAoIWZvbnQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBjb25zdCBjaGFy
KiBuYW1lQ1N0ciA9IEdTRm9udEdldEZ1bGxOYW1lKGZvbnQpOworICAgIGNvbnN0IGNoYXIqIGZh
bWlseUNTdHIgPSBHU0ZvbnRHZXRGYW1pbHlOYW1lKGZvbnQpOworICAgIE5TTnVtYmVyKiBzaXpl
ID0gW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpHU0ZvbnRHZXRTaXplKGZvbnQpXTsKKyAgICBO
U051bWJlciogYm9sZCA9IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpHU0ZvbnRJc0JvbGQoZm9u
dCldOworICAgIEdTRm9udFRyYWl0TWFzayB0cmFpdHMgPSBHU0ZvbnRHZXRUcmFpdHMoZm9udCk7
CisgICAgaWYgKG5hbWVDU3RyKQorICAgICAgICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6VUlB
Y2Nlc3NpYmlsaXR5VG9rZW5Gb250TmFtZSB2YWx1ZTpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhT
dHJpbmc6bmFtZUNTdHJdIHJhbmdlOnJhbmdlXTsKKyAgICBpZiAoZmFtaWx5Q1N0cikKKyAgICAg
ICAgW2F0dHJTdHJpbmcgYWRkQXR0cmlidXRlOlVJQWNjZXNzaWJpbGl0eVRva2VuRm9udEZhbWls
eSB2YWx1ZTpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6ZmFtaWx5Q1N0cl0gcmFuZ2U6
cmFuZ2VdOworICAgIGlmIChbc2l6ZSBib29sVmFsdWVdKQorICAgICAgICBbYXR0clN0cmluZyBh
ZGRBdHRyaWJ1dGU6VUlBY2Nlc3NpYmlsaXR5VG9rZW5Gb250U2l6ZSB2YWx1ZTpzaXplIHJhbmdl
OnJhbmdlXTsKKyAgICBpZiAoW2JvbGQgYm9vbFZhbHVlXSB8fCAodHJhaXRzICYgR1NCb2xkRm9u
dE1hc2spKQorICAgICAgICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6VUlBY2Nlc3NpYmlsaXR5
VG9rZW5Cb2xkIHZhbHVlOltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIHJhbmdlOnJhbmdl
XTsKKyAgICBpZiAodHJhaXRzICYgR1NJdGFsaWNGb250TWFzaykKKyAgICAgICAgW2F0dHJTdHJp
bmcgYWRkQXR0cmlidXRlOlVJQWNjZXNzaWJpbGl0eVRva2VuSXRhbGljIHZhbHVlOltOU051bWJl
ciBudW1iZXJXaXRoQm9vbDpZRVNdIHJhbmdlOnJhbmdlXTsKKworfQorCitzdGF0aWMgdm9pZCBB
WEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRy
U3RyaW5nLCBOU1N0cmluZyogYXR0cmlidXRlLCBOU051bWJlciogbnVtYmVyLCBOU1JhbmdlIHJh
bmdlKQoreworICAgIGlmIChudW1iZXIpCisgICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0
ZTphdHRyaWJ1dGUgdmFsdWU6bnVtYmVyIHJhbmdlOnJhbmdlXTsKKyAgICBlbHNlCisgICAgICAg
IFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTphdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOworfQor
CitzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIE5TUmFuZ2UgcmFu
Z2UpCit7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAg
CisgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5mbworICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9u
dChhdHRyU3RyaW5nLCBzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250KCktPmdldEdTRm9udCgpLCBy
YW5nZSk7CisgICAgICAgICAgICAgICAgCisgICAgaW50IGRlY29yID0gc3R5bGUtPnRleHREZWNv
cmF0aW9uc0luRWZmZWN0KCk7CisgICAgaWYgKChkZWNvciAmIChVTkRFUkxJTkUgfCBMSU5FX1RI
Uk9VR0gpKSAhPSAwKSB7CisgICAgICAgIC8vIGZpbmQgY29sb3JzIHVzaW5nIHF1aXJrIG1vZGUg
YXBwcm9hY2ggKHN0cmljdCBtb2RlIHdvdWxkIHVzZSBjdXJyZW50CisgICAgICAgIC8vIGNvbG9y
IGZvciBhbGwgYnV0IHRoZSByb290IGxpbmUgYm94LCB3aGljaCB3b3VsZCB1c2UgZ2V0VGV4dERl
Y29yYXRpb25Db2xvcnMpCisgICAgICAgIENvbG9yIHVuZGVybGluZSwgb3ZlcmxpbmUsIGxpbmV0
aHJvdWdoOworICAgICAgICByZW5kZXJlci0+Z2V0VGV4dERlY29yYXRpb25Db2xvcnMoZGVjb3Is
IHVuZGVybGluZSwgb3ZlcmxpbmUsIGxpbmV0aHJvdWdoKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChkZWNvciAmIFVOREVSTElORSkKKyAgICAgICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0TnVt
YmVyKGF0dHJTdHJpbmcsIFVJQWNjZXNzaWJpbGl0eVRva2VuVW5kZXJsaW5lLCBbTlNOdW1iZXIg
bnVtYmVyV2l0aEJvb2w6WUVTXSwgcmFuZ2UpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgQVhB
dHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRy
U3RyaW5nLCBOb2RlKiBub2RlLCBjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW5ndGgpCit7Cisg
ICAgLy8gc2tpcCBpbnZpc2libGUgdGV4dAorICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIGVhc2llciB0byBjYWxjdWxhdGUgdGhlIHJhbmdl
IGJlZm9yZSBhcHBlbmRpbmcgdGhlIHN0cmluZworICAgIE5TUmFuZ2UgYXR0clN0cmluZ1Jhbmdl
ID0gTlNNYWtlUmFuZ2UoW2F0dHJTdHJpbmcgbGVuZ3RoXSwgbGVuZ3RoKTsKKyAgICAKKyAgICAv
LyBhcHBlbmQgdGhlIHN0cmluZyBmcm9tIHRoaXMgbm9kZQorICAgIFtbYXR0clN0cmluZyBtdXRh
YmxlU3RyaW5nXSBhcHBlbmRTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOmNo
YXJzIGxlbmd0aDpsZW5ndGhdXTsKKyAgICAKKyAgICAvLyBzZXQgbmV3IGF0dHJpYnV0ZXMKKyAg
ICBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKGF0dHJTdHJpbmcsIG5vZGUtPnJlbmRlcmVyKCks
IGF0dHJTdHJpbmdSYW5nZSk7CisgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRIZWFkaW5nTGV2ZWwo
YXR0clN0cmluZywgbm9kZS0+cmVuZGVyZXIoKSwgYXR0clN0cmluZ1JhbmdlKTsKKyAgICBBWEF0
dHJpYnV0ZVN0cmluZ1NldEJsb2NrcXVvdGVMZXZlbChhdHRyU3RyaW5nLCBub2RlLT5yZW5kZXJl
cigpLCBhdHRyU3RyaW5nUmFuZ2UpOyAgICAKK30KKworCisvLyBUaGlzIG1ldGhvZCBpcyBpbnRl
bmRlZCB0byByZXR1cm4gYW4gYXJyYXkgb2Ygc3RyaW5ncyBhbmQgYWNjZXNzaWJpbGl0eSBlbGVt
ZW50cyB0aGF0IAorLy8gcmVwcmVzZW50IHRoZSBvYmplY3RzIG9uIG9uZSBsaW5lIG9mIHJlbmRl
cmVkIHdlYiBjb250ZW50LiBUaGUgYXJyYXkgb2YgbWFya2VycyBzZW50CisvLyBpbiBzaG91bGQg
YmUgb3JkZXJlZCBhbmQgY29udGFpbiBvbmx5IGEgc3RhcnQgYW5kIGVuZCBtYXJrZXIuCistIChO
U0FycmF5ICopYXJyYXlPZlRleHRGb3JUZXh0TWFya2VyczooTlNBcnJheSAqKW1hcmtlcnMgYXR0
cmlidXRlZDooQk9PTClhdHRyaWJ1dGVkCit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vz
c2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmIChbbWFya2VycyBj
b3VudF0gIT0gMikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBXZWJBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciogc3RhcnRNYXJrZXIgPSBbbWFya2VycyBvYmplY3RBdEluZGV4OjBdOwor
ICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBlbmRNYXJrZXIgPSBbbWFya2VycyBvYmpl
Y3RBdEluZGV4OjFdOworICAgIGlmICghW3N0YXJ0TWFya2VyIGlzS2luZE9mQ2xhc3M6W1dlYkFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyIGNsYXNzXV0gfHwgIVtlbmRNYXJrZXIgaXNLaW5kT2ZDbGFz
czpbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICAKKyAgICAvLyBleHRyYWN0IHRoZSBzdGFydCBhbmQgZW5kIFZpc2libGVQb3NpdGlv
bgorICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlvbiA9IFtzdGFydE1hcmtl
ciB2aXNpYmxlUG9zaXRpb25dOworICAgIGlmIChzdGFydFZpc2libGVQb3NpdGlvbi5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kVmlz
aWJsZVBvc2l0aW9uID0gW2VuZE1hcmtlciB2aXNpYmxlUG9zaXRpb25dOworICAgIGlmIChlbmRW
aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAg
Ly8gaXRlcmF0ZSBvdmVyIHRoZSByYW5nZSB0byBidWlsZCB0aGUgQVggYXR0cmlidXRlZCBzdHJp
bmcKKyAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XTsKKyAgICBUZXh0SXRlcmF0b3IgaXQobWFrZVJhbmdlKHN0YXJ0VmlzaWJsZVBvc2l0aW9u
LCBlbmRWaXNpYmxlUG9zaXRpb24pLmdldCgpKTsKKyAgICBmb3IgKDsgIWl0LmF0RW5kKCk7IGl0
LmFkdmFuY2UoKSkgeworICAgICAgICAvLyBsb2NhdGUgdGhlIG5vZGUgYW5kIHN0YXJ0aW5nIG9m
ZnNldCBmb3IgdGhpcyByYW5nZQorICAgICAgICBpbnQgZXhjZXB0aW9uID0gMDsKKyAgICAgICAg
Tm9kZSogbm9kZSA9IGl0LnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbik7CisgICAg
ICAgIEFTU0VSVChub2RlID09IGl0LnJhbmdlKCktPmVuZENvbnRhaW5lcihleGNlcHRpb24pKTsK
KyAgICAgICAgaW50IG9mZnNldCA9IGl0LnJhbmdlKCktPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbik7
CisgICAgICAgIAorICAgICAgICAvLyBub24temVybyBsZW5ndGggbWVhbnMgdGV4dHVhbCBub2Rl
LCB6ZXJvIGxlbmd0aCBtZWFucyByZXBsYWNlZCBub2RlIChBS0EgImF0dGFjaG1lbnRzIiBpbiBB
WCkKKyAgICAgICAgaWYgKGl0Lmxlbmd0aCgpICE9IDApIHsKKyAgICAgICAgICAgIGlmICghYXR0
cmlidXRlZCkgeworICAgICAgICAgICAgICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRoaXMgaXMgcmVw
cmVzZW50ZWQgYnkgYSBsaW5rLgorICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGxpbmtPYmplY3QgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphbmNob3JFbGVtZW50Rm9yTm9kZShu
b2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoW3NlbGYgX2FkZEFjY2Vzc2liaWxpdHlPYmplY3Q6
bGlua09iamVjdCB0b1RleHRNYXJrZXJBcnJheTphcnJheV0pCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIE5leHQgY2hl
Y2sgaWYgdGhpcyByZWdpb24gaXMgcmVwcmVzZW50ZWQgYnkgYSBoZWFkaW5nLgorICAgICAgICAg
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGhlYWRpbmdPYmplY3QgPSBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpoZWFkaW5nRWxlbWVudEZvck5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgaWYg
KFtzZWxmIF9hZGRBY2Nlc3NpYmlsaXR5T2JqZWN0OmhlYWRpbmdPYmplY3QgdG9UZXh0TWFya2Vy
QXJyYXk6YXJyYXldKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBTdHJpbmcgbGlzdE1hcmtlclRleHQgPSBtX29iamVjdC0+
bGlzdE1hcmtlclRleHRGb3JOb2RlQW5kUG9zaXRpb24obm9kZSwgVmlzaWJsZVBvc2l0aW9uKGl0
LnJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKSkpOyAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAoIWxpc3RNYXJrZXJUZXh0LmlzRW1wdHkoKSkgCisgICAgICAgICAgICAgICAg
ICAgIFthcnJheSBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOmxpc3RN
YXJrZXJUZXh0LmNoYXJhY3RlcnMoKSBsZW5ndGg6bGlzdE1hcmtlclRleHQubGVuZ3RoKCldXTsK
KyAgICAgICAgICAgICAgICAvLyBUaGVyZSB3YXMgbm90IGFuIGVsZW1lbnQgcmVwcmVzZW50YXRp
b24sIHNvIGp1c3QgcmV0dXJuIHRoZSB0ZXh0LgorICAgICAgICAgICAgICAgIFthcnJheSBhZGRP
YmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOml0LmNoYXJhY3RlcnMoKSBsZW5n
dGg6aXQubGVuZ3RoKCldXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbGlzdE1hcmtlclRleHQgPSBtX29iamVj
dC0+bGlzdE1hcmtlclRleHRGb3JOb2RlQW5kUG9zaXRpb24obm9kZSwgVmlzaWJsZVBvc2l0aW9u
KGl0LnJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKSkpOyAKKworICAgICAgICAgICAgICAgIGlmICgh
bGlzdE1hcmtlclRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcgPSBbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRdOworICAgICAgICAgICAgICAgICAgICBBWEF0dHJpYnV0ZWRTdHJpbmdB
cHBlbmRUZXh0KGF0dHJTdHJpbmcsIG5vZGUsIGxpc3RNYXJrZXJUZXh0LmNoYXJhY3RlcnMoKSwg
bGlzdE1hcmtlclRleHQubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICBbYXJyYXkgYWRk
T2JqZWN0OmF0dHJTdHJpbmddOworICAgICAgICAgICAgICAgICAgICBbYXR0clN0cmluZyByZWxl
YXNlXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqYXR0clN0cmluZyA9IFtbTlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07CisgICAgICAgICAgICAgICAgQVhBdHRyaWJ1dGVk
U3RyaW5nQXBwZW5kVGV4dChhdHRyU3RyaW5nLCBub2RlLCBpdC5jaGFyYWN0ZXJzKCksIGl0Lmxl
bmd0aCgpKTsKKyAgICAgICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OmF0dHJTdHJpbmddOwor
ICAgICAgICAgICAgICAgIFthdHRyU3RyaW5nIHJlbGVhc2VdOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgTm9kZSogcmVwbGFjZWROb2RlID0gbm9kZS0+Y2hp
bGROb2RlKG9mZnNldCk7CisgICAgICAgICAgICBpZiAocmVwbGFjZWROb2RlKSB7CisgICAgICAg
ICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gbV9vYmplY3QtPmF4T2JqZWN0Q2Fj
aGUoKS0+Z2V0T3JDcmVhdGUocmVwbGFjZWROb2RlLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAg
ICAgICBpZiAob2JqICYmICFvYmotPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgW3NlbGYgX2FkZEFjY2Vzc2liaWxpdHlPYmplY3Q6b2JqIHRvVGV4dE1hcmtl
ckFycmF5OmFycmF5XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gW2FycmF5IGF1dG9yZWxlYXNlXTsKK30KKworLSAoTlNSYW5nZSlfY29udmVydFRv
TlNSYW5nZTooUmFuZ2UgKilyYW5nZQoreworICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5zdGFy
dENvbnRhaW5lcigpKQorICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7
CisgICAgCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9vYmplY3QtPmRvY3VtZW50KCk7Cisg
ICAgRnJhbWVTZWxlY3Rpb24qIGZyYW1lU2VsZWN0aW9uID0gZG9jdW1lbnQtPmZyYW1lKCktPnNl
bGVjdGlvbigpOworICAgIAorICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBmcmFtZVNlbGVj
dGlvbi0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIEVsZW1lbnQqIHNjb3BlID0gc2VsZWN0
aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7Cisg
ICAgCisgICAgLy8gTW91c2UgZXZlbnRzIG1heSBjYXVzZSBUU00gdG8gYXR0ZW1wdCB0byBjcmVh
dGUgYW4gTlNSYW5nZSBmb3IgYSBwb3J0aW9uIG9mIHRoZSB2aWV3CisgICAgLy8gdGhhdCBpcyBu
b3QgaW5zaWRlIHRoZSBjdXJyZW50IGVkaXRhYmxlIHJlZ2lvbi4gIFRoZXNlIGNoZWNrcyBlbnN1
cmUgd2UgZG9uJ3QgcHJvZHVjZQorICAgIC8vIHBvdGVudGlhbGx5IGludmFsaWQgZGF0YSB3aGVu
IHJlc3BvbmRpbmcgdG8gc3VjaCByZXF1ZXN0cy4KKyAgICBpZiAocmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkgIT0gc2NvcGUgJiYgIXJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5pc0Rlc2NlbmRhbnRP
ZihzY29wZSkpCisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAg
ICBpZiAocmFuZ2UtPmVuZENvbnRhaW5lcigpICE9IHNjb3BlICYmICFyYW5nZS0+ZW5kQ29udGFp
bmVyKCktPmlzRGVzY2VuZGFudE9mKHNjb3BlKSkKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdl
KE5TTm90Rm91bmQsIDApOworICAgIAorICAgIFJlZlB0cjxSYW5nZT4gdGVzdFJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShzY29wZS0+ZG9jdW1lbnQoKSwgc2NvcGUsIDAsIHJhbmdlLT5zdGFydENvbnRh
aW5lcigpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSk7CisgICAgQVNTRVJUKHRlc3RSYW5nZS0+c3Rh
cnRDb250YWluZXIoKSA9PSBzY29wZSk7CisgICAgaW50IHN0YXJ0UG9zaXRpb24gPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5nZXQoKSk7CisgICAgCisgICAgRXhjZXB0aW9u
Q29kZSBlYzsKKyAgICB0ZXN0UmFuZ2UtPnNldEVuZChyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJh
bmdlLT5lbmRPZmZzZXQoKSwgZWMpOworICAgIEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkgPT0gc2NvcGUpOworICAgIGludCBlbmRQb3NpdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgodGVzdFJhbmdlLmdldCgpKTsKKyAgICByZXR1cm4gTlNNYWtlUmFuZ2Uoc3RhcnRQ
b3NpdGlvbiwgZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKTsKK30KKworLSAoUGFzc1JlZlB0
cjxSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UKK3sKKyAgICBpZiAo
bnNyYW5nZS5sb2NhdGlvbiA+IElOVF9NQVgpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChu
c3JhbmdlLmxlbmd0aCA+IElOVF9NQVggfHwgbnNyYW5nZS5sb2NhdGlvbiArIG5zcmFuZ2UubGVu
Z3RoID4gSU5UX01BWCkKKyAgICAgICAgbnNyYW5nZS5sZW5ndGggPSBJTlRfTUFYIC0gbnNyYW5n
ZS5sb2NhdGlvbjsKKyAgICAgICAgCisgICAgLy8gb3VyIGNyaXRpY2FsIGFzc3VtcHRpb24gaXMg
dGhhdCB3ZSBhcmUgb25seSBjYWxsZWQgYnkgaW5wdXQgbWV0aG9kcyB0aGF0CisgICAgLy8gY29u
Y2VudHJhdGUgb24gYSBnaXZlbiBhcmVhIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbgorICAgIC8v
IFdlIGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIG9mIHRleHQgZmllbGRzIGFuZCB0ZXh0YXJlYXMu
IFRoZSBET00gZm9yIHRob3NlIGlzIG5vdAorICAgIC8vIGRpcmVjdGx5IGluIHRoZSBkb2N1bWVu
dCBET00sIHNvIHNlcmlhbGl6YXRpb24gaXMgcHJvYmxlbWF0aWMuIE91ciBzb2x1dGlvbiBpcwor
ICAgIC8vIHRvIHVzZSB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50IG9mIHRoZSBzZWxlY3Rpb24g
c3RhcnQgYXMgdGhlIHBvc2l0aW9uYWwgYmFzZS4KKyAgICAvLyBUaGF0IGZpdHMgd2l0aCBBcHBL
aXQncyBpZGVhIG9mIGFuIGlucHV0IGNvbnRleHQuCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
bV9vYmplY3QtPmRvY3VtZW50KCk7CisgICAgRnJhbWVTZWxlY3Rpb24qIGZyYW1lU2VsZWN0aW9u
ID0gZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpOworICAgIEVsZW1lbnQqIHNlbGVjdGlv
blJvb3QgPSBmcmFtZVNlbGVjdGlvbi0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIEVsZW1l
bnQqIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBkb2N1bWVudC0+ZG9j
dW1lbnRFbGVtZW50KCk7CisgICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRp
b25BbmRMZW5ndGgoc2NvcGUsIG5zcmFuZ2UubG9jYXRpb24sIG5zcmFuZ2UubGVuZ3RoKTsKK30K
KworLy8gVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgdG8gdGFrZSBhIHRleHQgbWFya2VyIHJlcHJl
c2VudGluZyBhIFZpc2libGVQb3NpdGlvbiBhbmQgY29udmVydCBpdAorLy8gaW50byBhIG5vcm1h
bGl6ZWQgbG9jYXRpb24gd2l0aGluIHRoZSBkb2N1bWVudC4KKy0gKE5TSW50ZWdlcilwb3NpdGlv
bkZvclRleHRNYXJrZXI6KFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopbWFya2VyCit7Cisg
ICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJu
IE5TTm90Rm91bmQ7CisKKyAgICBpZiAoIW1hcmtlcikKKyAgICAgICAgcmV0dXJuIE5TTm90Rm91
bmQ7ICAgIAorCisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oW21hcmtlciB2aXNpYmxl
UG9zaXRpb25dKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFs
aXplZFJhbmdlKCk7CisgICAgTlNSYW5nZSBuc1JhbmdlID0gW3NlbGYgX2NvbnZlcnRUb05TUmFu
Z2U6cmFuZ2UuZ2V0KCldOworICAgIHJldHVybiBuc1JhbmdlLmxvY2F0aW9uOworfQorCistIChO
U0FycmF5ICopdGV4dE1hcmtlclJhbmdlCit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vz
c2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBWaXNpYmxlUG9z
aXRpb25SYW5nZSByYW5nZSA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZSgpOworICAg
IFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gcmFuZ2Uuc3RhcnQ7CisgICAgVmlzaWJs
ZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gcmFuZ2UuZW5kOworICAgIFdlYkFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyKiBzdGFydCA9IFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2Vy
V2l0aFZpc2libGVQb3NpdGlvbjpzdGFydFBvc2l0aW9uIGNhY2hlOm1fb2JqZWN0LT5heE9iamVj
dENhY2hlKCldOworICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBlbmQgPSBbV2ViQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhWaXNpYmxlUG9zaXRpb246ZW5kUG9z
aXRpb24gY2FjaGU6bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07CisgICAgCisgICAgcmV0dXJu
IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6c3RhcnQsIGVuZCwgbmlsXTsKK30KKworLy8gQSBt
ZXRob2QgdG8gZ2V0IHRoZSBub3JtYWxpemVkIHRleHQgY3Vyc29yIHJhbmdlIG9mIGFuIGVsZW1l
bnQuIFVzZWQgaW4gRHVtcFJlbmRlclRyZWUuCistIChOU1JhbmdlKWVsZW1lbnRUZXh0UmFuZ2UK
K3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICBy
ZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisKKyAgICBOU0FycmF5ICptYXJrZXJz
ID0gW3NlbGYgdGV4dE1hcmtlclJhbmdlXTsKKyAgICBpZiAoW21hcmtlcnMgY291bnRdICE9IDIp
CisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICAKKyAgICBX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqc3RhcnRNYXJrZXIgPSBbbWFya2VycyBvYmplY3RB
dEluZGV4OjBdOworICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICplbmRNYXJrZXIgPSBb
bWFya2VycyBvYmplY3RBdEluZGV4OjFdOworICAgIAorICAgIE5TSW50ZWdlciBzdGFydFBvc2l0
aW9uID0gW3NlbGYgcG9zaXRpb25Gb3JUZXh0TWFya2VyOnN0YXJ0TWFya2VyXTsKKyAgICBOU0lu
dGVnZXIgZW5kUG9zaXRpb24gPSBbc2VsZiBwb3NpdGlvbkZvclRleHRNYXJrZXI6ZW5kTWFya2Vy
XTsKKyAgICAKKyAgICByZXR1cm4gTlNNYWtlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRp
b24gLSBzdGFydFBvc2l0aW9uKTsKK30KKworLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
KilhY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yVGV4dE1hcmtlcjooV2ViQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIgKiltYXJrZXIKK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNh
bGxdKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgaWYgKCFtYXJrZXIpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgCisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbiA9IFtt
YXJrZXIgdmlzaWJsZVBvc2l0aW9uXTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBt
X29iamVjdC0+YWNjZXNzaWJpbGl0eU9iamVjdEZvclBvc2l0aW9uKHZpc2libGVQb3NpdGlvbik7
CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgcmV0dXJuIEFj
Y2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihvYmotPndyYXBwZXIoKSk7Cit9CisKKy0gKE5T
QXJyYXkgKil0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb24KK3sKKyAgICBpZiAoIVtzZWxmIF9w
cmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9vYmplY3QtPnNlbGVjdGlvbigpOworICAg
IGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAg
VmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKKwor
ICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBzdGFydE1hcmtlciA9IFtXZWJBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjpzdGFydFBvc2l0
aW9uIGNhY2hlOm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCldOworICAgIFdlYkFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyKiBlbmRNYXJrZXIgPSBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4
dE1hcmtlcldpdGhWaXNpYmxlUG9zaXRpb246ZW5kUG9zaXRpb24gY2FjaGU6bV9vYmplY3QtPmF4
T2JqZWN0Q2FjaGUoKV07CisgICAgaWYgKCFzdGFydE1hcmtlciB8fCAhZW5kTWFya2VyKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmpl
Y3RzOnN0YXJ0TWFya2VyLCBlbmRNYXJrZXIsIG5pbF07Cit9CisKKy0gKFdlYkFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyICopdGV4dE1hcmtlckZvclBvc2l0aW9uOihOU0ludGVnZXIpcG9zaXRpb24K
K3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UgPSBbc2VsZiBfY29udmVy
dFRvRE9NUmFuZ2U6TlNNYWtlUmFuZ2UocG9zaXRpb24sIDApXTsKKyAgICBpZiAoIXJhbmdlKQor
ICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9u
ID0gVmlzaWJsZVNlbGVjdGlvbihyYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSk7CisKKyAgICBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwor
ICAgIHJldHVybiBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhWaXNp
YmxlUG9zaXRpb246dmlzaWJsZVBvc2l0aW9uIGNhY2hlOm1fb2JqZWN0LT5heE9iamVjdENhY2hl
KCldOworfQorCistIChpZClfc3RyaW5nRm9yUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgYXR0cmlidXRl
ZDooQk9PTClhdHRyaWJ1dGVkCit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxp
dHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBXZWJBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlciogc3RhcnRNYXJrZXIgPSBbc2VsZiB0ZXh0TWFya2VyRm9yUG9zaXRpb246cmFu
Z2UubG9jYXRpb25dOworICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBlbmRNYXJrZXIg
PSBbc2VsZiB0ZXh0TWFya2VyRm9yUG9zaXRpb246TlNNYXhSYW5nZShyYW5nZSldOworICAgIAor
ICAgIC8vIENsaWVudHMgZG9uJ3QgYWx3YXlzIGtub3cgdGhlIGV4YWN0IHJhbmdlLCByYXRoZXIg
dGhhbiBmb3JjZSB0aGVtIHRvIGNvbXB1dGUgaXQsCisgICAgLy8gYWxsb3cgY2xpZW50cyB0byBv
dmVyc2hvb3QgYW5kIHVzZSB0aGUgbWF4IHRleHQgbWFya2VyIHJhbmdlLgorICAgIGlmICghc3Rh
cnRNYXJrZXIgfHwgIWVuZE1hcmtlcikgeworICAgICAgICBOU0FycmF5ICptYXJrZXJzID0gW3Nl
bGYgdGV4dE1hcmtlclJhbmdlXTsKKyAgICAgICAgaWYgKFttYXJrZXJzIGNvdW50XSAhPSAyKQor
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgaWYgKCFzdGFydE1hcmtlcikKKyAgICAg
ICAgICAgIHN0YXJ0TWFya2VyID0gW21hcmtlcnMgb2JqZWN0QXRJbmRleDowXTsKKyAgICAgICAg
aWYgKCFlbmRNYXJrZXIpCisgICAgICAgICAgICBlbmRNYXJrZXIgPSBbbWFya2VycyBvYmplY3RB
dEluZGV4OjFdOworICAgIH0KKyAgICAKKyAgICBOU0FycmF5KiBhcnJheSA9IFtzZWxmIGFycmF5
T2ZUZXh0Rm9yVGV4dE1hcmtlcnM6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpzdGFydE1hcmtl
ciwgZW5kTWFya2VyLCBuaWxdIGF0dHJpYnV0ZWQ6YXR0cmlidXRlZF07CisgICAgQ2xhc3MgcmV0
dXJuQ2xhc3MgPSBhdHRyaWJ1dGVkID8gW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgY2xhc3Nd
IDogW05TTXV0YWJsZVN0cmluZyBjbGFzc107CisgICAgaWQgcmV0dXJuVmFsdWUgPSBbW1tyZXR1
cm5DbGFzcyBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgIAorICAgIE5TSW50ZWdlciBj
b3VudCA9IFthcnJheSBjb3VudF07CisgICAgZm9yIChOU0ludGVnZXIgayA9IDA7IGsgPCBjb3Vu
dDsgKytrKSB7CisgICAgICAgIGlkIG9iamVjdCA9IFthcnJheSBvYmplY3RBdEluZGV4OmtdOwor
CisgICAgICAgIGlmICghW29iamVjdCBpc0tpbmRPZkNsYXNzOnJldHVybkNsYXNzXSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKGF0dHJpYnV0ZWQpCisgICAg
ICAgICAgICBbKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKilyZXR1cm5WYWx1ZSBhcHBlbmRB
dHRyaWJ1dGVkU3RyaW5nOm9iamVjdF07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFsoTlNN
dXRhYmxlU3RyaW5nICopcmV0dXJuVmFsdWUgYXBwZW5kU3RyaW5nOm9iamVjdF07CisgICAgfQor
ICAgIHJldHVybiByZXR1cm5WYWx1ZTsKK30KKworCisvLyBBIGNvbnZlbmllbmNlIG1ldGhvZCBm
b3IgZ2V0dGluZyB0aGUgdGV4dCBvZiBhIE5TUmFuZ2UuIEN1cnJlbnRseSB1c2VkIG9ubHkgYnkg
RFJULgorLSAoTlNTdHJpbmcgKilzdHJpbmdGb3JSYW5nZTooTlNSYW5nZSlyYW5nZQoreworICAg
IHJldHVybiBbc2VsZiBfc3RyaW5nRm9yUmFuZ2U6cmFuZ2UgYXR0cmlidXRlZDpOT107Cit9CisK
Ky0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZTooTlNSYW5n
ZSlyYW5nZQoreworICAgIHJldHVybiBbc2VsZiBfc3RyaW5nRm9yUmFuZ2U6cmFuZ2UgYXR0cmli
dXRlZDpZRVNdOworfQorCisvLyBBIGNvbnZlbmllbmNlIG1ldGhvZCBmb3IgZ2V0dGluZyB0aGUg
YWNjZXNzaWJpbGl0eSBvYmplY3RzIG9mIGEgTlNSYW5nZS4gQ3VycmVudGx5IHVzZWQgb25seSBi
eSBEUlQuCistIChOU0FycmF5ICopZWxlbWVudHNGb3JSYW5nZTooTlNSYW5nZSlyYW5nZQorewor
ICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgCisgICAgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIHN0YXJ0TWFya2Vy
ID0gW3NlbGYgdGV4dE1hcmtlckZvclBvc2l0aW9uOnJhbmdlLmxvY2F0aW9uXTsKKyAgICBXZWJB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogZW5kTWFya2VyID0gW3NlbGYgdGV4dE1hcmtlckZvclBv
c2l0aW9uOk5TTWF4UmFuZ2UocmFuZ2UpXTsKKyAgICBpZiAoIXN0YXJ0TWFya2VyIHx8ICFlbmRN
YXJrZXIpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgTlNBcnJheSogYXJyYXkgPSBb
c2VsZiBhcnJheU9mVGV4dEZvclRleHRNYXJrZXJzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6
c3RhcnRNYXJrZXIsIGVuZE1hcmtlciwgbmlsXSBhdHRyaWJ1dGVkOk5PXTsKKyAgICBOU011dGFi
bGVBcnJheSogZWxlbWVudHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAgIGZvciAoaWQg
ZWxlbWVudCBpbiBhcnJheSkgeworICAgICAgICBpZiAoIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6
W0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNsYXNzXV0pCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgW2VsZW1lbnRzIGFkZE9iamVjdDplbGVtZW50XTsKKyAgICB9CisgICAgcmV0
dXJuIGVsZW1lbnRzOworfQorCistIChOU1N0cmluZyAqKXNlbGVjdGlvblJhbmdlU3RyaW5nCit7
CisgICAgTlNBcnJheSAqbWFya2VycyA9IFtzZWxmIHRleHRNYXJrZXJSYW5nZUZvclNlbGVjdGlv
bl07CisgICAgcmV0dXJuIFtzZWxmIHN0cmluZ0ZvclRleHRNYXJrZXJzOm1hcmtlcnNdOworfQor
CistIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXNlbGVjdGVkVGV4dE1hcmtlcgorewor
ICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgCisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX29iamVjdC0+
c2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gc2VsZWN0aW9uLnZp
c2libGVTdGFydCgpOworICAgIAorICAgIC8vIGlmIHRoZXJlJ3Mgbm8gc2VsZWN0aW9uLCBzdGFy
dCBhdCB0aGUgdG9wIG9mIHRoZSBkb2N1bWVudAorICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkK
KyAgICAgICAgcG9zaXRpb24gPSBzdGFydE9mRG9jdW1lbnQobV9vYmplY3QtPmRvY3VtZW50KCkp
OworICAgIAorICAgIHJldHVybiBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtl
cldpdGhWaXNpYmxlUG9zaXRpb246cG9zaXRpb24gY2FjaGU6bV9vYmplY3QtPmF4T2JqZWN0Q2Fj
aGUoKV07Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHRvIHJldHVybiB0aGUgbWFy
a2VyIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgc3RhcnRpbmcgYXQKKy8vIHRoZSBtYXJrZXIgdGhh
dCBpcyBwYXNzZWQgaW50byB0aGUgbWV0aG9kLgorLSAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXIgKilsaW5lRW5kTWFya2VyRm9yTWFya2VyOihXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAq
KW1hcmtlcgoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoIW1hcmtlcikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICAKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBbbWFya2VyIHZpc2libGVQb3Np
dGlvbl07CisgICAgVmlzaWJsZVBvc2l0aW9uIGxpbmVFbmQgPSBtX29iamVjdC0+bmV4dExpbmVF
bmRQb3NpdGlvbihzdGFydCk7CisgICAgCisgICAgcmV0dXJuIFtXZWJBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjpsaW5lRW5kIGNhY2hlOm1fb2Jq
ZWN0LT5heE9iamVjdENhY2hlKCldOworfQorCisvLyBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCB0
byByZXR1cm4gdGhlIG1hcmtlciBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgc3RhcnRpbmcgYXQK
Ky8vIHRoZSBtYXJrZXIgdGhhdCBpcyBwYXNzZWQgaW50byB0aGUgbWV0aG9kLgorLSAoV2ViQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIgKilsaW5lU3RhcnRNYXJrZXJGb3JNYXJrZXI6KFdlYkFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyICopbWFya2VyCit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFj
Y2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmICghbWFya2Vy
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9
IFttYXJrZXIgdmlzaWJsZVBvc2l0aW9uXTsKKyAgICBWaXNpYmxlUG9zaXRpb24gbGluZVN0YXJ0
ID0gbV9vYmplY3QtPnByZXZpb3VzTGluZVN0YXJ0UG9zaXRpb24oc3RhcnQpOworICAgIAorICAg
IHJldHVybiBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhWaXNpYmxl
UG9zaXRpb246bGluZVN0YXJ0IGNhY2hlOm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCldOworfQor
CistIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKW5leHRNYXJrZXJGb3JNYXJrZXI6KFdl
YkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopbWFya2VyCit7CisgICAgaWYgKCFbc2VsZiBfcHJl
cGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmICgh
bWFya2VyKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIFZpc2libGVQb3NpdGlvbiBz
dGFydCA9IFttYXJrZXIgdmlzaWJsZVBvc2l0aW9uXTsKKyAgICBWaXNpYmxlUG9zaXRpb24gbmV4
dE1hcmtlciA9IG1fb2JqZWN0LT5uZXh0VmlzaWJsZVBvc2l0aW9uKHN0YXJ0KTsKKyAgICAKKyAg
ICByZXR1cm4gW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoVmlzaWJs
ZVBvc2l0aW9uOm5leHRNYXJrZXIgY2FjaGU6bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07Cit9
CisKKy8vIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHRvIHJldHVybiB0aGUgbWFya2VyIGF0IHRo
ZSBzdGFydCBvZiB0aGUgbGluZSBzdGFydGluZyBhdAorLy8gdGhlIG1hcmtlciB0aGF0IGlzIHBh
c3NlZCBpbnRvIHRoZSBtZXRob2QuCistIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXBy
ZXZpb3VzTWFya2VyRm9yTWFya2VyOihXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKW1hcmtl
cgoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBpZiAoIW1hcmtlcikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICAKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBbbWFya2VyIHZpc2libGVQb3NpdGlvbl07
CisgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzTWFya2VyID0gbV9vYmplY3QtPnByZXZpb3Vz
VmlzaWJsZVBvc2l0aW9uKHN0YXJ0KTsKKyAgICAKKyAgICByZXR1cm4gW1dlYkFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOnByZXZpb3VzTWFya2Vy
IGNhY2hlOm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCldOworfQorCisvLyBUaGlzIG1ldGhvZCBp
cyBpbnRlbmRlZCB0byByZXR1cm4gdGhlIGJvdW5kcyBvZiBhIHRleHQgbWFya2VyIHJhbmdlIGlu
IHNjcmVlbiBjb29yZGluYXRlcy4KKy0gKENHUmVjdClmcmFtZUZvclRleHRNYXJrZXJzOihOU0Fy
cmF5ICopYXJyYXkKK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxd
KQorICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKKworICAgIGlmIChbYXJyYXkgY291bnRdICE9
IDIpCisgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOworICAgIAorICAgIFdlYkFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyKiBzdGFydE1hcmtlciA9IFthcnJheSBvYmplY3RBdEluZGV4OjBdOworICAg
IFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBlbmRNYXJrZXIgPSBbYXJyYXkgb2JqZWN0QXRJ
bmRleDoxXTsKKyAgICBpZiAoIVtzdGFydE1hcmtlciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciBjbGFzc11dIHx8ICFbZW5kTWFya2VyIGlzS2luZE9mQ2xhc3M6W1dl
YkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIGNsYXNzXV0pCisgICAgICAgIHJldHVybiBDR1JlY3Ra
ZXJvOworCisgICAgSW50UmVjdCByZWN0ID0gbV9vYmplY3QtPmJvdW5kc0ZvclZpc2libGVQb3Np
dGlvblJhbmdlKFZpc2libGVQb3NpdGlvblJhbmdlKFtzdGFydE1hcmtlciB2aXNpYmxlUG9zaXRp
b25dLCBbZW5kTWFya2VyIHZpc2libGVQb3NpdGlvbl0pKTsKKyAgICByZXR1cm4gW3NlbGYgX2Nv
bnZlcnRJbnRSZWN0VG9TY3JlZW5Db29yZGluYXRlczpyZWN0XTsKK30KKworLSAoV2ViQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIgKil0ZXh0TWFya2VyRm9yUG9pbnQ6KENHUG9pbnQpcG9pbnQKK3sK
KyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIAorICAgIFZpc2libGVQb3NpdGlvbiBwb3MgPSBtX29iamVjdC0+dmlzaWJs
ZVBvc2l0aW9uRm9yUG9pbnQoSW50UG9pbnQocG9pbnQpKTsKKyAgICByZXR1cm4gW1dlYkFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOnBvcyBjYWNo
ZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKK30KKworLSAoTlNTdHJpbmcgKilhY2Nlc3Np
YmlsaXR5SWRlbnRpZmllcgoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5
Q2FsbF0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgcmV0dXJuIG1fb2JqZWN0LT5n
ZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpOworfQorCistIChOU1N0cmluZyAqKWFjY2Vz
c2liaWxpdHlTcGVlY2hIaW50Cit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxp
dHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHN3aXRjaCAobV9vYmplY3QtPnNw
ZWFrUHJvcGVydHkoKSkgeworICAgIGRlZmF1bHQ6CisgICAgY2FzZSBTcGVha05vcm1hbDoKKyAg
ICAgICAgcmV0dXJuIEAibm9ybWFsIjsKKyAgICBjYXNlIFNwZWFrTm9uZToKKyAgICAgICAgcmV0
dXJuIEAibm9uZSI7CisgICAgY2FzZSBTcGVha1NwZWxsT3V0OgorICAgICAgICByZXR1cm4gQCJz
cGVsbC1vdXQiOworICAgIGNhc2UgU3BlYWtEaWdpdHM6CisgICAgICAgIHJldHVybiBAImRpZ2l0
cyI7CisgICAgY2FzZSBTcGVha0xpdGVyYWxQdW5jdHVhdGlvbjoKKyAgICAgICAgcmV0dXJuIEAi
bGl0ZXJhbC1wdW5jdHVhdGlvbiI7CisgICAgY2FzZSBTcGVha05vUHVuY3R1YXRpb246CisgICAg
ICAgIHJldHVybiBAIm5vLXB1bmN0dWF0aW9uIjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG5p
bDsKK30KKworLSAoQk9PTClhY2Nlc3NpYmlsaXR5QVJJQUlzQnVzeQoreworICAgIGlmICghW3Nl
bGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICByZXR1cm4gbV9vYmplY3QtPmFyaWFMaXZlUmVnaW9uQnVzeSgpOworfQorCistIChOU1N0cmlu
ZyAqKWFjY2Vzc2liaWxpdHlBUklBTGl2ZVJlZ2lvblN0YXR1cworeworICAgIGlmICghW3NlbGYg
X3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBy
ZXR1cm4gbV9vYmplY3QtPmFyaWFMaXZlUmVnaW9uU3RhdHVzKCk7Cit9CisKKy0gKE5TU3RyaW5n
ICopYWNjZXNzaWJpbGl0eUFSSUFSZWxldmFudFN0YXR1cworeworICAgIGlmICghW3NlbGYgX3By
ZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAg
cmV0dXJuIG1fb2JqZWN0LT5hcmlhTGl2ZVJlZ2lvblJlbGV2YW50KCk7Cit9CisKKy0gKEJPT0wp
YWNjZXNzaWJpbGl0eUFSSUFMaXZlUmVnaW9uSXNBdG9taWMKK3sKKyAgICBpZiAoIVtzZWxmIF9w
cmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAg
IHJldHVybiBtX29iamVjdC0+YXJpYUxpdmVSZWdpb25BdG9taWMoKTsKK30KKworLSAoTlNTdHJp
bmcgKilhY2Nlc3NpYmlsaXR5SW52YWxpZFN0YXR1cworeworICAgIGlmICghW3NlbGYgX3ByZXBh
cmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgcmV0
dXJuIG1fb2JqZWN0LT5pbnZhbGlkU3RhdHVzKCk7Cit9CisKKy0gKFdlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyICopYWNjZXNzaWJpbGl0eU1hdGhSb290SW5kZXhPYmplY3QKK3sKKyAgICBy
ZXR1cm4gbV9vYmplY3QtPm1hdGhSb290SW5kZXhPYmplY3QoKSA/IG1fb2JqZWN0LT5tYXRoUm9v
dEluZGV4T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7Cit9CisKKy0gKFdlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyICopYWNjZXNzaWJpbGl0eU1hdGhSYWRpY2FuZE9iamVjdAoreworICAgIHJl
dHVybiBtX29iamVjdC0+bWF0aFJhZGljYW5kT2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aFJhZGlj
YW5kT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7Cit9CisKKy0gKFdlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyICopYWNjZXNzaWJpbGl0eU1hdGhOdW1lcmF0b3JPYmplY3QKK3sKKyAgICByZXR1
cm4gbV9vYmplY3QtPm1hdGhOdW1lcmF0b3JPYmplY3QoKSA/IG1fb2JqZWN0LT5tYXRoTnVtZXJh
dG9yT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7Cit9CisKKy0gKFdlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyICopYWNjZXNzaWJpbGl0eU1hdGhEZW5vbWluYXRvck9iamVjdAoreworICAgIHJl
dHVybiBtX29iamVjdC0+bWF0aERlbm9taW5hdG9yT2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aERl
bm9taW5hdG9yT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7Cit9CisKKy0gKFdlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyICopYWNjZXNzaWJpbGl0eU1hdGhCYXNlT2JqZWN0Cit7CisgICAgcmV0
dXJuIG1fb2JqZWN0LT5tYXRoQmFzZU9iamVjdCgpID8gbV9vYmplY3QtPm1hdGhCYXNlT2JqZWN0
KCktPndyYXBwZXIoKSA6IDA7Cit9CisKKy0gKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
ICopYWNjZXNzaWJpbGl0eU1hdGhTdWJzY3JpcHRPYmplY3QKK3sKKyAgICByZXR1cm4gbV9vYmpl
Y3QtPm1hdGhTdWJzY3JpcHRPYmplY3QoKSA/IG1fb2JqZWN0LT5tYXRoU3Vic2NyaXB0T2JqZWN0
KCktPndyYXBwZXIoKSA6IDA7Cit9CisKKy0gKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
ICopYWNjZXNzaWJpbGl0eU1hdGhTdXBlcnNjcmlwdE9iamVjdAoreworICAgIHJldHVybiBtX29i
amVjdC0+bWF0aFN1cGVyc2NyaXB0T2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aFN1cGVyc2NyaXB0
T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7Cit9CisKKy0gKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyICopYWNjZXNzaWJpbGl0eU1hdGhVbmRlck9iamVjdAoreworICAgIHJldHVybiBtX29i
amVjdC0+bWF0aFVuZGVyT2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aFVuZGVyT2JqZWN0KCktPndy
YXBwZXIoKSA6IDA7Cit9CisKKy0gKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyICopYWNj
ZXNzaWJpbGl0eU1hdGhPdmVyT2JqZWN0Cit7CisgICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoT3Zl
ck9iamVjdCgpID8gbV9vYmplY3QtPm1hdGhPdmVyT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7Cit9
CisKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRPcGVuU3RyaW5nCit7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoRmVuY2VkT3BlblN0cmluZygpOworfQorCistIChOU1N0
cmluZyAqKWFjY2Vzc2liaWxpdHlNYXRoRmVuY2VkQ2xvc2VTdHJpbmcKK3sKKyAgICByZXR1cm4g
bV9vYmplY3QtPm1hdGhGZW5jZWRDbG9zZVN0cmluZygpOworfQorCistIChCT09MKWFjY2Vzc2li
aWxpdHlJc01hdGhUb3BPYmplY3QKK3sKKyAgICByZXR1cm4gbV9vYmplY3QtPnJvbGVWYWx1ZSgp
ID09IERvY3VtZW50TWF0aFJvbGU7Cit9CisKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eU1h
dGhUeXBlCit7CisgICAgaWYgKG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBNYXRoRWxlbWVudFJv
bGUpIHsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhGcmFjdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIEAiQVhNYXRoRnJhY3Rpb24iOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0
aEZlbmNlZCgpKQorICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoRmVuY2VkIjsKKyAgICAgICAg
aWYgKG1fb2JqZWN0LT5pc01hdGhTdWJzY3JpcHRTdXBlcnNjcmlwdCgpKQorICAgICAgICAgICAg
cmV0dXJuIEAiQVhNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQiOworICAgICAgICBpZiAobV9vYmpl
Y3QtPmlzTWF0aFJvdygpKQorICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoUm93IjsKKyAgICAg
ICAgaWYgKG1fb2JqZWN0LT5pc01hdGhVbmRlck92ZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBA
IkFYTWF0aFVuZGVyT3ZlciI7CisgICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoU3F1YXJlUm9v
dCgpKQorICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoU3F1YXJlUm9vdCI7CisgICAgICAgIGlm
IChtX29iamVjdC0+aXNNYXRoUm9vdCgpKQorICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoUm9v
dCI7CisgICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoVGV4dCgpKQorICAgICAgICAgICAgcmV0
dXJuIEAiQVhNYXRoVGV4dCI7CisgICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoTnVtYmVyKCkp
CisgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhOdW1iZXIiOworICAgICAgICBpZiAobV9vYmpl
Y3QtPmlzTWF0aElkZW50aWZpZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aElkZW50
aWZpZXIiOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFRhYmxlKCkpCisgICAgICAgICAg
ICByZXR1cm4gQCJBWE1hdGhUYWJsZSI7CisgICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoVGFi
bGVSb3coKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFRhYmxlUm93IjsKKyAgICAgICAg
aWYgKG1fb2JqZWN0LT5pc01hdGhUYWJsZUNlbGwoKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFY
TWF0aFRhYmxlQ2VsbCI7CisgICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoRmVuY2VPcGVyYXRv
cigpKQorICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoRmVuY2VPcGVyYXRvciI7CisgICAgICAg
IGlmIChtX29iamVjdC0+aXNNYXRoU2VwYXJhdG9yT3BlcmF0b3IoKSkKKyAgICAgICAgICAgIHJl
dHVybiBAIkFYTWF0aFNlcGFyYXRvck9wZXJhdG9yIjsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5p
c01hdGhPcGVyYXRvcigpKQorICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoT3BlcmF0b3IiOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gbmlsOworfQorCisvLyBUaGVzZSBhcmUgdXNlZCBieSBE
UlQgc28gdGhhdCBpdCBjYW4ga25vdyB3aGVuIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQuCisvLyBT
aW5jZSB0aGV5IGFyZSBzdGF0aWMsIG9ubHkgb25lIGNhbGxiYWNrIGNhbiBiZSBpbnN0YWxsZWQg
YXQgYSB0aW1lICh0aGF0J3MgYWxsIERSVCBzaG91bGQgbmVlZCkuCit0eXBlZGVmIHZvaWQgKCpB
WFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiYWNrKShpZCBlbGVtZW50LCBOU1N0cmluZyogbm90aWZp
Y2F0aW9uLCB2b2lkKiBjb250ZXh0KTsKK3N0YXRpYyBBWFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxi
YWNrIEFYTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSAwOworc3RhdGljIHZvaWQqIEFYUG9zdGVkTm90
aWZpY2F0aW9uQ29udGV4dCA9IDA7CisKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eVNldFBvc3RlZE5v
dGlmaWNhdGlvbkNhbGxiYWNrOihBWFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiYWNrKWZ1bmN0aW9u
IHdpdGhDb250ZXh0Oih2b2lkKiljb250ZXh0Cit7CisgICAgQVhOb3RpZmljYXRpb25DYWxsYmFj
ayA9IGZ1bmN0aW9uOworICAgIEFYUG9zdGVkTm90aWZpY2F0aW9uQ29udGV4dCA9IGNvbnRleHQ7
Cit9CisKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eVBvc3RlZE5vdGlmaWNhdGlvbjooV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6QVhOb3RpZmljYXRpb24pbm90aWZpY2F0aW9uVHlwZQoreworICAgIGlm
IChBWE5vdGlmaWNhdGlvbkNhbGxiYWNrKSB7CisgICAgICAgIE5TU3RyaW5nICpub3RpZmljYXRp
b25TdHJpbmcgPSBuaWw7CisgICAgICAgIAorICAgICAgICAvLyBQYXNzIGEgc3RyaW5nIGJhY2sg
dG8gRFJUIHdoaWNoIGlzIGVhc2llciB0byBtYXRjaCB0aGFuIGFuIGVudW0gdHlwZS4KKyAgICAg
ICAgc3dpdGNoIChub3RpZmljYXRpb25UeXBlKSB7CisgICAgICAgICAgICBjYXNlIFdlYkNvcmU6
OkFYT2JqZWN0Q2FjaGU6OkFYQWN0aXZlRGVzY2VuZGFudENoYW5nZWQ6CisgICAgICAgICAgICBj
YXNlIFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OkFYRm9jdXNlZFVJRWxlbWVudENoYW5nZWQ6Cisg
ICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uU3RyaW5nID0gQCJBWEZvY3VzQ2hhbmdlZCI7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobm90aWZpY2F0aW9u
U3RyaW5nKQorICAgICAgICAgICAgQVhOb3RpZmljYXRpb25DYWxsYmFjayhzZWxmLCBub3RpZmlj
YXRpb25TdHJpbmcsIEFYUG9zdGVkTm90aWZpY2F0aW9uQ29udGV4dCk7CisgICAgfQorfQorCisj
aWZuZGVmIE5ERUJVRworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbgoreworICAgIENHUmVjdCBm
cmFtZSA9IFtzZWxmIGFjY2Vzc2liaWxpdHlGcmFtZV07CisgICAgcmV0dXJuIFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiUm9sZTogKCVkKSAtIFRleHQ6ICVAOiBWYWx1ZTogJUAgLS0gRnJh
bWU6ICVmICVmICVmICVmIiwgbV9vYmplY3QgPyBtX29iamVjdC0+cm9sZVZhbHVlKCkgOiAwLCBb
c2VsZiBhY2Nlc3NpYmlsaXR5TGFiZWxdLCBbc2VsZiBhY2Nlc3NpYmlsaXR5VmFsdWVdLCBmcmFt
ZS5vcmlnaW4ueCwgZnJhbWUub3JpZ2luLnksIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUu
aGVpZ2h0XTsKK30KKyNlbmRpZgorCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0
Q2FjaGVJT1MubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJBWE9iamVjdENhY2hlLmgiCisK
KyNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpICYmIFBMQVRGT1JNKElPUykKKworI2ltcG9ydCAiQWNj
ZXNzaWJpbGl0eU9iamVjdC5oIgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJ
T1MuaCIKKyNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgorCisjaW1wb3J0IDx3dGYvUGFzc1JlZlB0
ci5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgCit2b2lkIEFYT2JqZWN0Q2FjaGU6OmRldGFjaFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVj
dCogb2JqKQoreworICAgIFtvYmotPndyYXBwZXIoKSBkZXRhY2hdOworICAgIG9iai0+c2V0V3Jh
cHBlcigwKTsKK30KKwordm9pZCBBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKEFjY2Vzc2li
aWxpdHlPYmplY3QqIG9iaikKK3sKKyAgICBSZXRhaW5QdHI8QWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXI+IHdyYXBwZXIoQWRvcHROUywgW1tBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhbGxv
Y10gaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0Om9ial0pOworICAgIG9iai0+c2V0V3JhcHBl
cih3cmFwcGVyLmdldCgpKTsKK30KKwordm9pZCBBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZvcm1O
b3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqLCBBWE5vdGlmaWNhdGlvbiBub3Rp
ZmljYXRpb24pCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRj
aCAobm90aWZpY2F0aW9uKSB7CisgICAgICAgIGNhc2UgQVhBY3RpdmVEZXNjZW5kYW50Q2hhbmdl
ZDoKKyAgICAgICAgY2FzZSBBWEZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkOgorICAgICAgICAgICAg
W29iai0+d3JhcHBlcigpIHBvc3RGb2N1c0NoYW5nZU5vdGlmaWNhdGlvbl07CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBWFNlbGVjdGVkVGV4dENoYW5nZWQ6CisgICAgICAgICAg
ICBbb2JqLT53cmFwcGVyKCkgcG9zdFNlbGVjdGVkVGV4dENoYW5nZU5vdGlmaWNhdGlvbl07Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBWExheW91dENvbXBsZXRlOgorICAgICAg
ICAgICAgW29iai0+d3JhcHBlcigpIHBvc3RMYXlvdXRDaGFuZ2VOb3RpZmljYXRpb25dOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVhMaXZlUmVnaW9uQ2hhbmdlZDoKKyAgICAg
ICAgICAgIFtvYmotPndyYXBwZXIoKSBwb3N0TGl2ZVJlZ2lvbkNoYW5nZU5vdGlmaWNhdGlvbl07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBWENoaWxkcmVuQ2hhbmdlZDoKKyAg
ICAgICAgICAgIFtvYmotPndyYXBwZXIoKSBwb3N0Q2hpbGRyZW5DaGFuZ2VkTm90aWZpY2F0aW9u
XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFYTG9hZENvbXBsZXRlOgorICAg
ICAgICAgICAgW29iai0+d3JhcHBlcigpIHBvc3RMb2FkQ29tcGxldGVOb3RpZmljYXRpb25dOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVhJbnZhbGlkU3RhdHVzQ2hhbmdlZDoK
KyAgICAgICAgICAgIFtvYmotPndyYXBwZXIoKSBwb3N0SW52YWxpZFN0YXR1c0NoYW5nZWROb3Rp
ZmljYXRpb25dOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVhTZWxlY3RlZENo
aWxkcmVuQ2hhbmdlZDoKKyAgICAgICAgY2FzZSBBWFZhbHVlQ2hhbmdlZDoKKyAgICAgICAgY2Fz
ZSBBWENoZWNrZWRTdGF0ZUNoYW5nZWQ6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgCisgICAgLy8gVXNlZCBieSBEUlQgdG8ga25vdyB3aGVuIG5vdGlm
aWNhdGlvbnMgYXJlIHBvc3RlZC4KKyAgICBbb2JqLT53cmFwcGVyKCkgYWNjZXNzaWJpbGl0eVBv
c3RlZE5vdGlmaWNhdGlvbjpub3RpZmljYXRpb25dOworfQorCit2b2lkIEFYT2JqZWN0Q2FjaGU6
Om5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCos
IEFYVGV4dENoYW5nZSwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYpCit7Cit9CisKK3ZvaWQgQVhP
YmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5nRXZlbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3Np
YmlsaXR5T2JqZWN0KiwgQVhMb2FkaW5nRXZlbnQpCit7Cit9CisKK3ZvaWQgQVhPYmplY3RDYWNo
ZTo6aGFuZGxlRm9jdXNlZFVJRWxlbWVudENoYW5nZWQoTm9kZSosIE5vZGUqIG5ld05vZGUpCit7
CisgICAgcG9zdE5vdGlmaWNhdGlvbihuZXdOb2RlLCBBWEZvY3VzZWRVSUVsZW1lbnRDaGFuZ2Vk
LCB0cnVlLCBQb3N0QXN5bmNocm9ub3VzbHkpOworfQorCit2b2lkIEFYT2JqZWN0Q2FjaGU6Omhh
bmRsZVNjcm9sbGVkVG9BbmNob3IoY29uc3QgTm9kZSopCit7Cit9CisgICAgCit9CisKKyNlbmRp
ZiAvLyBIQVZFKEFDQ0VTU0lCSUxJVFkpCg==
</data>
<flag name="review"
          id="209002"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
          </attachment>
      

    </bug>

</bugzilla>