<?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>100175</bug_id>
          
          <creation_ts>2012-10-23 18:03:00 -0700</creation_ts>
          <short_desc>[V8] AbstractWeakReferenceMap is unnecessarily general and complex</short_desc>
          <delta_ts>2012-10-24 20:07:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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>
          <dependson>100208</dependson>
    
    <dependson>100295</dependson>
          <blocked>100313</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>749178</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-23 18:03:00 -0700</bug_when>
    <thetext>[V8] DOMWrapperMaps are insanity in a bottle</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749180</commentid>
    <comment_count>1</comment_count>
      <attachid>170280</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-23 18:03:12 -0700</bug_when>
    <thetext>Created attachment 170280
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749182</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-23 18:03:30 -0700</bug_when>
    <thetext>Still working on compile and integration with V8GCController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749979</commentid>
    <comment_count>3</comment_count>
      <attachid>170460</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-24 13:28:35 -0700</bug_when>
    <thetext>Created attachment 170460
Almost works</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750001</commentid>
    <comment_count>4</comment_count>
      <attachid>170464</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-24 13:47:05 -0700</bug_when>
    <thetext>Created attachment 170464
Might actually work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750054</commentid>
    <comment_count>5</comment_count>
      <attachid>170473</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-24 14:37:12 -0700</bug_when>
    <thetext>Created attachment 170473
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750059</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-24 14:40:02 -0700</bug_when>
    <thetext>Attachment 170473 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/bindings/v8/V8DOMMap.h:45:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750069</commentid>
    <comment_count>7</comment_count>
      <attachid>170473</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-24 14:50:00 -0700</bug_when>
    <thetext>Comment on attachment 170473
Patch

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

Despite the epic ChangeLog, this change doesn&apos;t seem that complicated.

&gt; Source/WebCore/bindings/v8/V8DOMMap.h:61
&gt; +    DOMWrapperMap&lt;Node&gt;&amp; getDOMNodeMap(v8::Isolate* = 0);
&gt; +    DOMWrapperMap&lt;Node&gt;&amp; getActiveDOMNodeMap(v8::Isolate* = 0);

Can these just require an Isolate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750093</commentid>
    <comment_count>8</comment_count>
      <attachid>170473</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-24 15:06:50 -0700</bug_when>
    <thetext>Comment on attachment 170473
Patch

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

This looks great.  Please do the event insanity in a separate patch, and CC inferno.

&gt; Source/WebCore/bindings/v8/DOMWrapperMap.h:113
&gt; +        ASSERT(it-&gt;value == wrapper);

Release will fail if this isn&apos;t ASSERT_UNUSED.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750128</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-24 15:34:46 -0700</bug_when>
    <thetext>&gt; This looks great.  Please do the event insanity in a separate patch, and CC inferno.

Thanks.  The worker part of the patch is now in bug 100295.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750141</commentid>
    <comment_count>10</comment_count>
      <attachid>170493</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-24 15:46:32 -0700</bug_when>
    <thetext>Created attachment 170493
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750142</commentid>
    <comment_count>11</comment_count>
      <attachid>170493</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-24 15:46:55 -0700</bug_when>
    <thetext>Comment on attachment 170493
Patch for landing

Needs to wait for the dependent patch to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750195</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-24 16:33:52 -0700</bug_when>
    <thetext>Attachment 170493 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/bindings/v8/V8DOMMap.h:45:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750324</commentid>
    <comment_count>13</comment_count>
      <attachid>170493</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-24 20:07:46 -0700</bug_when>
    <thetext>Comment on attachment 170493
Patch for landing

Clearing flags on attachment: 170493

Committed r132441: &lt;http://trac.webkit.org/changeset/132441&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750325</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-24 20:07:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170280</attachid>
            <date>2012-10-23 18:03:12 -0700</date>
            <delta_ts>2012-10-24 13:28:33 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-100175-20121023180148.patch</filename>
            <type>text/plain</type>
            <size>47235</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDEzZDUwZDllMTYyNTVj
MDNjMjY5NDE5YmRkNDc4ODI1N2IwZjY4NS4uYTM3MGUzYTE0NTg4ZTM1MzAzN2UxZDBkNzU0M2U3
OTUzZWE1YmM4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDgzIEBACiAyMDEyLTEwLTIzICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKKyAgICAgICAgW1Y4XSBET01XcmFwcGVyTWFw
cyBhcmUgaW5zYW5pdHkgaW4gYSBib3R0bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMDE3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5nZSBz
dWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2Ny
aXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgor
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGEu
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGEuaDoKKyAgICAgICAgKERPTURhdGEp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHA6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmg6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6
OmRvbU5vZGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjphY3RpdmVEb21O
b2RlTWFwKToKKyAgICAgICAgKERPTURhdGFTdG9yZSk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
RE9NV3JhcHBlck1hcC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRE9N
V3JhcHBlclZpc2l0b3IpOgorICAgICAgICAoRE9NV3JhcHBlck1hcCk6CisgICAgICAgIChET01X
cmFwcGVySGFzaE1hcCk6CisgICAgICAgIChXZWJDb3JlOjpET01XcmFwcGVySGFzaE1hcDo6RE9N
V3JhcHBlckhhc2hNYXApOgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlckhhc2hNYXA6On5E
T01XcmFwcGVySGFzaE1hcCk6CisgICAgICAgIChXZWJDb3JlOjpET01XcmFwcGVySGFzaE1hcDo6
cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJIYXNoTWFwOjp3ZWFrQ2FsbGJh
Y2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5oOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L0ludHJ1c2l2ZURPTVdyYXBwZXJNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkRPTU5vZGVXcmFwcGVyTWFwOjp+RE9NTm9kZVdyYXBwZXJNYXApOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NTm9kZVdyYXBwZXJNYXA6OndlYWtDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3Mv
djgvU2NvcGVkRE9NRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZERPTURh
dGFTdG9yZTo6U2NvcGVkRE9NRGF0YVN0b3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3Jp
cHRQcm9maWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRQcm9maWxlcjo6dmlzaXRF
eHRlcm5hbEFycmF5cyk6CisgICAgICAgICogYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3Jl
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuaDoKKyAgICAg
ICAgKFN0YXRpY0RPTURhdGFTdG9yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01NYXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RE9NTm9kZU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRBY3RpdmVET01Ob2RlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUFsbERPTU9i
amVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaXRBY3RpdmVET01Ob2Rlcyk6CisgICAgICAg
IChXZWJDb3JlOjp2aXNpdERPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaXRBY3Rp
dmVET01PYmplY3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTU1hcC5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFw
cGVyOjpnZXRDYWNoZWRXcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEdDQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEdDQ29udHJvbGxlcjo6bWFqb3JHQ0VwaWxv
Z3VlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcDoKKyAgICAgICAgKFY4
TlBUZW1wbGF0ZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpWOE5QVGVtcGxhdGVNYXA6OmdldCk6
CisgICAgICAgIChXZWJDb3JlOjpWOE5QVGVtcGxhdGVNYXA6OnNldCk6CisgICAgICAgIChXZWJD
b3JlOjpWOE5QVGVtcGxhdGVNYXA6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnN0YXRpY1RlbXBsYXRlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OndlYWtU
ZW1wbGF0ZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXRpY05QT2JqZWN0TWFwKToK
KyAgICAgICAgKFdlYkNvcmU6OndlYWtOUE9iamVjdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZVY4T2JqZWN0Rm9yTlBPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6Zm9yZ2V0
VjhPYmplY3RGb3JOUE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhXb3JrZXJDb250
ZXh0RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFdvcmtlckNvbnRleHRF
dmVudExpc3RlbmVyOjpjYWxsTGlzdGVuZXJGdW5jdGlvbik6CisgICAgICAgICogYmluZGluZ3Mv
djgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZGlzcG9zZSk6CisgICAgICAgICogYmluZGluZ3Mv
djgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Lmg6CisgICAgICAgIChXb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHkpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dyYXBwZXJUeXBlSW5mby5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjp0b05hdGl2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjp0b1dyYXBwZXJUeXBlSW5mbyk6CisKKzIwMTItMTAtMjMgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwogICAgICAgICBbVjhdIFJlbW92ZSB1bnVzZWQgZnVu
Y3Rpb24gZnJvbSBET00gd3JhcHBlciB2aXNpdG9yCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAxNjMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGU3ZDRh
Mjc4Mjg0Y2ExOTlkMzBkYjBhZjI4ZDA3NGJkNGQ0OTY3M2MuLmRlNTU1OTA1ZTZjMjZjNjgwZmJi
ZTczMDU5NTNkOTQ4ZmZkNDA2Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIyMzEsNiArMjIzMSw3
IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmgnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L0RPTVRyYW5zYWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvRE9NVHJhbnNhY3Rpb24uaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NV3Jh
cHBlck1hcC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvRGF0ZUV4dGVuc2lvbi5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9ET01EYXRhLmNwcAppbmRleCBkYTZlYTViMWFlOGE5YTRiZWY3OWQyOTFiZjBjOGM2NGY5
MGFhZmY5Li4xODY0MWVjOGRhYjllMTY3MTgzY2U3Mjk2NzZhMmIwYzM1M2VmMmUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcApAQCAtNTEsMTEgKzUxLDQgQEAgRE9NRGF0
YVN0b3JlJiBET01EYXRhOjpnZXRDdXJyZW50U3RvcmUodjg6Oklzb2xhdGUqIGlzb2xhdGUpCiAg
ICAgcmV0dXJuIGRlZmF1bHRTdG9yZTsKIH0KIAotdm9pZCBET01EYXRhOjpkZXJlZk9iamVjdChX
cmFwcGVyVHlwZUluZm8qIHR5cGUsIHZvaWQqIGRvbU9iamVjdCkKLXsKLSAgICB0eXBlLT5kZXJl
Zk9iamVjdChkb21PYmplY3QpOwotfQotCi0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5oCmluZGV4IDdkZjlkZmRiYTllMjhhZTFlZDRmNTQz
ODA1NDYwNDZlNTYwOTZkZGIuLjM1NTRmNzI2NzNhZTNiYmNjOThlZDkyNjkzMDNmYmY2NGMyNWQx
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGEuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmgKQEAgLTQ2LDYyICs0NiwxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8KICAgICBjbGFzcyBET01EYXRhIHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0YXRpYyB2b2lk
IGhhbmRsZVdlYWtPYmplY3QoRE9NRGF0YVN0b3JlOjpET01XcmFwcGVyTWFwVHlwZSwgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD4sIFQqIGRvbU9iamVjdCk7Ci0KLSAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICAgICAgc3RhdGljIHZvaWQgcmVtb3ZlT2JqZWN0c0Zyb21XcmFwcGVy
TWFwKERPTURhdGFTdG9yZSogc3RvcmUsIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDxULCB2ODo6
T2JqZWN0PiYgZG9tTWFwKTsKLQotCiAgICAgICAgIHN0YXRpYyBET01EYXRhU3RvcmUmIGdldEN1
cnJlbnRTdG9yZSh2ODo6SXNvbGF0ZSogPSAwKTsKICAgICBwcml2YXRlOgogICAgICAgICBET01E
YXRhKCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KFdyYXBwZXJUeXBlSW5mbyog
dHlwZSwgdm9pZCogZG9tT2JqZWN0KTsKLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
ICAgICAgICBjbGFzcyBXcmFwcGVyTWFwT2JqZWN0UmVtb3ZlciA6IHB1YmxpYyBXZWFrUmVmZXJl
bmNlTWFwPFQsIHY4OjpPYmplY3Q+OjpWaXNpdG9yIHsKLSAgICAgICAgcHVibGljOgotICAgICAg
ICAgICAgdmlydHVhbCB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqIHN0b3JlLCBU
KiBkb21PYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHY4T2JqZWN0KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZSA9IFY4RE9NV3Jh
cHBlcjo6ZG9tV3JhcHBlclR5cGUodjhPYmplY3QpOwotICAgICAgICAgICAgICAgIGRlcmVmT2Jq
ZWN0KHR5cGUsIGRvbU9iamVjdCk7Ci0gICAgICAgICAgICAgICAgdjhPYmplY3QuRGlzcG9zZSgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9OwogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgIHZvaWQgRE9NRGF0YTo6aGFuZGxlV2Vha09iamVjdChET01EYXRhU3RvcmU6
OkRPTVdyYXBwZXJNYXBUeXBlIG1hcFR5cGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHY4
T2JqZWN0LCBUKiBkb21PYmplY3QpCi0gICAgewotICAgICAgICBXcmFwcGVyVHlwZUluZm8qIHR5
cGUgPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHY4T2JqZWN0KTsKLSAgICAgICAgRE9N
RGF0YUxpc3QmIGxpc3QgPSBET01EYXRhU3RvcmU6OmFsbFN0b3JlcygpOwotICAgICAgICBib29s
IGZvdW5kID0gZmFsc2U7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgRE9NRGF0YVN0b3JlKiBzdG9yZSA9IGxpc3RbaV07Ci0K
LSAgICAgICAgICAgIERPTVdyYXBwZXJNYXA8VD4qIGRvbU1hcCA9IHN0YXRpY19jYXN0PERPTVdy
YXBwZXJNYXA8VD4qPihzdG9yZS0+Z2V0RE9NV3JhcHBlck1hcChtYXBUeXBlKSk7Ci0gICAgICAg
ICAgICBpZiAoZG9tTWFwLT5yZW1vdmVJZlByZXNlbnQoZG9tT2JqZWN0LCB2OE9iamVjdCkpIHsK
LSAgICAgICAgICAgICAgICBkZXJlZk9iamVjdCh0eXBlLCBkb21PYmplY3QpOwotICAgICAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vIElmIG5vdCBmb3VuZCwgaXQgbWVhbnMgbWFwIGZvciB0aGUgd3JhcHBlciBoYXMgYmVlbiBh
bHJlYWR5IGRlc3Ryb3llZCwganVzdCBkaXNwb3NlIHRoZQotICAgICAgICAvLyBoYW5kbGUgYW5k
IGRlcmVmIHRoZSBvYmplY3QgdG8gZmlnaHQgbWVtb3J5IGxlYWsuCi0gICAgICAgIGlmICghZm91
bmQpIHsKLSAgICAgICAgICAgIHY4T2JqZWN0LkRpc3Bvc2UoKTsKLSAgICAgICAgICAgIGRlcmVm
T2JqZWN0KHR5cGUsIGRvbU9iamVjdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgRE9NRGF0YTo6cmVtb3ZlT2JqZWN0c0Zyb21XcmFwcGVy
TWFwKERPTURhdGFTdG9yZSogc3RvcmUsIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDxULCB2ODo6
T2JqZWN0PiYgZG9tTWFwKQotICAgIHsKLSAgICAgICAgV3JhcHBlck1hcE9iamVjdFJlbW92ZXI8
VD4gcmVtb3ZlcjsKLSAgICAgICAgZG9tTWFwLnZpc2l0KHN0b3JlLCAmcmVtb3Zlcik7Ci0gICAg
ICAgIGRvbU1hcC5jbGVhcigpOwotICAgIH0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRE9NRGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9ET01EYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0
b3JlLmNwcAppbmRleCBkYzA4OTZjZjNiNzAyMDdmZmY3MTMxZGU3MThiMjFmYjdkOWYyMWYzLi5j
MjEyNzQ4YThiNDZjNjJlZDlhNzEyN2Y3NGRmMTkwZDRiODlkYWE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAKQEAgLTEyOCw0NCArMTI4LDQgQEAgdm9p
ZCBET01EYXRhU3RvcmU6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9y
eU9iamVjdEluZm8pIGNvbnN0CiAgICAgaW5mby5hZGRXZWFrUG9pbnRlcihtX2FjdGl2ZURvbU9i
amVjdE1hcCk7CiB9CiAKLS8vIENhbGxlZCB3aGVuIHRoZSBvYmplY3QgaXMgbmVhciBkZWF0aCAo
bm90IHJlYWNoYWJsZSBmcm9tIEpTIHJvb3RzKS4KLS8vIEl0IGlzIHRpbWUgdG8gcmVtb3ZlIHRo
ZSBlbnRyeSBmcm9tIHRoZSB0YWJsZSBhbmQgZGlzcG9zZSB0aGUgaGFuZGxlLgotdm9pZCBET01E
YXRhU3RvcmU6OndlYWtET01PYmplY3RDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+
IHY4T2JqZWN0LCB2b2lkKiBkb21PYmplY3QpCi17Ci0gICAgdjg6OkhhbmRsZVNjb3BlIHNjb3Bl
OwotICAgIEFTU0VSVCh2OE9iamVjdC0+SXNPYmplY3QoKSk7Ci0gICAgRE9NRGF0YTo6aGFuZGxl
V2Vha09iamVjdChET01EYXRhU3RvcmU6OkRPTU9iamVjdE1hcCwgdjg6OlBlcnNpc3RlbnQ8djg6
Ok9iamVjdD46OkNhc3QodjhPYmplY3QpLCBkb21PYmplY3QpOwotfQotCi12b2lkIERPTURhdGFT
dG9yZTo6d2Vha0FjdGl2ZURPTU9iamVjdENhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1
ZT4gdjhPYmplY3QsIHZvaWQqIGRvbU9iamVjdCkKLXsKLSAgICB2ODo6SGFuZGxlU2NvcGUgc2Nv
cGU7Ci0gICAgQVNTRVJUKHY4T2JqZWN0LT5Jc09iamVjdCgpKTsKLSAgICBET01EYXRhOjpoYW5k
bGVXZWFrT2JqZWN0KERPTURhdGFTdG9yZTo6QWN0aXZlRE9NT2JqZWN0TWFwLCB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0Pjo6Q2FzdCh2OE9iamVjdCksIGRvbU9iamVjdCk7Ci19Ci0KLXZvaWQg
RE9NRGF0YVN0b3JlOjp3ZWFrTm9kZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4g
dmFsdWUsIHZvaWQqIGRvbU9iamVjdCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
Ci0gICAgTm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PE5vZGUqPihkb21PYmplY3QpOwotICAgIC8v
IE5vZGUgd3JhcHBlcnMgbXVzdCBiZSBKUyBvYmplY3RzLgotICAgIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+IHY4T2JqZWN0ID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46OkNhc3QodmFs
dWUpOwotCi0gICAgRE9NRGF0YUxpc3QmIGxpc3QgPSBET01EYXRhU3RvcmU6OmFsbFN0b3Jlcygp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7ICsraSkgewotICAgICAg
ICBET01EYXRhU3RvcmUqIHN0b3JlID0gbGlzdFtpXTsKLSAgICAgICAgRE9NTm9kZU1hcHBpbmcm
IG5vZGVNYXAgPSBub2RlLT5pc0FjdGl2ZU5vZGUoKSA/IHN0b3JlLT5hY3RpdmVEb21Ob2RlTWFw
KCkgOiBzdG9yZS0+ZG9tTm9kZU1hcCgpOwotICAgICAgICBpZiAobm9kZU1hcC5yZW1vdmVJZlBy
ZXNlbnQobm9kZSwgdjhPYmplY3QpKSB7Ci0gICAgICAgICAgICBub2RlLT5kZXJlZigpOyAvLyBO
b2JvZHkgb3ZlcnJpZGVzIE5vZGU6OmRlcmVmIHNvIGl0J3Mgc2FmZQotICAgICAgICAgICAgcmV0
dXJuOyAvLyBUaGVyZSBtaWdodCBiZSBhdCBtb3N0IG9uZSB3cmFwcGVyIGZvciB0aGUgbm9kZSBp
biB3b3JsZCdzIG1hcHMKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIG5vdCBmb3VuZCwg
aXQgbWVhbnMgbWFwIGZvciB0aGUgd3JhcHBlciBoYXMgYmVlbiBhbHJlYWR5IGRlc3Ryb3llZCwg
anVzdCBkaXNwb3NlIHRoZQotICAgIC8vIGhhbmRsZSBhbmQgZGVyZWYgdGhlIG9iamVjdCB0byBm
aWdodCBtZW1vcnkgbGVhay4KLSAgICB2OE9iamVjdC5EaXNwb3NlKCk7Ci0gICAgbm9kZS0+ZGVy
ZWYoKTsgLy8gTm9ib2R5IG92ZXJyaWRlcyBOb2RlOjpkZXJlZiBzbyBpdCdzIHNhZmUKLX0KLQog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvRE9NRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRh
U3RvcmUuaAppbmRleCAzNzcxNjc1NDhmN2M1ZmU4NmM0ODNjMDc1NmFhODU4NzRkYjljMzZjLi5l
Njc2ZmUwYzQzMGJjNGM4YTRhNTk0NzJkYzc0ZWRkMGMyYmY0ZDNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaApAQCAtMzEsOCArMzEsOCBAQAogI2lmbmRlZiBE
T01EYXRhU3RvcmVfaAogI2RlZmluZSBET01EYXRhU3RvcmVfaAogCi0jaW5jbHVkZSAiVjhET01N
YXAuaCIKLQorI2luY2x1ZGUgIkRPTVdyYXBwZXJNYXAuaCIKKyNpbmNsdWRlICJOb2RlLmgiCiAj
aW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CkBAIC03MiwyNyArNzIsMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBET01EYXRhU3RvcmUoKTsKICAgICAgICAgdmlydHVhbCB+RE9NRGF0YVN0b3JlKCk7CiAK
LSAgICAgICAgLy8gQSBsaXN0IG9mIGFsbCBET01EYXRhU3RvcmUgb2JqZWN0cyBpbiB0aGUgY3Vy
cmVudCBWOCBpbnN0YW5jZSAodGhyZWFkKS4gTm9ybWFsbHksIGVhY2ggV29ybGQgaGFzIGEgRE9N
RGF0YVN0b3JlLgorICAgICAgICAvLyBBIGxpc3Qgb2YgYWxsIERPTURhdGFTdG9yZSBvYmplY3Rz
IGluIHRoZSBjdXJyZW50IFY4IGlzb2xhdGUuIE5vcm1hbGx5LCBlYWNoIFdvcmxkIGhhcyBhIERP
TURhdGFTdG9yZS4KICAgICAgICAgc3RhdGljIERPTURhdGFMaXN0JiBhbGxTdG9yZXMoKTsKIAog
ICAgICAgICB2b2lkKiBnZXRET01XcmFwcGVyTWFwKERPTVdyYXBwZXJNYXBUeXBlKTsKIAotICAg
ICAgICBET01Ob2RlTWFwcGluZyYgZG9tTm9kZU1hcCgpIHsgcmV0dXJuICptX2RvbU5vZGVNYXA7
IH0KLSAgICAgICAgRE9NTm9kZU1hcHBpbmcmIGFjdGl2ZURvbU5vZGVNYXAoKSB7IHJldHVybiAq
bV9hY3RpdmVEb21Ob2RlTWFwOyB9CisgICAgICAgIERPTVdyYXBwZXJNYXA8Tm9kZT4mIGRvbU5v
ZGVNYXAoKSB7IHJldHVybiAqbV9kb21Ob2RlTWFwOyB9CisgICAgICAgIERPTVdyYXBwZXJNYXA8
Tm9kZT4mIGFjdGl2ZURvbU5vZGVNYXAoKSB7IHJldHVybiAqbV9hY3RpdmVEb21Ob2RlTWFwOyB9
CiAgICAgICAgIERPTVdyYXBwZXJNYXA8dm9pZD4mIGRvbU9iamVjdE1hcCgpIHsgcmV0dXJuICpt
X2RvbU9iamVjdE1hcDsgfQogICAgICAgICBET01XcmFwcGVyTWFwPHZvaWQ+JiBhY3RpdmVEb21P
YmplY3RNYXAoKSB7IHJldHVybiAqbV9hY3RpdmVEb21PYmplY3RNYXA7IH0KIAotICAgICAgICAv
LyBOZWVkIGJ5IFY4R0NDb250cm9sbGVyLgotICAgICAgICBzdGF0aWMgdm9pZCB3ZWFrQWN0aXZl
RE9NT2JqZWN0Q2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2OE9iamVjdCwgdm9p
ZCogZG9tT2JqZWN0KTsKLSAgICAgICAgc3RhdGljIHZvaWQgd2Vha05vZGVDYWxsYmFjayh2ODo6
UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4T2JqZWN0LCB2b2lkKiBkb21PYmplY3QpOwotCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29u
c3Q7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHN0YXRpYyB2b2lkIHdlYWtET01PYmplY3RD
YWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4T2JqZWN0LCB2b2lkKiBkb21PYmpl
Y3QpOwotCi0gICAgICAgIERPTU5vZGVNYXBwaW5nKiBtX2RvbU5vZGVNYXA7Ci0gICAgICAgIERP
TU5vZGVNYXBwaW5nKiBtX2FjdGl2ZURvbU5vZGVNYXA7CisgICAgICAgIERPTVdyYXBwZXJNYXA8
Tm9kZT4qIG1fZG9tTm9kZU1hcDsKKyAgICAgICAgRE9NV3JhcHBlck1hcDxOb2RlPiogbV9hY3Rp
dmVEb21Ob2RlTWFwOwogICAgICAgICBET01XcmFwcGVyTWFwPHZvaWQ+KiBtX2RvbU9iamVjdE1h
cDsKICAgICAgICAgRE9NV3JhcHBlck1hcDx2b2lkPiogbV9hY3RpdmVEb21PYmplY3RNYXA7CiAg
ICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJN
YXAuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJNYXAuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42MjQ0NTUxMzYxODI0MzAxODQzZjRiMTg3ZWYxNmM5MmQxNmE3MTQyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlck1hcC5oCkBAIC0w
LDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBET01XcmFwcGVyTWFwX2gKKyNkZWZpbmUgRE9NV3JhcHBlck1h
cF9oCisKKyNpbmNsdWRlICJXZWJDb3JlTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVk
ZSAiV3JhcHBlclR5cGVJbmZvLmgiCisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoTWFwLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRE9NRGF0YVN0b3JlOworCit0ZW1wbGF0ZTxj
bGFzcyBLZXlUeXBlPgorY2xhc3MgRE9NV3JhcHBlclZpc2l0b3IgeworcHVibGljOgorICAgIHZp
cnR1YWwgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiBzdG9yZSwgS2V5VHlwZSog
a2V5LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBvYmplY3QpID0gMDsKKyAgICB2aXJ0dWFs
IH5ET01XcmFwcGVyVmlzaXRvcigpID0gMDsKK307CisKK3RlbXBsYXRlPGNsYXNzIEtleVR5cGU+
CitjbGFzcyBET01XcmFwcGVyTWFwIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5ET01XcmFwcGVy
TWFwKCkgPSAwOworCisgICAgdmlydHVhbCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBnZXQo
S2V5VHlwZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0KEtleVR5cGUqLCB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChET01EYXRhU3Rv
cmUqLCBET01XcmFwcGVyVmlzaXRvcjxLZXlUeXBlPiopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXIoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5
T2JqZWN0SW5mbyopIGNvbnN0ID0gMDsKK307CisKK3RlbXBsYXRlPGNsYXNzIEtleVR5cGU+Citj
bGFzcyBET01XcmFwcGVySGFzaE1hcCA6IHB1YmxpYyBET01XcmFwcGVyTWFwPEtleVR5cGU+IHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIEhhc2hNYXA8S2V5VHlwZSosIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+ID4gTWFwVHlwZTsKKworICAgIGV4cGxpY2l0IERPTVdyYXBwZXJIYXNoTWFwKHY4
OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sgY2FsbGJhY2sgPSAwKQorICAgICAgICA6IG1fY2FsbGJh
Y2soY2FsbGJhY2spCisgICAgeworICAgICAgICBpZiAoIW1fY2FsbGJhY2spCisgICAgICAgICAg
ICBtX2NhbGxiYWNrID0gJndlYWtDYWxsYmFjazsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5ET01X
cmFwcGVySGFzaE1hcCgpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD4gZ2V0KEtleVR5cGUqIGtleSkgT1ZFUlJJREUKKyAgICB7CisgICAgICAg
IHJldHVybiBtX21hcC5nZXQoa2V5KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0KEtl
eVR5cGUqIGtleSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikgT1ZFUlJJREUK
KyAgICB7CisgICAgICAgIEFTU0VSVCghbV9tYXAuY29udGFpbnMoa2V5KSk7CisgICAgICAgIEFT
U0VSVChzdGF0aWNfY2FzdDxLZXlUeXBlKj4odG9OYXRpdmUod3JhcHBlcikpID09IGtleSk7Cisg
ICAgICAgIHdyYXBwZXIuTWFrZVdlYWsodGhpcywgd2Vha0NhbGxiYWNrKTsKKyAgICAgICAgbV9t
YXAuc2V0KGtleSwgd3JhcHBlcik7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0KERP
TURhdGFTdG9yZSogc3RvcmUsIERPTVdyYXBwZXJWaXNpdG9yPEtleVR5cGU+KiB2aXNpdG9yKSBP
VkVSUklERQorICAgIHsKKyAgICAgICAgZm9yICh0eXBlbmFtZSBNYXBUeXBlOjppdGVyYXRvciBp
dCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KQorICAgICAgICAgICAg
dmlzaXRvci0+dmlzaXRET01XcmFwcGVyKHN0b3JlLCBpdC0+a2V5LCBpdC0+dmFsdWUpOworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpIE9WRVJSSURFCisgICAgeworICAgICAgICBm
b3IgKHR5cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0g
bV9tYXAuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IHdyYXBwZXIgPSBpdC0+dmFsdWU7CisgICAgICAgICAgICB0b1dyYXBwZXJUeXBlSW5mbyh3
cmFwcGVyKS0+ZGVyZWZPYmplY3QoaXQtPmtleSk7CisgICAgICAgICAgICB3cmFwcGVyLkRpc3Bv
c2UoKTsKKyAgICAgICAgfQorICAgICAgICBtX21hcC5jbGVhcigpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmpl
Y3RJbmZvKSBjb25zdCBPVkVSUklERQorICAgIHsKKyAgICAgICAgTWVtb3J5Q2xhc3NJbmZvIGlu
Zm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpCaW5kaW5nKTsK
KyAgICAgICAgaW5mby5hZGRNZW1iZXIobV9tYXApOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmUoS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVy
KQorICAgIHsKKyAgICAgICAgdHlwZW5hbWUgTWFwVHlwZTo6aXRlcmF0b3IgaXQgPSBtX21hcC5m
aW5kKGtleSk7CisgICAgICAgIEFTU0VSVChpdCAhPSBtX21hcC5lbmQoKSk7CisgICAgICAgIEFT
U0VSVChpdC0+dmFsdWUgPT0gd3JhcHBlcik7CisgICAgICAgIG1fbWFwLnJlbW92ZShpdCk7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgd2Vha0NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpW
YWx1ZT4gdmFsdWUsIHZvaWQqIGNvbnRleHQpCisgICAgeworICAgICAgICBET01XcmFwcGVySGFz
aE1hcDxLZXlUeXBlPiogbWFwID0gc3RhdGljX2Nhc3Q8RE9NV3JhcHBlckhhc2hNYXA8S2V5VHlw
ZT4qPihjb250ZXh0KTsKKyAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc09iamVjdCgpKTsKKyAgICAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciA9IHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+OjpDYXN0KHZhbHVlKTsKKyAgICAgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlID0g
dG9XcmFwcGVyVHlwZUluZm8od3JhcHBlcik7CisgICAgICAgIEtleVR5cGUqIGtleSA9IHN0YXRp
Y19jYXN0PEtleVR5cGUqPih0b05hdGl2ZSh3cmFwcGVyKSk7CisKKyAgICAgICAgbWFwLT5yZW1v
dmUoa2V5LCB3cmFwcGVyKTsKKyAgICAgICAgd3JhcHBlci5EaXNwb3NlKCk7CisgICAgICAgIHR5
cGUtPmRlcmVmT2JqZWN0KGtleSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHY4OjpXZWFrUmVm
ZXJlbmNlQ2FsbGJhY2sgbV9jYWxsYmFjazsKKyAgICBNYXBUeXBlIG1fbWFwOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRE9NV3JhcHBlck1hcF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5oCmluZGV4IGFkZjEyNGVjMjc1
Yjg4OTk5OGIyN2U0YTc3MGJlNWJkODg5NTZhZDUuLjVmYzk3MTYzYmU0ZWM1OTYwYmI3YTMzNmZm
MmVhNWFiMmIxNmUxMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RP
TVdyYXBwZXJXb3JsZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBw
ZXJXb3JsZC5oCkBAIC0zMSw4ICszMSw4IEBACiAjaWZuZGVmIERPTVdyYXBwZXJXb3JsZF9oCiAj
ZGVmaW5lIERPTVdyYXBwZXJXb3JsZF9oCiAKLSNpbmNsdWRlICJET01EYXRhU3RvcmUuaCIKICNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlY4RE9NTWFwLmgiCiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0ludHJ1c2l2ZURPTVdyYXBwZXJNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lu
dHJ1c2l2ZURPTVdyYXBwZXJNYXAuaAppbmRleCBkNjZjNzYxNmNlZWQ5MzU0NGI4Mzc4MmFjYjc0
ZGQ3NDE4NmU3MjAwLi4yZWIyNDkwNWJhYWY2NTUzYjA1NDI0NDM1OWQ2OGQ2MjY2Zjk1ZTM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JbnRydXNpdmVET01XcmFwcGVy
TWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSW50cnVzaXZlRE9NV3JhcHBl
ck1hcC5oCkBAIC0zMSw3NiArMzEsNjIgQEAKICNpZm5kZWYgSW50cnVzaXZlRE9NV3JhcHBlck1h
cF9oCiAjZGVmaW5lIEludHJ1c2l2ZURPTVdyYXBwZXJNYXBfaAogCi0jaW5jbHVkZSAiRE9NRGF0
YVN0b3JlLmgiCi0jaW5jbHVkZSAiVjhET01NYXAuaCIKLSNpbmNsdWRlICJWOE5vZGUuaCIKLSNp
bmNsdWRlICJXZWJDb3JlTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiRE9NV3Jh
cHBlck1hcC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERPTU5vZGVXcmFwcGVy
TWFwIDogcHVibGljIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDxOb2RlLCB2ODo6T2JqZWN0PiB7
CitjbGFzcyBET01Ob2RlV3JhcHBlck1hcCA6IHB1YmxpYyBET01XcmFwcGVyTWFwPE5vZGU+IHsK
IHB1YmxpYzoKLSAgICBET01Ob2RlV3JhcHBlck1hcCh2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNr
IGNhbGxiYWNrKQotICAgICAgICA6IEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDxOb2RlLCB2ODo6
T2JqZWN0PihjYWxsYmFjaykKKyAgICB2aXJ0dWFsIH5ET01Ob2RlV3JhcHBlck1hcCgpCiAgICAg
ewogICAgIH0KIAotICAgIHZpcnR1YWwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gZ2V0KE5v
ZGUqIG5vZGUpCisgICAgdmlydHVhbCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBnZXQoTm9k
ZSogbm9kZSkgT1ZFUlJJREUKICAgICB7CiAgICAgICAgIHJldHVybiBub2RlLT53cmFwcGVyKCk7
CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHNldChOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0PiB3cmFwcGVyKQorICAgIHZpcnR1YWwgdm9pZCBzZXQoTm9kZSogbm9kZSwg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikgT1ZFUlJJREUKICAgICB7CiAgICAg
ICAgIEFTU0VSVChub2RlICYmIG5vZGUtPndyYXBwZXIoKS5Jc0VtcHR5KCkpOwogICAgICAgICBB
U1NFUlQod3JhcHBlci5XcmFwcGVyQ2xhc3NJZCgpID09IHY4RE9NU3VidHJlZUNsYXNzSWQpOwog
ICAgICAgICBub2RlLT5zZXRXcmFwcGVyKHdyYXBwZXIpOwotICAgICAgICB3cmFwcGVyLk1ha2VX
ZWFrKG5vZGUsIHdlYWtSZWZlcmVuY2VDYWxsYmFjaygpKTsKKyAgICAgICAgd3JhcHBlci5NYWtl
V2Vhayhub2RlLCB3ZWFrQ2FsbGJhY2spOwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBjb250
YWlucyhOb2RlKiBub2RlKQorICAgIHZpcnR1YWwgdm9pZCB2aXNpdChET01EYXRhU3RvcmUqIHN0
b3JlLCBET01XcmFwcGVyVmlzaXRvcjxOb2RlPiogdmlzaXRvcikgT1ZFUlJJREUKICAgICB7Ci0g
ICAgICAgIHJldHVybiAhbm9kZS0+d3JhcHBlcigpLklzRW1wdHkoKTsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KERPTURhdGFT
dG9yZSogc3RvcmUsIFZpc2l0b3IqIHZpc2l0b3IpCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkg
T1ZFUlJJREUKICAgICB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAot
ICAgIHZpcnR1YWwgYm9vbCByZW1vdmVJZlByZXNlbnQoTm9kZSogbm9kZSwgdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD4gdmFsdWUpCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdl
KE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0IE9WRVJSSURFCiAgICAg
ewotICAgICAgICBBU1NFUlQobm9kZSk7Ci0gICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IHdyYXBwZXIgPSBub2RlLT53cmFwcGVyKCk7Ci0gICAgICAgIGlmICh3cmFwcGVyLklzRW1w
dHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHdyYXBwZXIgIT0g
dmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG5vZGUtPmRpc3Bvc2VX
cmFwcGVyKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBjbGVhcigpCisgICAgc3RhdGljIHZvaWQgd2Vha0NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4
OjpWYWx1ZT4gdmFsdWUsIHZvaWQqIGNvbnRleHQpCiAgICAgewotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9CisgICAgICAgIE5vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxOb2Rl
Kj4oY29udGV4dCk7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7CisgICAgICAg
IEFTU0VSVChub2RlLT53cmFwcGVyKCkgPT0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46OkNh
c3QodmFsdWUpKTsKIAotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlP
YmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdCBPVkVSUklERQotICAgIHsKLSAgICAg
ICAgLy8gVGhpcyBkYXRhIHN0cnVjdHVyZSBkb2Vzbid0IHVzZSBhbnkgZXh0cmEgbWVtb3J5Lgor
ICAgICAgICBub2RlLT5jbGVhcldyYXBwZXIoKTsKKyAgICAgICAgdmFsdWUuRGlzcG9zZSgpOwor
ICAgICAgICBub2RlLT5kZXJlZigpOwogICAgIH0KIH07CiAKLWNsYXNzIEFjdGl2ZURPTU5vZGVX
cmFwcGVyTWFwIDogcHVibGljIERPTVdyYXBwZXJNYXA8Tm9kZT4geworY2xhc3MgQWN0aXZlRE9N
Tm9kZVdyYXBwZXJNYXAgOiBwdWJsaWMgRE9NV3JhcHBlckhhc2hNYXA8Tm9kZT4gewogcHVibGlj
OgotICAgIEFjdGl2ZURPTU5vZGVXcmFwcGVyTWFwKHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sg
Y2FsbGJhY2spCi0gICAgICAgIDogRE9NV3JhcHBlck1hcDxOb2RlPihjYWxsYmFjaykKLSAgICB7
Ci0gICAgfQotCiAgICAgdmlydHVhbCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBnZXQoTm9k
ZSogbm9kZSkgT1ZFUlJJREUKICAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLT53cmFwcGVyKCk7
CisgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBub2RlLT53cmFw
cGVyKCk7CisgICAgICAgIEFTU0VSVChET01XcmFwcGVySGFzaE1hcDxOb2RlPjo6Z2V0KG5vZGUp
ID09IHdyYXBwZXIpOworICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0KE5vZGUqIG5vZGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBw
ZXIpIE9WRVJSSURFCkBAIC0xMTEsMTkgKzk3LDE2IEBAIHB1YmxpYzoKICAgICAgICAgRE9NV3Jh
cHBlck1hcDxOb2RlPjo6c2V0KG5vZGUsIHdyYXBwZXIpOwogICAgIH0KIAotICAgIHZpcnR1YWwg
Ym9vbCByZW1vdmVJZlByZXNlbnQoTm9kZSogbm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD4gdmFsdWUpIE9WRVJSSURFCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgT1ZFUlJJREUKICAg
ICB7Ci0gICAgICAgIGlmICghRE9NV3JhcHBlck1hcDxOb2RlPjo6cmVtb3ZlSWZQcmVzZW50KG5v
ZGUsIHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gTm90aWNl
IHRoYXQgd2UgY2FsbCAiY2xlYXJXcmFwcGVyIiBoZXJlIHJhdGhlciB0aGFuIGRpc3Bvc2VXcmFw
cGVyIGJlY2F1c2UKLSAgICAgICAgLy8gb3VyIGJhc2UgY2xhc3Mgd2lsbCBjYWxsIERpc3Bvc2Ug
b24gdGhlIHdyYXBwZXIgZm9yIHVzLgotICAgICAgICBub2RlLT5jbGVhcldyYXBwZXIoKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0K
IAotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpIE9WRVJSSURFCisgICAgdmlydHVhbCB2b2lkIHJl
bW92ZShOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKSBPVkVS
UklERQogICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIEFTU0VS
VChub2RlLT53cmFwcGVyKCkgPT0gd3JhcHBlcik7CisgICAgICAgIG5vZGUtPmNsZWFyV3JhcHBl
cigpOworICAgICAgICBET01XcmFwcGVySGFzaE1hcDxOb2RlPjo6cmVtb3ZlKG5vZGUsIHdyYXBw
ZXIpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Njb3BlZERPTURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY29w
ZWRET01EYXRhU3RvcmUuY3BwCmluZGV4IGJiZGRjNWMxYmNjOTFjZmFkN2Y2OTc3MDYzMmEwNDM1
MmEyZjg2NDcuLjIyZGViZWIzOTJjYWVjNjIzNTQwZGQwYzFkMWI3NTQ0NjBkZDYzN2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njb3BlZERPTURhdGFTdG9yZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NvcGVkRE9NRGF0YVN0b3JlLmNwcApA
QCAtMzksMTAgKzM5LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFNjb3BlZERPTURhdGFTdG9y
ZTo6U2NvcGVkRE9NRGF0YVN0b3JlKCkKICAgICA6IERPTURhdGFTdG9yZSgpCiB7Ci0gICAgbV9k
b21Ob2RlTWFwID0gbmV3IERPTVdyYXBwZXJNYXA8Tm9kZT4oJkRPTURhdGFTdG9yZTo6d2Vha05v
ZGVDYWxsYmFjayk7Ci0gICAgbV9hY3RpdmVEb21Ob2RlTWFwID0gbmV3IERPTVdyYXBwZXJNYXA8
Tm9kZT4oJkRPTURhdGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjayk7Ci0gICAgbV9kb21PYmplY3RN
YXAgPSBuZXcgRE9NV3JhcHBlck1hcDx2b2lkPigmRE9NRGF0YVN0b3JlOjp3ZWFrRE9NT2JqZWN0
Q2FsbGJhY2spOwotICAgIG1fYWN0aXZlRG9tT2JqZWN0TWFwID0gbmV3IERPTVdyYXBwZXJNYXA8
dm9pZD4oJkRPTURhdGFTdG9yZTo6d2Vha0FjdGl2ZURPTU9iamVjdENhbGxiYWNrKTsKKyAgICBt
X2RvbU5vZGVNYXAgPSBuZXcgRE9NV3JhcHBlckhhc2hNYXA8Tm9kZT47CisgICAgbV9hY3RpdmVE
b21Ob2RlTWFwID0gbmV3IERPTVdyYXBwZXJIYXNoTWFwPE5vZGU+OworICAgIG1fZG9tT2JqZWN0
TWFwID0gbmV3IERPTVdyYXBwZXJIYXNoTWFwPHZvaWQ+OworICAgIG1fYWN0aXZlRG9tT2JqZWN0
TWFwID0gbmV3IERPTVdyYXBwZXJIYXNoTWFwPHZvaWQ+OwogfQogCiBTY29wZWRET01EYXRhU3Rv
cmU6On5TY29wZWRET01EYXRhU3RvcmUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0UHJvZmlsZXIuY3BwCmluZGV4IGI1MzkyOWE5YmQ0OTUwZmE3ZTIxZjQ2YWM0OTUzNjE5
MDVmMTIyYTguLjFiNzE5MWNhYTRhODQ4MDUzYzRmMzMxMTRjOGQ1NzE1OTYxNTllMjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAKQEAgLTIwNSw3
ICsyMDUsNyBAQCB2b2lkIFNjcmlwdFByb2ZpbGVyOjp2aXNpdEV4dGVybmFsU3RyaW5ncyhFeHRl
cm5hbFN0cmluZ1Zpc2l0b3IqIHZpc2l0b3IpCiAKIHZvaWQgU2NyaXB0UHJvZmlsZXI6OnZpc2l0
RXh0ZXJuYWxBcnJheXMoRXh0ZXJuYWxBcnJheVZpc2l0b3IqIHZpc2l0b3IpCiB7Ci0gICAgY2xh
c3MgVmlzaXRvckFkYXB0ZXIgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDx2b2lkPjo6VmlzaXRvciB7
CisgICAgY2xhc3MgVmlzaXRvckFkYXB0ZXIgOiBwdWJsaWMgRE9NV3JhcHBlclZpc2l0b3I8dm9p
ZD4gewogICAgIHB1YmxpYzoKICAgICAgICAgVmlzaXRvckFkYXB0ZXIoRXh0ZXJuYWxBcnJheVZp
c2l0b3IqIHZpc2l0b3IpIDogbV92aXNpdG9yKHZpc2l0b3IpIHsgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmNwcAppbmRleCA1ZDlkMDlj
ZTEzOWQ0MTgyN2RkOTdkNjAzMTNiYTFmYjYwYzM2ZDM1Li5jNDlmOWZkMDk3NTkyYWI2YzA3MTAw
YzcwZTdjN2VlNGJmZWFkYzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TdGF0aWNET01EYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1N0YXRpY0RPTURhdGFTdG9yZS5jcHAKQEAgLTM2LDExICszNiw2IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFN0YXRpY0RPTURhdGFTdG9yZTo6U3RhdGljRE9NRGF0YVN0b3JlKCkKLSAgICA6
IERPTURhdGFTdG9yZSgpCi0gICAgLCBtX3N0YXRpY0RvbU5vZGVNYXAoJkRPTURhdGFTdG9yZTo6
d2Vha05vZGVDYWxsYmFjaykKLSAgICAsIG1fc3RhdGljQWN0aXZlRG9tTm9kZU1hcCgmRE9NRGF0
YVN0b3JlOjp3ZWFrTm9kZUNhbGxiYWNrKQotICAgICwgbV9zdGF0aWNEb21PYmplY3RNYXAoJkRP
TURhdGFTdG9yZTo6d2Vha0RPTU9iamVjdENhbGxiYWNrKQotICAgICwgbV9zdGF0aWNBY3RpdmVE
b21PYmplY3RNYXAoJkRPTURhdGFTdG9yZTo6d2Vha0FjdGl2ZURPTU9iamVjdENhbGxiYWNrKQog
ewogICAgIG1fZG9tTm9kZU1hcCA9ICZtX3N0YXRpY0RvbU5vZGVNYXA7CiAgICAgbV9hY3RpdmVE
b21Ob2RlTWFwID0gJm1fc3RhdGljQWN0aXZlRG9tTm9kZU1hcDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmgKaW5kZXggODEwOTMwNTBlYzc2NjEw
NTlmOGFlYzM1ZDNjMmI0MWYxN2RiYzQwYi4uMjBkMTFhZGFhZTU2ZjhiNTJhMjZhMzhiMzllMDA1
NGJhYzI4ZDNiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGlj
RE9NRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGljRE9N
RGF0YVN0b3JlLmgKQEAgLTU0LDggKzU0LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBET01O
b2RlV3JhcHBlck1hcCBtX3N0YXRpY0RvbU5vZGVNYXA7CiAgICAgQWN0aXZlRE9NTm9kZVdyYXBw
ZXJNYXAgbV9zdGF0aWNBY3RpdmVEb21Ob2RlTWFwOwotICAgIERPTVdyYXBwZXJNYXA8dm9pZD4g
bV9zdGF0aWNEb21PYmplY3RNYXA7Ci0gICAgRE9NV3JhcHBlck1hcDx2b2lkPiBtX3N0YXRpY0Fj
dGl2ZURvbU9iamVjdE1hcDsKKyAgICBET01XcmFwcGVySGFzaE1hcDx2b2lkPiBtX3N0YXRpY0Rv
bU9iamVjdE1hcDsKKyAgICBET01XcmFwcGVySGFzaE1hcDx2b2lkPiBtX3N0YXRpY0FjdGl2ZURv
bU9iamVjdE1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcAppbmRleCBlNmRhYjkwOTQ0N2E2NzJiOGVkYWIzMTQ3MzY0
NzFmYjlhZTg3NjdiLi41ZWI2MzBiZTFhZGNiMDA3NGFhZDA0M2I4MmNiZDliZjM3YjNhMWM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuY3BwCkBAIC0zNSw2ICszNSw3IEBA
CiAjaW5jbHVkZSAiRE9NRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiU2NvcGVkRE9NRGF0YVN0b3Jl
LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhOb2RlLmgiCiAjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTYsMTIgKzU3
LDEyIEBAIE5vZGVXcmFwcGVyVmlzaXRvcjo6fk5vZGVXcmFwcGVyVmlzaXRvcigpCiB7CiB9CiAK
LURPTU5vZGVNYXBwaW5nJiBnZXRET01Ob2RlTWFwKHY4OjpJc29sYXRlKiBpc29sYXRlKQorRE9N
V3JhcHBlck1hcDxOb2RlPiYgZ2V0RE9NTm9kZU1hcCh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsK
ICAgICByZXR1cm4gRE9NRGF0YTo6Z2V0Q3VycmVudFN0b3JlKGlzb2xhdGUpLmRvbU5vZGVNYXAo
KTsKIH0KIAotRE9NTm9kZU1hcHBpbmcmIGdldEFjdGl2ZURPTU5vZGVNYXAodjg6Oklzb2xhdGUq
IGlzb2xhdGUpCitET01XcmFwcGVyTWFwPE5vZGU+JiBnZXRBY3RpdmVET01Ob2RlTWFwKHY4OjpJ
c29sYXRlKiBpc29sYXRlKQogewogICAgIHJldHVybiBET01EYXRhOjpnZXRDdXJyZW50U3RvcmUo
aXNvbGF0ZSkuYWN0aXZlRG9tTm9kZU1hcCgpOwogfQpAQCAtNzgsMTQgKzc5LDExIEBAIERPTVdy
YXBwZXJNYXA8dm9pZD4mIGdldEFjdGl2ZURPTU9iamVjdE1hcCh2ODo6SXNvbGF0ZSogaXNvbGF0
ZSkKIAogdm9pZCByZW1vdmVBbGxET01PYmplY3RzKCkKIHsKLSAgICBET01EYXRhU3RvcmUmIHN0
b3JlID0gRE9NRGF0YTo6Z2V0Q3VycmVudFN0b3JlKCk7Ci0KLSAgICB2ODo6SGFuZGxlU2NvcGUg
c2NvcGU7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBOb3RlOiBXZSBz
a2lwIHRoZSBOb2RlIHdyYXBwZXIgbWFwcyBiZWNhdXNlIHRoZXkgZXhpc3Qgb25seSBvbiB0aGUg
bWFpbiB0aHJlYWQuCi0gICAgRE9NRGF0YTo6cmVtb3ZlT2JqZWN0c0Zyb21XcmFwcGVyTWFwPHZv
aWQ+KCZzdG9yZSwgc3RvcmUuZG9tT2JqZWN0TWFwKCkpOwotICAgIERPTURhdGE6OnJlbW92ZU9i
amVjdHNGcm9tV3JhcHBlck1hcDx2b2lkPigmc3RvcmUsIHN0b3JlLmFjdGl2ZURvbU9iamVjdE1h
cCgpKTsKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgRE9NRGF0YVN0b3JlJiBzdG9y
ZSA9IERPTURhdGE6OmdldEN1cnJlbnRTdG9yZSgpOworICAgIHN0b3JlLmRvbU9iamVjdE1hcCgp
LmNsZWFyKCk7CisgICAgc3RvcmUuYWN0aXZlRG9tT2JqZWN0TWFwKCkuY2xlYXIoKTsKIH0KIAog
dm9pZCB2aXNpdEFsbERPTU5vZGVzKE5vZGVXcmFwcGVyVmlzaXRvciogdmlzaXRvcikKQEAgLTEx
Nyw3ICsxMTUsNyBAQCB2b2lkIHZpc2l0QWxsRE9NTm9kZXMoTm9kZVdyYXBwZXJWaXNpdG9yKiB2
aXNpdG9yKQogICAgIHY4OjpWODo6VmlzaXRIYW5kbGVzV2l0aENsYXNzSWRzKCZ2aXNpdG9yQWRh
cHRlcik7CiB9CiAKLXZvaWQgdmlzaXRBY3RpdmVET01Ob2RlcyhET01XcmFwcGVyTWFwPE5vZGU+
OjpWaXNpdG9yKiB2aXNpdG9yKQordm9pZCB2aXNpdEFjdGl2ZURPTU5vZGVzKERPTVdyYXBwZXJW
aXNpdG9yPE5vZGU+KiB2aXNpdG9yKQogewogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKIApA
QCAtMTI5LDcgKzEyNyw3IEBAIHZvaWQgdmlzaXRBY3RpdmVET01Ob2RlcyhET01XcmFwcGVyTWFw
PE5vZGU+OjpWaXNpdG9yKiB2aXNpdG9yKQogICAgIH0KIH0KIAotdm9pZCB2aXNpdERPTU9iamVj
dHMoRE9NV3JhcHBlck1hcDx2b2lkPjo6VmlzaXRvciogdmlzaXRvcikKK3ZvaWQgdmlzaXRET01P
YmplY3RzKERPTVdyYXBwZXJWaXNpdG9yPHZvaWQ+KiB2aXNpdG9yKQogewogICAgIHY4OjpIYW5k
bGVTY29wZSBzY29wZTsKIApAQCAtMTQxLDcgKzEzOSw3IEBAIHZvaWQgdmlzaXRET01PYmplY3Rz
KERPTVdyYXBwZXJNYXA8dm9pZD46OlZpc2l0b3IqIHZpc2l0b3IpCiAgICAgfQogfQogCi12b2lk
IHZpc2l0QWN0aXZlRE9NT2JqZWN0cyhET01XcmFwcGVyTWFwPHZvaWQ+OjpWaXNpdG9yKiB2aXNp
dG9yKQordm9pZCB2aXNpdEFjdGl2ZURPTU9iamVjdHMoRE9NV3JhcHBlclZpc2l0b3I8dm9pZD4q
IHZpc2l0b3IpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01NYXAuaAppbmRleCBmZjA2MWZlMTYxOTAxMWM0OTVmZGQyM2Q2ZDM5NDFi
MWRlMmExNWZkLi5iNGNkN2Q2ZjI4YjQyYmY1OGExNTZhYjY2MzU5NzFmYTlmMzAzNzEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpZm5k
ZWYgVjhET01NYXBfaAogI2RlZmluZSBWOERPTU1hcF9oCiAKKyNpbmNsdWRlICJET01XcmFwcGVy
TWFwLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIldlYkNvcmVNZW1vcnlJbnN0cnVt
ZW50YXRpb24uaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNDAsMTExICs0MSw4IEBA
CiAjaW5jbHVkZSA8djguaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIERPTURh
dGFTdG9yZTsKLQotICAgIHRlbXBsYXRlIDxjbGFzcyBLZXlUeXBlLCBjbGFzcyBWYWx1ZVR5cGU+
IGNsYXNzIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcCB7Ci0gICAgcHVibGljOgotICAgICAgICBB
YnN0cmFjdFdlYWtSZWZlcmVuY2VNYXAodjg6OldlYWtSZWZlcmVuY2VDYWxsYmFjayBjYWxsYmFj
aykgOiBtX3dlYWtSZWZlcmVuY2VDYWxsYmFjayhjYWxsYmFjaykgeyB9Ci0gICAgICAgIHZpcnR1
YWwgfkFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcCgpIHsgfQotCi0gICAgICAgIGNsYXNzIFZpc2l0
b3IgewotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRET01X
cmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUsIEtleVR5cGUqIGtleSwgdjg6OlBlcnNpc3RlbnQ8
VmFsdWVUeXBlPiBvYmplY3QpID0gMDsKLSAgICAgICAgcHJvdGVjdGVkOgotICAgICAgICAgICAg
dmlydHVhbCB+VmlzaXRvcigpIHsgfQotICAgICAgICB9OwotCi0gICAgICAgIHZpcnR1YWwgdjg6
OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPiBnZXQoS2V5VHlwZSogb2JqKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBzZXQoS2V5VHlwZSogb2JqLCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IHdy
YXBwZXIpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGNvbnRhaW5zKEtleVR5cGUqIG9iaikg
PSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoRE9NRGF0YVN0b3JlKiBzdG9yZSwgVmlz
aXRvciogdmlzaXRvcikgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcmVtb3ZlSWZQcmVzZW50
KEtleVR5cGUqLCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+KSA9IDA7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBjbGVhcigpID0gMDsKLQotICAgICAgICB2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNr
IHdlYWtSZWZlcmVuY2VDYWxsYmFjaygpIHsgcmV0dXJuIG1fd2Vha1JlZmVyZW5jZUNhbGxiYWNr
OyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qKSBjb25zdCA9IDA7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2ODo6V2Vha1JlZmVy
ZW5jZUNhbGxiYWNrIG1fd2Vha1JlZmVyZW5jZUNhbGxiYWNrOwotICAgIH07Ci0KLSAgICB0eXBl
ZGVmIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDxOb2RlLCB2ODo6T2JqZWN0PiBET01Ob2RlTWFw
cGluZzsKLQotICAgIC8vIEEgdGFibGUgb2Ygd3JhcHBlcnMgd2l0aCB3ZWFrIHBvaW50ZXJzLgot
ICAgIC8vIFRoaXMgdGFibGUgYWxsb3dzIHVzIHRvIGF2b2lkIHRyYWNrIHdyYXBwZWQgb2JqZWN0
cyBmb3IgZGVidWdnaW5nCi0gICAgLy8gYW5kIGZvciBlbnN1cmluZyB0aGF0IHdlIGRvbid0IGRv
dWJsZSB3cmFwIHRoZSBzYW1lIG9iamVjdC4KLSAgICB0ZW1wbGF0ZTxjbGFzcyBLZXlUeXBlLCBj
bGFzcyBWYWx1ZVR5cGU+IGNsYXNzIFdlYWtSZWZlcmVuY2VNYXAgOiBwdWJsaWMgQWJzdHJhY3RX
ZWFrUmVmZXJlbmNlTWFwPEtleVR5cGUsIFZhbHVlVHlwZT4gewotICAgIHB1YmxpYzoKLSAgICAg
ICAgdHlwZWRlZiBBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXA8S2V5VHlwZSwgVmFsdWVUeXBlPiBQ
YXJlbnQ7Ci0gICAgICAgIFdlYWtSZWZlcmVuY2VNYXAodjg6OldlYWtSZWZlcmVuY2VDYWxsYmFj
ayBjYWxsYmFjaykgOiBQYXJlbnQoY2FsbGJhY2spIHsgfQotICAgICAgICB2aXJ0dWFsIH5XZWFr
UmVmZXJlbmNlTWFwKCkgeyB9Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBKUyB3cmFwcGVyIG9iamVj
dCBvZiBhbiBvYmplY3QuCi0gICAgICAgIHZpcnR1YWwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBl
PiBnZXQoS2V5VHlwZSogb2JqKQotICAgICAgICB7Ci0gICAgICAgICAgICBWYWx1ZVR5cGUqIHdy
YXBwZXIgPSBtX21hcC5nZXQob2JqKTsKLSAgICAgICAgICAgIHJldHVybiB3cmFwcGVyID8gdjg6
OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPih3cmFwcGVyKSA6IHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlw
ZT4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXQoS2V5VHlwZSogb2Jq
LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IHdyYXBwZXIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVCghbV9tYXAuY29udGFpbnMob2JqKSk7Ci0gICAgICAgICAgICB3cmFwcGVyLk1h
a2VXZWFrKG9iaiwgUGFyZW50Ojp3ZWFrUmVmZXJlbmNlQ2FsbGJhY2soKSk7Ci0gICAgICAgICAg
ICBtX21hcC5zZXQob2JqLCAqd3JhcHBlcik7Ci0gICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFs
IHZvaWQgZm9yZ2V0KEtleVR5cGUqIG9iaikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KG9iaik7Ci0gICAgICAgICAgICBWYWx1ZVR5cGUqIHdyYXBwZXIgPSBtX21hcC50YWtlKG9iaik7
Ci0gICAgICAgICAgICBpZiAoIXdyYXBwZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgICAgICB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IGhhbmRsZSh3cmFwcGVyKTsKLSAg
ICAgICAgICAgIGhhbmRsZS5EaXNwb3NlKCk7Ci0gICAgICAgICAgICBoYW5kbGUuQ2xlYXIoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgcmVtb3ZlSWZQcmVzZW50KEtleVR5cGUqIGtleSwg
djg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
dHlwZW5hbWUgSGFzaE1hcDxLZXlUeXBlKiwgVmFsdWVUeXBlKj46Oml0ZXJhdG9yIGl0ID0gbV9t
YXAuZmluZChrZXkpOwotICAgICAgICAgICAgaWYgKGl0ID09IG1fbWFwLmVuZCgpIHx8IGl0LT52
YWx1ZSAhPSAqdmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
ICAgICBtX21hcC5yZW1vdmUoaXQpOwotICAgICAgICAgICAgdmFsdWUuRGlzcG9zZSgpOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGNsZWFyKCkK
LSAgICAgICAgewotICAgICAgICAgICAgbV9tYXAuY2xlYXIoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGJvb2wgY29udGFpbnMoS2V5VHlwZSogb2JqKSB7IHJldHVybiBtX21hcC5jb250YWlucyhv
YmopOyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0KERPTURhdGFTdG9yZSogc3RvcmUs
IHR5cGVuYW1lIFBhcmVudDo6VmlzaXRvciogdmlzaXRvcikKLSAgICAgICAgewotICAgICAgICAg
ICAgdHlwZW5hbWUgSGFzaE1hcDxLZXlUeXBlKiwgVmFsdWVUeXBlKj46Oml0ZXJhdG9yIGl0ID0g
bV9tYXAuYmVnaW4oKTsKLSAgICAgICAgICAgIGZvciAoOyBpdCAhPSBtX21hcC5lbmQoKTsgKytp
dCkKLSAgICAgICAgICAgICAgICB2aXNpdG9yLT52aXNpdERPTVdyYXBwZXIoc3RvcmUsIGl0LT5r
ZXksIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4oaXQtPnZhbHVlKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyog
bWVtb3J5T2JqZWN0SW5mbykgY29uc3QgT1ZFUlJJREUKLSAgICAgICAgewotICAgICAgICAgICAg
TWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9y
eVR5cGVzOjpCaW5kaW5nKTsKLSAgICAgICAgICAgIGluZm8uYWRkTWVtYmVyKG1fbWFwKTsKLSAg
ICAgICAgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBIYXNoTWFwPEtleVR5cGUqLCBWYWx1
ZVR5cGUqPiBtX21hcDsKLSAgICB9OwotCi0gICAgdGVtcGxhdGUgPGNsYXNzIEtleVR5cGU+IGNs
YXNzIERPTVdyYXBwZXJNYXAgOiBwdWJsaWMgV2Vha1JlZmVyZW5jZU1hcDxLZXlUeXBlLCB2ODo6
T2JqZWN0PiB7Ci0gICAgcHVibGljOgotICAgICAgICBET01XcmFwcGVyTWFwKHY4OjpXZWFrUmVm
ZXJlbmNlQ2FsbGJhY2sgY2FsbGJhY2spIDogV2Vha1JlZmVyZW5jZU1hcDxLZXlUeXBlLCB2ODo6
T2JqZWN0PihjYWxsYmFjaykgeyB9Ci0gICAgfTsKKyAgICBjbGFzcyBET01EYXRhU3RvcmU7CiAK
ICAgICAvLyBBIHV0aWxpdHkgY2xhc3MgdG8gbWFuYWdlIHRoZSBsaWZldGltZSBvZiBzZXQgb2Yg
RE9NIHdyYXBwZXJzLgogICAgIGNsYXNzIERPTURhdGFTdG9yZUhhbmRsZSB7CkBAIC0xNTksMTAg
KzU3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIH07CiAKICAgICAvLyBBIG1hcCBmcm9t
IERPTSBub2RlIHRvIGl0cyBKUyB3cmFwcGVyLgotICAgIERPTU5vZGVNYXBwaW5nJiBnZXRET01O
b2RlTWFwKHY4OjpJc29sYXRlKiA9IDApOwotICAgIERPTU5vZGVNYXBwaW5nJiBnZXRBY3RpdmVE
T01Ob2RlTWFwKHY4OjpJc29sYXRlKiA9IDApOwotICAgIHZvaWQgdmlzaXRBY3RpdmVET01Ob2Rl
cyhET01XcmFwcGVyTWFwPE5vZGU+OjpWaXNpdG9yKik7Ci0KKyAgICBET01XcmFwcGVyTWFwPE5v
ZGU+JiBnZXRET01Ob2RlTWFwKHY4OjpJc29sYXRlKiA9IDApOworICAgIERPTVdyYXBwZXJNYXA8
Tm9kZT4mIGdldEFjdGl2ZURPTU5vZGVNYXAodjg6Oklzb2xhdGUqID0gMCk7CisgICAgdm9pZCB2
aXNpdEFjdGl2ZURPTU5vZGVzKERPTVdyYXBwZXJWaXNpdG9yPE5vZGU+Kik7CiAKICAgICBjbGFz
cyBOb2RlV3JhcHBlclZpc2l0b3IgewogICAgIHB1YmxpYzoKQEAgLTE3MywxMSArNzAsMTEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgLy8gQSBtYXAgZnJvbSBhIERPTSBvYmplY3QgKG5v
bi1ub2RlKSB0byBpdHMgSlMgd3JhcHBlci4gVGhpcyBtYXAgZG9lcyBub3QgY29udGFpbiB0aGUg
RE9NIG9iamVjdHMgd2hpY2ggY2FuIGhhdmUgcGVuZGluZyBhY3Rpdml0eSAoYWN0aXZlIGRvbSBv
YmplY3RzKS4KICAgICBET01XcmFwcGVyTWFwPHZvaWQ+JiBnZXRET01PYmplY3RNYXAodjg6Oklz
b2xhdGUqID0gMCk7Ci0gICAgdm9pZCB2aXNpdERPTU9iamVjdHMoRE9NV3JhcHBlck1hcDx2b2lk
Pjo6VmlzaXRvciopOworICAgIHZvaWQgdmlzaXRET01PYmplY3RzKERPTVdyYXBwZXJWaXNpdG9y
PHZvaWQ+Kik7CiAKICAgICAvLyBBIG1hcCBmcm9tIGEgRE9NIG9iamVjdCB0byBpdHMgSlMgd3Jh
cHBlciBmb3IgRE9NIG9iamVjdHMgd2hpY2ggY2FuIGhhdmUgcGVuZGluZyBhY3Rpdml0eS4KICAg
ICBET01XcmFwcGVyTWFwPHZvaWQ+JiBnZXRBY3RpdmVET01PYmplY3RNYXAodjg6Oklzb2xhdGUq
ID0gMCk7Ci0gICAgdm9pZCB2aXNpdEFjdGl2ZURPTU9iamVjdHMoRE9NV3JhcHBlck1hcDx2b2lk
Pjo6VmlzaXRvciopOworICAgIHZvaWQgdmlzaXRBY3RpdmVET01PYmplY3RzKERPTVdyYXBwZXJW
aXNpdG9yPHZvaWQ+Kik7CiAKICAgICAvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgdG8gcmVtb3Zl
IGFsbCBET00gb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgdGhyZWFkIHdoZW4g
aXQgaXMgdGVhcmluZyBkb3duLgogICAgIHZvaWQgcmVtb3ZlQWxsRE9NT2JqZWN0cygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKaW5kZXggMTcyODM1ODE4
MzlhMTU1NzhiY2ZhNzk0ZTk2NWZiODk4MTY4NDYyZi4uMzJkMDRmNzhiYTMyZTcyM2UyZTc4ZmJm
OTE2N2YyY2VjNTE5ZmZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhET01XcmFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgVjhET01XcmFwcGVyOjpzZXROYW1lZEhp
ZGRlblJlZmVyZW5jZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHBhcmVudCwgY29uc3QKIFdyYXBw
ZXJUeXBlSW5mbyogVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IG9iamVjdCkKIHsKICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBw
ZXIob2JqZWN0KSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdyYXBwZXJUeXBlSW5mbyo+KG9i
amVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlclR5cGVJbmRleCkp
OworICAgIHJldHVybiB0b1dyYXBwZXJUeXBlSW5mbyhvYmplY3QpOwogfQogCiBQYXNzUmVmUHRy
PE5vZGVGaWx0ZXI+IFY4RE9NV3JhcHBlcjo6d3JhcE5hdGl2ZU5vZGVGaWx0ZXIodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGZpbHRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV3JhcHBlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFw
cGVyLmgKaW5kZXggZmFkODJjOTVkYjVkNDk0M2M3MWY0NDNjMWMxNDdkNWUzNmM5ZjgzZC4uZjEx
ODU5YjA2ZjZjY2UwZGU5ZmY3MGI3Y2Q1NGRhMWJiN2I0ZWY0YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgVjhE
T01XcmFwcGVyX2gKIAogI2luY2x1ZGUgIkRPTURhdGFTdG9yZS5oIgorI2luY2x1ZGUgIkRPTVdy
YXBwZXJXb3JsZC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2lu
Y2x1ZGUgIk5vZGVGaWx0ZXIuaCIKQEAgLTEyMyw3ICsxMjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPndyYXBwZXIoKTsKIAogICAgICAgICAg
ICAgRE9NRGF0YVN0b3JlKiBzdG9yZSA9IGNvbnRleHQtPndvcmxkKCktPmRvbURhdGFTdG9yZSgp
OwotICAgICAgICAgICAgRE9NTm9kZU1hcHBpbmcmIGRvbU5vZGVNYXAgPSBub2RlLT5pc0FjdGl2
ZU5vZGUoKSA/IHN0b3JlLT5hY3RpdmVEb21Ob2RlTWFwKCkgOiBzdG9yZS0+ZG9tTm9kZU1hcCgp
OworICAgICAgICAgICAgRE9NV3JhcHBlck1hcDxOb2RlPiYgZG9tTm9kZU1hcCA9IG5vZGUtPmlz
QWN0aXZlTm9kZSgpID8gc3RvcmUtPmFjdGl2ZURvbU5vZGVNYXAoKSA6IHN0b3JlLT5kb21Ob2Rl
TWFwKCk7CiAgICAgICAgICAgICByZXR1cm4gZG9tTm9kZU1hcC5nZXQobm9kZSk7CiAgICAgICAg
IH0KICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0Nv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIu
Y3BwCmluZGV4IGQ5N2JhODE4OGRhMDM5ZGRlZWU2NDRkYzUwZTMzMDA0NjJmZmNlYWEuLmJjZDJl
M2U5ZWJiYmQ0ZTgzODE1YzYyYzAwMDY1ZjYyZjdiNTc0YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNs
dWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlJldGFpbmVkRE9NSW5mby5oIgogI2luY2x1
ZGUgIlJldGFpbmVkT2JqZWN0SW5mby5oIgorI2luY2x1ZGUgIkludHJ1c2l2ZURPTVdyYXBwZXJN
YXAuaCIKICNpbmNsdWRlICJWOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4
QmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q1NTUnVsZS5oIgpAQCAtNjYsMjAgKzY3LDggQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWZuZGVmIE5ERUJVRwotCi1jbGFzcyBFbnN1cmVXZWFr
RE9NTm9kZVZpc2l0b3IgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDxOb2RlPjo6VmlzaXRvciB7Ci1w
dWJsaWM6Ci0gICAgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiwgTm9kZSosIHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCi0gICAgewotICAgICAgICBBU1NFUlQo
d3JhcHBlci5Jc1dlYWsoKSk7Ci0gICAgfQotfTsKLQotI2VuZGlmIC8vIE5ERUJVRwotCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotY2xhc3MgQWN0aXZlRE9NT2JqZWN0UHJvbG9ndWVWaXNpdG9yIDog
cHVibGljIERPTVdyYXBwZXJNYXA8VD46OlZpc2l0b3IgeworY2xhc3MgQWN0aXZlRE9NT2JqZWN0
UHJvbG9ndWVWaXNpdG9yIDogcHVibGljIERPTVdyYXBwZXJWaXNpdG9yPFQ+IHsKIHB1YmxpYzoK
ICAgICB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqLCBUKiBvYmplY3QsIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiAgICAgewpAQCAtMTAyLDcgKzkxLDcgQEAg
cHVibGljOgogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNzIEFjdGl2ZURPTU9iamVj
dEVwaWxvZ3VlVmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPFQ+OjpWaXNpdG9yIHsKK2Ns
YXNzIEFjdGl2ZURPTU9iamVjdEVwaWxvZ3VlVmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyVmlz
aXRvcjxUPiB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgQWN0aXZlRE9NT2JqZWN0RXBpbG9ndWVW
aXNpdG9yKHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sgY2FsbGJhY2spCiAgICAgICAgIDogbV9j
YWxsYmFjayhjYWxsYmFjaykKQEAgLTE0MCw3ICsxMjksNyBAQCBwcml2YXRlOgogICAgIHY4OjpX
ZWFrUmVmZXJlbmNlQ2FsbGJhY2sgbV9jYWxsYmFjazsKIH07CiAKLWNsYXNzIE9iamVjdFZpc2l0
b3IgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDx2b2lkPjo6VmlzaXRvciB7CitjbGFzcyBPYmplY3RW
aXNpdG9yIDogcHVibGljIERPTVdyYXBwZXJWaXNpdG9yPHZvaWQ+IHsKIHB1YmxpYzoKICAgICB2
b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqIHN0b3JlLCB2b2lkKiBvYmplY3QsIHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiAgICAgewpAQCAtMzA0LDkgKzI5Mywx
MSBAQCB2b2lkIFY4R0NDb250cm9sbGVyOjptYWpvckdDRXBpbG9ndWUoKQogewogICAgIHY4OjpI
YW5kbGVTY29wZSBzY29wZTsKIAotICAgIEFjdGl2ZURPTU9iamVjdEVwaWxvZ3VlVmlzaXRvcjx2
b2lkPiBhY3RpdmVPYmplY3RWaXNpdG9yKCZET01EYXRhU3RvcmU6OndlYWtBY3RpdmVET01PYmpl
Y3RDYWxsYmFjayk7CisgICAgLy8gRklYTUU6IEl0IHNlZW1zIGxpa2UgYSBiaXQgb2YgYSBsYXll
cmluZyB2aW9sYXRpb24gZm9yIHRoZSBWOEdDQ29udHJvbGxlcgorICAgIC8vIHRvIGtub3cgd2hh
dCBjYWxsYmFja3MgdGhlc2UgRE9NV3JhcHBlck1hcHMgdXNlLgorICAgIEFjdGl2ZURPTU9iamVj
dEVwaWxvZ3VlVmlzaXRvcjx2b2lkPiBhY3RpdmVPYmplY3RWaXNpdG9yKCZET01XcmFwcGVySGFz
aE1hcDx2b2lkPjo6d2Vha0NhbGxiYWNrKTsKICAgICB2aXNpdEFjdGl2ZURPTU9iamVjdHMoJmFj
dGl2ZU9iamVjdFZpc2l0b3IpOwotICAgIEFjdGl2ZURPTU9iamVjdEVwaWxvZ3VlVmlzaXRvcjxO
b2RlPiBhY3RpdmVOb2RlVmlzaXRvcigmRE9NRGF0YVN0b3JlOjp3ZWFrTm9kZUNhbGxiYWNrKTsK
KyAgICBBY3RpdmVET01PYmplY3RFcGlsb2d1ZVZpc2l0b3I8Tm9kZT4gYWN0aXZlTm9kZVZpc2l0
b3IoJkFjdGl2ZURPTU5vZGVXcmFwcGVyTWFwOjp3ZWFrQ2FsbGJhY2spOwogICAgIHZpc2l0QWN0
aXZlRE9NTm9kZXMoJmFjdGl2ZU5vZGVWaXNpdG9yKTsKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVN
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcAppbmRleCBhNWIzZDFk
ZWIzZWE4OTU0NDJmYjgxZGMwMTc2ZjAzNDFiZDk1ZjU4Li5hNGI0YWRhMWM2YmJmODViYzVmZTU0
NzYzZTk2NjZlMzk4MDY5NGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOE5QT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2Jq
ZWN0LmNwcApAQCAtMTYzLDI0ICsxNjMsNDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5wT2Jq
ZWN0SW52b2tlRGVmYXVsdEhhbmRsZXIoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIAogc3Rh
dGljIHZvaWQgd2Vha1RlbXBsYXRlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiwg
dm9pZCogcGFyYW1ldGVyKTsKIAorY2xhc3MgVjhOUFRlbXBsYXRlTWFwCit7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPFByaXZhdGVJZGVudGlmaWVyKiwgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+ID4gTWFwVHlwZTsKKworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBnZXQoUHJpdmF0ZUlkZW50aWZpZXIqIGtleSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX21hcC5nZXQoa2V5KTsKKyAgICB9CisKKyAgICB2b2lkIHNldChQcml2YXRl
SWRlbnRpZmllcioga2V5LCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gd3Jh
cHBlcikKKyAgICB7CisgICAgICAgIG1fbWFwLnNldChrZXksIHdyYXBwZXIpOworICAgICAgICB3
cmFwcGVyLk1ha2VXZWFrKGtleSwgd2Vha1RlbXBsYXRlQ2FsbGJhY2spOworICAgIH0KKworICAg
IHZvaWQgcmVtb3ZlKFByaXZhdGVJZGVudGlmaWVyKiBrZXkpCisgICAgeworICAgICAgICBNYXBU
eXBlOjppdGVyYXRvciBpdCA9IG1fbWFwLmZpbmQoa2V5KTsKKyAgICAgICAgQVNTRVJUKGl0ICE9
IG1hcC5lbmQoKSk7CisgICAgICAgIGl0LT52YWx1ZS5EaXNwb3NlKCk7CisgICAgICAgIG1fbWFw
LnJlbW92ZShpdCk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1hcFR5cGUgbV9tYXA7Cit9Owor
CiAvLyBOUElkZW50aWZpZXIgaXMgUHJpdmF0ZUlkZW50aWZpZXIqLgotc3RhdGljIFdlYWtSZWZl
cmVuY2VNYXA8UHJpdmF0ZUlkZW50aWZpZXIsIHY4OjpGdW5jdGlvblRlbXBsYXRlPiYgc3RhdGlj
VGVtcGxhdGVNYXAoKQorc3RhdGljIFY4TlBUZW1wbGF0ZU1hcCYgc3RhdGljVGVtcGxhdGVNYXAo
KQogewotICAgIHR5cGVkZWYgV2Vha1JlZmVyZW5jZU1hcDxQcml2YXRlSWRlbnRpZmllciwgdjg6
OkZ1bmN0aW9uVGVtcGxhdGU+IE1hcFR5cGU7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChNYXBU
eXBlLCB0ZW1wbGF0ZU1hcCwgKCZ3ZWFrVGVtcGxhdGVDYWxsYmFjaykpOwotICAgIHJldHVybiB0
ZW1wbGF0ZU1hcDsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFY4TlBUZW1wbGF0ZU1hcCwgbWFw
LCAoKSk7CisgICAgcmV0dXJuIG1hcDsKIH0KIAotc3RhdGljIHZvaWQgd2Vha1RlbXBsYXRlQ2Fs
bGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3QsIHZvaWQqIHBhcmFtZXRlcikK
K3N0YXRpYyB2b2lkIHdlYWtUZW1wbGF0ZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1
ZT4gb2JqZWN0LCB2b2lkKiBjb250ZXh0KQogewotICAgIFByaXZhdGVJZGVudGlmaWVyKiBpZGVu
dGlmaWVyID0gc3RhdGljX2Nhc3Q8UHJpdmF0ZUlkZW50aWZpZXIqPihwYXJhbWV0ZXIpOwotICAg
IEFTU0VSVChpZGVudGlmaWVyKTsKLSAgICBBU1NFUlQoc3RhdGljVGVtcGxhdGVNYXAoKS5jb250
YWlucyhpZGVudGlmaWVyKSk7Ci0KLSAgICBzdGF0aWNUZW1wbGF0ZU1hcCgpLmZvcmdldChpZGVu
dGlmaWVyKTsKKyAgICBQcml2YXRlSWRlbnRpZmllciogaWRlbnRpZmllciA9IHN0YXRpY19jYXN0
PFByaXZhdGVJZGVudGlmaWVyKj4oY29udGV4dCk7CisgICAgc3RhdGljVGVtcGxhdGVNYXAoKS5y
ZW1vdmUoaWRlbnRpZmllcik7CiB9CiAKLQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBu
cE9iamVjdEdldFByb3BlcnR5KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBzZWxmLCBOUElkZW50aWZp
ZXIgaWRlbnRpZmllciwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4ga2V5LCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKIHsKICAgICBOUE9iamVjdCogbnBPYmplY3QgPSB2OE9iamVjdFRvTlBPYmplY3Qoc2Vs
Zik7CkBAIC0zNTcsMjcgKzM4MCwyOSBAQCB2ODo6SGFuZGxlPHY4OjpBcnJheT4gbnBPYmplY3RJ
bmRleGVkUHJvcGVydHlFbnVtZXJhdG9yKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mCiAKIHN0YXRp
YyB2b2lkIHdlYWtOUE9iamVjdENhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4sIHZv
aWQqIHBhcmFtZXRlcik7CiAKLXN0YXRpYyBET01XcmFwcGVyTWFwPE5QT2JqZWN0PiYgc3RhdGlj
TlBPYmplY3RNYXAoKQorc3RhdGljIERPTVdyYXBwZXJIYXNoTWFwPE5QT2JqZWN0PiYgc3RhdGlj
TlBPYmplY3RNYXAoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRE9NV3JhcHBlck1hcDxO
UE9iamVjdD4sIG5wT2JqZWN0TWFwLCAoJndlYWtOUE9iamVjdENhbGxiYWNrKSk7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChET01XcmFwcGVySGFzaE1hcDxOUE9iamVjdD4sIG5wT2JqZWN0TWFw
LCAoJndlYWtOUE9iamVjdENhbGxiYWNrKSk7CiAgICAgcmV0dXJuIG5wT2JqZWN0TWFwOwogfQog
Ci1zdGF0aWMgdm9pZCB3ZWFrTlBPYmplY3RDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFs
dWU+IG9iamVjdCwgdm9pZCogcGFyYW1ldGVyKQorc3RhdGljIHZvaWQgd2Vha05QT2JqZWN0Q2Fs
bGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2YWx1ZSwgdm9pZCogcGFyYW1ldGVyKQog
eworICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6
Ok9iamVjdD4gd3JhcHBlciA9IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVl
KTsKICAgICBOUE9iamVjdCogbnBPYmplY3QgPSBzdGF0aWNfY2FzdDxOUE9iamVjdCo+KHBhcmFt
ZXRlcik7Ci0gICAgQVNTRVJUKHN0YXRpY05QT2JqZWN0TWFwKCkuY29udGFpbnMobnBPYmplY3Qp
KTsKKwogICAgIEFTU0VSVChucE9iamVjdCk7CisgICAgQVNTRVJUKCFzdGF0aWNOUE9iamVjdE1h
cCgpLmdldChucE9iamVjdCkuSXNFbXB0eSgpKTsKIAogICAgIC8vIE11c3QgcmVtb3ZlIGZyb20g
b3VyIG1hcCBiZWZvcmUgY2FsbGluZyBfTlBOX1JlbGVhc2VPYmplY3QoKS4gX05QTl9SZWxlYXNl
T2JqZWN0IGNhbiBjYWxsIEZvcmdldFY4T2JqZWN0Rm9yTlBPYmplY3QsIHdoaWNoCiAgICAgLy8g
dXNlcyB0aGUgdGFibGUgYXMgd2VsbC4KLSAgICBzdGF0aWNOUE9iamVjdE1hcCgpLmZvcmdldChu
cE9iamVjdCk7CisgICAgc3RhdGljTlBPYmplY3RNYXAoKS5yZW1vdmUobnBPYmplY3QsIHdyYXBw
ZXIpOwogCiAgICAgaWYgKF9OUE5fSXNBbGl2ZShucE9iamVjdCkpCiAgICAgICAgIF9OUE5fUmVs
ZWFzZU9iamVjdChucE9iamVjdCk7CiB9CiAKLQogdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNyZWF0
ZVY4T2JqZWN0Rm9yTlBPYmplY3QoTlBPYmplY3QqIG9iamVjdCwgTlBPYmplY3QqIHJvb3QpCiB7
CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBucE9iamVj
dERlc2M7CkBAIC0zOTEsOCArNDE2LDkgQEAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNyZWF0ZVY4
T2JqZWN0Rm9yTlBPYmplY3QoTlBPYmplY3QqIG9iamVjdCwgTlBPYmplY3QqIHJvb3QKICAgICB9
CiAKICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IHdyYXBwZWQgdGhpcyBvYmplY3QsIGp1c3QgcmV0
dXJuIGl0LgotICAgIGlmIChzdGF0aWNOUE9iamVjdE1hcCgpLmNvbnRhaW5zKG9iamVjdCkpCi0g
ICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD46Ok5ldyhzdGF0aWNOUE9iamVjdE1h
cCgpLmdldChvYmplY3QpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBz
dGF0aWNOUE9iamVjdE1hcCgpLmdldChvYmplY3QpOworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyKTsK
IAogICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgY3JlYXRlIGEgV3JhcHBlciB0eXBlIGFzIGEgc3Vi
Y2xhc3Mgb2YgSlNPYmplY3QuIEl0IGhhcyB0d28gaW50ZXJuYWwgZmllbGRzLCBmaWVsZCAwIGlz
IHRoZSB3cmFwcGVkCiAgICAgLy8gcG9pbnRlciwgYW5kIGZpZWxkIDEgaXMgdGhlIHR5cGUuIFRo
ZXJlIHNob3VsZCBiZSBhbiBhcGkgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHVudXNlZCB0eXBlIGlk
LiBUaGUgc2FtZSBXcmFwcGVyIHR5cGUKQEAgLTQyOCwxMSArNDU0LDExIEBAIHY4OjpMb2NhbDx2
ODo6T2JqZWN0PiBjcmVhdGVWOE9iamVjdEZvck5QT2JqZWN0KE5QT2JqZWN0KiBvYmplY3QsIE5Q
T2JqZWN0KiByb290CiAKIHZvaWQgZm9yZ2V0VjhPYmplY3RGb3JOUE9iamVjdChOUE9iamVjdCog
b2JqZWN0KQogewotICAgIGlmIChzdGF0aWNOUE9iamVjdE1hcCgpLmNvbnRhaW5zKG9iamVjdCkp
IHsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gc3RhdGljTlBPYmpl
Y3RNYXAoKS5nZXQob2JqZWN0KTsKKyAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKSB7CiAgICAg
ICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4gaGFuZGxlKHN0YXRpY05QT2JqZWN0TWFwKCkuZ2V0KG9iamVjdCkpOwotICAgICAgICBW
OERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoaGFuZGxlLCBucE9iamVjdFR5cGVJbmZvKCksIDAp
OwotICAgICAgICBzdGF0aWNOUE9iamVjdE1hcCgpLmZvcmdldChvYmplY3QpOworICAgICAgICBW
OERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIod3JhcHBlciwgbnBPYmplY3RUeXBlSW5mbygpLCAw
KTsKKyAgICAgICAgc3RhdGljTlBPYmplY3RNYXAoKS5yZW1vdmUob2JqZWN0LCB3cmFwcGVyKTsK
ICAgICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KG9iamVjdCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5l
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFdmVudExp
c3RlbmVyLmNwcAppbmRleCBkOWJiOTU1NDU0NDQ3ZDhmYjcwNTg5NTU5YTNhMDU5MDE3MWNjYzJl
Li43NGFhMDNjNTcwMzMzZjc5ZWJkYjhiNDZmMWRjMWZiZDUxYmNlZTY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFdmVudExp
c3RlbmVyLmNwcApAQCAtMTEwLDkgKzExMCw2IEBAIHY4OjpMb2NhbDx2ODo6VmFsdWU+IFY4V29y
a2VyQ29udGV4dEV2ZW50TGlzdGVuZXI6OmNhbGxMaXN0ZW5lckZ1bmN0aW9uKFNjcmlwdEV4CiAg
ICAgVjhSZWN1cnNpb25TY29wZSByZWN1cnNpb25TY29wZShjb250ZXh0KTsKICAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPiByZXN1bHQgPSBoYW5kbGVyRnVuY3Rpb24tPkNhbGwocmVjZWl2ZXIsIDEs
IHBhcmFtZXRlcnMpOwogCi0gICAgaWYgKFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogcHJv
eHkgPSB3b3JrZXJQcm94eShjb250ZXh0KSkKLSAgICAgICAgcHJveHktPnRyYWNrRXZlbnQoZXZl
bnQpOwotCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29v
a2llKTsKIAogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcAppbmRleCA5MzU0
YmIzYjJlYTlkMmNhMjcwMDEwYzc0YzRhYzE0MjM4YWRjOWRlLi40NDVkNGJlY2Y0NDhiZDJhOGQ4
ODA4NjdmOTRhMTdhMDQxM2UwN2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKQEAgLTk5LDE0ICs5
OSw2IEBAIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6fldvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eSgpCiAKIHZvaWQgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpkaXNwb3NlKCkK
IHsKLSAgICAvLyBEZXRhY2ggYWxsIGV2ZW50cyBmcm9tIHRoZWlyIEpTIHdyYXBwZXJzLgotICAg
IGZvciAoc2l6ZV90IGV2ZW50SW5kZXggPSAwOyBldmVudEluZGV4IDwgbV9ldmVudHMuc2l6ZSgp
OyArK2V2ZW50SW5kZXgpIHsKLSAgICAgICAgRXZlbnQqIGV2ZW50ID0gbV9ldmVudHNbZXZlbnRJ
bmRleF07Ci0gICAgICAgIGlmIChmb3JnZXRWOEV2ZW50T2JqZWN0KGV2ZW50KSkKLSAgICAgICAg
ICBldmVudC0+ZGVyZWYoKTsKLSAgICB9Ci0gICAgbV9ldmVudHMuY2xlYXIoKTsKLQogICAgIG1f
cGVyQ29udGV4dERhdGEuY2xlYXIoKTsKIAogICAgIC8vIERpc3Bvc2UgdGhlIGNvbnRleHQuCkBA
IC0xOTUsMTUgKzE4Nyw2IEBAIGJvb2wgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojppbml0
aWFsaXplSWZOZWVkZWQoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdvcmtlckNvbnRl
eHRFeGVjdXRpb25Qcm94eTo6Zm9yZ2V0VjhFdmVudE9iamVjdChFdmVudCogZXZlbnQpCi17Ci0g
ICAgaWYgKGdldERPTU9iamVjdE1hcCgpLmNvbnRhaW5zKGV2ZW50KSkgewotICAgICAgICBnZXRE
T01PYmplY3RNYXAoKS5mb3JnZXQoZXZlbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBTY3JpcHRWYWx1ZSBXb3JrZXJDb250ZXh0RXhlY3V0
aW9uUHJveHk6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZp
bGVOYW1lLCBjb25zdCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24sIFdvcmtlckNv
bnRleHRFeGVjdXRpb25TdGF0ZSogc3RhdGUpCiB7CiAgICAgVjhHQ0NvbnRyb2xsZXI6OmNoZWNr
TWVtb3J5VXNhZ2UoKTsKQEAgLTI1OCwxMSArMjQxLDYgQEAgdm9pZCBXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHk6OnNldEV2YWxBbGxvd2VkKGJvb2wgZW5hYmxlLCBjb25zdCBTdHJpbmcmIGVy
cm8KICAgICBtX2Rpc2FibGVFdmFsUGVuZGluZyA9IGVuYWJsZSA/IFN0cmluZygpIDogZXJyb3JN
ZXNzYWdlOwogfQogCi12b2lkIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6dHJhY2tFdmVu
dChFdmVudCogZXZlbnQpCi17Ci0gICAgbV9ldmVudHMuYXBwZW5kKGV2ZW50KTsKLX0KLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHkuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eS5oCmluZGV4IDRjMDI0ZDAyZGE1MDAwM2ZjMzgyNzcyNzU3OGI5ZTgwMGEzMjhjNjkuLmI4
YTZkZTc0NzhmZGFmNTM0N2Y5ZDNlZGNiOGYxMmE4MDRiMDkxYzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5o
CkBAIC02MywxMSArNjMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFdvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eShXb3JrZXJDb250ZXh0Kik7CiAgICAgICAgIH5Xb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHkoKTsKIAotICAgICAgICAvLyBUcmFjayB0aGUgZXZlbnQgc28gdGhh
dCB3ZSBjYW4gZGV0YWNoIGl0IGZyb20gdGhlIEpTIHdyYXBwZXIgd2hlbiBhIHdvcmtlcgotICAg
ICAgICAvLyB0ZXJtaW5hdGVzLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHdlIG5lZWQgdG8gYmUg
YWJsZSB0byBkaXNwb3NlIHRoZXNlCi0gICAgICAgIC8vIGV2ZW50cyBhbmQgcmVsZWFzZXMgcmVm
ZXJlbmNlcyB0byB0aGVpciBldmVudCB0YXJnZXRzOiBXb3JrZXJDb250ZXh0LgotICAgICAgICB2
b2lkIHRyYWNrRXZlbnQoRXZlbnQqKTsKLQogICAgICAgICAvLyBBbG93IHVzZSBvZiBldmFsKCkg
YW5kIGlzIGVxdWl2YWxlbnRzIGluIHNjcmlwdHMuCiAgICAgICAgIHZvaWQgc2V0RXZhbEFsbG93
ZWQoYm9vbCBlbmFibGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIApAQCAtODIsOCAr
NzcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaW5pdGlhbGl6ZUlmTmVl
ZGVkKCk7CiAgICAgICAgIHZvaWQgZGlzcG9zZSgpOwogCi0gICAgICAgIHN0YXRpYyBib29sIGZv
cmdldFY4RXZlbnRPYmplY3QoRXZlbnQqKTsKLQogICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtX
b3JrZXJNYXhTdGFja1NpemUgPSA1MDAgKiAxMDI0OwogCiAgICAgICAgIFdvcmtlckNvbnRleHQq
IG1fd29ya2VyQ29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1dyYXBwZXJUeXBlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV3JhcHBlclR5
cGVJbmZvLmgKaW5kZXggYTRiZDQ5OThkZGQ2ZTYxNGZmN2YwMDVhNWU3MTM4MDdjNzQ1MjQxYi4u
M2EyZGFkNWU3ZmQxMzcwNGNkN2MyODZhODA3MjY2YzY5Y2EwNzlhZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmgKQEAgLTExNiw2ICsxMTYsMTkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBXcmFwcGVyVHlwZUluZm8qIHBhcmVu
dENsYXNzOwogICAgICAgICBjb25zdCBXcmFwcGVyVHlwZVByb3RvdHlwZSB3cmFwcGVyVHlwZVBy
b3RvdHlwZTsKICAgICB9OworCisgICAgaW5saW5lIHZvaWQqIHRvTmF0aXZlKHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gb2JqZWN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9iamVjdC0+SW50ZXJu
YWxGaWVsZENvdW50KCkgPj0gdjhET01XcmFwcGVyT2JqZWN0SW5kZXgpOworICAgICAgICByZXR1
cm4gb2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0
SW5kZXgpOworICAgIH0KKworICAgIGlubGluZSBXcmFwcGVyVHlwZUluZm8qIHRvV3JhcHBlclR5
cGVJbmZvKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG9iamVjdC0+SW50ZXJuYWxGaWVsZENvdW50KCkgPj0gdjhET01XcmFwcGVyVHlwZUluZGV4
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdyYXBwZXJUeXBlSW5mbyo+KG9iamVjdC0+
R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlclR5cGVJbmRleCkpOworICAg
IH0KKwogfQogCiAjZW5kaWYgLy8gV3JhcHBlclR5cGVJbmZvX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170460</attachid>
            <date>2012-10-24 13:28:35 -0700</date>
            <delta_ts>2012-10-24 13:47:02 -0700</delta_ts>
            <desc>Almost works</desc>
            <filename>bug-100175-20121024132710.patch</filename>
            <type>text/plain</type>
            <size>44254</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZjY2NWY3MTBi
ZmI1NTljZjYxZmZkMTJjZjQ3MDE2NmM1OWU2MTc4MS4uM2Y0OTRmOTY1OWRlMGZmOTY4NmQ0NTA1
NTdlZTliZWJjNTczMTczZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjIzMiw2ICsyMjMyLDcgQEAK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvRE9NVHJhbnNhY3Rpb24uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92
OC9ET01UcmFuc2FjdGlvbi5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01XcmFwcGVy
TWFwLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5oJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9EYXRlRXh0ZW5zaW9uLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0RPTURhdGEuY3BwCmluZGV4IGRhNmVhNWIxYWU4YTlhNGJlZjc5ZDI5MWJmMGM4YzY0ZjkwYWFm
ZjkuLjE4NjQxZWM4ZGFiOWUxNjcxODNjZTcyOTY3NmEyYjBjMzUzZWYyZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0RPTURhdGEuY3BwCkBAIC01MSwxMSArNTEsNCBAQCBET01EYXRhU3Rv
cmUmIERPTURhdGE6OmdldEN1cnJlbnRTdG9yZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKICAgICBy
ZXR1cm4gZGVmYXVsdFN0b3JlOwogfQogCi12b2lkIERPTURhdGE6OmRlcmVmT2JqZWN0KFdyYXBw
ZXJUeXBlSW5mbyogdHlwZSwgdm9pZCogZG9tT2JqZWN0KQotewotICAgIHR5cGUtPmRlcmVmT2Jq
ZWN0KGRvbU9iamVjdCk7Ci19Ci0KLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmggYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9ET01EYXRhLmgKaW5kZXggN2RmOWRmZGJhOWUyOGFlMWVkNGY1NDM4MDU0
NjA0NmU1NjA5NmRkYi4uMzU1NGY3MjY3M2FlM2JiY2M5OGVkOTI2OTMwM2ZiZjY0YzI1ZDFlZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGEuaApAQCAtNDYsNjIgKzQ2LDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLwogICAgIGNsYXNzIERPTURhdGEgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgc3RhdGljIHZvaWQgaGFu
ZGxlV2Vha09iamVjdChET01EYXRhU3RvcmU6OkRPTVdyYXBwZXJNYXBUeXBlLCB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiwgVCogZG9tT2JqZWN0KTsKLQotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgICAgICBzdGF0aWMgdm9pZCByZW1vdmVPYmplY3RzRnJvbVdyYXBwZXJNYXAo
RE9NRGF0YVN0b3JlKiBzdG9yZSwgQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwPFQsIHY4OjpPYmpl
Y3Q+JiBkb21NYXApOwotCi0KICAgICAgICAgc3RhdGljIERPTURhdGFTdG9yZSYgZ2V0Q3VycmVu
dFN0b3JlKHY4OjpJc29sYXRlKiA9IDApOwogICAgIHByaXZhdGU6CiAgICAgICAgIERPTURhdGEo
KTsKLSAgICAgICAgc3RhdGljIHZvaWQgZGVyZWZPYmplY3QoV3JhcHBlclR5cGVJbmZvKiB0eXBl
LCB2b2lkKiBkb21PYmplY3QpOwotCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
ICAgIGNsYXNzIFdyYXBwZXJNYXBPYmplY3RSZW1vdmVyIDogcHVibGljIFdlYWtSZWZlcmVuY2VN
YXA8VCwgdjg6Ok9iamVjdD46OlZpc2l0b3IgewotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUsIFQqIGRv
bU9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gdjhPYmplY3QpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlID0gVjhET01XcmFwcGVy
Ojpkb21XcmFwcGVyVHlwZSh2OE9iamVjdCk7Ci0gICAgICAgICAgICAgICAgZGVyZWZPYmplY3Qo
dHlwZSwgZG9tT2JqZWN0KTsKLSAgICAgICAgICAgICAgICB2OE9iamVjdC5EaXNwb3NlKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH07CiAgICAgfTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci0gICAgdm9pZCBET01EYXRhOjpoYW5kbGVXZWFrT2JqZWN0KERPTURhdGFTdG9yZTo6RE9N
V3JhcHBlck1hcFR5cGUgbWFwVHlwZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gdjhPYmpl
Y3QsIFQqIGRvbU9iamVjdCkKLSAgICB7Ci0gICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZSA9
IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUodjhPYmplY3QpOwotICAgICAgICBET01EYXRh
TGlzdCYgbGlzdCA9IERPTURhdGFTdG9yZTo6YWxsU3RvcmVzKCk7Ci0gICAgICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBET01EYXRhU3RvcmUqIHN0b3JlID0gbGlzdFtpXTsKLQotICAg
ICAgICAgICAgRE9NV3JhcHBlck1hcDxUPiogZG9tTWFwID0gc3RhdGljX2Nhc3Q8RE9NV3JhcHBl
ck1hcDxUPio+KHN0b3JlLT5nZXRET01XcmFwcGVyTWFwKG1hcFR5cGUpKTsKLSAgICAgICAgICAg
IGlmIChkb21NYXAtPnJlbW92ZUlmUHJlc2VudChkb21PYmplY3QsIHY4T2JqZWN0KSkgewotICAg
ICAgICAgICAgICAgIGRlcmVmT2JqZWN0KHR5cGUsIGRvbU9iamVjdCk7Ci0gICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
SWYgbm90IGZvdW5kLCBpdCBtZWFucyBtYXAgZm9yIHRoZSB3cmFwcGVyIGhhcyBiZWVuIGFscmVh
ZHkgZGVzdHJveWVkLCBqdXN0IGRpc3Bvc2UgdGhlCi0gICAgICAgIC8vIGhhbmRsZSBhbmQgZGVy
ZWYgdGhlIG9iamVjdCB0byBmaWdodCBtZW1vcnkgbGVhay4KLSAgICAgICAgaWYgKCFmb3VuZCkg
ewotICAgICAgICAgICAgdjhPYmplY3QuRGlzcG9zZSgpOwotICAgICAgICAgICAgZGVyZWZPYmpl
Y3QodHlwZSwgZG9tT2JqZWN0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgdm9pZCBET01EYXRhOjpyZW1vdmVPYmplY3RzRnJvbVdyYXBwZXJNYXAo
RE9NRGF0YVN0b3JlKiBzdG9yZSwgQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwPFQsIHY4OjpPYmpl
Y3Q+JiBkb21NYXApCi0gICAgewotICAgICAgICBXcmFwcGVyTWFwT2JqZWN0UmVtb3ZlcjxUPiBy
ZW1vdmVyOwotICAgICAgICBkb21NYXAudmlzaXQoc3RvcmUsICZyZW1vdmVyKTsKLSAgICAgICAg
ZG9tTWFwLmNsZWFyKCk7Ci0gICAgfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBET01EYXRhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RP
TURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUu
Y3BwCmluZGV4IGRjMDg5NmNmM2I3MDIwN2ZmZjcxMzFkZTcxOGIyMWZiN2Q5ZjIxZjMuLmMyMTI3
NDhhOGI0NmM2MmVkOWE3MTI3Zjc0ZGYxOTBkNGI4OWRhYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcApAQCAtMTI4LDQ0ICsxMjgsNCBAQCB2b2lkIERP
TURhdGFTdG9yZTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2Jq
ZWN0SW5mbykgY29uc3QKICAgICBpbmZvLmFkZFdlYWtQb2ludGVyKG1fYWN0aXZlRG9tT2JqZWN0
TWFwKTsKIH0KIAotLy8gQ2FsbGVkIHdoZW4gdGhlIG9iamVjdCBpcyBuZWFyIGRlYXRoIChub3Qg
cmVhY2hhYmxlIGZyb20gSlMgcm9vdHMpLgotLy8gSXQgaXMgdGltZSB0byByZW1vdmUgdGhlIGVu
dHJ5IGZyb20gdGhlIHRhYmxlIGFuZCBkaXNwb3NlIHRoZSBoYW5kbGUuCi12b2lkIERPTURhdGFT
dG9yZTo6d2Vha0RPTU9iamVjdENhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdjhP
YmplY3QsIHZvaWQqIGRvbU9iamVjdCkKLXsKLSAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7Ci0g
ICAgQVNTRVJUKHY4T2JqZWN0LT5Jc09iamVjdCgpKTsKLSAgICBET01EYXRhOjpoYW5kbGVXZWFr
T2JqZWN0KERPTURhdGFTdG9yZTo6RE9NT2JqZWN0TWFwLCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0Pjo6Q2FzdCh2OE9iamVjdCksIGRvbU9iamVjdCk7Ci19Ci0KLXZvaWQgRE9NRGF0YVN0b3Jl
Ojp3ZWFrQWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2
OE9iamVjdCwgdm9pZCogZG9tT2JqZWN0KQotewotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsK
LSAgICBBU1NFUlQodjhPYmplY3QtPklzT2JqZWN0KCkpOwotICAgIERPTURhdGE6OmhhbmRsZVdl
YWtPYmplY3QoRE9NRGF0YVN0b3JlOjpBY3RpdmVET01PYmplY3RNYXAsIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+OjpDYXN0KHY4T2JqZWN0KSwgZG9tT2JqZWN0KTsKLX0KLQotdm9pZCBET01E
YXRhU3RvcmU6OndlYWtOb2RlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2YWx1
ZSwgdm9pZCogZG9tT2JqZWN0KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAg
ICBOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8Tm9kZSo+KGRvbU9iamVjdCk7Ci0gICAgLy8gTm9k
ZSB3cmFwcGVycyBtdXN0IGJlIEpTIG9iamVjdHMuCi0gICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4gdjhPYmplY3QgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSk7
Ci0KLSAgICBET01EYXRhTGlzdCYgbGlzdCA9IERPTURhdGFTdG9yZTo6YWxsU3RvcmVzKCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIERP
TURhdGFTdG9yZSogc3RvcmUgPSBsaXN0W2ldOwotICAgICAgICBET01Ob2RlTWFwcGluZyYgbm9k
ZU1hcCA9IG5vZGUtPmlzQWN0aXZlTm9kZSgpID8gc3RvcmUtPmFjdGl2ZURvbU5vZGVNYXAoKSA6
IHN0b3JlLT5kb21Ob2RlTWFwKCk7Ci0gICAgICAgIGlmIChub2RlTWFwLnJlbW92ZUlmUHJlc2Vu
dChub2RlLCB2OE9iamVjdCkpIHsKLSAgICAgICAgICAgIG5vZGUtPmRlcmVmKCk7IC8vIE5vYm9k
eSBvdmVycmlkZXMgTm9kZTo6ZGVyZWYgc28gaXQncyBzYWZlCi0gICAgICAgICAgICByZXR1cm47
IC8vIFRoZXJlIG1pZ2h0IGJlIGF0IG1vc3Qgb25lIHdyYXBwZXIgZm9yIHRoZSBub2RlIGluIHdv
cmxkJ3MgbWFwcwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgbm90IGZvdW5kLCBpdCBt
ZWFucyBtYXAgZm9yIHRoZSB3cmFwcGVyIGhhcyBiZWVuIGFscmVhZHkgZGVzdHJveWVkLCBqdXN0
IGRpc3Bvc2UgdGhlCi0gICAgLy8gaGFuZGxlIGFuZCBkZXJlZiB0aGUgb2JqZWN0IHRvIGZpZ2h0
IG1lbW9yeSBsZWFrLgotICAgIHY4T2JqZWN0LkRpc3Bvc2UoKTsKLSAgICBub2RlLT5kZXJlZigp
OyAvLyBOb2JvZHkgb3ZlcnJpZGVzIE5vZGU6OmRlcmVmIHNvIGl0J3Mgc2FmZQotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9ET01EYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9y
ZS5oCmluZGV4IDM3NzE2NzU0OGY3YzVmZTg2YzQ4M2MwNzU2YWE4NTg3NGRiOWMzNmMuLmU2NzZm
ZTBjNDMwYmM0YzhhNGE1OTQ3MmRjNzRlZGQwYzJiZjRkM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oCkBAIC0zMSw4ICszMSw4IEBACiAjaWZuZGVmIERPTURh
dGFTdG9yZV9oCiAjZGVmaW5lIERPTURhdGFTdG9yZV9oCiAKLSNpbmNsdWRlICJWOERPTU1hcC5o
IgotCisjaW5jbHVkZSAiRE9NV3JhcHBlck1hcC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNs
dWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KQEAgLTcyLDI3ICs3MiwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IERPTURhdGFTdG9yZSgpOwogICAgICAgICB2aXJ0dWFsIH5ET01EYXRhU3RvcmUoKTsKIAotICAg
ICAgICAvLyBBIGxpc3Qgb2YgYWxsIERPTURhdGFTdG9yZSBvYmplY3RzIGluIHRoZSBjdXJyZW50
IFY4IGluc3RhbmNlICh0aHJlYWQpLiBOb3JtYWxseSwgZWFjaCBXb3JsZCBoYXMgYSBET01EYXRh
U3RvcmUuCisgICAgICAgIC8vIEEgbGlzdCBvZiBhbGwgRE9NRGF0YVN0b3JlIG9iamVjdHMgaW4g
dGhlIGN1cnJlbnQgVjggaXNvbGF0ZS4gTm9ybWFsbHksIGVhY2ggV29ybGQgaGFzIGEgRE9NRGF0
YVN0b3JlLgogICAgICAgICBzdGF0aWMgRE9NRGF0YUxpc3QmIGFsbFN0b3JlcygpOwogCiAgICAg
ICAgIHZvaWQqIGdldERPTVdyYXBwZXJNYXAoRE9NV3JhcHBlck1hcFR5cGUpOwogCi0gICAgICAg
IERPTU5vZGVNYXBwaW5nJiBkb21Ob2RlTWFwKCkgeyByZXR1cm4gKm1fZG9tTm9kZU1hcDsgfQot
ICAgICAgICBET01Ob2RlTWFwcGluZyYgYWN0aXZlRG9tTm9kZU1hcCgpIHsgcmV0dXJuICptX2Fj
dGl2ZURvbU5vZGVNYXA7IH0KKyAgICAgICAgRE9NV3JhcHBlck1hcDxOb2RlPiYgZG9tTm9kZU1h
cCgpIHsgcmV0dXJuICptX2RvbU5vZGVNYXA7IH0KKyAgICAgICAgRE9NV3JhcHBlck1hcDxOb2Rl
PiYgYWN0aXZlRG9tTm9kZU1hcCgpIHsgcmV0dXJuICptX2FjdGl2ZURvbU5vZGVNYXA7IH0KICAg
ICAgICAgRE9NV3JhcHBlck1hcDx2b2lkPiYgZG9tT2JqZWN0TWFwKCkgeyByZXR1cm4gKm1fZG9t
T2JqZWN0TWFwOyB9CiAgICAgICAgIERPTVdyYXBwZXJNYXA8dm9pZD4mIGFjdGl2ZURvbU9iamVj
dE1hcCgpIHsgcmV0dXJuICptX2FjdGl2ZURvbU9iamVjdE1hcDsgfQogCi0gICAgICAgIC8vIE5l
ZWQgYnkgVjhHQ0NvbnRyb2xsZXIuCi0gICAgICAgIHN0YXRpYyB2b2lkIHdlYWtBY3RpdmVET01P
YmplY3RDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4T2JqZWN0LCB2b2lkKiBk
b21PYmplY3QpOwotICAgICAgICBzdGF0aWMgdm9pZCB3ZWFrTm9kZUNhbGxiYWNrKHY4OjpQZXJz
aXN0ZW50PHY4OjpWYWx1ZT4gdjhPYmplY3QsIHZvaWQqIGRvbU9iamVjdCk7Ci0KICAgICAgICAg
dmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsK
IAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3RhdGljIHZvaWQgd2Vha0RPTU9iamVjdENhbGxi
YWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdjhPYmplY3QsIHZvaWQqIGRvbU9iamVjdCk7
Ci0KLSAgICAgICAgRE9NTm9kZU1hcHBpbmcqIG1fZG9tTm9kZU1hcDsKLSAgICAgICAgRE9NTm9k
ZU1hcHBpbmcqIG1fYWN0aXZlRG9tTm9kZU1hcDsKKyAgICAgICAgRE9NV3JhcHBlck1hcDxOb2Rl
PiogbV9kb21Ob2RlTWFwOworICAgICAgICBET01XcmFwcGVyTWFwPE5vZGU+KiBtX2FjdGl2ZURv
bU5vZGVNYXA7CiAgICAgICAgIERPTVdyYXBwZXJNYXA8dm9pZD4qIG1fZG9tT2JqZWN0TWFwOwog
ICAgICAgICBET01XcmFwcGVyTWFwPHZvaWQ+KiBtX2FjdGl2ZURvbU9iamVjdE1hcDsKICAgICB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlck1hcC5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlck1hcC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjIwZmNlYTBhYjcyZTM4YzZkM2I3NmNlY2ZhMzJjOTVlM2JiM2Y5MzQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyTWFwLmgKQEAgLTAsMCAr
MSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIERPTVdyYXBwZXJNYXBfaAorI2RlZmluZSBET01XcmFwcGVyTWFwX2gK
KworI2luY2x1ZGUgIldlYkNvcmVNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJX
cmFwcGVyVHlwZUluZm8uaCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hNYXAuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBET01EYXRhU3RvcmU7CisKK3RlbXBsYXRlPGNsYXNz
IEtleVR5cGU+CitjbGFzcyBET01XcmFwcGVyVmlzaXRvciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqIHN0b3JlLCBLZXlUeXBlKiBrZXks
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgfkRP
TVdyYXBwZXJWaXNpdG9yKCkgeyB9Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBLZXlUeXBlPgorY2xh
c3MgRE9NV3JhcHBlck1hcCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RE9NV3JhcHBlck1hcCgp
IHsgfQorCisgICAgdmlydHVhbCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBnZXQoS2V5VHlw
ZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0KEtleVR5cGUqLCB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0PikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChET01EYXRhU3RvcmUqLCBE
T01XcmFwcGVyVmlzaXRvcjxLZXlUeXBlPiopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIo
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0
SW5mbyopIGNvbnN0ID0gMDsKK307CisKK3RlbXBsYXRlPGNsYXNzIEtleVR5cGU+CitjbGFzcyBE
T01XcmFwcGVySGFzaE1hcCA6IHB1YmxpYyBET01XcmFwcGVyTWFwPEtleVR5cGU+IHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIEhhc2hNYXA8S2V5VHlwZSosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+ID4gTWFwVHlwZTsKKworICAgIGV4cGxpY2l0IERPTVdyYXBwZXJIYXNoTWFwKHY4OjpXZWFr
UmVmZXJlbmNlQ2FsbGJhY2sgY2FsbGJhY2sgPSAwKQorICAgICAgICA6IG1fY2FsbGJhY2soY2Fs
bGJhY2spCisgICAgeworICAgICAgICBpZiAoIW1fY2FsbGJhY2spCisgICAgICAgICAgICBtX2Nh
bGxiYWNrID0gJmRlZmF1bHRXZWFrQ2FsbGJhY2s7CisgICAgfQorCisgICAgdmlydHVhbCB2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBnZXQoS2V5VHlwZSoga2V5KSBPVkVSUklERQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fbWFwLmdldChrZXkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBzZXQoS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKSBP
VkVSUklERQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX21hcC5jb250YWlucyhrZXkpKTsKKyAg
ICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PEtleVR5cGUqPih0b05hdGl2ZSh3cmFwcGVyKSkgPT0g
a2V5KTsKKyAgICAgICAgd3JhcHBlci5NYWtlV2Vhayh0aGlzLCBtX2NhbGxiYWNrKTsKKyAgICAg
ICAgbV9tYXAuc2V0KGtleSwgd3JhcHBlcik7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHZp
c2l0KERPTURhdGFTdG9yZSogc3RvcmUsIERPTVdyYXBwZXJWaXNpdG9yPEtleVR5cGU+KiB2aXNp
dG9yKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgZm9yICh0eXBlbmFtZSBNYXBUeXBlOjppdGVy
YXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KQorICAgICAg
ICAgICAgdmlzaXRvci0+dmlzaXRET01XcmFwcGVyKHN0b3JlLCBpdC0+a2V5LCBpdC0+dmFsdWUp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpIE9WRVJSSURFCisgICAgeworICAg
ICAgICBmb3IgKHR5cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsg
aXQgIT0gbV9tYXAuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+IHdyYXBwZXIgPSBpdC0+dmFsdWU7CisgICAgICAgICAgICB0b1dyYXBwZXJUeXBl
SW5mbyh3cmFwcGVyKS0+ZGVyZWZPYmplY3QoaXQtPmtleSk7CisgICAgICAgICAgICB3cmFwcGVy
LkRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBtX21hcC5jbGVhcigpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1v
cnlPYmplY3RJbmZvKSBjb25zdCBPVkVSUklERQorICAgIHsKKyAgICAgICAgTWVtb3J5Q2xhc3NJ
bmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpCaW5k
aW5nKTsKKyAgICAgICAgaW5mby5hZGRNZW1iZXIobV9tYXApOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmUoS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3
cmFwcGVyKQorICAgIHsKKyAgICAgICAgdHlwZW5hbWUgTWFwVHlwZTo6aXRlcmF0b3IgaXQgPSBt
X21hcC5maW5kKGtleSk7CisgICAgICAgIEFTU0VSVChpdCAhPSBtX21hcC5lbmQoKSk7CisgICAg
ICAgIEFTU0VSVChpdC0+dmFsdWUgPT0gd3JhcHBlcik7CisgICAgICAgIG1fbWFwLnJlbW92ZShp
dCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGRlZmF1bHRXZWFrQ2FsbGJh
Y2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2YWx1ZSwgdm9pZCogY29udGV4dCkKKyAgICB7
CisgICAgICAgIERPTVdyYXBwZXJIYXNoTWFwPEtleVR5cGU+KiBtYXAgPSBzdGF0aWNfY2FzdDxE
T01XcmFwcGVySGFzaE1hcDxLZXlUeXBlPio+KGNvbnRleHQpOworICAgICAgICBBU1NFUlQodmFs
dWUtPklzT2JqZWN0KCkpOworICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFw
cGVyID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpOworICAgICAgICBX
cmFwcGVyVHlwZUluZm8qIHR5cGUgPSB0b1dyYXBwZXJUeXBlSW5mbyh3cmFwcGVyKTsKKyAgICAg
ICAgS2V5VHlwZSoga2V5ID0gc3RhdGljX2Nhc3Q8S2V5VHlwZSo+KHRvTmF0aXZlKHdyYXBwZXIp
KTsKKworICAgICAgICBtYXAtPnJlbW92ZShrZXksIHdyYXBwZXIpOworICAgICAgICB3cmFwcGVy
LkRpc3Bvc2UoKTsKKyAgICAgICAgdHlwZS0+ZGVyZWZPYmplY3Qoa2V5KTsKKyAgICB9CisKKyAg
ICB2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIG1fY2FsbGJhY2s7CisgICAgTWFwVHlwZSBtX21h
cDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERPTVdyYXBwZXJN
YXBfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldv
cmxkLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaAppbmRl
eCBhZGYxMjRlYzI3NWI4ODk5OThiMjdlNGE3NzBiZTViZDg4OTU2YWQ1Li41ZmM5NzE2M2JlNGVj
NTk2MGJiN2EzMzZmZjJlYTVhYjJiMTZlMTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9ET01XcmFwcGVyV29ybGQuaApAQCAtMzEsOCArMzEsOCBAQAogI2lmbmRlZiBET01XcmFw
cGVyV29ybGRfaAogI2RlZmluZSBET01XcmFwcGVyV29ybGRfaAogCi0jaW5jbHVkZSAiRE9NRGF0
YVN0b3JlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJWOERPTU1h
cC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9JbnRydXNpdmVET01XcmFwcGVyTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9JbnRydXNpdmVET01XcmFwcGVyTWFwLmgKaW5kZXggZDY2Yzc2MTZjZWVkOTM1
NDRiODM3ODJhY2I3NGRkNzQxODZlNzIwMC4uNjA5Y2ZjNzlkODY2N2Y1ZWYxMThkZGY2ZGE2YmY3
YTY4YTQ0NDFiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSW50cnVz
aXZlRE9NV3JhcHBlck1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0ludHJ1
c2l2ZURPTVdyYXBwZXJNYXAuaApAQCAtMzEsNzYgKzMxLDU5IEBACiAjaWZuZGVmIEludHJ1c2l2
ZURPTVdyYXBwZXJNYXBfaAogI2RlZmluZSBJbnRydXNpdmVET01XcmFwcGVyTWFwX2gKIAotI2lu
Y2x1ZGUgIkRPTURhdGFTdG9yZS5oIgotI2luY2x1ZGUgIlY4RE9NTWFwLmgiCi0jaW5jbHVkZSAi
VjhOb2RlLmgiCi0jaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgorI2lu
Y2x1ZGUgIkRPTVdyYXBwZXJNYXAuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBE
T01Ob2RlV3JhcHBlck1hcCA6IHB1YmxpYyBBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXA8Tm9kZSwg
djg6Ok9iamVjdD4geworY2xhc3MgRE9NTm9kZVdyYXBwZXJNYXAgOiBwdWJsaWMgRE9NV3JhcHBl
ck1hcDxOb2RlPiB7CiBwdWJsaWM6Ci0gICAgRE9NTm9kZVdyYXBwZXJNYXAodjg6OldlYWtSZWZl
cmVuY2VDYWxsYmFjayBjYWxsYmFjaykKLSAgICAgICAgOiBBYnN0cmFjdFdlYWtSZWZlcmVuY2VN
YXA8Tm9kZSwgdjg6Ok9iamVjdD4oY2FsbGJhY2spCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1
YWwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gZ2V0KE5vZGUqIG5vZGUpCisgICAgdmlydHVh
bCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBnZXQoTm9kZSogbm9kZSkgT1ZFUlJJREUKICAg
ICB7CiAgICAgICAgIHJldHVybiBub2RlLT53cmFwcGVyKCk7CiAgICAgfQogCi0gICAgdmlydHVh
bCB2b2lkIHNldChOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVy
KQorICAgIHZpcnR1YWwgdm9pZCBzZXQoTm9kZSogbm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4gd3JhcHBlcikgT1ZFUlJJREUKICAgICB7CiAgICAgICAgIEFTU0VSVChub2RlICYmIG5v
ZGUtPndyYXBwZXIoKS5Jc0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQod3JhcHBlci5XcmFwcGVy
Q2xhc3NJZCgpID09IHY4RE9NU3VidHJlZUNsYXNzSWQpOwogICAgICAgICBub2RlLT5zZXRXcmFw
cGVyKHdyYXBwZXIpOwotICAgICAgICB3cmFwcGVyLk1ha2VXZWFrKG5vZGUsIHdlYWtSZWZlcmVu
Y2VDYWxsYmFjaygpKTsKKyAgICAgICAgd3JhcHBlci5NYWtlV2Vhayhub2RlLCB3ZWFrQ2FsbGJh
Y2spOwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBjb250YWlucyhOb2RlKiBub2RlKQorICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChET01EYXRhU3RvcmUqIHN0b3JlLCBET01XcmFwcGVyVmlzaXRv
cjxOb2RlPiogdmlzaXRvcikgT1ZFUlJJREUKICAgICB7Ci0gICAgICAgIHJldHVybiAhbm9kZS0+
d3JhcHBlcigpLklzRW1wdHkoKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQogCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KERPTURhdGFTdG9yZSogc3RvcmUsIFZpc2l0b3Iq
IHZpc2l0b3IpCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgT1ZFUlJJREUKICAgICB7CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCByZW1v
dmVJZlByZXNlbnQoTm9kZSogbm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gdmFsdWUp
CisgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1l
bW9yeU9iamVjdEluZm8pIGNvbnN0IE9WRVJSSURFCiAgICAgewotICAgICAgICBBU1NFUlQobm9k
ZSk7Ci0gICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBub2RlLT53
cmFwcGVyKCk7Ci0gICAgICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHdyYXBwZXIgIT0gdmFsdWUpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIG5vZGUtPmRpc3Bvc2VXcmFwcGVyKCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpCitwcml2YXRlOgor
ICAgIHN0YXRpYyB2b2lkIHdlYWtDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHZh
bHVlLCB2b2lkKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgfQorICAgICAgICBOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8Tm9kZSo+KGNvbnRleHQp
OworICAgICAgICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkpOworICAgICAgICBBU1NFUlQobm9k
ZS0+d3JhcHBlcigpID09IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSk7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyog
bWVtb3J5T2JqZWN0SW5mbykgY29uc3QgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMg
ZGF0YSBzdHJ1Y3R1cmUgZG9lc24ndCB1c2UgYW55IGV4dHJhIG1lbW9yeS4KKyAgICAgICAgbm9k
ZS0+Y2xlYXJXcmFwcGVyKCk7CisgICAgICAgIHZhbHVlLkRpc3Bvc2UoKTsKKyAgICAgICAgbm9k
ZS0+ZGVyZWYoKTsKICAgICB9CiB9OwogCi1jbGFzcyBBY3RpdmVET01Ob2RlV3JhcHBlck1hcCA6
IHB1YmxpYyBET01XcmFwcGVyTWFwPE5vZGU+IHsKK2NsYXNzIEFjdGl2ZURPTU5vZGVXcmFwcGVy
TWFwIDogcHVibGljIERPTVdyYXBwZXJIYXNoTWFwPE5vZGU+IHsKIHB1YmxpYzoKLSAgICBBY3Rp
dmVET01Ob2RlV3JhcHBlck1hcCh2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrKQot
ICAgICAgICA6IERPTVdyYXBwZXJNYXA8Tm9kZT4oY2FsbGJhY2spCi0gICAgewotICAgIH0KLQog
ICAgIHZpcnR1YWwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gZ2V0KE5vZGUqIG5vZGUpIE9W
RVJSSURFCiAgICAgewotICAgICAgICByZXR1cm4gbm9kZS0+d3JhcHBlcigpOworICAgICAgICB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gbm9kZS0+d3JhcHBlcigpOworICAg
ICAgICBBU1NFUlQoRE9NV3JhcHBlckhhc2hNYXA8Tm9kZT46OmdldChub2RlKSA9PSB3cmFwcGVy
KTsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHNl
dChOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKSBPVkVSUklE
RQpAQCAtMTA4LDIyICs5MSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChub2RlICYmIG5v
ZGUtPndyYXBwZXIoKS5Jc0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQod3JhcHBlci5XcmFwcGVy
Q2xhc3NJZCgpID09IHY4RE9NU3VidHJlZUNsYXNzSWQpOwogICAgICAgICBub2RlLT5zZXRXcmFw
cGVyKHdyYXBwZXIpOwotICAgICAgICBET01XcmFwcGVyTWFwPE5vZGU+OjpzZXQobm9kZSwgd3Jh
cHBlcik7CisgICAgICAgIERPTVdyYXBwZXJIYXNoTWFwPE5vZGU+OjpzZXQobm9kZSwgd3JhcHBl
cik7CiAgICAgfQogCi0gICAgdmlydHVhbCBib29sIHJlbW92ZUlmUHJlc2VudChOb2RlKiBub2Rl
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB2YWx1ZSkgT1ZFUlJJREUKKyAgICB2aXJ0dWFs
IHZvaWQgY2xlYXIoKSBPVkVSUklERQogICAgIHsKLSAgICAgICAgaWYgKCFET01XcmFwcGVyTWFw
PE5vZGU+OjpyZW1vdmVJZlByZXNlbnQobm9kZSwgdmFsdWUpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAvLyBOb3RpY2UgdGhhdCB3ZSBjYWxsICJjbGVhcldyYXBwZXIiIGhl
cmUgcmF0aGVyIHRoYW4gZGlzcG9zZVdyYXBwZXIgYmVjYXVzZQotICAgICAgICAvLyBvdXIgYmFz
ZSBjbGFzcyB3aWxsIGNhbGwgRGlzcG9zZSBvbiB0aGUgd3JhcHBlciBmb3IgdXMuCi0gICAgICAg
IG5vZGUtPmNsZWFyV3JhcHBlcigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgT1ZF
UlJJREUKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKE5vZGUqIG5vZGUsIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+IHdyYXBwZXIpIE9WRVJSSURFCiAgICAgewotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPndyYXBwZXIoKSA9PSB3cmFwcGVyKTsK
KyAgICAgICAgbm9kZS0+Y2xlYXJXcmFwcGVyKCk7CisgICAgICAgIERPTVdyYXBwZXJIYXNoTWFw
PE5vZGU+OjpyZW1vdmUobm9kZSwgd3JhcHBlcik7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NvcGVkRE9NRGF0YVN0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njb3BlZERPTURhdGFTdG9yZS5jcHAKaW5kZXggYmJkZGM1
YzFiY2M5MWNmYWQ3ZjY5NzcwNjMyYTA0MzUyYTJmODY0Ny4uMjJkZWJlYjM5MmNhZWM2MjM1NDBk
ZDBjMWQxYjc1NDQ2MGRkNjM3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NvcGVkRE9NRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY29wZWRET01EYXRhU3RvcmUuY3BwCkBAIC0zOSwxMCArMzksMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogU2NvcGVkRE9NRGF0YVN0b3JlOjpTY29wZWRET01EYXRhU3RvcmUoKQogICAgIDog
RE9NRGF0YVN0b3JlKCkKIHsKLSAgICBtX2RvbU5vZGVNYXAgPSBuZXcgRE9NV3JhcHBlck1hcDxO
b2RlPigmRE9NRGF0YVN0b3JlOjp3ZWFrTm9kZUNhbGxiYWNrKTsKLSAgICBtX2FjdGl2ZURvbU5v
ZGVNYXAgPSBuZXcgRE9NV3JhcHBlck1hcDxOb2RlPigmRE9NRGF0YVN0b3JlOjp3ZWFrTm9kZUNh
bGxiYWNrKTsKLSAgICBtX2RvbU9iamVjdE1hcCA9IG5ldyBET01XcmFwcGVyTWFwPHZvaWQ+KCZE
T01EYXRhU3RvcmU6OndlYWtET01PYmplY3RDYWxsYmFjayk7Ci0gICAgbV9hY3RpdmVEb21PYmpl
Y3RNYXAgPSBuZXcgRE9NV3JhcHBlck1hcDx2b2lkPigmRE9NRGF0YVN0b3JlOjp3ZWFrQWN0aXZl
RE9NT2JqZWN0Q2FsbGJhY2spOworICAgIG1fZG9tTm9kZU1hcCA9IG5ldyBET01XcmFwcGVySGFz
aE1hcDxOb2RlPjsKKyAgICBtX2FjdGl2ZURvbU5vZGVNYXAgPSBuZXcgRE9NV3JhcHBlckhhc2hN
YXA8Tm9kZT47CisgICAgbV9kb21PYmplY3RNYXAgPSBuZXcgRE9NV3JhcHBlckhhc2hNYXA8dm9p
ZD47CisgICAgbV9hY3RpdmVEb21PYmplY3RNYXAgPSBuZXcgRE9NV3JhcHBlckhhc2hNYXA8dm9p
ZD47CiB9CiAKIFNjb3BlZERPTURhdGFTdG9yZTo6flNjb3BlZERPTURhdGFTdG9yZSgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAKaW5kZXggYjUzOTI5
YTliZDQ5NTBmYTdlMjFmNDZhYzQ5NTM2MTkwNWYxMjJhOC4uMWI3MTkxY2FhNGE4NDgwNTNjNGYz
MzExNGM4ZDU3MTU5NjE1OWUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0UHJvZmlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdFByb2ZpbGVyLmNwcApAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgU2NyaXB0UHJvZmlsZXI6
OnZpc2l0RXh0ZXJuYWxTdHJpbmdzKEV4dGVybmFsU3RyaW5nVmlzaXRvciogdmlzaXRvcikKIAog
dm9pZCBTY3JpcHRQcm9maWxlcjo6dmlzaXRFeHRlcm5hbEFycmF5cyhFeHRlcm5hbEFycmF5Vmlz
aXRvciogdmlzaXRvcikKIHsKLSAgICBjbGFzcyBWaXNpdG9yQWRhcHRlciA6IHB1YmxpYyBET01X
cmFwcGVyTWFwPHZvaWQ+OjpWaXNpdG9yIHsKKyAgICBjbGFzcyBWaXNpdG9yQWRhcHRlciA6IHB1
YmxpYyBET01XcmFwcGVyVmlzaXRvcjx2b2lkPiB7CiAgICAgcHVibGljOgogICAgICAgICBWaXNp
dG9yQWRhcHRlcihFeHRlcm5hbEFycmF5VmlzaXRvciogdmlzaXRvcikgOiBtX3Zpc2l0b3Iodmlz
aXRvcikgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRp
Y0RPTURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01E
YXRhU3RvcmUuY3BwCmluZGV4IDVkOWQwOWNlMTM5ZDQxODI3ZGQ5N2Q2MDMxM2JhMWZiNjBjMzZk
MzUuLmM0OWY5ZmQwOTc1OTJhYjZjMDcxMDBjNzBlN2M3ZWU0YmZlYWRjNzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmNwcApAQCAtMzYs
MTEgKzM2LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU3RhdGljRE9NRGF0YVN0b3JlOjpT
dGF0aWNET01EYXRhU3RvcmUoKQotICAgIDogRE9NRGF0YVN0b3JlKCkKLSAgICAsIG1fc3RhdGlj
RG9tTm9kZU1hcCgmRE9NRGF0YVN0b3JlOjp3ZWFrTm9kZUNhbGxiYWNrKQotICAgICwgbV9zdGF0
aWNBY3RpdmVEb21Ob2RlTWFwKCZET01EYXRhU3RvcmU6OndlYWtOb2RlQ2FsbGJhY2spCi0gICAg
LCBtX3N0YXRpY0RvbU9iamVjdE1hcCgmRE9NRGF0YVN0b3JlOjp3ZWFrRE9NT2JqZWN0Q2FsbGJh
Y2spCi0gICAgLCBtX3N0YXRpY0FjdGl2ZURvbU9iamVjdE1hcCgmRE9NRGF0YVN0b3JlOjp3ZWFr
QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2spCiB7CiAgICAgbV9kb21Ob2RlTWFwID0gJm1fc3RhdGlj
RG9tTm9kZU1hcDsKICAgICBtX2FjdGl2ZURvbU5vZGVNYXAgPSAmbV9zdGF0aWNBY3RpdmVEb21O
b2RlTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGljRE9N
RGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3Rv
cmUuaAppbmRleCA4MTA5MzA1MGVjNzY2MTA1OWY4YWVjMzVkM2MyYjQxZjE3ZGJjNDBiLi4yMGQx
MWFkYWFlNTZmOGI1MmEyNmEzOGIzOWUwMDU0YmFjMjhkM2JlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuaApAQCAtNTQsOCArNTQsOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIERPTU5vZGVXcmFwcGVyTWFwIG1fc3RhdGljRG9tTm9kZU1h
cDsKICAgICBBY3RpdmVET01Ob2RlV3JhcHBlck1hcCBtX3N0YXRpY0FjdGl2ZURvbU5vZGVNYXA7
Ci0gICAgRE9NV3JhcHBlck1hcDx2b2lkPiBtX3N0YXRpY0RvbU9iamVjdE1hcDsKLSAgICBET01X
cmFwcGVyTWFwPHZvaWQ+IG1fc3RhdGljQWN0aXZlRG9tT2JqZWN0TWFwOworICAgIERPTVdyYXBw
ZXJIYXNoTWFwPHZvaWQ+IG1fc3RhdGljRG9tT2JqZWN0TWFwOworICAgIERPTVdyYXBwZXJIYXNo
TWFwPHZvaWQ+IG1fc3RhdGljQWN0aXZlRG9tT2JqZWN0TWFwOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01N
YXAuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuY3BwCmluZGV4IGU2
ZGFiOTA5NDQ3YTY3MmI4ZWRhYjMxNDczNjQ3MWZiOWFlODc2N2IuLjVlYjYzMGJlMWFkY2IwMDc0
YWFkMDQzYjgyY2JkOWJmMzdiM2ExYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TU1hcC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJET01EYXRhU3RvcmUuaCIKICNp
bmNsdWRlICJTY29wZWRET01EYXRhU3RvcmUuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNp
bmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC01NiwxMiArNTcsMTIgQEAgTm9kZVdyYXBwZXJWaXNpdG9yOjp+Tm9k
ZVdyYXBwZXJWaXNpdG9yKCkKIHsKIH0KIAotRE9NTm9kZU1hcHBpbmcmIGdldERPTU5vZGVNYXAo
djg6Oklzb2xhdGUqIGlzb2xhdGUpCitET01XcmFwcGVyTWFwPE5vZGU+JiBnZXRET01Ob2RlTWFw
KHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIHJldHVybiBET01EYXRhOjpnZXRDdXJyZW50
U3RvcmUoaXNvbGF0ZSkuZG9tTm9kZU1hcCgpOwogfQogCi1ET01Ob2RlTWFwcGluZyYgZ2V0QWN0
aXZlRE9NTm9kZU1hcCh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK0RPTVdyYXBwZXJNYXA8Tm9kZT4m
IGdldEFjdGl2ZURPTU5vZGVNYXAodjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgcmV0dXJu
IERPTURhdGE6OmdldEN1cnJlbnRTdG9yZShpc29sYXRlKS5hY3RpdmVEb21Ob2RlTWFwKCk7CiB9
CkBAIC03OCwxNCArNzksMTEgQEAgRE9NV3JhcHBlck1hcDx2b2lkPiYgZ2V0QWN0aXZlRE9NT2Jq
ZWN0TWFwKHY4OjpJc29sYXRlKiBpc29sYXRlKQogCiB2b2lkIHJlbW92ZUFsbERPTU9iamVjdHMo
KQogewotICAgIERPTURhdGFTdG9yZSYgc3RvcmUgPSBET01EYXRhOjpnZXRDdXJyZW50U3RvcmUo
KTsKLQotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKICAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKLQotICAgIC8vIE5vdGU6IFdlIHNraXAgdGhlIE5vZGUgd3JhcHBlciBtYXBzIGJlY2F1
c2UgdGhleSBleGlzdCBvbmx5IG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICBET01EYXRhOjpyZW1v
dmVPYmplY3RzRnJvbVdyYXBwZXJNYXA8dm9pZD4oJnN0b3JlLCBzdG9yZS5kb21PYmplY3RNYXAo
KSk7Ci0gICAgRE9NRGF0YTo6cmVtb3ZlT2JqZWN0c0Zyb21XcmFwcGVyTWFwPHZvaWQ+KCZzdG9y
ZSwgc3RvcmUuYWN0aXZlRG9tT2JqZWN0TWFwKCkpOworICAgIHY4OjpIYW5kbGVTY29wZSBzY29w
ZTsKKyAgICBET01EYXRhU3RvcmUmIHN0b3JlID0gRE9NRGF0YTo6Z2V0Q3VycmVudFN0b3JlKCk7
CisgICAgc3RvcmUuZG9tT2JqZWN0TWFwKCkuY2xlYXIoKTsKKyAgICBzdG9yZS5hY3RpdmVEb21P
YmplY3RNYXAoKS5jbGVhcigpOwogfQogCiB2b2lkIHZpc2l0QWxsRE9NTm9kZXMoTm9kZVdyYXBw
ZXJWaXNpdG9yKiB2aXNpdG9yKQpAQCAtMTE3LDcgKzExNSw3IEBAIHZvaWQgdmlzaXRBbGxET01O
b2RlcyhOb2RlV3JhcHBlclZpc2l0b3IqIHZpc2l0b3IpCiAgICAgdjg6OlY4OjpWaXNpdEhhbmRs
ZXNXaXRoQ2xhc3NJZHMoJnZpc2l0b3JBZGFwdGVyKTsKIH0KIAotdm9pZCB2aXNpdEFjdGl2ZURP
TU5vZGVzKERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3IqIHZpc2l0b3IpCit2b2lkIHZpc2l0
QWN0aXZlRE9NTm9kZXMoRE9NV3JhcHBlclZpc2l0b3I8Tm9kZT4qIHZpc2l0b3IpCiB7CiAgICAg
djg6OkhhbmRsZVNjb3BlIHNjb3BlOwogCkBAIC0xMjksNyArMTI3LDcgQEAgdm9pZCB2aXNpdEFj
dGl2ZURPTU5vZGVzKERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3IqIHZpc2l0b3IpCiAgICAg
fQogfQogCi12b2lkIHZpc2l0RE9NT2JqZWN0cyhET01XcmFwcGVyTWFwPHZvaWQ+OjpWaXNpdG9y
KiB2aXNpdG9yKQordm9pZCB2aXNpdERPTU9iamVjdHMoRE9NV3JhcHBlclZpc2l0b3I8dm9pZD4q
IHZpc2l0b3IpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwogCkBAIC0xNDEsNyArMTM5
LDcgQEAgdm9pZCB2aXNpdERPTU9iamVjdHMoRE9NV3JhcHBlck1hcDx2b2lkPjo6VmlzaXRvciog
dmlzaXRvcikKICAgICB9CiB9CiAKLXZvaWQgdmlzaXRBY3RpdmVET01PYmplY3RzKERPTVdyYXBw
ZXJNYXA8dm9pZD46OlZpc2l0b3IqIHZpc2l0b3IpCit2b2lkIHZpc2l0QWN0aXZlRE9NT2JqZWN0
cyhET01XcmFwcGVyVmlzaXRvcjx2b2lkPiogdmlzaXRvcikKIHsKICAgICB2ODo6SGFuZGxlU2Nv
cGUgc2NvcGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9N
TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCmluZGV4IGZmMDYx
ZmUxNjE5MDExYzQ5NWZkZDIzZDZkMzk0MWIxZGUyYTE1ZmQuLmI0Y2Q3ZDZmMjhiNDJiZjU4YTE1
NmFiNjYzNTk3MWZhOWYzMDM3MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAu
aApAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBWOERPTU1hcF9oCiAjZGVmaW5lIFY4RE9NTWFw
X2gKIAorI2luY2x1ZGUgIkRPTVdyYXBwZXJNYXAuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5j
bHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CkBAIC00MCwxMTEgKzQxLDggQEAKICNpbmNsdWRlIDx2OC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0gICAgY2xhc3MgRE9NRGF0YVN0b3JlOwotCi0gICAgdGVtcGxhdGUgPGNsYXNz
IEtleVR5cGUsIGNsYXNzIFZhbHVlVHlwZT4gY2xhc3MgQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFw
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcCh2ODo6V2Vh
a1JlZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrKSA6IG1fd2Vha1JlZmVyZW5jZUNhbGxiYWNrKGNh
bGxiYWNrKSB7IH0KLSAgICAgICAgdmlydHVhbCB+QWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwKCkg
eyB9Ci0KLSAgICAgICAgY2xhc3MgVmlzaXRvciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAg
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiBzdG9yZSwgS2V5
VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IG9iamVjdCkgPSAwOwotICAgICAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgICAgICB2aXJ0dWFsIH5WaXNpdG9yKCkgeyB9Ci0gICAgICAg
IH07Ci0KLSAgICAgICAgdmlydHVhbCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IGdldChLZXlU
eXBlKiBvYmopID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldChLZXlUeXBlKiBvYmosIHY4
OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4gd3JhcHBlcikgPSAwOwotICAgICAgICB2aXJ0dWFsIGJv
b2wgY29udGFpbnMoS2V5VHlwZSogb2JqKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChET01EYXRhU3RvcmUqIHN0b3JlLCBWaXNpdG9yKiB2aXNpdG9yKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCByZW1vdmVJZlByZXNlbnQoS2V5VHlwZSosIHY4OjpQZXJzaXN0ZW50PFZhbHVl
VHlwZT4pID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAwOwotCi0gICAgICAg
IHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sgd2Vha1JlZmVyZW5jZUNhbGxiYWNrKCkgeyByZXR1
cm4gbV93ZWFrUmVmZXJlbmNlQ2FsbGJhY2s7IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVw
b3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0ID0gMDsKLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sgbV93ZWFrUmVmZXJlbmNlQ2Fs
bGJhY2s7Ci0gICAgfTsKLQotICAgIHR5cGVkZWYgQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwPE5v
ZGUsIHY4OjpPYmplY3Q+IERPTU5vZGVNYXBwaW5nOwotCi0gICAgLy8gQSB0YWJsZSBvZiB3cmFw
cGVycyB3aXRoIHdlYWsgcG9pbnRlcnMuCi0gICAgLy8gVGhpcyB0YWJsZSBhbGxvd3MgdXMgdG8g
YXZvaWQgdHJhY2sgd3JhcHBlZCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcKLSAgICAvLyBhbmQgZm9y
IGVuc3VyaW5nIHRoYXQgd2UgZG9uJ3QgZG91YmxlIHdyYXAgdGhlIHNhbWUgb2JqZWN0LgotICAg
IHRlbXBsYXRlPGNsYXNzIEtleVR5cGUsIGNsYXNzIFZhbHVlVHlwZT4gY2xhc3MgV2Vha1JlZmVy
ZW5jZU1hcCA6IHB1YmxpYyBBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXA8S2V5VHlwZSwgVmFsdWVU
eXBlPiB7Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEFic3RyYWN0V2Vha1JlZmVyZW5j
ZU1hcDxLZXlUeXBlLCBWYWx1ZVR5cGU+IFBhcmVudDsKLSAgICAgICAgV2Vha1JlZmVyZW5jZU1h
cCh2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrKSA6IFBhcmVudChjYWxsYmFjaykg
eyB9Ci0gICAgICAgIHZpcnR1YWwgfldlYWtSZWZlcmVuY2VNYXAoKSB7IH0KLQotICAgICAgICAv
LyBHZXQgdGhlIEpTIHdyYXBwZXIgb2JqZWN0IG9mIGFuIG9iamVjdC4KLSAgICAgICAgdmlydHVh
bCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IGdldChLZXlUeXBlKiBvYmopCi0gICAgICAgIHsK
LSAgICAgICAgICAgIFZhbHVlVHlwZSogd3JhcHBlciA9IG1fbWFwLmdldChvYmopOwotICAgICAg
ICAgICAgcmV0dXJuIHdyYXBwZXIgPyB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+KHdyYXBwZXIp
IDogdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPigpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmly
dHVhbCB2b2lkIHNldChLZXlUeXBlKiBvYmosIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4gd3Jh
cHBlcikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFtX21hcC5jb250YWlucyhvYmop
KTsKLSAgICAgICAgICAgIHdyYXBwZXIuTWFrZVdlYWsob2JqLCBQYXJlbnQ6OndlYWtSZWZlcmVu
Y2VDYWxsYmFjaygpKTsKLSAgICAgICAgICAgIG1fbWFwLnNldChvYmosICp3cmFwcGVyKTsKLSAg
ICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBmb3JnZXQoS2V5VHlwZSogb2JqKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQob2JqKTsKLSAgICAgICAgICAgIFZhbHVlVHlwZSog
d3JhcHBlciA9IG1fbWFwLnRha2Uob2JqKTsKLSAgICAgICAgICAgIGlmICghd3JhcHBlcikKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PFZhbHVl
VHlwZT4gaGFuZGxlKHdyYXBwZXIpOwotICAgICAgICAgICAgaGFuZGxlLkRpc3Bvc2UoKTsKLSAg
ICAgICAgICAgIGhhbmRsZS5DbGVhcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCByZW1v
dmVJZlByZXNlbnQoS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPEtleVR5cGUqLCBWYWx1
ZVR5cGUqPjo6aXRlcmF0b3IgaXQgPSBtX21hcC5maW5kKGtleSk7Ci0gICAgICAgICAgICBpZiAo
aXQgPT0gbV9tYXAuZW5kKCkgfHwgaXQtPnZhbHVlICE9ICp2YWx1ZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIG1fbWFwLnJlbW92ZShpdCk7Ci0gICAgICAg
ICAgICB2YWx1ZS5EaXNwb3NlKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgY2xlYXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX21hcC5j
bGVhcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBjb250YWlucyhLZXlUeXBlKiBvYmop
IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKG9iaik7IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoRE9NRGF0YVN0b3JlKiBzdG9yZSwgdHlwZW5hbWUgUGFyZW50OjpWaXNpdG9yKiB2aXNp
dG9yKQotICAgICAgICB7Ci0gICAgICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPEtleVR5cGUqLCBW
YWx1ZVR5cGUqPjo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOwotICAgICAgICAgICAgZm9y
ICg7IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgICAgIHZpc2l0b3ItPnZp
c2l0RE9NV3JhcHBlcihzdG9yZSwgaXQtPmtleSwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPihp
dC0+dmFsdWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1v
cnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdCBPVkVSUklE
RQotICAgICAgICB7Ci0gICAgICAgICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmpl
Y3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkJpbmRpbmcpOwotICAgICAgICAgICAg
aW5mby5hZGRNZW1iZXIobV9tYXApOwotICAgICAgICB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAg
ICAgIEhhc2hNYXA8S2V5VHlwZSosIFZhbHVlVHlwZSo+IG1fbWFwOwotICAgIH07Ci0KLSAgICB0
ZW1wbGF0ZSA8Y2xhc3MgS2V5VHlwZT4gY2xhc3MgRE9NV3JhcHBlck1hcCA6IHB1YmxpYyBXZWFr
UmVmZXJlbmNlTWFwPEtleVR5cGUsIHY4OjpPYmplY3Q+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IERPTVdyYXBwZXJNYXAodjg6OldlYWtSZWZlcmVuY2VDYWxsYmFjayBjYWxsYmFjaykgOiBXZWFr
UmVmZXJlbmNlTWFwPEtleVR5cGUsIHY4OjpPYmplY3Q+KGNhbGxiYWNrKSB7IH0KLSAgICB9Owor
ICAgIGNsYXNzIERPTURhdGFTdG9yZTsKIAogICAgIC8vIEEgdXRpbGl0eSBjbGFzcyB0byBtYW5h
Z2UgdGhlIGxpZmV0aW1lIG9mIHNldCBvZiBET00gd3JhcHBlcnMuCiAgICAgY2xhc3MgRE9NRGF0
YVN0b3JlSGFuZGxlIHsKQEAgLTE1OSwxMCArNTcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgfTsKIAogICAgIC8vIEEgbWFwIGZyb20gRE9NIG5vZGUgdG8gaXRzIEpTIHdyYXBwZXIuCi0g
ICAgRE9NTm9kZU1hcHBpbmcmIGdldERPTU5vZGVNYXAodjg6Oklzb2xhdGUqID0gMCk7Ci0gICAg
RE9NTm9kZU1hcHBpbmcmIGdldEFjdGl2ZURPTU5vZGVNYXAodjg6Oklzb2xhdGUqID0gMCk7Ci0g
ICAgdm9pZCB2aXNpdEFjdGl2ZURPTU5vZGVzKERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3Iq
KTsKLQorICAgIERPTVdyYXBwZXJNYXA8Tm9kZT4mIGdldERPTU5vZGVNYXAodjg6Oklzb2xhdGUq
ID0gMCk7CisgICAgRE9NV3JhcHBlck1hcDxOb2RlPiYgZ2V0QWN0aXZlRE9NTm9kZU1hcCh2ODo6
SXNvbGF0ZSogPSAwKTsKKyAgICB2b2lkIHZpc2l0QWN0aXZlRE9NTm9kZXMoRE9NV3JhcHBlclZp
c2l0b3I8Tm9kZT4qKTsKIAogICAgIGNsYXNzIE5vZGVXcmFwcGVyVmlzaXRvciB7CiAgICAgcHVi
bGljOgpAQCAtMTczLDExICs3MCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAvLyBB
IG1hcCBmcm9tIGEgRE9NIG9iamVjdCAobm9uLW5vZGUpIHRvIGl0cyBKUyB3cmFwcGVyLiBUaGlz
IG1hcCBkb2VzIG5vdCBjb250YWluIHRoZSBET00gb2JqZWN0cyB3aGljaCBjYW4gaGF2ZSBwZW5k
aW5nIGFjdGl2aXR5IChhY3RpdmUgZG9tIG9iamVjdHMpLgogICAgIERPTVdyYXBwZXJNYXA8dm9p
ZD4mIGdldERPTU9iamVjdE1hcCh2ODo6SXNvbGF0ZSogPSAwKTsKLSAgICB2b2lkIHZpc2l0RE9N
T2JqZWN0cyhET01XcmFwcGVyTWFwPHZvaWQ+OjpWaXNpdG9yKik7CisgICAgdm9pZCB2aXNpdERP
TU9iamVjdHMoRE9NV3JhcHBlclZpc2l0b3I8dm9pZD4qKTsKIAogICAgIC8vIEEgbWFwIGZyb20g
YSBET00gb2JqZWN0IHRvIGl0cyBKUyB3cmFwcGVyIGZvciBET00gb2JqZWN0cyB3aGljaCBjYW4g
aGF2ZSBwZW5kaW5nIGFjdGl2aXR5LgogICAgIERPTVdyYXBwZXJNYXA8dm9pZD4mIGdldEFjdGl2
ZURPTU9iamVjdE1hcCh2ODo6SXNvbGF0ZSogPSAwKTsKLSAgICB2b2lkIHZpc2l0QWN0aXZlRE9N
T2JqZWN0cyhET01XcmFwcGVyTWFwPHZvaWQ+OjpWaXNpdG9yKik7CisgICAgdm9pZCB2aXNpdEFj
dGl2ZURPTU9iamVjdHMoRE9NV3JhcHBlclZpc2l0b3I8dm9pZD4qKTsKIAogICAgIC8vIFRoaXMg
c2hvdWxkIGJlIGNhbGxlZCB0byByZW1vdmUgYWxsIERPTSBvYmplY3RzIGFzc29jaWF0ZWQgd2l0
aCB0aGUgY3VycmVudCB0aHJlYWQgd2hlbiBpdCBpcyB0ZWFyaW5nIGRvd24uCiAgICAgdm9pZCBy
ZW1vdmVBbGxET01PYmplY3RzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdyYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01X
cmFwcGVyLmNwcAppbmRleCAxNzI4MzU4MTgzOWExNTU3OGJjZmE3OTRlOTY1ZmI4OTgxNjg0NjJm
Li4zMmQwNGY3OGJhMzJlNzIzZTJlNzhmYmY5MTY3ZjJjZWM1MTlmZmE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9p
ZCBWOERPTVdyYXBwZXI6OnNldE5hbWVkSGlkZGVuUmVmZXJlbmNlKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gcGFyZW50LCBjb25zdAogV3JhcHBlclR5cGVJbmZvKiBWOERPTVdyYXBwZXI6OmRvbVdy
YXBwZXJUeXBlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQogewogICAgIEFTU0VSVChW
OERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihvYmplY3QpKTsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8V3JhcHBlclR5cGVJbmZvKj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmll
bGQodjhET01XcmFwcGVyVHlwZUluZGV4KSk7CisgICAgcmV0dXJuIHRvV3JhcHBlclR5cGVJbmZv
KG9iamVjdCk7CiB9CiAKIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gVjhET01XcmFwcGVyOjp3cmFw
TmF0aXZlTm9kZUZpbHRlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZmlsdGVyKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAppbmRleCBmYWQ4MmM5NWRiNWQ0OTQzYzcx
ZjQ0M2MxYzE0N2Q1ZTM2YzlmODNkLi5mMTE4NTliMDZmNmNjZTBkZTlmZjcwYjdjZDU0ZGExYmI3
YjRlZjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBw
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaApAQCAt
MzIsNiArMzIsNyBAQAogI2RlZmluZSBWOERPTVdyYXBwZXJfaAogCiAjaW5jbHVkZSAiRE9NRGF0
YVN0b3JlLmgiCisjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCiAjaW5jbHVkZSAiRXZlbnQu
aCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgpAQCAtMTIzLDcg
KzEyNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZS0+d3JhcHBlcigpOwogCiAgICAgICAgICAgICBET01EYXRhU3RvcmUqIHN0b3JlID0gY29udGV4
dC0+d29ybGQoKS0+ZG9tRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICBET01Ob2RlTWFwcGluZyYg
ZG9tTm9kZU1hcCA9IG5vZGUtPmlzQWN0aXZlTm9kZSgpID8gc3RvcmUtPmFjdGl2ZURvbU5vZGVN
YXAoKSA6IHN0b3JlLT5kb21Ob2RlTWFwKCk7CisgICAgICAgICAgICBET01XcmFwcGVyTWFwPE5v
ZGU+JiBkb21Ob2RlTWFwID0gbm9kZS0+aXNBY3RpdmVOb2RlKCkgPyBzdG9yZS0+YWN0aXZlRG9t
Tm9kZU1hcCgpIDogc3RvcmUtPmRvbU5vZGVNYXAoKTsKICAgICAgICAgICAgIHJldHVybiBkb21O
b2RlTWFwLmdldChub2RlKTsKICAgICAgICAgfQogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKaW5kZXggMzM3OTk4NzExOTYxZWIzMzVmYzA0
YmM3MGEzMDJiZDFmOTdmMzY4Ny4uNmZlYmNmMTQ5YWYwZDFlMDczNjdkZjI1OTgwNmNmN2Q4ZGE2
NzdkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNw
cApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAi
UmV0YWluZWRET01JbmZvLmgiCiAjaW5jbHVkZSAiUmV0YWluZWRPYmplY3RJbmZvLmgiCisjaW5j
bHVkZSAiSW50cnVzaXZlRE9NV3JhcHBlck1hcC5oIgogI2luY2x1ZGUgIlY4QWJzdHJhY3RFdmVu
dExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDU1NSdWxl
LmgiCkBAIC02NiwyMCArNjcsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZm5kZWYg
TkRFQlVHCi0KLWNsYXNzIEVuc3VyZVdlYWtET01Ob2RlVmlzaXRvciA6IHB1YmxpYyBET01XcmFw
cGVyTWFwPE5vZGU+OjpWaXNpdG9yIHsKLXB1YmxpYzoKLSAgICB2b2lkIHZpc2l0RE9NV3JhcHBl
cihET01EYXRhU3RvcmUqLCBOb2RlKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBl
cikKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh3cmFwcGVyLklzV2VhaygpKTsKLSAgICB9Ci19Owot
Ci0jZW5kaWYgLy8gTkRFQlVHCi0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1jbGFzcyBBY3RpdmVE
T01PYmplY3RQcm9sb2d1ZVZpc2l0b3IgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDxUPjo6VmlzaXRv
ciB7CitjbGFzcyBBY3RpdmVET01PYmplY3RQcm9sb2d1ZVZpc2l0b3IgOiBwdWJsaWMgRE9NV3Jh
cHBlclZpc2l0b3I8VD4gewogcHVibGljOgogICAgIGV4cGxpY2l0IEFjdGl2ZURPTU9iamVjdFBy
b2xvZ3VlVmlzaXRvcihWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+KiBsaXZlT2Jq
ZWN0cykKICAgICAgICAgOiBtX2xpdmVPYmplY3RzKGxpdmVPYmplY3RzKQpAQCAtMTA5LDcgKzk4
LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+KiBt
X2xpdmVPYmplY3RzOwogfTsKIAotY2xhc3MgT2JqZWN0VmlzaXRvciA6IHB1YmxpYyBET01XcmFw
cGVyTWFwPHZvaWQ+OjpWaXNpdG9yIHsKK2NsYXNzIE9iamVjdFZpc2l0b3IgOiBwdWJsaWMgRE9N
V3JhcHBlclZpc2l0b3I8dm9pZD4gewogcHVibGljOgogICAgIHZvaWQgdmlzaXRET01XcmFwcGVy
KERPTURhdGFTdG9yZSogc3RvcmUsIHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4gd3JhcHBlcikKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOE5QT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBPYmpl
Y3QuY3BwCmluZGV4IGE1YjNkMWRlYjNlYTg5NTQ0MmZiODFkYzAxNzZmMDM0MWJkOTVmNTguLjRl
NTI4M2IxODUyMWVhYzkyZjExYWVhOWI4NDYyOWFkMzE2Yzc5NGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuY3BwCkBAIC0xNjEsMjUgKzE2MSw0NiBAQCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gbnBPYmplY3RJbnZva2VEZWZhdWx0SGFuZGxlcihjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQogfQogCiAKLXN0YXRpYyB2b2lkIHdlYWtUZW1wbGF0ZUNhbGxiYWNrKHY4
OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4sIHZvaWQqIHBhcmFtZXRlcik7Ci0KLS8vIE5QSWRlbnRp
ZmllciBpcyBQcml2YXRlSWRlbnRpZmllciouCi1zdGF0aWMgV2Vha1JlZmVyZW5jZU1hcDxQcml2
YXRlSWRlbnRpZmllciwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU+JiBzdGF0aWNUZW1wbGF0ZU1hcCgp
CitjbGFzcyBWOE5QVGVtcGxhdGVNYXAKIHsKLSAgICB0eXBlZGVmIFdlYWtSZWZlcmVuY2VNYXA8
UHJpdmF0ZUlkZW50aWZpZXIsIHY4OjpGdW5jdGlvblRlbXBsYXRlPiBNYXBUeXBlOwotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoTWFwVHlwZSwgdGVtcGxhdGVNYXAsICgmd2Vha1RlbXBsYXRlQ2Fs
bGJhY2spKTsKLSAgICByZXR1cm4gdGVtcGxhdGVNYXA7Ci19CitwdWJsaWM6CisgICAgLy8gTlBJ
ZGVudGlmaWVyIGlzIFByaXZhdGVJZGVudGlmaWVyKi4KKyAgICB0eXBlZGVmIEhhc2hNYXA8UHJp
dmF0ZUlkZW50aWZpZXIqLCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gPiBN
YXBUeXBlOwogCi1zdGF0aWMgdm9pZCB3ZWFrVGVtcGxhdGVDYWxsYmFjayh2ODo6UGVyc2lzdGVu
dDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogcGFyYW1ldGVyKQotewotICAgIFByaXZhdGVJZGVu
dGlmaWVyKiBpZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8UHJpdmF0ZUlkZW50aWZpZXIqPihwYXJh
bWV0ZXIpOwotICAgIEFTU0VSVChpZGVudGlmaWVyKTsKLSAgICBBU1NFUlQoc3RhdGljVGVtcGxh
dGVNYXAoKS5jb250YWlucyhpZGVudGlmaWVyKSk7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IGdldChQcml2YXRlSWRlbnRpZmllcioga2V5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fbWFwLmdldChrZXkpOworICAgIH0KIAotICAgIHN0YXRpY1RlbXBsYXRlTWFw
KCkuZm9yZ2V0KGlkZW50aWZpZXIpOwotfQorICAgIHZvaWQgc2V0KFByaXZhdGVJZGVudGlmaWVy
KiBrZXksIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB3cmFwcGVyKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFtX21hcC5jb250YWlucyhrZXkpKTsKKyAgICAgICAgbV9tYXAu
c2V0KGtleSwgd3JhcHBlcik7CisgICAgICAgIHdyYXBwZXIuTWFrZVdlYWsoa2V5LCB3ZWFrQ2Fs
bGJhY2spOworICAgIH0KIAorICAgIHN0YXRpYyBWOE5QVGVtcGxhdGVNYXAmIHNoYXJlZEluc3Rh
bmNlKCkKKyAgICB7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoVjhOUFRlbXBsYXRlTWFw
LCBtYXAsICgpKTsKKyAgICAgICAgcmV0dXJuIG1hcDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
c3RhdGljIHZvaWQgd2Vha0NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0
LCB2b2lkKiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgc2hhcmVkSW5zdGFuY2UoKS5kaXNwb3Nl
KHN0YXRpY19jYXN0PFByaXZhdGVJZGVudGlmaWVyKj4oY29udGV4dCkpOworICAgIH0KKworICAg
IHZvaWQgZGlzcG9zZShQcml2YXRlSWRlbnRpZmllcioga2V5KQorICAgIHsKKyAgICAgICAgTWFw
VHlwZTo6aXRlcmF0b3IgaXQgPSBtX21hcC5maW5kKGtleSk7CisgICAgICAgIEFTU0VSVChpdCAh
PSBtX21hcC5lbmQoKSk7CisgICAgICAgIGl0LT52YWx1ZS5EaXNwb3NlKCk7CisgICAgICAgIG1f
bWFwLnJlbW92ZShpdCk7CisgICAgfQorCisgICAgTWFwVHlwZSBtX21hcDsKK307CiAKIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbnBPYmplY3RHZXRQcm9wZXJ0eSh2ODo6TG9jYWw8djg6
Ok9iamVjdD4gc2VsZiwgTlBJZGVudGlmaWVyIGlkZW50aWZpZXIsIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IGtleSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CkBAIC0yMTYsMTQgKzIzNywxNCBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5wT2JqZWN0R2V0UHJvcGVydHkodjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IHNlbGYsIE5QSQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoUmVm
ZXJlbmNlRXJyb3IsICJOUE9iamVjdCBkZWxldGVkIiwgaXNvbGF0ZSk7CiAKICAgICAgICAgUHJp
dmF0ZUlkZW50aWZpZXIqIGlkID0gc3RhdGljX2Nhc3Q8UHJpdmF0ZUlkZW50aWZpZXIqPihpZGVu
dGlmaWVyKTsKLSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGZ1
bmN0aW9uVGVtcGxhdGUgPSBzdGF0aWNUZW1wbGF0ZU1hcCgpLmdldChpZCk7CisgICAgICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBmdW5jdGlvblRlbXBsYXRlID0gVjhO
UFRlbXBsYXRlTWFwOjpzaGFyZWRJbnN0YW5jZSgpLmdldChpZCk7CiAgICAgICAgIC8vIENhY2hl
IHRlbXBsYXRlcyB1c2luZyBpZGVudGlmaWVyIGFzIHRoZSBrZXkuCiAgICAgICAgIGlmIChmdW5j
dGlvblRlbXBsYXRlLklzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHRl
bXBsYXRlLgogICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1w
ID0gdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldygpOwogICAgICAgICAgICAgdGVtcC0+U2V0Q2Fs
bEhhbmRsZXIobnBPYmplY3RNZXRob2RIYW5kbGVyLCBrZXkpOwogICAgICAgICAgICAgZnVuY3Rp
b25UZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHRl
bXApOwotICAgICAgICAgICAgc3RhdGljVGVtcGxhdGVNYXAoKS5zZXQoaWQsIGZ1bmN0aW9uVGVt
cGxhdGUpOworICAgICAgICAgICAgVjhOUFRlbXBsYXRlTWFwOjpzaGFyZWRJbnN0YW5jZSgpLnNl
dChpZCwgZnVuY3Rpb25UZW1wbGF0ZSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGdW5jdGlv
blRlbXBsYXRlIGNhY2hlcyBmdW5jdGlvbiBmb3IgZWFjaCBjb250ZXh0LgpAQCAtMzU1LDI5ICsz
NzYsMzIgQEAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IG5wT2JqZWN0SW5kZXhlZFByb3BlcnR5RW51
bWVyYXRvcihjb25zdCB2ODo6QWNjZXNzb3JJbmZvJgogICAgIHJldHVybiBucE9iamVjdFByb3Bl
cnR5RW51bWVyYXRvcihpbmZvLCBmYWxzZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYWtOUE9iamVj
dENhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4sIHZvaWQqIHBhcmFtZXRlcik7Citz
dGF0aWMgdm9pZCB3ZWFrTlBPYmplY3RDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+
LCB2b2lkKik7CiAKLXN0YXRpYyBET01XcmFwcGVyTWFwPE5QT2JqZWN0PiYgc3RhdGljTlBPYmpl
Y3RNYXAoKQorc3RhdGljIERPTVdyYXBwZXJIYXNoTWFwPE5QT2JqZWN0PiYgc3RhdGljTlBPYmpl
Y3RNYXAoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRE9NV3JhcHBlck1hcDxOUE9iamVj
dD4sIG5wT2JqZWN0TWFwLCAoJndlYWtOUE9iamVjdENhbGxiYWNrKSk7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChET01XcmFwcGVySGFzaE1hcDxOUE9iamVjdD4sIG5wT2JqZWN0TWFwLCAoJndl
YWtOUE9iamVjdENhbGxiYWNrKSk7CiAgICAgcmV0dXJuIG5wT2JqZWN0TWFwOwogfQogCi1zdGF0
aWMgdm9pZCB3ZWFrTlBPYmplY3RDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9i
amVjdCwgdm9pZCogcGFyYW1ldGVyKQorc3RhdGljIHZvaWQgd2Vha05QT2JqZWN0Q2FsbGJhY2so
djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2YWx1ZSwgdm9pZCopCiB7Ci0gICAgTlBPYmplY3Qq
IG5wT2JqZWN0ID0gc3RhdGljX2Nhc3Q8TlBPYmplY3QqPihwYXJhbWV0ZXIpOwotICAgIEFTU0VS
VChzdGF0aWNOUE9iamVjdE1hcCgpLmNvbnRhaW5zKG5wT2JqZWN0KSk7CisgICAgQVNTRVJUKHZh
bHVlLT5Jc09iamVjdCgpKTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVy
ID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpOworICAgIE5QT2JqZWN0
KiBucE9iamVjdCA9IHN0YXRpY19jYXN0PE5QT2JqZWN0Kj4odG9OYXRpdmUod3JhcHBlcikpOwor
CiAgICAgQVNTRVJUKG5wT2JqZWN0KTsKKyAgICBBU1NFUlQoc3RhdGljTlBPYmplY3RNYXAoKS5n
ZXQobnBPYmplY3QpID09IHdyYXBwZXIpOwogCi0gICAgLy8gTXVzdCByZW1vdmUgZnJvbSBvdXIg
bWFwIGJlZm9yZSBjYWxsaW5nIF9OUE5fUmVsZWFzZU9iamVjdCgpLiBfTlBOX1JlbGVhc2VPYmpl
Y3QgY2FuIGNhbGwgRm9yZ2V0VjhPYmplY3RGb3JOUE9iamVjdCwgd2hpY2gKLSAgICAvLyB1c2Vz
IHRoZSB0YWJsZSBhcyB3ZWxsLgotICAgIHN0YXRpY05QT2JqZWN0TWFwKCkuZm9yZ2V0KG5wT2Jq
ZWN0KTsKKyAgICAvLyBNdXN0IHJlbW92ZSBmcm9tIG91ciBtYXAgYmVmb3JlIGNhbGxpbmcgX05Q
Tl9SZWxlYXNlT2JqZWN0KCkuIF9OUE5fUmVsZWFzZU9iamVjdCBjYW4KKyAgICAvLyBjYWxsIGZv
cmdldFY4T2JqZWN0Rm9yTlBPYmplY3QsIHdoaWNoIHVzZXMgdGhlIHRhYmxlIGFzIHdlbGwuCisg
ICAgc3RhdGljTlBPYmplY3RNYXAoKS5yZW1vdmUobnBPYmplY3QsIHdyYXBwZXIpOworICAgIHdy
YXBwZXIuRGlzcG9zZSgpOwogCiAgICAgaWYgKF9OUE5fSXNBbGl2ZShucE9iamVjdCkpCiAgICAg
ICAgIF9OUE5fUmVsZWFzZU9iamVjdChucE9iamVjdCk7CiB9CiAKLQogdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IGNyZWF0ZVY4T2JqZWN0Rm9yTlBPYmplY3QoTlBPYmplY3QqIG9iamVjdCwgTlBPYmpl
Y3QqIHJvb3QpCiB7CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBucE9iamVjdERlc2M7CkBAIC0zOTEsOCArNDE1LDkgQEAgdjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+IGNyZWF0ZVY4T2JqZWN0Rm9yTlBPYmplY3QoTlBPYmplY3QqIG9iamVjdCwgTlBPYmplY3Qq
IHJvb3QKICAgICB9CiAKICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IHdyYXBwZWQgdGhpcyBvYmpl
Y3QsIGp1c3QgcmV0dXJuIGl0LgotICAgIGlmIChzdGF0aWNOUE9iamVjdE1hcCgpLmNvbnRhaW5z
KG9iamVjdCkpCi0gICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD46Ok5ldyhzdGF0
aWNOUE9iamVjdE1hcCgpLmdldChvYmplY3QpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBwZXIgPSBzdGF0aWNOUE9iamVjdE1hcCgpLmdldChvYmplY3QpOworICAgIGlmICghd3Jh
cHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD46Ok5l
dyh3cmFwcGVyKTsKIAogICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgY3JlYXRlIGEgV3JhcHBlciB0
eXBlIGFzIGEgc3ViY2xhc3Mgb2YgSlNPYmplY3QuIEl0IGhhcyB0d28gaW50ZXJuYWwgZmllbGRz
LCBmaWVsZCAwIGlzIHRoZSB3cmFwcGVkCiAgICAgLy8gcG9pbnRlciwgYW5kIGZpZWxkIDEgaXMg
dGhlIHR5cGUuIFRoZXJlIHNob3VsZCBiZSBhbiBhcGkgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHVu
dXNlZCB0eXBlIGlkLiBUaGUgc2FtZSBXcmFwcGVyIHR5cGUKQEAgLTQyOCwxMSArNDUzLDEyIEBA
IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjcmVhdGVWOE9iamVjdEZvck5QT2JqZWN0KE5QT2JqZWN0
KiBvYmplY3QsIE5QT2JqZWN0KiByb290CiAKIHZvaWQgZm9yZ2V0VjhPYmplY3RGb3JOUE9iamVj
dChOUE9iamVjdCogb2JqZWN0KQogewotICAgIGlmIChzdGF0aWNOUE9iamVjdE1hcCgpLmNvbnRh
aW5zKG9iamVjdCkpIHsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyID0g
c3RhdGljTlBPYmplY3RNYXAoKS5nZXQob2JqZWN0KTsKKyAgICBpZiAoIXdyYXBwZXIuSXNFbXB0
eSgpKSB7CiAgICAgICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gaGFuZGxlKHN0YXRpY05QT2JqZWN0TWFwKCkuZ2V0KG9iamVjdCkp
OwotICAgICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoaGFuZGxlLCBucE9iamVjdFR5
cGVJbmZvKCksIDApOwotICAgICAgICBzdGF0aWNOUE9iamVjdE1hcCgpLmZvcmdldChvYmplY3Qp
OworICAgICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIod3JhcHBlciwgbnBPYmplY3RU
eXBlSW5mbygpLCAwKTsKKyAgICAgICAgc3RhdGljTlBPYmplY3RNYXAoKS5yZW1vdmUob2JqZWN0
LCB3cmFwcGVyKTsKKyAgICAgICAgd3JhcHBlci5EaXNwb3NlKCk7CiAgICAgICAgIF9OUE5fUmVs
ZWFzZU9iamVjdChvYmplY3QpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5jcHAKaW5kZXgg
ZDliYjk1NTQ1NDQ0N2Q4ZmI3MDU4OTU1OWEzYTA1OTAxNzFjY2MyZS4uNzRhYTAzYzU3MDMzM2Y3
OWViZGI4YjQ2ZjFkYzFmYmQ1MWJjZWU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTEx
MCw5ICsxMTAsNiBAQCB2ODo6TG9jYWw8djg6OlZhbHVlPiBWOFdvcmtlckNvbnRleHRFdmVudExp
c3RlbmVyOjpjYWxsTGlzdGVuZXJGdW5jdGlvbihTY3JpcHRFeAogICAgIFY4UmVjdXJzaW9uU2Nv
cGUgcmVjdXJzaW9uU2NvcGUoY29udGV4dCk7CiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcmVz
dWx0ID0gaGFuZGxlckZ1bmN0aW9uLT5DYWxsKHJlY2VpdmVyLCAxLCBwYXJhbWV0ZXJzKTsKIAot
ICAgIGlmIChXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHByb3h5ID0gd29ya2VyUHJveHko
Y29udGV4dCkpCi0gICAgICAgIHByb3h5LT50cmFja0V2ZW50KGV2ZW50KTsKLQogICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2FsbEZ1bmN0aW9uKGNvb2tpZSk7CiAKICAgICByZXR1
cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKaW5kZXggOTM1NGJiM2IyZWE5ZDJjYTI3MDAx
MGM3NGM0YWMxNDIzOGFkYzlkZS4uNDQ1ZDRiZWNmNDQ4YmQyYThkODgwODY3Zjk0YTE3YTA0MTNl
MDdhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCkBAIC05OSwxNCArOTksNiBAQCBXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHk6On5Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkoKQogCiB2b2lk
IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZGlzcG9zZSgpCiB7Ci0gICAgLy8gRGV0YWNo
IGFsbCBldmVudHMgZnJvbSB0aGVpciBKUyB3cmFwcGVycy4KLSAgICBmb3IgKHNpemVfdCBldmVu
dEluZGV4ID0gMDsgZXZlbnRJbmRleCA8IG1fZXZlbnRzLnNpemUoKTsgKytldmVudEluZGV4KSB7
Ci0gICAgICAgIEV2ZW50KiBldmVudCA9IG1fZXZlbnRzW2V2ZW50SW5kZXhdOwotICAgICAgICBp
ZiAoZm9yZ2V0VjhFdmVudE9iamVjdChldmVudCkpCi0gICAgICAgICAgZXZlbnQtPmRlcmVmKCk7
Ci0gICAgfQotICAgIG1fZXZlbnRzLmNsZWFyKCk7Ci0KICAgICBtX3BlckNvbnRleHREYXRhLmNs
ZWFyKCk7CiAKICAgICAvLyBEaXNwb3NlIHRoZSBjb250ZXh0LgpAQCAtMTk1LDE1ICsxODcsNiBA
QCBib29sIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6aW5pdGlhbGl6ZUlmTmVlZGVkKCkK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6
OmZvcmdldFY4RXZlbnRPYmplY3QoRXZlbnQqIGV2ZW50KQotewotICAgIGlmIChnZXRET01PYmpl
Y3RNYXAoKS5jb250YWlucyhldmVudCkpIHsKLSAgICAgICAgZ2V0RE9NT2JqZWN0TWFwKCkuZm9y
Z2V0KGV2ZW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQogU2NyaXB0VmFsdWUgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpldmFsdWF0
ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgVGV4
dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uLCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uU3Rh
dGUqIHN0YXRlKQogewogICAgIFY4R0NDb250cm9sbGVyOjpjaGVja01lbW9yeVVzYWdlKCk7CkBA
IC0yNTgsMTEgKzI0MSw2IEBAIHZvaWQgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpzZXRF
dmFsQWxsb3dlZChib29sIGVuYWJsZSwgY29uc3QgU3RyaW5nJiBlcnJvCiAgICAgbV9kaXNhYmxl
RXZhbFBlbmRpbmcgPSBlbmFibGUgPyBTdHJpbmcoKSA6IGVycm9yTWVzc2FnZTsKIH0KIAotdm9p
ZCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnRyYWNrRXZlbnQoRXZlbnQqIGV2ZW50KQot
ewotICAgIG1fZXZlbnRzLmFwcGVuZChldmVudCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAppbmRleCA0YzAy
NGQwMmRhNTAwMDNmYzM4Mjc3Mjc1NzhiOWU4MDBhMzI4YzY5Li5iOGE2ZGU3NDc4ZmRhZjUzNDdm
OWQzZWRjYjhmMTJhODA0YjA5MWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaApAQCAtNjMsMTEgKzYzLDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHkoV29ya2VyQ29udGV4dCopOwogICAgICAgICB+V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
KCk7CiAKLSAgICAgICAgLy8gVHJhY2sgdGhlIGV2ZW50IHNvIHRoYXQgd2UgY2FuIGRldGFjaCBp
dCBmcm9tIHRoZSBKUyB3cmFwcGVyIHdoZW4gYSB3b3JrZXIKLSAgICAgICAgLy8gdGVybWluYXRl
cy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gZGlzcG9zZSB0
aGVzZQotICAgICAgICAvLyBldmVudHMgYW5kIHJlbGVhc2VzIHJlZmVyZW5jZXMgdG8gdGhlaXIg
ZXZlbnQgdGFyZ2V0czogV29ya2VyQ29udGV4dC4KLSAgICAgICAgdm9pZCB0cmFja0V2ZW50KEV2
ZW50Kik7Ci0KICAgICAgICAgLy8gQWxvdyB1c2Ugb2YgZXZhbCgpIGFuZCBpcyBlcXVpdmFsZW50
cyBpbiBzY3JpcHRzLgogICAgICAgICB2b2lkIHNldEV2YWxBbGxvd2VkKGJvb2wgZW5hYmxlLCBj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAKQEAgLTgyLDggKzc3LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBib29sIGluaXRpYWxpemVJZk5lZWRlZCgpOwogICAgICAgICB2
b2lkIGRpc3Bvc2UoKTsKIAotICAgICAgICBzdGF0aWMgYm9vbCBmb3JnZXRWOEV2ZW50T2JqZWN0
KEV2ZW50Kik7Ci0KICAgICAgICAgc3RhdGljIGNvbnN0IGludCBrV29ya2VyTWF4U3RhY2tTaXpl
ID0gNTAwICogMTAyNDsKIAogICAgICAgICBXb3JrZXJDb250ZXh0KiBtX3dvcmtlckNvbnRleHQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8u
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dyYXBwZXJUeXBlSW5mby5oCmluZGV4IGE0
YmQ0OTk4ZGRkNmU2MTRmZjdmMDA1YTVlNzEzODA3Yzc0NTI0MWIuLjNhMmRhZDVlN2ZkMTM3MDRj
ZDdjMjg2YTgwNzI2NmM2OWNhMDc5YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1dyYXBwZXJUeXBlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1dyYXBwZXJUeXBlSW5mby5oCkBAIC0xMTYsNiArMTE2LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgY29uc3QgV3JhcHBlclR5cGVJbmZvKiBwYXJlbnRDbGFzczsKICAgICAgICAg
Y29uc3QgV3JhcHBlclR5cGVQcm90b3R5cGUgd3JhcHBlclR5cGVQcm90b3R5cGU7CiAgICAgfTsK
KworICAgIGlubGluZSB2b2lkKiB0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVj
dCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvYmplY3QtPkludGVybmFsRmllbGRDb3VudCgpID49
IHY4RE9NV3JhcHBlck9iamVjdEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG9iamVjdC0+R2V0UG9p
bnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KTsKKyAgICB9CisK
KyAgICBpbmxpbmUgV3JhcHBlclR5cGVJbmZvKiB0b1dyYXBwZXJUeXBlSW5mbyh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IG9iamVjdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvYmplY3QtPkludGVy
bmFsRmllbGRDb3VudCgpID49IHY4RE9NV3JhcHBlclR5cGVJbmRleCk7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxXcmFwcGVyVHlwZUluZm8qPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50
ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJUeXBlSW5kZXgpKTsKKyAgICB9CisKIH0KIAogI2VuZGlm
IC8vIFdyYXBwZXJUeXBlSW5mb19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170464</attachid>
            <date>2012-10-24 13:47:05 -0700</date>
            <delta_ts>2012-10-24 14:37:10 -0700</delta_ts>
            <desc>Might actually work</desc>
            <filename>bug-100175-20121024134540.patch</filename>
            <type>text/plain</type>
            <size>44781</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZjY2NWY3MTBi
ZmI1NTljZjYxZmZkMTJjZjQ3MDE2NmM1OWU2MTc4MS4uM2Y0OTRmOTY1OWRlMGZmOTY4NmQ0NTA1
NTdlZTliZWJjNTczMTczZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjIzMiw2ICsyMjMyLDcgQEAK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvRE9NVHJhbnNhY3Rpb24uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92
OC9ET01UcmFuc2FjdGlvbi5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01XcmFwcGVy
TWFwLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5oJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9EYXRlRXh0ZW5zaW9uLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0RPTURhdGEuY3BwCmluZGV4IGRhNmVhNWIxYWU4YTlhNGJlZjc5ZDI5MWJmMGM4YzY0ZjkwYWFm
ZjkuLjE4NjQxZWM4ZGFiOWUxNjcxODNjZTcyOTY3NmEyYjBjMzUzZWYyZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0RPTURhdGEuY3BwCkBAIC01MSwxMSArNTEsNCBAQCBET01EYXRhU3Rv
cmUmIERPTURhdGE6OmdldEN1cnJlbnRTdG9yZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKICAgICBy
ZXR1cm4gZGVmYXVsdFN0b3JlOwogfQogCi12b2lkIERPTURhdGE6OmRlcmVmT2JqZWN0KFdyYXBw
ZXJUeXBlSW5mbyogdHlwZSwgdm9pZCogZG9tT2JqZWN0KQotewotICAgIHR5cGUtPmRlcmVmT2Jq
ZWN0KGRvbU9iamVjdCk7Ci19Ci0KLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmggYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9ET01EYXRhLmgKaW5kZXggN2RmOWRmZGJhOWUyOGFlMWVkNGY1NDM4MDU0
NjA0NmU1NjA5NmRkYi4uMzU1NGY3MjY3M2FlM2JiY2M5OGVkOTI2OTMwM2ZiZjY0YzI1ZDFlZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGEuaApAQCAtNDYsNjIgKzQ2LDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLwogICAgIGNsYXNzIERPTURhdGEgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgc3RhdGljIHZvaWQgaGFu
ZGxlV2Vha09iamVjdChET01EYXRhU3RvcmU6OkRPTVdyYXBwZXJNYXBUeXBlLCB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiwgVCogZG9tT2JqZWN0KTsKLQotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgICAgICBzdGF0aWMgdm9pZCByZW1vdmVPYmplY3RzRnJvbVdyYXBwZXJNYXAo
RE9NRGF0YVN0b3JlKiBzdG9yZSwgQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwPFQsIHY4OjpPYmpl
Y3Q+JiBkb21NYXApOwotCi0KICAgICAgICAgc3RhdGljIERPTURhdGFTdG9yZSYgZ2V0Q3VycmVu
dFN0b3JlKHY4OjpJc29sYXRlKiA9IDApOwogICAgIHByaXZhdGU6CiAgICAgICAgIERPTURhdGEo
KTsKLSAgICAgICAgc3RhdGljIHZvaWQgZGVyZWZPYmplY3QoV3JhcHBlclR5cGVJbmZvKiB0eXBl
LCB2b2lkKiBkb21PYmplY3QpOwotCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
ICAgIGNsYXNzIFdyYXBwZXJNYXBPYmplY3RSZW1vdmVyIDogcHVibGljIFdlYWtSZWZlcmVuY2VN
YXA8VCwgdjg6Ok9iamVjdD46OlZpc2l0b3IgewotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUsIFQqIGRv
bU9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gdjhPYmplY3QpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlID0gVjhET01XcmFwcGVy
Ojpkb21XcmFwcGVyVHlwZSh2OE9iamVjdCk7Ci0gICAgICAgICAgICAgICAgZGVyZWZPYmplY3Qo
dHlwZSwgZG9tT2JqZWN0KTsKLSAgICAgICAgICAgICAgICB2OE9iamVjdC5EaXNwb3NlKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH07CiAgICAgfTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci0gICAgdm9pZCBET01EYXRhOjpoYW5kbGVXZWFrT2JqZWN0KERPTURhdGFTdG9yZTo6RE9N
V3JhcHBlck1hcFR5cGUgbWFwVHlwZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gdjhPYmpl
Y3QsIFQqIGRvbU9iamVjdCkKLSAgICB7Ci0gICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZSA9
IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUodjhPYmplY3QpOwotICAgICAgICBET01EYXRh
TGlzdCYgbGlzdCA9IERPTURhdGFTdG9yZTo6YWxsU3RvcmVzKCk7Ci0gICAgICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBET01EYXRhU3RvcmUqIHN0b3JlID0gbGlzdFtpXTsKLQotICAg
ICAgICAgICAgRE9NV3JhcHBlck1hcDxUPiogZG9tTWFwID0gc3RhdGljX2Nhc3Q8RE9NV3JhcHBl
ck1hcDxUPio+KHN0b3JlLT5nZXRET01XcmFwcGVyTWFwKG1hcFR5cGUpKTsKLSAgICAgICAgICAg
IGlmIChkb21NYXAtPnJlbW92ZUlmUHJlc2VudChkb21PYmplY3QsIHY4T2JqZWN0KSkgewotICAg
ICAgICAgICAgICAgIGRlcmVmT2JqZWN0KHR5cGUsIGRvbU9iamVjdCk7Ci0gICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
SWYgbm90IGZvdW5kLCBpdCBtZWFucyBtYXAgZm9yIHRoZSB3cmFwcGVyIGhhcyBiZWVuIGFscmVh
ZHkgZGVzdHJveWVkLCBqdXN0IGRpc3Bvc2UgdGhlCi0gICAgICAgIC8vIGhhbmRsZSBhbmQgZGVy
ZWYgdGhlIG9iamVjdCB0byBmaWdodCBtZW1vcnkgbGVhay4KLSAgICAgICAgaWYgKCFmb3VuZCkg
ewotICAgICAgICAgICAgdjhPYmplY3QuRGlzcG9zZSgpOwotICAgICAgICAgICAgZGVyZWZPYmpl
Y3QodHlwZSwgZG9tT2JqZWN0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgdm9pZCBET01EYXRhOjpyZW1vdmVPYmplY3RzRnJvbVdyYXBwZXJNYXAo
RE9NRGF0YVN0b3JlKiBzdG9yZSwgQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwPFQsIHY4OjpPYmpl
Y3Q+JiBkb21NYXApCi0gICAgewotICAgICAgICBXcmFwcGVyTWFwT2JqZWN0UmVtb3ZlcjxUPiBy
ZW1vdmVyOwotICAgICAgICBkb21NYXAudmlzaXQoc3RvcmUsICZyZW1vdmVyKTsKLSAgICAgICAg
ZG9tTWFwLmNsZWFyKCk7Ci0gICAgfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBET01EYXRhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RP
TURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUu
Y3BwCmluZGV4IGRjMDg5NmNmM2I3MDIwN2ZmZjcxMzFkZTcxOGIyMWZiN2Q5ZjIxZjMuLmMyMTI3
NDhhOGI0NmM2MmVkOWE3MTI3Zjc0ZGYxOTBkNGI4OWRhYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcApAQCAtMTI4LDQ0ICsxMjgsNCBAQCB2b2lkIERP
TURhdGFTdG9yZTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2Jq
ZWN0SW5mbykgY29uc3QKICAgICBpbmZvLmFkZFdlYWtQb2ludGVyKG1fYWN0aXZlRG9tT2JqZWN0
TWFwKTsKIH0KIAotLy8gQ2FsbGVkIHdoZW4gdGhlIG9iamVjdCBpcyBuZWFyIGRlYXRoIChub3Qg
cmVhY2hhYmxlIGZyb20gSlMgcm9vdHMpLgotLy8gSXQgaXMgdGltZSB0byByZW1vdmUgdGhlIGVu
dHJ5IGZyb20gdGhlIHRhYmxlIGFuZCBkaXNwb3NlIHRoZSBoYW5kbGUuCi12b2lkIERPTURhdGFT
dG9yZTo6d2Vha0RPTU9iamVjdENhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdjhP
YmplY3QsIHZvaWQqIGRvbU9iamVjdCkKLXsKLSAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7Ci0g
ICAgQVNTRVJUKHY4T2JqZWN0LT5Jc09iamVjdCgpKTsKLSAgICBET01EYXRhOjpoYW5kbGVXZWFr
T2JqZWN0KERPTURhdGFTdG9yZTo6RE9NT2JqZWN0TWFwLCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0Pjo6Q2FzdCh2OE9iamVjdCksIGRvbU9iamVjdCk7Ci19Ci0KLXZvaWQgRE9NRGF0YVN0b3Jl
Ojp3ZWFrQWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2
OE9iamVjdCwgdm9pZCogZG9tT2JqZWN0KQotewotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsK
LSAgICBBU1NFUlQodjhPYmplY3QtPklzT2JqZWN0KCkpOwotICAgIERPTURhdGE6OmhhbmRsZVdl
YWtPYmplY3QoRE9NRGF0YVN0b3JlOjpBY3RpdmVET01PYmplY3RNYXAsIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+OjpDYXN0KHY4T2JqZWN0KSwgZG9tT2JqZWN0KTsKLX0KLQotdm9pZCBET01E
YXRhU3RvcmU6OndlYWtOb2RlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2YWx1
ZSwgdm9pZCogZG9tT2JqZWN0KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAg
ICBOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8Tm9kZSo+KGRvbU9iamVjdCk7Ci0gICAgLy8gTm9k
ZSB3cmFwcGVycyBtdXN0IGJlIEpTIG9iamVjdHMuCi0gICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4gdjhPYmplY3QgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSk7
Ci0KLSAgICBET01EYXRhTGlzdCYgbGlzdCA9IERPTURhdGFTdG9yZTo6YWxsU3RvcmVzKCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIERP
TURhdGFTdG9yZSogc3RvcmUgPSBsaXN0W2ldOwotICAgICAgICBET01Ob2RlTWFwcGluZyYgbm9k
ZU1hcCA9IG5vZGUtPmlzQWN0aXZlTm9kZSgpID8gc3RvcmUtPmFjdGl2ZURvbU5vZGVNYXAoKSA6
IHN0b3JlLT5kb21Ob2RlTWFwKCk7Ci0gICAgICAgIGlmIChub2RlTWFwLnJlbW92ZUlmUHJlc2Vu
dChub2RlLCB2OE9iamVjdCkpIHsKLSAgICAgICAgICAgIG5vZGUtPmRlcmVmKCk7IC8vIE5vYm9k
eSBvdmVycmlkZXMgTm9kZTo6ZGVyZWYgc28gaXQncyBzYWZlCi0gICAgICAgICAgICByZXR1cm47
IC8vIFRoZXJlIG1pZ2h0IGJlIGF0IG1vc3Qgb25lIHdyYXBwZXIgZm9yIHRoZSBub2RlIGluIHdv
cmxkJ3MgbWFwcwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgbm90IGZvdW5kLCBpdCBt
ZWFucyBtYXAgZm9yIHRoZSB3cmFwcGVyIGhhcyBiZWVuIGFscmVhZHkgZGVzdHJveWVkLCBqdXN0
IGRpc3Bvc2UgdGhlCi0gICAgLy8gaGFuZGxlIGFuZCBkZXJlZiB0aGUgb2JqZWN0IHRvIGZpZ2h0
IG1lbW9yeSBsZWFrLgotICAgIHY4T2JqZWN0LkRpc3Bvc2UoKTsKLSAgICBub2RlLT5kZXJlZigp
OyAvLyBOb2JvZHkgb3ZlcnJpZGVzIE5vZGU6OmRlcmVmIHNvIGl0J3Mgc2FmZQotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9ET01EYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9y
ZS5oCmluZGV4IDM3NzE2NzU0OGY3YzVmZTg2YzQ4M2MwNzU2YWE4NTg3NGRiOWMzNmMuLmU2NzZm
ZTBjNDMwYmM0YzhhNGE1OTQ3MmRjNzRlZGQwYzJiZjRkM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oCkBAIC0zMSw4ICszMSw4IEBACiAjaWZuZGVmIERPTURh
dGFTdG9yZV9oCiAjZGVmaW5lIERPTURhdGFTdG9yZV9oCiAKLSNpbmNsdWRlICJWOERPTU1hcC5o
IgotCisjaW5jbHVkZSAiRE9NV3JhcHBlck1hcC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNs
dWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KQEAgLTcyLDI3ICs3MiwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IERPTURhdGFTdG9yZSgpOwogICAgICAgICB2aXJ0dWFsIH5ET01EYXRhU3RvcmUoKTsKIAotICAg
ICAgICAvLyBBIGxpc3Qgb2YgYWxsIERPTURhdGFTdG9yZSBvYmplY3RzIGluIHRoZSBjdXJyZW50
IFY4IGluc3RhbmNlICh0aHJlYWQpLiBOb3JtYWxseSwgZWFjaCBXb3JsZCBoYXMgYSBET01EYXRh
U3RvcmUuCisgICAgICAgIC8vIEEgbGlzdCBvZiBhbGwgRE9NRGF0YVN0b3JlIG9iamVjdHMgaW4g
dGhlIGN1cnJlbnQgVjggaXNvbGF0ZS4gTm9ybWFsbHksIGVhY2ggV29ybGQgaGFzIGEgRE9NRGF0
YVN0b3JlLgogICAgICAgICBzdGF0aWMgRE9NRGF0YUxpc3QmIGFsbFN0b3JlcygpOwogCiAgICAg
ICAgIHZvaWQqIGdldERPTVdyYXBwZXJNYXAoRE9NV3JhcHBlck1hcFR5cGUpOwogCi0gICAgICAg
IERPTU5vZGVNYXBwaW5nJiBkb21Ob2RlTWFwKCkgeyByZXR1cm4gKm1fZG9tTm9kZU1hcDsgfQot
ICAgICAgICBET01Ob2RlTWFwcGluZyYgYWN0aXZlRG9tTm9kZU1hcCgpIHsgcmV0dXJuICptX2Fj
dGl2ZURvbU5vZGVNYXA7IH0KKyAgICAgICAgRE9NV3JhcHBlck1hcDxOb2RlPiYgZG9tTm9kZU1h
cCgpIHsgcmV0dXJuICptX2RvbU5vZGVNYXA7IH0KKyAgICAgICAgRE9NV3JhcHBlck1hcDxOb2Rl
PiYgYWN0aXZlRG9tTm9kZU1hcCgpIHsgcmV0dXJuICptX2FjdGl2ZURvbU5vZGVNYXA7IH0KICAg
ICAgICAgRE9NV3JhcHBlck1hcDx2b2lkPiYgZG9tT2JqZWN0TWFwKCkgeyByZXR1cm4gKm1fZG9t
T2JqZWN0TWFwOyB9CiAgICAgICAgIERPTVdyYXBwZXJNYXA8dm9pZD4mIGFjdGl2ZURvbU9iamVj
dE1hcCgpIHsgcmV0dXJuICptX2FjdGl2ZURvbU9iamVjdE1hcDsgfQogCi0gICAgICAgIC8vIE5l
ZWQgYnkgVjhHQ0NvbnRyb2xsZXIuCi0gICAgICAgIHN0YXRpYyB2b2lkIHdlYWtBY3RpdmVET01P
YmplY3RDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4T2JqZWN0LCB2b2lkKiBk
b21PYmplY3QpOwotICAgICAgICBzdGF0aWMgdm9pZCB3ZWFrTm9kZUNhbGxiYWNrKHY4OjpQZXJz
aXN0ZW50PHY4OjpWYWx1ZT4gdjhPYmplY3QsIHZvaWQqIGRvbU9iamVjdCk7Ci0KICAgICAgICAg
dmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsK
IAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3RhdGljIHZvaWQgd2Vha0RPTU9iamVjdENhbGxi
YWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdjhPYmplY3QsIHZvaWQqIGRvbU9iamVjdCk7
Ci0KLSAgICAgICAgRE9NTm9kZU1hcHBpbmcqIG1fZG9tTm9kZU1hcDsKLSAgICAgICAgRE9NTm9k
ZU1hcHBpbmcqIG1fYWN0aXZlRG9tTm9kZU1hcDsKKyAgICAgICAgRE9NV3JhcHBlck1hcDxOb2Rl
PiogbV9kb21Ob2RlTWFwOworICAgICAgICBET01XcmFwcGVyTWFwPE5vZGU+KiBtX2FjdGl2ZURv
bU5vZGVNYXA7CiAgICAgICAgIERPTVdyYXBwZXJNYXA8dm9pZD4qIG1fZG9tT2JqZWN0TWFwOwog
ICAgICAgICBET01XcmFwcGVyTWFwPHZvaWQ+KiBtX2FjdGl2ZURvbU9iamVjdE1hcDsKICAgICB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlck1hcC5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlck1hcC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljk3NDdkY2VjYjQyNjA0YWM1YzM4MGQ5ODE1YjhjMDExMDdmNDU3YjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyTWFwLmgKQEAgLTAsMCAr
MSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIERPTVdyYXBwZXJNYXBfaAorI2RlZmluZSBET01XcmFwcGVyTWFwX2gK
KworI2luY2x1ZGUgIldlYkNvcmVNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJX
cmFwcGVyVHlwZUluZm8uaCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hNYXAuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBET01EYXRhU3RvcmU7CisKK3RlbXBsYXRlPGNsYXNz
IEtleVR5cGU+CitjbGFzcyBET01XcmFwcGVyVmlzaXRvciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqLCBLZXlUeXBlKiwgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikgPSAwOworICAgIHZpcnR1YWwgfkRPTVdyYXBwZXJW
aXNpdG9yKCkgeyB9Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBLZXlUeXBlPgorY2xhc3MgRE9NV3Jh
cHBlck1hcCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RE9NV3JhcHBlck1hcCgpIHsgfQorCisg
ICAgdmlydHVhbCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBnZXQoS2V5VHlwZSopID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0KEtleVR5cGUqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChET01EYXRhU3RvcmUqLCBET01XcmFwcGVy
VmlzaXRvcjxLZXlUeXBlPiopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNv
bnN0ID0gMDsKK307CisKK3RlbXBsYXRlPGNsYXNzIEtleVR5cGU+CitjbGFzcyBET01XcmFwcGVy
SGFzaE1hcCA6IHB1YmxpYyBET01XcmFwcGVyTWFwPEtleVR5cGU+IHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIEhhc2hNYXA8S2V5VHlwZSosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+ID4gTWFw
VHlwZTsKKworICAgIGV4cGxpY2l0IERPTVdyYXBwZXJIYXNoTWFwKHY4OjpXZWFrUmVmZXJlbmNl
Q2FsbGJhY2sgY2FsbGJhY2sgPSAwKQorICAgICAgICA6IG1fY2FsbGJhY2soY2FsbGJhY2spCisg
ICAgeworICAgICAgICBpZiAoIW1fY2FsbGJhY2spCisgICAgICAgICAgICBtX2NhbGxiYWNrID0g
JmRlZmF1bHRXZWFrQ2FsbGJhY2s7CisgICAgfQorCisgICAgdmlydHVhbCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0PiBnZXQoS2V5VHlwZSoga2V5KSBPVkVSUklERQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fbWFwLmdldChrZXkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXQoS2V5
VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKSBPVkVSUklERQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX21hcC5jb250YWlucyhrZXkpKTsKKyAgICAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PEtleVR5cGUqPih0b05hdGl2ZSh3cmFwcGVyKSkgPT0ga2V5KTsKKyAg
ICAgICAgd3JhcHBlci5NYWtlV2Vhayh0aGlzLCBtX2NhbGxiYWNrKTsKKyAgICAgICAgbV9tYXAu
c2V0KGtleSwgd3JhcHBlcik7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0KERPTURh
dGFTdG9yZSogc3RvcmUsIERPTVdyYXBwZXJWaXNpdG9yPEtleVR5cGU+KiB2aXNpdG9yKSBPVkVS
UklERQorICAgIHsKKyAgICAgICAgZm9yICh0eXBlbmFtZSBNYXBUeXBlOjppdGVyYXRvciBpdCA9
IG1fbWFwLmJlZ2luKCk7IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KQorICAgICAgICAgICAgdmlz
aXRvci0+dmlzaXRET01XcmFwcGVyKHN0b3JlLCBpdC0+a2V5LCBpdC0+dmFsdWUpOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpIE9WRVJSSURFCisgICAgeworICAgICAgICBmb3Ig
KHR5cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gbV9t
YXAuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
IHdyYXBwZXIgPSBpdC0+dmFsdWU7CisgICAgICAgICAgICB0b1dyYXBwZXJUeXBlSW5mbyh3cmFw
cGVyKS0+ZGVyZWZPYmplY3QoaXQtPmtleSk7CisgICAgICAgICAgICB3cmFwcGVyLkRpc3Bvc2Uo
KTsKKyAgICAgICAgfQorICAgICAgICBtX21hcC5jbGVhcigpOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJ
bmZvKSBjb25zdCBPVkVSUklERQorICAgIHsKKyAgICAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8o
bWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpCaW5kaW5nKTsKKyAg
ICAgICAgaW5mby5hZGRNZW1iZXIobV9tYXApOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmUoS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQor
ICAgIHsKKyAgICAgICAgdHlwZW5hbWUgTWFwVHlwZTo6aXRlcmF0b3IgaXQgPSBtX21hcC5maW5k
KGtleSk7CisgICAgICAgIEFTU0VSVChpdCAhPSBtX21hcC5lbmQoKSk7CisgICAgICAgIEFTU0VS
VChpdC0+dmFsdWUgPT0gd3JhcHBlcik7CisgICAgICAgIG1fbWFwLnJlbW92ZShpdCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGRlZmF1bHRXZWFrQ2FsbGJhY2sodjg6OlBl
cnNpc3RlbnQ8djg6OlZhbHVlPiB2YWx1ZSwgdm9pZCogY29udGV4dCkKKyAgICB7CisgICAgICAg
IERPTVdyYXBwZXJIYXNoTWFwPEtleVR5cGU+KiBtYXAgPSBzdGF0aWNfY2FzdDxET01XcmFwcGVy
SGFzaE1hcDxLZXlUeXBlPio+KGNvbnRleHQpOworICAgICAgICBBU1NFUlQodmFsdWUtPklzT2Jq
ZWN0KCkpOworICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpOworICAgICAgICBXcmFwcGVyVHlw
ZUluZm8qIHR5cGUgPSB0b1dyYXBwZXJUeXBlSW5mbyh3cmFwcGVyKTsKKyAgICAgICAgS2V5VHlw
ZSoga2V5ID0gc3RhdGljX2Nhc3Q8S2V5VHlwZSo+KHRvTmF0aXZlKHdyYXBwZXIpKTsKKworICAg
ICAgICBtYXAtPnJlbW92ZShrZXksIHdyYXBwZXIpOworICAgICAgICB3cmFwcGVyLkRpc3Bvc2Uo
KTsKKyAgICAgICAgdHlwZS0+ZGVyZWZPYmplY3Qoa2V5KTsKKyAgICB9CisKKyAgICB2ODo6V2Vh
a1JlZmVyZW5jZUNhbGxiYWNrIG1fY2FsbGJhY2s7CisgICAgTWFwVHlwZSBtX21hcDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERPTVdyYXBwZXJNYXBfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaAppbmRleCBhZGYxMjRl
YzI3NWI4ODk5OThiMjdlNGE3NzBiZTViZDg4OTU2YWQ1Li41ZmM5NzE2M2JlNGVjNTk2MGJiN2Ez
MzZmZjJlYTVhYjJiMTZlMTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9ET01XcmFwcGVyV29ybGQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01X
cmFwcGVyV29ybGQuaApAQCAtMzEsOCArMzEsOCBAQAogI2lmbmRlZiBET01XcmFwcGVyV29ybGRf
aAogI2RlZmluZSBET01XcmFwcGVyV29ybGRfaAogCi0jaW5jbHVkZSAiRE9NRGF0YVN0b3JlLmgi
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJWOERPTU1hcC5oIgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9JbnRydXNpdmVET01XcmFwcGVyTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9JbnRydXNpdmVET01XcmFwcGVyTWFwLmgKaW5kZXggZDY2Yzc2MTZjZWVkOTM1NDRiODM3ODJh
Y2I3NGRkNzQxODZlNzIwMC4uNjA5Y2ZjNzlkODY2N2Y1ZWYxMThkZGY2ZGE2YmY3YTY4YTQ0NDFi
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSW50cnVzaXZlRE9NV3Jh
cHBlck1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0ludHJ1c2l2ZURPTVdy
YXBwZXJNYXAuaApAQCAtMzEsNzYgKzMxLDU5IEBACiAjaWZuZGVmIEludHJ1c2l2ZURPTVdyYXBw
ZXJNYXBfaAogI2RlZmluZSBJbnRydXNpdmVET01XcmFwcGVyTWFwX2gKIAotI2luY2x1ZGUgIkRP
TURhdGFTdG9yZS5oIgotI2luY2x1ZGUgIlY4RE9NTWFwLmgiCi0jaW5jbHVkZSAiVjhOb2RlLmgi
Ci0jaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkRP
TVdyYXBwZXJNYXAuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBET01Ob2RlV3Jh
cHBlck1hcCA6IHB1YmxpYyBBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXA8Tm9kZSwgdjg6Ok9iamVj
dD4geworY2xhc3MgRE9NTm9kZVdyYXBwZXJNYXAgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDxOb2Rl
PiB7CiBwdWJsaWM6Ci0gICAgRE9NTm9kZVdyYXBwZXJNYXAodjg6OldlYWtSZWZlcmVuY2VDYWxs
YmFjayBjYWxsYmFjaykKLSAgICAgICAgOiBBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXA8Tm9kZSwg
djg6Ok9iamVjdD4oY2FsbGJhY2spCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD4gZ2V0KE5vZGUqIG5vZGUpCisgICAgdmlydHVhbCB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0PiBnZXQoTm9kZSogbm9kZSkgT1ZFUlJJREUKICAgICB7CiAgICAg
ICAgIHJldHVybiBub2RlLT53cmFwcGVyKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHNl
dChOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQorICAgIHZp
cnR1YWwgdm9pZCBzZXQoTm9kZSogbm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3Jh
cHBlcikgT1ZFUlJJREUKICAgICB7CiAgICAgICAgIEFTU0VSVChub2RlICYmIG5vZGUtPndyYXBw
ZXIoKS5Jc0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQod3JhcHBlci5XcmFwcGVyQ2xhc3NJZCgp
ID09IHY4RE9NU3VidHJlZUNsYXNzSWQpOwogICAgICAgICBub2RlLT5zZXRXcmFwcGVyKHdyYXBw
ZXIpOwotICAgICAgICB3cmFwcGVyLk1ha2VXZWFrKG5vZGUsIHdlYWtSZWZlcmVuY2VDYWxsYmFj
aygpKTsKKyAgICAgICAgd3JhcHBlci5NYWtlV2Vhayhub2RlLCB3ZWFrQ2FsbGJhY2spOwogICAg
IH0KIAotICAgIHZpcnR1YWwgYm9vbCBjb250YWlucyhOb2RlKiBub2RlKQorICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChET01EYXRhU3RvcmUqIHN0b3JlLCBET01XcmFwcGVyVmlzaXRvcjxOb2RlPiog
dmlzaXRvcikgT1ZFUlJJREUKICAgICB7Ci0gICAgICAgIHJldHVybiAhbm9kZS0+d3JhcHBlcigp
LklzRW1wdHkoKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAg
dmlydHVhbCB2b2lkIHZpc2l0KERPTURhdGFTdG9yZSogc3RvcmUsIFZpc2l0b3IqIHZpc2l0b3Ip
CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgT1ZFUlJJREUKICAgICB7CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCByZW1vdmVJZlByZXNl
bnQoTm9kZSogbm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gdmFsdWUpCisgICAgdmly
dHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVj
dEluZm8pIGNvbnN0IE9WRVJSSURFCiAgICAgewotICAgICAgICBBU1NFUlQobm9kZSk7Ci0gICAg
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBub2RlLT53cmFwcGVyKCk7
Ci0gICAgICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKHdyYXBwZXIgIT0gdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIG5vZGUtPmRpc3Bvc2VXcmFwcGVyKCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpCitwcml2YXRlOgorICAgIHN0YXRp
YyB2b2lkIHdlYWtDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHZhbHVlLCB2b2lk
KiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQor
ICAgICAgICBOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8Tm9kZSo+KGNvbnRleHQpOworICAgICAg
ICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkpOworICAgICAgICBBU1NFUlQobm9kZS0+d3JhcHBl
cigpID09IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSk7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2Jq
ZWN0SW5mbykgY29uc3QgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgZGF0YSBzdHJ1
Y3R1cmUgZG9lc24ndCB1c2UgYW55IGV4dHJhIG1lbW9yeS4KKyAgICAgICAgbm9kZS0+Y2xlYXJX
cmFwcGVyKCk7CisgICAgICAgIHZhbHVlLkRpc3Bvc2UoKTsKKyAgICAgICAgbm9kZS0+ZGVyZWYo
KTsKICAgICB9CiB9OwogCi1jbGFzcyBBY3RpdmVET01Ob2RlV3JhcHBlck1hcCA6IHB1YmxpYyBE
T01XcmFwcGVyTWFwPE5vZGU+IHsKK2NsYXNzIEFjdGl2ZURPTU5vZGVXcmFwcGVyTWFwIDogcHVi
bGljIERPTVdyYXBwZXJIYXNoTWFwPE5vZGU+IHsKIHB1YmxpYzoKLSAgICBBY3RpdmVET01Ob2Rl
V3JhcHBlck1hcCh2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrKQotICAgICAgICA6
IERPTVdyYXBwZXJNYXA8Tm9kZT4oY2FsbGJhY2spCi0gICAgewotICAgIH0KLQogICAgIHZpcnR1
YWwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gZ2V0KE5vZGUqIG5vZGUpIE9WRVJSSURFCiAg
ICAgewotICAgICAgICByZXR1cm4gbm9kZS0+d3JhcHBlcigpOworICAgICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gbm9kZS0+d3JhcHBlcigpOworICAgICAgICBBU1NF
UlQoRE9NV3JhcHBlckhhc2hNYXA8Tm9kZT46OmdldChub2RlKSA9PSB3cmFwcGVyKTsKKyAgICAg
ICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHNldChOb2RlKiBu
b2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKSBPVkVSUklERQpAQCAtMTA4
LDIyICs5MSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChub2RlICYmIG5vZGUtPndyYXBw
ZXIoKS5Jc0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQod3JhcHBlci5XcmFwcGVyQ2xhc3NJZCgp
ID09IHY4RE9NU3VidHJlZUNsYXNzSWQpOwogICAgICAgICBub2RlLT5zZXRXcmFwcGVyKHdyYXBw
ZXIpOwotICAgICAgICBET01XcmFwcGVyTWFwPE5vZGU+OjpzZXQobm9kZSwgd3JhcHBlcik7Cisg
ICAgICAgIERPTVdyYXBwZXJIYXNoTWFwPE5vZGU+OjpzZXQobm9kZSwgd3JhcHBlcik7CiAgICAg
fQogCi0gICAgdmlydHVhbCBib29sIHJlbW92ZUlmUHJlc2VudChOb2RlKiBub2RlLCB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0PiB2YWx1ZSkgT1ZFUlJJREUKKyAgICB2aXJ0dWFsIHZvaWQgY2xl
YXIoKSBPVkVSUklERQogICAgIHsKLSAgICAgICAgaWYgKCFET01XcmFwcGVyTWFwPE5vZGU+Ojpy
ZW1vdmVJZlByZXNlbnQobm9kZSwgdmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAvLyBOb3RpY2UgdGhhdCB3ZSBjYWxsICJjbGVhcldyYXBwZXIiIGhlcmUgcmF0aGVy
IHRoYW4gZGlzcG9zZVdyYXBwZXIgYmVjYXVzZQotICAgICAgICAvLyBvdXIgYmFzZSBjbGFzcyB3
aWxsIGNhbGwgRGlzcG9zZSBvbiB0aGUgd3JhcHBlciBmb3IgdXMuCi0gICAgICAgIG5vZGUtPmNs
ZWFyV3JhcHBlcigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgT1ZFUlJJREUKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKE5vZGUqIG5vZGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IHdyYXBwZXIpIE9WRVJSSURFCiAgICAgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPndyYXBwZXIoKSA9PSB3cmFwcGVyKTsKKyAgICAgICAg
bm9kZS0+Y2xlYXJXcmFwcGVyKCk7CisgICAgICAgIERPTVdyYXBwZXJIYXNoTWFwPE5vZGU+Ojpy
ZW1vdmUobm9kZSwgd3JhcHBlcik7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NvcGVkRE9NRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Njb3BlZERPTURhdGFTdG9yZS5jcHAKaW5kZXggYmJkZGM1YzFiY2M5MWNm
YWQ3ZjY5NzcwNjMyYTA0MzUyYTJmODY0Ny4uOWFiN2U1MjQzOTQ3ODEwNTZkNTgzZTY5NTRlMWU4
NGY2NjhmN2RlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NvcGVk
RE9NRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY29wZWRE
T01EYXRhU3RvcmUuY3BwCkBAIC0zOSwxNCArMzksMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
U2NvcGVkRE9NRGF0YVN0b3JlOjpTY29wZWRET01EYXRhU3RvcmUoKQogICAgIDogRE9NRGF0YVN0
b3JlKCkKIHsKLSAgICBtX2RvbU5vZGVNYXAgPSBuZXcgRE9NV3JhcHBlck1hcDxOb2RlPigmRE9N
RGF0YVN0b3JlOjp3ZWFrTm9kZUNhbGxiYWNrKTsKLSAgICBtX2FjdGl2ZURvbU5vZGVNYXAgPSBu
ZXcgRE9NV3JhcHBlck1hcDxOb2RlPigmRE9NRGF0YVN0b3JlOjp3ZWFrTm9kZUNhbGxiYWNrKTsK
LSAgICBtX2RvbU9iamVjdE1hcCA9IG5ldyBET01XcmFwcGVyTWFwPHZvaWQ+KCZET01EYXRhU3Rv
cmU6OndlYWtET01PYmplY3RDYWxsYmFjayk7Ci0gICAgbV9hY3RpdmVEb21PYmplY3RNYXAgPSBu
ZXcgRE9NV3JhcHBlck1hcDx2b2lkPigmRE9NRGF0YVN0b3JlOjp3ZWFrQWN0aXZlRE9NT2JqZWN0
Q2FsbGJhY2spOworICAgIG1fZG9tTm9kZU1hcCA9IG5ldyBET01XcmFwcGVySGFzaE1hcDxOb2Rl
PjsKKyAgICBtX2FjdGl2ZURvbU5vZGVNYXAgPSBuZXcgRE9NV3JhcHBlckhhc2hNYXA8Tm9kZT47
CisgICAgbV9kb21PYmplY3RNYXAgPSBuZXcgRE9NV3JhcHBlckhhc2hNYXA8dm9pZD47CisgICAg
bV9hY3RpdmVEb21PYmplY3RNYXAgPSBuZXcgRE9NV3JhcHBlckhhc2hNYXA8dm9pZD47CiB9CiAK
IFNjb3BlZERPTURhdGFTdG9yZTo6flNjb3BlZERPTURhdGFTdG9yZSgpCiB7CisgICAgLy8gRklY
TUU6IENvbnNpZGVyIG1vdmluZyB0aGVzZSBjYWxscyB0byBjbGVhcigpCisgICAgLy8gaW50byB0
aGUgRE9NV3JhcHBlckhhc2hNYXAgZGVzdHJ1Y3Rvci4KKyAgICBtX2RvbU5vZGVNYXAtPmNsZWFy
KCk7CisgICAgbV9hY3RpdmVEb21Ob2RlTWFwLT5jbGVhcigpOworICAgIG1fZG9tT2JqZWN0TWFw
LT5jbGVhcigpOworICAgIG1fYWN0aXZlRG9tT2JqZWN0TWFwLT5jbGVhcigpOworCiAgICAgZGVs
ZXRlIG1fZG9tTm9kZU1hcDsKICAgICBkZWxldGUgbV9hY3RpdmVEb21Ob2RlTWFwOwogICAgIGRl
bGV0ZSBtX2RvbU9iamVjdE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdFByb2ZpbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dFByb2ZpbGVyLmNwcAppbmRleCBiNTM5MjlhOWJkNDk1MGZhN2UyMWY0NmFjNDk1MzYxOTA1ZjEy
MmE4Li4xYjcxOTFjYWE0YTg0ODA1M2M0ZjMzMTE0YzhkNTcxNTk2MTU5ZTIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwCkBAIC0yMDUsNyArMjA1
LDcgQEAgdm9pZCBTY3JpcHRQcm9maWxlcjo6dmlzaXRFeHRlcm5hbFN0cmluZ3MoRXh0ZXJuYWxT
dHJpbmdWaXNpdG9yKiB2aXNpdG9yKQogCiB2b2lkIFNjcmlwdFByb2ZpbGVyOjp2aXNpdEV4dGVy
bmFsQXJyYXlzKEV4dGVybmFsQXJyYXlWaXNpdG9yKiB2aXNpdG9yKQogewotICAgIGNsYXNzIFZp
c2l0b3JBZGFwdGVyIDogcHVibGljIERPTVdyYXBwZXJNYXA8dm9pZD46OlZpc2l0b3IgeworICAg
IGNsYXNzIFZpc2l0b3JBZGFwdGVyIDogcHVibGljIERPTVdyYXBwZXJWaXNpdG9yPHZvaWQ+IHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIFZpc2l0b3JBZGFwdGVyKEV4dGVybmFsQXJyYXlWaXNpdG9y
KiB2aXNpdG9yKSA6IG1fdmlzaXRvcih2aXNpdG9yKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5jcHAKaW5kZXggNWQ5ZDA5Y2UxMzlk
NDE4MjdkZDk3ZDYwMzEzYmExZmI2MGMzNmQzNS4uYzQ5ZjlmZDA5NzU5MmFiNmMwNzEwMGM3MGU3
YzdlZTRiZmVhZGM3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU3Rh
dGljRE9NRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0
aWNET01EYXRhU3RvcmUuY3BwCkBAIC0zNiwxMSArMzYsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBTdGF0aWNET01EYXRhU3RvcmU6OlN0YXRpY0RPTURhdGFTdG9yZSgpCi0gICAgOiBET01E
YXRhU3RvcmUoKQotICAgICwgbV9zdGF0aWNEb21Ob2RlTWFwKCZET01EYXRhU3RvcmU6OndlYWtO
b2RlQ2FsbGJhY2spCi0gICAgLCBtX3N0YXRpY0FjdGl2ZURvbU5vZGVNYXAoJkRPTURhdGFTdG9y
ZTo6d2Vha05vZGVDYWxsYmFjaykKLSAgICAsIG1fc3RhdGljRG9tT2JqZWN0TWFwKCZET01EYXRh
U3RvcmU6OndlYWtET01PYmplY3RDYWxsYmFjaykKLSAgICAsIG1fc3RhdGljQWN0aXZlRG9tT2Jq
ZWN0TWFwKCZET01EYXRhU3RvcmU6OndlYWtBY3RpdmVET01PYmplY3RDYWxsYmFjaykKIHsKICAg
ICBtX2RvbU5vZGVNYXAgPSAmbV9zdGF0aWNEb21Ob2RlTWFwOwogICAgIG1fYWN0aXZlRG9tTm9k
ZU1hcCA9ICZtX3N0YXRpY0FjdGl2ZURvbU5vZGVNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5oCmluZGV4IDgxMDkzMDUwZWM3NjYxMDU5Zjhh
ZWMzNWQzYzJiNDFmMTdkYmM0MGIuLjIwZDExYWRhYWU1NmY4YjUyYTI2YTM4YjM5ZTAwNTRiYWMy
OGQzYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURh
dGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFT
dG9yZS5oCkBAIC01NCw4ICs1NCw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRE9NTm9kZVdy
YXBwZXJNYXAgbV9zdGF0aWNEb21Ob2RlTWFwOwogICAgIEFjdGl2ZURPTU5vZGVXcmFwcGVyTWFw
IG1fc3RhdGljQWN0aXZlRG9tTm9kZU1hcDsKLSAgICBET01XcmFwcGVyTWFwPHZvaWQ+IG1fc3Rh
dGljRG9tT2JqZWN0TWFwOwotICAgIERPTVdyYXBwZXJNYXA8dm9pZD4gbV9zdGF0aWNBY3RpdmVE
b21PYmplY3RNYXA7CisgICAgRE9NV3JhcHBlckhhc2hNYXA8dm9pZD4gbV9zdGF0aWNEb21PYmpl
Y3RNYXA7CisgICAgRE9NV3JhcHBlckhhc2hNYXA8dm9pZD4gbV9zdGF0aWNBY3RpdmVEb21PYmpl
Y3RNYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTU1hcC5jcHAKaW5kZXggZTZkYWI5MDk0NDdhNjcyYjhlZGFiMzE0NzM2NDcxZmI5
YWU4NzY3Yi4uNWViNjMwYmUxYWRjYjAwNzRhYWQwNDNiODJjYmQ5YmYzN2IzYTFjNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgIkRPTURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIlNjb3BlZERPTURhdGFTdG9yZS5oIgog
I2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU2LDEyICs1NywxMiBA
QCBOb2RlV3JhcHBlclZpc2l0b3I6On5Ob2RlV3JhcHBlclZpc2l0b3IoKQogewogfQogCi1ET01O
b2RlTWFwcGluZyYgZ2V0RE9NTm9kZU1hcCh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK0RPTVdyYXBw
ZXJNYXA8Tm9kZT4mIGdldERPTU5vZGVNYXAodjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAg
cmV0dXJuIERPTURhdGE6OmdldEN1cnJlbnRTdG9yZShpc29sYXRlKS5kb21Ob2RlTWFwKCk7CiB9
CiAKLURPTU5vZGVNYXBwaW5nJiBnZXRBY3RpdmVET01Ob2RlTWFwKHY4OjpJc29sYXRlKiBpc29s
YXRlKQorRE9NV3JhcHBlck1hcDxOb2RlPiYgZ2V0QWN0aXZlRE9NTm9kZU1hcCh2ODo6SXNvbGF0
ZSogaXNvbGF0ZSkKIHsKICAgICByZXR1cm4gRE9NRGF0YTo6Z2V0Q3VycmVudFN0b3JlKGlzb2xh
dGUpLmFjdGl2ZURvbU5vZGVNYXAoKTsKIH0KQEAgLTc4LDE0ICs3OSwxMSBAQCBET01XcmFwcGVy
TWFwPHZvaWQ+JiBnZXRBY3RpdmVET01PYmplY3RNYXAodjg6Oklzb2xhdGUqIGlzb2xhdGUpCiAK
IHZvaWQgcmVtb3ZlQWxsRE9NT2JqZWN0cygpCiB7Ci0gICAgRE9NRGF0YVN0b3JlJiBzdG9yZSA9
IERPTURhdGE6OmdldEN1cnJlbnRTdG9yZSgpOwotCi0gICAgdjg6OkhhbmRsZVNjb3BlIHNjb3Bl
OwogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gTm90ZTogV2Ugc2tpcCB0
aGUgTm9kZSB3cmFwcGVyIG1hcHMgYmVjYXVzZSB0aGV5IGV4aXN0IG9ubHkgb24gdGhlIG1haW4g
dGhyZWFkLgotICAgIERPTURhdGE6OnJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1hcDx2b2lkPigm
c3RvcmUsIHN0b3JlLmRvbU9iamVjdE1hcCgpKTsKLSAgICBET01EYXRhOjpyZW1vdmVPYmplY3Rz
RnJvbVdyYXBwZXJNYXA8dm9pZD4oJnN0b3JlLCBzdG9yZS5hY3RpdmVEb21PYmplY3RNYXAoKSk7
CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIERPTURhdGFTdG9yZSYgc3RvcmUgPSBE
T01EYXRhOjpnZXRDdXJyZW50U3RvcmUoKTsKKyAgICBzdG9yZS5kb21PYmplY3RNYXAoKS5jbGVh
cigpOworICAgIHN0b3JlLmFjdGl2ZURvbU9iamVjdE1hcCgpLmNsZWFyKCk7CiB9CiAKIHZvaWQg
dmlzaXRBbGxET01Ob2RlcyhOb2RlV3JhcHBlclZpc2l0b3IqIHZpc2l0b3IpCkBAIC0xMTcsNyAr
MTE1LDcgQEAgdm9pZCB2aXNpdEFsbERPTU5vZGVzKE5vZGVXcmFwcGVyVmlzaXRvciogdmlzaXRv
cikKICAgICB2ODo6Vjg6OlZpc2l0SGFuZGxlc1dpdGhDbGFzc0lkcygmdmlzaXRvckFkYXB0ZXIp
OwogfQogCi12b2lkIHZpc2l0QWN0aXZlRE9NTm9kZXMoRE9NV3JhcHBlck1hcDxOb2RlPjo6Vmlz
aXRvciogdmlzaXRvcikKK3ZvaWQgdmlzaXRBY3RpdmVET01Ob2RlcyhET01XcmFwcGVyVmlzaXRv
cjxOb2RlPiogdmlzaXRvcikKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CiAKQEAgLTEy
OSw3ICsxMjcsNyBAQCB2b2lkIHZpc2l0QWN0aXZlRE9NTm9kZXMoRE9NV3JhcHBlck1hcDxOb2Rl
Pjo6VmlzaXRvciogdmlzaXRvcikKICAgICB9CiB9CiAKLXZvaWQgdmlzaXRET01PYmplY3RzKERP
TVdyYXBwZXJNYXA8dm9pZD46OlZpc2l0b3IqIHZpc2l0b3IpCit2b2lkIHZpc2l0RE9NT2JqZWN0
cyhET01XcmFwcGVyVmlzaXRvcjx2b2lkPiogdmlzaXRvcikKIHsKICAgICB2ODo6SGFuZGxlU2Nv
cGUgc2NvcGU7CiAKQEAgLTE0MSw3ICsxMzksNyBAQCB2b2lkIHZpc2l0RE9NT2JqZWN0cyhET01X
cmFwcGVyTWFwPHZvaWQ+OjpWaXNpdG9yKiB2aXNpdG9yKQogICAgIH0KIH0KIAotdm9pZCB2aXNp
dEFjdGl2ZURPTU9iamVjdHMoRE9NV3JhcHBlck1hcDx2b2lkPjo6VmlzaXRvciogdmlzaXRvcikK
K3ZvaWQgdmlzaXRBY3RpdmVET01PYmplY3RzKERPTVdyYXBwZXJWaXNpdG9yPHZvaWQ+KiB2aXNp
dG9yKQogewogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NTWFwLmgKaW5kZXggZmYwNjFmZTE2MTkwMTFjNDk1ZmRkMjNkNmQzOTQxYjFkZTJh
MTVmZC4uNTY3NWMxZDVlODk0ZTU1YmY4Y2U2MzQ3OGUyMWIwNmJkZjhiNWFhNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIFY4
RE9NTWFwX2gKICNkZWZpbmUgVjhET01NYXBfaAogCisjaW5jbHVkZSAiRE9NV3JhcHBlck1hcC5o
IgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJXZWJDb3JlTWVtb3J5SW5zdHJ1bWVudGF0
aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTQwLDExNiArNDEsMTMgQEAKICNp
bmNsdWRlIDx2OC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgRE9NRGF0YVN0
b3JlOwotCi0gICAgdGVtcGxhdGUgPGNsYXNzIEtleVR5cGUsIGNsYXNzIFZhbHVlVHlwZT4gY2xh
c3MgQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEFic3Ry
YWN0V2Vha1JlZmVyZW5jZU1hcCh2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrKSA6
IG1fd2Vha1JlZmVyZW5jZUNhbGxiYWNrKGNhbGxiYWNrKSB7IH0KLSAgICAgICAgdmlydHVhbCB+
QWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwKCkgeyB9Ci0KLSAgICAgICAgY2xhc3MgVmlzaXRvciB7
Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdERPTVdyYXBw
ZXIoRE9NRGF0YVN0b3JlKiBzdG9yZSwgS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1
ZVR5cGU+IG9iamVjdCkgPSAwOwotICAgICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgICAgICB2aXJ0
dWFsIH5WaXNpdG9yKCkgeyB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmlydHVhbCB2ODo6UGVy
c2lzdGVudDxWYWx1ZVR5cGU+IGdldChLZXlUeXBlKiBvYmopID0gMDsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHNldChLZXlUeXBlKiBvYmosIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4gd3JhcHBl
cikgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnMoS2V5VHlwZSogb2JqKSA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdChET01EYXRhU3RvcmUqIHN0b3JlLCBWaXNpdG9y
KiB2aXNpdG9yKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCByZW1vdmVJZlByZXNlbnQoS2V5
VHlwZSosIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4pID0gMDsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGNsZWFyKCkgPSAwOwotCi0gICAgICAgIHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sgd2Vh
a1JlZmVyZW5jZUNhbGxiYWNrKCkgeyByZXR1cm4gbV93ZWFrUmVmZXJlbmNlQ2FsbGJhY2s7IH0K
LQotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5m
byopIGNvbnN0ID0gMDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHY4OjpXZWFrUmVmZXJlbmNl
Q2FsbGJhY2sgbV93ZWFrUmVmZXJlbmNlQ2FsbGJhY2s7Ci0gICAgfTsKLQotICAgIHR5cGVkZWYg
QWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwPE5vZGUsIHY4OjpPYmplY3Q+IERPTU5vZGVNYXBwaW5n
OwotCi0gICAgLy8gQSB0YWJsZSBvZiB3cmFwcGVycyB3aXRoIHdlYWsgcG9pbnRlcnMuCi0gICAg
Ly8gVGhpcyB0YWJsZSBhbGxvd3MgdXMgdG8gYXZvaWQgdHJhY2sgd3JhcHBlZCBvYmplY3RzIGZv
ciBkZWJ1Z2dpbmcKLSAgICAvLyBhbmQgZm9yIGVuc3VyaW5nIHRoYXQgd2UgZG9uJ3QgZG91Ymxl
IHdyYXAgdGhlIHNhbWUgb2JqZWN0LgotICAgIHRlbXBsYXRlPGNsYXNzIEtleVR5cGUsIGNsYXNz
IFZhbHVlVHlwZT4gY2xhc3MgV2Vha1JlZmVyZW5jZU1hcCA6IHB1YmxpYyBBYnN0cmFjdFdlYWtS
ZWZlcmVuY2VNYXA8S2V5VHlwZSwgVmFsdWVUeXBlPiB7Ci0gICAgcHVibGljOgotICAgICAgICB0
eXBlZGVmIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDxLZXlUeXBlLCBWYWx1ZVR5cGU+IFBhcmVu
dDsKLSAgICAgICAgV2Vha1JlZmVyZW5jZU1hcCh2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIGNh
bGxiYWNrKSA6IFBhcmVudChjYWxsYmFjaykgeyB9Ci0gICAgICAgIHZpcnR1YWwgfldlYWtSZWZl
cmVuY2VNYXAoKSB7IH0KLQotICAgICAgICAvLyBHZXQgdGhlIEpTIHdyYXBwZXIgb2JqZWN0IG9m
IGFuIG9iamVjdC4KLSAgICAgICAgdmlydHVhbCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IGdl
dChLZXlUeXBlKiBvYmopCi0gICAgICAgIHsKLSAgICAgICAgICAgIFZhbHVlVHlwZSogd3JhcHBl
ciA9IG1fbWFwLmdldChvYmopOwotICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIgPyB2ODo6UGVy
c2lzdGVudDxWYWx1ZVR5cGU+KHdyYXBwZXIpIDogdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldChLZXlUeXBlKiBvYmosIHY4
OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4gd3JhcHBlcikKLSAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKCFtX21hcC5jb250YWlucyhvYmopKTsKLSAgICAgICAgICAgIHdyYXBwZXIuTWFrZVdl
YWsob2JqLCBQYXJlbnQ6OndlYWtSZWZlcmVuY2VDYWxsYmFjaygpKTsKLSAgICAgICAgICAgIG1f
bWFwLnNldChvYmosICp3cmFwcGVyKTsKLSAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBmb3JnZXQoS2V5VHlwZSogb2JqKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQob2Jq
KTsKLSAgICAgICAgICAgIFZhbHVlVHlwZSogd3JhcHBlciA9IG1fbWFwLnRha2Uob2JqKTsKLSAg
ICAgICAgICAgIGlmICghd3JhcHBlcikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgICAgIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4gaGFuZGxlKHdyYXBwZXIpOwotICAgICAg
ICAgICAgaGFuZGxlLkRpc3Bvc2UoKTsKLSAgICAgICAgICAgIGhhbmRsZS5DbGVhcigpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYm9vbCByZW1vdmVJZlByZXNlbnQoS2V5VHlwZSoga2V5LCB2ODo6
UGVyc2lzdGVudDxWYWx1ZVR5cGU+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0eXBl
bmFtZSBIYXNoTWFwPEtleVR5cGUqLCBWYWx1ZVR5cGUqPjo6aXRlcmF0b3IgaXQgPSBtX21hcC5m
aW5kKGtleSk7Ci0gICAgICAgICAgICBpZiAoaXQgPT0gbV9tYXAuZW5kKCkgfHwgaXQtPnZhbHVl
ICE9ICp2YWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAg
IG1fbWFwLnJlbW92ZShpdCk7Ci0gICAgICAgICAgICB2YWx1ZS5EaXNwb3NlKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2xlYXIoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX21hcC5jbGVhcigpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ym9vbCBjb250YWlucyhLZXlUeXBlKiBvYmopIHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKG9iaik7
IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoRE9NRGF0YVN0b3JlKiBzdG9yZSwgdHlw
ZW5hbWUgUGFyZW50OjpWaXNpdG9yKiB2aXNpdG9yKQotICAgICAgICB7Ci0gICAgICAgICAgICB0
eXBlbmFtZSBIYXNoTWFwPEtleVR5cGUqLCBWYWx1ZVR5cGUqPjo6aXRlcmF0b3IgaXQgPSBtX21h
cC5iZWdpbigpOwotICAgICAgICAgICAgZm9yICg7IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KQot
ICAgICAgICAgICAgICAgIHZpc2l0b3ItPnZpc2l0RE9NV3JhcHBlcihzdG9yZSwgaXQtPmtleSwg
djg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPihpdC0+dmFsdWUpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1v
cnlPYmplY3RJbmZvKSBjb25zdCBPVkVSUklERQotICAgICAgICB7Ci0gICAgICAgICAgICBNZW1v
cnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlw
ZXM6OkJpbmRpbmcpOwotICAgICAgICAgICAgaW5mby5hZGRNZW1iZXIobV9tYXApOwotICAgICAg
ICB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEhhc2hNYXA8S2V5VHlwZSosIFZhbHVlVHlw
ZSo+IG1fbWFwOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgS2V5VHlwZT4gY2xhc3Mg
RE9NV3JhcHBlck1hcCA6IHB1YmxpYyBXZWFrUmVmZXJlbmNlTWFwPEtleVR5cGUsIHY4OjpPYmpl
Y3Q+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIERPTVdyYXBwZXJNYXAodjg6OldlYWtSZWZlcmVu
Y2VDYWxsYmFjayBjYWxsYmFjaykgOiBXZWFrUmVmZXJlbmNlTWFwPEtleVR5cGUsIHY4OjpPYmpl
Y3Q+KGNhbGxiYWNrKSB7IH0KLSAgICB9OworICAgIGNsYXNzIERPTURhdGFTdG9yZTsKIAogICAg
IC8vIEEgdXRpbGl0eSBjbGFzcyB0byBtYW5hZ2UgdGhlIGxpZmV0aW1lIG9mIHNldCBvZiBET00g
d3JhcHBlcnMuCiAgICAgY2xhc3MgRE9NRGF0YVN0b3JlSGFuZGxlIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIERPTURhdGFTdG9yZUhhbmRsZShib29sIGluaXRpYWxpemUpOworICAgICAgICBleHBs
aWNpdCBET01EYXRhU3RvcmVIYW5kbGUoYm9vbCBpbml0aWFsaXplKTsKICAgICAgICAgfkRPTURh
dGFTdG9yZUhhbmRsZSgpOwogCiAgICAgICAgIERPTURhdGFTdG9yZSogZ2V0U3RvcmUoKSBjb25z
dCB7IHJldHVybiBtX3N0b3JlLmdldCgpOyB9CkBAIC0xNTksMTAgKzU3LDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIH07CiAKICAgICAvLyBBIG1hcCBmcm9tIERPTSBub2RlIHRvIGl0cyBK
UyB3cmFwcGVyLgotICAgIERPTU5vZGVNYXBwaW5nJiBnZXRET01Ob2RlTWFwKHY4OjpJc29sYXRl
KiA9IDApOwotICAgIERPTU5vZGVNYXBwaW5nJiBnZXRBY3RpdmVET01Ob2RlTWFwKHY4OjpJc29s
YXRlKiA9IDApOwotICAgIHZvaWQgdmlzaXRBY3RpdmVET01Ob2RlcyhET01XcmFwcGVyTWFwPE5v
ZGU+OjpWaXNpdG9yKik7Ci0KKyAgICBET01XcmFwcGVyTWFwPE5vZGU+JiBnZXRET01Ob2RlTWFw
KHY4OjpJc29sYXRlKiA9IDApOworICAgIERPTVdyYXBwZXJNYXA8Tm9kZT4mIGdldEFjdGl2ZURP
TU5vZGVNYXAodjg6Oklzb2xhdGUqID0gMCk7CisgICAgdm9pZCB2aXNpdEFjdGl2ZURPTU5vZGVz
KERPTVdyYXBwZXJWaXNpdG9yPE5vZGU+Kik7CiAKICAgICBjbGFzcyBOb2RlV3JhcHBlclZpc2l0
b3IgewogICAgIHB1YmxpYzoKQEAgLTE3MywxMSArNzAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgLy8gQSBtYXAgZnJvbSBhIERPTSBvYmplY3QgKG5vbi1ub2RlKSB0byBpdHMgSlMg
d3JhcHBlci4gVGhpcyBtYXAgZG9lcyBub3QgY29udGFpbiB0aGUgRE9NIG9iamVjdHMgd2hpY2gg
Y2FuIGhhdmUgcGVuZGluZyBhY3Rpdml0eSAoYWN0aXZlIGRvbSBvYmplY3RzKS4KICAgICBET01X
cmFwcGVyTWFwPHZvaWQ+JiBnZXRET01PYmplY3RNYXAodjg6Oklzb2xhdGUqID0gMCk7Ci0gICAg
dm9pZCB2aXNpdERPTU9iamVjdHMoRE9NV3JhcHBlck1hcDx2b2lkPjo6VmlzaXRvciopOworICAg
IHZvaWQgdmlzaXRET01PYmplY3RzKERPTVdyYXBwZXJWaXNpdG9yPHZvaWQ+Kik7CiAKICAgICAv
LyBBIG1hcCBmcm9tIGEgRE9NIG9iamVjdCB0byBpdHMgSlMgd3JhcHBlciBmb3IgRE9NIG9iamVj
dHMgd2hpY2ggY2FuIGhhdmUgcGVuZGluZyBhY3Rpdml0eS4KICAgICBET01XcmFwcGVyTWFwPHZv
aWQ+JiBnZXRBY3RpdmVET01PYmplY3RNYXAodjg6Oklzb2xhdGUqID0gMCk7Ci0gICAgdm9pZCB2
aXNpdEFjdGl2ZURPTU9iamVjdHMoRE9NV3JhcHBlck1hcDx2b2lkPjo6VmlzaXRvciopOworICAg
IHZvaWQgdmlzaXRBY3RpdmVET01PYmplY3RzKERPTVdyYXBwZXJWaXNpdG9yPHZvaWQ+Kik7CiAK
ICAgICAvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgdG8gcmVtb3ZlIGFsbCBET00gb2JqZWN0cyBh
c3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgdGhyZWFkIHdoZW4gaXQgaXMgdGVhcmluZyBkb3du
LgogICAgIHZvaWQgcmVtb3ZlQWxsRE9NT2JqZWN0cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKaW5kZXggMTcyODM1ODE4MzlhMTU1NzhiY2ZhNzk0ZTk2
NWZiODk4MTY4NDYyZi4uMzJkMDRmNzhiYTMyZTcyM2UyZTc4ZmJmOTE2N2YyY2VjNTE5ZmZhNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCkBAIC05Nyw3
ICs5Nyw3IEBAIHZvaWQgVjhET01XcmFwcGVyOjpzZXROYW1lZEhpZGRlblJlZmVyZW5jZSh2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHBhcmVudCwgY29uc3QKIFdyYXBwZXJUeXBlSW5mbyogVjhET01X
cmFwcGVyOjpkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKIHsK
ICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdyYXBwZXJUeXBlSW5mbyo+KG9iamVjdC0+R2V0UG9pbnRlckZy
b21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlclR5cGVJbmRleCkpOworICAgIHJldHVybiB0b1dy
YXBwZXJUeXBlSW5mbyhvYmplY3QpOwogfQogCiBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IFY4RE9N
V3JhcHBlcjo6d3JhcE5hdGl2ZU5vZGVGaWx0ZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IGZpbHRl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKaW5kZXggZmFkODJj
OTVkYjVkNDk0M2M3MWY0NDNjMWMxNDdkNWUzNmM5ZjgzZC4uZjExODU5YjA2ZjZjY2UwZGU5ZmY3
MGI3Y2Q1NGRhMWJiN2I0ZWY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XcmFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01X
cmFwcGVyLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgVjhET01XcmFwcGVyX2gKIAogI2lu
Y2x1ZGUgIkRPTURhdGFTdG9yZS5oIgorI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogI2lu
Y2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIu
aCIKQEAgLTEyMyw3ICsxMjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGUtPndyYXBwZXIoKTsKIAogICAgICAgICAgICAgRE9NRGF0YVN0b3JlKiBz
dG9yZSA9IGNvbnRleHQtPndvcmxkKCktPmRvbURhdGFTdG9yZSgpOwotICAgICAgICAgICAgRE9N
Tm9kZU1hcHBpbmcmIGRvbU5vZGVNYXAgPSBub2RlLT5pc0FjdGl2ZU5vZGUoKSA/IHN0b3JlLT5h
Y3RpdmVEb21Ob2RlTWFwKCkgOiBzdG9yZS0+ZG9tTm9kZU1hcCgpOworICAgICAgICAgICAgRE9N
V3JhcHBlck1hcDxOb2RlPiYgZG9tTm9kZU1hcCA9IG5vZGUtPmlzQWN0aXZlTm9kZSgpID8gc3Rv
cmUtPmFjdGl2ZURvbU5vZGVNYXAoKSA6IHN0b3JlLT5kb21Ob2RlTWFwKCk7CiAgICAgICAgICAg
ICByZXR1cm4gZG9tTm9kZU1hcC5nZXQobm9kZSk7CiAgICAgICAgIH0KICAgICB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDMzNzk5ODcx
MTk2MWViMzM1ZmMwNGJjNzBhMzAyYmQxZjk3ZjM2ODcuLjI1MWFhOGUzY2EwOWU4MTA0NWRjYWVi
YmUwYjhiNjM4OTBiZDAzZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4R0NDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdD
Q29udHJvbGxlci5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJET01JbXBsZW1lbnRh
dGlvbi5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKKyNpbmNsdWRlICJJbnRydXNpdmVET01XcmFwcGVyTWFwLmgiCiAjaW5jbHVkZSAiTWVt
b3J5VXNhZ2VTdXBwb3J0LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJS
ZXRhaW5lZERPTUluZm8uaCIKQEAgLTY2LDIwICs2Nyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotI2lmbmRlZiBOREVCVUcKLQotY2xhc3MgRW5zdXJlV2Vha0RPTU5vZGVWaXNpdG9yIDog
cHVibGljIERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3IgewotcHVibGljOgotICAgIHZvaWQg
dmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSosIE5vZGUqLCB2ODo6UGVyc2lzdGVudDx2ODo6
T2JqZWN0PiB3cmFwcGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHdyYXBwZXIuSXNXZWFrKCkp
OwotICAgIH0KLX07Ci0KLSNlbmRpZiAvLyBOREVCVUcKLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LWNsYXNzIEFjdGl2ZURPTU9iamVjdFByb2xvZ3VlVmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVy
TWFwPFQ+OjpWaXNpdG9yIHsKK2NsYXNzIEFjdGl2ZURPTU9iamVjdFByb2xvZ3VlVmlzaXRvciA6
IHB1YmxpYyBET01XcmFwcGVyVmlzaXRvcjxUPiB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgQWN0
aXZlRE9NT2JqZWN0UHJvbG9ndWVWaXNpdG9yKFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFs
dWU+ID4qIGxpdmVPYmplY3RzKQogICAgICAgICA6IG1fbGl2ZU9iamVjdHMobGl2ZU9iamVjdHMp
CkBAIC0xMDksNyArOTgsNyBAQCBwcml2YXRlOgogICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2
ODo6VmFsdWU+ID4qIG1fbGl2ZU9iamVjdHM7CiB9OwogCi1jbGFzcyBPYmplY3RWaXNpdG9yIDog
cHVibGljIERPTVdyYXBwZXJNYXA8dm9pZD46OlZpc2l0b3IgeworY2xhc3MgT2JqZWN0VmlzaXRv
ciA6IHB1YmxpYyBET01XcmFwcGVyVmlzaXRvcjx2b2lkPiB7CiBwdWJsaWM6CiAgICAgdm9pZCB2
aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiBzdG9yZSwgdm9pZCogb2JqZWN0LCB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhOUE9iamVjdC5jcHAKaW5kZXggYTViM2QxZGViM2VhODk1NDQyZmI4MWRjMDE3NmYw
MzQxYmQ5NWY1OC4uNGU1MjgzYjE4NTIxZWFjOTJmMTFhZWE5Yjg0NjI5YWQzMTZjNzk0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAKQEAgLTE2MSwyNSArMTYx
LDQ2IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBucE9iamVjdEludm9rZURlZmF1bHRIYW5kbGVy
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB9CiAKIAotc3RhdGljIHZvaWQgd2Vha1RlbXBs
YXRlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiwgdm9pZCogcGFyYW1ldGVyKTsK
LQotLy8gTlBJZGVudGlmaWVyIGlzIFByaXZhdGVJZGVudGlmaWVyKi4KLXN0YXRpYyBXZWFrUmVm
ZXJlbmNlTWFwPFByaXZhdGVJZGVudGlmaWVyLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZT4mIHN0YXRp
Y1RlbXBsYXRlTWFwKCkKK2NsYXNzIFY4TlBUZW1wbGF0ZU1hcAogewotICAgIHR5cGVkZWYgV2Vh
a1JlZmVyZW5jZU1hcDxQcml2YXRlSWRlbnRpZmllciwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU+IE1h
cFR5cGU7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChNYXBUeXBlLCB0ZW1wbGF0ZU1hcCwgKCZ3
ZWFrVGVtcGxhdGVDYWxsYmFjaykpOwotICAgIHJldHVybiB0ZW1wbGF0ZU1hcDsKLX0KK3B1Ymxp
YzoKKyAgICAvLyBOUElkZW50aWZpZXIgaXMgUHJpdmF0ZUlkZW50aWZpZXIqLgorICAgIHR5cGVk
ZWYgSGFzaE1hcDxQcml2YXRlSWRlbnRpZmllciosIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiA+IE1hcFR5cGU7CiAKLXN0YXRpYyB2b2lkIHdlYWtUZW1wbGF0ZUNhbGxiYWNr
KHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBwYXJhbWV0ZXIpCi17Ci0g
ICAgUHJpdmF0ZUlkZW50aWZpZXIqIGlkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxQcml2YXRlSWRl
bnRpZmllcio+KHBhcmFtZXRlcik7Ci0gICAgQVNTRVJUKGlkZW50aWZpZXIpOwotICAgIEFTU0VS
VChzdGF0aWNUZW1wbGF0ZU1hcCgpLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKKyAgICB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZ2V0KFByaXZhdGVJZGVudGlmaWVyKiBrZXkp
CisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAuZ2V0KGtleSk7CisgICAgfQogCi0gICAgc3Rh
dGljVGVtcGxhdGVNYXAoKS5mb3JnZXQoaWRlbnRpZmllcik7Ci19CisgICAgdm9pZCBzZXQoUHJp
dmF0ZUlkZW50aWZpZXIqIGtleSwgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IHdyYXBwZXIpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fbWFwLmNvbnRhaW5zKGtleSkpOwor
ICAgICAgICBtX21hcC5zZXQoa2V5LCB3cmFwcGVyKTsKKyAgICAgICAgd3JhcHBlci5NYWtlV2Vh
ayhrZXksIHdlYWtDYWxsYmFjayk7CisgICAgfQogCisgICAgc3RhdGljIFY4TlBUZW1wbGF0ZU1h
cCYgc2hhcmVkSW5zdGFuY2UoKQorICAgIHsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChW
OE5QVGVtcGxhdGVNYXAsIG1hcCwgKCkpOworICAgICAgICByZXR1cm4gbWFwOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCB3ZWFrQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6
OlZhbHVlPiBvYmplY3QsIHZvaWQqIGNvbnRleHQpCisgICAgeworICAgICAgICBzaGFyZWRJbnN0
YW5jZSgpLmRpc3Bvc2Uoc3RhdGljX2Nhc3Q8UHJpdmF0ZUlkZW50aWZpZXIqPihjb250ZXh0KSk7
CisgICAgfQorCisgICAgdm9pZCBkaXNwb3NlKFByaXZhdGVJZGVudGlmaWVyKiBrZXkpCisgICAg
eworICAgICAgICBNYXBUeXBlOjppdGVyYXRvciBpdCA9IG1fbWFwLmZpbmQoa2V5KTsKKyAgICAg
ICAgQVNTRVJUKGl0ICE9IG1fbWFwLmVuZCgpKTsKKyAgICAgICAgaXQtPnZhbHVlLkRpc3Bvc2Uo
KTsKKyAgICAgICAgbV9tYXAucmVtb3ZlKGl0KTsKKyAgICB9CisKKyAgICBNYXBUeXBlIG1fbWFw
OworfTsKIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBucE9iamVjdEdldFByb3BlcnR5
KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBzZWxmLCBOUElkZW50aWZpZXIgaWRlbnRpZmllciwgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4ga2V5LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKQEAgLTIxNiwx
NCArMjM3LDE0IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbnBPYmplY3RHZXRQcm9w
ZXJ0eSh2ODo6TG9jYWw8djg6Ok9iamVjdD4gc2VsZiwgTlBJCiAgICAgICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihSZWZlcmVuY2VFcnJvciwgIk5QT2JqZWN0IGRlbGV0ZWQiLCBpc29sYXRlKTsK
IAogICAgICAgICBQcml2YXRlSWRlbnRpZmllciogaWQgPSBzdGF0aWNfY2FzdDxQcml2YXRlSWRl
bnRpZmllcio+KGlkZW50aWZpZXIpOwotICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gZnVuY3Rpb25UZW1wbGF0ZSA9IHN0YXRpY1RlbXBsYXRlTWFwKCkuZ2V0KGlk
KTsKKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGZ1bmN0aW9u
VGVtcGxhdGUgPSBWOE5QVGVtcGxhdGVNYXA6OnNoYXJlZEluc3RhbmNlKCkuZ2V0KGlkKTsKICAg
ICAgICAgLy8gQ2FjaGUgdGVtcGxhdGVzIHVzaW5nIGlkZW50aWZpZXIgYXMgdGhlIGtleS4KICAg
ICAgICAgaWYgKGZ1bmN0aW9uVGVtcGxhdGUuSXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBD
cmVhdGUgYSBuZXcgdGVtcGxhdGUuCiAgICAgICAgICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IHRlbXAgPSB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KCk7CiAgICAgICAgICAg
ICB0ZW1wLT5TZXRDYWxsSGFuZGxlcihucE9iamVjdE1ldGhvZEhhbmRsZXIsIGtleSk7CiAgICAg
ICAgICAgICBmdW5jdGlvblRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+OjpOZXcodGVtcCk7Ci0gICAgICAgICAgICBzdGF0aWNUZW1wbGF0ZU1hcCgpLnNldChp
ZCwgZnVuY3Rpb25UZW1wbGF0ZSk7CisgICAgICAgICAgICBWOE5QVGVtcGxhdGVNYXA6OnNoYXJl
ZEluc3RhbmNlKCkuc2V0KGlkLCBmdW5jdGlvblRlbXBsYXRlKTsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIEZ1bmN0aW9uVGVtcGxhdGUgY2FjaGVzIGZ1bmN0aW9uIGZvciBlYWNoIGNvbnRleHQu
CkBAIC0zNTUsMjkgKzM3NiwzMiBAQCB2ODo6SGFuZGxlPHY4OjpBcnJheT4gbnBPYmplY3RJbmRl
eGVkUHJvcGVydHlFbnVtZXJhdG9yKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mCiAgICAgcmV0dXJu
IG5wT2JqZWN0UHJvcGVydHlFbnVtZXJhdG9yKGluZm8sIGZhbHNlKTsKIH0KIAotc3RhdGljIHZv
aWQgd2Vha05QT2JqZWN0Q2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiwgdm9pZCog
cGFyYW1ldGVyKTsKK3N0YXRpYyB2b2lkIHdlYWtOUE9iamVjdENhbGxiYWNrKHY4OjpQZXJzaXN0
ZW50PHY4OjpWYWx1ZT4sIHZvaWQqKTsKIAotc3RhdGljIERPTVdyYXBwZXJNYXA8TlBPYmplY3Q+
JiBzdGF0aWNOUE9iamVjdE1hcCgpCitzdGF0aWMgRE9NV3JhcHBlckhhc2hNYXA8TlBPYmplY3Q+
JiBzdGF0aWNOUE9iamVjdE1hcCgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChET01XcmFw
cGVyTWFwPE5QT2JqZWN0PiwgbnBPYmplY3RNYXAsICgmd2Vha05QT2JqZWN0Q2FsbGJhY2spKTsK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKERPTVdyYXBwZXJIYXNoTWFwPE5QT2JqZWN0PiwgbnBP
YmplY3RNYXAsICgmd2Vha05QT2JqZWN0Q2FsbGJhY2spKTsKICAgICByZXR1cm4gbnBPYmplY3RN
YXA7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYWtOUE9iamVjdENhbGxiYWNrKHY4OjpQZXJzaXN0ZW50
PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBwYXJhbWV0ZXIpCitzdGF0aWMgdm9pZCB3ZWFrTlBP
YmplY3RDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHZhbHVlLCB2b2lkKikKIHsK
LSAgICBOUE9iamVjdCogbnBPYmplY3QgPSBzdGF0aWNfY2FzdDxOUE9iamVjdCo+KHBhcmFtZXRl
cik7Ci0gICAgQVNTRVJUKHN0YXRpY05QT2JqZWN0TWFwKCkuY29udGFpbnMobnBPYmplY3QpKTsK
KyAgICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkpOworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+IHdyYXBwZXIgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSk7
CisgICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gc3RhdGljX2Nhc3Q8TlBPYmplY3QqPih0b05hdGl2
ZSh3cmFwcGVyKSk7CisKICAgICBBU1NFUlQobnBPYmplY3QpOworICAgIEFTU0VSVChzdGF0aWNO
UE9iamVjdE1hcCgpLmdldChucE9iamVjdCkgPT0gd3JhcHBlcik7CiAKLSAgICAvLyBNdXN0IHJl
bW92ZSBmcm9tIG91ciBtYXAgYmVmb3JlIGNhbGxpbmcgX05QTl9SZWxlYXNlT2JqZWN0KCkuIF9O
UE5fUmVsZWFzZU9iamVjdCBjYW4gY2FsbCBGb3JnZXRWOE9iamVjdEZvck5QT2JqZWN0LCB3aGlj
aAotICAgIC8vIHVzZXMgdGhlIHRhYmxlIGFzIHdlbGwuCi0gICAgc3RhdGljTlBPYmplY3RNYXAo
KS5mb3JnZXQobnBPYmplY3QpOworICAgIC8vIE11c3QgcmVtb3ZlIGZyb20gb3VyIG1hcCBiZWZv
cmUgY2FsbGluZyBfTlBOX1JlbGVhc2VPYmplY3QoKS4gX05QTl9SZWxlYXNlT2JqZWN0IGNhbgor
ICAgIC8vIGNhbGwgZm9yZ2V0VjhPYmplY3RGb3JOUE9iamVjdCwgd2hpY2ggdXNlcyB0aGUgdGFi
bGUgYXMgd2VsbC4KKyAgICBzdGF0aWNOUE9iamVjdE1hcCgpLnJlbW92ZShucE9iamVjdCwgd3Jh
cHBlcik7CisgICAgd3JhcHBlci5EaXNwb3NlKCk7CiAKICAgICBpZiAoX05QTl9Jc0FsaXZlKG5w
T2JqZWN0KSkKICAgICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KG5wT2JqZWN0KTsKIH0KIAotCiB2
ODo6TG9jYWw8djg6Ok9iamVjdD4gY3JlYXRlVjhPYmplY3RGb3JOUE9iamVjdChOUE9iamVjdCog
b2JqZWN0LCBOUE9iamVjdCogcm9vdCkKIHsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IG5wT2JqZWN0RGVzYzsKQEAgLTM5MSw4ICs0MTUsOSBAQCB2ODo6
TG9jYWw8djg6Ok9iamVjdD4gY3JlYXRlVjhPYmplY3RGb3JOUE9iamVjdChOUE9iamVjdCogb2Jq
ZWN0LCBOUE9iamVjdCogcm9vdAogICAgIH0KIAogICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgd3Jh
cHBlZCB0aGlzIG9iamVjdCwganVzdCByZXR1cm4gaXQuCi0gICAgaWYgKHN0YXRpY05QT2JqZWN0
TWFwKCkuY29udGFpbnMob2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0Pjo6TmV3KHN0YXRpY05QT2JqZWN0TWFwKCkuZ2V0KG9iamVjdCkpOworICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IHN0YXRpY05QT2JqZWN0TWFwKCkuZ2V0KG9iamVjdCk7
CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2
ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXIpOwogCiAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBjcmVh
dGUgYSBXcmFwcGVyIHR5cGUgYXMgYSBzdWJjbGFzcyBvZiBKU09iamVjdC4gSXQgaGFzIHR3byBp
bnRlcm5hbCBmaWVsZHMsIGZpZWxkIDAgaXMgdGhlIHdyYXBwZWQKICAgICAvLyBwb2ludGVyLCBh
bmQgZmllbGQgMSBpcyB0aGUgdHlwZS4gVGhlcmUgc2hvdWxkIGJlIGFuIGFwaSBmdW5jdGlvbiB0
aGF0IHJldHVybnMgdW51c2VkIHR5cGUgaWQuIFRoZSBzYW1lIFdyYXBwZXIgdHlwZQpAQCAtNDI4
LDExICs0NTMsMTIgQEAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNyZWF0ZVY4T2JqZWN0Rm9yTlBP
YmplY3QoTlBPYmplY3QqIG9iamVjdCwgTlBPYmplY3QqIHJvb3QKIAogdm9pZCBmb3JnZXRWOE9i
amVjdEZvck5QT2JqZWN0KE5QT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgaWYgKHN0YXRpY05QT2Jq
ZWN0TWFwKCkuY29udGFpbnMob2JqZWN0KSkgeworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IHdyYXBwZXIgPSBzdGF0aWNOUE9iamVjdE1hcCgpLmdldChvYmplY3QpOworICAgIGlmICgh
d3JhcHBlci5Jc0VtcHR5KCkpIHsKICAgICAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAg
ICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBoYW5kbGUoc3RhdGljTlBPYmplY3RNYXAo
KS5nZXQob2JqZWN0KSk7Ci0gICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihoYW5k
bGUsIG5wT2JqZWN0VHlwZUluZm8oKSwgMCk7Ci0gICAgICAgIHN0YXRpY05QT2JqZWN0TWFwKCku
Zm9yZ2V0KG9iamVjdCk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcih3cmFw
cGVyLCBucE9iamVjdFR5cGVJbmZvKCksIDApOworICAgICAgICBzdGF0aWNOUE9iamVjdE1hcCgp
LnJlbW92ZShvYmplY3QsIHdyYXBwZXIpOworICAgICAgICB3cmFwcGVyLkRpc3Bvc2UoKTsKICAg
ICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KG9iamVjdCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFdmVudExpc3Rl
bmVyLmNwcAppbmRleCBkOWJiOTU1NDU0NDQ3ZDhmYjcwNTg5NTU5YTNhMDU5MDE3MWNjYzJlLi43
NGFhMDNjNTcwMzMzZjc5ZWJkYjhiNDZmMWRjMWZiZDUxYmNlZTY1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFdmVudExpc3Rl
bmVyLmNwcApAQCAtMTEwLDkgKzExMCw2IEBAIHY4OjpMb2NhbDx2ODo6VmFsdWU+IFY4V29ya2Vy
Q29udGV4dEV2ZW50TGlzdGVuZXI6OmNhbGxMaXN0ZW5lckZ1bmN0aW9uKFNjcmlwdEV4CiAgICAg
VjhSZWN1cnNpb25TY29wZSByZWN1cnNpb25TY29wZShjb250ZXh0KTsKICAgICB2ODo6TG9jYWw8
djg6OlZhbHVlPiByZXN1bHQgPSBoYW5kbGVyRnVuY3Rpb24tPkNhbGwocmVjZWl2ZXIsIDEsIHBh
cmFtZXRlcnMpOwogCi0gICAgaWYgKFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogcHJveHkg
PSB3b3JrZXJQcm94eShjb250ZXh0KSkKLSAgICAgICAgcHJveHktPnRyYWNrRXZlbnQoZXZlbnQp
OwotCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29va2ll
KTsKIAogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcAppbmRleCA5MzU0YmIz
YjJlYTlkMmNhMjcwMDEwYzc0YzRhYzE0MjM4YWRjOWRlLi40NDVkNGJlY2Y0NDhiZDJhOGQ4ODA4
NjdmOTRhMTdhMDQxM2UwN2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKQEAgLTk5LDE0ICs5OSw2
IEBAIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6fldvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eSgpCiAKIHZvaWQgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpkaXNwb3NlKCkKIHsK
LSAgICAvLyBEZXRhY2ggYWxsIGV2ZW50cyBmcm9tIHRoZWlyIEpTIHdyYXBwZXJzLgotICAgIGZv
ciAoc2l6ZV90IGV2ZW50SW5kZXggPSAwOyBldmVudEluZGV4IDwgbV9ldmVudHMuc2l6ZSgpOyAr
K2V2ZW50SW5kZXgpIHsKLSAgICAgICAgRXZlbnQqIGV2ZW50ID0gbV9ldmVudHNbZXZlbnRJbmRl
eF07Ci0gICAgICAgIGlmIChmb3JnZXRWOEV2ZW50T2JqZWN0KGV2ZW50KSkKLSAgICAgICAgICBl
dmVudC0+ZGVyZWYoKTsKLSAgICB9Ci0gICAgbV9ldmVudHMuY2xlYXIoKTsKLQogICAgIG1fcGVy
Q29udGV4dERhdGEuY2xlYXIoKTsKIAogICAgIC8vIERpc3Bvc2UgdGhlIGNvbnRleHQuCkBAIC0x
OTUsMTUgKzE4Nyw2IEBAIGJvb2wgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojppbml0aWFs
aXplSWZOZWVkZWQoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eTo6Zm9yZ2V0VjhFdmVudE9iamVjdChFdmVudCogZXZlbnQpCi17Ci0gICAg
aWYgKGdldERPTU9iamVjdE1hcCgpLmNvbnRhaW5zKGV2ZW50KSkgewotICAgICAgICBnZXRET01P
YmplY3RNYXAoKS5mb3JnZXQoZXZlbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCiBTY3JpcHRWYWx1ZSBXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHk6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVO
YW1lLCBjb25zdCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24sIFdvcmtlckNvbnRl
eHRFeGVjdXRpb25TdGF0ZSogc3RhdGUpCiB7CiAgICAgVjhHQ0NvbnRyb2xsZXI6OmNoZWNrTWVt
b3J5VXNhZ2UoKTsKQEAgLTI1OCwxMSArMjQxLDYgQEAgdm9pZCBXb3JrZXJDb250ZXh0RXhlY3V0
aW9uUHJveHk6OnNldEV2YWxBbGxvd2VkKGJvb2wgZW5hYmxlLCBjb25zdCBTdHJpbmcmIGVycm8K
ICAgICBtX2Rpc2FibGVFdmFsUGVuZGluZyA9IGVuYWJsZSA/IFN0cmluZygpIDogZXJyb3JNZXNz
YWdlOwogfQogCi12b2lkIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6dHJhY2tFdmVudChF
dmVudCogZXZlbnQpCi17Ci0gICAgbV9ldmVudHMuYXBwZW5kKGV2ZW50KTsKLX0KLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHku
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eS5oCmluZGV4IDRjMDI0ZDAyZGE1MDAwM2ZjMzgyNzcyNzU3OGI5ZTgwMGEzMjhjNjkuLmI4YTZk
ZTc0NzhmZGFmNTM0N2Y5ZDNlZGNiOGYxMmE4MDRiMDkxYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCkBA
IC02MywxMSArNjMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFdvcmtlckNvbnRl
eHRFeGVjdXRpb25Qcm94eShXb3JrZXJDb250ZXh0Kik7CiAgICAgICAgIH5Xb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHkoKTsKIAotICAgICAgICAvLyBUcmFjayB0aGUgZXZlbnQgc28gdGhhdCB3
ZSBjYW4gZGV0YWNoIGl0IGZyb20gdGhlIEpTIHdyYXBwZXIgd2hlbiBhIHdvcmtlcgotICAgICAg
ICAvLyB0ZXJtaW5hdGVzLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgYWJs
ZSB0byBkaXNwb3NlIHRoZXNlCi0gICAgICAgIC8vIGV2ZW50cyBhbmQgcmVsZWFzZXMgcmVmZXJl
bmNlcyB0byB0aGVpciBldmVudCB0YXJnZXRzOiBXb3JrZXJDb250ZXh0LgotICAgICAgICB2b2lk
IHRyYWNrRXZlbnQoRXZlbnQqKTsKLQogICAgICAgICAvLyBBbG93IHVzZSBvZiBldmFsKCkgYW5k
IGlzIGVxdWl2YWxlbnRzIGluIHNjcmlwdHMuCiAgICAgICAgIHZvaWQgc2V0RXZhbEFsbG93ZWQo
Ym9vbCBlbmFibGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIApAQCAtODIsOCArNzcs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaW5pdGlhbGl6ZUlmTmVlZGVk
KCk7CiAgICAgICAgIHZvaWQgZGlzcG9zZSgpOwogCi0gICAgICAgIHN0YXRpYyBib29sIGZvcmdl
dFY4RXZlbnRPYmplY3QoRXZlbnQqKTsKLQogICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtXb3Jr
ZXJNYXhTdGFja1NpemUgPSA1MDAgKiAxMDI0OwogCiAgICAgICAgIFdvcmtlckNvbnRleHQqIG1f
d29ya2VyQ29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dy
YXBwZXJUeXBlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJ
bmZvLmgKaW5kZXggYTRiZDQ5OThkZGQ2ZTYxNGZmN2YwMDVhNWU3MTM4MDdjNzQ1MjQxYi4uM2Ey
ZGFkNWU3ZmQxMzcwNGNkN2MyODZhODA3MjY2YzY5Y2EwNzlhZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmgKQEAgLTExNiw2ICsxMTYsMTkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBXcmFwcGVyVHlwZUluZm8qIHBhcmVudENs
YXNzOwogICAgICAgICBjb25zdCBXcmFwcGVyVHlwZVByb3RvdHlwZSB3cmFwcGVyVHlwZVByb3Rv
dHlwZTsKICAgICB9OworCisgICAgaW5saW5lIHZvaWQqIHRvTmF0aXZlKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gb2JqZWN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9iamVjdC0+SW50ZXJuYWxG
aWVsZENvdW50KCkgPj0gdjhET01XcmFwcGVyT2JqZWN0SW5kZXgpOworICAgICAgICByZXR1cm4g
b2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5k
ZXgpOworICAgIH0KKworICAgIGlubGluZSBXcmFwcGVyVHlwZUluZm8qIHRvV3JhcHBlclR5cGVJ
bmZvKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG9iamVjdC0+SW50ZXJuYWxGaWVsZENvdW50KCkgPj0gdjhET01XcmFwcGVyVHlwZUluZGV4KTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdyYXBwZXJUeXBlSW5mbyo+KG9iamVjdC0+R2V0
UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlclR5cGVJbmRleCkpOworICAgIH0K
KwogfQogCiAjZW5kaWYgLy8gV3JhcHBlclR5cGVJbmZvX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170473</attachid>
            <date>2012-10-24 14:37:12 -0700</date>
            <delta_ts>2012-10-24 15:46:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100175-20121024143547.patch</filename>
            <type>text/plain</type>
            <size>53067</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTMyMWNiODNkZjRhOTkx
ZjkyY2Q3NTdjZjdmZjIxNWM1NjE0OGJkNi4uNDFhNGU5NDExZDE3YjJlYmI5MWRiYjg0MzQ3ZGQz
OTk3NTlkYmRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1NiBAQAogMjAxMi0xMC0yNCAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCisgICAgICAgIFtWOF0gQWJzdHJhY3RXZWFr
UmVmZXJlbmNlTWFwIGlzIHVubmVjZXNzYXJpbHkgZ2VuZXJhbCBhbmQgY29tcGxleAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQmVmb3JlIHRoaXMgcGF0
Y2gsIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcCBzZXJ2ZWQgdHdvIG1hc3RlcnM6CisKKyAgICAg
ICAgMSkgRE9NIHdyYXBwZXJzCisgICAgICAgIDIpIE5QVjggZnVuY3Rpb24gdGVtcGxhdGVzCisK
KyAgICAgICAgVGhlc2UgdHdvIHVzZXMgY2FzZXMgcHVzaGVkIEFic3RyYWN0V2Vha1JlZmVyZW5j
ZU1hcCB0byBiZSBtb3JlIGdlbmVyYWwKKyAgICAgICAgYW5kIGNvbXBsZXggdGhhdCBuZWVkZWQu
IFRoaXMgcGF0Y2ggc2VwYXJhdGVzIHRoZXNlIHR3byB1c2VzIGNhc2VzIGludG8KKyAgICAgICAg
dHdvIHNlcGFyYXRlIGNsYXNzZXMuIFY4TlBUZW1wbGF0ZU1hcCBpcyBhbGwgb2YgNDAgbGluZXMg
b2YgY29kZS4gSXQncworICAgICAgICBub3Qgd29ydGggY29tcGxpY2F0aW5nIHRoZSBET00gd3Jh
cHBlciBjb2RlIHBhdGggdG8gc2hhcmUgdGhhdCB0aW55CisgICAgICAgIGFtb3VudCBvZiBjb2Rl
LgorCisgICAgICAgIFRoZSBvdGhlciB0aGluZyB0aGlzIHBhdGNoIGRvZXMgaXMgc3RvcmUgYSBw
b2ludGVyIHRvIHRoZSBET00gd3JhcHBlcgorICAgICAgICBtYXAgYXMgdGhlIHdlYWsgY2FsbGJh
Y2sgY29udGV4dCBvYmplY3QuIFRoYXQgbWVhbnMgd2Ugbm8gbG9uZ2VyIG5lZWQKKyAgICAgICAg
dG8gc2VhcmNoIHRocm91Z2ggYWxsIHRoZSB3cmFwcGVyIG1hcHMgaW4gb3JkZXIgdG8gZmluZCB0
aGUgbWFwIHRoYXQKKyAgICAgICAgY29udGFpbnMgdGhpcyBwYXJ0aWN1bGFyIERPTSB3cmFwcGVy
LgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURh
dGEuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGEuaDoKKyAgICAgICAgKERPTURh
dGEpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHA6CisgICAgICAgICAg
ICAtIERlbGV0ZSBhbGwgdGhlc2UgY29tcGxpY2F0ZWQgd2VhayBjYWxsYmFjayBmdW5jdGlvbnMu
IFRoZSB3ZWFrCisgICAgICAgICAgICAgIGNhbGxiYWNrIGZ1bmN0aW9ucyBhcmUgbm93IGFuIG9y
ZGVyIG9mIG1hZ25pdHVkZSBzaW1wbGVyIGFuZAorICAgICAgICAgICAgICBkZWNsYXJlZCBhcyBw
cml2YXRlIG1lbWJlciBmdW5jdGlvbnMgb24gdGhlIHdyYXBwZXIgbWFwLgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3Jl
Ojpkb21Ob2RlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6YWN0aXZlRG9t
Tm9kZU1hcCk6CisgICAgICAgIChET01EYXRhU3RvcmUpOgorICAgICAgICAgICAgLSBXZSBub3cg
aGF2ZSBhIGNvbnNpc3RlbnQgdHlwZSB0byB1c2UgZm9yIGFsbCB0aGVzZSB3cmFwcGVyIG1hcHMu
CisgICAgICAgICAgICAgIEJvdGggdGhlIGhhc2ggbWFwIGFuZCB0aGUgaW50cnVzaXZlIG1hcCBk
ZXJpdmUgZnJvbQorICAgICAgICAgICAgICBET01XcmFwcGVyTWFwICh3aXRoIGEgc2luZ2xlIHRl
bXBsYXRlIHBhcmFtZXRlcikuCisgICAgICAgICogYmluZGluZ3MvdjgvRE9NV3JhcHBlck1hcC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRE9NV3JhcHBlclZpc2l0b3Ip
OgorICAgICAgICAgICAgLSBUaGUgdmlzaXRvciBpcyBubyBsb25nZXIgYW4gaW5uZXIgY2xhc3Mu
IEl0J3MganVzdCBhIHRvcC1sZXZlbAorICAgICAgICAgICAgICBjbGFzcyB0aGF0IGRvZXMgdGhl
IHNhbWUgdGhpbmcuCisgICAgICAgIChET01XcmFwcGVyTWFwKToKKyAgICAgICAgICAgIC0gVGhl
IGFic3RyYWN0IGludGVyZmFjZSBmb3IgRE9NV3JhcHBlck1hcCBoYXMgYWJvdXQgaGFsZiBhcyBt
YW55CisgICAgICAgICAgICAgIGZ1bmN0aW9ucyBhcyB0aGUgb2xkIEFic3RyYWN0V2Vha1JlZmVy
ZW5jZU1hcCBiZWNhdXNlIHRoZSB0d28gdXNlCisgICAgICAgICAgICAgIGNhc2VzIGFyZSBkaXNl
bnRhbmdsZWQuCisgICAgICAgIChXZWJDb3JlOjpET01XcmFwcGVyTWFwOjp+RE9NV3JhcHBlck1h
cCk6CisgICAgICAgIChET01XcmFwcGVySGFzaE1hcCk6CisgICAgICAgICAgICAtIFRoaXMgaXMg
YSBjb25jcmV0ZSBpbnN0YW5jZSBvZiBET01XcmFwcGVyTWFwIHRoYXQgdXNlcyBhIGhhc2ggbWFw
LgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlckhhc2hNYXA6OkRPTVdyYXBwZXJIYXNoTWFw
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJIYXNoTWFwOjpyZW1vdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NV3JhcHBlckhhc2hNYXA6OmRlZmF1bHRXZWFrQ2FsbGJhY2spOgorICAg
ICAgICAgICAgLSBOb3RpY2UgdGhhdCB0aGUgY29udGV4dCBwYXJhbWV0ZXIgbm93IHBvaW50cyB0
byB0aGUgaGFzaG1hcAorICAgICAgICAgICAgICBpdHNlbGYgcmF0aGVyIHRoYW4gdG8gdGhlIG5h
dGl2ZSBvYmplY3QuIE5vdyB0aGF0IHdlIGRvbid0IG5lZWQKKyAgICAgICAgICAgICAgdG8gaGFu
ZGxlIHRoZSBOUEFQSSBjYXNlLCB3ZSBjYW4gcmVjb3ZlciB0aGUgbmF0aXZlIG9iamVjdCBmcm9t
CisgICAgICAgICAgICAgIHRoZSB3cmFwcGVyIHVzaW5nIHRvTmF0aXZlLiBUaGUgYXNzZXJ0IGlu
IHNldCgpIGVuc3VyZXMgdGhhdCB0aGlzCisgICAgICAgICAgICAgIGFsd2F5cyB3b3Jrcy4KKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9JbnRydXNpdmVET01XcmFwcGVyTWFwLmg6CisgICAgICAgICAgICAtIFRoZXNlIGNsYXNz
ZXMgYXJlIG5vdyBzaW1wbGlmaWVkIGJlY2F1c2UgdGhleSBuZWVkIHRvIGltcGxlbWVudAorICAg
ICAgICAgICAgICBmZXdlciBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpET01Ob2RlV3Jh
cHBlck1hcDo6d2Vha0NhbGxiYWNrKToKKyAgICAgICAgICAgIC0gRm9yIHRoaXMgd2VhayBjYWxs
YmFjaywgd2Ugc3RpbGwgdXNlIHRoZSBuYXRpdmUgb2JqZWN0IGFzIHRoZQorICAgICAgICAgICAg
ICBjb250ZXh0IHBhcmFtZXRlci4gV2UgY291bGQgYWxzbyByZWNvdmVyIHRoZSBuYXRpdmUgb2Jq
ZWN0IGZyb20KKyAgICAgICAgICAgICAgdGhlIHdyYXBwZXIsIHdoaWNoIG1lYW5zIHRoaXMgY29u
dGV4dCBwYXJhbWV0ZXIgaXMgYXZhaWxhYmxlIHRvCisgICAgICAgICAgICAgIGRvIG90aGVyIHdv
cmsuCisgICAgICAgICogYmluZGluZ3MvdjgvU2NvcGVkRE9NRGF0YVN0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjb3BlZERPTURhdGFTdG9yZTo6U2NvcGVkRE9NRGF0YVN0b3JlKToKKyAg
ICAgICAgICAgIC0gVGhpcyBjb2RlIG5vIGxvbmdlciBuZWVkcyB0byBoYXZlIGtub3dsZWRnZSBv
ZiB3aGljaCB3ZWFrCisgICAgICAgICAgICAgIGNhbGxiYWNrcyB0aGVzZSBvYmplY3RzIHVzZS4K
KyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZERPTURhdGFTdG9yZTo6flNjb3BlZERPTURhdGFTdG9y
ZSk6CisgICAgICAgICAgICAtIFdlIG5lZWQgdG8gY2xlYXIgdGhlIG1hcHMgYmVmb3JlIGRlbGV0
aW5nIHRoZW0gYmVjYXVzZSB0aGVyZSBhcmUKKyAgICAgICAgICAgICAgc3RpbGwgSmF2YVNjcmlw
dCBvYmplY3RzIHRoYXQgaGF2ZSByZWZlcmVuY2VzIHRvIHRoZSBtYXAgaW4gdGhlaXIKKyAgICAg
ICAgICAgICAgd2VhayBjYWxsYmFjayBwYXJhbWV0ZXIuIFByZXZpb3VzbHksIHdlIGhhbmRsZWQg
dGhpcyBjYXNlIGJlY2F1c2UKKyAgICAgICAgICAgICAgd2Ugd291bGQgc2VhcmNoIGFsbCB0aGUg
d3JhcHBlciBtYXBzIGFuZCBmYWlsIHRvIGZpbmQgdGhlIHdyYXBwZXIuCisgICAgICAgICogYmlu
ZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0UHJv
ZmlsZXI6OnZpc2l0RXh0ZXJuYWxBcnJheXMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1N0YXRp
Y0RPTURhdGFTdG9yZS5jcHA6CisgICAgICAgICAgICAtIFRoaXMgY29kZSBubyBsb25nZXIgbmVl
ZHMgdG8gaGF2ZSBrbm93bGVkZ2Ugb2Ygd2hpY2ggd2VhaworICAgICAgICAgICAgICBjYWxsYmFj
ayB0aGVzZSBtYXBzIHVzZS4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3Rv
cmUuaDoKKyAgICAgICAgKFN0YXRpY0RPTURhdGFTdG9yZSk6CisgICAgICAgICogYmluZGluZ3Mv
djgvVjhET01NYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RE9NTm9kZU1hcCk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRBY3RpdmVET01Ob2RlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OnJl
bW92ZUFsbERPTU9iamVjdHMpOgorICAgICAgICAgICAgLSBSYXRoZXIgdGhhbiB1c2luZyBzb21l
IGNvbXBsaWNhdGVkIHZpc2l0b3IgcGF0dGVybiwgd2UgY2FuIG5vdworICAgICAgICAgICAgICBq
dXN0IGNhbGwgY2xlYXIoKSBkaXJlY3RseSBvbiB0aGUgbWFwcyB0byByZW1vdmUgYWxsIHRoZSBv
YmplY3RzLgorICAgICAgICAoV2ViQ29yZTo6dmlzaXRBY3RpdmVET01Ob2Rlcyk6CisgICAgICAg
IChXZWJDb3JlOjp2aXNpdERPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaXRBY3Rp
dmVET01PYmplY3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTU1hcC5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICAgICAtIERlbGV0ZSB0aGUgb2xkIHZlcnNpb25zIG9mIHRo
ZXNlIGNsYXNzZXMuCisgICAgICAgIChET01EYXRhU3RvcmVIYW5kbGUpOgorICAgICAgICAgICAg
LSBTdHlsZSBuaXQ6IG9uZS1hcmd1bWVudCBjb25zdHJ1Y3RvcnMgc2hvdWxkIGJlIG1hcmtlZCBl
eHBsaWNpdC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSk6CisgICAgICAgICAgICAt
IEkgbW92ZWQgdGhpcyBsb2dpYyBpbnRvIFdyYXBwZXJUeXBlSW5mby5oIHRvIGF2b2lkIGEgY2ly
Y3VsYXIKKyAgICAgICAgICAgICAgaGVhZGVyIGRlcGVuZGVuY3kuCisgICAgICAgICogYmluZGlu
Z3MvdjgvVjhET01XcmFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6Omdl
dENhY2hlZFdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgICAgIC0gRW5zdXJlV2Vha0RPTU5vZGVWaXNpdG9yIGlzIG5vIGxvbmdlciB1
c2VkIChvciBuZWVkZWQgc2luY2Ugd2Ugbm8KKyAgICAgICAgICAgICAgbG9uZ2VyIGNsZWFyIHRo
ZSB3ZWFrIGNhbGxiYWNrcyBpbiBWOEdDQ29udHJvbGxlcikuCisgICAgICAgICogYmluZGluZ3Mv
djgvVjhOUE9iamVjdC5jcHA6CisgICAgICAgIChWOE5QVGVtcGxhdGVNYXApOgorICAgICAgICAg
ICAgLSBzdGF0aWNUZW1wbGF0ZU1hcCBpcyBubyBsb25nZXIgYW4gaW5zdGFuY2Ugb2YgV2Vha1Jl
ZmVyZW5jZU1hcC4KKyAgICAgICAgICAgICAgSW5zdGVhZCwgdGhpcyBwYXRjaCBqdXN0IGltcGxl
bWVudHMgdGhlIGZ1bmN0aW9uYWxpdHkgd2UgbmVlZAorICAgICAgICAgICAgICBoZXJlIGRpcmVj
dGx5LgorICAgICAgICAoV2ViQ29yZTo6VjhOUFRlbXBsYXRlTWFwOjpnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6VjhOUFRlbXBsYXRlTWFwOjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6VjhOUFRl
bXBsYXRlTWFwOjpzaGFyZWRJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpWOE5QVGVtcGxh
dGVNYXA6OndlYWtDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOE5QVGVtcGxhdGVNYXA6
OmRpc3Bvc2UpOgorICAgICAgICAoV2ViQ29yZTo6bnBPYmplY3RHZXRQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXRpY05QT2JqZWN0TWFwKToKKyAg
ICAgICAgKFdlYkNvcmU6OndlYWtOUE9iamVjdENhbGxiYWNrKToKKyAgICAgICAgICAgIC0gRE9N
V3JhcHBlck1hcCBubyBsb25nZXIgZXhwb3NlcyBhICJmb3JnZXQiIGZ1bmN0aW9uLiBJbnN0ZWFk
LCB3ZQorICAgICAgICAgICAgICBqdXN0IHVzZSB0aGUgbW9yZSBiYXNpYyAicmVtb3ZlIiBhbmQg
IkRpc3Bvc2UiIG9wZXJhdGlvbnMgdG8gZG8KKyAgICAgICAgICAgICAgdGhlIHNhbWUgdGhpbmcu
IFRoaXMgaXMgcG9zc2libGUgbm93IGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIGhhdmUKKyAgICAgICAg
ICAgICAgInJlbW92ZUlmUG9zc2libGUiIHRvIHN1cHBvcnQgc2VhcmNoaW5nIGFsbCB0aGUgd3Jh
cHBlciBtYXBzIGZvcgorICAgICAgICAgICAgICB0aGUgb25lIHRoYXQgaGFzIHRoZSByaWdodCB3
cmFwcGVyLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVjhPYmplY3RGb3JOUE9iamVjdCk6Cisg
ICAgICAgICAgICAtIERPTVdyYXBwZXJNYXAgTm8gbG9uZ2VyIGhhcyBhICJjb250YWlucyIgZnVu
Y3Rpb24uIEluc3RlYWQsIHdlCisgICAgICAgICAgICAgIHVzZSBnZXQsIHdoaWNoIGFjdHVhbGx5
IG1ha2VzIHRoaXMgY29kZSBtb3JlIGVmZmljaWVudCBiZWNhdXNlIHdlCisgICAgICAgICAgICAg
IG9ubHkgZG8gb25lIGhhc2ggbWFwIGxvb2t1cC4KKyAgICAgICAgKFdlYkNvcmU6OmZvcmdldFY4
T2JqZWN0Rm9yTlBPYmplY3QpOgorICAgICAgICAgICAgLSBUaGUgY2hhbmdlcyBoZXJlIGFyZSBh
IGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gc29ydHMgb2YgY2hhbmdlcworICAgICAgICAgICAgICBh
Ym92ZS4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXI6OmNh
bGxMaXN0ZW5lckZ1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5OjpkaXNwb3NlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHkuaDoKKyAgICAgICAgKFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSk6
CisgICAgICAgICAgICAtIEFzIGZhciBhcyBJIGNhbiB0ZWxsLCBhbGwgb2YgdGhpcyBldmVudCB0
cmFja2luZyBidXNpbmVzcyB3YXMKKyAgICAgICAgICAgICAgdG90YWxseSBicm9rZW4uIEZvciBl
eGFtcGxlLCBtX2V2ZW50cyBpcyBhbiBhcHBlbmQtb25seSBsaXN0IG9mCisgICAgICAgICAgICAg
IHJhdyBFdmVudCBwb2ludGVycy4gVGhlc2UganVzdCBlbmQgdXAgYmVpbmcgZ2FyYmFnZSBwb2lu
dGVycywKKyAgICAgICAgICAgICAgd2hpY2ggYXJlIHRoZW4gY29uc3VsdGVkIGF0IHdvcmtlciBz
aHV0ZG93bi4KKyAgICAgICAgICAgIC0gVGhpcyBjb2RlIHdhcyBsYW5kZWQgaW4gdGhlIGluaXRp
YWwgdXBzdHJlYW1pbmcgb2YgdGhlIENocm9taXVtCisgICAgICAgICAgICAgIHBvcnQgb2YgV2Vi
S2l0IHdpdGhvdXQgbXVjaCByZXZpZXcuIFJlbW92ZSB0aGlzIGNvZGUgZG9uJ3QgY2F1c2UKKyAg
ICAgICAgICAgICAgYW55IHRlc3RzIHRvIGZhaWwuCisgICAgICAgICogYmluZGluZ3MvdjgvV3Jh
cHBlclR5cGVJbmZvLmg6CisgICAgICAgIChXZWJDb3JlOjp0b05hdGl2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjp0b1dyYXBwZXJUeXBlSW5mbyk6CisgICAgICAgICAgICAtIFRoZSBwYXRjaCBtb3Zl
cyB0aGVzZSBmdW5jdGlvbnMgaW50byB0aGlzIGhlYWRlciB0byBhdm9pZCBhCisgICAgICAgICAg
ICAgIGNpcmN1bGFyIGhlYWRlciBkZXBlbmRlbmN5LgorCisyMDEyLTEwLTI0ICBBZGFtIEJhcnRo
ICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKICAgICAgICAgW1Y4XSBBY3RpdmVET01PYmplY3RFcGls
b2d1ZVZpc2l0b3IgaXMgdW5uZWNlc3NhcnkgYW5kIGNhbiBiZSBkZWxldGVkCiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMDgKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGY2NjVmNzEwYmZiNTU5Y2Y2MWZmZDEyY2Y0NzAxNjZjNTllNjE3ODEuLjNmNDk0
Zjk2NTlkZTBmZjk2ODZkNDUwNTU3ZWU5YmViYzU3MzE3M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTIyMzIsNiArMjIzMiw3IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NRGF0YVN0b3Jl
LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTVRyYW5zYWN0aW9uLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvRE9NVHJhbnNhY3Rpb24uaCcsCisgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvRE9NV3JhcHBlck1hcC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01X
cmFwcGVyV29ybGQuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01XcmFwcGVyV29y
bGQuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvRGF0ZUV4dGVuc2lvbi5jcHAnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcAppbmRleCBkYTZlYTViMWFlOGE5YTRiZWY3
OWQyOTFiZjBjOGM2NGY5MGFhZmY5Li4xODY0MWVjOGRhYjllMTY3MTgzY2U3Mjk2NzZhMmIwYzM1
M2VmMmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcApAQCAtNTEsMTEg
KzUxLDQgQEAgRE9NRGF0YVN0b3JlJiBET01EYXRhOjpnZXRDdXJyZW50U3RvcmUodjg6Oklzb2xh
dGUqIGlzb2xhdGUpCiAgICAgcmV0dXJuIGRlZmF1bHRTdG9yZTsKIH0KIAotdm9pZCBET01EYXRh
OjpkZXJlZk9iamVjdChXcmFwcGVyVHlwZUluZm8qIHR5cGUsIHZvaWQqIGRvbU9iamVjdCkKLXsK
LSAgICB0eXBlLT5kZXJlZk9iamVjdChkb21PYmplY3QpOwotfQotCi0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0
YS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5oCmluZGV4IDdkZjlkZmRi
YTllMjhhZTFlZDRmNTQzODA1NDYwNDZlNTYwOTZkZGIuLjM1NTRmNzI2NzNhZTNiYmNjOThlZDky
NjkzMDNmYmY2NGMyNWQxZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0RPTURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmgKQEAg
LTQ2LDYyICs0NiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8KICAgICBjbGFzcyBE
T01EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
ICAgIHN0YXRpYyB2b2lkIGhhbmRsZVdlYWtPYmplY3QoRE9NRGF0YVN0b3JlOjpET01XcmFwcGVy
TWFwVHlwZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4sIFQqIGRvbU9iamVjdCk7Ci0KLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgc3RhdGljIHZvaWQgcmVtb3ZlT2Jq
ZWN0c0Zyb21XcmFwcGVyTWFwKERPTURhdGFTdG9yZSogc3RvcmUsIEFic3RyYWN0V2Vha1JlZmVy
ZW5jZU1hcDxULCB2ODo6T2JqZWN0PiYgZG9tTWFwKTsKLQotCiAgICAgICAgIHN0YXRpYyBET01E
YXRhU3RvcmUmIGdldEN1cnJlbnRTdG9yZSh2ODo6SXNvbGF0ZSogPSAwKTsKICAgICBwcml2YXRl
OgogICAgICAgICBET01EYXRhKCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KFdy
YXBwZXJUeXBlSW5mbyogdHlwZSwgdm9pZCogZG9tT2JqZWN0KTsKLQotICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgICAgICBjbGFzcyBXcmFwcGVyTWFwT2JqZWN0UmVtb3ZlciA6IHB1
YmxpYyBXZWFrUmVmZXJlbmNlTWFwPFQsIHY4OjpPYmplY3Q+OjpWaXNpdG9yIHsKLSAgICAgICAg
cHVibGljOgotICAgICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRh
U3RvcmUqIHN0b3JlLCBUKiBkb21PYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHY4
T2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFdyYXBwZXJUeXBlSW5mbyog
dHlwZSA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUodjhPYmplY3QpOwotICAgICAgICAg
ICAgICAgIGRlcmVmT2JqZWN0KHR5cGUsIGRvbU9iamVjdCk7Ci0gICAgICAgICAgICAgICAgdjhP
YmplY3QuRGlzcG9zZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwogICAgIH07CiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgRE9NRGF0YTo6aGFuZGxlV2Vha09iamVj
dChET01EYXRhU3RvcmU6OkRPTVdyYXBwZXJNYXBUeXBlIG1hcFR5cGUsIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+IHY4T2JqZWN0LCBUKiBkb21PYmplY3QpCi0gICAgewotICAgICAgICBXcmFw
cGVyVHlwZUluZm8qIHR5cGUgPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHY4T2JqZWN0
KTsKLSAgICAgICAgRE9NRGF0YUxpc3QmIGxpc3QgPSBET01EYXRhU3RvcmU6OmFsbFN0b3Jlcygp
OwotICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGlzdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgRE9NRGF0YVN0b3JlKiBzdG9y
ZSA9IGxpc3RbaV07Ci0KLSAgICAgICAgICAgIERPTVdyYXBwZXJNYXA8VD4qIGRvbU1hcCA9IHN0
YXRpY19jYXN0PERPTVdyYXBwZXJNYXA8VD4qPihzdG9yZS0+Z2V0RE9NV3JhcHBlck1hcChtYXBU
eXBlKSk7Ci0gICAgICAgICAgICBpZiAoZG9tTWFwLT5yZW1vdmVJZlByZXNlbnQoZG9tT2JqZWN0
LCB2OE9iamVjdCkpIHsKLSAgICAgICAgICAgICAgICBkZXJlZk9iamVjdCh0eXBlLCBkb21PYmpl
Y3QpOwotICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIElmIG5vdCBmb3VuZCwgaXQgbWVhbnMgbWFwIGZvciB0aGUgd3Jh
cHBlciBoYXMgYmVlbiBhbHJlYWR5IGRlc3Ryb3llZCwganVzdCBkaXNwb3NlIHRoZQotICAgICAg
ICAvLyBoYW5kbGUgYW5kIGRlcmVmIHRoZSBvYmplY3QgdG8gZmlnaHQgbWVtb3J5IGxlYWsuCi0g
ICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgIHY4T2JqZWN0LkRpc3Bvc2UoKTsKLSAg
ICAgICAgICAgIGRlcmVmT2JqZWN0KHR5cGUsIGRvbU9iamVjdCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgRE9NRGF0YTo6cmVtb3ZlT2Jq
ZWN0c0Zyb21XcmFwcGVyTWFwKERPTURhdGFTdG9yZSogc3RvcmUsIEFic3RyYWN0V2Vha1JlZmVy
ZW5jZU1hcDxULCB2ODo6T2JqZWN0PiYgZG9tTWFwKQotICAgIHsKLSAgICAgICAgV3JhcHBlck1h
cE9iamVjdFJlbW92ZXI8VD4gcmVtb3ZlcjsKLSAgICAgICAgZG9tTWFwLnZpc2l0KHN0b3JlLCAm
cmVtb3Zlcik7Ci0gICAgICAgIGRvbU1hcC5jbGVhcigpOwotICAgIH0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRE9NRGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvRE9NRGF0YVN0b3JlLmNwcAppbmRleCBkYzA4OTZjZjNiNzAyMDdmZmY3MTMxZGU3MThi
MjFmYjdkOWYyMWYzLi5jMjEyNzQ4YThiNDZjNjJlZDlhNzEyN2Y3NGRmMTkwZDRiODlkYWE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAKQEAgLTEyOCw0
NCArMTI4LDQgQEAgdm9pZCBET01EYXRhU3RvcmU6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9i
amVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAgICAgaW5mby5hZGRXZWFrUG9pbnRl
cihtX2FjdGl2ZURvbU9iamVjdE1hcCk7CiB9CiAKLS8vIENhbGxlZCB3aGVuIHRoZSBvYmplY3Qg
aXMgbmVhciBkZWF0aCAobm90IHJlYWNoYWJsZSBmcm9tIEpTIHJvb3RzKS4KLS8vIEl0IGlzIHRp
bWUgdG8gcmVtb3ZlIHRoZSBlbnRyeSBmcm9tIHRoZSB0YWJsZSBhbmQgZGlzcG9zZSB0aGUgaGFu
ZGxlLgotdm9pZCBET01EYXRhU3RvcmU6OndlYWtET01PYmplY3RDYWxsYmFjayh2ODo6UGVyc2lz
dGVudDx2ODo6VmFsdWU+IHY4T2JqZWN0LCB2b2lkKiBkb21PYmplY3QpCi17Ci0gICAgdjg6Okhh
bmRsZVNjb3BlIHNjb3BlOwotICAgIEFTU0VSVCh2OE9iamVjdC0+SXNPYmplY3QoKSk7Ci0gICAg
RE9NRGF0YTo6aGFuZGxlV2Vha09iamVjdChET01EYXRhU3RvcmU6OkRPTU9iamVjdE1hcCwgdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46OkNhc3QodjhPYmplY3QpLCBkb21PYmplY3QpOwotfQot
Ci12b2lkIERPTURhdGFTdG9yZTo6d2Vha0FjdGl2ZURPTU9iamVjdENhbGxiYWNrKHY4OjpQZXJz
aXN0ZW50PHY4OjpWYWx1ZT4gdjhPYmplY3QsIHZvaWQqIGRvbU9iamVjdCkKLXsKLSAgICB2ODo6
SGFuZGxlU2NvcGUgc2NvcGU7Ci0gICAgQVNTRVJUKHY4T2JqZWN0LT5Jc09iamVjdCgpKTsKLSAg
ICBET01EYXRhOjpoYW5kbGVXZWFrT2JqZWN0KERPTURhdGFTdG9yZTo6QWN0aXZlRE9NT2JqZWN0
TWFwLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6Q2FzdCh2OE9iamVjdCksIGRvbU9iamVj
dCk7Ci19Ci0KLXZvaWQgRE9NRGF0YVN0b3JlOjp3ZWFrTm9kZUNhbGxiYWNrKHY4OjpQZXJzaXN0
ZW50PHY4OjpWYWx1ZT4gdmFsdWUsIHZvaWQqIGRvbU9iamVjdCkKLXsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotCi0gICAgTm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PE5vZGUqPihkb21P
YmplY3QpOwotICAgIC8vIE5vZGUgd3JhcHBlcnMgbXVzdCBiZSBKUyBvYmplY3RzLgotICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHY4T2JqZWN0ID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD46OkNhc3QodmFsdWUpOwotCi0gICAgRE9NRGF0YUxpc3QmIGxpc3QgPSBET01EYXRhU3Rv
cmU6OmFsbFN0b3JlcygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7
ICsraSkgewotICAgICAgICBET01EYXRhU3RvcmUqIHN0b3JlID0gbGlzdFtpXTsKLSAgICAgICAg
RE9NTm9kZU1hcHBpbmcmIG5vZGVNYXAgPSBub2RlLT5pc0FjdGl2ZU5vZGUoKSA/IHN0b3JlLT5h
Y3RpdmVEb21Ob2RlTWFwKCkgOiBzdG9yZS0+ZG9tTm9kZU1hcCgpOwotICAgICAgICBpZiAobm9k
ZU1hcC5yZW1vdmVJZlByZXNlbnQobm9kZSwgdjhPYmplY3QpKSB7Ci0gICAgICAgICAgICBub2Rl
LT5kZXJlZigpOyAvLyBOb2JvZHkgb3ZlcnJpZGVzIE5vZGU6OmRlcmVmIHNvIGl0J3Mgc2FmZQot
ICAgICAgICAgICAgcmV0dXJuOyAvLyBUaGVyZSBtaWdodCBiZSBhdCBtb3N0IG9uZSB3cmFwcGVy
IGZvciB0aGUgbm9kZSBpbiB3b3JsZCdzIG1hcHMKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IElmIG5vdCBmb3VuZCwgaXQgbWVhbnMgbWFwIGZvciB0aGUgd3JhcHBlciBoYXMgYmVlbiBhbHJl
YWR5IGRlc3Ryb3llZCwganVzdCBkaXNwb3NlIHRoZQotICAgIC8vIGhhbmRsZSBhbmQgZGVyZWYg
dGhlIG9iamVjdCB0byBmaWdodCBtZW1vcnkgbGVhay4KLSAgICB2OE9iamVjdC5EaXNwb3NlKCk7
Ci0gICAgbm9kZS0+ZGVyZWYoKTsgLy8gTm9ib2R5IG92ZXJyaWRlcyBOb2RlOjpkZXJlZiBzbyBp
dCdzIHNhZmUKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9ET01EYXRhU3RvcmUuaAppbmRleCAzNzcxNjc1NDhmN2M1ZmU4NmM0ODNjMDc1NmFh
ODU4NzRkYjljMzZjLi5lNjc2ZmUwYzQzMGJjNGM4YTRhNTk0NzJkYzc0ZWRkMGMyYmY0ZDNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaApAQCAtMzEsOCArMzEs
OCBAQAogI2lmbmRlZiBET01EYXRhU3RvcmVfaAogI2RlZmluZSBET01EYXRhU3RvcmVfaAogCi0j
aW5jbHVkZSAiVjhET01NYXAuaCIKLQorI2luY2x1ZGUgIkRPTVdyYXBwZXJNYXAuaCIKKyNpbmNs
dWRlICJOb2RlLmgiCiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC03MiwyNyArNzIsMjEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBET01EYXRhU3RvcmUoKTsKICAgICAgICAgdmlydHVhbCB+RE9N
RGF0YVN0b3JlKCk7CiAKLSAgICAgICAgLy8gQSBsaXN0IG9mIGFsbCBET01EYXRhU3RvcmUgb2Jq
ZWN0cyBpbiB0aGUgY3VycmVudCBWOCBpbnN0YW5jZSAodGhyZWFkKS4gTm9ybWFsbHksIGVhY2gg
V29ybGQgaGFzIGEgRE9NRGF0YVN0b3JlLgorICAgICAgICAvLyBBIGxpc3Qgb2YgYWxsIERPTURh
dGFTdG9yZSBvYmplY3RzIGluIHRoZSBjdXJyZW50IFY4IGlzb2xhdGUuIE5vcm1hbGx5LCBlYWNo
IFdvcmxkIGhhcyBhIERPTURhdGFTdG9yZS4KICAgICAgICAgc3RhdGljIERPTURhdGFMaXN0JiBh
bGxTdG9yZXMoKTsKIAogICAgICAgICB2b2lkKiBnZXRET01XcmFwcGVyTWFwKERPTVdyYXBwZXJN
YXBUeXBlKTsKIAotICAgICAgICBET01Ob2RlTWFwcGluZyYgZG9tTm9kZU1hcCgpIHsgcmV0dXJu
ICptX2RvbU5vZGVNYXA7IH0KLSAgICAgICAgRE9NTm9kZU1hcHBpbmcmIGFjdGl2ZURvbU5vZGVN
YXAoKSB7IHJldHVybiAqbV9hY3RpdmVEb21Ob2RlTWFwOyB9CisgICAgICAgIERPTVdyYXBwZXJN
YXA8Tm9kZT4mIGRvbU5vZGVNYXAoKSB7IHJldHVybiAqbV9kb21Ob2RlTWFwOyB9CisgICAgICAg
IERPTVdyYXBwZXJNYXA8Tm9kZT4mIGFjdGl2ZURvbU5vZGVNYXAoKSB7IHJldHVybiAqbV9hY3Rp
dmVEb21Ob2RlTWFwOyB9CiAgICAgICAgIERPTVdyYXBwZXJNYXA8dm9pZD4mIGRvbU9iamVjdE1h
cCgpIHsgcmV0dXJuICptX2RvbU9iamVjdE1hcDsgfQogICAgICAgICBET01XcmFwcGVyTWFwPHZv
aWQ+JiBhY3RpdmVEb21PYmplY3RNYXAoKSB7IHJldHVybiAqbV9hY3RpdmVEb21PYmplY3RNYXA7
IH0KIAotICAgICAgICAvLyBOZWVkIGJ5IFY4R0NDb250cm9sbGVyLgotICAgICAgICBzdGF0aWMg
dm9pZCB3ZWFrQWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
PiB2OE9iamVjdCwgdm9pZCogZG9tT2JqZWN0KTsKLSAgICAgICAgc3RhdGljIHZvaWQgd2Vha05v
ZGVDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4T2JqZWN0LCB2b2lkKiBkb21P
YmplY3QpOwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlP
YmplY3RJbmZvKikgY29uc3Q7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHN0YXRpYyB2b2lk
IHdlYWtET01PYmplY3RDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4T2JqZWN0
LCB2b2lkKiBkb21PYmplY3QpOwotCi0gICAgICAgIERPTU5vZGVNYXBwaW5nKiBtX2RvbU5vZGVN
YXA7Ci0gICAgICAgIERPTU5vZGVNYXBwaW5nKiBtX2FjdGl2ZURvbU5vZGVNYXA7CisgICAgICAg
IERPTVdyYXBwZXJNYXA8Tm9kZT4qIG1fZG9tTm9kZU1hcDsKKyAgICAgICAgRE9NV3JhcHBlck1h
cDxOb2RlPiogbV9hY3RpdmVEb21Ob2RlTWFwOwogICAgICAgICBET01XcmFwcGVyTWFwPHZvaWQ+
KiBtX2RvbU9iamVjdE1hcDsKICAgICAgICAgRE9NV3JhcHBlck1hcDx2b2lkPiogbV9hY3RpdmVE
b21PYmplY3RNYXA7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0RPTVdyYXBwZXJNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBw
ZXJNYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jYTRjNTk5ZmIzYTFhYTQwYjdhYzZhZGYxNTZmYTU2NzU1MTA2
NTI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3Jh
cHBlck1hcC5oCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBET01XcmFwcGVyTWFwX2gKKyNkZWZp
bmUgRE9NV3JhcHBlck1hcF9oCisKKyNpbmNsdWRlICJXZWJDb3JlTWVtb3J5SW5zdHJ1bWVudGF0
aW9uLmgiCisjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCisjaW5jbHVkZSA8djguaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRp
b25IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRE9NRGF0YVN0b3Jl
OworCit0ZW1wbGF0ZTxjbGFzcyBLZXlUeXBlPgorY2xhc3MgRE9NV3JhcHBlclZpc2l0b3Igewor
cHVibGljOgorICAgIHZpcnR1YWwgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiwg
S2V5VHlwZSosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpID0gMDsKKyAgICB2
aXJ0dWFsIH5ET01XcmFwcGVyVmlzaXRvcigpIHsgfQorfTsKKwordGVtcGxhdGU8Y2xhc3MgS2V5
VHlwZT4KK2NsYXNzIERPTVdyYXBwZXJNYXAgeworcHVibGljOgorICAgIHZpcnR1YWwgfkRPTVdy
YXBwZXJNYXAoKSB7IH0KKworICAgIHZpcnR1YWwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4g
Z2V0KEtleVR5cGUqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldChLZXlUeXBlKiwgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoRE9NRGF0
YVN0b3JlKiwgRE9NV3JhcHBlclZpc2l0b3I8S2V5VHlwZT4qKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGNsZWFyKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1l
bW9yeU9iamVjdEluZm8qKSBjb25zdCA9IDA7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBLZXlUeXBl
PgorY2xhc3MgRE9NV3JhcHBlckhhc2hNYXAgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDxLZXlUeXBl
PiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBIYXNoTWFwPEtleVR5cGUqLCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0PiA+IE1hcFR5cGU7CisKKyAgICBleHBsaWNpdCBET01XcmFwcGVySGFzaE1h
cCh2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrID0gJmRlZmF1bHRXZWFrQ2FsbGJh
Y2spCisgICAgICAgIDogbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICB7CisgICAgfQorCisgICAg
dmlydHVhbCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBnZXQoS2V5VHlwZSoga2V5KSBPVkVS
UklERQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLmdldChrZXkpOworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBzZXQoS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiB3cmFwcGVyKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX21hcC5jb250YWlu
cyhrZXkpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PEtleVR5cGUqPih0b05hdGl2ZSh3
cmFwcGVyKSkgPT0ga2V5KTsKKyAgICAgICAgd3JhcHBlci5NYWtlV2Vhayh0aGlzLCBtX2NhbGxi
YWNrKTsKKyAgICAgICAgbV9tYXAuc2V0KGtleSwgd3JhcHBlcik7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIHZpc2l0KERPTURhdGFTdG9yZSogc3RvcmUsIERPTVdyYXBwZXJWaXNpdG9yPEtl
eVR5cGU+KiB2aXNpdG9yKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgZm9yICh0eXBlbmFtZSBN
YXBUeXBlOjppdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IG1fbWFwLmVuZCgpOyAr
K2l0KQorICAgICAgICAgICAgdmlzaXRvci0+dmlzaXRET01XcmFwcGVyKHN0b3JlLCBpdC0+a2V5
LCBpdC0+dmFsdWUpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpIE9WRVJSSURF
CisgICAgeworICAgICAgICBmb3IgKHR5cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9yIGl0ID0gbV9t
YXAuYmVnaW4oKTsgaXQgIT0gbV9tYXAuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBpdC0+dmFsdWU7CisgICAgICAgICAgICB0
b1dyYXBwZXJUeXBlSW5mbyh3cmFwcGVyKS0+ZGVyZWZPYmplY3QoaXQtPmtleSk7CisgICAgICAg
ICAgICB3cmFwcGVyLkRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBtX21hcC5jbGVhcigp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmpl
Y3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdCBPVkVSUklERQorICAgIHsKKyAgICAgICAg
TWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9y
eVR5cGVzOjpCaW5kaW5nKTsKKyAgICAgICAgaW5mby5hZGRNZW1iZXIobV9tYXApOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCByZW1vdmUoS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0PiB3cmFwcGVyKQorICAgIHsKKyAgICAgICAgdHlwZW5hbWUgTWFwVHlwZTo6aXRl
cmF0b3IgaXQgPSBtX21hcC5maW5kKGtleSk7CisgICAgICAgIEFTU0VSVChpdCAhPSBtX21hcC5l
bmQoKSk7CisgICAgICAgIEFTU0VSVChpdC0+dmFsdWUgPT0gd3JhcHBlcik7CisgICAgICAgIG1f
bWFwLnJlbW92ZShpdCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGRlZmF1
bHRXZWFrQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2YWx1ZSwgdm9pZCogY29u
dGV4dCkKKyAgICB7CisgICAgICAgIERPTVdyYXBwZXJIYXNoTWFwPEtleVR5cGU+KiBtYXAgPSBz
dGF0aWNfY2FzdDxET01XcmFwcGVySGFzaE1hcDxLZXlUeXBlPio+KGNvbnRleHQpOworICAgICAg
ICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkpOworICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
T2JqZWN0PiB3cmFwcGVyID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46OkNhc3QodmFsdWUp
OworICAgICAgICBXcmFwcGVyVHlwZUluZm8qIHR5cGUgPSB0b1dyYXBwZXJUeXBlSW5mbyh3cmFw
cGVyKTsKKyAgICAgICAgS2V5VHlwZSoga2V5ID0gc3RhdGljX2Nhc3Q8S2V5VHlwZSo+KHRvTmF0
aXZlKHdyYXBwZXIpKTsKKworICAgICAgICBtYXAtPnJlbW92ZShrZXksIHdyYXBwZXIpOworICAg
ICAgICB3cmFwcGVyLkRpc3Bvc2UoKTsKKyAgICAgICAgdHlwZS0+ZGVyZWZPYmplY3Qoa2V5KTsK
KyAgICB9CisKKyAgICB2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIG1fY2FsbGJhY2s7CisgICAg
TWFwVHlwZSBtX21hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IERPTVdyYXBwZXJNYXBfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
RE9NV3JhcHBlcldvcmxkLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVy
V29ybGQuaAppbmRleCBhZGYxMjRlYzI3NWI4ODk5OThiMjdlNGE3NzBiZTViZDg4OTU2YWQ1Li41
ZmM5NzE2M2JlNGVjNTk2MGJiN2EzMzZmZjJlYTVhYjJiMTZlMTJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaApAQCAtMzEsOCArMzEsOCBAQAogI2lm
bmRlZiBET01XcmFwcGVyV29ybGRfaAogI2RlZmluZSBET01XcmFwcGVyV29ybGRfaAogCi0jaW5j
bHVkZSAiRE9NRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNs
dWRlICJWOERPTU1hcC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JbnRydXNpdmVET01XcmFwcGVyTWFwLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JbnRydXNpdmVET01XcmFwcGVyTWFwLmgKaW5kZXggZDY2
Yzc2MTZjZWVkOTM1NDRiODM3ODJhY2I3NGRkNzQxODZlNzIwMC4uNjA5Y2ZjNzlkODY2N2Y1ZWYx
MThkZGY2ZGE2YmY3YTY4YTQ0NDFiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvSW50cnVzaXZlRE9NV3JhcHBlck1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L0ludHJ1c2l2ZURPTVdyYXBwZXJNYXAuaApAQCAtMzEsNzYgKzMxLDU5IEBACiAjaWZu
ZGVmIEludHJ1c2l2ZURPTVdyYXBwZXJNYXBfaAogI2RlZmluZSBJbnRydXNpdmVET01XcmFwcGVy
TWFwX2gKIAotI2luY2x1ZGUgIkRPTURhdGFTdG9yZS5oIgotI2luY2x1ZGUgIlY4RE9NTWFwLmgi
Ci0jaW5jbHVkZSAiVjhOb2RlLmgiCi0jaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRh
dGlvbi5oIgorI2luY2x1ZGUgIkRPTVdyYXBwZXJNYXAuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBET01Ob2RlV3JhcHBlck1hcCA6IHB1YmxpYyBBYnN0cmFjdFdlYWtSZWZlcmVu
Y2VNYXA8Tm9kZSwgdjg6Ok9iamVjdD4geworY2xhc3MgRE9NTm9kZVdyYXBwZXJNYXAgOiBwdWJs
aWMgRE9NV3JhcHBlck1hcDxOb2RlPiB7CiBwdWJsaWM6Ci0gICAgRE9NTm9kZVdyYXBwZXJNYXAo
djg6OldlYWtSZWZlcmVuY2VDYWxsYmFjayBjYWxsYmFjaykKLSAgICAgICAgOiBBYnN0cmFjdFdl
YWtSZWZlcmVuY2VNYXA8Tm9kZSwgdjg6Ok9iamVjdD4oY2FsbGJhY2spCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gZ2V0KE5vZGUqIG5vZGUp
CisgICAgdmlydHVhbCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBnZXQoTm9kZSogbm9kZSkg
T1ZFUlJJREUKICAgICB7CiAgICAgICAgIHJldHVybiBub2RlLT53cmFwcGVyKCk7CiAgICAgfQog
Ci0gICAgdmlydHVhbCB2b2lkIHNldChOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0PiB3cmFwcGVyKQorICAgIHZpcnR1YWwgdm9pZCBzZXQoTm9kZSogbm9kZSwgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikgT1ZFUlJJREUKICAgICB7CiAgICAgICAgIEFTU0VS
VChub2RlICYmIG5vZGUtPndyYXBwZXIoKS5Jc0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQod3Jh
cHBlci5XcmFwcGVyQ2xhc3NJZCgpID09IHY4RE9NU3VidHJlZUNsYXNzSWQpOwogICAgICAgICBu
b2RlLT5zZXRXcmFwcGVyKHdyYXBwZXIpOwotICAgICAgICB3cmFwcGVyLk1ha2VXZWFrKG5vZGUs
IHdlYWtSZWZlcmVuY2VDYWxsYmFjaygpKTsKKyAgICAgICAgd3JhcHBlci5NYWtlV2Vhayhub2Rl
LCB3ZWFrQ2FsbGJhY2spOwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBjb250YWlucyhOb2Rl
KiBub2RlKQorICAgIHZpcnR1YWwgdm9pZCB2aXNpdChET01EYXRhU3RvcmUqIHN0b3JlLCBET01X
cmFwcGVyVmlzaXRvcjxOb2RlPiogdmlzaXRvcikgT1ZFUlJJREUKICAgICB7Ci0gICAgICAgIHJl
dHVybiAhbm9kZS0+d3JhcHBlcigpLklzRW1wdHkoKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KERPTURhdGFTdG9yZSogc3Rv
cmUsIFZpc2l0b3IqIHZpc2l0b3IpCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgT1ZFUlJJREUK
ICAgICB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHZpcnR1
YWwgYm9vbCByZW1vdmVJZlByZXNlbnQoTm9kZSogbm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4gdmFsdWUpCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9i
amVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0IE9WRVJSSURFCiAgICAgewotICAgICAg
ICBBU1NFUlQobm9kZSk7Ci0gICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBw
ZXIgPSBub2RlLT53cmFwcGVyKCk7Ci0gICAgICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHdyYXBwZXIgIT0gdmFsdWUpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG5vZGUtPmRpc3Bvc2VXcmFwcGVyKCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigp
Citwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHdlYWtDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2
ODo6VmFsdWU+IHZhbHVlLCB2b2lkKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgfQorICAgICAgICBOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8Tm9k
ZSo+KGNvbnRleHQpOworICAgICAgICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkpOworICAgICAg
ICBBU1NFUlQobm9kZS0+d3JhcHBlcigpID09IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpD
YXN0KHZhbHVlKSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5
T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QgT1ZFUlJJREUKLSAgICB7Ci0gICAg
ICAgIC8vIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgZG9lc24ndCB1c2UgYW55IGV4dHJhIG1lbW9yeS4K
KyAgICAgICAgbm9kZS0+Y2xlYXJXcmFwcGVyKCk7CisgICAgICAgIHZhbHVlLkRpc3Bvc2UoKTsK
KyAgICAgICAgbm9kZS0+ZGVyZWYoKTsKICAgICB9CiB9OwogCi1jbGFzcyBBY3RpdmVET01Ob2Rl
V3JhcHBlck1hcCA6IHB1YmxpYyBET01XcmFwcGVyTWFwPE5vZGU+IHsKK2NsYXNzIEFjdGl2ZURP
TU5vZGVXcmFwcGVyTWFwIDogcHVibGljIERPTVdyYXBwZXJIYXNoTWFwPE5vZGU+IHsKIHB1Ymxp
YzoKLSAgICBBY3RpdmVET01Ob2RlV3JhcHBlck1hcCh2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNr
IGNhbGxiYWNrKQotICAgICAgICA6IERPTVdyYXBwZXJNYXA8Tm9kZT4oY2FsbGJhY2spCi0gICAg
ewotICAgIH0KLQogICAgIHZpcnR1YWwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gZ2V0KE5v
ZGUqIG5vZGUpIE9WRVJSSURFCiAgICAgewotICAgICAgICByZXR1cm4gbm9kZS0+d3JhcHBlcigp
OworICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gbm9kZS0+d3Jh
cHBlcigpOworICAgICAgICBBU1NFUlQoRE9NV3JhcHBlckhhc2hNYXA8Tm9kZT46OmdldChub2Rl
KSA9PSB3cmFwcGVyKTsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQogCiAgICAgdmly
dHVhbCB2b2lkIHNldChOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFw
cGVyKSBPVkVSUklERQpAQCAtMTA4LDIyICs5MSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VChub2RlICYmIG5vZGUtPndyYXBwZXIoKS5Jc0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQod3Jh
cHBlci5XcmFwcGVyQ2xhc3NJZCgpID09IHY4RE9NU3VidHJlZUNsYXNzSWQpOwogICAgICAgICBu
b2RlLT5zZXRXcmFwcGVyKHdyYXBwZXIpOwotICAgICAgICBET01XcmFwcGVyTWFwPE5vZGU+Ojpz
ZXQobm9kZSwgd3JhcHBlcik7CisgICAgICAgIERPTVdyYXBwZXJIYXNoTWFwPE5vZGU+OjpzZXQo
bm9kZSwgd3JhcHBlcik7CiAgICAgfQogCi0gICAgdmlydHVhbCBib29sIHJlbW92ZUlmUHJlc2Vu
dChOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB2YWx1ZSkgT1ZFUlJJREUK
KyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSBPVkVSUklERQogICAgIHsKLSAgICAgICAgaWYgKCFE
T01XcmFwcGVyTWFwPE5vZGU+OjpyZW1vdmVJZlByZXNlbnQobm9kZSwgdmFsdWUpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBOb3RpY2UgdGhhdCB3ZSBjYWxsICJjbGVh
cldyYXBwZXIiIGhlcmUgcmF0aGVyIHRoYW4gZGlzcG9zZVdyYXBwZXIgYmVjYXVzZQotICAgICAg
ICAvLyBvdXIgYmFzZSBjbGFzcyB3aWxsIGNhbGwgRGlzcG9zZSBvbiB0aGUgd3JhcHBlciBmb3Ig
dXMuCi0gICAgICAgIG5vZGUtPmNsZWFyV3JhcHBlcigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lk
IGNsZWFyKCkgT1ZFUlJJREUKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKE5vZGUqIG5vZGUsIHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpIE9WRVJSSURFCiAgICAgewotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPndyYXBwZXIoKSA9
PSB3cmFwcGVyKTsKKyAgICAgICAgbm9kZS0+Y2xlYXJXcmFwcGVyKCk7CisgICAgICAgIERPTVdy
YXBwZXJIYXNoTWFwPE5vZGU+OjpyZW1vdmUobm9kZSwgd3JhcHBlcik7CiAgICAgfQogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NvcGVkRE9NRGF0YVN0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njb3BlZERPTURhdGFTdG9yZS5jcHAK
aW5kZXggYmJkZGM1YzFiY2M5MWNmYWQ3ZjY5NzcwNjMyYTA0MzUyYTJmODY0Ny4uOWFiN2U1MjQz
OTQ3ODEwNTZkNTgzZTY5NTRlMWU4NGY2NjhmN2RlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NvcGVkRE9NRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY29wZWRET01EYXRhU3RvcmUuY3BwCkBAIC0zOSwxNCArMzksMjEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogU2NvcGVkRE9NRGF0YVN0b3JlOjpTY29wZWRET01EYXRhU3Rv
cmUoKQogICAgIDogRE9NRGF0YVN0b3JlKCkKIHsKLSAgICBtX2RvbU5vZGVNYXAgPSBuZXcgRE9N
V3JhcHBlck1hcDxOb2RlPigmRE9NRGF0YVN0b3JlOjp3ZWFrTm9kZUNhbGxiYWNrKTsKLSAgICBt
X2FjdGl2ZURvbU5vZGVNYXAgPSBuZXcgRE9NV3JhcHBlck1hcDxOb2RlPigmRE9NRGF0YVN0b3Jl
Ojp3ZWFrTm9kZUNhbGxiYWNrKTsKLSAgICBtX2RvbU9iamVjdE1hcCA9IG5ldyBET01XcmFwcGVy
TWFwPHZvaWQ+KCZET01EYXRhU3RvcmU6OndlYWtET01PYmplY3RDYWxsYmFjayk7Ci0gICAgbV9h
Y3RpdmVEb21PYmplY3RNYXAgPSBuZXcgRE9NV3JhcHBlck1hcDx2b2lkPigmRE9NRGF0YVN0b3Jl
Ojp3ZWFrQWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2spOworICAgIG1fZG9tTm9kZU1hcCA9IG5ldyBE
T01XcmFwcGVySGFzaE1hcDxOb2RlPjsKKyAgICBtX2FjdGl2ZURvbU5vZGVNYXAgPSBuZXcgRE9N
V3JhcHBlckhhc2hNYXA8Tm9kZT47CisgICAgbV9kb21PYmplY3RNYXAgPSBuZXcgRE9NV3JhcHBl
ckhhc2hNYXA8dm9pZD47CisgICAgbV9hY3RpdmVEb21PYmplY3RNYXAgPSBuZXcgRE9NV3JhcHBl
ckhhc2hNYXA8dm9pZD47CiB9CiAKIFNjb3BlZERPTURhdGFTdG9yZTo6flNjb3BlZERPTURhdGFT
dG9yZSgpCiB7CisgICAgLy8gRklYTUU6IENvbnNpZGVyIG1vdmluZyB0aGVzZSBjYWxscyB0byBj
bGVhcigpCisgICAgLy8gaW50byB0aGUgRE9NV3JhcHBlckhhc2hNYXAgZGVzdHJ1Y3Rvci4KKyAg
ICBtX2RvbU5vZGVNYXAtPmNsZWFyKCk7CisgICAgbV9hY3RpdmVEb21Ob2RlTWFwLT5jbGVhcigp
OworICAgIG1fZG9tT2JqZWN0TWFwLT5jbGVhcigpOworICAgIG1fYWN0aXZlRG9tT2JqZWN0TWFw
LT5jbGVhcigpOworCiAgICAgZGVsZXRlIG1fZG9tTm9kZU1hcDsKICAgICBkZWxldGUgbV9hY3Rp
dmVEb21Ob2RlTWFwOwogICAgIGRlbGV0ZSBtX2RvbU9iamVjdE1hcDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcAppbmRleCBiNTM5MjlhOWJkNDk1MGZh
N2UyMWY0NmFjNDk1MzYxOTA1ZjEyMmE4Li4xYjcxOTFjYWE0YTg0ODA1M2M0ZjMzMTE0YzhkNTcx
NTk2MTU5ZTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQ
cm9maWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmls
ZXIuY3BwCkBAIC0yMDUsNyArMjA1LDcgQEAgdm9pZCBTY3JpcHRQcm9maWxlcjo6dmlzaXRFeHRl
cm5hbFN0cmluZ3MoRXh0ZXJuYWxTdHJpbmdWaXNpdG9yKiB2aXNpdG9yKQogCiB2b2lkIFNjcmlw
dFByb2ZpbGVyOjp2aXNpdEV4dGVybmFsQXJyYXlzKEV4dGVybmFsQXJyYXlWaXNpdG9yKiB2aXNp
dG9yKQogewotICAgIGNsYXNzIFZpc2l0b3JBZGFwdGVyIDogcHVibGljIERPTVdyYXBwZXJNYXA8
dm9pZD46OlZpc2l0b3IgeworICAgIGNsYXNzIFZpc2l0b3JBZGFwdGVyIDogcHVibGljIERPTVdy
YXBwZXJWaXNpdG9yPHZvaWQ+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFZpc2l0b3JBZGFwdGVy
KEV4dGVybmFsQXJyYXlWaXNpdG9yKiB2aXNpdG9yKSA6IG1fdmlzaXRvcih2aXNpdG9yKSB7IH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0
b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5j
cHAKaW5kZXggNWQ5ZDA5Y2UxMzlkNDE4MjdkZDk3ZDYwMzEzYmExZmI2MGMzNmQzNS4uYzQ5Zjlm
ZDA5NzU5MmFiNmMwNzEwMGM3MGU3YzdlZTRiZmVhZGM3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuY3BwCkBAIC0zNiwxMSArMzYsNiBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTdGF0aWNET01EYXRhU3RvcmU6OlN0YXRpY0RPTURh
dGFTdG9yZSgpCi0gICAgOiBET01EYXRhU3RvcmUoKQotICAgICwgbV9zdGF0aWNEb21Ob2RlTWFw
KCZET01EYXRhU3RvcmU6OndlYWtOb2RlQ2FsbGJhY2spCi0gICAgLCBtX3N0YXRpY0FjdGl2ZURv
bU5vZGVNYXAoJkRPTURhdGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjaykKLSAgICAsIG1fc3RhdGlj
RG9tT2JqZWN0TWFwKCZET01EYXRhU3RvcmU6OndlYWtET01PYmplY3RDYWxsYmFjaykKLSAgICAs
IG1fc3RhdGljQWN0aXZlRG9tT2JqZWN0TWFwKCZET01EYXRhU3RvcmU6OndlYWtBY3RpdmVET01P
YmplY3RDYWxsYmFjaykKIHsKICAgICBtX2RvbU5vZGVNYXAgPSAmbV9zdGF0aWNEb21Ob2RlTWFw
OwogICAgIG1fYWN0aXZlRG9tTm9kZU1hcCA9ICZtX3N0YXRpY0FjdGl2ZURvbU5vZGVNYXA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUu
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5oCmluZGV4
IDgxMDkzMDUwZWM3NjYxMDU5ZjhhZWMzNWQzYzJiNDFmMTdkYmM0MGIuLjIwZDExYWRhYWU1NmY4
YjUyYTI2YTM4YjM5ZTAwNTRiYWMyOGQzYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5oCkBAIC01NCw4ICs1NCw4IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgRE9NTm9kZVdyYXBwZXJNYXAgbV9zdGF0aWNEb21Ob2RlTWFwOwogICAgIEFj
dGl2ZURPTU5vZGVXcmFwcGVyTWFwIG1fc3RhdGljQWN0aXZlRG9tTm9kZU1hcDsKLSAgICBET01X
cmFwcGVyTWFwPHZvaWQ+IG1fc3RhdGljRG9tT2JqZWN0TWFwOwotICAgIERPTVdyYXBwZXJNYXA8
dm9pZD4gbV9zdGF0aWNBY3RpdmVEb21PYmplY3RNYXA7CisgICAgRE9NV3JhcHBlckhhc2hNYXA8
dm9pZD4gbV9zdGF0aWNEb21PYmplY3RNYXA7CisgICAgRE9NV3JhcHBlckhhc2hNYXA8dm9pZD4g
bV9zdGF0aWNBY3RpdmVEb21PYmplY3RNYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5jcHAKaW5kZXggZTZkYWI5MDk0NDdh
NjcyYjhlZGFiMzE0NzM2NDcxZmI5YWU4NzY3Yi4uNWViNjMwYmUxYWRjYjAwNzRhYWQwNDNiODJj
YmQ5YmYzN2IzYTFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhE
T01NYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcApA
QCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRPTURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIlNj
b3BlZERPTURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4
Tm9kZS5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTU2LDEyICs1NywxMiBAQCBOb2RlV3JhcHBlclZpc2l0b3I6On5Ob2RlV3JhcHBlclZp
c2l0b3IoKQogewogfQogCi1ET01Ob2RlTWFwcGluZyYgZ2V0RE9NTm9kZU1hcCh2ODo6SXNvbGF0
ZSogaXNvbGF0ZSkKK0RPTVdyYXBwZXJNYXA8Tm9kZT4mIGdldERPTU5vZGVNYXAodjg6Oklzb2xh
dGUqIGlzb2xhdGUpCiB7CiAgICAgcmV0dXJuIERPTURhdGE6OmdldEN1cnJlbnRTdG9yZShpc29s
YXRlKS5kb21Ob2RlTWFwKCk7CiB9CiAKLURPTU5vZGVNYXBwaW5nJiBnZXRBY3RpdmVET01Ob2Rl
TWFwKHY4OjpJc29sYXRlKiBpc29sYXRlKQorRE9NV3JhcHBlck1hcDxOb2RlPiYgZ2V0QWN0aXZl
RE9NTm9kZU1hcCh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICByZXR1cm4gRE9NRGF0YTo6
Z2V0Q3VycmVudFN0b3JlKGlzb2xhdGUpLmFjdGl2ZURvbU5vZGVNYXAoKTsKIH0KQEAgLTc4LDE0
ICs3OSwxMSBAQCBET01XcmFwcGVyTWFwPHZvaWQ+JiBnZXRBY3RpdmVET01PYmplY3RNYXAodjg6
Oklzb2xhdGUqIGlzb2xhdGUpCiAKIHZvaWQgcmVtb3ZlQWxsRE9NT2JqZWN0cygpCiB7Ci0gICAg
RE9NRGF0YVN0b3JlJiBzdG9yZSA9IERPTURhdGE6OmdldEN1cnJlbnRTdG9yZSgpOwotCi0gICAg
djg6OkhhbmRsZVNjb3BlIHNjb3BlOwogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0g
ICAgLy8gTm90ZTogV2Ugc2tpcCB0aGUgTm9kZSB3cmFwcGVyIG1hcHMgYmVjYXVzZSB0aGV5IGV4
aXN0IG9ubHkgb24gdGhlIG1haW4gdGhyZWFkLgotICAgIERPTURhdGE6OnJlbW92ZU9iamVjdHNG
cm9tV3JhcHBlck1hcDx2b2lkPigmc3RvcmUsIHN0b3JlLmRvbU9iamVjdE1hcCgpKTsKLSAgICBE
T01EYXRhOjpyZW1vdmVPYmplY3RzRnJvbVdyYXBwZXJNYXA8dm9pZD4oJnN0b3JlLCBzdG9yZS5h
Y3RpdmVEb21PYmplY3RNYXAoKSk7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIERP
TURhdGFTdG9yZSYgc3RvcmUgPSBET01EYXRhOjpnZXRDdXJyZW50U3RvcmUoKTsKKyAgICBzdG9y
ZS5kb21PYmplY3RNYXAoKS5jbGVhcigpOworICAgIHN0b3JlLmFjdGl2ZURvbU9iamVjdE1hcCgp
LmNsZWFyKCk7CiB9CiAKIHZvaWQgdmlzaXRBbGxET01Ob2RlcyhOb2RlV3JhcHBlclZpc2l0b3Iq
IHZpc2l0b3IpCkBAIC0xMTcsNyArMTE1LDcgQEAgdm9pZCB2aXNpdEFsbERPTU5vZGVzKE5vZGVX
cmFwcGVyVmlzaXRvciogdmlzaXRvcikKICAgICB2ODo6Vjg6OlZpc2l0SGFuZGxlc1dpdGhDbGFz
c0lkcygmdmlzaXRvckFkYXB0ZXIpOwogfQogCi12b2lkIHZpc2l0QWN0aXZlRE9NTm9kZXMoRE9N
V3JhcHBlck1hcDxOb2RlPjo6VmlzaXRvciogdmlzaXRvcikKK3ZvaWQgdmlzaXRBY3RpdmVET01O
b2RlcyhET01XcmFwcGVyVmlzaXRvcjxOb2RlPiogdmlzaXRvcikKIHsKICAgICB2ODo6SGFuZGxl
U2NvcGUgc2NvcGU7CiAKQEAgLTEyOSw3ICsxMjcsNyBAQCB2b2lkIHZpc2l0QWN0aXZlRE9NTm9k
ZXMoRE9NV3JhcHBlck1hcDxOb2RlPjo6VmlzaXRvciogdmlzaXRvcikKICAgICB9CiB9CiAKLXZv
aWQgdmlzaXRET01PYmplY3RzKERPTVdyYXBwZXJNYXA8dm9pZD46OlZpc2l0b3IqIHZpc2l0b3Ip
Cit2b2lkIHZpc2l0RE9NT2JqZWN0cyhET01XcmFwcGVyVmlzaXRvcjx2b2lkPiogdmlzaXRvcikK
IHsKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CiAKQEAgLTE0MSw3ICsxMzksNyBAQCB2b2lk
IHZpc2l0RE9NT2JqZWN0cyhET01XcmFwcGVyTWFwPHZvaWQ+OjpWaXNpdG9yKiB2aXNpdG9yKQog
ICAgIH0KIH0KIAotdm9pZCB2aXNpdEFjdGl2ZURPTU9iamVjdHMoRE9NV3JhcHBlck1hcDx2b2lk
Pjo6VmlzaXRvciogdmlzaXRvcikKK3ZvaWQgdmlzaXRBY3RpdmVET01PYmplY3RzKERPTVdyYXBw
ZXJWaXNpdG9yPHZvaWQ+KiB2aXNpdG9yKQogewogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgKaW5kZXggZmYwNjFmZTE2MTkwMTFj
NDk1ZmRkMjNkNmQzOTQxYjFkZTJhMTVmZC4uNTY3NWMxZDVlODk0ZTU1YmY4Y2U2MzQ3OGUyMWIw
NmJkZjhiNWFhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01N
YXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCkBAIC0zMSw2
ICszMSw3IEBACiAjaWZuZGVmIFY4RE9NTWFwX2gKICNkZWZpbmUgVjhET01NYXBfaAogCisjaW5j
bHVkZSAiRE9NV3JhcHBlck1hcC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJXZWJD
b3JlTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAg
LTQwLDExNiArNDEsMTMgQEAKICNpbmNsdWRlIDx2OC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
Ci0gICAgY2xhc3MgRE9NRGF0YVN0b3JlOwotCi0gICAgdGVtcGxhdGUgPGNsYXNzIEtleVR5cGUs
IGNsYXNzIFZhbHVlVHlwZT4gY2xhc3MgQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcCh2ODo6V2Vha1JlZmVyZW5j
ZUNhbGxiYWNrIGNhbGxiYWNrKSA6IG1fd2Vha1JlZmVyZW5jZUNhbGxiYWNrKGNhbGxiYWNrKSB7
IH0KLSAgICAgICAgdmlydHVhbCB+QWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwKCkgeyB9Ci0KLSAg
ICAgICAgY2xhc3MgVmlzaXRvciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIHZpcnR1
YWwgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiBzdG9yZSwgS2V5VHlwZSoga2V5
LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IG9iamVjdCkgPSAwOwotICAgICAgICBwcm90ZWN0
ZWQ6Ci0gICAgICAgICAgICB2aXJ0dWFsIH5WaXNpdG9yKCkgeyB9Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgdmlydHVhbCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IGdldChLZXlUeXBlKiBvYmop
ID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldChLZXlUeXBlKiBvYmosIHY4OjpQZXJzaXN0
ZW50PFZhbHVlVHlwZT4gd3JhcHBlcikgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY29udGFp
bnMoS2V5VHlwZSogb2JqKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdChET01EYXRh
U3RvcmUqIHN0b3JlLCBWaXNpdG9yKiB2aXNpdG9yKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9v
bCByZW1vdmVJZlByZXNlbnQoS2V5VHlwZSosIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4pID0g
MDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAwOwotCi0gICAgICAgIHY4OjpXZWFr
UmVmZXJlbmNlQ2FsbGJhY2sgd2Vha1JlZmVyZW5jZUNhbGxiYWNrKCkgeyByZXR1cm4gbV93ZWFr
UmVmZXJlbmNlQ2FsbGJhY2s7IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5
VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0ID0gMDsKLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sgbV93ZWFrUmVmZXJlbmNlQ2FsbGJhY2s7Ci0g
ICAgfTsKLQotICAgIHR5cGVkZWYgQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwPE5vZGUsIHY4OjpP
YmplY3Q+IERPTU5vZGVNYXBwaW5nOwotCi0gICAgLy8gQSB0YWJsZSBvZiB3cmFwcGVycyB3aXRo
IHdlYWsgcG9pbnRlcnMuCi0gICAgLy8gVGhpcyB0YWJsZSBhbGxvd3MgdXMgdG8gYXZvaWQgdHJh
Y2sgd3JhcHBlZCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcKLSAgICAvLyBhbmQgZm9yIGVuc3VyaW5n
IHRoYXQgd2UgZG9uJ3QgZG91YmxlIHdyYXAgdGhlIHNhbWUgb2JqZWN0LgotICAgIHRlbXBsYXRl
PGNsYXNzIEtleVR5cGUsIGNsYXNzIFZhbHVlVHlwZT4gY2xhc3MgV2Vha1JlZmVyZW5jZU1hcCA6
IHB1YmxpYyBBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXA8S2V5VHlwZSwgVmFsdWVUeXBlPiB7Ci0g
ICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDxLZXlU
eXBlLCBWYWx1ZVR5cGU+IFBhcmVudDsKLSAgICAgICAgV2Vha1JlZmVyZW5jZU1hcCh2ODo6V2Vh
a1JlZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrKSA6IFBhcmVudChjYWxsYmFjaykgeyB9Ci0gICAg
ICAgIHZpcnR1YWwgfldlYWtSZWZlcmVuY2VNYXAoKSB7IH0KLQotICAgICAgICAvLyBHZXQgdGhl
IEpTIHdyYXBwZXIgb2JqZWN0IG9mIGFuIG9iamVjdC4KLSAgICAgICAgdmlydHVhbCB2ODo6UGVy
c2lzdGVudDxWYWx1ZVR5cGU+IGdldChLZXlUeXBlKiBvYmopCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIFZhbHVlVHlwZSogd3JhcHBlciA9IG1fbWFwLmdldChvYmopOwotICAgICAgICAgICAgcmV0
dXJuIHdyYXBwZXIgPyB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+KHdyYXBwZXIpIDogdjg6OlBl
cnNpc3RlbnQ8VmFsdWVUeXBlPigpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lk
IHNldChLZXlUeXBlKiBvYmosIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4gd3JhcHBlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFtX21hcC5jb250YWlucyhvYmopKTsKLSAgICAg
ICAgICAgIHdyYXBwZXIuTWFrZVdlYWsob2JqLCBQYXJlbnQ6OndlYWtSZWZlcmVuY2VDYWxsYmFj
aygpKTsKLSAgICAgICAgICAgIG1fbWFwLnNldChvYmosICp3cmFwcGVyKTsKLSAgICAgICAgfQog
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBmb3JnZXQoS2V5VHlwZSogb2JqKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1NFUlQob2JqKTsKLSAgICAgICAgICAgIFZhbHVlVHlwZSogd3JhcHBlciA9
IG1fbWFwLnRha2Uob2JqKTsKLSAgICAgICAgICAgIGlmICghd3JhcHBlcikKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4gaGFu
ZGxlKHdyYXBwZXIpOwotICAgICAgICAgICAgaGFuZGxlLkRpc3Bvc2UoKTsKLSAgICAgICAgICAg
IGhhbmRsZS5DbGVhcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCByZW1vdmVJZlByZXNl
bnQoS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPEtleVR5cGUqLCBWYWx1ZVR5cGUqPjo6
aXRlcmF0b3IgaXQgPSBtX21hcC5maW5kKGtleSk7Ci0gICAgICAgICAgICBpZiAoaXQgPT0gbV9t
YXAuZW5kKCkgfHwgaXQtPnZhbHVlICE9ICp2YWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgICAgIG1fbWFwLnJlbW92ZShpdCk7Ci0gICAgICAgICAgICB2YWx1
ZS5EaXNwb3NlKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgY2xlYXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX21hcC5jbGVhcigpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBjb250YWlucyhLZXlUeXBlKiBvYmopIHsgcmV0dXJu
IG1fbWFwLmNvbnRhaW5zKG9iaik7IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoRE9N
RGF0YVN0b3JlKiBzdG9yZSwgdHlwZW5hbWUgUGFyZW50OjpWaXNpdG9yKiB2aXNpdG9yKQotICAg
ICAgICB7Ci0gICAgICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPEtleVR5cGUqLCBWYWx1ZVR5cGUq
Pjo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOwotICAgICAgICAgICAgZm9yICg7IGl0ICE9
IG1fbWFwLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgICAgIHZpc2l0b3ItPnZpc2l0RE9NV3Jh
cHBlcihzdG9yZSwgaXQtPmtleSwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPihpdC0+dmFsdWUp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShN
ZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdCBPVkVSUklERQotICAgICAg
ICB7Ci0gICAgICAgICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0
aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkJpbmRpbmcpOwotICAgICAgICAgICAgaW5mby5hZGRN
ZW1iZXIobV9tYXApOwotICAgICAgICB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEhhc2hN
YXA8S2V5VHlwZSosIFZhbHVlVHlwZSo+IG1fbWFwOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZSA8
Y2xhc3MgS2V5VHlwZT4gY2xhc3MgRE9NV3JhcHBlck1hcCA6IHB1YmxpYyBXZWFrUmVmZXJlbmNl
TWFwPEtleVR5cGUsIHY4OjpPYmplY3Q+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIERPTVdyYXBw
ZXJNYXAodjg6OldlYWtSZWZlcmVuY2VDYWxsYmFjayBjYWxsYmFjaykgOiBXZWFrUmVmZXJlbmNl
TWFwPEtleVR5cGUsIHY4OjpPYmplY3Q+KGNhbGxiYWNrKSB7IH0KLSAgICB9OworICAgIGNsYXNz
IERPTURhdGFTdG9yZTsKIAogICAgIC8vIEEgdXRpbGl0eSBjbGFzcyB0byBtYW5hZ2UgdGhlIGxp
ZmV0aW1lIG9mIHNldCBvZiBET00gd3JhcHBlcnMuCiAgICAgY2xhc3MgRE9NRGF0YVN0b3JlSGFu
ZGxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIERPTURhdGFTdG9yZUhhbmRsZShib29sIGluaXRp
YWxpemUpOworICAgICAgICBleHBsaWNpdCBET01EYXRhU3RvcmVIYW5kbGUoYm9vbCBpbml0aWFs
aXplKTsKICAgICAgICAgfkRPTURhdGFTdG9yZUhhbmRsZSgpOwogCiAgICAgICAgIERPTURhdGFT
dG9yZSogZ2V0U3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3N0b3JlLmdldCgpOyB9CkBAIC0xNTks
MTAgKzU3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIH07CiAKICAgICAvLyBBIG1hcCBm
cm9tIERPTSBub2RlIHRvIGl0cyBKUyB3cmFwcGVyLgotICAgIERPTU5vZGVNYXBwaW5nJiBnZXRE
T01Ob2RlTWFwKHY4OjpJc29sYXRlKiA9IDApOwotICAgIERPTU5vZGVNYXBwaW5nJiBnZXRBY3Rp
dmVET01Ob2RlTWFwKHY4OjpJc29sYXRlKiA9IDApOwotICAgIHZvaWQgdmlzaXRBY3RpdmVET01O
b2RlcyhET01XcmFwcGVyTWFwPE5vZGU+OjpWaXNpdG9yKik7Ci0KKyAgICBET01XcmFwcGVyTWFw
PE5vZGU+JiBnZXRET01Ob2RlTWFwKHY4OjpJc29sYXRlKiA9IDApOworICAgIERPTVdyYXBwZXJN
YXA8Tm9kZT4mIGdldEFjdGl2ZURPTU5vZGVNYXAodjg6Oklzb2xhdGUqID0gMCk7CisgICAgdm9p
ZCB2aXNpdEFjdGl2ZURPTU5vZGVzKERPTVdyYXBwZXJWaXNpdG9yPE5vZGU+Kik7CiAKICAgICBj
bGFzcyBOb2RlV3JhcHBlclZpc2l0b3IgewogICAgIHB1YmxpYzoKQEAgLTE3MywxMSArNzAsMTEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgLy8gQSBtYXAgZnJvbSBhIERPTSBvYmplY3Qg
KG5vbi1ub2RlKSB0byBpdHMgSlMgd3JhcHBlci4gVGhpcyBtYXAgZG9lcyBub3QgY29udGFpbiB0
aGUgRE9NIG9iamVjdHMgd2hpY2ggY2FuIGhhdmUgcGVuZGluZyBhY3Rpdml0eSAoYWN0aXZlIGRv
bSBvYmplY3RzKS4KICAgICBET01XcmFwcGVyTWFwPHZvaWQ+JiBnZXRET01PYmplY3RNYXAodjg6
Oklzb2xhdGUqID0gMCk7Ci0gICAgdm9pZCB2aXNpdERPTU9iamVjdHMoRE9NV3JhcHBlck1hcDx2
b2lkPjo6VmlzaXRvciopOworICAgIHZvaWQgdmlzaXRET01PYmplY3RzKERPTVdyYXBwZXJWaXNp
dG9yPHZvaWQ+Kik7CiAKICAgICAvLyBBIG1hcCBmcm9tIGEgRE9NIG9iamVjdCB0byBpdHMgSlMg
d3JhcHBlciBmb3IgRE9NIG9iamVjdHMgd2hpY2ggY2FuIGhhdmUgcGVuZGluZyBhY3Rpdml0eS4K
ICAgICBET01XcmFwcGVyTWFwPHZvaWQ+JiBnZXRBY3RpdmVET01PYmplY3RNYXAodjg6Oklzb2xh
dGUqID0gMCk7Ci0gICAgdm9pZCB2aXNpdEFjdGl2ZURPTU9iamVjdHMoRE9NV3JhcHBlck1hcDx2
b2lkPjo6VmlzaXRvciopOworICAgIHZvaWQgdmlzaXRBY3RpdmVET01PYmplY3RzKERPTVdyYXBw
ZXJWaXNpdG9yPHZvaWQ+Kik7CiAKICAgICAvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgdG8gcmVt
b3ZlIGFsbCBET00gb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgdGhyZWFkIHdo
ZW4gaXQgaXMgdGVhcmluZyBkb3duLgogICAgIHZvaWQgcmVtb3ZlQWxsRE9NT2JqZWN0cygpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKaW5kZXggMTcyODM1
ODE4MzlhMTU1NzhiY2ZhNzk0ZTk2NWZiODk4MTY4NDYyZi4uMzJkMDRmNzhiYTMyZTcyM2UyZTc4
ZmJmOTE2N2YyY2VjNTE5ZmZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XcmFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TVdyYXBwZXIuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgVjhET01XcmFwcGVyOjpzZXROYW1l
ZEhpZGRlblJlZmVyZW5jZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHBhcmVudCwgY29uc3QKIFdy
YXBwZXJUeXBlSW5mbyogVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IG9iamVjdCkKIHsKICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdy
YXBwZXIob2JqZWN0KSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdyYXBwZXJUeXBlSW5mbyo+
KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlclR5cGVJbmRl
eCkpOworICAgIHJldHVybiB0b1dyYXBwZXJUeXBlSW5mbyhvYmplY3QpOwogfQogCiBQYXNzUmVm
UHRyPE5vZGVGaWx0ZXI+IFY4RE9NV3JhcHBlcjo6d3JhcE5hdGl2ZU5vZGVGaWx0ZXIodjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGZpbHRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01X
cmFwcGVyLmgKaW5kZXggZmFkODJjOTVkYjVkNDk0M2M3MWY0NDNjMWMxNDdkNWUzNmM5ZjgzZC4u
ZjExODU5YjA2ZjZjY2UwZGU5ZmY3MGI3Y2Q1NGRhMWJiN2I0ZWY0YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUg
VjhET01XcmFwcGVyX2gKIAogI2luY2x1ZGUgIkRPTURhdGFTdG9yZS5oIgorI2luY2x1ZGUgIkRP
TVdyYXBwZXJXb3JsZC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgog
I2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKQEAgLTEyMyw3ICsxMjQsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPndyYXBwZXIoKTsKIAogICAgICAg
ICAgICAgRE9NRGF0YVN0b3JlKiBzdG9yZSA9IGNvbnRleHQtPndvcmxkKCktPmRvbURhdGFTdG9y
ZSgpOwotICAgICAgICAgICAgRE9NTm9kZU1hcHBpbmcmIGRvbU5vZGVNYXAgPSBub2RlLT5pc0Fj
dGl2ZU5vZGUoKSA/IHN0b3JlLT5hY3RpdmVEb21Ob2RlTWFwKCkgOiBzdG9yZS0+ZG9tTm9kZU1h
cCgpOworICAgICAgICAgICAgRE9NV3JhcHBlck1hcDxOb2RlPiYgZG9tTm9kZU1hcCA9IG5vZGUt
PmlzQWN0aXZlTm9kZSgpID8gc3RvcmUtPmFjdGl2ZURvbU5vZGVNYXAoKSA6IHN0b3JlLT5kb21O
b2RlTWFwKCk7CiAgICAgICAgICAgICByZXR1cm4gZG9tTm9kZU1hcC5nZXQobm9kZSk7CiAgICAg
ICAgIH0KICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhH
Q0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xs
ZXIuY3BwCmluZGV4IDMzNzk5ODcxMTk2MWViMzM1ZmMwNGJjNzBhMzAyYmQxZjk3ZjM2ODcuLjI1
MWFhOGUzY2EwOWU4MTA0NWRjYWViYmUwYjhiNjM4OTBiZDAzZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNp
bmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJJbnRydXNpdmVET01XcmFwcGVy
TWFwLmgiCiAjaW5jbHVkZSAiTWVtb3J5VXNhZ2VTdXBwb3J0LmgiCiAjaW5jbHVkZSAiTWVzc2Fn
ZVBvcnQuaCIKICNpbmNsdWRlICJSZXRhaW5lZERPTUluZm8uaCIKQEAgLTY2LDIwICs2Nyw4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmbmRlZiBOREVCVUcKLQotY2xhc3MgRW5zdXJl
V2Vha0RPTU5vZGVWaXNpdG9yIDogcHVibGljIERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3Ig
ewotcHVibGljOgotICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSosIE5vZGUq
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKHdyYXBwZXIuSXNXZWFrKCkpOwotICAgIH0KLX07Ci0KLSNlbmRpZiAvLyBOREVCVUcKLQog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNzIEFjdGl2ZURPTU9iamVjdFByb2xvZ3VlVmlzaXRv
ciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPFQ+OjpWaXNpdG9yIHsKK2NsYXNzIEFjdGl2ZURPTU9i
amVjdFByb2xvZ3VlVmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyVmlzaXRvcjxUPiB7CiBwdWJs
aWM6CiAgICAgZXhwbGljaXQgQWN0aXZlRE9NT2JqZWN0UHJvbG9ndWVWaXNpdG9yKFZlY3Rvcjx2
ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4qIGxpdmVPYmplY3RzKQogICAgICAgICA6IG1fbGl2
ZU9iamVjdHMobGl2ZU9iamVjdHMpCkBAIC0xMDksNyArOTgsNyBAQCBwcml2YXRlOgogICAgIFZl
Y3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4qIG1fbGl2ZU9iamVjdHM7CiB9OwogCi1j
bGFzcyBPYmplY3RWaXNpdG9yIDogcHVibGljIERPTVdyYXBwZXJNYXA8dm9pZD46OlZpc2l0b3Ig
eworY2xhc3MgT2JqZWN0VmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyVmlzaXRvcjx2b2lkPiB7
CiBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiBzdG9yZSwg
dm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogICAgIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAKaW5kZXggYTViM2QxZGVi
M2VhODk1NDQyZmI4MWRjMDE3NmYwMzQxYmQ5NWY1OC4uNGU1MjgzYjE4NTIxZWFjOTJmMTFhZWE5
Yjg0NjI5YWQzMTZjNzk0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhOUE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhOUE9iamVj
dC5jcHAKQEAgLTE2MSwyNSArMTYxLDQ2IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBucE9iamVj
dEludm9rZURlZmF1bHRIYW5kbGVyKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB9CiAKIAot
c3RhdGljIHZvaWQgd2Vha1RlbXBsYXRlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
Piwgdm9pZCogcGFyYW1ldGVyKTsKLQotLy8gTlBJZGVudGlmaWVyIGlzIFByaXZhdGVJZGVudGlm
aWVyKi4KLXN0YXRpYyBXZWFrUmVmZXJlbmNlTWFwPFByaXZhdGVJZGVudGlmaWVyLCB2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4mIHN0YXRpY1RlbXBsYXRlTWFwKCkKK2NsYXNzIFY4TlBUZW1wbGF0ZU1h
cAogewotICAgIHR5cGVkZWYgV2Vha1JlZmVyZW5jZU1hcDxQcml2YXRlSWRlbnRpZmllciwgdjg6
OkZ1bmN0aW9uVGVtcGxhdGU+IE1hcFR5cGU7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChNYXBU
eXBlLCB0ZW1wbGF0ZU1hcCwgKCZ3ZWFrVGVtcGxhdGVDYWxsYmFjaykpOwotICAgIHJldHVybiB0
ZW1wbGF0ZU1hcDsKLX0KK3B1YmxpYzoKKyAgICAvLyBOUElkZW50aWZpZXIgaXMgUHJpdmF0ZUlk
ZW50aWZpZXIqLgorICAgIHR5cGVkZWYgSGFzaE1hcDxQcml2YXRlSWRlbnRpZmllciosIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiA+IE1hcFR5cGU7CiAKLXN0YXRpYyB2b2lk
IHdlYWtUZW1wbGF0ZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2
b2lkKiBwYXJhbWV0ZXIpCi17Ci0gICAgUHJpdmF0ZUlkZW50aWZpZXIqIGlkZW50aWZpZXIgPSBz
dGF0aWNfY2FzdDxQcml2YXRlSWRlbnRpZmllcio+KHBhcmFtZXRlcik7Ci0gICAgQVNTRVJUKGlk
ZW50aWZpZXIpOwotICAgIEFTU0VSVChzdGF0aWNUZW1wbGF0ZU1hcCgpLmNvbnRhaW5zKGlkZW50
aWZpZXIpKTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZ2V0KFBy
aXZhdGVJZGVudGlmaWVyKiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAuZ2V0KGtl
eSk7CisgICAgfQogCi0gICAgc3RhdGljVGVtcGxhdGVNYXAoKS5mb3JnZXQoaWRlbnRpZmllcik7
Ci19CisgICAgdm9pZCBzZXQoUHJpdmF0ZUlkZW50aWZpZXIqIGtleSwgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHdyYXBwZXIpCisgICAgeworICAgICAgICBBU1NFUlQoIW1f
bWFwLmNvbnRhaW5zKGtleSkpOworICAgICAgICBtX21hcC5zZXQoa2V5LCB3cmFwcGVyKTsKKyAg
ICAgICAgd3JhcHBlci5NYWtlV2VhayhrZXksIHdlYWtDYWxsYmFjayk7CisgICAgfQogCisgICAg
c3RhdGljIFY4TlBUZW1wbGF0ZU1hcCYgc2hhcmVkSW5zdGFuY2UoKQorICAgIHsKKyAgICAgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChWOE5QVGVtcGxhdGVNYXAsIG1hcCwgKCkpOworICAgICAgICBy
ZXR1cm4gbWFwOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCB3ZWFrQ2FsbGJh
Y2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3QsIHZvaWQqIGNvbnRleHQpCisgICAg
eworICAgICAgICBzaGFyZWRJbnN0YW5jZSgpLmRpc3Bvc2Uoc3RhdGljX2Nhc3Q8UHJpdmF0ZUlk
ZW50aWZpZXIqPihjb250ZXh0KSk7CisgICAgfQorCisgICAgdm9pZCBkaXNwb3NlKFByaXZhdGVJ
ZGVudGlmaWVyKiBrZXkpCisgICAgeworICAgICAgICBNYXBUeXBlOjppdGVyYXRvciBpdCA9IG1f
bWFwLmZpbmQoa2V5KTsKKyAgICAgICAgQVNTRVJUKGl0ICE9IG1fbWFwLmVuZCgpKTsKKyAgICAg
ICAgaXQtPnZhbHVlLkRpc3Bvc2UoKTsKKyAgICAgICAgbV9tYXAucmVtb3ZlKGl0KTsKKyAgICB9
CisKKyAgICBNYXBUeXBlIG1fbWFwOworfTsKIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBucE9iamVjdEdldFByb3BlcnR5KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBzZWxmLCBOUElkZW50
aWZpZXIgaWRlbnRpZmllciwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4ga2V5LCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKIHsKQEAgLTIxNiwxNCArMjM3LDE0IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gbnBPYmplY3RHZXRQcm9wZXJ0eSh2ODo6TG9jYWw8djg6Ok9iamVjdD4gc2VsZiwgTlBJ
CiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihSZWZlcmVuY2VFcnJvciwgIk5QT2JqZWN0
IGRlbGV0ZWQiLCBpc29sYXRlKTsKIAogICAgICAgICBQcml2YXRlSWRlbnRpZmllciogaWQgPSBz
dGF0aWNfY2FzdDxQcml2YXRlSWRlbnRpZmllcio+KGlkZW50aWZpZXIpOwotICAgICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZnVuY3Rpb25UZW1wbGF0ZSA9IHN0YXRp
Y1RlbXBsYXRlTWFwKCkuZ2V0KGlkKTsKKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IGZ1bmN0aW9uVGVtcGxhdGUgPSBWOE5QVGVtcGxhdGVNYXA6OnNoYXJlZElu
c3RhbmNlKCkuZ2V0KGlkKTsKICAgICAgICAgLy8gQ2FjaGUgdGVtcGxhdGVzIHVzaW5nIGlkZW50
aWZpZXIgYXMgdGhlIGtleS4KICAgICAgICAgaWYgKGZ1bmN0aW9uVGVtcGxhdGUuSXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgdGVtcGxhdGUuCiAgICAgICAgICAgICB2
ODo6TG9jYWw8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXAgPSB2ODo6RnVuY3Rpb25UZW1wbGF0
ZTo6TmV3KCk7CiAgICAgICAgICAgICB0ZW1wLT5TZXRDYWxsSGFuZGxlcihucE9iamVjdE1ldGhv
ZEhhbmRsZXIsIGtleSk7CiAgICAgICAgICAgICBmdW5jdGlvblRlbXBsYXRlID0gdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcodGVtcCk7Ci0gICAgICAgICAgICBzdGF0
aWNUZW1wbGF0ZU1hcCgpLnNldChpZCwgZnVuY3Rpb25UZW1wbGF0ZSk7CisgICAgICAgICAgICBW
OE5QVGVtcGxhdGVNYXA6OnNoYXJlZEluc3RhbmNlKCkuc2V0KGlkLCBmdW5jdGlvblRlbXBsYXRl
KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEZ1bmN0aW9uVGVtcGxhdGUgY2FjaGVzIGZ1bmN0
aW9uIGZvciBlYWNoIGNvbnRleHQuCkBAIC0zNTUsMjkgKzM3NiwzMiBAQCB2ODo6SGFuZGxlPHY4
OjpBcnJheT4gbnBPYmplY3RJbmRleGVkUHJvcGVydHlFbnVtZXJhdG9yKGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mCiAgICAgcmV0dXJuIG5wT2JqZWN0UHJvcGVydHlFbnVtZXJhdG9yKGluZm8sIGZh
bHNlKTsKIH0KIAotc3RhdGljIHZvaWQgd2Vha05QT2JqZWN0Q2FsbGJhY2sodjg6OlBlcnNpc3Rl
bnQ8djg6OlZhbHVlPiwgdm9pZCogcGFyYW1ldGVyKTsKK3N0YXRpYyB2b2lkIHdlYWtOUE9iamVj
dENhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4sIHZvaWQqKTsKIAotc3RhdGljIERP
TVdyYXBwZXJNYXA8TlBPYmplY3Q+JiBzdGF0aWNOUE9iamVjdE1hcCgpCitzdGF0aWMgRE9NV3Jh
cHBlckhhc2hNYXA8TlBPYmplY3Q+JiBzdGF0aWNOUE9iamVjdE1hcCgpCiB7Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChET01XcmFwcGVyTWFwPE5QT2JqZWN0PiwgbnBPYmplY3RNYXAsICgmd2Vh
a05QT2JqZWN0Q2FsbGJhY2spKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKERPTVdyYXBwZXJI
YXNoTWFwPE5QT2JqZWN0PiwgbnBPYmplY3RNYXAsICgmd2Vha05QT2JqZWN0Q2FsbGJhY2spKTsK
ICAgICByZXR1cm4gbnBPYmplY3RNYXA7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYWtOUE9iamVjdENh
bGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBwYXJhbWV0ZXIp
CitzdGF0aWMgdm9pZCB3ZWFrTlBPYmplY3RDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFs
dWU+IHZhbHVlLCB2b2lkKikKIHsKLSAgICBOUE9iamVjdCogbnBPYmplY3QgPSBzdGF0aWNfY2Fz
dDxOUE9iamVjdCo+KHBhcmFtZXRlcik7Ci0gICAgQVNTRVJUKHN0YXRpY05QT2JqZWN0TWFwKCku
Y29udGFpbnMobnBPYmplY3QpKTsKKyAgICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkpOworICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSB2ODo6UGVyc2lzdGVudDx2ODo6
T2JqZWN0Pjo6Q2FzdCh2YWx1ZSk7CisgICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8TlBPYmplY3QqPih0b05hdGl2ZSh3cmFwcGVyKSk7CisKICAgICBBU1NFUlQobnBPYmplY3Qp
OworICAgIEFTU0VSVChzdGF0aWNOUE9iamVjdE1hcCgpLmdldChucE9iamVjdCkgPT0gd3JhcHBl
cik7CiAKLSAgICAvLyBNdXN0IHJlbW92ZSBmcm9tIG91ciBtYXAgYmVmb3JlIGNhbGxpbmcgX05Q
Tl9SZWxlYXNlT2JqZWN0KCkuIF9OUE5fUmVsZWFzZU9iamVjdCBjYW4gY2FsbCBGb3JnZXRWOE9i
amVjdEZvck5QT2JqZWN0LCB3aGljaAotICAgIC8vIHVzZXMgdGhlIHRhYmxlIGFzIHdlbGwuCi0g
ICAgc3RhdGljTlBPYmplY3RNYXAoKS5mb3JnZXQobnBPYmplY3QpOworICAgIC8vIE11c3QgcmVt
b3ZlIGZyb20gb3VyIG1hcCBiZWZvcmUgY2FsbGluZyBfTlBOX1JlbGVhc2VPYmplY3QoKS4gX05Q
Tl9SZWxlYXNlT2JqZWN0IGNhbgorICAgIC8vIGNhbGwgZm9yZ2V0VjhPYmplY3RGb3JOUE9iamVj
dCwgd2hpY2ggdXNlcyB0aGUgdGFibGUgYXMgd2VsbC4KKyAgICBzdGF0aWNOUE9iamVjdE1hcCgp
LnJlbW92ZShucE9iamVjdCwgd3JhcHBlcik7CisgICAgd3JhcHBlci5EaXNwb3NlKCk7CiAKICAg
ICBpZiAoX05QTl9Jc0FsaXZlKG5wT2JqZWN0KSkKICAgICAgICAgX05QTl9SZWxlYXNlT2JqZWN0
KG5wT2JqZWN0KTsKIH0KIAotCiB2ODo6TG9jYWw8djg6Ok9iamVjdD4gY3JlYXRlVjhPYmplY3RG
b3JOUE9iamVjdChOUE9iamVjdCogb2JqZWN0LCBOUE9iamVjdCogcm9vdCkKIHsKICAgICBzdGF0
aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IG5wT2JqZWN0RGVzYzsKQEAg
LTM5MSw4ICs0MTUsOSBAQCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gY3JlYXRlVjhPYmplY3RGb3JO
UE9iamVjdChOUE9iamVjdCogb2JqZWN0LCBOUE9iamVjdCogcm9vdAogICAgIH0KIAogICAgIC8v
IElmIHdlJ3ZlIGFscmVhZHkgd3JhcHBlZCB0aGlzIG9iamVjdCwganVzdCByZXR1cm4gaXQuCi0g
ICAgaWYgKHN0YXRpY05QT2JqZWN0TWFwKCkuY29udGFpbnMob2JqZWN0KSkKLSAgICAgICAgcmV0
dXJuIHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6TmV3KHN0YXRpY05QT2JqZWN0TWFwKCkuZ2V0KG9i
amVjdCkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IHN0YXRpY05QT2Jq
ZWN0TWFwKCkuZ2V0KG9iamVjdCk7CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXIpOwogCiAgICAgLy8g
RklYTUU6IHdlIHNob3VsZCBjcmVhdGUgYSBXcmFwcGVyIHR5cGUgYXMgYSBzdWJjbGFzcyBvZiBK
U09iamVjdC4gSXQgaGFzIHR3byBpbnRlcm5hbCBmaWVsZHMsIGZpZWxkIDAgaXMgdGhlIHdyYXBw
ZWQKICAgICAvLyBwb2ludGVyLCBhbmQgZmllbGQgMSBpcyB0aGUgdHlwZS4gVGhlcmUgc2hvdWxk
IGJlIGFuIGFwaSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdW51c2VkIHR5cGUgaWQuIFRoZSBzYW1l
IFdyYXBwZXIgdHlwZQpAQCAtNDI4LDExICs0NTMsMTIgQEAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
IGNyZWF0ZVY4T2JqZWN0Rm9yTlBPYmplY3QoTlBPYmplY3QqIG9iamVjdCwgTlBPYmplY3QqIHJv
b3QKIAogdm9pZCBmb3JnZXRWOE9iamVjdEZvck5QT2JqZWN0KE5QT2JqZWN0KiBvYmplY3QpCiB7
Ci0gICAgaWYgKHN0YXRpY05QT2JqZWN0TWFwKCkuY29udGFpbnMob2JqZWN0KSkgeworICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBzdGF0aWNOUE9iamVjdE1hcCgpLmdl
dChvYmplY3QpOworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpIHsKICAgICAgICAgdjg6Okhh
bmRsZVNjb3BlIHNjb3BlOwotICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBoYW5k
bGUoc3RhdGljTlBPYmplY3RNYXAoKS5nZXQob2JqZWN0KSk7Ci0gICAgICAgIFY4RE9NV3JhcHBl
cjo6c2V0RE9NV3JhcHBlcihoYW5kbGUsIG5wT2JqZWN0VHlwZUluZm8oKSwgMCk7Ci0gICAgICAg
IHN0YXRpY05QT2JqZWN0TWFwKCkuZm9yZ2V0KG9iamVjdCk7CisgICAgICAgIFY4RE9NV3JhcHBl
cjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyLCBucE9iamVjdFR5cGVJbmZvKCksIDApOworICAgICAg
ICBzdGF0aWNOUE9iamVjdE1hcCgpLnJlbW92ZShvYmplY3QsIHdyYXBwZXIpOworICAgICAgICB3
cmFwcGVyLkRpc3Bvc2UoKTsKICAgICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KG9iamVjdCk7CiAg
ICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJD
b250ZXh0RXZlbnRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdv
cmtlckNvbnRleHRFdmVudExpc3RlbmVyLmNwcAppbmRleCBkOWJiOTU1NDU0NDQ3ZDhmYjcwNTg5
NTU5YTNhMDU5MDE3MWNjYzJlLi43NGFhMDNjNTcwMzMzZjc5ZWJkYjhiNDZmMWRjMWZiZDUxYmNl
ZTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRl
eHRFdmVudExpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdv
cmtlckNvbnRleHRFdmVudExpc3RlbmVyLmNwcApAQCAtMTEwLDkgKzExMCw2IEBAIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXI6OmNhbGxMaXN0ZW5lckZ1
bmN0aW9uKFNjcmlwdEV4CiAgICAgVjhSZWN1cnNpb25TY29wZSByZWN1cnNpb25TY29wZShjb250
ZXh0KTsKICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiByZXN1bHQgPSBoYW5kbGVyRnVuY3Rpb24t
PkNhbGwocmVjZWl2ZXIsIDEsIHBhcmFtZXRlcnMpOwogCi0gICAgaWYgKFdvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eSogcHJveHkgPSB3b3JrZXJQcm94eShjb250ZXh0KSkKLSAgICAgICAgcHJv
eHktPnRyYWNrRXZlbnQoZXZlbnQpOwotCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRDYWxsRnVuY3Rpb24oY29va2llKTsKIAogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHku
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5LmNwcAppbmRleCA5MzU0YmIzYjJlYTlkMmNhMjcwMDEwYzc0YzRhYzE0MjM4YWRjOWRlLi40
NDVkNGJlY2Y0NDhiZDJhOGQ4ODA4NjdmOTRhMTdhMDQxM2UwN2E1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eS5jcHAKQEAgLTk5LDE0ICs5OSw2IEBAIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6fldv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSgpCiAKIHZvaWQgV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5OjpkaXNwb3NlKCkKIHsKLSAgICAvLyBEZXRhY2ggYWxsIGV2ZW50cyBmcm9tIHRoZWly
IEpTIHdyYXBwZXJzLgotICAgIGZvciAoc2l6ZV90IGV2ZW50SW5kZXggPSAwOyBldmVudEluZGV4
IDwgbV9ldmVudHMuc2l6ZSgpOyArK2V2ZW50SW5kZXgpIHsKLSAgICAgICAgRXZlbnQqIGV2ZW50
ID0gbV9ldmVudHNbZXZlbnRJbmRleF07Ci0gICAgICAgIGlmIChmb3JnZXRWOEV2ZW50T2JqZWN0
KGV2ZW50KSkKLSAgICAgICAgICBldmVudC0+ZGVyZWYoKTsKLSAgICB9Ci0gICAgbV9ldmVudHMu
Y2xlYXIoKTsKLQogICAgIG1fcGVyQ29udGV4dERhdGEuY2xlYXIoKTsKIAogICAgIC8vIERpc3Bv
c2UgdGhlIGNvbnRleHQuCkBAIC0xOTUsMTUgKzE4Nyw2IEBAIGJvb2wgV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5Ojppbml0aWFsaXplSWZOZWVkZWQoKQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Zm9yZ2V0VjhFdmVudE9iamVjdChF
dmVudCogZXZlbnQpCi17Ci0gICAgaWYgKGdldERPTU9iamVjdE1hcCgpLmNvbnRhaW5zKGV2ZW50
KSkgewotICAgICAgICBnZXRET01PYmplY3RNYXAoKS5mb3JnZXQoZXZlbnQpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBTY3JpcHRWYWx1ZSBX
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0
LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0
UG9zaXRpb24sIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSogc3RhdGUpCiB7CiAgICAgVjhH
Q0NvbnRyb2xsZXI6OmNoZWNrTWVtb3J5VXNhZ2UoKTsKQEAgLTI1OCwxMSArMjQxLDYgQEAgdm9p
ZCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnNldEV2YWxBbGxvd2VkKGJvb2wgZW5hYmxl
LCBjb25zdCBTdHJpbmcmIGVycm8KICAgICBtX2Rpc2FibGVFdmFsUGVuZGluZyA9IGVuYWJsZSA/
IFN0cmluZygpIDogZXJyb3JNZXNzYWdlOwogfQogCi12b2lkIFdvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eTo6dHJhY2tFdmVudChFdmVudCogZXZlbnQpCi17Ci0gICAgbV9ldmVudHMuYXBwZW5k
KGV2ZW50KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KFdPUktFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCmluZGV4IDRjMDI0ZDAyZGE1MDAwM2ZjMzgyNzcyNzU3
OGI5ZTgwMGEzMjhjNjkuLmI4YTZkZTc0NzhmZGFmNTM0N2Y5ZDNlZGNiOGYxMmE4MDRiMDkxYzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRl
eHRFeGVjdXRpb25Qcm94eS5oCkBAIC02MywxMSArNjMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eShXb3JrZXJDb250ZXh0Kik7CiAg
ICAgICAgIH5Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkoKTsKIAotICAgICAgICAvLyBUcmFj
ayB0aGUgZXZlbnQgc28gdGhhdCB3ZSBjYW4gZGV0YWNoIGl0IGZyb20gdGhlIEpTIHdyYXBwZXIg
d2hlbiBhIHdvcmtlcgotICAgICAgICAvLyB0ZXJtaW5hdGVzLiBUaGlzIGlzIG5lZWRlZCBiZWNh
dXNlIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBkaXNwb3NlIHRoZXNlCi0gICAgICAgIC8vIGV2ZW50
cyBhbmQgcmVsZWFzZXMgcmVmZXJlbmNlcyB0byB0aGVpciBldmVudCB0YXJnZXRzOiBXb3JrZXJD
b250ZXh0LgotICAgICAgICB2b2lkIHRyYWNrRXZlbnQoRXZlbnQqKTsKLQogICAgICAgICAvLyBB
bG93IHVzZSBvZiBldmFsKCkgYW5kIGlzIGVxdWl2YWxlbnRzIGluIHNjcmlwdHMuCiAgICAgICAg
IHZvaWQgc2V0RXZhbEFsbG93ZWQoYm9vbCBlbmFibGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlKTsKIApAQCAtODIsOCArNzcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJv
b2wgaW5pdGlhbGl6ZUlmTmVlZGVkKCk7CiAgICAgICAgIHZvaWQgZGlzcG9zZSgpOwogCi0gICAg
ICAgIHN0YXRpYyBib29sIGZvcmdldFY4RXZlbnRPYmplY3QoRXZlbnQqKTsKLQogICAgICAgICBz
dGF0aWMgY29uc3QgaW50IGtXb3JrZXJNYXhTdGFja1NpemUgPSA1MDAgKiAxMDI0OwogCiAgICAg
ICAgIFdvcmtlckNvbnRleHQqIG1fd29ya2VyQ29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1dyYXBwZXJUeXBlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmgKaW5kZXggYTRiZDQ5OThkZGQ2ZTYxNGZmN2YwMDVh
NWU3MTM4MDdjNzQ1MjQxYi4uM2EyZGFkNWU3ZmQxMzcwNGNkN2MyODZhODA3MjY2YzY5Y2EwNzlh
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZv
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmgKQEAg
LTExNiw2ICsxMTYsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBXcmFw
cGVyVHlwZUluZm8qIHBhcmVudENsYXNzOwogICAgICAgICBjb25zdCBXcmFwcGVyVHlwZVByb3Rv
dHlwZSB3cmFwcGVyVHlwZVByb3RvdHlwZTsKICAgICB9OworCisgICAgaW5saW5lIHZvaWQqIHRv
TmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG9iamVjdC0+SW50ZXJuYWxGaWVsZENvdW50KCkgPj0gdjhET01XcmFwcGVyT2JqZWN0SW5k
ZXgpOworICAgICAgICByZXR1cm4gb2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQo
djhET01XcmFwcGVyT2JqZWN0SW5kZXgpOworICAgIH0KKworICAgIGlubGluZSBXcmFwcGVyVHlw
ZUluZm8qIHRvV3JhcHBlclR5cGVJbmZvKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG9iamVjdC0+SW50ZXJuYWxGaWVsZENvdW50KCkgPj0gdjhE
T01XcmFwcGVyVHlwZUluZGV4KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdyYXBwZXJU
eXBlSW5mbyo+KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBl
clR5cGVJbmRleCkpOworICAgIH0KKwogfQogCiAjZW5kaWYgLy8gV3JhcHBlclR5cGVJbmZvX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170493</attachid>
            <date>2012-10-24 15:46:32 -0700</date>
            <delta_ts>2012-10-24 20:07:46 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-100175-20121024154506.patch</filename>
            <type>text/plain</type>
            <size>48614</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyNDEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODljZmNhOTZmNzExZDdk
YTI2MzNhMWFlYzVmNTk4ZWRkNzljMGU3Zi4uMWE2ZmE3YjBhZGFkYmYxOWQzYjUyNmRjZWY3NmRh
YWY2MDkyMDk2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE0MyBAQAogMjAxMi0xMC0yNCAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCisgICAgICAgIFtWOF0gQWJzdHJhY3RXZWFr
UmVmZXJlbmNlTWFwIGlzIHVubmVjZXNzYXJpbHkgZ2VuZXJhbCBhbmQgY29tcGxleAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgQmVmb3JlIHRoaXMgcGF0Y2gs
IEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcCBzZXJ2ZWQgdHdvIG1hc3RlcnM6CisKKyAgICAgICAg
MSkgRE9NIHdyYXBwZXJzCisgICAgICAgIDIpIE5QVjggZnVuY3Rpb24gdGVtcGxhdGVzCisKKyAg
ICAgICAgVGhlc2UgdHdvIHVzZXMgY2FzZXMgcHVzaGVkIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1h
cCB0byBiZSBtb3JlIGdlbmVyYWwKKyAgICAgICAgYW5kIGNvbXBsZXggdGhhdCBuZWVkZWQuIFRo
aXMgcGF0Y2ggc2VwYXJhdGVzIHRoZXNlIHR3byB1c2VzIGNhc2VzIGludG8KKyAgICAgICAgdHdv
IHNlcGFyYXRlIGNsYXNzZXMuIFY4TlBUZW1wbGF0ZU1hcCBpcyBhbGwgb2YgNDAgbGluZXMgb2Yg
Y29kZS4gSXQncworICAgICAgICBub3Qgd29ydGggY29tcGxpY2F0aW5nIHRoZSBET00gd3JhcHBl
ciBjb2RlIHBhdGggdG8gc2hhcmUgdGhhdCB0aW55CisgICAgICAgIGFtb3VudCBvZiBjb2RlLgor
CisgICAgICAgIFRoZSBvdGhlciB0aGluZyB0aGlzIHBhdGNoIGRvZXMgaXMgc3RvcmUgYSBwb2lu
dGVyIHRvIHRoZSBET00gd3JhcHBlcgorICAgICAgICBtYXAgYXMgdGhlIHdlYWsgY2FsbGJhY2sg
Y29udGV4dCBvYmplY3QuIFRoYXQgbWVhbnMgd2Ugbm8gbG9uZ2VyIG5lZWQKKyAgICAgICAgdG8g
c2VhcmNoIHRocm91Z2ggYWxsIHRoZSB3cmFwcGVyIG1hcHMgaW4gb3JkZXIgdG8gZmluZCB0aGUg
bWFwIHRoYXQKKyAgICAgICAgY29udGFpbnMgdGhpcyBwYXJ0aWN1bGFyIERPTSB3cmFwcGVyLgor
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGEu
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGEuaDoKKyAgICAgICAgKERPTURhdGEp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHA6CisgICAgICAgICAgICAt
IERlbGV0ZSBhbGwgdGhlc2UgY29tcGxpY2F0ZWQgd2VhayBjYWxsYmFjayBmdW5jdGlvbnMuIFRo
ZSB3ZWFrCisgICAgICAgICAgICAgIGNhbGxiYWNrIGZ1bmN0aW9ucyBhcmUgbm93IGFuIG9yZGVy
IG9mIG1hZ25pdHVkZSBzaW1wbGVyIGFuZAorICAgICAgICAgICAgICBkZWNsYXJlZCBhcyBwcml2
YXRlIG1lbWJlciBmdW5jdGlvbnMgb24gdGhlIHdyYXBwZXIgbWFwLgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L0RPTURhdGFTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjpk
b21Ob2RlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6YWN0aXZlRG9tTm9k
ZU1hcCk6CisgICAgICAgIChET01EYXRhU3RvcmUpOgorICAgICAgICAgICAgLSBXZSBub3cgaGF2
ZSBhIGNvbnNpc3RlbnQgdHlwZSB0byB1c2UgZm9yIGFsbCB0aGVzZSB3cmFwcGVyIG1hcHMuCisg
ICAgICAgICAgICAgIEJvdGggdGhlIGhhc2ggbWFwIGFuZCB0aGUgaW50cnVzaXZlIG1hcCBkZXJp
dmUgZnJvbQorICAgICAgICAgICAgICBET01XcmFwcGVyTWFwICh3aXRoIGEgc2luZ2xlIHRlbXBs
YXRlIHBhcmFtZXRlcikuCisgICAgICAgICogYmluZGluZ3MvdjgvRE9NV3JhcHBlck1hcC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRE9NV3JhcHBlclZpc2l0b3IpOgor
ICAgICAgICAgICAgLSBUaGUgdmlzaXRvciBpcyBubyBsb25nZXIgYW4gaW5uZXIgY2xhc3MuIEl0
J3MganVzdCBhIHRvcC1sZXZlbAorICAgICAgICAgICAgICBjbGFzcyB0aGF0IGRvZXMgdGhlIHNh
bWUgdGhpbmcuCisgICAgICAgIChET01XcmFwcGVyTWFwKToKKyAgICAgICAgICAgIC0gVGhlIGFi
c3RyYWN0IGludGVyZmFjZSBmb3IgRE9NV3JhcHBlck1hcCBoYXMgYWJvdXQgaGFsZiBhcyBtYW55
CisgICAgICAgICAgICAgIGZ1bmN0aW9ucyBhcyB0aGUgb2xkIEFic3RyYWN0V2Vha1JlZmVyZW5j
ZU1hcCBiZWNhdXNlIHRoZSB0d28gdXNlCisgICAgICAgICAgICAgIGNhc2VzIGFyZSBkaXNlbnRh
bmdsZWQuCisgICAgICAgIChXZWJDb3JlOjpET01XcmFwcGVyTWFwOjp+RE9NV3JhcHBlck1hcCk6
CisgICAgICAgIChET01XcmFwcGVySGFzaE1hcCk6CisgICAgICAgICAgICAtIFRoaXMgaXMgYSBj
b25jcmV0ZSBpbnN0YW5jZSBvZiBET01XcmFwcGVyTWFwIHRoYXQgdXNlcyBhIGhhc2ggbWFwLgor
ICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlckhhc2hNYXA6OkRPTVdyYXBwZXJIYXNoTWFwKToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJIYXNoTWFwOjpyZW1vdmUpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NV3JhcHBlckhhc2hNYXA6OmRlZmF1bHRXZWFrQ2FsbGJhY2spOgorICAgICAg
ICAgICAgLSBOb3RpY2UgdGhhdCB0aGUgY29udGV4dCBwYXJhbWV0ZXIgbm93IHBvaW50cyB0byB0
aGUgaGFzaG1hcAorICAgICAgICAgICAgICBpdHNlbGYgcmF0aGVyIHRoYW4gdG8gdGhlIG5hdGl2
ZSBvYmplY3QuIE5vdyB0aGF0IHdlIGRvbid0IG5lZWQKKyAgICAgICAgICAgICAgdG8gaGFuZGxl
IHRoZSBOUEFQSSBjYXNlLCB3ZSBjYW4gcmVjb3ZlciB0aGUgbmF0aXZlIG9iamVjdCBmcm9tCisg
ICAgICAgICAgICAgIHRoZSB3cmFwcGVyIHVzaW5nIHRvTmF0aXZlLiBUaGUgYXNzZXJ0IGluIHNl
dCgpIGVuc3VyZXMgdGhhdCB0aGlzCisgICAgICAgICAgICAgIGFsd2F5cyB3b3Jrcy4KKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9JbnRydXNpdmVET01XcmFwcGVyTWFwLmg6CisgICAgICAgICAgICAtIFRoZXNlIGNsYXNzZXMg
YXJlIG5vdyBzaW1wbGlmaWVkIGJlY2F1c2UgdGhleSBuZWVkIHRvIGltcGxlbWVudAorICAgICAg
ICAgICAgICBmZXdlciBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpET01Ob2RlV3JhcHBl
ck1hcDo6d2Vha0NhbGxiYWNrKToKKyAgICAgICAgICAgIC0gRm9yIHRoaXMgd2VhayBjYWxsYmFj
aywgd2Ugc3RpbGwgdXNlIHRoZSBuYXRpdmUgb2JqZWN0IGFzIHRoZQorICAgICAgICAgICAgICBj
b250ZXh0IHBhcmFtZXRlci4gV2UgY291bGQgYWxzbyByZWNvdmVyIHRoZSBuYXRpdmUgb2JqZWN0
IGZyb20KKyAgICAgICAgICAgICAgdGhlIHdyYXBwZXIsIHdoaWNoIG1lYW5zIHRoaXMgY29udGV4
dCBwYXJhbWV0ZXIgaXMgYXZhaWxhYmxlIHRvCisgICAgICAgICAgICAgIGRvIG90aGVyIHdvcmsu
CisgICAgICAgICogYmluZGluZ3MvdjgvU2NvcGVkRE9NRGF0YVN0b3JlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjb3BlZERPTURhdGFTdG9yZTo6U2NvcGVkRE9NRGF0YVN0b3JlKToKKyAgICAg
ICAgICAgIC0gVGhpcyBjb2RlIG5vIGxvbmdlciBuZWVkcyB0byBoYXZlIGtub3dsZWRnZSBvZiB3
aGljaCB3ZWFrCisgICAgICAgICAgICAgIGNhbGxiYWNrcyB0aGVzZSBvYmplY3RzIHVzZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjb3BlZERPTURhdGFTdG9yZTo6flNjb3BlZERPTURhdGFTdG9yZSk6
CisgICAgICAgICAgICAtIFdlIG5lZWQgdG8gY2xlYXIgdGhlIG1hcHMgYmVmb3JlIGRlbGV0aW5n
IHRoZW0gYmVjYXVzZSB0aGVyZSBhcmUKKyAgICAgICAgICAgICAgc3RpbGwgSmF2YVNjcmlwdCBv
YmplY3RzIHRoYXQgaGF2ZSByZWZlcmVuY2VzIHRvIHRoZSBtYXAgaW4gdGhlaXIKKyAgICAgICAg
ICAgICAgd2VhayBjYWxsYmFjayBwYXJhbWV0ZXIuIFByZXZpb3VzbHksIHdlIGhhbmRsZWQgdGhp
cyBjYXNlIGJlY2F1c2UKKyAgICAgICAgICAgICAgd2Ugd291bGQgc2VhcmNoIGFsbCB0aGUgd3Jh
cHBlciBtYXBzIGFuZCBmYWlsIHRvIGZpbmQgdGhlIHdyYXBwZXIuCisgICAgICAgICogYmluZGlu
Z3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0UHJvZmls
ZXI6OnZpc2l0RXh0ZXJuYWxBcnJheXMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1N0YXRpY0RP
TURhdGFTdG9yZS5jcHA6CisgICAgICAgICAgICAtIFRoaXMgY29kZSBubyBsb25nZXIgbmVlZHMg
dG8gaGF2ZSBrbm93bGVkZ2Ugb2Ygd2hpY2ggd2VhaworICAgICAgICAgICAgICBjYWxsYmFjayB0
aGVzZSBtYXBzIHVzZS4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUu
aDoKKyAgICAgICAgKFN0YXRpY0RPTURhdGFTdG9yZSk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhET01NYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RE9NTm9kZU1hcCk6CisgICAgICAg
IChXZWJDb3JlOjpnZXRBY3RpdmVET01Ob2RlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92
ZUFsbERPTU9iamVjdHMpOgorICAgICAgICAgICAgLSBSYXRoZXIgdGhhbiB1c2luZyBzb21lIGNv
bXBsaWNhdGVkIHZpc2l0b3IgcGF0dGVybiwgd2UgY2FuIG5vdworICAgICAgICAgICAgICBqdXN0
IGNhbGwgY2xlYXIoKSBkaXJlY3RseSBvbiB0aGUgbWFwcyB0byByZW1vdmUgYWxsIHRoZSBvYmpl
Y3RzLgorICAgICAgICAoV2ViQ29yZTo6dmlzaXRBY3RpdmVET01Ob2Rlcyk6CisgICAgICAgIChX
ZWJDb3JlOjp2aXNpdERPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaXRBY3RpdmVE
T01PYmplY3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTU1hcC5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICAgICAtIERlbGV0ZSB0aGUgb2xkIHZlcnNpb25zIG9mIHRoZXNl
IGNsYXNzZXMuCisgICAgICAgIChET01EYXRhU3RvcmVIYW5kbGUpOgorICAgICAgICAgICAgLSBT
dHlsZSBuaXQ6IG9uZS1hcmd1bWVudCBjb25zdHJ1Y3RvcnMgc2hvdWxkIGJlIG1hcmtlZCBleHBs
aWNpdC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSk6CisgICAgICAgICAgICAtIEkg
bW92ZWQgdGhpcyBsb2dpYyBpbnRvIFdyYXBwZXJUeXBlSW5mby5oIHRvIGF2b2lkIGEgY2lyY3Vs
YXIKKyAgICAgICAgICAgICAgaGVhZGVyIGRlcGVuZGVuY3kuCisgICAgICAgICogYmluZGluZ3Mv
djgvVjhET01XcmFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmdldENh
Y2hlZFdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgICAgIC0gRW5zdXJlV2Vha0RPTU5vZGVWaXNpdG9yIGlzIG5vIGxvbmdlciB1c2Vk
IChvciBuZWVkZWQgc2luY2Ugd2Ugbm8KKyAgICAgICAgICAgICAgbG9uZ2VyIGNsZWFyIHRoZSB3
ZWFrIGNhbGxiYWNrcyBpbiBWOEdDQ29udHJvbGxlcikuCisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhOUE9iamVjdC5jcHA6CisgICAgICAgIChWOE5QVGVtcGxhdGVNYXApOgorICAgICAgICAgICAg
LSBzdGF0aWNUZW1wbGF0ZU1hcCBpcyBubyBsb25nZXIgYW4gaW5zdGFuY2Ugb2YgV2Vha1JlZmVy
ZW5jZU1hcC4KKyAgICAgICAgICAgICAgSW5zdGVhZCwgdGhpcyBwYXRjaCBqdXN0IGltcGxlbWVu
dHMgdGhlIGZ1bmN0aW9uYWxpdHkgd2UgbmVlZAorICAgICAgICAgICAgICBoZXJlIGRpcmVjdGx5
LgorICAgICAgICAoV2ViQ29yZTo6VjhOUFRlbXBsYXRlTWFwOjpnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhOUFRlbXBsYXRlTWFwOjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6VjhOUFRlbXBs
YXRlTWFwOjpzaGFyZWRJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpWOE5QVGVtcGxhdGVN
YXA6OndlYWtDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOE5QVGVtcGxhdGVNYXA6OmRp
c3Bvc2UpOgorICAgICAgICAoV2ViQ29yZTo6bnBPYmplY3RHZXRQcm9wZXJ0eSk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXRpY05QT2JqZWN0TWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OndlYWtOUE9iamVjdENhbGxiYWNrKToKKyAgICAgICAgICAgIC0gRE9NV3Jh
cHBlck1hcCBubyBsb25nZXIgZXhwb3NlcyBhICJmb3JnZXQiIGZ1bmN0aW9uLiBJbnN0ZWFkLCB3
ZQorICAgICAgICAgICAgICBqdXN0IHVzZSB0aGUgbW9yZSBiYXNpYyAicmVtb3ZlIiBhbmQgIkRp
c3Bvc2UiIG9wZXJhdGlvbnMgdG8gZG8KKyAgICAgICAgICAgICAgdGhlIHNhbWUgdGhpbmcuIFRo
aXMgaXMgcG9zc2libGUgbm93IGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIGhhdmUKKyAgICAgICAgICAg
ICAgInJlbW92ZUlmUG9zc2libGUiIHRvIHN1cHBvcnQgc2VhcmNoaW5nIGFsbCB0aGUgd3JhcHBl
ciBtYXBzIGZvcgorICAgICAgICAgICAgICB0aGUgb25lIHRoYXQgaGFzIHRoZSByaWdodCB3cmFw
cGVyLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVjhPYmplY3RGb3JOUE9iamVjdCk6CisgICAg
ICAgICAgICAtIERPTVdyYXBwZXJNYXAgTm8gbG9uZ2VyIGhhcyBhICJjb250YWlucyIgZnVuY3Rp
b24uIEluc3RlYWQsIHdlCisgICAgICAgICAgICAgIHVzZSBnZXQsIHdoaWNoIGFjdHVhbGx5IG1h
a2VzIHRoaXMgY29kZSBtb3JlIGVmZmljaWVudCBiZWNhdXNlIHdlCisgICAgICAgICAgICAgIG9u
bHkgZG8gb25lIGhhc2ggbWFwIGxvb2t1cC4KKyAgICAgICAgKFdlYkNvcmU6OmZvcmdldFY4T2Jq
ZWN0Rm9yTlBPYmplY3QpOgorICAgICAgICAgICAgLSBUaGUgY2hhbmdlcyBoZXJlIGFyZSBhIGNv
bWJpbmF0aW9uIG9mIHRoZSB0d28gc29ydHMgb2YgY2hhbmdlcworICAgICAgICAgICAgICBhYm92
ZS4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaDoKKyAgICAgICAgKFdl
YkNvcmU6OnRvTmF0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvV3JhcHBlclR5cGVJbmZvKToK
KyAgICAgICAgICAgIC0gVGhlIHBhdGNoIG1vdmVzIHRoZXNlIGZ1bmN0aW9ucyBpbnRvIHRoaXMg
aGVhZGVyIHRvIGF2b2lkIGEKKyAgICAgICAgICAgICAgY2lyY3VsYXIgaGVhZGVyIGRlcGVuZGVu
Y3kuCisKKzIwMTItMTAtMjQgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwogICAg
ICAgICBbVjhdIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSBkb2Vzbid0IG5lZWQgdG8gdHJh
Y2sgZXZlbnRzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDAyOTUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDc3YTEwYzI1NWJkZjc1NjY4YWY4NDRmOGE1
Nzk5ZTRhYjdlN2I4MDkuLjU0ZDc3N2NlNmIwYTgyZWM5OThlN2NkNTY0MDJhYWFjY2Y2OTk4OTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTIyMzMsNiArMjIzMyw3IEBACiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTVRy
YW5zYWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NVHJhbnNhY3Rpb24u
aCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NV3JhcHBlck1hcC5oJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9ET01XcmFwcGVyV29ybGQuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvRGF0
ZUV4dGVuc2lvbi5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
RE9NRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcAppbmRl
eCBkYTZlYTViMWFlOGE5YTRiZWY3OWQyOTFiZjBjOGM2NGY5MGFhZmY5Li4xODY0MWVjOGRhYjll
MTY3MTgzY2U3Mjk2NzZhMmIwYzM1M2VmMmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ET01EYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9E
T01EYXRhLmNwcApAQCAtNTEsMTEgKzUxLDQgQEAgRE9NRGF0YVN0b3JlJiBET01EYXRhOjpnZXRD
dXJyZW50U3RvcmUodjg6Oklzb2xhdGUqIGlzb2xhdGUpCiAgICAgcmV0dXJuIGRlZmF1bHRTdG9y
ZTsKIH0KIAotdm9pZCBET01EYXRhOjpkZXJlZk9iamVjdChXcmFwcGVyVHlwZUluZm8qIHR5cGUs
IHZvaWQqIGRvbU9iamVjdCkKLXsKLSAgICB0eXBlLT5kZXJlZk9iamVjdChkb21PYmplY3QpOwot
fQotCi0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvRE9NRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9N
RGF0YS5oCmluZGV4IDdkZjlkZmRiYTllMjhhZTFlZDRmNTQzODA1NDYwNDZlNTYwOTZkZGIuLjM1
NTRmNzI2NzNhZTNiYmNjOThlZDkyNjkzMDNmYmY2NGMyNWQxZWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9ET01EYXRhLmgKQEAgLTQ2LDYyICs0NiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgLy8KICAgICBjbGFzcyBET01EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGhhbmRsZVdlYWtPYmplY3QoRE9N
RGF0YVN0b3JlOjpET01XcmFwcGVyTWFwVHlwZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4s
IFQqIGRvbU9iamVjdCk7Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAg
c3RhdGljIHZvaWQgcmVtb3ZlT2JqZWN0c0Zyb21XcmFwcGVyTWFwKERPTURhdGFTdG9yZSogc3Rv
cmUsIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDxULCB2ODo6T2JqZWN0PiYgZG9tTWFwKTsKLQot
CiAgICAgICAgIHN0YXRpYyBET01EYXRhU3RvcmUmIGdldEN1cnJlbnRTdG9yZSh2ODo6SXNvbGF0
ZSogPSAwKTsKICAgICBwcml2YXRlOgogICAgICAgICBET01EYXRhKCk7Ci0gICAgICAgIHN0YXRp
YyB2b2lkIGRlcmVmT2JqZWN0KFdyYXBwZXJUeXBlSW5mbyogdHlwZSwgdm9pZCogZG9tT2JqZWN0
KTsKLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAgICBjbGFzcyBXcmFwcGVy
TWFwT2JqZWN0UmVtb3ZlciA6IHB1YmxpYyBXZWFrUmVmZXJlbmNlTWFwPFQsIHY4OjpPYmplY3Q+
OjpWaXNpdG9yIHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgdmlydHVhbCB2b2lkIHZp
c2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqIHN0b3JlLCBUKiBkb21PYmplY3QsIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+IHY4T2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZSA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUo
djhPYmplY3QpOwotICAgICAgICAgICAgICAgIGRlcmVmT2JqZWN0KHR5cGUsIGRvbU9iamVjdCk7
Ci0gICAgICAgICAgICAgICAgdjhPYmplY3QuRGlzcG9zZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9OwogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgRE9N
RGF0YTo6aGFuZGxlV2Vha09iamVjdChET01EYXRhU3RvcmU6OkRPTVdyYXBwZXJNYXBUeXBlIG1h
cFR5cGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHY4T2JqZWN0LCBUKiBkb21PYmplY3Qp
Ci0gICAgewotICAgICAgICBXcmFwcGVyVHlwZUluZm8qIHR5cGUgPSBWOERPTVdyYXBwZXI6OmRv
bVdyYXBwZXJUeXBlKHY4T2JqZWN0KTsKLSAgICAgICAgRE9NRGF0YUxpc3QmIGxpc3QgPSBET01E
YXRhU3RvcmU6OmFsbFN0b3JlcygpOwotICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgRE9NRGF0YVN0b3JlKiBzdG9yZSA9IGxpc3RbaV07Ci0KLSAgICAgICAgICAgIERPTVdyYXBw
ZXJNYXA8VD4qIGRvbU1hcCA9IHN0YXRpY19jYXN0PERPTVdyYXBwZXJNYXA8VD4qPihzdG9yZS0+
Z2V0RE9NV3JhcHBlck1hcChtYXBUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoZG9tTWFwLT5yZW1v
dmVJZlByZXNlbnQoZG9tT2JqZWN0LCB2OE9iamVjdCkpIHsKLSAgICAgICAgICAgICAgICBkZXJl
Zk9iamVjdCh0eXBlLCBkb21PYmplY3QpOwotICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIG5vdCBmb3VuZCwgaXQg
bWVhbnMgbWFwIGZvciB0aGUgd3JhcHBlciBoYXMgYmVlbiBhbHJlYWR5IGRlc3Ryb3llZCwganVz
dCBkaXNwb3NlIHRoZQotICAgICAgICAvLyBoYW5kbGUgYW5kIGRlcmVmIHRoZSBvYmplY3QgdG8g
ZmlnaHQgbWVtb3J5IGxlYWsuCi0gICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgIHY4
T2JqZWN0LkRpc3Bvc2UoKTsKLSAgICAgICAgICAgIGRlcmVmT2JqZWN0KHR5cGUsIGRvbU9iamVj
dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZv
aWQgRE9NRGF0YTo6cmVtb3ZlT2JqZWN0c0Zyb21XcmFwcGVyTWFwKERPTURhdGFTdG9yZSogc3Rv
cmUsIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDxULCB2ODo6T2JqZWN0PiYgZG9tTWFwKQotICAg
IHsKLSAgICAgICAgV3JhcHBlck1hcE9iamVjdFJlbW92ZXI8VD4gcmVtb3ZlcjsKLSAgICAgICAg
ZG9tTWFwLnZpc2l0KHN0b3JlLCAmcmVtb3Zlcik7Ci0gICAgICAgIGRvbU1hcC5jbGVhcigpOwot
ICAgIH0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRE9NRGF0YV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcAppbmRleCBkYzA4OTZj
ZjNiNzAyMDdmZmY3MTMxZGU3MThiMjFmYjdkOWYyMWYzLi5jMjEyNzQ4YThiNDZjNjJlZDlhNzEy
N2Y3NGRmMTkwZDRiODlkYWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9ET01EYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURh
dGFTdG9yZS5jcHAKQEAgLTEyOCw0NCArMTI4LDQgQEAgdm9pZCBET01EYXRhU3RvcmU6OnJlcG9y
dE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAg
ICAgaW5mby5hZGRXZWFrUG9pbnRlcihtX2FjdGl2ZURvbU9iamVjdE1hcCk7CiB9CiAKLS8vIENh
bGxlZCB3aGVuIHRoZSBvYmplY3QgaXMgbmVhciBkZWF0aCAobm90IHJlYWNoYWJsZSBmcm9tIEpT
IHJvb3RzKS4KLS8vIEl0IGlzIHRpbWUgdG8gcmVtb3ZlIHRoZSBlbnRyeSBmcm9tIHRoZSB0YWJs
ZSBhbmQgZGlzcG9zZSB0aGUgaGFuZGxlLgotdm9pZCBET01EYXRhU3RvcmU6OndlYWtET01PYmpl
Y3RDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4T2JqZWN0LCB2b2lkKiBkb21P
YmplY3QpCi17Ci0gICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgIEFTU0VSVCh2OE9iamVj
dC0+SXNPYmplY3QoKSk7Ci0gICAgRE9NRGF0YTo6aGFuZGxlV2Vha09iamVjdChET01EYXRhU3Rv
cmU6OkRPTU9iamVjdE1hcCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46OkNhc3QodjhPYmpl
Y3QpLCBkb21PYmplY3QpOwotfQotCi12b2lkIERPTURhdGFTdG9yZTo6d2Vha0FjdGl2ZURPTU9i
amVjdENhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdjhPYmplY3QsIHZvaWQqIGRv
bU9iamVjdCkKLXsKLSAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7Ci0gICAgQVNTRVJUKHY4T2Jq
ZWN0LT5Jc09iamVjdCgpKTsKLSAgICBET01EYXRhOjpoYW5kbGVXZWFrT2JqZWN0KERPTURhdGFT
dG9yZTo6QWN0aXZlRE9NT2JqZWN0TWFwLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6Q2Fz
dCh2OE9iamVjdCksIGRvbU9iamVjdCk7Ci19Ci0KLXZvaWQgRE9NRGF0YVN0b3JlOjp3ZWFrTm9k
ZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdmFsdWUsIHZvaWQqIGRvbU9iamVj
dCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgTm9kZSogbm9kZSA9IHN0
YXRpY19jYXN0PE5vZGUqPihkb21PYmplY3QpOwotICAgIC8vIE5vZGUgd3JhcHBlcnMgbXVzdCBi
ZSBKUyBvYmplY3RzLgotICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHY4T2JqZWN0ID0g
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpOwotCi0gICAgRE9NRGF0YUxp
c3QmIGxpc3QgPSBET01EYXRhU3RvcmU6OmFsbFN0b3JlcygpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGlzdC5zaXplKCk7ICsraSkgewotICAgICAgICBET01EYXRhU3RvcmUqIHN0b3Jl
ID0gbGlzdFtpXTsKLSAgICAgICAgRE9NTm9kZU1hcHBpbmcmIG5vZGVNYXAgPSBub2RlLT5pc0Fj
dGl2ZU5vZGUoKSA/IHN0b3JlLT5hY3RpdmVEb21Ob2RlTWFwKCkgOiBzdG9yZS0+ZG9tTm9kZU1h
cCgpOwotICAgICAgICBpZiAobm9kZU1hcC5yZW1vdmVJZlByZXNlbnQobm9kZSwgdjhPYmplY3Qp
KSB7Ci0gICAgICAgICAgICBub2RlLT5kZXJlZigpOyAvLyBOb2JvZHkgb3ZlcnJpZGVzIE5vZGU6
OmRlcmVmIHNvIGl0J3Mgc2FmZQotICAgICAgICAgICAgcmV0dXJuOyAvLyBUaGVyZSBtaWdodCBi
ZSBhdCBtb3N0IG9uZSB3cmFwcGVyIGZvciB0aGUgbm9kZSBpbiB3b3JsZCdzIG1hcHMKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIElmIG5vdCBmb3VuZCwgaXQgbWVhbnMgbWFwIGZvciB0aGUg
d3JhcHBlciBoYXMgYmVlbiBhbHJlYWR5IGRlc3Ryb3llZCwganVzdCBkaXNwb3NlIHRoZQotICAg
IC8vIGhhbmRsZSBhbmQgZGVyZWYgdGhlIG9iamVjdCB0byBmaWdodCBtZW1vcnkgbGVhay4KLSAg
ICB2OE9iamVjdC5EaXNwb3NlKCk7Ci0gICAgbm9kZS0+ZGVyZWYoKTsgLy8gTm9ib2R5IG92ZXJy
aWRlcyBOb2RlOjpkZXJlZiBzbyBpdCdzIHNhZmUKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAppbmRleCAzNzcxNjc1
NDhmN2M1ZmU4NmM0ODNjMDc1NmFhODU4NzRkYjljMzZjLi5lNjc2ZmUwYzQzMGJjNGM4YTRhNTk0
NzJkYzc0ZWRkMGMyYmY0ZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9ET01EYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRh
U3RvcmUuaApAQCAtMzEsOCArMzEsOCBAQAogI2lmbmRlZiBET01EYXRhU3RvcmVfaAogI2RlZmlu
ZSBET01EYXRhU3RvcmVfaAogCi0jaW5jbHVkZSAiVjhET01NYXAuaCIKLQorI2luY2x1ZGUgIkRP
TVdyYXBwZXJNYXAuaCIKKyNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSA8djguaD4KICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC03Miwy
NyArNzIsMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBET01EYXRhU3RvcmUoKTsK
ICAgICAgICAgdmlydHVhbCB+RE9NRGF0YVN0b3JlKCk7CiAKLSAgICAgICAgLy8gQSBsaXN0IG9m
IGFsbCBET01EYXRhU3RvcmUgb2JqZWN0cyBpbiB0aGUgY3VycmVudCBWOCBpbnN0YW5jZSAodGhy
ZWFkKS4gTm9ybWFsbHksIGVhY2ggV29ybGQgaGFzIGEgRE9NRGF0YVN0b3JlLgorICAgICAgICAv
LyBBIGxpc3Qgb2YgYWxsIERPTURhdGFTdG9yZSBvYmplY3RzIGluIHRoZSBjdXJyZW50IFY4IGlz
b2xhdGUuIE5vcm1hbGx5LCBlYWNoIFdvcmxkIGhhcyBhIERPTURhdGFTdG9yZS4KICAgICAgICAg
c3RhdGljIERPTURhdGFMaXN0JiBhbGxTdG9yZXMoKTsKIAogICAgICAgICB2b2lkKiBnZXRET01X
cmFwcGVyTWFwKERPTVdyYXBwZXJNYXBUeXBlKTsKIAotICAgICAgICBET01Ob2RlTWFwcGluZyYg
ZG9tTm9kZU1hcCgpIHsgcmV0dXJuICptX2RvbU5vZGVNYXA7IH0KLSAgICAgICAgRE9NTm9kZU1h
cHBpbmcmIGFjdGl2ZURvbU5vZGVNYXAoKSB7IHJldHVybiAqbV9hY3RpdmVEb21Ob2RlTWFwOyB9
CisgICAgICAgIERPTVdyYXBwZXJNYXA8Tm9kZT4mIGRvbU5vZGVNYXAoKSB7IHJldHVybiAqbV9k
b21Ob2RlTWFwOyB9CisgICAgICAgIERPTVdyYXBwZXJNYXA8Tm9kZT4mIGFjdGl2ZURvbU5vZGVN
YXAoKSB7IHJldHVybiAqbV9hY3RpdmVEb21Ob2RlTWFwOyB9CiAgICAgICAgIERPTVdyYXBwZXJN
YXA8dm9pZD4mIGRvbU9iamVjdE1hcCgpIHsgcmV0dXJuICptX2RvbU9iamVjdE1hcDsgfQogICAg
ICAgICBET01XcmFwcGVyTWFwPHZvaWQ+JiBhY3RpdmVEb21PYmplY3RNYXAoKSB7IHJldHVybiAq
bV9hY3RpdmVEb21PYmplY3RNYXA7IH0KIAotICAgICAgICAvLyBOZWVkIGJ5IFY4R0NDb250cm9s
bGVyLgotICAgICAgICBzdGF0aWMgdm9pZCB3ZWFrQWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2sodjg6
OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2OE9iamVjdCwgdm9pZCogZG9tT2JqZWN0KTsKLSAgICAg
ICAgc3RhdGljIHZvaWQgd2Vha05vZGVDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+
IHY4T2JqZWN0LCB2b2lkKiBkb21PYmplY3QpOwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZXBv
cnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKICAgICBwcm90ZWN0ZWQ6
Ci0gICAgICAgIHN0YXRpYyB2b2lkIHdlYWtET01PYmplY3RDYWxsYmFjayh2ODo6UGVyc2lzdGVu
dDx2ODo6VmFsdWU+IHY4T2JqZWN0LCB2b2lkKiBkb21PYmplY3QpOwotCi0gICAgICAgIERPTU5v
ZGVNYXBwaW5nKiBtX2RvbU5vZGVNYXA7Ci0gICAgICAgIERPTU5vZGVNYXBwaW5nKiBtX2FjdGl2
ZURvbU5vZGVNYXA7CisgICAgICAgIERPTVdyYXBwZXJNYXA8Tm9kZT4qIG1fZG9tTm9kZU1hcDsK
KyAgICAgICAgRE9NV3JhcHBlck1hcDxOb2RlPiogbV9hY3RpdmVEb21Ob2RlTWFwOwogICAgICAg
ICBET01XcmFwcGVyTWFwPHZvaWQ+KiBtX2RvbU9iamVjdE1hcDsKICAgICAgICAgRE9NV3JhcHBl
ck1hcDx2b2lkPiogbV9hY3RpdmVEb21PYmplY3RNYXA7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJNYXAuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJNYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTRjNTk5ZmIzYTFhYTQw
YjdhYzZhZGYxNTZmYTU2NzU1MTA2NTI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlck1hcC5oCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBE
T01XcmFwcGVyTWFwX2gKKyNkZWZpbmUgRE9NV3JhcHBlck1hcF9oCisKKyNpbmNsdWRlICJXZWJD
b3JlTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgi
CisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRE9NRGF0YVN0b3JlOworCit0ZW1wbGF0ZTxjbGFzcyBLZXlUeXBlPgorY2xhc3Mg
RE9NV3JhcHBlclZpc2l0b3IgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCB2aXNpdERPTVdy
YXBwZXIoRE9NRGF0YVN0b3JlKiwgS2V5VHlwZSosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
IHdyYXBwZXIpID0gMDsKKyAgICB2aXJ0dWFsIH5ET01XcmFwcGVyVmlzaXRvcigpIHsgfQorfTsK
KwordGVtcGxhdGU8Y2xhc3MgS2V5VHlwZT4KK2NsYXNzIERPTVdyYXBwZXJNYXAgeworcHVibGlj
OgorICAgIHZpcnR1YWwgfkRPTVdyYXBwZXJNYXAoKSB7IH0KKworICAgIHZpcnR1YWwgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD4gZ2V0KEtleVR5cGUqKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNldChLZXlUeXBlKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4pID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoRE9NRGF0YVN0b3JlKiwgRE9NV3JhcHBlclZpc2l0b3I8S2V5VHlwZT4q
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lk
IHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdCA9IDA7Cit9OworCit0
ZW1wbGF0ZTxjbGFzcyBLZXlUeXBlPgorY2xhc3MgRE9NV3JhcHBlckhhc2hNYXAgOiBwdWJsaWMg
RE9NV3JhcHBlck1hcDxLZXlUeXBlPiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBIYXNoTWFwPEtl
eVR5cGUqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiA+IE1hcFR5cGU7CisKKyAgICBleHBs
aWNpdCBET01XcmFwcGVySGFzaE1hcCh2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNr
ID0gJmRlZmF1bHRXZWFrQ2FsbGJhY2spCisgICAgICAgIDogbV9jYWxsYmFjayhjYWxsYmFjaykK
KyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBn
ZXQoS2V5VHlwZSoga2V5KSBPVkVSUklERQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLmdl
dChrZXkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXQoS2V5VHlwZSoga2V5LCB2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKSBPVkVSUklERQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFtX21hcC5jb250YWlucyhrZXkpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PEtleVR5cGUqPih0b05hdGl2ZSh3cmFwcGVyKSkgPT0ga2V5KTsKKyAgICAgICAgd3JhcHBlci5N
YWtlV2Vhayh0aGlzLCBtX2NhbGxiYWNrKTsKKyAgICAgICAgbV9tYXAuc2V0KGtleSwgd3JhcHBl
cik7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0KERPTURhdGFTdG9yZSogc3RvcmUs
IERPTVdyYXBwZXJWaXNpdG9yPEtleVR5cGU+KiB2aXNpdG9yKSBPVkVSUklERQorICAgIHsKKyAg
ICAgICAgZm9yICh0eXBlbmFtZSBNYXBUeXBlOjppdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7
IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KQorICAgICAgICAgICAgdmlzaXRvci0+dmlzaXRET01X
cmFwcGVyKHN0b3JlLCBpdC0+a2V5LCBpdC0+dmFsdWUpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBjbGVhcigpIE9WRVJSSURFCisgICAgeworICAgICAgICBmb3IgKHR5cGVuYW1lIE1hcFR5
cGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gbV9tYXAuZW5kKCk7ICsraXQp
IHsKKyAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBpdC0+
dmFsdWU7CisgICAgICAgICAgICB0b1dyYXBwZXJUeXBlSW5mbyh3cmFwcGVyKS0+ZGVyZWZPYmpl
Y3QoaXQtPmtleSk7CisgICAgICAgICAgICB3cmFwcGVyLkRpc3Bvc2UoKTsKKyAgICAgICAgfQor
ICAgICAgICBtX21hcC5jbGVhcigpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRN
ZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdCBPVkVS
UklERQorICAgIHsKKyAgICAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5m
bywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpCaW5kaW5nKTsKKyAgICAgICAgaW5mby5hZGRN
ZW1iZXIobV9tYXApOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZW1vdmUoS2V5VHlwZSog
a2V5LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQorICAgIHsKKyAgICAgICAg
dHlwZW5hbWUgTWFwVHlwZTo6aXRlcmF0b3IgaXQgPSBtX21hcC5maW5kKGtleSk7CisgICAgICAg
IEFTU0VSVChpdCAhPSBtX21hcC5lbmQoKSk7CisgICAgICAgIEFTU0VSVChpdC0+dmFsdWUgPT0g
d3JhcHBlcik7CisgICAgICAgIG1fbWFwLnJlbW92ZShpdCk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIHN0YXRpYyB2b2lkIGRlZmF1bHRXZWFrQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZh
bHVlPiB2YWx1ZSwgdm9pZCogY29udGV4dCkKKyAgICB7CisgICAgICAgIERPTVdyYXBwZXJIYXNo
TWFwPEtleVR5cGU+KiBtYXAgPSBzdGF0aWNfY2FzdDxET01XcmFwcGVySGFzaE1hcDxLZXlUeXBl
Pio+KGNvbnRleHQpOworICAgICAgICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkpOworICAgICAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gdjg6OlBlcnNpc3RlbnQ8djg6
Ok9iamVjdD46OkNhc3QodmFsdWUpOworICAgICAgICBXcmFwcGVyVHlwZUluZm8qIHR5cGUgPSB0
b1dyYXBwZXJUeXBlSW5mbyh3cmFwcGVyKTsKKyAgICAgICAgS2V5VHlwZSoga2V5ID0gc3RhdGlj
X2Nhc3Q8S2V5VHlwZSo+KHRvTmF0aXZlKHdyYXBwZXIpKTsKKworICAgICAgICBtYXAtPnJlbW92
ZShrZXksIHdyYXBwZXIpOworICAgICAgICB3cmFwcGVyLkRpc3Bvc2UoKTsKKyAgICAgICAgdHlw
ZS0+ZGVyZWZPYmplY3Qoa2V5KTsKKyAgICB9CisKKyAgICB2ODo6V2Vha1JlZmVyZW5jZUNhbGxi
YWNrIG1fY2FsbGJhY2s7CisgICAgTWFwVHlwZSBtX21hcDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIERPTVdyYXBwZXJNYXBfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaAppbmRleCBhZGYxMjRlYzI3NWI4ODk5OThiMjdl
NGE3NzBiZTViZDg4OTU2YWQ1Li41ZmM5NzE2M2JlNGVjNTk2MGJiN2EzMzZmZjJlYTVhYjJiMTZl
MTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29y
bGQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaApA
QCAtMzEsOCArMzEsOCBAQAogI2lmbmRlZiBET01XcmFwcGVyV29ybGRfaAogI2RlZmluZSBET01X
cmFwcGVyV29ybGRfaAogCi0jaW5jbHVkZSAiRE9NRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJWOERPTU1hcC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JbnRydXNpdmVE
T01XcmFwcGVyTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JbnRydXNpdmVET01X
cmFwcGVyTWFwLmgKaW5kZXggZDY2Yzc2MTZjZWVkOTM1NDRiODM3ODJhY2I3NGRkNzQxODZlNzIw
MC4uNjA5Y2ZjNzlkODY2N2Y1ZWYxMThkZGY2ZGE2YmY3YTY4YTQ0NDFiZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSW50cnVzaXZlRE9NV3JhcHBlck1hcC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0ludHJ1c2l2ZURPTVdyYXBwZXJNYXAuaApAQCAt
MzEsNzYgKzMxLDU5IEBACiAjaWZuZGVmIEludHJ1c2l2ZURPTVdyYXBwZXJNYXBfaAogI2RlZmlu
ZSBJbnRydXNpdmVET01XcmFwcGVyTWFwX2gKIAotI2luY2x1ZGUgIkRPTURhdGFTdG9yZS5oIgot
I2luY2x1ZGUgIlY4RE9NTWFwLmgiCi0jaW5jbHVkZSAiVjhOb2RlLmgiCi0jaW5jbHVkZSAiV2Vi
Q29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkRPTVdyYXBwZXJNYXAuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBET01Ob2RlV3JhcHBlck1hcCA6IHB1Ymxp
YyBBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXA8Tm9kZSwgdjg6Ok9iamVjdD4geworY2xhc3MgRE9N
Tm9kZVdyYXBwZXJNYXAgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDxOb2RlPiB7CiBwdWJsaWM6Ci0g
ICAgRE9NTm9kZVdyYXBwZXJNYXAodjg6OldlYWtSZWZlcmVuY2VDYWxsYmFjayBjYWxsYmFjaykK
LSAgICAgICAgOiBBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXA8Tm9kZSwgdjg6Ok9iamVjdD4oY2Fs
bGJhY2spCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4gZ2V0KE5vZGUqIG5vZGUpCisgICAgdmlydHVhbCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0PiBnZXQoTm9kZSogbm9kZSkgT1ZFUlJJREUKICAgICB7CiAgICAgICAgIHJldHVybiBub2Rl
LT53cmFwcGVyKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHNldChOb2RlKiBub2RlLCB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQorICAgIHZpcnR1YWwgdm9pZCBzZXQo
Tm9kZSogbm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikgT1ZFUlJJREUK
ICAgICB7CiAgICAgICAgIEFTU0VSVChub2RlICYmIG5vZGUtPndyYXBwZXIoKS5Jc0VtcHR5KCkp
OwogICAgICAgICBBU1NFUlQod3JhcHBlci5XcmFwcGVyQ2xhc3NJZCgpID09IHY4RE9NU3VidHJl
ZUNsYXNzSWQpOwogICAgICAgICBub2RlLT5zZXRXcmFwcGVyKHdyYXBwZXIpOwotICAgICAgICB3
cmFwcGVyLk1ha2VXZWFrKG5vZGUsIHdlYWtSZWZlcmVuY2VDYWxsYmFjaygpKTsKKyAgICAgICAg
d3JhcHBlci5NYWtlV2Vhayhub2RlLCB3ZWFrQ2FsbGJhY2spOwogICAgIH0KIAotICAgIHZpcnR1
YWwgYm9vbCBjb250YWlucyhOb2RlKiBub2RlKQorICAgIHZpcnR1YWwgdm9pZCB2aXNpdChET01E
YXRhU3RvcmUqIHN0b3JlLCBET01XcmFwcGVyVmlzaXRvcjxOb2RlPiogdmlzaXRvcikgT1ZFUlJJ
REUKICAgICB7Ci0gICAgICAgIHJldHVybiAhbm9kZS0+d3JhcHBlcigpLklzRW1wdHkoKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHZp
c2l0KERPTURhdGFTdG9yZSogc3RvcmUsIFZpc2l0b3IqIHZpc2l0b3IpCisgICAgdmlydHVhbCB2
b2lkIGNsZWFyKCkgT1ZFUlJJREUKICAgICB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCByZW1vdmVJZlByZXNlbnQoTm9kZSogbm9kZSwg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gdmFsdWUpCisgICAgdmlydHVhbCB2b2lkIHJlcG9y
dE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0IE9W
RVJSSURFCiAgICAgewotICAgICAgICBBU1NFUlQobm9kZSk7Ci0gICAgICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBub2RlLT53cmFwcGVyKCk7Ci0gICAgICAgIGlmICh3
cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYg
KHdyYXBwZXIgIT0gdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG5v
ZGUtPmRpc3Bvc2VXcmFwcGVyKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IHZpcnR1YWwgdm9pZCBjbGVhcigpCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHdlYWtDYWxs
YmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHZhbHVlLCB2b2lkKiBjb250ZXh0KQogICAg
IHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQorICAgICAgICBOb2RlKiBu
b2RlID0gc3RhdGljX2Nhc3Q8Tm9kZSo+KGNvbnRleHQpOworICAgICAgICBBU1NFUlQodmFsdWUt
PklzT2JqZWN0KCkpOworICAgICAgICBBU1NFUlQobm9kZS0+d3JhcHBlcigpID09IHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVw
b3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3Qg
T1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgZG9lc24ndCB1
c2UgYW55IGV4dHJhIG1lbW9yeS4KKyAgICAgICAgbm9kZS0+Y2xlYXJXcmFwcGVyKCk7CisgICAg
ICAgIHZhbHVlLkRpc3Bvc2UoKTsKKyAgICAgICAgbm9kZS0+ZGVyZWYoKTsKICAgICB9CiB9Owog
Ci1jbGFzcyBBY3RpdmVET01Ob2RlV3JhcHBlck1hcCA6IHB1YmxpYyBET01XcmFwcGVyTWFwPE5v
ZGU+IHsKK2NsYXNzIEFjdGl2ZURPTU5vZGVXcmFwcGVyTWFwIDogcHVibGljIERPTVdyYXBwZXJI
YXNoTWFwPE5vZGU+IHsKIHB1YmxpYzoKLSAgICBBY3RpdmVET01Ob2RlV3JhcHBlck1hcCh2ODo6
V2Vha1JlZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrKQotICAgICAgICA6IERPTVdyYXBwZXJNYXA8
Tm9kZT4oY2FsbGJhY2spCi0gICAgewotICAgIH0KLQogICAgIHZpcnR1YWwgdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD4gZ2V0KE5vZGUqIG5vZGUpIE9WRVJSSURFCiAgICAgewotICAgICAgICBy
ZXR1cm4gbm9kZS0+d3JhcHBlcigpOworICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiB3cmFwcGVyID0gbm9kZS0+d3JhcHBlcigpOworICAgICAgICBBU1NFUlQoRE9NV3JhcHBlckhh
c2hNYXA8Tm9kZT46OmdldChub2RlKSA9PSB3cmFwcGVyKTsKKyAgICAgICAgcmV0dXJuIHdyYXBw
ZXI7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHNldChOb2RlKiBub2RlLCB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKSBPVkVSUklERQpAQCAtMTA4LDIyICs5MSwxOSBAQCBw
dWJsaWM6CiAgICAgICAgIEFTU0VSVChub2RlICYmIG5vZGUtPndyYXBwZXIoKS5Jc0VtcHR5KCkp
OwogICAgICAgICBBU1NFUlQod3JhcHBlci5XcmFwcGVyQ2xhc3NJZCgpID09IHY4RE9NU3VidHJl
ZUNsYXNzSWQpOwogICAgICAgICBub2RlLT5zZXRXcmFwcGVyKHdyYXBwZXIpOwotICAgICAgICBE
T01XcmFwcGVyTWFwPE5vZGU+OjpzZXQobm9kZSwgd3JhcHBlcik7CisgICAgICAgIERPTVdyYXBw
ZXJIYXNoTWFwPE5vZGU+OjpzZXQobm9kZSwgd3JhcHBlcik7CiAgICAgfQogCi0gICAgdmlydHVh
bCBib29sIHJlbW92ZUlmUHJlc2VudChOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0PiB2YWx1ZSkgT1ZFUlJJREUKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSBPVkVSUklERQog
ICAgIHsKLSAgICAgICAgaWYgKCFET01XcmFwcGVyTWFwPE5vZGU+OjpyZW1vdmVJZlByZXNlbnQo
bm9kZSwgdmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBOb3Rp
Y2UgdGhhdCB3ZSBjYWxsICJjbGVhcldyYXBwZXIiIGhlcmUgcmF0aGVyIHRoYW4gZGlzcG9zZVdy
YXBwZXIgYmVjYXVzZQotICAgICAgICAvLyBvdXIgYmFzZSBjbGFzcyB3aWxsIGNhbGwgRGlzcG9z
ZSBvbiB0aGUgd3JhcHBlciBmb3IgdXMuCi0gICAgICAgIG5vZGUtPmNsZWFyV3JhcHBlcigpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQogCi0gICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgT1ZFUlJJREUKKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlKE5vZGUqIG5vZGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpIE9W
RVJSSURFCiAgICAgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQVNT
RVJUKG5vZGUtPndyYXBwZXIoKSA9PSB3cmFwcGVyKTsKKyAgICAgICAgbm9kZS0+Y2xlYXJXcmFw
cGVyKCk7CisgICAgICAgIERPTVdyYXBwZXJIYXNoTWFwPE5vZGU+OjpyZW1vdmUobm9kZSwgd3Jh
cHBlcik7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NvcGVkRE9NRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
b3BlZERPTURhdGFTdG9yZS5jcHAKaW5kZXggYmJkZGM1YzFiY2M5MWNmYWQ3ZjY5NzcwNjMyYTA0
MzUyYTJmODY0Ny4uOWFiN2U1MjQzOTQ3ODEwNTZkNTgzZTY5NTRlMWU4NGY2NjhmN2RlZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NvcGVkRE9NRGF0YVN0b3JlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY29wZWRET01EYXRhU3RvcmUuY3Bw
CkBAIC0zOSwxNCArMzksMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogU2NvcGVkRE9NRGF0YVN0
b3JlOjpTY29wZWRET01EYXRhU3RvcmUoKQogICAgIDogRE9NRGF0YVN0b3JlKCkKIHsKLSAgICBt
X2RvbU5vZGVNYXAgPSBuZXcgRE9NV3JhcHBlck1hcDxOb2RlPigmRE9NRGF0YVN0b3JlOjp3ZWFr
Tm9kZUNhbGxiYWNrKTsKLSAgICBtX2FjdGl2ZURvbU5vZGVNYXAgPSBuZXcgRE9NV3JhcHBlck1h
cDxOb2RlPigmRE9NRGF0YVN0b3JlOjp3ZWFrTm9kZUNhbGxiYWNrKTsKLSAgICBtX2RvbU9iamVj
dE1hcCA9IG5ldyBET01XcmFwcGVyTWFwPHZvaWQ+KCZET01EYXRhU3RvcmU6OndlYWtET01PYmpl
Y3RDYWxsYmFjayk7Ci0gICAgbV9hY3RpdmVEb21PYmplY3RNYXAgPSBuZXcgRE9NV3JhcHBlck1h
cDx2b2lkPigmRE9NRGF0YVN0b3JlOjp3ZWFrQWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2spOworICAg
IG1fZG9tTm9kZU1hcCA9IG5ldyBET01XcmFwcGVySGFzaE1hcDxOb2RlPjsKKyAgICBtX2FjdGl2
ZURvbU5vZGVNYXAgPSBuZXcgRE9NV3JhcHBlckhhc2hNYXA8Tm9kZT47CisgICAgbV9kb21PYmpl
Y3RNYXAgPSBuZXcgRE9NV3JhcHBlckhhc2hNYXA8dm9pZD47CisgICAgbV9hY3RpdmVEb21PYmpl
Y3RNYXAgPSBuZXcgRE9NV3JhcHBlckhhc2hNYXA8dm9pZD47CiB9CiAKIFNjb3BlZERPTURhdGFT
dG9yZTo6flNjb3BlZERPTURhdGFTdG9yZSgpCiB7CisgICAgLy8gRklYTUU6IENvbnNpZGVyIG1v
dmluZyB0aGVzZSBjYWxscyB0byBjbGVhcigpCisgICAgLy8gaW50byB0aGUgRE9NV3JhcHBlckhh
c2hNYXAgZGVzdHJ1Y3Rvci4KKyAgICBtX2RvbU5vZGVNYXAtPmNsZWFyKCk7CisgICAgbV9hY3Rp
dmVEb21Ob2RlTWFwLT5jbGVhcigpOworICAgIG1fZG9tT2JqZWN0TWFwLT5jbGVhcigpOworICAg
IG1fYWN0aXZlRG9tT2JqZWN0TWFwLT5jbGVhcigpOworCiAgICAgZGVsZXRlIG1fZG9tTm9kZU1h
cDsKICAgICBkZWxldGUgbV9hY3RpdmVEb21Ob2RlTWFwOwogICAgIGRlbGV0ZSBtX2RvbU9iamVj
dE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2Zp
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcApp
bmRleCBiNTM5MjlhOWJkNDk1MGZhN2UyMWY0NmFjNDk1MzYxOTA1ZjEyMmE4Li4xYjcxOTFjYWE0
YTg0ODA1M2M0ZjMzMTE0YzhkNTcxNTk2MTU5ZTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwCkBAIC0yMDUsNyArMjA1LDcgQEAgdm9pZCBTY3Jp
cHRQcm9maWxlcjo6dmlzaXRFeHRlcm5hbFN0cmluZ3MoRXh0ZXJuYWxTdHJpbmdWaXNpdG9yKiB2
aXNpdG9yKQogCiB2b2lkIFNjcmlwdFByb2ZpbGVyOjp2aXNpdEV4dGVybmFsQXJyYXlzKEV4dGVy
bmFsQXJyYXlWaXNpdG9yKiB2aXNpdG9yKQogewotICAgIGNsYXNzIFZpc2l0b3JBZGFwdGVyIDog
cHVibGljIERPTVdyYXBwZXJNYXA8dm9pZD46OlZpc2l0b3IgeworICAgIGNsYXNzIFZpc2l0b3JB
ZGFwdGVyIDogcHVibGljIERPTVdyYXBwZXJWaXNpdG9yPHZvaWQ+IHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIFZpc2l0b3JBZGFwdGVyKEV4dGVybmFsQXJyYXlWaXNpdG9yKiB2aXNpdG9yKSA6IG1f
dmlzaXRvcih2aXNpdG9yKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1N0YXRpY0RPTURhdGFTdG9yZS5jcHAKaW5kZXggNWQ5ZDA5Y2UxMzlkNDE4MjdkZDk3ZDYwMzEz
YmExZmI2MGMzNmQzNS4uYzQ5ZjlmZDA5NzU5MmFiNmMwNzEwMGM3MGU3YzdlZTRiZmVhZGM3OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUu
Y3BwCkBAIC0zNiwxMSArMzYsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTdGF0aWNET01E
YXRhU3RvcmU6OlN0YXRpY0RPTURhdGFTdG9yZSgpCi0gICAgOiBET01EYXRhU3RvcmUoKQotICAg
ICwgbV9zdGF0aWNEb21Ob2RlTWFwKCZET01EYXRhU3RvcmU6OndlYWtOb2RlQ2FsbGJhY2spCi0g
ICAgLCBtX3N0YXRpY0FjdGl2ZURvbU5vZGVNYXAoJkRPTURhdGFTdG9yZTo6d2Vha05vZGVDYWxs
YmFjaykKLSAgICAsIG1fc3RhdGljRG9tT2JqZWN0TWFwKCZET01EYXRhU3RvcmU6OndlYWtET01P
YmplY3RDYWxsYmFjaykKLSAgICAsIG1fc3RhdGljQWN0aXZlRG9tT2JqZWN0TWFwKCZET01EYXRh
U3RvcmU6OndlYWtBY3RpdmVET01PYmplY3RDYWxsYmFjaykKIHsKICAgICBtX2RvbU5vZGVNYXAg
PSAmbV9zdGF0aWNEb21Ob2RlTWFwOwogICAgIG1fYWN0aXZlRG9tTm9kZU1hcCA9ICZtX3N0YXRp
Y0FjdGl2ZURvbU5vZGVNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TdGF0aWNET01EYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRp
Y0RPTURhdGFTdG9yZS5oCmluZGV4IDgxMDkzMDUwZWM3NjYxMDU5ZjhhZWMzNWQzYzJiNDFmMTdk
YmM0MGIuLjIwZDExYWRhYWU1NmY4YjUyYTI2YTM4YjM5ZTAwNTRiYWMyOGQzYmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5oCkBAIC01NCw4
ICs1NCw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRE9NTm9kZVdyYXBwZXJNYXAgbV9zdGF0
aWNEb21Ob2RlTWFwOwogICAgIEFjdGl2ZURPTU5vZGVXcmFwcGVyTWFwIG1fc3RhdGljQWN0aXZl
RG9tTm9kZU1hcDsKLSAgICBET01XcmFwcGVyTWFwPHZvaWQ+IG1fc3RhdGljRG9tT2JqZWN0TWFw
OwotICAgIERPTVdyYXBwZXJNYXA8dm9pZD4gbV9zdGF0aWNBY3RpdmVEb21PYmplY3RNYXA7Cisg
ICAgRE9NV3JhcHBlckhhc2hNYXA8dm9pZD4gbV9zdGF0aWNEb21PYmplY3RNYXA7CisgICAgRE9N
V3JhcHBlckhhc2hNYXA8dm9pZD4gbV9zdGF0aWNBY3RpdmVEb21PYmplY3RNYXA7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5j
cHAKaW5kZXggZTZkYWI5MDk0NDdhNjcyYjhlZGFiMzE0NzM2NDcxZmI5YWU4NzY3Yi4uNWViNjMw
YmUxYWRjYjAwNzRhYWQwNDNiODJjYmQ5YmYzN2IzYTFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NTWFwLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRPTURhdGFT
dG9yZS5oIgogI2luY2x1ZGUgIlNjb3BlZERPTURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIlY4Qmlu
ZGluZy5oIgorI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU2LDEyICs1NywxMiBAQCBOb2RlV3JhcHBlclZp
c2l0b3I6On5Ob2RlV3JhcHBlclZpc2l0b3IoKQogewogfQogCi1ET01Ob2RlTWFwcGluZyYgZ2V0
RE9NTm9kZU1hcCh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK0RPTVdyYXBwZXJNYXA8Tm9kZT4mIGdl
dERPTU5vZGVNYXAodjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgcmV0dXJuIERPTURhdGE6
OmdldEN1cnJlbnRTdG9yZShpc29sYXRlKS5kb21Ob2RlTWFwKCk7CiB9CiAKLURPTU5vZGVNYXBw
aW5nJiBnZXRBY3RpdmVET01Ob2RlTWFwKHY4OjpJc29sYXRlKiBpc29sYXRlKQorRE9NV3JhcHBl
ck1hcDxOb2RlPiYgZ2V0QWN0aXZlRE9NTm9kZU1hcCh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsK
ICAgICByZXR1cm4gRE9NRGF0YTo6Z2V0Q3VycmVudFN0b3JlKGlzb2xhdGUpLmFjdGl2ZURvbU5v
ZGVNYXAoKTsKIH0KQEAgLTc4LDE0ICs3OSwxMSBAQCBET01XcmFwcGVyTWFwPHZvaWQ+JiBnZXRB
Y3RpdmVET01PYmplY3RNYXAodjg6Oklzb2xhdGUqIGlzb2xhdGUpCiAKIHZvaWQgcmVtb3ZlQWxs
RE9NT2JqZWN0cygpCiB7Ci0gICAgRE9NRGF0YVN0b3JlJiBzdG9yZSA9IERPTURhdGE6OmdldEN1
cnJlbnRTdG9yZSgpOwotCi0gICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwogICAgIEFTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gTm90ZTogV2Ugc2tpcCB0aGUgTm9kZSB3cmFwcGVy
IG1hcHMgYmVjYXVzZSB0aGV5IGV4aXN0IG9ubHkgb24gdGhlIG1haW4gdGhyZWFkLgotICAgIERP
TURhdGE6OnJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1hcDx2b2lkPigmc3RvcmUsIHN0b3JlLmRv
bU9iamVjdE1hcCgpKTsKLSAgICBET01EYXRhOjpyZW1vdmVPYmplY3RzRnJvbVdyYXBwZXJNYXA8
dm9pZD4oJnN0b3JlLCBzdG9yZS5hY3RpdmVEb21PYmplY3RNYXAoKSk7CisgICAgdjg6OkhhbmRs
ZVNjb3BlIHNjb3BlOworICAgIERPTURhdGFTdG9yZSYgc3RvcmUgPSBET01EYXRhOjpnZXRDdXJy
ZW50U3RvcmUoKTsKKyAgICBzdG9yZS5kb21PYmplY3RNYXAoKS5jbGVhcigpOworICAgIHN0b3Jl
LmFjdGl2ZURvbU9iamVjdE1hcCgpLmNsZWFyKCk7CiB9CiAKIHZvaWQgdmlzaXRBbGxET01Ob2Rl
cyhOb2RlV3JhcHBlclZpc2l0b3IqIHZpc2l0b3IpCkBAIC0xMTcsNyArMTE1LDcgQEAgdm9pZCB2
aXNpdEFsbERPTU5vZGVzKE5vZGVXcmFwcGVyVmlzaXRvciogdmlzaXRvcikKICAgICB2ODo6Vjg6
OlZpc2l0SGFuZGxlc1dpdGhDbGFzc0lkcygmdmlzaXRvckFkYXB0ZXIpOwogfQogCi12b2lkIHZp
c2l0QWN0aXZlRE9NTm9kZXMoRE9NV3JhcHBlck1hcDxOb2RlPjo6VmlzaXRvciogdmlzaXRvcikK
K3ZvaWQgdmlzaXRBY3RpdmVET01Ob2RlcyhET01XcmFwcGVyVmlzaXRvcjxOb2RlPiogdmlzaXRv
cikKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CiAKQEAgLTEyOSw3ICsxMjcsNyBAQCB2
b2lkIHZpc2l0QWN0aXZlRE9NTm9kZXMoRE9NV3JhcHBlck1hcDxOb2RlPjo6VmlzaXRvciogdmlz
aXRvcikKICAgICB9CiB9CiAKLXZvaWQgdmlzaXRET01PYmplY3RzKERPTVdyYXBwZXJNYXA8dm9p
ZD46OlZpc2l0b3IqIHZpc2l0b3IpCit2b2lkIHZpc2l0RE9NT2JqZWN0cyhET01XcmFwcGVyVmlz
aXRvcjx2b2lkPiogdmlzaXRvcikKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CiAKQEAg
LTE0MSw3ICsxMzksNyBAQCB2b2lkIHZpc2l0RE9NT2JqZWN0cyhET01XcmFwcGVyTWFwPHZvaWQ+
OjpWaXNpdG9yKiB2aXNpdG9yKQogICAgIH0KIH0KIAotdm9pZCB2aXNpdEFjdGl2ZURPTU9iamVj
dHMoRE9NV3JhcHBlck1hcDx2b2lkPjo6VmlzaXRvciogdmlzaXRvcikKK3ZvaWQgdmlzaXRBY3Rp
dmVET01PYmplY3RzKERPTVdyYXBwZXJWaXNpdG9yPHZvaWQ+KiB2aXNpdG9yKQogewogICAgIHY4
OjpIYW5kbGVTY29wZSBzY29wZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01NYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgK
aW5kZXggZmYwNjFmZTE2MTkwMTFjNDk1ZmRkMjNkNmQzOTQxYjFkZTJhMTVmZC4uNTY3NWMxZDVl
ODk0ZTU1YmY4Y2U2MzQ3OGUyMWIwNmJkZjhiNWFhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01NYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTU1hcC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIFY4RE9NTWFwX2gKICNkZWZp
bmUgVjhET01NYXBfaAogCisjaW5jbHVkZSAiRE9NV3JhcHBlck1hcC5oIgogI2luY2x1ZGUgIk5v
ZGUuaCIKICNpbmNsdWRlICJXZWJDb3JlTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTQwLDExNiArNDEsMTMgQEAKICNpbmNsdWRlIDx2OC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgRE9NRGF0YVN0b3JlOwotCi0gICAgdGVt
cGxhdGUgPGNsYXNzIEtleVR5cGUsIGNsYXNzIFZhbHVlVHlwZT4gY2xhc3MgQWJzdHJhY3RXZWFr
UmVmZXJlbmNlTWFwIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEFic3RyYWN0V2Vha1JlZmVyZW5j
ZU1hcCh2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrKSA6IG1fd2Vha1JlZmVyZW5j
ZUNhbGxiYWNrKGNhbGxiYWNrKSB7IH0KLSAgICAgICAgdmlydHVhbCB+QWJzdHJhY3RXZWFrUmVm
ZXJlbmNlTWFwKCkgeyB9Ci0KLSAgICAgICAgY2xhc3MgVmlzaXRvciB7Ci0gICAgICAgIHB1Ymxp
YzoKLSAgICAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3Jl
KiBzdG9yZSwgS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IG9iamVjdCkg
PSAwOwotICAgICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgICAgICB2aXJ0dWFsIH5WaXNpdG9yKCkg
eyB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmlydHVhbCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5
cGU+IGdldChLZXlUeXBlKiBvYmopID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldChLZXlU
eXBlKiBvYmosIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4gd3JhcHBlcikgPSAwOwotICAgICAg
ICB2aXJ0dWFsIGJvb2wgY29udGFpbnMoS2V5VHlwZSogb2JqKSA9IDA7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCB2aXNpdChET01EYXRhU3RvcmUqIHN0b3JlLCBWaXNpdG9yKiB2aXNpdG9yKSA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCByZW1vdmVJZlByZXNlbnQoS2V5VHlwZSosIHY4OjpQZXJz
aXN0ZW50PFZhbHVlVHlwZT4pID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAw
OwotCi0gICAgICAgIHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sgd2Vha1JlZmVyZW5jZUNhbGxi
YWNrKCkgeyByZXR1cm4gbV93ZWFrUmVmZXJlbmNlQ2FsbGJhY2s7IH0KLQotICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0ID0gMDsK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sgbV93ZWFr
UmVmZXJlbmNlQ2FsbGJhY2s7Ci0gICAgfTsKLQotICAgIHR5cGVkZWYgQWJzdHJhY3RXZWFrUmVm
ZXJlbmNlTWFwPE5vZGUsIHY4OjpPYmplY3Q+IERPTU5vZGVNYXBwaW5nOwotCi0gICAgLy8gQSB0
YWJsZSBvZiB3cmFwcGVycyB3aXRoIHdlYWsgcG9pbnRlcnMuCi0gICAgLy8gVGhpcyB0YWJsZSBh
bGxvd3MgdXMgdG8gYXZvaWQgdHJhY2sgd3JhcHBlZCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcKLSAg
ICAvLyBhbmQgZm9yIGVuc3VyaW5nIHRoYXQgd2UgZG9uJ3QgZG91YmxlIHdyYXAgdGhlIHNhbWUg
b2JqZWN0LgotICAgIHRlbXBsYXRlPGNsYXNzIEtleVR5cGUsIGNsYXNzIFZhbHVlVHlwZT4gY2xh
c3MgV2Vha1JlZmVyZW5jZU1hcCA6IHB1YmxpYyBBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXA8S2V5
VHlwZSwgVmFsdWVUeXBlPiB7Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEFic3RyYWN0
V2Vha1JlZmVyZW5jZU1hcDxLZXlUeXBlLCBWYWx1ZVR5cGU+IFBhcmVudDsKLSAgICAgICAgV2Vh
a1JlZmVyZW5jZU1hcCh2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrKSA6IFBhcmVu
dChjYWxsYmFjaykgeyB9Ci0gICAgICAgIHZpcnR1YWwgfldlYWtSZWZlcmVuY2VNYXAoKSB7IH0K
LQotICAgICAgICAvLyBHZXQgdGhlIEpTIHdyYXBwZXIgb2JqZWN0IG9mIGFuIG9iamVjdC4KLSAg
ICAgICAgdmlydHVhbCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IGdldChLZXlUeXBlKiBvYmop
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFZhbHVlVHlwZSogd3JhcHBlciA9IG1fbWFwLmdldChv
YmopOwotICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIgPyB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5
cGU+KHdyYXBwZXIpIDogdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgdmlydHVhbCB2b2lkIHNldChLZXlUeXBlKiBvYmosIHY4OjpQZXJzaXN0ZW50PFZh
bHVlVHlwZT4gd3JhcHBlcikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFtX21hcC5j
b250YWlucyhvYmopKTsKLSAgICAgICAgICAgIHdyYXBwZXIuTWFrZVdlYWsob2JqLCBQYXJlbnQ6
OndlYWtSZWZlcmVuY2VDYWxsYmFjaygpKTsKLSAgICAgICAgICAgIG1fbWFwLnNldChvYmosICp3
cmFwcGVyKTsKLSAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBmb3JnZXQoS2V5VHlw
ZSogb2JqKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQob2JqKTsKLSAgICAgICAgICAg
IFZhbHVlVHlwZSogd3JhcHBlciA9IG1fbWFwLnRha2Uob2JqKTsKLSAgICAgICAgICAgIGlmICgh
d3JhcHBlcikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHY4OjpQZXJz
aXN0ZW50PFZhbHVlVHlwZT4gaGFuZGxlKHdyYXBwZXIpOwotICAgICAgICAgICAgaGFuZGxlLkRp
c3Bvc2UoKTsKLSAgICAgICAgICAgIGhhbmRsZS5DbGVhcigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgYm9vbCByZW1vdmVJZlByZXNlbnQoS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1
ZVR5cGU+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPEtl
eVR5cGUqLCBWYWx1ZVR5cGUqPjo6aXRlcmF0b3IgaXQgPSBtX21hcC5maW5kKGtleSk7Ci0gICAg
ICAgICAgICBpZiAoaXQgPT0gbV9tYXAuZW5kKCkgfHwgaXQtPnZhbHVlICE9ICp2YWx1ZSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIG1fbWFwLnJlbW92ZShp
dCk7Ci0gICAgICAgICAgICB2YWx1ZS5EaXNwb3NlKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2xlYXIoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtX21hcC5jbGVhcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBjb250YWlucyhL
ZXlUeXBlKiBvYmopIHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKG9iaik7IH0KLQotICAgICAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoRE9NRGF0YVN0b3JlKiBzdG9yZSwgdHlwZW5hbWUgUGFyZW50OjpW
aXNpdG9yKiB2aXNpdG9yKQotICAgICAgICB7Ci0gICAgICAgICAgICB0eXBlbmFtZSBIYXNoTWFw
PEtleVR5cGUqLCBWYWx1ZVR5cGUqPjo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOwotICAg
ICAgICAgICAgZm9yICg7IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgICAg
IHZpc2l0b3ItPnZpc2l0RE9NV3JhcHBlcihzdG9yZSwgaXQtPmtleSwgdjg6OlBlcnNpc3RlbnQ8
VmFsdWVUeXBlPihpdC0+dmFsdWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBj
b25zdCBPVkVSUklERQotICAgICAgICB7Ci0gICAgICAgICAgICBNZW1vcnlDbGFzc0luZm8gaW5m
byhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkJpbmRpbmcpOwot
ICAgICAgICAgICAgaW5mby5hZGRNZW1iZXIobV9tYXApOwotICAgICAgICB9Ci0KLSAgICBwcm90
ZWN0ZWQ6Ci0gICAgICAgIEhhc2hNYXA8S2V5VHlwZSosIFZhbHVlVHlwZSo+IG1fbWFwOwotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgS2V5VHlwZT4gY2xhc3MgRE9NV3JhcHBlck1hcCA6
IHB1YmxpYyBXZWFrUmVmZXJlbmNlTWFwPEtleVR5cGUsIHY4OjpPYmplY3Q+IHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIERPTVdyYXBwZXJNYXAodjg6OldlYWtSZWZlcmVuY2VDYWxsYmFjayBjYWxs
YmFjaykgOiBXZWFrUmVmZXJlbmNlTWFwPEtleVR5cGUsIHY4OjpPYmplY3Q+KGNhbGxiYWNrKSB7
IH0KLSAgICB9OworICAgIGNsYXNzIERPTURhdGFTdG9yZTsKIAogICAgIC8vIEEgdXRpbGl0eSBj
bGFzcyB0byBtYW5hZ2UgdGhlIGxpZmV0aW1lIG9mIHNldCBvZiBET00gd3JhcHBlcnMuCiAgICAg
Y2xhc3MgRE9NRGF0YVN0b3JlSGFuZGxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIERPTURhdGFT
dG9yZUhhbmRsZShib29sIGluaXRpYWxpemUpOworICAgICAgICBleHBsaWNpdCBET01EYXRhU3Rv
cmVIYW5kbGUoYm9vbCBpbml0aWFsaXplKTsKICAgICAgICAgfkRPTURhdGFTdG9yZUhhbmRsZSgp
OwogCiAgICAgICAgIERPTURhdGFTdG9yZSogZ2V0U3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3N0
b3JlLmdldCgpOyB9CkBAIC0xNTksMTAgKzU3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IH07CiAKICAgICAvLyBBIG1hcCBmcm9tIERPTSBub2RlIHRvIGl0cyBKUyB3cmFwcGVyLgotICAg
IERPTU5vZGVNYXBwaW5nJiBnZXRET01Ob2RlTWFwKHY4OjpJc29sYXRlKiA9IDApOwotICAgIERP
TU5vZGVNYXBwaW5nJiBnZXRBY3RpdmVET01Ob2RlTWFwKHY4OjpJc29sYXRlKiA9IDApOwotICAg
IHZvaWQgdmlzaXRBY3RpdmVET01Ob2RlcyhET01XcmFwcGVyTWFwPE5vZGU+OjpWaXNpdG9yKik7
Ci0KKyAgICBET01XcmFwcGVyTWFwPE5vZGU+JiBnZXRET01Ob2RlTWFwKHY4OjpJc29sYXRlKiA9
IDApOworICAgIERPTVdyYXBwZXJNYXA8Tm9kZT4mIGdldEFjdGl2ZURPTU5vZGVNYXAodjg6Oklz
b2xhdGUqID0gMCk7CisgICAgdm9pZCB2aXNpdEFjdGl2ZURPTU5vZGVzKERPTVdyYXBwZXJWaXNp
dG9yPE5vZGU+Kik7CiAKICAgICBjbGFzcyBOb2RlV3JhcHBlclZpc2l0b3IgewogICAgIHB1Ymxp
YzoKQEAgLTE3MywxMSArNzAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgLy8gQSBt
YXAgZnJvbSBhIERPTSBvYmplY3QgKG5vbi1ub2RlKSB0byBpdHMgSlMgd3JhcHBlci4gVGhpcyBt
YXAgZG9lcyBub3QgY29udGFpbiB0aGUgRE9NIG9iamVjdHMgd2hpY2ggY2FuIGhhdmUgcGVuZGlu
ZyBhY3Rpdml0eSAoYWN0aXZlIGRvbSBvYmplY3RzKS4KICAgICBET01XcmFwcGVyTWFwPHZvaWQ+
JiBnZXRET01PYmplY3RNYXAodjg6Oklzb2xhdGUqID0gMCk7Ci0gICAgdm9pZCB2aXNpdERPTU9i
amVjdHMoRE9NV3JhcHBlck1hcDx2b2lkPjo6VmlzaXRvciopOworICAgIHZvaWQgdmlzaXRET01P
YmplY3RzKERPTVdyYXBwZXJWaXNpdG9yPHZvaWQ+Kik7CiAKICAgICAvLyBBIG1hcCBmcm9tIGEg
RE9NIG9iamVjdCB0byBpdHMgSlMgd3JhcHBlciBmb3IgRE9NIG9iamVjdHMgd2hpY2ggY2FuIGhh
dmUgcGVuZGluZyBhY3Rpdml0eS4KICAgICBET01XcmFwcGVyTWFwPHZvaWQ+JiBnZXRBY3RpdmVE
T01PYmplY3RNYXAodjg6Oklzb2xhdGUqID0gMCk7Ci0gICAgdm9pZCB2aXNpdEFjdGl2ZURPTU9i
amVjdHMoRE9NV3JhcHBlck1hcDx2b2lkPjo6VmlzaXRvciopOworICAgIHZvaWQgdmlzaXRBY3Rp
dmVET01PYmplY3RzKERPTVdyYXBwZXJWaXNpdG9yPHZvaWQ+Kik7CiAKICAgICAvLyBUaGlzIHNo
b3VsZCBiZSBjYWxsZWQgdG8gcmVtb3ZlIGFsbCBET00gb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGgg
dGhlIGN1cnJlbnQgdGhyZWFkIHdoZW4gaXQgaXMgdGVhcmluZyBkb3duLgogICAgIHZvaWQgcmVt
b3ZlQWxsRE9NT2JqZWN0cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XcmFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3Jh
cHBlci5jcHAKaW5kZXggMTcyODM1ODE4MzlhMTU1NzhiY2ZhNzk0ZTk2NWZiODk4MTY4NDYyZi4u
MzJkMDRmNzhiYTMyZTcyM2UyZTc4ZmJmOTE2N2YyY2VjNTE5ZmZhNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQg
VjhET01XcmFwcGVyOjpzZXROYW1lZEhpZGRlblJlZmVyZW5jZSh2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHBhcmVudCwgY29uc3QKIFdyYXBwZXJUeXBlSW5mbyogVjhET01XcmFwcGVyOjpkb21XcmFw
cGVyVHlwZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKIHsKICAgICBBU1NFUlQoVjhE
T01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdyYXBwZXJUeXBlSW5mbyo+KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxk
KHY4RE9NV3JhcHBlclR5cGVJbmRleCkpOworICAgIHJldHVybiB0b1dyYXBwZXJUeXBlSW5mbyhv
YmplY3QpOwogfQogCiBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IFY4RE9NV3JhcHBlcjo6d3JhcE5h
dGl2ZU5vZGVGaWx0ZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IGZpbHRlcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKaW5kZXggZmFkODJjOTVkYjVkNDk0M2M3MWY0
NDNjMWMxNDdkNWUzNmM5ZjgzZC4uZjExODU5YjA2ZjZjY2UwZGU5ZmY3MGI3Y2Q1NGRhMWJiN2I0
ZWY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKQEAgLTMy
LDYgKzMyLDcgQEAKICNkZWZpbmUgVjhET01XcmFwcGVyX2gKIAogI2luY2x1ZGUgIkRPTURhdGFT
dG9yZS5oIgorI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogI2luY2x1ZGUgIkV2ZW50Lmgi
CiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKQEAgLTEyMyw3ICsx
MjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUt
PndyYXBwZXIoKTsKIAogICAgICAgICAgICAgRE9NRGF0YVN0b3JlKiBzdG9yZSA9IGNvbnRleHQt
PndvcmxkKCktPmRvbURhdGFTdG9yZSgpOwotICAgICAgICAgICAgRE9NTm9kZU1hcHBpbmcmIGRv
bU5vZGVNYXAgPSBub2RlLT5pc0FjdGl2ZU5vZGUoKSA/IHN0b3JlLT5hY3RpdmVEb21Ob2RlTWFw
KCkgOiBzdG9yZS0+ZG9tTm9kZU1hcCgpOworICAgICAgICAgICAgRE9NV3JhcHBlck1hcDxOb2Rl
PiYgZG9tTm9kZU1hcCA9IG5vZGUtPmlzQWN0aXZlTm9kZSgpID8gc3RvcmUtPmFjdGl2ZURvbU5v
ZGVNYXAoKSA6IHN0b3JlLT5kb21Ob2RlTWFwKCk7CiAgICAgICAgICAgICByZXR1cm4gZG9tTm9k
ZU1hcC5nZXQobm9kZSk7CiAgICAgICAgIH0KICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDMzNzk5ODcxMTk2MWViMzM1ZmMwNGJj
NzBhMzAyYmQxZjk3ZjM2ODcuLjI1MWFhOGUzY2EwOWU4MTA0NWRjYWViYmUwYjhiNjM4OTBiZDAz
ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAK
QEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1
ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRl
ICJJbnRydXNpdmVET01XcmFwcGVyTWFwLmgiCiAjaW5jbHVkZSAiTWVtb3J5VXNhZ2VTdXBwb3J0
LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJSZXRhaW5lZERPTUluZm8u
aCIKQEAgLTY2LDIwICs2Nyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmbmRlZiBO
REVCVUcKLQotY2xhc3MgRW5zdXJlV2Vha0RPTU5vZGVWaXNpdG9yIDogcHVibGljIERPTVdyYXBw
ZXJNYXA8Tm9kZT46OlZpc2l0b3IgewotcHVibGljOgotICAgIHZvaWQgdmlzaXRET01XcmFwcGVy
KERPTURhdGFTdG9yZSosIE5vZGUqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVy
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHdyYXBwZXIuSXNXZWFrKCkpOwotICAgIH0KLX07Ci0K
LSNlbmRpZiAvLyBOREVCVUcKLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNzIEFjdGl2ZURP
TU9iamVjdFByb2xvZ3VlVmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPFQ+OjpWaXNpdG9y
IHsKK2NsYXNzIEFjdGl2ZURPTU9iamVjdFByb2xvZ3VlVmlzaXRvciA6IHB1YmxpYyBET01XcmFw
cGVyVmlzaXRvcjxUPiB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgQWN0aXZlRE9NT2JqZWN0UHJv
bG9ndWVWaXNpdG9yKFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4qIGxpdmVPYmpl
Y3RzKQogICAgICAgICA6IG1fbGl2ZU9iamVjdHMobGl2ZU9iamVjdHMpCkBAIC0xMDksNyArOTgs
NyBAQCBwcml2YXRlOgogICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4qIG1f
bGl2ZU9iamVjdHM7CiB9OwogCi1jbGFzcyBPYmplY3RWaXNpdG9yIDogcHVibGljIERPTVdyYXBw
ZXJNYXA8dm9pZD46OlZpc2l0b3IgeworY2xhc3MgT2JqZWN0VmlzaXRvciA6IHB1YmxpYyBET01X
cmFwcGVyVmlzaXRvcjx2b2lkPiB7CiBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIo
RE9NRGF0YVN0b3JlKiBzdG9yZSwgdm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0PiB3cmFwcGVyKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4TlBPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhOUE9iamVj
dC5jcHAKaW5kZXggYTViM2QxZGViM2VhODk1NDQyZmI4MWRjMDE3NmYwMzQxYmQ5NWY1OC4uNGU1
MjgzYjE4NTIxZWFjOTJmMTFhZWE5Yjg0NjI5YWQzMTZjNzk0ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAKQEAgLTE2MSwyNSArMTYxLDQ2IEBAIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBucE9iamVjdEludm9rZURlZmF1bHRIYW5kbGVyKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCiB9CiAKIAotc3RhdGljIHZvaWQgd2Vha1RlbXBsYXRlQ2FsbGJhY2sodjg6
OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiwgdm9pZCogcGFyYW1ldGVyKTsKLQotLy8gTlBJZGVudGlm
aWVyIGlzIFByaXZhdGVJZGVudGlmaWVyKi4KLXN0YXRpYyBXZWFrUmVmZXJlbmNlTWFwPFByaXZh
dGVJZGVudGlmaWVyLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZT4mIHN0YXRpY1RlbXBsYXRlTWFwKCkK
K2NsYXNzIFY4TlBUZW1wbGF0ZU1hcAogewotICAgIHR5cGVkZWYgV2Vha1JlZmVyZW5jZU1hcDxQ
cml2YXRlSWRlbnRpZmllciwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU+IE1hcFR5cGU7Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChNYXBUeXBlLCB0ZW1wbGF0ZU1hcCwgKCZ3ZWFrVGVtcGxhdGVDYWxs
YmFjaykpOwotICAgIHJldHVybiB0ZW1wbGF0ZU1hcDsKLX0KK3B1YmxpYzoKKyAgICAvLyBOUElk
ZW50aWZpZXIgaXMgUHJpdmF0ZUlkZW50aWZpZXIqLgorICAgIHR5cGVkZWYgSGFzaE1hcDxQcml2
YXRlSWRlbnRpZmllciosIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiA+IE1h
cFR5cGU7CiAKLXN0YXRpYyB2b2lkIHdlYWtUZW1wbGF0ZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50
PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBwYXJhbWV0ZXIpCi17Ci0gICAgUHJpdmF0ZUlkZW50
aWZpZXIqIGlkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxQcml2YXRlSWRlbnRpZmllcio+KHBhcmFt
ZXRlcik7Ci0gICAgQVNTRVJUKGlkZW50aWZpZXIpOwotICAgIEFTU0VSVChzdGF0aWNUZW1wbGF0
ZU1hcCgpLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gZ2V0KFByaXZhdGVJZGVudGlmaWVyKiBrZXkpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9tYXAuZ2V0KGtleSk7CisgICAgfQogCi0gICAgc3RhdGljVGVtcGxhdGVNYXAo
KS5mb3JnZXQoaWRlbnRpZmllcik7Ci19CisgICAgdm9pZCBzZXQoUHJpdmF0ZUlkZW50aWZpZXIq
IGtleSwgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHdyYXBwZXIpCisgICAg
eworICAgICAgICBBU1NFUlQoIW1fbWFwLmNvbnRhaW5zKGtleSkpOworICAgICAgICBtX21hcC5z
ZXQoa2V5LCB3cmFwcGVyKTsKKyAgICAgICAgd3JhcHBlci5NYWtlV2VhayhrZXksIHdlYWtDYWxs
YmFjayk7CisgICAgfQogCisgICAgc3RhdGljIFY4TlBUZW1wbGF0ZU1hcCYgc2hhcmVkSW5zdGFu
Y2UoKQorICAgIHsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWOE5QVGVtcGxhdGVNYXAs
IG1hcCwgKCkpOworICAgICAgICByZXR1cm4gbWFwOworICAgIH0KKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgdm9pZCB3ZWFrQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3Qs
IHZvaWQqIGNvbnRleHQpCisgICAgeworICAgICAgICBzaGFyZWRJbnN0YW5jZSgpLmRpc3Bvc2Uo
c3RhdGljX2Nhc3Q8UHJpdmF0ZUlkZW50aWZpZXIqPihjb250ZXh0KSk7CisgICAgfQorCisgICAg
dm9pZCBkaXNwb3NlKFByaXZhdGVJZGVudGlmaWVyKiBrZXkpCisgICAgeworICAgICAgICBNYXBU
eXBlOjppdGVyYXRvciBpdCA9IG1fbWFwLmZpbmQoa2V5KTsKKyAgICAgICAgQVNTRVJUKGl0ICE9
IG1fbWFwLmVuZCgpKTsKKyAgICAgICAgaXQtPnZhbHVlLkRpc3Bvc2UoKTsKKyAgICAgICAgbV9t
YXAucmVtb3ZlKGl0KTsKKyAgICB9CisKKyAgICBNYXBUeXBlIG1fbWFwOworfTsKIAogc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBucE9iamVjdEdldFByb3BlcnR5KHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiBzZWxmLCBOUElkZW50aWZpZXIgaWRlbnRpZmllciwgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4ga2V5LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKQEAgLTIxNiwxNCArMjM3LDE0IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbnBPYmplY3RHZXRQcm9wZXJ0eSh2ODo6TG9jYWw8
djg6Ok9iamVjdD4gc2VsZiwgTlBJCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihSZWZl
cmVuY2VFcnJvciwgIk5QT2JqZWN0IGRlbGV0ZWQiLCBpc29sYXRlKTsKIAogICAgICAgICBQcml2
YXRlSWRlbnRpZmllciogaWQgPSBzdGF0aWNfY2FzdDxQcml2YXRlSWRlbnRpZmllcio+KGlkZW50
aWZpZXIpOwotICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZnVu
Y3Rpb25UZW1wbGF0ZSA9IHN0YXRpY1RlbXBsYXRlTWFwKCkuZ2V0KGlkKTsKKyAgICAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGZ1bmN0aW9uVGVtcGxhdGUgPSBWOE5Q
VGVtcGxhdGVNYXA6OnNoYXJlZEluc3RhbmNlKCkuZ2V0KGlkKTsKICAgICAgICAgLy8gQ2FjaGUg
dGVtcGxhdGVzIHVzaW5nIGlkZW50aWZpZXIgYXMgdGhlIGtleS4KICAgICAgICAgaWYgKGZ1bmN0
aW9uVGVtcGxhdGUuSXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgdGVt
cGxhdGUuCiAgICAgICAgICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXAg
PSB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KCk7CiAgICAgICAgICAgICB0ZW1wLT5TZXRDYWxs
SGFuZGxlcihucE9iamVjdE1ldGhvZEhhbmRsZXIsIGtleSk7CiAgICAgICAgICAgICBmdW5jdGlv
blRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcodGVt
cCk7Ci0gICAgICAgICAgICBzdGF0aWNUZW1wbGF0ZU1hcCgpLnNldChpZCwgZnVuY3Rpb25UZW1w
bGF0ZSk7CisgICAgICAgICAgICBWOE5QVGVtcGxhdGVNYXA6OnNoYXJlZEluc3RhbmNlKCkuc2V0
KGlkLCBmdW5jdGlvblRlbXBsYXRlKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEZ1bmN0aW9u
VGVtcGxhdGUgY2FjaGVzIGZ1bmN0aW9uIGZvciBlYWNoIGNvbnRleHQuCkBAIC0zNTUsMjkgKzM3
NiwzMiBAQCB2ODo6SGFuZGxlPHY4OjpBcnJheT4gbnBPYmplY3RJbmRleGVkUHJvcGVydHlFbnVt
ZXJhdG9yKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mCiAgICAgcmV0dXJuIG5wT2JqZWN0UHJvcGVy
dHlFbnVtZXJhdG9yKGluZm8sIGZhbHNlKTsKIH0KIAotc3RhdGljIHZvaWQgd2Vha05QT2JqZWN0
Q2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiwgdm9pZCogcGFyYW1ldGVyKTsKK3N0
YXRpYyB2b2lkIHdlYWtOUE9iamVjdENhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4s
IHZvaWQqKTsKIAotc3RhdGljIERPTVdyYXBwZXJNYXA8TlBPYmplY3Q+JiBzdGF0aWNOUE9iamVj
dE1hcCgpCitzdGF0aWMgRE9NV3JhcHBlckhhc2hNYXA8TlBPYmplY3Q+JiBzdGF0aWNOUE9iamVj
dE1hcCgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChET01XcmFwcGVyTWFwPE5QT2JqZWN0
PiwgbnBPYmplY3RNYXAsICgmd2Vha05QT2JqZWN0Q2FsbGJhY2spKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKERPTVdyYXBwZXJIYXNoTWFwPE5QT2JqZWN0PiwgbnBPYmplY3RNYXAsICgmd2Vh
a05QT2JqZWN0Q2FsbGJhY2spKTsKICAgICByZXR1cm4gbnBPYmplY3RNYXA7CiB9CiAKLXN0YXRp
YyB2b2lkIHdlYWtOUE9iamVjdENhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2Jq
ZWN0LCB2b2lkKiBwYXJhbWV0ZXIpCitzdGF0aWMgdm9pZCB3ZWFrTlBPYmplY3RDYWxsYmFjayh2
ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHZhbHVlLCB2b2lkKikKIHsKLSAgICBOUE9iamVjdCog
bnBPYmplY3QgPSBzdGF0aWNfY2FzdDxOUE9iamVjdCo+KHBhcmFtZXRlcik7Ci0gICAgQVNTRVJU
KHN0YXRpY05QT2JqZWN0TWFwKCkuY29udGFpbnMobnBPYmplY3QpKTsKKyAgICBBU1NFUlQodmFs
dWUtPklzT2JqZWN0KCkpOworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIg
PSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSk7CisgICAgTlBPYmplY3Qq
IG5wT2JqZWN0ID0gc3RhdGljX2Nhc3Q8TlBPYmplY3QqPih0b05hdGl2ZSh3cmFwcGVyKSk7CisK
ICAgICBBU1NFUlQobnBPYmplY3QpOworICAgIEFTU0VSVChzdGF0aWNOUE9iamVjdE1hcCgpLmdl
dChucE9iamVjdCkgPT0gd3JhcHBlcik7CiAKLSAgICAvLyBNdXN0IHJlbW92ZSBmcm9tIG91ciBt
YXAgYmVmb3JlIGNhbGxpbmcgX05QTl9SZWxlYXNlT2JqZWN0KCkuIF9OUE5fUmVsZWFzZU9iamVj
dCBjYW4gY2FsbCBGb3JnZXRWOE9iamVjdEZvck5QT2JqZWN0LCB3aGljaAotICAgIC8vIHVzZXMg
dGhlIHRhYmxlIGFzIHdlbGwuCi0gICAgc3RhdGljTlBPYmplY3RNYXAoKS5mb3JnZXQobnBPYmpl
Y3QpOworICAgIC8vIE11c3QgcmVtb3ZlIGZyb20gb3VyIG1hcCBiZWZvcmUgY2FsbGluZyBfTlBO
X1JlbGVhc2VPYmplY3QoKS4gX05QTl9SZWxlYXNlT2JqZWN0IGNhbgorICAgIC8vIGNhbGwgZm9y
Z2V0VjhPYmplY3RGb3JOUE9iamVjdCwgd2hpY2ggdXNlcyB0aGUgdGFibGUgYXMgd2VsbC4KKyAg
ICBzdGF0aWNOUE9iamVjdE1hcCgpLnJlbW92ZShucE9iamVjdCwgd3JhcHBlcik7CisgICAgd3Jh
cHBlci5EaXNwb3NlKCk7CiAKICAgICBpZiAoX05QTl9Jc0FsaXZlKG5wT2JqZWN0KSkKICAgICAg
ICAgX05QTl9SZWxlYXNlT2JqZWN0KG5wT2JqZWN0KTsKIH0KIAotCiB2ODo6TG9jYWw8djg6Ok9i
amVjdD4gY3JlYXRlVjhPYmplY3RGb3JOUE9iamVjdChOUE9iamVjdCogb2JqZWN0LCBOUE9iamVj
dCogcm9vdCkKIHsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IG5wT2JqZWN0RGVzYzsKQEAgLTM5MSw4ICs0MTUsOSBAQCB2ODo6TG9jYWw8djg6Ok9iamVj
dD4gY3JlYXRlVjhPYmplY3RGb3JOUE9iamVjdChOUE9iamVjdCogb2JqZWN0LCBOUE9iamVjdCog
cm9vdAogICAgIH0KIAogICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgd3JhcHBlZCB0aGlzIG9iamVj
dCwganVzdCByZXR1cm4gaXQuCi0gICAgaWYgKHN0YXRpY05QT2JqZWN0TWFwKCkuY29udGFpbnMo
b2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6TmV3KHN0YXRp
Y05QT2JqZWN0TWFwKCkuZ2V0KG9iamVjdCkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcHBlciA9IHN0YXRpY05QT2JqZWN0TWFwKCkuZ2V0KG9iamVjdCk7CisgICAgaWYgKCF3cmFw
cGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6TmV3
KHdyYXBwZXIpOwogCiAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBjcmVhdGUgYSBXcmFwcGVyIHR5
cGUgYXMgYSBzdWJjbGFzcyBvZiBKU09iamVjdC4gSXQgaGFzIHR3byBpbnRlcm5hbCBmaWVsZHMs
IGZpZWxkIDAgaXMgdGhlIHdyYXBwZWQKICAgICAvLyBwb2ludGVyLCBhbmQgZmllbGQgMSBpcyB0
aGUgdHlwZS4gVGhlcmUgc2hvdWxkIGJlIGFuIGFwaSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdW51
c2VkIHR5cGUgaWQuIFRoZSBzYW1lIFdyYXBwZXIgdHlwZQpAQCAtNDI4LDExICs0NTMsMTIgQEAg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IGNyZWF0ZVY4T2JqZWN0Rm9yTlBPYmplY3QoTlBPYmplY3Qq
IG9iamVjdCwgTlBPYmplY3QqIHJvb3QKIAogdm9pZCBmb3JnZXRWOE9iamVjdEZvck5QT2JqZWN0
KE5QT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgaWYgKHN0YXRpY05QT2JqZWN0TWFwKCkuY29udGFp
bnMob2JqZWN0KSkgeworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBz
dGF0aWNOUE9iamVjdE1hcCgpLmdldChvYmplY3QpOworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5
KCkpIHsKICAgICAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiBoYW5kbGUoc3RhdGljTlBPYmplY3RNYXAoKS5nZXQob2JqZWN0KSk7
Ci0gICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihoYW5kbGUsIG5wT2JqZWN0VHlw
ZUluZm8oKSwgMCk7Ci0gICAgICAgIHN0YXRpY05QT2JqZWN0TWFwKCkuZm9yZ2V0KG9iamVjdCk7
CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyLCBucE9iamVjdFR5
cGVJbmZvKCksIDApOworICAgICAgICBzdGF0aWNOUE9iamVjdE1hcCgpLnJlbW92ZShvYmplY3Qs
IHdyYXBwZXIpOworICAgICAgICB3cmFwcGVyLkRpc3Bvc2UoKTsKICAgICAgICAgX05QTl9SZWxl
YXNlT2JqZWN0KG9iamVjdCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9XcmFwcGVyVHlwZUluZm8uaAppbmRleCBhNGJkNDk5OGRkZDZlNjE0ZmY3ZjAwNWE1ZTcxMzgw
N2M3NDUyNDFiLi4zYTJkYWQ1ZTdmZDEzNzA0Y2Q3YzI4NmE4MDcyNjZjNjljYTA3OWFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaApAQCAtMTE2LDYg
KzExNiwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0IFdyYXBwZXJUeXBl
SW5mbyogcGFyZW50Q2xhc3M7CiAgICAgICAgIGNvbnN0IFdyYXBwZXJUeXBlUHJvdG90eXBlIHdy
YXBwZXJUeXBlUHJvdG90eXBlOwogICAgIH07CisKKyAgICBpbmxpbmUgdm9pZCogdG9OYXRpdmUo
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCisgICAgeworICAgICAgICBBU1NFUlQob2Jq
ZWN0LT5JbnRlcm5hbEZpZWxkQ291bnQoKSA+PSB2OERPTVdyYXBwZXJPYmplY3RJbmRleCk7Cisg
ICAgICAgIHJldHVybiBvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERPTVdy
YXBwZXJPYmplY3RJbmRleCk7CisgICAgfQorCisgICAgaW5saW5lIFdyYXBwZXJUeXBlSW5mbyog
dG9XcmFwcGVyVHlwZUluZm8odjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCisgICAgewor
ICAgICAgICBBU1NFUlQob2JqZWN0LT5JbnRlcm5hbEZpZWxkQ291bnQoKSA+PSB2OERPTVdyYXBw
ZXJUeXBlSW5kZXgpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V3JhcHBlclR5cGVJbmZv
Kj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyVHlwZUlu
ZGV4KSk7CisgICAgfQorCiB9CiAKICNlbmRpZiAvLyBXcmFwcGVyVHlwZUluZm9faAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>