<?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>132439</bug_id>
          
          <creation_ts>2014-05-01 14:15:45 -0700</creation_ts>
          <short_desc>Move size computation for Blob constructor into BlobRegistryImpl</short_desc>
          <delta_ts>2014-05-01 16:10:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1005840</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-05-01 14:15:45 -0700</bug_when>
    <thetext>Blob constructor takes several blobs and combines them into one. We should do more of that in the registry, where the knowledge of the actual data is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005846</commentid>
    <comment_count>1</comment_count>
      <attachid>230609</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-05-01 14:31:44 -0700</bug_when>
    <thetext>Created attachment 230609
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005849</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-01 14:33:40 -0700</bug_when>
    <thetext>Attachment 230609 did not pass style-queue:


ERROR: Source/WebCore/platform/network/BlobRegistryImpl.cpp:143:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005870</commentid>
    <comment_count>3</comment_count>
      <attachid>230617</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-05-01 15:30:41 -0700</bug_when>
    <thetext>Created attachment 230617
patch for landing

With build and threading fixes (forgot to add a semaphore).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005888</commentid>
    <comment_count>4</comment_count>
      <attachid>230617</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-01 16:09:58 -0700</bug_when>
    <thetext>Comment on attachment 230617
patch for landing

Clearing flags on attachment: 230617

Committed r168126: &lt;http://trac.webkit.org/changeset/168126&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005889</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-01 16:10:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230609</attachid>
            <date>2014-05-01 14:31:44 -0700</date>
            <delta_ts>2014-05-01 15:30:41 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>BlobConstructor.txt</filename>
            <type>text/plain</type>
            <size>29837</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODEyMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE0LTA1LTAxICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgc2l6ZSBjb21wdXRh
dGlvbiBmb3IgQmxvYiBjb25zdHJ1Y3RvciBpbnRvIEJsb2JSZWdpc3RyeUltcGwKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjQzOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldC5jcHA6IChXZWJDb3JlOjpXZWJTb2NrZXQ6OmRpZFJlY2VpdmVCaW5hcnlE
YXRhKToKKyAgICAgICAgRG9uJ3QgcGFzcyB0aGUgc2l6ZSwgYW55b25lIHdobyBjYXJlcyBjYW4g
Z2V0IGl0IGZyb20gQmxvYkRhdGEuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Jsb2JDdXN0
b20uY3BwOiAoV2ViQ29yZTo6SlNCbG9iQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTQmxvYik6Cisg
ICAgICAgIFVwZGF0ZWQgZm9yIEJsb2JCdWlsZGVyIGNoYW5nZXMuCisKKyAgICAgICAgKiBmaWxl
YXBpL0Jsb2IuY3BwOiAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgICogZmlsZWFwaS9C
bG9iLmg6IChXZWJDb3JlOjpCbG9iOjpjcmVhdGUpOgorICAgICAgICBObyBsb25nZXIgdGFrZSBh
IHByZWNvbXB1dGVkIHNpemUgd2l0aCBCbG9iRGF0YSwgQmxvYlJlZ2lzdHJ5IHdpbGwgY29tcHV0
ZSBpdCBhcworICAgICAgICBwYXJ0IG9mIHJlZ2lzdHJhdGlvbi4KKworICAgICAgICAqIGZpbGVh
cGkvRmlsZS5oOgorICAgICAgICAqIGZpbGVhcGkvRmlsZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlOjpGaWxlKTogRG9uJ3QgcGFzcyBhIHNpemUgKHRoYXQncyB1bmtub3duIGFueXdheSku
CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpjYXB0dXJlU25hcHNob3QpOiBEZWxldGVkLiBGaW5h
bGx5LCBvbmx5IHRoZSByZWdpc3RyeSBpcyByZXNwb25zaWJsZQorICAgICAgICBmb3Igc25hcHNo
b3QgdHJhY2tpbmcgbm93IChJIGRvdWJ0IHRoYXQgZWl0aGVyIG5ldyBvciBvbGQgY29kZSBpcyBw
YXJ0aWN1bGFybHkgY29tcGxpYW50KS4KKworICAgICAgICAqIGZpbGVhcGkvVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5
OjpyZWdpc3RlckJsb2JVUkwpOgorICAgICAgICAqIGZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeS5oOgorICAgICAgICBQbHVtYmluZyB0byBtYWtlIHRoaXMgdmVyc2lvbiBvZiByZWdpc3Rl
ckJsb2JVUkwgcmV0dXJuIGEgc2l6ZS4gSSBtYXkgbWFrZSBzaXplCisgICAgICAgIGNhbGN1bGF0
aW9uIGxhenkgYW5kIHRoZSBmdW5jdGlvbiBhc3luYyBsYXRlciwgYnV0IHRoaXMgaXMgbmVlZGVk
IHRvIG1vdmUgdGhlIGJlaGF2aW9yCisgICAgICAgIHRvIHRoZSByaWdodCBwbGFjZSBmaXJzdC4K
KworICAgICAgICAqIGZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuaDoKKyAgICAgICAgKiBmaWxl
YXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JCdWlsZGVy
OjpCbG9iQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6YXBwZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkJsb2JCdWlsZGVyOjphcHBlbmRCeXRlc0RhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYkJ1aWxkZXI6OmZpbmFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJs
b2JCdWlsZGVyOjpnZXRCbG9iKTogRGVsZXRlZC4KKyAgICAgICAgRG9uJ3QgdHJhY2sgc2l6ZXMg
b3IgbW9kaWZpY2F0aW9uIHRpbWVzLCByZWdpc3RyeSB3aWxsIGRvIHRoYXQgd2l0aCBhcHByb3By
aWF0ZSBsYXppbmVzcy4KKyAgICAgICAgQ2xlYW5lZCB1cCB0aGUgQVBJIC0gbm93IHRoYXQgQmxv
YkJ1aWxkZXIgaXMgbm90IGV4cG9zZWQgdG8gSlMgYXMgYW4gb2JqZWN0LCBpdAorICAgICAgICBk
b2VzIG5vdCBuZWVkIHRvIGJlIHJldXNhYmxlLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9CbG9iUmVnaXN0cnkuaDogTWFkZSB0aGlzIHZlcnNpb24gb2YgcmVnaXN0ZXJCbG9iVVJMIHJl
dHVybiBhIHNpemUuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBs
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw6OmFwcGVuZFN0b3JhZ2VJdGVtcyk6IEFz
c2VydCB0aGF0IGxlbmd0aCBjb21wdXRhdGlvbnMgYXJlIGFjY3VyYXRlLgorICAgICAgICAoV2Vi
Q29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKTogQ29tcHV0ZSBhIHNpemUg
dG8gcmV0dXJuLCBhbmQgcmVjb3JkCisgICAgICAgIG1vZGlmaWNhdGlvbiB0aW1lIGFzIG5lY2Vz
c2FyeS4KKworICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6IChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6cmVzcG9uc2VCbG9iKTogRG9uJ3QgcGFzcyB0aGUKKyAgICAgICAgc2l6ZSwg
d2hpY2ggY2FuIGJlIGNvbXB1dGVkIGZyb20gZGF0YS4gU29vbiwgSSB3YW50IHRvIGFkZCBhIGNv
bnN0cnVjdG9yIHRoYXQgZG9lc24ndAorICAgICAgICByZXF1aXJlIHdyYXBwaW5nIGEgc2luZ2xl
IFZlY3RvciBhcyBCbG9iRGF0YSB0byBjb25zdHJ1Y3QgYSBCbG9iLgorCiAyMDE0LTA1LTAxICBE
YXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMTY4
MDQ2KTogW05ldyBNdWx0aWNvbHVtbl0gU2VsZWN0aW9uIGludG8gYW5kIG91dCBvZiBjb2x1bW4t
c3BhbiBlbGVtZW50cyBkb2Vzbid0IHdvcmsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCShyZXZpc2lvbiAxNjgxMTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIxLDEwICs1MjEsMTAgQEAgdm9pZCBXZWJTb2NrZXQ6OmRpZFJlY2VpdmVCaW5hcnlE
YXRhKFBhcwogICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0ICVwIGRpZFJlY2VpdmVCaW5hcnlE
YXRhKCkgJWx1IGJ5dGUgYmluYXJ5IG1lc3NhZ2UiLCB0aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nPihiaW5hcnlEYXRhLT5zaXplKCkpKTsKICAgICBzd2l0Y2ggKG1fYmluYXJ5VHlwZSkg
ewogICAgIGNhc2UgQmluYXJ5VHlwZUJsb2I6IHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBiaW5h
cnlEYXRhLT5zaXplKCk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBqdXN0IHJlY2VpdmVkIHRoZSBk
YXRhIGZyb20gTmV0d29ya1Byb2Nlc3MsIGFuZCBhcmUgc2VuZGluZyBpdCBiYWNrLiBUaGlzIGlz
IGluZWZmaWNpZW50LgogICAgICAgICBhdXRvIGJsb2JEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxC
bG9iRGF0YT4oKTsKICAgICAgICAgYmxvYkRhdGEtPmFwcGVuZERhdGEoUmF3RGF0YTo6Y3JlYXRl
KHN0ZDo6bW92ZSgqYmluYXJ5RGF0YSkpLCAwLCBCbG9iRGF0YUl0ZW06OnRvRW5kT2ZGaWxlKTsK
LSAgICAgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVhdGUoc3RkOjptb3ZlKGJsb2JE
YXRhKSwgc2l6ZSk7CisgICAgICAgIFJlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKHN0
ZDo6bW92ZShibG9iRGF0YSkpOwogICAgICAgICBkaXNwYXRjaEV2ZW50KE1lc3NhZ2VFdmVudDo6
Y3JlYXRlKGJsb2IucmVsZWFzZSgpLCBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1fdXJsKS0+dG9T
dHJpbmcoKSkpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAJKHJldmlzaW9uIDE2ODExMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNCw3ICsxMzQsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0Jsb2JDb25z
dAogICAgICAgICB9CiAgICAgfQogCi0gICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBibG9iQnVpbGRl
ci5nZXRCbG9iKHR5cGUpOworICAgIEJsb2JEYXRhSXRlbUxpc3QgaXRlbXMgPSBibG9iQnVpbGRl
ci5maW5hbGl6ZSgpOworICAgIGF1dG8gYmxvYkRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPEJsb2JE
YXRhPigpOworICAgIGJsb2JEYXRhLT5zZXRDb250ZW50VHlwZShCbG9iOjpub3JtYWxpemVkQ29u
dGVudFR5cGUodHlwZSkpOworICAgIGJsb2JEYXRhLT5zd2FwSXRlbXMoaXRlbXMpOworCisgICAg
UmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVhdGUoc3RkOjptb3ZlKGJsb2JEYXRhKSk7CisK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKENSRUFURV9ET01fV1JBUFBFUihqc0NvbnN0cnVj
dG9yLT5nbG9iYWxPYmplY3QoKSwgQmxvYiwgYmxvYi5nZXQoKSkpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvQmxvYi5jcHAJKHJldmlzaW9uIDE2ODExMykKKysrIFNvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvQmxvYi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDE1ICs3NywxNCBAQCBCbG9iOjpC
bG9iKCkKICAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwobV9pbnRl
cm5hbFVSTCwgc3RkOjptb3ZlKGJsb2JEYXRhKSk7CiB9CiAKLUJsb2I6OkJsb2Ioc3RkOjp1bmlx
dWVfcHRyPEJsb2JEYXRhPiBibG9iRGF0YSwgbG9uZyBsb25nIHNpemUpCitCbG9iOjpCbG9iKHN0
ZDo6dW5pcXVlX3B0cjxCbG9iRGF0YT4gYmxvYkRhdGEpCiAgICAgOiBtX3R5cGUoYmxvYkRhdGEt
PmNvbnRlbnRUeXBlKCkpCi0gICAgLCBtX3NpemUoc2l6ZSkKIHsKICAgICBBU1NFUlQoYmxvYkRh
dGEpOwogCiAgICAgLy8gQ3JlYXRlIGEgbmV3IGludGVybmFsIFVSTCBhbmQgcmVnaXN0ZXIgaXQg
d2l0aCB0aGUgcHJvdmlkZWQgYmxvYiBkYXRhLgogICAgIG1faW50ZXJuYWxVUkwgPSBCbG9iVVJM
OjpjcmVhdGVJbnRlcm5hbFVSTCgpOwotICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lz
dGVyQmxvYlVSTChtX2ludGVybmFsVVJMLCBzdGQ6Om1vdmUoYmxvYkRhdGEpKTsKKyAgICBtX3Np
emUgPSBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwobV9pbnRlcm5hbFVS
TCwgc3RkOjptb3ZlKGJsb2JEYXRhKSk7CiB9CiAKIEJsb2I6OkJsb2IoY29uc3QgVVJMJiBzcmNV
UkwsIGNvbnN0IFN0cmluZyYgdHlwZSwgbG9uZyBsb25nIHNpemUpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0Jsb2IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0Jsb2IuaAkocmV2aXNpb24gMTY4MTEzKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9i
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkgKzUwLDkgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEJsb2IpOwogICAgIH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJs
b2I+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8QmxvYkRhdGE+IGJsb2JEYXRhLCBsb25nIGxvbmcg
c2l6ZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRy
PEJsb2JEYXRhPiBibG9iRGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QmxvYihzdGQ6Om1vdmUoYmxvYkRhdGEpLCBzaXplKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQmxvYihzdGQ6Om1vdmUoYmxvYkRhdGEpKSk7CiAgICAgfQogCiAgICAgLy8gRm9yIGRl
c2VyaWFsaXphdGlvbi4KQEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAg
ICAgQmxvYigpOwotICAgIEJsb2Ioc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPiwgbG9uZyBsb25n
IHNpemUpOworICAgIEJsb2Ioc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPik7CiAKICAgICAvLyBG
b3IgZGVzZXJpYWxpemF0aW9uLgogICAgIEJsb2IoY29uc3QgVVJMJiBzcmNVUkwsIGNvbnN0IFN0
cmluZyYgdHlwZSwgbG9uZyBsb25nIHNpemUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9GaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuY3Bw
CShyZXZpc2lvbiAxNjgxMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Qmxv
YkRhdGE+IGNyZWF0ZUIKIH0KIAogRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIENvbnRl
bnRUeXBlTG9va3VwUG9saWN5IHBvbGljeSkKLSAgICA6IEJsb2IoY3JlYXRlQmxvYkRhdGFGb3JG
aWxlKHBhdGgsIHBvbGljeSksIC0xKQorICAgIDogQmxvYihjcmVhdGVCbG9iRGF0YUZvckZpbGUo
cGF0aCwgcG9saWN5KSkKICAgICAsIG1fcGF0aChwYXRoKQogICAgICwgbV9uYW1lKHBhdGhHZXRG
aWxlTmFtZShwYXRoKSkKIHsKQEAgLTcyLDcgKzcyLDcgQEAgRmlsZTo6RmlsZShjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IFVSTAogfQogCiBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBDb250ZW50VHlwZUxvb2t1cFBvbGljeSBwb2xpY3kpCi0gICAg
OiBCbG9iKGNyZWF0ZUJsb2JEYXRhRm9yRmlsZVdpdGhOYW1lKHBhdGgsIG5hbWUsIHBvbGljeSks
IC0xKQorICAgIDogQmxvYihjcmVhdGVCbG9iRGF0YUZvckZpbGVXaXRoTmFtZShwYXRoLCBuYW1l
LCBwb2xpY3kpKQogICAgICwgbV9wYXRoKHBhdGgpCiAgICAgLCBtX25hbWUobmFtZSkKIHsKQEAg
LTk3LDIxICs5Nyw2IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBGaWxlOjpzaXplKCkgY29uc3QKICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplKTsKIH0KIAotdm9p
ZCBGaWxlOjpjYXB0dXJlU25hcHNob3QobG9uZyBsb25nJiBzbmFwc2hvdFNpemUsIGRvdWJsZSYg
c25hcHNob3RNb2RpZmljYXRpb25UaW1lKSBjb25zdAotewotICAgIC8vIE9idGFpbnMgYSBzbmFw
c2hvdCBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcgaXRzIGN1cnJlbnQgc2l6ZSBhbmQgbW9kaWZp
Y2F0aW9uIHRpbWUuIFRoaXMgaXMgdXNlZCB3aGVuIHdlIHNsaWNlIGEgZmlsZSBmb3IgdGhlIGZp
cnN0IHRpbWUuCi0gICAgLy8gSWYgd2UgZmFpbCB0byByZXRyaWV2ZSB0aGUgc2l6ZSBvciBtb2Rp
ZmljYXRpb24gdGltZSwgcHJvYmFibHkgZHVlIHRvIHRoYXQgdGhlIGZpbGUgaGFzIGJlZW4gZGVs
ZXRlZCwgMCBzaXplIGlzIHJldHVybmVkLgotICAgIEZpbGVNZXRhZGF0YSBtZXRhZGF0YTsKLSAg
ICBpZiAoIWdldEZpbGVNZXRhZGF0YShtX3BhdGgsIG1ldGFkYXRhKSkgewotICAgICAgICBzbmFw
c2hvdFNpemUgPSAwOwotICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSBpbnZhbGlk
RmlsZVRpbWUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNuYXBzaG90U2l6ZSA9
IG1ldGFkYXRhLmxlbmd0aDsKLSAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSBtZXRhZGF0
YS5tb2RpZmljYXRpb25UaW1lOwotfQotCiBTdHJpbmcgRmlsZTo6Y29udGVudFR5cGVGcm9tRmls
ZVBhdGgoY29uc3QgU3RyaW5nJiBuYW1lLCBGaWxlOjpDb250ZW50VHlwZUxvb2t1cFBvbGljeSBw
b2xpY3kpCiB7CiAgICAgU3RyaW5nIHR5cGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuaAkocmV2
aXNpb24gMTY4MTEzKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDkgKzcyLDYgQEAgcHVibGljOgogICAgIC8vIFRoaXMgcmV0dXJucyB0aGUg
Y3VycmVudCBkYXRlIGFuZCB0aW1lIGlmIHRoZSBmaWxlJ3MgbGFzdCBtb2RpZmllY2F0aW9uIGRh
dGUgaXMgbm90IGtub3duIChwZXIgc3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvRmlsZUFQSS8j
ZGZuLWxhc3RNb2RpZmllZERhdGUpLgogICAgIGRvdWJsZSBsYXN0TW9kaWZpZWREYXRlKCkgY29u
c3Q7CiAKLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBpbnZvbHZlcyBzeW5jaHJvbm91cyBmaWxlIG9w
ZXJhdGlvbi4gVGhpbmsgdHdpY2UgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAgICB2
b2lkIGNhcHR1cmVTbmFwc2hvdChsb25nIGxvbmcmIHNuYXBzaG90U2l6ZSwgZG91YmxlJiBzbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWUpIGNvbnN0OwotCiAgICAgc3RhdGljIFN0cmluZyBjb250ZW50
VHlwZUZyb21GaWxlUGF0aChjb25zdCBTdHJpbmcmLCBDb250ZW50VHlwZUxvb2t1cFBvbGljeSk7
CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9i
UmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDE2ODExMykKKysrIFNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4
LDE4ICs4OCwyMCBAQCBzdGF0aWMgVGhyZWFkU3BlY2lmaWM8QmxvYlVybE9yaWdpbk1hcD4mCiAg
ICAgcmV0dXJuICptYXA7CiB9CiAKLXZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0
ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBzdGQ6OnVuaXF1ZV9wdHI8QmxvYkRhdGE+IGJsb2JE
YXRhKQordW5zaWduZWQgbG9uZyBsb25nIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVy
QmxvYlVSTChjb25zdCBVUkwmIHVybCwgc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPiBibG9iRGF0
YSkKIHsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgcmVzdWx0U2l6ZTsKICAgICBpZiAoaXNNYWlu
VGhyZWFkKCkpCi0gICAgICAgIGJsb2JSZWdpc3RyeSgpLnJlZ2lzdGVyQmxvYlVSTCh1cmwsIHN0
ZDo6bW92ZShibG9iRGF0YSkpOworICAgICAgICByZXN1bHRTaXplID0gYmxvYlJlZ2lzdHJ5KCku
cmVnaXN0ZXJCbG9iVVJMKHVybCwgc3RkOjptb3ZlKGJsb2JEYXRhKSk7CiAgICAgZWxzZSB7CiAg
ICAgICAgIC8vIEJsb2JSZWdpc3RyeUNvbnRleHQgcGVyZm9ybXMgYW4gaXNvbGF0ZWQgY29weSBv
ZiBkYXRhLgogICAgICAgICBCbG9iUmVnaXN0cnlDb250ZXh0KiBjb250ZXh0ID0gbmV3IEJsb2JS
ZWdpc3RyeUNvbnRleHQodXJsLCBzdGQ6Om1vdmUoYmxvYkRhdGEpKTsKLSAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbY29udGV4dF0geworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtjb250ZXh0
LCAmcmVzdWx0U2l6ZV0gewogICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJsb2JSZWdpc3Ry
eUNvbnRleHQ+IGJsb2JSZWdpc3RyeUNvbnRleHQoY29udGV4dCk7Ci0gICAgICAgICAgICBibG9i
UmVnaXN0cnkoKS5yZWdpc3RlckJsb2JVUkwoYmxvYlJlZ2lzdHJ5Q29udGV4dC0+dXJsLCBzdGQ6
Om1vdmUoYmxvYlJlZ2lzdHJ5Q29udGV4dC0+YmxvYkRhdGEpKTsKKyAgICAgICAgICAgIHJlc3Vs
dFNpemUgPSBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckJsb2JVUkwoYmxvYlJlZ2lzdHJ5Q29udGV4
dC0+dXJsLCBzdGQ6Om1vdmUoYmxvYlJlZ2lzdHJ5Q29udGV4dC0+YmxvYkRhdGEpKTsKICAgICAg
ICAgfSk7CiAgICAgfQorICAgIHJldHVybiByZXN1bHRTaXplOwogfQogCiB2b2lkIFRocmVhZGFi
bGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBj
b25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBzcmNVUkwpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaAkocmV2aXNpb24gMTY4MTEzKQor
KysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIGNsYXNz
IFRocmVhZGFibGVCbG9iUmVnaXN0cnkgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHJlZ2lz
dGVyQmxvYlVSTChjb25zdCBVUkwmLCBzdGQ6OnVuaXF1ZV9wdHI8QmxvYkRhdGE+KTsKKyAgICBz
dGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmLCBzdGQ6
OnVuaXF1ZV9wdHI8QmxvYkRhdGE+KTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJsb2JVUkwo
U2VjdXJpdHlPcmlnaW4qLCBjb25zdCBVUkwmLCBjb25zdCBVUkwmIHNyY1VSTCk7CiAgICAgc3Rh
dGljIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJik7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3BwCShyZXZpc2lvbiAxNjgxMTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNyArNTUsNiBAQCBlbnVtIEJsb2JDb25zdHJ1Y3RvckFycmF5QnVmZmVy
T3JWaWV3IHsKIH07CiAKIEJsb2JCdWlsZGVyOjpCbG9iQnVpbGRlcigpCi0gICAgOiBtX3NpemUo
MCkKIHsKIH0KIApAQCAtNjMsMTUgKzYyLDEyIEBAIHZvaWQgQmxvYkJ1aWxkZXI6OmFwcGVuZChj
b25zdCBTdHJpbmcmIHQKIHsKICAgICBDU3RyaW5nIHV0ZjhUZXh0ID0gVVRGOEVuY29kaW5nKCku
ZW5jb2RlKHRleHQsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKIAotICAgIHNpemVfdCBvbGRT
aXplID0gbV9hcHBlbmRhYmxlRGF0YS5zaXplKCk7Ci0KICAgICBpZiAoZW5kaW5nVHlwZSA9PSAi
bmF0aXZlIikKICAgICAgICAgbm9ybWFsaXplTGluZUVuZGluZ3NUb05hdGl2ZSh1dGY4VGV4dCwg
bV9hcHBlbmRhYmxlRGF0YSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChlbmRpbmdUeXBl
ID09ICJ0cmFuc3BhcmVudCIpOwogICAgICAgICBtX2FwcGVuZGFibGVEYXRhLmFwcGVuZCh1dGY4
VGV4dC5kYXRhKCksIHV0ZjhUZXh0Lmxlbmd0aCgpKTsKICAgICB9Ci0gICAgbV9zaXplICs9IG1f
YXBwZW5kYWJsZURhdGEuc2l6ZSgpIC0gb2xkU2l6ZTsKIH0KIAogI2lmIEVOQUJMRShCTE9CKQpA
QCAtMTA0LDQ0ICsxMDAsMjMgQEAgdm9pZCBCbG9iQnVpbGRlcjo6YXBwZW5kKEJsb2IqIGJsb2Ip
CiAgICAgICAgIG1faXRlbXMuYXBwZW5kKEJsb2JEYXRhSXRlbShSYXdEYXRhOjpjcmVhdGUoc3Rk
Ojptb3ZlKG1fYXBwZW5kYWJsZURhdGEpKSkpOwogICAgIGlmIChibG9iLT5pc0ZpbGUoKSkgewog
ICAgICAgICBGaWxlKiBmaWxlID0gdG9GaWxlKGJsb2IpOwotICAgICAgICAvLyBJZiB0aGUgYmxv
YiBpcyBmaWxlIHRoYXQgaXMgbm90IHNuYXBzaG90ZWQsIGNhcHR1cmUgdGhlIHNuYXBzaG90IG5v
dy4KLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaW52b2x2ZXMgc3luY2hyb25vdXMgZmlsZSBvcGVy
YXRpb24uIFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gbWFrZSBpdCBhc3luY2hyb25vdXMu
Ci0gICAgICAgIGxvbmcgbG9uZyBzbmFwc2hvdFNpemU7Ci0gICAgICAgIGRvdWJsZSBzbmFwc2hv
dE1vZGlmaWNhdGlvblRpbWU7Ci0gICAgICAgIGZpbGUtPmNhcHR1cmVTbmFwc2hvdChzbmFwc2hv
dFNpemUsIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7Ci0KLSAgICAgICAgbV9zaXplICs9IHNu
YXBzaG90U2l6ZTsKLSAgICAgICAgbV9pdGVtcy5hcHBlbmQoQmxvYkRhdGFJdGVtKGZpbGUtPnBh
dGgoKSwgMCwgc25hcHNob3RTaXplLCBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpKTsKKyAgICAg
ICAgbV9pdGVtcy5hcHBlbmQoQmxvYkRhdGFJdGVtKGZpbGUtPnBhdGgoKSwgMCwgQmxvYkRhdGFJ
dGVtOjp0b0VuZE9mRmlsZSwgaW52YWxpZEZpbGVUaW1lKCkpKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBsb25nIGxvbmcgYmxvYlNpemUgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGJsb2ItPnNp
emUoKSk7Ci0gICAgICAgIG1fc2l6ZSArPSBibG9iU2l6ZTsKICAgICAgICAgbV9pdGVtcy5hcHBl
bmQoQmxvYkRhdGFJdGVtKGJsb2ItPnVybCgpLCAwLCBibG9iU2l6ZSkpOwogICAgIH0KIH0KIAog
dm9pZCBCbG9iQnVpbGRlcjo6YXBwZW5kQnl0ZXNEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVf
dCBsZW5ndGgpCiB7Ci0gICAgc2l6ZV90IG9sZFNpemUgPSBtX2FwcGVuZGFibGVEYXRhLnNpemUo
KTsKICAgICBtX2FwcGVuZGFibGVEYXRhLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
ZGF0YSksIGxlbmd0aCk7Ci0gICAgbV9zaXplICs9IG1fYXBwZW5kYWJsZURhdGEuc2l6ZSgpIC0g
b2xkU2l6ZTsKIH0KIAotUGFzc1JlZlB0cjxCbG9iPiBCbG9iQnVpbGRlcjo6Z2V0QmxvYihjb25z
dCBTdHJpbmcmIGNvbnRlbnRUeXBlKQorQmxvYkRhdGFJdGVtTGlzdCBCbG9iQnVpbGRlcjo6Zmlu
YWxpemUoKQogewogICAgIGlmICghbV9hcHBlbmRhYmxlRGF0YS5pc0VtcHR5KCkpCiAgICAgICAg
IG1faXRlbXMuYXBwZW5kKEJsb2JEYXRhSXRlbShSYXdEYXRhOjpjcmVhdGUoc3RkOjptb3ZlKG1f
YXBwZW5kYWJsZURhdGEpKSkpOwotCi0gICAgYXV0byBibG9iRGF0YSA9IHN0ZDo6bWFrZV91bmlx
dWU8QmxvYkRhdGE+KCk7Ci0gICAgYmxvYkRhdGEtPnNldENvbnRlbnRUeXBlKEJsb2I6Om5vcm1h
bGl6ZWRDb250ZW50VHlwZShjb250ZW50VHlwZSkpOwotICAgIGJsb2JEYXRhLT5zd2FwSXRlbXMo
bV9pdGVtcyk7Ci0KLSAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZShzdGQ6Om1v
dmUoYmxvYkRhdGEpLCBtX3NpemUpOwotCi0gICAgLy8gQWZ0ZXIgY3JlYXRpbmcgYSBibG9iIGZy
b20gdGhlIGN1cnJlbnQgYmxvYiBkYXRhLCB3ZSBkbyBub3QgbmVlZCB0byBrZWVwIHRoZSBkYXRh
IGFyb3VuZCBhbnkgbW9yZS4gSW5zdGVhZCwgd2Ugb25seQotICAgIC8vIG5lZWQgdG8ga2VlcCBh
IHJlZmVyZW5jZSB0byB0aGUgVVJMIG9mIHRoZSBibG9iIGp1c3QgY3JlYXRlZC4KLSAgICBtX2l0
ZW1zLmFwcGVuZChCbG9iRGF0YUl0ZW0oYmxvYi0+dXJsKCksIDAsIG1fc2l6ZSkpOwotCi0gICAg
cmV0dXJuIGJsb2I7CisgICAgcmV0dXJuIHN0ZDo6bW92ZShtX2l0ZW1zKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9i
QnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0Qmxv
YkJ1aWxkZXIuaAkocmV2aXNpb24gMTY4MTEzKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9X
ZWJLaXRCbG9iQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0Miw2IEBAIGNsYXNz
IEFycmF5QnVmZmVyVmlldzsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmxvYjsKLWNs
YXNzIFRleHRFbmNvZGluZzsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3Mg
QmxvYkJ1aWxkZXIgewogcHVibGljOgpAQCAtNTcsMTIgKzU0LDExIEBAIHB1YmxpYzoKICAgICB2
b2lkIGFwcGVuZChQYXNzUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3Pik7CiAjZW5kaWYKIAot
ICAgIFBhc3NSZWZQdHI8QmxvYj4gZ2V0QmxvYihjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsK
KyAgICBCbG9iRGF0YUl0ZW1MaXN0IGZpbmFsaXplKCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBh
cHBlbmRCeXRlc0RhdGEoY29uc3Qgdm9pZCosIHNpemVfdCk7CiAKLSAgICBsb25nIGxvbmcgbV9z
aXplOwogICAgIEJsb2JEYXRhSXRlbUxpc3QgbV9pdGVtczsKICAgICBWZWN0b3I8Y2hhcj4gbV9h
cHBlbmRhYmxlRGF0YTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvQmxvYlJlZ2lzdHJ5LmgJKHJldmlzaW9uIDE2ODExMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcg
KzQ2LDcgQEAgQmxvYlJlZ2lzdHJ5JiBibG9iUmVnaXN0cnkoKTsKIGNsYXNzIEJsb2JSZWdpc3Ry
eSB7CiBwdWJsaWM6CiAgICAgLy8gUmVnaXN0ZXJzIGEgYmxvYiBVUkwgcmVmZXJyaW5nIHRvIHRo
ZSBzcGVjaWZpZWQgYmxvYiBkYXRhLgotICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwo
Y29uc3QgVVJMJiwgc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPikgPSAwOworICAgIHZpcnR1YWwg
dW5zaWduZWQgbG9uZyBsb25nIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmLCBzdGQ6OnVuaXF1
ZV9wdHI8QmxvYkRhdGE+KSA9IDA7CiAgICAgCiAgICAgLy8gUmVnaXN0ZXJzIGEgbmV3IGJsb2Ig
VVJMIHJlZmVycmluZyB0byB0aGUgYmxvYiBkYXRhIGlkZW50aWZpZWQgYnkgdGhlIHNwZWNpZmll
ZCBzcmNVUkwuCiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmLCBj
b25zdCBVUkwmIHNyY1VSTCkgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCShyZXZpc2lvbiAxNjgxMTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTMsOSArMTEzLDEwIEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6
YXBwZW5kU3RvcmFnZUl0ZW0KICAgICAgICAgbGVuZ3RoIC09IG5ld0xlbmd0aDsKICAgICAgICAg
b2Zmc2V0ID0gMDsKICAgICB9CisgICAgQVNTRVJUKCFsZW5ndGgpOwogfQogCi12b2lkIEJsb2JS
ZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwgc3RkOjp1bmlxdWVf
cHRyPEJsb2JEYXRhPiBibG9iRGF0YSkKK3Vuc2lnbmVkIGxvbmcgbG9uZyBCbG9iUmVnaXN0cnlJ
bXBsOjpyZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIHN0ZDo6dW5pcXVlX3B0cjxCbG9i
RGF0YT4gYmxvYkRhdGEpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICByZWdp
c3RlckJsb2JSZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yKCk7CkBAIC0xMjgsMjIgKzEyOSw0MiBA
QCB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjCiAgICAgLy8gMykgVGhl
IFVSTCBpdGVtIGlzIGRlbm90ZWQgYnkgdGhlIFVSTCwgdGhlIHJhbmdlIGFuZCB0aGUgZXhwZWN0
ZWQgbW9kaWZpY2F0aW9uIHRpbWUuCiAgICAgLy8gQWxsIHRoZSBCbG9iIGl0ZW1zIGluIHRoZSBw
YXNzaW5nIGJsb2IgZGF0YSBhcmUgcmVzb2x2ZWQgYW5kIGV4cGFuZGVkIGludG8gYSBzZXQgb2Yg
RGF0YSBhbmQgRmlsZSBpdGVtcy4KIAotICAgIGZvciAoQmxvYkRhdGFJdGVtTGlzdDo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IGJsb2JEYXRhLT5pdGVtcygpLmJlZ2luKCk7IGl0ZXIgIT0gYmxvYkRh
dGEtPml0ZW1zKCkuZW5kKCk7ICsraXRlcikgewotICAgICAgICBzd2l0Y2ggKGl0ZXItPnR5cGUp
IHsKKyAgICAvLyBGSVhNRTogQmxvYkRhdGFJdGVtcyBjb250YWluIGEgbG90IG9mIGluZm9ybWF0
aW9uIHRoYXQgd2UgZG8gbm90IGV4cGVjdCB0byBiZSBwcmVzZW50IHdoZW4gcmVnaXN0ZXJpbmcg
YSBuZXcgYmxvYiwKKyAgICAvLyB0aGVzZSBkYXRhIG1lbWJlcnMgYXJlIG9ubHkgdXNlZCBpbnNp
ZGUgdGhlIHJlZ2lzdHJ5LiBVc2UgYSBtb3JlIGFwcHJvcHJpYXRlIHR5cGUgdGhhbiBCbG9iRGF0
YS4KKworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplID0gMDsKKyAgICBmb3IgKGNvbnN0IEJs
b2JEYXRhSXRlbSYgaXRlbSA6IGJsb2JEYXRhLT5pdGVtcygpKSB7CisgICAgICAgIHN3aXRjaCAo
aXRlbS50eXBlKSB7CiAgICAgICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpEYXRhOgotICAgICAgICAg
ICAgYmxvYlN0b3JhZ2VEYXRhLT5tX2RhdGEuYXBwZW5kRGF0YShpdGVyLT5kYXRhLCAwLCBpdGVy
LT5kYXRhLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBibG9iU3RvcmFnZURhdGEtPm1fZGF0YS5h
cHBlbmREYXRhKGl0ZW0uZGF0YSwgMCwgaXRlbS5kYXRhLT5sZW5ndGgoKSk7CisgICAgICAgICAg
ICBzaXplICs9IGl0ZW0uZGF0YS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBCbG9iRGF0YUl0ZW06OkZpbGU6Ci0gICAgICAgICAgICBibG9iU3RvcmFnZURhdGEt
Pm1fZGF0YS5hcHBlbmRGaWxlKGl0ZXItPnBhdGgsIGl0ZXItPm9mZnNldCwgaXRlci0+bGVuZ3Ro
LCBpdGVyLT5leHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOworICAgICAgICBjYXNlIEJsb2JEYXRh
SXRlbTo6RmlsZTogeworICAgICAgICAgICAgQVNTRVJUKGl0ZW0ub2Zmc2V0ID09IDApOworICAg
ICAgICAgICAgQVNTRVJUKGl0ZW0ubGVuZ3RoID09IEJsb2JEYXRhSXRlbTo6dG9FbmRPZkZpbGUp
OworICAgICAgICAgICAgQVNTRVJUKCFpc1ZhbGlkRmlsZVRpbWUoaXRlbS5leHBlY3RlZE1vZGlm
aWNhdGlvblRpbWUpKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IEZhY3RvciBvdXQgc2l6ZSBh
bmQgbW9kaWZpY2F0aW9uIHRyYWNraW5nIGZvciBhIGNsZWFuZXIgaW1wbGVtZW50YXRpb24uCisg
ICAgICAgICAgICBGaWxlTWV0YWRhdGEgbWV0YWRhdGE7CisgICAgICAgICAgICBpZiAoIWdldEZp
bGVNZXRhZGF0YShpdGVtLnBhdGgsIG1ldGFkYXRhKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKworICAgICAgICAgICAgYmxvYlN0b3JhZ2VEYXRhLT5tX2RhdGEuYXBwZW5kRmlsZShpdGVt
LnBhdGgsIDAsIG1ldGFkYXRhLmxlbmd0aCwgbWV0YWRhdGEubW9kaWZpY2F0aW9uVGltZSk7Cisg
ICAgICAgICAgICBzaXplICs9IG1ldGFkYXRhLmxlbmd0aDsKICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpCbG9iOgotICAgICAgICAgICAg
aWYgKG1fYmxvYnMuY29udGFpbnMoaXRlci0+dXJsLnN0cmluZygpKSkKLSAgICAgICAgICAgICAg
ICBhcHBlbmRTdG9yYWdlSXRlbXMoYmxvYlN0b3JhZ2VEYXRhLmdldCgpLCBtX2Jsb2JzLmdldChp
dGVyLT51cmwuc3RyaW5nKCkpLT5pdGVtcygpLCBpdGVyLT5vZmZzZXQsIGl0ZXItPmxlbmd0aCk7
CisgICAgICAgICAgICBpZiAoIW1fYmxvYnMuY29udGFpbnMoaXRlbS51cmwuc3RyaW5nKCkpKQor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgc2l6ZSArPSBibG9iU2l6ZShp
dGVtLnVybCk7IC8vIEFzIGEgc2lkZSBlZmZlY3QsIHRoaXMgY2FsY3VsYXRlcyBzaXplcyBvZiBh
bGwgZmlsZXMgaW4gdGhlIGJsb2IuCisgICAgICAgICAgICBBU1NFUlQoYmxvYlNpemUoaXRlbS51
cmwpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oaXRlbS5sZW5ndGgpKTsKKyAg
ICAgICAgICAgIGFwcGVuZFN0b3JhZ2VJdGVtcyhibG9iU3RvcmFnZURhdGEuZ2V0KCksIG1fYmxv
YnMuZ2V0KGl0ZW0udXJsLnN0cmluZygpKS0+aXRlbXMoKSwgaXRlbS5vZmZzZXQsIGl0ZW0ubGVu
Z3RoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCiAgICAgbV9ibG9i
cy5zZXQodXJsLnN0cmluZygpLCBibG9iU3RvcmFnZURhdGEpOworICAgIHJldHVybiBzaXplOwog
fQogCiB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVy
bCwgY29uc3QgVVJMJiBzcmNVUkwpCkBAIC0xNTIsNyArMTczLDYgQEAgdm9pZCBCbG9iUmVnaXN0
cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoYwogICAgIHJlZ2lzdGVyQmxvYlJlc291cmNlSGFuZGxl
Q29uc3RydWN0b3IoKTsKIAogICAgIFJlZlB0cjxCbG9iU3RvcmFnZURhdGE+IHNyYyA9IG1fYmxv
YnMuZ2V0KHNyY1VSTC5zdHJpbmcoKSk7Ci0gICAgQVNTRVJUKHNyYyk7CiAgICAgaWYgKCFzcmMp
CiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9CbG9iUmVnaXN0cnlJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmgJKHJldmlzaW9uIDE2ODExMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBhcHBlbmRT
dG9yYWdlSXRlbXMoQmxvYlN0b3JhZ2VEYXRhKiwgY29uc3QgQmxvYkRhdGFJdGVtTGlzdCYsIGxv
bmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpOwogCi0gICAgdmlydHVhbCB2b2lkIHJl
Z2lzdGVyQmxvYlVSTChjb25zdCBVUkwmLCBzdGQ6OnVuaXF1ZV9wdHI8QmxvYkRhdGE+KSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyByZWdpc3RlckJsb2JVUkwoY29u
c3QgVVJMJiwgc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPikgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmLCBjb25zdCBVUkwmIHNyY1VSTCkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgcmVnaXN0ZXJCbG9iVVJMRm9y
U2xpY2UoY29uc3QgVVJMJiwgY29uc3QgVVJMJiBzcmNVUkwsIGxvbmcgbG9uZyBzdGFydCwgbG9u
ZyBsb25nIGVuZCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJCbG9iVVJM
KGNvbnN0IFVSTCYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuY3BwCShyZXZpc2lvbiAxNjgxMTMpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYsNyArMjk2LDcgQEAgQmxvYiogWE1MSHR0
cFJlcXVlc3Q6OnJlc3BvbnNlQmxvYigpCiAgICAgICAgICAgICBTdHJpbmcgbm9ybWFsaXplZENv
bnRlbnRUeXBlID0gQmxvYjo6bm9ybWFsaXplZENvbnRlbnRUeXBlKHJlc3BvbnNlTUlNRVR5cGUo
KSk7CiAgICAgICAgICAgICBibG9iRGF0YS0+c2V0Q29udGVudFR5cGUobm9ybWFsaXplZENvbnRl
bnRUeXBlKTsgLy8gcmVzcG9uc2VNSU1FVHlwZSBkZWZhdWx0cyB0byB0ZXh0L3htbCB3aGljaCBt
YXkgYmUgaW5jb3JyZWN0LgogICAgICAgICAgICAgbV9iaW5hcnlSZXNwb25zZUJ1aWxkZXIuY2xl
YXIoKTsKLSAgICAgICAgICAgIG1fcmVzcG9uc2VCbG9iID0gQmxvYjo6Y3JlYXRlKHN0ZDo6bW92
ZShibG9iRGF0YSksIHNpemUpOworICAgICAgICAgICAgbV9yZXNwb25zZUJsb2IgPSBCbG9iOjpj
cmVhdGUoc3RkOjptb3ZlKGJsb2JEYXRhKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAvLyBJZiB3ZSBlcnJvcmVkIG91dCBvciBnb3Qgbm8gZGF0YSwgd2Ugc3RpbGwgcmV0dXJuIGEg
YmxvYiwganVzdCBhbiBlbXB0eSBvbmUuCiAgICAgICAgICAgICBtX3Jlc3BvbnNlQmxvYiA9IEJs
b2I6OmNyZWF0ZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTY4MTIxKQorKysgU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTQt
MDUtMDEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgTW92
ZSBzaXplIGNvbXB1dGF0aW9uIGZvciBCbG9iIGNvbnN0cnVjdG9yIGludG8gQmxvYlJlZ2lzdHJ5
SW1wbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMy
NDM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGx1
bWJpbmcgdG8gbWFrZSB0aGlzIHZlcnNpb24gb2YgcmVnaXN0ZXJCbG9iVVJMIHN5bmNocm9ub3Vz
IGZvciBub3cuCisgICAgICAgIEkgZXhwZWN0IHRvIG1ha2UgaXQgYXN5bmMgYWdhaW4gd2hlbiBk
YXRhIHN0cnVjdHVyZXMgb24gY2xpZW50IHNpZGUgYXJlIHNpbXBsaWZpZWQuCisKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5oOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlZ2lzdGVyQmxv
YlVSTCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJl
Z2lzdHJ5UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6cmVn
aXN0ZXJCbG9iVVJMKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5
UHJveHkuaDoKKwogMjAxNC0wNS0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIFJvbGwgb3V0IHI2MDE2MS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5jcHAJKHJldmlzaW9uIDE2ODExMykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1
LDcgKzIyNSw3IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRlbGUKIH0K
IAogI2lmIEVOQUJMRShCTE9CKQotdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBCbG9iUmVnaXN0cmF0aW9uRGF0
YSYgZGF0YSkKK3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlZ2lzdGVyQmxv
YlVSTChjb25zdCBVUkwmIHVybCwgY29uc3QgQmxvYlJlZ2lzdHJhdGlvbkRhdGEmIGRhdGEsIHVp
bnQ2NF90JiByZXN1bHRTaXplKQogewogICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lv
bj4+IGV4dGVuc2lvbnM7CiAgICAgZm9yIChzaXplX3QgaSA9IDAsIGNvdW50ID0gZGF0YS5zYW5k
Ym94RXh0ZW5zaW9ucygpLnNpemUoKTsgaSA8IGNvdW50OyArK2kpIHsKQEAgLTIzMyw3ICsyMzMs
NyBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWdpCiAgICAgICAgICAg
ICBleHRlbnNpb25zLmFwcGVuZChleHRlbnNpb24pOwogICAgIH0KIAotICAgIE5ldHdvcmtCbG9i
UmVnaXN0cnk6OnNoYXJlZCgpLnJlZ2lzdGVyQmxvYlVSTCh0aGlzLCB1cmwsIGRhdGEucmVsZWFz
ZURhdGEoKSwgZXh0ZW5zaW9ucyk7CisgICAgcmVzdWx0U2l6ZSA9IE5ldHdvcmtCbG9iUmVnaXN0
cnk6OnNoYXJlZCgpLnJlZ2lzdGVyQmxvYlVSTCh0aGlzLCB1cmwsIGRhdGEucmVsZWFzZURhdGEo
KSwgZXh0ZW5zaW9ucyk7CiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OnJlZ2lzdGVyQmxvYlVSTEZyb21VUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgc3JjVVJM
KQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCShyZXZpc2lvbiAxNjgxMTMpCisrKyBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBk
ZWxldGVDb29raWUoV2ViQ29yZTo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25z
dCBTdHJpbmcmIGNvb2tpZU5hbWUpOwogCiAjaWYgRU5BQkxFKEJMT0IpCi0gICAgdm9pZCByZWdp
c3RlckJsb2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgQmxvYlJlZ2lzdHJhdGlvbkRh
dGEmKTsKKyAgICB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25z
dCBCbG9iUmVnaXN0cmF0aW9uRGF0YSYsIHVpbnQ2NF90JiByZXN1bHRTaXplKTsKICAgICB2b2lk
IHJlZ2lzdGVyQmxvYlVSTEZyb21VUkwoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV2ViQ29y
ZTo6VVJMJiBzcmNVUkwpOwogICAgIHZvaWQgcmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UoY29uc3Qg
V2ViQ29yZTo6VVJMJiwgY29uc3QgV2ViQ29yZTo6VVJMJiBzcmNVUkwsIGludDY0X3Qgc3RhcnQs
IGludDY0X3QgZW5kLCB1aW50NjRfdCYgcmVzdWx0U2l6ZSk7CiAgICAgdm9pZCB1bnJlZ2lzdGVy
QmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxNjgxMTMpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdl
cy5pbgkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBtZXNzYWdlcyAtPiBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2VzCiAgICAgRGVsZXRlQ29va2llKFdlYkNvcmU6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIFdlYkNvcmU6OlVSTCB1cmwsIFN0cmluZyBjb29raWVOYW1lKQogCiAjaWYg
RU5BQkxFKEJMT0IpCi0gICAgUmVnaXN0ZXJCbG9iVVJMKFdlYkNvcmU6OlVSTCB1cmwsIFdlYktp
dDo6QmxvYlJlZ2lzdHJhdGlvbkRhdGEgZGF0YSkKKyAgICBSZWdpc3RlckJsb2JVUkwoV2ViQ29y
ZTo6VVJMIHVybCwgV2ViS2l0OjpCbG9iUmVnaXN0cmF0aW9uRGF0YSBkYXRhKSAtPiAodWludDY0
X3QgcmVzdWx0U2l6ZSkKICAgICBSZWdpc3RlckJsb2JVUkxGcm9tVVJMKFdlYkNvcmU6OlVSTCB1
cmwsIFdlYkNvcmU6OlVSTCBzcmNVUkwpCiAgICAgUmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UoV2Vi
Q29yZTo6VVJMIHVybCwgV2ViQ29yZTo6VVJMIHNyY1VSTCwgaW50NjRfdCBzdGFydCwgaW50NjRf
dCBlbmQpIC0+ICh1aW50NjRfdCByZXN1bHRTaXplKQogICAgIFVucmVnaXN0ZXJCbG9iVVJMKFdl
YkNvcmU6OlVSTCB1cmwpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxl
QVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHAJKHJldmlzaW9u
IDE2ODExMykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29y
a0Jsb2JSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgTmV0d29y
a0Jsb2JSZWdpc3RyeTo6TmV0d29ya0Jsb2JSZWdpc3RyeQogewogfQogCi12b2lkIE5ldHdvcmtC
bG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cyogY29ubmVjdGlvbiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6dW5pcXVlX3B0cjxCbG9iRGF0YT4g
ZGF0YSwgY29uc3QgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4mIG5ld1NhbmRib3hF
eHRlbnNpb25zKQordWludDY0X3QgTmV0d29ya0Jsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJM
KE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uLCBjb25zdCBVUkwmIHVy
bCwgc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPiBkYXRhLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNh
bmRib3hFeHRlbnNpb24+PiYgbmV3U2FuZGJveEV4dGVuc2lvbnMpCiB7CiAgICAgQVNTRVJUKCFt
X3NhbmRib3hFeHRlbnNpb25zLmNvbnRhaW5zKHVybC5zdHJpbmcoKSkpOwogCkBAIC02MCw3ICs2
MCw3IEBAIHZvaWQgTmV0d29ya0Jsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVIKICAgICAgICAg
ICAgIHNhbmRib3hFeHRlbnNpb25zLmFwcGVuZFZlY3RvcihtX3NhbmRib3hFeHRlbnNpb25zLmdl
dChpdGVtc1tpXS51cmwuc3RyaW5nKCkpKTsKICAgICB9CiAKLSAgICBibG9iUmVnaXN0cnkoKS5y
ZWdpc3RlckJsb2JVUkwodXJsLCBzdGQ6Om1vdmUoZGF0YSkpOworICAgIHVpbnQ2NF90IHJlc3Vs
dFNpemUgPSBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckJsb2JVUkwodXJsLCBzdGQ6Om1vdmUoZGF0
YSkpOwogCiAgICAgaWYgKCFzYW5kYm94RXh0ZW5zaW9ucy5pc0VtcHR5KCkpCiAgICAgICAgIG1f
c2FuZGJveEV4dGVuc2lvbnMuYWRkKHVybC5zdHJpbmcoKSwgc2FuZGJveEV4dGVuc2lvbnMpOwpA
QCAtNzAsNiArNzAsOCBAQCB2b2lkIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVS
CiAgICAgaWYgKG1hcEl0ZXJhdG9yID09IG1fYmxvYnNGb3JDb25uZWN0aW9uLmVuZCgpKQogICAg
ICAgICBtYXBJdGVyYXRvciA9IG1fYmxvYnNGb3JDb25uZWN0aW9uLmFkZChjb25uZWN0aW9uLCBI
YXNoU2V0PFVSTD4oKSkuaXRlcmF0b3I7CiAgICAgbWFwSXRlcmF0b3ItPnZhbHVlLmFkZCh1cmwp
OworCisgICAgcmV0dXJuIHJlc3VsdFNpemU7CiB9CiAKIHZvaWQgTmV0d29ya0Jsb2JSZWdpc3Ry
eTo6cmVnaXN0ZXJCbG9iVVJMKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0
aW9uLCBjb25zdCBXZWJDb3JlOjpVUkwmIHVybCwgY29uc3QgV2ViQ29yZTo6VVJMJiBzcmNVUkwp
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9i
UmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9G
aWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaAkocmV2aXNpb24gMTY4MTEzKQorKysgU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIE5ldHdvcmtCbG9iUmVn
aXN0cnkoKTsKICAgICBzdGF0aWMgTmV0d29ya0Jsb2JSZWdpc3RyeSYgc2hhcmVkKCk7CiAKLSAg
ICB2b2lkIHJlZ2lzdGVyQmxvYlVSTChOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIGNv
bnN0IFdlYkNvcmU6OlVSTCYsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpCbG9iRGF0YT4sIGNv
bnN0IFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+Jik7CisgICAgdWludDY0X3QgcmVn
aXN0ZXJCbG9iVVJMKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiwgY29uc3QgV2ViQ29y
ZTo6VVJMJiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkJsb2JEYXRhPiwgY29uc3QgVmVjdG9y
PFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4mKTsKICAgICB2b2lkIHJlZ2lzdGVyQmxvYlVSTChO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0
IFdlYkNvcmU6OlVSTCYgc3JjVVJMKTsKICAgICB1aW50NjRfdCByZWdpc3RlckJsb2JVUkxGb3JT
bGljZShOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIGNvbnN0IFdlYkNvcmU6OlVSTCYs
IGNvbnN0IFdlYkNvcmU6OlVSTCYgc3JjVVJMLCBpbnQ2NF90IHN0YXJ0LCBpbnQ2NF90IGVuZCk7
CiAgICAgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cyosIGNvbnN0IFdlYkNvcmU6OlVSTCYpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwCShyZXZpc2lvbiAx
NjgxMTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5
UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMSArMzksMTQgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi12b2lkIEJsb2JSZWdpc3RyeVBy
b3h5OjpyZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIHN0ZDo6dW5pcXVlX3B0cjxCbG9i
RGF0YT4gYmxvYkRhdGEpCit1bnNpZ25lZCBsb25nIGxvbmcgQmxvYlJlZ2lzdHJ5UHJveHk6OnJl
Z2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwgc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPiBi
bG9iRGF0YSkKIHsKICAgICBBU1NFUlQoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQ
cm9jZXNzKCkpOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24o
KS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6UmVnaXN0ZXJCbG9iVVJMKHVybCwgQmxvYlJlZ2lzdHJhdGlvbkRhdGEoc3RkOjptb3Zl
KGJsb2JEYXRhKSkpLCAwKTsKKyAgICB1aW50NjRfdCByZXN1bHRTaXplOworICAgIGlmICghV2Vi
UHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lzdGVyQmxv
YlVSTCh1cmwsIEJsb2JSZWdpc3RyYXRpb25EYXRhKHN0ZDo6bW92ZShibG9iRGF0YSkpKSwgTWVz
c2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWdpc3RlckJsb2JVUkw6OlJl
cGx5KHJlc3VsdFNpemUpLCAwKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHJlc3Vs
dFNpemU7CiB9CiAKIHZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVSTChjb25z
dCBVUkwmIHVybCwgY29uc3QgVVJMJiBzcmNVUkwpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuaAkocmV2aXNpb24g
MTY4MTEzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3Ry
eVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIEJsb2JSZWdpc3RyeVByb3h5IDogcHVibGljIFdlYkNvcmU6OkJsb2JSZWdp
c3RyeSB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBX
ZWJDb3JlOjpVUkwmLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6QmxvYkRhdGE+KSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyByZWdpc3RlckJsb2JVUkwoY29uc3Qg
V2ViQ29yZTo6VVJMJiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkJsb2JEYXRhPikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwm
LCBjb25zdCBXZWJDb3JlOjpVUkwmIHNyY1VSTCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHJlZ2lzdGVyQmxvYlVSTEZvclNsaWNlKGNvbnN0IFdl
YkNvcmU6OlVSTCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYgc3JjVVJMLCBsb25nIGxvbmcgc3RhcnQs
IGxvbmcgbG9uZyBlbmQpIG92ZXJyaWRlOwo=
</data>
<flag name="review"
          id="254990"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230617</attachid>
            <date>2014-05-01 15:30:41 -0700</date>
            <delta_ts>2014-05-01 16:09:56 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>BlobConstructor.txt</filename>
            <type>text/plain</type>
            <size>30539</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODEyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE0LTA1LTAxICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgc2l6ZSBjb21wdXRh
dGlvbiBmb3IgQmxvYiBjb25zdHJ1Y3RvciBpbnRvIEJsb2JSZWdpc3RyeUltcGwKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjQzOQorCisgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMv
V2ViU29ja2V0LmNwcDogKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlkUmVjZWl2ZUJpbmFyeURhdGEp
OgorICAgICAgICBEb24ndCBwYXNzIHRoZSBzaXplLCBhbnlvbmUgd2hvIGNhcmVzIGNhbiBnZXQg
aXQgZnJvbSBCbG9iRGF0YS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5j
cHA6IChXZWJDb3JlOjpKU0Jsb2JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNCbG9iKToKKyAgICAg
ICAgVXBkYXRlZCBmb3IgQmxvYkJ1aWxkZXIgY2hhbmdlcy4KKworICAgICAgICAqIGZpbGVhcGkv
QmxvYi5jcHA6IChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAgKiBmaWxlYXBpL0Jsb2Iu
aDogKFdlYkNvcmU6OkJsb2I6OmNyZWF0ZSk6CisgICAgICAgIE5vIGxvbmdlciB0YWtlIGEgcHJl
Y29tcHV0ZWQgc2l6ZSB3aXRoIEJsb2JEYXRhLCBCbG9iUmVnaXN0cnkgd2lsbCBjb21wdXRlIGl0
IGFzCisgICAgICAgIHBhcnQgb2YgcmVnaXN0cmF0aW9uLgorCisgICAgICAgICogZmlsZWFwaS9G
aWxlLmg6CisgICAgICAgICogZmlsZWFwaS9GaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGU6OkZpbGUpOiBEb24ndCBwYXNzIGEgc2l6ZSAodGhhdCdzIHVua25vd24gYW55d2F5KS4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbGU6OmNhcHR1cmVTbmFwc2hvdCk6IERlbGV0ZWQuIEZpbmFsbHks
IG9ubHkgdGhlIHJlZ2lzdHJ5IGlzIHJlc3BvbnNpYmxlCisgICAgICAgIGZvciBzbmFwc2hvdCB0
cmFja2luZyBub3cgKEkgZG91YnQgdGhhdCBlaXRoZXIgbmV3IG9yIG9sZCBjb2RlIGlzIHBhcnRp
Y3VsYXJseSBjb21wbGlhbnQpLgorCisgICAgICAgICogZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJl
Z2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJl
Z2lzdGVyQmxvYlVSTCk6CisgICAgICAgICogZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5
Lmg6CisgICAgICAgIFBsdW1iaW5nIHRvIG1ha2UgdGhpcyB2ZXJzaW9uIG9mIHJlZ2lzdGVyQmxv
YlVSTCByZXR1cm4gYSBzaXplLiBJIG1heSBtYWtlIHNpemUKKyAgICAgICAgY2FsY3VsYXRpb24g
bGF6eSBhbmQgdGhlIGZ1bmN0aW9uIGFzeW5jIGxhdGVyLCBidXQgdGhpcyBpcyBuZWVkZWQgdG8g
bW92ZSB0aGUgYmVoYXZpb3IKKyAgICAgICAgdG8gdGhlIHJpZ2h0IHBsYWNlIGZpcnN0LgorCisg
ICAgICAgICogZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5oOgorICAgICAgICAqIGZpbGVhcGkv
V2ViS2l0QmxvYkJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYkJ1aWxkZXI6OkJs
b2JCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JCdWlsZGVyOjphcHBlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6QmxvYkJ1aWxkZXI6OmFwcGVuZEJ5dGVzRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpCbG9iQnVpbGRlcjo6ZmluYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYkJ1
aWxkZXI6OmdldEJsb2IpOiBEZWxldGVkLgorICAgICAgICBEb24ndCB0cmFjayBzaXplcyBvciBt
b2RpZmljYXRpb24gdGltZXMsIHJlZ2lzdHJ5IHdpbGwgZG8gdGhhdCB3aXRoIGFwcHJvcHJpYXRl
IGxhemluZXNzLgorICAgICAgICBDbGVhbmVkIHVwIHRoZSBBUEkgLSBub3cgdGhhdCBCbG9iQnVp
bGRlciBpcyBub3QgZXhwb3NlZCB0byBKUyBhcyBhbiBvYmplY3QsIGl0CisgICAgICAgIGRvZXMg
bm90IG5lZWQgdG8gYmUgcmV1c2FibGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZWdpc3RyeS5oOiBNYWRlIHRoaXMgdmVyc2lvbiBvZiByZWdpc3RlckJsb2JVUkwgcmV0dXJu
IGEgc2l6ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6YXBwZW5kU3RvcmFnZUl0ZW1zKTogQXNzZXJ0
IHRoYXQgbGVuZ3RoIGNvbXB1dGF0aW9ucyBhcmUgYWNjdXJhdGUuCisgICAgICAgIChXZWJDb3Jl
OjpCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwpOiBDb21wdXRlIGEgc2l6ZSB0byBy
ZXR1cm4sIGFuZCByZWNvcmQKKyAgICAgICAgbW9kaWZpY2F0aW9uIHRpbWUgYXMgbmVjZXNzYXJ5
LgorCisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDogKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpyZXNwb25zZUJsb2IpOiBEb24ndCBwYXNzIHRoZQorICAgICAgICBzaXplLCB3aGlj
aCBjYW4gYmUgY29tcHV0ZWQgZnJvbSBkYXRhLiBTb29uLCBJIHdhbnQgdG8gYWRkIGEgY29uc3Ry
dWN0b3IgdGhhdCBkb2Vzbid0CisgICAgICAgIHJlcXVpcmUgd3JhcHBpbmcgYSBzaW5nbGUgVmVj
dG9yIGFzIEJsb2JEYXRhIHRvIGNvbnN0cnVjdCBhIEJsb2IuCisKIDIwMTQtMDUtMDEgIERhdmlk
IEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxNjgwNDYp
OiBbTmV3IE11bHRpY29sdW1uXSBTZWxlY3Rpb24gaW50byBhbmQgb3V0IG9mIGNvbHVtbi1zcGFu
IGVsZW1lbnRzIGRvZXNuJ3Qgd29yawpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAJKHJldmlzaW9uIDE2ODExMykKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MjEsMTAgKzUyMSwxMCBAQCB2b2lkIFdlYlNvY2tldDo6ZGlkUmVjZWl2ZUJpbmFyeURhdGEo
UGFzCiAgICAgTE9HKE5ldHdvcmssICJXZWJTb2NrZXQgJXAgZGlkUmVjZWl2ZUJpbmFyeURhdGEo
KSAlbHUgYnl0ZSBiaW5hcnkgbWVzc2FnZSIsIHRoaXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmc+KGJpbmFyeURhdGEtPnNpemUoKSkpOwogICAgIHN3aXRjaCAobV9iaW5hcnlUeXBlKSB7CiAg
ICAgY2FzZSBCaW5hcnlUeXBlQmxvYjogewotICAgICAgICBzaXplX3Qgc2l6ZSA9IGJpbmFyeURh
dGEtPnNpemUoKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIGp1c3QgcmVjZWl2ZWQgdGhlIGRhdGEg
ZnJvbSBOZXR3b3JrUHJvY2VzcywgYW5kIGFyZSBzZW5kaW5nIGl0IGJhY2suIFRoaXMgaXMgaW5l
ZmZpY2llbnQuCiAgICAgICAgIGF1dG8gYmxvYkRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPEJsb2JE
YXRhPigpOwogICAgICAgICBibG9iRGF0YS0+YXBwZW5kRGF0YShSYXdEYXRhOjpjcmVhdGUoc3Rk
Ojptb3ZlKCpiaW5hcnlEYXRhKSksIDAsIEJsb2JEYXRhSXRlbTo6dG9FbmRPZkZpbGUpOwotICAg
ICAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZShzdGQ6Om1vdmUoYmxvYkRhdGEp
LCBzaXplKTsKKyAgICAgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVhdGUoc3RkOjpt
b3ZlKGJsb2JEYXRhKSk7CiAgICAgICAgIGRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50OjpjcmVh
dGUoYmxvYi5yZWxlYXNlKCksIFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobV91cmwpLT50b1N0cmlu
ZygpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNpb24gMTY4MTEzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0
LDcgKzEzNCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTQmxvYkNvbnN0CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IGJsb2JCdWlsZGVyLmdl
dEJsb2IodHlwZSk7CisgICAgQmxvYkRhdGFJdGVtTGlzdCBpdGVtcyA9IGJsb2JCdWlsZGVyLmZp
bmFsaXplKCk7CisgICAgYXV0byBibG9iRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8QmxvYkRhdGE+
KCk7CisgICAgYmxvYkRhdGEtPnNldENvbnRlbnRUeXBlKEJsb2I6Om5vcm1hbGl6ZWRDb250ZW50
VHlwZSh0eXBlKSk7CisgICAgYmxvYkRhdGEtPnN3YXBJdGVtcyhpdGVtcyk7CisKKyAgICBSZWZQ
dHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZShzdGQ6Om1vdmUoYmxvYkRhdGEpKTsKKwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoQ1JFQVRFX0RPTV9XUkFQUEVSKGpzQ29uc3RydWN0b3It
Pmdsb2JhbE9iamVjdCgpLCBCbG9iLCBibG9iLmdldCgpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9CbG9iLmNwcAkocmV2aXNpb24gMTY4MTEzKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9CbG9iLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTUgKzc3LDE0IEBAIEJsb2I6OkJsb2Io
KQogICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFs
VVJMLCBzdGQ6Om1vdmUoYmxvYkRhdGEpKTsKIH0KIAotQmxvYjo6QmxvYihzdGQ6OnVuaXF1ZV9w
dHI8QmxvYkRhdGE+IGJsb2JEYXRhLCBsb25nIGxvbmcgc2l6ZSkKK0Jsb2I6OkJsb2Ioc3RkOjp1
bmlxdWVfcHRyPEJsb2JEYXRhPiBibG9iRGF0YSkKICAgICA6IG1fdHlwZShibG9iRGF0YS0+Y29u
dGVudFR5cGUoKSkKLSAgICAsIG1fc2l6ZShzaXplKQogewogICAgIEFTU0VSVChibG9iRGF0YSk7
CiAKICAgICAvLyBDcmVhdGUgYSBuZXcgaW50ZXJuYWwgVVJMIGFuZCByZWdpc3RlciBpdCB3aXRo
IHRoZSBwcm92aWRlZCBibG9iIGRhdGEuCiAgICAgbV9pbnRlcm5hbFVSTCA9IEJsb2JVUkw6OmNy
ZWF0ZUludGVybmFsVVJMKCk7Ci0gICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJC
bG9iVVJMKG1faW50ZXJuYWxVUkwsIHN0ZDo6bW92ZShibG9iRGF0YSkpOworICAgIG1fc2l6ZSA9
IFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsVVJMLCBz
dGQ6Om1vdmUoYmxvYkRhdGEpKTsKIH0KIAogQmxvYjo6QmxvYihjb25zdCBVUkwmIHNyY1VSTCwg
Y29uc3QgU3RyaW5nJiB0eXBlLCBsb25nIGxvbmcgc2l6ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvQmxvYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxv
Yi5oCShyZXZpc2lvbiAxNjgxMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsOSArNTAsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQmxvYik7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4g
Y3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxCbG9iRGF0YT4gYmxvYkRhdGEsIGxvbmcgbG9uZyBzaXpl
KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8Qmxv
YkRhdGE+IGJsb2JEYXRhKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9i
KHN0ZDo6bW92ZShibG9iRGF0YSksIHNpemUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBCbG9iKHN0ZDo6bW92ZShibG9iRGF0YSkpKTsKICAgICB9CiAKICAgICAvLyBGb3IgZGVzZXJp
YWxpemF0aW9uLgpAQCAtOTAsNyArOTAsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBC
bG9iKCk7Ci0gICAgQmxvYihzdGQ6OnVuaXF1ZV9wdHI8QmxvYkRhdGE+LCBsb25nIGxvbmcgc2l6
ZSk7CisgICAgQmxvYihzdGQ6OnVuaXF1ZV9wdHI8QmxvYkRhdGE+KTsKIAogICAgIC8vIEZvciBk
ZXNlcmlhbGl6YXRpb24uCiAgICAgQmxvYihjb25zdCBVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5n
JiB0eXBlLCBsb25nIGxvbmcgc2l6ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAJKHJl
dmlzaW9uIDE2ODExMykKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxCbG9iRGF0
YT4gY3JlYXRlQgogfQogCiBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgQ29udGVudFR5
cGVMb29rdXBQb2xpY3kgcG9saWN5KQotICAgIDogQmxvYihjcmVhdGVCbG9iRGF0YUZvckZpbGUo
cGF0aCwgcG9saWN5KSwgLTEpCisgICAgOiBCbG9iKGNyZWF0ZUJsb2JEYXRhRm9yRmlsZShwYXRo
LCBwb2xpY3kpKQogICAgICwgbV9wYXRoKHBhdGgpCiAgICAgLCBtX25hbWUocGF0aEdldEZpbGVO
YW1lKHBhdGgpKQogewpAQCAtNzIsNyArNzIsNyBAQCBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgVVJMCiB9CiAKIEZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCBTdHJpbmcmIG5hbWUsIENvbnRlbnRUeXBlTG9va3VwUG9saWN5IHBvbGljeSkKLSAgICA6IEJs
b2IoY3JlYXRlQmxvYkRhdGFGb3JGaWxlV2l0aE5hbWUocGF0aCwgbmFtZSwgcG9saWN5KSwgLTEp
CisgICAgOiBCbG9iKGNyZWF0ZUJsb2JEYXRhRm9yRmlsZVdpdGhOYW1lKHBhdGgsIG5hbWUsIHBv
bGljeSkpCiAgICAgLCBtX3BhdGgocGF0aCkKICAgICAsIG1fbmFtZShuYW1lKQogewpAQCAtOTcs
MjEgKzk3LDYgQEAgdW5zaWduZWQgbG9uZyBsb25nIEZpbGU6OnNpemUoKSBjb25zdAogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUpOwogfQogCi12b2lkIEZp
bGU6OmNhcHR1cmVTbmFwc2hvdChsb25nIGxvbmcmIHNuYXBzaG90U2l6ZSwgZG91YmxlJiBzbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWUpIGNvbnN0Ci17Ci0gICAgLy8gT2J0YWlucyBhIHNuYXBzaG90
IG9mIHRoZSBmaWxlIGJ5IGNhcHR1cmluZyBpdHMgY3VycmVudCBzaXplIGFuZCBtb2RpZmljYXRp
b24gdGltZS4gVGhpcyBpcyB1c2VkIHdoZW4gd2Ugc2xpY2UgYSBmaWxlIGZvciB0aGUgZmlyc3Qg
dGltZS4KLSAgICAvLyBJZiB3ZSBmYWlsIHRvIHJldHJpZXZlIHRoZSBzaXplIG9yIG1vZGlmaWNh
dGlvbiB0aW1lLCBwcm9iYWJseSBkdWUgdG8gdGhhdCB0aGUgZmlsZSBoYXMgYmVlbiBkZWxldGVk
LCAwIHNpemUgaXMgcmV0dXJuZWQuCi0gICAgRmlsZU1ldGFkYXRhIG1ldGFkYXRhOwotICAgIGlm
ICghZ2V0RmlsZU1ldGFkYXRhKG1fcGF0aCwgbWV0YWRhdGEpKSB7Ci0gICAgICAgIHNuYXBzaG90
U2l6ZSA9IDA7Ci0gICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IGludmFsaWRGaWxl
VGltZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc25hcHNob3RTaXplID0gbWV0
YWRhdGEubGVuZ3RoOwotICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IG1ldGFkYXRhLm1v
ZGlmaWNhdGlvblRpbWU7Ci19Ci0KIFN0cmluZyBGaWxlOjpjb250ZW50VHlwZUZyb21GaWxlUGF0
aChjb25zdCBTdHJpbmcmIG5hbWUsIEZpbGU6OkNvbnRlbnRUeXBlTG9va3VwUG9saWN5IHBvbGlj
eSkKIHsKICAgICBTdHJpbmcgdHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmls
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5oCShyZXZpc2lv
biAxNjgxMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNzIsOSArNzIsNiBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyByZXR1cm5zIHRoZSBjdXJy
ZW50IGRhdGUgYW5kIHRpbWUgaWYgdGhlIGZpbGUncyBsYXN0IG1vZGlmaWVjYXRpb24gZGF0ZSBp
cyBub3Qga25vd24gKHBlciBzcGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNkZm4t
bGFzdE1vZGlmaWVkRGF0ZSkuCiAgICAgZG91YmxlIGxhc3RNb2RpZmllZERhdGUoKSBjb25zdDsK
IAotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGludm9sdmVzIHN5bmNocm9ub3VzIGZpbGUgb3BlcmF0
aW9uLiBUaGluayB0d2ljZSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgotICAgIHZvaWQg
Y2FwdHVyZVNuYXBzaG90KGxvbmcgbG9uZyYgc25hcHNob3RTaXplLCBkb3VibGUmIHNuYXBzaG90
TW9kaWZpY2F0aW9uVGltZSkgY29uc3Q7Ci0KICAgICBzdGF0aWMgU3RyaW5nIGNvbnRlbnRUeXBl
RnJvbUZpbGVQYXRoKGNvbnN0IFN0cmluZyYsIENvbnRlbnRUeXBlTG9va3VwUG9saWN5KTsKIAog
cHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxl
QmxvYlJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMTY4MTEzKQorKysgU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTgg
Kzg4LDIzIEBAIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxCbG9iVXJsT3JpZ2luTWFwPiYKICAgICBy
ZXR1cm4gKm1hcDsKIH0KIAotdm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJs
b2JVUkwoY29uc3QgVVJMJiB1cmwsIHN0ZDo6dW5pcXVlX3B0cjxCbG9iRGF0YT4gYmxvYkRhdGEp
Cit1bnNpZ25lZCBsb25nIGxvbmcgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9i
VVJMKGNvbnN0IFVSTCYgdXJsLCBzdGQ6OnVuaXF1ZV9wdHI8QmxvYkRhdGE+IGJsb2JEYXRhKQog
eworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyByZXN1bHRTaXplOwogICAgIGlmIChpc01haW5UaHJl
YWQoKSkKLSAgICAgICAgYmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJCbG9iVVJMKHVybCwgc3RkOjpt
b3ZlKGJsb2JEYXRhKSk7CisgICAgICAgIHJlc3VsdFNpemUgPSBibG9iUmVnaXN0cnkoKS5yZWdp
c3RlckJsb2JVUkwodXJsLCBzdGQ6Om1vdmUoYmxvYkRhdGEpKTsKICAgICBlbHNlIHsKICAgICAg
ICAgLy8gQmxvYlJlZ2lzdHJ5Q29udGV4dCBwZXJmb3JtcyBhbiBpc29sYXRlZCBjb3B5IG9mIGRh
dGEuCiAgICAgICAgIEJsb2JSZWdpc3RyeUNvbnRleHQqIGNvbnRleHQgPSBuZXcgQmxvYlJlZ2lz
dHJ5Q29udGV4dCh1cmwsIHN0ZDo6bW92ZShibG9iRGF0YSkpOwotICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFtjb250ZXh0XSB7CisgICAgICAgIEJpbmFyeVNlbWFwaG9yZSBzZW1hcGhvcmU7Cisg
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2NvbnRleHQsICZzZW1hcGhvcmUsICZyZXN1bHRTaXpl
XSB7CiAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmxvYlJlZ2lzdHJ5Q29udGV4dD4gYmxv
YlJlZ2lzdHJ5Q29udGV4dChjb250ZXh0KTsKLSAgICAgICAgICAgIGJsb2JSZWdpc3RyeSgpLnJl
Z2lzdGVyQmxvYlVSTChibG9iUmVnaXN0cnlDb250ZXh0LT51cmwsIHN0ZDo6bW92ZShibG9iUmVn
aXN0cnlDb250ZXh0LT5ibG9iRGF0YSkpOworICAgICAgICAgICAgcmVzdWx0U2l6ZSA9IGJsb2JS
ZWdpc3RyeSgpLnJlZ2lzdGVyQmxvYlVSTChibG9iUmVnaXN0cnlDb250ZXh0LT51cmwsIHN0ZDo6
bW92ZShibG9iUmVnaXN0cnlDb250ZXh0LT5ibG9iRGF0YSkpOworICAgICAgICAgICAgc2VtYXBo
b3JlLnNpZ25hbCgpOwogICAgICAgICB9KTsKKyAgICAgICAgc2VtYXBob3JlLndhaXQoc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSk7CiAgICAgfQorICAgIHJldHVybiByZXN1bHRT
aXplOwogfQogCiB2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChT
ZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBzcmNVUkwp
CkBAIC0xNjMsNyArMTY4LDcgQEAgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gVGhyZWFkYWJs
ZUJsbwogCiAjZWxzZQogCi12b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxv
YlVSTChjb25zdCBVUkwmLCBzdGQ6OnVuaXF1ZV9wdHI8QmxvYkRhdGE+KQordW5zaWduZWQgbG9u
ZyBsb25nIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwm
LCBzdGQ6OnVuaXF1ZV9wdHI8QmxvYkRhdGE+KQogewogfQogCkBAIC0xNzEsNiArMTc2LDEwIEBA
IHZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG8KIHsKIH0KIAordW5zaWdu
ZWQgbG9uZyBsb25nIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTEZvclNs
aWNlKGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYsIGxvbmcgbG9uZywgbG9uZyBsb25nKQoreworfQor
CiB2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVS
TCYpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVn
aXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVC
bG9iUmVnaXN0cnkuaAkocmV2aXNpb24gMTY4MTEzKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcg
QEAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIGNsYXNzIFRocmVhZGFibGVCbG9iUmVnaXN0cnkg
ewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmLCBz
dGQ6OnVuaXF1ZV9wdHI8QmxvYkRhdGE+KTsKKyAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25n
IHJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmLCBzdGQ6OnVuaXF1ZV9wdHI8QmxvYkRhdGE+KTsK
ICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJsb2JVUkwoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBV
UkwmLCBjb25zdCBVUkwmIHNyY1VSTCk7CiAgICAgc3RhdGljIHZvaWQgdW5yZWdpc3RlckJsb2JV
UkwoY29uc3QgVVJMJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0Qmxv
YkJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0
QmxvYkJ1aWxkZXIuY3BwCShyZXZpc2lvbiAxNjgxMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxl
YXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNiBA
QCBlbnVtIEJsb2JDb25zdHJ1Y3RvckFycmF5QnVmZmVyT3JWaWV3IHsKIH07CiAKIEJsb2JCdWls
ZGVyOjpCbG9iQnVpbGRlcigpCi0gICAgOiBtX3NpemUoMCkKIHsKIH0KIApAQCAtNjMsMTUgKzYy
LDEyIEBAIHZvaWQgQmxvYkJ1aWxkZXI6OmFwcGVuZChjb25zdCBTdHJpbmcmIHQKIHsKICAgICBD
U3RyaW5nIHV0ZjhUZXh0ID0gVVRGOEVuY29kaW5nKCkuZW5jb2RlKHRleHQsIEVudGl0aWVzRm9y
VW5lbmNvZGFibGVzKTsKIAotICAgIHNpemVfdCBvbGRTaXplID0gbV9hcHBlbmRhYmxlRGF0YS5z
aXplKCk7Ci0KICAgICBpZiAoZW5kaW5nVHlwZSA9PSAibmF0aXZlIikKICAgICAgICAgbm9ybWFs
aXplTGluZUVuZGluZ3NUb05hdGl2ZSh1dGY4VGV4dCwgbV9hcHBlbmRhYmxlRGF0YSk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIEFTU0VSVChlbmRpbmdUeXBlID09ICJ0cmFuc3BhcmVudCIpOwogICAg
ICAgICBtX2FwcGVuZGFibGVEYXRhLmFwcGVuZCh1dGY4VGV4dC5kYXRhKCksIHV0ZjhUZXh0Lmxl
bmd0aCgpKTsKICAgICB9Ci0gICAgbV9zaXplICs9IG1fYXBwZW5kYWJsZURhdGEuc2l6ZSgpIC0g
b2xkU2l6ZTsKIH0KIAogI2lmIEVOQUJMRShCTE9CKQpAQCAtMTA0LDQ0ICsxMDAsMjMgQEAgdm9p
ZCBCbG9iQnVpbGRlcjo6YXBwZW5kKEJsb2IqIGJsb2IpCiAgICAgICAgIG1faXRlbXMuYXBwZW5k
KEJsb2JEYXRhSXRlbShSYXdEYXRhOjpjcmVhdGUoc3RkOjptb3ZlKG1fYXBwZW5kYWJsZURhdGEp
KSkpOwogICAgIGlmIChibG9iLT5pc0ZpbGUoKSkgewogICAgICAgICBGaWxlKiBmaWxlID0gdG9G
aWxlKGJsb2IpOwotICAgICAgICAvLyBJZiB0aGUgYmxvYiBpcyBmaWxlIHRoYXQgaXMgbm90IHNu
YXBzaG90ZWQsIGNhcHR1cmUgdGhlIHNuYXBzaG90IG5vdy4KLSAgICAgICAgLy8gRklYTUU6IFRo
aXMgaW52b2x2ZXMgc3luY2hyb25vdXMgZmlsZSBvcGVyYXRpb24uIFdlIG5lZWQgdG8gZmlndXJl
IG91dCBob3cgdG8gbWFrZSBpdCBhc3luY2hyb25vdXMuCi0gICAgICAgIGxvbmcgbG9uZyBzbmFw
c2hvdFNpemU7Ci0gICAgICAgIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7Ci0gICAg
ICAgIGZpbGUtPmNhcHR1cmVTbmFwc2hvdChzbmFwc2hvdFNpemUsIHNuYXBzaG90TW9kaWZpY2F0
aW9uVGltZSk7Ci0KLSAgICAgICAgbV9zaXplICs9IHNuYXBzaG90U2l6ZTsKLSAgICAgICAgbV9p
dGVtcy5hcHBlbmQoQmxvYkRhdGFJdGVtKGZpbGUtPnBhdGgoKSwgMCwgc25hcHNob3RTaXplLCBz
bmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpKTsKKyAgICAgICAgbV9pdGVtcy5hcHBlbmQoQmxvYkRh
dGFJdGVtKGZpbGUtPnBhdGgoKSwgMCwgQmxvYkRhdGFJdGVtOjp0b0VuZE9mRmlsZSwgaW52YWxp
ZEZpbGVUaW1lKCkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBsb25nIGxvbmcgYmxvYlNpemUg
PSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGJsb2ItPnNpemUoKSk7Ci0gICAgICAgIG1fc2l6ZSAr
PSBibG9iU2l6ZTsKICAgICAgICAgbV9pdGVtcy5hcHBlbmQoQmxvYkRhdGFJdGVtKGJsb2ItPnVy
bCgpLCAwLCBibG9iU2l6ZSkpOwogICAgIH0KIH0KIAogdm9pZCBCbG9iQnVpbGRlcjo6YXBwZW5k
Qnl0ZXNEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBsZW5ndGgpCiB7Ci0gICAgc2l6ZV90
IG9sZFNpemUgPSBtX2FwcGVuZGFibGVEYXRhLnNpemUoKTsKICAgICBtX2FwcGVuZGFibGVEYXRh
LmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksIGxlbmd0aCk7Ci0gICAgbV9z
aXplICs9IG1fYXBwZW5kYWJsZURhdGEuc2l6ZSgpIC0gb2xkU2l6ZTsKIH0KIAotUGFzc1JlZlB0
cjxCbG9iPiBCbG9iQnVpbGRlcjo6Z2V0QmxvYihjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQor
QmxvYkRhdGFJdGVtTGlzdCBCbG9iQnVpbGRlcjo6ZmluYWxpemUoKQogewogICAgIGlmICghbV9h
cHBlbmRhYmxlRGF0YS5pc0VtcHR5KCkpCiAgICAgICAgIG1faXRlbXMuYXBwZW5kKEJsb2JEYXRh
SXRlbShSYXdEYXRhOjpjcmVhdGUoc3RkOjptb3ZlKG1fYXBwZW5kYWJsZURhdGEpKSkpOwotCi0g
ICAgYXV0byBibG9iRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8QmxvYkRhdGE+KCk7Ci0gICAgYmxv
YkRhdGEtPnNldENvbnRlbnRUeXBlKEJsb2I6Om5vcm1hbGl6ZWRDb250ZW50VHlwZShjb250ZW50
VHlwZSkpOwotICAgIGJsb2JEYXRhLT5zd2FwSXRlbXMobV9pdGVtcyk7Ci0KLSAgICBSZWZQdHI8
QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZShzdGQ6Om1vdmUoYmxvYkRhdGEpLCBtX3NpemUpOwot
Ci0gICAgLy8gQWZ0ZXIgY3JlYXRpbmcgYSBibG9iIGZyb20gdGhlIGN1cnJlbnQgYmxvYiBkYXRh
LCB3ZSBkbyBub3QgbmVlZCB0byBrZWVwIHRoZSBkYXRhIGFyb3VuZCBhbnkgbW9yZS4gSW5zdGVh
ZCwgd2Ugb25seQotICAgIC8vIG5lZWQgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgVVJMIG9m
IHRoZSBibG9iIGp1c3QgY3JlYXRlZC4KLSAgICBtX2l0ZW1zLmFwcGVuZChCbG9iRGF0YUl0ZW0o
YmxvYi0+dXJsKCksIDAsIG1fc2l6ZSkpOwotCi0gICAgcmV0dXJuIGJsb2I7CisgICAgcmV0dXJu
IHN0ZDo6bW92ZShtX2l0ZW1zKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuaAkocmV2aXNpb24gMTY4
MTEzKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw5ICs0Miw2IEBAIGNsYXNzIEFycmF5QnVmZmVyVmlldzsKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmxvYjsKLWNsYXNzIFRleHRFbmNvZGluZzsKLQotdHlw
ZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgQmxvYkJ1aWxkZXIgewogcHVibGljOgpA
QCAtNTcsMTIgKzU0LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPEpT
Qzo6QXJyYXlCdWZmZXJWaWV3Pik7CiAjZW5kaWYKIAotICAgIFBhc3NSZWZQdHI8QmxvYj4gZ2V0
QmxvYihjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsKKyAgICBCbG9iRGF0YUl0ZW1MaXN0IGZp
bmFsaXplKCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBhcHBlbmRCeXRlc0RhdGEoY29uc3Qgdm9p
ZCosIHNpemVfdCk7CiAKLSAgICBsb25nIGxvbmcgbV9zaXplOwogICAgIEJsb2JEYXRhSXRlbUxp
c3QgbV9pdGVtczsKICAgICBWZWN0b3I8Y2hhcj4gbV9hcHBlbmRhYmxlRGF0YTsKIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgJKHJl
dmlzaW9uIDE2ODExMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJl
Z2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgQmxvYlJlZ2lzdHJ5JiBi
bG9iUmVnaXN0cnkoKTsKIGNsYXNzIEJsb2JSZWdpc3RyeSB7CiBwdWJsaWM6CiAgICAgLy8gUmVn
aXN0ZXJzIGEgYmxvYiBVUkwgcmVmZXJyaW5nIHRvIHRoZSBzcGVjaWZpZWQgYmxvYiBkYXRhLgot
ICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiwgc3RkOjp1bmlxdWVf
cHRyPEJsb2JEYXRhPikgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHJlZ2lz
dGVyQmxvYlVSTChjb25zdCBVUkwmLCBzdGQ6OnVuaXF1ZV9wdHI8QmxvYkRhdGE+KSA9IDA7CiAg
ICAgCiAgICAgLy8gUmVnaXN0ZXJzIGEgbmV3IGJsb2IgVVJMIHJlZmVycmluZyB0byB0aGUgYmxv
YiBkYXRhIGlkZW50aWZpZWQgYnkgdGhlIHNwZWNpZmllZCBzcmNVUkwuCiAgICAgdmlydHVhbCB2
b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmLCBjb25zdCBVUkwmIHNyY1VSTCkgPSAwOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdp
c3RyeUltcGwuY3BwCShyZXZpc2lvbiAxNjgxMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsOSAr
MTEzLDEwIEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6YXBwZW5kU3RvcmFnZUl0ZW0KICAgICAg
ICAgbGVuZ3RoIC09IG5ld0xlbmd0aDsKICAgICAgICAgb2Zmc2V0ID0gMDsKICAgICB9CisgICAg
QVNTRVJUKCFsZW5ndGgpOwogfQogCi12b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxv
YlVSTChjb25zdCBVUkwmIHVybCwgc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPiBibG9iRGF0YSkK
K3Vuc2lnbmVkIGxvbmcgbG9uZyBCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoY29u
c3QgVVJMJiB1cmwsIHN0ZDo6dW5pcXVlX3B0cjxCbG9iRGF0YT4gYmxvYkRhdGEpCiB7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICByZWdpc3RlckJsb2JSZXNvdXJjZUhhbmRsZUNv
bnN0cnVjdG9yKCk7CkBAIC0xMjgsMjIgKzEyOSw0MiBAQCB2b2lkIEJsb2JSZWdpc3RyeUltcGw6
OnJlZ2lzdGVyQmxvYlVSTChjCiAgICAgLy8gMykgVGhlIFVSTCBpdGVtIGlzIGRlbm90ZWQgYnkg
dGhlIFVSTCwgdGhlIHJhbmdlIGFuZCB0aGUgZXhwZWN0ZWQgbW9kaWZpY2F0aW9uIHRpbWUuCiAg
ICAgLy8gQWxsIHRoZSBCbG9iIGl0ZW1zIGluIHRoZSBwYXNzaW5nIGJsb2IgZGF0YSBhcmUgcmVz
b2x2ZWQgYW5kIGV4cGFuZGVkIGludG8gYSBzZXQgb2YgRGF0YSBhbmQgRmlsZSBpdGVtcy4KIAot
ICAgIGZvciAoQmxvYkRhdGFJdGVtTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGJsb2JEYXRh
LT5pdGVtcygpLmJlZ2luKCk7IGl0ZXIgIT0gYmxvYkRhdGEtPml0ZW1zKCkuZW5kKCk7ICsraXRl
cikgewotICAgICAgICBzd2l0Y2ggKGl0ZXItPnR5cGUpIHsKKyAgICAvLyBGSVhNRTogQmxvYkRh
dGFJdGVtcyBjb250YWluIGEgbG90IG9mIGluZm9ybWF0aW9uIHRoYXQgd2UgZG8gbm90IGV4cGVj
dCB0byBiZSBwcmVzZW50IHdoZW4gcmVnaXN0ZXJpbmcgYSBuZXcgYmxvYiwKKyAgICAvLyB0aGVz
ZSBkYXRhIG1lbWJlcnMgYXJlIG9ubHkgdXNlZCBpbnNpZGUgdGhlIHJlZ2lzdHJ5LiBVc2UgYSBt
b3JlIGFwcHJvcHJpYXRlIHR5cGUgdGhhbiBCbG9iRGF0YS4KKworICAgIHVuc2lnbmVkIGxvbmcg
bG9uZyBzaXplID0gMDsKKyAgICBmb3IgKGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA6IGJsb2JE
YXRhLT5pdGVtcygpKSB7CisgICAgICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7CiAgICAgICAgIGNh
c2UgQmxvYkRhdGFJdGVtOjpEYXRhOgotICAgICAgICAgICAgYmxvYlN0b3JhZ2VEYXRhLT5tX2Rh
dGEuYXBwZW5kRGF0YShpdGVyLT5kYXRhLCAwLCBpdGVyLT5kYXRhLT5sZW5ndGgoKSk7CisgICAg
ICAgICAgICBibG9iU3RvcmFnZURhdGEtPm1fZGF0YS5hcHBlbmREYXRhKGl0ZW0uZGF0YSwgMCwg
aXRlbS5kYXRhLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBzaXplICs9IGl0ZW0uZGF0YS0+bGVu
Z3RoKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkZp
bGU6Ci0gICAgICAgICAgICBibG9iU3RvcmFnZURhdGEtPm1fZGF0YS5hcHBlbmRGaWxlKGl0ZXIt
PnBhdGgsIGl0ZXItPm9mZnNldCwgaXRlci0+bGVuZ3RoLCBpdGVyLT5leHBlY3RlZE1vZGlmaWNh
dGlvblRpbWUpOworICAgICAgICBjYXNlIEJsb2JEYXRhSXRlbTo6RmlsZTogeworICAgICAgICAg
ICAgQVNTRVJUKCFpdGVtLm9mZnNldCk7CisgICAgICAgICAgICBBU1NFUlQoaXRlbS5sZW5ndGgg
PT0gQmxvYkRhdGFJdGVtOjp0b0VuZE9mRmlsZSk7CisgICAgICAgICAgICBBU1NFUlQoIWlzVmFs
aWRGaWxlVGltZShpdGVtLmV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkpOworCisgICAgICAgICAg
ICAvLyBGSVhNRTogRmFjdG9yIG91dCBzaXplIGFuZCBtb2RpZmljYXRpb24gdHJhY2tpbmcgZm9y
IGEgY2xlYW5lciBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgIEZpbGVNZXRhZGF0YSBtZXRh
ZGF0YTsKKyAgICAgICAgICAgIGlmICghZ2V0RmlsZU1ldGFkYXRhKGl0ZW0ucGF0aCwgbWV0YWRh
dGEpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICBibG9iU3RvcmFn
ZURhdGEtPm1fZGF0YS5hcHBlbmRGaWxlKGl0ZW0ucGF0aCwgMCwgbWV0YWRhdGEubGVuZ3RoLCBt
ZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lKTsKKyAgICAgICAgICAgIHNpemUgKz0gbWV0YWRhdGEu
bGVuZ3RoOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBCbG9i
RGF0YUl0ZW06OkJsb2I6Ci0gICAgICAgICAgICBpZiAobV9ibG9icy5jb250YWlucyhpdGVyLT51
cmwuc3RyaW5nKCkpKQotICAgICAgICAgICAgICAgIGFwcGVuZFN0b3JhZ2VJdGVtcyhibG9iU3Rv
cmFnZURhdGEuZ2V0KCksIG1fYmxvYnMuZ2V0KGl0ZXItPnVybC5zdHJpbmcoKSktPml0ZW1zKCks
IGl0ZXItPm9mZnNldCwgaXRlci0+bGVuZ3RoKTsKKyAgICAgICAgICAgIGlmICghbV9ibG9icy5j
b250YWlucyhpdGVtLnVybC5zdHJpbmcoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICBzaXplICs9IGJsb2JTaXplKGl0ZW0udXJsKTsgLy8gQXMgYSBzaWRlIGVmZmVj
dCwgdGhpcyBjYWxjdWxhdGVzIHNpemVzIG9mIGFsbCBmaWxlcyBpbiB0aGUgYmxvYi4KKyAgICAg
ICAgICAgIEFTU0VSVChibG9iU2l6ZShpdGVtLnVybCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPihpdGVtLmxlbmd0aCkpOworICAgICAgICAgICAgYXBwZW5kU3RvcmFnZUl0ZW1z
KGJsb2JTdG9yYWdlRGF0YS5nZXQoKSwgbV9ibG9icy5nZXQoaXRlbS51cmwuc3RyaW5nKCkpLT5p
dGVtcygpLCBpdGVtLm9mZnNldCwgaXRlbS5sZW5ndGgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9CiAKICAgICBtX2Jsb2JzLnNldCh1cmwuc3RyaW5nKCksIGJsb2JTdG9y
YWdlRGF0YSk7CisgICAgcmV0dXJuIHNpemU7CiB9CiAKIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6
cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHNyY1VSTCkKQEAgLTE1
Miw3ICsxNzMsNiBAQCB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjCiAg
ICAgcmVnaXN0ZXJCbG9iUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3RvcigpOwogCiAgICAgUmVmUHRy
PEJsb2JTdG9yYWdlRGF0YT4gc3JjID0gbV9ibG9icy5nZXQoc3JjVVJMLnN0cmluZygpKTsKLSAg
ICBBU1NFUlQoc3JjKTsKICAgICBpZiAoIXNyYykKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwu
aAkocmV2aXNpb24gMTY4MTEzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9C
bG9iUmVnaXN0cnlJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICB2b2lkIGFwcGVuZFN0b3JhZ2VJdGVtcyhCbG9iU3RvcmFnZURhdGEq
LCBjb25zdCBCbG9iRGF0YUl0ZW1MaXN0JiwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxl
bmd0aCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYsIHN0
ZDo6dW5pcXVlX3B0cjxCbG9iRGF0YT4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdW5zaWduZWQg
bG9uZyBsb25nIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmLCBzdGQ6OnVuaXF1ZV9wdHI8Qmxv
YkRhdGE+KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0
IFVSTCYsIGNvbnN0IFVSTCYgc3JjVVJMKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxvbmcgbG9uZyByZWdpc3RlckJsb2JVUkxGb3JTbGljZShjb25zdCBVUkwmLCBjb25zdCBVUkwm
IHNyY1VSTCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgZW5kKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJikgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDE2ODExMykKKysr
IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5Niw3ICsyOTYsNyBAQCBCbG9iKiBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VCbG9iKCkKICAg
ICAgICAgICAgIFN0cmluZyBub3JtYWxpemVkQ29udGVudFR5cGUgPSBCbG9iOjpub3JtYWxpemVk
Q29udGVudFR5cGUocmVzcG9uc2VNSU1FVHlwZSgpKTsKICAgICAgICAgICAgIGJsb2JEYXRhLT5z
ZXRDb250ZW50VHlwZShub3JtYWxpemVkQ29udGVudFR5cGUpOyAvLyByZXNwb25zZU1JTUVUeXBl
IGRlZmF1bHRzIHRvIHRleHQveG1sIHdoaWNoIG1heSBiZSBpbmNvcnJlY3QuCiAgICAgICAgICAg
ICBtX2JpbmFyeVJlc3BvbnNlQnVpbGRlci5jbGVhcigpOwotICAgICAgICAgICAgbV9yZXNwb25z
ZUJsb2IgPSBCbG9iOjpjcmVhdGUoc3RkOjptb3ZlKGJsb2JEYXRhKSwgc2l6ZSk7CisgICAgICAg
ICAgICBtX3Jlc3BvbnNlQmxvYiA9IEJsb2I6OmNyZWF0ZShzdGQ6Om1vdmUoYmxvYkRhdGEpKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIElmIHdlIGVycm9yZWQgb3V0IG9yIGdv
dCBubyBkYXRhLCB3ZSBzdGlsbCByZXR1cm4gYSBibG9iLCBqdXN0IGFuIGVtcHR5IG9uZS4KICAg
ICAgICAgICAgIG1fcmVzcG9uc2VCbG9iID0gQmxvYjo6Y3JlYXRlKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNjgxMjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxNC0wNS0wMSAgQWxleGV5IFByb3NrdXJ5YWtvdiAg
PGFwQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHNpemUgY29tcHV0YXRpb24gZm9yIEJsb2Ig
Y29uc3RydWN0b3IgaW50byBCbG9iUmVnaXN0cnlJbXBsCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI0MzkKKworICAgICAgICBSZXZpZXdlZCBieSBT
YW0gV2VpbmlnLgorCisgICAgICAgIFBsdW1iaW5nIHRvIG1ha2UgdGhpcyB2ZXJzaW9uIG9mIHJl
Z2lzdGVyQmxvYlVSTCBzeW5jaHJvbm91cyBmb3Igbm93LgorICAgICAgICBJIGV4cGVjdCB0byBt
YWtlIGl0IGFzeW5jIGFnYWluIHdoZW4gZGF0YSBzdHJ1Y3R1cmVzIG9uIGNsaWVudCBzaWRlIGFy
ZSBzaW1wbGlmaWVkLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3Jr
QmxvYlJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Jsb2JSZWdpc3RyeTo6
cmVnaXN0ZXJCbG9iVVJMKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdv
cmtCbG9iUmVnaXN0cnkuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpyZWdpc3RlckJsb2JVUkwpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgICog
V2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6QmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVSTCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5Lmg6CisKIDIwMTQtMDUtMDEgIEFuZGVycyBD
YXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgV0tCdW5kbGVT
ZXRTaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyBhbmQgYXNzb2NpYXRlIGNvZGUKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDE2ODExMykKKysrIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OmRlbGUKIH0KIAogI2lmIEVOQUJMRShCTE9CKQotdm9pZCBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBC
bG9iUmVnaXN0cmF0aW9uRGF0YSYgZGF0YSkKK3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwgY29uc3QgQmxvYlJlZ2lzdHJh
dGlvbkRhdGEmIGRhdGEsIHVpbnQ2NF90JiByZXN1bHRTaXplKQogewogICAgIFZlY3RvcjxSZWZQ
dHI8U2FuZGJveEV4dGVuc2lvbj4+IGV4dGVuc2lvbnM7CiAgICAgZm9yIChzaXplX3QgaSA9IDAs
IGNvdW50ID0gZGF0YS5zYW5kYm94RXh0ZW5zaW9ucygpLnNpemUoKTsgaSA8IGNvdW50OyArK2kp
IHsKQEAgLTIzMyw3ICsyMzMsNyBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpyZWdpCiAgICAgICAgICAgICBleHRlbnNpb25zLmFwcGVuZChleHRlbnNpb24pOwogICAgIH0K
IAotICAgIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgpLnJlZ2lzdGVyQmxvYlVSTCh0aGlz
LCB1cmwsIGRhdGEucmVsZWFzZURhdGEoKSwgZXh0ZW5zaW9ucyk7CisgICAgcmVzdWx0U2l6ZSA9
IE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgpLnJlZ2lzdGVyQmxvYlVSTCh0aGlzLCB1cmws
IGRhdGEucmVsZWFzZURhdGEoKSwgZXh0ZW5zaW9ucyk7CiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OnJlZ2lzdGVyQmxvYlVSTEZyb21VUkwoY29uc3QgVVJMJiB1cmws
IGNvbnN0IFVSTCYgc3JjVVJMKQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCShyZXZp
c2lvbiAxNjgxMTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBkZWxldGVDb29raWUoV2ViQ29yZTo6U2Vzc2lvbklELCBjb25zdCBX
ZWJDb3JlOjpVUkwmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpOwogCiAjaWYgRU5BQkxFKEJM
T0IpCi0gICAgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3Qg
QmxvYlJlZ2lzdHJhdGlvbkRhdGEmKTsKKyAgICB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBX
ZWJDb3JlOjpVUkwmLCBjb25zdCBCbG9iUmVnaXN0cmF0aW9uRGF0YSYsIHVpbnQ2NF90JiByZXN1
bHRTaXplKTsKICAgICB2b2lkIHJlZ2lzdGVyQmxvYlVSTEZyb21VUkwoY29uc3QgV2ViQ29yZTo6
VVJMJiwgY29uc3QgV2ViQ29yZTo6VVJMJiBzcmNVUkwpOwogICAgIHZvaWQgcmVnaXN0ZXJCbG9i
VVJMRm9yU2xpY2UoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV2ViQ29yZTo6VVJMJiBzcmNV
UkwsIGludDY0X3Qgc3RhcnQsIGludDY0X3QgZW5kLCB1aW50NjRfdCYgcmVzdWx0U2l6ZSk7CiAg
ICAgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxNjgx
MTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBt
ZXNzYWdlcyAtPiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzCiAgICAgRGVsZXRlQ29va2ll
KFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYkNvcmU6OlVSTCB1cmwsIFN0cmluZyBj
b29raWVOYW1lKQogCiAjaWYgRU5BQkxFKEJMT0IpCi0gICAgUmVnaXN0ZXJCbG9iVVJMKFdlYkNv
cmU6OlVSTCB1cmwsIFdlYktpdDo6QmxvYlJlZ2lzdHJhdGlvbkRhdGEgZGF0YSkKKyAgICBSZWdp
c3RlckJsb2JVUkwoV2ViQ29yZTo6VVJMIHVybCwgV2ViS2l0OjpCbG9iUmVnaXN0cmF0aW9uRGF0
YSBkYXRhKSAtPiAodWludDY0X3QgcmVzdWx0U2l6ZSkKICAgICBSZWdpc3RlckJsb2JVUkxGcm9t
VVJMKFdlYkNvcmU6OlVSTCB1cmwsIFdlYkNvcmU6OlVSTCBzcmNVUkwpCiAgICAgUmVnaXN0ZXJC
bG9iVVJMRm9yU2xpY2UoV2ViQ29yZTo6VVJMIHVybCwgV2ViQ29yZTo6VVJMIHNyY1VSTCwgaW50
NjRfdCBzdGFydCwgaW50NjRfdCBlbmQpIC0+ICh1aW50NjRfdCByZXN1bHRTaXplKQogICAgIFVu
cmVnaXN0ZXJCbG9iVVJMKFdlYkNvcmU6OlVSTCB1cmwpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdp
c3RyeS5jcHAJKHJldmlzaW9uIDE2ODExMykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDcgKzQ4LDcgQEAgTmV0d29ya0Jsb2JSZWdpc3RyeTo6TmV0d29ya0Jsb2JSZWdpc3RyeQogewog
fQogCi12b2lkIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2VzcyogY29ubmVjdGlvbiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6dW5p
cXVlX3B0cjxCbG9iRGF0YT4gZGF0YSwgY29uc3QgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5z
aW9uPj4mIG5ld1NhbmRib3hFeHRlbnNpb25zKQordWludDY0X3QgTmV0d29ya0Jsb2JSZWdpc3Ry
eTo6cmVnaXN0ZXJCbG9iVVJMKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0
aW9uLCBjb25zdCBVUkwmIHVybCwgc3RkOjp1bmlxdWVfcHRyPEJsb2JEYXRhPiBkYXRhLCBjb25z
dCBWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiYgbmV3U2FuZGJveEV4dGVuc2lvbnMp
CiB7CiAgICAgQVNTRVJUKCFtX3NhbmRib3hFeHRlbnNpb25zLmNvbnRhaW5zKHVybC5zdHJpbmco
KSkpOwogCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgTmV0d29ya0Jsb2JSZWdpc3RyeTo6cmVnaXN0
ZXJCbG9iVVIKICAgICAgICAgICAgIHNhbmRib3hFeHRlbnNpb25zLmFwcGVuZFZlY3RvcihtX3Nh
bmRib3hFeHRlbnNpb25zLmdldChpdGVtc1tpXS51cmwuc3RyaW5nKCkpKTsKICAgICB9CiAKLSAg
ICBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckJsb2JVUkwodXJsLCBzdGQ6Om1vdmUoZGF0YSkpOwor
ICAgIHVpbnQ2NF90IHJlc3VsdFNpemUgPSBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckJsb2JVUkwo
dXJsLCBzdGQ6Om1vdmUoZGF0YSkpOwogCiAgICAgaWYgKCFzYW5kYm94RXh0ZW5zaW9ucy5pc0Vt
cHR5KCkpCiAgICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbnMuYWRkKHVybC5zdHJpbmcoKSwgc2Fu
ZGJveEV4dGVuc2lvbnMpOwpAQCAtNzAsNiArNzAsOCBAQCB2b2lkIE5ldHdvcmtCbG9iUmVnaXN0
cnk6OnJlZ2lzdGVyQmxvYlVSCiAgICAgaWYgKG1hcEl0ZXJhdG9yID09IG1fYmxvYnNGb3JDb25u
ZWN0aW9uLmVuZCgpKQogICAgICAgICBtYXBJdGVyYXRvciA9IG1fYmxvYnNGb3JDb25uZWN0aW9u
LmFkZChjb25uZWN0aW9uLCBIYXNoU2V0PFVSTD4oKSkuaXRlcmF0b3I7CiAgICAgbWFwSXRlcmF0
b3ItPnZhbHVlLmFkZCh1cmwpOworCisgICAgcmV0dXJuIHJlc3VsdFNpemU7CiB9CiAKIHZvaWQg
TmV0d29ya0Jsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKiBjb25uZWN0aW9uLCBjb25zdCBXZWJDb3JlOjpVUkwmIHVybCwgY29uc3QgV2Vi
Q29yZTo6VVJMJiBzcmNVUkwpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9G
aWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaAkocmV2aXNpb24g
MTY4MTEzKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3Jr
QmxvYlJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgog
ICAgIE5ldHdvcmtCbG9iUmVnaXN0cnkoKTsKICAgICBzdGF0aWMgTmV0d29ya0Jsb2JSZWdpc3Ry
eSYgc2hhcmVkKCk7CiAKLSAgICB2b2lkIHJlZ2lzdGVyQmxvYlVSTChOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyosIGNvbnN0IFdlYkNvcmU6OlVSTCYsIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpCbG9iRGF0YT4sIGNvbnN0IFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+Jik7
CisgICAgdWludDY0X3QgcmVnaXN0ZXJCbG9iVVJMKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzKiwgY29uc3QgV2ViQ29yZTo6VVJMJiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkJsb2JE
YXRhPiwgY29uc3QgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4mKTsKICAgICB2b2lk
IHJlZ2lzdGVyQmxvYlVSTChOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIGNvbnN0IFdl
YkNvcmU6OlVSTCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYgc3JjVVJMKTsKICAgICB1aW50NjRfdCBy
ZWdpc3RlckJsb2JVUkxGb3JTbGljZShOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIGNv
bnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYgc3JjVVJMLCBpbnQ2NF90IHN0
YXJ0LCBpbnQ2NF90IGVuZCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2VzcyosIGNvbnN0IFdlYkNvcmU6OlVSTCYpOwpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJv
eHkuY3BwCShyZXZpc2lvbiAxNjgxMTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Zp
bGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMSArMzks
MTQgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi12
b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIHN0
ZDo6dW5pcXVlX3B0cjxCbG9iRGF0YT4gYmxvYkRhdGEpCit1bnNpZ25lZCBsb25nIGxvbmcgQmxv
YlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwgc3RkOjp1bmlx
dWVfcHRyPEJsb2JEYXRhPiBibG9iRGF0YSkKIHsKICAgICBBU1NFUlQoV2ViUHJvY2Vzczo6c2hh
cmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
bmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVnaXN0ZXJCbG9iVVJMKHVybCwgQmxvYlJlZ2lzdHJh
dGlvbkRhdGEoc3RkOjptb3ZlKGJsb2JEYXRhKSkpLCAwKTsKKyAgICB1aW50NjRfdCByZXN1bHRT
aXplOworICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+
Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OlJlZ2lzdGVyQmxvYlVSTCh1cmwsIEJsb2JSZWdpc3RyYXRpb25EYXRhKHN0ZDo6bW92
ZShibG9iRGF0YSkpKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpS
ZWdpc3RlckJsb2JVUkw6OlJlcGx5KHJlc3VsdFNpemUpLCAwKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIHJlc3VsdFNpemU7CiB9CiAKIHZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJl
Z2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBzcmNVUkwpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5
UHJveHkuaAkocmV2aXNpb24gMTY4MTEzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9G
aWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEJsb2JSZWdpc3RyeVByb3h5IDogcHVibGlj
IFdlYkNvcmU6OkJsb2JSZWdpc3RyeSB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHJlZ2lz
dGVyQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
QmxvYkRhdGE+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyByZWdp
c3RlckJsb2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OkJsb2JEYXRhPikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChj
b25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBXZWJDb3JlOjpVUkwmIHNyY1VSTCkgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHJlZ2lzdGVyQmxvYlVS
TEZvclNsaWNlKGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYgc3JjVVJM
LCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQpIG92ZXJyaWRlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>