<?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>145507</bug_id>
          
          <creation_ts>2015-05-31 22:31:32 -0700</creation_ts>
          <short_desc>Use modern for-loops in WebCore/Modules - 1</short_desc>
          <delta_ts>2015-06-01 20:13:53 -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="Hunseop Jeong">hs85.jeong</reporter>
          <assigned_to name="Hunseop Jeong">hs85.jeong</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1098453</commentid>
    <comment_count>0</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-05-31 22:31:32 -0700</bug_when>
    <thetext>Replaced for loops with range-based for loops in WebCore/Modules - 1 of 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098455</commentid>
    <comment_count>1</comment_count>
      <attachid>253989</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-05-31 23:45:51 -0700</bug_when>
    <thetext>Created attachment 253989
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098527</commentid>
    <comment_count>2</comment_count>
      <attachid>253989</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-01 10:19:22 -0700</bug_when>
    <thetext>Comment on attachment 253989
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBKey.h:72
&gt; +            for (auto&amp;  resultKey : result) {

Extra space here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098689</commentid>
    <comment_count>3</comment_count>
      <attachid>254040</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-06-01 19:01:20 -0700</bug_when>
    <thetext>Created attachment 254040
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098702</commentid>
    <comment_count>4</comment_count>
      <attachid>254040</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-01 20:13:50 -0700</bug_when>
    <thetext>Comment on attachment 254040
Patch

Clearing flags on attachment: 254040

Committed r185101: &lt;http://trac.webkit.org/changeset/185101&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098703</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-01 20:13:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253989</attachid>
            <date>2015-05-31 23:45:51 -0700</date>
            <delta_ts>2015-06-01 19:01:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145507-20150601154532.patch</filename>
            <type>text/plain</type>
            <size>49069</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1MDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmQyOThiZjA3NDEzN2Fh
ZmJlNTMwYjIzNWY1MTQ4ODU5MDdlNWJiZS4uODgyNTdkODg1N2Q2MGExZjVjOGYwMjQ5OTY5NGQw
OTMyZDY4ZmIzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE1LTA1LTMxICBIdW5z
ZW9wIEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBXZWJDb3JlL01vZHVsZXMgLSAxCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU1MDcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5n
ZXMuCisKKyAgICAgICAgKiBNb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNvbnRyb2xsZXI6On5CYXR0ZXJ5Q29udHJvbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q29udHJvbGxlcjo6dXBkYXRlQmF0dGVyeVN0YXR1
cyk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlQmF0dGVy
eVN0YXR1cyk6CisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNRmFjdG9yeUZvcktleVN5c3RlbSk6CisgICAgICAgICogTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFL
ZXlzOjp+TWVkaWFLZXlzKToKKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpyZXN1bWVUaW1lckZpcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpyZXNldEFsbEdlb2xvY2F0aW9uUGVy
bWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6bWFrZUNhY2hlZFBvc2l0
aW9uQ2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpzZW5kRXJyb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OnNlbmRQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6c3RvcFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdl
b2xvY2F0aW9uOjpjYW5jZWxSZXF1ZXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlv
bjo6ZXh0cmFjdE5vdGlmaWVyc1dpdGhDYWNoZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHZW9sb2NhdGlvbjo6Y29weVRvU2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9u
OjpoYW5kbGVQZW5kaW5nUGVybWlzc2lvbk5vdGlmaWVycyk6CisgICAgICAgICogTW9kdWxlcy9n
ZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R2VvbG9jYXRpb25Db250cm9sbGVyOjpwb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6R2VvbG9jYXRpb25Db250cm9sbGVyOjplcnJvck9jY3VycmVkKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZTo6b2JqZWN0U3RvcmVOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6
dHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmZvcmNlQ2xvc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmNsb3NlQ29ubmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZmluZE9iamVjdFN0b3JlSWQpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OnJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZURhdGFiYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6Y2xvc2UpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YTo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGE6Omlzb2xhdGVkQ29weSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6aXNW
YWxpZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXk6OmNyZWF0ZU11bHRpRW50cnlBcnJheSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJLZXk6OmNyZWF0ZUFycmF5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OklEQktleVBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6aXNWYWxpZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJLZXlQYXRoOjppc29sYXRlZENvcHkpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpp
bmRleE5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAg
ICAgICBSZW5hbWUgdGhlIHR3byAnaSdzIHRvICdrZXlEYXRhJyBhbmQgJ2luZGV4S2V5RGF0YScu
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6aW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmU6OmZpbmRJbmRleElkKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmRlYWN0aXZhdGVOZXdUcmFuc2FjdGlv
bnMpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6YWJvcnQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
OjpjbG9zZU9wZW5DdXJzb3JzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpv
bkFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kOjpjbG9zZU9wZW5DdXJzb3JzKToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU291cmNlOjpvblJlYWR5U3RhdGVDaGFuZ2UpOgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50c0ltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFDb25zdHJhaW50c0ltcGw6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb25zdHJhaW50c0ltcGw6OmdldE1hbmRhdG9yeUNvbnN0cmFpbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHNJbXBsOjpnZXRPcHRpb25hbENvbnN0cmFpbnRW
YWx1ZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU3RyZWFtOjpjbG9uZU1lZGlhU3RyZWFtVHJhY2tWZWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW06OmFkZFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtOjpyZW1vdmVUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6aGF2ZVRy
YWNrV2l0aFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6Z2V0VHJhY2tC
eUlkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtOjpnZXRUcmFja3MpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnRyYWNrRGlkRW5kKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU3RyZWFtOjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQpOgorICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM6OnNvdXJjZVR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM6OnNvdXJjZUlkKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzOjpmYWNpbmdNb2RlKToKKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTdHJlYW1UcmFjazo6dHJhY2tEaWRFbmQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdDo6ZGlkQ29tcGxldGVSZXF1ZXN0KToK
KwogMjAxNS0wNS0zMSAgQ2FybG9zIEFsYmVydG8gTG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlh
LmNvbT4KIAogICAgICAgICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGtab29tVGlja3MuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmNw
cAppbmRleCBhZDc4ODg1NzZhYTkxZDFmZGI3ZThmOTkzYWRmNTI5OGQyYzcwOWI5Li5jZjgyYTM1
NTI5Y2UzMDgwN2QxNjkwNjllNWQ3YWZjYjhhNDFiZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5jcHAKQEAgLTM3LDggKzM3
LDggQEAgQmF0dGVyeUNvbnRyb2xsZXI6OkJhdHRlcnlDb250cm9sbGVyKEJhdHRlcnlDbGllbnQq
IGNsaWVudCkKIAogQmF0dGVyeUNvbnRyb2xsZXI6On5CYXR0ZXJ5Q29udHJvbGxlcigpCiB7Ci0g
ICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgaXQgPSBtX2xpc3RlbmVycy5iZWdpbigp
OyBpdCAhPSBtX2xpc3RlbmVycy5lbmQoKTsgKytpdCkKLSAgICAgICAgKCppdCktPmJhdHRlcnlD
b250cm9sbGVyRGVzdHJveWVkKCk7CisgICAgZm9yIChhdXRvJiBsaXN0ZW5lciA6IG1fbGlzdGVu
ZXJzKQorICAgICAgICBsaXN0ZW5lci0+YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKTsKICAg
ICBtX2NsaWVudC0+YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKTsKIH0KIApAQCAtNzUsOCAr
NzUsOCBAQCB2b2lkIEJhdHRlcnlDb250cm9sbGVyOjp1cGRhdGVCYXR0ZXJ5U3RhdHVzKFBhc3NS
ZWZQdHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeVN0YQogICAgICAgICBpZiAobV9iYXR0ZXJ5U3Rh
dHVzLT5sZXZlbCgpICE9IHN0YXR1cy0+bGV2ZWwoKSkKICAgICAgICAgICAgIGRpZENoYW5nZUJh
dHRlcnlTdGF0dXMoV2ViQ29yZTo6ZXZlbnROYW1lcygpLmxldmVsY2hhbmdlRXZlbnQsIHN0YXR1
cyk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3Ig
aXQgPSBtX2xpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBtX2xpc3RlbmVycy5lbmQoKTsgKytpdCkK
LSAgICAgICAgICAgICgqaXQpLT51cGRhdGVCYXR0ZXJ5U3RhdHVzKHN0YXR1cyk7CisgICAgICAg
IGZvciAoYXV0byYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycykKKyAgICAgICAgICAgIGxpc3RlbmVy
LT51cGRhdGVCYXR0ZXJ5U3RhdHVzKHN0YXR1cyk7CiAgICAgfQogCiAgICAgbV9iYXR0ZXJ5U3Rh
dHVzID0gc3RhdHVzLnJlbGVhc2UoKTsKQEAgLTg2LDggKzg2LDggQEAgdm9pZCBCYXR0ZXJ5Q29u
dHJvbGxlcjo6ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgUGEKIHsKICAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVu
dFR5cGUsIGZhbHNlLCBmYWxzZSk7CiAgICAgUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnkg
PSBiYXR0ZXJ5U3RhdHVzOwotICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGl0ID0g
bV9saXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9saXN0ZW5lcnMuZW5kKCk7ICsraXQpCi0gICAg
ICAgICgqaXQpLT5kaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKGV2ZW50LCBiYXR0ZXJ5KTsKKyAgICBm
b3IgKGF1dG8mIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMpCisgICAgICAgIGxpc3RlbmVyLT5kaWRD
aGFuZ2VCYXR0ZXJ5U3RhdHVzKGV2ZW50LCBiYXR0ZXJ5KTsKIH0KIAogY29uc3QgY2hhciogQmF0
dGVyeUNvbnRyb2xsZXI6OnN1cHBsZW1lbnROYW1lKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZW5jcnlwdGVkbWVkaWEvQ0RNLmNwcAppbmRleCBhZDJmYTc3Y2RkNTY4YzI1OTFhYzI2ZDU0
ZGUwMGJlNjMwNzQ4MDM2Li4zOTJkZGMyNjVjZDdlMWEyMDJmNTA0MTE3NjJkODNlMWI5OTI0YWJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE0uY3BwCkBA
IC04OSwxMCArODksOSBAQCB2b2lkIENETTo6cmVnaXN0ZXJDRE1GYWN0b3J5KENyZWF0ZUNETSBj
b25zdHJ1Y3RvciwgQ0RNU3VwcG9ydHNLZXlTeXN0ZW0gc3VwcG9ydAogCiBzdGF0aWMgQ0RNRmFj
dG9yeSogQ0RNRmFjdG9yeUZvcktleVN5c3RlbShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkKIHsK
LSAgICBWZWN0b3I8Q0RNRmFjdG9yeSo+JiBjZG1GYWN0b3JpZXMgPSBpbnN0YWxsZWRDRE1GYWN0
b3JpZXMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNkbUZhY3Rvcmllcy5zaXplKCk7
ICsraSkgewotICAgICAgICBpZiAoY2RtRmFjdG9yaWVzW2ldLT5zdXBwb3J0c0tleVN5c3RlbShr
ZXlTeXN0ZW0pKQotICAgICAgICAgICAgcmV0dXJuIGNkbUZhY3Rvcmllc1tpXTsKKyAgICBmb3Ig
KGF1dG8mIGZhY3RvcnkgOiBpbnN0YWxsZWRDRE1GYWN0b3JpZXMoKSkgeworICAgICAgICBpZiAo
ZmFjdG9yeS0+c3VwcG9ydHNLZXlTeXN0ZW0oa2V5U3lzdGVtKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWN0b3J5OwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlzLmNwcAppbmRleCBjYTNkYjBiMTgz
MWY0NWM2ODA4MDExYjU2MmEyNjI3MTE1ZGExODE5Li41NjQzYWJlZGVlM2YxMDFlODg1MmY4ZTBl
ZmEzMWJiMjJjNGFhOWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5
cHRlZG1lZGlhL01lZGlhS2V5cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNy
eXB0ZWRtZWRpYS9NZWRpYUtleXMuY3BwCkBAIC03Nyw5ICs3Nyw5IEBAIE1lZGlhS2V5czo6fk1l
ZGlhS2V5cygpCiB7CiAgICAgLy8gRnJvbSA8aHR0cDovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVk
aWEvcmF3LWZpbGUvdGlwL2VuY3J5cHRlZC1tZWRpYS9lbmNyeXB0ZWQtbWVkaWEuaHRtbCNkb20t
bWVkaWEta2V5cy1jb25zdHJ1Y3Rvcj46CiAgICAgLy8gV2hlbiBkZXN0cm95aW5nIGEgTWVkaWFL
ZXlzIG9iamVjdCwgZm9sbG93IHRoZSBzdGVwcyBpbiBjbG9zZSgpLgotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9zZXNzaW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBtX3Nlc3Npb25z
W2ldLT5jbG9zZSgpOwotICAgICAgICBtX3Nlc3Npb25zW2ldLT5zZXRLZXlzKDApOworICAgIGZv
ciAoYXV0byYgc2Vzc2lvbiA6IG1fc2Vzc2lvbnMpIHsKKyAgICAgICAgc2Vzc2lvbi0+Y2xvc2Uo
KTsKKyAgICAgICAgc2Vzc2lvbi0+c2V0S2V5cygwKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKaW5kZXggZjZk
ZmNjMDk0ZjE2NjYwMWExMTIxMGFmYzEyNDlmODllNzU0MTk2My4uZjE5ZWZhZjc0ZDJkZTgwNzI0
MzQwMjg4NGYxZTFhZDVhNjMyYzc2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKQEAgLTIwOCwxMyArMjA4LDEyIEBAIHZvaWQg
R2VvbG9jYXRpb246OnJlc3VtZVRpbWVyRmlyZWQoKQogCiAgICAgLy8gUmVzdW1lIEdlb05vdGlm
aWVyIHRpbWVvdXQgdGltZXJzLgogICAgIGlmIChoYXNMaXN0ZW5lcnMoKSkgewotICAgICAgICBH
ZW9Ob3RpZmllclNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9vbmVTaG90cy5lbmQoKTsKLSAg
ICAgICAgZm9yIChHZW9Ob3RpZmllclNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29uZVNob3Rz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICgqaXQpLT5zdGFydFRpbWVy
SWZOZWVkZWQoKTsKKyAgICAgICAgZm9yIChhdXRvJiBub3RpZmllciA6IG1fb25lU2hvdHMpCisg
ICAgICAgICAgICBub3RpZmllci0+c3RhcnRUaW1lcklmTmVlZGVkKCk7CiAgICAgICAgIEdlb05v
dGlmaWVyVmVjdG9yIHdhdGNoZXJDb3B5OwogICAgICAgICBtX3dhdGNoZXJzLmdldE5vdGlmaWVy
c1ZlY3Rvcih3YXRjaGVyQ29weSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2F0
Y2hlckNvcHkuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICB3YXRjaGVyQ29weVtpXS0+c3RhcnRU
aW1lcklmTmVlZGVkKCk7CisgICAgICAgIGZvciAoYXV0byYgd2F0Y2hlciA6IHdhdGNoZXJDb3B5
KQorICAgICAgICAgICAgd2F0Y2hlci0+c3RhcnRUaW1lcklmTmVlZGVkKCk7CiAgICAgfQogCiAg
ICAgaWYgKChpc0FsbG93ZWQoKSB8fCBpc0RlbmllZCgpKSAmJiAhbV9wZW5kaW5nRm9yUGVybWlz
c2lvbk5vdGlmaWVycy5pc0VtcHR5KCkpIHsKQEAgLTI2OSwxNCArMjY4LDEzIEBAIHZvaWQgR2Vv
bG9jYXRpb246OnJlc2V0QWxsR2VvbG9jYXRpb25QZXJtaXNzaW9uKCkKICAgICBzdG9wVGltZXJz
KCk7CiAKICAgICAvLyBHbyBvdmVyIHRoZSBvbmUgc2hvdCBhbmQgcmUtcmVxdWVzdCBwZXJtaXNz
aW9uLgotICAgIEdlb05vdGlmaWVyU2V0OjppdGVyYXRvciBlbmQgPSBtX29uZVNob3RzLmVuZCgp
OwotICAgIGZvciAoR2VvTm90aWZpZXJTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9vbmVTaG90cy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHN0YXJ0UmVxdWVzdCgoKml0KS5nZXQoKSk7
CisgICAgZm9yIChhdXRvJiBub3RpZmllciA6IG1fb25lU2hvdHMpCisgICAgICAgIHN0YXJ0UmVx
dWVzdChub3RpZmllci5nZXQoKSk7CiAgICAgLy8gR28gb3ZlciB0aGUgd2F0Y2hlcnMgYW5kIHJl
LXJlcXVlc3QgcGVybWlzc2lvbi4KICAgICBHZW9Ob3RpZmllclZlY3RvciB3YXRjaGVyQ29weTsK
ICAgICBtX3dhdGNoZXJzLmdldE5vdGlmaWVyc1ZlY3Rvcih3YXRjaGVyQ29weSk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB3YXRjaGVyQ29weS5zaXplKCk7ICsraSkKLSAgICAgICAgc3Rh
cnRSZXF1ZXN0KHdhdGNoZXJDb3B5W2ldLmdldCgpKTsKKyAgICBmb3IgKGF1dG8mIHdhdGNoZXIg
OiB3YXRjaGVyQ29weSkKKyAgICAgICAgc3RhcnRSZXF1ZXN0KHdhdGNoZXIuZ2V0KCkpOwogfQog
CiB2b2lkIEdlb2xvY2F0aW9uOjpzdG9wKCkKQEAgLTM5MiwxNSArMzkwLDEzIEBAIHZvaWQgR2Vv
bG9jYXRpb246Om1ha2VDYWNoZWRQb3NpdGlvbkNhbGxiYWNrcygpCiAgICAgLy8gQWxsIG1vZGlm
aWNhdGlvbnMgdG8gbV9yZXF1ZXN0c0F3YWl0aW5nQ2FjaGVkUG9zaXRpb24gYXJlIGRvbmUKICAg
ICAvLyBhc3luY2hyb25vdXNseSwgc28gd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdCBi
ZWluZyBtb2RpZmllZCBmcm9tCiAgICAgLy8gdGhlIGNhbGxiYWNrcy4KLSAgICBHZW9Ob3RpZmll
clNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXF1ZXN0c0F3YWl0aW5nQ2FjaGVkUG9zaXRp
b24uZW5kKCk7Ci0gICAgZm9yIChHZW9Ob3RpZmllclNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IG1fcmVxdWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9uLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKLSAgICAgICAgR2VvTm90aWZpZXIqIG5vdGlmaWVyID0gaXRlci0+Z2V0KCk7Cisg
ICAgZm9yIChhdXRvJiBub3RpZmllciA6IG1fcmVxdWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9u
KSB7CiAgICAgICAgIG5vdGlmaWVyLT5ydW5TdWNjZXNzQ2FsbGJhY2sobGFzdFBvc2l0aW9uKCkp
OwogCiAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBvbmUtc2hvdCByZXF1ZXN0LCBzdG9wIGl0LiBP
dGhlcndpc2UsIGlmIHRoZSB3YXRjaCBzdGlsbAogICAgICAgICAvLyBleGlzdHMsIHN0YXJ0IHRo
ZSBzZXJ2aWNlIHRvIGdldCB1cGRhdGVzLgotICAgICAgICBpZiAoIW1fb25lU2hvdHMucmVtb3Zl
KG5vdGlmaWVyKSAmJiBtX3dhdGNoZXJzLmNvbnRhaW5zKG5vdGlmaWVyKSkgewotICAgICAgICAg
ICAgaWYgKG5vdGlmaWVyLT5oYXNaZXJvVGltZW91dCgpIHx8IHN0YXJ0VXBkYXRpbmcobm90aWZp
ZXIpKQorICAgICAgICBpZiAoIW1fb25lU2hvdHMucmVtb3ZlKG5vdGlmaWVyLmdldCgpKSAmJiBt
X3dhdGNoZXJzLmNvbnRhaW5zKG5vdGlmaWVyLmdldCgpKSkgeworICAgICAgICAgICAgaWYgKG5v
dGlmaWVyLT5oYXNaZXJvVGltZW91dCgpIHx8IHN0YXJ0VXBkYXRpbmcobm90aWZpZXIuZ2V0KCkp
KQogICAgICAgICAgICAgICAgIG5vdGlmaWVyLT5zdGFydFRpbWVySWZOZWVkZWQoKTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBub3RpZmllci0+c2V0RmF0YWxFcnJvcihQb3Np
dGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEUsIEFT
Q0lJTGl0ZXJhbChmYWlsZWRUb1N0YXJ0U2VydmljZUVycm9yTWVzc2FnZSkpKTsKQEAgLTQ4OSwy
NiArNDg1LDIwIEBAIHZvaWQgR2VvbG9jYXRpb246OnNldElzQWxsb3dlZChib29sIGFsbG93ZWQp
CiAKIHZvaWQgR2VvbG9jYXRpb246OnNlbmRFcnJvcihHZW9Ob3RpZmllclZlY3RvciYgbm90aWZp
ZXJzLCBQb3NpdGlvbkVycm9yKiBlcnJvcikKIHsKLSAgICAgR2VvTm90aWZpZXJWZWN0b3I6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG5vdGlmaWVycy5lbmQoKTsKLSAgICAgZm9yIChHZW9Ob3RpZmll
clZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBub3RpZmllcnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgICBSZWZQdHI8R2VvTm90aWZpZXI+IG5vdGlmaWVyID0gKml0Owot
ICAgICAgICAgCi0gICAgICAgICBub3RpZmllci0+cnVuRXJyb3JDYWxsYmFjayhlcnJvcik7Ci0g
ICAgIH0KKyAgICBmb3IgKGF1dG8mIG5vdGlmaWVyIDogbm90aWZpZXJzKQorICAgICAgICBub3Rp
Zmllci0+cnVuRXJyb3JDYWxsYmFjayhlcnJvcik7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb246OnNl
bmRQb3NpdGlvbihHZW9Ob3RpZmllclZlY3RvciYgbm90aWZpZXJzLCBHZW9wb3NpdGlvbiogcG9z
aXRpb24pCiB7Ci0gICAgR2VvTm90aWZpZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5v
dGlmaWVycy5lbmQoKTsKLSAgICBmb3IgKEdlb05vdGlmaWVyVmVjdG9yOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG5vdGlmaWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQp
LT5ydW5TdWNjZXNzQ2FsbGJhY2socG9zaXRpb24pOworICAgIGZvciAoYXV0byYgbm90aWZpZXIg
OiBub3RpZmllcnMpCisgICAgICAgIG5vdGlmaWVyLT5ydW5TdWNjZXNzQ2FsbGJhY2socG9zaXRp
b24pOwogfQogCiB2b2lkIEdlb2xvY2F0aW9uOjpzdG9wVGltZXIoR2VvTm90aWZpZXJWZWN0b3Im
IG5vdGlmaWVycykKIHsKLSAgICBHZW9Ob3RpZmllclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbm90aWZpZXJzLmVuZCgpOwotICAgIGZvciAoR2VvTm90aWZpZXJWZWN0b3I6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbm90aWZpZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
KCppdCktPnN0b3BUaW1lcigpOworICAgIGZvciAoYXV0byYgbm90aWZpZXIgOiBub3RpZmllcnMp
CisgICAgICAgIG5vdGlmaWVyLT5zdG9wVGltZXIoKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlvbjo6
c3RvcFRpbWVyc0Zvck9uZVNob3RzKCkKQEAgLTUzNSw5ICs1MjUsOCBAQCB2b2lkIEdlb2xvY2F0
aW9uOjpzdG9wVGltZXJzKCkKIAogdm9pZCBHZW9sb2NhdGlvbjo6Y2FuY2VsUmVxdWVzdHMoR2Vv
Tm90aWZpZXJWZWN0b3ImIG5vdGlmaWVycykKIHsKLSAgICBHZW9Ob3RpZmllclZlY3Rvcjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbm90aWZpZXJzLmVuZCgpOwotICAgIGZvciAoR2VvTm90aWZpZXJW
ZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbm90aWZpZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgKCppdCktPnNldEZhdGFsRXJyb3IoUG9zaXRpb25FcnJvcjo6Y3JlYXRl
KFBvc2l0aW9uRXJyb3I6OlBPU0lUSU9OX1VOQVZBSUxBQkxFLCBBU0NJSUxpdGVyYWwoZnJhbWVs
ZXNzRG9jdW1lbnRFcnJvck1lc3NhZ2UpKSk7CisgICAgZm9yIChhdXRvJiBub3RpZmllciA6IG5v
dGlmaWVycykKKyAgICAgICAgbm90aWZpZXItPnNldEZhdGFsRXJyb3IoUG9zaXRpb25FcnJvcjo6
Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBPU0lUSU9OX1VOQVZBSUxBQkxFLCBBU0NJSUxpdGVyYWwo
ZnJhbWVsZXNzRG9jdW1lbnRFcnJvck1lc3NhZ2UpKSk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb246
OmNhbmNlbEFsbFJlcXVlc3RzKCkKQEAgLTU1MiwyNSArNTQxLDIwIEBAIHZvaWQgR2VvbG9jYXRp
b246OmNhbmNlbEFsbFJlcXVlc3RzKCkKIHZvaWQgR2VvbG9jYXRpb246OmV4dHJhY3ROb3RpZmll
cnNXaXRoQ2FjaGVkUG9zaXRpb24oR2VvTm90aWZpZXJWZWN0b3ImIG5vdGlmaWVycywgR2VvTm90
aWZpZXJWZWN0b3IqIGNhY2hlZCkKIHsKICAgICBHZW9Ob3RpZmllclZlY3RvciBub25DYWNoZWQ7
Ci0gICAgR2VvTm90aWZpZXJWZWN0b3I6Oml0ZXJhdG9yIGVuZCA9IG5vdGlmaWVycy5lbmQoKTsK
LSAgICBmb3IgKEdlb05vdGlmaWVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IG5vdGlmaWVy
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgR2VvTm90aWZpZXIqIG5vdGlm
aWVyID0gaXQtPmdldCgpOworICAgIGZvciAoYXV0byYgbm90aWZpZXIgOiBub3RpZmllcnMpIHsK
ICAgICAgICAgaWYgKG5vdGlmaWVyLT51c2VDYWNoZWRQb3NpdGlvbigpKSB7CiAgICAgICAgICAg
ICBpZiAoY2FjaGVkKQotICAgICAgICAgICAgICAgIGNhY2hlZC0+YXBwZW5kKG5vdGlmaWVyKTsK
KyAgICAgICAgICAgICAgICBjYWNoZWQtPmFwcGVuZChub3RpZmllci5nZXQoKSk7CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgbm9uQ2FjaGVkLmFwcGVuZChub3RpZmllcik7CisgICAgICAg
ICAgICBub25DYWNoZWQuYXBwZW5kKG5vdGlmaWVyLmdldCgpKTsKICAgICB9CiAgICAgbm90aWZp
ZXJzLnN3YXAobm9uQ2FjaGVkKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlvbjo6Y29weVRvU2V0KGNv
bnN0IEdlb05vdGlmaWVyVmVjdG9yJiBzcmMsIEdlb05vdGlmaWVyU2V0JiBkZXN0KQogewotICAg
ICBHZW9Ob3RpZmllclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3JjLmVuZCgpOwotICAg
ICBmb3IgKEdlb05vdGlmaWVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IHNyYy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgIEdlb05vdGlmaWVyKiBub3RpZmllciA9IGl0
LT5nZXQoKTsKLSAgICAgICAgIGRlc3QuYWRkKG5vdGlmaWVyKTsKLSAgICAgfQorICAgIGZvciAo
YXV0byYgbm90aWZpZXIgOiBzcmMpCisgICAgICAgIGRlc3QuYWRkKG5vdGlmaWVyLmdldCgpKTsK
IH0KIAogdm9pZCBHZW9sb2NhdGlvbjo6aGFuZGxlRXJyb3IoUG9zaXRpb25FcnJvciogZXJyb3Ip
CkBAIC02OTUsMTQgKzY3OSwxMSBAQCB2b2lkIEdlb2xvY2F0aW9uOjpoYW5kbGVQZW5kaW5nUGVy
bWlzc2lvbk5vdGlmaWVycygpCiB7CiAgICAgLy8gV2hpbGUgd2UgaXRlcmF0ZSB0aHJvdWdoIHRo
ZSBsaXN0LCB3ZSBuZWVkIG5vdCB3b3JyeSBhYm91dCBsaXN0IGJlaW5nIG1vZGlmaWVkIGFzIHRo
ZSBwZXJtaXNzaW9uIAogICAgIC8vIGlzIGFscmVhZHkgc2V0IHRvIFllcy9ObyBhbmQgbm8gbmV3
IGxpc3RlbmVycyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwZW5kaW5nIGxpc3QKLSAgICBHZW9Ob3Rp
ZmllclNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nRm9yUGVybWlzc2lvbk5vdGlm
aWVycy5lbmQoKTsKLSAgICBmb3IgKEdlb05vdGlmaWVyU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbV9wZW5kaW5nRm9yUGVybWlzc2lvbk5vdGlmaWVycy5iZWdpbigpOyBpdGVyICE9IGVuZDsg
KytpdGVyKSB7Ci0gICAgICAgIEdlb05vdGlmaWVyKiBub3RpZmllciA9IGl0ZXItPmdldCgpOwot
CisgICAgZm9yIChhdXRvJiBub3RpZmllciA6IG1fcGVuZGluZ0ZvclBlcm1pc3Npb25Ob3RpZmll
cnMpIHsKICAgICAgICAgaWYgKGlzQWxsb3dlZCgpKSB7CiAgICAgICAgICAgICAvLyBzdGFydCBh
bGwgcGVuZGluZyBub3RpZmljYXRpb24gcmVxdWVzdHMgYXMgcGVybWlzc2lvbiBncmFudGVkLgog
ICAgICAgICAgICAgLy8gVGhlIG5vdGlmaWVyIGlzIGFsd2F5cyByZWYnZWQgYnkgbV9vbmVTaG90
cyBvciBtX3dhdGNoZXJzLgotICAgICAgICAgICAgaWYgKHN0YXJ0VXBkYXRpbmcobm90aWZpZXIp
KQorICAgICAgICAgICAgaWYgKHN0YXJ0VXBkYXRpbmcobm90aWZpZXIuZ2V0KCkpKQogICAgICAg
ICAgICAgICAgIG5vdGlmaWVyLT5zdGFydFRpbWVySWZOZWVkZWQoKTsKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBub3RpZmllci0+c2V0RmF0YWxFcnJvcihQb3NpdGlvbkVycm9y
OjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEUsIEFTQ0lJTGl0ZXJh
bChmYWlsZWRUb1N0YXJ0U2VydmljZUVycm9yTWVzc2FnZSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVy
LmNwcAppbmRleCBjNmVjMmU4MmM2NWFjZGM0MzlhNjU2OTE2NmU3ZjA0MDU2NmM5YjA3Li4wZGYw
NmZhYjllY2NmZGJmYWZhZGE0NjAzNDhhMmEzZjBmM2YxYTMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xs
ZXIuY3BwCkBAIC0xMDQsMTYgKzEwNCwxNiBAQCB2b2lkIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6
cG9zaXRpb25DaGFuZ2VkKEdlb2xvY2F0aW9uUG9zaXRpb24qIHBvc2l0aW9uKQogICAgIG1fbGFz
dFBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgVmVjdG9yPFJlZlB0cjxHZW9sb2NhdGlvbj4+IG9i
c2VydmVyc1ZlY3RvcjsKICAgICBjb3B5VG9WZWN0b3IobV9vYnNlcnZlcnMsIG9ic2VydmVyc1Zl
Y3Rvcik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYnNlcnZlcnNWZWN0b3Iuc2l6ZSgp
OyArK2kpCi0gICAgICAgIG9ic2VydmVyc1ZlY3RvcltpXS0+cG9zaXRpb25DaGFuZ2VkKCk7Cisg
ICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IG9ic2VydmVyc1ZlY3RvcikKKyAgICAgICAgb2JzZXJ2
ZXItPnBvc2l0aW9uQ2hhbmdlZCgpOwogfQogCiB2b2lkIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6
ZXJyb3JPY2N1cnJlZChHZW9sb2NhdGlvbkVycm9yKiBlcnJvcikKIHsKICAgICBWZWN0b3I8UmVm
UHRyPEdlb2xvY2F0aW9uPj4gb2JzZXJ2ZXJzVmVjdG9yOwogICAgIGNvcHlUb1ZlY3RvcihtX29i
c2VydmVycywgb2JzZXJ2ZXJzVmVjdG9yKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9i
c2VydmVyc1ZlY3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAgb2JzZXJ2ZXJzVmVjdG9yW2ldLT5z
ZXRFcnJvcihlcnJvcik7CisgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IG9ic2VydmVyc1ZlY3Rv
cikKKyAgICAgICAgb2JzZXJ2ZXItPnNldEVycm9yKGVycm9yKTsKIH0KIAogR2VvbG9jYXRpb25Q
b3NpdGlvbiogR2VvbG9jYXRpb25Db250cm9sbGVyOjpsYXN0UG9zaXRpb24oKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4IDRhMWJl
ODEyZDA3NjdkN2QwYTgyNGZkZWRlMGVjM2ViMmQ1NjE2ZGUuLjk4OGNhMmNkNWU1YTIyNDBlZDJm
NmUyOWRmNTdhODczMzhhYzk4OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKQEAgLTE0NSw4ICsxNDUsOCBAQCB2b2lkIElEQkRhdGFi
YXNlOjpvbkNvbXBsZXRlKGludDY0X3QgdHJhbnNhY3Rpb25JZCkKIFBhc3NSZWZQdHI8RE9NU3Ry
aW5nTGlzdD4gSURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAogewogICAgIFJl
ZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3Jl
YXRlKCk7Ci0gICAgZm9yIChJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgb2JqZWN0U3RvcmVO
YW1lcy0+YXBwZW5kKGl0LT52YWx1ZS5uYW1lKTsKKyAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3Jl
IDogbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMudmFsdWVzKCkpCisgICAgICAgIG9iamVjdFN0b3Jl
TmFtZXMtPmFwcGVuZChvYmplY3RTdG9yZS5uYW1lKTsKICAgICBvYmplY3RTdG9yZU5hbWVzLT5z
b3J0KCk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlTmFtZXMucmVsZWFzZSgpOwogfQpAQCAtMjU2
LDggKzI1Niw4IEBAIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0cmFu
c2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250CiAgICAgfQogCiAgICAgVmVjdG9y
PGludDY0X3Q+IG9iamVjdFN0b3JlSWRzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Nv
cGUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaW50NjRfdCBvYmplY3RTdG9yZUlkID0gZmluZE9i
amVjdFN0b3JlSWQoc2NvcGVbaV0pOworICAgIGZvciAoYXV0byYgbmFtZSA6IHNjb3BlKSB7Cisg
ICAgICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IGZpbmRPYmplY3RTdG9yZUlkKG5hbWUpOwog
ICAgICAgICBpZiAob2JqZWN0U3RvcmVJZCA9PSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZh
bGlkSWQpIHsKICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5k
RXJyb3I7CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTI4MSw4ICsyODEsOCBAQCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udAogCiB2b2lkIElEQkRhdGFiYXNlOjpmb3JjZUNsb3NlKCkKIHsKLSAg
ICBmb3IgKFRyYW5zYWN0aW9uTWFwOjpjb25zdF9pdGVyYXRvcjo6VmFsdWVzIGl0ID0gbV90cmFu
c2FjdGlvbnMuYmVnaW4oKS52YWx1ZXMoKSwgZW5kID0gbV90cmFuc2FjdGlvbnMuZW5kKCkudmFs
dWVzKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmFib3J0KElHTk9SRV9FWENF
UFRJT04pOworICAgIGZvciAoYXV0byYgdHJhbnNhY3Rpb24gOiBtX3RyYW5zYWN0aW9ucy52YWx1
ZXMoKSkKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElHTk9SRV9FWENFUFRJT04pOwogICAg
IHRoaXMtPmNsb3NlKCk7CiB9CiAKQEAgLTMxNyw4ICszMTcsOCBAQCB2b2lkIElEQkRhdGFiYXNl
OjpjbG9zZUNvbm5lY3Rpb24oKQogICAgIC8vIGNvbm5lY3Rpb24uIFRoZXkgd291bGQgaGF2ZSBi
ZWVuIHNjaGVkdWxlZCBieSB0aGUgYmFja2VuZCB3aGVuIGFub3RoZXIKICAgICAvLyBjb25uZWN0
aW9uIGNhbGxlZCBzZXRWZXJzaW9uLCBidXQgdGhlIGZyb250ZW5kIGNvbm5lY3Rpb24gaXMgYmVp
bmcKICAgICAvLyBjbG9zZWQgYmVmb3JlIHRoZXkgY291bGQgZmlyZS4KLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYm9v
bCByZW1vdmVkID0gZXZlbnRRdWV1ZS5jYW5jZWxFdmVudCgqbV9lbnF1ZXVlZEV2ZW50c1tpXSk7
CisgICAgZm9yIChhdXRvJiBldmVudCA6IG1fZW5xdWV1ZWRFdmVudHMpIHsKKyAgICAgICAgYm9v
bCByZW1vdmVkID0gZXZlbnRRdWV1ZS5jYW5jZWxFdmVudCgqZXZlbnQpOwogICAgICAgICBBU1NF
UlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogICAgIH0KIApAQCAtMzYwLDEwICszNjAsMTAg
QEAgYm9vbCBJREJEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCkKIAogaW50NjRfdCBJREJEYXRhYmFzZTo6ZmluZE9iamVjdFN0b3JlSWQoY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdAogewotICAgIGZvciAoSURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0U3Rv
cmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuYmVnaW4o
KTsgaXQgIT0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
aWYgKGl0LT52YWx1ZS5uYW1lID09IG5hbWUpIHsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+a2V5
ICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCk7Ci0gICAgICAgICAgICByZXR1
cm4gaXQtPmtleTsKKyAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMpIHsKKyAgICAgICAgaWYgKG9iamVjdFN0b3JlLnZhbHVlLm5hbWUgPT0gbmFtZSkg
eworICAgICAgICAgICAgQVNTRVJUKG9iamVjdFN0b3JlLmtleSAhPSBJREJPYmplY3RTdG9yZU1l
dGFkYXRhOjpJbnZhbGlkSWQpOworICAgICAgICAgICAgcmV0dXJuIG9iamVjdFN0b3JlLmtleTsK
ICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52
YWxpZElkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZC5jcHAKaW5kZXggYzgyOTI2YWQ5OGVmZDI0MjY4ZjAyMDZkYjQ3N2Q4
NmUxYTA0NjczNy4uNTFjMjY2MjVmMjFlZmQxNWM0MTRiZWIxOTU2YjVlYTU0ODNiZmNmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmQuY3BwCkBAIC00OTcsMTAgKzQ5NywxMCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZDo6cnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PgogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAg
ICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0
YWJhc2VDYWxsYmFja3M7CiAgICAgQVNTRVJUKGNhbGxiYWNrcyk7Ci0gICAgZm9yIChEYXRhYmFz
ZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0
LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQpIHsKKyAg
ICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9kYXRhYmFzZUNhbGxiYWNrc1NldCkgewogICAgICAg
ICAvLyBGcm9udCBlbmQgZW5zdXJlcyB0aGUgZXZlbnQgaXMgbm90IGZpcmVkIGF0IGNvbm5lY3Rp
b25zIHRoYXQgaGF2ZSBjbG9zZVBlbmRpbmcgc2V0LgotICAgICAgICBpZiAoKml0ICE9IGRhdGFi
YXNlQ2FsbGJhY2tzKQotICAgICAgICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZShtX21ldGFk
YXRhLnZlcnNpb24sIHJlcXVlc3RlZFZlcnNpb24sIEluZGV4ZWREQjo6VmVyc2lvbk51bGxuZXNz
OjpOdWxsKTsKKyAgICAgICAgaWYgKGNhbGxiYWNrICE9IGRhdGFiYXNlQ2FsbGJhY2tzKQorICAg
ICAgICAgICAgY2FsbGJhY2stPm9uVmVyc2lvbkNoYW5nZShtX21ldGFkYXRhLnZlcnNpb24sIHJl
cXVlc3RlZFZlcnNpb24sIEluZGV4ZWREQjo6VmVyc2lvbk51bGxuZXNzOjpOdWxsKTsKICAgICB9
CiAgICAgLy8gVGhlIHNwZWMgZGljdGF0ZXMgd2Ugd2FpdCB1bnRpbCBhbGwgdGhlIHZlcnNpb24g
Y2hhbmdlIGV2ZW50cyBhcmUKICAgICAvLyBkZWxpdmVyZWQgYW5kIHRoZW4gY2hlY2sgbV9kYXRh
YmFzZUNhbGxiYWNrcy5lbXB0eSgpIGJlZm9yZSBwcm9jZWVkaW5nCkBAIC01MzEsOSArNTMxLDkg
QEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCiB7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogICAgIGlmIChpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgp
KSB7Ci0gICAgICAgIGZvciAoRGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlQ2FsbGJh
Y2tzU2V0LmVuZCgpOyArK2l0KSB7CisgICAgICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBtX2Rh
dGFiYXNlQ2FsbGJhY2tzU2V0KSB7CiAgICAgICAgICAgICAvLyBGcm9udCBlbmQgZW5zdXJlcyB0
aGUgZXZlbnQgaXMgbm90IGZpcmVkIGF0IGNvbm5lY3Rpb25zIHRoYXQgaGF2ZSBjbG9zZVBlbmRp
bmcgc2V0LgotICAgICAgICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZShtX21ldGFkYXRhLnZl
cnNpb24sIDAsIEluZGV4ZWREQjo6VmVyc2lvbk51bGxuZXNzOjpOdWxsKTsKKyAgICAgICAgICAg
IGNhbGxiYWNrLT5vblZlcnNpb25DaGFuZ2UobV9tZXRhZGF0YS52ZXJzaW9uLCAwLCBJbmRleGVk
REI6OlZlcnNpb25OdWxsbmVzczo6TnVsbCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6
IE9ubHkgZmlyZSBvbkJsb2NrZWQgaWYgdGhlcmUgYXJlIG9wZW4gY29ubmVjdGlvbnMgYWZ0ZXIg
dGhlCiAgICAgICAgIC8vIFZlcnNpb25DaGFuZ2VFdmVudHMgYXJlIHJlY2VpdmVkLCBub3QganVz
dCBzZXQgdXAgdG8gZmlyZS4KQEAgLTYwMyw4ICs2MDMsOCBAQCB2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
KQogICAgIGlmICghY29ubmVjdGlvbkNvdW50KCkgJiYgIW1fcGVuZGluZ09wZW5DYWxscy5zaXpl
KCkgJiYgIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLnNpemUoKSkgewogICAgICAgICBUcmFuc2FjdGlv
bk1hcCB0cmFuc2FjdGlvbnMobV90cmFuc2FjdGlvbnMpOwogICAgICAgICBSZWZQdHI8SURCRGF0
YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgIkNvbm5lY3Rpb24gaXMgY2xvc2luZy4iKTsKLSAgICAg
ICAgZm9yIChUcmFuc2FjdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3I6OlZhbHVlcyBpdCA9IHRyYW5z
YWN0aW9ucy52YWx1ZXMoKS5iZWdpbigpLCBlbmQgPSB0cmFuc2FjdGlvbnMudmFsdWVzKCkuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICgqaXQpLT5hYm9ydChlcnJvcik7Cisg
ICAgICAgIGZvciAoYXV0byYgdHJhbnNhY3Rpb24gOiB0cmFuc2FjdGlvbnMudmFsdWVzKCkpCisg
ICAgICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOwogCiAgICAgICAgIEFTU0VSVCht
X3RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuY3BwCmluZGV4IDBkMTQyODhj
ZTNmOWQ3NzM2YTQ1OWI4MWQzNTdlOTY2NzdkOTQyOGEuLjNjMmI1ZTA0MjE0NDQ2NjY0ZmUzMmNi
YWNlOGJhOTZkMDE4ZjZlYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuY3BwCkBAIC0zOSw4ICszOSw4IEBAIElE
QkRhdGFiYXNlTWV0YWRhdGEgSURCRGF0YWJhc2VNZXRhZGF0YTo6aXNvbGF0ZWRDb3B5KCkgY29u
c3QKIAogICAgIHJlc3VsdC5uYW1lID0gbmFtZS5pc29sYXRlZENvcHkoKTsKIAotICAgIGZvciAo
YXV0byBpID0gb2JqZWN0U3RvcmVzLmJlZ2luKCksIGVuZCA9IG9iamVjdFN0b3Jlcy5lbmQoKTsg
aSAhPSBlbmQ7ICsraSkKLSAgICAgICAgcmVzdWx0Lm9iamVjdFN0b3Jlcy5zZXQoaS0+a2V5LCBp
LT52YWx1ZS5pc29sYXRlZENvcHkoKSk7CisgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG9i
amVjdFN0b3JlcykKKyAgICAgICAgcmVzdWx0Lm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmUu
a2V5LCBvYmplY3RTdG9yZS52YWx1ZS5pc29sYXRlZENvcHkoKSk7CiAKICAgICByZXR1cm4gcmVz
dWx0OwogfQpAQCAtNTUsOCArNTUsOCBAQCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIElEQk9iamVj
dFN0b3JlTWV0YWRhdGE6Omlzb2xhdGVkQ29weSgpIGNvbnN0CiAgICAgcmVzdWx0Lm5hbWUgPSBu
YW1lLmlzb2xhdGVkQ29weSgpOwogICAgIHJlc3VsdC5rZXlQYXRoID0ga2V5UGF0aC5pc29sYXRl
ZENvcHkoKTsKIAotICAgIGZvciAoYXV0byBpID0gaW5kZXhlcy5iZWdpbigpLCBlbmQgPSBpbmRl
eGVzLmVuZCgpOyBpICE9IGVuZDsgKytpKQotICAgICAgICByZXN1bHQuaW5kZXhlcy5zZXQoaS0+
a2V5LCBpLT52YWx1ZS5pc29sYXRlZENvcHkoKSk7CisgICAgZm9yIChhdXRvJiBpbmRleCA6IGlu
ZGV4ZXMpCisgICAgICAgIHJlc3VsdC5pbmRleGVzLnNldChpbmRleC5rZXksIGluZGV4LnZhbHVl
Lmlzb2xhdGVkQ29weSgpKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcAppbmRleCBiNTYzMTc2OGZiMGY0YTFiNGI0
NzQyNzlhYTRmNWU3MDJlYTEwYzQ5Li41NzkwZjgxNjM4MWUxMjZkOGQxOWFhMzViODU3Zjc4M2Qz
N2Q0NTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAK
QEAgLTQyLDggKzQyLDggQEAgYm9vbCBJREJLZXk6OmlzVmFsaWQoKSBjb25zdAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV90eXBlID09IEFycmF5VHlwZSkgewotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJyYXkuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAg
IGlmICghbV9hcnJheVtpXS0+aXNWYWxpZCgpKQorICAgICAgICBmb3IgKGF1dG8mIGtleSA6IG1f
YXJyYXkpIHsKKyAgICAgICAgICAgIGlmICgha2V5LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXkuaAppbmRleCA3ODUzMGIzMTBkMWYwNGFlOWM2Njg2MmI1YTk5ZGQz
YmU5MDNmNDNiLi4wNDRmMmJiYjMyNDc0NTFmNjk3OTUyZDI4YjYyMjQzMDI4ZDFmNTM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaApAQCAtNjQsMjAgKzY0LDIw
IEBAIHB1YmxpYzoKICAgICAgICAgS2V5QXJyYXkgcmVzdWx0OwogCiAgICAgICAgIHNpemVfdCBz
aXplRXN0aW1hdGUgPSAwOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LnNp
emUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoIWFycmF5W2ldLT5pc1ZhbGlkKCkpCisgICAg
ICAgIGZvciAoYXV0byYga2V5IDogYXJyYXkpIHsKKyAgICAgICAgICAgIGlmICgha2V5LT5pc1Zh
bGlkKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGJvb2wgc2tp
cCA9IGZhbHNlOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCByZXN1bHQuc2l6
ZSgpOyBqKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaV0tPmlzRXF1YWwocmVzdWx0
W2pdLmdldCgpKSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiAgcmVzdWx0S2V5IDogcmVzdWx0
KSB7CisgICAgICAgICAgICAgICAgaWYgKGtleS0+aXNFcXVhbChyZXN1bHRLZXkuZ2V0KCkpKSB7
CiAgICAgICAgICAgICAgICAgICAgIHNraXAgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
IXNraXApIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGFycmF5W2ldKTsKLSAgICAg
ICAgICAgICAgICBzaXplRXN0aW1hdGUgKz0gYXJyYXlbaV0tPm1fc2l6ZUVzdGltYXRlOworICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoa2V5KTsKKyAgICAgICAgICAgICAgICBzaXplRXN0
aW1hdGUgKz0ga2V5LT5tX3NpemVFc3RpbWF0ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBhZG9wdFJlZihuZXcgSURCS2V5KHJlc3Vs
dCwgc2l6ZUVzdGltYXRlKSk7CkBAIC04OCw4ICs4OCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUFycmF5KGNvbnN0IEtleUFycmF5JiBhcnJheSkKICAg
ICB7CiAgICAgICAgIHNpemVfdCBzaXplRXN0aW1hdGUgPSAwOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGFycmF5LnNpemUoKTsgKytpKQotICAgICAgICAgICAgc2l6ZUVzdGltYXRl
ICs9IGFycmF5W2ldLT5tX3NpemVFc3RpbWF0ZTsKKyAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBh
cnJheSkKKyAgICAgICAgICAgIHNpemVFc3RpbWF0ZSArPSBrZXktPm1fc2l6ZUVzdGltYXRlOwog
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCS2V5KGFycmF5LCBzaXplRXN0aW1hdGUp
KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBh
dGguY3BwCmluZGV4IDU0ZTRmNGRjMDVhYTJiNWI4NjVjNzg1YzZjMjZkMTBhOTViZjE2YzguLjY1
YWMzYzUxNDcxNWNlNTM5ZWJjZGQzODM0MWUxMzljMzdlYmMzMGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCkBAIC0yMDMsOCArMjAzLDgg
QEAgSURCS2V5UGF0aDo6SURCS2V5UGF0aChjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJyYXkpCiAg
ICAgLCBtX2FycmF5KGFycmF5KQogewogI2lmbmRlZiBOREVCVUcKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYXJyYXkuc2l6ZSgpOyArK2kpCi0gICAgICAgIEFTU0VSVCghbV9hcnJheVtp
XS5pc051bGwoKSk7CisgICAgZm9yIChhdXRvJiBrZXkgOiBhcnJheSkKKyAgICAgICAgQVNTRVJU
KCFrZXkuaXNOdWxsKCkpOwogI2VuZGlmCiB9CiAKQEAgLTIyMCw4ICsyMjAsOCBAQCBib29sIElE
QktleVBhdGg6OmlzVmFsaWQoKSBjb25zdAogICAgIGNhc2UgQXJyYXlUeXBlOgogICAgICAgICBp
ZiAobV9hcnJheS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcnJheS5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKCFJREJJc1ZhbGlkS2V5UGF0aChtX2FycmF5W2ldKSkKKyAgICAgICAgZm9yIChhdXRv
JiBrZXkgOiBtX2FycmF5KSB7CisgICAgICAgICAgICBpZiAoIUlEQklzVmFsaWRLZXlQYXRoKGtl
eSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtMjU0LDggKzI1NCw4IEBAIElEQktleVBhdGggSURCS2V5UGF0aDo6aXNv
bGF0ZWRDb3B5KCkgY29uc3QKICAgICByZXN1bHQubV9zdHJpbmcgPSBtX3N0cmluZy5pc29sYXRl
ZENvcHkoKTsKIAogICAgIHJlc3VsdC5tX2FycmF5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9h
cnJheS5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcnJheS5zaXplKCk7
ICsraSkKLSAgICAgICAgcmVzdWx0Lm1fYXJyYXkudW5jaGVja2VkQXBwZW5kKG1fYXJyYXlbaV0u
aXNvbGF0ZWRDb3B5KCkpOworICAgIGZvciAoYXV0byYga2V5IDogbV9hcnJheSkKKyAgICAgICAg
cmVzdWx0Lm1fYXJyYXkudW5jaGVja2VkQXBwZW5kKGtleS5pc29sYXRlZENvcHkoKSk7CiAKICAg
ICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IDRlZjQ5YWNkOTM5YTUyY2ZiZWM0YmY2ZmJk
MDc5OWNkMzQ5ZTYyODkuLmJlZTQ5ZDNkOWE1YjBlZmI1YTNhNmFmMWYyMTdlMTMxNDk1NzVhZDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5jcHAKQEAgLTYxLDggKzYxLDggQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJP
YmplY3RTdG9yZTo6aW5kZXhOYW1lcygpIGNvbnN0CiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJ
REJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcyIpOwogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBp
bmRleE5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChJREJPYmplY3RT
dG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmlu
ZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KQotICAg
ICAgICBpbmRleE5hbWVzLT5hcHBlbmQoaXQtPnZhbHVlLm5hbWUpOworICAgIGZvciAoYXV0byYg
aW5kZXggOiBtX21ldGFkYXRhLmluZGV4ZXMudmFsdWVzKCkpCisgICAgICAgIGluZGV4TmFtZXMt
PmFwcGVuZChpbmRleC5uYW1lKTsKICAgICBpbmRleE5hbWVzLT5zb3J0KCk7CiAgICAgcmV0dXJu
IGluZGV4TmFtZXMucmVsZWFzZSgpOwogfQpAQCAtMTk0LDE1ICsxOTQsMTUgQEAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQkRhdGFiYXNlQmFja2VuZDo6UHV0
TW9kZSBwdXRNb2RlLAogCiAgICAgVmVjdG9yPGludDY0X3Q+IGluZGV4SWRzOwogICAgIFZlY3Rv
cjxJbmRleEtleXM+IGluZGV4S2V5czsKLSAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6
OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigp
OyBpdCAhPSBtX21ldGFkYXRhLmluZGV4ZXMuZW5kKCk7ICsraXQpIHsKKyAgICBmb3IgKGF1dG8m
IGluZGV4IDogbV9tZXRhZGF0YS5pbmRleGVzKSB7CiAgICAgICAgIFZlY3RvcjxJREJLZXlEYXRh
PiBrZXlEYXRhczsKLSAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShyZXF1ZXN0U3Rh
dGUuZXhlYygpLCBpdC0+dmFsdWUsIHZhbHVlLCBrZXlEYXRhcyk7Ci0gICAgICAgIGluZGV4SWRz
LmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShyZXF1
ZXN0U3RhdGUuZXhlYygpLCBpbmRleC52YWx1ZSwgdmFsdWUsIGtleURhdGFzKTsKKyAgICAgICAg
aW5kZXhJZHMuYXBwZW5kKGluZGV4LmtleSk7CiAKICAgICAgICAgLy8gRklYTUU6IE11Y2ggb2Yg
dGhlIEluZGV4ZWQgREIgY29kZSBuZWVkcyB0byB1c2UgSURCS2V5RGF0YSBkaXJlY3RseSB0byBh
dm9pZCB3YXN0ZWZ1bCBjb252ZXJzaW9ucyBsaWtlIHRoaXMuCiAgICAgICAgIFZlY3RvcjxSZWZQ
dHI8SURCS2V5Pj4ga2V5czsKLSAgICAgICAgZm9yIChhdXRvJiBpIDoga2V5RGF0YXMpIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGkubWF5YmVDcmVhdGVJREJLZXkoKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBrZXlEYXRhIDoga2V5RGF0YXMpIHsKKyAgICAgICAgICAgIFJlZlB0
cjxJREJLZXk+IGtleSA9IGtleURhdGEubWF5YmVDcmVhdGVJREJLZXkoKTsKICAgICAgICAgICAg
IGlmIChrZXkpCiAgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoa2V5LnJlbGVhc2UoKSk7CiAg
ICAgICAgIH0KQEAgLTMyNCw4ICszMjQsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZ2VuZXJh
dGVJbmRleEtleXNGb3JWYWx1ZShyZXF1ZXN0LT5yZXF1ZXN0U3RhdGUoKS0+ZXhlYygpLCBtX2lu
ZGV4TWV0YWRhdGEsIHZhbHVlLCBpbmRleEtleURhdGFzKTsKIAogICAgICAgICAgICAgVmVjdG9y
PFJlZlB0cjxJREJLZXk+PiBpbmRleEtleXM7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGkgOiBp
bmRleEtleURhdGFzKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gaS5t
YXliZUNyZWF0ZUlEQktleSgpOworICAgICAgICAgICAgZm9yIChhdXRvJiBpbmRleEtleURhdGEg
OiBpbmRleEtleURhdGFzKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5ID0g
aW5kZXhLZXlEYXRhLm1heWJlQ3JlYXRlSURCS2V5KCk7CiAgICAgICAgICAgICAgICAgaWYgKGtl
eSkKICAgICAgICAgICAgICAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChrZXkucmVsZWFzZSgpKTsK
ICAgICAgICAgICAgIH0KQEAgLTQzMCw5ICs0MzAsOSBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJ
REJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YwogICAgIH0KIAogICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEqIGluZGV4TWV0YWRhdGEoMCk7
Ci0gICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRl
eGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKSB7
Ci0gICAgICAgICAgICBpbmRleE1ldGFkYXRhID0gJml0LT52YWx1ZTsKKyAgICBmb3IgKGF1dG8m
IGluZGV4IDogbV9tZXRhZGF0YS5pbmRleGVzLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChpbmRl
eC5uYW1lID09IG5hbWUpIHsKKyAgICAgICAgICAgIGluZGV4TWV0YWRhdGEgPSAmaW5kZXg7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTU1NSwxMCArNTU1LDEwIEBA
IHZvaWQgSURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uRmluaXNoZWQoKQogCiBpbnQ2NF90IElE
Qk9iamVjdFN0b3JlOjpmaW5kSW5kZXhJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0g
ICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVz
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoaXQtPmtleSAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQp
OwotICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CisgICAgZm9yIChhdXRvJiBpbmRleCA6IG1f
bWV0YWRhdGEuaW5kZXhlcykgeworICAgICAgICBpZiAoaW5kZXgudmFsdWUubmFtZSA9PSBuYW1l
KSB7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXgua2V5ICE9IElEQkluZGV4TWV0YWRhdGE6Oklu
dmFsaWRJZCk7CisgICAgICAgICAgICByZXR1cm4gaW5kZXgua2V5OwogICAgICAgICB9CiAgICAg
fQogICAgIHJldHVybiBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFu
c2FjdGlvbk1vbml0b3IuY3BwCmluZGV4IGU2NzQxYmRkMzY2ZThjZDM4MWU2N2MyOTY2YjhlNTZl
ZTFjOGJmZDYuLjJmNzNkM2YzNzZkNTdkMDFlNGMyNjQzN2NkM2NjNTYwZTU1MmM5MTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2Fj
dGlvbk1vbml0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCkBAIC01OCwxMCArNTgsOCBAQCB2b2lkIElE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmFkZE5ld1RyYW5zYWN0aW9uKFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb24+CiB2b2lkIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmRlYWN0
aXZhdGVOZXdUcmFuc2FjdGlvbnMoKQogewogICAgIFRocmVhZFNwZWNpZmljPFRyYW5zYWN0aW9u
TGlzdD4mIGxpc3QgPSB0cmFuc2FjdGlvbnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJh
bnNhY3Rpb24gPSBsaXN0LT5hdChpKTsKKyAgICBmb3IgKGF1dG8mIHRyYW5zYWN0aW9uIDogKmxp
c3QpCiAgICAgICAgIHRyYW5zYWN0aW9uLT5zZXRBY3RpdmUoZmFsc2UpOwotICAgIH0KICAgICAv
LyBGSVhNRTogRXhlcmNpc2UgdGhpcyBjYWxsIHRvIGNsZWFyKCkgaW4gYSBsYXlvdXQgdGVzdC4K
ICAgICBsaXN0LT5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCAyY2FjMzI1Y2ExMTYyYmRkM2Y2ZjY5MGM0NjljNTQ2
MjlkZWI3MDUxLi4xYzczNzA5OWE2NTM2ODA0OGYxZGM1NmRmNTM5M2FmMDQxMDZlZGNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApAQCAt
MTYzLDggKzE2Myw4IEBAIHZvaWQgSURCUmVxdWVzdDo6YWJvcnQoKQogICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiBzZWxmKHRoaXMpOwogCiAgICAgRXZlbnRRdWV1ZSYgZXZlbnRRdWV1ZSA9IHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9lbnF1ZXVlZEV2ZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBib29sIHJlbW92
ZWQgPSBldmVudFF1ZXVlLmNhbmNlbEV2ZW50KCptX2VucXVldWVkRXZlbnRzW2ldKTsKKyAgICBm
b3IgKGF1dG8mIGV2ZW50IDogbV9lbnF1ZXVlZEV2ZW50cykgeworICAgICAgICBib29sIHJlbW92
ZWQgPSBldmVudFF1ZXVlLmNhbmNlbEV2ZW50KCpldmVudCk7CiAgICAgICAgIEFTU0VSVF9VTlVT
RUQocmVtb3ZlZCwgcmVtb3ZlZCk7CiAgICAgfQogICAgIG1fZW5xdWV1ZWRFdmVudHMuY2xlYXIo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmNwcAppbmRleCA3YTczN2UxYmI5ZWY5YmQ2MjhhNDY2NTQ5Mjk1MjI0OWVmNjg2YmIzLi5k
ODhmM2U4YWU2YTgxOGFiYjhjOGZjZDhiMzdmNTFiNDMyODM0OWE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCkBAIC0yNTgs
OCArMjU4LDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6Y2xvc2VPcGVuQ3Vyc29ycygpCiB7CiAg
ICAgSGFzaFNldDxJREJDdXJzb3IqPiBjdXJzb3JzOwogICAgIGN1cnNvcnMuc3dhcChtX29wZW5D
dXJzb3JzKTsKLSAgICBmb3IgKEhhc2hTZXQ8SURCQ3Vyc29yKj46Oml0ZXJhdG9yIGkgPSBjdXJz
b3JzLmJlZ2luKCk7IGkgIT0gY3Vyc29ycy5lbmQoKTsgKytpKQotICAgICAgICAoKmkpLT5jbG9z
ZSgpOworICAgIGZvciAoYXV0byYgY3Vyc29yIDogY3Vyc29ycykKKyAgICAgICAgY3Vyc29yLT5j
bG9zZSgpOwogfQogCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpyZWdpc3RlclJlcXVlc3QoSURCUmVx
dWVzdCogcmVxdWVzdCkKQEAgLTI5Nyw4ICsyOTcsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpv
bkFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gcHJwRXJyb3IpCiAgICAgfQogCiAg
ICAgaWYgKGlzVmVyc2lvbkNoYW5nZSgpKSB7Ci0gICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5iZWdpbigp
OyBpdCAhPSBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgICAg
IGl0LT5rZXktPnNldE1ldGFkYXRhKGl0LT52YWx1ZSk7CisgICAgICAgIGZvciAoYXV0byYgb2Jq
ZWN0U3RvcmUgOiBtX29iamVjdFN0b3JlQ2xlYW51cE1hcCkKKyAgICAgICAgICAgIG9iamVjdFN0
b3JlLmtleS0+c2V0TWV0YWRhdGEob2JqZWN0U3RvcmUudmFsdWUpOwogICAgICAgICBtX2RhdGFi
YXNlLT5zZXRNZXRhZGF0YShtX3ByZXZpb3VzTWV0YWRhdGEpOwogICAgICAgICBtX2RhdGFiYXNl
LT5jbG9zZSgpOwogICAgIH0KQEAgLTM3MCwxMSArMzcwLDExIEBAIGJvb2wgSURCVHJhbnNhY3Rp
b246OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgbV9zdGF0ZSA9
IEZpbmlzaGVkOwogCiAgICAgLy8gQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICBmb3IgKElE
Qk9iamVjdFN0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuYmVnaW4oKTsg
aXQgIT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT50
cmFuc2FjdGlvbkZpbmlzaGVkKCk7CisgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fb2Jq
ZWN0U3RvcmVNYXApCisgICAgICAgIG9iamVjdFN0b3JlLnZhbHVlLT50cmFuc2FjdGlvbkZpbmlz
aGVkKCk7CiAgICAgbV9vYmplY3RTdG9yZU1hcC5jbGVhcigpOwotICAgIGZvciAoSURCT2JqZWN0
U3RvcmVTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9kZWxldGVkT2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0
ICE9IG1fZGVsZXRlZE9iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgKCppdCktPnRy
YW5zYWN0aW9uRmluaXNoZWQoKTsKKyAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9kZWxl
dGVkT2JqZWN0U3RvcmVzKQorICAgICAgICBvYmplY3RTdG9yZS0+dHJhbnNhY3Rpb25GaW5pc2hl
ZCgpOwogICAgIG1fZGVsZXRlZE9iamVjdFN0b3Jlcy5jbGVhcigpOwogCiAgICAgVmVjdG9yPFJl
ZlB0cjxFdmVudFRhcmdldD4+IHRhcmdldHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcAppbmRleCBhYmI1
ZDBmMjNlNmVlZTRhNDA0Mjg2NzQxNWUzOWNhYjU2MDQ4ZTg4Li44MTlmOWFkZmRiYWU1ZGFiNTcx
YzllOTdlZjBlZjE1Yzc1ZWY5ZWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKQEAgLTQ0LDggKzQ0
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmQ+IElEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y3JlYXRlKElEQkRhdGFiYXNlQmFja2VuZCogZGF0
YWJhc2VCYWNrZW5kLCBpbnQ2NF90IGlkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCiB7CiAgICAgSGFzaFNldDxpbnQ2NF90PiBvYmpl
Y3RTdG9yZUhhc2hTZXQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTdG9yZUlk
cy5zaXplKCk7ICsraSkKLSAgICAgICAgb2JqZWN0U3RvcmVIYXNoU2V0LmFkZChvYmplY3RTdG9y
ZUlkc1tpXSk7CisgICAgZm9yIChhdXRvJiBpZCA6IG9iamVjdFN0b3JlSWRzKQorICAgICAgICBv
YmplY3RTdG9yZUhhc2hTZXQuYWRkKGlkKTsKIAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURC
VHJhbnNhY3Rpb25CYWNrZW5kKGRhdGFiYXNlQmFja2VuZCwgaWQsIGNhbGxiYWNrcywgb2JqZWN0
U3RvcmVIYXNoU2V0LCBtb2RlKSk7CiB9CkBAIC0zMDcsOCArMzA3LDggQEAgdm9pZCBJREJUcmFu
c2FjdGlvbkJhY2tlbmQ6OnRhc2tUaW1lckZpcmVkKCkKIAogdm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ6OmNsb3NlT3BlbkN1cnNvcnMoKQogewotICAgIGZvciAoSGFzaFNldDxJREJDdXJzb3JC
YWNrZW5kKj46Oml0ZXJhdG9yIGkgPSBtX29wZW5DdXJzb3JzLmJlZ2luKCk7IGkgIT0gbV9vcGVu
Q3Vyc29ycy5lbmQoKTsgKytpKQotICAgICAgICAoKmkpLT5jbG9zZSgpOworICAgIGZvciAoYXV0
byYgY3Vyc29yIDogbV9vcGVuQ3Vyc29ycykKKyAgICAgICAgY3Vyc29yLT5jbG9zZSgpOwogICAg
IG1fb3BlbkN1cnNvcnMuY2xlYXIoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAppbmRleCA4OTQ2MDM2MTcyNTFiYjU3M2Q0
MmVkNWMwYWVkZmNmNjc1ZmQ5M2YxLi41ZjdhZWRjMjBmMjIwZDM1Yjg1OGFmNzkxZjA0MTM2MTk3
ZGFkYmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01l
ZGlhU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01l
ZGlhU291cmNlLmNwcApAQCAtODM2LDggKzgzNiw4IEBAIHZvaWQgTWVkaWFTb3VyY2U6Om9uUmVh
ZHlTdGF0ZUNoYW5nZShjb25zdCBBdG9taWNTdHJpbmcmIG9sZFN0YXRlLCBjb25zdCBBdG9taWNT
CiAgICAgbV9hY3RpdmVTb3VyY2VCdWZmZXJzLT5jbGVhcigpOwogCiAgICAgLy8gQ2xlYXIgU291
cmNlQnVmZmVyIHJlZmVyZW5jZXMgdG8gdGhpcyBvYmplY3QuCi0gICAgZm9yICh1bnNpZ25lZCBs
b25nIGkgPSAwLCBsZW5ndGggPSAgbV9zb3VyY2VCdWZmZXJzLT5sZW5ndGgoKTsgaSA8IGxlbmd0
aDsgKytpKQotICAgICAgICBtX3NvdXJjZUJ1ZmZlcnMtPml0ZW0oaSktPnJlbW92ZWRGcm9tTWVk
aWFTb3VyY2UoKTsKKyAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6ICptX3NvdXJjZUJ1ZmZlcnMpCisg
ICAgICAgIGJ1ZmZlci0+cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSgpOwogICAgIG1fc291cmNlQnVm
ZmVycy0+Y2xlYXIoKTsKICAgICAKICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5zb3Vy
Y2VjbG9zZUV2ZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFDb25zdHJhaW50c0ltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1wbC5jcHAKaW5kZXggMTBmODEyYmRhYjJmNzUx
Y2IzMjkwMDU0NTQ5MGRkZWNmMWJiNzc0Yy4uYzcxZjRkYzdjM2Q1OTdmYjBlYmQzNjUyZjY2ZWQx
NjcwYmU0Njk2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYUNvbnN0cmFpbnRzSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1wbC5jcHAKQEAgLTY3LDggKzY3LDggQEAgYm9v
bCBNZWRpYUNvbnN0cmFpbnRzSW1wbDo6aW5pdGlhbGl6ZShjb25zdCBEaWN0aW9uYXJ5JiBjb25z
dHJhaW50cykKICAgICBTdHJpbmcgbWFuZGF0b3J5ID0gQVNDSUlMaXRlcmFsKCJtYW5kYXRvcnki
KTsKICAgICBTdHJpbmcgb3B0aW9uYWwgPSBBU0NJSUxpdGVyYWwoIm9wdGlvbmFsIik7CiAKLSAg
ICBmb3IgKFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBpdCA9IG5hbWVzLmJlZ2luKCk7IGl0ICE9
IG5hbWVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICgqaXQgIT0gbWFuZGF0b3J5ICYmICpp
dCAhPSBvcHRpb25hbCkKKyAgICBmb3IgKGF1dG8mIG5hbWUgOiBuYW1lcykgeworICAgICAgICBp
ZiAobmFtZSAhPSBtYW5kYXRvcnkgJiYgbmFtZSAhPSBvcHRpb25hbCkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTEyMiw5ICsxMjIsOCBAQCBNZWRpYUNvbnN0cmFpbnRz
SW1wbDo6fk1lZGlhQ29uc3RyYWludHNJbXBsKCkKIHZvaWQgTWVkaWFDb25zdHJhaW50c0ltcGw6
OmdldE1hbmRhdG9yeUNvbnN0cmFpbnRzKFZlY3RvcjxNZWRpYUNvbnN0cmFpbnQ+JiBjb25zdHJh
aW50cykgY29uc3QKIHsKICAgICBjb25zdHJhaW50cy5jbGVhcigpOwotICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpID0gbV9tYW5kYXRvcnlDb25zdHJhaW50cy5i
ZWdpbigpOwotICAgIGZvciAoOyBpICE9IG1fbWFuZGF0b3J5Q29uc3RyYWludHMuZW5kKCk7ICsr
aSkKLSAgICAgICAgY29uc3RyYWludHMuYXBwZW5kKE1lZGlhQ29uc3RyYWludChpLT5rZXksIGkt
PnZhbHVlKSk7CisgICAgZm9yIChhdXRvJiBjb25zdHJhaW50IDogbV9tYW5kYXRvcnlDb25zdHJh
aW50cykKKyAgICAgICAgY29uc3RyYWludHMuYXBwZW5kKE1lZGlhQ29uc3RyYWludChjb25zdHJh
aW50LmtleSwgY29uc3RyYWludC52YWx1ZSkpOwogfQogCiB2b2lkIE1lZGlhQ29uc3RyYWludHNJ
bXBsOjpnZXRPcHRpb25hbENvbnN0cmFpbnRzKFZlY3RvcjxNZWRpYUNvbnN0cmFpbnQ+JiBjb25z
dHJhaW50cykgY29uc3QKQEAgLTE0NSwxMCArMTQ0LDkgQEAgYm9vbCBNZWRpYUNvbnN0cmFpbnRz
SW1wbDo6Z2V0TWFuZGF0b3J5Q29uc3RyYWludFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgU3Ry
aW4KIAogYm9vbCBNZWRpYUNvbnN0cmFpbnRzSW1wbDo6Z2V0T3B0aW9uYWxDb25zdHJhaW50VmFs
dWUoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewotICAgIFZlY3Rv
cjxNZWRpYUNvbnN0cmFpbnQ+Ojpjb25zdF9pdGVyYXRvciBpID0gbV9vcHRpb25hbENvbnN0cmFp
bnRzLmJlZ2luKCk7Ci0gICAgZm9yICg7IGkgIT0gbV9vcHRpb25hbENvbnN0cmFpbnRzLmVuZCgp
OyArK2kpIHsKLSAgICAgICAgaWYgKGktPm1fbmFtZSA9PSBuYW1lKSB7Ci0gICAgICAgICAgICB2
YWx1ZSA9IGktPm1fdmFsdWU7CisgICAgZm9yIChhdXRvJiBjb25zdHJhaW50IDogbV9vcHRpb25h
bENvbnN0cmFpbnRzKSB7CisgICAgICAgIGlmIChjb25zdHJhaW50Lm1fbmFtZSA9PSBuYW1lKSB7
CisgICAgICAgICAgICB2YWx1ZSA9IGNvbnN0cmFpbnQubV92YWx1ZTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcAppbmRleCA5ZmJmYjgyNjdlMmUxMjc5Zjlh
OGQxMTVjNDhlOTJkNjQyMTQ4MmQ0Li5lMjc3Yjg2ZmY1ODQ3ZGI5NDMwNjc2Y2UwMWUwMGMzYjFj
YjI1ZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtLmNwcApAQCAtNTEsMTEgKzUxLDExIEBAIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+
IE1lZGlhU3RyZWFtOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgUGFz
CiAgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+IGF1ZGlvVHJhY2tz
OwogICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiB2aWRlb1RyYWNr
czsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RyZWFtLT5tX2F1ZGlvVHJhY2tzLnNp
emUoKTsgKytpKQotICAgICAgICBhdWRpb1RyYWNrcy5hcHBlbmQoJnN0cmVhbS0+bV9hdWRpb1Ry
YWNrc1tpXS0+cHJpdmF0ZVRyYWNrKCkpOworICAgIGZvciAoYXV0byYgdHJhY2sgOiBzdHJlYW0t
Pm1fYXVkaW9UcmFja3MpCisgICAgICAgIGF1ZGlvVHJhY2tzLmFwcGVuZCgmdHJhY2stPnByaXZh
dGVUcmFjaygpKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RyZWFtLT5tX3ZpZGVv
VHJhY2tzLnNpemUoKTsgKytpKQotICAgICAgICB2aWRlb1RyYWNrcy5hcHBlbmQoJnN0cmVhbS0+
bV92aWRlb1RyYWNrc1tpXS0+cHJpdmF0ZVRyYWNrKCkpOworICAgIGZvciAoYXV0byYgdHJhY2sg
OiBzdHJlYW0tPm1fdmlkZW9UcmFja3MpCisgICAgICAgIHZpZGVvVHJhY2tzLmFwcGVuZCgmdHJh
Y2stPnByaXZhdGVUcmFjaygpKTsKIAogICAgIHJldHVybiBNZWRpYVN0cmVhbTo6Y3JlYXRlKGNv
bnRleHQsIE1lZGlhU3RyZWFtUHJpdmF0ZTo6Y3JlYXRlKGF1ZGlvVHJhY2tzLCB2aWRlb1RyYWNr
cykpOwogfQpAQCAtNjUsMTEgKzY1LDExIEBAIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IE1lZGlh
U3RyZWFtOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uCiAgICAg
VmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+IGF1ZGlvVHJhY2tzOwogICAg
IFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiB2aWRlb1RyYWNrczsKIAot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJhY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmICh0cmFja3NbaV0tPmtpbmQoKSA9PSAiYXVkaW8iKQotICAgICAgICAgICAgYXVkaW9UcmFj
a3MuYXBwZW5kKCZ0cmFja3NbaV0tPnByaXZhdGVUcmFjaygpKTsKKyAgICBmb3IgKGF1dG8mIHRy
YWNrIDogdHJhY2tzKSB7CisgICAgICAgIGlmICh0cmFjay0+a2luZCgpID09ICJhdWRpbyIpCisg
ICAgICAgICAgICBhdWRpb1RyYWNrcy5hcHBlbmQoJnRyYWNrLT5wcml2YXRlVHJhY2soKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZpZGVvVHJhY2tzLmFwcGVuZCgmdHJhY2tzW2ldLT5w
cml2YXRlVHJhY2soKSk7CisgICAgICAgICAgICB2aWRlb1RyYWNrcy5hcHBlbmQoJnRyYWNrLT5w
cml2YXRlVHJhY2soKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIE1lZGlhU3RyZWFtOjpjcmVhdGUo
Y29udGV4dCwgTWVkaWFTdHJlYW1Qcml2YXRlOjpjcmVhdGUoYXVkaW9UcmFja3MsIHZpZGVvVHJh
Y2tzKSk7CkBAIC0xMzQsOCArMTM0LDggQEAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gTWVkaWFT
dHJlYW06OmNsb25lKCkKIAogdm9pZCBNZWRpYVN0cmVhbTo6Y2xvbmVNZWRpYVN0cmVhbVRyYWNr
VmVjdG9yKFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4+JiBkZXN0aW5hdGlvbiwgY29u
c3QgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPj4mIHNvdXJjZSkKIHsKLSAgICBmb3Ig
KGF1dG8gaXQgPSBzb3VyY2UuYmVnaW4oKSwgZW5kID0gc291cmNlLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZCgoKml0KS0+Y2xvbmUoKSk7CisgICAg
Zm9yIChhdXRvJiB0cmFjayA6IHNvdXJjZSkKKyAgICAgICAgZGVzdGluYXRpb24uYXBwZW5kKHRy
YWNrLT5jbG9uZSgpKTsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbTo6YWRkVHJhY2soUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbVRyYWNrPiBwcnBUcmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xNDYs
OCArMTQ2LDggQEAgdm9pZCBNZWRpYVN0cmVhbTo6YWRkVHJhY2soUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbVRyYWNrPiBwcnBUcmFjaywgRXhjZXB0aW9uQ29kZSYKICAgICB9CiAKICAgICBpZiAoYWRk
VHJhY2socHJwVHJhY2spKSB7Ci0gICAgICAgIGZvciAoYXV0byBvYnNlcnZlciA9IG1fb2JzZXJ2
ZXJzLmJlZ2luKCksIGVuZCA9IG1fb2JzZXJ2ZXJzLmVuZCgpOyBvYnNlcnZlciAhPSBlbmQ7ICsr
b2JzZXJ2ZXIpCi0gICAgICAgICAgICAoKm9ic2VydmVyKS0+ZGlkQWRkT3JSZW1vdmVUcmFjaygp
OworICAgICAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogbV9vYnNlcnZlcnMpCisgICAgICAgICAg
ICBvYnNlcnZlci0+ZGlkQWRkT3JSZW1vdmVUcmFjaygpOwogICAgIH0KIH0KIApAQCAtMTgxLDgg
KzE4MSw4IEBAIHZvaWQgTWVkaWFTdHJlYW06OnJlbW92ZVRyYWNrKFBhc3NSZWZQdHI8TWVkaWFT
dHJlYW1UcmFjaz4gcHJwVHJhY2ssIEV4Y2VwdGlvbkNvCiAgICAgfQogCiAgICAgaWYgKHJlbW92
ZVRyYWNrKHBycFRyYWNrKSkgewotICAgICAgICBmb3IgKGF1dG8gb2JzZXJ2ZXIgPSBtX29ic2Vy
dmVycy5iZWdpbigpLCBlbmQgPSBtX29ic2VydmVycy5lbmQoKTsgb2JzZXJ2ZXIgIT0gZW5kOyAr
K29ic2VydmVyKQotICAgICAgICAgICAgKCpvYnNlcnZlciktPmRpZEFkZE9yUmVtb3ZlVHJhY2so
KTsKKyAgICAgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IG1fb2JzZXJ2ZXJzKQorICAgICAgICAg
ICAgb2JzZXJ2ZXItPmRpZEFkZE9yUmVtb3ZlVHJhY2soKTsKICAgICB9CiB9CiAKQEAgLTIxNiwx
NSArMjE2LDE1IEBAIGJvb2wgTWVkaWFTdHJlYW06OnJlbW92ZVRyYWNrKFBhc3NSZWZQdHI8TWVk
aWFTdHJlYW1UcmFjaz4gcHJwVHJhY2spCiBib29sIE1lZGlhU3RyZWFtOjpoYXZlVHJhY2tXaXRo
U291cmNlKFBhc3NSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gc291cmNlKQogewogICAgIGlm
IChzb3VyY2UtPnR5cGUoKSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpbykgewotICAgICAg
ICBmb3IgKGF1dG8gaXQgPSBtX2F1ZGlvVHJhY2tzLmJlZ2luKCksIGVuZCA9IG1fYXVkaW9UcmFj
a3MuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKCgqaXQpLT5zb3Vy
Y2UoKSA9PSBzb3VyY2UuZ2V0KCkpCisgICAgICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX2F1ZGlv
VHJhY2tzKSB7CisgICAgICAgICAgICBpZiAodHJhY2stPnNvdXJjZSgpID09IHNvdXJjZS5nZXQo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZm9yIChhdXRvIGl0ID0gbV92aWRlb1RyYWNrcy5iZWdp
bigpLCBlbmQgPSBtX3ZpZGVvVHJhY2tzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgaWYgKCgqaXQpLT5zb3VyY2UoKSA9PSBzb3VyY2UuZ2V0KCkpCisgICAgZm9yIChhdXRvJiB0
cmFjayA6IG1fdmlkZW9UcmFja3MpIHsKKyAgICAgICAgaWYgKHRyYWNrLT5zb3VyY2UoKSA9PSBz
b3VyY2UuZ2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTIzMywx
NCArMjMzLDE0IEBAIGJvb2wgTWVkaWFTdHJlYW06OmhhdmVUcmFja1dpdGhTb3VyY2UoUGFzc1Jl
ZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBzb3VyY2UpCiAKIE1lZGlhU3RyZWFtVHJhY2sqIE1l
ZGlhU3RyZWFtOjpnZXRUcmFja0J5SWQoU3RyaW5nIGlkKQogewotICAgIGZvciAoYXV0byBpdCA9
IG1fYXVkaW9UcmFja3MuYmVnaW4oKSwgZW5kID0gbV9hdWRpb1RyYWNrcy5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS0+aWQoKSA9PSBpZCkKLSAgICAgICAgICAg
IHJldHVybiAoKml0KS5nZXQoKTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV9hdWRpb1RyYWNr
cykgeworICAgICAgICBpZiAodHJhY2stPmlkKCkgPT0gaWQpCisgICAgICAgICAgICByZXR1cm4g
dHJhY2suZ2V0KCk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvIGl0ID0gbV92aWRlb1RyYWNrcy5i
ZWdpbigpLCBlbmQgPSBtX3ZpZGVvVHJhY2tzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgaWYgKCgqaXQpLT5pZCgpID09IGlkKQotICAgICAgICAgICAgcmV0dXJuICgqaXQpLmdl
dCgpOworICAgIGZvciAoYXV0byYgdHJhY2sgOiAgbV92aWRlb1RyYWNrcykgeworICAgICAgICBp
ZiAodHJhY2stPmlkKCkgPT0gaWQpCisgICAgICAgICAgICByZXR1cm4gdHJhY2suZ2V0KCk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNDksMjIgKzI0OSwyMiBAQCBNZWRpYVN0
cmVhbVRyYWNrKiBNZWRpYVN0cmVhbTo6Z2V0VHJhY2tCeUlkKFN0cmluZyBpZCkKIFZlY3RvcjxS
ZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4+IE1lZGlhU3RyZWFtOjpnZXRUcmFja3MoKQogewogICAg
IFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4+IHRyYWNrczsKLSAgICBmb3IgKGF1dG8g
aXQgPSBtX2F1ZGlvVHJhY2tzLmJlZ2luKCksIGVuZCA9IG1fYXVkaW9UcmFja3MuZW5kKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdHJhY2tzLmFwcGVuZCgoKml0KS5nZXQoKSk7Ci0gICAg
Zm9yIChhdXRvIGl0ID0gbV92aWRlb1RyYWNrcy5iZWdpbigpLCBlbmQgPSBtX3ZpZGVvVHJhY2tz
LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHRyYWNrcy5hcHBlbmQoKCppdCkuZ2V0
KCkpOworICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX2F1ZGlvVHJhY2tzKQorICAgICAgICB0cmFj
a3MuYXBwZW5kKHRyYWNrLmdldCgpKTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV92aWRlb1Ry
YWNrcykKKyAgICAgICAgdHJhY2tzLmFwcGVuZCh0cmFjay5nZXQoKSk7CiAKICAgICByZXR1cm4g
dHJhY2tzOwogfQogCiB2b2lkIE1lZGlhU3RyZWFtOjp0cmFja0RpZEVuZCgpCiB7Ci0gICAgZm9y
IChhdXRvIGl0ID0gbV9hdWRpb1RyYWNrcy5iZWdpbigpLCBlbmQgPSBtX2F1ZGlvVHJhY2tzLmVu
ZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCEoKml0KS0+ZW5kZWQoKSkKKyAg
ICBmb3IgKGF1dG8mIHRyYWNrIDogbV9hdWRpb1RyYWNrcykgeworICAgICAgICBpZiAoIXRyYWNr
LT5lbmRlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBmb3IgKGF1dG8gaXQg
PSBtX3ZpZGVvVHJhY2tzLmJlZ2luKCksIGVuZCA9IG1fdmlkZW9UcmFja3MuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoISgqaXQpLT5lbmRlZCgpKQorICAgIGZvciAoYXV0
byYgdHJhY2sgOiBtX3ZpZGVvVHJhY2tzKSB7CisgICAgICAgIGlmICghdHJhY2stPmVuZGVkKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNjEsOCArMzYxLDggQEAgdm9pZCBN
ZWRpYVN0cmVhbTo6c2NoZWR1bGVkRXZlbnRUaW1lckZpcmVkKCkKICAgICBWZWN0b3I8UmVmUHRy
PEV2ZW50Pj4gZXZlbnRzOwogICAgIGV2ZW50cy5zd2FwKG1fc2NoZWR1bGVkRXZlbnRzKTsKIAot
ICAgIGZvciAoYXV0byBpdCA9IGV2ZW50cy5iZWdpbigpLCBlbmQgPSBldmVudHMuZW5kKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZGlzcGF0Y2hFdmVudCgoKml0KS5yZWxlYXNlKCkpOwor
ICAgIGZvciAoYXV0byYgZXZlbnQgOiBldmVudHMpCisgICAgICAgIGRpc3BhdGNoRXZlbnQoZXZl
bnQucmVsZWFzZSgpKTsKIAogICAgIGV2ZW50cy5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNhcGFiaWxpdGllcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2FwYWJp
bGl0aWVzLmNwcAppbmRleCA4NTRmNmQ5ODZmZWM4NDIwYjJlN2RhNzdhYWIxMmMzOWIxMWRmMzQ1
Li40ODA0MDQ4ZDk3Nzg3OWI0MjgxODcwNGU1Y2NiMTVkM2VjMTI2NWQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2FwYWJpbGl0aWVz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
Q2FwYWJpbGl0aWVzLmNwcApAQCAtNTgsMTIgKzU4LDExIEBAIFZlY3RvcjxTdHJpbmc+IE1lZGlh
U3RyZWFtQ2FwYWJpbGl0aWVzOjpzb3VyY2VUeXBlKCkgY29uc3QKICAgICBpZiAoIWNvdW50KQog
ICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKICAgICAKLSAgICBjb25zdCBWZWN0b3I8
UmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6U291cmNlVHlwZT4mIHNvdXJjZVR5cGVzID0gbV9T
b3VyY2VDYXBhYmlsaXRpZXMtPnNvdXJjZVR5cGVzKCk7CiAgICAgVmVjdG9yPFN0cmluZz4gY2Fw
YWJpbGl0aWVzOwogICAgIGNhcGFiaWxpdGllcy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOwogICAg
IAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgY2FwYWJp
bGl0aWVzLmFwcGVuZChSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpzb3VyY2VUeXBlKHNvdXJj
ZVR5cGVzW2ldKSk7CisgICAgZm9yIChhdXRvJiB0eXBlIDogbV9Tb3VyY2VDYXBhYmlsaXRpZXMt
PnNvdXJjZVR5cGVzKCkpCisgICAgICAgIGNhcGFiaWxpdGllcy5hcHBlbmQoUmVhbHRpbWVNZWRp
YVNvdXJjZVN0YXRlczo6c291cmNlVHlwZSh0eXBlKSk7CiAgICAgCiAgICAgcmV0dXJuIGNhcGFi
aWxpdGllczsKIH0KQEAgLTczLDEzICs3MiwxMiBAQCBWZWN0b3I8U3RyaW5nPiBNZWRpYVN0cmVh
bUNhcGFiaWxpdGllczo6c291cmNlSWQoKSBjb25zdAogICAgIHNpemVfdCBjb3VudCA9IG1fU291
cmNlQ2FwYWJpbGl0aWVzLT5zb3VyY2VJZCgpLnNpemUoKTsKICAgICBpZiAoIWNvdW50KQogICAg
ICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKLSAgICAKLSAgICBjb25zdCBWZWN0b3I8QXRv
bWljU3RyaW5nPiYgc291cmNlSWRzID0gbV9Tb3VyY2VDYXBhYmlsaXRpZXMtPnNvdXJjZUlkKCk7
CisKICAgICBWZWN0b3I8U3RyaW5nPiBjYXBhYmlsaXRpZXM7CiAgICAgY2FwYWJpbGl0aWVzLnJl
c2VydmVDYXBhY2l0eShjb3VudCk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQotICAgICAgICBjYXBhYmlsaXRpZXMuYXBwZW5kKHNvdXJjZUlkc1tpXSk7CisK
KyAgICBmb3IgKGF1dG8mIGlkIDogbV9Tb3VyY2VDYXBhYmlsaXRpZXMtPnNvdXJjZUlkKCkpCisg
ICAgICAgIGNhcGFiaWxpdGllcy5hcHBlbmQoaWQpOwogICAgIAogICAgIHJldHVybiBjYXBhYmls
aXRpZXM7CiB9CkBAIC05MiwxMiArOTAsMTEgQEAgVmVjdG9yPFN0cmluZz4gTWVkaWFTdHJlYW1D
YXBhYmlsaXRpZXM6OmZhY2luZ01vZGUoKSBjb25zdAogICAgIGlmICghY291bnQpCiAgICAgICAg
IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogICAgIAotICAgIGNvbnN0IFZlY3RvcjxSZWFsdGlt
ZU1lZGlhU291cmNlU3RhdGVzOjpWaWRlb0ZhY2luZ01vZGU+JiBmYWNpbmdNb2RlcyA9IG1fU291
cmNlQ2FwYWJpbGl0aWVzLT5mYWNpbmdNb2RlcygpOwogICAgIFZlY3RvcjxTdHJpbmc+IGNhcGFi
aWxpdGllczsKICAgICBjYXBhYmlsaXRpZXMucmVzZXJ2ZUNhcGFjaXR5KGNvdW50KTsKICAgICAK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIGNhcGFiaWxp
dGllcy5hcHBlbmQoUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZShmYWNpbmdN
b2Rlc1tpXSkpOworICAgIGZvciAoYXV0byYgbW9kZSA6IG1fU291cmNlQ2FwYWJpbGl0aWVzLT5m
YWNpbmdNb2RlcygpKQorICAgICAgICBjYXBhYmlsaXRpZXMuYXBwZW5kKFJlYWx0aW1lTWVkaWFT
b3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUobW9kZSkpOwogICAgIAogICAgIHJldHVybiBjYXBhYmls
aXRpZXM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtVHJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbVRyYWNrLmNwcAppbmRleCAzZmFiYWIxZDY4Yzg5NmExNTIxMzQzYTQ4YWRk
YmRiNzNhYWJmNDYzLi43MWMxZDhhNjVlZWZmNzYxNGE0OTgzY2U3YWJmNjNmYWY0MGZmOWM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
VHJhY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW1UcmFjay5jcHAKQEAgLTI5MCw4ICsyOTAsOCBAQCB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6
OnRyYWNrRGlkRW5kKCkKIHsKICAgICBtX3ByaXZhdGVUcmFjay0+c2V0UmVhZHlTdGF0ZShSZWFs
dGltZU1lZGlhU291cmNlOjpFbmRlZCk7CiAKLSAgICBmb3IgKFZlY3RvcjxPYnNlcnZlcio+Ojpp
dGVyYXRvciBpID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgaSAhPSBtX29ic2VydmVycy5lbmQoKTsg
KytpKQotICAgICAgICAoKmkpLT50cmFja0RpZEVuZCgpOworICAgIGZvciAoYXV0byYgb2JzZXJ2
ZXIgOiBtX29ic2VydmVycykKKyAgICAgICAgb2JzZXJ2ZXItPnRyYWNrRGlkRW5kKCk7CiB9CiAK
IHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6c3RvcCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tTb3Vy
Y2VzUmVxdWVzdC5jcHAKaW5kZXggZmIyYzUxMjdhNTgwMGIyNDQxMGRhMzlhNzgwZDIzM2JkMWUw
ZDMzYS4uNTQ4YzBmOTdlN2NmYTAzMGZiM2Q2YWRjN2Q4YjE3MWZjYWUxYmY1NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrU291
cmNlc1JlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0LmNwcApAQCAtNTIsOCArNTIsOCBAQCB2b2lk
IE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdDo6ZGlkQ29tcGxldGVSZXF1ZXN0KGNvbnN0
IFZlY3RvcjxSZWZQdHI8VHJhYwogewogICAgIEFTU0VSVChtX2NhbGxiYWNrKTsKIAotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVxdWVzdFNvdXJjZUluZm9zLnNpemUoKTsgKytpKQotICAg
ICAgICBtX3NvdXJjZUluZm9zLmFwcGVuZChTb3VyY2VJbmZvOjpjcmVhdGUocmVxdWVzdFNvdXJj
ZUluZm9zW2ldKSk7CisgICAgZm9yIChhdXRvJiBpbmZvIDogcmVxdWVzdFNvdXJjZUluZm9zKQor
ICAgICAgICBtX3NvdXJjZUluZm9zLmFwcGVuZChTb3VyY2VJbmZvOjpjcmVhdGUoaW5mbykpOwog
CiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdD4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKICAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzXSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254040</attachid>
            <date>2015-06-01 19:01:20 -0700</date>
            <delta_ts>2015-06-01 20:13:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145507-20150602110102.patch</filename>
            <type>text/plain</type>
            <size>49063</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1MDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmRjZTQ2MmU2YTBkNGVk
ZmYwNWQyMjYzOTgzNGI3Yjg3ZjNiNzMyZC4uNTU0YTc5MjhmZGVlYmFjMzM0N2Y5MjAxOTA5Y2E3
NDQ2NzNjYjJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE1LTA2LTAxICBIdW5z
ZW9wIEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBXZWJDb3JlL01vZHVsZXMgLSAxCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU1MDcKKworICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZXMu
CisKKyAgICAgICAgKiBNb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QmF0dGVyeUNvbnRyb2xsZXI6On5CYXR0ZXJ5Q29udHJvbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q29udHJvbGxlcjo6dXBkYXRlQmF0dGVyeVN0YXR1cyk6
CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlQmF0dGVyeVN0
YXR1cyk6CisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0RNRmFjdG9yeUZvcktleVN5c3RlbSk6CisgICAgICAgICogTW9kdWxlcy9l
bmNyeXB0ZWRtZWRpYS9NZWRpYUtleXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFLZXlz
Ojp+TWVkaWFLZXlzKToKKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpyZXN1bWVUaW1lckZpcmVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpyZXNldEFsbEdlb2xvY2F0aW9uUGVybWlz
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6bWFrZUNhY2hlZFBvc2l0aW9u
Q2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpzZW5kRXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OnNlbmRQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHZW9sb2NhdGlvbjo6c3RvcFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xv
Y2F0aW9uOjpjYW5jZWxSZXF1ZXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6
ZXh0cmFjdE5vdGlmaWVyc1dpdGhDYWNoZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
ZW9sb2NhdGlvbjo6Y29weVRvU2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpo
YW5kbGVQZW5kaW5nUGVybWlzc2lvbk5vdGlmaWVycyk6CisgICAgICAgICogTW9kdWxlcy9nZW9s
b2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2Vv
bG9jYXRpb25Db250cm9sbGVyOjpwb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
R2VvbG9jYXRpb25Db250cm9sbGVyOjplcnJvck9jY3VycmVkKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZTo6b2JqZWN0U3RvcmVOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6dHJh
bnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmZvcmNlQ2xvc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmNsb3NlQ29ubmVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZmluZE9iamVjdFN0b3JlSWQpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJEYXRhYmFzZUJhY2tlbmQ6OnJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZURhdGFiYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6Y2xvc2UpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VNZXRhZGF0YTo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlTWV0YWRhdGE6Omlzb2xhdGVkQ29weSk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6aXNWYWxp
ZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5Lmg6CisgICAgICAgIChXZWJD
b3JlOjpJREJLZXk6OmNyZWF0ZU11bHRpRW50cnlBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXk6OmNyZWF0ZUFycmF5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQ
YXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OklEQktleVBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6aXNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXlQYXRoOjppc29sYXRlZENvcHkpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRl
eE5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAgICAg
ICBSZW5hbWUgdGhlIHR3byAnaSdzIHRvICdrZXlEYXRhJyBhbmQgJ2luZGV4S2V5RGF0YScuCisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6aW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6OmZpbmRJbmRleElkKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmRlYWN0aXZhdGVOZXdUcmFuc2FjdGlvbnMp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCUmVxdWVzdDo6YWJvcnQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpj
bG9zZU9wZW5DdXJzb3JzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvbkFi
b3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kOjpjbG9zZU9wZW5DdXJzb3JzKToKKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU291cmNlOjpvblJlYWR5U3RhdGVDaGFuZ2UpOgorICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50c0ltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb25zdHJhaW50c0ltcGw6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFDb25zdHJhaW50c0ltcGw6OmdldE1hbmRhdG9yeUNvbnN0cmFpbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHNJbXBsOjpnZXRPcHRpb25hbENvbnN0cmFpbnRWYWx1
ZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtOjpjbG9uZU1lZGlhU3RyZWFtVHJhY2tWZWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW06OmFkZFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFt
OjpyZW1vdmVUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6aGF2ZVRyYWNr
V2l0aFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6Z2V0VHJhY2tCeUlk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtOjpnZXRUcmFja3MpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTdHJlYW06OnRyYWNrRGlkRW5kKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtOjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQpOgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM6OnNvdXJjZVR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM6OnNvdXJjZUlkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzOjpmYWNpbmdNb2RlKToKKyAgICAgICAgKiBNb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTdHJlYW1UcmFjazo6dHJhY2tEaWRFbmQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdDo6ZGlkQ29tcGxldGVSZXF1ZXN0KToKKwog
MjAxNS0wNS0zMCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJF
R1JFU1NJT04gKDE3OTc3MSk6IHpvb21pbmcgb24gZmFjZWJvb2sgaW1hZ2VzIGNvdmVycyBpbWFn
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJv
bGxlci5jcHAKaW5kZXggYWQ3ODg4NTc2YWE5MWQxZmRiN2U4Zjk5M2FkZjUyOThkMmM3MDliOS4u
Y2Y4MmEzNTUyOWNlMzA4MDdkMTY5MDY5ZTVkN2FmY2I4YTQxYmQ5ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuY3BwCkBAIC0z
Nyw4ICszNyw4IEBAIEJhdHRlcnlDb250cm9sbGVyOjpCYXR0ZXJ5Q29udHJvbGxlcihCYXR0ZXJ5
Q2xpZW50KiBjbGllbnQpCiAKIEJhdHRlcnlDb250cm9sbGVyOjp+QmF0dGVyeUNvbnRyb2xsZXIo
KQogewotICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gbV9saXN0ZW5lcnMu
YmVnaW4oKTsgaXQgIT0gbV9saXN0ZW5lcnMuZW5kKCk7ICsraXQpCi0gICAgICAgICgqaXQpLT5i
YXR0ZXJ5Q29udHJvbGxlckRlc3Ryb3llZCgpOworICAgIGZvciAoYXV0byYgbGlzdGVuZXIgOiBt
X2xpc3RlbmVycykKKyAgICAgICAgbGlzdGVuZXItPmJhdHRlcnlDb250cm9sbGVyRGVzdHJveWVk
KCk7CiAgICAgbV9jbGllbnQtPmJhdHRlcnlDb250cm9sbGVyRGVzdHJveWVkKCk7CiB9CiAKQEAg
LTc1LDggKzc1LDggQEAgdm9pZCBCYXR0ZXJ5Q29udHJvbGxlcjo6dXBkYXRlQmF0dGVyeVN0YXR1
cyhQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGEKICAgICAgICAgaWYgKG1fYmF0
dGVyeVN0YXR1cy0+bGV2ZWwoKSAhPSBzdGF0dXMtPmxldmVsKCkpCiAgICAgICAgICAgICBkaWRD
aGFuZ2VCYXR0ZXJ5U3RhdHVzKFdlYkNvcmU6OmV2ZW50TmFtZXMoKS5sZXZlbGNoYW5nZUV2ZW50
LCBzdGF0dXMpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0
ZXJhdG9yIGl0ID0gbV9saXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9saXN0ZW5lcnMuZW5kKCk7
ICsraXQpCi0gICAgICAgICAgICAoKml0KS0+dXBkYXRlQmF0dGVyeVN0YXR1cyhzdGF0dXMpOwor
ICAgICAgICBmb3IgKGF1dG8mIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMpCisgICAgICAgICAgICBs
aXN0ZW5lci0+dXBkYXRlQmF0dGVyeVN0YXR1cyhzdGF0dXMpOwogICAgIH0KIAogICAgIG1fYmF0
dGVyeVN0YXR1cyA9IHN0YXR1cy5yZWxlYXNlKCk7CkBAIC04Niw4ICs4Niw4IEBAIHZvaWQgQmF0
dGVyeUNvbnRyb2xsZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0dXMoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIFBhCiB7CiAgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IEV2ZW50OjpjcmVh
dGUoZXZlbnRUeXBlLCBmYWxzZSwgZmFsc2UpOwogICAgIFJlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBi
YXR0ZXJ5ID0gYmF0dGVyeVN0YXR1czsKLSAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRv
ciBpdCA9IG1fbGlzdGVuZXJzLmJlZ2luKCk7IGl0ICE9IG1fbGlzdGVuZXJzLmVuZCgpOyArK2l0
KQotICAgICAgICAoKml0KS0+ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhldmVudCwgYmF0dGVyeSk7
CisgICAgZm9yIChhdXRvJiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzKQorICAgICAgICBsaXN0ZW5l
ci0+ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhldmVudCwgYmF0dGVyeSk7CiB9CiAKIGNvbnN0IGNo
YXIqIEJhdHRlcnlDb250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETS5jcHAKaW5kZXggYWQyZmE3N2NkZDU2OGMyNTkx
YWMyNmQ1NGRlMDBiZTYzMDc0ODAzNi4uMzkyZGRjMjY1Y2Q3ZTFhMjAyZjUwNDExNzYyZDgzZTFi
OTkyNGFiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRp
YS9DRE0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RN
LmNwcApAQCAtODksMTAgKzg5LDkgQEAgdm9pZCBDRE06OnJlZ2lzdGVyQ0RNRmFjdG9yeShDcmVh
dGVDRE0gY29uc3RydWN0b3IsIENETVN1cHBvcnRzS2V5U3lzdGVtIHN1cHBvcnQKIAogc3RhdGlj
IENETUZhY3RvcnkqIENETUZhY3RvcnlGb3JLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0
ZW0pCiB7Ci0gICAgVmVjdG9yPENETUZhY3RvcnkqPiYgY2RtRmFjdG9yaWVzID0gaW5zdGFsbGVk
Q0RNRmFjdG9yaWVzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjZG1GYWN0b3JpZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGNkbUZhY3Rvcmllc1tpXS0+c3VwcG9ydHNLZXlT
eXN0ZW0oa2V5U3lzdGVtKSkKLSAgICAgICAgICAgIHJldHVybiBjZG1GYWN0b3JpZXNbaV07Cisg
ICAgZm9yIChhdXRvJiBmYWN0b3J5IDogaW5zdGFsbGVkQ0RNRmFjdG9yaWVzKCkpIHsKKyAgICAg
ICAgaWYgKGZhY3RvcnktPnN1cHBvcnRzS2V5U3lzdGVtKGtleVN5c3RlbSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFjdG9yeTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5cy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5cy5jcHAKaW5kZXggY2Ez
ZGIwYjE4MzFmNDVjNjgwODAxMWI1NjJhMjYyNzExNWRhMTgxOS4uNTY0M2FiZWRlZTNmMTAxZTg4
NTJmOGUwZWZhMzFiYjIyYzRhYTlmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlzLmNwcApAQCAtNzcsOSArNzcsOSBAQCBNZWRpYUtl
eXM6On5NZWRpYUtleXMoKQogewogICAgIC8vIEZyb20gPGh0dHA6Ly9kdmNzLnczLm9yZy9oZy9o
dG1sLW1lZGlhL3Jhdy1maWxlL3RpcC9lbmNyeXB0ZWQtbWVkaWEvZW5jcnlwdGVkLW1lZGlhLmh0
bWwjZG9tLW1lZGlhLWtleXMtY29uc3RydWN0b3I+OgogICAgIC8vIFdoZW4gZGVzdHJveWluZyBh
IE1lZGlhS2V5cyBvYmplY3QsIGZvbGxvdyB0aGUgc3RlcHMgaW4gY2xvc2UoKS4KLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fc2Vzc2lvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgbV9z
ZXNzaW9uc1tpXS0+Y2xvc2UoKTsKLSAgICAgICAgbV9zZXNzaW9uc1tpXS0+c2V0S2V5cygwKTsK
KyAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBtX3Nlc3Npb25zKSB7CisgICAgICAgIHNlc3Npb24t
PmNsb3NlKCk7CisgICAgICAgIHNlc3Npb24tPnNldEtleXMoMCk7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwCmlu
ZGV4IGY2ZGZjYzA5NGYxNjY2MDFhMTEyMTBhZmMxMjQ5Zjg5ZTc1NDE5NjMuLmYxOWVmYWY3NGQy
ZGU4MDcyNDM0MDI4ODRmMWUxYWQ1YTYzMmM3NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwCkBAIC0yMDgsMTMgKzIwOCwxMiBA
QCB2b2lkIEdlb2xvY2F0aW9uOjpyZXN1bWVUaW1lckZpcmVkKCkKIAogICAgIC8vIFJlc3VtZSBH
ZW9Ob3RpZmllciB0aW1lb3V0IHRpbWVycy4KICAgICBpZiAoaGFzTGlzdGVuZXJzKCkpIHsKLSAg
ICAgICAgR2VvTm90aWZpZXJTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fb25lU2hvdHMuZW5k
KCk7Ci0gICAgICAgIGZvciAoR2VvTm90aWZpZXJTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9v
bmVTaG90cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAoKml0KS0+c3Rh
cnRUaW1lcklmTmVlZGVkKCk7CisgICAgICAgIGZvciAoYXV0byYgbm90aWZpZXIgOiBtX29uZVNo
b3RzKQorICAgICAgICAgICAgbm90aWZpZXItPnN0YXJ0VGltZXJJZk5lZWRlZCgpOwogICAgICAg
ICBHZW9Ob3RpZmllclZlY3RvciB3YXRjaGVyQ29weTsKICAgICAgICAgbV93YXRjaGVycy5nZXRO
b3RpZmllcnNWZWN0b3Iod2F0Y2hlckNvcHkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHdhdGNoZXJDb3B5LnNpemUoKTsgKytpKQotICAgICAgICAgICAgd2F0Y2hlckNvcHlbaV0t
PnN0YXJ0VGltZXJJZk5lZWRlZCgpOworICAgICAgICBmb3IgKGF1dG8mIHdhdGNoZXIgOiB3YXRj
aGVyQ29weSkKKyAgICAgICAgICAgIHdhdGNoZXItPnN0YXJ0VGltZXJJZk5lZWRlZCgpOwogICAg
IH0KIAogICAgIGlmICgoaXNBbGxvd2VkKCkgfHwgaXNEZW5pZWQoKSkgJiYgIW1fcGVuZGluZ0Zv
clBlcm1pc3Npb25Ob3RpZmllcnMuaXNFbXB0eSgpKSB7CkBAIC0yNjksMTQgKzI2OCwxMyBAQCB2
b2lkIEdlb2xvY2F0aW9uOjpyZXNldEFsbEdlb2xvY2F0aW9uUGVybWlzc2lvbigpCiAgICAgc3Rv
cFRpbWVycygpOwogCiAgICAgLy8gR28gb3ZlciB0aGUgb25lIHNob3QgYW5kIHJlLXJlcXVlc3Qg
cGVybWlzc2lvbi4KLSAgICBHZW9Ob3RpZmllclNldDo6aXRlcmF0b3IgZW5kID0gbV9vbmVTaG90
cy5lbmQoKTsKLSAgICBmb3IgKEdlb05vdGlmaWVyU2V0OjppdGVyYXRvciBpdCA9IG1fb25lU2hv
dHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBzdGFydFJlcXVlc3QoKCppdCku
Z2V0KCkpOworICAgIGZvciAoYXV0byYgbm90aWZpZXIgOiBtX29uZVNob3RzKQorICAgICAgICBz
dGFydFJlcXVlc3Qobm90aWZpZXIuZ2V0KCkpOwogICAgIC8vIEdvIG92ZXIgdGhlIHdhdGNoZXJz
IGFuZCByZS1yZXF1ZXN0IHBlcm1pc3Npb24uCiAgICAgR2VvTm90aWZpZXJWZWN0b3Igd2F0Y2hl
ckNvcHk7CiAgICAgbV93YXRjaGVycy5nZXROb3RpZmllcnNWZWN0b3Iod2F0Y2hlckNvcHkpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2F0Y2hlckNvcHkuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIHN0YXJ0UmVxdWVzdCh3YXRjaGVyQ29weVtpXS5nZXQoKSk7CisgICAgZm9yIChhdXRvJiB3
YXRjaGVyIDogd2F0Y2hlckNvcHkpCisgICAgICAgIHN0YXJ0UmVxdWVzdCh3YXRjaGVyLmdldCgp
KTsKIH0KIAogdm9pZCBHZW9sb2NhdGlvbjo6c3RvcCgpCkBAIC0zOTIsMTUgKzM5MCwxMyBAQCB2
b2lkIEdlb2xvY2F0aW9uOjptYWtlQ2FjaGVkUG9zaXRpb25DYWxsYmFja3MoKQogICAgIC8vIEFs
bCBtb2RpZmljYXRpb25zIHRvIG1fcmVxdWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9uIGFyZSBk
b25lCiAgICAgLy8gYXN5bmNocm9ub3VzbHksIHNvIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJv
dXQgaXQgYmVpbmcgbW9kaWZpZWQgZnJvbQogICAgIC8vIHRoZSBjYWxsYmFja3MuCi0gICAgR2Vv
Tm90aWZpZXJTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdHNBd2FpdGluZ0NhY2hl
ZFBvc2l0aW9uLmVuZCgpOwotICAgIGZvciAoR2VvTm90aWZpZXJTZXQ6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbi5iZWdpbigpOyBpdGVyICE9
IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIEdlb05vdGlmaWVyKiBub3RpZmllciA9IGl0ZXItPmdl
dCgpOworICAgIGZvciAoYXV0byYgbm90aWZpZXIgOiBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQ
b3NpdGlvbikgewogICAgICAgICBub3RpZmllci0+cnVuU3VjY2Vzc0NhbGxiYWNrKGxhc3RQb3Np
dGlvbigpKTsKIAogICAgICAgICAvLyBJZiB0aGlzIGlzIGEgb25lLXNob3QgcmVxdWVzdCwgc3Rv
cCBpdC4gT3RoZXJ3aXNlLCBpZiB0aGUgd2F0Y2ggc3RpbGwKICAgICAgICAgLy8gZXhpc3RzLCBz
dGFydCB0aGUgc2VydmljZSB0byBnZXQgdXBkYXRlcy4KLSAgICAgICAgaWYgKCFtX29uZVNob3Rz
LnJlbW92ZShub3RpZmllcikgJiYgbV93YXRjaGVycy5jb250YWlucyhub3RpZmllcikpIHsKLSAg
ICAgICAgICAgIGlmIChub3RpZmllci0+aGFzWmVyb1RpbWVvdXQoKSB8fCBzdGFydFVwZGF0aW5n
KG5vdGlmaWVyKSkKKyAgICAgICAgaWYgKCFtX29uZVNob3RzLnJlbW92ZShub3RpZmllci5nZXQo
KSkgJiYgbV93YXRjaGVycy5jb250YWlucyhub3RpZmllci5nZXQoKSkpIHsKKyAgICAgICAgICAg
IGlmIChub3RpZmllci0+aGFzWmVyb1RpbWVvdXQoKSB8fCBzdGFydFVwZGF0aW5nKG5vdGlmaWVy
LmdldCgpKSkKICAgICAgICAgICAgICAgICBub3RpZmllci0+c3RhcnRUaW1lcklmTmVlZGVkKCk7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbm90aWZpZXItPnNldEZhdGFsRXJy
b3IoUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBPU0lUSU9OX1VOQVZBSUxB
QkxFLCBBU0NJSUxpdGVyYWwoZmFpbGVkVG9TdGFydFNlcnZpY2VFcnJvck1lc3NhZ2UpKSk7CkBA
IC00ODksMjYgKzQ4NSwyMCBAQCB2b2lkIEdlb2xvY2F0aW9uOjpzZXRJc0FsbG93ZWQoYm9vbCBh
bGxvd2VkKQogCiB2b2lkIEdlb2xvY2F0aW9uOjpzZW5kRXJyb3IoR2VvTm90aWZpZXJWZWN0b3Im
IG5vdGlmaWVycywgUG9zaXRpb25FcnJvciogZXJyb3IpCiB7Ci0gICAgIEdlb05vdGlmaWVyVmVj
dG9yOjpjb25zdF9pdGVyYXRvciBlbmQgPSBub3RpZmllcnMuZW5kKCk7Ci0gICAgIGZvciAoR2Vv
Tm90aWZpZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbm90aWZpZXJzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgUmVmUHRyPEdlb05vdGlmaWVyPiBub3RpZmllciA9
ICppdDsKLSAgICAgICAgIAotICAgICAgICAgbm90aWZpZXItPnJ1bkVycm9yQ2FsbGJhY2soZXJy
b3IpOwotICAgICB9CisgICAgZm9yIChhdXRvJiBub3RpZmllciA6IG5vdGlmaWVycykKKyAgICAg
ICAgbm90aWZpZXItPnJ1bkVycm9yQ2FsbGJhY2soZXJyb3IpOwogfQogCiB2b2lkIEdlb2xvY2F0
aW9uOjpzZW5kUG9zaXRpb24oR2VvTm90aWZpZXJWZWN0b3ImIG5vdGlmaWVycywgR2VvcG9zaXRp
b24qIHBvc2l0aW9uKQogewotICAgIEdlb05vdGlmaWVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBub3RpZmllcnMuZW5kKCk7Ci0gICAgZm9yIChHZW9Ob3RpZmllclZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBub3RpZmllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICAoKml0KS0+cnVuU3VjY2Vzc0NhbGxiYWNrKHBvc2l0aW9uKTsKKyAgICBmb3IgKGF1dG8mIG5v
dGlmaWVyIDogbm90aWZpZXJzKQorICAgICAgICBub3RpZmllci0+cnVuU3VjY2Vzc0NhbGxiYWNr
KHBvc2l0aW9uKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlvbjo6c3RvcFRpbWVyKEdlb05vdGlmaWVy
VmVjdG9yJiBub3RpZmllcnMpCiB7Ci0gICAgR2VvTm90aWZpZXJWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG5vdGlmaWVycy5lbmQoKTsKLSAgICBmb3IgKEdlb05vdGlmaWVyVmVjdG9yOjpj
b25zdF9pdGVyYXRvciBpdCA9IG5vdGlmaWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgICgqaXQpLT5zdG9wVGltZXIoKTsKKyAgICBmb3IgKGF1dG8mIG5vdGlmaWVyIDogbm90
aWZpZXJzKQorICAgICAgICBub3RpZmllci0+c3RvcFRpbWVyKCk7CiB9CiAKIHZvaWQgR2VvbG9j
YXRpb246OnN0b3BUaW1lcnNGb3JPbmVTaG90cygpCkBAIC01MzUsOSArNTI1LDggQEAgdm9pZCBH
ZW9sb2NhdGlvbjo6c3RvcFRpbWVycygpCiAKIHZvaWQgR2VvbG9jYXRpb246OmNhbmNlbFJlcXVl
c3RzKEdlb05vdGlmaWVyVmVjdG9yJiBub3RpZmllcnMpCiB7Ci0gICAgR2VvTm90aWZpZXJWZWN0
b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5vdGlmaWVycy5lbmQoKTsKLSAgICBmb3IgKEdlb05v
dGlmaWVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IG5vdGlmaWVycy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5zZXRGYXRhbEVycm9yKFBvc2l0aW9uRXJyb3I6
OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQT1NJVElPTl9VTkFWQUlMQUJMRSwgQVNDSUlMaXRlcmFs
KGZyYW1lbGVzc0RvY3VtZW50RXJyb3JNZXNzYWdlKSkpOworICAgIGZvciAoYXV0byYgbm90aWZp
ZXIgOiBub3RpZmllcnMpCisgICAgICAgIG5vdGlmaWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0aW9u
RXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQT1NJVElPTl9VTkFWQUlMQUJMRSwgQVNDSUlM
aXRlcmFsKGZyYW1lbGVzc0RvY3VtZW50RXJyb3JNZXNzYWdlKSkpOwogfQogCiB2b2lkIEdlb2xv
Y2F0aW9uOjpjYW5jZWxBbGxSZXF1ZXN0cygpCkBAIC01NTIsMjUgKzU0MSwyMCBAQCB2b2lkIEdl
b2xvY2F0aW9uOjpjYW5jZWxBbGxSZXF1ZXN0cygpCiB2b2lkIEdlb2xvY2F0aW9uOjpleHRyYWN0
Tm90aWZpZXJzV2l0aENhY2hlZFBvc2l0aW9uKEdlb05vdGlmaWVyVmVjdG9yJiBub3RpZmllcnMs
IEdlb05vdGlmaWVyVmVjdG9yKiBjYWNoZWQpCiB7CiAgICAgR2VvTm90aWZpZXJWZWN0b3Igbm9u
Q2FjaGVkOwotICAgIEdlb05vdGlmaWVyVmVjdG9yOjppdGVyYXRvciBlbmQgPSBub3RpZmllcnMu
ZW5kKCk7Ci0gICAgZm9yIChHZW9Ob3RpZmllclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBu
b3RpZmllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEdlb05vdGlmaWVy
KiBub3RpZmllciA9IGl0LT5nZXQoKTsKKyAgICBmb3IgKGF1dG8mIG5vdGlmaWVyIDogbm90aWZp
ZXJzKSB7CiAgICAgICAgIGlmIChub3RpZmllci0+dXNlQ2FjaGVkUG9zaXRpb24oKSkgewogICAg
ICAgICAgICAgaWYgKGNhY2hlZCkKLSAgICAgICAgICAgICAgICBjYWNoZWQtPmFwcGVuZChub3Rp
Zmllcik7CisgICAgICAgICAgICAgICAgY2FjaGVkLT5hcHBlbmQobm90aWZpZXIuZ2V0KCkpOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5vbkNhY2hlZC5hcHBlbmQobm90aWZpZXIpOwor
ICAgICAgICAgICAgbm9uQ2FjaGVkLmFwcGVuZChub3RpZmllci5nZXQoKSk7CiAgICAgfQogICAg
IG5vdGlmaWVycy5zd2FwKG5vbkNhY2hlZCk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb246OmNvcHlU
b1NldChjb25zdCBHZW9Ob3RpZmllclZlY3RvciYgc3JjLCBHZW9Ob3RpZmllclNldCYgZGVzdCkK
IHsKLSAgICAgR2VvTm90aWZpZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHNyYy5lbmQo
KTsKLSAgICAgZm9yIChHZW9Ob3RpZmllclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzcmMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICBHZW9Ob3RpZmllciogbm90aWZp
ZXIgPSBpdC0+Z2V0KCk7Ci0gICAgICAgICBkZXN0LmFkZChub3RpZmllcik7Ci0gICAgIH0KKyAg
ICBmb3IgKGF1dG8mIG5vdGlmaWVyIDogc3JjKQorICAgICAgICBkZXN0LmFkZChub3RpZmllci5n
ZXQoKSk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb246OmhhbmRsZUVycm9yKFBvc2l0aW9uRXJyb3Iq
IGVycm9yKQpAQCAtNjk1LDE0ICs2NzksMTEgQEAgdm9pZCBHZW9sb2NhdGlvbjo6aGFuZGxlUGVu
ZGluZ1Blcm1pc3Npb25Ob3RpZmllcnMoKQogewogICAgIC8vIFdoaWxlIHdlIGl0ZXJhdGUgdGhy
b3VnaCB0aGUgbGlzdCwgd2UgbmVlZCBub3Qgd29ycnkgYWJvdXQgbGlzdCBiZWluZyBtb2RpZmll
ZCBhcyB0aGUgcGVybWlzc2lvbiAKICAgICAvLyBpcyBhbHJlYWR5IHNldCB0byBZZXMvTm8gYW5k
IG5vIG5ldyBsaXN0ZW5lcnMgd2lsbCBiZSBhZGRlZCB0byB0aGUgcGVuZGluZyBsaXN0Ci0gICAg
R2VvTm90aWZpZXJTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ0ZvclBlcm1pc3Np
b25Ob3RpZmllcnMuZW5kKCk7Ci0gICAgZm9yIChHZW9Ob3RpZmllclNldDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IG1fcGVuZGluZ0ZvclBlcm1pc3Npb25Ob3RpZmllcnMuYmVnaW4oKTsgaXRlciAh
PSBlbmQ7ICsraXRlcikgewotICAgICAgICBHZW9Ob3RpZmllciogbm90aWZpZXIgPSBpdGVyLT5n
ZXQoKTsKLQorICAgIGZvciAoYXV0byYgbm90aWZpZXIgOiBtX3BlbmRpbmdGb3JQZXJtaXNzaW9u
Tm90aWZpZXJzKSB7CiAgICAgICAgIGlmIChpc0FsbG93ZWQoKSkgewogICAgICAgICAgICAgLy8g
c3RhcnQgYWxsIHBlbmRpbmcgbm90aWZpY2F0aW9uIHJlcXVlc3RzIGFzIHBlcm1pc3Npb24gZ3Jh
bnRlZC4KICAgICAgICAgICAgIC8vIFRoZSBub3RpZmllciBpcyBhbHdheXMgcmVmJ2VkIGJ5IG1f
b25lU2hvdHMgb3IgbV93YXRjaGVycy4KLSAgICAgICAgICAgIGlmIChzdGFydFVwZGF0aW5nKG5v
dGlmaWVyKSkKKyAgICAgICAgICAgIGlmIChzdGFydFVwZGF0aW5nKG5vdGlmaWVyLmdldCgpKSkK
ICAgICAgICAgICAgICAgICBub3RpZmllci0+c3RhcnRUaW1lcklmTmVlZGVkKCk7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbm90aWZpZXItPnNldEZhdGFsRXJyb3IoUG9zaXRp
b25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBPU0lUSU9OX1VOQVZBSUxBQkxFLCBBU0NJ
SUxpdGVyYWwoZmFpbGVkVG9TdGFydFNlcnZpY2VFcnJvck1lc3NhZ2UpKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29u
dHJvbGxlci5jcHAKaW5kZXggYzZlYzJlODJjNjVhY2RjNDM5YTY1NjkxNjZlN2YwNDA1NjZjOWIw
Ny4uMGRmMDZmYWI5ZWNjZmRiZmFmYWRhNDYwMzQ4YTJhM2YwZjNmMWEzMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25D
b250cm9sbGVyLmNwcApAQCAtMTA0LDE2ICsxMDQsMTYgQEAgdm9pZCBHZW9sb2NhdGlvbkNvbnRy
b2xsZXI6OnBvc2l0aW9uQ2hhbmdlZChHZW9sb2NhdGlvblBvc2l0aW9uKiBwb3NpdGlvbikKICAg
ICBtX2xhc3RQb3NpdGlvbiA9IHBvc2l0aW9uOwogICAgIFZlY3RvcjxSZWZQdHI8R2VvbG9jYXRp
b24+PiBvYnNlcnZlcnNWZWN0b3I7CiAgICAgY29weVRvVmVjdG9yKG1fb2JzZXJ2ZXJzLCBvYnNl
cnZlcnNWZWN0b3IpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JzZXJ2ZXJzVmVjdG9y
LnNpemUoKTsgKytpKQotICAgICAgICBvYnNlcnZlcnNWZWN0b3JbaV0tPnBvc2l0aW9uQ2hhbmdl
ZCgpOworICAgIGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBvYnNlcnZlcnNWZWN0b3IpCisgICAgICAg
IG9ic2VydmVyLT5wb3NpdGlvbkNoYW5nZWQoKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlvbkNvbnRy
b2xsZXI6OmVycm9yT2NjdXJyZWQoR2VvbG9jYXRpb25FcnJvciogZXJyb3IpCiB7CiAgICAgVmVj
dG9yPFJlZlB0cjxHZW9sb2NhdGlvbj4+IG9ic2VydmVyc1ZlY3RvcjsKICAgICBjb3B5VG9WZWN0
b3IobV9vYnNlcnZlcnMsIG9ic2VydmVyc1ZlY3Rvcik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBvYnNlcnZlcnNWZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIG9ic2VydmVyc1ZlY3Rv
cltpXS0+c2V0RXJyb3IoZXJyb3IpOworICAgIGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBvYnNlcnZl
cnNWZWN0b3IpCisgICAgICAgIG9ic2VydmVyLT5zZXRFcnJvcihlcnJvcik7CiB9CiAKIEdlb2xv
Y2F0aW9uUG9zaXRpb24qIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6bGFzdFBvc2l0aW9uKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRl
eCA0N2ZhNGUwMDNlZWJmMmFjYjVkYzIwMTJmZGU5ZDJjZGNjNDVlNzJmLi5jMDBmYzA5M2U4M2I2
NGY2MDYxYTc5ZDZiZGYxYTExMzU3ZjdlZjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0xNDUsOCArMTQ1LDggQEAgdm9pZCBJ
REJEYXRhYmFzZTo6b25Db21wbGV0ZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCiBQYXNzUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IElEQkRhdGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKIHsK
ICAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xp
c3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoSURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0U3RvcmVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuYmVnaW4oKTsg
aXQgIT0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG9iamVj
dFN0b3JlTmFtZXMtPmFwcGVuZChpdC0+dmFsdWUubmFtZSk7CisgICAgZm9yIChhdXRvJiBvYmpl
Y3RTdG9yZSA6IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnZhbHVlcygpKQorICAgICAgICBvYmpl
Y3RTdG9yZU5hbWVzLT5hcHBlbmQob2JqZWN0U3RvcmUubmFtZSk7CiAgICAgb2JqZWN0U3RvcmVO
YW1lcy0+c29ydCgpOwogICAgIHJldHVybiBvYmplY3RTdG9yZU5hbWVzLnJlbGVhc2UoKTsKIH0K
QEAgLTI1Niw4ICsyNTYsOCBAQCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFz
ZTo6dHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udAogICAgIH0KIAogICAg
IFZlY3RvcjxpbnQ2NF90PiBvYmplY3RTdG9yZUlkczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNjb3BlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9
IGZpbmRPYmplY3RTdG9yZUlkKHNjb3BlW2ldKTsKKyAgICBmb3IgKGF1dG8mIG5hbWUgOiBzY29w
ZSkgeworICAgICAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBmaW5kT2JqZWN0U3RvcmVJZChu
YW1lKTsKICAgICAgICAgaWYgKG9iamVjdFN0b3JlSWQgPT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0
YTo6SW52YWxpZElkKSB7CiAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpO
b3RGb3VuZEVycm9yOwogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0yODEsOCArMjgxLDggQEAg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnQKIAogdm9pZCBJREJEYXRhYmFzZTo6Zm9yY2VDbG9zZSgp
CiB7Ci0gICAgZm9yIChUcmFuc2FjdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3I6OlZhbHVlcyBpdCA9
IG1fdHJhbnNhY3Rpb25zLmJlZ2luKCkudmFsdWVzKCksIGVuZCA9IG1fdHJhbnNhY3Rpb25zLmVu
ZCgpLnZhbHVlcygpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5hYm9ydChJR05P
UkVfRVhDRVBUSU9OKTsKKyAgICBmb3IgKGF1dG8mIHRyYW5zYWN0aW9uIDogbV90cmFuc2FjdGlv
bnMudmFsdWVzKCkpCisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJR05PUkVfRVhDRVBUSU9O
KTsKICAgICB0aGlzLT5jbG9zZSgpOwogfQogCkBAIC0zMTcsOCArMzE3LDggQEAgdm9pZCBJREJE
YXRhYmFzZTo6Y2xvc2VDb25uZWN0aW9uKCkKICAgICAvLyBjb25uZWN0aW9uLiBUaGV5IHdvdWxk
IGhhdmUgYmVlbiBzY2hlZHVsZWQgYnkgdGhlIGJhY2tlbmQgd2hlbiBhbm90aGVyCiAgICAgLy8g
Y29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lvbiwgYnV0IHRoZSBmcm9udGVuZCBjb25uZWN0aW9u
IGlzIGJlaW5nCiAgICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5IGNvdWxkIGZpcmUuCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2VucXVldWVkRXZlbnRzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGJvb2wgcmVtb3ZlZCA9IGV2ZW50UXVldWUuY2FuY2VsRXZlbnQoKm1fZW5xdWV1ZWRFdmVu
dHNbaV0pOworICAgIGZvciAoYXV0byYgZXZlbnQgOiBtX2VucXVldWVkRXZlbnRzKSB7CisgICAg
ICAgIGJvb2wgcmVtb3ZlZCA9IGV2ZW50UXVldWUuY2FuY2VsRXZlbnQoKmV2ZW50KTsKICAgICAg
ICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKICAgICB9CiAKQEAgLTM2MCwxMCAr
MzYwLDEwIEBAIGJvb2wgSURCRGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQpCiAKIGludDY0X3QgSURCRGF0YWJhc2U6OmZpbmRPYmplY3RTdG9yZUlkKGNvbnN0
IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBmb3IgKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9i
amVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVz
LmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KSB7Ci0g
ICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
aXQtPmtleSAhPSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpOwotICAgICAgICAg
ICAgcmV0dXJuIGl0LT5rZXk7CisgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzKSB7CisgICAgICAgIGlmIChvYmplY3RTdG9yZS52YWx1ZS5uYW1lID09
IG5hbWUpIHsKKyAgICAgICAgICAgIEFTU0VSVChvYmplY3RTdG9yZS5rZXkgIT0gSURCT2JqZWN0
U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkKTsKKyAgICAgICAgICAgIHJldHVybiBvYmplY3RTdG9y
ZS5rZXk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIElEQk9iamVjdFN0b3JlTWV0YWRh
dGE6OkludmFsaWRJZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCmluZGV4IGU1OTQzZGM3ODNkZjIwMjVhMDJmMDZi
YWM3YjhiMzJiMzE3MjZhYmIuLmMyMWJjMzAxNGI4ZWU5ZjcyOTdiZTk4NmVhNTRhNDc3OWMyNTA0
NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kLmNwcApAQCAtNDk3LDEwICs0OTcsMTAgQEAgdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OnJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4KICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFj
a3M7CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcyA9
IHBycERhdGFiYXNlQ2FsbGJhY2tzOwogICAgIEFTU0VSVChjYWxsYmFja3MpOwotICAgIGZvciAo
RGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUNhbGxi
YWNrc1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmVuZCgpOyArK2l0
KSB7CisgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQpIHsK
ICAgICAgICAgLy8gRnJvbnQgZW5kIGVuc3VyZXMgdGhlIGV2ZW50IGlzIG5vdCBmaXJlZCBhdCBj
b25uZWN0aW9ucyB0aGF0IGhhdmUgY2xvc2VQZW5kaW5nIHNldC4KLSAgICAgICAgaWYgKCppdCAh
PSBkYXRhYmFzZUNhbGxiYWNrcykKLSAgICAgICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFuZ2Uo
bV9tZXRhZGF0YS52ZXJzaW9uLCByZXF1ZXN0ZWRWZXJzaW9uLCBJbmRleGVkREI6OlZlcnNpb25O
dWxsbmVzczo6TnVsbCk7CisgICAgICAgIGlmIChjYWxsYmFjayAhPSBkYXRhYmFzZUNhbGxiYWNr
cykKKyAgICAgICAgICAgIGNhbGxiYWNrLT5vblZlcnNpb25DaGFuZ2UobV9tZXRhZGF0YS52ZXJz
aW9uLCByZXF1ZXN0ZWRWZXJzaW9uLCBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzczo6TnVsbCk7
CiAgICAgfQogICAgIC8vIFRoZSBzcGVjIGRpY3RhdGVzIHdlIHdhaXQgdW50aWwgYWxsIHRoZSB2
ZXJzaW9uIGNoYW5nZSBldmVudHMgYXJlCiAgICAgLy8gZGVsaXZlcmVkIGFuZCB0aGVuIGNoZWNr
IG1fZGF0YWJhc2VDYWxsYmFja3MuZW1wdHkoKSBiZWZvcmUgcHJvY2VlZGluZwpAQCAtNTMxLDkg
KzUzMSw5IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpkZWxldGVEYXRhYmFzZShQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQogewogICAgIFJlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAgICBpZiAoaXNEZWxldGVEYXRhYmFzZUJs
b2NrZWQoKSkgewotICAgICAgICBmb3IgKERhdGFiYXNlQ2FsbGJhY2tzU2V0Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYmVnaW4oKTsgaXQgIT0gbV9kYXRhYmFz
ZUNhbGxiYWNrc1NldC5lbmQoKTsgKytpdCkgeworICAgICAgICBmb3IgKGF1dG8mIGNhbGxiYWNr
IDogbV9kYXRhYmFzZUNhbGxiYWNrc1NldCkgewogICAgICAgICAgICAgLy8gRnJvbnQgZW5kIGVu
c3VyZXMgdGhlIGV2ZW50IGlzIG5vdCBmaXJlZCBhdCBjb25uZWN0aW9ucyB0aGF0IGhhdmUgY2xv
c2VQZW5kaW5nIHNldC4KLSAgICAgICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFuZ2UobV9tZXRh
ZGF0YS52ZXJzaW9uLCAwLCBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzczo6TnVsbCk7CisgICAg
ICAgICAgICBjYWxsYmFjay0+b25WZXJzaW9uQ2hhbmdlKG1fbWV0YWRhdGEudmVyc2lvbiwgMCwg
SW5kZXhlZERCOjpWZXJzaW9uTnVsbG5lc3M6Ok51bGwpOwogICAgICAgICB9CiAgICAgICAgIC8v
IEZJWE1FOiBPbmx5IGZpcmUgb25CbG9ja2VkIGlmIHRoZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25z
IGFmdGVyIHRoZQogICAgICAgICAvLyBWZXJzaW9uQ2hhbmdlRXZlbnRzIGFyZSByZWNlaXZlZCwg
bm90IGp1c3Qgc2V0IHVwIHRvIGZpcmUuCkBAIC02MDMsOCArNjAzLDggQEAgdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmQ6OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENh
bGxiYWNrcykKICAgICBpZiAoIWNvbm5lY3Rpb25Db3VudCgpICYmICFtX3BlbmRpbmdPcGVuQ2Fs
bHMuc2l6ZSgpICYmICFtX3BlbmRpbmdEZWxldGVDYWxscy5zaXplKCkpIHsKICAgICAgICAgVHJh
bnNhY3Rpb25NYXAgdHJhbnNhY3Rpb25zKG1fdHJhbnNhY3Rpb25zKTsKICAgICAgICAgUmVmUHRy
PElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJDb25uZWN0aW9uIGlzIGNsb3NpbmcuIik7
Ci0gICAgICAgIGZvciAoVHJhbnNhY3Rpb25NYXA6OmNvbnN0X2l0ZXJhdG9yOjpWYWx1ZXMgaXQg
PSB0cmFuc2FjdGlvbnMudmFsdWVzKCkuYmVnaW4oKSwgZW5kID0gdHJhbnNhY3Rpb25zLnZhbHVl
cygpLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAoKml0KS0+YWJvcnQoZXJy
b3IpOworICAgICAgICBmb3IgKGF1dG8mIHRyYW5zYWN0aW9uIDogdHJhbnNhY3Rpb25zLnZhbHVl
cygpKQorICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKIAogICAgICAgICBB
U1NFUlQobV90cmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VNZXRhZGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmNwcAppbmRleCAw
ZDE0Mjg4Y2UzZjlkNzczNmE0NTliODFkMzU3ZTk2Njc3ZDk0MjhhLi4zYzJiNWUwNDIxNDQ0NjY2
NGZlMzJjYmFjZThiYTk2ZDAxOGY2ZWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmNwcApAQCAtMzksOCArMzks
OCBAQCBJREJEYXRhYmFzZU1ldGFkYXRhIElEQkRhdGFiYXNlTWV0YWRhdGE6Omlzb2xhdGVkQ29w
eSgpIGNvbnN0CiAKICAgICByZXN1bHQubmFtZSA9IG5hbWUuaXNvbGF0ZWRDb3B5KCk7CiAKLSAg
ICBmb3IgKGF1dG8gaSA9IG9iamVjdFN0b3Jlcy5iZWdpbigpLCBlbmQgPSBvYmplY3RTdG9yZXMu
ZW5kKCk7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgIHJlc3VsdC5vYmplY3RTdG9yZXMuc2V0KGkt
PmtleSwgaS0+dmFsdWUuaXNvbGF0ZWRDb3B5KCkpOworICAgIGZvciAoYXV0byYgb2JqZWN0U3Rv
cmUgOiBvYmplY3RTdG9yZXMpCisgICAgICAgIHJlc3VsdC5vYmplY3RTdG9yZXMuc2V0KG9iamVj
dFN0b3JlLmtleSwgb2JqZWN0U3RvcmUudmFsdWUuaXNvbGF0ZWRDb3B5KCkpOwogCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KQEAgLTU1LDggKzU1LDggQEAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhOjppc29sYXRlZENvcHkoKSBjb25zdAogICAgIHJlc3VsdC5u
YW1lID0gbmFtZS5pc29sYXRlZENvcHkoKTsKICAgICByZXN1bHQua2V5UGF0aCA9IGtleVBhdGgu
aXNvbGF0ZWRDb3B5KCk7CiAKLSAgICBmb3IgKGF1dG8gaSA9IGluZGV4ZXMuYmVnaW4oKSwgZW5k
ID0gaW5kZXhlcy5lbmQoKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgcmVzdWx0LmluZGV4ZXMu
c2V0KGktPmtleSwgaS0+dmFsdWUuaXNvbGF0ZWRDb3B5KCkpOworICAgIGZvciAoYXV0byYgaW5k
ZXggOiBpbmRleGVzKQorICAgICAgICByZXN1bHQuaW5kZXhlcy5zZXQoaW5kZXgua2V5LCBpbmRl
eC52YWx1ZS5pc29sYXRlZENvcHkoKSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAKaW5kZXggYjU2MzE3NjhmYjBm
NGExYjRiNDc0Mjc5YWE0ZjVlNzAyZWExMGM0OS4uNTc5MGY4MTYzODFlMTI2ZDhkMTlhYTM1Yjg1
N2Y3ODNkMzdkNDU2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXkuY3BwCkBAIC00Miw4ICs0Miw4IEBAIGJvb2wgSURCS2V5Ojppc1ZhbGlkKCkgY29uc3QKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fdHlwZSA9PSBBcnJheVR5cGUpIHsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FycmF5LnNpemUoKTsgaSsrKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1fYXJyYXlbaV0tPmlzVmFsaWQoKSkKKyAgICAgICAgZm9yIChhdXRvJiBr
ZXkgOiBtX2FycmF5KSB7CisgICAgICAgICAgICBpZiAoIWtleS0+aXNWYWxpZCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmgKaW5kZXggNmQyYTJhMzI4ZTkyM2ZiY2RmYmRkMTYx
NGEwOWM5MzExZDczYTJmNS4uOTI5NmNjOWQyNThhZmRhYTE5N2QzYTQ3ZTdhMjg5MTE5YjI2YzM3
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmgKQEAgLTY0LDIw
ICs2NCwyMCBAQCBwdWJsaWM6CiAgICAgICAgIEtleUFycmF5IHJlc3VsdDsKIAogICAgICAgICBz
aXplX3Qgc2l6ZUVzdGltYXRlID0gMDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBh
cnJheS5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgaWYgKCFhcnJheVtpXS0+aXNWYWxpZCgp
KQorICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGFycmF5KSB7CisgICAgICAgICAgICBpZiAoIWtl
eS0+aXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBi
b29sIHNraXAgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgcmVz
dWx0LnNpemUoKTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5W2ldLT5pc0VxdWFs
KHJlc3VsdFtqXS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcmVzdWx0S2V5IDog
cmVzdWx0KSB7CisgICAgICAgICAgICAgICAgaWYgKGtleS0+aXNFcXVhbChyZXN1bHRLZXkuZ2V0
KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNraXAgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAoIXNraXApIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGFycmF5W2ldKTsK
LSAgICAgICAgICAgICAgICBzaXplRXN0aW1hdGUgKz0gYXJyYXlbaV0tPm1fc2l6ZUVzdGltYXRl
OworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoa2V5KTsKKyAgICAgICAgICAgICAgICBz
aXplRXN0aW1hdGUgKz0ga2V5LT5tX3NpemVFc3RpbWF0ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBhZG9wdFJlZihuZXcgSURCS2V5
KHJlc3VsdCwgc2l6ZUVzdGltYXRlKSk7CkBAIC04OCw4ICs4OCw4IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPElEQktleT4gY3JlYXRlQXJyYXkoY29uc3QgS2V5QXJyYXkmIGFycmF5KQogICAg
IHsKICAgICAgICAgc2l6ZV90IHNpemVFc3RpbWF0ZSA9IDA7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBzaXplRXN0aW1hdGUg
Kz0gYXJyYXlbaV0tPm1fc2l6ZUVzdGltYXRlOworICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGFy
cmF5KQorICAgICAgICAgICAgc2l6ZUVzdGltYXRlICs9IGtleS0+bV9zaXplRXN0aW1hdGU7CiAK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCS2V5KGFycmF5LCBzaXplRXN0aW1hdGUp
KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBh
dGguY3BwCmluZGV4IDU0ZTRmNGRjMDVhYTJiNWI4NjVjNzg1YzZjMjZkMTBhOTViZjE2YzguLjY1
YWMzYzUxNDcxNWNlNTM5ZWJjZGQzODM0MWUxMzljMzdlYmMzMGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCkBAIC0yMDMsOCArMjAzLDgg
QEAgSURCS2V5UGF0aDo6SURCS2V5UGF0aChjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJyYXkpCiAg
ICAgLCBtX2FycmF5KGFycmF5KQogewogI2lmbmRlZiBOREVCVUcKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYXJyYXkuc2l6ZSgpOyArK2kpCi0gICAgICAgIEFTU0VSVCghbV9hcnJheVtp
XS5pc051bGwoKSk7CisgICAgZm9yIChhdXRvJiBrZXkgOiBhcnJheSkKKyAgICAgICAgQVNTRVJU
KCFrZXkuaXNOdWxsKCkpOwogI2VuZGlmCiB9CiAKQEAgLTIyMCw4ICsyMjAsOCBAQCBib29sIElE
QktleVBhdGg6OmlzVmFsaWQoKSBjb25zdAogICAgIGNhc2UgQXJyYXlUeXBlOgogICAgICAgICBp
ZiAobV9hcnJheS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcnJheS5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKCFJREJJc1ZhbGlkS2V5UGF0aChtX2FycmF5W2ldKSkKKyAgICAgICAgZm9yIChhdXRv
JiBrZXkgOiBtX2FycmF5KSB7CisgICAgICAgICAgICBpZiAoIUlEQklzVmFsaWRLZXlQYXRoKGtl
eSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtMjU0LDggKzI1NCw4IEBAIElEQktleVBhdGggSURCS2V5UGF0aDo6aXNv
bGF0ZWRDb3B5KCkgY29uc3QKICAgICByZXN1bHQubV9zdHJpbmcgPSBtX3N0cmluZy5pc29sYXRl
ZENvcHkoKTsKIAogICAgIHJlc3VsdC5tX2FycmF5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9h
cnJheS5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcnJheS5zaXplKCk7
ICsraSkKLSAgICAgICAgcmVzdWx0Lm1fYXJyYXkudW5jaGVja2VkQXBwZW5kKG1fYXJyYXlbaV0u
aXNvbGF0ZWRDb3B5KCkpOworICAgIGZvciAoYXV0byYga2V5IDogbV9hcnJheSkKKyAgICAgICAg
cmVzdWx0Lm1fYXJyYXkudW5jaGVja2VkQXBwZW5kKGtleS5pc29sYXRlZENvcHkoKSk7CiAKICAg
ICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IGU4NjA4MmMwNDY4NDY1YmMxZTA0MDNiZjQ1
YmU0MDc4MGQ1ZTBlYjcuLmNlOWQyY2VmZDU0YmZjMWYzYmY0ZGY5MjJjZjJiNGFjZjZjMTM1N2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5jcHAKQEAgLTYxLDggKzYxLDggQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJP
YmplY3RTdG9yZTo6aW5kZXhOYW1lcygpIGNvbnN0CiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJ
REJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcyIpOwogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBp
bmRleE5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChJREJPYmplY3RT
dG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmlu
ZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KQotICAg
ICAgICBpbmRleE5hbWVzLT5hcHBlbmQoaXQtPnZhbHVlLm5hbWUpOworICAgIGZvciAoYXV0byYg
aW5kZXggOiBtX21ldGFkYXRhLmluZGV4ZXMudmFsdWVzKCkpCisgICAgICAgIGluZGV4TmFtZXMt
PmFwcGVuZChpbmRleC5uYW1lKTsKICAgICBpbmRleE5hbWVzLT5zb3J0KCk7CiAgICAgcmV0dXJu
IGluZGV4TmFtZXMucmVsZWFzZSgpOwogfQpAQCAtMTk0LDE1ICsxOTQsMTUgQEAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQkRhdGFiYXNlQmFja2VuZDo6UHV0
TW9kZSBwdXRNb2RlLAogCiAgICAgVmVjdG9yPGludDY0X3Q+IGluZGV4SWRzOwogICAgIFZlY3Rv
cjxJbmRleEtleXM+IGluZGV4S2V5czsKLSAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6
OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigp
OyBpdCAhPSBtX21ldGFkYXRhLmluZGV4ZXMuZW5kKCk7ICsraXQpIHsKKyAgICBmb3IgKGF1dG8m
IGluZGV4IDogbV9tZXRhZGF0YS5pbmRleGVzKSB7CiAgICAgICAgIFZlY3RvcjxJREJLZXlEYXRh
PiBrZXlEYXRhczsKLSAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShyZXF1ZXN0U3Rh
dGUuZXhlYygpLCBpdC0+dmFsdWUsIHZhbHVlLCBrZXlEYXRhcyk7Ci0gICAgICAgIGluZGV4SWRz
LmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShyZXF1
ZXN0U3RhdGUuZXhlYygpLCBpbmRleC52YWx1ZSwgdmFsdWUsIGtleURhdGFzKTsKKyAgICAgICAg
aW5kZXhJZHMuYXBwZW5kKGluZGV4LmtleSk7CiAKICAgICAgICAgLy8gRklYTUU6IE11Y2ggb2Yg
dGhlIEluZGV4ZWQgREIgY29kZSBuZWVkcyB0byB1c2UgSURCS2V5RGF0YSBkaXJlY3RseSB0byBh
dm9pZCB3YXN0ZWZ1bCBjb252ZXJzaW9ucyBsaWtlIHRoaXMuCiAgICAgICAgIFZlY3RvcjxSZWZQ
dHI8SURCS2V5Pj4ga2V5czsKLSAgICAgICAgZm9yIChhdXRvJiBpIDoga2V5RGF0YXMpIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGkubWF5YmVDcmVhdGVJREJLZXkoKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBrZXlEYXRhIDoga2V5RGF0YXMpIHsKKyAgICAgICAgICAgIFJlZlB0
cjxJREJLZXk+IGtleSA9IGtleURhdGEubWF5YmVDcmVhdGVJREJLZXkoKTsKICAgICAgICAgICAg
IGlmIChrZXkpCiAgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoa2V5LnJlbGVhc2UoKSk7CiAg
ICAgICAgIH0KQEAgLTMyNCw4ICszMjQsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZ2VuZXJh
dGVJbmRleEtleXNGb3JWYWx1ZShyZXF1ZXN0LT5yZXF1ZXN0U3RhdGUoKS0+ZXhlYygpLCBtX2lu
ZGV4TWV0YWRhdGEsIHZhbHVlLCBpbmRleEtleURhdGFzKTsKIAogICAgICAgICAgICAgVmVjdG9y
PFJlZlB0cjxJREJLZXk+PiBpbmRleEtleXM7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGkgOiBp
bmRleEtleURhdGFzKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gaS5t
YXliZUNyZWF0ZUlEQktleSgpOworICAgICAgICAgICAgZm9yIChhdXRvJiBpbmRleEtleURhdGEg
OiBpbmRleEtleURhdGFzKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5ID0g
aW5kZXhLZXlEYXRhLm1heWJlQ3JlYXRlSURCS2V5KCk7CiAgICAgICAgICAgICAgICAgaWYgKGtl
eSkKICAgICAgICAgICAgICAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChrZXkucmVsZWFzZSgpKTsK
ICAgICAgICAgICAgIH0KQEAgLTQzMCw5ICs0MzAsOSBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJ
REJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YwogICAgIH0KIAogICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEqIGluZGV4TWV0YWRhdGEoMCk7
Ci0gICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRl
eGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKSB7
Ci0gICAgICAgICAgICBpbmRleE1ldGFkYXRhID0gJml0LT52YWx1ZTsKKyAgICBmb3IgKGF1dG8m
IGluZGV4IDogbV9tZXRhZGF0YS5pbmRleGVzLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChpbmRl
eC5uYW1lID09IG5hbWUpIHsKKyAgICAgICAgICAgIGluZGV4TWV0YWRhdGEgPSAmaW5kZXg7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTU1NSwxMCArNTU1LDEwIEBA
IHZvaWQgSURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uRmluaXNoZWQoKQogCiBpbnQ2NF90IElE
Qk9iamVjdFN0b3JlOjpmaW5kSW5kZXhJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0g
ICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVz
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoaXQtPmtleSAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQp
OwotICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CisgICAgZm9yIChhdXRvJiBpbmRleCA6IG1f
bWV0YWRhdGEuaW5kZXhlcykgeworICAgICAgICBpZiAoaW5kZXgudmFsdWUubmFtZSA9PSBuYW1l
KSB7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXgua2V5ICE9IElEQkluZGV4TWV0YWRhdGE6Oklu
dmFsaWRJZCk7CisgICAgICAgICAgICByZXR1cm4gaW5kZXgua2V5OwogICAgICAgICB9CiAgICAg
fQogICAgIHJldHVybiBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFu
c2FjdGlvbk1vbml0b3IuY3BwCmluZGV4IGU2NzQxYmRkMzY2ZThjZDM4MWU2N2MyOTY2YjhlNTZl
ZTFjOGJmZDYuLjJmNzNkM2YzNzZkNTdkMDFlNGMyNjQzN2NkM2NjNTYwZTU1MmM5MTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2Fj
dGlvbk1vbml0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCkBAIC01OCwxMCArNTgsOCBAQCB2b2lkIElE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmFkZE5ld1RyYW5zYWN0aW9uKFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb24+CiB2b2lkIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmRlYWN0
aXZhdGVOZXdUcmFuc2FjdGlvbnMoKQogewogICAgIFRocmVhZFNwZWNpZmljPFRyYW5zYWN0aW9u
TGlzdD4mIGxpc3QgPSB0cmFuc2FjdGlvbnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJh
bnNhY3Rpb24gPSBsaXN0LT5hdChpKTsKKyAgICBmb3IgKGF1dG8mIHRyYW5zYWN0aW9uIDogKmxp
c3QpCiAgICAgICAgIHRyYW5zYWN0aW9uLT5zZXRBY3RpdmUoZmFsc2UpOwotICAgIH0KICAgICAv
LyBGSVhNRTogRXhlcmNpc2UgdGhpcyBjYWxsIHRvIGNsZWFyKCkgaW4gYSBsYXlvdXQgdGVzdC4K
ICAgICBsaXN0LT5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCAxNTRhMDZmY2E5MmNjMzRjZTIxNTE5ZmZhZWQxOWFm
YWUxNDBmNTJiLi4zYjMxYzJkYjg5OTg2NmIxM2NhZGRmMmMyNjQxMWZmYjA3ZDBkM2Q3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApAQCAt
MTYzLDggKzE2Myw4IEBAIHZvaWQgSURCUmVxdWVzdDo6YWJvcnQoKQogICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiBzZWxmKHRoaXMpOwogCiAgICAgRXZlbnRRdWV1ZSYgZXZlbnRRdWV1ZSA9IHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9lbnF1ZXVlZEV2ZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBib29sIHJlbW92
ZWQgPSBldmVudFF1ZXVlLmNhbmNlbEV2ZW50KCptX2VucXVldWVkRXZlbnRzW2ldKTsKKyAgICBm
b3IgKGF1dG8mIGV2ZW50IDogbV9lbnF1ZXVlZEV2ZW50cykgeworICAgICAgICBib29sIHJlbW92
ZWQgPSBldmVudFF1ZXVlLmNhbmNlbEV2ZW50KCpldmVudCk7CiAgICAgICAgIEFTU0VSVF9VTlVT
RUQocmVtb3ZlZCwgcmVtb3ZlZCk7CiAgICAgfQogICAgIG1fZW5xdWV1ZWRFdmVudHMuY2xlYXIo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmNwcAppbmRleCAzMzY5NGM1ZjY2MjI2MmZkZGY3NzE4YjU2ZjAwNjcwMWM3ZTcyN2YzLi5m
M2I5ZTUxYWRhZjdlYzM4ODMyZmMxNGRkN2ZhZjlkOGFlNjg5YTQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCkBAIC0yNTgs
OCArMjU4LDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6Y2xvc2VPcGVuQ3Vyc29ycygpCiB7CiAg
ICAgSGFzaFNldDxJREJDdXJzb3IqPiBjdXJzb3JzOwogICAgIGN1cnNvcnMuc3dhcChtX29wZW5D
dXJzb3JzKTsKLSAgICBmb3IgKEhhc2hTZXQ8SURCQ3Vyc29yKj46Oml0ZXJhdG9yIGkgPSBjdXJz
b3JzLmJlZ2luKCk7IGkgIT0gY3Vyc29ycy5lbmQoKTsgKytpKQotICAgICAgICAoKmkpLT5jbG9z
ZSgpOworICAgIGZvciAoYXV0byYgY3Vyc29yIDogY3Vyc29ycykKKyAgICAgICAgY3Vyc29yLT5j
bG9zZSgpOwogfQogCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpyZWdpc3RlclJlcXVlc3QoSURCUmVx
dWVzdCogcmVxdWVzdCkKQEAgLTI5Nyw4ICsyOTcsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpv
bkFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gcHJwRXJyb3IpCiAgICAgfQogCiAg
ICAgaWYgKGlzVmVyc2lvbkNoYW5nZSgpKSB7Ci0gICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5iZWdpbigp
OyBpdCAhPSBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgICAg
IGl0LT5rZXktPnNldE1ldGFkYXRhKGl0LT52YWx1ZSk7CisgICAgICAgIGZvciAoYXV0byYgb2Jq
ZWN0U3RvcmUgOiBtX29iamVjdFN0b3JlQ2xlYW51cE1hcCkKKyAgICAgICAgICAgIG9iamVjdFN0
b3JlLmtleS0+c2V0TWV0YWRhdGEob2JqZWN0U3RvcmUudmFsdWUpOwogICAgICAgICBtX2RhdGFi
YXNlLT5zZXRNZXRhZGF0YShtX3ByZXZpb3VzTWV0YWRhdGEpOwogICAgICAgICBtX2RhdGFiYXNl
LT5jbG9zZSgpOwogICAgIH0KQEAgLTM3MCwxMSArMzcwLDExIEBAIGJvb2wgSURCVHJhbnNhY3Rp
b246OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgbV9zdGF0ZSA9
IEZpbmlzaGVkOwogCiAgICAgLy8gQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICBmb3IgKElE
Qk9iamVjdFN0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuYmVnaW4oKTsg
aXQgIT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT50
cmFuc2FjdGlvbkZpbmlzaGVkKCk7CisgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fb2Jq
ZWN0U3RvcmVNYXApCisgICAgICAgIG9iamVjdFN0b3JlLnZhbHVlLT50cmFuc2FjdGlvbkZpbmlz
aGVkKCk7CiAgICAgbV9vYmplY3RTdG9yZU1hcC5jbGVhcigpOwotICAgIGZvciAoSURCT2JqZWN0
U3RvcmVTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9kZWxldGVkT2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0
ICE9IG1fZGVsZXRlZE9iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgKCppdCktPnRy
YW5zYWN0aW9uRmluaXNoZWQoKTsKKyAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9kZWxl
dGVkT2JqZWN0U3RvcmVzKQorICAgICAgICBvYmplY3RTdG9yZS0+dHJhbnNhY3Rpb25GaW5pc2hl
ZCgpOwogICAgIG1fZGVsZXRlZE9iamVjdFN0b3Jlcy5jbGVhcigpOwogCiAgICAgVmVjdG9yPFJl
ZlB0cjxFdmVudFRhcmdldD4+IHRhcmdldHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcAppbmRleCBhZmJj
NjFiZWNkMjk2MjRmMWU4MjU0Y2QxZGZlYzBiYTA4OTkyNzliLi41YjE5MzI0MzU2MWE1ZjkwYTdh
NmVjOGJhYTNkZDhlN2M3ZDNiOTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKQEAgLTQ0LDggKzQ0
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogUmVmPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gSURC
VHJhbnNhY3Rpb25CYWNrZW5kOjpjcmVhdGUoSURCRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZUJh
Y2tlbmQsIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxi
YWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpU
cmFuc2FjdGlvbk1vZGUgbW9kZSkKIHsKICAgICBIYXNoU2V0PGludDY0X3Q+IG9iamVjdFN0b3Jl
SGFzaFNldDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFN0b3JlSWRzLnNpemUo
KTsgKytpKQotICAgICAgICBvYmplY3RTdG9yZUhhc2hTZXQuYWRkKG9iamVjdFN0b3JlSWRzW2ld
KTsKKyAgICBmb3IgKGF1dG8mIGlkIDogb2JqZWN0U3RvcmVJZHMpCisgICAgICAgIG9iamVjdFN0
b3JlSGFzaFNldC5hZGQoaWQpOwogCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKGRhdGFiYXNlQmFja2VuZCwgaWQsIGNhbGxiYWNrcywgb2JqZWN0U3RvcmVI
YXNoU2V0LCBtb2RlKSk7CiB9CkBAIC0zMDcsOCArMzA3LDggQEAgdm9pZCBJREJUcmFuc2FjdGlv
bkJhY2tlbmQ6OnRhc2tUaW1lckZpcmVkKCkKIAogdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6
OmNsb3NlT3BlbkN1cnNvcnMoKQogewotICAgIGZvciAoSGFzaFNldDxJREJDdXJzb3JCYWNrZW5k
Kj46Oml0ZXJhdG9yIGkgPSBtX29wZW5DdXJzb3JzLmJlZ2luKCk7IGkgIT0gbV9vcGVuQ3Vyc29y
cy5lbmQoKTsgKytpKQotICAgICAgICAoKmkpLT5jbG9zZSgpOworICAgIGZvciAoYXV0byYgY3Vy
c29yIDogbV9vcGVuQ3Vyc29ycykKKyAgICAgICAgY3Vyc29yLT5jbG9zZSgpOwogICAgIG1fb3Bl
bkN1cnNvcnMuY2xlYXIoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc291cmNlL01lZGlhU291cmNlLmNwcAppbmRleCA4OTQ2MDM2MTcyNTFiYjU3M2Q0MmVkNWMw
YWVkZmNmNjc1ZmQ5M2YxLi41ZjdhZWRjMjBmMjIwZDM1Yjg1OGFmNzkxZjA0MTM2MTk3ZGFkYmU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291
cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291
cmNlLmNwcApAQCAtODM2LDggKzgzNiw4IEBAIHZvaWQgTWVkaWFTb3VyY2U6Om9uUmVhZHlTdGF0
ZUNoYW5nZShjb25zdCBBdG9taWNTdHJpbmcmIG9sZFN0YXRlLCBjb25zdCBBdG9taWNTCiAgICAg
bV9hY3RpdmVTb3VyY2VCdWZmZXJzLT5jbGVhcigpOwogCiAgICAgLy8gQ2xlYXIgU291cmNlQnVm
ZmVyIHJlZmVyZW5jZXMgdG8gdGhpcyBvYmplY3QuCi0gICAgZm9yICh1bnNpZ25lZCBsb25nIGkg
PSAwLCBsZW5ndGggPSAgbV9zb3VyY2VCdWZmZXJzLT5sZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytp
KQotICAgICAgICBtX3NvdXJjZUJ1ZmZlcnMtPml0ZW0oaSktPnJlbW92ZWRGcm9tTWVkaWFTb3Vy
Y2UoKTsKKyAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6ICptX3NvdXJjZUJ1ZmZlcnMpCisgICAgICAg
IGJ1ZmZlci0+cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSgpOwogICAgIG1fc291cmNlQnVmZmVycy0+
Y2xlYXIoKTsKICAgICAKICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5zb3VyY2VjbG9z
ZUV2ZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFDb25zdHJhaW50c0ltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1wbC5jcHAKaW5kZXggNWNmMmMzZWJjMDBjNTcxZDQ0ZTIx
MzIyOWYwZGY0ODI0YTZlNTMxZS4uM2Y3N2QxODc3YjgyMWVmNzVjMDBjOTg0NjY4MTM2ZjI5MmZk
ZTFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRp
YUNvbnN0cmFpbnRzSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1wbC5jcHAKQEAgLTY3LDggKzY3LDggQEAgYm9vbCBNZWRp
YUNvbnN0cmFpbnRzSW1wbDo6aW5pdGlhbGl6ZShjb25zdCBEaWN0aW9uYXJ5JiBjb25zdHJhaW50
cykKICAgICBTdHJpbmcgbWFuZGF0b3J5ID0gQVNDSUlMaXRlcmFsKCJtYW5kYXRvcnkiKTsKICAg
ICBTdHJpbmcgb3B0aW9uYWwgPSBBU0NJSUxpdGVyYWwoIm9wdGlvbmFsIik7CiAKLSAgICBmb3Ig
KFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBpdCA9IG5hbWVzLmJlZ2luKCk7IGl0ICE9IG5hbWVz
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICgqaXQgIT0gbWFuZGF0b3J5ICYmICppdCAhPSBv
cHRpb25hbCkKKyAgICBmb3IgKGF1dG8mIG5hbWUgOiBuYW1lcykgeworICAgICAgICBpZiAobmFt
ZSAhPSBtYW5kYXRvcnkgJiYgbmFtZSAhPSBvcHRpb25hbCkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKQEAgLTEyMiw5ICsxMjIsOCBAQCBNZWRpYUNvbnN0cmFpbnRzSW1wbDo6
fk1lZGlhQ29uc3RyYWludHNJbXBsKCkKIHZvaWQgTWVkaWFDb25zdHJhaW50c0ltcGw6OmdldE1h
bmRhdG9yeUNvbnN0cmFpbnRzKFZlY3RvcjxNZWRpYUNvbnN0cmFpbnQ+JiBjb25zdHJhaW50cykg
Y29uc3QKIHsKICAgICBjb25zdHJhaW50cy5jbGVhcigpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpID0gbV9tYW5kYXRvcnlDb25zdHJhaW50cy5iZWdpbigp
OwotICAgIGZvciAoOyBpICE9IG1fbWFuZGF0b3J5Q29uc3RyYWludHMuZW5kKCk7ICsraSkKLSAg
ICAgICAgY29uc3RyYWludHMuYXBwZW5kKE1lZGlhQ29uc3RyYWludChpLT5rZXksIGktPnZhbHVl
KSk7CisgICAgZm9yIChhdXRvJiBjb25zdHJhaW50IDogbV9tYW5kYXRvcnlDb25zdHJhaW50cykK
KyAgICAgICAgY29uc3RyYWludHMuYXBwZW5kKE1lZGlhQ29uc3RyYWludChjb25zdHJhaW50Lmtl
eSwgY29uc3RyYWludC52YWx1ZSkpOwogfQogCiB2b2lkIE1lZGlhQ29uc3RyYWludHNJbXBsOjpn
ZXRPcHRpb25hbENvbnN0cmFpbnRzKFZlY3RvcjxNZWRpYUNvbnN0cmFpbnQ+JiBjb25zdHJhaW50
cykgY29uc3QKQEAgLTE0NSwxMCArMTQ0LDkgQEAgYm9vbCBNZWRpYUNvbnN0cmFpbnRzSW1wbDo6
Z2V0TWFuZGF0b3J5Q29uc3RyYWludFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW4KIAog
Ym9vbCBNZWRpYUNvbnN0cmFpbnRzSW1wbDo6Z2V0T3B0aW9uYWxDb25zdHJhaW50VmFsdWUoY29u
c3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewotICAgIFZlY3RvcjxNZWRp
YUNvbnN0cmFpbnQ+Ojpjb25zdF9pdGVyYXRvciBpID0gbV9vcHRpb25hbENvbnN0cmFpbnRzLmJl
Z2luKCk7Ci0gICAgZm9yICg7IGkgIT0gbV9vcHRpb25hbENvbnN0cmFpbnRzLmVuZCgpOyArK2kp
IHsKLSAgICAgICAgaWYgKGktPm1fbmFtZSA9PSBuYW1lKSB7Ci0gICAgICAgICAgICB2YWx1ZSA9
IGktPm1fdmFsdWU7CisgICAgZm9yIChhdXRvJiBjb25zdHJhaW50IDogbV9vcHRpb25hbENvbnN0
cmFpbnRzKSB7CisgICAgICAgIGlmIChjb25zdHJhaW50Lm1fbmFtZSA9PSBuYW1lKSB7CisgICAg
ICAgICAgICB2YWx1ZSA9IGNvbnN0cmFpbnQubV92YWx1ZTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcAppbmRleCA0NzIwZjAzMjdjNzUzNGY1MDZlM2U0MGVk
MmFlZTgyOTIyNzU1YWNlLi5hN2RhMTM4YjJjN2ZkOGY0Njg4MmE5MGRlNWNkNzY2NTlkNzg3OTVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtLmNwcApAQCAtNTEsMTEgKzUxLDExIEBAIFJlZjxNZWRpYVN0cmVhbT4gTWVkaWFTdHJlYW06
OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBQYXNzUmVmUHRyCiAgICAg
VmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+IGF1ZGlvVHJhY2tzOwogICAg
IFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiB2aWRlb1RyYWNrczsKIAot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RyZWFtLT5tX2F1ZGlvVHJhY2tzLnNpemUoKTsg
KytpKQotICAgICAgICBhdWRpb1RyYWNrcy5hcHBlbmQoJnN0cmVhbS0+bV9hdWRpb1RyYWNrc1tp
XS0+cHJpdmF0ZVRyYWNrKCkpOworICAgIGZvciAoYXV0byYgdHJhY2sgOiBzdHJlYW0tPm1fYXVk
aW9UcmFja3MpCisgICAgICAgIGF1ZGlvVHJhY2tzLmFwcGVuZCgmdHJhY2stPnByaXZhdGVUcmFj
aygpKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RyZWFtLT5tX3ZpZGVvVHJhY2tz
LnNpemUoKTsgKytpKQotICAgICAgICB2aWRlb1RyYWNrcy5hcHBlbmQoJnN0cmVhbS0+bV92aWRl
b1RyYWNrc1tpXS0+cHJpdmF0ZVRyYWNrKCkpOworICAgIGZvciAoYXV0byYgdHJhY2sgOiBzdHJl
YW0tPm1fdmlkZW9UcmFja3MpCisgICAgICAgIHZpZGVvVHJhY2tzLmFwcGVuZCgmdHJhY2stPnBy
aXZhdGVUcmFjaygpKTsKIAogICAgIHJldHVybiBNZWRpYVN0cmVhbTo6Y3JlYXRlKGNvbnRleHQs
IE1lZGlhU3RyZWFtUHJpdmF0ZTo6Y3JlYXRlKGF1ZGlvVHJhY2tzLCB2aWRlb1RyYWNrcykpOwog
fQpAQCAtNjUsMTEgKzY1LDExIEBAIFJlZjxNZWRpYVN0cmVhbT4gTWVkaWFTdHJlYW06OmNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBWZWN0CiAgICAgVmVjdG9y
PFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+IGF1ZGlvVHJhY2tzOwogICAgIFZlY3Rv
cjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiB2aWRlb1RyYWNrczsKIAotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJhY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICh0
cmFja3NbaV0tPmtpbmQoKSA9PSAiYXVkaW8iKQotICAgICAgICAgICAgYXVkaW9UcmFja3MuYXBw
ZW5kKCZ0cmFja3NbaV0tPnByaXZhdGVUcmFjaygpKTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDog
dHJhY2tzKSB7CisgICAgICAgIGlmICh0cmFjay0+a2luZCgpID09ICJhdWRpbyIpCisgICAgICAg
ICAgICBhdWRpb1RyYWNrcy5hcHBlbmQoJnRyYWNrLT5wcml2YXRlVHJhY2soKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHZpZGVvVHJhY2tzLmFwcGVuZCgmdHJhY2tzW2ldLT5wcml2YXRl
VHJhY2soKSk7CisgICAgICAgICAgICB2aWRlb1RyYWNrcy5hcHBlbmQoJnRyYWNrLT5wcml2YXRl
VHJhY2soKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIE1lZGlhU3RyZWFtOjpjcmVhdGUoY29udGV4
dCwgTWVkaWFTdHJlYW1Qcml2YXRlOjpjcmVhdGUoYXVkaW9UcmFja3MsIHZpZGVvVHJhY2tzKSk7
CkBAIC0xMzQsOCArMTM0LDggQEAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gTWVkaWFTdHJlYW06
OmNsb25lKCkKIAogdm9pZCBNZWRpYVN0cmVhbTo6Y2xvbmVNZWRpYVN0cmVhbVRyYWNrVmVjdG9y
KFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4+JiBkZXN0aW5hdGlvbiwgY29uc3QgVmVj
dG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPj4mIHNvdXJjZSkKIHsKLSAgICBmb3IgKGF1dG8g
aXQgPSBzb3VyY2UuYmVnaW4oKSwgZW5kID0gc291cmNlLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZCgoKml0KS0+Y2xvbmUoKSk7CisgICAgZm9yIChh
dXRvJiB0cmFjayA6IHNvdXJjZSkKKyAgICAgICAgZGVzdGluYXRpb24uYXBwZW5kKHRyYWNrLT5j
bG9uZSgpKTsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbTo6YWRkVHJhY2soUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbVRyYWNrPiBwcnBUcmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xNDYsOCArMTQ2
LDggQEAgdm9pZCBNZWRpYVN0cmVhbTo6YWRkVHJhY2soUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRy
YWNrPiBwcnBUcmFjaywgRXhjZXB0aW9uQ29kZSYKICAgICB9CiAKICAgICBpZiAoYWRkVHJhY2so
cHJwVHJhY2spKSB7Ci0gICAgICAgIGZvciAoYXV0byBvYnNlcnZlciA9IG1fb2JzZXJ2ZXJzLmJl
Z2luKCksIGVuZCA9IG1fb2JzZXJ2ZXJzLmVuZCgpOyBvYnNlcnZlciAhPSBlbmQ7ICsrb2JzZXJ2
ZXIpCi0gICAgICAgICAgICAoKm9ic2VydmVyKS0+ZGlkQWRkT3JSZW1vdmVUcmFjaygpOworICAg
ICAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogbV9vYnNlcnZlcnMpCisgICAgICAgICAgICBvYnNl
cnZlci0+ZGlkQWRkT3JSZW1vdmVUcmFjaygpOwogICAgIH0KIH0KIApAQCAtMTgxLDggKzE4MSw4
IEBAIHZvaWQgTWVkaWFTdHJlYW06OnJlbW92ZVRyYWNrKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1U
cmFjaz4gcHJwVHJhY2ssIEV4Y2VwdGlvbkNvCiAgICAgfQogCiAgICAgaWYgKHJlbW92ZVRyYWNr
KHBycFRyYWNrKSkgewotICAgICAgICBmb3IgKGF1dG8gb2JzZXJ2ZXIgPSBtX29ic2VydmVycy5i
ZWdpbigpLCBlbmQgPSBtX29ic2VydmVycy5lbmQoKTsgb2JzZXJ2ZXIgIT0gZW5kOyArK29ic2Vy
dmVyKQotICAgICAgICAgICAgKCpvYnNlcnZlciktPmRpZEFkZE9yUmVtb3ZlVHJhY2soKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IG1fb2JzZXJ2ZXJzKQorICAgICAgICAgICAgb2Jz
ZXJ2ZXItPmRpZEFkZE9yUmVtb3ZlVHJhY2soKTsKICAgICB9CiB9CiAKQEAgLTIxNiwxNSArMjE2
LDE1IEBAIGJvb2wgTWVkaWFTdHJlYW06OnJlbW92ZVRyYWNrKFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1UcmFjaz4gcHJwVHJhY2spCiBib29sIE1lZGlhU3RyZWFtOjpoYXZlVHJhY2tXaXRoU291cmNl
KFBhc3NSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gc291cmNlKQogewogICAgIGlmIChzb3Vy
Y2UtPnR5cGUoKSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpbykgewotICAgICAgICBmb3Ig
KGF1dG8gaXQgPSBtX2F1ZGlvVHJhY2tzLmJlZ2luKCksIGVuZCA9IG1fYXVkaW9UcmFja3MuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKCgqaXQpLT5zb3VyY2UoKSA9
PSBzb3VyY2UuZ2V0KCkpCisgICAgICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX2F1ZGlvVHJhY2tz
KSB7CisgICAgICAgICAgICBpZiAodHJhY2stPnNvdXJjZSgpID09IHNvdXJjZS5nZXQoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgZm9yIChhdXRvIGl0ID0gbV92aWRlb1RyYWNrcy5iZWdpbigpLCBl
bmQgPSBtX3ZpZGVvVHJhY2tzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KCgqaXQpLT5zb3VyY2UoKSA9PSBzb3VyY2UuZ2V0KCkpCisgICAgZm9yIChhdXRvJiB0cmFjayA6
IG1fdmlkZW9UcmFja3MpIHsKKyAgICAgICAgaWYgKHRyYWNrLT5zb3VyY2UoKSA9PSBzb3VyY2Uu
Z2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTIzMywxNCArMjMz
LDE0IEBAIGJvb2wgTWVkaWFTdHJlYW06OmhhdmVUcmFja1dpdGhTb3VyY2UoUGFzc1JlZlB0cjxS
ZWFsdGltZU1lZGlhU291cmNlPiBzb3VyY2UpCiAKIE1lZGlhU3RyZWFtVHJhY2sqIE1lZGlhU3Ry
ZWFtOjpnZXRUcmFja0J5SWQoU3RyaW5nIGlkKQogewotICAgIGZvciAoYXV0byBpdCA9IG1fYXVk
aW9UcmFja3MuYmVnaW4oKSwgZW5kID0gbV9hdWRpb1RyYWNrcy5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS0+aWQoKSA9PSBpZCkKLSAgICAgICAgICAgIHJldHVy
biAoKml0KS5nZXQoKTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV9hdWRpb1RyYWNrcykgewor
ICAgICAgICBpZiAodHJhY2stPmlkKCkgPT0gaWQpCisgICAgICAgICAgICByZXR1cm4gdHJhY2su
Z2V0KCk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvIGl0ID0gbV92aWRlb1RyYWNrcy5iZWdpbigp
LCBlbmQgPSBtX3ZpZGVvVHJhY2tzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
aWYgKCgqaXQpLT5pZCgpID09IGlkKQotICAgICAgICAgICAgcmV0dXJuICgqaXQpLmdldCgpOwor
ICAgIGZvciAoYXV0byYgdHJhY2sgOiAgbV92aWRlb1RyYWNrcykgeworICAgICAgICBpZiAodHJh
Y2stPmlkKCkgPT0gaWQpCisgICAgICAgICAgICByZXR1cm4gdHJhY2suZ2V0KCk7CiAgICAgfQog
CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNDksMjIgKzI0OSwyMiBAQCBNZWRpYVN0cmVhbVRy
YWNrKiBNZWRpYVN0cmVhbTo6Z2V0VHJhY2tCeUlkKFN0cmluZyBpZCkKIFZlY3RvcjxSZWZQdHI8
TWVkaWFTdHJlYW1UcmFjaz4+IE1lZGlhU3RyZWFtOjpnZXRUcmFja3MoKQogewogICAgIFZlY3Rv
cjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4+IHRyYWNrczsKLSAgICBmb3IgKGF1dG8gaXQgPSBt
X2F1ZGlvVHJhY2tzLmJlZ2luKCksIGVuZCA9IG1fYXVkaW9UcmFja3MuZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgdHJhY2tzLmFwcGVuZCgoKml0KS5nZXQoKSk7Ci0gICAgZm9yIChh
dXRvIGl0ID0gbV92aWRlb1RyYWNrcy5iZWdpbigpLCBlbmQgPSBtX3ZpZGVvVHJhY2tzLmVuZCgp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHRyYWNrcy5hcHBlbmQoKCppdCkuZ2V0KCkpOwor
ICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX2F1ZGlvVHJhY2tzKQorICAgICAgICB0cmFja3MuYXBw
ZW5kKHRyYWNrLmdldCgpKTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV92aWRlb1RyYWNrcykK
KyAgICAgICAgdHJhY2tzLmFwcGVuZCh0cmFjay5nZXQoKSk7CiAKICAgICByZXR1cm4gdHJhY2tz
OwogfQogCiB2b2lkIE1lZGlhU3RyZWFtOjp0cmFja0RpZEVuZCgpCiB7Ci0gICAgZm9yIChhdXRv
IGl0ID0gbV9hdWRpb1RyYWNrcy5iZWdpbigpLCBlbmQgPSBtX2F1ZGlvVHJhY2tzLmVuZCgpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCEoKml0KS0+ZW5kZWQoKSkKKyAgICBmb3Ig
KGF1dG8mIHRyYWNrIDogbV9hdWRpb1RyYWNrcykgeworICAgICAgICBpZiAoIXRyYWNrLT5lbmRl
ZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBmb3IgKGF1dG8gaXQgPSBtX3Zp
ZGVvVHJhY2tzLmJlZ2luKCksIGVuZCA9IG1fdmlkZW9UcmFja3MuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBpZiAoISgqaXQpLT5lbmRlZCgpKQorICAgIGZvciAoYXV0byYgdHJh
Y2sgOiBtX3ZpZGVvVHJhY2tzKSB7CisgICAgICAgIGlmICghdHJhY2stPmVuZGVkKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNjEsOCArMzYxLDggQEAgdm9pZCBNZWRpYVN0
cmVhbTo6c2NoZWR1bGVkRXZlbnRUaW1lckZpcmVkKCkKICAgICBWZWN0b3I8UmVmUHRyPEV2ZW50
Pj4gZXZlbnRzOwogICAgIGV2ZW50cy5zd2FwKG1fc2NoZWR1bGVkRXZlbnRzKTsKIAotICAgIGZv
ciAoYXV0byBpdCA9IGV2ZW50cy5iZWdpbigpLCBlbmQgPSBldmVudHMuZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgZGlzcGF0Y2hFdmVudCgoKml0KS5yZWxlYXNlKCkpOworICAgIGZv
ciAoYXV0byYgZXZlbnQgOiBldmVudHMpCisgICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQucmVs
ZWFzZSgpKTsKIAogICAgIGV2ZW50cy5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNhcGFiaWxpdGllcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2FwYWJpbGl0aWVz
LmNwcAppbmRleCA4NTRmNmQ5ODZmZWM4NDIwYjJlN2RhNzdhYWIxMmMzOWIxMWRmMzQ1Li40ODA0
MDQ4ZDk3Nzg3OWI0MjgxODcwNGU1Y2NiMTVkM2VjMTI2NWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2FwYWJp
bGl0aWVzLmNwcApAQCAtNTgsMTIgKzU4LDExIEBAIFZlY3RvcjxTdHJpbmc+IE1lZGlhU3RyZWFt
Q2FwYWJpbGl0aWVzOjpzb3VyY2VUeXBlKCkgY29uc3QKICAgICBpZiAoIWNvdW50KQogICAgICAg
ICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKICAgICAKLSAgICBjb25zdCBWZWN0b3I8UmVhbHRp
bWVNZWRpYVNvdXJjZVN0YXRlczo6U291cmNlVHlwZT4mIHNvdXJjZVR5cGVzID0gbV9Tb3VyY2VD
YXBhYmlsaXRpZXMtPnNvdXJjZVR5cGVzKCk7CiAgICAgVmVjdG9yPFN0cmluZz4gY2FwYWJpbGl0
aWVzOwogICAgIGNhcGFiaWxpdGllcy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOwogICAgIAotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgY2FwYWJpbGl0aWVz
LmFwcGVuZChSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpzb3VyY2VUeXBlKHNvdXJjZVR5cGVz
W2ldKSk7CisgICAgZm9yIChhdXRvJiB0eXBlIDogbV9Tb3VyY2VDYXBhYmlsaXRpZXMtPnNvdXJj
ZVR5cGVzKCkpCisgICAgICAgIGNhcGFiaWxpdGllcy5hcHBlbmQoUmVhbHRpbWVNZWRpYVNvdXJj
ZVN0YXRlczo6c291cmNlVHlwZSh0eXBlKSk7CiAgICAgCiAgICAgcmV0dXJuIGNhcGFiaWxpdGll
czsKIH0KQEAgLTczLDEzICs3MiwxMiBAQCBWZWN0b3I8U3RyaW5nPiBNZWRpYVN0cmVhbUNhcGFi
aWxpdGllczo6c291cmNlSWQoKSBjb25zdAogICAgIHNpemVfdCBjb3VudCA9IG1fU291cmNlQ2Fw
YWJpbGl0aWVzLT5zb3VyY2VJZCgpLnNpemUoKTsKICAgICBpZiAoIWNvdW50KQogICAgICAgICBy
ZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKLSAgICAKLSAgICBjb25zdCBWZWN0b3I8QXRvbWljU3Ry
aW5nPiYgc291cmNlSWRzID0gbV9Tb3VyY2VDYXBhYmlsaXRpZXMtPnNvdXJjZUlkKCk7CisKICAg
ICBWZWN0b3I8U3RyaW5nPiBjYXBhYmlsaXRpZXM7CiAgICAgY2FwYWJpbGl0aWVzLnJlc2VydmVD
YXBhY2l0eShjb3VudCk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKQotICAgICAgICBjYXBhYmlsaXRpZXMuYXBwZW5kKHNvdXJjZUlkc1tpXSk7CisKKyAgICBm
b3IgKGF1dG8mIGlkIDogbV9Tb3VyY2VDYXBhYmlsaXRpZXMtPnNvdXJjZUlkKCkpCisgICAgICAg
IGNhcGFiaWxpdGllcy5hcHBlbmQoaWQpOwogICAgIAogICAgIHJldHVybiBjYXBhYmlsaXRpZXM7
CiB9CkBAIC05MiwxMiArOTAsMTEgQEAgVmVjdG9yPFN0cmluZz4gTWVkaWFTdHJlYW1DYXBhYmls
aXRpZXM6OmZhY2luZ01vZGUoKSBjb25zdAogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVy
biBWZWN0b3I8U3RyaW5nPigpOwogICAgIAotICAgIGNvbnN0IFZlY3RvcjxSZWFsdGltZU1lZGlh
U291cmNlU3RhdGVzOjpWaWRlb0ZhY2luZ01vZGU+JiBmYWNpbmdNb2RlcyA9IG1fU291cmNlQ2Fw
YWJpbGl0aWVzLT5mYWNpbmdNb2RlcygpOwogICAgIFZlY3RvcjxTdHJpbmc+IGNhcGFiaWxpdGll
czsKICAgICBjYXBhYmlsaXRpZXMucmVzZXJ2ZUNhcGFjaXR5KGNvdW50KTsKICAgICAKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIGNhcGFiaWxpdGllcy5h
cHBlbmQoUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZShmYWNpbmdNb2Rlc1tp
XSkpOworICAgIGZvciAoYXV0byYgbW9kZSA6IG1fU291cmNlQ2FwYWJpbGl0aWVzLT5mYWNpbmdN
b2RlcygpKQorICAgICAgICBjYXBhYmlsaXRpZXMuYXBwZW5kKFJlYWx0aW1lTWVkaWFTb3VyY2VT
dGF0ZXM6OmZhY2luZ01vZGUobW9kZSkpOwogICAgIAogICAgIHJldHVybiBjYXBhYmlsaXRpZXM7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtVHJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbVRyYWNrLmNwcAppbmRleCAzZmFiYWIxZDY4Yzg5NmExNTIxMzQzYTQ4YWRkYmRiNzNh
YWJmNDYzLi43MWMxZDhhNjVlZWZmNzYxNGE0OTgzY2U3YWJmNjNmYWY0MGZmOWM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2su
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1U
cmFjay5jcHAKQEAgLTI5MCw4ICsyOTAsOCBAQCB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnRyYWNr
RGlkRW5kKCkKIHsKICAgICBtX3ByaXZhdGVUcmFjay0+c2V0UmVhZHlTdGF0ZShSZWFsdGltZU1l
ZGlhU291cmNlOjpFbmRlZCk7CiAKLSAgICBmb3IgKFZlY3RvcjxPYnNlcnZlcio+OjppdGVyYXRv
ciBpID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgaSAhPSBtX29ic2VydmVycy5lbmQoKTsgKytpKQot
ICAgICAgICAoKmkpLT50cmFja0RpZEVuZCgpOworICAgIGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBt
X29ic2VydmVycykKKyAgICAgICAgb2JzZXJ2ZXItPnRyYWNrRGlkRW5kKCk7CiB9CiAKIHZvaWQg
TWVkaWFTdHJlYW1UcmFjazo6c3RvcCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVx
dWVzdC5jcHAKaW5kZXggZmIyYzUxMjdhNTgwMGIyNDQxMGRhMzlhNzgwZDIzM2JkMWUwZDMzYS4u
NTQ4YzBmOTdlN2NmYTAzMGZiM2Q2YWRjN2Q4YjE3MWZjYWUxYmY1NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrU291cmNlc1Jl
cXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0LmNwcApAQCAtNTIsOCArNTIsOCBAQCB2b2lkIE1lZGlh
U3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdDo6ZGlkQ29tcGxldGVSZXF1ZXN0KGNvbnN0IFZlY3Rv
cjxSZWZQdHI8VHJhYwogewogICAgIEFTU0VSVChtX2NhbGxiYWNrKTsKIAotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmVxdWVzdFNvdXJjZUluZm9zLnNpemUoKTsgKytpKQotICAgICAgICBt
X3NvdXJjZUluZm9zLmFwcGVuZChTb3VyY2VJbmZvOjpjcmVhdGUocmVxdWVzdFNvdXJjZUluZm9z
W2ldKSk7CisgICAgZm9yIChhdXRvJiBpbmZvIDogcmVxdWVzdFNvdXJjZUluZm9zKQorICAgICAg
ICBtX3NvdXJjZUluZm9zLmFwcGVuZChTb3VyY2VJbmZvOjpjcmVhdGUoaW5mbykpOwogCiAgICAg
UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKICAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzXSB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>