<?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>132582</bug_id>
          
          <creation_ts>2014-05-05 14:50:03 -0700</creation_ts>
          <short_desc>Stop using BlobData on client side</short_desc>
          <delta_ts>2014-05-05 17:43:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1006744</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-05-05 14:50:03 -0700</bug_when>
    <thetext>BlobData has many data members that only make sense in BlobRegistryImpl, yet it&apos;s also used for blob registration on WebProcess side. This made us have some pretty nonsensical code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006748</commentid>
    <comment_count>1</comment_count>
      <attachid>230857</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-05-05 15:07:43 -0700</bug_when>
    <thetext>Created attachment 230857
proposed patch

Starting with EWS...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006750</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-05 15:09:02 -0700</bug_when>
    <thetext>Attachment 230857 did not pass style-queue:


ERROR: Source/WebCore/fileapi/Blob.h:99:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/fileapi/Blob.h:102:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 2 in 31 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006756</commentid>
    <comment_count>3</comment_count>
      <attachid>230860</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-05-05 15:30:50 -0700</bug_when>
    <thetext>Created attachment 230860
with a debug assertion fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006757</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-05 15:32:26 -0700</bug_when>
    <thetext>Attachment 230860 did not pass style-queue:


ERROR: Source/WebCore/fileapi/Blob.h:99:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/fileapi/Blob.h:102:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 2 in 31 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006799</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-05-05 17:43:52 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/r168333&gt; (with a Windows fix).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230857</attachid>
            <date>2014-05-05 15:07:43 -0700</date>
            <delta_ts>2014-05-05 15:30:50 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>BlobParts.txt</filename>
            <type>text/plain</type>
            <size>73852</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODMxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDE0LTA1LTA1ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgQmxvYkRh
dGEgb24gY2xpZW50IHNpZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMjU4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEJsb2IgcmVnaXN0cmF0aW9uIG5vdyB1c2VzIGVpdGhlciBhIHNpbmdsZSBmaWxl
IHBhdGgsIG9yIGEgdmVjdG9yIG9mIG11Y2ggc2ltcGxlcgorICAgICAgICBCbG9iUGFydCBvYmpl
Y3RzLCBub3QgYW4gYXJyYXkgd2l0aCBhcmJpdHJhcmlseSBzbGljZWQgYmxvYnMgb3IgZmlsZXMs
IHdoaWNoIGNhbid0IGhhcHBlbi4KKworICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJT
b2NrZXQuY3BwOihXZWJDb3JlOjpXZWJTb2NrZXQ6OmRpZFJlY2VpdmVCaW5hcnlEYXRhKToKKyAg
ICAgICAgVXNlIGEgbmV3IHNpbXBsZXIgQmxvYiBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgQmxvYlBhcnQsIHJlbW92ZWQg
QmxvYlJlZ2lzdHJhdGlvbkRhdGEuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Jsb2JDdXN0
b20uY3BwOiAoV2ViQ29yZTo6SlNCbG9iQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTQmxvYik6Cisg
ICAgICAgIFVzZSBWZWN0b3I8QmxvYlBhcnQ+IGluc3RlYWQgb2YgQmxvYkRhdGEgKDEgbGluZSBv
ZiBjb2RlIGluc3RlYWQgb2YgNSkuCisKKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDog
KFdlYkNvcmU6OkRhdGFUcmFuc2Zlcjo6aGFzRmlsZU9mVHlwZSk6IFVwZGF0ZWQgZm9yCisgICAg
ICAgIEZpbGU6OmNvbnRlbnRUeXBlRnJvbUZpbGVQYXRoT3JOYW1lIHJlbmFtZS4KKworICAgICAg
ICAqIGZpbGVhcGkvQmxvYi5jcHA6IChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAgKiBm
aWxlYXBpL0Jsb2IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpCbG9iOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgICogZmlsZWFwaS9GaWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OkZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZTo6Y29udGVudFR5cGVGcm9tRmlsZVBhdGhPck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQmxvYkRhdGFGb3JGaWxlV2l0aFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlQmxvYkRhdGFGb3JGaWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUJsb2JEYXRhRm9yRmlsZVdpdGhOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bGU6OmNvbnRlbnRUeXBlRnJvbUZpbGVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKiBmaWxlYXBp
L0ZpbGUuaDogKFdlYkNvcmU6OkZpbGU6OmRlc2VyaWFsaXplKTogRGVsZXRlZC4KKyAgICAgICAg
QWRkZWQgYW5kIHVwZGF0ZWQgY29uc3RydWN0b3JzIHRvIG5vdCB1c2UgQmxvYkRhdGEuIENoYW5n
ZWQgc3BlY2lhbCBjYXNlIGNvbnN0cnVjdG9ycworICAgICAgICB0byB1c2UgbmFtZSB0YWdzIGlu
c3RlYWQgb2Ygbm9uLWVuZm9yY2VkIGNvbW1lbnRzLgorCisgICAgICAgICogZmlsZWFwaS9UaHJl
YWRhYmxlQmxvYlJlZ2lzdHJ5Lmg6CisgICAgICAgICogZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJl
Z2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUNvbnRleHQ6OkJsb2JS
ZWdpc3RyeUNvbnRleHQpOiBVcGRhdGVkIHdpdGggbmV3IGRhdGEgbWVtYmVycworICAgICAgICB0
aGF0IHdlcmUgc3BsaXQgb3V0IG9mIEJsb2JEYXRhLgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFk
YWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJGaWxlQmxvYlVSTCk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6VGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKTogVXBkYXRl
ZCB0byBwYXNzIENvbnRlbnQtVHlwZQorICAgICAgICBleHBsaWNpdGx5LCBhcyBpdCdzIG5vIGxv
bmdlciBoaWRkZW4gaW4gQmxvYkRhdGEuCisKKyAgICAgICAgKiBmaWxlYXBpL1dlYktpdEJsb2JC
dWlsZGVyLmg6CisgICAgICAgICogZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJs
b2JCdWlsZGVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6YXBw
ZW5kQnl0ZXNEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgVXBkYXRlZCB0byB1c2UgQmxvYlBhcnQu
IFRoZXJlIGlzIG5vIGxvbmdlciBhbnkgbmVlZCB0byBzcGVjaWFsIGNhc2UgRmlsZXMsCisgICAg
ICAgIHRoZSByZWdpc3RyeSB0YWtlcyBjYXJlIG9mIHRoYXQuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL0Jsb2JEYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iRGF0YUl0ZW06OmRldGFjaEZyb21DdXJyZW50
VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJsb2JEYXRhOjpkZXRhY2hGcm9t
Q3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIEJsb2JEYXRhIHdpbGwgb25seSBiZSB1
c2VkIG9uIG1haW4gdGhyZWFkIGJ5IHRoZSByZWdpc3RyeS4KKworICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvQmxvYlBhcnQuaDogQWRkZWQuIEEgbmV3IGNsYXNzIHRvIGVuY2Fwc3VsYXRlIGEg
bGlzdCBvZiBibG9icworICAgICAgICB0aGF0IGFyZSBjb21iaW5lZCBpbnRvIGEgbmV3IGJsb2Is
IGFzIGV4cG9zZWQgdG8gSlMgdmlhIEJsb2IgY29uc3RydWN0b3IuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
QmxvYlJlZ2lzdHJ5SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBs
OjpyZWdpc3RlckZpbGVCbG9iVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUlt
cGw6OnJlZ2lzdGVyQmxvYlVSTCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVn
aXN0cnlJbXBsLmg6CisgICAgICAgIFVwZGF0ZWQgZm9yIHRoZSBuZXcgcmVnaXN0cmF0aW9uIG1l
dGhvZHMuIFdlIG5vIGxvbmdlciBoYXZlIGFyYml0cmFyeSBCbG9iRGF0YXMKKyAgICAgICAgY29t
aW5nIGluLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6IERvbid0
IGluY2x1ZGUgQmxvYkRhdGEgZm9yIG5vdyAoYnV0IHJlYWxseSwKKyAgICAgICAgQmxvYlN0b3Jh
Z2VEYXRhIGlzIHRoZSBzYW1lIHRoaW5nLCBhbmQgdGhleSB3aWxsIGJlIG1lcmdlZCBzb29uKS4K
KyAgICAgICAgVW5mb3J0dW5hdGVseSwgRm9ybURhdGEgaXMgdXNlZCBieSBib3RoIGNsaWVudCBh
bmQgcmVnaXN0cnkgc2lkZSwgYW5kIHRoZXJlIGlzCisgICAgICAgIG5vIGNsZWFyIGRlbGltaXRh
dGlvbiBhdCB0aGUgdGltZS4KKyAKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOiAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlQmxvYik6IFVzZSB0aGUgbmV3IHNpbXBs
ZXIKKyAgICAgICAgd2F5IHRvIGNyZWF0ZSBhIEJsb2IuCisKIDIwMTQtMDUtMDUgIEJlbmphbWlu
IFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFtpT1NdW1dLMl0gU3Bl
Y2lhbCBjYXNlIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3I6OmNvbGxlY3RHZW9tZXRyeUZv
clNtYXJ0TWFnbmlmaWNhdGlvbkdlc3R1cmUoKSBmb3IgaW1hZ2UgZG9jdW1lbnRzCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAkocmV2
aXNpb24gMTY4MzE3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJXZWJT
b2NrZXQuaCIKIAogI2luY2x1ZGUgIkJsb2IuaCIKLSNpbmNsdWRlICJCbG9iRGF0YS5oIgogI2lu
Y2x1ZGUgIkNsb3NlRXZlbnQuaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIK
ICNpbmNsdWRlICJET01XaW5kb3cuaCIKQEAgLTUyMCw5ICs1MTksNyBAQCB2b2lkIFdlYlNvY2tl
dDo6ZGlkUmVjZWl2ZUJpbmFyeURhdGEoUGFzCiAgICAgc3dpdGNoIChtX2JpbmFyeVR5cGUpIHsK
ICAgICBjYXNlIEJpbmFyeVR5cGVCbG9iOiB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBqdXN0IHJl
Y2VpdmVkIHRoZSBkYXRhIGZyb20gTmV0d29ya1Byb2Nlc3MsIGFuZCBhcmUgc2VuZGluZyBpdCBi
YWNrLiBUaGlzIGlzIGluZWZmaWNpZW50LgotICAgICAgICBhdXRvIGJsb2JEYXRhID0gc3RkOjpt
YWtlX3VuaXF1ZTxCbG9iRGF0YT4oKTsKLSAgICAgICAgYmxvYkRhdGEtPmFwcGVuZERhdGEoUmF3
RGF0YTo6Y3JlYXRlKHN0ZDo6bW92ZSgqYmluYXJ5RGF0YSkpLCAwLCBCbG9iRGF0YUl0ZW06OnRv
RW5kT2ZGaWxlKTsKLSAgICAgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVhdGUoc3Rk
Ojptb3ZlKGJsb2JEYXRhKSk7CisgICAgICAgIFJlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3Jl
YXRlKHN0ZDo6bW92ZSgqYmluYXJ5RGF0YSksIGVtcHR5U3RyaW5nKCkpOwogICAgICAgICBkaXNw
YXRjaEV2ZW50KE1lc3NhZ2VFdmVudDo6Y3JlYXRlKGJsb2IucmVsZWFzZSgpLCBTZWN1cml0eU9y
aWdpbjo6Y3JlYXRlKG1fdXJsKS0+dG9TdHJpbmcoKSkpOwogICAgICAgICBicmVhazsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxNjgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU5NjQsNiArNTk2NCw3IEBA
CiAJCUUxQzY1NzI1MTgxNkU2OUQwMDI1NkNERCAvKiBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUM2NTcy
NDE4MTZFNjlEMDAyNTZDREQgLyogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllci5oICovOyB9Owog
CQlFMUM2NTcyNzE4MTZGOUZFMDAyNTZDREQgLyogQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDNjU3MjYx
ODE2RjlGRTAwMjU2Q0REIC8qIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMuaCAqLzsgfTsKIAkJ
RTFDOEJFNUQwRThCRDE1QTAwNjRDQjdEIC8qIEpTV29ya2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzhCRTVDMEU4QkQxNUEwMDY0Q0I3RCAv
KiBKU1dvcmtlci5jcHAgKi87IH07CisJCUUxQzk0QUY5MTkxMzAzRjAwMEQ1QTg5MyAvKiBCbG9i
UGFydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFD
OTRBRjcxOTEzMDNGMDAwRDVBODkzIC8qIEJsb2JQYXJ0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTFDQTVDQkMwRThDRENBRjAwRThFRjkwIC8q
IEpTV29ya2VyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxQ0E1Q0JCMEU4Q0RDQUYwMEU4RUY5MCAvKiBKU1dvcmtlckN1c3RvbS5jcHAg
Ki87IH07CiAJCUUxQ0FBNUM2MEU4QkQyMzYwMEE3M0VDQSAvKiBKU1dvcmtlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDQUE1QzUwRThCRDIzNjAw
QTczRUNBIC8qIEpTV29ya2VyLmggKi87IH07CiAJCUUxQ0RFOTIwMTUwMThFRDAwMDg2MkNDNSAv
KiBBc3luY0ZpbGVTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTFDREU5MUYxNTAxOEVEMDAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5j
cHAgKi87IH07CkBAIC0xMzM3MCw2ICsxMzM3MSw3IEBACiAJCUUxQzY1NzI2MTgxNkY5RkUwMDI1
NkNERCAvKiBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTFDNkNGQzIxNzQ2RDI5MzAwN0I4N0ExIC8qIERPTVdpbmRvd0NvbnN0
cnVjdG9ycy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gRE9NV2luZG93Q29uc3RydWN0b3JzLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTFDOEJFNUMwRThCRDE1QTAwNjRDQjdEIC8qIEpTV29ya2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV29ya2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFDOTRBRjcxOTEzMDNGMDAwRDVBODkzIC8qIEJs
b2JQYXJ0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JQYXJ0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQ0E1Q0JCMEU4Q0RDQUYwMEU4RUY5MCAvKiBK
U1dvcmtlckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1dvcmtlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQ0FBNUM1
MEU4QkQyMzYwMEE3M0VDQSAvKiBKU1dvcmtlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1dvcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUNERTkx
RjE1MDE4RUQwMDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFzeW5jRmlsZVN0cmVhbS5jcHA7IHBhdGggPSBmaWxlYXBp
L0FzeW5jRmlsZVN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjA1
NSw2ICsxNjA1Nyw3IEBACiAJCQkJRTEyNDc0ODMxMEFBMTYxRDAwQjc5NDkzIC8qIEF1dGhlbnRp
Y2F0aW9uQ2xpZW50LmggKi8sCiAJCQkJMkVERUYxRUQxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JE
YXRhLmNwcCAqLywKIAkJCQkyRURFRjFFRTEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYkRhdGEuaCAq
LywKKwkJCQlFMUM5NEFGNzE5MTMwM0YwMDBENUE4OTMgLyogQmxvYlBhcnQuaCAqLywKIAkJCQlF
MTRBOTRENjE2REZERjk1MDA2OERFODIgLyogQmxvYlJlZ2lzdHJ5LmNwcCAqLywKIAkJCQkyRURF
RjFFRjEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5LmggKi8sCiAJCQkJMkVERUYxRjAx
MjFCMEVGQzAwNzI2REIyIC8qIEJsb2JSZWdpc3RyeUltcGwuY3BwICovLApAQCAtMjU0MjIsNiAr
MjU0MjUsNyBAQAogCQkJCUU0Mjk1RkE0MTJCMDYxNEUwMEQxQUNFMCAvKiBSZXNvdXJjZUxvYWRQ
cmlvcml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDBDRTU4RjkxMjVFNENDMjAwRjNGMTk5IC8q
IFJlc291cmNlTG9hZFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEE4MUJGODUxMURD
RkQ5MDAwREEyQjk4IC8qIFJlc291cmNlTG9hZFRpbWluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RTFDOTRBRjkxOTEzMDNGMDAwRDVBODkzIC8qIEJsb2JQYXJ0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3RUU2ODQ2RDEyRDI2RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VSZXF1ZXN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTRDNzY3RDBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0QmFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VFNjg0NkYxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291
cmNlUmVxdWVzdENGTmV0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNpb24gMTY4MzE3KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM0LDEyICsxMzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTQmxvYkNvbnN0
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBCbG9iRGF0YUl0ZW1MaXN0IGl0ZW1zID0gYmxvYkJ1
aWxkZXIuZmluYWxpemUoKTsKLSAgICBhdXRvIGJsb2JEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxC
bG9iRGF0YT4oKTsKLSAgICBibG9iRGF0YS0+c2V0Q29udGVudFR5cGUoQmxvYjo6bm9ybWFsaXpl
ZENvbnRlbnRUeXBlKHR5cGUpKTsKLSAgICBibG9iRGF0YS0+c3dhcEl0ZW1zKGl0ZW1zKTsKLQot
ICAgIFJlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKHN0ZDo6bW92ZShibG9iRGF0YSkp
OworICAgIFJlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKGJsb2JCdWlsZGVyLmZpbmFs
aXplKCksIHR5cGUpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShDUkVBVEVfRE9NX1dS
QVBQRVIoanNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIEJsb2IsIGJsb2IuZ2V0KCkpKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuY3BwCShyZXZpc2lvbiAxNjgzMTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTg5LDcgKzE4OSw3IEBAIGJvb2wgRGF0YVRyYW5zZmVyOjpoYXNGaWxlT2ZUeXBlKGNvbnN0
IFMKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihjYW5SZWFkVHlwZXMoKSk7
CiAKICAgICBmb3IgKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUgOiBtX3Bhc3RlYm9hcmQtPnJlYWRG
aWxlbmFtZXMoKSkgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoRmlsZTo6Y29udGVu
dFR5cGVGcm9tRmlsZVBhdGgoZmlsZW5hbWUsIEZpbGU6OkFsbENvbnRlbnRUeXBlcyksIHR5cGUp
KQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoRmlsZTo6Y29udGVudFR5cGVGcm9tRmls
ZVBhdGhPck5hbWUoZmlsZW5hbWUsIEZpbGU6OkFsbENvbnRlbnRUeXBlcyksIHR5cGUpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0Jsb2IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5j
cHAJKHJldmlzaW9uIDE2ODMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDMxICs2NiwzNyBAQCBVUkxSZWdpc3RyeSYgQmxvYlVSTFJl
Z2lzdHJ5OjpyZWdpc3RyeSgpCiB9CiAKIAorQmxvYjo6QmxvYihVbmluaXRpYWxpemVkQ29udHJ1
Y3RvcikKK3sKK30KKwogQmxvYjo6QmxvYigpCiAgICAgOiBtX3NpemUoMCkKIHsKLSAgICBhdXRv
IGJsb2JEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxCbG9iRGF0YT4oKTsKLQotICAgIC8vIENyZWF0
ZSBhIG5ldyBpbnRlcm5hbCBVUkwgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIHByb3ZpZGVkIGJs
b2IgZGF0YS4KICAgICBtX2ludGVybmFsVVJMID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwo
KTsKLSAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwobV9pbnRlcm5h
bFVSTCwgc3RkOjptb3ZlKGJsb2JEYXRhKSk7CisgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6
cmVnaXN0ZXJCbG9iVVJMKG1faW50ZXJuYWxVUkwsIFZlY3RvcjxCbG9iUGFydD4oKSwgU3RyaW5n
KCkpOwogfQogCi1CbG9iOjpCbG9iKHN0ZDo6dW5pcXVlX3B0cjxCbG9iRGF0YT4gYmxvYkRhdGEp
Ci0gICAgOiBtX3R5cGUoYmxvYkRhdGEtPmNvbnRlbnRUeXBlKCkpCitCbG9iOjpCbG9iKFZlY3Rv
cjxjaGFyPiBkYXRhLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQorICAgIDogbV90eXBlKGNv
bnRlbnRUeXBlKQogewotICAgIEFTU0VSVChibG9iRGF0YSk7CisgICAgVmVjdG9yPEJsb2JQYXJ0
PiBibG9iUGFydHM7CisgICAgYmxvYlBhcnRzLmFwcGVuZChCbG9iUGFydChzdGQ6Om1vdmUoZGF0
YSkpKTsKKyAgICBtX2ludGVybmFsVVJMID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwoKTsK
KyAgICBtX3NpemUgPSBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwobV9p
bnRlcm5hbFVSTCwgc3RkOjptb3ZlKGJsb2JQYXJ0cyksIGNvbnRlbnRUeXBlKTsKK30KIAotICAg
IC8vIENyZWF0ZSBhIG5ldyBpbnRlcm5hbCBVUkwgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIHBy
b3ZpZGVkIGJsb2IgZGF0YS4KK0Jsb2I6OkJsb2IoVmVjdG9yPEJsb2JQYXJ0PiBibG9iUGFydHMs
IGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCisgICAgOiBtX3R5cGUoY29udGVudFR5cGUpCit7
CiAgICAgbV9pbnRlcm5hbFVSTCA9IEJsb2JVUkw6OmNyZWF0ZUludGVybmFsVVJMKCk7Ci0gICAg
bV9zaXplID0gVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKG1faW50ZXJu
YWxVUkwsIHN0ZDo6bW92ZShibG9iRGF0YSkpOworICAgIG1fc2l6ZSA9IFRocmVhZGFibGVCbG9i
UmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsVVJMLCBzdGQ6Om1vdmUoYmxvYlBh
cnRzKSwgY29udGVudFR5cGUpOwogfQogCi1CbG9iOjpCbG9iKGNvbnN0IFVSTCYgc3JjVVJMLCBj
b25zdCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKQorQmxvYjo6QmxvYihEZXNlcmlhbGl6
YXRpb25Db250cnVjdG9yLCBjb25zdCBVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlLCBs
b25nIGxvbmcgc2l6ZSkKICAgICA6IG1fdHlwZShCbG9iOjpub3JtYWxpemVkQ29udGVudFR5cGUo
dHlwZSkpCiAgICAgLCBtX3NpemUoc2l6ZSkKIHsKLSAgICAvLyBDcmVhdGUgYSBuZXcgaW50ZXJu
YWwgVVJMIGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBzYW1lIGJsb2IgZGF0YSBhcyB0aGUgc291
cmNlIFVSTC4KICAgICBtX2ludGVybmFsVVJMID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwo
KTsKICAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwoMCwgbV9pbnRl
cm5hbFVSTCwgc3JjVVJMKTsKIH0KQEAgLTk5LDcgKzEwNSw2IEBAIEJsb2I6OkJsb2IoY29uc3Qg
VVJMJiBzcmNVUkwsIGNvbnN0IFN0cmkKIEJsb2I6OkJsb2IoY29uc3QgVVJMJiBzcmNVUkwsIGxv
bmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCwgY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIDog
bV90eXBlKEJsb2I6Om5vcm1hbGl6ZWRDb250ZW50VHlwZSh0eXBlKSkKIHsKLSAgICAvLyBDcmVh
dGUgYSBuZXcgaW50ZXJuYWwgVVJMIGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBzYW1lIGJsb2Ig
ZGF0YSBhcyB0aGUgc291cmNlIFVSTC4KICAgICBtX2ludGVybmFsVVJMID0gQmxvYlVSTDo6Y3Jl
YXRlSW50ZXJuYWxVUkwoKTsKICAgICBtX3NpemUgPSBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojpy
ZWdpc3RlckJsb2JVUkxGb3JTbGljZShtX2ludGVybmFsVVJMLCBzcmNVUkwsIHN0YXJ0LCBlbmQp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgJKHJldmlzaW9uIDE2ODMxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw3IEBA
CiAjaWZuZGVmIEJsb2JfaAogI2RlZmluZSBCbG9iX2gKIAotI2luY2x1ZGUgIkJsb2JEYXRhLmgi
Ci0jaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSAiQmxvYlBhcnQuaCIKICNpbmNsdWRlICJTY3Jp
cHRXcmFwcGFibGUuaCIKICNpbmNsdWRlICJVUkxSZWdpc3RyeS5oIgogI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CkBAIC01MCwxNSArNDksMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEJsb2IpOwogICAgIH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+
IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8QmxvYkRhdGE+IGJsb2JEYXRhKQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShWZWN0b3I8Y2hhcj4gZGF0YSwgY29uc3QgU3RyaW5nJiBj
b250ZW50VHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihzdGQ6
Om1vdmUoYmxvYkRhdGEpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihzdGQ6
Om1vdmUoZGF0YSksIGNvbnRlbnRUeXBlKSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8QmxvYj4gY3JlYXRlKFZlY3RvcjxCbG9iUGFydD4gYmxvYlBhcnRzLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnRUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKHN0
ZDo6bW92ZShibG9iUGFydHMpLCBjb250ZW50VHlwZSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEJsb2I+IGRlc2VyaWFsaXplKGNvbnN0IFVSTCYgc3JjVVJMLCBjb25zdCBTdHJp
bmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKQogICAgIHsKICAgICAgICAgQVNTRVJUKEJsb2I6Omlz
Tm9ybWFsaXplZENvbnRlbnRUeXBlKHR5cGUpKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBCbG9iKHNyY1VSTCwgdHlwZSwgc2l6ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEJsb2IoZGVzZXJpYWxpemF0aW9uQ29udHJ1Y3Rvciwgc3JjVVJMLCB0eXBlLCBzaXplKSk7CiAg
ICAgfQogCiAgICAgdmlydHVhbCB+QmxvYigpOwpAQCAtODksMTAgKzkzLDE0IEBAIHB1YmxpYzoK
IAogcHJvdGVjdGVkOgogICAgIEJsb2IoKTsKLSAgICBCbG9iKHN0ZDo6dW5pcXVlX3B0cjxCbG9i
RGF0YT4pOworICAgIEJsb2IoVmVjdG9yPGNoYXI+LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBl
KTsKKyAgICBCbG9iKFZlY3RvcjxCbG9iUGFydD4sIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUp
OworCisgICAgZW51bSBVbmluaXRpYWxpemVkQ29udHJ1Y3RvciB7IHVuaW5pdGlhbGl6ZWRDb250
cnVjdG9yIH07CisgICAgQmxvYihVbmluaXRpYWxpemVkQ29udHJ1Y3Rvcik7CiAKLSAgICAvLyBG
b3IgZGVzZXJpYWxpemF0aW9uLgotICAgIEJsb2IoY29uc3QgVVJMJiBzcmNVUkwsIGNvbnN0IFN0
cmluZyYgdHlwZSwgbG9uZyBsb25nIHNpemUpOworICAgIGVudW0gRGVzZXJpYWxpemF0aW9uQ29u
dHJ1Y3RvciB7IGRlc2VyaWFsaXphdGlvbkNvbnRydWN0b3IgfTsKKyAgICBCbG9iKERlc2VyaWFs
aXphdGlvbkNvbnRydWN0b3IsIGNvbnN0IFVSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUs
IGxvbmcgbG9uZyBzaXplKTsKIAogI2lmIEVOQUJMRShCTE9CKQogICAgIC8vIEZvciBzbGljaW5n
LgpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwCShyZXZpc2lvbiAxNjgzMTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw1NiArMjYs
NDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGaWxlLmgiCiAKKyNpbmNsdWRl
ICJCbG9iVVJMLmgiCiAjaW5jbHVkZSAiRmlsZU1ldGFkYXRhLmgiCiAjaW5jbHVkZSAiRmlsZVN5
c3RlbS5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJUaHJlYWRh
YmxlQmxvYlJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVk
ZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxCbG9iRGF0YT4gY3Jl
YXRlQmxvYkRhdGFGb3JGaWxlV2l0aFR5cGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnRUeXBlKQotewotICAgIGF1dG8gYmxvYkRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVl
PEJsb2JEYXRhPigpOwotICAgIEFTU0VSVChCbG9iOjppc05vcm1hbGl6ZWRDb250ZW50VHlwZShj
b250ZW50VHlwZSkpOwotICAgIGJsb2JEYXRhLT5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZSk7
Ci0gICAgYmxvYkRhdGEtPmFwcGVuZEZpbGUocGF0aCk7Ci0gICAgcmV0dXJuIGJsb2JEYXRhOwot
fQotCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPiBjcmVhdGVCbG9iRGF0YUZvckZp
bGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlOjpDb250ZW50VHlwZUxvb2t1cFBvbGljeSBwb2xp
Y3kpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUJsb2JEYXRhRm9yRmlsZVdpdGhUeXBlKHBhdGgsIEZp
bGU6OmNvbnRlbnRUeXBlRnJvbUZpbGVQYXRoKHBhdGgsIHBvbGljeSkpOwotfQotCi1zdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPiBjcmVhdGVCbG9iRGF0YUZvckZpbGVXaXRoTmFtZShj
b25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsZVN5c3RlbU5hbWUsIEZpbGU6OkNv
bnRlbnRUeXBlTG9va3VwUG9saWN5IHBvbGljeSkKLXsKLSAgICByZXR1cm4gY3JlYXRlQmxvYkRh
dGFGb3JGaWxlV2l0aFR5cGUocGF0aCwgRmlsZTo6Y29udGVudFR5cGVGcm9tRmlsZVBhdGgoZmls
ZVN5c3RlbU5hbWUsIHBvbGljeSkpOwotfQotCiBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCwgQ29udGVudFR5cGVMb29rdXBQb2xpY3kgcG9saWN5KQotICAgIDogQmxvYihjcmVhdGVCbG9i
RGF0YUZvckZpbGUocGF0aCwgcG9saWN5KSkKKyAgICA6IEJsb2IodW5pbml0aWFsaXplZENvbnRy
dWN0b3IpCiAgICAgLCBtX3BhdGgocGF0aCkKICAgICAsIG1fbmFtZShwYXRoR2V0RmlsZU5hbWUo
cGF0aCkpCiB7CisgICAgbV9pbnRlcm5hbFVSTCA9IEJsb2JVUkw6OmNyZWF0ZUludGVybmFsVVJM
KCk7CisgICAgbV90eXBlID0gY29udGVudFR5cGVGcm9tRmlsZVBhdGhPck5hbWUocGF0aCwgcG9s
aWN5KTsKKyAgICBtX3NpemUgPSAtMTsKKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdp
c3RlckZpbGVCbG9iVVJMKG1faW50ZXJuYWxVUkwsIHBhdGgsIG1fdHlwZSk7CiB9CiAKLUZpbGU6
OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0
eXBlKQotICAgIDogQmxvYih1cmwsIHR5cGUsIC0xKQorRmlsZTo6RmlsZShjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ29udGVudFR5cGVMb29rdXBQb2xpY3kgcG9saWN5
KQorICAgIDogQmxvYih1bmluaXRpYWxpemVkQ29udHJ1Y3RvcikKICAgICAsIG1fcGF0aChwYXRo
KQorICAgICwgbV9uYW1lKG5hbWUpCiB7Ci0gICAgbV9uYW1lID0gcGF0aEdldEZpbGVOYW1lKHBh
dGgpOwotICAgIC8vIEZJWE1FOiBGaWxlIG9iamVjdCBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXph
dGlvbiBkb2VzIG5vdCBpbmNsdWRlCi0gICAgLy8gbmV3ZXIgZmlsZSBvYmplY3QgZGF0YSBtZW1i
ZXJzOiBtX25hbWUgYW5kIG1fcmVsYXRpdmVQYXRoLgotICAgIC8vIFNlZSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCisgICAgbV9pbnRlcm5hbFVSTCA9IEJsb2JVUkw6OmNyZWF0ZUludGVybmFs
VVJMKCk7CisgICAgbV90eXBlID0gY29udGVudFR5cGVGcm9tRmlsZVBhdGhPck5hbWUobmFtZSwg
cG9saWN5KTsKKyAgICBtX3NpemUgPSAtMTsKKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojpy
ZWdpc3RlckZpbGVCbG9iVVJMKG1faW50ZXJuYWxVUkwsIHBhdGgsIG1fdHlwZSk7CiB9CiAKLUZp
bGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG5hbWUsIENvbnRlbnRU
eXBlTG9va3VwUG9saWN5IHBvbGljeSkKLSAgICA6IEJsb2IoY3JlYXRlQmxvYkRhdGFGb3JGaWxl
V2l0aE5hbWUocGF0aCwgbmFtZSwgcG9saWN5KSkKK0ZpbGU6OkZpbGUoRGVzZXJpYWxpemF0aW9u
Q29udHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiB0eXBlKQorICAgIDogQmxvYihkZXNlcmlhbGl6YXRpb25Db250cnVjdG9yLCB1cmwsIHR5
cGUsIC0xKQogICAgICwgbV9wYXRoKHBhdGgpCi0gICAgLCBtX25hbWUobmFtZSkKIHsKKyAgICBt
X25hbWUgPSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7CisgICAgLy8gRklYTUU6IEZpbGUgb2JqZWN0
IHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIGRvZXMgbm90IGluY2x1ZGUgbV9uYW1lLgor
ICAgIC8vIFNlZSBTZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCiB9CiAKIGRvdWJsZSBGaWxlOjps
YXN0TW9kaWZpZWREYXRlKCkgY29uc3QKQEAgLTk3LDcgKzg3LDcgQEAgdW5zaWduZWQgbG9uZyBs
b25nIEZpbGU6OnNpemUoKSBjb25zdAogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nIGxvbmc+KHNpemUpOwogfQogCi1TdHJpbmcgRmlsZTo6Y29udGVudFR5cGVGcm9tRmlsZVBh
dGgoY29uc3QgU3RyaW5nJiBuYW1lLCBGaWxlOjpDb250ZW50VHlwZUxvb2t1cFBvbGljeSBwb2xp
Y3kpCitTdHJpbmcgRmlsZTo6Y29udGVudFR5cGVGcm9tRmlsZVBhdGhPck5hbWUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBGaWxlOjpDb250ZW50VHlwZUxvb2t1cFBvbGljeSBwb2xpY3kpCiB7CiAgICAg
U3RyaW5nIHR5cGU7CiAgICAgaW50IGluZGV4ID0gbmFtZS5yZXZlcnNlRmluZCgnLicpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9GaWxlLmgJKHJldmlzaW9uIDE2ODMxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsOSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBGaWxlTWV0YWRhdGE7CiBjbGFzcyBVUkw7CiAKLWNs
YXNzIEZpbGUgOiBwdWJsaWMgQmxvYiB7CitjbGFzcyBGaWxlIGZpbmFsIDogcHVibGljIEJsb2Ig
ewogcHVibGljOgogICAgIC8vIEFsbENvbnRlbnRUeXBlcyBzaG91bGQgb25seSBiZSB1c2VkIHdo
ZW4gdGhlIGZ1bGwgcGF0aC9uYW1lIGFyZSB0cnVzdGVkOyBvdGhlcndpc2UsIGl0IGNvdWxkCiAg
ICAgLy8gYWxsb3cgYXJiaXRyYXJ5IHBhZ2VzIHRvIGRldGVybWluZSB3aGF0IGFwcGxpY2F0aW9u
cyBhbiB1c2VyIGhhcyBpbnN0YWxsZWQuCkBAIC01MSw3ICs1MCw3IEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGRlc2VyaWFsaXplKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRmlsZShwYXRoLCBzcmNVUkwsIHR5cGUpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBGaWxlKGRlc2VyaWFsaXphdGlvbkNvbnRydWN0b3IsIHBhdGgsIHNy
Y1VSTCwgdHlwZSkpOwogICAgIH0KIAogICAgIC8vIENyZWF0ZSBhIGZpbGUgd2l0aCBhIG5hbWUg
ZXhwb3NlZCB0byB0aGUgYXV0aG9yICh2aWEgRmlsZS5uYW1lIGFuZCBhc3NvY2lhdGVkIERPTSBw
cm9wZXJ0aWVzKSB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgb25lIHByb3ZpZGVkIGluIHRoZSBwYXRo
LgpAQCAtNzEsMTQgKzcwLDEzIEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIHJldHVybnMgdGhlIGN1
cnJlbnQgZGF0ZSBhbmQgdGltZSBpZiB0aGUgZmlsZSdzIGxhc3QgbW9kaWZpZWNhdGlvbiBkYXRl
IGlzIG5vdCBrbm93biAocGVyIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL0ZpbGVBUEkvI2Rm
bi1sYXN0TW9kaWZpZWREYXRlKS4KICAgICBkb3VibGUgbGFzdE1vZGlmaWVkRGF0ZSgpIGNvbnN0
OwogCi0gICAgc3RhdGljIFN0cmluZyBjb250ZW50VHlwZUZyb21GaWxlUGF0aChjb25zdCBTdHJp
bmcmLCBDb250ZW50VHlwZUxvb2t1cFBvbGljeSk7CisgICAgc3RhdGljIFN0cmluZyBjb250ZW50
VHlwZUZyb21GaWxlUGF0aE9yTmFtZShjb25zdCBTdHJpbmcmLCBDb250ZW50VHlwZUxvb2t1cFBv
bGljeSk7CiAKIHByaXZhdGU6CiAgICAgRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIENvbnRlbnRU
eXBlTG9va3VwUG9saWN5KTsKICAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBDb250ZW50VHlwZUxvb2t1cFBvbGljeSk7CiAKLSAgICAvLyBGb3IgZGVzZXJp
YWxpemF0aW9uLgotICAgIEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBVUkwmIHNyY1VS
TCwgY29uc3QgU3RyaW5nJiB0eXBlKTsKKyAgICBGaWxlKERlc2VyaWFsaXphdGlvbkNvbnRydWN0
b3IsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYg
dHlwZSk7CiAKICAgICBTdHJpbmcgbV9wYXRoOwogICAgIFN0cmluZyBtX25hbWU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAJ
KHJldmlzaW9uIDE2ODMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgiCiAKLSNpbmNs
dWRlICJCbG9iRGF0YS5oIgorI2luY2x1ZGUgIkJsb2JQYXJ0LmgiCiAjaW5jbHVkZSAiQmxvYlJl
Z2lzdHJ5LmgiCiAjaW5jbHVkZSAiQmxvYlVSTC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCkBAIC01MCwxMSArNTAsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IEJsb2JS
ZWdpc3RyeUNvbnRleHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIEJsb2JSZWdpc3RyeUNvbnRleHQoY29uc3QgVVJMJiB1cmwsIHN0ZDo6dW5pcXVlX3B0cjxC
bG9iRGF0YT4gYmxvYkRhdGEpCisgICAgQmxvYlJlZ2lzdHJ5Q29udGV4dChjb25zdCBVUkwmIHVy
bCwgVmVjdG9yPEJsb2JQYXJ0PiBibG9iUGFydHMsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUp
CiAgICAgICAgIDogdXJsKHVybC5jb3B5KCkpCi0gICAgICAgICwgYmxvYkRhdGEoc3RkOjptb3Zl
KGJsb2JEYXRhKSkKKyAgICAgICAgLCBjb250ZW50VHlwZShjb250ZW50VHlwZS5pc29sYXRlZENv
cHkoKSkKKyAgICAgICAgLCBibG9iUGFydHMoc3RkOjptb3ZlKGJsb2JQYXJ0cykpCiAgICAgewot
ICAgICAgICB0aGlzLT5ibG9iRGF0YS0+ZGV0YWNoRnJvbUN1cnJlbnRUaHJlYWQoKTsKKyAgICAg
ICAgZm9yIChCbG9iUGFydCYgcGFydCA6IGJsb2JQYXJ0cykKKyAgICAgICAgICAgIHBhcnQuZGV0
YWNoRnJvbUN1cnJlbnRUaHJlYWQoKTsKICAgICB9CiAKICAgICBCbG9iUmVnaXN0cnlDb250ZXh0
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHNyY1VSTCkKQEAgLTY4LDkgKzcwLDE4IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgQmxvYlJlZ2lzdHJ5Q29udGV4dChjb25zdCBVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQorICAg
ICAgICA6IHVybCh1cmwuY29weSgpKQorICAgICAgICAsIHBhdGgocGF0aC5pc29sYXRlZENvcHko
KSkKKyAgICAgICAgLCBjb250ZW50VHlwZShjb250ZW50VHlwZS5pc29sYXRlZENvcHkoKSkKKyAg
ICB7CisgICAgfQorCiAgICAgVVJMIHVybDsKICAgICBVUkwgc3JjVVJMOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxCbG9iRGF0YT4gYmxvYkRhdGE7CisgICAgU3RyaW5nIHBhdGg7CisgICAgU3RyaW5n
IGNvbnRlbnRUeXBlOworICAgIFZlY3RvcjxCbG9iUGFydD4gYmxvYlBhcnRzOwogfTsKIAogI2lm
IEVOQUJMRShCTE9CKQpAQCAtODgsMTggKzk5LDMzIEBAIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxC
bG9iVXJsT3JpZ2luTWFwPiYKICAgICByZXR1cm4gKm1hcDsKIH0KIAotdW5zaWduZWQgbG9uZyBs
b25nIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVy
bCwgc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPiBibG9iRGF0YSkKK3ZvaWQgVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeTo6cmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQoreworICAgIGlmIChpc01haW5U
aHJlYWQoKSkKKyAgICAgICAgYmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJGaWxlQmxvYlVSTCh1cmws
IHBhdGgsIGNvbnRlbnRUeXBlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gQmxvYlJlZ2lzdHJ5
Q29udGV4dCBwZXJmb3JtcyBhbiBpc29sYXRlZCBjb3B5IG9mIGRhdGEuCisgICAgICAgIEJsb2JS
ZWdpc3RyeUNvbnRleHQqIGNvbnRleHQgPSBuZXcgQmxvYlJlZ2lzdHJ5Q29udGV4dCh1cmwsIHBh
dGgsIGNvbnRlbnRUeXBlKTsKKyAgICAgICAgQmluYXJ5U2VtYXBob3JlIHNlbWFwaG9yZTsKKyAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChbY29udGV4dF0geworICAgICAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPEJsb2JSZWdpc3RyeUNvbnRleHQ+IGJsb2JSZWdpc3RyeUNvbnRleHQoY29udGV4dCk7
CisgICAgICAgICAgICBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckZpbGVCbG9iVVJMKGJsb2JSZWdp
c3RyeUNvbnRleHQtPnVybCwgYmxvYlJlZ2lzdHJ5Q29udGV4dC0+cGF0aCwgYmxvYlJlZ2lzdHJ5
Q29udGV4dC0+Y29udGVudFR5cGUpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKK3Vuc2lnbmVk
IGxvbmcgbG9uZyBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwoY29uc3Qg
VVJMJiB1cmwsIFZlY3RvcjxCbG9iUGFydD4gYmxvYlBhcnRzLCBjb25zdCBTdHJpbmcmIGNvbnRl
bnRUeXBlKQogewogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyByZXN1bHRTaXplOwogICAgIGlmIChp
c01haW5UaHJlYWQoKSkKLSAgICAgICAgcmVzdWx0U2l6ZSA9IGJsb2JSZWdpc3RyeSgpLnJlZ2lz
dGVyQmxvYlVSTCh1cmwsIHN0ZDo6bW92ZShibG9iRGF0YSkpOworICAgICAgICByZXN1bHRTaXpl
ID0gYmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJCbG9iVVJMKHVybCwgc3RkOjptb3ZlKGJsb2JQYXJ0
cyksIGNvbnRlbnRUeXBlKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gQmxvYlJlZ2lzdHJ5Q29u
dGV4dCBwZXJmb3JtcyBhbiBpc29sYXRlZCBjb3B5IG9mIGRhdGEuCi0gICAgICAgIEJsb2JSZWdp
c3RyeUNvbnRleHQqIGNvbnRleHQgPSBuZXcgQmxvYlJlZ2lzdHJ5Q29udGV4dCh1cmwsIHN0ZDo6
bW92ZShibG9iRGF0YSkpOworICAgICAgICBCbG9iUmVnaXN0cnlDb250ZXh0KiBjb250ZXh0ID0g
bmV3IEJsb2JSZWdpc3RyeUNvbnRleHQodXJsLCBzdGQ6Om1vdmUoYmxvYlBhcnRzKSwgY29udGVu
dFR5cGUpOwogICAgICAgICBCaW5hcnlTZW1hcGhvcmUgc2VtYXBob3JlOwogICAgICAgICBjYWxs
T25NYWluVGhyZWFkKFtjb250ZXh0LCAmc2VtYXBob3JlLCAmcmVzdWx0U2l6ZV0gewogICAgICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPEJsb2JSZWdpc3RyeUNvbnRleHQ+IGJsb2JSZWdpc3RyeUNv
bnRleHQoY29udGV4dCk7Ci0gICAgICAgICAgICByZXN1bHRTaXplID0gYmxvYlJlZ2lzdHJ5KCku
cmVnaXN0ZXJCbG9iVVJMKGJsb2JSZWdpc3RyeUNvbnRleHQtPnVybCwgc3RkOjptb3ZlKGJsb2JS
ZWdpc3RyeUNvbnRleHQtPmJsb2JEYXRhKSk7CisgICAgICAgICAgICByZXN1bHRTaXplID0gYmxv
YlJlZ2lzdHJ5KCkucmVnaXN0ZXJCbG9iVVJMKGJsb2JSZWdpc3RyeUNvbnRleHQtPnVybCwgc3Rk
Ojptb3ZlKGJsb2JSZWdpc3RyeUNvbnRleHQtPmJsb2JQYXJ0cyksIGJsb2JSZWdpc3RyeUNvbnRl
eHQtPmNvbnRlbnRUeXBlKTsKICAgICAgICAgICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKICAgICAg
ICAgfSk7CiAgICAgICAgIHNlbWFwaG9yZS53YWl0KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6bWF4KCkpOwpAQCAtMTY4LDcgKzE5NCw3IEBAIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IFRocmVhZGFibGVCbG8KIAogI2Vsc2UKIAotdW5zaWduZWQgbG9uZyBsb25nIFRocmVhZGFibGVC
bG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmLCBzdGQ6OnVuaXF1ZV9wdHI8
QmxvYkRhdGE+KQordW5zaWduZWQgbG9uZyBsb25nIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJl
Z2lzdGVyQmxvYlVSTChjb25zdCBVUkwmLCBWZWN0b3I8QmxvYlBhcnQ+KQogewogICAgIHJldHVy
biAwOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lz
dHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5LmgJKHJldmlzaW9uIDE2ODMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
VGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNyArMzEsMTkg
QEAKICNpZm5kZWYgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeV9oCiAjZGVmaW5lIFRocmVhZGFibGVC
bG9iUmVnaXN0cnlfaAogCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBCbG9iRGF0YTsKK2NsYXNzIEJsb2JQYXJ0OwogY2xhc3MgVVJMOwogY2xh
c3MgU2VjdXJpdHlPcmlnaW47CiAKIGNsYXNzIFRocmVhZGFibGVCbG9iUmVnaXN0cnkgewogcHVi
bGljOgotICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0
IFVSTCYsIHN0ZDo6dW5pcXVlX3B0cjxCbG9iRGF0YT4pOworICAgIHN0YXRpYyB2b2lkIHJlZ2lz
dGVyRmlsZUJsb2JVUkwoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnRUeXBlKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHJlZ2lzdGVy
QmxvYlVSTChjb25zdCBVUkwmLCBWZWN0b3I8QmxvYlBhcnQ+IGJsb2JQYXJ0cywgY29uc3QgU3Ry
aW5nJiBjb250ZW50VHlwZSk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKFNlY3Vy
aXR5T3JpZ2luKiwgY29uc3QgVVJMJiwgY29uc3QgVVJMJiBzcmNVUkwpOwogICAgIHN0YXRpYyB2
b2lkIHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcAkocmV2aXNpb24gMTY4MzE3KQorKysg
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBCbG9iQnVpbGRlcjo6YXBwZW5kKEFycmF5QnVmZmVy
KiBhcgogICAgIGlmICghYXJyYXlCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGFwcGVu
ZEJ5dGVzRGF0YShhcnJheUJ1ZmZlci0+ZGF0YSgpLCBhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
KTsKKyAgICBtX2FwcGVuZGFibGVEYXRhLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
YXJyYXlCdWZmZXItPmRhdGEoKSksIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwogfQogCiB2
b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGFycmF5
QnVmZmVyVmlldykKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBCbG9iQnVpbGRlcjo6YXBwZW5kKFBh
c3NSZWZQdHI8QXJyYQogICAgIGlmICghYXJyYXlCdWZmZXJWaWV3KQogICAgICAgICByZXR1cm47
CiAKLSAgICBhcHBlbmRCeXRlc0RhdGEoYXJyYXlCdWZmZXJWaWV3LT5iYXNlQWRkcmVzcygpLCBh
cnJheUJ1ZmZlclZpZXctPmJ5dGVMZW5ndGgoKSk7CisgICAgbV9hcHBlbmRhYmxlRGF0YS5hcHBl
bmQoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGFycmF5QnVmZmVyVmlldy0+YmFzZUFkZHJlc3Mo
KSksIGFycmF5QnVmZmVyVmlldy0+Ynl0ZUxlbmd0aCgpKTsKIH0KICNlbmRpZgogCkBAIC05Miwy
NSArOTIsMTQgQEAgdm9pZCBCbG9iQnVpbGRlcjo6YXBwZW5kKEJsb2IqIGJsb2IpCiAgICAgaWYg
KCFibG9iKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFtX2FwcGVuZGFibGVEYXRhLmlzRW1w
dHkoKSkKLSAgICAgICAgbV9pdGVtcy5hcHBlbmQoQmxvYkRhdGFJdGVtKFJhd0RhdGE6OmNyZWF0
ZShzdGQ6Om1vdmUobV9hcHBlbmRhYmxlRGF0YSkpKSk7Ci0gICAgaWYgKGJsb2ItPmlzRmlsZSgp
KSB7Ci0gICAgICAgIEZpbGUqIGZpbGUgPSB0b0ZpbGUoYmxvYik7Ci0gICAgICAgIG1faXRlbXMu
YXBwZW5kKEJsb2JEYXRhSXRlbShmaWxlLT5wYXRoKCksIDAsIEJsb2JEYXRhSXRlbTo6dG9FbmRP
ZkZpbGUsIGludmFsaWRGaWxlVGltZSgpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbG9uZyBs
b25nIGJsb2JTaXplID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihibG9iLT5zaXplKCkpOwotICAg
ICAgICBtX2l0ZW1zLmFwcGVuZChCbG9iRGF0YUl0ZW0oYmxvYi0+dXJsKCksIDAsIGJsb2JTaXpl
KSk7Ci0gICAgfQorICAgICAgICBtX2l0ZW1zLmFwcGVuZChCbG9iUGFydChzdGQ6Om1vdmUobV9h
cHBlbmRhYmxlRGF0YSkpKTsKKyAgICBtX2l0ZW1zLmFwcGVuZChCbG9iUGFydChibG9iLT51cmwo
KSkpOwogfQogCi12b2lkIEJsb2JCdWlsZGVyOjphcHBlbmRCeXRlc0RhdGEoY29uc3Qgdm9pZCog
ZGF0YSwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBtX2FwcGVuZGFibGVEYXRhLmFwcGVuZChzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksIGxlbmd0aCk7Ci19Ci0KLUJsb2JEYXRhSXRlbUxp
c3QgQmxvYkJ1aWxkZXI6OmZpbmFsaXplKCkKK1ZlY3RvcjxCbG9iUGFydD4gQmxvYkJ1aWxkZXI6
OmZpbmFsaXplKCkKIHsKICAgICBpZiAoIW1fYXBwZW5kYWJsZURhdGEuaXNFbXB0eSgpKQotICAg
ICAgICBtX2l0ZW1zLmFwcGVuZChCbG9iRGF0YUl0ZW0oUmF3RGF0YTo6Y3JlYXRlKHN0ZDo6bW92
ZShtX2FwcGVuZGFibGVEYXRhKSkpKTsKKyAgICAgICAgbV9pdGVtcy5hcHBlbmQoQmxvYlBhcnQo
c3RkOjptb3ZlKG1fYXBwZW5kYWJsZURhdGEpKSk7CiAgICAgcmV0dXJuIHN0ZDo6bW92ZShtX2l0
ZW1zKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxk
ZXIuaAkocmV2aXNpb24gMTY4MzE3KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRC
bG9iQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw3IEBACiAjaWZuZGVmIFdl
YktpdEJsb2JCdWlsZGVyX2gKICNkZWZpbmUgV2ViS2l0QmxvYkJ1aWxkZXJfaAogCi0jaW5jbHVk
ZSAiQmxvYkRhdGEuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgIkJsb2JQ
YXJ0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQXJyYXlCdWZmZXI7CkBAIC01NCwxMiAr
NTMsMTAgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8SlNDOjpBcnJheUJ1
ZmZlclZpZXc+KTsKICNlbmRpZgogCi0gICAgQmxvYkRhdGFJdGVtTGlzdCBmaW5hbGl6ZSgpOwor
ICAgIFZlY3RvcjxCbG9iUGFydD4gZmluYWxpemUoKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGFw
cGVuZEJ5dGVzRGF0YShjb25zdCB2b2lkKiwgc2l6ZV90KTsKLQotICAgIEJsb2JEYXRhSXRlbUxp
c3QgbV9pdGVtczsKKyAgICBWZWN0b3I8QmxvYlBhcnQ+IG1faXRlbXM7CiAgICAgVmVjdG9yPGNo
YXI+IG1fYXBwZW5kYWJsZURhdGE7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Jsb2JEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhLmNwcAkocmV2aXNpb24gMTY4MzE3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDIwICs0NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3QgbG9uZyBsb25nIEJsb2JE
YXRhSXRlbTo6dG9FbmRPZkZpbGUgPSAtMTsKIAotdm9pZCBCbG9iRGF0YUl0ZW06OmRldGFjaEZy
b21DdXJyZW50VGhyZWFkKCkKLXsKLSAgICBwYXRoID0gcGF0aC5pc29sYXRlZENvcHkoKTsKLSAg
ICB1cmwgPSB1cmwuY29weSgpOwotfQotCi12b2lkIEJsb2JEYXRhOjpkZXRhY2hGcm9tQ3VycmVu
dFRocmVhZCgpCi17Ci0gICAgbV9jb250ZW50VHlwZSA9IG1fY29udGVudFR5cGUuaXNvbGF0ZWRD
b3B5KCk7Ci0gICAgbV9jb250ZW50RGlzcG9zaXRpb24gPSBtX2NvbnRlbnREaXNwb3NpdGlvbi5p
c29sYXRlZENvcHkoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIG1faXRlbXMuYXQoaSkuZGV0YWNoRnJvbUN1cnJlbnRUaHJlYWQoKTsK
LX0KLQogdm9pZCBCbG9iRGF0YTo6c2V0Q29udGVudFR5cGUoY29uc3QgU3RyaW5nJiBjb250ZW50
VHlwZSkKIHsKICAgICBBU1NFUlQoQmxvYjo6aXNOb3JtYWxpemVkQ29udGVudFR5cGUoY29udGVu
dFR5cGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRh
LmgJKHJldmlzaW9uIDE2ODMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
QmxvYkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKKy8vIEZJWE1FOiBSYXdEYXRhIGRvZXNuJ3QgbmVlZCB0byBiZSBUaHJlYWRT
YWZlUmVmQ291bnRlZCBhbnkgbW9yZS4gV2UgY2FuIHByb2JhYmx5IHN3aXRjaCB0byBhbm90aGVy
IGRhdGEgYnVmZmVyIHR5cGUgbm93LgogY2xhc3MgUmF3RGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxSYXdEYXRhPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmF3
RGF0YT4gY3JlYXRlKFZlY3RvcjxjaGFyPiYmIGRhdGEpCkBAIC0xMTgsOSArMTE5LDYgQEAgc3Ry
dWN0IEJsb2JEYXRhSXRlbSB7CiAgICAgewogICAgIH0KIAotICAgIC8vIERldGFjaGVzIGZyb20g
Y3VycmVudCB0aHJlYWQgc28gdGhhdCBpdCBjYW4gYmUgcGFzc2VkIHRvIGFub3RoZXIgdGhyZWFk
LgotICAgIHZvaWQgZGV0YWNoRnJvbUN1cnJlbnRUaHJlYWQoKTsKLQogICAgIGVudW0gewogICAg
ICAgICBEYXRhLAogICAgICAgICBGaWxlLApAQCAtMTYxLDkgKzE1OSw2IEBAIGNsYXNzIEJsb2JE
YXRhIHsKIHB1YmxpYzoKICAgICBCbG9iRGF0YSgpIHsgfQogCi0gICAgLy8gRGV0YWNoZXMgZnJv
bSBjdXJyZW50IHRocmVhZCBzbyB0aGF0IGl0IGNhbiBiZSBwYXNzZWQgdG8gYW5vdGhlciB0aHJl
YWQuCi0gICAgdm9pZCBkZXRhY2hGcm9tQ3VycmVudFRocmVhZCgpOwotCiAgICAgY29uc3QgU3Ry
aW5nJiBjb250ZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFR5cGU7IH0KICAgICB2
b2lkIHNldENvbnRlbnRUeXBlKGNvbnN0IFN0cmluZyYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JQYXJ0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUGFydC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUGFydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JQYXJ0X2gKKyNkZWZpbmUgQmxvYlBh
cnRfaAorCisjaW5jbHVkZSAiVVJMLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
QmxvYlBhcnQgeworcHVibGljOgorICAgIGVudW0gVHlwZSB7CisgICAgICAgIERhdGEsCisgICAg
ICAgIEJsb2IKKyAgICB9OworCisgICAgQmxvYlBhcnQoKQorICAgICAgICA6IG1fdHlwZShEYXRh
KQorICAgIHsKKyAgICB9CisKKyAgICBCbG9iUGFydChWZWN0b3I8Y2hhcj4gZGF0YSkKKyAgICAg
ICAgOiBtX3R5cGUoRGF0YSkKKyAgICAgICAgLCBtX2RhdGEoc3RkOjptb3ZlKGRhdGEpKQorICAg
IHsKKyAgICB9CisKKyAgICBCbG9iUGFydChjb25zdCBVUkwmIHVybCkKKyAgICAgICAgOiBtX3R5
cGUoQmxvYikKKyAgICAgICAgLCBtX3VybCh1cmwpCisgICAgeworICAgIH0KKworICAgIFR5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgY29uc3QgVmVjdG9yPGNoYXI+
JiBkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gRGF0YSk7Cisg
ICAgICAgIHJldHVybiBtX2RhdGE7CisgICAgfQorCisgICAgVmVjdG9yPGNoYXI+IG1vdmVEYXRh
KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gRGF0YSk7CisgICAgICAgIHJldHVy
biBzdGQ6Om1vdmUobV9kYXRhKTsKKyAgICB9CisKKyAgICBjb25zdCBVUkwmIHVybCgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IEJsb2IpOworICAgICAgICByZXR1cm4g
bV91cmw7CisgICAgfQorCisgICAgdm9pZCBkZXRhY2hGcm9tQ3VycmVudFRocmVhZCgpCisgICAg
eworICAgICAgICBtX3VybCA9IG1fdXJsLmNvcHkoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
VHlwZSBtX3R5cGU7CisgICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKKyAgICBVUkwgbV91cmw7Cit9
OworCit9CisKKyNlbmRpZiAvLyBCbG9iUGFydF9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JQYXJ0LmgKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVn
aXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZWdpc3RyeS5oCShyZXZpc2lvbiAxNjgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTIg
QEAKICNpZm5kZWYgQmxvYlJlZ2lzdHJ5X2gKICNkZWZpbmUgQmxvYlJlZ2lzdHJ5X2gKIAotI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQmxvYkRh
dGE7Ci1jbGFzcyBCbG9iU3RvcmFnZURhdGE7CitjbGFzcyBCbG9iUGFydDsKIGNsYXNzIEJsb2JS
ZWdpc3RyeTsKIGNsYXNzIFVSTDsKIApAQCAtNDUsOCArNDUsMTIgQEAgQmxvYlJlZ2lzdHJ5JiBi
bG9iUmVnaXN0cnkoKTsKIC8vIEJsb2JSZWdpc3RyeSBpcyBub3QgdGhyZWFkLXNhZmUuIEl0IHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIG1haW4gdGhyZWFkLgogY2xhc3MgQmxvYlJlZ2lzdHJ5
IHsKIHB1YmxpYzoKKworICAgIC8vIFJlZ2lzdGVycyBhIGJsb2IgVVJMIHJlZmVycmluZyB0byB0
aGUgc3BlY2lmaWVkIGZpbGUuCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRmlsZUJsb2JVUkwo
Y29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBl
KSA9IDA7CisKICAgICAvLyBSZWdpc3RlcnMgYSBibG9iIFVSTCByZWZlcnJpbmcgdG8gdGhlIHNw
ZWNpZmllZCBibG9iIGRhdGEuCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgcmVnaXN0
ZXJCbG9iVVJMKGNvbnN0IFVSTCYsIHN0ZDo6dW5pcXVlX3B0cjxCbG9iRGF0YT4pID0gMDsKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyByZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiwg
VmVjdG9yPEJsb2JQYXJ0PiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkgPSAwOwogICAgIAog
ICAgIC8vIFJlZ2lzdGVycyBhIG5ldyBibG9iIFVSTCByZWZlcnJpbmcgdG8gdGhlIGJsb2IgZGF0
YSBpZGVudGlmaWVkIGJ5IHRoZSBzcGVjaWZpZWQgc3JjVVJMLgogICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiwgY29uc3QgVVJMJiBzcmNVUkwpID0gMDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJ
bXBsLmNwcAkocmV2aXNpb24gMTY4MzE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QAogCiAjaWYgRU5BQkxFKEJMT0IpCiAKKyNpbmNsdWRlICJCbG9iUGFydC5oIgogI2luY2x1ZGUg
IkJsb2JSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIkJsb2JTdG9yYWdlRGF0YS5oIgogI2lu
Y2x1ZGUgIkZpbGVNZXRhZGF0YS5oIgpAQCAtMTE2LDEyICsxMTcsMjggQEAgdm9pZCBCbG9iUmVn
aXN0cnlJbXBsOjphcHBlbmRTdG9yYWdlSXRlbQogICAgIEFTU0VSVCghbGVuZ3RoKTsKIH0KIAot
dW5zaWduZWQgbG9uZyBsb25nIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25z
dCBVUkwmIHVybCwgc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPiBibG9iRGF0YSkKK3ZvaWQgQmxv
YlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgcmVnaXN0ZXJCbG9iUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rv
cigpOwogCi0gICAgUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gYmxvYlN0b3JhZ2VEYXRhID0gQmxv
YlN0b3JhZ2VEYXRhOjpjcmVhdGUoYmxvYkRhdGEtPmNvbnRlbnRUeXBlKCkpOworICAgIFJlZlB0
cjxCbG9iU3RvcmFnZURhdGE+IGJsb2JTdG9yYWdlRGF0YSA9IEJsb2JTdG9yYWdlRGF0YTo6Y3Jl
YXRlKGNvbnRlbnRUeXBlKTsKKworICAgIC8vIEZJWE1FOiBGYWN0b3Igb3V0IHNpemUgYW5kIG1v
ZGlmaWNhdGlvbiB0cmFja2luZyBmb3IgYSBjbGVhbmVyIGltcGxlbWVudGF0aW9uLgorICAgIEZp
bGVNZXRhZGF0YSBtZXRhZGF0YTsKKyAgICBpZiAoIWdldEZpbGVNZXRhZGF0YShwYXRoLCBtZXRh
ZGF0YSkpCisgICAgICAgIHJldHVybjsKKworICAgIGJsb2JTdG9yYWdlRGF0YS0+bV9kYXRhLmFw
cGVuZEZpbGUocGF0aCwgMCwgbWV0YWRhdGEubGVuZ3RoLCBtZXRhZGF0YS5tb2RpZmljYXRpb25U
aW1lKTsKKyAgICBtX2Jsb2JzLnNldCh1cmwuc3RyaW5nKCksIGJsb2JTdG9yYWdlRGF0YSk7Cit9
CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwo
Y29uc3QgVVJMJiB1cmwsIFZlY3RvcjxCbG9iUGFydD4gYmxvYlBhcnRzLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnRUeXBlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmVnaXN0
ZXJCbG9iUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3RvcigpOworCisgICAgUmVmUHRyPEJsb2JTdG9y
YWdlRGF0YT4gYmxvYlN0b3JhZ2VEYXRhID0gQmxvYlN0b3JhZ2VEYXRhOjpjcmVhdGUoY29udGVu
dFR5cGUpOwogCiAgICAgLy8gVGhlIGJsb2IgZGF0YSBpcyBzdG9yZWQgaW4gdGhlICJjYW5vbmlj
YWwiIHdheS4gVGhhdCBpcywgaXQgb25seSBjb250YWlucyBhIGxpc3Qgb2YgRGF0YSBhbmQgRmls
ZSBpdGVtcy4KICAgICAvLyAxKSBUaGUgRGF0YSBpdGVtIGlzIGRlbm90ZWQgYnkgdGhlIHJhdyBk
YXRhIGFuZCB0aGUgcmFuZ2UuCkBAIC0xMjksMzggKzE0NiwyNSBAQCB1bnNpZ25lZCBsb25nIGxv
bmcgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnCiAgICAgLy8gMykgVGhlIFVSTCBpdGVtIGlzIGRlbm90
ZWQgYnkgdGhlIFVSTCwgdGhlIHJhbmdlIGFuZCB0aGUgZXhwZWN0ZWQgbW9kaWZpY2F0aW9uIHRp
bWUuCiAgICAgLy8gQWxsIHRoZSBCbG9iIGl0ZW1zIGluIHRoZSBwYXNzaW5nIGJsb2IgZGF0YSBh
cmUgcmVzb2x2ZWQgYW5kIGV4cGFuZGVkIGludG8gYSBzZXQgb2YgRGF0YSBhbmQgRmlsZSBpdGVt
cy4KIAotICAgIC8vIEZJWE1FOiBCbG9iRGF0YUl0ZW1zIGNvbnRhaW4gYSBsb3Qgb2YgaW5mb3Jt
YXRpb24gdGhhdCB3ZSBkbyBub3QgZXhwZWN0IHRvIGJlIHByZXNlbnQgd2hlbiByZWdpc3Rlcmlu
ZyBhIG5ldyBibG9iLAotICAgIC8vIHRoZXNlIGRhdGEgbWVtYmVycyBhcmUgb25seSB1c2VkIGlu
c2lkZSB0aGUgcmVnaXN0cnkuIFVzZSBhIG1vcmUgYXBwcm9wcmlhdGUgdHlwZSB0aGFuIEJsb2JE
YXRhLgotCiAgICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemUgPSAwOwotICAgIGZvciAoY29uc3Qg
QmxvYkRhdGFJdGVtJiBpdGVtIDogYmxvYkRhdGEtPml0ZW1zKCkpIHsKLSAgICAgICAgc3dpdGNo
IChpdGVtLnR5cGUpIHsKLSAgICAgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkRhdGE6Ci0gICAgICAg
ICAgICBibG9iU3RvcmFnZURhdGEtPm1fZGF0YS5hcHBlbmREYXRhKGl0ZW0uZGF0YSwgMCwgaXRl
bS5kYXRhLT5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBzaXplICs9IGl0ZW0uZGF0YS0+bGVuZ3Ro
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkZpbGU6
IHsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlbS5vZmZzZXQpOwotICAgICAgICAgICAgQVNTRVJU
KGl0ZW0ubGVuZ3RoID09IEJsb2JEYXRhSXRlbTo6dG9FbmRPZkZpbGUpOwotICAgICAgICAgICAg
QVNTRVJUKCFpc1ZhbGlkRmlsZVRpbWUoaXRlbS5leHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpKTsK
LQotICAgICAgICAgICAgLy8gRklYTUU6IEZhY3RvciBvdXQgc2l6ZSBhbmQgbW9kaWZpY2F0aW9u
IHRyYWNraW5nIGZvciBhIGNsZWFuZXIgaW1wbGVtZW50YXRpb24uCi0gICAgICAgICAgICBGaWxl
TWV0YWRhdGEgbWV0YWRhdGE7Ci0gICAgICAgICAgICBpZiAoIWdldEZpbGVNZXRhZGF0YShpdGVt
LnBhdGgsIG1ldGFkYXRhKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAg
ICAgYmxvYlN0b3JhZ2VEYXRhLT5tX2RhdGEuYXBwZW5kRmlsZShpdGVtLnBhdGgsIDAsIG1ldGFk
YXRhLmxlbmd0aCwgbWV0YWRhdGEubW9kaWZpY2F0aW9uVGltZSk7Ci0gICAgICAgICAgICBzaXpl
ICs9IG1ldGFkYXRhLmxlbmd0aDsKKyAgICBmb3IgKEJsb2JQYXJ0JiBwYXJ0IDogYmxvYlBhcnRz
KSB7CisgICAgICAgIHN3aXRjaCAocGFydC50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBCbG9iUGFy
dDo6RGF0YTogeworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHBhcnRTaXplID0gcGFy
dC5kYXRhKCkuc2l6ZSgpOworICAgICAgICAgICAgUmVmUHRyPFJhd0RhdGE+IHJhd0RhdGEgPSBS
YXdEYXRhOjpjcmVhdGUocGFydC5tb3ZlRGF0YSgpKTsKKyAgICAgICAgICAgIHNpemUgKz0gcGFy
dFNpemU7CisgICAgICAgICAgICBibG9iU3RvcmFnZURhdGEtPm1fZGF0YS5hcHBlbmREYXRhKHJh
d0RhdGEucmVsZWFzZSgpLCAwLCBwYXJ0U2l6ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICBjYXNlIEJsb2JEYXRhSXRlbTo6QmxvYjoKLSAgICAgICAgICAgIGlmICgh
bV9ibG9icy5jb250YWlucyhpdGVtLnVybC5zdHJpbmcoKSkpCisgICAgICAgIGNhc2UgQmxvYlBh
cnQ6OkJsb2I6IHsKKyAgICAgICAgICAgIGlmICghbV9ibG9icy5jb250YWlucyhwYXJ0LnVybCgp
LnN0cmluZygpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHNpemUg
Kz0gYmxvYlNpemUoaXRlbS51cmwpOyAvLyBBcyBhIHNpZGUgZWZmZWN0LCB0aGlzIGNhbGN1bGF0
ZXMgc2l6ZXMgb2YgYWxsIGZpbGVzIGluIHRoZSBibG9iLgotICAgICAgICAgICAgQVNTRVJUKGJs
b2JTaXplKGl0ZW0udXJsKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGl0ZW0u
bGVuZ3RoKSk7Ci0gICAgICAgICAgICBhcHBlbmRTdG9yYWdlSXRlbXMoYmxvYlN0b3JhZ2VEYXRh
LmdldCgpLCBtX2Jsb2JzLmdldChpdGVtLnVybC5zdHJpbmcoKSktPml0ZW1zKCksIGl0ZW0ub2Zm
c2V0LCBpdGVtLmxlbmd0aCk7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgcGFydFNp
emUgPSBibG9iU2l6ZShwYXJ0LnVybCgpKTsgLy8gQXMgYSBzaWRlIGVmZmVjdCwgdGhpcyBjYWxj
dWxhdGVzIHNpemVzIG9mIGFsbCBmaWxlcyBpbiB0aGUgYmxvYi4KKyAgICAgICAgICAgIHNpemUg
Kz0gcGFydFNpemU7CisgICAgICAgICAgICBhcHBlbmRTdG9yYWdlSXRlbXMoYmxvYlN0b3JhZ2VE
YXRhLmdldCgpLCBtX2Jsb2JzLmdldChwYXJ0LnVybCgpLnN0cmluZygpKS0+aXRlbXMoKSwgMCwg
cGFydFNpemUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgfQogICAg
IH0KIAogICAgIG1fYmxvYnMuc2V0KHVybC5zdHJpbmcoKSwgYmxvYlN0b3JhZ2VEYXRhKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5
SW1wbC5oCShyZXZpc2lvbiAxNjgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JSZWdpc3RyeUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBj
bGFzcyBSZXNvdXJjZUhhbmRsZUNsaWVudDsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIAogLy8g
QmxvYlJlZ2lzdHJ5SW1wbCBpcyBub3QgdGhyZWFkLXNhZmUuIEl0IHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBmcm9tIG1haW4gdGhyZWFkLgotY2xhc3MgQmxvYlJlZ2lzdHJ5SW1wbCA6IHB1YmxpYyBC
bG9iUmVnaXN0cnkgeworY2xhc3MgQmxvYlJlZ2lzdHJ5SW1wbCBmaW5hbCA6IHB1YmxpYyBCbG9i
UmVnaXN0cnkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHZp
cnR1YWwgfkJsb2JSZWdpc3RyeUltcGwoKTsKQEAgLTU3LDcgKzU3LDggQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICB2b2lkIGFwcGVuZFN0b3JhZ2VJdGVtcyhCbG9iU3RvcmFnZURhdGEqLCBjb25z
dCBCbG9iRGF0YUl0ZW1MaXN0JiwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCk7
CiAKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyByZWdpc3RlckJsb2JVUkwoY29uc3Qg
VVJMJiwgc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgU3RyaW5n
JiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxvbmcgbG9uZyByZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiwgVmVjdG9yPEJs
b2JQYXJ0PiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmLCBjb25zdCBVUkwmIHNyY1VSTCkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgcmVnaXN0ZXJCbG9iVVJMRm9y
U2xpY2UoY29uc3QgVVJMJiwgY29uc3QgVVJMJiBzcmNVUkwsIGxvbmcgbG9uZyBzdGFydCwgbG9u
ZyBsb25nIGVuZCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJCbG9iVVJM
KGNvbnN0IFVSTCYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9Gb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YS5jcHAJKHJldmlzaW9uIDE2ODMxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsy
Myw4IEBACiAKICNpbmNsdWRlICJGb3JtRGF0YS5oIgogCi0jaW5jbHVkZSAiQmxvYkRhdGEuaCIK
ICNpbmNsdWRlICJCbG9iUmVnaXN0cnlJbXBsLmgiCisjaW5jbHVkZSAiQmxvYlN0b3JhZ2VEYXRh
LmgiCiAjaW5jbHVkZSAiQmxvYlVSTC5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUg
IkNocm9tZUNsaWVudC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3Bw
CShyZXZpc2lvbiAxNjgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSAiWE1MSHR0cFJl
cXVlc3QuaCIKIAogI2luY2x1ZGUgIkJsb2IuaCIKLSNpbmNsdWRlICJCbG9iRGF0YS5oIgogI2lu
Y2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkNyb3NzT3JpZ2luQWNj
ZXNzQ29udHJvbC5oIgogI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCkBAIC0yODksMTMgKzI4OCwx
MSBAQCBCbG9iKiBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VCbG9iKCkKICAgICBpZiAoIW1fcmVz
cG9uc2VCbG9iKSB7CiAgICAgICAgIGlmIChtX2JpbmFyeVJlc3BvbnNlQnVpbGRlcikgewogICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIGp1c3QgcmVjZWl2ZWQgdGhlIGRhdGEgZnJvbSBOZXR3b3Jr
UHJvY2VzcywgYW5kIGFyZSBzZW5kaW5nIGl0IGJhY2suIFRoaXMgaXMgaW5lZmZpY2llbnQuCi0g
ICAgICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9iaW5hcnlSZXNwb25zZUJ1aWxkZXItPnNpemUo
KTsKLSAgICAgICAgICAgIGF1dG8gYmxvYkRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPEJsb2JEYXRh
PigpOwotICAgICAgICAgICAgYmxvYkRhdGEtPmFwcGVuZERhdGEoUmF3RGF0YTo6Y3JlYXRlKG1f
YmluYXJ5UmVzcG9uc2VCdWlsZGVyLT5kYXRhKCksIHNpemUpLCAwLCBCbG9iRGF0YUl0ZW06OnRv
RW5kT2ZGaWxlKTsKLSAgICAgICAgICAgIFN0cmluZyBub3JtYWxpemVkQ29udGVudFR5cGUgPSBC
bG9iOjpub3JtYWxpemVkQ29udGVudFR5cGUocmVzcG9uc2VNSU1FVHlwZSgpKTsKLSAgICAgICAg
ICAgIGJsb2JEYXRhLT5zZXRDb250ZW50VHlwZShub3JtYWxpemVkQ29udGVudFR5cGUpOyAvLyBy
ZXNwb25zZU1JTUVUeXBlIGRlZmF1bHRzIHRvIHRleHQveG1sIHdoaWNoIG1heSBiZSBpbmNvcnJl
Y3QuCisgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICAgICAgICAgIGRhdGEuYXBw
ZW5kKG1fYmluYXJ5UmVzcG9uc2VCdWlsZGVyLT5kYXRhKCksIG1fYmluYXJ5UmVzcG9uc2VCdWls
ZGVyLT5zaXplKCkpOworICAgICAgICAgICAgU3RyaW5nIG5vcm1hbGl6ZWRDb250ZW50VHlwZSA9
IEJsb2I6Om5vcm1hbGl6ZWRDb250ZW50VHlwZShyZXNwb25zZU1JTUVUeXBlKCkpOyAvLyByZXNw
b25zZU1JTUVUeXBlIGRlZmF1bHRzIHRvIHRleHQveG1sIHdoaWNoIG1heSBiZSBpbmNvcnJlY3Qu
CisgICAgICAgICAgICBtX3Jlc3BvbnNlQmxvYiA9IEJsb2I6OmNyZWF0ZShzdGQ6Om1vdmUoZGF0
YSksIG5vcm1hbGl6ZWRDb250ZW50VHlwZSk7CiAgICAgICAgICAgICBtX2JpbmFyeVJlc3BvbnNl
QnVpbGRlci5jbGVhcigpOwotICAgICAgICAgICAgbV9yZXNwb25zZUJsb2IgPSBCbG9iOjpjcmVh
dGUoc3RkOjptb3ZlKGJsb2JEYXRhKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAv
LyBJZiB3ZSBlcnJvcmVkIG91dCBvciBnb3Qgbm8gZGF0YSwgd2Ugc3RpbGwgcmV0dXJuIGEgYmxv
YiwganVzdCBhbiBlbXB0eSBvbmUuCiAgICAgICAgICAgICBtX3Jlc3BvbnNlQmxvYiA9IEJsb2I6
OmNyZWF0ZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTY4MzE3KQorKysgU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTQtMDUt
MDUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1
c2luZyBCbG9iRGF0YSBvbiBjbGllbnQgc2lkZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyNTgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIGZvciBXZWJDb3JlIGNoYW5nZXMuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05l
dHdvcmtCbG9iUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQmxvYlJlZ2lz
dHJ5OjpyZWdpc3RlckZpbGVCbG9iVVJMKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Jsb2JS
ZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9GaWxl
QVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWdpc3RlckZpbGVCbG9iVVJMKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlZ2lzdGVyQmxvYlVSTCk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5t
ZXNzYWdlcy5pbjoKKyAgICAgICAgKiBTaGFyZWQvRmlsZUFQSS9CbG9iUmVnaXN0cmF0aW9uRGF0
YS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL0ZpbGVBUEkvQmxvYlJlZ2lzdHJhdGlv
bkRhdGEuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxCbG9iUGFydD46OmVuY29kZSk6Cisg
ICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8QmxvYlBhcnQ+OjpkZWNvZGUpOgorICAgICAgICAq
IFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBXZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JS
ZWdpc3RyeVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6QmxvYlJlZ2lzdHJ5UHJveHk6OnJl
Z2lzdGVyRmlsZUJsb2JVUkwpOgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6
cmVnaXN0ZXJCbG9iVVJMKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lz
dHJ5UHJveHkuaDoKKwogMjAxNC0wNS0wNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFtDb2NvYSBXZWJLaXQyXSBBZGQgU1BJIHRvIGNsZWFyIGFsbCB2aXNpdGVkIGxp
bmtzIGluIGEgVmlzaXRlZExpbmtQcm92aWRlcgpJbmRleDogU291cmNlL1dlYktpdDIvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDE2ODMxNykKKysrIFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0yNjksOCArMjY5LDYgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJl
ZC9Eb3dubG9hZHMvRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5jcHAKICAgICBTaGFyZWQv
RG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKIAotICAgIFNoYXJlZC9GaWxlQVBJL0Jsb2JS
ZWdpc3RyYXRpb25EYXRhLmNwcAotCiAgICAgU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuY3BwCiAgICAgU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnMuY3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJ
KHJldmlzaW9uIDE2ODMxNykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NiBAQAogCiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKIAotI2luY2x1ZGUgIkJsb2JSZWdp
c3RyYXRpb25EYXRhLmgiCiAjaW5jbHVkZSAiQ29ubmVjdGlvblN0YWNrLmgiCiAjaW5jbHVkZSAi
TmV0d29ya0Jsb2JSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzTWVzc2FnZXMuaCIKQEAgLTM4LDcgKzM3LDYgQEAKICNpbmNsdWRlICJOZXR3b3JrUmVz
b3VyY2VMb2FkZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0
LmgiCiAjaW5jbHVkZSAiU2Vzc2lvblRyYWNrZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Jsb2JE
YXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZVJlcXVlc3QuaD4KQEAgLTIyNSwxNSArMjIzLDE2IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OmRlbGUKIH0KIAogI2lmIEVOQUJMRShCTE9CKQotdm9pZCBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBj
b25zdCBCbG9iUmVnaXN0cmF0aW9uRGF0YSYgZGF0YSwgdWludDY0X3QmIHJlc3VsdFNpemUpCit2
b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWdpc3RlckZpbGVCbG9iVVJMKGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSYgZXh0ZW5zaW9uSGFuZGxlLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogewot
ICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IGV4dGVuc2lvbnM7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDAsIGNvdW50ID0gZGF0YS5zYW5kYm94RXh0ZW5zaW9ucygpLnNpemUoKTsg
aSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBl
eHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoZGF0YS5zYW5kYm94RXh0ZW5zaW9u
cygpW2ldKSkKLSAgICAgICAgICAgIGV4dGVuc2lvbnMuYXBwZW5kKGV4dGVuc2lvbik7Ci0gICAg
fQorICAgIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBleHRlbnNpb24gPSBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGUoZXh0ZW5zaW9uSGFuZGxlKTsKKworICAgIE5ldHdvcmtCbG9iUmVnaXN0cnk6
OnNoYXJlZCgpLnJlZ2lzdGVyRmlsZUJsb2JVUkwodGhpcywgdXJsLCBwYXRoLCBleHRlbnNpb24u
cmVsZWFzZSgpLCBjb250ZW50VHlwZSk7Cit9CiAKLSAgICByZXN1bHRTaXplID0gTmV0d29ya0Js
b2JSZWdpc3RyeTo6c2hhcmVkKCkucmVnaXN0ZXJCbG9iVVJMKHRoaXMsIHVybCwgZGF0YS5yZWxl
YXNlRGF0YSgpLCBleHRlbnNpb25zKTsKK3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwgVmVjdG9yPEJsb2JQYXJ0PiBibG9i
UGFydHMsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIHVpbnQ2NF90JiByZXN1bHRTaXplKQor
eworICAgIHJlc3VsdFNpemUgPSBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFyZWQoKS5yZWdpc3Rl
ckJsb2JVUkwodGhpcywgdXJsLCBzdGQ6Om1vdmUoYmxvYlBhcnRzKSwgY29udGVudFR5cGUpOwog
fQogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWdpc3RlckJsb2JVUkxG
cm9tVVJMKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHNyY1VSTCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuaAkocmV2aXNpb24gMTY4MzE3KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNyArNDEsNiBAQCBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1jbGFzcyBCbG9iUmVnaXN0cmF0aW9uRGF0YTsKIGNsYXNzIE5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOwogY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZGVyOwogY2xhc3Mg
U3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcjsKQEAgLTg4LDcgKzg3LDggQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGRlbGV0ZUNvb2tpZShXZWJDb3JlOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OlVS
TCYsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSk7CiAKICNpZiBFTkFCTEUoQkxPQikKLSAgICB2
b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBCbG9iUmVnaXN0
cmF0aW9uRGF0YSYsIHVpbnQ2NF90JiByZXN1bHRTaXplKTsKKyAgICB2b2lkIHJlZ2lzdGVyRmls
ZUJsb2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsKKyAg
ICB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmLCBWZWN0b3I8V2ViQ29y
ZTo6QmxvYlBhcnQ+LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCB1aW50NjRfdCYgcmVzdWx0
U2l6ZSk7CiAgICAgdm9pZCByZWdpc3RlckJsb2JVUkxGcm9tVVJMKGNvbnN0IFdlYkNvcmU6OlVS
TCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYgc3JjVVJMKTsKICAgICB2b2lkIHJlZ2lzdGVyQmxvYlVS
TEZvclNsaWNlKGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYgc3JjVVJM
LCBpbnQ2NF90IHN0YXJ0LCBpbnQ2NF90IGVuZCwgdWludDY0X3QmIHJlc3VsdFNpemUpOwogICAg
IHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJik7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5t
ZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTY4MzE3
KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDggQEAgbWVz
c2FnZXMgLT4gTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2NlcwogICAgIERlbGV0ZUNvb2tpZShX
ZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJDb3JlOjpVUkwgdXJsLCBTdHJpbmcgY29v
a2llTmFtZSkKIAogI2lmIEVOQUJMRShCTE9CKQotICAgIFJlZ2lzdGVyQmxvYlVSTChXZWJDb3Jl
OjpVUkwgdXJsLCBXZWJLaXQ6OkJsb2JSZWdpc3RyYXRpb25EYXRhIGRhdGEpIC0+ICh1aW50NjRf
dCByZXN1bHRTaXplKQorICAgIFJlZ2lzdGVyRmlsZUJsb2JVUkwoV2ViQ29yZTo6VVJMIHVybCwg
U3RyaW5nIHBhdGgsIFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGV4dGVuc2lvbkhh
bmRsZSwgU3RyaW5nIGNvbnRlbnRUeXBlKQorICAgIFJlZ2lzdGVyQmxvYlVSTChXZWJDb3JlOjpV
UkwgdXJsLCBWZWN0b3I8V2ViQ29yZTo6QmxvYlBhcnQ+IGJsb2JQYXJ0cywgU3RyaW5nIGNvbnRl
bnRUeXBlKSAtPiAodWludDY0X3QgcmVzdWx0U2l6ZSkKICAgICBSZWdpc3RlckJsb2JVUkxGcm9t
VVJMKFdlYkNvcmU6OlVSTCB1cmwsIFdlYkNvcmU6OlVSTCBzcmNVUkwpCiAgICAgUmVnaXN0ZXJC
bG9iVVJMRm9yU2xpY2UoV2ViQ29yZTo6VVJMIHVybCwgV2ViQ29yZTo6VVJMIHNyY1VSTCwgaW50
NjRfdCBzdGFydCwgaW50NjRfdCBlbmQpIC0+ICh1aW50NjRfdCByZXN1bHRTaXplKQogICAgIFVu
cmVnaXN0ZXJCbG9iVVJMKFdlYkNvcmU6OlVSTCB1cmwpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdp
c3RyeS5jcHAJKHJldmlzaW9uIDE2ODMxNykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQkxPQikgJiYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykK
IAogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Jsb2JQ
YXJ0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9CbG9iUmVnaXN0cnlJbXBsLmg+CiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KQEAgLTQ4LDIy
ICs0OSw0MCBAQCBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpOZXR3b3JrQmxvYlJlZ2lzdHJ5CiB7CiB9
CiAKLXVpbnQ2NF90IE5ldHdvcmtCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyogY29ubmVjdGlvbiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6
dW5pcXVlX3B0cjxCbG9iRGF0YT4gZGF0YSwgY29uc3QgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0
ZW5zaW9uPj4mIG5ld1NhbmRib3hFeHRlbnNpb25zKQordm9pZCBOZXR3b3JrQmxvYlJlZ2lzdHJ5
OjpyZWdpc3RlckZpbGVCbG9iVVJMKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25u
ZWN0aW9uLCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzUmVmUHRyPFNh
bmRib3hFeHRlbnNpb24+IHNhbmRib3hFeHRlbnNpb24sIGNvbnN0IFN0cmluZyYgY29udGVudFR5
cGUpCiB7CiAgICAgQVNTRVJUKCFtX3NhbmRib3hFeHRlbnNpb25zLmNvbnRhaW5zKHVybC5zdHJp
bmcoKSkpOwogCi0gICAgLy8gQ29tYmluZSBuZXcgZXh0ZW5zaW9ucyBmb3IgRmlsZSBpdGVtcyBh
bmQgZXhpc3RpbmcgZXh0ZW5zaW9ucyBmb3IgaW5uZXIgQmxvYiBpdGVtcy4KLSAgICBWZWN0b3I8
UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBzYW5kYm94RXh0ZW5zaW9ucyA9IG5ld1NhbmRib3hF
eHRlbnNpb25zOwotICAgIGNvbnN0IEJsb2JEYXRhSXRlbUxpc3QmIGl0ZW1zID0gZGF0YS0+aXRl
bXMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQgPSBpdGVtcy5zaXplKCk7IGkgPCBj
b3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChpdGVtc1tpXS50eXBlID09IEJsb2JEYXRhSXRlbTo6
QmxvYikKLSAgICAgICAgICAgIHNhbmRib3hFeHRlbnNpb25zLmFwcGVuZFZlY3RvcihtX3NhbmRi
b3hFeHRlbnNpb25zLmdldChpdGVtc1tpXS51cmwuc3RyaW5nKCkpKTsKKyAgICBibG9iUmVnaXN0
cnkoKS5yZWdpc3RlckZpbGVCbG9iVVJMKHVybCwgcGF0aCwgY29udGVudFR5cGUpOworCisgICAg
aWYgKHNhbmRib3hFeHRlbnNpb24pIHsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0
ZW5zaW9uPj4gZXh0ZW5zaW9uc1ZlY3RvcjsKKyAgICAgICAgZXh0ZW5zaW9uc1ZlY3Rvci5hcHBl
bmQoc2FuZGJveEV4dGVuc2lvbik7CisgICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbnMuYWRkKHVy
bC5zdHJpbmcoKSwgc3RkOjptb3ZlKGV4dGVuc2lvbnNWZWN0b3IpKTsKKyAgICB9CisKKyAgICBB
U1NFUlQoIW1fYmxvYnNGb3JDb25uZWN0aW9uLmdldChjb25uZWN0aW9uKS5jb250YWlucyh1cmwp
KTsKKyAgICBCbG9iRm9yQ29ubmVjdGlvbk1hcDo6aXRlcmF0b3IgbWFwSXRlcmF0b3IgPSBtX2Js
b2JzRm9yQ29ubmVjdGlvbi5maW5kKGNvbm5lY3Rpb24pOworICAgIGlmIChtYXBJdGVyYXRvciA9
PSBtX2Jsb2JzRm9yQ29ubmVjdGlvbi5lbmQoKSkKKyAgICAgICAgbWFwSXRlcmF0b3IgPSBtX2Js
b2JzRm9yQ29ubmVjdGlvbi5hZGQoY29ubmVjdGlvbiwgSGFzaFNldDxVUkw+KCkpLml0ZXJhdG9y
OworICAgIG1hcEl0ZXJhdG9yLT52YWx1ZS5hZGQodXJsKTsKK30KKwordWludDY0X3QgTmV0d29y
a0Jsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzKiBjb25uZWN0aW9uLCBjb25zdCBVUkwmIHVybCwgVmVjdG9yPFdlYkNvcmU6OkJsb2JQYXJ0
PiBibG9iUGFydHMsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCit7CisgICAgQVNTRVJUKCFt
X3NhbmRib3hFeHRlbnNpb25zLmNvbnRhaW5zKHVybC5zdHJpbmcoKSkpOworCisgICAgLy8gQ29t
YmluZSBleGlzdGluZyBleHRlbnNpb25zIGZvciBpbm5lciBCbG9iIGl0ZW1zLgorICAgIFZlY3Rv
cjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IHNhbmRib3hFeHRlbnNpb25zOworICAgIGZvciAo
Y29uc3QgQmxvYlBhcnQmIHBhcnQgOiBibG9iUGFydHMpIHsKKyAgICAgICAgaWYgKHBhcnQudHlw
ZSgpID09IEJsb2JQYXJ0OjpCbG9iKQorICAgICAgICAgICAgc2FuZGJveEV4dGVuc2lvbnMuYXBw
ZW5kVmVjdG9yKG1fc2FuZGJveEV4dGVuc2lvbnMuZ2V0KHBhcnQudXJsKCkuc3RyaW5nKCkpKTsK
ICAgICB9CiAKLSAgICB1aW50NjRfdCByZXN1bHRTaXplID0gYmxvYlJlZ2lzdHJ5KCkucmVnaXN0
ZXJCbG9iVVJMKHVybCwgc3RkOjptb3ZlKGRhdGEpKTsKKyAgICB1aW50NjRfdCByZXN1bHRTaXpl
ID0gYmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJCbG9iVVJMKHVybCwgc3RkOjptb3ZlKGJsb2JQYXJ0
cyksIGNvbnRlbnRUeXBlKTsKIAogICAgIGlmICghc2FuZGJveEV4dGVuc2lvbnMuaXNFbXB0eSgp
KQotICAgICAgICBtX3NhbmRib3hFeHRlbnNpb25zLmFkZCh1cmwuc3RyaW5nKCksIHNhbmRib3hF
eHRlbnNpb25zKTsKKyAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9ucy5hZGQodXJsLnN0cmluZygp
LCBzdGQ6Om1vdmUoc2FuZGJveEV4dGVuc2lvbnMpKTsKIAogICAgIEFTU0VSVCghbV9ibG9ic0Zv
ckNvbm5lY3Rpb24uZ2V0KGNvbm5lY3Rpb24pLmNvbnRhaW5zKHVybCkpOwogICAgIEJsb2JGb3JD
b25uZWN0aW9uTWFwOjppdGVyYXRvciBtYXBJdGVyYXRvciA9IG1fYmxvYnNGb3JDb25uZWN0aW9u
LmZpbmQoY29ubmVjdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9G
aWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaAkocmV2aXNpb24g
MTY4MzE3KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3Jr
QmxvYlJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBCbG9iRGF0YTsK
K2NsYXNzIEJsb2JQYXJ0OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ3LDcgKzQ3LDgg
QEAgcHVibGljOgogICAgIE5ldHdvcmtCbG9iUmVnaXN0cnkoKTsKICAgICBzdGF0aWMgTmV0d29y
a0Jsb2JSZWdpc3RyeSYgc2hhcmVkKCk7CiAKLSAgICB1aW50NjRfdCByZWdpc3RlckJsb2JVUkwo
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6QmxvYkRhdGE+LCBjb25zdCBWZWN0b3I8UmVmUHRyPFNhbmRi
b3hFeHRlbnNpb24+PiYpOworICAgIHZvaWQgcmVnaXN0ZXJGaWxlQmxvYlVSTChOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2VzcyosIGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFN0cmluZyYg
cGF0aCwgUGFzc1JlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiwgY29uc3QgU3RyaW5nJiBjb250ZW50
VHlwZSk7CisgICAgdWludDY0X3QgcmVnaXN0ZXJCbG9iVVJMKE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKiwgY29uc3QgV2ViQ29yZTo6VVJMJiwgVmVjdG9yPFdlYkNvcmU6OkJsb2JQYXJ0
PiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSk7CiAgICAgdm9pZCByZWdpc3RlckJsb2JVUkwo
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25z
dCBXZWJDb3JlOjpVUkwmIHNyY1VSTCk7CiAgICAgdWludDY0X3QgcmVnaXN0ZXJCbG9iVVJMRm9y
U2xpY2UoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBjb25zdCBXZWJDb3JlOjpVUkwm
LCBjb25zdCBXZWJDb3JlOjpVUkwmIHNyY1VSTCwgaW50NjRfdCBzdGFydCwgaW50NjRfdCBlbmQp
OwogICAgIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MqLCBjb25zdCBXZWJDb3JlOjpVUkwmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAxNjgzMTcpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRl
ICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9CbG9iUGFydC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvQ2VydGlmaWNhdGVJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29raWUuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0NyZWRlbnRpYWwuaD4KQEAgLTE5NzIsNCArMTk3Myw0NSBAQCBib29sIEFy
Z3VtZW50Q29kZXI8U2Vzc2lvbklEPjo6ZGVjb2RlKEFyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K3ZvaWQgQXJndW1lbnRDb2RlcjxCbG9iUGFydD46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IEJsb2JQYXJ0JiBibG9iUGFydCkKK3sKKyAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PHVpbnQzMl90PihibG9iUGFydC50eXBlKCkpOworICAgIHN3aXRjaCAoYmxvYlBhcnQu
dHlwZSgpKSB7CisgICAgY2FzZSBCbG9iUGFydDo6RGF0YToKKyAgICAgICAgZW5jb2RlciA8PCBi
bG9iUGFydC5kYXRhKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQmxvYlBhcnQ6OkJsb2I6
CisgICAgICAgIGVuY29kZXIgPDwgYmxvYlBhcnQudXJsKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworYm9vbCBBcmd1bWVudENvZGVyPEJsb2JQYXJ0Pjo6ZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciYgZGVjb2RlciwgQmxvYlBhcnQmIGJsb2JQYXJ0KQoreworICAgIHVpbnQzMl90IHR5cGU7
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBCbG9iUGFydDo6RGF0YTogeworICAgICAg
ICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYmxvYlBhcnQgPSBCbG9iUGFydChz
dGQ6Om1vdmUoZGF0YSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBCbG9iUGFy
dDo6QmxvYjogeworICAgICAgICBTdHJpbmcgdXJsOworICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHVybCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJsb2JQYXJ0ID0g
QmxvYlBhcnQoVVJMKFVSTCgpLCB1cmwpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSVBDCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5oCShyZXZpc2lvbiAxNjgzMTcpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDYgKzMxLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsK
IGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworY2xhc3MgQmxvYlBhcnQ7CiBjbGFzcyBD
ZXJ0aWZpY2F0ZUluZm87CiBjbGFzcyBDb2xvcjsKIGNsYXNzIENyZWRlbnRpYWw7CkBAIC00MjQs
NiArNDI1LDExIEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZToKICAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6U2Vzc2lvbklE
Jik7CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkJsb2JQ
YXJ0PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdl
YkNvcmU6OkJsb2JQYXJ0Jik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciYsIFdlYkNvcmU6OkJsb2JQYXJ0Jik7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBJUEMKIAogI2Vu
ZGlmIC8vIFdlYkNvcmVBcmd1bWVudENvZGVyc19oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvRmlsZUFQSS9CbG9iUmVnaXN0cmF0aW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvU2hhcmVkL0ZpbGVBUEkvQmxvYlJlZ2lzdHJhdGlvbkRhdGEuY3BwCShyZXZpc2lv
biAxNjgzMTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRmlsZUFQSS9CbG9iUmVnaXN0cmF0
aW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTc1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQmxvYlJlZ2lzdHJhdGlvbkRhdGEuaCIK
LQotI2lmIEVOQUJMRShCTE9CKSAmJiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotCi0jaW5jbHVk
ZSAiQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9CbG9iRGF0YS5o
PgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUJs
b2JSZWdpc3RyYXRpb25EYXRhOjpCbG9iUmVnaXN0cmF0aW9uRGF0YSgpCi17Ci19Ci0KLUJsb2JS
ZWdpc3RyYXRpb25EYXRhOjpCbG9iUmVnaXN0cmF0aW9uRGF0YShzdGQ6OnVuaXF1ZV9wdHI8Qmxv
YkRhdGE+IGRhdGEpCi0gICAgOiBtX2RhdGEoc3RkOjptb3ZlKGRhdGEpKQotewotICAgIGNvbnN0
IEJsb2JEYXRhSXRlbUxpc3QmIGl0ZW1zID0gbV9kYXRhLT5pdGVtcygpOwotICAgIHNpemVfdCBm
aWxlQ291bnQgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9IGl0ZW1zLnNpemUo
KTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgLy8gRmlsZSBwYXRoIGNhbiBiZSBlbXB0eSB3
aGVuIHN1Ym1pdHRpbmcgYSBmb3JtIGZpbGUgaW5wdXQgd2l0aG91dCBhIGZpbGUsIHNlZSBidWcg
MTExNzc4LgotICAgICAgICBpZiAoaXRlbXNbaV0udHlwZSA9PSBCbG9iRGF0YUl0ZW06OkZpbGUg
JiYgIWl0ZW1zW2ldLnBhdGguaXNFbXB0eSgpKQotICAgICAgICAgICAgKytmaWxlQ291bnQ7Ci0g
ICAgfQotCi0gICAgbV9zYW5kYm94RXh0ZW5zaW9ucy5hbGxvY2F0ZShmaWxlQ291bnQpOwotICAg
IHNpemVfdCBleHRlbnNpb25JbmRleCA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDAsIGNvdW50
ID0gaXRlbXMuc2l6ZSgpOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBjb25zdCBCbG9iRGF0
YUl0ZW0mIGl0ZW0gPSBpdGVtc1tpXTsKLSAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSBCbG9iRGF0
YUl0ZW06OkZpbGUgJiYgIWl0ZW1zW2ldLnBhdGguaXNFbXB0eSgpKQotICAgICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGl0ZW0ucGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6
UmVhZE9ubHksIG1fc2FuZGJveEV4dGVuc2lvbnNbZXh0ZW5zaW9uSW5kZXgrK10pOwotICAgIH0K
LX0KLQotQmxvYlJlZ2lzdHJhdGlvbkRhdGE6On5CbG9iUmVnaXN0cmF0aW9uRGF0YSgpCi17Ci19
Ci0KLXN0ZDo6dW5pcXVlX3B0cjxCbG9iRGF0YT4gQmxvYlJlZ2lzdHJhdGlvbkRhdGE6OnJlbGVh
c2VEYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RkOjptb3ZlKG1fZGF0YSk7Ci19Ci0KLXZv
aWQgQmxvYlJlZ2lzdHJhdGlvbkRhdGE6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5j
b2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fZGF0YS0+Y29udGVudFR5cGUoKTsKLQot
ICAgIGNvbnN0IEJsb2JEYXRhSXRlbUxpc3QmIGl0ZW1zID0gbV9kYXRhLT5pdGVtcygpOwotICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGl0ZW1zLnNpemUoKSk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDAsIGNvdW50ID0gaXRlbXMuc2l6ZSgpOyBpIDwgY291bnQ7ICsraSkgewot
ICAgICAgICBjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gPSBpdGVtc1tpXTsKLSAgICAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaXRlbS50eXBlKTsKLSAgICAgICAgc3dpdGNo
IChpdGVtLnR5cGUpIHsKLSAgICAgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkRhdGE6Ci0gICAgICAg
ICAgICAvLyBUaGVyZSBpcyBubyB3YXkgdG8gY3JlYXRlIGEgcGFydGlhbCBkYXRhIGl0ZW0uCi0g
ICAgICAgICAgICBBU1NFUlQoIWl0ZW0ub2Zmc2V0KTsKLSAgICAgICAgICAgIEFTU0VSVChpdGVt
Lmxlbmd0aCA9PSBCbG9iRGF0YUl0ZW06OnRvRW5kT2ZGaWxlKTsKLSAgICAgICAgICAgIGVuY29k
ZXIgPDwgSVBDOjpEYXRhUmVmZXJlbmNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KGl0ZW0uZGF0YS0+ZGF0YSgpKSwgaXRlbS5kYXRhLT5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkZpbGU6Ci0gICAgICAgICAgICBlbmNv
ZGVyIDw8IHN0YXRpY19jYXN0PGludDY0X3Q+KGl0ZW0ub2Zmc2V0KTsKLSAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oaXRlbS5sZW5ndGgpOwotICAgICAgICAgICAg
ZW5jb2RlciA8PCBpdGVtLmV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZTsKLSAgICAgICAgICAgIGVu
Y29kZXIgPDwgaXRlbS5wYXRoOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxv
YkRhdGFJdGVtOjpCbG9iOgotICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxpbnQ2
NF90PihpdGVtLm9mZnNldCk7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGlu
dDY0X3Q+KGl0ZW0ubGVuZ3RoKTsKLSAgICAgICAgICAgIGVuY29kZXIgPDwgaXRlbS51cmw7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGVuY29kZXIgPDwgbV9z
YW5kYm94RXh0ZW5zaW9uczsKLX0KLQotYm9vbCBCbG9iUmVnaXN0cmF0aW9uRGF0YTo6ZGVjb2Rl
KElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBCbG9iUmVnaXN0cmF0aW9uRGF0YSYgcmVz
dWx0KQotewotICAgIEFTU0VSVCghcmVzdWx0Lm1fZGF0YSk7Ci0gICAgcmVzdWx0Lm1fZGF0YSA9
IHN0ZDo6bWFrZV91bmlxdWU8QmxvYkRhdGE+KCk7Ci0KLSAgICBTdHJpbmcgY29udGVudFR5cGU7
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb250ZW50VHlwZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXN1bHQubV9kYXRhLT5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZSk7Ci0K
LSAgICB1aW50NjRfdCBpdGVtQ291bnQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpdGVtQ291
bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBp
IDwgaXRlbUNvdW50OyArK2kpIHsKLSAgICAgICAgdWludDMyX3QgdHlwZTsKLSAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZSh0eXBlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpEYXRhOiB7Ci0g
ICAgICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YTsKLSAgICAgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoZGF0YSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgUmVmUHRyPFJhd0RhdGE+IHJhd0RhdGEgPSBSYXdEYXRhOjpjcmVhdGUocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSk7Ci0gICAgICAg
ICAgICByZXN1bHQubV9kYXRhLT5hcHBlbmREYXRhKHJhd0RhdGEucmVsZWFzZSgpLCAwLCBCbG9i
RGF0YUl0ZW06OnRvRW5kT2ZGaWxlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpGaWxlOiB7Ci0gICAgICAgICAgICBpbnQ2NF90IG9m
ZnNldDsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUob2Zmc2V0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpbnQ2NF90IGxlbmd0aDsKLSAgICAg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGVuZ3RoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lOwot
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIFN0cmluZyBwYXRo
OwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXRoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXN1bHQubV9kYXRhLT5hcHBlbmRGaWxlKHBh
dGgsIG9mZnNldCwgbGVuZ3RoLCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkJsb2I6IHsK
LSAgICAgICAgICAgIGludDY0X3Qgb2Zmc2V0OwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShvZmZzZXQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IGludDY0X3QgbGVuZ3RoOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsZW5ndGgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIFN0cmluZyB1cmw7
Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHVybCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmVzdWx0Lm1fZGF0YS0+YXBwZW5kQmxvYihVUkwo
VVJMKCksIHVybCksIG9mZnNldCwgbGVuZ3RoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX3NhbmRib3hFeHRl
bnNpb25zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LX0KLQotI2VuZGlmIC8vIEVOQUJMRShCTE9CKSAmJiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0ZpbGVBUEkvQmxvYlJlZ2lzdHJhdGlvbkRhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRmlsZUFQSS9CbG9iUmVnaXN0
cmF0aW9uRGF0YS5oCShyZXZpc2lvbiAxNjgzMTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
RmlsZUFQSS9CbG9iUmVnaXN0cmF0aW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEJsb2JSZWdpc3RyYXRpb25EYXRhX2gKLSNkZWZp
bmUgQmxvYlJlZ2lzdHJhdGlvbkRhdGFfaAotCi0jaWYgRU5BQkxFKEJMT0IpICYmIEVOQUJMRShO
RVRXT1JLX1BST0NFU1MpCi0KLSNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIEJsb2JEYXRhOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgQmxvYlJlZ2lzdHJhdGlvbkRhdGEgewotV1RGX01BS0VfTk9OQ09QWUFCTEUoQmxv
YlJlZ2lzdHJhdGlvbkRhdGEpOwotcHVibGljOgotICAgIEJsb2JSZWdpc3RyYXRpb25EYXRhKCk7
Ci0gICAgQmxvYlJlZ2lzdHJhdGlvbkRhdGEoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkJsb2JE
YXRhPik7Ci0gICAgfkJsb2JSZWdpc3RyYXRpb25EYXRhKCk7Ci0KLSAgICB2b2lkIGVuY29kZShJ
UEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6
OkFyZ3VtZW50RGVjb2RlciYsIEJsb2JSZWdpc3RyYXRpb25EYXRhJik7Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6QmxvYkRhdGE+IHJlbGVhc2VEYXRhKCkgY29uc3Q7Ci0gICAgY29u
c3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmIHNhbmRib3hFeHRlbnNpb25zKCkgY29u
c3QgeyByZXR1cm4gbV9zYW5kYm94RXh0ZW5zaW9uczsgfQotCi1wcml2YXRlOgotICAgIG11dGFi
bGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkJsb2JEYXRhPiBtX2RhdGE7Ci0gICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgbV9zYW5kYm94RXh0ZW5zaW9uczsKLX07Ci0KLX0KLQot
I2VuZGlmIC8vIEVOQUJMRShCTE9CKSAmJiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotCi0jZW5k
aWYgLy8gQmxvYlJlZ2lzdHJhdGlvbkRhdGFfaApJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTY4MzE3KQorKysg
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTI4LDggKzE1MjgsNiBAQAogCQlFMTUyNTUxQjE3MDExODE5MDAzRDdBREIg
LyogTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTI1NTE5MTcwMTE4MTkwMDNEN0FEQiAvKiBOZXR3
b3JrUmVzb3VyY2VMb2FkZXJNZXNzYWdlcy5oICovOyB9OwogCQlFMTcwODc2QjE2RDZDQTY5MDBG
OTkyMjYgLyogQmxvYlJlZ2lzdHJ5UHJveHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTE3MDg3NjkxNkQ2Q0E2OTAwRjk5MjI2IC8qIEJsb2JSZWdp
c3RyeVByb3h5LmNwcCAqLzsgfTsKIAkJRTE3MDg3NkMxNkQ2Q0E2OTAwRjk5MjI2IC8qIEJsb2JS
ZWdpc3RyeVByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTcwODc2QTE2RDZDQTY5MDBGOTkyMjYgLyogQmxvYlJlZ2lzdHJ5UHJveHkuaCAqLzsg
fTsKLQkJRTE3MDg3NzAxNkQ2Q0ZFNTAwRjk5MjI2IC8qIEJsb2JSZWdpc3RyYXRpb25EYXRhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNzA4NzZF
MTZENkNGRTQwMEY5OTIyNiAvKiBCbG9iUmVnaXN0cmF0aW9uRGF0YS5jcHAgKi87IH07Ci0JCUUx
NzA4NzcxMTZENkNGRTUwMEY5OTIyNiAvKiBCbG9iUmVnaXN0cmF0aW9uRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE3MDg3NkYxNkQ2Q0ZFNTAw
Rjk5MjI2IC8qIEJsb2JSZWdpc3RyYXRpb25EYXRhLmggKi87IH07CiAJCUUxNzkwODhEMTY5QkFB
NjIwMDY5MDRDNyAvKiBTZWNJdGVtU2hpbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMThFNjk0NzE2OUI3N0M4MDA5QjY2NzAgLyogU2VjSXRlbVNo
aW0uY3BwICovOyB9OwogCQlFMTc5MDg4RjE2OUJBQTZBMDA2OTA0QzcgLyogU2VjSXRlbVNoaW0u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOEU2OTQ4
MTY5Qjc3QzgwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbS5oICovOyB9OwogCQlFMTc5MDg5MDE2OUJB
QTdGMDA2OTA0QzcgLyogU2VjSXRlbVNoaW1NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4RTY5MTExNjlCNjY3QjAwOUI2
NjcwIC8qIFNlY0l0ZW1TaGltTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKQEAgLTM0NDAsNyAr
MzQzOCw3IEBACiAJCURGNThDNjMxMTM3MUFDNTgwMEY5QTM3QyAvKiBOYXRpdmVXZWJXaGVlbEV2
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2ZVdlYldoZWVsRXZl
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREY1OEM2MzUxMzcxQUNBMDAwRjlB
MzdDIC8qIE5hdGl2ZVdlYldoZWVsRXZlbnRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBOYXRpdmVXZWJXaGVlbEV2ZW50TWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMTA1RkU1MzE4RDdCOURFMDA4RjU3QTggLyogRWRpdGluZ1Jhbmdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRpbmdSYW5nZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTE1QzcxNTE5MEY4QTI1MDBFQ0M1MTYgLyogY29t
LmFwcGxlLldlYktpdC5EYXRhYmFzZXMuc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBwYXRoID0gY29tLmFw
cGxlLldlYktpdC5EYXRhYmFzZXMuc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUx
MTVDNzE1MTkwRjhBMjUwMEVDQzUxNiAvKiBjb20uYXBwbGUuV2ViS2l0LkRhdGFiYXNlcy5zYiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBjb20uYXBwbGUuV2ViS2l0LkRhdGFiYXNlcy5zYjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEzM0ZEODkxNDIzREQ3RjAwRkM3QkZCIC8qIFdl
YktpdC5pY25zICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gaW1hZ2UuaWNuczsgbmFtZSA9IFdlYktpdC5pY25zOyBwYXRoID0gUmVzb3VyY2VzL1dlYktp
dC5pY25zOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTM4MzNFQjE4OUMzM0M4MDAx
RTIzNTAgLyogTG9jYWxTdG9yYWdlRGV0YWlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMb2NhbFN0b3JhZ2VEZXRhaWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxNEE5NTQ3MTZFMDE2QTQwMDY4REU4MiAvKiBOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3Ry
YXRlZ2llcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3Jr
UHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0zNDUyLDggKzM0NTAsNiBAQAogCQlFMTUyNTUxOTE3MDExODE5MDAzRDdBREIgLyog
TmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTE3MDg3NjkxNkQ2Q0E2OTAwRjk5MjI2IC8qIEJsb2JSZWdpc3RyeVBy
b3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEJsb2JSZWdpc3Ry
eVByb3h5LmNwcDsgcGF0aCA9IFdlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNzA4NzZBMTZENkNBNjkwMEY5OTIy
NiAvKiBCbG9iUmVnaXN0cnlQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCbG9iUmVnaXN0cnlQcm94eS5oOyBwYXRoID0gV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdp
c3RyeVByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxNzA4NzZFMTZENkNG
RTQwMEY5OTIyNiAvKiBCbG9iUmVnaXN0cmF0aW9uRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCbG9iUmVnaXN0cmF0aW9uRGF0YS5jcHA7IHBhdGggPSBGaWxl
QVBJL0Jsb2JSZWdpc3RyYXRpb25EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRTE3MDg3NkYxNkQ2Q0ZFNTAwRjk5MjI2IC8qIEJsb2JSZWdpc3RyYXRpb25EYXRhLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJsb2JSZWdpc3RyYXRpb25EYXRhLmg7IHBh
dGggPSBGaWxlQVBJL0Jsb2JSZWdpc3RyYXRpb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUxNzk4Qzc3MTZFNjgxODgwMDI0MDEzOSAvKiBOZXR3b3JrQmxvYlJlZ2lzdHJ5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtCbG9iUmVn
aXN0cnkuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lz
dHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE3OThDNzgxNkU2ODE4ODAw
MjQwMTM5IC8qIE5ldHdvcmtCbG9iUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTmV0d29ya0Jsb2JSZWdpc3RyeS5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvRmls
ZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxNzlGRDlCMTM0RDM4MDYwMDE1Qjg4MyAvKiBBcmd1bWVudENvZGVyc01hYy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcmd1bWVudENvZGVyc01hYy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNjU3Nyw4ICs2NTczLDYgQEAKIAkJRTE3MDg3NzIxNkQ2Q0ZF
QzAwRjk5MjI2IC8qIEZpbGVBUEkgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAotCQkJCUUxNzA4NzZFMTZENkNGRTQwMEY5OTIyNiAvKiBCbG9iUmVnaXN0cmF0aW9u
RGF0YS5jcHAgKi8sCi0JCQkJRTE3MDg3NkYxNkQ2Q0ZFNTAwRjk5MjI2IC8qIEJsb2JSZWdpc3Ry
YXRpb25EYXRhLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IEZpbGVBUEk7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwpAQCAtNjY3MCw3ICs2NjY0LDYgQEAKIAkJCQk1MTJGNTg5OTEyQTg4Mzg4
MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MThFOEVGOTE2QjIwOTFDMDBFOTE0MjkgLyogQXV0aGVudGljYXRpb25NYW5hZ2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJGNThBMzEyQTg4M0FEMDA2Mjk1MzAgLyogQXV0aGVu
dGljYXRpb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUUxNzA4NzcxMTZE
NkNGRTUwMEY5OTIyNiAvKiBCbG9iUmVnaXN0cmF0aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTE3MDg3NkMxNkQ2Q0E2OTAwRjk5MjI2IC8qIEJsb2JSZWdpc3RyeVByb3h5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0RjYwMTQzMjE1NUM1QUEyMDAxRkJERTAgLyogQmxvY2tpbmdSZXNwb25z
ZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFMzUxQ0IxODBGMkNDQzAwRTUzQkU5IC8qIElE
QlV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MTU0LDcgKzgxNDcsNiBAQAogCQkJCTUx
OEU4RUY4MTZCMjA5MUMwMEU5MTQyOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTE4RThFRkIxNkIyMDkxQzAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0aW9u
TWFuYWdlci5tYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTJGNThBMjEyQTg4M0FEMDA2Mjk1
MzAgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUUxNzA4NzcwMTZENkNGRTUwMEY5OTIyNiAvKiBCbG9iUmVnaXN0cmF0aW9uRGF0
YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTcwODc2QjE2RDZDQTY5MDBGOTkyMjYgLyogQmxv
YlJlZ2lzdHJ5UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNGMTg2MzgxNjdEMDcxRTAw
QTFBODVBIC8qIENhY2hlTW9kZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBMkU1MUUxMkU0
QzA1RTAwQkM0OTY2IC8qIENHVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5
UHJveHkuY3BwCShyZXZpc2lvbiAxNjgzMTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwyMyAr
MjgsMzQgQEAKIAogI2lmIEVOQUJMRShCTE9CKSAmJiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQog
Ci0jaW5jbHVkZSAiQmxvYlJlZ2lzdHJhdGlvbkRhdGEuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQmxvYkRhdGEuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi11bnNpZ25lZCBsb25n
IGxvbmcgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwg
c3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPiBibG9iRGF0YSkKK3ZvaWQgQmxvYlJlZ2lzdHJ5UHJv
eHk6OnJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKK3sKKyAgICBBU1NFUlQoV2Vi
UHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOworCisgICAgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlIGV4dGVuc2lvbkhhbmRsZTsKKworICAgIC8vIEZpbGUgcGF0aCBjYW4g
YmUgZW1wdHkgd2hlbiBzdWJtaXR0aW5nIGEgZm9ybSBmaWxlIGlucHV0IHdpdGhvdXQgYSBmaWxl
LCBzZWUgYnVnIDExMTc3OC4KKyAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQorICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6UmVhZE9u
bHksIGV4dGVuc2lvbkhhbmRsZSk7CisKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3Jr
Q29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpSZWdpc3RlckZpbGVCbG9iVVJMKHVybCwgcGF0aCwgZXh0ZW5zaW9u
SGFuZGxlLCBjb250ZW50VHlwZSksIDApOworfQorCit1bnNpZ25lZCBsb25nIGxvbmcgQmxvYlJl
Z2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwgVmVjdG9yPEJsb2JQ
YXJ0PiBibG9iUGFydHMsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCiB7CiAgICAgQVNTRVJU
KFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKIAogICAgIHVpbnQ2
NF90IHJlc3VsdFNpemU7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29u
bmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6UmVnaXN0ZXJCbG9iVVJMKHVybCwgQmxvYlJlZ2lzdHJhdGlvbkRh
dGEoc3RkOjptb3ZlKGJsb2JEYXRhKSkpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OlJlZ2lzdGVyQmxvYlVSTDo6UmVwbHkocmVzdWx0U2l6ZSksIDApKQorICAgIGlm
ICghV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lz
dGVyQmxvYlVSTCh1cmwsIGJsb2JQYXJ0cywgY29udGVudFR5cGUpLCBNZXNzYWdlczo6TmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lzdGVyQmxvYlVSTDo6UmVwbHkocmVzdWx0U2l6
ZSksIDApKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gcmVzdWx0U2l6ZTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVn
aXN0cnlQcm94eS5oCShyZXZpc2lvbiAxNjgzMTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSAr
MzIsMTAgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIEJsb2JSZWdpc3RyeVByb3h5
IDogcHVibGljIFdlYkNvcmU6OkJsb2JSZWdpc3RyeSB7CitjbGFzcyBCbG9iUmVnaXN0cnlQcm94
eSBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpCbG9iUmVnaXN0cnkgewogcHVibGljOgotICAgIHZp
cnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJDb3JlOjpV
UkwmLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6QmxvYkRhdGE+KSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJDb3Jl
OjpVUkwmLCBWZWN0b3I8V2ViQ29yZTo6QmxvYlBhcnQ+LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRU
eXBlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdl
YkNvcmU6OlVSTCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYgc3JjVVJMKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgcmVnaXN0ZXJCbG9iVVJMRm9yU2xp
Y2UoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV2ViQ29yZTo6VVJMJiBzcmNVUkwsIGxvbmcg
bG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCkgb3ZlcnJpZGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230860</attachid>
            <date>2014-05-05 15:30:50 -0700</date>
            <delta_ts>2014-05-05 15:40:22 -0700</delta_ts>
            <desc>with a debug assertion fix</desc>
            <filename>BlobParts.txt</filename>
            <type>text/plain</type>
            <size>73881</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODMxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDE0LTA1LTA1ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgQmxvYkRh
dGEgb24gY2xpZW50IHNpZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMjU4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEJsb2IgcmVnaXN0cmF0aW9uIG5vdyB1c2VzIGVpdGhlciBhIHNpbmdsZSBmaWxl
IHBhdGgsIG9yIGEgdmVjdG9yIG9mIG11Y2ggc2ltcGxlcgorICAgICAgICBCbG9iUGFydCBvYmpl
Y3RzLCBub3QgYW4gYXJyYXkgd2l0aCBhcmJpdHJhcmlseSBzbGljZWQgYmxvYnMgb3IgZmlsZXMs
IHdoaWNoIGNhbid0IGhhcHBlbi4KKworICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJT
b2NrZXQuY3BwOihXZWJDb3JlOjpXZWJTb2NrZXQ6OmRpZFJlY2VpdmVCaW5hcnlEYXRhKToKKyAg
ICAgICAgVXNlIGEgbmV3IHNpbXBsZXIgQmxvYiBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgQmxvYlBhcnQsIHJlbW92ZWQg
QmxvYlJlZ2lzdHJhdGlvbkRhdGEuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Jsb2JDdXN0
b20uY3BwOiAoV2ViQ29yZTo6SlNCbG9iQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTQmxvYik6Cisg
ICAgICAgIFVzZSBWZWN0b3I8QmxvYlBhcnQ+IGluc3RlYWQgb2YgQmxvYkRhdGEgKDEgbGluZSBv
ZiBjb2RlIGluc3RlYWQgb2YgNSkuCisKKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDog
KFdlYkNvcmU6OkRhdGFUcmFuc2Zlcjo6aGFzRmlsZU9mVHlwZSk6IFVwZGF0ZWQgZm9yCisgICAg
ICAgIEZpbGU6OmNvbnRlbnRUeXBlRnJvbUZpbGVQYXRoT3JOYW1lIHJlbmFtZS4KKworICAgICAg
ICAqIGZpbGVhcGkvQmxvYi5jcHA6IChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAgKiBm
aWxlYXBpL0Jsb2IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpCbG9iOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgICogZmlsZWFwaS9GaWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OkZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZTo6Y29udGVudFR5cGVGcm9tRmlsZVBhdGhPck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQmxvYkRhdGFGb3JGaWxlV2l0aFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlQmxvYkRhdGFGb3JGaWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUJsb2JEYXRhRm9yRmlsZVdpdGhOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bGU6OmNvbnRlbnRUeXBlRnJvbUZpbGVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKiBmaWxlYXBp
L0ZpbGUuaDogKFdlYkNvcmU6OkZpbGU6OmRlc2VyaWFsaXplKTogRGVsZXRlZC4KKyAgICAgICAg
QWRkZWQgYW5kIHVwZGF0ZWQgY29uc3RydWN0b3JzIHRvIG5vdCB1c2UgQmxvYkRhdGEuIENoYW5n
ZWQgc3BlY2lhbCBjYXNlIGNvbnN0cnVjdG9ycworICAgICAgICB0byB1c2UgbmFtZSB0YWdzIGlu
c3RlYWQgb2Ygbm9uLWVuZm9yY2VkIGNvbW1lbnRzLgorCisgICAgICAgICogZmlsZWFwaS9UaHJl
YWRhYmxlQmxvYlJlZ2lzdHJ5Lmg6CisgICAgICAgICogZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJl
Z2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUNvbnRleHQ6OkJsb2JS
ZWdpc3RyeUNvbnRleHQpOiBVcGRhdGVkIHdpdGggbmV3IGRhdGEgbWVtYmVycworICAgICAgICB0
aGF0IHdlcmUgc3BsaXQgb3V0IG9mIEJsb2JEYXRhLgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFk
YWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJGaWxlQmxvYlVSTCk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6VGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKTogVXBkYXRl
ZCB0byBwYXNzIENvbnRlbnQtVHlwZQorICAgICAgICBleHBsaWNpdGx5LCBhcyBpdCdzIG5vIGxv
bmdlciBoaWRkZW4gaW4gQmxvYkRhdGEuCisKKyAgICAgICAgKiBmaWxlYXBpL1dlYktpdEJsb2JC
dWlsZGVyLmg6CisgICAgICAgICogZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJs
b2JCdWlsZGVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6YXBw
ZW5kQnl0ZXNEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgVXBkYXRlZCB0byB1c2UgQmxvYlBhcnQu
IFRoZXJlIGlzIG5vIGxvbmdlciBhbnkgbmVlZCB0byBzcGVjaWFsIGNhc2UgRmlsZXMsCisgICAg
ICAgIHRoZSByZWdpc3RyeSB0YWtlcyBjYXJlIG9mIHRoYXQuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL0Jsb2JEYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iRGF0YUl0ZW06OmRldGFjaEZyb21DdXJyZW50
VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJsb2JEYXRhOjpkZXRhY2hGcm9t
Q3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIEJsb2JEYXRhIHdpbGwgb25seSBiZSB1
c2VkIG9uIG1haW4gdGhyZWFkIGJ5IHRoZSByZWdpc3RyeS4KKworICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvQmxvYlBhcnQuaDogQWRkZWQuIEEgbmV3IGNsYXNzIHRvIGVuY2Fwc3VsYXRlIGEg
bGlzdCBvZiBibG9icworICAgICAgICB0aGF0IGFyZSBjb21iaW5lZCBpbnRvIGEgbmV3IGJsb2Is
IGFzIGV4cG9zZWQgdG8gSlMgdmlhIEJsb2IgY29uc3RydWN0b3IuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
QmxvYlJlZ2lzdHJ5SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBs
OjpyZWdpc3RlckZpbGVCbG9iVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUlt
cGw6OnJlZ2lzdGVyQmxvYlVSTCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVn
aXN0cnlJbXBsLmg6CisgICAgICAgIFVwZGF0ZWQgZm9yIHRoZSBuZXcgcmVnaXN0cmF0aW9uIG1l
dGhvZHMuIFdlIG5vIGxvbmdlciBoYXZlIGFyYml0cmFyeSBCbG9iRGF0YXMKKyAgICAgICAgY29t
aW5nIGluLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6IERvbid0
IGluY2x1ZGUgQmxvYkRhdGEgZm9yIG5vdyAoYnV0IHJlYWxseSwKKyAgICAgICAgQmxvYlN0b3Jh
Z2VEYXRhIGlzIHRoZSBzYW1lIHRoaW5nLCBhbmQgdGhleSB3aWxsIGJlIG1lcmdlZCBzb29uKS4K
KyAgICAgICAgVW5mb3J0dW5hdGVseSwgRm9ybURhdGEgaXMgdXNlZCBieSBib3RoIGNsaWVudCBh
bmQgcmVnaXN0cnkgc2lkZSwgYW5kIHRoZXJlIGlzCisgICAgICAgIG5vIGNsZWFyIGRlbGltaXRh
dGlvbiBhdCB0aGUgdGltZS4KKyAKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOiAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlQmxvYik6IFVzZSB0aGUgbmV3IHNpbXBs
ZXIKKyAgICAgICAgd2F5IHRvIGNyZWF0ZSBhIEJsb2IuCisKIDIwMTQtMDUtMDUgIEJlbmphbWlu
IFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFtpT1NdW1dLMl0gU3Bl
Y2lhbCBjYXNlIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3I6OmNvbGxlY3RHZW9tZXRyeUZv
clNtYXJ0TWFnbmlmaWNhdGlvbkdlc3R1cmUoKSBmb3IgaW1hZ2UgZG9jdW1lbnRzCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAkocmV2
aXNpb24gMTY4MzE3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJXZWJT
b2NrZXQuaCIKIAogI2luY2x1ZGUgIkJsb2IuaCIKLSNpbmNsdWRlICJCbG9iRGF0YS5oIgogI2lu
Y2x1ZGUgIkNsb3NlRXZlbnQuaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIK
ICNpbmNsdWRlICJET01XaW5kb3cuaCIKQEAgLTUyMCw5ICs1MTksNyBAQCB2b2lkIFdlYlNvY2tl
dDo6ZGlkUmVjZWl2ZUJpbmFyeURhdGEoUGFzCiAgICAgc3dpdGNoIChtX2JpbmFyeVR5cGUpIHsK
ICAgICBjYXNlIEJpbmFyeVR5cGVCbG9iOiB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBqdXN0IHJl
Y2VpdmVkIHRoZSBkYXRhIGZyb20gTmV0d29ya1Byb2Nlc3MsIGFuZCBhcmUgc2VuZGluZyBpdCBi
YWNrLiBUaGlzIGlzIGluZWZmaWNpZW50LgotICAgICAgICBhdXRvIGJsb2JEYXRhID0gc3RkOjpt
YWtlX3VuaXF1ZTxCbG9iRGF0YT4oKTsKLSAgICAgICAgYmxvYkRhdGEtPmFwcGVuZERhdGEoUmF3
RGF0YTo6Y3JlYXRlKHN0ZDo6bW92ZSgqYmluYXJ5RGF0YSkpLCAwLCBCbG9iRGF0YUl0ZW06OnRv
RW5kT2ZGaWxlKTsKLSAgICAgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVhdGUoc3Rk
Ojptb3ZlKGJsb2JEYXRhKSk7CisgICAgICAgIFJlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3Jl
YXRlKHN0ZDo6bW92ZSgqYmluYXJ5RGF0YSksIGVtcHR5U3RyaW5nKCkpOwogICAgICAgICBkaXNw
YXRjaEV2ZW50KE1lc3NhZ2VFdmVudDo6Y3JlYXRlKGJsb2IucmVsZWFzZSgpLCBTZWN1cml0eU9y
aWdpbjo6Y3JlYXRlKG1fdXJsKS0+dG9TdHJpbmcoKSkpOwogICAgICAgICBicmVhazsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxNjgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU5NjQsNiArNTk2NCw3IEBA
CiAJCUUxQzY1NzI1MTgxNkU2OUQwMDI1NkNERCAvKiBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUM2NTcy
NDE4MTZFNjlEMDAyNTZDREQgLyogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllci5oICovOyB9Owog
CQlFMUM2NTcyNzE4MTZGOUZFMDAyNTZDREQgLyogQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDNjU3MjYx
ODE2RjlGRTAwMjU2Q0REIC8qIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMuaCAqLzsgfTsKIAkJ
RTFDOEJFNUQwRThCRDE1QTAwNjRDQjdEIC8qIEpTV29ya2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzhCRTVDMEU4QkQxNUEwMDY0Q0I3RCAv
KiBKU1dvcmtlci5jcHAgKi87IH07CisJCUUxQzk0QUY5MTkxMzAzRjAwMEQ1QTg5MyAvKiBCbG9i
UGFydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFD
OTRBRjcxOTEzMDNGMDAwRDVBODkzIC8qIEJsb2JQYXJ0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTFDQTVDQkMwRThDRENBRjAwRThFRjkwIC8q
IEpTV29ya2VyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxQ0E1Q0JCMEU4Q0RDQUYwMEU4RUY5MCAvKiBKU1dvcmtlckN1c3RvbS5jcHAg
Ki87IH07CiAJCUUxQ0FBNUM2MEU4QkQyMzYwMEE3M0VDQSAvKiBKU1dvcmtlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDQUE1QzUwRThCRDIzNjAw
QTczRUNBIC8qIEpTV29ya2VyLmggKi87IH07CiAJCUUxQ0RFOTIwMTUwMThFRDAwMDg2MkNDNSAv
KiBBc3luY0ZpbGVTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTFDREU5MUYxNTAxOEVEMDAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5j
cHAgKi87IH07CkBAIC0xMzM3MCw2ICsxMzM3MSw3IEBACiAJCUUxQzY1NzI2MTgxNkY5RkUwMDI1
NkNERCAvKiBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTFDNkNGQzIxNzQ2RDI5MzAwN0I4N0ExIC8qIERPTVdpbmRvd0NvbnN0
cnVjdG9ycy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gRE9NV2luZG93Q29uc3RydWN0b3JzLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTFDOEJFNUMwRThCRDE1QTAwNjRDQjdEIC8qIEpTV29ya2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV29ya2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFDOTRBRjcxOTEzMDNGMDAwRDVBODkzIC8qIEJs
b2JQYXJ0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JQYXJ0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQ0E1Q0JCMEU4Q0RDQUYwMEU4RUY5MCAvKiBK
U1dvcmtlckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1dvcmtlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQ0FBNUM1
MEU4QkQyMzYwMEE3M0VDQSAvKiBKU1dvcmtlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1dvcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUNERTkx
RjE1MDE4RUQwMDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFzeW5jRmlsZVN0cmVhbS5jcHA7IHBhdGggPSBmaWxlYXBp
L0FzeW5jRmlsZVN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjA1
NSw2ICsxNjA1Nyw3IEBACiAJCQkJRTEyNDc0ODMxMEFBMTYxRDAwQjc5NDkzIC8qIEF1dGhlbnRp
Y2F0aW9uQ2xpZW50LmggKi8sCiAJCQkJMkVERUYxRUQxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JE
YXRhLmNwcCAqLywKIAkJCQkyRURFRjFFRTEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYkRhdGEuaCAq
LywKKwkJCQlFMUM5NEFGNzE5MTMwM0YwMDBENUE4OTMgLyogQmxvYlBhcnQuaCAqLywKIAkJCQlF
MTRBOTRENjE2REZERjk1MDA2OERFODIgLyogQmxvYlJlZ2lzdHJ5LmNwcCAqLywKIAkJCQkyRURF
RjFFRjEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5LmggKi8sCiAJCQkJMkVERUYxRjAx
MjFCMEVGQzAwNzI2REIyIC8qIEJsb2JSZWdpc3RyeUltcGwuY3BwICovLApAQCAtMjU0MjIsNiAr
MjU0MjUsNyBAQAogCQkJCUU0Mjk1RkE0MTJCMDYxNEUwMEQxQUNFMCAvKiBSZXNvdXJjZUxvYWRQ
cmlvcml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDBDRTU4RjkxMjVFNENDMjAwRjNGMTk5IC8q
IFJlc291cmNlTG9hZFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEE4MUJGODUxMURD
RkQ5MDAwREEyQjk4IC8qIFJlc291cmNlTG9hZFRpbWluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RTFDOTRBRjkxOTEzMDNGMDAwRDVBODkzIC8qIEJsb2JQYXJ0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3RUU2ODQ2RDEyRDI2RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VSZXF1ZXN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTRDNzY3RDBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0QmFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VFNjg0NkYxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291
cmNlUmVxdWVzdENGTmV0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNpb24gMTY4MzE3KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM0LDEyICsxMzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTQmxvYkNvbnN0
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBCbG9iRGF0YUl0ZW1MaXN0IGl0ZW1zID0gYmxvYkJ1
aWxkZXIuZmluYWxpemUoKTsKLSAgICBhdXRvIGJsb2JEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxC
bG9iRGF0YT4oKTsKLSAgICBibG9iRGF0YS0+c2V0Q29udGVudFR5cGUoQmxvYjo6bm9ybWFsaXpl
ZENvbnRlbnRUeXBlKHR5cGUpKTsKLSAgICBibG9iRGF0YS0+c3dhcEl0ZW1zKGl0ZW1zKTsKLQot
ICAgIFJlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKHN0ZDo6bW92ZShibG9iRGF0YSkp
OworICAgIFJlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKGJsb2JCdWlsZGVyLmZpbmFs
aXplKCksIEJsb2I6Om5vcm1hbGl6ZWRDb250ZW50VHlwZSh0eXBlKSk7CiAKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKENSRUFURV9ET01fV1JBUFBFUihqc0NvbnN0cnVjdG9yLT5nbG9iYWxP
YmplY3QoKSwgQmxvYiwgYmxvYi5nZXQoKSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0RhdGFUcmFuc2Zlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RhdGFU
cmFuc2Zlci5jcHAJKHJldmlzaW9uIDE2ODMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRh
VHJhbnNmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNyArMTg5LDcgQEAgYm9vbCBEYXRh
VHJhbnNmZXI6Omhhc0ZpbGVPZlR5cGUoY29uc3QgUwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGNhblJlYWRUeXBlcygpKTsKIAogICAgIGZvciAoY29uc3QgU3RyaW5nJiBm
aWxlbmFtZSA6IG1fcGFzdGVib2FyZC0+cmVhZEZpbGVuYW1lcygpKSB7Ci0gICAgICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShGaWxlOjpjb250ZW50VHlwZUZyb21GaWxlUGF0aChmaWxlbmFtZSwg
RmlsZTo6QWxsQ29udGVudFR5cGVzKSwgdHlwZSkpCisgICAgICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShGaWxlOjpjb250ZW50VHlwZUZyb21GaWxlUGF0aE9yTmFtZShmaWxlbmFtZSwgRmlsZTo6
QWxsQ29udGVudFR5cGVzKSwgdHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkocmV2aXNpb24gMTY4MzE3KQorKysgU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMzEgKzY2
LDM3IEBAIFVSTFJlZ2lzdHJ5JiBCbG9iVVJMUmVnaXN0cnk6OnJlZ2lzdHJ5KCkKIH0KIAogCitC
bG9iOjpCbG9iKFVuaW5pdGlhbGl6ZWRDb250cnVjdG9yKQoreworfQorCiBCbG9iOjpCbG9iKCkK
ICAgICA6IG1fc2l6ZSgwKQogewotICAgIGF1dG8gYmxvYkRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVl
PEJsb2JEYXRhPigpOwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IGludGVybmFsIFVSTCBhbmQgcmVn
aXN0ZXIgaXQgd2l0aCB0aGUgcHJvdmlkZWQgYmxvYiBkYXRhLgogICAgIG1faW50ZXJuYWxVUkwg
PSBCbG9iVVJMOjpjcmVhdGVJbnRlcm5hbFVSTCgpOwotICAgIFRocmVhZGFibGVCbG9iUmVnaXN0
cnk6OnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsVVJMLCBzdGQ6Om1vdmUoYmxvYkRhdGEpKTsK
KyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwobV9pbnRlcm5hbFVS
TCwgVmVjdG9yPEJsb2JQYXJ0PigpLCBTdHJpbmcoKSk7CiB9CiAKLUJsb2I6OkJsb2Ioc3RkOjp1
bmlxdWVfcHRyPEJsb2JEYXRhPiBibG9iRGF0YSkKLSAgICA6IG1fdHlwZShibG9iRGF0YS0+Y29u
dGVudFR5cGUoKSkKK0Jsb2I6OkJsb2IoVmVjdG9yPGNoYXI+IGRhdGEsIGNvbnN0IFN0cmluZyYg
Y29udGVudFR5cGUpCisgICAgOiBtX3R5cGUoY29udGVudFR5cGUpCiB7Ci0gICAgQVNTRVJUKGJs
b2JEYXRhKTsKKyAgICBWZWN0b3I8QmxvYlBhcnQ+IGJsb2JQYXJ0czsKKyAgICBibG9iUGFydHMu
YXBwZW5kKEJsb2JQYXJ0KHN0ZDo6bW92ZShkYXRhKSkpOworICAgIG1faW50ZXJuYWxVUkwgPSBC
bG9iVVJMOjpjcmVhdGVJbnRlcm5hbFVSTCgpOworICAgIG1fc2l6ZSA9IFRocmVhZGFibGVCbG9i
UmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsVVJMLCBzdGQ6Om1vdmUoYmxvYlBh
cnRzKSwgY29udGVudFR5cGUpOworfQogCi0gICAgLy8gQ3JlYXRlIGEgbmV3IGludGVybmFsIFVS
TCBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0aGUgcHJvdmlkZWQgYmxvYiBkYXRhLgorQmxvYjo6Qmxv
YihWZWN0b3I8QmxvYlBhcnQ+IGJsb2JQYXJ0cywgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkK
KyAgICA6IG1fdHlwZShjb250ZW50VHlwZSkKK3sKICAgICBtX2ludGVybmFsVVJMID0gQmxvYlVS
TDo6Y3JlYXRlSW50ZXJuYWxVUkwoKTsKLSAgICBtX3NpemUgPSBUaHJlYWRhYmxlQmxvYlJlZ2lz
dHJ5OjpyZWdpc3RlckJsb2JVUkwobV9pbnRlcm5hbFVSTCwgc3RkOjptb3ZlKGJsb2JEYXRhKSk7
CisgICAgbV9zaXplID0gVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKG1f
aW50ZXJuYWxVUkwsIHN0ZDo6bW92ZShibG9iUGFydHMpLCBjb250ZW50VHlwZSk7CiB9CiAKLUJs
b2I6OkJsb2IoY29uc3QgVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSwgbG9uZyBsb25n
IHNpemUpCitCbG9iOjpCbG9iKERlc2VyaWFsaXphdGlvbkNvbnRydWN0b3IsIGNvbnN0IFVSTCYg
c3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKQogICAgIDogbV90eXBl
KEJsb2I6Om5vcm1hbGl6ZWRDb250ZW50VHlwZSh0eXBlKSkKICAgICAsIG1fc2l6ZShzaXplKQog
ewotICAgIC8vIENyZWF0ZSBhIG5ldyBpbnRlcm5hbCBVUkwgYW5kIHJlZ2lzdGVyIGl0IHdpdGgg
dGhlIHNhbWUgYmxvYiBkYXRhIGFzIHRoZSBzb3VyY2UgVVJMLgogICAgIG1faW50ZXJuYWxVUkwg
PSBCbG9iVVJMOjpjcmVhdGVJbnRlcm5hbFVSTCgpOwogICAgIFRocmVhZGFibGVCbG9iUmVnaXN0
cnk6OnJlZ2lzdGVyQmxvYlVSTCgwLCBtX2ludGVybmFsVVJMLCBzcmNVUkwpOwogfQpAQCAtOTks
NyArMTA1LDYgQEAgQmxvYjo6QmxvYihjb25zdCBVUkwmIHNyY1VSTCwgY29uc3QgU3RyaQogQmxv
Yjo6QmxvYihjb25zdCBVUkwmIHNyY1VSTCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgZW5k
LCBjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgOiBtX3R5cGUoQmxvYjo6bm9ybWFsaXplZENvbnRl
bnRUeXBlKHR5cGUpKQogewotICAgIC8vIENyZWF0ZSBhIG5ldyBpbnRlcm5hbCBVUkwgYW5kIHJl
Z2lzdGVyIGl0IHdpdGggdGhlIHNhbWUgYmxvYiBkYXRhIGFzIHRoZSBzb3VyY2UgVVJMLgogICAg
IG1faW50ZXJuYWxVUkwgPSBCbG9iVVJMOjpjcmVhdGVJbnRlcm5hbFVSTCgpOwogICAgIG1fc2l6
ZSA9IFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTEZvclNsaWNlKG1faW50
ZXJuYWxVUkwsIHNyY1VSTCwgc3RhcnQsIGVuZCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0Jsb2IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2Iu
aAkocmV2aXNpb24gMTY4MzE3KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDcgQEAKICNpZm5kZWYgQmxvYl9oCiAjZGVmaW5lIEJs
b2JfaAogCi0jaW5jbHVkZSAiQmxvYkRhdGEuaCIKLSNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRl
ICJCbG9iUGFydC5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgogI2luY2x1ZGUgIlVS
TFJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTUwLDE1ICs0OSwy
MCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYik7CiAgICAgfQog
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxCbG9i
RGF0YT4gYmxvYkRhdGEpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKFZlY3Rv
cjxjaGFyPiBkYXRhLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKHN0ZDo6bW92ZShibG9iRGF0YSkpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKHN0ZDo6bW92ZShkYXRhKSwgY29udGVudFR5cGUpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoVmVjdG9yPEJsb2JQ
YXJ0PiBibG9iUGFydHMsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2Ioc3RkOjptb3ZlKGJsb2JQYXJ0cyksIGNvbnRlbnRU
eXBlKSk7CiAgICAgfQogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gZGVzZXJpYWxpemUo
Y29uc3QgVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSwgbG9uZyBsb25nIHNpemUpCiAg
ICAgewogICAgICAgICBBU1NFUlQoQmxvYjo6aXNOb3JtYWxpemVkQ29udGVudFR5cGUodHlwZSkp
OwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2Ioc3JjVVJMLCB0eXBlLCBzaXplKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihkZXNlcmlhbGl6YXRpb25Db250cnVj
dG9yLCBzcmNVUkwsIHR5cGUsIHNpemUpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5CbG9iKCk7
CkBAIC04OSwxMCArOTMsMTQgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgQmxvYigpOwot
ICAgIEJsb2Ioc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPik7CisgICAgQmxvYihWZWN0b3I8Y2hh
cj4sIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpOworICAgIEJsb2IoVmVjdG9yPEJsb2JQYXJ0
PiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSk7CisKKyAgICBlbnVtIFVuaW5pdGlhbGl6ZWRD
b250cnVjdG9yIHsgdW5pbml0aWFsaXplZENvbnRydWN0b3IgfTsKKyAgICBCbG9iKFVuaW5pdGlh
bGl6ZWRDb250cnVjdG9yKTsKIAotICAgIC8vIEZvciBkZXNlcmlhbGl6YXRpb24uCi0gICAgQmxv
Yihjb25zdCBVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlLCBsb25nIGxvbmcgc2l6ZSk7
CisgICAgZW51bSBEZXNlcmlhbGl6YXRpb25Db250cnVjdG9yIHsgZGVzZXJpYWxpemF0aW9uQ29u
dHJ1Y3RvciB9OworICAgIEJsb2IoRGVzZXJpYWxpemF0aW9uQ29udHJ1Y3RvciwgY29uc3QgVVJM
JiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSwgbG9uZyBsb25nIHNpemUpOwogCiAjaWYgRU5B
QkxFKEJMT0IpCiAgICAgLy8gRm9yIHNsaWNpbmcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5j
cHAJKHJldmlzaW9uIDE2ODMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDU2ICsyNiw0NiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZpbGUuaCIKIAorI2luY2x1ZGUgIkJsb2JVUkwuaCIKICNpbmNsdWRlICJGaWxl
TWV0YWRhdGEuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgorI2luY2x1ZGUgIlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPiBjcmVhdGVCbG9iRGF0YUZvckZpbGVXaXRoVHlwZShj
b25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCi17Ci0gICAgYXV0
byBibG9iRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8QmxvYkRhdGE+KCk7Ci0gICAgQVNTRVJUKEJs
b2I6OmlzTm9ybWFsaXplZENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKSk7Ci0gICAgYmxvYkRhdGEt
PnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKTsKLSAgICBibG9iRGF0YS0+YXBwZW5kRmlsZShw
YXRoKTsKLSAgICByZXR1cm4gYmxvYkRhdGE7Ci19Ci0KLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
QmxvYkRhdGE+IGNyZWF0ZUJsb2JEYXRhRm9yRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGU6
OkNvbnRlbnRUeXBlTG9va3VwUG9saWN5IHBvbGljeSkKLXsKLSAgICByZXR1cm4gY3JlYXRlQmxv
YkRhdGFGb3JGaWxlV2l0aFR5cGUocGF0aCwgRmlsZTo6Y29udGVudFR5cGVGcm9tRmlsZVBhdGgo
cGF0aCwgcG9saWN5KSk7Ci19Ci0KLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QmxvYkRhdGE+IGNy
ZWF0ZUJsb2JEYXRhRm9yRmlsZVdpdGhOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3Ry
aW5nJiBmaWxlU3lzdGVtTmFtZSwgRmlsZTo6Q29udGVudFR5cGVMb29rdXBQb2xpY3kgcG9saWN5
KQotewotICAgIHJldHVybiBjcmVhdGVCbG9iRGF0YUZvckZpbGVXaXRoVHlwZShwYXRoLCBGaWxl
Ojpjb250ZW50VHlwZUZyb21GaWxlUGF0aChmaWxlU3lzdGVtTmFtZSwgcG9saWN5KSk7Ci19Ci0K
IEZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBDb250ZW50VHlwZUxvb2t1cFBvbGljeSBw
b2xpY3kpCi0gICAgOiBCbG9iKGNyZWF0ZUJsb2JEYXRhRm9yRmlsZShwYXRoLCBwb2xpY3kpKQor
ICAgIDogQmxvYih1bmluaXRpYWxpemVkQ29udHJ1Y3RvcikKICAgICAsIG1fcGF0aChwYXRoKQog
ICAgICwgbV9uYW1lKHBhdGhHZXRGaWxlTmFtZShwYXRoKSkKIHsKKyAgICBtX2ludGVybmFsVVJM
ID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwoKTsKKyAgICBtX3R5cGUgPSBjb250ZW50VHlw
ZUZyb21GaWxlUGF0aE9yTmFtZShwYXRoLCBwb2xpY3kpOworICAgIG1fc2l6ZSA9IC0xOworICAg
IFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyRmlsZUJsb2JVUkwobV9pbnRlcm5hbFVS
TCwgcGF0aCwgbV90eXBlKTsKIH0KIAotRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHR5cGUpCi0gICAgOiBCbG9iKHVybCwgdHlwZSwg
LTEpCitGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBD
b250ZW50VHlwZUxvb2t1cFBvbGljeSBwb2xpY3kpCisgICAgOiBCbG9iKHVuaW5pdGlhbGl6ZWRD
b250cnVjdG9yKQogICAgICwgbV9wYXRoKHBhdGgpCisgICAgLCBtX25hbWUobmFtZSkKIHsKLSAg
ICBtX25hbWUgPSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7Ci0gICAgLy8gRklYTUU6IEZpbGUgb2Jq
ZWN0IHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIGRvZXMgbm90IGluY2x1ZGUKLSAgICAv
LyBuZXdlciBmaWxlIG9iamVjdCBkYXRhIG1lbWJlcnM6IG1fbmFtZSBhbmQgbV9yZWxhdGl2ZVBh
dGguCi0gICAgLy8gU2VlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKyAgICBtX2ludGVybmFs
VVJMID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwoKTsKKyAgICBtX3R5cGUgPSBjb250ZW50
VHlwZUZyb21GaWxlUGF0aE9yTmFtZShuYW1lLCBwb2xpY3kpOworICAgIG1fc2l6ZSA9IC0xOwor
ICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyRmlsZUJsb2JVUkwobV9pbnRlcm5h
bFVSTCwgcGF0aCwgbV90eXBlKTsKIH0KIAotRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IFN0cmluZyYgbmFtZSwgQ29udGVudFR5cGVMb29rdXBQb2xpY3kgcG9saWN5KQotICAg
IDogQmxvYihjcmVhdGVCbG9iRGF0YUZvckZpbGVXaXRoTmFtZShwYXRoLCBuYW1lLCBwb2xpY3kp
KQorRmlsZTo6RmlsZShEZXNlcmlhbGl6YXRpb25Db250cnVjdG9yLCBjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgOiBCbG9iKGRlc2Vy
aWFsaXphdGlvbkNvbnRydWN0b3IsIHVybCwgdHlwZSwgLTEpCiAgICAgLCBtX3BhdGgocGF0aCkK
LSAgICAsIG1fbmFtZShuYW1lKQogeworICAgIG1fbmFtZSA9IHBhdGhHZXRGaWxlTmFtZShwYXRo
KTsKKyAgICAvLyBGSVhNRTogRmlsZSBvYmplY3Qgc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRp
b24gZG9lcyBub3QgaW5jbHVkZSBtX25hbWUuCisgICAgLy8gU2VlIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAKIH0KIAogZG91YmxlIEZpbGU6Omxhc3RNb2RpZmllZERhdGUoKSBjb25zdApAQCAt
OTcsNyArODcsNyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRmlsZTo6c2l6ZSgpIGNvbnN0CiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSk7CiB9CiAKLVN0cmlu
ZyBGaWxlOjpjb250ZW50VHlwZUZyb21GaWxlUGF0aChjb25zdCBTdHJpbmcmIG5hbWUsIEZpbGU6
OkNvbnRlbnRUeXBlTG9va3VwUG9saWN5IHBvbGljeSkKK1N0cmluZyBGaWxlOjpjb250ZW50VHlw
ZUZyb21GaWxlUGF0aE9yTmFtZShjb25zdCBTdHJpbmcmIG5hbWUsIEZpbGU6OkNvbnRlbnRUeXBl
TG9va3VwUG9saWN5IHBvbGljeSkKIHsKICAgICBTdHJpbmcgdHlwZTsKICAgICBpbnQgaW5kZXgg
PSBuYW1lLnJldmVyc2VGaW5kKCcuJyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuaAkocmV2aXNp
b24gMTY4MzE3KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDEwICszMiw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEZp
bGVNZXRhZGF0YTsKIGNsYXNzIFVSTDsKIAotY2xhc3MgRmlsZSA6IHB1YmxpYyBCbG9iIHsKK2Ns
YXNzIEZpbGUgZmluYWwgOiBwdWJsaWMgQmxvYiB7CiBwdWJsaWM6CiAgICAgLy8gQWxsQ29udGVu
dFR5cGVzIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgZnVsbCBwYXRoL25hbWUgYXJlIHRy
dXN0ZWQ7IG90aGVyd2lzZSwgaXQgY291bGQKICAgICAvLyBhbGxvdyBhcmJpdHJhcnkgcGFnZXMg
dG8gZGV0ZXJtaW5lIHdoYXQgYXBwbGljYXRpb25zIGFuIHVzZXIgaGFzIGluc3RhbGxlZC4KQEAg
LTUxLDcgKzUwLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZT4gZGVz
ZXJpYWxpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBVUkwmIHNyY1VSTCwgY29uc3QgU3Ry
aW5nJiB0eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlKHBhdGgs
IHNyY1VSTCwgdHlwZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUoZGVzZXJp
YWxpemF0aW9uQ29udHJ1Y3RvciwgcGF0aCwgc3JjVVJMLCB0eXBlKSk7CiAgICAgfQogCiAgICAg
Ly8gQ3JlYXRlIGEgZmlsZSB3aXRoIGEgbmFtZSBleHBvc2VkIHRvIHRoZSBhdXRob3IgKHZpYSBG
aWxlLm5hbWUgYW5kIGFzc29jaWF0ZWQgRE9NIHByb3BlcnRpZXMpIHRoYXQgZGlmZmVycyBmcm9t
IHRoZSBvbmUgcHJvdmlkZWQgaW4gdGhlIHBhdGguCkBAIC03MSwxNCArNzAsMTMgQEAgcHVibGlj
OgogICAgIC8vIFRoaXMgcmV0dXJucyB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIGlmIHRoZSBm
aWxlJ3MgbGFzdCBtb2RpZmllY2F0aW9uIGRhdGUgaXMgbm90IGtub3duIChwZXIgc3BlYzogaHR0
cDovL3d3dy53My5vcmcvVFIvRmlsZUFQSS8jZGZuLWxhc3RNb2RpZmllZERhdGUpLgogICAgIGRv
dWJsZSBsYXN0TW9kaWZpZWREYXRlKCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnRl
bnRUeXBlRnJvbUZpbGVQYXRoKGNvbnN0IFN0cmluZyYsIENvbnRlbnRUeXBlTG9va3VwUG9saWN5
KTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnRlbnRUeXBlRnJvbUZpbGVQYXRoT3JOYW1lKGNvbnN0
IFN0cmluZyYsIENvbnRlbnRUeXBlTG9va3VwUG9saWN5KTsKIAogcHJpdmF0ZToKICAgICBGaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgQ29udGVudFR5cGVMb29rdXBQb2xpY3kpOwogICAgIEZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG5hbWUsIENvbnRlbnRUeXBlTG9va3Vw
UG9saWN5KTsKIAotICAgIC8vIEZvciBkZXNlcmlhbGl6YXRpb24uCi0gICAgRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IFVSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUpOworICAg
IEZpbGUoRGVzZXJpYWxpemF0aW9uQ29udHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCBVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlKTsKIAogICAgIFN0cmluZyBtX3BhdGg7
CiAgICAgU3RyaW5nIG1fbmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMTY4MzE3KQorKysgU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRocmVh
ZGFibGVCbG9iUmVnaXN0cnkuaCIKIAotI2luY2x1ZGUgIkJsb2JEYXRhLmgiCisjaW5jbHVkZSAi
QmxvYlBhcnQuaCIKICNpbmNsdWRlICJCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJCbG9iVVJM
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAgLTUwLDExICs1MCwxMyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBzdHJ1Y3QgQmxvYlJlZ2lzdHJ5Q29udGV4dCB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgQmxvYlJlZ2lzdHJ5Q29udGV4dChjb25z
dCBVUkwmIHVybCwgc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPiBibG9iRGF0YSkKKyAgICBCbG9i
UmVnaXN0cnlDb250ZXh0KGNvbnN0IFVSTCYgdXJsLCBWZWN0b3I8QmxvYlBhcnQ+IGJsb2JQYXJ0
cywgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKICAgICAgICAgOiB1cmwodXJsLmNvcHkoKSkK
LSAgICAgICAgLCBibG9iRGF0YShzdGQ6Om1vdmUoYmxvYkRhdGEpKQorICAgICAgICAsIGNvbnRl
bnRUeXBlKGNvbnRlbnRUeXBlLmlzb2xhdGVkQ29weSgpKQorICAgICAgICAsIGJsb2JQYXJ0cyhz
dGQ6Om1vdmUoYmxvYlBhcnRzKSkKICAgICB7Ci0gICAgICAgIHRoaXMtPmJsb2JEYXRhLT5kZXRh
Y2hGcm9tQ3VycmVudFRocmVhZCgpOworICAgICAgICBmb3IgKEJsb2JQYXJ0JiBwYXJ0IDogYmxv
YlBhcnRzKQorICAgICAgICAgICAgcGFydC5kZXRhY2hGcm9tQ3VycmVudFRocmVhZCgpOwogICAg
IH0KIAogICAgIEJsb2JSZWdpc3RyeUNvbnRleHQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYg
c3JjVVJMKQpAQCAtNjgsOSArNzAsMTggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAgICBC
bG9iUmVnaXN0cnlDb250ZXh0KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNv
bnN0IFN0cmluZyYgY29udGVudFR5cGUpCisgICAgICAgIDogdXJsKHVybC5jb3B5KCkpCisgICAg
ICAgICwgcGF0aChwYXRoLmlzb2xhdGVkQ29weSgpKQorICAgICAgICAsIGNvbnRlbnRUeXBlKGNv
bnRlbnRUeXBlLmlzb2xhdGVkQ29weSgpKQorICAgIHsKKyAgICB9CisKICAgICBVUkwgdXJsOwog
ICAgIFVSTCBzcmNVUkw7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPiBibG9iRGF0YTsK
KyAgICBTdHJpbmcgcGF0aDsKKyAgICBTdHJpbmcgY29udGVudFR5cGU7CisgICAgVmVjdG9yPEJs
b2JQYXJ0PiBibG9iUGFydHM7CiB9OwogCiAjaWYgRU5BQkxFKEJMT0IpCkBAIC04OCwxOCArOTks
MzMgQEAgc3RhdGljIFRocmVhZFNwZWNpZmljPEJsb2JVcmxPcmlnaW5NYXA+JgogICAgIHJldHVy
biAqbWFwOwogfQogCi11bnNpZ25lZCBsb25nIGxvbmcgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6
cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBzdGQ6OnVuaXF1ZV9wdHI8QmxvYkRhdGE+
IGJsb2JEYXRhKQordm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckZpbGVCbG9i
VVJMKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29u
dGVudFR5cGUpCit7CisgICAgaWYgKGlzTWFpblRocmVhZCgpKQorICAgICAgICBibG9iUmVnaXN0
cnkoKS5yZWdpc3RlckZpbGVCbG9iVVJMKHVybCwgcGF0aCwgY29udGVudFR5cGUpOworICAgIGVs
c2UgeworICAgICAgICAvLyBCbG9iUmVnaXN0cnlDb250ZXh0IHBlcmZvcm1zIGFuIGlzb2xhdGVk
IGNvcHkgb2YgZGF0YS4KKyAgICAgICAgQmxvYlJlZ2lzdHJ5Q29udGV4dCogY29udGV4dCA9IG5l
dyBCbG9iUmVnaXN0cnlDb250ZXh0KHVybCwgcGF0aCwgY29udGVudFR5cGUpOworICAgICAgICBC
aW5hcnlTZW1hcGhvcmUgc2VtYXBob3JlOworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtjb250
ZXh0XSB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmxvYlJlZ2lzdHJ5Q29udGV4dD4g
YmxvYlJlZ2lzdHJ5Q29udGV4dChjb250ZXh0KTsKKyAgICAgICAgICAgIGJsb2JSZWdpc3RyeSgp
LnJlZ2lzdGVyRmlsZUJsb2JVUkwoYmxvYlJlZ2lzdHJ5Q29udGV4dC0+dXJsLCBibG9iUmVnaXN0
cnlDb250ZXh0LT5wYXRoLCBibG9iUmVnaXN0cnlDb250ZXh0LT5jb250ZW50VHlwZSk7CisgICAg
ICAgIH0pOworICAgIH0KK30KKwordW5zaWduZWQgbG9uZyBsb25nIFRocmVhZGFibGVCbG9iUmVn
aXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwgVmVjdG9yPEJsb2JQYXJ0PiBi
bG9iUGFydHMsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCiB7CiAgICAgdW5zaWduZWQgbG9u
ZyBsb25nIHJlc3VsdFNpemU7CiAgICAgaWYgKGlzTWFpblRocmVhZCgpKQotICAgICAgICByZXN1
bHRTaXplID0gYmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJCbG9iVVJMKHVybCwgc3RkOjptb3ZlKGJs
b2JEYXRhKSk7CisgICAgICAgIHJlc3VsdFNpemUgPSBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckJs
b2JVUkwodXJsLCBzdGQ6Om1vdmUoYmxvYlBhcnRzKSwgY29udGVudFR5cGUpOwogICAgIGVsc2Ug
ewogICAgICAgICAvLyBCbG9iUmVnaXN0cnlDb250ZXh0IHBlcmZvcm1zIGFuIGlzb2xhdGVkIGNv
cHkgb2YgZGF0YS4KLSAgICAgICAgQmxvYlJlZ2lzdHJ5Q29udGV4dCogY29udGV4dCA9IG5ldyBC
bG9iUmVnaXN0cnlDb250ZXh0KHVybCwgc3RkOjptb3ZlKGJsb2JEYXRhKSk7CisgICAgICAgIEJs
b2JSZWdpc3RyeUNvbnRleHQqIGNvbnRleHQgPSBuZXcgQmxvYlJlZ2lzdHJ5Q29udGV4dCh1cmws
IHN0ZDo6bW92ZShibG9iUGFydHMpLCBjb250ZW50VHlwZSk7CiAgICAgICAgIEJpbmFyeVNlbWFw
aG9yZSBzZW1hcGhvcmU7CiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2NvbnRleHQsICZzZW1h
cGhvcmUsICZyZXN1bHRTaXplXSB7CiAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmxvYlJl
Z2lzdHJ5Q29udGV4dD4gYmxvYlJlZ2lzdHJ5Q29udGV4dChjb250ZXh0KTsKLSAgICAgICAgICAg
IHJlc3VsdFNpemUgPSBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckJsb2JVUkwoYmxvYlJlZ2lzdHJ5
Q29udGV4dC0+dXJsLCBzdGQ6Om1vdmUoYmxvYlJlZ2lzdHJ5Q29udGV4dC0+YmxvYkRhdGEpKTsK
KyAgICAgICAgICAgIHJlc3VsdFNpemUgPSBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckJsb2JVUkwo
YmxvYlJlZ2lzdHJ5Q29udGV4dC0+dXJsLCBzdGQ6Om1vdmUoYmxvYlJlZ2lzdHJ5Q29udGV4dC0+
YmxvYlBhcnRzKSwgYmxvYlJlZ2lzdHJ5Q29udGV4dC0+Y29udGVudFR5cGUpOwogICAgICAgICAg
ICAgc2VtYXBob3JlLnNpZ25hbCgpOwogICAgICAgICB9KTsKICAgICAgICAgc2VtYXBob3JlLndh
aXQoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSk7CkBAIC0xNjgsNyArMTk0LDcg
QEAgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gVGhyZWFkYWJsZUJsbwogCiAjZWxzZQogCi11
bnNpZ25lZCBsb25nIGxvbmcgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJM
KGNvbnN0IFVSTCYsIHN0ZDo6dW5pcXVlX3B0cjxCbG9iRGF0YT4pCit1bnNpZ25lZCBsb25nIGxv
bmcgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYsIFZl
Y3RvcjxCbG9iUGFydD4pCiB7CiAgICAgcmV0dXJuIDA7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaAkocmV2aXNpb24gMTY4MzE3
KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDE3ICszMSwxOSBAQAogI2lmbmRlZiBUaHJlYWRhYmxlQmxvYlJl
Z2lzdHJ5X2gKICNkZWZpbmUgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeV9oCiAKLSNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEJsb2JEYXRhOworY2xh
c3MgQmxvYlBhcnQ7CiBjbGFzcyBVUkw7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIAogY2xhc3Mg
VGhyZWFkYWJsZUJsb2JSZWdpc3RyeSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgbG9uZyByZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiwgc3RkOjp1bmlxdWVfcHRyPEJsb2JE
YXRhPik7CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBVUkwmLCBj
b25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpOworICAgIHN0YXRp
YyB1bnNpZ25lZCBsb25nIGxvbmcgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYsIFZlY3RvcjxC
bG9iUGFydD4gYmxvYlBhcnRzLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsKICAgICBzdGF0
aWMgdm9pZCByZWdpc3RlckJsb2JVUkwoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBVUkwmLCBjb25z
dCBVUkwmIHNyY1VSTCk7CiAgICAgc3RhdGljIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3Qg
VVJMJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxk
ZXIuY3BwCShyZXZpc2lvbiAxNjgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktp
dEJsb2JCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIEJs
b2JCdWlsZGVyOjphcHBlbmQoQXJyYXlCdWZmZXIqIGFyCiAgICAgaWYgKCFhcnJheUJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYXBwZW5kQnl0ZXNEYXRhKGFycmF5QnVmZmVyLT5kYXRh
KCksIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworICAgIG1fYXBwZW5kYWJsZURhdGEuYXBw
ZW5kKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSwgYXJyYXlC
dWZmZXItPmJ5dGVMZW5ndGgoKSk7CiB9CiAKIHZvaWQgQmxvYkJ1aWxkZXI6OmFwcGVuZChQYXNz
UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gYXJyYXlCdWZmZXJWaWV3KQpAQCAtODMsNyArODMsNyBA
QCB2b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQoUGFzc1JlZlB0cjxBcnJhCiAgICAgaWYgKCFhcnJh
eUJ1ZmZlclZpZXcpCiAgICAgICAgIHJldHVybjsKIAotICAgIGFwcGVuZEJ5dGVzRGF0YShhcnJh
eUJ1ZmZlclZpZXctPmJhc2VBZGRyZXNzKCksIGFycmF5QnVmZmVyVmlldy0+Ynl0ZUxlbmd0aCgp
KTsKKyAgICBtX2FwcGVuZGFibGVEYXRhLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
YXJyYXlCdWZmZXJWaWV3LT5iYXNlQWRkcmVzcygpKSwgYXJyYXlCdWZmZXJWaWV3LT5ieXRlTGVu
Z3RoKCkpOwogfQogI2VuZGlmCiAKQEAgLTkyLDI1ICs5MiwxNCBAQCB2b2lkIEJsb2JCdWlsZGVy
OjphcHBlbmQoQmxvYiogYmxvYikKICAgICBpZiAoIWJsb2IpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoIW1fYXBwZW5kYWJsZURhdGEuaXNFbXB0eSgpKQotICAgICAgICBtX2l0ZW1zLmFwcGVu
ZChCbG9iRGF0YUl0ZW0oUmF3RGF0YTo6Y3JlYXRlKHN0ZDo6bW92ZShtX2FwcGVuZGFibGVEYXRh
KSkpKTsKLSAgICBpZiAoYmxvYi0+aXNGaWxlKCkpIHsKLSAgICAgICAgRmlsZSogZmlsZSA9IHRv
RmlsZShibG9iKTsKLSAgICAgICAgbV9pdGVtcy5hcHBlbmQoQmxvYkRhdGFJdGVtKGZpbGUtPnBh
dGgoKSwgMCwgQmxvYkRhdGFJdGVtOjp0b0VuZE9mRmlsZSwgaW52YWxpZEZpbGVUaW1lKCkpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBsb25nIGxvbmcgYmxvYlNpemUgPSBzdGF0aWNfY2FzdDxs
b25nIGxvbmc+KGJsb2ItPnNpemUoKSk7Ci0gICAgICAgIG1faXRlbXMuYXBwZW5kKEJsb2JEYXRh
SXRlbShibG9iLT51cmwoKSwgMCwgYmxvYlNpemUpKTsKLSAgICB9CisgICAgICAgIG1faXRlbXMu
YXBwZW5kKEJsb2JQYXJ0KHN0ZDo6bW92ZShtX2FwcGVuZGFibGVEYXRhKSkpOworICAgIG1faXRl
bXMuYXBwZW5kKEJsb2JQYXJ0KGJsb2ItPnVybCgpKSk7CiB9CiAKLXZvaWQgQmxvYkJ1aWxkZXI6
OmFwcGVuZEJ5dGVzRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQotewotICAg
IG1fYXBwZW5kYWJsZURhdGEuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwg
bGVuZ3RoKTsKLX0KLQotQmxvYkRhdGFJdGVtTGlzdCBCbG9iQnVpbGRlcjo6ZmluYWxpemUoKQor
VmVjdG9yPEJsb2JQYXJ0PiBCbG9iQnVpbGRlcjo6ZmluYWxpemUoKQogewogICAgIGlmICghbV9h
cHBlbmRhYmxlRGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIG1faXRlbXMuYXBwZW5kKEJsb2JEYXRh
SXRlbShSYXdEYXRhOjpjcmVhdGUoc3RkOjptb3ZlKG1fYXBwZW5kYWJsZURhdGEpKSkpOworICAg
ICAgICBtX2l0ZW1zLmFwcGVuZChCbG9iUGFydChzdGQ6Om1vdmUobV9hcHBlbmRhYmxlRGF0YSkp
KTsKICAgICByZXR1cm4gc3RkOjptb3ZlKG1faXRlbXMpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5oCShyZXZpc2lvbiAxNjgzMTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDggKzMxLDcgQEAKICNpZm5kZWYgV2ViS2l0QmxvYkJ1aWxkZXJfaAogI2RlZmluZSBX
ZWJLaXRCbG9iQnVpbGRlcl9oCiAKLSNpbmNsdWRlICJCbG9iRGF0YS5oIgotI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSAiQmxvYlBhcnQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiBj
bGFzcyBBcnJheUJ1ZmZlcjsKQEAgLTU0LDEyICs1MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
cHBlbmQoUGFzc1JlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4pOwogI2VuZGlmCiAKLSAgICBC
bG9iRGF0YUl0ZW1MaXN0IGZpbmFsaXplKCk7CisgICAgVmVjdG9yPEJsb2JQYXJ0PiBmaW5hbGl6
ZSgpOwogCiBwcml2YXRlOgotICAgIHZvaWQgYXBwZW5kQnl0ZXNEYXRhKGNvbnN0IHZvaWQqLCBz
aXplX3QpOwotCi0gICAgQmxvYkRhdGFJdGVtTGlzdCBtX2l0ZW1zOworICAgIFZlY3RvcjxCbG9i
UGFydD4gbV9pdGVtczsKICAgICBWZWN0b3I8Y2hhcj4gbV9hcHBlbmRhYmxlRGF0YTsKIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwCShy
ZXZpc2lvbiAxNjgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMjAgKzQ1LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjb25zdCBsb25nIGxvbmcgQmxvYkRhdGFJdGVtOjp0b0VuZE9mRmlsZSA9IC0xOwog
Ci12b2lkIEJsb2JEYXRhSXRlbTo6ZGV0YWNoRnJvbUN1cnJlbnRUaHJlYWQoKQotewotICAgIHBh
dGggPSBwYXRoLmlzb2xhdGVkQ29weSgpOwotICAgIHVybCA9IHVybC5jb3B5KCk7Ci19Ci0KLXZv
aWQgQmxvYkRhdGE6OmRldGFjaEZyb21DdXJyZW50VGhyZWFkKCkKLXsKLSAgICBtX2NvbnRlbnRU
eXBlID0gbV9jb250ZW50VHlwZS5pc29sYXRlZENvcHkoKTsKLSAgICBtX2NvbnRlbnREaXNwb3Np
dGlvbiA9IG1fY29udGVudERpc3Bvc2l0aW9uLmlzb2xhdGVkQ29weSgpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9pdGVtcy5hdChp
KS5kZXRhY2hGcm9tQ3VycmVudFRocmVhZCgpOwotfQotCiB2b2lkIEJsb2JEYXRhOjpzZXRDb250
ZW50VHlwZShjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogewogICAgIEFTU0VSVChCbG9iOjpp
c05vcm1hbGl6ZWRDb250ZW50VHlwZShjb250ZW50VHlwZSkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuaAkocmV2aXNpb24gMTY4MzE3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw2ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gRklYTUU6IFJhd0Rh
dGEgZG9lc24ndCBuZWVkIHRvIGJlIFRocmVhZFNhZmVSZWZDb3VudGVkIGFueSBtb3JlLiBXZSBj
YW4gcHJvYmFibHkgc3dpdGNoIHRvIGFub3RoZXIgZGF0YSBidWZmZXIgdHlwZSBub3cuCiBjbGFz
cyBSYXdEYXRhIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFJhd0RhdGE+IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSYXdEYXRhPiBjcmVhdGUoVmVjdG9yPGNoYXI+JiYg
ZGF0YSkKQEAgLTExOCw5ICsxMTksNiBAQCBzdHJ1Y3QgQmxvYkRhdGFJdGVtIHsKICAgICB7CiAg
ICAgfQogCi0gICAgLy8gRGV0YWNoZXMgZnJvbSBjdXJyZW50IHRocmVhZCBzbyB0aGF0IGl0IGNh
biBiZSBwYXNzZWQgdG8gYW5vdGhlciB0aHJlYWQuCi0gICAgdm9pZCBkZXRhY2hGcm9tQ3VycmVu
dFRocmVhZCgpOwotCiAgICAgZW51bSB7CiAgICAgICAgIERhdGEsCiAgICAgICAgIEZpbGUsCkBA
IC0xNjEsOSArMTU5LDYgQEAgY2xhc3MgQmxvYkRhdGEgewogcHVibGljOgogICAgIEJsb2JEYXRh
KCkgeyB9CiAKLSAgICAvLyBEZXRhY2hlcyBmcm9tIGN1cnJlbnQgdGhyZWFkIHNvIHRoYXQgaXQg
Y2FuIGJlIHBhc3NlZCB0byBhbm90aGVyIHRocmVhZC4KLSAgICB2b2lkIGRldGFjaEZyb21DdXJy
ZW50VGhyZWFkKCk7Ci0KICAgICBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZW50VHlwZTsgfQogICAgIHZvaWQgc2V0Q29udGVudFR5cGUoY29uc3QgU3Ry
aW5nJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlBhcnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JQYXJ0
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JQ
YXJ0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQmxvYlBhcnRfaAorI2RlZmluZSBCbG9iUGFydF9oCisKKyNpbmNsdWRlICJVUkwuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCbG9iUGFydCB7CitwdWJsaWM6CisgICAgZW51
bSBUeXBlIHsKKyAgICAgICAgRGF0YSwKKyAgICAgICAgQmxvYgorICAgIH07CisKKyAgICBCbG9i
UGFydCgpCisgICAgICAgIDogbV90eXBlKERhdGEpCisgICAgeworICAgIH0KKworICAgIEJsb2JQ
YXJ0KFZlY3RvcjxjaGFyPiBkYXRhKQorICAgICAgICA6IG1fdHlwZShEYXRhKQorICAgICAgICAs
IG1fZGF0YShzdGQ6Om1vdmUoZGF0YSkpCisgICAgeworICAgIH0KKworICAgIEJsb2JQYXJ0KGNv
bnN0IFVSTCYgdXJsKQorICAgICAgICA6IG1fdHlwZShCbG9iKQorICAgICAgICAsIG1fdXJsKHVy
bCkKKyAgICB7CisgICAgfQorCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CisKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fdHlwZSA9PSBEYXRhKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YTsKKyAgICB9
CisKKyAgICBWZWN0b3I8Y2hhcj4gbW92ZURhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
dHlwZSA9PSBEYXRhKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShtX2RhdGEpOworICAgIH0K
KworICAgIGNvbnN0IFVSTCYgdXJsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5
cGUgPT0gQmxvYik7CisgICAgICAgIHJldHVybiBtX3VybDsKKyAgICB9CisKKyAgICB2b2lkIGRl
dGFjaEZyb21DdXJyZW50VGhyZWFkKCkKKyAgICB7CisgICAgICAgIG1fdXJsID0gbV91cmwuY29w
eSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBUeXBlIG1fdHlwZTsKKyAgICBWZWN0b3I8Y2hh
cj4gbV9kYXRhOworICAgIFVSTCBtX3VybDsKK307CisKK30KKworI2VuZGlmIC8vIEJsb2JQYXJ0
X2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
QmxvYlBhcnQuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMK
K25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgJKHJldmlzaW9uIDE2ODMx
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDEyICszMSwxMiBAQAogI2lmbmRlZiBCbG9iUmVnaXN0cnlfaAog
I2RlZmluZSBCbG9iUmVnaXN0cnlfaAogCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBCbG9iRGF0YTsKLWNsYXNzIEJsb2JTdG9yYWdlRGF0YTsK
K2NsYXNzIEJsb2JQYXJ0OwogY2xhc3MgQmxvYlJlZ2lzdHJ5OwogY2xhc3MgVVJMOwogCkBAIC00
NSw4ICs0NSwxMiBAQCBCbG9iUmVnaXN0cnkmIGJsb2JSZWdpc3RyeSgpOwogLy8gQmxvYlJlZ2lz
dHJ5IGlzIG5vdCB0aHJlYWQtc2FmZS4gSXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gbWFp
biB0aHJlYWQuCiBjbGFzcyBCbG9iUmVnaXN0cnkgewogcHVibGljOgorCisgICAgLy8gUmVnaXN0
ZXJzIGEgYmxvYiBVUkwgcmVmZXJyaW5nIHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4KKyAgICB2aXJ0
dWFsIHZvaWQgcmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpID0gMDsKKwogICAgIC8vIFJlZ2lzdGVycyBh
IGJsb2IgVVJMIHJlZmVycmluZyB0byB0aGUgc3BlY2lmaWVkIGJsb2IgZGF0YS4KLSAgICB2aXJ0
dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyByZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiwgc3RkOjp1
bmlxdWVfcHRyPEJsb2JEYXRhPikgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25n
IHJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmLCBWZWN0b3I8QmxvYlBhcnQ+LCBjb25zdCBTdHJp
bmcmIGNvbnRlbnRUeXBlKSA9IDA7CiAgICAgCiAgICAgLy8gUmVnaXN0ZXJzIGEgbmV3IGJsb2Ig
VVJMIHJlZmVycmluZyB0byB0aGUgYmxvYiBkYXRhIGlkZW50aWZpZWQgYnkgdGhlIHNwZWNpZmll
ZCBzcmNVUkwuCiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmLCBj
b25zdCBVUkwmIHNyY1VSTCkgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCShyZXZpc2lvbiAxNjgzMTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKICNpZiBFTkFCTEUoQkxPQikKIAorI2lu
Y2x1ZGUgIkJsb2JQYXJ0LmgiCiAjaW5jbHVkZSAiQmxvYlJlc291cmNlSGFuZGxlLmgiCiAjaW5j
bHVkZSAiQmxvYlN0b3JhZ2VEYXRhLmgiCiAjaW5jbHVkZSAiRmlsZU1ldGFkYXRhLmgiCkBAIC0x
MTYsMTIgKzExNywyOCBAQCB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OmFwcGVuZFN0b3JhZ2VJdGVt
CiAgICAgQVNTRVJUKCFsZW5ndGgpOwogfQogCi11bnNpZ25lZCBsb25nIGxvbmcgQmxvYlJlZ2lz
dHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBzdGQ6OnVuaXF1ZV9wdHI8
QmxvYkRhdGE+IGJsb2JEYXRhKQordm9pZCBCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckZpbGVC
bG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYg
Y29udGVudFR5cGUpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICByZWdpc3Rl
ckJsb2JSZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yKCk7CiAKLSAgICBSZWZQdHI8QmxvYlN0b3Jh
Z2VEYXRhPiBibG9iU3RvcmFnZURhdGEgPSBCbG9iU3RvcmFnZURhdGE6OmNyZWF0ZShibG9iRGF0
YS0+Y29udGVudFR5cGUoKSk7CisgICAgUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gYmxvYlN0b3Jh
Z2VEYXRhID0gQmxvYlN0b3JhZ2VEYXRhOjpjcmVhdGUoY29udGVudFR5cGUpOworCisgICAgLy8g
RklYTUU6IEZhY3RvciBvdXQgc2l6ZSBhbmQgbW9kaWZpY2F0aW9uIHRyYWNraW5nIGZvciBhIGNs
ZWFuZXIgaW1wbGVtZW50YXRpb24uCisgICAgRmlsZU1ldGFkYXRhIG1ldGFkYXRhOworICAgIGlm
ICghZ2V0RmlsZU1ldGFkYXRhKHBhdGgsIG1ldGFkYXRhKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYmxvYlN0b3JhZ2VEYXRhLT5tX2RhdGEuYXBwZW5kRmlsZShwYXRoLCAwLCBtZXRhZGF0YS5s
ZW5ndGgsIG1ldGFkYXRhLm1vZGlmaWNhdGlvblRpbWUpOworICAgIG1fYmxvYnMuc2V0KHVybC5z
dHJpbmcoKSwgYmxvYlN0b3JhZ2VEYXRhKTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIEJsb2JS
ZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwgVmVjdG9yPEJsb2JQ
YXJ0PiBibG9iUGFydHMsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICByZWdpc3RlckJsb2JSZXNvdXJjZUhhbmRsZUNvbnN0cnVj
dG9yKCk7CisKKyAgICBSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBibG9iU3RvcmFnZURhdGEgPSBC
bG9iU3RvcmFnZURhdGE6OmNyZWF0ZShjb250ZW50VHlwZSk7CiAKICAgICAvLyBUaGUgYmxvYiBk
YXRhIGlzIHN0b3JlZCBpbiB0aGUgImNhbm9uaWNhbCIgd2F5LiBUaGF0IGlzLCBpdCBvbmx5IGNv
bnRhaW5zIGEgbGlzdCBvZiBEYXRhIGFuZCBGaWxlIGl0ZW1zLgogICAgIC8vIDEpIFRoZSBEYXRh
IGl0ZW0gaXMgZGVub3RlZCBieSB0aGUgcmF3IGRhdGEgYW5kIHRoZSByYW5nZS4KQEAgLTEyOSwz
OCArMTQ2LDI1IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iUmVnaXN0cnlJbXBsOjpyZWcKICAg
ICAvLyAzKSBUaGUgVVJMIGl0ZW0gaXMgZGVub3RlZCBieSB0aGUgVVJMLCB0aGUgcmFuZ2UgYW5k
IHRoZSBleHBlY3RlZCBtb2RpZmljYXRpb24gdGltZS4KICAgICAvLyBBbGwgdGhlIEJsb2IgaXRl
bXMgaW4gdGhlIHBhc3NpbmcgYmxvYiBkYXRhIGFyZSByZXNvbHZlZCBhbmQgZXhwYW5kZWQgaW50
byBhIHNldCBvZiBEYXRhIGFuZCBGaWxlIGl0ZW1zLgogCi0gICAgLy8gRklYTUU6IEJsb2JEYXRh
SXRlbXMgY29udGFpbiBhIGxvdCBvZiBpbmZvcm1hdGlvbiB0aGF0IHdlIGRvIG5vdCBleHBlY3Qg
dG8gYmUgcHJlc2VudCB3aGVuIHJlZ2lzdGVyaW5nIGEgbmV3IGJsb2IsCi0gICAgLy8gdGhlc2Ug
ZGF0YSBtZW1iZXJzIGFyZSBvbmx5IHVzZWQgaW5zaWRlIHRoZSByZWdpc3RyeS4gVXNlIGEgbW9y
ZSBhcHByb3ByaWF0ZSB0eXBlIHRoYW4gQmxvYkRhdGEuCi0KICAgICB1bnNpZ25lZCBsb25nIGxv
bmcgc2l6ZSA9IDA7Ci0gICAgZm9yIChjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gOiBibG9iRGF0
YS0+aXRlbXMoKSkgewotICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkgewotICAgICAgICBjYXNl
IEJsb2JEYXRhSXRlbTo6RGF0YToKLSAgICAgICAgICAgIGJsb2JTdG9yYWdlRGF0YS0+bV9kYXRh
LmFwcGVuZERhdGEoaXRlbS5kYXRhLCAwLCBpdGVtLmRhdGEtPmxlbmd0aCgpKTsKLSAgICAgICAg
ICAgIHNpemUgKz0gaXRlbS5kYXRhLT5sZW5ndGgoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEJsb2JEYXRhSXRlbTo6RmlsZTogewotICAgICAgICAgICAgQVNTRVJUKCFpdGVt
Lm9mZnNldCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXRlbS5sZW5ndGggPT0gQmxvYkRhdGFJdGVt
Ojp0b0VuZE9mRmlsZSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWlzVmFsaWRGaWxlVGltZShpdGVt
LmV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkpOwotCi0gICAgICAgICAgICAvLyBGSVhNRTogRmFj
dG9yIG91dCBzaXplIGFuZCBtb2RpZmljYXRpb24gdHJhY2tpbmcgZm9yIGEgY2xlYW5lciBpbXBs
ZW1lbnRhdGlvbi4KLSAgICAgICAgICAgIEZpbGVNZXRhZGF0YSBtZXRhZGF0YTsKLSAgICAgICAg
ICAgIGlmICghZ2V0RmlsZU1ldGFkYXRhKGl0ZW0ucGF0aCwgbWV0YWRhdGEpKQotICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAgICBibG9iU3RvcmFnZURhdGEtPm1fZGF0YS5h
cHBlbmRGaWxlKGl0ZW0ucGF0aCwgMCwgbWV0YWRhdGEubGVuZ3RoLCBtZXRhZGF0YS5tb2RpZmlj
YXRpb25UaW1lKTsKLSAgICAgICAgICAgIHNpemUgKz0gbWV0YWRhdGEubGVuZ3RoOworICAgIGZv
ciAoQmxvYlBhcnQmIHBhcnQgOiBibG9iUGFydHMpIHsKKyAgICAgICAgc3dpdGNoIChwYXJ0LnR5
cGUoKSkgeworICAgICAgICBjYXNlIEJsb2JQYXJ0OjpEYXRhOiB7CisgICAgICAgICAgICB1bnNp
Z25lZCBsb25nIGxvbmcgcGFydFNpemUgPSBwYXJ0LmRhdGEoKS5zaXplKCk7CisgICAgICAgICAg
ICBSZWZQdHI8UmF3RGF0YT4gcmF3RGF0YSA9IFJhd0RhdGE6OmNyZWF0ZShwYXJ0Lm1vdmVEYXRh
KCkpOworICAgICAgICAgICAgc2l6ZSArPSBwYXJ0U2l6ZTsKKyAgICAgICAgICAgIGJsb2JTdG9y
YWdlRGF0YS0+bV9kYXRhLmFwcGVuZERhdGEocmF3RGF0YS5yZWxlYXNlKCksIDAsIHBhcnRTaXpl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgQmxvYkRhdGFJ
dGVtOjpCbG9iOgotICAgICAgICAgICAgaWYgKCFtX2Jsb2JzLmNvbnRhaW5zKGl0ZW0udXJsLnN0
cmluZygpKSkKKyAgICAgICAgY2FzZSBCbG9iUGFydDo6QmxvYjogeworICAgICAgICAgICAgaWYg
KCFtX2Jsb2JzLmNvbnRhaW5zKHBhcnQudXJsKCkuc3RyaW5nKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICAgICAgc2l6ZSArPSBibG9iU2l6ZShpdGVtLnVybCk7IC8vIEFz
IGEgc2lkZSBlZmZlY3QsIHRoaXMgY2FsY3VsYXRlcyBzaXplcyBvZiBhbGwgZmlsZXMgaW4gdGhl
IGJsb2IuCi0gICAgICAgICAgICBBU1NFUlQoYmxvYlNpemUoaXRlbS51cmwpID09IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oaXRlbS5sZW5ndGgpKTsKLSAgICAgICAgICAgIGFwcGVu
ZFN0b3JhZ2VJdGVtcyhibG9iU3RvcmFnZURhdGEuZ2V0KCksIG1fYmxvYnMuZ2V0KGl0ZW0udXJs
LnN0cmluZygpKS0+aXRlbXMoKSwgaXRlbS5vZmZzZXQsIGl0ZW0ubGVuZ3RoKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBwYXJ0U2l6ZSA9IGJsb2JTaXplKHBhcnQudXJsKCkpOyAv
LyBBcyBhIHNpZGUgZWZmZWN0LCB0aGlzIGNhbGN1bGF0ZXMgc2l6ZXMgb2YgYWxsIGZpbGVzIGlu
IHRoZSBibG9iLgorICAgICAgICAgICAgc2l6ZSArPSBwYXJ0U2l6ZTsKKyAgICAgICAgICAgIGFw
cGVuZFN0b3JhZ2VJdGVtcyhibG9iU3RvcmFnZURhdGEuZ2V0KCksIG1fYmxvYnMuZ2V0KHBhcnQu
dXJsKCkuc3RyaW5nKCkpLT5pdGVtcygpLCAwLCBwYXJ0U2l6ZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgbV9ibG9icy5zZXQodXJsLnN0
cmluZygpLCBibG9iU3RvcmFnZURhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmgJKHJldmlzaW9uIDE2ODMxNykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIFJlc291cmNlSGFuZGxlQ2xpZW50Owog
Y2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogCiAvLyBCbG9iUmVnaXN0cnlJbXBsIGlzIG5vdCB0aHJl
YWQtc2FmZS4gSXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gbWFpbiB0aHJlYWQuCi1jbGFz
cyBCbG9iUmVnaXN0cnlJbXBsIDogcHVibGljIEJsb2JSZWdpc3RyeSB7CitjbGFzcyBCbG9iUmVn
aXN0cnlJbXBsIGZpbmFsIDogcHVibGljIEJsb2JSZWdpc3RyeSB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QmxvYlJlZ2lzdHJ5SW1wbCgpOwpA
QCAtNTcsNyArNTcsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgYXBwZW5kU3RvcmFn
ZUl0ZW1zKEJsb2JTdG9yYWdlRGF0YSosIGNvbnN0IEJsb2JEYXRhSXRlbUxpc3QmLCBsb25nIGxv
bmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKTsKIAotICAgIHZpcnR1YWwgdW5zaWduZWQgbG9u
ZyBsb25nIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmLCBzdGQ6OnVuaXF1ZV9wdHI8QmxvYkRh
dGE+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGaWxlQmxvYlVSTChjb25z
dCBXZWJDb3JlOjpVUkwmLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29udGVu
dFR5cGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHJlZ2lzdGVy
QmxvYlVSTChjb25zdCBVUkwmLCBWZWN0b3I8QmxvYlBhcnQ+LCBjb25zdCBTdHJpbmcmIGNvbnRl
bnRUeXBlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0
IFVSTCYsIGNvbnN0IFVSTCYgc3JjVVJMKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxvbmcgbG9uZyByZWdpc3RlckJsb2JVUkxGb3JTbGljZShjb25zdCBVUkwmLCBjb25zdCBVUkwm
IHNyY1VSTCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgZW5kKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJikgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAkocmV2aXNp
b24gMTY4MzE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKIAogI2luY2x1ZGUgIkZvcm1EYXRh
LmgiCiAKLSNpbmNsdWRlICJCbG9iRGF0YS5oIgogI2luY2x1ZGUgIkJsb2JSZWdpc3RyeUltcGwu
aCIKKyNpbmNsdWRlICJCbG9iU3RvcmFnZURhdGEuaCIKICNpbmNsdWRlICJCbG9iVVJMLmgiCiAj
aW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDE2ODMxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcg
KzI0LDYgQEAKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgogCiAjaW5jbHVkZSAiQmxvYi5o
IgotI2luY2x1ZGUgIkJsb2JEYXRhLmgiCiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5
LmgiCiAjaW5jbHVkZSAiQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmgiCiAjaW5jbHVkZSAiRE9N
Rm9ybURhdGEuaCIKQEAgLTI4OSwxMyArMjg4LDExIEBAIEJsb2IqIFhNTEh0dHBSZXF1ZXN0Ojpy
ZXNwb25zZUJsb2IoKQogICAgIGlmICghbV9yZXNwb25zZUJsb2IpIHsKICAgICAgICAgaWYgKG1f
YmluYXJ5UmVzcG9uc2VCdWlsZGVyKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2UganVzdCBy
ZWNlaXZlZCB0aGUgZGF0YSBmcm9tIE5ldHdvcmtQcm9jZXNzLCBhbmQgYXJlIHNlbmRpbmcgaXQg
YmFjay4gVGhpcyBpcyBpbmVmZmljaWVudC4KLSAgICAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBt
X2JpbmFyeVJlc3BvbnNlQnVpbGRlci0+c2l6ZSgpOwotICAgICAgICAgICAgYXV0byBibG9iRGF0
YSA9IHN0ZDo6bWFrZV91bmlxdWU8QmxvYkRhdGE+KCk7Ci0gICAgICAgICAgICBibG9iRGF0YS0+
YXBwZW5kRGF0YShSYXdEYXRhOjpjcmVhdGUobV9iaW5hcnlSZXNwb25zZUJ1aWxkZXItPmRhdGEo
KSwgc2l6ZSksIDAsIEJsb2JEYXRhSXRlbTo6dG9FbmRPZkZpbGUpOwotICAgICAgICAgICAgU3Ry
aW5nIG5vcm1hbGl6ZWRDb250ZW50VHlwZSA9IEJsb2I6Om5vcm1hbGl6ZWRDb250ZW50VHlwZShy
ZXNwb25zZU1JTUVUeXBlKCkpOwotICAgICAgICAgICAgYmxvYkRhdGEtPnNldENvbnRlbnRUeXBl
KG5vcm1hbGl6ZWRDb250ZW50VHlwZSk7IC8vIHJlc3BvbnNlTUlNRVR5cGUgZGVmYXVsdHMgdG8g
dGV4dC94bWwgd2hpY2ggbWF5IGJlIGluY29ycmVjdC4KKyAgICAgICAgICAgIFZlY3RvcjxjaGFy
PiBkYXRhOworICAgICAgICAgICAgZGF0YS5hcHBlbmQobV9iaW5hcnlSZXNwb25zZUJ1aWxkZXIt
PmRhdGEoKSwgbV9iaW5hcnlSZXNwb25zZUJ1aWxkZXItPnNpemUoKSk7CisgICAgICAgICAgICBT
dHJpbmcgbm9ybWFsaXplZENvbnRlbnRUeXBlID0gQmxvYjo6bm9ybWFsaXplZENvbnRlbnRUeXBl
KHJlc3BvbnNlTUlNRVR5cGUoKSk7IC8vIHJlc3BvbnNlTUlNRVR5cGUgZGVmYXVsdHMgdG8gdGV4
dC94bWwgd2hpY2ggbWF5IGJlIGluY29ycmVjdC4KKyAgICAgICAgICAgIG1fcmVzcG9uc2VCbG9i
ID0gQmxvYjo6Y3JlYXRlKHN0ZDo6bW92ZShkYXRhKSwgbm9ybWFsaXplZENvbnRlbnRUeXBlKTsK
ICAgICAgICAgICAgIG1fYmluYXJ5UmVzcG9uc2VCdWlsZGVyLmNsZWFyKCk7Ci0gICAgICAgICAg
ICBtX3Jlc3BvbnNlQmxvYiA9IEJsb2I6OmNyZWF0ZShzdGQ6Om1vdmUoYmxvYkRhdGEpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIElmIHdlIGVycm9yZWQgb3V0IG9yIGdvdCBu
byBkYXRhLCB3ZSBzdGlsbCByZXR1cm4gYSBibG9iLCBqdXN0IGFuIGVtcHR5IG9uZS4KICAgICAg
ICAgICAgIG1fcmVzcG9uc2VCbG9iID0gQmxvYjo6Y3JlYXRlKCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxNjgzMTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwzNCBAQAorMjAxNC0wNS0wNSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFw
QGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIEJsb2JEYXRhIG9uIGNsaWVudCBzaWRl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI1ODIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUg
Zm9yIFdlYkNvcmUgY2hhbmdlcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyRmlsZUJsb2JVUkwpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlZ2lz
dGVyRmlsZUJsb2JVUkwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6cmVnaXN0ZXJCbG9iVVJMKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFNoYXJl
ZC9GaWxlQVBJL0Jsb2JSZWdpc3RyYXRpb25EYXRhLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBT
aGFyZWQvRmlsZUFQSS9CbG9iUmVnaXN0cmF0aW9uRGF0YS5oOiBSZW1vdmVkLgorICAgICAgICAq
IFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVu
dENvZGVyPEJsb2JQYXJ0Pjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxC
bG9iUGFydD46OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5oOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJGaWxlQmxvYlVSTCk6CisgICAgICAg
IChXZWJLaXQ6OkJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJsb2JVUkwpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5oOgorCiAyMDE0LTA1LTA1ICBT
YW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0NvY29hIFdlYktpdDJdIEFk
ZCBTUEkgdG8gY2xlYXIgYWxsIHZpc2l0ZWQgbGlua3MgaW4gYSBWaXNpdGVkTGlua1Byb3ZpZGVy
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTY4MzE3KQorKysgU291cmNlL1dl
YktpdDIvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI2OSw4ICsyNjksNiBAQCBz
ZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZEF1dGhlbnRp
Y2F0aW9uQ2xpZW50LmNwcAogICAgIFNoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNw
cAogCi0gICAgU2hhcmVkL0ZpbGVBUEkvQmxvYlJlZ2lzdHJhdGlvbkRhdGEuY3BwCi0KICAgICBT
aGFyZWQvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKICAgICBT
aGFyZWQvTmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAKIApJbmRleDog
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTY4MzE3KQorKysgU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoTkVUV09SS19Q
Uk9DRVNTKQogCi0jaW5jbHVkZSAiQmxvYlJlZ2lzdHJhdGlvbkRhdGEuaCIKICNpbmNsdWRlICJD
b25uZWN0aW9uU3RhY2suaCIKICNpbmNsdWRlICJOZXR3b3JrQmxvYlJlZ2lzdHJ5LmgiCiAjaW5j
bHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgpAQCAtMzgsNyAr
MzcsNiBAQAogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRlck1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJTZXNzaW9uVHJhY2tl
ci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQmxvYkRhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Bs
YXRmb3JtQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9wdGlv
bnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgpAQCAtMjI1LDE1ICsy
MjMsMTYgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGVsZQogfQogCiAj
aWYgRU5BQkxFKEJMT0IpCi12b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWdp
c3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IEJsb2JSZWdpc3RyYXRpb25EYXRhJiBk
YXRhLCB1aW50NjRfdCYgcmVzdWx0U2l6ZSkKK3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OnJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBleHRlbnNpb25IYW5kbGUsIGNv
bnN0IFN0cmluZyYgY29udGVudFR5cGUpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0
ZW5zaW9uPj4gZXh0ZW5zaW9uczsKLSAgICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQgPSBkYXRh
LnNhbmRib3hFeHRlbnNpb25zKCkuc2l6ZSgpOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBp
ZiAoUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IGV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZShkYXRhLnNhbmRib3hFeHRlbnNpb25zKClbaV0pKQotICAgICAgICAgICAgZXh0ZW5z
aW9ucy5hcHBlbmQoZXh0ZW5zaW9uKTsKLSAgICB9CisgICAgUmVmUHRyPFNhbmRib3hFeHRlbnNp
b24+IGV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShleHRlbnNpb25IYW5kbGUp
OworCisgICAgTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2hhcmVkKCkucmVnaXN0ZXJGaWxlQmxvYlVS
TCh0aGlzLCB1cmwsIHBhdGgsIGV4dGVuc2lvbi5yZWxlYXNlKCksIGNvbnRlbnRUeXBlKTsKK30K
IAotICAgIHJlc3VsdFNpemUgPSBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFyZWQoKS5yZWdpc3Rl
ckJsb2JVUkwodGhpcywgdXJsLCBkYXRhLnJlbGVhc2VEYXRhKCksIGV4dGVuc2lvbnMpOwordm9p
ZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVS
TCYgdXJsLCBWZWN0b3I8QmxvYlBhcnQ+IGJsb2JQYXJ0cywgY29uc3QgU3RyaW5nJiBjb250ZW50
VHlwZSwgdWludDY0X3QmIHJlc3VsdFNpemUpCit7CisgICAgcmVzdWx0U2l6ZSA9IE5ldHdvcmtC
bG9iUmVnaXN0cnk6OnNoYXJlZCgpLnJlZ2lzdGVyQmxvYlVSTCh0aGlzLCB1cmwsIHN0ZDo6bW92
ZShibG9iUGFydHMpLCBjb250ZW50VHlwZSk7CiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OnJlZ2lzdGVyQmxvYlVSTEZyb21VUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0
IFVSTCYgc3JjVVJMKQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCShyZXZpc2lvbiAx
NjgzMTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw2IEBAIGNsYXNzIFJl
c291cmNlUmVxdWVzdDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIEJsb2JSZWdpc3Ry
YXRpb25EYXRhOwogY2xhc3MgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CiBjbGFzcyBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyOwpA
QCAtODgsNyArODcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVsZXRlQ29va2llKFdlYkNvcmU6
OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1l
KTsKIAogI2lmIEVOQUJMRShCTE9CKQotICAgIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdl
YkNvcmU6OlVSTCYsIGNvbnN0IEJsb2JSZWdpc3RyYXRpb25EYXRhJiwgdWludDY0X3QmIHJlc3Vs
dFNpemUpOworICAgIHZvaWQgcmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwm
LCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGNv
bnN0IFN0cmluZyYgY29udGVudFR5cGUpOworICAgIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0
IFdlYkNvcmU6OlVSTCYsIFZlY3RvcjxXZWJDb3JlOjpCbG9iUGFydD4sIGNvbnN0IFN0cmluZyYg
Y29udGVudFR5cGUsIHVpbnQ2NF90JiByZXN1bHRTaXplKTsKICAgICB2b2lkIHJlZ2lzdGVyQmxv
YlVSTEZyb21VUkwoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV2ViQ29yZTo6VVJMJiBzcmNV
UkwpOwogICAgIHZvaWQgcmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UoY29uc3QgV2ViQ29yZTo6VVJM
JiwgY29uc3QgV2ViQ29yZTo6VVJMJiBzcmNVUkwsIGludDY0X3Qgc3RhcnQsIGludDY0X3QgZW5k
LCB1aW50NjRfdCYgcmVzdWx0U2l6ZSk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25z
dCBXZWJDb3JlOjpVUkwmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxNjgzMTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNyArNDQsOCBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2VzCiAgICAgRGVsZXRlQ29va2llKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IFdlYkNvcmU6OlVSTCB1cmwsIFN0cmluZyBjb29raWVOYW1lKQogCiAjaWYgRU5BQkxFKEJMT0Ip
Ci0gICAgUmVnaXN0ZXJCbG9iVVJMKFdlYkNvcmU6OlVSTCB1cmwsIFdlYktpdDo6QmxvYlJlZ2lz
dHJhdGlvbkRhdGEgZGF0YSkgLT4gKHVpbnQ2NF90IHJlc3VsdFNpemUpCisgICAgUmVnaXN0ZXJG
aWxlQmxvYlVSTChXZWJDb3JlOjpVUkwgdXJsLCBTdHJpbmcgcGF0aCwgV2ViS2l0OjpTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGUgZXh0ZW5zaW9uSGFuZGxlLCBTdHJpbmcgY29udGVudFR5cGUpCisg
ICAgUmVnaXN0ZXJCbG9iVVJMKFdlYkNvcmU6OlVSTCB1cmwsIFZlY3RvcjxXZWJDb3JlOjpCbG9i
UGFydD4gYmxvYlBhcnRzLCBTdHJpbmcgY29udGVudFR5cGUpIC0+ICh1aW50NjRfdCByZXN1bHRT
aXplKQogICAgIFJlZ2lzdGVyQmxvYlVSTEZyb21VUkwoV2ViQ29yZTo6VVJMIHVybCwgV2ViQ29y
ZTo6VVJMIHNyY1VSTCkKICAgICBSZWdpc3RlckJsb2JVUkxGb3JTbGljZShXZWJDb3JlOjpVUkwg
dXJsLCBXZWJDb3JlOjpVUkwgc3JjVVJMLCBpbnQ2NF90IHN0YXJ0LCBpbnQ2NF90IGVuZCkgLT4g
KHVpbnQ2NF90IHJlc3VsdFNpemUpCiAgICAgVW5yZWdpc3RlckJsb2JVUkwoV2ViQ29yZTo6VVJM
IHVybCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29y
a0Jsb2JSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMTY4MzE3KQor
KysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lz
dHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShCTE9C
KSAmJiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQogCiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lv
bi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQmxvYlBhcnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Js
b2JSZWdpc3RyeUltcGwuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNs
dWRlIDx3dGYvUnVuTG9vcC5oPgpAQCAtNDgsMjIgKzQ5LDQwIEBAIE5ldHdvcmtCbG9iUmVnaXN0
cnk6Ok5ldHdvcmtCbG9iUmVnaXN0cnkKIHsKIH0KIAotdWludDY0X3QgTmV0d29ya0Jsb2JSZWdp
c3RyeTo6cmVnaXN0ZXJCbG9iVVJMKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25u
ZWN0aW9uLCBjb25zdCBVUkwmIHVybCwgc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPiBkYXRhLCBj
b25zdCBWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiYgbmV3U2FuZGJveEV4dGVuc2lv
bnMpCit2b2lkIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyRmlsZUJsb2JVUkwoTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHBhdGgsIFBhc3NSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gc2FuZGJveEV4dGVu
c2lvbiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKIHsKICAgICBBU1NFUlQoIW1fc2FuZGJv
eEV4dGVuc2lvbnMuY29udGFpbnModXJsLnN0cmluZygpKSk7CiAKLSAgICAvLyBDb21iaW5lIG5l
dyBleHRlbnNpb25zIGZvciBGaWxlIGl0ZW1zIGFuZCBleGlzdGluZyBleHRlbnNpb25zIGZvciBp
bm5lciBCbG9iIGl0ZW1zLgotICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IHNh
bmRib3hFeHRlbnNpb25zID0gbmV3U2FuZGJveEV4dGVuc2lvbnM7Ci0gICAgY29uc3QgQmxvYkRh
dGFJdGVtTGlzdCYgaXRlbXMgPSBkYXRhLT5pdGVtcygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
LCBjb3VudCA9IGl0ZW1zLnNpemUoKTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKGl0
ZW1zW2ldLnR5cGUgPT0gQmxvYkRhdGFJdGVtOjpCbG9iKQotICAgICAgICAgICAgc2FuZGJveEV4
dGVuc2lvbnMuYXBwZW5kVmVjdG9yKG1fc2FuZGJveEV4dGVuc2lvbnMuZ2V0KGl0ZW1zW2ldLnVy
bC5zdHJpbmcoKSkpOworICAgIGJsb2JSZWdpc3RyeSgpLnJlZ2lzdGVyRmlsZUJsb2JVUkwodXJs
LCBwYXRoLCBjb250ZW50VHlwZSk7CisKKyAgICBpZiAoc2FuZGJveEV4dGVuc2lvbikgeworICAg
ICAgICBWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBleHRlbnNpb25zVmVjdG9yOwor
ICAgICAgICBleHRlbnNpb25zVmVjdG9yLmFwcGVuZChzYW5kYm94RXh0ZW5zaW9uKTsKKyAgICAg
ICAgbV9zYW5kYm94RXh0ZW5zaW9ucy5hZGQodXJsLnN0cmluZygpLCBzdGQ6Om1vdmUoZXh0ZW5z
aW9uc1ZlY3RvcikpOworICAgIH0KKworICAgIEFTU0VSVCghbV9ibG9ic0ZvckNvbm5lY3Rpb24u
Z2V0KGNvbm5lY3Rpb24pLmNvbnRhaW5zKHVybCkpOworICAgIEJsb2JGb3JDb25uZWN0aW9uTWFw
OjppdGVyYXRvciBtYXBJdGVyYXRvciA9IG1fYmxvYnNGb3JDb25uZWN0aW9uLmZpbmQoY29ubmVj
dGlvbik7CisgICAgaWYgKG1hcEl0ZXJhdG9yID09IG1fYmxvYnNGb3JDb25uZWN0aW9uLmVuZCgp
KQorICAgICAgICBtYXBJdGVyYXRvciA9IG1fYmxvYnNGb3JDb25uZWN0aW9uLmFkZChjb25uZWN0
aW9uLCBIYXNoU2V0PFVSTD4oKSkuaXRlcmF0b3I7CisgICAgbWFwSXRlcmF0b3ItPnZhbHVlLmFk
ZCh1cmwpOworfQorCit1aW50NjRfdCBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JV
UkwoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYg
dXJsLCBWZWN0b3I8V2ViQ29yZTo6QmxvYlBhcnQ+IGJsb2JQYXJ0cywgY29uc3QgU3RyaW5nJiBj
b250ZW50VHlwZSkKK3sKKyAgICBBU1NFUlQoIW1fc2FuZGJveEV4dGVuc2lvbnMuY29udGFpbnMo
dXJsLnN0cmluZygpKSk7CisKKyAgICAvLyBDb21iaW5lIGV4aXN0aW5nIGV4dGVuc2lvbnMgZm9y
IGlubmVyIEJsb2IgaXRlbXMuCisgICAgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4g
c2FuZGJveEV4dGVuc2lvbnM7CisgICAgZm9yIChjb25zdCBCbG9iUGFydCYgcGFydCA6IGJsb2JQ
YXJ0cykgeworICAgICAgICBpZiAocGFydC50eXBlKCkgPT0gQmxvYlBhcnQ6OkJsb2IpCisgICAg
ICAgICAgICBzYW5kYm94RXh0ZW5zaW9ucy5hcHBlbmRWZWN0b3IobV9zYW5kYm94RXh0ZW5zaW9u
cy5nZXQocGFydC51cmwoKS5zdHJpbmcoKSkpOwogICAgIH0KIAotICAgIHVpbnQ2NF90IHJlc3Vs
dFNpemUgPSBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckJsb2JVUkwodXJsLCBzdGQ6Om1vdmUoZGF0
YSkpOworICAgIHVpbnQ2NF90IHJlc3VsdFNpemUgPSBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckJs
b2JVUkwodXJsLCBzdGQ6Om1vdmUoYmxvYlBhcnRzKSwgY29udGVudFR5cGUpOwogCiAgICAgaWYg
KCFzYW5kYm94RXh0ZW5zaW9ucy5pc0VtcHR5KCkpCi0gICAgICAgIG1fc2FuZGJveEV4dGVuc2lv
bnMuYWRkKHVybC5zdHJpbmcoKSwgc2FuZGJveEV4dGVuc2lvbnMpOworICAgICAgICBtX3NhbmRi
b3hFeHRlbnNpb25zLmFkZCh1cmwuc3RyaW5nKCksIHN0ZDo6bW92ZShzYW5kYm94RXh0ZW5zaW9u
cykpOwogCiAgICAgQVNTRVJUKCFtX2Jsb2JzRm9yQ29ubmVjdGlvbi5nZXQoY29ubmVjdGlvbiku
Y29udGFpbnModXJsKSk7CiAgICAgQmxvYkZvckNvbm5lY3Rpb25NYXA6Oml0ZXJhdG9yIG1hcEl0
ZXJhdG9yID0gbV9ibG9ic0ZvckNvbm5lY3Rpb24uZmluZChjb25uZWN0aW9uKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0
d29ya0Jsb2JSZWdpc3RyeS5oCShyZXZpc2lvbiAxNjgzMTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIEJsb2JEYXRhOworY2xhc3MgQmxvYlBhcnQ7CiB9CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewpAQCAtNDcsNyArNDcsOCBAQCBwdWJsaWM6CiAgICAgTmV0d29ya0Jsb2JS
ZWdpc3RyeSgpOwogICAgIHN0YXRpYyBOZXR3b3JrQmxvYlJlZ2lzdHJ5JiBzaGFyZWQoKTsKIAot
ICAgIHVpbnQ2NF90IHJlZ2lzdGVyQmxvYlVSTChOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cyosIGNvbnN0IFdlYkNvcmU6OlVSTCYsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpCbG9iRGF0
YT4sIGNvbnN0IFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+Jik7CisgICAgdm9pZCBy
ZWdpc3RlckZpbGVCbG9iVVJMKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiwgY29uc3Qg
V2ViQ29yZTo6VVJMJiwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzUmVmUHRyPFNhbmRib3hFeHRl
bnNpb24+LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsKKyAgICB1aW50NjRfdCByZWdpc3Rl
ckJsb2JVUkwoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBjb25zdCBXZWJDb3JlOjpV
UkwmLCBWZWN0b3I8V2ViQ29yZTo6QmxvYlBhcnQ+LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBl
KTsKICAgICB2b2lkIHJlZ2lzdGVyQmxvYlVSTChOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cyosIGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYgc3JjVVJMKTsKICAg
ICB1aW50NjRfdCByZWdpc3RlckJsb2JVUkxGb3JTbGljZShOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcyosIGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYgc3JjVVJM
LCBpbnQ2NF90IHN0YXJ0LCBpbnQ2NF90IGVuZCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyQmxvYlVS
TChOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIGNvbnN0IFdlYkNvcmU6OlVSTCYpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAJKHJldmlzaW9uIDE2ODMxNykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0Jsb2JQYXJ0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0Nvb2tpZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ3JlZGVudGlhbC5oPgpA
QCAtMTk3Miw0ICsxOTczLDQ1IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxTZXNzaW9uSUQ+OjpkZWNv
ZGUoQXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBBcmd1bWVudENvZGVyPEJsb2JQYXJ0
Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQmxvYlBhcnQmIGJsb2JQ
YXJ0KQoreworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGJsb2JQYXJ0LnR5
cGUoKSk7CisgICAgc3dpdGNoIChibG9iUGFydC50eXBlKCkpIHsKKyAgICBjYXNlIEJsb2JQYXJ0
OjpEYXRhOgorICAgICAgICBlbmNvZGVyIDw8IGJsb2JQYXJ0LmRhdGEoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBCbG9iUGFydDo6QmxvYjoKKyAgICAgICAgZW5jb2RlciA8PCBibG9iUGFy
dC51cmwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitib29sIEFyZ3VtZW50Q29kZXI8
QmxvYlBhcnQ+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBCbG9iUGFydCYgYmxv
YlBhcnQpCit7CisgICAgdWludDMyX3QgdHlwZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHR5
cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIEJsb2JQYXJ0OjpEYXRhOiB7CisgICAgICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBibG9iUGFydCA9IEJsb2JQYXJ0KHN0ZDo6bW92ZShkYXRhKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEJsb2JQYXJ0OjpCbG9iOiB7CisgICAgICAgIFN0cmluZyB1
cmw7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodXJsKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgYmxvYlBhcnQgPSBCbG9iUGFydChVUkwoVVJMKCksIHVybCkpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBJUEMKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHJl
dmlzaW9uIDE2ODMxNykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2U7CitjbGFzcyBCbG9iUGFydDsKIGNsYXNzIENlcnRpZmljYXRlSW5mbzsKIGNsYXNzIENvbG9y
OwogY2xhc3MgQ3JlZGVudGlhbDsKQEAgLTQyNCw2ICs0MjUsMTEgQEAgdGVtcGxhdGU8PiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVu
dERlY29kZXImLCBXZWJDb3JlOjpTZXNzaW9uSUQmKTsKIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6QmxvYlBhcnQ+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6QmxvYlBhcnQmKTsKKyAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6QmxvYlBhcnQmKTsKK307
CisKIH0gLy8gbmFtZXNwYWNlIElQQwogCiAjZW5kaWYgLy8gV2ViQ29yZUFyZ3VtZW50Q29kZXJz
X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9GaWxlQVBJL0Jsb2JSZWdpc3RyYXRpb25E
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRmlsZUFQSS9CbG9i
UmVnaXN0cmF0aW9uRGF0YS5jcHAJKHJldmlzaW9uIDE2ODMxNykKKysrIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9GaWxlQVBJL0Jsb2JSZWdpc3RyYXRpb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwxNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJCbG9iUmVnaXN0cmF0aW9uRGF0YS5oIgotCi0jaWYgRU5BQkxFKEJMT0IpICYmIEVOQUJM
RShORVRXT1JLX1BST0NFU1MpCi0KLSNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgotI2luY2x1
ZGUgIkRhdGFSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIK
LSNpbmNsdWRlIDxXZWJDb3JlL0Jsb2JEYXRhLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotQmxvYlJlZ2lzdHJhdGlvbkRhdGE6OkJsb2JSZWdp
c3RyYXRpb25EYXRhKCkKLXsKLX0KLQotQmxvYlJlZ2lzdHJhdGlvbkRhdGE6OkJsb2JSZWdpc3Ry
YXRpb25EYXRhKHN0ZDo6dW5pcXVlX3B0cjxCbG9iRGF0YT4gZGF0YSkKLSAgICA6IG1fZGF0YShz
dGQ6Om1vdmUoZGF0YSkpCi17Ci0gICAgY29uc3QgQmxvYkRhdGFJdGVtTGlzdCYgaXRlbXMgPSBt
X2RhdGEtPml0ZW1zKCk7Ci0gICAgc2l6ZV90IGZpbGVDb3VudCA9IDA7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDAsIGNvdW50ID0gaXRlbXMuc2l6ZSgpOyBpIDwgY291bnQ7ICsraSkgewotICAgICAg
ICAvLyBGaWxlIHBhdGggY2FuIGJlIGVtcHR5IHdoZW4gc3VibWl0dGluZyBhIGZvcm0gZmlsZSBp
bnB1dCB3aXRob3V0IGEgZmlsZSwgc2VlIGJ1ZyAxMTE3NzguCi0gICAgICAgIGlmIChpdGVtc1tp
XS50eXBlID09IEJsb2JEYXRhSXRlbTo6RmlsZSAmJiAhaXRlbXNbaV0ucGF0aC5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICArK2ZpbGVDb3VudDsKLSAgICB9Ci0KLSAgICBtX3NhbmRib3hFeHRlbnNp
b25zLmFsbG9jYXRlKGZpbGVDb3VudCk7Ci0gICAgc2l6ZV90IGV4dGVuc2lvbkluZGV4ID0gMDsK
LSAgICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQgPSBpdGVtcy5zaXplKCk7IGkgPCBjb3VudDsg
KytpKSB7Ci0gICAgICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA9IGl0ZW1zW2ldOwotICAg
ICAgICBpZiAoaXRlbS50eXBlID09IEJsb2JEYXRhSXRlbTo6RmlsZSAmJiAhaXRlbXNbaV0ucGF0
aC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUo
aXRlbS5wYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpSZWFkT25seSwgbV9zYW5kYm94RXh0ZW5zaW9u
c1tleHRlbnNpb25JbmRleCsrXSk7Ci0gICAgfQotfQotCi1CbG9iUmVnaXN0cmF0aW9uRGF0YTo6
fkJsb2JSZWdpc3RyYXRpb25EYXRhKCkKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRh
PiBCbG9iUmVnaXN0cmF0aW9uRGF0YTo6cmVsZWFzZURhdGEoKSBjb25zdAotewotICAgIHJldHVy
biBzdGQ6Om1vdmUobV9kYXRhKTsKLX0KLQotdm9pZCBCbG9iUmVnaXN0cmF0aW9uRGF0YTo6ZW5j
b2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIg
PDwgbV9kYXRhLT5jb250ZW50VHlwZSgpOwotCi0gICAgY29uc3QgQmxvYkRhdGFJdGVtTGlzdCYg
aXRlbXMgPSBtX2RhdGEtPml0ZW1zKCk7Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oaXRlbXMuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQgPSBpdGVt
cy5zaXplKCk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYg
aXRlbSA9IGl0ZW1zW2ldOwotICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90
PihpdGVtLnR5cGUpOwotICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkgewotICAgICAgICBjYXNl
IEJsb2JEYXRhSXRlbTo6RGF0YToKLSAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIHdheSB0byBj
cmVhdGUgYSBwYXJ0aWFsIGRhdGEgaXRlbS4KLSAgICAgICAgICAgIEFTU0VSVCghaXRlbS5vZmZz
ZXQpOwotICAgICAgICAgICAgQVNTRVJUKGl0ZW0ubGVuZ3RoID09IEJsb2JEYXRhSXRlbTo6dG9F
bmRPZkZpbGUpOwotICAgICAgICAgICAgZW5jb2RlciA8PCBJUEM6OkRhdGFSZWZlcmVuY2UocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaXRlbS5kYXRhLT5kYXRhKCkpLCBpdGVtLmRh
dGEtPmxlbmd0aCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsb2JEYXRh
SXRlbTo6RmlsZToKLSAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8aW50NjRfdD4o
aXRlbS5vZmZzZXQpOwotICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxpbnQ2NF90
PihpdGVtLmxlbmd0aCk7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IGl0ZW0uZXhwZWN0ZWRNb2Rp
ZmljYXRpb25UaW1lOwotICAgICAgICAgICAgZW5jb2RlciA8PCBpdGVtLnBhdGg7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkJsb2I6Ci0gICAgICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGludDY0X3Q+KGl0ZW0ub2Zmc2V0KTsKLSAgICAgICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oaXRlbS5sZW5ndGgpOwotICAgICAg
ICAgICAgZW5jb2RlciA8PCBpdGVtLnVybDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgZW5jb2RlciA8PCBtX3NhbmRib3hFeHRlbnNpb25zOwotfQotCi1ib29s
IEJsb2JSZWdpc3RyYXRpb25EYXRhOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29k
ZXIsIEJsb2JSZWdpc3RyYXRpb25EYXRhJiByZXN1bHQpCi17Ci0gICAgQVNTRVJUKCFyZXN1bHQu
bV9kYXRhKTsKLSAgICByZXN1bHQubV9kYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxCbG9iRGF0YT4o
KTsKLQotICAgIFN0cmluZyBjb250ZW50VHlwZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNv
bnRlbnRUeXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5tX2RhdGEtPnNl
dENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKTsKLQotICAgIHVpbnQ2NF90IGl0ZW1Db3VudDsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGl0ZW1Db3VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBpdGVtQ291bnQ7ICsraSkgewotICAgICAg
ICB1aW50MzJfdCB0eXBlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHR5cGUpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAg
Y2FzZSBCbG9iRGF0YUl0ZW06OkRhdGE6IHsKLSAgICAgICAgICAgIElQQzo6RGF0YVJlZmVyZW5j
ZSBkYXRhOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBSZWZQdHI8UmF3RGF0YT4gcmF3RGF0
YSA9IFJhd0RhdGE6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmRh
dGEoKSksIGRhdGEuc2l6ZSgpKTsKLSAgICAgICAgICAgIHJlc3VsdC5tX2RhdGEtPmFwcGVuZERh
dGEocmF3RGF0YS5yZWxlYXNlKCksIDAsIEJsb2JEYXRhSXRlbTo6dG9FbmRPZkZpbGUpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkZp
bGU6IHsKLSAgICAgICAgICAgIGludDY0X3Qgb2Zmc2V0OwotICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShvZmZzZXQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGludDY0X3QgbGVuZ3RoOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShs
ZW5ndGgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGRvdWJs
ZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWU7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgU3RyaW5nIHBhdGg7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHBhdGgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IHJlc3VsdC5tX2RhdGEtPmFwcGVuZEZpbGUocGF0aCwgb2Zmc2V0LCBsZW5ndGgsIGV4cGVjdGVk
TW9kaWZpY2F0aW9uVGltZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEJsb2JEYXRhSXRlbTo6QmxvYjogewotICAgICAgICAgICAgaW50NjRfdCBvZmZzZXQ7
Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG9mZnNldCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaW50NjRfdCBsZW5ndGg7Ci0gICAgICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGxlbmd0aCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgU3RyaW5nIHVybDsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUodXJsKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBy
ZXN1bHQubV9kYXRhLT5hcHBlbmRCbG9iKFVSTChVUkwoKSwgdXJsKSwgb2Zmc2V0LCBsZW5ndGgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0Lm1fc2FuZGJveEV4dGVuc2lvbnMpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEJMT0Ip
ICYmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
RmlsZUFQSS9CbG9iUmVnaXN0cmF0aW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9GaWxlQVBJL0Jsb2JSZWdpc3RyYXRpb25EYXRhLmgJKHJldmlzaW9uIDE2ODMx
NykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9GaWxlQVBJL0Jsb2JSZWdpc3RyYXRpb25EYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
QmxvYlJlZ2lzdHJhdGlvbkRhdGFfaAotI2RlZmluZSBCbG9iUmVnaXN0cmF0aW9uRGF0YV9oCi0K
LSNpZiBFTkFCTEUoQkxPQikgJiYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKLQotI2luY2x1ZGUg
IlNhbmRib3hFeHRlbnNpb24uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQmxvYkRh
dGE7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBCbG9iUmVnaXN0cmF0aW9uRGF0
YSB7Ci1XVEZfTUFLRV9OT05DT1BZQUJMRShCbG9iUmVnaXN0cmF0aW9uRGF0YSk7Ci1wdWJsaWM6
Ci0gICAgQmxvYlJlZ2lzdHJhdGlvbkRhdGEoKTsKLSAgICBCbG9iUmVnaXN0cmF0aW9uRGF0YShz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6QmxvYkRhdGE+KTsKLSAgICB+QmxvYlJlZ2lzdHJhdGlv
bkRhdGEoKTsKLQotICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7
Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgQmxvYlJlZ2lz
dHJhdGlvbkRhdGEmKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpCbG9iRGF0YT4g
cmVsZWFzZURhdGEoKSBjb25zdDsKLSAgICBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVB
cnJheSYgc2FuZGJveEV4dGVuc2lvbnMoKSBjb25zdCB7IHJldHVybiBtX3NhbmRib3hFeHRlbnNp
b25zOyB9Ci0KLXByaXZhdGU6Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
QmxvYkRhdGE+IG1fZGF0YTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBtX3Nh
bmRib3hFeHRlbnNpb25zOwotfTsKLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEJMT0IpICYmIEVO
QUJMRShORVRXT1JLX1BST0NFU1MpCi0KLSNlbmRpZiAvLyBCbG9iUmVnaXN0cmF0aW9uRGF0YV9o
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxNjgzMTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE1MjgsOCArMTUyOCw2IEBA
CiAJCUUxNTI1NTFCMTcwMTE4MTkwMDNEN0FEQiAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkZXJNZXNz
YWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1
MjU1MTkxNzAxMTgxOTAwM0Q3QURCIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlck1lc3NhZ2VzLmgg
Ki87IH07CiAJCUUxNzA4NzZCMTZENkNBNjkwMEY5OTIyNiAvKiBCbG9iUmVnaXN0cnlQcm94eS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTcwODc2
OTE2RDZDQTY5MDBGOTkyMjYgLyogQmxvYlJlZ2lzdHJ5UHJveHkuY3BwICovOyB9OwogCQlFMTcw
ODc2QzE2RDZDQTY5MDBGOTkyMjYgLyogQmxvYlJlZ2lzdHJ5UHJveHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNzA4NzZBMTZENkNBNjkwMEY5OTIy
NiAvKiBCbG9iUmVnaXN0cnlQcm94eS5oICovOyB9OwotCQlFMTcwODc3MDE2RDZDRkU1MDBGOTky
MjYgLyogQmxvYlJlZ2lzdHJhdGlvbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTE3MDg3NkUxNkQ2Q0ZFNDAwRjk5MjI2IC8qIEJsb2JSZWdp
c3RyYXRpb25EYXRhLmNwcCAqLzsgfTsKLQkJRTE3MDg3NzExNkQ2Q0ZFNTAwRjk5MjI2IC8qIEJs
b2JSZWdpc3RyYXRpb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTcwODc2RjE2RDZDRkU1MDBGOTkyMjYgLyogQmxvYlJlZ2lzdHJhdGlvbkRh
dGEuaCAqLzsgfTsKIAkJRTE3OTA4OEQxNjlCQUE2MjAwNjkwNEM3IC8qIFNlY0l0ZW1TaGltLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOEU2OTQ3
MTY5Qjc3QzgwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbS5jcHAgKi87IH07CiAJCUUxNzkwODhGMTY5
QkFBNkEwMDY5MDRDNyAvKiBTZWNJdGVtU2hpbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4RTY5NDgxNjlCNzdDODAwOUI2NjcwIC8qIFNlY0l0ZW1T
aGltLmggKi87IH07CiAJCUUxNzkwODkwMTY5QkFBN0YwMDY5MDRDNyAvKiBTZWNJdGVtU2hpbU1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMThFNjkxMTE2OUI2NjdCMDA5QjY2NzAgLyogU2VjSXRlbVNoaW1NZXNzYWdlUmVj
ZWl2ZXIuY3BwICovOyB9OwpAQCAtMzQ0MCw3ICszNDM4LDcgQEAKIAkJREY1OEM2MzExMzcxQUM1
ODAwRjlBMzdDIC8qIE5hdGl2ZVdlYldoZWVsRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTmF0aXZlV2ViV2hlZWxFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlERjU4QzYzNTEzNzFBQ0EwMDBGOUEzN0MgLyogTmF0aXZlV2ViV2hlZWxFdmVudE1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5hdGl2ZVdlYldo
ZWVsRXZlbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMDVGRTUzMThE
N0I5REUwMDhGNTdBOCAvKiBFZGl0aW5nUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRWRpdGluZ1JhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUx
MTVDNzE1MTkwRjhBMjUwMEVDQzUxNiAvKiBjb20uYXBwbGUuV2ViS2l0LkRhdGFiYXNlcy5zYiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IGZpbGU7IHBhdGggPSBjb20uYXBwbGUuV2ViS2l0LkRhdGFiYXNlcy5zYjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTExNUM3MTUxOTBGOEEyNTAwRUNDNTE2IC8qIGNv
bS5hcHBsZS5XZWJLaXQuRGF0YWJhc2VzLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvbS5h
cHBsZS5XZWJLaXQuRGF0YWJhc2VzLnNiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MTMzRkQ4OTE0MjNERDdGMDBGQzdCRkIgLyogV2ViS2l0LmljbnMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS5pY25zOyBuYW1lID0gV2ViS2l0
LmljbnM7IHBhdGggPSBSZXNvdXJjZXMvV2ViS2l0LmljbnM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUxMzgzM0VCMTg5QzMzQzgwMDFFMjM1MCAvKiBMb2NhbFN0b3JhZ2VEZXRhaWxz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2FsU3RvcmFnZURldGFpbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE0QTk1NDcxNkUwMTZBNDAwNjhERTgy
IC8qIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmNw
cDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM0NTIsOCArMzQ1MCw2IEBACiAJ
CUUxNTI1NTE5MTcwMTE4MTkwMDNEN0FEQiAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkZXJNZXNzYWdl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTcwODc2OTE2RDZD
QTY5MDBGOTkyMjYgLyogQmxvYlJlZ2lzdHJ5UHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQmxvYlJlZ2lzdHJ5UHJveHkuY3BwOyBwYXRoID0gV2ViUHJvY2Vz
cy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTE3MDg3NkExNkQ2Q0E2OTAwRjk5MjI2IC8qIEJsb2JSZWdpc3RyeVByb3h5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJsb2JSZWdpc3RyeVByb3h5Lmg7IHBhdGgg
PSBXZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRTE3MDg3NkUxNkQ2Q0ZFNDAwRjk5MjI2IC8qIEJsb2JSZWdpc3RyYXRp
b25EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEJsb2JSZWdp
c3RyYXRpb25EYXRhLmNwcDsgcGF0aCA9IEZpbGVBUEkvQmxvYlJlZ2lzdHJhdGlvbkRhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTcwODc2RjE2RDZDRkU1MDBGOTkyMjYg
LyogQmxvYlJlZ2lzdHJhdGlvbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQmxvYlJlZ2lzdHJhdGlvbkRhdGEuaDsgcGF0aCA9IEZpbGVBUEkvQmxvYlJlZ2lzdHJhdGlv
bkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE3OThDNzcxNkU2ODE4ODAw
MjQwMTM5IC8qIE5ldHdvcmtCbG9iUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHA7IHBhdGggPSBOZXR3b3JrUHJv
Y2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFMTc5OEM3ODE2RTY4MTg4MDAyNDAxMzkgLyogTmV0d29ya0Jsb2JSZWdpc3Ry
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrQmxvYlJlZ2lzdHJ5
Lmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE3OUZEOUIxMzREMzgwNjAwMTVCODgzIC8q
IEFyZ3VtZW50Q29kZXJzTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFy
Z3VtZW50Q29kZXJzTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NTc3LDgg
KzY1NzMsNiBAQAogCQlFMTcwODc3MjE2RDZDRkVDMDBGOTkyMjYgLyogRmlsZUFQSSAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJRTE3MDg3NkUxNkQ2Q0ZF
NDAwRjk5MjI2IC8qIEJsb2JSZWdpc3RyYXRpb25EYXRhLmNwcCAqLywKLQkJCQlFMTcwODc2RjE2
RDZDRkU1MDBGOTkyMjYgLyogQmxvYlJlZ2lzdHJhdGlvbkRhdGEuaCAqLywKIAkJCSk7CiAJCQlu
YW1lID0gRmlsZUFQSTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC02NjcwLDcgKzY2
NjQsNiBAQAogCQkJCTUxMkY1ODk5MTJBODgzODgwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbkRl
Y2lzaW9uTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOEU4RUY5MTZCMjA5MUMwMEU5
MTQyOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkY1
OEEzMTJBODgzQUQwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJNZXNzYWdlcy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJRTE3MDg3NzExNkQ2Q0ZFNTAwRjk5MjI2IC8qIEJsb2JSZWdpc3Ry
YXRpb25EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTcwODc2QzE2RDZDQTY5MDBGOTkyMjYg
LyogQmxvYlJlZ2lzdHJ5UHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTRGNjAxNDMyMTU1QzVB
QTIwMDFGQkRFMCAvKiBCbG9ja2luZ1Jlc3BvbnNlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MUUzNTFDQjE4MEYyQ0NDMDBFNTNCRTkgLyogSURCVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywK
QEAgLTgxNTQsNyArODE0Nyw2IEBACiAJCQkJNTE4RThFRjgxNkIyMDkxQzAwRTkxNDI5IC8qIEF1
dGhlbnRpY2F0aW9uTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MThFOEVGQjE2QjIw
OTFDMDBFOTE0MjkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyLm1hYy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTUxMkY1OEEyMTJBODgzQUQwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTE3MDg3NzAxNkQ2Q0ZFNTAw
Rjk5MjI2IC8qIEJsb2JSZWdpc3RyYXRpb25EYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUx
NzA4NzZCMTZENkNBNjkwMEY5OTIyNiAvKiBCbG9iUmVnaXN0cnlQcm94eS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0YxODYzODE2N0QwNzFFMDBBMUE4NUEgLyogQ2FjaGVNb2RlbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQUEyRTUxRTEyRTRDMDVFMDBCQzQ5NjYgLyogQ0dVdGlsaXRpZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVB
UEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5jcHAJKHJldmlzaW9uIDE2ODMxNykK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDIzICsyOCwzNCBAQAogCiAjaWYgRU5BQkxFKEJMT0Ip
ICYmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCiAKLSNpbmNsdWRlICJCbG9iUmVnaXN0cmF0aW9u
RGF0YS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9CbG9iRGF0YS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iUmVnaXN0cnlQcm94eTo6cmVn
aXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBzdGQ6OnVuaXF1ZV9wdHI8QmxvYkRhdGE+IGJs
b2JEYXRhKQordm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJGaWxlQmxvYlVSTChjb25z
dCBXZWJDb3JlOjpVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnRUeXBlKQoreworICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29y
a1Byb2Nlc3MoKSk7CisKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgZXh0ZW5zaW9uSGFu
ZGxlOworCisgICAgLy8gRmlsZSBwYXRoIGNhbiBiZSBlbXB0eSB3aGVuIHN1Ym1pdHRpbmcgYSBm
b3JtIGZpbGUgaW5wdXQgd2l0aG91dCBhIGZpbGUsIHNlZSBidWcgMTExNzc4LgorICAgIGlmICgh
cGF0aC5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShw
YXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpSZWFkT25seSwgZXh0ZW5zaW9uSGFuZGxlKTsKKworICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lzdGVyRmls
ZUJsb2JVUkwodXJsLCBwYXRoLCBleHRlbnNpb25IYW5kbGUsIGNvbnRlbnRUeXBlKSwgMCk7Cit9
CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJCbG9iVVJM
KGNvbnN0IFVSTCYgdXJsLCBWZWN0b3I8QmxvYlBhcnQ+IGJsb2JQYXJ0cywgY29uc3QgU3RyaW5n
JiBjb250ZW50VHlwZSkKIHsKICAgICBBU1NFUlQoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05l
dHdvcmtQcm9jZXNzKCkpOwogCiAgICAgdWludDY0X3QgcmVzdWx0U2l6ZTsKLSAgICBpZiAoIVdl
YlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWdpc3RlckJs
b2JVUkwodXJsLCBCbG9iUmVnaXN0cmF0aW9uRGF0YShzdGQ6Om1vdmUoYmxvYkRhdGEpKSksIE1l
c3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVnaXN0ZXJCbG9iVVJMOjpS
ZXBseShyZXN1bHRTaXplKSwgMCkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3
b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVnaXN0ZXJCbG9iVVJMKHVybCwgYmxvYlBhcnRzLCBj
b250ZW50VHlwZSksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVn
aXN0ZXJCbG9iVVJMOjpSZXBseShyZXN1bHRTaXplKSwgMCkpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIHJldHVybiByZXN1bHRTaXplOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmgJKHJldmlzaW9uIDE2ODMx
NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiwxMCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotY2xhc3MgQmxvYlJlZ2lzdHJ5UHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6QmxvYlJlZ2lz
dHJ5IHsKK2NsYXNzIEJsb2JSZWdpc3RyeVByb3h5IGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkJs
b2JSZWdpc3RyeSB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgcmVn
aXN0ZXJCbG9iVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpCbG9iRGF0YT4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZpbGVCbG9i
VVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5n
JiBjb250ZW50VHlwZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcg
cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYsIFZlY3RvcjxXZWJDb3JlOjpCbG9i
UGFydD4sIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV2ViQ29yZTo6
VVJMJiBzcmNVUkwpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyQmxvYlVS
TChjb25zdCBXZWJDb3JlOjpVUkwmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxv
bmcgbG9uZyByZWdpc3RlckJsb2JVUkxGb3JTbGljZShjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25z
dCBXZWJDb3JlOjpVUkwmIHNyY1VSTCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgZW5kKSBv
dmVycmlkZTsK
</data>
<flag name="review"
          id="255247"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>