<?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>178505</bug_id>
          
          <creation_ts>2017-10-18 23:36:34 -0700</creation_ts>
          <short_desc>Add an argument indicating the type of removal to Node::removedFrom</short_desc>
          <delta_ts>2017-10-20 14:31:28 -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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=178431</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1362064</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-18 23:36:34 -0700</bug_when>
    <thetext>In order to have a better guarantee of node flags,  etc... we need to have an argument
indicating what kind of insertion mutation and happened to removedFrom like https://trac.webkit.org/changeset/223628.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362070</commentid>
    <comment_count>1</comment_count>
      <attachid>324211</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-19 00:11:49 -0700</bug_when>
    <thetext>Created attachment 324211
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362073</commentid>
    <comment_count>2</comment_count>
      <attachid>324212</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-19 00:17:02 -0700</bug_when>
    <thetext>Created attachment 324212
Updated for trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362091</commentid>
    <comment_count>3</comment_count>
      <attachid>324212</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-10-19 02:21:17 -0700</bug_when>
    <thetext>Comment on attachment 324212
Updated for trunk

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362099</commentid>
    <comment_count>4</comment_count>
      <attachid>324212</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-19 03:05:25 -0700</bug_when>
    <thetext>Comment on attachment 324212
Updated for trunk

Clearing flags on attachment: 324212

Committed r223685: &lt;https://trac.webkit.org/changeset/223685&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362100</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-19 03:05:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362864</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-20 14:31:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/35102409&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324211</attachid>
            <date>2017-10-19 00:11:49 -0700</date>
            <delta_ts>2017-10-19 00:17:00 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-178505-20171019001148.patch</filename>
            <type>text/plain</type>
            <size>69467</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MSBAQAorMjAxNy0xMC0xOCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgYW4gYXJndW1lbnQgaW5k
aWNhdGluZyB0aGUgdHlwZSBvZiByZW1vdmFsIHRvIE5vZGU6OnJlbW92ZWRGcm9tCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzg1MDUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMaWtlIHIyMjM2MjgsIGFk
ZGVkIFJlbW92YWxUeXBlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBOb2RlOjpyZW1vdmVkRnJv
bSwgd2hpY2ggY29udGFpbnMgdHdvIGJvb2xlYW5zIGluZGljYXRpbmcKKyAgICAgICAgd2hldGhl
ciB0aGUgbm9kZSBqdXN0IGJlY29tZSBkaXNjb25uZWN0ZWQgZnJvbSBhIGRvY3VtZW50LCBhbmQg
d2hldGhlciBub2RlJ3MgdHJlZSBzY29wZSBoYWQgY2hhbmdlZCBvciBub3QuCisKKyAgICAgICAg
VGhlc2UgYm9vbGVhbiBmbGFncyBzaW1wbGlmaWVzIHRoZSBsb2dpYyBpbiByZW1vdmVkRnJvbSBp
bXBsZW1lbnRhdGlvbnMsIGFuZCBhcmUgcmVxdWlyZWQgdG8gaGF2ZSBhIGJldHRlcgorICAgICAg
ICBndWFyYW50ZWUgYWJvdXQgdGhlIGNvcnJlY3RuZXNzIG9mIG5vZGUgZmxhZ3MgZHVyaW5nIGNh
bGxzIHRvIHJlbW92ZWRGcm9tLiBSaWdodCBub3csIE5vZGU6OmlzQ29ubmVjdGVkKCkgYW5kCisg
ICAgICAgIE5vZGU6OmlzSW5TaGFkb3dUcmVlKCkgYXJlIGJvdGggb3V0ZGF0ZWQgdW50aWwgTm9k
ZTo6cmVtb3ZlZEZyb20gaXMgY2FsbGVkLgorCisgICAgICAgIEFsc28gcmVuYW1lZCB0aGUgc2Vj
b25kIGFyZ3VtZW50IG9mIHJlbW92ZWRGcm9tIHRvIHBhcmVudE9mUmVtb3ZlZFRyZWUgdG8gbWFr
ZSB0aGUgc2VtYW50aWNzIGNsZWFyLgorCisgICAgICAgIE5vdGUgdGhhdCBpbiBzb21lIGltcGxl
bWVudGF0aW9ucyBvZiByZW1vdmVkRnJvbSwgd2UgY2hlY2sgd2hldGhlciBpc0Nvbm5lY3RlZCgp
IHdhcyB0cnVlIHRvIGRlY2lkZSB3aGV0aGVyCisgICAgICAgIHRoZSBub2RlIGhhZCBhbHJlYWR5
IGJlZW4gZGlzY29ubmVjdGVkIGZyb20gYSBkb2N1bWVudCBwcmlvciB0byBjYWxscyB0byB0aGlz
IHBhcnRpY3VsYXIgY2FsbCBvZiByZW1vdmVkRnJvbS4KKyAgICAgICAgVGhpcyBleHRyYSBjaGVj
ayBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHNpbmNlIG5vIG5vZGUgd2lsbCBiZSByZW1vdmVkIGZy
b20gYSBkb2N1bWVudCB3aXRob3V0IGZpcnN0IGJlaW5nIGluc2VydGVkCisgICAgICAgIGNvbXBs
ZXRlbHkgc29tZXdoZXJlIGFmdGVyIHIyMjM0NTguCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNp
bmNlIHRoZXJlIHNob3VsZCBiZSBubyBiZWhhdmlvcmFsIGNoYW5nZXMuCisKKyAgICAgICAgKiBk
b20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5
Tm9kZUluc2VydGVkSW50b0RvY3VtZW50KTogUmVwbGFjZWQgUkVMRUFTRV9BU1NFUlQgd2l0aCBS
RUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OLgorICAgICAgICAoV2ViQ29y
ZTo6bm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQpOiBSZXBsYWNlZCB0aGUgY2hlY2sgdGhh
dCB0aGUgbm9kZSBoYWQgbm90IGJlZW4gcmUtY29ubmVjdGVkIGJ5IHNjcmlwdHMKKyAgICAgICAg
YnkgYSByZWxlYXNlIGFzc2VydCBub3cgdGhhdCB3ZSBiZWxpZXZlIHdlJ3ZlIGVsaW1pbmF0ZWQg
YWxsIGNhdXNlcyBvZiB0aGVzZSB1bndhbnRlZCBET00gbXV0YXRpb25zIGluIHIyMjM0NTguCisg
ICAgICAgIEFsc28gbW92ZWQgdGhlIGNvZGUgdG8gY2FsbCBzZXRDU1NUYXJnZXQgdG8gRWxlbWVu
dDo6cmVtb3ZlZEZyb20uIFRoaXMgcmFuZG9tIGNhbGwgdG8gc2V0Q1NTVGFyZ2V0IHByZWRhdGVz
IHIxMTQzNTEsCisgICAgICAgIGFzIHdlbGwgYXMgcjQwNDc1LiBJdCB3YXMgb3JpZ2luYWxseSBp
bnRyb2R1Y2VkIGJ5IHIyOTMxMSBpbnRvIE5vZGU6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKSB0ZW4g
eWVhcnMgYWdvLgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZSk6
IE1vdmVkIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbiB0byBub3RpZnlDaGlsZE5vZGVSZW1vdmVk
LgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5Q2hpbGROb2RlUmVtb3ZlZCk6IEFkZGVkIE5vRXZl
bnREaXNwYXRjaEFzc2VydGlvbi4KKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRo
bXMuaDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpyZW1vdmVkRnJvbSk6IFJlcGxhY2VkIHRoZSBjb21wbGljYXRlZCBjb2RlIHRvIGRldGVj
dCB3aGVuIHRoaXMgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gYSBkb2N1bWVudAorICAgICAgICBh
bmQgaXRzIHRyZWUgc2NvcGUgaGFkIGNoYW5nZWQgYnkgcmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVk
RnJvbURvY3VtZW50IGFuZCByZW1vdmFsVHlwZS50cmVlU2NvcGVDaGFuZ2VkLgorICAgICAgICAq
IGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6cmVtb3ZlZEZyb20pOgorICAgICAgICAqIGRvbS9Ob2RlLmg6IFJlcGxhY2VkIGEg
bG9uZyBibG9jayBvZiBjb21tZW50cyBhYm92ZSBpbnNlcnRlZEludG8gYnkgdHdvIGxpbmVzIG9m
IGNvbmNpc2UgY29tbWVudHMgbm93IHRoYXQKKyAgICAgICAgdGhlIHNlbWFudGljcyBvZiBpbnNl
cnRlZEludG8gYW5kIGRpZEZpbmlzaEluc2VydGluZ05vZGUgYXJlIG1vcmUgY2xlYXIsIGFuZCBl
bmZvcmNlZCBieSBhc3NlcnRpb25zLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6UmVtb3ZhbFR5
cGU6OlJlbW92YWxUeXBlKTogQWRkZWRsCisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0cnVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnJlbW92
ZWRGcm9tKToKKyAgICAgICAgKiBkb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmg6CisgICAgICAg
ICogZG9tL1NoYWRvd1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6cmVt
b3ZlZEZyb20pOiBUaGUgZXh0cmEgIWlzQ29ubmVjdGVkKCkgY2hlY2sgaXMgbm8gbG9uZ2VyIG5l
ZWRlZC4gU2VlIHRoZSBkZXNjcmlwdGlvbiBhYm92ZS4KKyAgICAgICAgKiBkb20vU2hhZG93Um9v
dC5oOgorICAgICAgICAqIGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICAq
IGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MQmFzZUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJhc2VFbGVtZW50OjpyZW1vdmVkRnJv
bSk6CisgICAgICAgICogaHRtbC9IVE1MQmFzZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250
cm9sRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9s
RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
OjpyZW1vdmVkRnJvbSk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0
aFN0YXRlLmg6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgICogaHRtbC9I
VE1MRm9ybUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudDo6cmVtb3ZlZEZyb20pOgor
ICAgICAgICAqIGh0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRN
TEltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Ojpy
ZW1vdmVkRnJvbSk6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
aDoKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTGlua0VsZW1lbnQ6OnJlbW92ZWRGcm9tKTogVGhlIGV4dHJhICFpc0Nvbm5lY3RlZCgp
IGNoZWNrIGlzIG5vIGxvbmdlciBuZWVkZWQuIFNlZSBhYm92ZS4KKyAgICAgICAgKiBodG1sL0hU
TUxMaW5rRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBo
dG1sL0hUTUxNYXBFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAg
ICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpyZW1v
dmVkRnJvbSk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvSFRNTFNsb3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTbG90RWxl
bWVudDo6cmVtb3ZlZEZyb20pOiBTaW1wbGlmaWVzIHRoZSBsb2dpYyB0byBkZXRlY3Qgd2hlbiB0
aGlzIHNsb3QgZWxlbWVudCBpcyBiZWluZworICAgICAgICByZW1vdmVkIGZyb20gYSBzaGFkb3cg
dHJlZSB1c2luZyByZW1vdmFsVHlwZS50cmVlU2NvcGVDaGFuZ2VkLgorICAgICAgICAqIGh0bWwv
SFRNTFNsb3RFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MU291cmNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKTogQWRk
ZWQgYSBGSVhNRSBmb3IgYW4gb2J2aW91cyBidWcuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU291
cmNlRWxlbWVudDo6cmVtb3ZlZEZyb20pOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxTb3Vy
Y2VFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBo
dG1sL0hUTUxTdHlsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxUaXRsZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudDo6cmVtb3ZlZEZyb20pOgor
ICAgICAgICAqIGh0bWwvSFRNTFRpdGxlRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRy
YWNrRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJhY2tFbGVtZW50OjpyZW1v
dmVkRnJvbSk6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTFRyYWNrRWxlbWVudC5oOgorICAg
ICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6
OnJlbW92ZWRGcm9tKTogUmVwbGFjZWQgaXNDb25uZWN0ZWQoKSBjaGVjayBiZWZvcmUgY2FsbGlu
ZyBOb2RlOjpyZW1vdmVkRnJvbSBieSB0aGUgY2hlY2sgb2YKKyAgICAgICAgcmVtb3ZhbFR5cGUu
ZGlzY29ubmVjdGVkRnJvbURvY3VtZW50LgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50Lmg6Cisg
ICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFSW1hZ2VFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBz
dmcvU1ZHRm9udEZhY2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR01QYXRoRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAg
ICAgICAgKiBzdmcvU1ZHTVBhdGhFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpyZW1vdmVkRnJvbSk6
CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1NWR0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20p
OgorICAgICAgICAqIHN2Zy9TVkdTVkdFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N0eWxl
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OnJlbW92ZWRG
cm9tKTogVGhlIGV4dHJhICFpc0Nvbm5lY3RlZCgpIGNoZWNrIGlzIG5vIGxvbmdlciBuZWVkZWQu
IFNlZSBhYm92ZS4KKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVFbGVtZW50Lmg6CisgICAgICAgICog
c3ZnL1NWR1RSZWZFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50
OjpyZW1vdmVkRnJvbSk6CisgICAgICAgICogc3ZnL1NWR1RSZWZFbGVtZW50Lmg6CisgICAgICAg
ICogc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0
UGF0aEVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBzdmcvU1ZHVGV4dFBhdGhFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1RpdGxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUaXRsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBzdmcvU1ZHVGl0
bGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICAqIHN2Zy9TVkdV
c2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAg
ICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaDoKKwogMjAxNy0xMC0xOCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBEb24ndCBleHBvc2UgcmF3IEhU
TUwgaW4gcGFzdGVib2FyZCB0byB0aGUgd2ViIGNvbnRlbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAkocmV2aXNpb24gMjIzNjI4KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBzdGF0aWMgdm9pZCBub3RpZnlOb2RlSW5zZXJ0ZWRJ
bnRvRG9jdW1lCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoUmVmUHRyPE5vZGU+IGNoaWxk
ID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4obm9kZSkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChub2Rl
LmlzQ29ubmVjdGVkKCkgJiYgY2hpbGQtPnBhcmVudE5vZGUoKSA9PSAmbm9kZSk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5pc0Nvbm5lY3Rl
ZCgpICYmIGNoaWxkLT5wYXJlbnROb2RlKCkgPT0gJm5vZGUpOwogICAgICAgICBub3RpZnlOb2Rl
SW5zZXJ0ZWRJbnRvRG9jdW1lbnQocGFyZW50T2ZJbnNlcnRlZFRyZWUsICpjaGlsZCwgdHJlZVNj
b3BlQ2hhbmdlLCBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7CiAgICAgfQogCkBA
IC01Niw3ICs1Niw3IEBAIHN0YXRpYyB2b2lkIG5vdGlmeU5vZGVJbnNlcnRlZEludG9Eb2N1bWUK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKFJlZlB0cjxTaGFkb3dSb290PiByb290ID0gZG93
bmNhc3Q8RWxlbWVudD4obm9kZSkuc2hhZG93Um9vdCgpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKG5vZGUuaXNDb25uZWN0ZWQoKSAmJiByb290LT5ob3N0KCkgPT0gJm5vZGUpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG5vZGUuaXNDb25uZWN0
ZWQoKSAmJiByb290LT5ob3N0KCkgPT0gJm5vZGUpOwogICAgICAgICBub3RpZnlOb2RlSW5zZXJ0
ZWRJbnRvRG9jdW1lbnQocGFyZW50T2ZJbnNlcnRlZFRyZWUsICpyb290LCBUcmVlU2NvcGVDaGFu
Z2U6OkRpZE5vdENoYW5nZSwgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOwogICAg
IH0KIH0KQEAgLTEwMyw1OCArMTAzLDU4IEBAIE5vZGVWZWN0b3Igbm90aWZ5Q2hpbGROb2RlSW5z
ZXJ0ZWQoQ29udGEKICAgICByZXR1cm4gcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHM7
CiB9CiAKLXN0YXRpYyB2b2lkIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURvY3VtZW50KENvbnRhaW5l
ck5vZGUmIGluc2VydGlvblBvaW50LCBOb2RlJiBub2RlKQorc3RhdGljIHZvaWQgbm90aWZ5Tm9k
ZVJlbW92ZWRGcm9tRG9jdW1lbnQoQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSwg
VHJlZVNjb3BlQ2hhbmdlIHRyZWVTY29wZUNoYW5nZSwgTm9kZSYgbm9kZSkKIHsKLSAgICBBU1NF
UlQoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSk7Ci0gICAgbm9kZS5yZW1vdmVkRnJvbShp
bnNlcnRpb25Qb2ludCk7CisgICAgQVNTRVJUKHBhcmVudE9mUmVtb3ZlZFRyZWUuaXNDb25uZWN0
ZWQoKSk7CisgICAgQVNTRVJUKG5vZGUuaXNDb25uZWN0ZWQoKSk7CisgICAgbm9kZS5yZW1vdmVk
RnJvbShOb2RlOjpSZW1vdmFsVHlwZSB7IC8qIGRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCAqLyB0
cnVlLCB0cmVlU2NvcGVDaGFuZ2UgPT0gVHJlZVNjb3BlQ2hhbmdlOjpDaGFuZ2VkIH0sIHBhcmVu
dE9mUmVtb3ZlZFRyZWUpOwogCiAgICAgaWYgKCFpczxDb250YWluZXJOb2RlPihub2RlKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgQ2hpbGROb2Rlc0xhenlTbmFwc2hvdCBzbmFwc2hvdChkb3du
Y2FzdDxDb250YWluZXJOb2RlPihub2RlKSk7Ci0gICAgd2hpbGUgKFJlZlB0cjxOb2RlPiBjaGls
ZCA9IHNuYXBzaG90Lm5leHROb2RlKCkpIHsKLSAgICAgICAgLy8gSWYgd2UgaGF2ZSBiZWVuIGFk
ZGVkIHRvIHRoZSBkb2N1bWVudCBkdXJpbmcgdGhpcyBsb29wLCB0aGVuIHdlCi0gICAgICAgIC8v
IGRvbid0IHdhbnQgdG8gdGVsbCB0aGUgcmVzdCBvZiBvdXIgY2hpbGRyZW4gdGhhdCB0aGV5J3Zl
IGJlZW4KLSAgICAgICAgLy8gcmVtb3ZlZCBmcm9tIHRoZSBkb2N1bWVudCBiZWNhdXNlIHRoZXkg
aGF2ZW4ndC4KLSAgICAgICAgaWYgKCFub2RlLmlzQ29ubmVjdGVkKCkgJiYgY2hpbGQtPnBhcmVu
dE5vZGUoKSA9PSAmbm9kZSkKLSAgICAgICAgICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURvY3Vt
ZW50KGluc2VydGlvblBvaW50LCAqY2hpbGQuZ2V0KCkpOworICAgIGZvciAoUmVmUHRyPE5vZGU+
IGNoaWxkID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4obm9kZSkuZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlLmlzQ29ubmVjdGVkKCkgJiYgY2hpbGQt
PnBhcmVudE5vZGUoKSA9PSAmbm9kZSk7CisgICAgICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURv
Y3VtZW50KHBhcmVudE9mUmVtb3ZlZFRyZWUsIHRyZWVTY29wZUNoYW5nZSwgKmNoaWxkLmdldCgp
KTsKICAgICB9CiAKICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAobm9kZS5kb2N1bWVudCgpLmNzc1RhcmdldCgpID09ICZub2RlKQotICAgICAg
ICBub2RlLmRvY3VtZW50KCkuc2V0Q1NTVGFyZ2V0KG51bGxwdHIpOwotCiAgICAgaWYgKFJlZlB0
cjxTaGFkb3dSb290PiByb290ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkuc2hhZG93Um9vdCgp
KSB7Ci0gICAgICAgIGlmICghbm9kZS5pc0Nvbm5lY3RlZCgpICYmIHJvb3QtPmhvc3QoKSA9PSAm
bm9kZSkKLSAgICAgICAgICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURvY3VtZW50KGluc2VydGlv
blBvaW50LCAqcm9vdC5nZXQoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oIW5vZGUuaXNDb25uZWN0ZWQoKSAmJiByb290LT5ob3N0KCkgPT0gJm5v
ZGUpOworICAgICAgICBub3RpZnlOb2RlUmVtb3ZlZEZyb21Eb2N1bWVudChwYXJlbnRPZlJlbW92
ZWRUcmVlLCBUcmVlU2NvcGVDaGFuZ2U6OkRpZE5vdENoYW5nZSwgKnJvb3QuZ2V0KCkpOwogICAg
IH0KIH0KIAotc3RhdGljIHZvaWQgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZShDb250YWluZXJO
b2RlJiBpbnNlcnRpb25Qb2ludCwgTm9kZSYgbm9kZSkKK3N0YXRpYyB2b2lkIG5vdGlmeU5vZGVS
ZW1vdmVkRnJvbVRyZWUoQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSwgVHJlZVNj
b3BlQ2hhbmdlIHRyZWVTY29wZUNoYW5nZSwgTm9kZSYgbm9kZSkKIHsKLSAgICBOb0V2ZW50RGlz
cGF0Y2hBc3NlcnRpb24gYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwotICAgIEFTU0VSVCghaW5zZXJ0
aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSk7CisgICAgQVNTRVJUKCFwYXJlbnRPZlJlbW92ZWRUcmVl
LmlzQ29ubmVjdGVkKCkpOwogCi0gICAgbm9kZS5yZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7
CisgICAgbm9kZS5yZW1vdmVkRnJvbShOb2RlOjpSZW1vdmFsVHlwZSB7IC8qIGRpc2Nvbm5lY3Rl
ZEZyb21Eb2N1bWVudCAqLyBmYWxzZSwgdHJlZVNjb3BlQ2hhbmdlID09IFRyZWVTY29wZUNoYW5n
ZTo6Q2hhbmdlZCB9LCBwYXJlbnRPZlJlbW92ZWRUcmVlKTsKIAotICAgIGZvciAoTm9kZSogY2hp
bGQgPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpCi0gICAgICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUoaW5zZXJ0aW9uUG9pbnQsICpj
aGlsZCk7CisgICAgaWYgKCFpczxDb250YWluZXJOb2RlPihub2RlKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZm9yIChSZWZQdHI8Tm9kZT4gY2hpbGQgPSBkb3duY2FzdDxDb250YWluZXJOb2Rl
Pihub2RlKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KQorICAgICAgICBub3RpZnlOb2RlUmVtb3ZlZEZyb21UcmVlKHBhcmVudE9mUmVtb3ZlZFRyZWUs
IHRyZWVTY29wZUNoYW5nZSwgKmNoaWxkKTsKIAogICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChSZWZQdHI8U2hhZG93Um9vdD4gcm9vdCA9IGRv
d25jYXN0PEVsZW1lbnQ+KG5vZGUpLnNoYWRvd1Jvb3QoKSkKLSAgICAgICAgbm90aWZ5Tm9kZVJl
bW92ZWRGcm9tVHJlZShpbnNlcnRpb25Qb2ludCwgKnJvb3QpOworICAgICAgICBub3RpZnlOb2Rl
UmVtb3ZlZEZyb21UcmVlKHBhcmVudE9mUmVtb3ZlZFRyZWUsIFRyZWVTY29wZUNoYW5nZTo6RGlk
Tm90Q2hhbmdlLCAqcm9vdCk7CiB9CiAKLXZvaWQgbm90aWZ5Q2hpbGROb2RlUmVtb3ZlZChDb250
YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCwgTm9kZSYgY2hpbGQpCit2b2lkIG5vdGlmeUNoaWxk
Tm9kZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSwgTm9kZSYgY2hp
bGQpCiB7CisgICAgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uIGFzc2VydE5vRXZlbnREaXNwYXRj
aDsKKworICAgIC8vIFRyZWUgc2NvcGUgaGFzIGNoYW5nZWQgaWYgdGhlIGNvbnRhaW5lciBub2Rl
IGZyb20gd2hpY2ggIm5vZGUiIGlzIHJlbW92ZWQgaXMgaW4gYSBkb2N1bWVudCBvciBhIHNoYWRv
dyByb290LgorICAgIGF1dG8gdHJlZVNjb3BlQ2hhbmdlID0gcGFyZW50T2ZSZW1vdmVkVHJlZS5p
c0luVHJlZVNjb3BlKCkgPyBUcmVlU2NvcGVDaGFuZ2U6OkNoYW5nZWQgOiBUcmVlU2NvcGVDaGFu
Z2U6OkRpZE5vdENoYW5nZTsKICAgICBpZiAoY2hpbGQuaXNDb25uZWN0ZWQoKSkKLSAgICAgICAg
bm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQoaW5zZXJ0aW9uUG9pbnQsIGNoaWxkKTsKKyAg
ICAgICAgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQocGFyZW50T2ZSZW1vdmVkVHJlZSwg
dHJlZVNjb3BlQ2hhbmdlLCBjaGlsZCk7CiAgICAgZWxzZQotICAgICAgICBub3RpZnlOb2RlUmVt
b3ZlZEZyb21UcmVlKGluc2VydGlvblBvaW50LCBjaGlsZCk7CisgICAgICAgIG5vdGlmeU5vZGVS
ZW1vdmVkRnJvbVRyZWUocGFyZW50T2ZSZW1vdmVkVHJlZSwgdHJlZVNjb3BlQ2hhbmdlLCBjaGls
ZCk7CiB9CiAKIHZvaWQgYWRkQ2hpbGROb2Rlc1RvRGVsZXRpb25RdWV1ZShOb2RlKiYgaGVhZCwg
Tm9kZSomIHRhaWwsIENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5oCShyZXZpc2lvbiAyMjM2MjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNyArMjcsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBOb2RlVmVjdG9y
IG5vdGlmeUNoaWxkTm9kZUluc2VydGVkKENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRU
cmVlLCBOb2RlJik7Ci12b2lkIG5vdGlmeUNoaWxkTm9kZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYg
aW5zZXJ0aW9uUG9pbnQsIE5vZGUmKTsKK3ZvaWQgbm90aWZ5Q2hpbGROb2RlUmVtb3ZlZChDb250
YWluZXJOb2RlJiBwYXJlbnRPZlJlbW92ZWRUcmVlLCBOb2RlJik7CiB2b2lkIHJlbW92ZURldGFj
aGVkQ2hpbGRyZW5JbkNvbnRhaW5lcihDb250YWluZXJOb2RlJik7CiAKIGVudW0gU3ViZnJhbWVE
aXNjb25uZWN0UG9saWN5IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDIy
MzYyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY4Myw3ICsxNjgzLDcgQEAgTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IEVsZW1lbnQ6Omlu
c2VydAogICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKLXZvaWQgRWxl
bWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCit2b2lkIEVs
ZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJOb2Rl
JiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAg
ICBpZiAoY29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCgpKQpAQCAtMTY5NiwzMCArMTY5NiwyNyBA
QCB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmCiAKICAgICBzZXRTYXZl
ZExheWVyU2Nyb2xsUG9zaXRpb24oU2Nyb2xsUG9zaXRpb24oKSk7CiAKLSAgICBpZiAoaW5zZXJ0
aW9uUG9pbnQuaXNJblRyZWVTY29wZSgpKSB7Ci0gICAgICAgIFRyZWVTY29wZSogb2xkU2NvcGUg
PSAmaW5zZXJ0aW9uUG9pbnQudHJlZVNjb3BlKCk7Ci0gICAgICAgIGJvb2wgYmVjb21lRGlzY29u
bmVjdGVkID0gaXNDb25uZWN0ZWQoKTsKLSAgICAgICAgSFRNTERvY3VtZW50KiBvbGREb2N1bWVu
dCA9IGJlY29tZURpc2Nvbm5lY3RlZCAmJiBpczxIVE1MRG9jdW1lbnQ+KG9sZFNjb3BlLT5kb2N1
bWVudFNjb3BlKCkpID8gJmRvd25jYXN0PEhUTUxEb2N1bWVudD4ob2xkU2NvcGUtPmRvY3VtZW50
U2NvcGUoKSkgOiBudWxscHRyOwotCi0gICAgICAgIC8vIENvbnRhaW5lck5vZGU6OnJlbW92ZUJl
dHdlZW4gYWx3YXlzIHNldHMgdGhlIHJlbW92ZWQgY2hpZCdzIHRyZWUgc2NvcGUgdG8gRG9jdW1l
bnQncyBidXQgSW5UcmVlU2NvcGUgZmxhZyBpcyB1bnNldCBpbiBOb2RlOjpyZW1vdmVkRnJvbS4K
LSAgICAgICAgLy8gU28gdGhpcyBlbGVtZW50IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgb2xk
IHRyZWUgc2NvcGUgb25seSBpZiBJblRyZWVTY29wZSBmbGFnIGlzIHNldCBhbmQgdGhpcyBlbGVt
ZW50J3MgdHJlZSBzY29wZSBpcyBEb2N1bWVudCdzLgotICAgICAgICBpZiAoIWlzSW5UcmVlU2Nv
cGUoKSB8fCAmdHJlZVNjb3BlKCkgIT0gJmRvY3VtZW50KCkpCisgICAgaWYgKHBhcmVudE9mUmVt
b3ZlZFRyZWUuaXNJblRyZWVTY29wZSgpKSB7CisgICAgICAgIFRyZWVTY29wZSogb2xkU2NvcGUg
PSAmcGFyZW50T2ZSZW1vdmVkVHJlZS50cmVlU2NvcGUoKTsKKyAgICAgICAgRG9jdW1lbnQqIG9s
ZERvY3VtZW50ID0gcmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50ID8gJm9sZFNj
b3BlLT5kb2N1bWVudFNjb3BlKCkgOiBudWxscHRyOworICAgICAgICBIVE1MRG9jdW1lbnQqIG9s
ZEhUTUxEb2N1bWVudCA9IG9sZERvY3VtZW50ICYmIGlzPEhUTUxEb2N1bWVudD4oKm9sZERvY3Vt
ZW50KSA/ICZkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCpvbGREb2N1bWVudCkgOiBudWxscHRyOwor
ICAgICAgICBpZiAoIXJlbW92YWxUeXBlLnRyZWVTY29wZUNoYW5nZWQpCiAgICAgICAgICAgICBv
bGRTY29wZSA9IG51bGxwdHI7CiAKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZFZhbHVl
ID0gZ2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgaWYgKCFpZFZhbHVlLmlzTnVsbCgpKSB7CiAg
ICAgICAgICAgICBpZiAob2xkU2NvcGUpCiAgICAgICAgICAgICAgICAgdXBkYXRlSWRGb3JUcmVl
U2NvcGUoKm9sZFNjb3BlLCBpZFZhbHVlLCBudWxsQXRvbSgpKTsKLSAgICAgICAgICAgIGlmIChv
bGREb2N1bWVudCkKLSAgICAgICAgICAgICAgICB1cGRhdGVJZEZvckRvY3VtZW50KCpvbGREb2N1
bWVudCwgaWRWYWx1ZSwgbnVsbEF0b20oKSwgQWx3YXlzVXBkYXRlSFRNTERvY3VtZW50TmFtZWRJ
dGVtTWFwcyk7CisgICAgICAgICAgICBpZiAob2xkSFRNTERvY3VtZW50KQorICAgICAgICAgICAg
ICAgIHVwZGF0ZUlkRm9yRG9jdW1lbnQoKm9sZEhUTUxEb2N1bWVudCwgaWRWYWx1ZSwgbnVsbEF0
b20oKSwgQWx3YXlzVXBkYXRlSFRNTERvY3VtZW50TmFtZWRJdGVtTWFwcyk7CiAgICAgICAgIH0K
IAogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVWYWx1ZSA9IGdldE5hbWVBdHRyaWJ1
dGUoKTsKICAgICAgICAgaWYgKCFuYW1lVmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIGlm
IChvbGRTY29wZSkKICAgICAgICAgICAgICAgICB1cGRhdGVOYW1lRm9yVHJlZVNjb3BlKCpvbGRT
Y29wZSwgbmFtZVZhbHVlLCBudWxsQXRvbSgpKTsKLSAgICAgICAgICAgIGlmIChvbGREb2N1bWVu
dCkKLSAgICAgICAgICAgICAgICB1cGRhdGVOYW1lRm9yRG9jdW1lbnQoKm9sZERvY3VtZW50LCBu
YW1lVmFsdWUsIG51bGxBdG9tKCkpOworICAgICAgICAgICAgaWYgKG9sZEhUTUxEb2N1bWVudCkK
KyAgICAgICAgICAgICAgICB1cGRhdGVOYW1lRm9yRG9jdW1lbnQoKm9sZEhUTUxEb2N1bWVudCwg
bmFtZVZhbHVlLCBudWxsQXRvbSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChvbGRTY29w
ZSAmJiBoYXNUYWdOYW1lKGxhYmVsVGFnKSkgewpAQCAtMTcyNywxNiArMTcyNCwyMSBAQCB2b2lk
IEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmCiAgICAgICAgICAgICAgICAgdXBk
YXRlTGFiZWwoKm9sZFNjb3BlLCBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGZvckF0
dHIpLCBudWxsQXRvbSgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChiZWNvbWVEaXNjb25u
ZWN0ZWQgJiYgVU5MSUtFTFkoaXNEZWZpbmVkQ3VzdG9tRWxlbWVudCgpKSkKKyAgICAgICAgaWYg
KG9sZERvY3VtZW50KSB7CisgICAgICAgICAgICBpZiAob2xkRG9jdW1lbnQtPmNzc1RhcmdldCgp
ID09IHRoaXMpCisgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnNldENTU1RhcmdldChudWxs
cHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZW1vdmFsVHlwZS5kaXNjb25uZWN0ZWRG
cm9tRG9jdW1lbnQgJiYgVU5MSUtFTFkoaXNEZWZpbmVkQ3VzdG9tRWxlbWVudCgpKSkKICAgICAg
ICAgICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlRGlzY29ubmVjdGVkQ2Fs
bGJhY2tJZk5lZWRlZCgqdGhpcyk7CiAgICAgfQogCiAgICAgaWYgKCFwYXJlbnROb2RlKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHNoYWRvd1Jvb3QgPSBpbnNlcnRpb25Qb2ludC5zaGFkb3dSb290
KCkpCisgICAgICAgIGlmIChhdXRvKiBzaGFkb3dSb290ID0gcGFyZW50T2ZSZW1vdmVkVHJlZS5z
aGFkb3dSb290KCkpCiAgICAgICAgICAgICBzaGFkb3dSb290LT5ob3N0Q2hpbGRFbGVtZW50RGlk
Q2hhbmdlKCp0aGlzKTsKICAgICB9CiAKLSAgICBDb250YWluZXJOb2RlOjpyZW1vdmVkRnJvbShp
bnNlcnRpb25Qb2ludCk7CisgICAgQ29udGFpbmVyTm9kZTo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5
cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOwogCiAgICAgaWYgKGhhc1BlbmRpbmdSZXNvdXJjZXMo
KSkKICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlRWxlbWVu
dEZyb21QZW5kaW5nUmVzb3VyY2VzKHRoaXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZp
c2lvbiAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NTIsNyArNTUyLDcgQEAgcHJvdGVjdGVkOgogICAgIEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50JiwgQ29uc3RydWN0aW9uVHlwZSk7CiAKICAgICBJbnNlcnRl
ZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsK
KyAgICB2b2lkIHJlbW92ZWRGcm9tKFJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmKSBvdmVycmlk
ZTsKICAgICB2b2lkIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCkgZmluYWw7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlckRpZFNldEF0dHJpYnV0ZXMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJl
dmlzaW9uIDIyMzYyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI1Myw5ICsxMjUzLDkgQEAgTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IE5vZGU6
Omluc2VydGVkSQogICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKLXZv
aWQgTm9kZTo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCit2b2lk
IE5vZGU6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJOb2Rl
JikKIHsKLSAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSkKKyAgICBpZiAocmVt
b3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KQogICAgICAgICBjbGVhckZsYWcoSXND
b25uZWN0ZWRGbGFnKTsKICAgICBpZiAoaXNJblNoYWRvd1RyZWUoKSAmJiAhdHJlZVNjb3BlKCku
cm9vdE5vZGUoKS5pc1NoYWRvd1Jvb3QoKSkKICAgICAgICAgY2xlYXJGbGFnKElzSW5TaGFkb3dU
cmVlRmxhZyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDIyMzYyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzMywyMSArNDMzLDYgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBjb25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1
ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyID0gTk9QU0VVRE8pOwogCi0gICAgLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLSAgICAvLyBOb3RpZmljYXRpb24gb2YgZG9jdW1lbnQgc3RydWN0dXJl
IGNoYW5nZXMgKHNlZSBDb250YWluZXJOb2RlLmggZm9yIG1vcmUgbm90aWZpY2F0aW9uIG1ldGhv
ZHMpCi0gICAgLy8KLSAgICAvLyBBdCBmaXJzdCwgV2ViS2l0IG5vdGlmaWVzIHRoZSBub2RlIHRo
YXQgaXQgaGFzIGJlZW4gaW5zZXJ0ZWQgaW50byB0aGUgZG9jdW1lbnQuIFRoaXMgaXMgY2FsbGVk
IGR1cmluZyBkb2N1bWVudCBwYXJzaW5nLCBhbmQgYWxzbwotICAgIC8vIHdoZW4gYSBub2RlIGlz
IGFkZGVkIHRocm91Z2ggdGhlIERPTSBtZXRob2RzIGluc2VydEJlZm9yZSgpLCBhcHBlbmRDaGls
ZCgpIG9yIHJlcGxhY2VDaGlsZCgpLiBUaGUgY2FsbCBoYXBwZW5zIF9hZnRlcl8gdGhlIG5vZGUg
aGFzIGJlZW4gYWRkZWQgdG8gdGhlIHRyZWUuCi0gICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRo
ZSBET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQgRE9NIGV2ZW50LCBidXQgZG9lcyBub3QgcmVx
dWlyZSB0aGUgb3ZlcmhlYWQgb2YgZXZlbnQKLSAgICAvLyBkaXNwYXRjaGluZy4KLSAgICAvLwot
ICAgIC8vIFdlYktpdCBub3RpZmllcyB0aGlzIGNhbGxiYWNrIHJlZ2FyZGxlc3MgaWYgdGhlIHN1
YnRyZWUgb2YgdGhlIG5vZGUgaXMgYSBkb2N1bWVudCB0cmVlIG9yIGEgZmxvYXRpbmcgc3VidHJl
ZS4KLSAgICAvLyBJbXBsZW1lbnRhdGlvbiBjYW4gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIHN1YnRy
ZWUgYnkgc2VlaW5nIGluc2VydGlvblBvaW50LT5pc0Nvbm5lY3RlZCgpLgotICAgIC8vCi0gICAg
Ly8gVGhlcmUgaXMgYW5vdGhlciBjYWxsYmFjayBuYW1lZCBkaWRGaW5pc2hJbnNlcnRpbmdOb2Rl
KCksIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgZGVzY2VuZGFudHMgYXJlIG5vdGlmaWVkLgot
ICAgIC8vIE9ubHkgYSBmZXcgc3ViY2xhc3NlcyBhY3R1YWxseSBuZWVkIHRoaXMuIFRvIHV0aWxp
emUgdGhpcywgdGhlIG5vZGUgc2hvdWxkIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6Ok5lZWRz
UG9zdEluc2VydGlvbkNhbGxiYWNrCi0gICAgLy8gZnJvbSBpbnNydGVkSW50bygpLgotICAgIC8v
CiAgICAgZW51bSBjbGFzcyBJbnNlcnRlZEludG9SZXN1bHQgewogICAgICAgICBEb25lLAogICAg
ICAgICBOZWVkc1Bvc3RJbnNlcnRpb25DYWxsYmFjaywKQEAgLTQ2MywxNSArNDQ4LDIyIEBAIHB1
YmxpYzoKICAgICAgICAgYm9vbCBjb25uZWN0ZWRUb0RvY3VtZW50IHsgZmFsc2UgfTsKICAgICAg
ICAgYm9vbCB0cmVlU2NvcGVDaGFuZ2VkIHsgZmFsc2UgfTsKICAgICB9OworICAgIC8vIENhbGxl
ZCAqYWZ0ZXIqIHRoaXMgbm9kZSBvciBpdHMgYW5jZXN0b3IgaXMgaW5zZXJ0ZWQgaW50byBhIG5l
dyBwYXJlbnQgKG1heSBvciBtYXkgbm90IGJlIGEgcGFydCBvZiBkb2N1bWVudCkgYnkgc2NyaXB0
cyBvciBwYXJzZXIuCisgICAgLy8gaW5zZXJ0ZWRJbnRvICoqTVVTVCBOT1QqKiBpbnZva2Ugc2Ny
aXB0cy4gUmV0dXJuIE5lZWRzUG9zdEluc2VydGlvbkNhbGxiYWNrIGFuZCBpbXBsZW1lbnQgZGlk
RmluaXNoSW5zZXJ0aW5nTm9kZSBpbnN0ZWFkIHRvIHJ1biBzY3JpcHRzLgogICAgIHZpcnR1YWwg
SW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWluZXJO
b2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSk7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaElu
c2VydGluZ05vZGUoKSB7IH0KIAotICAgIC8vIE5vdGlmaWVzIHRoZSBub2RlIHRoYXQgaXQgaXMg
bm8gbG9uZ2VyIHBhcnQgb2YgdGhlIHRyZWUuCi0gICAgLy8KLSAgICAvLyBUaGlzIGlzIGEgZHVh
bCBvZiBpbnNlcnRlZEludG8oKSwgYW5kIGlzIHNpbWlsYXIgdG8gdGhlIERPTU5vZGVSZW1vdmVk
RnJvbURvY3VtZW50IERPTSBldmVudCwgYnV0IGRvZXMgbm90IHJlcXVpcmUgdGhlIG92ZXJoZWFk
IG9mIGV2ZW50Ci0gICAgLy8gZGlzcGF0Y2hpbmcsIGFuZCBpcyBjYWxsZWQgX2FmdGVyXyB0aGUg
bm9kZSBpcyByZW1vdmVkIGZyb20gdGhlIHRyZWUuCi0gICAgLy8KLSAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpOworICAgIHN0cnVjdCBS
ZW1vdmFsVHlwZSB7CisjaWYgIUNPTVBJTEVSX1NVUFBPUlRTKE5TRE1JX0ZPUl9BR0dSRUdBVEVT
KQorICAgICAgICBSZW1vdmFsVHlwZShib29sIGRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCwgYm9v
bCB0cmVlU2NvcGVDaGFuZ2VkKQorICAgICAgICAgICAgOiBkaXNjb25uZWN0ZWRGcm9tRG9jdW1l
bnQoZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KQorICAgICAgICAgICAgLCB0cmVlU2NvcGVDaGFu
Z2VkKHRyZWVTY29wZUNoYW5nZWQpCisgICAgICAgIHsgfQorI2VuZGlmCisgICAgICAgIGJvb2wg
ZGlzY29ubmVjdGVkRnJvbURvY3VtZW50IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCB0cmVlU2Nv
cGVDaGFuZ2VkIHsgZmFsc2UgfTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJv
bShSZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSk7CiAKICNp
ZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCiAgICAgdmlydHVhbCB2b2lkIGZvcm1hdEZvckRlYnVn
Z2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCShyZXZpc2lvbiAyMjM2Mjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjg4LDEwICsyODgsMTAgQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246
OmRpZEZpbmlzaElucwogICAgIGNoZWNrU3R5bGVTaGVldCgpOwogfQogCi12b2lkIFByb2Nlc3Np
bmdJbnN0cnVjdGlvbjo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQp
Cit2b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6cmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUgcmVt
b3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mUmVtb3ZlZFRyZWUpCiB7Ci0gICAgQ2hh
cmFjdGVyRGF0YTo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9uUG9pbnQpOwotICAgIGlmICghaW5zZXJ0
aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSkKKyAgICBDaGFyYWN0ZXJEYXRhOjpyZW1vdmVkRnJvbShy
ZW1vdmFsVHlwZSwgcGFyZW50T2ZSZW1vdmVkVHJlZSk7CisgICAgaWYgKCFyZW1vdmFsVHlwZS5k
aXNjb25uZWN0ZWRGcm9tRG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBkb2N1
bWVudCgpLnN0eWxlU2NvcGUoKS5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSgqdGhpcyk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oCShyZXZp
c2lvbiAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHJpdmF0ZToKIAogICAgIEluc2Vy
dGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYp
IG92ZXJyaWRlOwogICAgIHZvaWQgZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOworICAgIHZvaWQg
cmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKIAogICAg
IHZvaWQgY2hlY2tTdHlsZVNoZWV0KCk7CiAgICAgdm9pZCBzZXRDU1NTdHlsZVNoZWV0KGNvbnN0
IFN0cmluZyYgaHJlZiwgY29uc3QgVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQs
IGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9TaGFkb3dSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
U2hhZG93Um9vdC5jcHAJKHJldmlzaW9uIDIyMzYyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9T
aGFkb3dSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTAgKzkzLDEwIEBAIE5vZGU6Oklu
c2VydGVkSW50b1Jlc3VsdCBTaGFkb3dSb290OjppbnMKICAgICByZXR1cm4gSW5zZXJ0ZWRJbnRv
UmVzdWx0OjpEb25lOwogfQogCi12b2lkIFNoYWRvd1Jvb3Q6OnJlbW92ZWRGcm9tKENvbnRhaW5l
ck5vZGUmIGluc2VydGlvblBvaW50KQordm9pZCBTaGFkb3dSb290OjpyZW1vdmVkRnJvbShSZW1v
dmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSkK
IHsKLSAgICBEb2N1bWVudEZyYWdtZW50OjpyZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7Ci0g
ICAgaWYgKGluc2VydGlvblBvaW50LmlzQ29ubmVjdGVkKCkgJiYgIWlzQ29ubmVjdGVkKCkpCisg
ICAgRG9jdW1lbnRGcmFnbWVudDo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9mUmVt
b3ZlZFRyZWUpOworICAgIGlmIChyZW1vdmFsVHlwZS5kaXNjb25uZWN0ZWRGcm9tRG9jdW1lbnQp
CiAgICAgICAgIGRvY3VtZW50KCkuZGlkUmVtb3ZlSW5Eb2N1bWVudFNoYWRvd1Jvb3QoKnRoaXMp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgJKHJldmlzaW9uIDIyMzYyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcg
Kzk1LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8Tm9kZT4gY2xvbmVOb2RlSW50ZXJuYWwoRG9jdW1l
bnQmLCBDbG9uaW5nT3BlcmF0aW9uKSBvdmVycmlkZTsKIAogICAgIE5vZGU6Okluc2VydGVkSW50
b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJy
aWRlOwotICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQp
IG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5v
ZGUmIGluc2VydGlvblBvaW50KSBvdmVycmlkZTsKICAgICB2b2lkIGRpZE1vdmVUb05ld0RvY3Vt
ZW50KERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KSBvdmVycmlk
ZTsKIAogICAgIGJvb2wgbV9yZXNldFN0eWxlSW5oZXJpdGFuY2UgeyBmYWxzZSB9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAkocmV2aXNp
b24gMjIzNjI4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRF
bGVtZW50OjppbnNlcnRlZEludG8KICAgICAgICAgcmVzZXRGb3JtQXR0cmlidXRlVGFyZ2V0T2Jz
ZXJ2ZXIoKTsKIH0KIAotdm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENv
bnRhaW5lck5vZGUmKQordm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tKE5v
ZGU6OlJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJikKIHsKICAgICBtX2Zvcm1BdHRyaWJ1dGVU
YXJnZXRPYnNlcnZlciA9IG51bGxwdHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9y
bUFzc29jaWF0ZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9G
b3JtQXNzb2NpYXRlZEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNjI4KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyAr
OTEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KEhUTUxGb3JtRWxl
bWVudCopOwogCiAgICAgdm9pZCBpbnNlcnRlZEludG8oTm9kZTo6SW5zZXJ0aW9uVHlwZSwgQ29u
dGFpbmVyTm9kZSYpOwotICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpOworICAg
IHZvaWQgcmVtb3ZlZEZyb20oTm9kZTo6UmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmKTsKICAg
ICB2b2lkIGRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVudCk7CiAKICAg
ICB2b2lkIHNldEZvcm0oSFRNTEZvcm1FbGVtZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxCYXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQmFzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxCYXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEwICs1OSwx
MCBAQCBOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTEJhc2VFbGVtZW50CiAgICAgcmV0dXJu
IEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAotdm9pZCBIVE1MQmFzZUVsZW1lbnQ6OnJl
bW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQordm9pZCBIVE1MQmFzZUVs
ZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJOb2Rl
JiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewotICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbShp
bnNlcnRpb25Qb2ludCk7Ci0gICAgaWYgKGluc2VydGlvblBvaW50LmlzQ29ubmVjdGVkKCkpCisg
ICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKHJlbW92YWxUeXBlLCBwYXJlbnRPZlJlbW92ZWRU
cmVlKTsKKyAgICBpZiAocmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KQogICAg
ICAgICBkb2N1bWVudCgpLnByb2Nlc3NCYXNlRWxlbWVudCgpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxCYXNlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEJhc2VFbGVtZW50LmgJKHJldmlzaW9uIDIyMzYyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEJhc2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzVVJMQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYp
IGNvbnN0IGZpbmFsOwogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIGZpbmFsOwogICAgIEluc2VydGVkSW50b1Jlc3VsdCBp
bnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwotICAgIHZv
aWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlZEZy
b20oUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIyMzYyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1D
b250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCB2b2lk
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpZEZpbmlzaEluCiAgICAgcmVzZXRGb3JtT3duZXIo
KTsKIH0KIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWlu
ZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVt
b3ZlZEZyb20oUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9m
UmVtb3ZlZFRyZWUpCiB7CiAgICAgYm9vbCB3YXNNYXRjaGluZ0ludmFsaWRQc2V1ZG9DbGFzcyA9
IHdpbGxWYWxpZGF0ZSgpICYmICFpc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAKQEAgLTMw
MCwxMSArMzAwLDExIEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlZEZyb20K
ICAgICBpZiAobV9kaXNhYmxlZEJ5QW5jZXN0b3JGaWVsZHNldCkKICAgICAgICAgc2V0QW5jZXN0
b3JEaXNhYmxlZChjb21wdXRlSXNEaXNhYmxlZEJ5RmllbGRzZXRBbmNlc3RvcigpKTsKICAgICBt
X2RhdGFMaXN0QW5jZXN0b3JTdGF0ZSA9IFVua25vd247Ci0gICAgSFRNTEVsZW1lbnQ6OnJlbW92
ZWRGcm9tKGluc2VydGlvblBvaW50KTsKLSAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92
ZWRGcm9tKGluc2VydGlvblBvaW50KTsKKyAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb20ocmVt
b3ZhbFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOworICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dDo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOwogCiAgICAg
aWYgKHdhc01hdGNoaW5nSW52YWxpZFBzZXVkb0NsYXNzKQotICAgICAgICByZW1vdmVJbnZhbGlk
RWxlbWVudFRvQW5jZXN0b3JGcm9tSW5zZXJ0aW9uUG9pbnQoKnRoaXMsICZpbnNlcnRpb25Qb2lu
dCk7CisgICAgICAgIHJlbW92ZUludmFsaWRFbGVtZW50VG9BbmNlc3RvckZyb21JbnNlcnRpb25Q
b2ludCgqdGhpcywgJnBhcmVudE9mUmVtb3ZlZFRyZWUpOwogfQogCiB2b2lkIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OnNldENoYW5nZWRTaW5jZUxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KGJv
b2wgY2hhbmdlZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
RWxlbWVudC5oCShyZXZpc2lvbiAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw3IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIGRpZEF0dGFjaFJlbmRlcmVycygpIG92ZXJyaWRlOwogICAgIElu
c2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9k
ZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpIG92ZXJyaWRl
OwotICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOworICAgIHZv
aWQgcmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1l
bnQmIG5ld0RvY3VtZW50KSBvdmVycmlkZTsKIAogICAgIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNv
bnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwCShyZXZpc2lvbiAyMjM2MjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NywxMSArNDcsMTEgQEAgTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0
IEhUTUxGb3JtQ29udHJvbAogICAgIHJldHVybiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjppbnNl
cnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOwogfQogCi12b2lk
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5v
ZGUmIGluc2VydGlvblBvaW50KQordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
OjpyZW1vdmVkRnJvbShSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFy
ZW50T2ZSZW1vdmVkVHJlZSkKIHsKLSAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQo
KSAmJiAhY29udGFpbmluZ1NoYWRvd1Jvb3QoKSAmJiAhaW5zZXJ0aW9uUG9pbnQuY29udGFpbmlu
Z1NoYWRvd1Jvb3QoKSkKKyAgICBpZiAocmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3Vt
ZW50ICYmICFjb250YWluaW5nU2hhZG93Um9vdCgpICYmICFwYXJlbnRPZlJlbW92ZWRUcmVlLmNv
bnRhaW5pbmdTaGFkb3dSb290KCkpCiAgICAgICAgIGRvY3VtZW50KCkuZm9ybUNvbnRyb2xsZXIo
KS51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7Ci0gICAgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9uUG9pbnQpOworICAgIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OnJlbW92ZWRGcm9tKHJlbW92YWxUeXBlLCBwYXJlbnRPZlJlbW92ZWRUcmVl
KTsKIH0KIAogYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpzaG91bGRBdXRv
Y29tcGxldGUoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmgJKHJldmlzaW9uIDIyMzYyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkQXV0b2NvbXBsZXRlKCkgY29uc3Q7CiAgICAgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRy
ZW4oKSBvdmVycmlkZTsKICAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2Vy
dGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZWRGcm9t
KENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZWRGcm9tKFJlbW92YWxU
eXBlLCBDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc0Zvcm1Db250cm9sRWxl
bWVudFdpdGhTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOwogfTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNjI4KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTMg
KzEyOSwxMyBAQCBOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTEZvcm1FbGVtZW50CiAgICAg
cmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAotdm9pZCBIVE1MRm9ybUVsZW1l
bnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQordm9pZCBIVE1M
Rm9ybUVsZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWlu
ZXJOb2RlJiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewogICAgIE5vZGUmIHJvb3QgPSB0cmF2ZXJz
ZVRvUm9vdE5vZGUoKTsgLy8gRG8gbm90IHJlbHkgb24gcm9vdE5vZGUoKSBiZWNhdXNlIG91ciBJ
c0luVHJlZVNjb3BlIGlzIG91dGRhdGVkLgogICAgIFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1l
bnQqPiBhc3NvY2lhdGVkRWxlbWVudHMobV9hc3NvY2lhdGVkRWxlbWVudHMpOwogICAgIGZvciAo
YXV0byYgYXNzb2NpYXRlZEVsZW1lbnQgOiBhc3NvY2lhdGVkRWxlbWVudHMpCiAgICAgICAgIGFz
c29jaWF0ZWRFbGVtZW50LT5mb3JtT3duZXJSZW1vdmVkRnJvbVRyZWUocm9vdCk7Ci0gICAgSFRN
TEVsZW1lbnQ6OnJlbW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsKKyAgICBIVE1MRWxlbWVudDo6
cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOwogfQogCiB2b2lk
IEhUTUxGb3JtRWxlbWVudDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmIGV2ZW50KQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCShyZXZpc2lvbiAyMjM2MjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjUsNyArMTI1LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25z
dCBSZW5kZXJTdHlsZSYpIGZpbmFsOwogICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZElu
dG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwotICAgIHZvaWQgcmVtb3Zl
ZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlZEZyb20oUmVtb3Zh
bFR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIGZpbmlzaFBhcnNpbmdDaGls
ZHJlbigpIGZpbmFsOwogCiAgICAgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCYpIGZpbmFs
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksMTAgKzIxOSwxMCBAQCBOb2RlOjpJbnNlcnRl
ZEludG9SZXN1bHQgSFRNTEZyYW1lU2V0RWxlCiAgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3Vs
dDo6RG9uZTsKIH0KIAotdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50OjpyZW1vdmVkRnJvbShDb250
YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK3ZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6cmVt
b3ZlZEZyb20oUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9m
UmVtb3ZlZFRyZWUpCiB7Ci0gICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKGluc2VydGlvblBv
aW50KTsKLSAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSkgeworICAgIEhUTUxF
bGVtZW50OjpyZW1vdmVkRnJvbShyZW1vdmFsVHlwZSwgcGFyZW50T2ZSZW1vdmVkVHJlZSk7Cisg
ICAgaWYgKHJlbW92YWxUeXBlLmRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCkgewogICAgICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAgICAgZnJhbWUt
PmxvYWRlcigpLmNsaWVudCgpLmRpc3BhdGNoRGlkQmVjb21lRnJhbWVzZXQoZG9jdW1lbnQoKS5p
c0ZyYW1lU2V0KCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1l
U2V0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1l
U2V0RWxlbWVudC5oCShyZXZpc2lvbiAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGcmFtZVNldEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgd2lsbFJlY2FsY1N0eWxlKFN0eWxlOjpDaGFuZ2UpIGZpbmFsOwogCiAg
ICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWlu
ZXJOb2RlJikgZmluYWw7Ci0gICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlJikgZmlu
YWw7CisgICAgdm9pZCByZW1vdmVkRnJvbShSZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZp
bmFsOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPExlbmd0aFtdPiBtX3Jvd0xlbmd0aHM7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPExlbmd0aFtdPiBtX2NvbExlbmd0aHM7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzYyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
MSwxOSArMzMxLDE5IEBAIE5vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBIVE1MSW1hZ2VFbGVtZW4K
ICAgICByZXR1cm4gaW5zZXJ0Tm90aWZpY2F0aW9uUmVxdWVzdDsKIH0KIAotdm9pZCBIVE1MSW1h
Z2VFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK3Zv
aWQgSFRNTEltYWdlRWxlbWVudDo6cmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUs
IENvbnRhaW5lck5vZGUmIHBhcmVudE9mUmVtb3ZlZFRyZWUpCiB7CiAgICAgaWYgKG1fZm9ybSkK
ICAgICAgICAgbV9mb3JtLT5yZW1vdmVJbWdFbGVtZW50KHRoaXMpOwogCi0gICAgaWYgKGluc2Vy
dGlvblBvaW50LmlzQ29ubmVjdGVkKCkgJiYgIW1fcGFyc2VkVXNlbWFwLmlzTnVsbCgpKQorICAg
IGlmIChyZW1vdmFsVHlwZS5kaXNjb25uZWN0ZWRGcm9tRG9jdW1lbnQgJiYgIW1fcGFyc2VkVXNl
bWFwLmlzTnVsbCgpKQogICAgICAgICBkb2N1bWVudCgpLnJlbW92ZUltYWdlRWxlbWVudEJ5VXNl
bWFwKCptX3BhcnNlZFVzZW1hcC5pbXBsKCksICp0aGlzKTsKLSAgICAKKwogICAgIGlmIChpczxI
VE1MUGljdHVyZUVsZW1lbnQ+KHBhcmVudE5vZGUoKSkpCiAgICAgICAgIHNldFBpY3R1cmVFbGVt
ZW50KG51bGxwdHIpOwotICAgIAorCiAgICAgbV9mb3JtID0gbnVsbHB0cjsKLSAgICBIVE1MRWxl
bWVudDo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9uUG9pbnQpOworICAgIEhUTUxFbGVtZW50OjpyZW1v
dmVkRnJvbShyZW1vdmFsVHlwZSwgcGFyZW50T2ZSZW1vdmVkVHJlZSk7CiB9CiAKIEhUTUxQaWN0
dXJlRWxlbWVudCogSFRNTEltYWdlRWxlbWVudDo6cGljdHVyZUVsZW1lbnQoKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDIyMzYyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjEsNyArMTIxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZFN1YnJlc291cmNlQXR0
cmlidXRlVVJMcyhMaXN0SGFzaFNldDxVUkw+JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnNl
cnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUm
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHJlbW92ZWRGcm9tKFJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJikgb3Zl
cnJpZGU7CiAKICAgICBib29sIGlzRm9ybUFzc29jaWF0ZWRFbGVtZW50KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KICAgICBGb3JtTmFtZWRJdGVtKiBhc0Zvcm1OYW1lZEl0ZW0oKSBm
aW5hbCB7IHJldHVybiB0aGlzOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzYyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MTgsMTEgKzE1MTgsMTEgQEAg
dm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbgogICAgICAgICBhZGRUb1Jh
ZGlvQnV0dG9uR3JvdXAoKTsKIH0KIAotdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpyZW1vdmVkRnJv
bShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6
cmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVu
dE9mUmVtb3ZlZFRyZWUpCiB7Ci0gICAgaWYgKGluc2VydGlvblBvaW50LmlzQ29ubmVjdGVkKCkg
JiYgIWZvcm0oKSkKKyAgICBpZiAocmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50
ICYmICFmb3JtKCkpCiAgICAgICAgIHJlbW92ZUZyb21SYWRpb0J1dHRvbkdyb3VwKCk7Ci0gICAg
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsK
KyAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUs
IHBhcmVudE9mUmVtb3ZlZFRyZWUpOwogICAgIEFTU0VSVCghaXNDb25uZWN0ZWQoKSk7CiAjaWYg
RU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgcmVzZXRMaXN0QXR0cmlidXRlVGFyZ2V0T2Jz
ZXJ2ZXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCShyZXZp
c2lvbiAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzUyLDcgKzM1Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRD
aGFuZ2VGb3JtKCkgZmluYWw7CiAgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJ
bnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCBkaWRGaW5pc2hJ
bnNlcnRpbmdOb2RlKCkgZmluYWw7Ci0gICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2Rl
JikgZmluYWw7CisgICAgdm9pZCByZW1vdmVkRnJvbShSZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9k
ZSYpIGZpbmFsOwogICAgIHZvaWQgZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQmIG9sZERv
Y3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpIGZpbmFsOwogCiAgICAgYm9vbCBoYXNDdXN0
b21Gb2N1c0xvZ2ljKCkgY29uc3QgZmluYWw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxMaW5rRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TGlua0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxMaW5rRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NywxMCArMzU3LDEwIEBA
IHZvaWQgSFRNTExpbmtFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmcKICAgICBwcm9jZXNzKCk7
CiB9CiAKLXZvaWQgSFRNTExpbmtFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBp
bnNlcnRpb25Qb2ludCkKK3ZvaWQgSFRNTExpbmtFbGVtZW50OjpyZW1vdmVkRnJvbShSZW1vdmFs
VHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSkKIHsK
LSAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9uUG9pbnQpOwotICAgIGlmICgh
aW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSB8fCBpc0Nvbm5lY3RlZCgpKQorICAgIEhUTUxF
bGVtZW50OjpyZW1vdmVkRnJvbShyZW1vdmFsVHlwZSwgcGFyZW50T2ZSZW1vdmVkVHJlZSk7Cisg
ICAgaWYgKCFyZW1vdmFsVHlwZS5kaXNjb25uZWN0ZWRGcm9tRG9jdW1lbnQpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIG1fbGlua0xvYWRlci5jYW5jZWxMb2FkKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHJldmlzaW9uIDIyMzYyOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcg
QEAgcHJpdmF0ZToKIAogICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0
aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIHZvaWQgZGlkRmluaXNoSW5zZXJ0
aW5nTm9kZSgpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIGZp
bmFsOworICAgIHZvaWQgcmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmKSBm
aW5hbDsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZVN0eWxlU2hlZXQoUmVmPFN0eWxlU2hlZXRDb250
ZW50cz4mJiwgY29uc3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCYpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNjI4KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiwxMSAr
MTIyLDExIEBAIE5vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBIVE1MTWFwRWxlbWVudDoKICAgICBy
ZXR1cm4gcmVxdWVzdDsKIH0KIAotdm9pZCBIVE1MTWFwRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29u
dGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCit2b2lkIEhUTUxNYXBFbGVtZW50OjpyZW1vdmVk
RnJvbShSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1v
dmVkVHJlZSkKIHsKLSAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSkKKyAgICBp
ZiAocmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KQogICAgICAgICB0cmVlU2Nv
cGUoKS5yZW1vdmVJbWFnZU1hcCgqdGhpcyk7Ci0gICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9t
KGluc2VydGlvblBvaW50KTsKKyAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5
cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNYXBFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWFwRWxlbWVudC5oCShyZXZpc2lvbiAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNYXBFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBB
dG9taWNTdHJpbmcmKSBmaW5hbDsKIAogICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZElu
dG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwotICAgIHZvaWQgcmVtb3Zl
ZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlZEZyb20oUmVtb3Zh
bFR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKIAogICAgIEF0b21pY1N0cmluZyBtX25hbWU7
CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MzAsMTcgKzkzMCwxNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnBhdXNlQWZ0ZXJEZXRhY2hlCiAgICAgfQogfQogCi12b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQordm9pZCBIVE1MTWVk
aWFFbGVtZW50OjpyZW1vdmVkRnJvbShSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVy
Tm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSkKIHsKICAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVS
KTsKIAogICAgIG1faW5BY3RpdmVEb2N1bWVudCA9IGZhbHNlOwotICAgIGlmIChpbnNlcnRpb25Q
b2ludC5pc0Nvbm5lY3RlZCgpKSB7CisgICAgaWYgKHJlbW92YWxUeXBlLmRpc2Nvbm5lY3RlZEZy
b21Eb2N1bWVudCkgewogICAgICAgICAvLyBQYXVzZSBhc3luY2hyb25vdXNseSB0byBsZXQgdGhl
IG9wZXJhdGlvbiB0aGF0IHJlbW92ZWQgdXMgZmluaXNoLCBpbiBjYXNlIHdlIGdldCBpbnNlcnRl
ZCBiYWNrIGludG8gYSBkb2N1bWVudC4KICAgICAgICAgbV9wYXVzZUFmdGVyRGV0YWNoZWRUYXNr
UXVldWUuZW5xdWV1ZVRhc2soc3RkOjpiaW5kKCZIVE1MTWVkaWFFbGVtZW50OjpwYXVzZUFmdGVy
RGV0YWNoZWRUYXNrLCB0aGlzKSk7CiAgICAgfQogCi0gICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRG
cm9tKGluc2VydGlvblBvaW50KTsKKyAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb20ocmVtb3Zh
bFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OndpbGxBdHRhY2hSZW5kZXJlcnMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmgJKHJldmlzaW9uIDIyMzYyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OTAsNyArNTkwLDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoY29uc3QgTm9kZSYpIGNvbnN0IG92
ZXJyaWRlOwogICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlw
ZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkRmluaXNoSW5zZXJ0aW5n
Tm9kZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIG92
ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUm
KSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2FsY1N0eWxlKFN0eWxlOjpDaGFuZ2UpIG92ZXJy
aWRlOwogCiAgICAgdm9pZCB3aWxsQmVjb21lRnVsbHNjcmVlbkVsZW1lbnQoKSBvdmVycmlkZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCShyZXZpc2lv
biAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzI1LDEwICszMjUsMTAgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVu
dDo6ZGlkRmluaXNoSW5zZXJ0aQogICAgIHJlc2V0Rm9ybU93bmVyKCk7CiB9CiAKLXZvaWQgSFRN
TE9iamVjdEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50
KQordm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUgcmVtb3Zh
bFR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mUmVtb3ZlZFRyZWUpCiB7Ci0gICAgSFRNTFBs
dWdJbkltYWdlRWxlbWVudDo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9uUG9pbnQpOwotICAgIEZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9uUG9pbnQpOworICAgIEhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKHJlbW92YWxUeXBlLCBwYXJlbnRPZlJlbW92
ZWRUcmVlKTsKKyAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tKHJlbW92YWxU
eXBlLCBwYXJlbnRPZlJlbW92ZWRUcmVlKTsKIH0KIAogdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6
Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJiBjaGFuZ2UpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCShyZXZpc2lvbiAyMjM2MjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDcgKzY0LDcgQEAgcHJpdmF0ZToKIAogICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZElu
dG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIHZvaWQgZGlkRmlu
aXNoSW5zZXJ0aW5nTm9kZSgpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVy
Tm9kZSYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUsIENvbnRhaW5l
ck5vZGUmKSBmaW5hbDsKIAogICAgIHZvaWQgZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQm
IG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpIGZpbmFsOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTbG90RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU2xvdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM2MjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTbG90RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYxLDE3ICs2MSwxNSBAQCBIVE1MU2xvdEVsZW1lbnQ6Okluc2VydGVkSW50b1Jlc3VsdCBIVE1M
CiAgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAotdm9pZCBIVE1MU2xv
dEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQordm9p
ZCBIVE1MU2xvdEVsZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBD
b250YWluZXJOb2RlJiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewotICAgIC8vIENvbnRhaW5lck5v
ZGU6OnJlbW92ZUJldHdlZW4gYWx3YXlzIHNldHMgdGhlIHJlbW92ZWQgY2hpbGQncyB0cmVlIHNj
b3BlIHRvIERvY3VtZW50J3MgYnV0IEluU2hhZG93Um9vdCBmbGFnIGlzIHVuc2V0IGluIE5vZGU6
OnJlbW92ZWRGcm9tLgotICAgIC8vIFNvIGlmIEluU2hhZG93Um9vdCBmbGFnIGlzIHNldCBidXQg
dGhpcyBlbGVtZW50J3MgdHJlZSBzY29wZSBpcyBEb2N1bWVudCdzLCB0aGlzIGVsZW1lbnQgaGFz
IGp1c3QgYmVlbiByZW1vdmVkIGZyb20gYSBzaGFkb3cgcm9vdC4KLSAgICBpZiAoaW5zZXJ0aW9u
UG9pbnQuaXNJblNoYWRvd1RyZWUoKSAmJiBpc0luU2hhZG93VHJlZSgpICYmICZ0cmVlU2NvcGUo
KSA9PSAmZG9jdW1lbnQoKSkgewotICAgICAgICBhdXRvKiBvbGRTaGFkb3dSb290ID0gaW5zZXJ0
aW9uUG9pbnQuY29udGFpbmluZ1NoYWRvd1Jvb3QoKTsKKyAgICBpZiAocmVtb3ZhbFR5cGUudHJl
ZVNjb3BlQ2hhbmdlZCAmJiBwYXJlbnRPZlJlbW92ZWRUcmVlLmlzSW5TaGFkb3dUcmVlKCkpIHsK
KyAgICAgICAgYXV0byogb2xkU2hhZG93Um9vdCA9IHBhcmVudE9mUmVtb3ZlZFRyZWUuY29udGFp
bmluZ1NoYWRvd1Jvb3QoKTsKICAgICAgICAgQVNTRVJUKG9sZFNoYWRvd1Jvb3QpOwogICAgICAg
ICBvbGRTaGFkb3dSb290LT5yZW1vdmVTbG90RWxlbWVudEJ5TmFtZShhdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKG5hbWVBdHRyKSwgKnRoaXMpOwogICAgIH0KIAotICAgIEhUTUxFbGVt
ZW50OjpyZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7CisgICAgSFRNTEVsZW1lbnQ6OnJlbW92
ZWRGcm9tKHJlbW92YWxUeXBlLCBwYXJlbnRPZlJlbW92ZWRUcmVlKTsKIH0KIAogdm9pZCBIVE1M
U2xvdEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1
ZSwgQXR0cmlidXRlTW9kaWZpY2F0aW9uUmVhc29uIHJlYXNvbikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFNsb3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MU2xvdEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNjI4KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MU2xvdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBA
QCBwcml2YXRlOgogICAgIEhUTUxTbG90RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQmKTsKIAogICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9u
VHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFp
bmVyTm9kZSYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUsIENvbnRh
aW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmV3VmFsdWUsIEF0dHJpYnV0ZU1vZGlmaWNhdGlvblJlYXNvbikgZmluYWw7CiAKICAgICBi
b29sIG1faW5TaWduYWxTbG90TGlzdCB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNjI4KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYg
KzY2LDcgQEAgUmVmPEhUTUxTb3VyY2VFbGVtZW50PiBIVE1MU291cmNlRWxlbWVudAogTm9kZTo6
SW5zZXJ0ZWRJbnRvUmVzdWx0IEhUTUxTb3VyY2VFbGVtZW50OjppbnNlcnRlZEludG8oSW5zZXJ0
aW9uVHlwZSBpbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJl
ZSkKIHsKICAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVu
dE9mSW5zZXJ0ZWRUcmVlKTsKKyAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGlzIHdyb25nIGlmIGFu
IGFuY2VzdG9yIG9mIHRoZSBwYXJlbnQgaGFkIGJlZW4gaW5zZXJ0ZWQuCiAgICAgaWYgKGF1dG8q
IHBhcmVudCA9IHBhcmVudEVsZW1lbnQoKSkgewogI2lmIEVOQUJMRShWSURFTykKICAgICAgICAg
aWYgKGlzPEhUTUxNZWRpYUVsZW1lbnQ+KCpwYXJlbnQpKQpAQCAtNzgsMTEgKzc5LDEyIEBAIE5v
ZGU6Okluc2VydGVkSW50b1Jlc3VsdCBIVE1MU291cmNlRWxlbWUKICAgICByZXR1cm4gSW5zZXJ0
ZWRJbnRvUmVzdWx0OjpEb25lOwogfQogCi12b2lkIEhUTUxTb3VyY2VFbGVtZW50OjpyZW1vdmVk
RnJvbShDb250YWluZXJOb2RlJiByZW1vdmFsUm9vdCkKK3ZvaWQgSFRNTFNvdXJjZUVsZW1lbnQ6
OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJiBwYXJl
bnRPZlJlbW92ZWRUcmVlKQogeworICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgd3JvbmcgaWYg
YW4gYW5jZXN0b3Igb2YgdGhlIHBhcmVudCBoYWQgYmVlbiByZW1vdmVkLgogICAgIEVsZW1lbnQq
IHBhcmVudCA9IHBhcmVudEVsZW1lbnQoKTsKLSAgICBpZiAoIXBhcmVudCAmJiBpczxFbGVtZW50
PihyZW1vdmFsUm9vdCkpCi0gICAgICAgIHBhcmVudCA9ICZkb3duY2FzdDxFbGVtZW50PihyZW1v
dmFsUm9vdCk7CisgICAgaWYgKCFwYXJlbnQgJiYgaXM8RWxlbWVudD4ocGFyZW50T2ZSZW1vdmVk
VHJlZSkpCisgICAgICAgIHBhcmVudCA9ICZkb3duY2FzdDxFbGVtZW50PihwYXJlbnRPZlJlbW92
ZWRUcmVlKTsKICAgICBpZiAocGFyZW50KSB7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgICAgICBp
ZiAoaXM8SFRNTE1lZGlhRWxlbWVudD4oKnBhcmVudCkpCkBAIC05Miw3ICs5NCw3IEBAIHZvaWQg
SFRNTFNvdXJjZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnQKICAgICAgICAgaWYgKGlzPEhUTUxQ
aWN0dXJlRWxlbWVudD4oKnBhcmVudCkpCiAgICAgICAgICAgICBkb3duY2FzdDxIVE1MUGljdHVy
ZUVsZW1lbnQ+KCpwYXJlbnQpLnNvdXJjZXNDaGFuZ2VkKCk7CiAgICAgfQotICAgIEhUTUxFbGVt
ZW50OjpyZW1vdmVkRnJvbShyZW1vdmFsUm9vdCk7CisgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRG
cm9tKHJlbW92YWxUeXBlLCBwYXJlbnRPZlJlbW92ZWRUcmVlKTsKIH0KIAogdm9pZCBIVE1MU291
cmNlRWxlbWVudDo6c2NoZWR1bGVFcnJvckV2ZW50KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFNvdXJjZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxTb3VyY2VFbGVtZW50LmgJKHJldmlzaW9uIDIyMzYyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBA
QCBwcml2YXRlOgogICAgIEhUTUxTb3VyY2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCYpOwogICAgIAogICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5z
ZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlZEZyb20o
Q29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUs
IENvbnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICBib29sIGlzVVJMQXR0cmlidXRlKGNvbnN0IEF0
dHJpYnV0ZSYpIGNvbnN0IGZpbmFsOwogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0LgpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM2Mjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDQsMTAgKzEwNCwxMCBAQCBOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTFN0
eWxlRWxlbWVuCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBIVE1MU3R5bGVFbGVtZW50
OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK3ZvaWQgSFRNTFN0
eWxlRWxlbWVudDo6cmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5l
ck5vZGUmIHBhcmVudE9mUmVtb3ZlZFRyZWUpCiB7Ci0gICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRG
cm9tKGluc2VydGlvblBvaW50KTsKLSAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQo
KSAmJiAhaXNDb25uZWN0ZWQoKSkKKyAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb20ocmVtb3Zh
bFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOworICAgIGlmIChyZW1vdmFsVHlwZS5kaXNjb25u
ZWN0ZWRGcm9tRG9jdW1lbnQpCiAgICAgICAgIG1fc3R5bGVTaGVldE93bmVyLnJlbW92ZWRGcm9t
RG9jdW1lbnQoKnRoaXMpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHls
ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVs
ZW1lbnQuaAkocmV2aXNpb24gMjIzNjI4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5
bGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21p
Y1N0cmluZyYpIGZpbmFsOwogICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5z
ZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlZEZyb20o
Q29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUs
IENvbnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChjb25zdCBD
aGlsZENoYW5nZSYpIGZpbmFsOwogCiAgICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCB7IHJldHVy
biBtX3N0eWxlU2hlZXRPd25lci5pc0xvYWRpbmcoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM2MjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw5ICs1
Nyw5IEBAIE5vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBIVE1MVGl0bGVFbGVtZW4KICAgICByZXR1
cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0OjpEb25lOwogfQogCi12b2lkIEhUTUxUaXRsZUVsZW1lbnQ6
OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQordm9pZCBIVE1MVGl0
bGVFbGVtZW50OjpyZW1vdmVkRnJvbShSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVy
Tm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSkKIHsKLSAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZy
b20oaW5zZXJ0aW9uUG9pbnQpOworICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbShyZW1vdmFs
VHlwZSwgcGFyZW50T2ZSZW1vdmVkVHJlZSk7CiAgICAgZG9jdW1lbnQoKS50aXRsZUVsZW1lbnRS
ZW1vdmVkKCp0aGlzKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVt
ZW50LmgJKHJldmlzaW9uIDIyMzYyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxl
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHByaXZhdGU6CiAgICAg
SFRNTFRpdGxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAogICAg
IEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVy
Tm9kZSYpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFs
OworICAgIHZvaWQgcmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5h
bDsKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYpIGZpbmFsOwog
CiAgICAgU3RyaW5nV2l0aERpcmVjdGlvbiBjb21wdXRlZFRleHRXaXRoRGlyZWN0aW9uKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAJKHJldmlzaW9uIDIy
MzYyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkxLDEyICs5MSwxNCBAQCBOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRN
TFRyYWNrRWxlbWVuCiAgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAot
dm9pZCBIVE1MVHJhY2tFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRp
b25Qb2ludCkKK3ZvaWQgSFRNTFRyYWNrRWxlbWVudDo6cmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUg
cmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mUmVtb3ZlZFRyZWUpCiB7Ci0gICAg
SFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsKKyAgICBIVE1MRWxlbWVu
dDo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOwogCi0gICAg
aWYgKGlzPEhUTUxNZWRpYUVsZW1lbnQ+KGluc2VydGlvblBvaW50KSkKLSAgICAgICAgZG93bmNh
c3Q8SFRNTE1lZGlhRWxlbWVudD4oaW5zZXJ0aW9uUG9pbnQpLmRpZFJlbW92ZVRleHRUcmFjaygq
dGhpcyk7CisgICAgLy8gRklYTUU6IFRoaXMgY29kZSBpcyB3cm9uZy4gSWYgSFRNTFRyYWNrRWxl
bWVudCBjYW4gYmUgYW55IGRlc2NlbmRlbnQgb2YgSFRNTE1lZGlhRWxlbWVudCwgdGhlbiBjaGVj
ayBhbmNlc3RvcnMgb2YgcGFyZW50T2ZJbnNlcnRlZFRyZWUuCisgICAgLy8gSWYgSFRNTE1lZGlh
RWxlbWVudCBvbmx5IHN1cHBvcnRzIEhUTUxUcmFja0VsZW1lbnQgd2hpY2ggaXMgYW4gaW1tZWRp
YXRlIGNoaWxkLCB0aGVuIGNoZWNrIHBhcmVudE5vZGUoKSBpbnN0ZWFkLgorICAgIGlmIChpczxI
VE1MTWVkaWFFbGVtZW50PihwYXJlbnRPZlJlbW92ZWRUcmVlKSkKKyAgICAgICAgZG93bmNhc3Q8
SFRNTE1lZGlhRWxlbWVudD4ocGFyZW50T2ZSZW1vdmVkVHJlZSkuZGlkUmVtb3ZlVGV4dFRyYWNr
KCp0aGlzKTsKIH0KIAogdm9pZCBIVE1MVHJhY2tFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmgJKHJldmlzaW9uIDIyMzYyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJikgZmluYWw7CiAKICAgICBJbnNlcnRl
ZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBm
aW5hbDsKLSAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmKSBmaW5hbDsKKyAgICB2
b2lkIHJlbW92ZWRGcm9tKFJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAKICAg
ICBib29sIGlzVVJMQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYpIGNvbnN0IGZpbmFsOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM2MjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NSwxNSAr
MzY1LDE0IEBAIHZvaWQgU1ZHRWxlbWVudDo6cmVwb3J0QXR0cmlidXRlUGFyc2luZ0UKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBTVkdFbGVtZW50OjpyZW1vdmVkRnJvbShD
b250YWluZXJOb2RlJiByb290UGFyZW50KQordm9pZCBTVkdFbGVtZW50OjpyZW1vdmVkRnJvbShS
ZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJl
ZSkKIHsKLSAgICBib29sIHdhc0luRG9jdW1lbnQgPSByb290UGFyZW50LmlzQ29ubmVjdGVkKCk7
Ci0gICAgaWYgKHdhc0luRG9jdW1lbnQpCisgICAgaWYgKHJlbW92YWxUeXBlLmRpc2Nvbm5lY3Rl
ZEZyb21Eb2N1bWVudCkKICAgICAgICAgdXBkYXRlUmVsYXRpdmVMZW5ndGhzSW5mb3JtYXRpb24o
ZmFsc2UsIHRoaXMpOwogCi0gICAgU3R5bGVkRWxlbWVudDo6cmVtb3ZlZEZyb20ocm9vdFBhcmVu
dCk7CisgICAgU3R5bGVkRWxlbWVudDo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9m
UmVtb3ZlZFRyZWUpOwogCi0gICAgaWYgKHdhc0luRG9jdW1lbnQpIHsKKyAgICBpZiAocmVtb3Zh
bFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KSB7CiAgICAgICAgIGRvY3VtZW50KCkuYWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLmNsZWFyVGFyZ2V0RGVwZW5kZW5jaWVzKCp0aGlzKTsKICAgICAg
ICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsRWxlbWVudFJlZmVy
ZW5jZXNGb3JUYXJnZXQodGhpcyk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5o
CShyZXZpc2lvbiAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgaXNQ
cmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZvaWQgY29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
Jikgb3ZlcnJpZGU7CiAgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRp
b25UeXBlLCBDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVkRnJvbShD
b250YWluZXJOb2RlJikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVkRnJvbShSZW1vdmFsVHlw
ZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGNv
bnN0IENoaWxkQ2hhbmdlJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHNlbGZIYXNSZWxh
dGl2ZUxlbmd0aHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgdXBkYXRlUmVs
YXRpdmVMZW5ndGhzSW5mb3JtYXRpb24oKSB7IHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0
aW9uKHNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSwgdGhpcyk7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNjI4KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYx
LDEwICsxNjEsMTAgQEAgdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aQog
ICAgIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCk7CiB9CiAKLXZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6
OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCit2b2lkIFNWR0ZFSW1hZ2VF
bGVtZW50OjpyZW1vdmVkRnJvbShSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9k
ZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSkKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnJlbW92ZWRGcm9tKHJvb3RQYXJlbnQpOwotICAgIGlmIChyb290UGFyZW50
LmlzQ29ubmVjdGVkKCkpCisgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpyZW1vdmVkRnJvbShyZW1vdmFsVHlwZSwgcGFyZW50T2ZSZW1vdmVkVHJlZSk7CisgICAgaWYg
KHJlbW92YWxUeXBlLmRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCkKICAgICAgICAgY2xlYXJSZXNv
dXJjZVJlZmVyZW5jZXMoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1h
Z2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VF
bGVtZW50LmgJKHJldmlzaW9uIDIyMzYyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUlt
YWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCkgb3ZlcnJpZGU7CiAgICAgSW5zZXJ0ZWRJ
bnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCByZW1vdmVkRnJvbShSZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRl
OwogCiAgICAgQkVHSU5fREVDTEFSRV9BTklNQVRFRF9QUk9QRVJUSUVTKFNWR0ZFSW1hZ2VFbGVt
ZW50KQogICAgICAgICBERUNMQVJFX0FOSU1BVEVEX1BSRVNFUlZFQVNQRUNUUkFUSU8oUHJlc2Vy
dmVBc3BlY3RSYXRpbywgcHJlc2VydmVBc3BlY3RSYXRpbykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM2MjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg0
LDExICsyODQsMTEgQEAgTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IFNWR0ZvbnRGYWNlRWxlbQog
ICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKLXZvaWQgU1ZHRm9udEZh
Y2VFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiByb290UGFyZW50KQordm9pZCBT
VkdGb250RmFjZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBD
b250YWluZXJOb2RlJiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewotICAgIFNWR0VsZW1lbnQ6OnJl
bW92ZWRGcm9tKHJvb3RQYXJlbnQpOworICAgIFNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tKHJlbW92
YWxUeXBlLCBwYXJlbnRPZlJlbW92ZWRUcmVlKTsKIAotICAgIGlmIChyb290UGFyZW50LmlzQ29u
bmVjdGVkKCkpIHsKKyAgICBpZiAocmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50
KSB7CiAgICAgICAgIG1fZm9udEVsZW1lbnQgPSBudWxscHRyOwogICAgICAgICBkb2N1bWVudCgp
LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS51bnJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KHRoaXMp
OwogICAgICAgICBtX2ZvbnRGYWNlUnVsZS0+bXV0YWJsZVByb3BlcnRpZXMoKS5jbGVhcigpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuaAkocmV2aXNpb24gMjIz
NjI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNoaWxkcmVuQ2hh
bmdlZChjb25zdCBDaGlsZENoYW5nZSYpIGZpbmFsOwogICAgIEluc2VydGVkSW50b1Jlc3VsdCBp
bnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwotICAgIHZv
aWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlZEZy
b20oUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKIAogICAgIGJvb2wgcmVuZGVy
ZXJJc05lZWRlZChjb25zdCBSZW5kZXJTdHlsZSYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM2
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTksMTEgKzk5LDExIEBAIHZvaWQgU1ZHTVBhdGhFbGVtZW50OjpkaWRGaW5pc2hJ
bnNlcnRpbmcKICAgICBidWlsZFBlbmRpbmdSZXNvdXJjZSgpOwogfQogCi12b2lkIFNWR01QYXRo
RWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKK3ZvaWQgU1ZH
TVBhdGhFbGVtZW50OjpyZW1vdmVkRnJvbShSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFp
bmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSkKIHsKLSAgICBTVkdFbGVtZW50OjpyZW1vdmVk
RnJvbShyb290UGFyZW50KTsKLSAgICBub3RpZnlQYXJlbnRPZlBhdGhDaGFuZ2UoJnJvb3RQYXJl
bnQpOwotICAgIGlmIChyb290UGFyZW50LmlzQ29ubmVjdGVkKCkpCisgICAgU1ZHRWxlbWVudDo6
cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOworICAgIG5vdGlm
eVBhcmVudE9mUGF0aENoYW5nZSgmcGFyZW50T2ZSZW1vdmVkVHJlZSk7CisgICAgaWYgKHJlbW92
YWxUeXBlLmRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCkKICAgICAgICAgY2xlYXJSZXNvdXJjZVJl
ZmVyZW5jZXMoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuaAko
cmV2aXNpb24gMjIzNjI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBidWls
ZFBlbmRpbmdSZXNvdXJjZSgpIGZpbmFsOwogICAgIHZvaWQgY2xlYXJSZXNvdXJjZVJlZmVyZW5j
ZXMoKTsKICAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUs
IENvbnRhaW5lck5vZGUmKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5v
ZGUmKSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZWRGcm9tKFJlbW92YWxUeXBlLCBDb250YWluZXJO
b2RlJikgZmluYWw7CiAKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBmaW5hbDsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGZpbmFsOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsOSArMjg2LDkgQEAg
Tm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IFNWR1BhdGhFbGVtZW50OgogICAgIHJldHVybiBJbnNl
cnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKLXZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnJlbW92ZWRG
cm9tKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCit2b2lkIFNWR1BhdGhFbGVtZW50OjpyZW1v
dmVkRnJvbShSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZS
ZW1vdmVkVHJlZSkKIHsKLSAgICBTVkdHcmFwaGljc0VsZW1lbnQ6OnJlbW92ZWRGcm9tKHJvb3RQ
YXJlbnQpOworICAgIFNWR0dyYXBoaWNzRWxlbWVudDo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUs
IHBhcmVudE9mUmVtb3ZlZFRyZWUpOwogICAgIGludmFsaWRhdGVNUGF0aERlcGVuZGVuY2llcygp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkocmV2aXNpb24gMjIz
NjI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBwcml2YXRlOgogICAgIFJlbmRlclB0cjxSZW5kZXJFbGVt
ZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVuZGVyVHJl
ZVBvc2l0aW9uJikgZmluYWw7CiAKICAgICBOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0
ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKLSAgICB2b2lkIHJl
bW92ZWRGcm9tKENvbnRhaW5lck5vZGUmKSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZWRGcm9tKFJl
bW92YWxUeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAKICAgICB2b2lkIGludmFsaWRhdGVN
UGF0aERlcGVuZGVuY2llcygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQu
Y3BwCShyZXZpc2lvbiAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MywxMyArNDgzLDEzIEBAIE5vZGU6Okluc2VydGVk
SW50b1Jlc3VsdCBTVkdTVkdFbGVtZW50OjoKICAgICByZXR1cm4gU1ZHR3JhcGhpY3NFbGVtZW50
OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOwogfQog
Ci12b2lkIFNWR1NWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIHJvb3RQYXJl
bnQpCit2b2lkIFNWR1NWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxU
eXBlLCBDb250YWluZXJOb2RlJiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewotICAgIGlmIChyb290
UGFyZW50LmlzQ29ubmVjdGVkKCkpIHsKKyAgICBpZiAocmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVk
RnJvbURvY3VtZW50KSB7CiAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygp
LnJlbW92ZVRpbWVDb250YWluZXIodGhpcyk7CiAgICAgICAgIHBhdXNlQW5pbWF0aW9ucygpOwog
ICAgIH0KLSAgICBTVkdHcmFwaGljc0VsZW1lbnQ6OnJlbW92ZWRGcm9tKHJvb3RQYXJlbnQpOwor
ICAgIFNWR0dyYXBoaWNzRWxlbWVudDo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9m
UmVtb3ZlZFRyZWUpOwogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OnBhdXNlQW5pbWF0aW9ucygp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmgJKHJldmlzaW9uIDIyMzYyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
NCw3ICsxNDQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25zdCBS
ZW5kZXJTdHlsZSYpIG92ZXJyaWRlOwogICAgIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVh
dGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9u
Jikgb3ZlcnJpZGU7CiAgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRp
b25UeXBlLCBDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVkRnJvbShD
b250YWluZXJOb2RlJikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVkRnJvbShSZW1vdmFsVHlw
ZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZWxmSGFzUmVsYXRp
dmVMZW5ndGhzKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBwcmVwYXJlRm9yRG9jdW1lbnRT
dXNwZW5zaW9uKCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVt
ZW50LmNwcAkocmV2aXNpb24gMjIzNjI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMCArMTIxLDEwIEBAIE5vZGU6Oklu
c2VydGVkSW50b1Jlc3VsdCBTVkdTdHlsZUVsZW1lbnQKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci12b2lkIFNWR1N0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgcm9vdFBh
cmVudCkKK3ZvaWQgU1ZHU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJvbShSZW1vdmFsVHlwZSByZW1v
dmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSkKIHsKLSAgICBTVkdF
bGVtZW50OjpyZW1vdmVkRnJvbShyb290UGFyZW50KTsKLSAgICBpZiAocm9vdFBhcmVudC5pc0Nv
bm5lY3RlZCgpICYmICFpc0Nvbm5lY3RlZCgpKQorICAgIFNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9t
KHJlbW92YWxUeXBlLCBwYXJlbnRPZlJlbW92ZWRUcmVlKTsKKyAgICBpZiAocmVtb3ZhbFR5cGUu
ZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KQogICAgICAgICBtX3N0eWxlU2hlZXRPd25lci5yZW1v
dmVkRnJvbURvY3VtZW50KCp0aGlzKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1N0eWxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHls
ZUVsZW1lbnQuaAkocmV2aXNpb24gMjIzNjI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0
eWxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9t
aWNTdHJpbmcmKSBmaW5hbDsKICAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKElu
c2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZWRGcm9t
KENvbnRhaW5lck5vZGUmKSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZWRGcm9tKFJlbW92YWxUeXBl
LCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoY29uc3Qg
Q2hpbGRDaGFuZ2UmKSBmaW5hbDsKIAogICAgIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25zdCBS
ZW5kZXJTdHlsZSYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdUUmVmRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzYyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NywxMCArMjY3LDEw
IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OmRpZEZpbmlzaEluc2VydGluZ04KICAgICBidWlsZFBl
bmRpbmdSZXNvdXJjZSgpOwogfQogCi12b2lkIFNWR1RSZWZFbGVtZW50OjpyZW1vdmVkRnJvbShD
b250YWluZXJOb2RlJiByb290UGFyZW50KQordm9pZCBTVkdUUmVmRWxlbWVudDo6cmVtb3ZlZEZy
b20oUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mUmVtb3Zl
ZFRyZWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20ocm9vdFBhcmVudCk7Ci0gICAg
aWYgKHJvb3RQYXJlbnQuaXNDb25uZWN0ZWQoKSkKKyAgICBTVkdFbGVtZW50OjpyZW1vdmVkRnJv
bShyZW1vdmFsVHlwZSwgcGFyZW50T2ZSZW1vdmVkVHJlZSk7CisgICAgaWYgKHJlbW92YWxUeXBl
LmRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCkKICAgICAgICAgbV90YXJnZXRMaXN0ZW5lci0+ZGV0
YWNoKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5oCShyZXZpc2lv
biAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVuZGVyZXJJc05l
ZWRlZChjb25zdCBSZW5kZXJTdHlsZSYpIG92ZXJyaWRlOwogCiAgICAgSW5zZXJ0ZWRJbnRvUmVz
dWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCByZW1vdmVkRnJvbShSZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAg
IHZvaWQgZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBjbGVh
clRhcmdldCgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRo
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRo
RWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzYyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdU
ZXh0UGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsMTAgKzE4NCwxMCBAQCB2
b2lkIFNWR1RleHRQYXRoRWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0CiAgICAgYnVpbGRQZW5kaW5n
UmVzb3VyY2UoKTsKIH0KIAotdm9pZCBTVkdUZXh0UGF0aEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENv
bnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCit2b2lkIFNWR1RleHRQYXRoRWxlbWVudDo6cmVtb3Zl
ZEZyb20oUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mUmVt
b3ZlZFRyZWUpCiB7Ci0gICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpyZW1vdmVkRnJvbShyb290
UGFyZW50KTsKLSAgICBpZiAocm9vdFBhcmVudC5pc0Nvbm5lY3RlZCgpKQorICAgIFNWR1RleHRD
b250ZW50RWxlbWVudDo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRy
ZWUpOworICAgIGlmIChyZW1vdmFsVHlwZS5kaXNjb25uZWN0ZWRGcm9tRG9jdW1lbnQpCiAgICAg
ICAgIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVGV4dFBhdGhFbGVtZW50LmgJKHJldmlzaW9uIDIyMzYyOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEy
Miw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCkgb3ZlcnJp
ZGU7CiAgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBD
b250YWluZXJOb2RlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJO
b2RlJikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVkRnJvbShSZW1vdmFsVHlwZSwgQ29udGFp
bmVyTm9kZSYpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIG92ZXJyaWRlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RpdGxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RpdGxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzYyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUaXRsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw5ICs0NSw5IEBAIE5vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBTVkdUaXRsZUVsZW1lbnQKICAg
ICByZXR1cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0OjpEb25lOwogfQogCi12b2lkIFNWR1RpdGxlRWxl
bWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCit2b2lkIFNW
R1RpdGxlRWxlbWVudDo6cmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRh
aW5lck5vZGUmIHBhcmVudE9mUmVtb3ZlZFRyZWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6cmVtb3Zl
ZEZyb20oaW5zZXJ0aW9uUG9pbnQpOworICAgIFNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tKHJlbW92
YWxUeXBlLCBwYXJlbnRPZlJlbW92ZWRUcmVlKTsKICAgICBkb2N1bWVudCgpLnRpdGxlRWxlbWVu
dFJlbW92ZWQoKnRoaXMpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGl0bGVF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RpdGxlRWxlbWVu
dC5oCShyZXZpc2lvbiAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGl0bGVFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgcHJpdmF0ZToKICAgICBTVkdU
aXRsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKICAgICBJbnNl
cnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUm
KSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmKSBmaW5hbDsKKyAg
ICB2b2lkIHJlbW92ZWRGcm9tKFJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAg
ICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmKSBmaW5hbDsKIAogICAg
IGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25zdCBSZW5kZXJTdHlsZSYpIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCShyZXZpc2lv
biAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNCw5ICsxMTQsOSBAQCBOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgU1ZH
VXNlRWxlbWVudDo6CiAgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAot
dm9pZCBTVkdVc2VFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiByb290UGFyZW50
KQordm9pZCBTVkdVc2VFbGVtZW50OjpyZW1vdmVkRnJvbShSZW1vdmFsVHlwZSByZW1vdmFsVHlw
ZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSkKIHsKLSAgICBTVkdHcmFwaGlj
c0VsZW1lbnQ6OnJlbW92ZWRGcm9tKHJvb3RQYXJlbnQpOworICAgIFNWR0dyYXBoaWNzRWxlbWVu
dDo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOwogICAgIGNs
ZWFyU2hhZG93VHJlZSgpOwogICAgIHVwZGF0ZUV4dGVybmFsRG9jdW1lbnQoKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaAkocmV2aXNpb24gMjIzNjI4KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgs
NyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
SW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWluZXJO
b2RlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlJikgb3Zl
cnJpZGU7CisgICAgdm9pZCByZW1vdmVkRnJvbShSZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYp
IG92ZXJyaWRlOwogICAgIHZvaWQgYnVpbGRQZW5kaW5nUmVzb3VyY2UoKSBvdmVycmlkZTsKICAg
ICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNT
dHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlv
bi9TVkdTTUlMRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzYyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yODgsOSArMjg4LDkgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5n
TgogICAgIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCk7CiB9CiAKLXZvaWQgU1ZHU01JTEVsZW1lbnQ6
OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCit2b2lkIFNWR1NNSUxFbGVt
ZW50OjpyZW1vdmVkRnJvbShSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYg
cGFyZW50T2ZSZW1vdmVkVHJlZSkKIHsKLSAgICBpZiAocm9vdFBhcmVudC5pc0Nvbm5lY3RlZCgp
KSB7CisgICAgaWYgKHJlbW92YWxUeXBlLmRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCkgewogICAg
ICAgICBjbGVhclJlc291cmNlUmVmZXJlbmNlcygpOwogICAgICAgICBkaXNjb25uZWN0Q29uZGl0
aW9ucygpOwogICAgICAgICBzZXRUYXJnZXRFbGVtZW50KG51bGxwdHIpOwpAQCAtMjk5LDcgKzI5
OSw3IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW4KICAgICAgICAg
bV90aW1lQ29udGFpbmVyID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBTVkdFbGVtZW50OjpyZW1v
dmVkRnJvbShyb290UGFyZW50KTsKKyAgICBTVkdFbGVtZW50OjpyZW1vdmVkRnJvbShyZW1vdmFs
VHlwZSwgcGFyZW50T2ZSZW1vdmVkVHJlZSk7CiB9CiAKIGJvb2wgU1ZHU01JTEVsZW1lbnQ6Omhh
c1ZhbGlkQXR0cmlidXRlTmFtZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NWR1NNSUxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TVkdTTUlMRWxlbWVudC5oCShyZXZpc2lvbiAyMjM2MjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcg
KzQ4LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmli
dXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAgICAgSW5zZXJ0ZWRJ
bnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCByZW1vdmVkRnJvbShSZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRl
OwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSA9IDA7CiAg
ICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324212</attachid>
            <date>2017-10-19 00:17:02 -0700</date>
            <delta_ts>2017-10-19 03:05:25 -0700</delta_ts>
            <desc>Updated for trunk</desc>
            <filename>bug-178505-20171019001701.patch</filename>
            <type>text/plain</type>
            <size>69481</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MSBAQAorMjAxNy0xMC0xOCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgYW4gYXJndW1lbnQgaW5k
aWNhdGluZyB0aGUgdHlwZSBvZiByZW1vdmFsIHRvIE5vZGU6OnJlbW92ZWRGcm9tCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzg1MDUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMaWtlIHIyMjM2MjgsIGFk
ZGVkIFJlbW92YWxUeXBlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBOb2RlOjpyZW1vdmVkRnJv
bSwgd2hpY2ggY29udGFpbnMgdHdvIGJvb2xlYW5zIGluZGljYXRpbmcKKyAgICAgICAgd2hldGhl
ciB0aGUgbm9kZSBqdXN0IGJlY29tZSBkaXNjb25uZWN0ZWQgZnJvbSBhIGRvY3VtZW50LCBhbmQg
d2hldGhlciBub2RlJ3MgdHJlZSBzY29wZSBoYWQgY2hhbmdlZCBvciBub3QuCisKKyAgICAgICAg
VGhlc2UgYm9vbGVhbiBmbGFncyBzaW1wbGlmaWVzIHRoZSBsb2dpYyBpbiByZW1vdmVkRnJvbSBp
bXBsZW1lbnRhdGlvbnMsIGFuZCBhcmUgcmVxdWlyZWQgdG8gaGF2ZSBhIGJldHRlcgorICAgICAg
ICBndWFyYW50ZWUgYWJvdXQgdGhlIGNvcnJlY3RuZXNzIG9mIG5vZGUgZmxhZ3MgZHVyaW5nIGNh
bGxzIHRvIHJlbW92ZWRGcm9tLiBSaWdodCBub3csIE5vZGU6OmlzQ29ubmVjdGVkKCkgYW5kCisg
ICAgICAgIE5vZGU6OmlzSW5TaGFkb3dUcmVlKCkgYXJlIGJvdGggb3V0ZGF0ZWQgdW50aWwgTm9k
ZTo6cmVtb3ZlZEZyb20gaXMgY2FsbGVkLgorCisgICAgICAgIEFsc28gcmVuYW1lZCB0aGUgc2Vj
b25kIGFyZ3VtZW50IG9mIHJlbW92ZWRGcm9tIHRvIHBhcmVudE9mUmVtb3ZlZFRyZWUgdG8gbWFr
ZSB0aGUgc2VtYW50aWNzIGNsZWFyLgorCisgICAgICAgIE5vdGUgdGhhdCBpbiBzb21lIGltcGxl
bWVudGF0aW9ucyBvZiByZW1vdmVkRnJvbSwgd2UgY2hlY2sgd2hldGhlciBpc0Nvbm5lY3RlZCgp
IHdhcyB0cnVlIHRvIGRlY2lkZSB3aGV0aGVyCisgICAgICAgIHRoZSBub2RlIGhhZCBhbHJlYWR5
IGJlZW4gZGlzY29ubmVjdGVkIGZyb20gYSBkb2N1bWVudCBwcmlvciB0byBjYWxscyB0byB0aGlz
IHBhcnRpY3VsYXIgY2FsbCBvZiByZW1vdmVkRnJvbS4KKyAgICAgICAgVGhpcyBleHRyYSBjaGVj
ayBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHNpbmNlIG5vIG5vZGUgd2lsbCBiZSByZW1vdmVkIGZy
b20gYSBkb2N1bWVudCB3aXRob3V0IGZpcnN0IGJlaW5nIGluc2VydGVkCisgICAgICAgIGNvbXBs
ZXRlbHkgc29tZXdoZXJlIGFmdGVyIHIyMjM0NTguCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNp
bmNlIHRoZXJlIHNob3VsZCBiZSBubyBiZWhhdmlvcmFsIGNoYW5nZXMuCisKKyAgICAgICAgKiBk
b20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5
Tm9kZUluc2VydGVkSW50b0RvY3VtZW50KTogUmVwbGFjZWQgUkVMRUFTRV9BU1NFUlQgd2l0aCBS
RUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OLgorICAgICAgICAoV2ViQ29y
ZTo6bm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQpOiBSZXBsYWNlZCB0aGUgY2hlY2sgdGhh
dCB0aGUgbm9kZSBoYWQgbm90IGJlZW4gcmUtY29ubmVjdGVkIGJ5IHNjcmlwdHMKKyAgICAgICAg
YnkgYSByZWxlYXNlIGFzc2VydCBub3cgdGhhdCB3ZSBiZWxpZXZlIHdlJ3ZlIGVsaW1pbmF0ZWQg
YWxsIGNhdXNlcyBvZiB0aGVzZSB1bndhbnRlZCBET00gbXV0YXRpb25zIGluIHIyMjM0NTguCisg
ICAgICAgIEFsc28gbW92ZWQgdGhlIGNvZGUgdG8gY2FsbCBzZXRDU1NUYXJnZXQgdG8gRWxlbWVu
dDo6cmVtb3ZlZEZyb20uIFRoaXMgcmFuZG9tIGNhbGwgdG8gc2V0Q1NTVGFyZ2V0IHByZWRhdGVz
IHIxMTQzNTEsCisgICAgICAgIGFzIHdlbGwgYXMgcjQwNDc1LiBJdCB3YXMgb3JpZ2luYWxseSBp
bnRyb2R1Y2VkIGJ5IHIyOTMxMSBpbnRvIE5vZGU6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKSB0ZW4g
eWVhcnMgYWdvLgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZSk6
IE1vdmVkIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbiB0byBub3RpZnlDaGlsZE5vZGVSZW1vdmVk
LgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5Q2hpbGROb2RlUmVtb3ZlZCk6IEFkZGVkIE5vRXZl
bnREaXNwYXRjaEFzc2VydGlvbi4KKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRo
bXMuaDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpyZW1vdmVkRnJvbSk6IFJlcGxhY2VkIHRoZSBjb21wbGljYXRlZCBjb2RlIHRvIGRldGVj
dCB3aGVuIHRoaXMgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gYSBkb2N1bWVudAorICAgICAgICBh
bmQgaXRzIHRyZWUgc2NvcGUgaGFkIGNoYW5nZWQgYnkgcmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVk
RnJvbURvY3VtZW50IGFuZCByZW1vdmFsVHlwZS50cmVlU2NvcGVDaGFuZ2VkLgorICAgICAgICAq
IGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6cmVtb3ZlZEZyb20pOgorICAgICAgICAqIGRvbS9Ob2RlLmg6IFJlcGxhY2VkIGEg
bG9uZyBibG9jayBvZiBjb21tZW50cyBhYm92ZSBpbnNlcnRlZEludG8gYnkgdHdvIGxpbmVzIG9m
IGNvbmNpc2UgY29tbWVudHMgbm93IHRoYXQKKyAgICAgICAgdGhlIHNlbWFudGljcyBvZiBpbnNl
cnRlZEludG8gYW5kIGRpZEZpbmlzaEluc2VydGluZ05vZGUgYXJlIG1vcmUgY2xlYXIsIGFuZCBl
bmZvcmNlZCBieSBhc3NlcnRpb25zLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6UmVtb3ZhbFR5
cGU6OlJlbW92YWxUeXBlKTogQWRkZWRsCisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0cnVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnJlbW92
ZWRGcm9tKToKKyAgICAgICAgKiBkb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmg6CisgICAgICAg
ICogZG9tL1NoYWRvd1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6cmVt
b3ZlZEZyb20pOiBUaGUgZXh0cmEgIWlzQ29ubmVjdGVkKCkgY2hlY2sgaXMgbm8gbG9uZ2VyIG5l
ZWRlZC4gU2VlIHRoZSBkZXNjcmlwdGlvbiBhYm92ZS4KKyAgICAgICAgKiBkb20vU2hhZG93Um9v
dC5oOgorICAgICAgICAqIGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICAq
IGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MQmFzZUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJhc2VFbGVtZW50OjpyZW1vdmVkRnJv
bSk6CisgICAgICAgICogaHRtbC9IVE1MQmFzZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250
cm9sRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9s
RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
OjpyZW1vdmVkRnJvbSk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0
aFN0YXRlLmg6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgICogaHRtbC9I
VE1MRm9ybUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudDo6cmVtb3ZlZEZyb20pOgor
ICAgICAgICAqIGh0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRN
TEltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Ojpy
ZW1vdmVkRnJvbSk6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
aDoKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTGlua0VsZW1lbnQ6OnJlbW92ZWRGcm9tKTogVGhlIGV4dHJhICFpc0Nvbm5lY3RlZCgp
IGNoZWNrIGlzIG5vIGxvbmdlciBuZWVkZWQuIFNlZSBhYm92ZS4KKyAgICAgICAgKiBodG1sL0hU
TUxMaW5rRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBo
dG1sL0hUTUxNYXBFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAg
ICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpyZW1v
dmVkRnJvbSk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvSFRNTFNsb3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTbG90RWxl
bWVudDo6cmVtb3ZlZEZyb20pOiBTaW1wbGlmaWVzIHRoZSBsb2dpYyB0byBkZXRlY3Qgd2hlbiB0
aGlzIHNsb3QgZWxlbWVudCBpcyBiZWluZworICAgICAgICByZW1vdmVkIGZyb20gYSBzaGFkb3cg
dHJlZSB1c2luZyByZW1vdmFsVHlwZS50cmVlU2NvcGVDaGFuZ2VkLgorICAgICAgICAqIGh0bWwv
SFRNTFNsb3RFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MU291cmNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKTogQWRk
ZWQgYSBGSVhNRSBmb3IgYW4gb2J2aW91cyBidWcuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU291
cmNlRWxlbWVudDo6cmVtb3ZlZEZyb20pOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxTb3Vy
Y2VFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBo
dG1sL0hUTUxTdHlsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxUaXRsZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudDo6cmVtb3ZlZEZyb20pOgor
ICAgICAgICAqIGh0bWwvSFRNTFRpdGxlRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRy
YWNrRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJhY2tFbGVtZW50OjpyZW1v
dmVkRnJvbSk6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTFRyYWNrRWxlbWVudC5oOgorICAg
ICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6
OnJlbW92ZWRGcm9tKTogUmVwbGFjZWQgaXNDb25uZWN0ZWQoKSBjaGVjayBiZWZvcmUgY2FsbGlu
ZyBOb2RlOjpyZW1vdmVkRnJvbSBieSB0aGUgY2hlY2sgb2YKKyAgICAgICAgcmVtb3ZhbFR5cGUu
ZGlzY29ubmVjdGVkRnJvbURvY3VtZW50LgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50Lmg6Cisg
ICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFSW1hZ2VFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBz
dmcvU1ZHRm9udEZhY2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR01QYXRoRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAg
ICAgICAgKiBzdmcvU1ZHTVBhdGhFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpyZW1vdmVkRnJvbSk6
CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1NWR0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20p
OgorICAgICAgICAqIHN2Zy9TVkdTVkdFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N0eWxl
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OnJlbW92ZWRG
cm9tKTogVGhlIGV4dHJhICFpc0Nvbm5lY3RlZCgpIGNoZWNrIGlzIG5vIGxvbmdlciBuZWVkZWQu
IFNlZSBhYm92ZS4KKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVFbGVtZW50Lmg6CisgICAgICAgICog
c3ZnL1NWR1RSZWZFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50
OjpyZW1vdmVkRnJvbSk6CisgICAgICAgICogc3ZnL1NWR1RSZWZFbGVtZW50Lmg6CisgICAgICAg
ICogc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0
UGF0aEVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBzdmcvU1ZHVGV4dFBhdGhFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1RpdGxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUaXRsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBzdmcvU1ZHVGl0
bGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICAqIHN2Zy9TVkdV
c2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAg
ICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaDoKKwogMjAxNy0xMC0xOCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBEb24ndCBleHBvc2UgcmF3IEhU
TUwgaW4gcGFzdGVib2FyZCB0byB0aGUgd2ViIGNvbnRlbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAkocmV2aXNpb24gMjIzNjgwKQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBzdGF0aWMgdm9pZCBub3RpZnlOb2RlSW5zZXJ0ZWRJ
bnRvRG9jdW1lCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoUmVmUHRyPE5vZGU+IGNoaWxk
ID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4obm9kZSkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChub2Rl
LmlzQ29ubmVjdGVkKCkgJiYgY2hpbGQtPnBhcmVudE5vZGUoKSA9PSAmbm9kZSk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5pc0Nvbm5lY3Rl
ZCgpICYmIGNoaWxkLT5wYXJlbnROb2RlKCkgPT0gJm5vZGUpOwogICAgICAgICBub3RpZnlOb2Rl
SW5zZXJ0ZWRJbnRvRG9jdW1lbnQocGFyZW50T2ZJbnNlcnRlZFRyZWUsICpjaGlsZCwgdHJlZVNj
b3BlQ2hhbmdlLCBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7CiAgICAgfQogCkBA
IC01Niw3ICs1Niw3IEBAIHN0YXRpYyB2b2lkIG5vdGlmeU5vZGVJbnNlcnRlZEludG9Eb2N1bWUK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKFJlZlB0cjxTaGFkb3dSb290PiByb290ID0gZG93
bmNhc3Q8RWxlbWVudD4obm9kZSkuc2hhZG93Um9vdCgpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKG5vZGUuaXNDb25uZWN0ZWQoKSAmJiByb290LT5ob3N0KCkgPT0gJm5vZGUpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG5vZGUuaXNDb25uZWN0
ZWQoKSAmJiByb290LT5ob3N0KCkgPT0gJm5vZGUpOwogICAgICAgICBub3RpZnlOb2RlSW5zZXJ0
ZWRJbnRvRG9jdW1lbnQocGFyZW50T2ZJbnNlcnRlZFRyZWUsICpyb290LCBUcmVlU2NvcGVDaGFu
Z2U6OkRpZE5vdENoYW5nZSwgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOwogICAg
IH0KIH0KQEAgLTEwMyw1OCArMTAzLDU4IEBAIE5vZGVWZWN0b3Igbm90aWZ5Q2hpbGROb2RlSW5z
ZXJ0ZWQoQ29udGEKICAgICByZXR1cm4gcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHM7
CiB9CiAKLXN0YXRpYyB2b2lkIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURvY3VtZW50KENvbnRhaW5l
ck5vZGUmIGluc2VydGlvblBvaW50LCBOb2RlJiBub2RlKQorc3RhdGljIHZvaWQgbm90aWZ5Tm9k
ZVJlbW92ZWRGcm9tRG9jdW1lbnQoQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSwg
VHJlZVNjb3BlQ2hhbmdlIHRyZWVTY29wZUNoYW5nZSwgTm9kZSYgbm9kZSkKIHsKLSAgICBBU1NF
UlQoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSk7Ci0gICAgbm9kZS5yZW1vdmVkRnJvbShp
bnNlcnRpb25Qb2ludCk7CisgICAgQVNTRVJUKHBhcmVudE9mUmVtb3ZlZFRyZWUuaXNDb25uZWN0
ZWQoKSk7CisgICAgQVNTRVJUKG5vZGUuaXNDb25uZWN0ZWQoKSk7CisgICAgbm9kZS5yZW1vdmVk
RnJvbShOb2RlOjpSZW1vdmFsVHlwZSB7IC8qIGRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCAqLyB0
cnVlLCB0cmVlU2NvcGVDaGFuZ2UgPT0gVHJlZVNjb3BlQ2hhbmdlOjpDaGFuZ2VkIH0sIHBhcmVu
dE9mUmVtb3ZlZFRyZWUpOwogCiAgICAgaWYgKCFpczxDb250YWluZXJOb2RlPihub2RlKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgQ2hpbGROb2Rlc0xhenlTbmFwc2hvdCBzbmFwc2hvdChkb3du
Y2FzdDxDb250YWluZXJOb2RlPihub2RlKSk7Ci0gICAgd2hpbGUgKFJlZlB0cjxOb2RlPiBjaGls
ZCA9IHNuYXBzaG90Lm5leHROb2RlKCkpIHsKLSAgICAgICAgLy8gSWYgd2UgaGF2ZSBiZWVuIGFk
ZGVkIHRvIHRoZSBkb2N1bWVudCBkdXJpbmcgdGhpcyBsb29wLCB0aGVuIHdlCi0gICAgICAgIC8v
IGRvbid0IHdhbnQgdG8gdGVsbCB0aGUgcmVzdCBvZiBvdXIgY2hpbGRyZW4gdGhhdCB0aGV5J3Zl
IGJlZW4KLSAgICAgICAgLy8gcmVtb3ZlZCBmcm9tIHRoZSBkb2N1bWVudCBiZWNhdXNlIHRoZXkg
aGF2ZW4ndC4KLSAgICAgICAgaWYgKCFub2RlLmlzQ29ubmVjdGVkKCkgJiYgY2hpbGQtPnBhcmVu
dE5vZGUoKSA9PSAmbm9kZSkKLSAgICAgICAgICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURvY3Vt
ZW50KGluc2VydGlvblBvaW50LCAqY2hpbGQuZ2V0KCkpOworICAgIGZvciAoUmVmUHRyPE5vZGU+
IGNoaWxkID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4obm9kZSkuZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlLmlzQ29ubmVjdGVkKCkgJiYgY2hpbGQt
PnBhcmVudE5vZGUoKSA9PSAmbm9kZSk7CisgICAgICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURv
Y3VtZW50KHBhcmVudE9mUmVtb3ZlZFRyZWUsIHRyZWVTY29wZUNoYW5nZSwgKmNoaWxkLmdldCgp
KTsKICAgICB9CiAKICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAobm9kZS5kb2N1bWVudCgpLmNzc1RhcmdldCgpID09ICZub2RlKQotICAgICAg
ICBub2RlLmRvY3VtZW50KCkuc2V0Q1NTVGFyZ2V0KG51bGxwdHIpOwotCiAgICAgaWYgKFJlZlB0
cjxTaGFkb3dSb290PiByb290ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkuc2hhZG93Um9vdCgp
KSB7Ci0gICAgICAgIGlmICghbm9kZS5pc0Nvbm5lY3RlZCgpICYmIHJvb3QtPmhvc3QoKSA9PSAm
bm9kZSkKLSAgICAgICAgICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURvY3VtZW50KGluc2VydGlv
blBvaW50LCAqcm9vdC5nZXQoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oIW5vZGUuaXNDb25uZWN0ZWQoKSAmJiByb290LT5ob3N0KCkgPT0gJm5v
ZGUpOworICAgICAgICBub3RpZnlOb2RlUmVtb3ZlZEZyb21Eb2N1bWVudChwYXJlbnRPZlJlbW92
ZWRUcmVlLCBUcmVlU2NvcGVDaGFuZ2U6OkRpZE5vdENoYW5nZSwgKnJvb3QuZ2V0KCkpOwogICAg
IH0KIH0KIAotc3RhdGljIHZvaWQgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZShDb250YWluZXJO
b2RlJiBpbnNlcnRpb25Qb2ludCwgTm9kZSYgbm9kZSkKK3N0YXRpYyB2b2lkIG5vdGlmeU5vZGVS
ZW1vdmVkRnJvbVRyZWUoQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSwgVHJlZVNj
b3BlQ2hhbmdlIHRyZWVTY29wZUNoYW5nZSwgTm9kZSYgbm9kZSkKIHsKLSAgICBOb0V2ZW50RGlz
cGF0Y2hBc3NlcnRpb24gYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwotICAgIEFTU0VSVCghaW5zZXJ0
aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSk7CisgICAgQVNTRVJUKCFwYXJlbnRPZlJlbW92ZWRUcmVl
LmlzQ29ubmVjdGVkKCkpOwogCi0gICAgbm9kZS5yZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7
CisgICAgbm9kZS5yZW1vdmVkRnJvbShOb2RlOjpSZW1vdmFsVHlwZSB7IC8qIGRpc2Nvbm5lY3Rl
ZEZyb21Eb2N1bWVudCAqLyBmYWxzZSwgdHJlZVNjb3BlQ2hhbmdlID09IFRyZWVTY29wZUNoYW5n
ZTo6Q2hhbmdlZCB9LCBwYXJlbnRPZlJlbW92ZWRUcmVlKTsKIAotICAgIGZvciAoTm9kZSogY2hp
bGQgPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpCi0gICAgICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUoaW5zZXJ0aW9uUG9pbnQsICpj
aGlsZCk7CisgICAgaWYgKCFpczxDb250YWluZXJOb2RlPihub2RlKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZm9yIChSZWZQdHI8Tm9kZT4gY2hpbGQgPSBkb3duY2FzdDxDb250YWluZXJOb2Rl
Pihub2RlKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KQorICAgICAgICBub3RpZnlOb2RlUmVtb3ZlZEZyb21UcmVlKHBhcmVudE9mUmVtb3ZlZFRyZWUs
IHRyZWVTY29wZUNoYW5nZSwgKmNoaWxkKTsKIAogICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChSZWZQdHI8U2hhZG93Um9vdD4gcm9vdCA9IGRv
d25jYXN0PEVsZW1lbnQ+KG5vZGUpLnNoYWRvd1Jvb3QoKSkKLSAgICAgICAgbm90aWZ5Tm9kZVJl
bW92ZWRGcm9tVHJlZShpbnNlcnRpb25Qb2ludCwgKnJvb3QpOworICAgICAgICBub3RpZnlOb2Rl
UmVtb3ZlZEZyb21UcmVlKHBhcmVudE9mUmVtb3ZlZFRyZWUsIFRyZWVTY29wZUNoYW5nZTo6RGlk
Tm90Q2hhbmdlLCAqcm9vdCk7CiB9CiAKLXZvaWQgbm90aWZ5Q2hpbGROb2RlUmVtb3ZlZChDb250
YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCwgTm9kZSYgY2hpbGQpCit2b2lkIG5vdGlmeUNoaWxk
Tm9kZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSwgTm9kZSYgY2hp
bGQpCiB7CisgICAgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uIGFzc2VydE5vRXZlbnREaXNwYXRj
aDsKKworICAgIC8vIFRyZWUgc2NvcGUgaGFzIGNoYW5nZWQgaWYgdGhlIGNvbnRhaW5lciBub2Rl
IGZyb20gd2hpY2ggIm5vZGUiIGlzIHJlbW92ZWQgaXMgaW4gYSBkb2N1bWVudCBvciBhIHNoYWRv
dyByb290LgorICAgIGF1dG8gdHJlZVNjb3BlQ2hhbmdlID0gcGFyZW50T2ZSZW1vdmVkVHJlZS5p
c0luVHJlZVNjb3BlKCkgPyBUcmVlU2NvcGVDaGFuZ2U6OkNoYW5nZWQgOiBUcmVlU2NvcGVDaGFu
Z2U6OkRpZE5vdENoYW5nZTsKICAgICBpZiAoY2hpbGQuaXNDb25uZWN0ZWQoKSkKLSAgICAgICAg
bm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQoaW5zZXJ0aW9uUG9pbnQsIGNoaWxkKTsKKyAg
ICAgICAgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQocGFyZW50T2ZSZW1vdmVkVHJlZSwg
dHJlZVNjb3BlQ2hhbmdlLCBjaGlsZCk7CiAgICAgZWxzZQotICAgICAgICBub3RpZnlOb2RlUmVt
b3ZlZEZyb21UcmVlKGluc2VydGlvblBvaW50LCBjaGlsZCk7CisgICAgICAgIG5vdGlmeU5vZGVS
ZW1vdmVkRnJvbVRyZWUocGFyZW50T2ZSZW1vdmVkVHJlZSwgdHJlZVNjb3BlQ2hhbmdlLCBjaGls
ZCk7CiB9CiAKIHZvaWQgYWRkQ2hpbGROb2Rlc1RvRGVsZXRpb25RdWV1ZShOb2RlKiYgaGVhZCwg
Tm9kZSomIHRhaWwsIENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5oCShyZXZpc2lvbiAyMjM2ODApCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNyArMjcsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBOb2RlVmVjdG9y
IG5vdGlmeUNoaWxkTm9kZUluc2VydGVkKENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRU
cmVlLCBOb2RlJik7Ci12b2lkIG5vdGlmeUNoaWxkTm9kZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYg
aW5zZXJ0aW9uUG9pbnQsIE5vZGUmKTsKK3ZvaWQgbm90aWZ5Q2hpbGROb2RlUmVtb3ZlZChDb250
YWluZXJOb2RlJiBwYXJlbnRPZlJlbW92ZWRUcmVlLCBOb2RlJik7CiB2b2lkIHJlbW92ZURldGFj
aGVkQ2hpbGRyZW5JbkNvbnRhaW5lcihDb250YWluZXJOb2RlJik7CiAKIGVudW0gU3ViZnJhbWVE
aXNjb25uZWN0UG9saWN5IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDIy
MzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY4Myw3ICsxNjgzLDcgQEAgTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IEVsZW1lbnQ6Omlu
c2VydAogICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKLXZvaWQgRWxl
bWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCit2b2lkIEVs
ZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJOb2Rl
JiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAg
ICBpZiAoY29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCgpKQpAQCAtMTY5NiwzMCArMTY5NiwyNyBA
QCB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmCiAKICAgICBzZXRTYXZl
ZExheWVyU2Nyb2xsUG9zaXRpb24oU2Nyb2xsUG9zaXRpb24oKSk7CiAKLSAgICBpZiAoaW5zZXJ0
aW9uUG9pbnQuaXNJblRyZWVTY29wZSgpKSB7Ci0gICAgICAgIFRyZWVTY29wZSogb2xkU2NvcGUg
PSAmaW5zZXJ0aW9uUG9pbnQudHJlZVNjb3BlKCk7Ci0gICAgICAgIGJvb2wgYmVjb21lRGlzY29u
bmVjdGVkID0gaXNDb25uZWN0ZWQoKTsKLSAgICAgICAgSFRNTERvY3VtZW50KiBvbGREb2N1bWVu
dCA9IGJlY29tZURpc2Nvbm5lY3RlZCAmJiBpczxIVE1MRG9jdW1lbnQ+KG9sZFNjb3BlLT5kb2N1
bWVudFNjb3BlKCkpID8gJmRvd25jYXN0PEhUTUxEb2N1bWVudD4ob2xkU2NvcGUtPmRvY3VtZW50
U2NvcGUoKSkgOiBudWxscHRyOwotCi0gICAgICAgIC8vIENvbnRhaW5lck5vZGU6OnJlbW92ZUJl
dHdlZW4gYWx3YXlzIHNldHMgdGhlIHJlbW92ZWQgY2hpZCdzIHRyZWUgc2NvcGUgdG8gRG9jdW1l
bnQncyBidXQgSW5UcmVlU2NvcGUgZmxhZyBpcyB1bnNldCBpbiBOb2RlOjpyZW1vdmVkRnJvbS4K
LSAgICAgICAgLy8gU28gdGhpcyBlbGVtZW50IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgb2xk
IHRyZWUgc2NvcGUgb25seSBpZiBJblRyZWVTY29wZSBmbGFnIGlzIHNldCBhbmQgdGhpcyBlbGVt
ZW50J3MgdHJlZSBzY29wZSBpcyBEb2N1bWVudCdzLgotICAgICAgICBpZiAoIWlzSW5UcmVlU2Nv
cGUoKSB8fCAmdHJlZVNjb3BlKCkgIT0gJmRvY3VtZW50KCkpCisgICAgaWYgKHBhcmVudE9mUmVt
b3ZlZFRyZWUuaXNJblRyZWVTY29wZSgpKSB7CisgICAgICAgIFRyZWVTY29wZSogb2xkU2NvcGUg
PSAmcGFyZW50T2ZSZW1vdmVkVHJlZS50cmVlU2NvcGUoKTsKKyAgICAgICAgRG9jdW1lbnQqIG9s
ZERvY3VtZW50ID0gcmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50ID8gJm9sZFNj
b3BlLT5kb2N1bWVudFNjb3BlKCkgOiBudWxscHRyOworICAgICAgICBIVE1MRG9jdW1lbnQqIG9s
ZEhUTUxEb2N1bWVudCA9IG9sZERvY3VtZW50ICYmIGlzPEhUTUxEb2N1bWVudD4oKm9sZERvY3Vt
ZW50KSA/ICZkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCpvbGREb2N1bWVudCkgOiBudWxscHRyOwor
ICAgICAgICBpZiAoIXJlbW92YWxUeXBlLnRyZWVTY29wZUNoYW5nZWQpCiAgICAgICAgICAgICBv
bGRTY29wZSA9IG51bGxwdHI7CiAKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZFZhbHVl
ID0gZ2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgaWYgKCFpZFZhbHVlLmlzTnVsbCgpKSB7CiAg
ICAgICAgICAgICBpZiAob2xkU2NvcGUpCiAgICAgICAgICAgICAgICAgdXBkYXRlSWRGb3JUcmVl
U2NvcGUoKm9sZFNjb3BlLCBpZFZhbHVlLCBudWxsQXRvbSgpKTsKLSAgICAgICAgICAgIGlmIChv
bGREb2N1bWVudCkKLSAgICAgICAgICAgICAgICB1cGRhdGVJZEZvckRvY3VtZW50KCpvbGREb2N1
bWVudCwgaWRWYWx1ZSwgbnVsbEF0b20oKSwgQWx3YXlzVXBkYXRlSFRNTERvY3VtZW50TmFtZWRJ
dGVtTWFwcyk7CisgICAgICAgICAgICBpZiAob2xkSFRNTERvY3VtZW50KQorICAgICAgICAgICAg
ICAgIHVwZGF0ZUlkRm9yRG9jdW1lbnQoKm9sZEhUTUxEb2N1bWVudCwgaWRWYWx1ZSwgbnVsbEF0
b20oKSwgQWx3YXlzVXBkYXRlSFRNTERvY3VtZW50TmFtZWRJdGVtTWFwcyk7CiAgICAgICAgIH0K
IAogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVWYWx1ZSA9IGdldE5hbWVBdHRyaWJ1
dGUoKTsKICAgICAgICAgaWYgKCFuYW1lVmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIGlm
IChvbGRTY29wZSkKICAgICAgICAgICAgICAgICB1cGRhdGVOYW1lRm9yVHJlZVNjb3BlKCpvbGRT
Y29wZSwgbmFtZVZhbHVlLCBudWxsQXRvbSgpKTsKLSAgICAgICAgICAgIGlmIChvbGREb2N1bWVu
dCkKLSAgICAgICAgICAgICAgICB1cGRhdGVOYW1lRm9yRG9jdW1lbnQoKm9sZERvY3VtZW50LCBu
YW1lVmFsdWUsIG51bGxBdG9tKCkpOworICAgICAgICAgICAgaWYgKG9sZEhUTUxEb2N1bWVudCkK
KyAgICAgICAgICAgICAgICB1cGRhdGVOYW1lRm9yRG9jdW1lbnQoKm9sZEhUTUxEb2N1bWVudCwg
bmFtZVZhbHVlLCBudWxsQXRvbSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChvbGRTY29w
ZSAmJiBoYXNUYWdOYW1lKGxhYmVsVGFnKSkgewpAQCAtMTcyNywxNiArMTcyNCwyMSBAQCB2b2lk
IEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmCiAgICAgICAgICAgICAgICAgdXBk
YXRlTGFiZWwoKm9sZFNjb3BlLCBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGZvckF0
dHIpLCBudWxsQXRvbSgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChiZWNvbWVEaXNjb25u
ZWN0ZWQgJiYgVU5MSUtFTFkoaXNEZWZpbmVkQ3VzdG9tRWxlbWVudCgpKSkKKyAgICAgICAgaWYg
KG9sZERvY3VtZW50KSB7CisgICAgICAgICAgICBpZiAob2xkRG9jdW1lbnQtPmNzc1RhcmdldCgp
ID09IHRoaXMpCisgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnNldENTU1RhcmdldChudWxs
cHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZW1vdmFsVHlwZS5kaXNjb25uZWN0ZWRG
cm9tRG9jdW1lbnQgJiYgVU5MSUtFTFkoaXNEZWZpbmVkQ3VzdG9tRWxlbWVudCgpKSkKICAgICAg
ICAgICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlRGlzY29ubmVjdGVkQ2Fs
bGJhY2tJZk5lZWRlZCgqdGhpcyk7CiAgICAgfQogCiAgICAgaWYgKCFwYXJlbnROb2RlKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHNoYWRvd1Jvb3QgPSBpbnNlcnRpb25Qb2ludC5zaGFkb3dSb290
KCkpCisgICAgICAgIGlmIChhdXRvKiBzaGFkb3dSb290ID0gcGFyZW50T2ZSZW1vdmVkVHJlZS5z
aGFkb3dSb290KCkpCiAgICAgICAgICAgICBzaGFkb3dSb290LT5ob3N0Q2hpbGRFbGVtZW50RGlk
Q2hhbmdlKCp0aGlzKTsKICAgICB9CiAKLSAgICBDb250YWluZXJOb2RlOjpyZW1vdmVkRnJvbShp
bnNlcnRpb25Qb2ludCk7CisgICAgQ29udGFpbmVyTm9kZTo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5
cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOwogCiAgICAgaWYgKGhhc1BlbmRpbmdSZXNvdXJjZXMo
KSkKICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlRWxlbWVu
dEZyb21QZW5kaW5nUmVzb3VyY2VzKHRoaXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZp
c2lvbiAyMjM2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NTIsNyArNTUyLDcgQEAgcHJvdGVjdGVkOgogICAgIEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50JiwgQ29uc3RydWN0aW9uVHlwZSk7CiAKICAgICBJbnNlcnRl
ZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsK
KyAgICB2b2lkIHJlbW92ZWRGcm9tKFJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmKSBvdmVycmlk
ZTsKICAgICB2b2lkIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCkgZmluYWw7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlckRpZFNldEF0dHJpYnV0ZXMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJl
dmlzaW9uIDIyMzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI1Myw5ICsxMjUzLDkgQEAgTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IE5vZGU6
Omluc2VydGVkSQogICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKLXZv
aWQgTm9kZTo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCit2b2lk
IE5vZGU6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJOb2Rl
JikKIHsKLSAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSkKKyAgICBpZiAocmVt
b3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KQogICAgICAgICBjbGVhckZsYWcoSXND
b25uZWN0ZWRGbGFnKTsKICAgICBpZiAoaXNJblNoYWRvd1RyZWUoKSAmJiAhdHJlZVNjb3BlKCku
cm9vdE5vZGUoKS5pc1NoYWRvd1Jvb3QoKSkKICAgICAgICAgY2xlYXJGbGFnKElzSW5TaGFkb3dU
cmVlRmxhZyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDIyMzY4MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzMywyMSArNDMzLDYgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBjb25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1
ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyID0gTk9QU0VVRE8pOwogCi0gICAgLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLSAgICAvLyBOb3RpZmljYXRpb24gb2YgZG9jdW1lbnQgc3RydWN0dXJl
IGNoYW5nZXMgKHNlZSBDb250YWluZXJOb2RlLmggZm9yIG1vcmUgbm90aWZpY2F0aW9uIG1ldGhv
ZHMpCi0gICAgLy8KLSAgICAvLyBBdCBmaXJzdCwgV2ViS2l0IG5vdGlmaWVzIHRoZSBub2RlIHRo
YXQgaXQgaGFzIGJlZW4gaW5zZXJ0ZWQgaW50byB0aGUgZG9jdW1lbnQuIFRoaXMgaXMgY2FsbGVk
IGR1cmluZyBkb2N1bWVudCBwYXJzaW5nLCBhbmQgYWxzbwotICAgIC8vIHdoZW4gYSBub2RlIGlz
IGFkZGVkIHRocm91Z2ggdGhlIERPTSBtZXRob2RzIGluc2VydEJlZm9yZSgpLCBhcHBlbmRDaGls
ZCgpIG9yIHJlcGxhY2VDaGlsZCgpLiBUaGUgY2FsbCBoYXBwZW5zIF9hZnRlcl8gdGhlIG5vZGUg
aGFzIGJlZW4gYWRkZWQgdG8gdGhlIHRyZWUuCi0gICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRo
ZSBET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQgRE9NIGV2ZW50LCBidXQgZG9lcyBub3QgcmVx
dWlyZSB0aGUgb3ZlcmhlYWQgb2YgZXZlbnQKLSAgICAvLyBkaXNwYXRjaGluZy4KLSAgICAvLwot
ICAgIC8vIFdlYktpdCBub3RpZmllcyB0aGlzIGNhbGxiYWNrIHJlZ2FyZGxlc3MgaWYgdGhlIHN1
YnRyZWUgb2YgdGhlIG5vZGUgaXMgYSBkb2N1bWVudCB0cmVlIG9yIGEgZmxvYXRpbmcgc3VidHJl
ZS4KLSAgICAvLyBJbXBsZW1lbnRhdGlvbiBjYW4gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIHN1YnRy
ZWUgYnkgc2VlaW5nIGluc2VydGlvblBvaW50LT5pc0Nvbm5lY3RlZCgpLgotICAgIC8vCi0gICAg
Ly8gVGhlcmUgaXMgYW5vdGhlciBjYWxsYmFjayBuYW1lZCBkaWRGaW5pc2hJbnNlcnRpbmdOb2Rl
KCksIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgZGVzY2VuZGFudHMgYXJlIG5vdGlmaWVkLgot
ICAgIC8vIE9ubHkgYSBmZXcgc3ViY2xhc3NlcyBhY3R1YWxseSBuZWVkIHRoaXMuIFRvIHV0aWxp
emUgdGhpcywgdGhlIG5vZGUgc2hvdWxkIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6Ok5lZWRz
UG9zdEluc2VydGlvbkNhbGxiYWNrCi0gICAgLy8gZnJvbSBpbnNydGVkSW50bygpLgotICAgIC8v
CiAgICAgZW51bSBjbGFzcyBJbnNlcnRlZEludG9SZXN1bHQgewogICAgICAgICBEb25lLAogICAg
ICAgICBOZWVkc1Bvc3RJbnNlcnRpb25DYWxsYmFjaywKQEAgLTQ2MywxNSArNDQ4LDIyIEBAIHB1
YmxpYzoKICAgICAgICAgYm9vbCBjb25uZWN0ZWRUb0RvY3VtZW50IHsgZmFsc2UgfTsKICAgICAg
ICAgYm9vbCB0cmVlU2NvcGVDaGFuZ2VkIHsgZmFsc2UgfTsKICAgICB9OworICAgIC8vIENhbGxl
ZCAqYWZ0ZXIqIHRoaXMgbm9kZSBvciBpdHMgYW5jZXN0b3IgaXMgaW5zZXJ0ZWQgaW50byBhIG5l
dyBwYXJlbnQgKG1heSBvciBtYXkgbm90IGJlIGEgcGFydCBvZiBkb2N1bWVudCkgYnkgc2NyaXB0
cyBvciBwYXJzZXIuCisgICAgLy8gaW5zZXJ0ZWRJbnRvICoqTVVTVCBOT1QqKiBpbnZva2Ugc2Ny
aXB0cy4gUmV0dXJuIE5lZWRzUG9zdEluc2VydGlvbkNhbGxiYWNrIGFuZCBpbXBsZW1lbnQgZGlk
RmluaXNoSW5zZXJ0aW5nTm9kZSBpbnN0ZWFkIHRvIHJ1biBzY3JpcHRzLgogICAgIHZpcnR1YWwg
SW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWluZXJO
b2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSk7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaElu
c2VydGluZ05vZGUoKSB7IH0KIAotICAgIC8vIE5vdGlmaWVzIHRoZSBub2RlIHRoYXQgaXQgaXMg
bm8gbG9uZ2VyIHBhcnQgb2YgdGhlIHRyZWUuCi0gICAgLy8KLSAgICAvLyBUaGlzIGlzIGEgZHVh
bCBvZiBpbnNlcnRlZEludG8oKSwgYW5kIGlzIHNpbWlsYXIgdG8gdGhlIERPTU5vZGVSZW1vdmVk
RnJvbURvY3VtZW50IERPTSBldmVudCwgYnV0IGRvZXMgbm90IHJlcXVpcmUgdGhlIG92ZXJoZWFk
IG9mIGV2ZW50Ci0gICAgLy8gZGlzcGF0Y2hpbmcsIGFuZCBpcyBjYWxsZWQgX2FmdGVyXyB0aGUg
bm9kZSBpcyByZW1vdmVkIGZyb20gdGhlIHRyZWUuCi0gICAgLy8KLSAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpOworICAgIHN0cnVjdCBS
ZW1vdmFsVHlwZSB7CisjaWYgIUNPTVBJTEVSX1NVUFBPUlRTKE5TRE1JX0ZPUl9BR0dSRUdBVEVT
KQorICAgICAgICBSZW1vdmFsVHlwZShib29sIGRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCwgYm9v
bCB0cmVlU2NvcGVDaGFuZ2VkKQorICAgICAgICAgICAgOiBkaXNjb25uZWN0ZWRGcm9tRG9jdW1l
bnQoZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KQorICAgICAgICAgICAgLCB0cmVlU2NvcGVDaGFu
Z2VkKHRyZWVTY29wZUNoYW5nZWQpCisgICAgICAgIHsgfQorI2VuZGlmCisgICAgICAgIGJvb2wg
ZGlzY29ubmVjdGVkRnJvbURvY3VtZW50IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCB0cmVlU2Nv
cGVDaGFuZ2VkIHsgZmFsc2UgfTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJv
bShSZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSk7CiAKICNp
ZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCiAgICAgdmlydHVhbCB2b2lkIGZvcm1hdEZvckRlYnVn
Z2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCShyZXZpc2lvbiAyMjM2ODAp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjg4LDEwICsyODgsMTAgQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246
OmRpZEZpbmlzaElucwogICAgIGNoZWNrU3R5bGVTaGVldCgpOwogfQogCi12b2lkIFByb2Nlc3Np
bmdJbnN0cnVjdGlvbjo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQp
Cit2b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6cmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUgcmVt
b3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mUmVtb3ZlZFRyZWUpCiB7Ci0gICAgQ2hh
cmFjdGVyRGF0YTo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9uUG9pbnQpOwotICAgIGlmICghaW5zZXJ0
aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSkKKyAgICBDaGFyYWN0ZXJEYXRhOjpyZW1vdmVkRnJvbShy
ZW1vdmFsVHlwZSwgcGFyZW50T2ZSZW1vdmVkVHJlZSk7CisgICAgaWYgKCFyZW1vdmFsVHlwZS5k
aXNjb25uZWN0ZWRGcm9tRG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBkb2N1
bWVudCgpLnN0eWxlU2NvcGUoKS5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSgqdGhpcyk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oCShyZXZp
c2lvbiAyMjM2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHJpdmF0ZToKIAogICAgIEluc2Vy
dGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYp
IG92ZXJyaWRlOwogICAgIHZvaWQgZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOworICAgIHZvaWQg
cmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKIAogICAg
IHZvaWQgY2hlY2tTdHlsZVNoZWV0KCk7CiAgICAgdm9pZCBzZXRDU1NTdHlsZVNoZWV0KGNvbnN0
IFN0cmluZyYgaHJlZiwgY29uc3QgVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQs
IGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9TaGFkb3dSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
U2hhZG93Um9vdC5jcHAJKHJldmlzaW9uIDIyMzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9T
aGFkb3dSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTAgKzkzLDEwIEBAIE5vZGU6Oklu
c2VydGVkSW50b1Jlc3VsdCBTaGFkb3dSb290OjppbnMKICAgICByZXR1cm4gSW5zZXJ0ZWRJbnRv
UmVzdWx0OjpEb25lOwogfQogCi12b2lkIFNoYWRvd1Jvb3Q6OnJlbW92ZWRGcm9tKENvbnRhaW5l
ck5vZGUmIGluc2VydGlvblBvaW50KQordm9pZCBTaGFkb3dSb290OjpyZW1vdmVkRnJvbShSZW1v
dmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSkK
IHsKLSAgICBEb2N1bWVudEZyYWdtZW50OjpyZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7Ci0g
ICAgaWYgKGluc2VydGlvblBvaW50LmlzQ29ubmVjdGVkKCkgJiYgIWlzQ29ubmVjdGVkKCkpCisg
ICAgRG9jdW1lbnRGcmFnbWVudDo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9mUmVt
b3ZlZFRyZWUpOworICAgIGlmIChyZW1vdmFsVHlwZS5kaXNjb25uZWN0ZWRGcm9tRG9jdW1lbnQp
CiAgICAgICAgIGRvY3VtZW50KCkuZGlkUmVtb3ZlSW5Eb2N1bWVudFNoYWRvd1Jvb3QoKnRoaXMp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgJKHJldmlzaW9uIDIyMzY4MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcg
Kzk1LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8Tm9kZT4gY2xvbmVOb2RlSW50ZXJuYWwoRG9jdW1l
bnQmLCBDbG9uaW5nT3BlcmF0aW9uKSBvdmVycmlkZTsKIAogICAgIE5vZGU6Okluc2VydGVkSW50
b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJy
aWRlOwotICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQp
IG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5v
ZGUmIGluc2VydGlvblBvaW50KSBvdmVycmlkZTsKICAgICB2b2lkIGRpZE1vdmVUb05ld0RvY3Vt
ZW50KERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KSBvdmVycmlk
ZTsKIAogICAgIGJvb2wgbV9yZXNldFN0eWxlSW5oZXJpdGFuY2UgeyBmYWxzZSB9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAkocmV2aXNp
b24gMjIzNjgwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRF
bGVtZW50OjppbnNlcnRlZEludG8KICAgICAgICAgcmVzZXRGb3JtQXR0cmlidXRlVGFyZ2V0T2Jz
ZXJ2ZXIoKTsKIH0KIAotdm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENv
bnRhaW5lck5vZGUmKQordm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tKE5v
ZGU6OlJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJikKIHsKICAgICBtX2Zvcm1BdHRyaWJ1dGVU
YXJnZXRPYnNlcnZlciA9IG51bGxwdHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9y
bUFzc29jaWF0ZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9G
b3JtQXNzb2NpYXRlZEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNjgwKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyAr
OTEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KEhUTUxGb3JtRWxl
bWVudCopOwogCiAgICAgdm9pZCBpbnNlcnRlZEludG8oTm9kZTo6SW5zZXJ0aW9uVHlwZSwgQ29u
dGFpbmVyTm9kZSYpOwotICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpOworICAg
IHZvaWQgcmVtb3ZlZEZyb20oTm9kZTo6UmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmKTsKICAg
ICB2b2lkIGRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVudCk7CiAKICAg
ICB2b2lkIHNldEZvcm0oSFRNTEZvcm1FbGVtZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxCYXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQmFzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM2ODApCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxCYXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEwICs1OSwx
MCBAQCBOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTEJhc2VFbGVtZW50CiAgICAgcmV0dXJu
IEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAotdm9pZCBIVE1MQmFzZUVsZW1lbnQ6OnJl
bW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQordm9pZCBIVE1MQmFzZUVs
ZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJOb2Rl
JiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewotICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbShp
bnNlcnRpb25Qb2ludCk7Ci0gICAgaWYgKGluc2VydGlvblBvaW50LmlzQ29ubmVjdGVkKCkpCisg
ICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKHJlbW92YWxUeXBlLCBwYXJlbnRPZlJlbW92ZWRU
cmVlKTsKKyAgICBpZiAocmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KQogICAg
ICAgICBkb2N1bWVudCgpLnByb2Nlc3NCYXNlRWxlbWVudCgpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxCYXNlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEJhc2VFbGVtZW50LmgJKHJldmlzaW9uIDIyMzY4MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEJhc2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzVVJMQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYp
IGNvbnN0IGZpbmFsOwogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIGZpbmFsOwogICAgIEluc2VydGVkSW50b1Jlc3VsdCBp
bnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwotICAgIHZv
aWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlZEZy
b20oUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIyMzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1D
b250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCB2b2lk
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpZEZpbmlzaEluCiAgICAgcmVzZXRGb3JtT3duZXIo
KTsKIH0KIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWlu
ZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVt
b3ZlZEZyb20oUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9m
UmVtb3ZlZFRyZWUpCiB7CiAgICAgYm9vbCB3YXNNYXRjaGluZ0ludmFsaWRQc2V1ZG9DbGFzcyA9
IHdpbGxWYWxpZGF0ZSgpICYmICFpc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAKQEAgLTMw
MCwxMSArMzAwLDExIEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlZEZyb20K
ICAgICBpZiAobV9kaXNhYmxlZEJ5QW5jZXN0b3JGaWVsZHNldCkKICAgICAgICAgc2V0QW5jZXN0
b3JEaXNhYmxlZChjb21wdXRlSXNEaXNhYmxlZEJ5RmllbGRzZXRBbmNlc3RvcigpKTsKICAgICBt
X2RhdGFMaXN0QW5jZXN0b3JTdGF0ZSA9IFVua25vd247Ci0gICAgSFRNTEVsZW1lbnQ6OnJlbW92
ZWRGcm9tKGluc2VydGlvblBvaW50KTsKLSAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92
ZWRGcm9tKGluc2VydGlvblBvaW50KTsKKyAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb20ocmVt
b3ZhbFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOworICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dDo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOwogCiAgICAg
aWYgKHdhc01hdGNoaW5nSW52YWxpZFBzZXVkb0NsYXNzKQotICAgICAgICByZW1vdmVJbnZhbGlk
RWxlbWVudFRvQW5jZXN0b3JGcm9tSW5zZXJ0aW9uUG9pbnQoKnRoaXMsICZpbnNlcnRpb25Qb2lu
dCk7CisgICAgICAgIHJlbW92ZUludmFsaWRFbGVtZW50VG9BbmNlc3RvckZyb21JbnNlcnRpb25Q
b2ludCgqdGhpcywgJnBhcmVudE9mUmVtb3ZlZFRyZWUpOwogfQogCiB2b2lkIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OnNldENoYW5nZWRTaW5jZUxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KGJv
b2wgY2hhbmdlZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
RWxlbWVudC5oCShyZXZpc2lvbiAyMjM2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw3IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIGRpZEF0dGFjaFJlbmRlcmVycygpIG92ZXJyaWRlOwogICAgIElu
c2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9k
ZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpIG92ZXJyaWRl
OwotICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOworICAgIHZv
aWQgcmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1l
bnQmIG5ld0RvY3VtZW50KSBvdmVycmlkZTsKIAogICAgIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNv
bnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwCShyZXZpc2lvbiAyMjM2ODApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NywxMSArNDcsMTEgQEAgTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0
IEhUTUxGb3JtQ29udHJvbAogICAgIHJldHVybiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjppbnNl
cnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOwogfQogCi12b2lk
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5v
ZGUmIGluc2VydGlvblBvaW50KQordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
OjpyZW1vdmVkRnJvbShSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFy
ZW50T2ZSZW1vdmVkVHJlZSkKIHsKLSAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQo
KSAmJiAhY29udGFpbmluZ1NoYWRvd1Jvb3QoKSAmJiAhaW5zZXJ0aW9uUG9pbnQuY29udGFpbmlu
Z1NoYWRvd1Jvb3QoKSkKKyAgICBpZiAocmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3Vt
ZW50ICYmICFjb250YWluaW5nU2hhZG93Um9vdCgpICYmICFwYXJlbnRPZlJlbW92ZWRUcmVlLmNv
bnRhaW5pbmdTaGFkb3dSb290KCkpCiAgICAgICAgIGRvY3VtZW50KCkuZm9ybUNvbnRyb2xsZXIo
KS51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7Ci0gICAgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9uUG9pbnQpOworICAgIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OnJlbW92ZWRGcm9tKHJlbW92YWxUeXBlLCBwYXJlbnRPZlJlbW92ZWRUcmVl
KTsKIH0KIAogYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpzaG91bGRBdXRv
Y29tcGxldGUoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmgJKHJldmlzaW9uIDIyMzY4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkQXV0b2NvbXBsZXRlKCkgY29uc3Q7CiAgICAgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRy
ZW4oKSBvdmVycmlkZTsKICAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2Vy
dGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZWRGcm9t
KENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZWRGcm9tKFJlbW92YWxU
eXBlLCBDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc0Zvcm1Db250cm9sRWxl
bWVudFdpdGhTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOwogfTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNjgwKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTMg
KzEyOSwxMyBAQCBOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTEZvcm1FbGVtZW50CiAgICAg
cmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAotdm9pZCBIVE1MRm9ybUVsZW1l
bnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQordm9pZCBIVE1M
Rm9ybUVsZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWlu
ZXJOb2RlJiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewogICAgIE5vZGUmIHJvb3QgPSB0cmF2ZXJz
ZVRvUm9vdE5vZGUoKTsgLy8gRG8gbm90IHJlbHkgb24gcm9vdE5vZGUoKSBiZWNhdXNlIG91ciBJ
c0luVHJlZVNjb3BlIGlzIG91dGRhdGVkLgogICAgIFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1l
bnQqPiBhc3NvY2lhdGVkRWxlbWVudHMobV9hc3NvY2lhdGVkRWxlbWVudHMpOwogICAgIGZvciAo
YXV0byYgYXNzb2NpYXRlZEVsZW1lbnQgOiBhc3NvY2lhdGVkRWxlbWVudHMpCiAgICAgICAgIGFz
c29jaWF0ZWRFbGVtZW50LT5mb3JtT3duZXJSZW1vdmVkRnJvbVRyZWUocm9vdCk7Ci0gICAgSFRN
TEVsZW1lbnQ6OnJlbW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsKKyAgICBIVE1MRWxlbWVudDo6
cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOwogfQogCiB2b2lk
IEhUTUxGb3JtRWxlbWVudDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmIGV2ZW50KQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCShyZXZpc2lvbiAyMjM2ODApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjUsNyArMTI1LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25z
dCBSZW5kZXJTdHlsZSYpIGZpbmFsOwogICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZElu
dG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwotICAgIHZvaWQgcmVtb3Zl
ZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlZEZyb20oUmVtb3Zh
bFR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIGZpbmlzaFBhcnNpbmdDaGls
ZHJlbigpIGZpbmFsOwogCiAgICAgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCYpIGZpbmFs
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyMjM2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksMTAgKzIxOSwxMCBAQCBOb2RlOjpJbnNlcnRl
ZEludG9SZXN1bHQgSFRNTEZyYW1lU2V0RWxlCiAgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3Vs
dDo6RG9uZTsKIH0KIAotdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50OjpyZW1vdmVkRnJvbShDb250
YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK3ZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6cmVt
b3ZlZEZyb20oUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9m
UmVtb3ZlZFRyZWUpCiB7Ci0gICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKGluc2VydGlvblBv
aW50KTsKLSAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSkgeworICAgIEhUTUxF
bGVtZW50OjpyZW1vdmVkRnJvbShyZW1vdmFsVHlwZSwgcGFyZW50T2ZSZW1vdmVkVHJlZSk7Cisg
ICAgaWYgKHJlbW92YWxUeXBlLmRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCkgewogICAgICAgICBp
ZiAoUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgICAg
IGZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5kaXNwYXRjaERpZEJlY29tZUZyYW1lc2V0KGRvY3Vt
ZW50KCkuaXNGcmFtZVNldCgpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGcmFtZVNldEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGcmFtZVNldEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNjgwKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHdpbGxSZWNhbGNTdHlsZShTdHlsZTo6Q2hhbmdlKSBmaW5h
bDsKIAogICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwg
Q29udGFpbmVyTm9kZSYpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9k
ZSYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5v
ZGUmKSBmaW5hbDsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxMZW5ndGhbXT4gbV9yb3dMZW5ndGhz
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxMZW5ndGhbXT4gbV9jb2xMZW5ndGhzOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM2ODApCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzEsMTkgKzMzMSwxOSBAQCBOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTEltYWdl
RWxlbWVuCiAgICAgcmV0dXJuIGluc2VydE5vdGlmaWNhdGlvblJlcXVlc3Q7CiB9CiAKLXZvaWQg
SFRNTEltYWdlRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9p
bnQpCit2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92
YWxUeXBlLCBDb250YWluZXJOb2RlJiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewogICAgIGlmICht
X2Zvcm0pCiAgICAgICAgIG1fZm9ybS0+cmVtb3ZlSW1nRWxlbWVudCh0aGlzKTsKIAotICAgIGlm
IChpbnNlcnRpb25Qb2ludC5pc0Nvbm5lY3RlZCgpICYmICFtX3BhcnNlZFVzZW1hcC5pc051bGwo
KSkKKyAgICBpZiAocmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50ICYmICFtX3Bh
cnNlZFVzZW1hcC5pc051bGwoKSkKICAgICAgICAgZG9jdW1lbnQoKS5yZW1vdmVJbWFnZUVsZW1l
bnRCeVVzZW1hcCgqbV9wYXJzZWRVc2VtYXAuaW1wbCgpLCAqdGhpcyk7Ci0gICAgCisKICAgICBp
ZiAoaXM8SFRNTFBpY3R1cmVFbGVtZW50PihwYXJlbnROb2RlKCkpKQogICAgICAgICBzZXRQaWN0
dXJlRWxlbWVudChudWxscHRyKTsKLSAgICAKKwogICAgIG1fZm9ybSA9IG51bGxwdHI7Ci0gICAg
SFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsKKyAgICBIVE1MRWxlbWVu
dDo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOwogfQogCiBI
VE1MUGljdHVyZUVsZW1lbnQqIEhUTUxJbWFnZUVsZW1lbnQ6OnBpY3R1cmVFbGVtZW50KCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCShyZXZpc2lvbiAy
MjM2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGRTdWJyZXNv
dXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWlu
ZXJOb2RlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlJikg
b3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVkRnJvbShSZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9k
ZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBpc0Zvcm1Bc3NvY2lhdGVkRWxlbWVudCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgRm9ybU5hbWVkSXRlbSogYXNGb3JtTmFtZWRJ
dGVtKCkgZmluYWwgeyByZXR1cm4gdGhpczsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTE5LDExICsxNTE5
LDExIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW4KICAgICAgICAg
YWRkVG9SYWRpb0J1dHRvbkdyb3VwKCk7CiB9CiAKLXZvaWQgSFRNTElucHV0RWxlbWVudDo6cmVt
b3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCit2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJOb2Rl
JiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewotICAgIGlmIChpbnNlcnRpb25Qb2ludC5pc0Nvbm5l
Y3RlZCgpICYmICFmb3JtKCkpCisgICAgaWYgKHJlbW92YWxUeXBlLmRpc2Nvbm5lY3RlZEZyb21E
b2N1bWVudCAmJiAhZm9ybSgpKQogICAgICAgICByZW1vdmVGcm9tUmFkaW9CdXR0b25Hcm91cCgp
OwotICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVkRnJvbShpbnNlcnRpb25Q
b2ludCk7CisgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZWRGcm9tKHJlbW92
YWxUeXBlLCBwYXJlbnRPZlJlbW92ZWRUcmVlKTsKICAgICBBU1NFUlQoIWlzQ29ubmVjdGVkKCkp
OwogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQogICAgIHJlc2V0TGlzdEF0dHJpYnV0ZVRh
cmdldE9ic2VydmVyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
aAkocmV2aXNpb24gMjIzNjgwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgZGlkQ2hhbmdlRm9ybSgpIGZpbmFsOwogICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRl
ZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIHZvaWQgZGlk
RmluaXNoSW5zZXJ0aW5nTm9kZSgpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFp
bmVyTm9kZSYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUsIENvbnRh
aW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIGRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50
JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KSBmaW5hbDsKIAogICAgIGJvb2wg
aGFzQ3VzdG9tRm9jdXNMb2dpYygpIGNvbnN0IGZpbmFsOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTExpbmtFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNjgwKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTcsMTAgKzM1
NywxMCBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nCiAgICAgcHJv
Y2VzcygpOwogfQogCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVy
Tm9kZSYgaW5zZXJ0aW9uUG9pbnQpCit2b2lkIEhUTUxMaW5rRWxlbWVudDo6cmVtb3ZlZEZyb20o
UmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mUmVtb3ZlZFRy
ZWUpCiB7Ci0gICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsKLSAg
ICBpZiAoIWluc2VydGlvblBvaW50LmlzQ29ubmVjdGVkKCkgfHwgaXNDb25uZWN0ZWQoKSkKKyAg
ICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRy
ZWUpOworICAgIGlmICghcmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KQogICAg
ICAgICByZXR1cm47CiAKICAgICBtX2xpbmtMb2FkZXIuY2FuY2VsTG9hZCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCShyZXZpc2lvbiAyMjM2ODApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3
ICs4Myw3IEBAIHByaXZhdGU6CiAKICAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRv
KEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIGRpZEZpbmlz
aEluc2VydGluZ05vZGUoKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5v
ZGUmKSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZWRGcm9tKFJlbW92YWxUeXBlLCBDb250YWluZXJO
b2RlJikgZmluYWw7CiAKICAgICB2b2lkIGluaXRpYWxpemVTdHlsZVNoZWV0KFJlZjxTdHlsZVNo
ZWV0Q29udGVudHM+JiYsIGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQmKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzY4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjIsMTEgKzEyMiwxMSBAQCBOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTE1hcEVsZW1lbnQ6
CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKLXZvaWQgSFRNTE1hcEVsZW1lbnQ6OnJlbW92ZWRG
cm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQordm9pZCBIVE1MTWFwRWxlbWVudDo6
cmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVu
dE9mUmVtb3ZlZFRyZWUpCiB7Ci0gICAgaWYgKGluc2VydGlvblBvaW50LmlzQ29ubmVjdGVkKCkp
CisgICAgaWYgKHJlbW92YWxUeXBlLmRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCkKICAgICAgICAg
dHJlZVNjb3BlKCkucmVtb3ZlSW1hZ2VNYXAoKnRoaXMpOwotICAgIEhUTUxFbGVtZW50OjpyZW1v
dmVkRnJvbShpbnNlcnRpb25Qb2ludCk7CisgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKHJl
bW92YWxUeXBlLCBwYXJlbnRPZlJlbW92ZWRUcmVlKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1hcEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNjgwKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWFwRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
Y29uc3QgQXRvbWljU3RyaW5nJikgZmluYWw7CiAKICAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5z
ZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKLSAgICB2b2lk
IHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmKSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZWRGcm9t
KFJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAKICAgICBBdG9taWNTdHJpbmcg
bV9uYW1lOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAkocmV2aXNpb24gMjIzNjgwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMwLDE3ICs5MzAsMTcgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjpwYXVzZUFmdGVyRGV0YWNoZQogICAgIH0KIH0KIAotdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK3ZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6cmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENv
bnRhaW5lck5vZGUmIHBhcmVudE9mUmVtb3ZlZFRyZWUpCiB7CiAgICAgSU5GT19MT0coTE9HSURF
TlRJRklFUik7CiAKICAgICBtX2luQWN0aXZlRG9jdW1lbnQgPSBmYWxzZTsKLSAgICBpZiAoaW5z
ZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSkgeworICAgIGlmIChyZW1vdmFsVHlwZS5kaXNjb25u
ZWN0ZWRGcm9tRG9jdW1lbnQpIHsKICAgICAgICAgLy8gUGF1c2UgYXN5bmNocm9ub3VzbHkgdG8g
bGV0IHRoZSBvcGVyYXRpb24gdGhhdCByZW1vdmVkIHVzIGZpbmlzaCwgaW4gY2FzZSB3ZSBnZXQg
aW5zZXJ0ZWQgYmFjayBpbnRvIGEgZG9jdW1lbnQuCiAgICAgICAgIG1fcGF1c2VBZnRlckRldGFj
aGVkVGFza1F1ZXVlLmVucXVldWVUYXNrKHN0ZDo6YmluZCgmSFRNTE1lZGlhRWxlbWVudDo6cGF1
c2VBZnRlckRldGFjaGVkVGFzaywgdGhpcykpOwogICAgIH0KIAotICAgIEhUTUxFbGVtZW50Ojpy
ZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7CisgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9t
KHJlbW92YWxUeXBlLCBwYXJlbnRPZlJlbW92ZWRUcmVlKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFF
bGVtZW50Ojp3aWxsQXR0YWNoUmVuZGVyZXJzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAyMjM2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTkwLDcgKzU5MCw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKGNvbnN0IE5vZGUmKSBj
b25zdCBvdmVycmlkZTsKICAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2Vy
dGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZEZpbmlzaElu
c2VydGluZ05vZGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5v
ZGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZWRGcm9tKFJlbW92YWxUeXBlLCBDb250YWlu
ZXJOb2RlJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNhbGNTdHlsZShTdHlsZTo6Q2hhbmdl
KSBvdmVycmlkZTsKIAogICAgIHZvaWQgd2lsbEJlY29tZUZ1bGxzY3JlZW5FbGVtZW50KCkgb3Zl
cnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAko
cmV2aXNpb24gMjIzNjgwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNSwxMCArMzI1LDEwIEBAIHZvaWQgSFRNTE9iamVj
dEVsZW1lbnQ6OmRpZEZpbmlzaEluc2VydGkKICAgICByZXNldEZvcm1Pd25lcigpOwogfQogCi12
b2lkIEhUTUxPYmplY3RFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRp
b25Qb2ludCkKK3ZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBl
IHJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewotICAg
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsKLSAg
ICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsKKyAg
ICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZW1vdmVkRnJvbShyZW1vdmFsVHlwZSwgcGFyZW50
T2ZSZW1vdmVkVHJlZSk7CisgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZW1vdmVkRnJvbShy
ZW1vdmFsVHlwZSwgcGFyZW50T2ZSZW1vdmVkVHJlZSk7CiB9CiAKIHZvaWQgSFRNTE9iamVjdEVs
ZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2hhbmdlKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNjgwKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw3ICs2NCw3IEBAIHByaXZhdGU6CiAKICAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5z
ZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lk
IGRpZEZpbmlzaEluc2VydGluZ05vZGUoKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZWRGcm9tKENv
bnRhaW5lck5vZGUmKSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZWRGcm9tKFJlbW92YWxUeXBlLCBD
b250YWluZXJOb2RlJikgZmluYWw7CiAKICAgICB2b2lkIGRpZE1vdmVUb05ld0RvY3VtZW50KERv
Y3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KSBmaW5hbDsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2xvdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNsb3RFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNjgw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2xvdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MSwxNyArNjEsMTUgQEAgSFRNTFNsb3RFbGVtZW50OjpJbnNlcnRlZEludG9SZXN1
bHQgSFRNTAogICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKLXZvaWQg
SFRNTFNsb3RFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2lu
dCkKK3ZvaWQgSFRNTFNsb3RFbGVtZW50OjpyZW1vdmVkRnJvbShSZW1vdmFsVHlwZSByZW1vdmFs
VHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSkKIHsKLSAgICAvLyBDb250
YWluZXJOb2RlOjpyZW1vdmVCZXR3ZWVuIGFsd2F5cyBzZXRzIHRoZSByZW1vdmVkIGNoaWxkJ3Mg
dHJlZSBzY29wZSB0byBEb2N1bWVudCdzIGJ1dCBJblNoYWRvd1Jvb3QgZmxhZyBpcyB1bnNldCBp
biBOb2RlOjpyZW1vdmVkRnJvbS4KLSAgICAvLyBTbyBpZiBJblNoYWRvd1Jvb3QgZmxhZyBpcyBz
ZXQgYnV0IHRoaXMgZWxlbWVudCdzIHRyZWUgc2NvcGUgaXMgRG9jdW1lbnQncywgdGhpcyBlbGVt
ZW50IGhhcyBqdXN0IGJlZW4gcmVtb3ZlZCBmcm9tIGEgc2hhZG93IHJvb3QuCi0gICAgaWYgKGlu
c2VydGlvblBvaW50LmlzSW5TaGFkb3dUcmVlKCkgJiYgaXNJblNoYWRvd1RyZWUoKSAmJiAmdHJl
ZVNjb3BlKCkgPT0gJmRvY3VtZW50KCkpIHsKLSAgICAgICAgYXV0byogb2xkU2hhZG93Um9vdCA9
IGluc2VydGlvblBvaW50LmNvbnRhaW5pbmdTaGFkb3dSb290KCk7CisgICAgaWYgKHJlbW92YWxU
eXBlLnRyZWVTY29wZUNoYW5nZWQgJiYgcGFyZW50T2ZSZW1vdmVkVHJlZS5pc0luU2hhZG93VHJl
ZSgpKSB7CisgICAgICAgIGF1dG8qIG9sZFNoYWRvd1Jvb3QgPSBwYXJlbnRPZlJlbW92ZWRUcmVl
LmNvbnRhaW5pbmdTaGFkb3dSb290KCk7CiAgICAgICAgIEFTU0VSVChvbGRTaGFkb3dSb290KTsK
ICAgICAgICAgb2xkU2hhZG93Um9vdC0+cmVtb3ZlU2xvdEVsZW1lbnRCeU5hbWUoYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihuYW1lQXR0ciksICp0aGlzKTsKICAgICB9CiAKLSAgICBI
VE1MRWxlbWVudDo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9uUG9pbnQpOworICAgIEhUTUxFbGVtZW50
OjpyZW1vdmVkRnJvbShyZW1vdmFsVHlwZSwgcGFyZW50T2ZSZW1vdmVkVHJlZSk7CiB9CiAKIHZv
aWQgSFRNTFNsb3RFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
bmV3VmFsdWUsIEF0dHJpYnV0ZU1vZGlmaWNhdGlvblJlYXNvbiByZWFzb24pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTbG90RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFNsb3RFbGVtZW50LmgJKHJldmlzaW9uIDIyMzY4MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFNsb3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcg
KzQ5LDcgQEAgcHJpdmF0ZToKICAgICBIVE1MU2xvdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Jik7CiAKICAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKElu
c2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZWRGcm9t
KENvbnRhaW5lck5vZGUmKSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZWRGcm9tKFJlbW92YWxUeXBl
LCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG5ld1ZhbHVlLCBBdHRyaWJ1dGVNb2RpZmljYXRpb25SZWFzb24pIGZpbmFsOwog
CiAgICAgYm9vbCBtX2luU2lnbmFsU2xvdExpc3QgeyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzY4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw2ICs2Niw3IEBAIFJlZjxIVE1MU291cmNlRWxlbWVudD4gSFRNTFNvdXJjZUVsZW1lbnQK
IE5vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBIVE1MU291cmNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
KEluc2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNl
cnRlZFRyZWUpCiB7CiAgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBl
LCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CisgICAgLy8gRklYTUU6IFRoaXMgY29kZSBpcyB3cm9u
ZyBpZiBhbiBhbmNlc3RvciBvZiB0aGUgcGFyZW50IGhhZCBiZWVuIGluc2VydGVkLgogICAgIGlm
IChhdXRvKiBwYXJlbnQgPSBwYXJlbnRFbGVtZW50KCkpIHsKICNpZiBFTkFCTEUoVklERU8pCiAg
ICAgICAgIGlmIChpczxIVE1MTWVkaWFFbGVtZW50PigqcGFyZW50KSkKQEAgLTc4LDExICs3OSwx
MiBAQCBOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTFNvdXJjZUVsZW1lCiAgICAgcmV0dXJu
IEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAotdm9pZCBIVE1MU291cmNlRWxlbWVudDo6
cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgcmVtb3ZhbFJvb3QpCit2b2lkIEhUTUxTb3VyY2VF
bGVtZW50OjpyZW1vdmVkRnJvbShSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9k
ZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSkKIHsKKyAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGlzIHdy
b25nIGlmIGFuIGFuY2VzdG9yIG9mIHRoZSBwYXJlbnQgaGFkIGJlZW4gcmVtb3ZlZC4KICAgICBS
ZWZQdHI8RWxlbWVudD4gcGFyZW50ID0gcGFyZW50RWxlbWVudCgpOwotICAgIGlmICghcGFyZW50
ICYmIGlzPEVsZW1lbnQ+KHJlbW92YWxSb290KSkKLSAgICAgICAgcGFyZW50ID0gJmRvd25jYXN0
PEVsZW1lbnQ+KHJlbW92YWxSb290KTsKKyAgICBpZiAoIXBhcmVudCAmJiBpczxFbGVtZW50Pihw
YXJlbnRPZlJlbW92ZWRUcmVlKSkKKyAgICAgICAgcGFyZW50ID0gJmRvd25jYXN0PEVsZW1lbnQ+
KHBhcmVudE9mUmVtb3ZlZFRyZWUpOwogICAgIGlmIChwYXJlbnQpIHsKICNpZiBFTkFCTEUoVklE
RU8pCiAgICAgICAgIGlmIChpczxIVE1MTWVkaWFFbGVtZW50PigqcGFyZW50KSkKQEAgLTkyLDcg
Kzk0LDcgQEAgdm9pZCBIVE1MU291cmNlRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udAogICAgICAg
ICBpZiAoaXM8SFRNTFBpY3R1cmVFbGVtZW50PigqcGFyZW50KSkKICAgICAgICAgICAgIGRvd25j
YXN0PEhUTUxQaWN0dXJlRWxlbWVudD4oKnBhcmVudCkuc291cmNlc0NoYW5nZWQoKTsKICAgICB9
Ci0gICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKHJlbW92YWxSb290KTsKKyAgICBIVE1MRWxl
bWVudDo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOwogfQog
CiB2b2lkIEhUTUxTb3VyY2VFbGVtZW50OjpzY2hlZHVsZUVycm9yRXZlbnQoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuaAkocmV2aXNpb24gMjIzNjgwKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw3ICs0Niw3IEBAIHByaXZhdGU6CiAgICAgSFRNTFNvdXJjZUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAgICAgCiAgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGlu
c2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7Ci0gICAgdm9p
ZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlJikgZmluYWw7CisgICAgdm9pZCByZW1vdmVkRnJv
bShSZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIGJvb2wgaXNVUkxBdHRy
aWJ1dGUoY29uc3QgQXR0cmlidXRlJikgY29uc3QgZmluYWw7CiAKICAgICAvLyBBY3RpdmVET01P
YmplY3QuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDIyMzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxMCArMTA0LDEwIEBAIE5vZGU6Okluc2VydGVkSW50
b1Jlc3VsdCBIVE1MU3R5bGVFbGVtZW4KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEhU
TUxTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50
KQordm9pZCBIVE1MU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJvbShSZW1vdmFsVHlwZSByZW1vdmFs
VHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSkKIHsKLSAgICBIVE1MRWxl
bWVudDo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9uUG9pbnQpOwotICAgIGlmIChpbnNlcnRpb25Qb2lu
dC5pc0Nvbm5lY3RlZCgpICYmICFpc0Nvbm5lY3RlZCgpKQorICAgIEhUTUxFbGVtZW50OjpyZW1v
dmVkRnJvbShyZW1vdmFsVHlwZSwgcGFyZW50T2ZSZW1vdmVkVHJlZSk7CisgICAgaWYgKHJlbW92
YWxUeXBlLmRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCkKICAgICAgICAgbV9zdHlsZVNoZWV0T3du
ZXIucmVtb3ZlZEZyb21Eb2N1bWVudCgqdGhpcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFN0eWxlRWxlbWVudC5oCShyZXZpc2lvbiAyMjM2ODApCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgQXRvbWljU3RyaW5nJikgZmluYWw7CiAgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGlu
c2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7Ci0gICAgdm9p
ZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlJikgZmluYWw7CisgICAgdm9pZCByZW1vdmVkRnJv
bShSZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIHZvaWQgY2hpbGRyZW5D
aGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJikgZmluYWw7CiAKICAgICBib29sIGlzTG9hZGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTaGVldE93bmVyLmlzTG9hZGluZygpOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzY4MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDkgKzU3LDkgQEAgTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IEhUTUxUaXRsZUVs
ZW1lbgogICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKLXZvaWQgSFRN
TFRpdGxlRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQp
Cit2b2lkIEhUTUxUaXRsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxU
eXBlLCBDb250YWluZXJOb2RlJiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewotICAgIEhUTUxFbGVt
ZW50OjpyZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7CisgICAgSFRNTEVsZW1lbnQ6OnJlbW92
ZWRGcm9tKHJlbW92YWxUeXBlLCBwYXJlbnRPZlJlbW92ZWRUcmVlKTsKICAgICBkb2N1bWVudCgp
LnRpdGxlRWxlbWVudFJlbW92ZWQoKnRoaXMpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUaXRsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUaXRsZUVsZW1lbnQuaAkocmV2aXNpb24gMjIzNjgwKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGl0bGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAg
cHJpdmF0ZToKICAgICBIVE1MVGl0bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCYpOwogCiAgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25U
eXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7Ci0gICAgdm9pZCByZW1vdmVkRnJvbShDb250YWlu
ZXJOb2RlJikgZmluYWw7CisgICAgdm9pZCByZW1vdmVkRnJvbShSZW1vdmFsVHlwZSwgQ29udGFp
bmVyTm9kZSYpIGZpbmFsOwogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hh
bmdlJikgZmluYWw7CiAKICAgICBTdHJpbmdXaXRoRGlyZWN0aW9uIGNvbXB1dGVkVGV4dFdpdGhE
aXJlY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNw
cAkocmV2aXNpb24gMjIzNjgwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTIgKzkxLDE0IEBAIE5vZGU6Okluc2VydGVk
SW50b1Jlc3VsdCBIVE1MVHJhY2tFbGVtZW4KICAgICByZXR1cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0
OjpEb25lOwogfQogCi12b2lkIEhUTUxUcmFja0VsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5l
ck5vZGUmIGluc2VydGlvblBvaW50KQordm9pZCBIVE1MVHJhY2tFbGVtZW50OjpyZW1vdmVkRnJv
bShSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVk
VHJlZSkKIHsKLSAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9uUG9pbnQpOwor
ICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbShyZW1vdmFsVHlwZSwgcGFyZW50T2ZSZW1vdmVk
VHJlZSk7CiAKLSAgICBpZiAoaXM8SFRNTE1lZGlhRWxlbWVudD4oaW5zZXJ0aW9uUG9pbnQpKQot
ICAgICAgICBkb3duY2FzdDxIVE1MTWVkaWFFbGVtZW50PihpbnNlcnRpb25Qb2ludCkuZGlkUmVt
b3ZlVGV4dFRyYWNrKCp0aGlzKTsKKyAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGlzIHdyb25nLiBJ
ZiBIVE1MVHJhY2tFbGVtZW50IGNhbiBiZSBhbnkgZGVzY2VuZGVudCBvZiBIVE1MTWVkaWFFbGVt
ZW50LCB0aGVuIGNoZWNrIGFuY2VzdG9ycyBvZiBwYXJlbnRPZkluc2VydGVkVHJlZS4KKyAgICAv
LyBJZiBIVE1MTWVkaWFFbGVtZW50IG9ubHkgc3VwcG9ydHMgSFRNTFRyYWNrRWxlbWVudCB3aGlj
aCBpcyBhbiBpbW1lZGlhdGUgY2hpbGQsIHRoZW4gY2hlY2sgcGFyZW50Tm9kZSgpIGluc3RlYWQu
CisgICAgaWYgKGlzPEhUTUxNZWRpYUVsZW1lbnQ+KHBhcmVudE9mUmVtb3ZlZFRyZWUpKQorICAg
ICAgICBkb3duY2FzdDxIVE1MTWVkaWFFbGVtZW50PihwYXJlbnRPZlJlbW92ZWRUcmVlKS5kaWRS
ZW1vdmVUZXh0VHJhY2soKnRoaXMpOwogfQogCiB2b2lkIEhUTUxUcmFja0VsZW1lbnQ6OnBhcnNl
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuaAkocmV2aXNp
b24gMjIzNjgwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBmaW5hbDsK
IAogICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29u
dGFpbmVyTm9kZSYpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYp
IGZpbmFsOworICAgIHZvaWQgcmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUm
KSBmaW5hbDsKIAogICAgIGJvb2wgaXNVUkxBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJikgY29u
c3QgZmluYWw7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDIy
MzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzY1LDE1ICszNjUsMTQgQEAgdm9pZCBTVkdFbGVtZW50OjpyZXBvcnRBdHRyaWJ1dGVQ
YXJzaW5nRQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFNWR0VsZW1lbnQ6
OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCit2b2lkIFNWR0VsZW1lbnQ6
OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJiBwYXJl
bnRPZlJlbW92ZWRUcmVlKQogewotICAgIGJvb2wgd2FzSW5Eb2N1bWVudCA9IHJvb3RQYXJlbnQu
aXNDb25uZWN0ZWQoKTsKLSAgICBpZiAod2FzSW5Eb2N1bWVudCkKKyAgICBpZiAocmVtb3ZhbFR5
cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KQogICAgICAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0
aHNJbmZvcm1hdGlvbihmYWxzZSwgdGhpcyk7CiAKLSAgICBTdHlsZWRFbGVtZW50OjpyZW1vdmVk
RnJvbShyb290UGFyZW50KTsKKyAgICBTdHlsZWRFbGVtZW50OjpyZW1vdmVkRnJvbShyZW1vdmFs
VHlwZSwgcGFyZW50T2ZSZW1vdmVkVHJlZSk7CiAKLSAgICBpZiAod2FzSW5Eb2N1bWVudCkgewor
ICAgIGlmIChyZW1vdmFsVHlwZS5kaXNjb25uZWN0ZWRGcm9tRG9jdW1lbnQpIHsKICAgICAgICAg
ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuY2xlYXJUYXJnZXREZXBlbmRlbmNpZXMo
KnRoaXMpOwogICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVB
bGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldCh0aGlzKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDIyMzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgYm9vbCBpc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYsIE11dGFibGVT
dHlsZVByb3BlcnRpZXMmKSBvdmVycmlkZTsKICAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0
ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKLSAgICB2b2lk
IHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZWRG
cm9tKFJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjaGls
ZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJv
b2wgc2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dm9pZCB1cGRhdGVSZWxhdGl2ZUxlbmd0aHNJbmZvcm1hdGlvbigpIHsgdXBkYXRlUmVsYXRpdmVM
ZW5ndGhzSW5mb3JtYXRpb24oc2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpLCB0aGlzKTsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM2
ODApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjEsMTAgKzE2MSwxMCBAQCB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjpkaWRG
aW5pc2hJbnNlcnRpCiAgICAgYnVpbGRQZW5kaW5nUmVzb3VyY2UoKTsKIH0KIAotdm9pZCBTVkdG
RUltYWdlRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKK3Zv
aWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxUeXBl
LCBDb250YWluZXJOb2RlJiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewotICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cmVtb3ZlZEZyb20ocm9vdFBhcmVudCk7Ci0gICAg
aWYgKHJvb3RQYXJlbnQuaXNDb25uZWN0ZWQoKSkKKyAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnJlbW92ZWRGcm9tKHJlbW92YWxUeXBlLCBwYXJlbnRPZlJlbW92ZWRU
cmVlKTsKKyAgICBpZiAocmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KQogICAg
ICAgICBjbGVhclJlc291cmNlUmVmZXJlbmNlcygpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gMjIzNjgwKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYnVpbGRQZW5kaW5nUmVzb3VyY2UoKSBvdmVycmlkZTsK
ICAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRh
aW5lck5vZGUmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUm
KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZWRGcm9tKFJlbW92YWxUeXBlLCBDb250YWluZXJO
b2RlJikgb3ZlcnJpZGU7CiAKICAgICBCRUdJTl9ERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRJRVMo
U1ZHRkVJbWFnZUVsZW1lbnQpCiAgICAgICAgIERFQ0xBUkVfQU5JTUFURURfUFJFU0VSVkVBU1BF
Q1RSQVRJTyhQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzY4
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODQsMTEgKzI4NCwxMSBAQCBOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgU1ZH
Rm9udEZhY2VFbGVtCiAgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAot
dm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIHJvb3RQ
YXJlbnQpCit2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUg
cmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mUmVtb3ZlZFRyZWUpCiB7Ci0gICAg
U1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20ocm9vdFBhcmVudCk7CisgICAgU1ZHRWxlbWVudDo6cmVt
b3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOwogCi0gICAgaWYgKHJv
b3RQYXJlbnQuaXNDb25uZWN0ZWQoKSkgeworICAgIGlmIChyZW1vdmFsVHlwZS5kaXNjb25uZWN0
ZWRGcm9tRG9jdW1lbnQpIHsKICAgICAgICAgbV9mb250RWxlbWVudCA9IG51bGxwdHI7CiAgICAg
ICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnVucmVnaXN0ZXJTVkdGb250RmFj
ZUVsZW1lbnQodGhpcyk7CiAgICAgICAgIG1fZm9udEZhY2VSdWxlLT5tdXRhYmxlUHJvcGVydGll
cygpLmNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5o
CShyZXZpc2lvbiAyMjM2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgY2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJikgZmluYWw7CiAgICAgSW5zZXJ0
ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikg
ZmluYWw7Ci0gICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlJikgZmluYWw7CisgICAg
dm9pZCByZW1vdmVkRnJvbShSZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogCiAg
ICAgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJikgZmluYWwgeyByZXR1
cm4gZmFsc2U7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDIyMzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxMSArOTksMTEgQEAgdm9pZCBTVkdNUGF0aEVsZW1l
bnQ6OmRpZEZpbmlzaEluc2VydGluZwogICAgIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCk7CiB9CiAK
LXZvaWQgU1ZHTVBhdGhFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiByb290UGFy
ZW50KQordm9pZCBTVkdNUGF0aEVsZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92
YWxUeXBlLCBDb250YWluZXJOb2RlJiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewotICAgIFNWR0Vs
ZW1lbnQ6OnJlbW92ZWRGcm9tKHJvb3RQYXJlbnQpOwotICAgIG5vdGlmeVBhcmVudE9mUGF0aENo
YW5nZSgmcm9vdFBhcmVudCk7Ci0gICAgaWYgKHJvb3RQYXJlbnQuaXNDb25uZWN0ZWQoKSkKKyAg
ICBTVkdFbGVtZW50OjpyZW1vdmVkRnJvbShyZW1vdmFsVHlwZSwgcGFyZW50T2ZSZW1vdmVkVHJl
ZSk7CisgICAgbm90aWZ5UGFyZW50T2ZQYXRoQ2hhbmdlKCZwYXJlbnRPZlJlbW92ZWRUcmVlKTsK
KyAgICBpZiAocmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KQogICAgICAgICBj
bGVhclJlc291cmNlUmVmZXJlbmNlcygpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTVBhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01Q
YXRoRWxlbWVudC5oCShyZXZpc2lvbiAyMjM2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TVBhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCkgZmluYWw7CiAgICAgdm9pZCBjbGVhclJl
c291cmNlUmVmZXJlbmNlcygpOwogICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8o
SW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlZEZy
b20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlZEZyb20oUmVtb3ZhbFR5
cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKIAogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIGZpbmFsOwogICAgIHZvaWQg
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgZmluYWw7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzY4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
Niw5ICsyODYsOSBAQCBOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgU1ZHUGF0aEVsZW1lbnQ6CiAg
ICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAotdm9pZCBTVkdQYXRoRWxl
bWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKK3ZvaWQgU1ZHUGF0
aEVsZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJO
b2RlJiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewotICAgIFNWR0dyYXBoaWNzRWxlbWVudDo6cmVt
b3ZlZEZyb20ocm9vdFBhcmVudCk7CisgICAgU1ZHR3JhcGhpY3NFbGVtZW50OjpyZW1vdmVkRnJv
bShyZW1vdmFsVHlwZSwgcGFyZW50T2ZSZW1vdmVkVHJlZSk7CiAgICAgaW52YWxpZGF0ZU1QYXRo
RGVwZW5kZW5jaWVzKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5o
CShyZXZpc2lvbiAyMjM2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHByaXZhdGU6CiAgICAgUmVuZGVy
UHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBj
b25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBmaW5hbDsKIAogICAgIE5vZGU6Okluc2VydGVkSW50
b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFs
OwotICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIHZvaWQg
cmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKIAogICAgIHZv
aWQgaW52YWxpZGF0ZU1QYXRoRGVwZW5kZW5jaWVzKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgzLDEzICs0ODMsMTMgQEAg
Tm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IFNWR1NWR0VsZW1lbnQ6OgogICAgIHJldHVybiBTVkdH
cmFwaGljc0VsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2Vy
dGVkVHJlZSk7CiB9CiAKLXZvaWQgU1ZHU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVy
Tm9kZSYgcm9vdFBhcmVudCkKK3ZvaWQgU1ZHU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20oUmVtb3Zh
bFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mUmVtb3ZlZFRyZWUpCiB7
Ci0gICAgaWYgKHJvb3RQYXJlbnQuaXNDb25uZWN0ZWQoKSkgeworICAgIGlmIChyZW1vdmFsVHlw
ZS5kaXNjb25uZWN0ZWRGcm9tRG9jdW1lbnQpIHsKICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NT
VkdFeHRlbnNpb25zKCkucmVtb3ZlVGltZUNvbnRhaW5lcih0aGlzKTsKICAgICAgICAgcGF1c2VB
bmltYXRpb25zKCk7CiAgICAgfQotICAgIFNWR0dyYXBoaWNzRWxlbWVudDo6cmVtb3ZlZEZyb20o
cm9vdFBhcmVudCk7CisgICAgU1ZHR3JhcGhpY3NFbGVtZW50OjpyZW1vdmVkRnJvbShyZW1vdmFs
VHlwZSwgcGFyZW50T2ZSZW1vdmVkVHJlZSk7CiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVudDo6cGF1
c2VBbmltYXRpb25zKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAkocmV2aXNp
b24gMjIzNjgwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCByZW5kZXJlcklz
TmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJikgb3ZlcnJpZGU7CiAgICAgUmVuZGVyUHRyPFJlbmRl
ckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5k
ZXJUcmVlUG9zaXRpb24mKSBvdmVycmlkZTsKICAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0
ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKLSAgICB2b2lk
IHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZWRG
cm9tKFJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKICAgICBib29s
IHNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHByZXBh
cmVGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM2ODApCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDEwICsxMjEs
MTAgQEAgTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IFNWR1N0eWxlRWxlbWVudAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXZvaWQgU1ZHU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWlu
ZXJOb2RlJiByb290UGFyZW50KQordm9pZCBTVkdTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKFJl
bW92YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJiBwYXJlbnRPZlJlbW92ZWRUcmVl
KQogewotICAgIFNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tKHJvb3RQYXJlbnQpOwotICAgIGlmIChy
b290UGFyZW50LmlzQ29ubmVjdGVkKCkgJiYgIWlzQ29ubmVjdGVkKCkpCisgICAgU1ZHRWxlbWVu
dDo6cmVtb3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOworICAgIGlm
IChyZW1vdmFsVHlwZS5kaXNjb25uZWN0ZWRGcm9tRG9jdW1lbnQpCiAgICAgICAgIG1fc3R5bGVT
aGVldE93bmVyLnJlbW92ZWRGcm9tRG9jdW1lbnQoKnRoaXMpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5oCShyZXZpc2lvbiAyMjM2ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIGZpbmFsOwogICAgIEluc2VydGVkSW50b1Jlc3VsdCBp
bnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwotICAgIHZv
aWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlZEZy
b20oUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIGNoaWxkcmVu
Q2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYpIGZpbmFsOwogCiAgICAgYm9vbCByZW5kZXJlcklz
TmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNjgwKQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjY3LDEwICsyNjcsMTAgQEAgdm9pZCBTVkdUUmVmRWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5n
TgogICAgIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCk7CiB9CiAKLXZvaWQgU1ZHVFJlZkVsZW1lbnQ6
OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCit2b2lkIFNWR1RSZWZFbGVt
ZW50OjpyZW1vdmVkRnJvbShSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYg
cGFyZW50T2ZSZW1vdmVkVHJlZSkKIHsKLSAgICBTVkdFbGVtZW50OjpyZW1vdmVkRnJvbShyb290
UGFyZW50KTsKLSAgICBpZiAocm9vdFBhcmVudC5pc0Nvbm5lY3RlZCgpKQorICAgIFNWR0VsZW1l
bnQ6OnJlbW92ZWRGcm9tKHJlbW92YWxUeXBlLCBwYXJlbnRPZlJlbW92ZWRUcmVlKTsKKyAgICBp
ZiAocmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KQogICAgICAgICBtX3Rhcmdl
dExpc3RlbmVyLT5kZXRhY2goKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RS
ZWZFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVt
ZW50LmgJKHJldmlzaW9uIDIyMzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCByZW5kZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJikgb3ZlcnJpZGU7CiAKICAgICBJ
bnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5v
ZGUmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHJlbW92ZWRGcm9tKFJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkgb3ZlcnJpZGU7CiAK
ICAgICB2b2lkIGNsZWFyVGFyZ2V0KCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNjgwKQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCwx
MCArMTg0LDEwIEBAIHZvaWQgU1ZHVGV4dFBhdGhFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnQKICAg
ICBidWlsZFBlbmRpbmdSZXNvdXJjZSgpOwogfQogCi12b2lkIFNWR1RleHRQYXRoRWxlbWVudDo6
cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKK3ZvaWQgU1ZHVGV4dFBhdGhF
bGVtZW50OjpyZW1vdmVkRnJvbShSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9k
ZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSkKIHsKLSAgICBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnJl
bW92ZWRGcm9tKHJvb3RQYXJlbnQpOwotICAgIGlmIChyb290UGFyZW50LmlzQ29ubmVjdGVkKCkp
CisgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpyZW1vdmVkRnJvbShyZW1vdmFsVHlwZSwgcGFy
ZW50T2ZSZW1vdmVkVHJlZSk7CisgICAgaWYgKHJlbW92YWxUeXBlLmRpc2Nvbm5lY3RlZEZyb21E
b2N1bWVudCkKICAgICAgICAgY2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNjgwKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjIsNyArMTIyLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYnVpbGRQZW5kaW5nUmVz
b3VyY2UoKSBvdmVycmlkZTsKICAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKElu
c2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZWRG
cm9tKENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZWRGcm9tKFJlbW92
YWxUeXBlLCBDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgYm9vbCBpc1N1
cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdm9pZCBwYXJzZUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJikgb3ZlcnJp
ZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGl0bGVFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGl0bGVFbGVtZW50LmNwcAkocmV2aXNpb24g
MjIzNjgwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RpdGxlRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDkgKzQ1LDkgQEAgTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IFNWR1Rp
dGxlRWxlbWVudAogICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKLXZv
aWQgU1ZHVGl0bGVFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Q
b2ludCkKK3ZvaWQgU1ZHVGl0bGVFbGVtZW50OjpyZW1vdmVkRnJvbShSZW1vdmFsVHlwZSByZW1v
dmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZSZW1vdmVkVHJlZSkKIHsKLSAgICBTVkdF
bGVtZW50OjpyZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7CisgICAgU1ZHRWxlbWVudDo6cmVt
b3ZlZEZyb20ocmVtb3ZhbFR5cGUsIHBhcmVudE9mUmVtb3ZlZFRyZWUpOwogICAgIGRvY3VtZW50
KCkudGl0bGVFbGVtZW50UmVtb3ZlZCgqdGhpcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUaXRsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVGl0bGVFbGVtZW50LmgJKHJldmlzaW9uIDIyMzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdUaXRsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBwcml2
YXRlOgogICAgIFNWR1RpdGxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQm
KTsKIAogICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwg
Q29udGFpbmVyTm9kZSYpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9k
ZSYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlZEZyb20oUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5v
ZGUmKSBmaW5hbDsKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYp
IGZpbmFsOwogCiAgICAgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJikg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIyMzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDkgKzExNCw5IEBAIE5vZGU6Okluc2VydGVk
SW50b1Jlc3VsdCBTVkdVc2VFbGVtZW50OjoKICAgICByZXR1cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0
OjpEb25lOwogfQogCi12b2lkIFNWR1VzZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5v
ZGUmIHJvb3RQYXJlbnQpCit2b2lkIFNWR1VzZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxU
eXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewot
ICAgIFNWR0dyYXBoaWNzRWxlbWVudDo6cmVtb3ZlZEZyb20ocm9vdFBhcmVudCk7CisgICAgU1ZH
R3JhcGhpY3NFbGVtZW50OjpyZW1vdmVkRnJvbShyZW1vdmFsVHlwZSwgcGFyZW50T2ZSZW1vdmVk
VHJlZSk7CiAgICAgY2xlYXJTaGFkb3dUcmVlKCk7CiAgICAgdXBkYXRlRXh0ZXJuYWxEb2N1bWVu
dCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5oCShyZXZpc2lvbiAyMjM2
ODApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OCw3ICs1OCw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCBv
dmVycmlkZTsKICAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5
cGUsIENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRh
aW5lck5vZGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZWRGcm9tKFJlbW92YWxUeXBlLCBD
b250YWluZXJOb2RlJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBidWlsZFBlbmRpbmdSZXNvdXJjZSgp
IG92ZXJyaWRlOwogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IGNvbnN0IEF0b21pY1N0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNjgw
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4OCw5ICsyODgsOSBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpkaWRG
aW5pc2hJbnNlcnRpbmdOCiAgICAgYnVpbGRQZW5kaW5nUmVzb3VyY2UoKTsKIH0KIAotdm9pZCBT
VkdTTUlMRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKK3Zv
aWQgU1ZHU01JTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBD
b250YWluZXJOb2RlJiBwYXJlbnRPZlJlbW92ZWRUcmVlKQogewotICAgIGlmIChyb290UGFyZW50
LmlzQ29ubmVjdGVkKCkpIHsKKyAgICBpZiAocmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURv
Y3VtZW50KSB7CiAgICAgICAgIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7CiAgICAgICAgIGRp
c2Nvbm5lY3RDb25kaXRpb25zKCk7CiAgICAgICAgIHNldFRhcmdldEVsZW1lbnQobnVsbHB0cik7
CkBAIC0yOTksNyArMjk5LDcgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29u
dGFpbgogICAgICAgICBtX3RpbWVDb250YWluZXIgPSBudWxscHRyOwogICAgIH0KIAotICAgIFNW
R0VsZW1lbnQ6OnJlbW92ZWRGcm9tKHJvb3RQYXJlbnQpOworICAgIFNWR0VsZW1lbnQ6OnJlbW92
ZWRGcm9tKHJlbW92YWxUeXBlLCBwYXJlbnRPZlJlbW92ZWRUcmVlKTsKIH0KIAogYm9vbCBTVkdT
TUlMRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVOYW1lKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgJKHJldmlzaW9uIDIyMzY4MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsK
ICAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRh
aW5lck5vZGUmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUm
KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZWRGcm9tKFJlbW92YWxUeXBlLCBDb250YWluZXJO
b2RlJikgb3ZlcnJpZGU7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRl
VHlwZSgpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVOYW1lKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>