<?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>43745</bug_id>
          
          <creation_ts>2010-08-09 13:52:00 -0700</creation_ts>
          <short_desc>Allow an assembler/macroassembler to compact branches to more concise forms when linking</short_desc>
          <delta_ts>2010-08-09 20:19:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>262304</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-08-09 13:52:00 -0700</bug_when>
    <thetext>Allow an assembler/macroassembler to compact branches to more concise forms when linking</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262453</commentid>
    <comment_count>1</comment_count>
      <attachid>63964</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-08-09 18:56:16 -0700</bug_when>
    <thetext>Created attachment 63964
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262454</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-09 19:03:15 -0700</bug_when>
    <thetext>Attachment 63964 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/assembler/ARMv7Assembler.h:2032:  JUMP_TEMPORARY_REGISTER is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 20 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>262465</commentid>
    <comment_count>3</comment_count>
      <attachid>63964</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-08-09 20:09:36 -0700</bug_when>
    <thetext>Comment on attachment 63964
Patch

&gt; void breakpoint(uint8_t imm = 0)

The macroassembler interface should be identical for all platforms.  (Hmmm, we should probably have a better way of enforcing this; maybe we should make MacroAssembler privately inherit from MacroAssemblerBase &amp; add wrapper methods to enforce a single API).  If breakpoint is going to take a uint8_t it really has to do so on all platforms, but since this might be difficult to usefully implement on other architectures I think a better solution would be to revert this change at this level (still add to ARMv7Assembler).  That way you can still use m_assembler.bkpt(N); when debugging on ARMv7.

Please remove teh thousands of &quot;, 0&quot;s, restore default argy goodness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262469</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-08-09 20:19:44 -0700</bug_when>
    <thetext>Committed r65042: &lt;http://trac.webkit.org/changeset/65042&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63964</attachid>
            <date>2010-08-09 18:56:16 -0700</date>
            <delta_ts>2010-08-09 20:09:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43745-20100809185615.patch</filename>
            <type>text/plain</type>
            <size>70549</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA3YTQwMTY5ZDM4YmYwZGQxOWE1ZTJiNDYxZmI2OGEyM2E1NDZkZDYxLi42
OGMxNmM3OWFjZjc5MmM4MmZjNWZhOTVhYzFlOGRiNjc3NzcyMjBhIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQ0IEBACisyMDEwLTA4LTA5ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWxsb3cg
YW4gYXNzZW1ibGVyL21hY3JvYXNzZW1ibGVyIHRvIGNvbXBhY3QgYnJhbmNoZXMgdG8gbW9yZSBj
b25jaXNlIGZvcm1zIHdoZW4gbGlua2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDM3NDUKKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGl0IHBv
c3NpYmxlIGZvciBhbiBhc3NlbWJsZXIgdG8gY29udmVydCBqdW1wcyBpbnRvIGEgZGlmZmVyZW50
CisgICAgICAgIChwcmVzdW1hYmx5IG1vcmUgZWZmaWNpZW50KSBmb3JtIGF0IGxpbmsgdGltZS4g
IEN1cnJlbnRseSBpbXBsZW1lbnRlZCBpbiB0aGUKKyAgICAgICAgQVJNdjcgSklUIGFzIHRoYXQg
YWxyZWFkeSBoYWQgbG9naWMgdG8gZGVsYXkgbGlua2luZyBvZiBqdW1wcyB1bnRpbCB0aGUgZW5k
IG9mCisgICAgICAgIGNvbXBpbGF0aW9uIGFscmVhZHkuICBUaGUgQVJNdjcgSklUIGNob29zZXMg
YmV0d2VlbiBlaXRoZXIgYSA0IGJ5dGUgc2hvcnQganVtcAorICAgICAgICBvciBhIGZ1bGwgMzIt
Yml0IG9mZnNldCAoYW5kIHJld3JpdGVzIElUVFQgaW5zdHJ1Y3Rpb25zIGFzIGFwcHJvcHJpYXRl
KSwgc28gZG9lcworICAgICAgICBub3QgeWV0IHByb2R1Y2UgdGhlIG1vc3QgY29tcGFjdCBmb3Jt
IHBvc3NpYmxlLiAgVGhlIGdlbmVyYWwgZGVzaWduIG9mIHRoZSBsaW5rZXIKKyAgICAgICAgc2hv
dWxkIG1ha2UgaXQgcmVsYXRpdmVseSBzaW1wbGUgdG8gaW50cm9kdWNlIG5ldyBicmFuY2ggdHlw
ZXMgd2l0aCBsaXR0bGUgZWZmb3J0LAorICAgICAgICBhcyB0aGUgbGlua2VyIGhhcyBubyBrbm93
bGVkZ2Ugb2YgdGhlIGV4YWN0IGZvcm0gb2YgYW55IG9mIHRoZSBicmFuY2hlcy4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oik6Cisg
ICAgICAgICAgUmVjb3JkIGp1bXAgc2l6ZXMKKworICAgICAgICAqIGFzc2VtYmxlci9BUk12N0Fz
c2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6TGlua1JlY29yZDo6TGlu
a1JlY29yZCk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpMaW5rUmVjb3JkOjpmcm9t
KToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OkxpbmtSZWNvcmQ6OnNldEZyb20pOgor
ICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6TGlua1JlY29yZDo6dG8pOgorICAgICAgICAo
SlNDOjpBUk12N0Fzc2VtYmxlcjo6TGlua1JlY29yZDo6dHlwZSk6CisgICAgICAgIChKU0M6OkFS
TXY3QXNzZW1ibGVyOjpMaW5rUmVjb3JkOjpsaW5rVHlwZSk6CisgICAgICAgIChKU0M6OkFSTXY3
QXNzZW1ibGVyOjpMaW5rUmVjb3JkOjpzZXRMaW5rVHlwZSk6CisgICAgICAgICAgRW5jYXBzdWxh
dGUgTGlua1JlY29yZCBmaWVsZHMgc28gd2UgY2FuIGNvbXByZXNzIHRoZSB2YWx1ZXMgc29tZXdo
YXQKKworICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6Sm1wU3JjOjpKbXBTcmMpOgorICAg
ICAgICAgIE5lZWQgdG8gcmVjb3JkIHRoZSBqdW1wIHR5cGUgbm93CisKKyAgICAgICAgKEpTQzo6
QVJNdjdBc3NlbWJsZXI6OmIpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6Ymx4KToK
KyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmJ4KToKKyAgICAgICAgICBOZWVkIHRvIHBh
c3MgdGhlIGp1bXAgdHlwZXMKKworICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6ZXhlY3V0
YWJsZU9mZnNldEZvcik6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpqdW1wU2l6ZURl
bHRhKToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmxpbmtSZWNvcmRTb3VyY2VDb21w
YXJhdG9yKToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmNvbXB1dGVKdW1wVHlwZSk6
CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpjb252ZXJ0SnVtcFRvKToKKyAgICAgICAg
KEpTQzo6QVJNdjdBc3NlbWJsZXI6OnJlY29yZExpbmtPZmZzZXRzKToKKyAgICAgICAgKEpTQzo6
QVJNdjdBc3NlbWJsZXI6Omp1bXBzVG9MaW5rKToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJs
ZXI6OmxpbmspOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6dW5saW5rZWRDb2RlKToK
KyAgICAgICAgICBIZWxwZXIgZnVuY3Rpb25zIGZvciB0aGUgbGlua2VyCisKKyAgICAgICAgKEpT
Qzo6QVJNdjdBc3NlbWJsZXI6OmxpbmtKdW1wKToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJs
ZXI6OmNhbkJlU2hvcnRKdW1wKToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmxpbmtM
b25nSnVtcCk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpsaW5rU2hvcnRKdW1wKToK
KyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmxpbmtKdW1wQWJzb2x1dGUpOgorICAgICAg
ICAgICBNb3ZpbmcgY29kZSBhcm91bmQgZm9yIHRoZSB2YXJpb3VzIGp1bXAgbGlua2luZyBmdW5j
dGlvbnMKKworICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6Cisg
ICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmJlZ2luVW5pbnRlcnJ1cHRlZFNl
cXVlbmNlKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6ZW5kVW5pbnRl
cnJ1cHRlZFNlcXVlbmNlKToKKyAgICAgICAgICBXZSBoYXZlIHRvIHRyYWNrIHVuaW50ZXJydXB0
ZWQgc2VxdWVuY2VzIGluIGFueSBhc3NlbWJsZXIgdGhhdCBjb21wYWN0cworICAgICAgICAgIGJy
YW5jaGVzIGFzIHRoYXQncyBub3Qgc29tZXRoaW5nIHdlJ3JlIGFsbG93ZWQgdG8gZG8gaW4gc3Vj
aCBzZXF1ZW5jZXMuCisgICAgICAgICAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlciBoYXMgYSBub3Ag
dmVyc2lvbiBvZiB0aGVzZSBmdW5jdGlvbnMgYXMgaXQgbWFrZXMgdGhlCisgICAgICAgICAgY29k
ZSBlbHNld2hlcmUgbmljZXIuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgor
ICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpMaW5rQnVmZmVyKToKKyAgICAgICAgKEpTQzo6TGlu
a0J1ZmZlcjo6bGluayk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OnBhdGNoKToKKyAgICAg
ICAgKEpTQzo6TGlua0J1ZmZlcjo6bG9jYXRpb25PZik6CisgICAgICAgIChKU0M6OkxpbmtCdWZm
ZXI6OmxvY2F0aW9uT2ZOZWFyQ2FsbCk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OnJldHVy
bkFkZHJlc3NPZmZzZXQpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjp0cmFtcG9saW5lQXQp
OgorICAgICAgICAgIFVwZGF0ZWQgdGhlc2UgZnVuY3Rpb25zIHRvIGFkanVzdCBmb3IgYW55IGNo
YW5nZWQgb2Zmc2V0cyBpbiB0aGUgbGlua2VkIGNvZGUKKworICAgICAgICAoSlNDOjpMaW5rQnVm
ZmVyOjphcHBseU9mZnNldCk6CisgICAgICAgICAgQSBoZWxwZXIgZnVuY3Rpb24gdG8gZGVhbCB3
aXRoIHRoZSBub3cgcG90ZW50aWFsbHkgbW92ZWQgbGFiZWxzCisKKyAgICAgICAgKEpTQzo6TGlu
a0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAgIFRoZSBuZXcgYW5kIG1pZ2h0eSBsaW5rZXIg
ZnVuY3Rpb24KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6Ok1hY3JvQXNzZW1ibGVyQVJNdjcpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpiZWdpblVuaW50ZXJydXB0ZWRTZXF1
ZW5jZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OmVuZFVuaW50ZXJydXB0
ZWRTZXF1ZW5jZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6Omp1bXBzVG9M
aW5rKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6dW5saW5rZWRDb2RlKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6Y29tcHV0ZUp1bXBUeXBlKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6Y29udmVydEp1bXBUbyk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnJlY29yZExpbmtPZmZzZXRzKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6anVtcFNpemVEZWx0YSk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OmxpbmspOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ckFSTXY3OjpqdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6YnJhbmNo
TXVsMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpicmVha3BvaW50KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6bmVhckNhbGwpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpjYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk12Nzo6cmV0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6dGFp
bFJlY3Vyc2l2ZUNhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpleGVj
dXRhYmxlT2Zmc2V0Rm9yKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6aW5V
bmludGVycnVwdGVkU2VxdWVuY2UpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3
OjptYWtlSnVtcCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6Om1ha2VCcmFu
Y2gpOgorICAgICAgICAgICBBbGwgYnJhbmNoZXMgbmVlZCB0byBwYXNzIG9uIHRoZWlyIHR5cGUg
bm93CisKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oOgorICAgICAgICAoSlND
OjpFeGVjdXRhYmxlUG9vbDo6cmV0dXJuTGFzdEJ5dGVzKToKKyAgICAgICAgICAgV2UgY2FuJ3Qg
a25vdyBhaGVhZCBvZiB0aW1lIGhvdyBtdWNoIHNwYWNlIHdpbGwgYmUgbmVjZXNzYXJ5IHRvCisg
ICAgICAgICAgIGhvbGQgdGhlIGxpbmtlZCBjb2RlIGlmIHdlJ3JlIGNvbXBhY3RpbmcgYnJhbmNo
ZXMsIHRoaXMgbmV3CisgICAgICAgICAgIGZ1bmN0aW9uIGFsbG93cyB1cyB0byByZXR1cm4gdGhl
IHVudXNlZCBieXRlcyBhdCB0aGUgZW5kIG9mIGxpbmtpbmcKKworICAgICAgICAqIGppdC9KSVQu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OkpJVCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21w
aWxlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZFByb3RvKToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlR2V0QnlJZFNlbGZMaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldEJ5
SWRDaGFpbkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkQ2hhaW4pOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChK
U0M6OkpJVDo6Y29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZUNUSU5hdGl2ZUNhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVQYXRj
aEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgICAgVGhlIEpJVCBjbGFzcyBub3cgbmVlZHMgdG8g
dGFrZSBhIGxpbmtlciBvZmZzZXQgc28gdGhhdCByZWNvbXBpbGF0aW9uCisgICAgICAgICAgIGNh
biBnZW5lcmF0ZSB0aGUgc2FtZSBqdW1wcyB3aGVuIHVzaW5nIGJyYW5jaCBjb21wYWN0aW9uLgor
CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfbW9kKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMpOgorICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZh
dGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwpOgorICAgICAgICAgIFVwZGF0ZSBmb3IgbmV3IHRyYW1w
b2xpbmVBdCBjaGFuZ2VzCisKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5jcHA6CisgICAgICAg
IChXVEY6OlRDTWFsbG9jU3RhdHM6Oik6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIw
MTAtMDgtMDkgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAg
ICAgICAgIFF0IGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQ4NTI2NGQ3ZmFjZGViMjJl
OTllODQyODRmNDRlMmMwOGJlOTRhZTcuLjI0YjQ4YTcxOGI1NjIwYWRiNTcxYmQzNTQzNTc3NDUz
MDY5MjBmYmQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzExLDYgKzMxMSw3IEBACiAJCUE3NDgyQjk0
MTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NDgyQjdBMTE2NkNERUEw
MDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCAqLzsgfTsKIAkJQTc0ODJF
OTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzQ4MkUzNzExNkE2OTdC
MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzRCMzQ5OTEwMkE1RjhFMDAzMkFC
OTggLyogTWFya1N0YWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3NEIzNDk4MTAyQTVGOEUwMDMyQUI5OCAvKiBNYXJrU3RhY2suY3BwICovOyB9
OworCQlBNzRERTFEMDEyMEI4NzU2MDBENDBENUIgLyogQVJNdjdBc3NlbWJsZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc0REUxQ0IxMjBCODZE
NjAwRDQwRDVCIC8qIEFSTXY3QXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJQTc1NzA2REUxMThBMkJD
RjAwNTdGODhGIC8qIEpJVEFyaXRobWV0aWMzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzU3MDZERDExOEEyQkNGMDA1N0Y4OEYgLyogSklU
QXJpdGhtZXRpYzMyXzY0LmNwcCAqLzsgfTsKIAkJQTc2NkI0NEYwRUU4RENEMTAwOTUxOENBIC8q
IEV4ZWN1dGFibGVBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2Nh
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QTc2QzUxNzYxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzZDNTE3NDExODI3NDhEMDA3MTVC
MDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLzsgfTsKQEAgLTkyNyw2ICs5MjgsNyBAQAogCQlBNzQ4
MkI3QTExNjZDREVBMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYWtPYmplY3RNYXBSZWZQcml2
YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc0ODJFMzcxMTZBNjk3QjAw
M0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE3NEIzNDk4MTAyQTVGOEUwMDMyQUI5OCAvKiBNYXJrU3RhY2su
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya1N0YWNrLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc0REUxQ0IxMjBCODZENjAwRDQwRDVCIC8q
IEFSTXY3QXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEFSTXY3QXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc1NzA2
REQxMThBMkJDRjAwNTdGODhGIC8qIEpJVEFyaXRobWV0aWMzMl82NC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRBcml0aG1ldGljMzJfNjQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRl
cmZhY2VKSVQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnRlcmZhY2VK
SVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2RUU2NTgwRkFFNTlENTAwM0Yw
NjlBIC8qIE5hdGl2ZUZ1bmN0aW9uV3JhcHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOYXRpdmVGdW5jdGlvbldyYXBwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE4NDgsNiArMTg1MCw3IEBACiAJCQkJODZEM0IyQkYxMDE1NkJERTAwMjg2NUU3IC8q
IEFSTUFzc2VtYmxlci5jcHAgKi8sCiAJCQkJODZEM0IyQzAxMDE1NkJERTAwMjg2NUU3IC8qIEFS
TUFzc2VtYmxlci5oICovLAogCQkJCTg2QUREMTQzMEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fz
c2VtYmxlci5oICovLAorCQkJCUE3NERFMUNCMTIwQjg2RDYwMEQ0MEQ1QiAvKiBBUk12N0Fzc2Vt
Ymxlci5jcHAgKi8sCiAJCQkJOTY4OENCMTMwRUQxMkI0RTAwMUQ2NDlGIC8qIEFzc2VtYmxlckJ1
ZmZlci5oICovLAogCQkJCTg2RDNCMkMxMTAxNTZCREUwMDI4NjVFNyAvKiBBc3NlbWJsZXJCdWZm
ZXJXaXRoQ29uc3RhbnRQb29sLmggKi8sCiAJCQkJODZFMTE2QjAwRkU3NUFDODAwQjUxMkJDIC8q
IENvZGVMb2NhdGlvbi5oICovLApAQCAtMjY3Nyw2ICsyNjgwLDcgQEAKIAkJCQlEREY3QUJENTEx
RjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrQ0YuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODYyN0U1RUIxMUYxMjgxOTAwQTMxM0I1IC8qIFBhZ2VBbGxvY2F0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCURERTgyQUQ3MTIwOUQ5NTUwMDVDMTc1NiAvKiBHQ0hhbmRsZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBNzRERTFEMDEyMEI4NzU2MDBENDBENUIgLyogQVJNdjdBc3Nl
bWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQVJNdjdBc3NlbWJsZXIuY3BwIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3
QXNzZW1ibGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzNhNmYxM2E1YjI2OGY3ZDU0YTBkZGZhMzI3NjMz
ZGEzNjFjMzVhCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FS
TXY3QXNzZW1ibGVyLmNwcApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgQ1BVKEFSTV9USFVNQjIpCisK
KyNpbmNsdWRlICJBUk12N0Fzc2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3Qg
aW50IEFSTXY3QXNzZW1ibGVyOjpKdW1wU2l6ZXNbXSA9IHsgMHhmZmZmZmZmZiwgMiAqIHNpemVv
Zih1aW50MTZfdCksIDIgKiBzaXplb2YodWludDE2X3QpLCA1ICogc2l6ZW9mKHVpbnQxNl90KSB9
OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FS
TXY3QXNzZW1ibGVyLmggYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIu
aAppbmRleCA0MjVjNWVmOTAxYjMzOGYzNDYwODgzMWNiNzcyMjgxYWMzNmY2NWQyLi5mMWI1N2I4
YjNmOGU0NDFjODFiZmQ0OTZjOGE1ZTRlMmI0MjViMjM1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQVJNdjdBc3NlbWJsZXIuaApAQCAtMzgxLDggKzM4MSw4IEBAIHB1YmxpYzoKIAogICAg
ICAgICB1LmQgPSBkOwogCi0gICAgICAgIGludCBzaWduID0gKHUuaSA+PiA2Myk7Ci0gICAgICAg
IGludCBleHBvbmVudCA9ICh1LmkgPj4gNTIpICYgMHg3ZmY7CisgICAgICAgIGludCBzaWduID0g
c3RhdGljX2Nhc3Q8aW50Pih1LmkgPj4gNjMpOworICAgICAgICBpbnQgZXhwb25lbnQgPSBzdGF0
aWNfY2FzdDxpbnQ+KHUuaSA+PiA1MikgJiAweDdmZjsKICAgICAgICAgdWludDY0X3QgbWFudGlz
c2EgPSB1LmkgJiAweDAwMGZmZmZmZmZmZmZmZmZ1bGw7CiAKICAgICAgICAgaWYgKChleHBvbmVu
dCA+PSAweDNmYykgJiYgKGV4cG9uZW50IDw9IDB4NDAzKSAmJiAhKG1hbnRpc3NhICYgMHgwMDAw
ZmZmZmZmZmZmZmZmdWxsKSkKQEAgLTQ0NSw3ICs0NDUsNiBAQCBwcml2YXRlOgogICAgIH0gbV91
OwogfTsKIAotCiBjbGFzcyBBUk12N0Fzc2VtYmxlciB7CiBwdWJsaWM6CiAgICAgfkFSTXY3QXNz
ZW1ibGVyKCkKQEAgLTQ3NiwxNCArNDc1LDQ0IEBAIHB1YmxpYzoKICAgICAgICAgQ29uZGl0aW9u
R1QsCiAgICAgICAgIENvbmRpdGlvbkxFLAogICAgICAgICBDb25kaXRpb25BTCwKLQorICAgICAg
ICAKICAgICAgICAgQ29uZGl0aW9uQ1MgPSBDb25kaXRpb25IUywKICAgICAgICAgQ29uZGl0aW9u
Q0MgPSBDb25kaXRpb25MTywKICAgICB9IENvbmRpdGlvbjsKIAorICAgIGVudW0gSnVtcFR5cGUg
eyBKdW1wTm9Db25kaXRpb24sIEp1bXBDb25kaXRpb24sIEp1bXBGdWxsU2l6ZSB9OworICAgIGVu
dW0gSnVtcExpbmtUeXBlIHsgTGlua0ludmFsaWQsIExpbmtTaG9ydEp1bXAsIExpbmtDb25kaXRp
b25hbFNob3J0SnVtcCwgTGlua0xvbmdKdW1wLCBKdW1wVHlwZUNvdW50IH07CisgICAgc3RhdGlj
IGNvbnN0IGludCBKdW1wU2l6ZXNbSnVtcFR5cGVDb3VudF07CisgICAgZW51bSB7IEp1bXBQYWRk
aW5nU2l6ZSA9IDUgKiBzaXplb2YodWludDE2X3QpIH07CisgICAgY2xhc3MgTGlua1JlY29yZCB7
CisgICAgcHVibGljOgorICAgICAgICBMaW5rUmVjb3JkKGludHB0cl90IGZyb20sIGludHB0cl90
IHRvLCBKdW1wVHlwZSB0eXBlLCBDb25kaXRpb24gY29uZGl0aW9uKQorICAgICAgICAgICAgOiBt
X2Zyb20oZnJvbSkKKyAgICAgICAgICAgICwgbV90byh0bykKKyAgICAgICAgICAgICwgbV90eXBl
KHR5cGUpCisgICAgICAgICAgICAsIG1fbGlua1R5cGUoTGlua0ludmFsaWQpCisgICAgICAgICAg
ICAsIG1fY29uZGl0aW9uKGNvbmRpdGlvbikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IGludHB0cl90IGZyb20oKSBjb25zdCB7IHJldHVybiBtX2Zyb207IH0KKyAgICAgICAgdm9pZCBz
ZXRGcm9tKGludHB0cl90IGZyb20pIHsgbV9mcm9tID0gZnJvbTsgfQorICAgICAgICBpbnRwdHJf
dCB0bygpIGNvbnN0IHsgcmV0dXJuIG1fdG87IH0KKyAgICAgICAgSnVtcFR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgICAgICBKdW1wTGlua1R5cGUgbGlua1R5cGUoKSBj
b25zdCB7IHJldHVybiBtX2xpbmtUeXBlOyB9CisgICAgICAgIHZvaWQgc2V0TGlua1R5cGUoSnVt
cExpbmtUeXBlIGxpbmtUeXBlKSB7IEFTU0VSVChtX2xpbmtUeXBlID09IExpbmtJbnZhbGlkKTsg
bV9saW5rVHlwZSA9IGxpbmtUeXBlOyB9CisgICAgICAgIENvbmRpdGlvbiBjb25kaXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2NvbmRpdGlvbjsgfQorICAgIHByaXZhdGU6CisgICAgICAgIGludHB0
cl90IG1fZnJvbSA6IDMxOworICAgICAgICBpbnRwdHJfdCBtX3RvIDogMzE7CisgICAgICAgIEp1
bXBUeXBlIG1fdHlwZSA6IDI7CisgICAgICAgIEp1bXBMaW5rVHlwZSBtX2xpbmtUeXBlIDogMzsK
KyAgICAgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uIDogMTY7CisgICAgfTsKKyAgICAKICAgICBj
bGFzcyBKbXBTcmMgewogICAgICAgICBmcmllbmQgY2xhc3MgQVJNdjdBc3NlbWJsZXI7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBBUk1JbnN0cnVjdGlvbkZvcm1hdHRlcjsKKyAgICAgICAgZnJpZW5k
IGNsYXNzIExpbmtCdWZmZXI7CiAgICAgcHVibGljOgogICAgICAgICBKbXBTcmMoKQogICAgICAg
ICAgICAgOiBtX29mZnNldCgtMSkKQEAgLTQ5MSwxNyArNTIwLDMyIEBAIHB1YmxpYzoKICAgICAg
ICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSm1wU3JjKGludCBvZmZzZXQpCisgICAgICAg
IEptcFNyYyhpbnQgb2Zmc2V0LCBKdW1wVHlwZSB0eXBlKQorICAgICAgICAgICAgOiBtX29mZnNl
dChvZmZzZXQpCisgICAgICAgICAgICAsIG1fY29uZGl0aW9uKDB4ZmZmZikKKyAgICAgICAgICAg
ICwgbV90eXBlKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgIT0g
SnVtcENvbmRpdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBKbXBTcmMoaW50IG9mZnNldCwg
SnVtcFR5cGUgdHlwZSwgQ29uZGl0aW9uIGNvbmRpdGlvbikKICAgICAgICAgICAgIDogbV9vZmZz
ZXQob2Zmc2V0KQorICAgICAgICAgICAgLCBtX2NvbmRpdGlvbihjb25kaXRpb24pCisgICAgICAg
ICAgICAsIG1fdHlwZSh0eXBlKQogICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV90eXBl
ID09IEp1bXBDb25kaXRpb24gfHwgbV90eXBlID09IEp1bXBGdWxsU2l6ZSk7CiAgICAgICAgIH0K
IAogICAgICAgICBpbnQgbV9vZmZzZXQ7CisgICAgICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbiA6
IDE2OworICAgICAgICBKdW1wVHlwZSBtX3R5cGUgOiAxNjsKKyAgICAgICAgCiAgICAgfTsKICAg
ICAKICAgICBjbGFzcyBKbXBEc3QgewogICAgICAgICBmcmllbmQgY2xhc3MgQVJNdjdBc3NlbWJs
ZXI7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBBUk1JbnN0cnVjdGlvbkZvcm1hdHRlcjsKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAgICAgcHVibGljOgogICAgICAgICBKbXBEc3Qo
KQogICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKQEAgLTUyNSwxNyArNTY5LDYgQEAgcHVibGlj
OgogCiBwcml2YXRlOgogCi0gICAgc3RydWN0IExpbmtSZWNvcmQgewotICAgICAgICBMaW5rUmVj
b3JkKGludHB0cl90IGZyb20sIGludHB0cl90IHRvKQotICAgICAgICAgICAgOiBmcm9tKGZyb20p
Ci0gICAgICAgICAgICAsIHRvKHRvKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBp
bnRwdHJfdCBmcm9tOwotICAgICAgICBpbnRwdHJfdCB0bzsKLSAgICB9OwotCiAgICAgLy8gQVJN
djcsIEFwcHgtQS42LjMKICAgICBib29sIEJhZFJlZyhSZWdpc3RlcklEIHJlZykKICAgICB7CkBA
IC03MzksNyArNzcyLDcgQEAgcHJpdmF0ZToKICAgICB9CiAKIHB1YmxpYzoKLQorICAgIAogICAg
IHZvaWQgYWRkKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcm4sIEFSTVRodW1iSW1tZWRpYXRl
IGltbSkKICAgICB7CiAgICAgICAgIC8vIFJkIGNhbiBvbmx5IGJlIFNQIGlmIFJuIGlzIGFsc28g
U1AuCkBAIC04NzgsMjcgKzkxMSwzMyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCghQmFkUmVn
KHJtKSk7CiAgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDEyUmVnNEZvdXJGb3VycyhPUF9B
U1JfcmVnX1QyLCBybiwgRm91ckZvdXJzKDB4ZiwgcmQsIDAsIHJtKSk7CiAgICAgfQotCisgICAg
CiAgICAgLy8gT25seSBhbGxvd2VkIGluIElUIChpZiB0aGVuKSBibG9jayBpZiBsYXN0IGluc3Ry
dWN0aW9uLgotICAgIEptcFNyYyBiKCkKKyAgICBKbXBTcmMgYihKdW1wVHlwZSB0eXBlKQogICAg
IHsKICAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wMTZPcDE2KE9QX0JfVDRhLCBPUF9CX1Q0
Yik7Ci0gICAgICAgIHJldHVybiBKbXBTcmMobV9mb3JtYXR0ZXIuc2l6ZSgpKTsKKyAgICAgICAg
cmV0dXJuIEptcFNyYyhtX2Zvcm1hdHRlci5zaXplKCksIHR5cGUpOwogICAgIH0KICAgICAKICAg
ICAvLyBPbmx5IGFsbG93ZWQgaW4gSVQgKGlmIHRoZW4pIGJsb2NrIGlmIGxhc3QgaW5zdHJ1Y3Rp
b24uCi0gICAgSm1wU3JjIGJseChSZWdpc3RlcklEIHJtKQorICAgIEptcFNyYyBibHgoUmVnaXN0
ZXJJRCBybSwgSnVtcFR5cGUgdHlwZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChybSAhPSBBUk1S
ZWdpc3RlcnM6OnBjKTsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lV29yZE9wOFJlZ1JlZzE0MyhP
UF9CTFgsIHJtLCAoUmVnaXN0ZXJJRCk4KTsKLSAgICAgICAgcmV0dXJuIEptcFNyYyhtX2Zvcm1h
dHRlci5zaXplKCkpOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fZm9ybWF0dGVyLnNpemUoKSwg
dHlwZSk7CiAgICAgfQogCiAgICAgLy8gT25seSBhbGxvd2VkIGluIElUIChpZiB0aGVuKSBibG9j
ayBpZiBsYXN0IGluc3RydWN0aW9uLgotICAgIEptcFNyYyBieChSZWdpc3RlcklEIHJtKQorICAg
IEptcFNyYyBieChSZWdpc3RlcklEIHJtLCBKdW1wVHlwZSB0eXBlLCBDb25kaXRpb24gY29uZGl0
aW9uKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lV29yZE9wOFJlZ1JlZzE0MyhPUF9C
WCwgcm0sIChSZWdpc3RlcklEKTApOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fZm9ybWF0dGVy
LnNpemUoKSwgdHlwZSwgY29uZGl0aW9uKTsKKyAgICB9CisKKyAgICBKbXBTcmMgYngoUmVnaXN0
ZXJJRCBybSwgSnVtcFR5cGUgdHlwZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZVdv
cmRPcDhSZWdSZWcxNDMoT1BfQlgsIHJtLCAoUmVnaXN0ZXJJRCkwKTsKLSAgICAgICAgcmV0dXJu
IEptcFNyYyhtX2Zvcm1hdHRlci5zaXplKCkpOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fZm9y
bWF0dGVyLnNpemUoKSwgdHlwZSk7CiAgICAgfQogCiAgICAgdm9pZCBia3B0KHVpbnQ4X3QgaW1t
PTApCkBAIC0xNjE3LDYgKzE2NTYsMTUgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJu
IGRzdC5tX29mZnNldCAtIHNyYy5tX29mZnNldDsKICAgICB9CisKKyAgICBpbnQgZXhlY3V0YWJs
ZU9mZnNldEZvcihpbnQgbG9jYXRpb24pCisgICAgeworICAgICAgICBpZiAoIWxvY2F0aW9uKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90
Kj4obV9mb3JtYXR0ZXIuZGF0YSgpKVtsb2NhdGlvbiAvIHNpemVvZihpbnQzMl90KSAtIDFdOwor
ICAgIH0KKyAgICAKKyAgICBpbnQganVtcFNpemVEZWx0YShKdW1wTGlua1R5cGUganVtcExpbmtU
eXBlKSB7IHJldHVybiBKdW1wUGFkZGluZ1NpemUgLSBKdW1wU2l6ZXNbanVtcExpbmtUeXBlXTsg
fQogICAgIAogICAgIC8vIEFzc2VtYmxlciBhZG1pbiBtZXRob2RzOgogCkBAIC0xNjI1LDIzICsx
NjczLDY2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZm9ybWF0dGVyLnNpemUoKTsKICAg
ICB9CiAKLSAgICB2b2lkKiBleGVjdXRhYmxlQ29weShFeGVjdXRhYmxlUG9vbCogYWxsb2NhdG9y
KQorICAgIHN0YXRpYyBib29sIGxpbmtSZWNvcmRTb3VyY2VDb21wYXJhdG9yKGNvbnN0IExpbmtS
ZWNvcmQmIGEsIGNvbnN0IExpbmtSZWNvcmQmIGIpCiAgICAgewotICAgICAgICB2b2lkKiBjb3B5
ID0gbV9mb3JtYXR0ZXIuZXhlY3V0YWJsZUNvcHkoYWxsb2NhdG9yKTsKLSAgICAgICAgaWYgKCFj
b3B5KQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBhLmZyb20oKSA8IGIu
ZnJvbSgpOworICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBqdW1wQ291bnQgPSBtX2p1bXBzVG9M
aW5rLnNpemUoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGp1bXBDb3VudDsg
KytpKSB7Ci0gICAgICAgICAgICB1aW50MTZfdCogbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0
PHVpbnQxNl90Kj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29weSkgKyBtX2p1bXBzVG9M
aW5rW2ldLmZyb20pOwotICAgICAgICAgICAgdWludDE2X3QqIHRhcmdldCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDE2X3QqPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb3B5KSArIG1fanVt
cHNUb0xpbmtbaV0udG8pOwotICAgICAgICAgICAgbGlua0p1bXBBYnNvbHV0ZShsb2NhdGlvbiwg
dGFyZ2V0KTsKKyAgICBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKExpbmtSZWNvcmQmIHJl
Y29yZCwgY29uc3QgdWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogdG8pCisgICAgeworICAg
ICAgICBpZiAocmVjb3JkLnR5cGUoKSA+PSBKdW1wRnVsbFNpemUpIHsKKyAgICAgICAgICAgIHJl
Y29yZC5zZXRMaW5rVHlwZShMaW5rTG9uZ0p1bXApOworICAgICAgICAgICAgcmV0dXJuIExpbmtM
b25nSnVtcDsKICAgICAgICAgfQotICAgICAgICBtX2p1bXBzVG9MaW5rLmNsZWFyKCk7CisgICAg
ICAgIGJvb2wgbWF5VHJpZ2dlckVycmF0YSA9IGZhbHNlOworICAgICAgICBjb25zdCB1aW50MTZf
dCogc2hvcnRKdW1wTG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4o
ZnJvbSAgLSAoSnVtcFBhZGRpbmdTaXplIC0gSnVtcFNpemVzW0xpbmtTaG9ydEp1bXBdKSk7Cisg
ICAgICAgIGlmICghY2FuQmVTaG9ydEp1bXAoc2hvcnRKdW1wTG9jYXRpb24sIHRvLCBtYXlUcmln
Z2VyRXJyYXRhKSkgeworICAgICAgICAgICAgcmVjb3JkLnNldExpbmtUeXBlKExpbmtMb25nSnVt
cCk7CisgICAgICAgICAgICByZXR1cm4gTGlua0xvbmdKdW1wOworICAgICAgICB9CisgICAgICAg
IGlmIChtYXlUcmlnZ2VyRXJyYXRhKSB7CisgICAgICAgICAgICByZWNvcmQuc2V0TGlua1R5cGUo
TGlua0xvbmdKdW1wKTsKKyAgICAgICAgICAgIHJldHVybiBMaW5rTG9uZ0p1bXA7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHJlY29yZC50eXBlKCkgPT0gSnVtcENvbmRpdGlvbikgeworICAgICAg
ICAgICAgcmVjb3JkLnNldExpbmtUeXBlKExpbmtDb25kaXRpb25hbFNob3J0SnVtcCk7CisgICAg
ICAgICAgICByZXR1cm4gTGlua0NvbmRpdGlvbmFsU2hvcnRKdW1wOworICAgICAgICB9CisgICAg
ICAgIHJlY29yZC5zZXRMaW5rVHlwZShMaW5rU2hvcnRKdW1wKTsKKyAgICAgICAgcmV0dXJuIExp
bmtTaG9ydEp1bXA7CisgICAgfQogCi0gICAgICAgIHJldHVybiBjb3B5OworICAgIHZvaWQgcmVj
b3JkTGlua09mZnNldHMoaW50MzJfdCByZWdpb25TdGFydCwgaW50MzJfdCByZWdpb25FbmQsIGlu
dDMyX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgaW50MzJfdCBwdHIgPSByZWdpb25TdGFydCAv
IHNpemVvZihpbnQzMl90KTsKKyAgICAgICAgY29uc3QgaW50MzJfdCBlbmQgPSByZWdpb25FbmQg
LyBzaXplb2YoaW50MzJfdCk7CisgICAgICAgIGludDMyX3QqIG9mZnNldHMgPSBzdGF0aWNfY2Fz
dDxpbnQzMl90Kj4obV9mb3JtYXR0ZXIuZGF0YSgpKTsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVu
ZCkKKyAgICAgICAgICAgIG9mZnNldHNbcHRyKytdID0gb2Zmc2V0OworICAgIH0KKyAgICAKKyAg
ICBWZWN0b3I8TGlua1JlY29yZD4mIGp1bXBzVG9MaW5rKCkKKyAgICB7CisgICAgICAgIHN0ZDo6
c29ydChtX2p1bXBzVG9MaW5rLmJlZ2luKCksIG1fanVtcHNUb0xpbmsuZW5kKCksIGxpbmtSZWNv
cmRTb3VyY2VDb21wYXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIG1fanVtcHNUb0xpbms7CisgICAg
fQorCisgICAgdm9pZCBsaW5rKExpbmtSZWNvcmQmIHJlY29yZCwgdWludDhfdCogZnJvbSwgdWlu
dDhfdCogdG8pCisgICAgeworICAgICAgICB1aW50MTZfdCogaXR0dExvY2F0aW9uOworICAgICAg
ICBpZiAocmVjb3JkLmxpbmtUeXBlKCkgPT0gTGlua0NvbmRpdGlvbmFsU2hvcnRKdW1wKSB7Cisg
ICAgICAgICAgICBpdHR0TG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJv
bSAtIEp1bXBTaXplc1tMaW5rQ29uZGl0aW9uYWxTaG9ydEp1bXBdIC0gMik7CisgICAgICAgICAg
ICBpdHR0TG9jYXRpb25bMF0gPSBpZlRoZW5FbHNlKHJlY29yZC5jb25kaXRpb24oKSkgfCBPUF9J
VDsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQocmVjb3JkLmxpbmtUeXBlKCkgIT0gTGlua0lu
dmFsaWQpOworICAgICAgICBpZiAocmVjb3JkLmxpbmtUeXBlKCkgIT0gTGlua0xvbmdKdW1wKQor
ICAgICAgICAgICAgbGlua1Nob3J0SnVtcChyZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJv
bSksIHRvKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGlua0xvbmdKdW1wKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDE2X3QqPihmcm9tKSwgdG8pOwogICAgIH0KIAorICAgIHZvaWQqIHVubGlu
a2VkQ29kZSgpIHsgcmV0dXJuIG1fZm9ybWF0dGVyLmRhdGEoKTsgfQorICAgIAogICAgIHN0YXRp
YyB1bnNpZ25lZCBnZXRDYWxsUmV0dXJuT2Zmc2V0KEptcFNyYyBjYWxsKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGNhbGwubV9vZmZzZXQgPj0gMCk7CkBAIC0xNjYwLDcgKzE3NTEsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBBU1NFUlQodG8ubV9vZmZzZXQgIT0gLTEpOwogICAgICAgICBB
U1NFUlQoZnJvbS5tX29mZnNldCAhPSAtMSk7Ci0gICAgICAgIG1fanVtcHNUb0xpbmsuYXBwZW5k
KExpbmtSZWNvcmQoZnJvbS5tX29mZnNldCwgdG8ubV9vZmZzZXQpKTsKKyAgICAgICAgbV9qdW1w
c1RvTGluay5hcHBlbmQoTGlua1JlY29yZChmcm9tLm1fb2Zmc2V0LCB0by5tX29mZnNldCwgZnJv
bS5tX3R5cGUsIGZyb20ubV9jb25kaXRpb24pKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCBs
aW5rSnVtcCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwgdm9pZCogdG8pCkBAIC0xODYzLDE5ICsx
OTU0LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAoaW5zdHJ1Y3Rpb25bMF0gPT0gT1Bf
Tk9QX1QyYSkgJiYgKGluc3RydWN0aW9uWzFdID09IE9QX05PUF9UMmIpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIGxpbmtKdW1wQWJzb2x1dGUodWludDE2X3QqIGluc3RydWN0aW9uLCB2b2lk
KiB0YXJnZXQpCisgICAgc3RhdGljIGJvb2wgY2FuQmVTaG9ydEp1bXAoY29uc3QgdWludDE2X3Qq
IGluc3RydWN0aW9uLCBjb25zdCB2b2lkKiB0YXJnZXQsIGJvb2wmIG1heVRyaWdnZXJFcnJhdGEp
CiAgICAgewotICAgICAgICAvLyBGSU1YRTogdGhpcyBzaG91bGQgYmUgdXAgaW4gdGhlIE1hY3Jv
QXNzZW1ibGVyIGxheWVyLiA6LSgKLSAgICAgICAgY29uc3QgdWludDE2X3QgSlVNUF9URU1QT1JB
UllfUkVHSVNURVIgPSBBUk1SZWdpc3RlcnM6OmlwOwotCiAgICAgICAgIEFTU0VSVCghKHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RydWN0aW9uKSAmIDEpKTsKICAgICAgICAgQVNTRVJU
KCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGFyZ2V0KSAmIDEpKTsKLQotICAgICAgICBB
U1NFUlQoIChpc01PVl9pbW1fVDMoaW5zdHJ1Y3Rpb24gLSA1KSAmJiBpc01PVlQoaW5zdHJ1Y3Rp
b24gLSAzKSAmJiBpc0JYKGluc3RydWN0aW9uIC0gMSkpCi0gICAgICAgICAgICB8fCAoaXNOT1Bf
VDEoaW5zdHJ1Y3Rpb24gLSA1KSAmJiBpc05PUF9UMihpbnN0cnVjdGlvbiAtIDQpICYmIGlzQihp
bnN0cnVjdGlvbiAtIDIpKSApOwotCisgICAgICAgIAogICAgICAgICBpbnRwdHJfdCByZWxhdGl2
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkgLSAocmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pKTsKLQogICAgICAgICAvLyBGcm9tIENvcnRleC1BOCBl
cnJhdGE6CiAgICAgICAgIC8vIElmIHRoZSAzMi1iaXQgVGh1bWItMiBicmFuY2ggaW5zdHJ1Y3Rp
b24gc3BhbnMgdHdvIDRLaUIgcmVnaW9ucyBhbmQKICAgICAgICAgLy8gdGhlIHRhcmdldCBvZiB0
aGUgYnJhbmNoIGZhbGxzIHdpdGhpbiB0aGUgZmlyc3QgcmVnaW9uIGl0IGlzCkBAIC0xODg0LDEx
ICsxOTY4LDUwIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIHRvIGVudGVyIGEgZGVhZGxvY2sgc3Rh
dGUuCiAgICAgICAgIC8vIFRoZSBpbnN0cnVjdGlvbiBpcyBzcGFubmluZyB0d28gcGFnZXMgaWYg
aXQgZW5kcyBhdCBhbiBhZGRyZXNzIGVuZGluZyAweDAwMgogICAgICAgICBib29sIHNwYW5zVHdv
NEsgPSAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RydWN0aW9uKSAmIDB4ZmZmKSA9
PSAweDAwMik7CisgICAgICAgIG1heVRyaWdnZXJFcnJhdGEgPSBzcGFuc1R3bzRLOwogICAgICAg
ICAvLyBUaGUgdGFyZ2V0IGlzIGluIHRoZSBmaXJzdCBwYWdlIGlmIHRoZSBqdW1wIGJyYW5jaCBi
YWNrIGJ5IFszLi4weDEwMDJdIGJ5dGVzCiAgICAgICAgIGJvb2wgdGFyZ2V0SW5GaXJzdFBhZ2Ug
PSAocmVsYXRpdmUgPj0gLTB4MTAwMikgJiYgKHJlbGF0aXZlIDwgLTIpOwogICAgICAgICBib29s
IHdvdWxkVHJpZ2dlckE4RXJyYXRhID0gc3BhbnNUd280SyAmJiB0YXJnZXRJbkZpcnN0UGFnZTsK
KyAgICAgICAgcmV0dXJuICgocmVsYXRpdmUgPDwgNykgPj4gNykgPT0gcmVsYXRpdmUgJiYgIXdv
dWxkVHJpZ2dlckE4RXJyYXRhOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtMb25nSnVt
cCh1aW50MTZfdCogaW5zdHJ1Y3Rpb24sIHZvaWQqIHRhcmdldCkKKyAgICB7CisgICAgICAgIGxp
bmtKdW1wQWJzb2x1dGUoaW5zdHJ1Y3Rpb24sIHRhcmdldCk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyB2b2lkIGxpbmtTaG9ydEp1bXAodWludDE2X3QqIGluc3RydWN0aW9uLCB2b2lkKiB0YXJn
ZXQpCisgICAgeworICAgICAgICAvLyBGSU1YRTogdGhpcyBzaG91bGQgYmUgdXAgaW4gdGhlIE1h
Y3JvQXNzZW1ibGVyIGxheWVyLiA6LSggICAgICAgIAorICAgICAgICBBU1NFUlQoIShyZWludGVy
cHJldF9jYXN0PGludHB0cl90PihpbnN0cnVjdGlvbikgJiAxKSk7CisgICAgICAgIEFTU0VSVCgh
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkgJiAxKSk7CisgICAgICAgIAorICAg
ICAgICBpbnRwdHJfdCByZWxhdGl2ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdl
dCkgLSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pKTsKKyAgICAgICAg
Ym9vbCBzY3JhdGNoOworICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CisgICAgICAgIEFT
U0VSVChjYW5CZVNob3J0SnVtcChpbnN0cnVjdGlvbiwgdGFyZ2V0LCBzY3JhdGNoKSk7CisgICAg
ICAgIC8vIEFSTSBlbmNvZGluZyBmb3IgdGhlIHRvcCB0d28gYml0cyBiZWxvdyB0aGUgc2lnbiBi
aXQgaXMgJ3BlY3VsaWFyJy4KKyAgICAgICAgaWYgKHJlbGF0aXZlID49IDApCisgICAgICAgICAg
ICByZWxhdGl2ZSBePSAweEMwMDAwMDsKKworICAgICAgICAvLyBBbGwgYnJhbmNoIG9mZnNldHMg
c2hvdWxkIGJlIGFuIGV2ZW4gZGlzdGFuY2UuCisgICAgICAgIEFTU0VSVCghKHJlbGF0aXZlICYg
MSkpOworICAgICAgICBpbnN0cnVjdGlvblstMl0gPSBPUF9CX1Q0YSB8ICgocmVsYXRpdmUgJiAw
eDEwMDAwMDApID4+IDE0KSB8ICgocmVsYXRpdmUgJiAweDNmZjAwMCkgPj4gMTIpOworICAgICAg
ICBpbnN0cnVjdGlvblstMV0gPSBPUF9CX1Q0YiB8ICgocmVsYXRpdmUgJiAweDgwMDAwMCkgPj4g
MTApIHwgKChyZWxhdGl2ZSAmIDB4NDAwMDAwKSA+PiAxMSkgfCAoKHJlbGF0aXZlICYgMHhmZmUp
ID4+IDEpOworICAgIH0KIAotICAgICAgICBpZiAoKChyZWxhdGl2ZSA8PCA3KSA+PiA3KSA9PSBy
ZWxhdGl2ZSAmJiAhd291bGRUcmlnZ2VyQThFcnJhdGEpIHsKKyAgICBzdGF0aWMgdm9pZCBsaW5r
SnVtcEFic29sdXRlKHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgdm9pZCogdGFyZ2V0KQorICAgIHsK
KyAgICAgICAgLy8gRklNWEU6IHRoaXMgc2hvdWxkIGJlIHVwIGluIHRoZSBNYWNyb0Fzc2VtYmxl
ciBsYXllci4gOi0oCisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGluc3RydWN0aW9uKSAmIDEpKTsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4odGFyZ2V0KSAmIDEpKTsKKworICAgICAgICBBU1NFUlQoKGlzTU9WX2ltbV9UMyhp
bnN0cnVjdGlvbiAtIDUpICYmIGlzTU9WVChpbnN0cnVjdGlvbiAtIDMpICYmIGlzQlgoaW5zdHJ1
Y3Rpb24gLSAxKSkKKyAgICAgICAgICAgIHx8IChpc05PUF9UMShpbnN0cnVjdGlvbiAtIDUpICYm
IGlzTk9QX1QyKGluc3RydWN0aW9uIC0gNCkgJiYgaXNCKGluc3RydWN0aW9uIC0gMikpKTsKKwor
ICAgICAgICBpbnRwdHJfdCByZWxhdGl2ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRh
cmdldCkgLSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pKTsKKyAgICAg
ICAgYm9vbCBzY3JhdGNoOworICAgICAgICBpZiAoY2FuQmVTaG9ydEp1bXAoaW5zdHJ1Y3Rpb24s
IHRhcmdldCwgc2NyYXRjaCkpIHsKICAgICAgICAgICAgIC8vIEFSTSBlbmNvZGluZyBmb3IgdGhl
IHRvcCB0d28gYml0cyBiZWxvdyB0aGUgc2lnbiBiaXQgaXMgJ3BlY3VsaWFyJy4KICAgICAgICAg
ICAgIGlmIChyZWxhdGl2ZSA+PSAwKQogICAgICAgICAgICAgICAgIHJlbGF0aXZlIF49IDB4QzAw
MDAwOwpAQCAtMTkwNiw2ICsyMDI5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGluc3RydWN0
aW9uWy0yXSA9IE9QX0JfVDRhIHwgKChyZWxhdGl2ZSAmIDB4MTAwMDAwMCkgPj4gMTQpIHwgKChy
ZWxhdGl2ZSAmIDB4M2ZmMDAwKSA+PiAxMik7CiAgICAgICAgICAgICBpbnN0cnVjdGlvblstMV0g
PSBPUF9CX1Q0YiB8ICgocmVsYXRpdmUgJiAweDgwMDAwMCkgPj4gMTApIHwgKChyZWxhdGl2ZSAm
IDB4NDAwMDAwKSA+PiAxMSkgfCAoKHJlbGF0aXZlICYgMHhmZmUpID4+IDEpOwogICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgY29uc3QgdWludDE2X3QgSlVNUF9URU1QT1JBUllfUkVHSVNU
RVIgPSBBUk1SZWdpc3RlcnM6OmlwOwogICAgICAgICAgICAgQVJNVGh1bWJJbW1lZGlhdGUgbG8x
NiA9IEFSTVRodW1iSW1tZWRpYXRlOjptYWtlVUludDE2KHN0YXRpY19jYXN0PHVpbnQxNl90Pihy
ZWludGVycHJldF9jYXN0PHVpbnQzMl90Pih0YXJnZXQpICsgMSkpOwogICAgICAgICAgICAgQVJN
VGh1bWJJbW1lZGlhdGUgaGkxNiA9IEFSTVRodW1iSW1tZWRpYXRlOjptYWtlVUludDE2KHN0YXRp
Y19jYXN0PHVpbnQxNl90PihyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pih0YXJnZXQpID4+IDE2
KSk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvblstNV0gPSB0d29Xb3JkT3A1aTZJbW00UmVnNEVu
Y29kZWRJbW1GaXJzdChPUF9NT1ZfaW1tX1QzLCBsbzE2KTsKQEAgLTE5MjAsNiArMjA0NCw3IEBA
IHByaXZhdGU6CiAgICAgewogICAgICAgICByZXR1cm4gb3AgfCAoaW1tLm1fdmFsdWUuaSA8PCAx
MCkgfCBpbW0ubV92YWx1ZS5pbW00OwogICAgIH0KKwogICAgIHN0YXRpYyB1aW50MTZfdCB0d29X
b3JkT3A1aTZJbW00UmVnNEVuY29kZWRJbW1TZWNvbmQodWludDE2X3QgcmQsIEFSTVRodW1iSW1t
ZWRpYXRlIGltbSkKICAgICB7CiAgICAgICAgIHJldHVybiAoaW1tLm1fdmFsdWUuaW1tMyA8PCAx
MikgfCAocmQgPDwgOCkgfCBpbW0ubV92YWx1ZS5pbW04OwpAQCAtMjAzNiw2ICsyMTYxLDcgQEAg
cHJpdmF0ZToKICAgICB9IG1fZm9ybWF0dGVyOwogCiAgICAgVmVjdG9yPExpbmtSZWNvcmQ+IG1f
anVtcHNUb0xpbms7CisgICAgVmVjdG9yPGludDMyX3Q+IG1fb2Zmc2V0czsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIuaCBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmgKaW5kZXggYWFiOTA4OTU3ZWNkMDM2MTFiYzAwNDE0ZGI1NjRiZWQ4NWQx
N2RiNy4uNWRiMmNiOWZjZDhiZDlhY2NlZDk0MzI4NzY2Y2RiMmM3MTg0MWRiZiAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCkBAIC00
MTgsMTIgKzQxOCw2IEBAIHB1YmxpYzoKIAogCiAgICAgLy8gU2VjdGlvbiAzOiBNaXNjIGFkbWlu
IG1ldGhvZHMKLQotICAgIHN0YXRpYyBDb2RlUHRyIHRyYW1wb2xpbmVBdChDb2RlUmVmIHJlZiwg
TGFiZWwgbGFiZWwpCi0gICAgewotICAgICAgICByZXR1cm4gQ29kZVB0cihBc3NlbWJsZXJUeXBl
OjpnZXRSZWxvY2F0ZWRBZGRyZXNzKHJlZi5tX2NvZGUuZGF0YUxvY2F0aW9uKCksIGxhYmVsLm1f
bGFiZWwpKTsKLSAgICB9Ci0KICAgICBzaXplX3Qgc2l6ZSgpCiAgICAgewogICAgICAgICByZXR1
cm4gbV9hc3NlbWJsZXIuc2l6ZSgpOwpAQCAtNDc5LDYgKzQ3Myw5IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHJldHVybiBBc3NlbWJsZXJUeXBlOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVs
cyhmcm9tLm1fbGFiZWwsIHRvLm1fam1wKTsKICAgICB9CisgICAgCisgICAgdm9pZCBiZWdpblVu
aW50ZXJydXB0ZWRTZXF1ZW5jZSgpIHsgfQorICAgIHZvaWQgZW5kVW5pbnRlcnJ1cHRlZFNlcXVl
bmNlKCkgeyB9CiAKIHByb3RlY3RlZDoKICAgICBBc3NlbWJsZXJUeXBlIG1fYXNzZW1ibGVyOwpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaCBiL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKaW5kZXggMjIxZmExMzU1NTE2MGFkNTAy
Y2I4MGJlNGY1NzZiMDZiY2EzMmIwNy4uNjI0ZDFjYzAzOWMwMTYzZWFlY2I1YjNmNTE4YmNjYjQz
ZmQyNWVkZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
aAorKysgYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCkBAIC00OSwxMiAr
NDksMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAvLwogY2xhc3MgTGlua0J1ZmZlciA6IHB1YmxpYyBO
b25jb3B5YWJsZSB7CiAgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgQ29kZVJlZjsK
KyAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBDb2RlUHRyOwogICAgIHR5cGVkZWYg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIExhYmVsOwogICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgSnVtcDsKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBKdW1wTGlz
dDsKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyOjpDYWxsIENhbGw7CiAgICAgdHlwZWRlZiBN
YWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsMzIgRGF0YUxhYmVsMzI7CiAgICAgdHlwZWRlZiBNYWNy
b0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIERhdGFMYWJlbFB0cjsKKyAgICB0eXBlZGVmIE1hY3Jv
QXNzZW1ibGVyOjpKbXBEc3QgSm1wRHN0OworI2lmIEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikK
KyAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyOjpMaW5rUmVjb3JkIExpbmtSZWNvcmQ7CisgICAg
dHlwZWRlZiBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpbmtUeXBlIEp1bXBMaW5rVHlwZTsKKyNlbmRp
ZgogCiAgICAgZW51bSBMaW5rQnVmZmVyU3RhdGUgewogICAgICAgICBTdGF0ZUluaXQsCkBAIC02
NiwxNCArNzIsMTcgQEAgcHVibGljOgogICAgIC8vIE5vdGU6IEluaXRpYWxpemF0aW9uIHNlcXVl
bmNlIGlzIHNpZ25pZmljYW50LCBzaW5jZSBleGVjdXRhYmxlUG9vbCBpcyBhIFBhc3NSZWZQdHIu
CiAgICAgLy8gICAgICAgRmlyc3QsIGV4ZWN1dGFibGVQb29sIGlzIGNvcGllZCBpbnRvIG1fZXhl
Y3V0YWJsZVBvb2wsIHRoZW4gdGhlIGluaXRpYWxpemF0aW9uIG9mCiAgICAgLy8gICAgICAgbV9j
b2RlIHVzZXMgbV9leGVjdXRhYmxlUG9vbCwgKm5vdCogZXhlY3V0YWJsZVBvb2wsIHNpbmNlIHRo
aXMgaXMgbm8gbG9uZ2VyIHZhbGlkLgotICAgIExpbmtCdWZmZXIoTWFjcm9Bc3NlbWJsZXIqIG1h
c20sIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sKQorICAgIC8vIFRo
ZSBsaW5rT2Zmc2V0IHBhcmFtZXRlciBzaG91bGQgb25seSBiZSBub24tbnVsbCB3aGVuIHJlY29t
cGlsaW5nIGZvciBleGNlcHRpb24gaW5mbworICAgIExpbmtCdWZmZXIoTWFjcm9Bc3NlbWJsZXIq
IG1hc20sIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCB2b2lkKiBs
aW5rT2Zmc2V0KQogICAgICAgICA6IG1fZXhlY3V0YWJsZVBvb2woZXhlY3V0YWJsZVBvb2wpCi0g
ICAgICAgICwgbV9jb2RlKG1hc20tPm1fYXNzZW1ibGVyLmV4ZWN1dGFibGVDb3B5KG1fZXhlY3V0
YWJsZVBvb2wuZ2V0KCkpKQotICAgICAgICAsIG1fc2l6ZShtYXNtLT5tX2Fzc2VtYmxlci5zaXpl
KCkpCisgICAgICAgICwgbV9zaXplKDApCisgICAgICAgICwgbV9jb2RlKDApCisgICAgICAgICwg
bV9hc3NlbWJsZXIobWFzbSkKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9zdGF0ZShTdGF0
ZUluaXQpCiAjZW5kaWYKICAgICB7CisgICAgICAgIGxpbmtDb2RlKGxpbmtPZmZzZXQpOwogICAg
IH0KIAogICAgIH5MaW5rQnVmZmVyKCkKQEAgLTk3LDI4ICsxMDYsMzIgQEAgcHVibGljOgogICAg
IHZvaWQgbGluayhDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6OkxpbmthYmxlKSk7CisgICAgICAgIGNhbGwu
bV9qbXAgPSBhcHBseU9mZnNldChjYWxsLm1fam1wKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OmxpbmtDYWxsKGNvZGUoKSwgY2FsbCwgZnVuY3Rpb24pOwogICAgIH0KICAgICAKICAgICB2b2lk
IGxpbmsoSnVtcCBqdW1wLCBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCkKICAgICB7CisgICAgICAg
IGp1bXAubV9qbXAgPSBhcHBseU9mZnNldChqdW1wLm1fam1wKTsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OmxpbmtKdW1wKGNvZGUoKSwganVtcCwgbGFiZWwpOwogICAgIH0KIAogICAgIHZvaWQg
bGluayhKdW1wTGlzdCBsaXN0LCBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCkKICAgICB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0Lm1fanVtcHMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6bGlua0p1bXAoY29kZSgpLCBsaXN0Lm1fanVtcHNb
aV0sIGxhYmVsKTsKKyAgICAgICAgICAgIGxpbmsobGlzdC5tX2p1bXBzW2ldLCBsYWJlbCk7CiAg
ICAgfQogCiAgICAgdm9pZCBwYXRjaChEYXRhTGFiZWxQdHIgbGFiZWwsIHZvaWQqIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNvZGUoKSwgbGFiZWwu
bV9sYWJlbCwgdmFsdWUpOworICAgICAgICBKbXBEc3QgdGFyZ2V0ID0gYXBwbHlPZmZzZXQobGFi
ZWwubV9sYWJlbCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpsaW5rUG9pbnRlcihjb2RlKCks
IHRhcmdldCwgdmFsdWUpOwogICAgIH0KIAogICAgIHZvaWQgcGF0Y2goRGF0YUxhYmVsUHRyIGxh
YmVsLCBDb2RlTG9jYXRpb25MYWJlbCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpsaW5rUG9pbnRlcihjb2RlKCksIGxhYmVsLm1fbGFiZWwsIHZhbHVlLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOworICAgICAgICBKbXBEc3QgdGFyZ2V0ID0gYXBwbHlPZmZzZXQobGFiZWwubV9s
YWJlbCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpsaW5rUG9pbnRlcihjb2RlKCksIHRhcmdl
dCwgdmFsdWUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQogCiAgICAgLy8gVGhlc2UgbWV0
aG9kcyBhcmUgdXNlZCB0byBvYnRhaW4gaGFuZGxlcyB0byBhbGxvdyB0aGUgY29kZSB0byBiZSBy
ZWxpbmtlZCAvIHJlcGF0Y2hlZCBsYXRlci4KQEAgLTEyNywzNSArMTQwLDM2IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpMaW5rYWJsZSkpOwog
ICAgICAgICBBU1NFUlQoIWNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKTsKLSAgICAgICAgcmV0
dXJuIENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29k
ZSgpLCBjYWxsLm1fam1wKSk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25DYWxsKE1hY3Jv
QXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQoY2FsbC5tX2pt
cCkpKTsKICAgICB9CiAKICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBsb2NhdGlvbk9mTmVhckNh
bGwoQ2FsbCBjYWxsKQogICAgIHsKICAgICAgICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6
OkxpbmthYmxlKSk7CiAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSk7
Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25OZWFyQ2FsbChNYWNyb0Fzc2VtYmxlcjo6Z2V0
TGlua2VyQWRkcmVzcyhjb2RlKCksIGNhbGwubV9qbXApKTsKKyAgICAgICAgcmV0dXJuIENvZGVM
b2NhdGlvbk5lYXJDYWxsKE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwg
YXBwbHlPZmZzZXQoY2FsbC5tX2ptcCkpKTsKICAgICB9CiAKICAgICBDb2RlTG9jYXRpb25MYWJl
bCBsb2NhdGlvbk9mKExhYmVsIGxhYmVsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIENvZGVMb2Nh
dGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwgbGFiZWwu
bV9sYWJlbCkpOworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJs
ZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVsKSkp
OwogICAgIH0KIAogICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBsb2NhdGlvbk9mKERhdGFM
YWJlbFB0ciBsYWJlbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHIoTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBsYWJlbC5tX2xh
YmVsKSk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIoTWFjcm9Bc3Nl
bWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVs
KSkpOwogICAgIH0KIAogICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIGxvY2F0aW9uT2YoRGF0
YUxhYmVsMzIgbGFiZWwpCiAgICAgewotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxh
YmVsMzIoTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBsYWJlbC5tX2xh
YmVsKSk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMihNYWNyb0Fzc2Vt
Ymxlcjo6Z2V0TGlua2VyQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0KGxhYmVsLm1fbGFiZWwp
KSk7CiAgICAgfQogCiAgICAgLy8gVGhpcyBtZXRob2Qgb2J0YWlucyB0aGUgcmV0dXJuIGFkZHJl
c3Mgb2YgdGhlIGNhbGwsIGdpdmVuIGFzIGFuIG9mZnNldCBmcm9tCiAgICAgLy8gdGhlIHN0YXJ0
IG9mIHRoZSBjb2RlLgogICAgIHVuc2lnbmVkIHJldHVybkFkZHJlc3NPZmZzZXQoQ2FsbCBjYWxs
KQogICAgIHsKKyAgICAgICAgY2FsbC5tX2ptcCA9IGFwcGx5T2Zmc2V0KGNhbGwubV9qbXApOwog
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckNhbGxSZXR1cm5PZmZzZXQo
Y2FsbCk7CiAgICAgfQogCkBAIC0xNjksNiArMTgzLDcgQEAgcHVibGljOgogCiAgICAgICAgIHJl
dHVybiBDb2RlUmVmKG1fY29kZSwgbV9leGVjdXRhYmxlUG9vbCwgbV9zaXplKTsKICAgICB9CisK
ICAgICBDb2RlTG9jYXRpb25MYWJlbCBmaW5hbGl6ZUNvZGVBZGRlbmR1bSgpCiAgICAgewogICAg
ICAgICBwZXJmb3JtRmluYWxpemF0aW9uKCk7CkBAIC0xNzYsNyArMTkxLDIwIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKGNvZGUoKSk7CiAgICAgfQogCisgICAg
Q29kZVB0ciB0cmFtcG9saW5lQXQoTGFiZWwgbGFiZWwpCisgICAgeworICAgICAgICByZXR1cm4g
Q29kZVB0cihNYWNyb0Fzc2VtYmxlcjo6QXNzZW1ibGVyVHlwZV9UOjpnZXRSZWxvY2F0ZWRBZGRy
ZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQobGFiZWwubV9sYWJlbCkpKTsKKyAgICB9CisKIHByaXZh
dGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFQgYXBwbHlPZmZzZXQoVCBzcmMpCisgICAg
eworI2lmIEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKKyAgICAgICAgc3JjLm1fb2Zmc2V0IC09
IG1fYXNzZW1ibGVyLT5leGVjdXRhYmxlT2Zmc2V0Rm9yKHNyYy5tX29mZnNldCk7CisjZW5kaWYK
KyAgICAgICAgcmV0dXJuIHNyYzsKKyAgICB9CisgICAgCiAgICAgLy8gS2VlcCB0aGlzIHByaXZh
dGUhIC0gdGhlIHVuZGVybHlpbmcgY29kZSBzaG91bGQgb25seSBiZSBvYnRhaW5lZCBleHRlcm5h
bGx5IHZpYSAKICAgICAvLyBmaW5hbGl6ZUNvZGUoKSBvciBmaW5hbGl6ZUNvZGVBZGRlbmR1bSgp
LgogICAgIHZvaWQqIGNvZGUoKQpAQCAtMTg0LDYgKzIxMiw3NSBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gbV9jb2RlOwogICAgIH0KIAorICAgIHZvaWQgbGlua0NvZGUodm9pZCogbGlua09m
ZnNldCkKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShsaW5rT2Zmc2V0KTsKKyAgICAgICAg
QVNTRVJUKCFtX2NvZGUpOworI2lmICFFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCisgICAgICAg
IG1fY29kZSA9IG1fYXNzZW1ibGVyLT5tX2Fzc2VtYmxlci5leGVjdXRhYmxlQ29weShtX2V4ZWN1
dGFibGVQb29sLmdldCgpKTsKKyAgICAgICAgbV9zaXplID0gbV9hc3NlbWJsZXItPnNpemUoKTsK
KyNlbHNlCisgICAgICAgIHNpemVfdCBpbml0aWFsU2l6ZSA9IG1fYXNzZW1ibGVyLT5zaXplKCk7
CisgICAgICAgIG1fY29kZSA9ICh1aW50OF90KiltX2V4ZWN1dGFibGVQb29sLT5hbGxvYyhpbml0
aWFsU2l6ZSk7CisgICAgICAgIGlmICghbV9jb2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlV3JpdGFibGUobV9jb2RlLCBtX2Fzc2VtYmxl
ci0+c2l6ZSgpKTsKKyAgICAgICAgdWludDhfdCogaW5EYXRhID0gKHVpbnQ4X3QqKW1fYXNzZW1i
bGVyLT51bmxpbmtlZENvZGUoKTsKKyAgICAgICAgdWludDhfdCogb3V0RGF0YSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KG1fY29kZSk7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGxpbmtC
YXNlID0gbGlua09mZnNldCA/IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxpbmtPZmZzZXQp
IDogb3V0RGF0YTsKKyAgICAgICAgaW50IHJlYWRQdHIgPSAwOworICAgICAgICBpbnQgd3JpdGVQ
dHIgPSAwOworICAgICAgICBWZWN0b3I8TGlua1JlY29yZD4mIGp1bXBzVG9MaW5rID0gbV9hc3Nl
bWJsZXItPmp1bXBzVG9MaW5rKCk7CisgICAgICAgIHVuc2lnbmVkIGp1bXBDb3VudCA9IGp1bXBz
VG9MaW5rLnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGp1bXBDb3Vu
dDsgKytpKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZFB0ciAtIHdyaXRlUHRyOwor
ICAgICAgICAgICAgQVNTRVJUKCEob2Zmc2V0ICYgMSkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBDb3B5IHRoZSBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgbGFzdCBqdW1wIHRvIHRoZSBj
dXJyZW50IG9uZS4KKyAgICAgICAgICAgIHNpemVfdCByZWdpb25TaXplID0ganVtcHNUb0xpbmtb
aV0uZnJvbSgpIC0gcmVhZFB0cjsKKyAgICAgICAgICAgIG1lbWNweShvdXREYXRhICsgd3JpdGVQ
dHIsIGluRGF0YSArIHJlYWRQdHIsIHJlZ2lvblNpemUpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXItPnJlY29yZExpbmtPZmZzZXRzKHJlYWRQdHIsIGp1bXBzVG9MaW5rW2ldLmZyb20oKSwgb2Zm
c2V0KTsKKyAgICAgICAgICAgIHJlYWRQdHIgKz0gcmVnaW9uU2l6ZTsKKyAgICAgICAgICAgIHdy
aXRlUHRyICs9IHJlZ2lvblNpemU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIENhbGN1
bGF0ZSBhYnNvbHV0ZSBhZGRyZXNzIG9mIHRoZSBqdW1wIHRhcmdldCwgaW4gdGhlIGNhc2Ugb2Yg
YmFja3dhcmRzCisgICAgICAgICAgICAvLyBicmFuY2hlcyB3ZSBuZWVkIHRvIGJlIHByZWNpc2Us
IGZvcndhcmQgYnJhbmNoZXMgd2UgYXJlIHBlc3NpbWlzdGljCisgICAgICAgICAgICBjb25zdCB1
aW50OF90KiB0YXJnZXQ7CisgICAgICAgICAgICBpZiAoanVtcHNUb0xpbmtbaV0udG8oKSA+PSBq
dW1wc1RvTGlua1tpXS5mcm9tKCkpCisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbGlua0Jhc2Ug
KyBqdW1wc1RvTGlua1tpXS50bygpIC0gb2Zmc2V0OyAvLyBDb21wZW5zYXRlIGZvciB3aGF0IHdl
IGhhdmUgY29sbGFwc2VkIHNvIGZhcgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHRhcmdldCA9IGxpbmtCYXNlICsganVtcHNUb0xpbmtbaV0udG8oKSAtIG1fYXNzZW1ibGVyLT5l
eGVjdXRhYmxlT2Zmc2V0Rm9yKGp1bXBzVG9MaW5rW2ldLnRvKCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBKdW1wTGlua1R5cGUganVtcExpbmtUeXBlID0gbV9hc3NlbWJsZXItPmNvbXB1
dGVKdW1wVHlwZShqdW1wc1RvTGlua1tpXSwgbGlua0Jhc2UgKyB3cml0ZVB0ciwgdGFyZ2V0KTsK
KworICAgICAgICAgICAgLy8gU3RlcCBiYWNrIGluIHRoZSB3cml0ZSBzdHJlYW0KKyAgICAgICAg
ICAgIGludDMyX3QgZGVsdGEgPSBtX2Fzc2VtYmxlci0+anVtcFNpemVEZWx0YShqdW1wTGlua1R5
cGUpOworICAgICAgICAgICAgaWYgKGRlbHRhKSB7CisgICAgICAgICAgICAgICAgd3JpdGVQdHIg
LT0gZGVsdGE7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXItPnJlY29yZExpbmtPZmZzZXRz
KGp1bXBzVG9MaW5rW2ldLmZyb20oKSAtIGRlbHRhLCByZWFkUHRyLCByZWFkUHRyIC0gd3JpdGVQ
dHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAganVtcHNUb0xpbmtbaV0uc2V0RnJvbSh3
cml0ZVB0cik7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29weSBldmVyeXRoaW5nIGFmdGVyIHRo
ZSBsYXN0IGp1bXAKKyAgICAgICAgbWVtY3B5KG91dERhdGEgKyB3cml0ZVB0ciwgaW5EYXRhICsg
cmVhZFB0ciwgbV9hc3NlbWJsZXItPnNpemUoKSAtIHJlYWRQdHIpOworICAgICAgICBtX2Fzc2Vt
Ymxlci0+cmVjb3JkTGlua09mZnNldHMocmVhZFB0ciwgbV9hc3NlbWJsZXItPnNpemUoKSwgcmVh
ZFB0ciAtIHdyaXRlUHRyKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFjdHVhbGx5IGxpbmsgZXZl
cnl0aGluZyAoZG9uJ3QgbGluayBpZiB3ZSd2ZSBiZSBnaXZlbiBhIGxpbmtvZmZzZXQgYXMgaXQn
cyBhCisgICAgICAgIC8vIHdhc3RlIG9mIHRpbWU6IGxpbmtPZmZzZXQgaXMgdXNlZCBmb3IgcmVj
b21waWxpbmcgdG8gZ2V0IGV4Y2VwdGlvbiBpbmZvKQorICAgICAgICBpZiAoIWxpbmtPZmZzZXQp
IHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqdW1wQ291bnQ7ICsraSkg
eworICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGxvY2F0aW9uID0gb3V0RGF0YSArIGp1bXBzVG9M
aW5rW2ldLmZyb20oKTsKKyAgICAgICAgICAgICAgICB1aW50OF90KiB0YXJnZXQgPSBvdXREYXRh
ICsganVtcHNUb0xpbmtbaV0udG8oKSAtIG1fYXNzZW1ibGVyLT5leGVjdXRhYmxlT2Zmc2V0Rm9y
KGp1bXBzVG9MaW5rW2ldLnRvKCkpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLT5saW5r
KGp1bXBzVG9MaW5rW2ldLCBsb2NhdGlvbiwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGp1bXBzVG9MaW5rLmNsZWFyKCk7CisgICAgICAgIG1fc2l6ZSA9IHdy
aXRlUHRyICsgbV9hc3NlbWJsZXItPnNpemUoKSAtIHJlYWRQdHI7CisgICAgICAgIG1fZXhlY3V0
YWJsZVBvb2wtPnJldHVybkxhc3RCeXRlcyhpbml0aWFsU2l6ZSAtIG1fc2l6ZSk7CisjZW5kaWYK
KyAgICB9CisKICAgICB2b2lkIHBlcmZvcm1GaW5hbGl6YXRpb24oKQogICAgIHsKICNpZm5kZWYg
TkRFQlVHCkBAIC0xOTYsOCArMjkzLDkgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBSZWZQdHI8
RXhlY3V0YWJsZVBvb2w+IG1fZXhlY3V0YWJsZVBvb2w7Ci0gICAgdm9pZCogbV9jb2RlOwogICAg
IHNpemVfdCBtX3NpemU7CisgICAgdm9pZCogbV9jb2RlOworICAgIE1hY3JvQXNzZW1ibGVyKiBt
X2Fzc2VtYmxlcjsKICNpZm5kZWYgTkRFQlVHCiAgICAgTGlua0J1ZmZlclN0YXRlIG1fc3RhdGU7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTXY3LmggYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12
Ny5oCmluZGV4IDY0NTEzZmRlMzk0ZGE0ZTM0ODI3MDJhNGY4MjM0N2UzMjkyMTE4YWIuLmJlZjk1
MTZlNTIxMTY1YWU3YjVhOGE5ODljYjdiNTFlNWQ5OTU2YWYgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKKysrIGIvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaApAQCAtNDUsNiArNDUsMjMgQEAgY2xh
c3MgTWFjcm9Bc3NlbWJsZXJBUk12NyA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFS
TXY3QXNzZW1ibGVyPiB7CiAgICAgaW5saW5lIEFSTVJlZ2lzdGVyczo6RlBTaW5nbGVSZWdpc3Rl
cklEIGZwVGVtcFJlZ2lzdGVyQXNTaW5nbGUoKSB7IHJldHVybiBBUk1SZWdpc3RlcnM6OmFzU2lu
Z2xlKGZwVGVtcFJlZ2lzdGVyKTsgfQogCiBwdWJsaWM6CisgICAgdHlwZWRlZiBBUk12N0Fzc2Vt
Ymxlcjo6TGlua1JlY29yZCBMaW5rUmVjb3JkOworICAgIHR5cGVkZWYgQVJNdjdBc3NlbWJsZXI6
Okp1bXBMaW5rVHlwZSBKdW1wTGlua1R5cGU7CisKKyAgICBNYWNyb0Fzc2VtYmxlckFSTXY3KCkK
KyAgICAgICAgOiBtX2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKGZhbHNlKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgdm9pZCBiZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpIHsgbV9pblVuaW50
ZXJydXB0ZWRTZXF1ZW5jZSA9IHRydWU7IH0KKyAgICB2b2lkIGVuZFVuaW50ZXJydXB0ZWRTZXF1
ZW5jZSgpIHsgbV9pblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSA9IGZhbHNlOyB9CisgICAgVmVjdG9y
PExpbmtSZWNvcmQ+JiBqdW1wc1RvTGluaygpIHsgcmV0dXJuIG1fYXNzZW1ibGVyLmp1bXBzVG9M
aW5rKCk7IH0KKyAgICB2b2lkKiB1bmxpbmtlZENvZGUoKSB7IHJldHVybiBtX2Fzc2VtYmxlci51
bmxpbmtlZENvZGUoKTsgfQorICAgIEp1bXBMaW5rVHlwZSBjb21wdXRlSnVtcFR5cGUoTGlua1Jl
Y29yZCYgcmVjb3JkLCBjb25zdCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiB0bykgeyBy
ZXR1cm4gbV9hc3NlbWJsZXIuY29tcHV0ZUp1bXBUeXBlKHJlY29yZCwgZnJvbSwgdG8pOyB9Cisg
ICAgdm9pZCByZWNvcmRMaW5rT2Zmc2V0cyhpbnQzMl90IHJlZ2lvblN0YXJ0LCBpbnQzMl90IHJl
Z2lvbkVuZCwgaW50MzJfdCBvZmZzZXQpIHtyZXR1cm4gbV9hc3NlbWJsZXIucmVjb3JkTGlua09m
ZnNldHMocmVnaW9uU3RhcnQsIHJlZ2lvbkVuZCwgb2Zmc2V0KTsgfQorICAgIGludCBqdW1wU2l6
ZURlbHRhKEp1bXBMaW5rVHlwZSBqdW1wTGlua1R5cGUpIHsgcmV0dXJuIG1fYXNzZW1ibGVyLmp1
bXBTaXplRGVsdGEoanVtcExpbmtUeXBlKTsgfQorICAgIHZvaWQgbGluayhMaW5rUmVjb3JkJiBy
ZWNvcmQsIHVpbnQ4X3QqIGZyb20sIHVpbnQ4X3QqIHRvKSB7IHJldHVybiBtX2Fzc2VtYmxlci5s
aW5rKHJlY29yZCwgZnJvbSwgdG8pOyB9CisKICAgICBzdHJ1Y3QgQXJtQWRkcmVzcyB7CiAgICAg
ICAgIGVudW0gQWRkcmVzc1R5cGUgewogICAgICAgICAgICAgSGFzT2Zmc2V0LApAQCAtOTY5LDE0
ICs5ODYsMTQgQEAgcHVibGljOgogCiAgICAgdm9pZCBqdW1wKFJlZ2lzdGVySUQgdGFyZ2V0KQog
ICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuYngodGFyZ2V0KTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuYngodGFyZ2V0LCBpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpID8gQVJNdjdBc3NlbWJsZXI6
Okp1bXBGdWxsU2l6ZSA6IEFSTXY3QXNzZW1ibGVyOjpKdW1wTm9Db25kaXRpb24pOwogICAgIH0K
IAogICAgIC8vIEFkZHJlc3MgaXMgYSBtZW1vcnkgbG9jYXRpb24gY29udGFpbmluZyB0aGUgYWRk
cmVzcyB0byBqdW1wIHRvCiAgICAgdm9pZCBqdW1wKEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAg
ICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKLSAgICAgICAgbV9hc3Nl
bWJsZXIuYngoZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmJ4KGRhdGFU
ZW1wUmVnaXN0ZXIsIGluVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKCkgPyBBUk12N0Fzc2VtYmxlcjo6
SnVtcEZ1bGxTaXplIDogQVJNdjdBc3NlbWJsZXI6Okp1bXBOb0NvbmRpdGlvbik7CiAgICAgfQog
CiAKQEAgLTEwMTIsNyArMTAyOSw3IEBAIHB1YmxpYzoKIAogICAgIEp1bXAgYnJhbmNoTXVsMzIo
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewot
ICAgICAgICBBU1NFUlQoY29uZCA9PSBPdmVyZmxvdyk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
Y29uZCwgY29uZCA9PSBPdmVyZmxvdyk7CiAgICAgICAgIG1fYXNzZW1ibGVyLnNtdWxsKGRlc3Qs
IGRhdGFUZW1wUmVnaXN0ZXIsIGRlc3QsIHNyYyk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFzcihh
ZGRyZXNzVGVtcFJlZ2lzdGVyLCBkZXN0LCAzMSk7CiAgICAgICAgIHJldHVybiBicmFuY2gzMihO
b3RFcXVhbCwgYWRkcmVzc1RlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rlcik7CkBAIC0xMDIw
LDcgKzEwMzcsNyBAQCBwdWJsaWM6CiAKICAgICBKdW1wIGJyYW5jaE11bDMyKENvbmRpdGlvbiBj
b25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewot
ICAgICAgICBBU1NFUlQoY29uZCA9PSBPdmVyZmxvdyk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
Y29uZCwgY29uZCA9PSBPdmVyZmxvdyk7CiAgICAgICAgIG1vdmUoaW1tLCBkYXRhVGVtcFJlZ2lz
dGVyKTsKICAgICAgICAgbV9hc3NlbWJsZXIuc211bGwoZGVzdCwgZGF0YVRlbXBSZWdpc3Rlciwg
c3JjLCBkYXRhVGVtcFJlZ2lzdGVyKTsKICAgICAgICAgbV9hc3NlbWJsZXIuYXNyKGFkZHJlc3NU
ZW1wUmVnaXN0ZXIsIGRlc3QsIDMxKTsKQEAgLTEwNTcsMzcgKzEwNzQsMzcgQEAgcHVibGljOgog
CiAgICAgLy8gTWlzY2VsbGFuZW91cyBvcGVyYXRpb25zOgogCi0gICAgdm9pZCBicmVha3BvaW50
KCkKKyAgICB2b2lkIGJyZWFrcG9pbnQodWludDhfdCBpbW0gPSAwKQogICAgIHsKLSAgICAgICAg
bV9hc3NlbWJsZXIuYmtwdCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ia3B0KGltbSk7CiAgICAg
fQogCiAgICAgQ2FsbCBuZWFyQ2FsbCgpCiAgICAgewogICAgICAgICBtb3ZlRml4ZWRXaWR0aEVu
Y29kaW5nKEltbTMyKDApLCBkYXRhVGVtcFJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIENhbGwo
bV9hc3NlbWJsZXIuYmx4KGRhdGFUZW1wUmVnaXN0ZXIpLCBDYWxsOjpMaW5rYWJsZU5lYXIpOwor
ICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5ibHgoZGF0YVRlbXBSZWdpc3RlciwgQVJN
djdBc3NlbWJsZXI6Okp1bXBGdWxsU2l6ZSksIENhbGw6OkxpbmthYmxlTmVhcik7CiAgICAgfQog
CiAgICAgQ2FsbCBjYWxsKCkKICAgICB7CiAgICAgICAgIG1vdmVGaXhlZFdpZHRoRW5jb2Rpbmco
SW1tMzIoMCksIGRhdGFUZW1wUmVnaXN0ZXIpOwotICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2Vt
Ymxlci5ibHgoZGF0YVRlbXBSZWdpc3RlciksIENhbGw6OkxpbmthYmxlKTsKKyAgICAgICAgcmV0
dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KGRhdGFUZW1wUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVy
OjpKdW1wRnVsbFNpemUpLCBDYWxsOjpMaW5rYWJsZSk7CiAgICAgfQogCiAgICAgQ2FsbCBjYWxs
KFJlZ2lzdGVySUQgdGFyZ2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJs
ZXIuYmx4KHRhcmdldCksIENhbGw6Ok5vbmUpOworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2Vt
Ymxlci5ibHgodGFyZ2V0LCBBUk12N0Fzc2VtYmxlcjo6SnVtcEZ1bGxTaXplKSwgQ2FsbDo6Tm9u
ZSk7CiAgICAgfQogCiAgICAgQ2FsbCBjYWxsKEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAg
ICAgIGxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIENh
bGwobV9hc3NlbWJsZXIuYmx4KGRhdGFUZW1wUmVnaXN0ZXIpLCBDYWxsOjpOb25lKTsKKyAgICAg
ICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KGRhdGFUZW1wUmVnaXN0ZXIsIEFSTXY3QXNz
ZW1ibGVyOjpKdW1wRnVsbFNpemUpLCBDYWxsOjpOb25lKTsKICAgICB9CiAKICAgICB2b2lkIHJl
dCgpCiAgICAgewotICAgICAgICBtX2Fzc2VtYmxlci5ieChsaW5rUmVnaXN0ZXIpOworICAgICAg
ICBtX2Fzc2VtYmxlci5ieChsaW5rUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRnVsbFNp
emUpOwogICAgIH0KIAogICAgIHZvaWQgc2V0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
bGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQpAQCAtMTE4Nyw3ICsxMjA0
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgLy8gTGlrZSBhIG5vcm1hbCBjYWxsLCBidXQg
ZG9uJ3QgbGluay4KICAgICAgICAgbW92ZUZpeGVkV2lkdGhFbmNvZGluZyhJbW0zMigwKSwgZGF0
YVRlbXBSZWdpc3Rlcik7Ci0gICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmJ4KGRhdGFU
ZW1wUmVnaXN0ZXIpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNz
ZW1ibGVyLmJ4KGRhdGFUZW1wUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRnVsbFNpemUp
LCBDYWxsOjpMaW5rYWJsZSk7CiAgICAgfQogCiAgICAgQ2FsbCBtYWtlVGFpbFJlY3Vyc2l2ZUNh
bGwoSnVtcCBvbGRKdW1wKQpAQCAtMTE5NiwxOSArMTIxMywyOSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiB0YWlsUmVjdXJzaXZlQ2FsbCgpOwogICAgIH0KIAorICAgIAorICAgIGludCBleGVj
dXRhYmxlT2Zmc2V0Rm9yKGludCBsb2NhdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Fz
c2VtYmxlci5leGVjdXRhYmxlT2Zmc2V0Rm9yKGxvY2F0aW9uKTsKKyAgICB9CiAKIHByb3RlY3Rl
ZDoKKyAgICBib29sIGluVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNlOworICAgIH0KKwogICAgIEFSTXY3QXNzZW1i
bGVyOjpKbXBTcmMgbWFrZUp1bXAoKQogICAgIHsKICAgICAgICAgbW92ZUZpeGVkV2lkdGhFbmNv
ZGluZyhJbW0zMigwKSwgZGF0YVRlbXBSZWdpc3Rlcik7Ci0gICAgICAgIHJldHVybiBtX2Fzc2Vt
Ymxlci5ieChkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIG1fYXNzZW1ibGVyLmJ4
KGRhdGFUZW1wUmVnaXN0ZXIsIGluVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKCkgPyBBUk12N0Fzc2Vt
Ymxlcjo6SnVtcEZ1bGxTaXplIDogQVJNdjdBc3NlbWJsZXI6Okp1bXBOb0NvbmRpdGlvbik7CiAg
ICAgfQogCiAgICAgQVJNdjdBc3NlbWJsZXI6OkptcFNyYyBtYWtlQnJhbmNoKEFSTXY3QXNzZW1i
bGVyOjpDb25kaXRpb24gY29uZCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLml0KGNvbmQs
IHRydWUsIHRydWUpOwogICAgICAgICBtb3ZlRml4ZWRXaWR0aEVuY29kaW5nKEltbTMyKDApLCBk
YXRhVGVtcFJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIG1fYXNzZW1ibGVyLmJ4KGRhdGFUZW1w
UmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gbV9hc3NlbWJsZXIuYngoZGF0YVRlbXBSZWdpc3Rl
ciwgaW5VbmludGVycnVwdGVkU2VxdWVuY2UoKSA/IEFSTXY3QXNzZW1ibGVyOjpKdW1wRnVsbFNp
emUgOiBBUk12N0Fzc2VtYmxlcjo6SnVtcENvbmRpdGlvbiwgY29uZCk7CiAgICAgfQogICAgIEFS
TXY3QXNzZW1ibGVyOjpKbXBTcmMgbWFrZUJyYW5jaChDb25kaXRpb24gY29uZCkgeyByZXR1cm4g
bWFrZUJyYW5jaChhcm1WN0NvbmRpdGlvbihjb25kKSk7IH0KICAgICBBUk12N0Fzc2VtYmxlcjo6
Sm1wU3JjIG1ha2VCcmFuY2goRG91YmxlQ29uZGl0aW9uIGNvbmQpIHsgcmV0dXJuIG1ha2VCcmFu
Y2goYXJtVjdDb25kaXRpb24oY29uZCkpOyB9CkBAIC0xMjk4LDYgKzEzMjUsOCBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgQVJNdjdBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9j
YXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQorICAgIAor
ICAgIGJvb2wgbV9pblVuaW50ZXJydXB0ZWRTZXF1ZW5jZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
aCBiL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKaW5kZXggOTFjNDFk
YzEyNTRiM2M3OWI1MzVlNzA5YjA3MjAxN2MzMWFiOTU2My4uYjYwZDU5MTBmYjEwODJiZWQ3YWVh
YWM3NDhiNGMyZGRiZGNmNzMxMSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3IuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5oCkBAIC0xMjgsNiArMTI4LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHBvb2xB
bGxvY2F0ZShuKTsKICAgICB9CiAgICAgCisgICAgdm9pZCByZXR1cm5MYXN0Qnl0ZXMoc2l6ZV90
IGNvdW50KQorICAgIHsKKyAgICAgICAgbV9mcmVlUHRyIC09IGNvdW50OworICAgIH0KKwogICAg
IH5FeGVjdXRhYmxlUG9vbCgpCiAgICAgewogICAgICAgICBBbGxvY2F0aW9uTGlzdDo6aXRlcmF0
b3IgZW5kID0gbV9wb29scy5lbmQoKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggZmYwMmMxMjRiNTRiNDMz
OGZjOTc3MzY0YWMwNDQ5OWI4MzI2ZDM1ZS4uY2Q1OTQ0YWI5NjVlZGI2NGY5OWFkNjcxNTQ4MzI3
M2NiNjM4NzdjZCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBjdGlQYXRj
aENhbGxCeVJldHVybkFkZHJlc3MoQ29kZUJsb2NrKiBjb2RlYmxvY2ssIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWQKICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0
dXJuQWRkcmVzcywgbmV3Q2FsbGVlRnVuY3Rpb24pOwogfQogCi1KSVQ6OkpJVChKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrKQorSklUOjpKSVQoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdm9pZCogbGlua2VyT2Zmc2V0
KQogICAgIDogbV9pbnRlcnByZXRlcihnbG9iYWxEYXRhLT5pbnRlcnByZXRlcikKICAgICAsIG1f
Z2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQpAQCAt
ODksNiArODksNyBAQCBKSVQ6OkpJVChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9j
ayogY29kZUJsb2NrKQogICAgICwgbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlcihzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpKQogICAgICwgbV9qdW1wVGFyZ2V0c1Bvc2l0aW9uKDAp
CiAjZW5kaWYKKyAgICAsIG1fbGlua2VyT2Zmc2V0KGxpbmtlck9mZnNldCkKIHsKIH0KIApAQCAt
NTExLDcgKzUxMiw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW5j
dGlvbkVudHJ5QXJpdHlDaGVjaykKICAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFi
bGVQb29sID0gbV9nbG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yLnBvb2xGb3JTaXplKG1f
YXNzZW1ibGVyLnNpemUoKSk7CiAgICAgaWYgKCFleGVjdXRhYmxlUG9vbCkKICAgICAgICAgcmV0
dXJuIEpJVENvZGUoKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHRoaXMsIGV4ZWN1dGFi
bGVQb29sLnJlbGVhc2UoKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih0aGlzLCBleGVj
dXRhYmxlUG9vbC5yZWxlYXNlKCksIG1fbGlua2VyT2Zmc2V0KTsKICAgICBpZiAoIXBhdGNoQnVm
ZmVyLmFsbG9jYXRpb25TdWNjZXNzZnVsKCkpCiAgICAgICAgIHJldHVybiBKSVRDb2RlKCk7CiAK
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAppbmRleCBmM2M0YjZhZmUxNzU2MzJjZTYxNWM0MjdiYzY0NzFmZDVkMWI5NzdhLi40
NTM3NWE4MzEzMjQxZDgwZjYyZmY3ZjQzMzg1MzFmMWY4NTZiYjliIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0x
NzgsNDIgKzE3OCw0MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCiAgICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgSklUQ29kZSBjb21waWxlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIENvZGVQdHIqIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrID0gMCkKKyAg
ICAgICAgc3RhdGljIEpJVENvZGUgY29tcGlsZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBDb2RlUHRyKiBmdW5jdGlvbkVudHJ5QXJpdHlDaGVjaywgdm9p
ZCogb2Zmc2V0QmFzZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVChnbG9iYWxE
YXRhLCBjb2RlQmxvY2spLnByaXZhdGVDb21waWxlKGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrKTsK
KyAgICAgICAgICAgIHJldHVybiBKSVQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrLCBvZmZzZXRCYXNl
KS5wcml2YXRlQ29tcGlsZShmdW5jdGlvbkVudHJ5QXJpdHlDaGVjayk7CiAgICAgICAgIH0KIAog
ICAgICAgICBzdGF0aWMgYm9vbCBjb21waWxlR2V0QnlJZFByb3RvKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUq
IHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIGNv
ZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIGNvZGVCbG9jaywgMCk7
CiAgICAgICAgICAgICByZXR1cm4gaml0LnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKHN0dWJJ
bmZvLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIGNhY2hlZE9m
ZnNldCwgcmV0dXJuQWRkcmVzcywgY2FsbEZyYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0
YXRpYyBib29sIGNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCkKICAgICAgICAgewotICAgICAgICAgICAg
SklUIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdChnbG9i
YWxEYXRhLCBjb2RlQmxvY2ssIDApOwogICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29t
cGlsZUdldEJ5SWRTZWxmTGlzdChzdHViSW5mbywgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgY2Fj
aGVkT2Zmc2V0KTsKICAgICAgICAgfQogICAgICAgICBzdGF0aWMgYm9vbCBjb21waWxlR2V0QnlJ
ZFByb3RvTGlzdChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRP
ZmZzZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJs
b2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrLCAwKTsKICAg
ICAgICAgICAgIHJldHVybiBqaXQucHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0KHN0dWJJ
bmZvLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIGNhY2hlZE9m
ZnNldCwgY2FsbEZyYW1lKTsKICAgICAgICAgfQogICAgICAgICBzdGF0aWMgYm9vbCBjb21waWxl
R2V0QnlJZENoYWluTGlzdChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291
bnQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNp
emVfdCBjYWNoZWRPZmZzZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFs
RGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJs
b2NrLCAwKTsKICAgICAgICAgICAgIHJldHVybiBqaXQucHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hh
aW5MaXN0KHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIGNoYWluLCBjb3VudCwgaWRlbnQsIHNsb3QsIGNh
Y2hlZE9mZnNldCwgY2FsbEZyYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBib29s
IGNvbXBpbGVHZXRCeUlkQ2hhaW4oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90
IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAg
ICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrLCAwKTsKICAgICAgICAgICAg
IHJldHVybiBqaXQucHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oc3R1YkluZm8sIHN0cnVjdHVy
ZSwgY2hhaW4sIGNvdW50LCBpZGVudCwgc2xvdCwgY2FjaGVkT2Zmc2V0LCByZXR1cm5BZGRyZXNz
LCBjYWxsRnJhbWUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgYm9vbCBj
b21waWxlUHV0QnlJZFRyYW5zaXRpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQs
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBi
b29sIGRpcmVjdCkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCBj
b2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2ssIDAp
OwogICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9u
KHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY2FjaGVkT2Zmc2V0LCBjaGFp
biwgcmV0dXJuQWRkcmVzcywgZGlyZWN0KTsKICAgICAgICAgfQogCkBAIC0yMjEsNyArMjIxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0
YS0+Y2FuVXNlSklUKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgSklU
IGppdChnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgMCwgMCk7
CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoZXhl
Y3V0YWJsZVBvb2wsIGdsb2JhbERhdGEsIHRyYW1wb2xpbmVzKTsKICAgICAgICAgfQogCkBAIC0y
MjksNyArMjI5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGlm
ICghZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVQ
dHIoKTsKLSAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBKSVQg
aml0KGdsb2JhbERhdGEsIDAsIDApOwogICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29t
cGlsZUNUSU5hdGl2ZUNhbGwoZXhlY3V0YWJsZVBvb2wsIGdsb2JhbERhdGEsIGZ1bmMpOwogICAg
ICAgICB9CiAKQEAgLTIzOSw3ICsyMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBz
dGF0aWMgYm9vbCBjb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKICAgICAgICAgewotICAgICAgICAgICAg
SklUIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdChnbG9i
YWxEYXRhLCBjb2RlQmxvY2ssIDApOwogICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29t
cGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoc3R1YkluZm8sIHJldHVybkFkZHJlc3MpOwogICAgICAg
ICB9CiAKQEAgLTI1OSw3ICsyNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfTsKIAotICAgICAgICBKSVQoSlNHbG9iYWxEYXRhKiwgQ29kZUJsb2NrKiA9IDAp
OworICAgICAgICBKSVQoSlNHbG9iYWxEYXRhKiwgQ29kZUJsb2NrKiwgdm9pZCopOwogCiAgICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVD
b21waWxlTGlua1Bhc3MoKTsKQEAgLTY2NiwxNiArNjY2LDE2IEBAIG5hbWVzcGFjZSBKU0Mgewog
I2VuZGlmCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAotI2lmIGRlZmluZWQoQVNTRU1C
TEVSX0hBU19DT05TVEFOVF9QT09MKSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wKLSNk
ZWZpbmUgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShuYW1lKSBiZWdpblVuaW50ZXJydXB0
ZWRTZXF1ZW5jZShuYW1lICMjIEluc3RydWN0aW9uU3BhY2UsIG5hbWUgIyMgQ29uc3RhbnRTcGFj
ZSkKLSNkZWZpbmUgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0UobmFtZSkgZW5kVW5pbnRlcnJ1
cHRlZFNlcXVlbmNlKG5hbWUgIyMgSW5zdHJ1Y3Rpb25TcGFjZSwgbmFtZSAjIyBDb25zdGFudFNw
YWNlKQorI2lmIChkZWZpbmVkKEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTCkgJiYgQVNTRU1C
TEVSX0hBU19DT05TVEFOVF9QT09MKQorI2RlZmluZSBCRUdJTl9VTklOVEVSUlVQVEVEX1NFUVVF
TkNFKG5hbWUpIGRvIHsgYmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2UoKTsgYmVnaW5VbmludGVy
cnVwdGVkU2VxdWVuY2UobmFtZSAjIyBJbnN0cnVjdGlvblNwYWNlLCBuYW1lICMjIENvbnN0YW50
U3BhY2UpOyB9IHdoaWxlIChmYWxzZSkKKyNkZWZpbmUgRU5EX1VOSU5URVJSVVBURURfU0VRVUVO
Q0UobmFtZSkgZG8geyBlbmRVbmludGVycnVwdGVkU2VxdWVuY2UobmFtZSAjIyBJbnN0cnVjdGlv
blNwYWNlLCBuYW1lICMjIENvbnN0YW50U3BhY2UpOyBlbmRVbmludGVycnVwdGVkU2VxdWVuY2Uo
KTsgfSB3aGlsZSAoZmFsc2UpCiAKICAgICAgICAgdm9pZCBiZWdpblVuaW50ZXJydXB0ZWRTZXF1
ZW5jZShpbnQsIGludCk7CiAgICAgICAgIHZvaWQgZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKGlu
dCwgaW50KTsKIAogI2Vsc2UKLSNkZWZpbmUgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShu
YW1lKQotI2RlZmluZSBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShuYW1lKQorI2RlZmluZSBC
RUdJTl9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKG5hbWUpICBkbyB7IGJlZ2luVW5pbnRlcnJ1cHRl
ZFNlcXVlbmNlKCk7IH0gd2hpbGUgKGZhbHNlKQorI2RlZmluZSBFTkRfVU5JTlRFUlJVUFRFRF9T
RVFVRU5DRShuYW1lKSAgZG8geyBlbmRVbmludGVycnVwdGVkU2VxdWVuY2UoKTsgfSB3aGlsZSAo
ZmFsc2UpCiAjZW5kaWYKIAogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKEluc3RydWN0aW9uKik7
CkBAIC05NDAsNiArOTQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBtX3VuaW50
ZXJydXB0ZWRDb25zdGFudFNlcXVlbmNlQmVnaW47CiAjZW5kaWYKICNlbmRpZgorICAgICAgICB2
b2lkKiBtX2xpbmtlck9mZnNldDsKICAgICAgICAgc3RhdGljIENvZGVQdHIgc3RyaW5nR2V0QnlW
YWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wq
IHBvb2wpOwogICAgIH0gSklUX0NMQVNTX0FMSUdOTUVOVDsKIApkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQXJpdGhtZXRpYzMyXzY0LmNwcAppbmRleCA1YTY5ZDVhM2E5YzQyY2RhMjZhNTZmYjk5MDhk
YjRlZWUyYWU2MTdmLi5lNTNhZjc3ZmNkYmUxY2Q2YzJiNjRhMDJmYTA3OGEwZDBlZDQ0NWQzIDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcApAQCAtMTM4Myw2ICsx
MzgzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKKyAg
ICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oaXRl
cik7CiAjaWYgRU5BQkxFKEpJVF9VU0VfU09GVF9NT0RVTE8pCiAgICAgdW5zaWduZWQgcmVzdWx0
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBvcDEgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CmluZGV4IDVjZDBiZmVhMWFkNjBlYjRkMDUzNGUwNWZiOWU2YmM2ODRhZDBjMmQuLjI4ZWY0Y2Fl
NWNlMjAxYTIwODdiNjM1OTBiZmUxYWE5OTgwMGU0NDcgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNo
aW5lVHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZQogICAgIC8v
IFdlIGNhbid0IHJ1biB3aXRob3V0IHRoZSBKSVQgdHJhbXBvbGluZXMhCiAgICAgaWYgKCEqZXhl
Y3V0YWJsZVBvb2wpCiAgICAgICAgIENSQVNIKCk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cih0aGlzLCAqZXhlY3V0YWJsZVBvb2wpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodGhp
cywgKmV4ZWN1dGFibGVQb29sLCAwKTsKICAgICAvLyBXZSBjYW4ndCBydW4gd2l0aG91dCB0aGUg
SklUIHRyYW1wb2xpbmVzIQogICAgIGlmICghcGF0Y2hCdWZmZXIuYWxsb2NhdGlvblN1Y2Nlc3Nm
dWwoKSkKICAgICAgICAgQ1JBU0goKTsKQEAgLTE4NCwxNyArMTg0LDE3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJsZVBvb2w+
KiBleGVjdXRhYmxlCiAKICAgICBDb2RlUmVmIGZpbmFsQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZSgpOwogCi0gICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsTGluayA9IHRyYW1w
b2xpbmVBdChmaW5hbENvZGUsIHZpcnR1YWxDYWxsTGlua0JlZ2luKTsKLSAgICB0cmFtcG9saW5l
cy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsgPSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCB2aXJ0
dWFsQ29uc3RydWN0TGlua0JlZ2luKTsKLSAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENhbGwg
PSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCB2aXJ0dWFsQ2FsbEJlZ2luKTsKLSAgICB0cmFtcG9s
aW5lcy0+Y3RpVmlydHVhbENvbnN0cnVjdCA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIHZpcnR1
YWxDb25zdHJ1Y3RCZWdpbik7Ci0gICAgdHJhbXBvbGluZXMtPmN0aU5hdGl2ZUNhbGwgPSB0cmFt
cG9saW5lQXQoZmluYWxDb2RlLCBuYXRpdmVDYWxsVGh1bmspOwotICAgIHRyYW1wb2xpbmVzLT5j
dGlOYXRpdmVDb25zdHJ1Y3QgPSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCBuYXRpdmVDb25zdHJ1
Y3RUaHVuayk7CisgICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsTGluayA9IHBhdGNoQnVm
ZmVyLnRyYW1wb2xpbmVBdCh2aXJ0dWFsQ2FsbExpbmtCZWdpbik7CisgICAgdHJhbXBvbGluZXMt
PmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1
YWxDb25zdHJ1Y3RMaW5rQmVnaW4pOworICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ2FsbCA9
IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdCh2aXJ0dWFsQ2FsbEJlZ2luKTsKKyAgICB0cmFtcG9s
aW5lcy0+Y3RpVmlydHVhbENvbnN0cnVjdCA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdCh2aXJ0
dWFsQ29uc3RydWN0QmVnaW4pOworICAgIHRyYW1wb2xpbmVzLT5jdGlOYXRpdmVDYWxsID0gcGF0
Y2hCdWZmZXIudHJhbXBvbGluZUF0KG5hdGl2ZUNhbGxUaHVuayk7CisgICAgdHJhbXBvbGluZXMt
PmN0aU5hdGl2ZUNvbnN0cnVjdCA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdChuYXRpdmVDb25z
dHJ1Y3RUaHVuayk7CiAjaWYgRU5BQkxFKEpJVF9VU0VfU09GVF9NT0RVTE8pCi0gICAgdHJhbXBv
bGluZXMtPmN0aVNvZnRNb2R1bG8gPSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCBzb2Z0TW9kQmVn
aW4pOworICAgIHRyYW1wb2xpbmVzLT5jdGlTb2Z0TW9kdWxvID0gcGF0Y2hCdWZmZXIudHJhbXBv
bGluZUF0KHNvZnRNb2RCZWdpbik7CiAjZW5kaWYKICNpZiBFTkFCTEUoSklUX09QVElNSVpFX1BS
T1BFUlRZX0FDQ0VTUykKLSAgICB0cmFtcG9saW5lcy0+Y3RpU3RyaW5nTGVuZ3RoVHJhbXBvbGlu
ZSA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIHN0cmluZ0xlbmd0aEJlZ2luKTsKKyAgICB0cmFt
cG9saW5lcy0+Y3RpU3RyaW5nTGVuZ3RoVHJhbXBvbGluZSA9IHBhdGNoQnVmZmVyLnRyYW1wb2xp
bmVBdChzdHJpbmdMZW5ndGhCZWdpbik7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAppbmRleCA5MjdkMTU4NTMyODBmNDFhYTBiNDMyMDdlM2U4MzdhMjM5
N2VhM2UyLi45MzlhYThjNDc2MzE5YTQ5YTliYzE1YTMzM2Y1ZGZjNDU3MjlmMjgyIDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJs
ZVBvb2w+KiBleGVjdXRhYmxlCiAgICAgLy8gV2UgY2FuJ3QgcnVuIHdpdGhvdXQgdGhlIEpJVCB0
cmFtcG9saW5lcyEKICAgICBpZiAoISpleGVjdXRhYmxlUG9vbCkKICAgICAgICAgQ1JBU0goKTsK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHRoaXMsICpleGVjdXRhYmxlUG9vbCk7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih0aGlzLCAqZXhlY3V0YWJsZVBvb2wsIDApOwogICAgIC8v
IFdlIGNhbid0IHJ1biB3aXRob3V0IHRoZSBKSVQgdHJhbXBvbGluZXMhCiAgICAgaWYgKCFwYXRj
aEJ1ZmZlci5hbGxvY2F0aW9uU3VjY2Vzc2Z1bCgpKQogICAgICAgICBDUkFTSCgpOwpAQCAtMTgy
LDE5ICsxODIsMTkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xp
bmVzKFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFibGUKIAogICAgIENvZGVSZWYgZmlu
YWxDb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAKLSAgICB0cmFtcG9saW5lcy0+
Y3RpVmlydHVhbENhbGwgPSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCB2aXJ0dWFsQ2FsbEJlZ2lu
KTsKLSAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENvbnN0cnVjdCA9IHRyYW1wb2xpbmVBdChm
aW5hbENvZGUsIHZpcnR1YWxDb25zdHJ1Y3RCZWdpbik7Ci0gICAgdHJhbXBvbGluZXMtPmN0aU5h
dGl2ZUNhbGwgPSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCBuYXRpdmVDYWxsVGh1bmspOwotICAg
IHRyYW1wb2xpbmVzLT5jdGlOYXRpdmVDb25zdHJ1Y3QgPSB0cmFtcG9saW5lQXQoZmluYWxDb2Rl
LCBuYXRpdmVDb25zdHJ1Y3RUaHVuayk7CisgICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxs
ID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDYWxsQmVnaW4pOworICAgIHRyYW1w
b2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0ID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZp
cnR1YWxDb25zdHJ1Y3RCZWdpbik7CisgICAgdHJhbXBvbGluZXMtPmN0aU5hdGl2ZUNhbGwgPSBw
YXRjaEJ1ZmZlci50cmFtcG9saW5lQXQobmF0aXZlQ2FsbFRodW5rKTsKKyAgICB0cmFtcG9saW5l
cy0+Y3RpTmF0aXZlQ29uc3RydWN0ID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KG5hdGl2ZUNv
bnN0cnVjdFRodW5rKTsKICNpZiBFTkFCTEUoSklUX09QVElNSVpFX1BST1BFUlRZX0FDQ0VTUykK
LSAgICB0cmFtcG9saW5lcy0+Y3RpU3RyaW5nTGVuZ3RoVHJhbXBvbGluZSA9IHRyYW1wb2xpbmVB
dChmaW5hbENvZGUsIHN0cmluZ0xlbmd0aEJlZ2luKTsKKyAgICB0cmFtcG9saW5lcy0+Y3RpU3Ry
aW5nTGVuZ3RoVHJhbXBvbGluZSA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdChzdHJpbmdMZW5n
dGhCZWdpbik7CiAjZW5kaWYKICNpZiBFTkFCTEUoSklUX09QVElNSVpFX0NBTEwpCi0gICAgdHJh
bXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsTGluayA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIHZp
cnR1YWxDYWxsTGlua0JlZ2luKTsKLSAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENvbnN0cnVj
dExpbmsgPSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCB2aXJ0dWFsQ29uc3RydWN0TGlua0JlZ2lu
KTsKKyAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENhbGxMaW5rID0gcGF0Y2hCdWZmZXIudHJh
bXBvbGluZUF0KHZpcnR1YWxDYWxsTGlua0JlZ2luKTsKKyAgICB0cmFtcG9saW5lcy0+Y3RpVmly
dHVhbENvbnN0cnVjdExpbmsgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQodmlydHVhbENvbnN0
cnVjdExpbmtCZWdpbik7CiAjZW5kaWYKICNpZiBFTkFCTEUoSklUX1VTRV9TT0ZUX01PRFVMTykK
LSAgICB0cmFtcG9saW5lcy0+Y3RpU29mdE1vZHVsbyA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUs
IHNvZnRNb2RCZWdpbik7CisgICAgdHJhbXBvbGluZXMtPmN0aVNvZnRNb2R1bG8gPSBwYXRjaEJ1
ZmZlci50cmFtcG9saW5lQXQoc29mdE1vZEJlZ2luKTsKICNlbmRpZgogfQogCkBAIC0zNjIsMTUg
KzM2MiwxNSBAQCBKSVQ6OkNvZGVQdHIgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwo
UGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YQogICAgIHJldCgpOwogCiAgICAgLy8g
QWxsIHRyYW1wb2xpbmVzIGNvbnN0cnVjdGVkISBjb3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxz
LCBhbmQgc2V0IHRoZSBwb2ludGVycyBvbiB0aGUgTWFjaGluZSBvYmplY3QuCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcih0aGlzLCBleGVjdXRhYmxlUG9vbCk7CisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcih0aGlzLCBleGVjdXRhYmxlUG9vbCwgMCk7CiAgICAgLy8gV2UgY2FuJ3QgY29u
dGludWUgaWYgd2UgY2FuJ3QgY2FsbCBhIGZ1bmN0aW9uIQogICAgIGlmICghcGF0Y2hCdWZmZXIu
YWxsb2NhdGlvblN1Y2Nlc3NmdWwoKSkKICAgICAgICAgQ1JBU0goKTsKIAogICAgIHBhdGNoQnVm
ZmVyLmxpbmsobmF0aXZlQ2FsbCwgRnVuY3Rpb25QdHIoZnVuYykpOworICAgIHBhdGNoQnVmZmVy
LmZpbmFsaXplQ29kZSgpOwogCi0gICAgQ29kZVJlZiBmaW5hbENvZGUgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKTsKLSAgICByZXR1cm4gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgbmF0aXZl
Q2FsbFRodW5rKTsKKyAgICByZXR1cm4gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KG5hdGl2ZUNh
bGxUaHVuayk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5k
ZXggNTQwZTA3OWVlMTBkYjI2YjYxMGRmMjIwYzY0OTZhMzc1MzczMGU2ZS4uNmIyYTJmZTdiODEz
OTA2MTQ0M2Q1OWE2YTBkNGFlNTJiMjg3MjkxMiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIEpJVDo6Q29kZVB0ciBKSVQ6OnN0cmlu
Z0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFi
CiAgICAgaml0Lm1vdmUoSW1tMzIoMCksIHJlZ1QwKTsKICAgICBqaXQucmV0KCk7CiAgICAgCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigmaml0LCBwb29sKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCZqaXQsIHBvb2wsIDApOwogICAgIC8vIFdlIGNhbid0IHJ1biB3aXRob3V0IHRo
ZSBKSVQgdHJhbXBvbGluZXMhCiAgICAgaWYgKCFwYXRjaEJ1ZmZlci5hbGxvY2F0aW9uU3VjY2Vz
c2Z1bCgpKQogICAgICAgICBDUkFTSCgpOwpAQCAtNjUyLDcgKzY1Miw3IEBAIGJvb2wgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bywgU3RydWN0dXJlCiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgp
OwogICAgIENhbGwgZmFpbHVyZUNhbGwgPSB0YWlsUmVjdXJzaXZlQ2FsbCgpOwogCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcih0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJs
ZVBvb2woKSwgMCk7CiAgICAgaWYgKCFwYXRjaEJ1ZmZlci5hbGxvY2F0aW9uU3VjY2Vzc2Z1bCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTc0Myw3ICs3NDMsNyBAQCBib29sIEpJVDo6
cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgUmV0dXJuQQogICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2socmVnVDIsIHJl
Z1QwKTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpLCAwKTsK
ICAgICBpZiAoIXBhdGNoQnVmZmVyLmFsbG9jYXRpb25TdWNjZXNzZnVsKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtODA5LDcgKzgwOSw3IEBAIGJvb2wgSklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5SWRQcm90byhTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3Ry
CiAgICAgfSBlbHNlCiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3Qs
IHJlZ1QxLCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7
Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJs
ZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih0aGlzLCBtX2NvZGVCbG9jay0+
ZXhlY3V0YWJsZVBvb2woKSwgMCk7CiAgICAgaWYgKCFwYXRjaEJ1ZmZlci5hbGxvY2F0aW9uU3Vj
Y2Vzc2Z1bCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTg3Miw3ICs4NzIsNyBAQCBi
b29sIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBTdHJ1Y3R1cmUqCiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocmVn
VDAsIHJlZ1QwLCBzdHJ1Y3R1cmUsIGNhY2hlZE9mZnNldCk7CiAgICAgSnVtcCBzdWNjZXNzID0g
anVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih0aGlzLCBtX2NvZGVCbG9jay0+
ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih0aGlzLCBtX2Nv
ZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSwgMCk7CiAgICAgaWYgKCFwYXRjaEJ1ZmZlci5hbGxv
Y2F0aW9uU3VjY2Vzc2Z1bCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTk1MCw3ICs5
NTAsNyBAQCBib29sIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0KFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKgogCiAgICAgSnVtcCBzdWNjZXNzID0ganVt
cCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih0aGlzLCBtX2NvZGVCbG9jay0+ZXhl
Y3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih0aGlzLCBtX2NvZGVC
bG9jay0+ZXhlY3V0YWJsZVBvb2woKSwgMCk7CiAgICAgaWYgKCFwYXRjaEJ1ZmZlci5hbGxvY2F0
aW9uU3VjY2Vzc2Z1bCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEwMjYsNyArMTAy
Niw3IEBAIGJvb2wgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqCiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RP
ZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QxLCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsKICAgICBKdW1w
IHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHRoaXMsIG1f
Y29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpLCAwKTsKICAgICBpZiAoIXBhdGNo
QnVmZmVyLmFsbG9jYXRpb25TdWNjZXNzZnVsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKQEAgLTExMDAsNyArMTEwMCw3IEBAIGJvb2wgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRD
aGFpbihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RyCiAgICAgICAg
IGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QxLCByZWdUMCwgY2FjaGVk
T2Zmc2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpLCAw
KTsKICAgICBpZiAoIXBhdGNoQnVmZmVyLmFsbG9jYXRpb25TdWNjZXNzZnVsKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwCmluZGV4IGJiZmZkN2Q1M2MwN2QxM2RiMWZiNDg5MGY1ZTgzMjVjZjk1MTJjZTIu
LjkyMzk2NDExZmRjZTk5OWUzYjNmNmJlZmJiNmQ0OTAzMGQ4OTYwZGQgMTAwNjQ0Ci0tLSBhL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAgLTI5NSw3ICsyOTUsNyBA
QCBKSVQ6OkNvZGVQdHIgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYgogICAgIGppdC5tb3ZlKEltbTMyKDApLCByZWdUMCk7
CiAgICAgaml0LnJldCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoJmppdCwg
cG9vbCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigmaml0LCBwb29sLCAwKTsKICAgICAv
LyBXZSBjYW4ndCBydW4gd2l0aG91dCB0aGUgSklUIHRyYW1wb2xpbmVzIQogICAgIGlmICghcGF0
Y2hCdWZmZXIuYWxsb2NhdGlvblN1Y2Nlc3NmdWwoKSkKICAgICAgICAgQ1JBU0goKTsKQEAgLTY1
Niw3ICs2NTYsNyBAQCBib29sIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZQogICAgIHJlc3RvcmVBcmd1bWVu
dFJlZmVyZW5jZUZvclRyYW1wb2xpbmUoKTsKICAgICBDYWxsIGZhaWx1cmVDYWxsID0gdGFpbFJl
Y3Vyc2l2ZUNhbGwoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHRoaXMsIG1f
Y29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpLCAwKTsKICAgICBpZiAoIXBhdGNo
QnVmZmVyLmFsbG9jYXRpb25TdWNjZXNzZnVsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtNzUyLDcgKzc1Miw3IEBAIGJvb2wgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlM
ZW5ndGgoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBSZXR1cm5BCiAgICAgbW92ZShJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7
CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih0aGlzLCBtX2NvZGVCbG9jay0+ZXhl
Y3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih0aGlzLCBtX2NvZGVC
bG9jay0+ZXhlY3V0YWJsZVBvb2woKSwgMCk7CiAgICAgaWYgKCFwYXRjaEJ1ZmZlci5hbGxvY2F0
aW9uU3VjY2Vzc2Z1bCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTgxOSw3ICs4MTks
NyBAQCBib29sIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cgogICAgIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1
bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHRoaXMsIG1fY29kZUJsb2Nr
LT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHRoaXMsIG1f
Y29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpLCAwKTsKICAgICBpZiAoIXBhdGNoQnVmZmVyLmFs
bG9jYXRpb25TdWNjZXNzZnVsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtODg2LDcg
Kzg4Niw3IEBAIGJvb2wgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdChTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSoKIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1
bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHRoaXMsIG1fY29kZUJsb2Nr
LT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHRoaXMsIG1f
Y29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpLCAwKTsKICAgICBpZiAoIXBhdGNoQnVmZmVyLmFs
bG9jYXRpb25TdWNjZXNzZnVsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtOTY0LDcg
Kzk2NCw3IEBAIGJvb2wgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqCiAgICAgCiAgICAgSnVtcCBzdWNjZXNz
ID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodGhpcywgbV9jb2Rl
QmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodGhp
cywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCksIDApOwogICAgIGlmICghcGF0Y2hCdWZm
ZXIuYWxsb2NhdGlvblN1Y2Nlc3NmdWwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0x
MDQxLDcgKzEwNDEsNyBAQCBib29sIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0
KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKgogCiAgICAgSnVtcCBzdWNj
ZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodGhpcywgbV9j
b2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
dGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCksIDApOwogICAgIGlmICghcGF0Y2hC
dWZmZXIuYWxsb2NhdGlvblN1Y2Nlc3NmdWwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC0xMTE1LDcgKzExMTUsNyBAQCBib29sIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4o
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cgogICAgICAgICBjb21w
aWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMiwgcmVnVDEsIHJlZ1QwLCBjYWNo
ZWRPZmZzZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9v
bCgpLCAwKTsKICAgICBpZiAoIXBhdGNoQnVmZmVyLmFsbG9jYXRpb25TdWNjZXNzZnVsKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L1Nw
ZWNpYWxpemVkVGh1bmtKSVQuaCBiL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5r
SklULmgKaW5kZXggZTE0ZDZhOWZjNjI5Nzk2YTA2YWVkNmI2MGYzYTI4NGMyNWU4ZGUzMi4uYmE5
NTQ5OGM2MWE2ZTI5OWI4OTFmNzZhOTRjZDI3YjI0ZmY3Mzk1MSAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9q
aXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCkBAIC0xMjksNyArMTI5LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmluYWxpemUoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxiYWNrKQogICAgICAgICB7Ci0gICAgICAgICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKHRoaXMsIG1fcG9vbC5nZXQoKSk7CisgICAgICAgICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKHRoaXMsIG1fcG9vbC5nZXQoKSwgMCk7CiAgICAgICAgICAgICAv
LyBXZSBjYW4ndCBjb250aW51ZSBpZiB3ZSBjYW4ndCBjYWxsIGEgZnVuY3Rpb24hCiAgICAgICAg
ICAgICBpZiAoIXBhdGNoQnVmZmVyLmFsbG9jYXRpb25TdWNjZXNzZnVsKCkpCiAgICAgICAgICAg
ICAgICAgQ1JBU0goKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCmluZGV4IDg1
NmY5MmNmNzAzOWM0MjIxMzJiMzM1NGJhNGNjNzNkOGViNjEyZDEuLjJiNDg0MWU2MGFmOTY2ZTIy
NGRlY2I1ZDlmMTdlOTkwMzRiZDZlN2MgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcApAQCAtMTE1LDcgKzExNSw3IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGls
ZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlCiAKICNpZiBF
TkFCTEUoSklUKQogICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKLSAg
ICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xv
YmFsRGF0YSwgbV9ldmFsQ29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgbV9qaXRDb2RlRm9yQ2Fs
bCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9ldmFsQ29kZUJs
b2NrLmdldCgpLCAwLCAwKTsKICAgICAgICAgIGlmIChVTkxJS0VMWSghbV9qaXRDb2RlRm9yQ2Fs
bCkpIHsKICAgICAgICAgICAgICBtX2V2YWxDb2RlQmxvY2suY2xlYXIoKTsKICAgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QpOwpAQCAtMTY3LDcg
KzE2Nyw3IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4
ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjCiAKICNpZiBFTkFCTEUoSklUKQogICAg
IGlmIChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKLSAgICAgICAgbV9qaXRDb2Rl
Rm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9wcm9n
cmFtQ29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29t
cGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgp
LCAwLCAwKTsKICAgICAgICAgIGlmIChVTkxJS0VMWSghbV9qaXRDb2RlRm9yQ2FsbCkpIHsKICAg
ICAgICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsKICAgICAgICAgICAgICByZXR1
cm4gY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QpOwpAQCAtMjEyLDcgKzIxMiw3
IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwo
RXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluCiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChl
eGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKLSAgICAgICAgbV9qaXRDb2RlRm9yQ2Fs
bCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tG
b3JDYWxsLmdldCgpLCAmbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAg
bV9qaXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0
YSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCAmbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNo
ZWNrLCAwKTsKICAgICAgICAgIGlmIChVTkxJS0VMWSghbV9qaXRDb2RlRm9yQ2FsbCkpIHsKICAg
ICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwuY2xlYXIoKTsKICAgICAgICAgICAgICByZXR1
cm4gY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QpOwpAQCAtMjU3LDcgKzI1Nyw3
IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRl
cm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlCiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChl
eGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKLSAgICAgICAgbV9qaXRDb2RlRm9yQ29u
c3RydWN0ID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdC5nZXQoKSwgJm1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNo
ZWNrKTsKKyAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gSklUOjpjb21waWxlKHNjb3Bl
Q2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSwgJm1f
aml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCAwKTsKICAgICAgICAgIGlmIChVTkxJ
S0VMWSghbV9qaXRDb2RlRm9yQ29uc3RydWN0KSkgewogICAgICAgICAgICAgIG1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0LmNsZWFyKCk7CiAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU91dE9mTWVt
b3J5RXJyb3IoZ2xvYmFsT2JqZWN0KTsKQEAgLTMwNCw3ICszMDQsNyBAQCBQYXNzT3duUHRyPEV4
Y2VwdGlvbkluZm8+IEZ1bmN0aW9uRXhlY3V0YWJsZTo6cmVwYXJzZUV4Y2VwdGlvbkluZm8oSlNH
bG9iYWxEYXRhKgogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoZ2xvYmFsRGF0YS0+Y2FuVXNl
SklUKCkpIHsKLSAgICAgICAgSklUQ29kZSBuZXdKSVRDb2RlID0gSklUOjpjb21waWxlKGdsb2Jh
bERhdGEsIG5ld0NvZGVCbG9jay5nZXQoKSk7CisgICAgICAgIEpJVENvZGUgbmV3SklUQ29kZSA9
IEpJVDo6Y29tcGlsZShnbG9iYWxEYXRhLCBuZXdDb2RlQmxvY2suZ2V0KCksIDAsIGNvZGVCbG9j
ay0+bV9pc0NvbnN0cnVjdG9yID8gZ2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpLnN0YXJ0
KCkgOiBnZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLnN0YXJ0KCkpOwogICAgICAgICBpZiAoIW5l
d0pJVENvZGUpIHsKICAgICAgICAgICAgIGdsb2JhbERhdGEtPmZ1bmN0aW9uQ29kZUJsb2NrQmVp
bmdSZXBhcnNlZCA9IDA7CiAgICAgICAgICAgICByZXR1cm4gUGFzc093blB0cjxFeGNlcHRpb25J
bmZvPigpOwpAQCAtMzM3LDcgKzMzNyw3IEBAIFBhc3NPd25QdHI8RXhjZXB0aW9uSW5mbz4gRXZh
bEV4ZWN1dGFibGU6OnJlcGFyc2VFeGNlcHRpb25JbmZvKEpTR2xvYmFsRGF0YSogZ2xvCiAKICNp
ZiBFTkFCTEUoSklUKQogICAgIGlmIChnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkgewotICAgICAg
ICBKSVRDb2RlIG5ld0pJVENvZGUgPSBKSVQ6OmNvbXBpbGUoZ2xvYmFsRGF0YSwgbmV3Q29kZUJs
b2NrLmdldCgpKTsKKyAgICAgICAgSklUQ29kZSBuZXdKSVRDb2RlID0gSklUOjpjb21waWxlKGds
b2JhbERhdGEsIG5ld0NvZGVCbG9jay5nZXQoKSwgMCwgZ2VuZXJhdGVkSklUQ29kZUZvckNhbGwo
KS5zdGFydCgpKTsKICAgICAgICAgaWYgKCFuZXdKSVRDb2RlKSB7CiAgICAgICAgICAgICBnbG9i
YWxEYXRhLT5mdW5jdGlvbkNvZGVCbG9ja0JlaW5nUmVwYXJzZWQgPSAwOwogICAgICAgICAgICAg
cmV0dXJuIFBhc3NPd25QdHI8RXhjZXB0aW9uSW5mbz4oKTsKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9GYXN0TWFsbG9j
LmNwcAppbmRleCBjNDRiNWRlZmU4ZGI5MTkzYWZlOWExZmQ1ZmViMmVmZDdjZTVmNDE1Li5jNDQw
NDE3YmNhYmNjZjdmMzJiYWJkM2Y3ZTIyN2IxOWFmNzdjMzQ4IDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS93dGYvRmFzdE1hbGxvYy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RN
YWxsb2MuY3BwCkBAIC00NDU0LDEwICs0NDU0LDEwIEBAIGV4dGVybiAiQyIgewogbWFsbG9jX2lu
dHJvc3BlY3Rpb25fdCBqc2NvcmVfZmFzdG1hbGxvY19pbnRyb3NwZWN0aW9uID0geyAmRmFzdE1h
bGxvY1pvbmU6OmVudW1lcmF0ZSwgJkZhc3RNYWxsb2Nab25lOjpnb29kU2l6ZSwgJkZhc3RNYWxs
b2Nab25lOjpjaGVjaywgJkZhc3RNYWxsb2Nab25lOjpwcmludCwKICAgICAmRmFzdE1hbGxvY1pv
bmU6OmxvZywgJkZhc3RNYWxsb2Nab25lOjpmb3JjZUxvY2ssICZGYXN0TWFsbG9jWm9uZTo6Zm9y
Y2VVbmxvY2ssICZGYXN0TWFsbG9jWm9uZTo6c3RhdGlzdGljcwogCi0jaWYgIWRlZmluZWQoQlVJ
TERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFPUyhJ
T1MpCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpCiAgICAgLCAwIC8vIHpvbmVfbG9ja2VkIHdpbGwgbm90IGJlIGNhbGxlZCBv
biB0aGUgem9uZSB1bmxlc3MgaXQgYWR2ZXJ0aXNlcyBpdHNlbGYgYXMgdmVyc2lvbiBmaXZlIG9y
IGhpZ2hlci4KICNlbmRpZgotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xF
T1BBUkQpICYmICFPUyhJT1MpCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1df
TEVPUEFSRCkKICAgICAsIDAsIDAsIDAsIDAgLy8gVGhlc2UgbWVtYmVycyB3aWxsIG5vdCBiZSB1
c2VkIHVubGVzcyB0aGUgem9uZSBhZHZlcnRpc2VzIGl0c2VsZiBhcyB2ZXJzaW9uIHNldmVuIG9y
IGhpZ2hlci4KICNlbmRpZgogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZv
cm0uaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IGY0MGY4MzRmMGEwMjQy
YWQ0MmZmMmEzYTBmYzMzZDg4MmJiMGIwYTAuLjNhOTZhYWNjZGYzM2VmMTcyMDMzNDYxODVhMzI0
OWNhMDIyNWE4MjYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCisr
KyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCkBAIC0xMDk0LDQgKzEwOTQsOCBAQCBv
biBNaW5HVy4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTI2
OCAqLwogI2RlZmluZSBXVEZfVVNFX1BSRUVNUFRfR0VPTE9DQVRJT05fUEVSTUlTU0lPTiAxCiAj
ZW5kaWYKIAorI2lmIENQVShBUk1fVEhVTUIyKQorI2RlZmluZSBFTkFCTEVfQlJBTkNIX0NPTVBB
Q1RJT04gMQorI2VuZGlmCisKICNlbmRpZiAvKiBXVEZfUGxhdGZvcm1faCAqLwpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAgYi9KYXZhU2NyaXB0Q29yZS95YXJy
L1JlZ2V4SklULmNwcAppbmRleCBjMDEzNzhhOTM5OWFmYWE3NTI0OWQxZDE1ZDdmN2Q4MjNkNDQz
NGNmLi41YTUzY2VkNjZmNzA4NmRlYTlmMGZkYTkzMDM3M2ZlNDVhZWZiN2NkIDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklULmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS95
YXJyL1JlZ2V4SklULmNwcApAQCAtMTQ3Miw3ICsxNDcyLDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih0
aGlzLCBleGVjdXRhYmxlUG9vbC5yZWxlYXNlKCkpOworICAgICAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKHRoaXMsIGV4ZWN1dGFibGVQb29sLnJlbGVhc2UoKSwgMCk7CiAgICAgICAgIGlmICgh
cGF0Y2hCdWZmZXIuYWxsb2NhdGlvblN1Y2Nlc3NmdWwoKSkgewogICAgICAgICAgICAgbV9zaG91
bGRGYWxsQmFjayA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47Cg==
</data>
<flag name="review"
          id="52418"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>