<?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>63409</bug_id>
          
          <creation_ts>2011-06-26 14:07:15 -0700</creation_ts>
          <short_desc>DFG JIT does not perform put_by_id caching</short_desc>
          <delta_ts>2011-06-27 14:38:26 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>0</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>427572</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-26 14:07:15 -0700</bug_when>
    <thetext>The main JSC JIT performs extensive caching optimizations for put_by_id.  The DFG JIT currently always emits a call to a helper function, which is implemented in C.  At least the basic put_by_id caching (such as replacement of existing properties) should be ported to DFG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427576</commentid>
    <comment_count>1</comment_count>
      <attachid>98639</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-26 14:31:05 -0700</bug_when>
    <thetext>Created attachment 98639
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427577</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-26 14:34:07 -0700</bug_when>
    <thetext>Attachment 98639 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGOperations.cpp:288:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGOperations.cpp:288:  The parameter name &quot;returnAddress&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGOperations.cpp:305:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGOperations.cpp:305:  The parameter name &quot;returnAddress&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGOperations.cpp:322:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGOperations.cpp:322:  The parameter name &quot;returnAddress&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGOperations.cpp:339:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGOperations.cpp:339:  The parameter name &quot;returnAddress&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGRepatch.cpp:53:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/dfg/DFGRepatch.cpp:55:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/dfg/DFGRepatch.cpp:102:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/JavaScriptCore/dfg/DFGRepatch.cpp:107:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 12 in 12 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>427584</commentid>
    <comment_count>3</comment_count>
      <attachid>98642</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-26 16:15:50 -0700</bug_when>
    <thetext>Created attachment 98642
the patch (fix style)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428158</commentid>
    <comment_count>4</comment_count>
      <attachid>98642</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-06-27 12:00:56 -0700</bug_when>
    <thetext>Comment on attachment 98642
the patch (fix style)

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

Hey Filip, this patch looks great, and I&apos;d be happy to accept as is.  I&apos;ve r-ed to bounce back to you to give you a chance to look at a couple of suggestions, but feel free to consider both optional, and just reset r? on this patch if you want.  Our coding style leans against bool parameters where possible, since their meaning at the call site is often opaque, in many cases we prefer enumerated types.  In this case I&apos;m not sure that I&apos;d recommend adding an extra enum, so I&apos;d either pass a function pointer or stick with the bool.

&gt; Source/JavaScriptCore/dfg/DFGJITCodeGenerator.cpp:366
&gt; +    if (m_jit.codeBlock()-&gt;isStrictMode()) {

Given that &apos;direct&apos; is only used to select the operation to call, I think it might make the code a little clearer to make this function take a V_DFGOperation_EJJI rather than a bool.  It would remove this chunk of code, and make the call site a little more transparent (the meaning of bool arguments isn&apos;t always obvious).  Obviously each call site would still need to do something like &quot;m_jit.codeBlock()-&gt;isStrictMode() ? operationPutByIdDirectStrictOptimize : operationPutByIdDirectNonStrictOptimize&quot;.  What do you think?

&gt; Source/JavaScriptCore/dfg/DFGRepatch.cpp:138
&gt; +void dfgRepatchPutByID(ExecState* exec, JSValue baseValue, const Identifier&amp; propertyName, const PutPropertySlot&amp; slot, StructureStubInfo&amp; stubInfo, bool direct)

Similarly to during compilation, again you could switch the bool argument to a V_DFGOperation_EJJI, and ditch the appropriatePutByIdFunction method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428174</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-27 12:12:28 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 98642 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98642&amp;action=review
&gt; 
&gt; Hey Filip, this patch looks great, and I&apos;d be happy to accept as is.  I&apos;ve r-ed to bounce back to you to give you a chance to look at a couple of suggestions, but feel free to consider both optional, and just reset r? on this patch if you want.  Our coding style leans against bool parameters where possible, since their meaning at the call site is often opaque, in many cases we prefer enumerated types.  In this case I&apos;m not sure that I&apos;d recommend adding an extra enum, so I&apos;d either pass a function pointer or stick with the bool.

I totally agree that bool is nasty.  We already have this bool thing for direct in other places (PutPropertySlot mainly) so I followed that pattern.  But I don&apos;t particularly like it.

I&apos;m not entirely sure I like your suggestion either; I like the notion that dfgRepatchPutByID and friends abstract away what slow-path calls they&apos;re making, as much as possible.

What about this: add an enumeration in PutPropertySlot (or some other appropriate place):

enum PutKind { Direct, NotDirect };

And replace the &quot;bool direct&quot; throughout with this enum?  I&apos;d be happy to make this refactoring as part of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428177</commentid>
    <comment_count>6</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-06-27 12:18:44 -0700</bug_when>
    <thetext>&gt; What about this: add an enumeration in PutPropertySlot (or some other appropriate place):
&gt; 
&gt; enum PutKind { Direct, NotDirect };

Yep, sounds great, that works for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428280</commentid>
    <comment_count>7</comment_count>
      <attachid>98783</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-27 14:15:05 -0700</bug_when>
    <thetext>Created attachment 98783
the patch (fix review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428283</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-27 14:16:09 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=98783) [details]
&gt; the patch (fix review)

Ahhh!  I&apos;ll back this one out, since it has the change to Platform.h

-F</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428287</commentid>
    <comment_count>9</comment_count>
      <attachid>98784</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-27 14:17:07 -0700</bug_when>
    <thetext>Created attachment 98784
the patch (fix review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428309</commentid>
    <comment_count>10</comment_count>
      <attachid>98784</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-06-27 14:28:51 -0700</bug_when>
    <thetext>Comment on attachment 98784
the patch (fix review)

Looks great</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428318</commentid>
    <comment_count>11</comment_count>
      <attachid>98784</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-27 14:38:21 -0700</bug_when>
    <thetext>Comment on attachment 98784
the patch (fix review)

Clearing flags on attachment: 98784

Committed r89861: &lt;http://trac.webkit.org/changeset/89861&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428319</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-27 14:38:26 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98639</attachid>
            <date>2011-06-26 14:31:05 -0700</date>
            <delta_ts>2011-06-26 16:15:50 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>putbyid_patch_1.diff</filename>
            <type>text/plain</type>
            <size>22090</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk3NzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAK
KzIwMTEtMDYtMjYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGRvZXMgbm90IHBl
cmZvcm0gcHV0X2J5X2lkIGNhY2hpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MzQwOQorCisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgICog
ZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgor
ICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjphZGRQcm9wZXJ0eUFjY2Vzcyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OlByb3BlcnR5QWNjZXNzUmVjb3JkOjpQcm9wZXJ0eUFjY2Vzc1JlY29yZCk6CisgICAgICAg
ICogZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25T
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1JlcGF0
Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRmZ1JlcGF0Y2hCeUlkU2VsZkFjY2Vzcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjph
cHByb3ByaWF0ZVB1dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVQ
dXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjpkZmdSZXBhdGNoUHV0QnlJRCk6CisgICAgICAg
ICogZGZnL0RGR1JlcGF0Y2guaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKwogMjAxMS0w
Ni0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEdhdmluIEJhcnJhY2xvdWdoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDg5Njk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5pb24g
ewogICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICBpbnRwdHJfdCBkZWx0YUNo
ZWNrVG9DYWxsOwotICAgICAgICAgICAgICAgIGludHB0cl90IGRlbHRhQ2FsbFRvTG9hZDsKKyAg
ICAgICAgICAgICAgICBpbnRwdHJfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlOwogICAgICAgICAg
ICAgfSB1bnNldDsKICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgV3JpdGVC
YXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDg5Njk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUwLDYgKzM1MCw0NyBAQCB2b2lkIEpJVENvZGVH
ZW5lcmF0b3I6OmNhY2hlZEdldEJ5SWQoR1BSCiAgICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3Mo
ZnVuY3Rpb25DYWxsLCBjaGVja1RvQ2FsbCwgY2FsbFRvTG9hZCk7CiB9CiAKK3ZvaWQgSklUQ29k
ZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BS
LCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgYm9vbCBkaXJl
Y3QsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQoreworICAgIEpJVENvbXBpbGVy
OjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOworICAgIEpJVENvbXBpbGVyOjpKdW1w
IHN0cnVjdHVyZUNoZWNrID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpF
cXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7CisgICAgCisgICAgaWYgKHNsb3dQYXRoVGFyZ2V0
LmlzU2V0KCkpCisgICAgICAgIHNsb3dQYXRoVGFyZ2V0LmxpbmsoJm1faml0KTsKKworICAgIHNp
bGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcsIGJhc2VHUFIsIHZhbHVlR1BSKTsK
KyAgICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIyPih2YWx1ZUdQUiwgYmFzZUdQUik7CisgICAgbV9qaXQubW92ZShKSVRDb21waWxl
cjo6SW1tUHRyKGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjMpOworICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgVl9ERkdPcGVyYXRpb25fRUpKSSBvcHRpbWl6ZWRDYWxs
OworICAgIGlmIChtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAg
aWYgKGRpcmVjdCkKKyAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wdGltaXpl
ZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKGRpcmVjdCkKKyAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAg
fQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2sob3B0aW1pemVkQ2FsbCk7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJ
bnZhbGlkR1BSUmVnKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhbmRsZWRCeUMgPSBtX2pp
dC5qdW1wKCk7CisgICAgc3RydWN0dXJlQ2hlY2subGluaygmbV9qaXQpOworCisgICAgbV9qaXQu
bG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQ
cm9wZXJ0eVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOworICAgIEpJVENvbXBpbGVyOjpEYXRhTGFi
ZWwzMiBzdG9yZVdpdGhQYXRjaCA9IG1faml0LnN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRj
aCh2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgMCkpOworCisgICAg
aW50cHRyX3QgY2hlY2tUb0NhbGwgPSBtX2ppdC5kaWZmZXJlbmNlQmV0d2VlbihzdHJ1Y3R1cmVU
b0NvbXBhcmUsIGZ1bmN0aW9uQ2FsbCk7CisgICAgaW50cHRyX3QgY2FsbFRvU3RvcmUgPSBtX2pp
dC5kaWZmZXJlbmNlQmV0d2VlbihmdW5jdGlvbkNhbGwsIHN0b3JlV2l0aFBhdGNoKTsKKworICAg
IGhhbmRsZWRCeUMubGluaygmbV9qaXQpOworCisgICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3Mo
ZnVuY3Rpb25DYWxsLCBjaGVja1RvQ2FsbCwgY2FsbFRvU3RvcmUpOworfQorCiAjaWZuZGVmIE5E
RUJVRwogc3RhdGljIGNvbnN0IGNoYXIqIGRhdGFGb3JtYXRTdHJpbmcoRGF0YUZvcm1hdCBmb3Jt
YXQpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVH
ZW5lcmF0b3IuaAkocmV2aXNpb24gODk2OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTAxLDYgKzUwMSw3IEBA
IHByb3RlY3RlZDoKICAgICB9CiAKICAgICB2b2lkIGNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VH
UFIsIEdQUlJlZyByZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBp
bGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAgdm9p
ZCBjYWNoZWRQdXRCeUlkKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBib29sIGRpcmVjdCwgSklUQ29t
cGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKIAogICAg
IC8vIENhbGxlZCBvbmNlIGEgbm9kZSBoYXMgY29tcGxldGVkIGNvZGUgZ2VuZXJhdGlvbiBidXQg
cHJpb3IgdG8gc2V0dGluZwogICAgIC8vIGl0cyByZXN1bHQsIHRvIGZyZWUgdXAgaXRzIGNoaWxk
cmVuLiAoVGhpcyBtdXN0IGhhcHBlbiBwcmlvciB0byBzZXR0aW5nCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gODk2OTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzg4LDcgKzM4OCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlv
bihKSVRDb2QKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+
c3RydWN0dXJlU3R1YkluZm8oaSk7CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2Z1bmN0aW9uQ2Fs
bCk7CiAgICAgICAgIGluZm8udS51bnNldC5kZWx0YUNoZWNrVG9DYWxsID0gbV9wcm9wZXJ0eUFj
Y2Vzc2VzW2ldLm1fZGVsdGFDaGVja1RvQ2FsbDsKLSAgICAgICAgaW5mby51LnVuc2V0LmRlbHRh
Q2FsbFRvTG9hZCA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvTG9hZDsKKyAg
ICAgICAgaW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUgPSBtX3Byb3BlcnR5QWNj
ZXNzZXNbaV0ubV9kZWx0YUNhbGxUb0xvYWRPclN0b3JlOwogICAgIH0KIAogICAgIC8vIEZJWE1F
OiBzd2l0Y2ggdGhlIHJlZ2lzdGVyIGZpbGUgY2hlY2sgJiBhcml0eSBjaGVjayBvdmVyIHRvIERG
R09wZXJ0YWlvbiBzdHlsZSBjYWxscywgbm90IEpJVCBzdHVicy4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDg5Njk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzIsOSArMjMyLDkgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJTYW1wbGluZ0ZsYWcoaW50
MzJfdCBmbGFnKTsKICNlbmRpZgogCi0gICAgdm9pZCBhZGRQcm9wZXJ0eUFjY2VzcyhKSVRDb21w
aWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwsIGludHB0cl90IGRlbHRhQ2hlY2tUb0NhbGwsIGludHB0
cl90IGRlbHRhQ2FsbFRvTG9hZCkKKyAgICB2b2lkIGFkZFByb3BlcnR5QWNjZXNzKEpJVENvbXBp
bGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgaW50cHRyX3QgZGVsdGFDaGVja1RvQ2FsbCwgaW50cHRy
X3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSkKICAgICB7Ci0gICAgICAgIG1fcHJvcGVydHlBY2Nl
c3Nlcy5hcHBlbmQoUHJvcGVydHlBY2Nlc3NSZWNvcmQoZnVuY3Rpb25DYWxsLCBkZWx0YUNoZWNr
VG9DYWxsLCBkZWx0YUNhbGxUb0xvYWQpKTsKKyAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc2VzLmFw
cGVuZChQcm9wZXJ0eUFjY2Vzc1JlY29yZChmdW5jdGlvbkNhbGwsIGRlbHRhQ2hlY2tUb0NhbGws
IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0yNTgsMTYg
KzI1OCwxNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwogCiAg
ICAgc3RydWN0IFByb3BlcnR5QWNjZXNzUmVjb3JkIHsKLSAgICAgICAgUHJvcGVydHlBY2Nlc3NS
ZWNvcmQoSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxsLCBpbnRwdHJfdCBkZWx0YUNoZWNr
VG9DYWxsLCBpbnRwdHJfdCBkZWx0YUNhbGxUb0xvYWQpCisgICAgICAgIFByb3BlcnR5QWNjZXNz
UmVjb3JkKEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgaW50cHRyX3QgZGVsdGFDaGVj
a1RvQ2FsbCwgaW50cHRyX3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSkKICAgICAgICAgICAgIDog
bV9mdW5jdGlvbkNhbGwoZnVuY3Rpb25DYWxsKQogICAgICAgICAgICAgLCBtX2RlbHRhQ2hlY2tU
b0NhbGwoZGVsdGFDaGVja1RvQ2FsbCkKLSAgICAgICAgICAgICwgbV9kZWx0YUNhbGxUb0xvYWQo
ZGVsdGFDYWxsVG9Mb2FkKQorICAgICAgICAgICAgLCBtX2RlbHRhQ2FsbFRvTG9hZE9yU3RvcmUo
ZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAg
SklUQ29tcGlsZXI6OkNhbGwgbV9mdW5jdGlvbkNhbGw7CiAgICAgICAgIGludHB0cl90IG1fZGVs
dGFDaGVja1RvQ2FsbDsKLSAgICAgICAgaW50cHRyX3QgbV9kZWx0YUNhbGxUb0xvYWQ7CisgICAg
ICAgIGludHB0cl90IG1fZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZTsKICAgICB9OwogCiAgICAgVmVj
dG9yPFByb3BlcnR5QWNjZXNzUmVjb3JkLCA0PiBtX3Byb3BlcnR5QWNjZXNzZXM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNw
cAkocmV2aXNpb24gODk2OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc3LDExICs1NzcsMTQgQEAgdm9p
ZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIGNhc2UgUHV0QnlJZDog
ewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzLCBiYXNlKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBi
YXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworCisgICAgICAgIGNhY2hlZFB1dEJ5
SWQoYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0Y2guZ3ByKCksIG5vZGUuaWRlbnRpZmllck51bWJl
cigpLCBmYWxzZSwgbm90Q2VsbCk7CiAKLSAgICAgICAgY2FsbE9wZXJhdGlvbihtX2ppdC5jb2Rl
QmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IDogb3BlcmF0
aW9uUHV0QnlJZE5vblN0cmljdCwgdmFsdWVHUFIsIGJhc2VHUFIsIGlkZW50aWZpZXIobm9kZS5p
ZGVudGlmaWVyTnVtYmVyKCkpKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwog
ICAgICAgICBicmVhazsKICAgICB9CkBAIC01ODksMTEgKzU5MiwxNCBAQCB2b2lkIE5vblNwZWN1
bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7CiAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOwogICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMsIGJhc2UpOwogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90
Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGJhc2VH
UFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisKKyAgICAgICAgY2FjaGVkUHV0QnlJZChi
YXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaC5ncHIoKSwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCks
IHRydWUsIG5vdENlbGwpOwogCi0gICAgICAgIGNhbGxPcGVyYXRpb24obV9qaXQuY29kZUJsb2Nr
KCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCA6IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QsIHZhbHVlR1BSLCBiYXNlR1BSLCBpZGVudGlmaWVy
KG5vZGUuaWRlbnRpZmllck51bWJlcigpKSk7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiA4OTY5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDcgQEAKICAgICAgICAgImptcCBfIiBTVFJJTkdJWkUoZnVuY3Rpb24pICJXaXRoUmV0dXJu
QWRkcmVzcyIgIlxuIiBcCiAgICAgKTsKICNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX0FS
RzRfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTUyhmdW5jdGlvbiwgcmN4KQorI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJH
NV9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTKGZ1bmN0aW9uLCByOCkKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CkBAIC0yNDksNiArMjUwLDc0IEBAIHZvaWQgb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dChFeGUKICAgICBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpLnB1dERpcmVjdChleGVjLCAq
cHJvcGVydHlOYW1lLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAK
K3ZvaWQgb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcyk7CitGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJHNV9SRVRVUk5fQUREUkVT
UyhvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpOwordm9pZCBvcGVyYXRpb25QdXRCeUlk
U3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZp
ZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU1Zh
bHVlIGJhc2UgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOworICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KHRydWUpOworICAgIAorICAgIGJhc2UucHV0KGV4ZWMsICpwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBl
eGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgaWYgKHN0
dWJJbmZvLnNlZW4pCisgICAgICAgIGRmZ1JlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2UsICpwcm9w
ZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBzdHVi
SW5mby5zZWVuID0gdHJ1ZTsKK30KKwordm9pZCBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqIHByb3Bl
cnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKK0ZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9BUkc1X1JFVFVSTl9BRERSRVNTKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRp
bWl6ZSk7Cit2b2lkIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5B
ZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIEpTVmFsdWUgYmFzZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkQmFzZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UpOworICAgIAor
ICAgIGJhc2UucHV0KGV4ZWMsICpwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1
YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgaWYgKHN0dWJJbmZvLnNlZW4pCisgICAgICAgIGRm
Z1JlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2UsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZv
LCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKK30KKwor
dm9pZCBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzKTsKK0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9BUkc1X1JFVFVSTl9B
RERSRVNTKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Cit2b2lkIG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIEpTVmFsdWUgYmFzZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7
CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSk7CisgICAgCisgICAgYmFzZS5wdXREaXJl
Y3QoZXhlYywgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1
cm5BZGRyZXNzKTsKKyAgICBpZiAoc3R1YkluZm8uc2VlbikKKyAgICAgICAgZGZnUmVwYXRjaFB1
dEJ5SUQoZXhlYywgYmFzZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHRydWUpOwor
ICAgIGVsc2UKKyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Cit9CisKK3ZvaWQgb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcyk7CitGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJHNV9SRVRVUk5fQUREUkVTUyhv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwordm9pZCBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQoreworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBKU1ZhbHVlIGJhc2UgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwor
ICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlKTsKKyAgICAKKyAgICBiYXNlLnB1dERpcmVj
dChleGVjLCAqcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgCisgICAgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVy
bkFkZHJlc3MpOworICAgIGlmIChzdHViSW5mby5zZWVuKQorICAgICAgICBkZmdSZXBhdGNoUHV0
QnlJRChleGVjLCBiYXNlLCAqcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgdHJ1ZSk7Cisg
ICAgZWxzZQorICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKK30KKwogYm9vbCBvcGVyYXRp
b25Db21wYXJlTGVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgcmV0dXJuIGpzTGVzcyhleGVjLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNp
b24gODk2OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksMTAgQEAgdm9pZCBvcGVyYXRpb25QdXRCeUlkU3Ry
aWN0KEV4ZWNTdGF0ZSosIAogdm9pZCBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIElkZW50aWZpZXIqKTsKIHZvaWQgb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCBJZGVudGlmaWVyKik7CiB2b2lkIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJp
Y3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciopOwordm9pZCBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciopOwordm9pZCBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciopOwordm9pZCBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciopOwor
dm9pZCBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwg
SWRlbnRpZmllciopOwogYm9vbCBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKIGJvb2wg
b3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKIGJvb2wgb3BlcmF0aW9uQ29tcGFyZUVx
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3Bw
CShyZXZpc2lvbiA4OTY5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRj
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE2ICszOSwyMCBAQCBzdGF0aWMgdm9pZCBkZmdS
ZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbCwg
bmV3Q2FsbGVlRnVuY3Rpb24pOwogfQogCi1zdGF0aWMgdm9pZCBkZmdSZXBhdGNoR2V0QnlJZFNl
bGYoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvZmZzZXQpCitzdGF0aWMgdm9pZCBkZmdSZXBhdGNo
QnlJZFNlbGZBY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvZmZzZXQsIGNvbnN0IEZ1bmN0
aW9uUHRyICZzbG93UGF0aEZ1bmN0aW9uLCBib29sIGNvbXBhY3QpCiB7CiAgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAKICAgICAvLyBPbmx5IG9wdGltaXplIG9u
Y2UhCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBvcGVyYXRpb25HZXRCeUlkKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIHNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgLy8gUGF0Y2ggdGhl
IHN0cnVjdHVyZSBjaGVjayAmIHRoZSBvZmZzZXQgb2YgdGhlIGxvYWQuCiAgICAgcmVwYXRjaEJ1
ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9m
ZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnUudW5zZXQuZGVsdGFDaGVja1RvQ2FsbCksIHN0cnVj
dHVyZSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8udS51bnNldC5kZWx0YUNhbGxU
b0xvYWQpLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXQpOworICAgIGlmIChjb21wYWN0KSB7Cisg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9Mb2Fk
T3JTdG9yZSksIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRh
TGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSks
IHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldCk7CisgICAgfQogfQogCiBzdGF0aWMgYm9vbCB0cnlD
YWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQpAQCAtNzYsNyArODAsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhl
Y1N0YXRlKiBlCiAgICAgICAgIGlmICgoc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSAhPSBQcm9w
ZXJ0eVNsb3Q6OlZhbHVlKSB8fCAoKHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1
ZSkpID4gKHVuc2lnbmVkKU1hY3JvQXNzZW1ibGVyOjpNYXhpbXVtQ29tcGFjdFB0ckFsaWduZWRB
ZGRyZXNzT2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBkZmdS
ZXBhdGNoR2V0QnlJZFNlbGYoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNh
Y2hlZE9mZnNldCgpKTsKKyAgICAgICAgZGZnUmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9j
aywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0
QnlJZCwgdHJ1ZSk7CiAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigqZ2xvYmFsRGF0
YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtOTIsNiArOTYsNTYgQEAgdm9pZCBkZmdSZXBhdGNoR2V0QnlJ
RChFeGVjU3RhdGUqIGV4ZWMsIAogICAgICAgICBkZmdSZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKIH0K
IAorc3RhdGljIFZfREZHT3BlcmF0aW9uX0VKSkkgYXBwcm9wcmlhdGVQdXRCeUlkRnVuY3Rpb24o
Y29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBib29sIGRpcmVjdCkKK3sKKyAgICBpZiAoc2xv
dC5pc1N0cmljdE1vZGUoKSkgeworICAgICAgICBpZiAoZGlyZWN0KQorICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OworICAgIH0gZWxzZSB7CisgICAgICAg
IGlmIChkaXJlY3QpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3Q7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBib29s
IGRpcmVjdCkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisK
KyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7CisgICAgaWYgKCFzbG90LmlzQ2FjaGVh
YmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2Fj
aGVhYmxlRGljdGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBPcHRp
bWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSB7Cisg
ICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGRmZ1JlcGF0Y2hCeUlkU2VsZkFj
Y2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCks
IGFwcHJvcHJpYXRlUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIGRpcmVjdCksIGZhbHNlKTsKKyAgICAg
ICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgdGhlIHRyYW5zaXRpb24gY2FzZSEKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgZGZnUmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
Ym9vbCBkaXJlY3QpCit7CisgICAgYm9vbCBjYWNoZWQgPSB0cnlDYWNoZVB1dEJ5SUQoZXhlYywg
YmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBkaXJlY3QpOworICAgIGlm
ICghY2FjaGVkKQorICAgICAgICBkZmdSZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZVB1dEJ5SWRGdW5jdGlvbihzbG90
LCBkaXJlY3QpKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCShyZXZpc2lvbiA4OTY5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZv
aWQgZGZnUmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIGRmZ1Jl
cGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGJvb2wgZGlyZWN0KTsKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gODk2OTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODYzLDI1ICs4NjMsMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUHV0QnlJZDogewotICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3By
KCk7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgYmFzZSk7CiAK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkg
PyBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCwgdmFs
dWVHUFIsIGJhc2VHUFIsIGlkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpKTsKKyAg
ICAgICAgY2FjaGVkUHV0QnlJZChiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgc2NyYXRjaC5ncHIo
KSwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIGZhbHNlKTsKKyAgICAgICAgCiAgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2Fz
ZSBQdXRCeUlkRGlyZWN0OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUu
Y2hpbGQxKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIp
OwotICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzLCBiYXNlKTsKKworICAgICAgICBjYWNoZWRQdXRC
eUlkKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCBzY3JhdGNoLmdwcigpLCBub2RlLmlkZW50aWZp
ZXJOdW1iZXIoKSwgdHJ1ZSk7CiAKLSAgICAgICAgY2FsbE9wZXJhdGlvbihtX2ppdC5jb2RlQmxv
Y2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IDogb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCwgdmFsdWVHUFIsIGJhc2VHUFIsIGlkZW50aWZp
ZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxl
SW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98642</attachid>
            <date>2011-06-26 16:15:50 -0700</date>
            <delta_ts>2011-06-27 14:15:05 -0700</delta_ts>
            <desc>the patch (fix style)</desc>
            <filename>putbyid_patch_2.diff</filename>
            <type>text/plain</type>
            <size>21939</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk3NzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAK
KzIwMTEtMDYtMjYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGRvZXMgbm90IHBl
cmZvcm0gcHV0X2J5X2lkIGNhY2hpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MzQwOQorCisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgICog
ZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgor
ICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjphZGRQcm9wZXJ0eUFjY2Vzcyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OlByb3BlcnR5QWNjZXNzUmVjb3JkOjpQcm9wZXJ0eUFjY2Vzc1JlY29yZCk6CisgICAgICAg
ICogZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25T
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1JlcGF0
Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRmZ1JlcGF0Y2hCeUlkU2VsZkFjY2Vzcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjph
cHByb3ByaWF0ZVB1dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVQ
dXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjpkZmdSZXBhdGNoUHV0QnlJRCk6CisgICAgICAg
ICogZGZnL0RGR1JlcGF0Y2guaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKwogMjAxMS0w
Ni0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEdhdmluIEJhcnJhY2xvdWdoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDg5NzczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5pb24g
ewogICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICBpbnRwdHJfdCBkZWx0YUNo
ZWNrVG9DYWxsOwotICAgICAgICAgICAgICAgIGludHB0cl90IGRlbHRhQ2FsbFRvTG9hZDsKKyAg
ICAgICAgICAgICAgICBpbnRwdHJfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlOwogICAgICAgICAg
ICAgfSB1bnNldDsKICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgV3JpdGVC
YXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDg5NzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUwLDYgKzM1MCw0NyBAQCB2b2lkIEpJVENvZGVH
ZW5lcmF0b3I6OmNhY2hlZEdldEJ5SWQoR1BSCiAgICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3Mo
ZnVuY3Rpb25DYWxsLCBjaGVja1RvQ2FsbCwgY2FsbFRvTG9hZCk7CiB9CiAKK3ZvaWQgSklUQ29k
ZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BS
LCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgYm9vbCBkaXJl
Y3QsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQoreworICAgIEpJVENvbXBpbGVy
OjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOworICAgIEpJVENvbXBpbGVyOjpKdW1w
IHN0cnVjdHVyZUNoZWNrID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpF
cXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7CisgICAgCisgICAgaWYgKHNsb3dQYXRoVGFyZ2V0
LmlzU2V0KCkpCisgICAgICAgIHNsb3dQYXRoVGFyZ2V0LmxpbmsoJm1faml0KTsKKworICAgIHNp
bGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcsIGJhc2VHUFIsIHZhbHVlR1BSKTsK
KyAgICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIyPih2YWx1ZUdQUiwgYmFzZUdQUik7CisgICAgbV9qaXQubW92ZShKSVRDb21waWxl
cjo6SW1tUHRyKGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjMpOworICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgVl9ERkdPcGVyYXRpb25fRUpKSSBvcHRpbWl6ZWRDYWxs
OworICAgIGlmIChtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAg
aWYgKGRpcmVjdCkKKyAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wdGltaXpl
ZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKGRpcmVjdCkKKyAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAg
fQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2sob3B0aW1pemVkQ2FsbCk7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJ
bnZhbGlkR1BSUmVnKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhbmRsZWRCeUMgPSBtX2pp
dC5qdW1wKCk7CisgICAgc3RydWN0dXJlQ2hlY2subGluaygmbV9qaXQpOworCisgICAgbV9qaXQu
bG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQ
cm9wZXJ0eVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOworICAgIEpJVENvbXBpbGVyOjpEYXRhTGFi
ZWwzMiBzdG9yZVdpdGhQYXRjaCA9IG1faml0LnN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRj
aCh2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgMCkpOworCisgICAg
aW50cHRyX3QgY2hlY2tUb0NhbGwgPSBtX2ppdC5kaWZmZXJlbmNlQmV0d2VlbihzdHJ1Y3R1cmVU
b0NvbXBhcmUsIGZ1bmN0aW9uQ2FsbCk7CisgICAgaW50cHRyX3QgY2FsbFRvU3RvcmUgPSBtX2pp
dC5kaWZmZXJlbmNlQmV0d2VlbihmdW5jdGlvbkNhbGwsIHN0b3JlV2l0aFBhdGNoKTsKKworICAg
IGhhbmRsZWRCeUMubGluaygmbV9qaXQpOworCisgICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3Mo
ZnVuY3Rpb25DYWxsLCBjaGVja1RvQ2FsbCwgY2FsbFRvU3RvcmUpOworfQorCiAjaWZuZGVmIE5E
RUJVRwogc3RhdGljIGNvbnN0IGNoYXIqIGRhdGFGb3JtYXRTdHJpbmcoRGF0YUZvcm1hdCBmb3Jt
YXQpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVH
ZW5lcmF0b3IuaAkocmV2aXNpb24gODk3NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTAxLDYgKzUwMSw3IEBA
IHByb3RlY3RlZDoKICAgICB9CiAKICAgICB2b2lkIGNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VH
UFIsIEdQUlJlZyByZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBp
bGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAgdm9p
ZCBjYWNoZWRQdXRCeUlkKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBib29sIGRpcmVjdCwgSklUQ29t
cGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKIAogICAg
IC8vIENhbGxlZCBvbmNlIGEgbm9kZSBoYXMgY29tcGxldGVkIGNvZGUgZ2VuZXJhdGlvbiBidXQg
cHJpb3IgdG8gc2V0dGluZwogICAgIC8vIGl0cyByZXN1bHQsIHRvIGZyZWUgdXAgaXRzIGNoaWxk
cmVuLiAoVGhpcyBtdXN0IGhhcHBlbiBwcmlvciB0byBzZXR0aW5nCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gODk3NzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzg4LDcgKzM4OCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlv
bihKSVRDb2QKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+
c3RydWN0dXJlU3R1YkluZm8oaSk7CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2Z1bmN0aW9uQ2Fs
bCk7CiAgICAgICAgIGluZm8udS51bnNldC5kZWx0YUNoZWNrVG9DYWxsID0gbV9wcm9wZXJ0eUFj
Y2Vzc2VzW2ldLm1fZGVsdGFDaGVja1RvQ2FsbDsKLSAgICAgICAgaW5mby51LnVuc2V0LmRlbHRh
Q2FsbFRvTG9hZCA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvTG9hZDsKKyAg
ICAgICAgaW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUgPSBtX3Byb3BlcnR5QWNj
ZXNzZXNbaV0ubV9kZWx0YUNhbGxUb0xvYWRPclN0b3JlOwogICAgIH0KIAogICAgIC8vIEZJWE1F
OiBzd2l0Y2ggdGhlIHJlZ2lzdGVyIGZpbGUgY2hlY2sgJiBhcml0eSBjaGVjayBvdmVyIHRvIERG
R09wZXJ0YWlvbiBzdHlsZSBjYWxscywgbm90IEpJVCBzdHVicy4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDg5NzczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzIsOSArMjMyLDkgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJTYW1wbGluZ0ZsYWcoaW50
MzJfdCBmbGFnKTsKICNlbmRpZgogCi0gICAgdm9pZCBhZGRQcm9wZXJ0eUFjY2VzcyhKSVRDb21w
aWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwsIGludHB0cl90IGRlbHRhQ2hlY2tUb0NhbGwsIGludHB0
cl90IGRlbHRhQ2FsbFRvTG9hZCkKKyAgICB2b2lkIGFkZFByb3BlcnR5QWNjZXNzKEpJVENvbXBp
bGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgaW50cHRyX3QgZGVsdGFDaGVja1RvQ2FsbCwgaW50cHRy
X3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSkKICAgICB7Ci0gICAgICAgIG1fcHJvcGVydHlBY2Nl
c3Nlcy5hcHBlbmQoUHJvcGVydHlBY2Nlc3NSZWNvcmQoZnVuY3Rpb25DYWxsLCBkZWx0YUNoZWNr
VG9DYWxsLCBkZWx0YUNhbGxUb0xvYWQpKTsKKyAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc2VzLmFw
cGVuZChQcm9wZXJ0eUFjY2Vzc1JlY29yZChmdW5jdGlvbkNhbGwsIGRlbHRhQ2hlY2tUb0NhbGws
IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0yNTgsMTYg
KzI1OCwxNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwogCiAg
ICAgc3RydWN0IFByb3BlcnR5QWNjZXNzUmVjb3JkIHsKLSAgICAgICAgUHJvcGVydHlBY2Nlc3NS
ZWNvcmQoSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxsLCBpbnRwdHJfdCBkZWx0YUNoZWNr
VG9DYWxsLCBpbnRwdHJfdCBkZWx0YUNhbGxUb0xvYWQpCisgICAgICAgIFByb3BlcnR5QWNjZXNz
UmVjb3JkKEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgaW50cHRyX3QgZGVsdGFDaGVj
a1RvQ2FsbCwgaW50cHRyX3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSkKICAgICAgICAgICAgIDog
bV9mdW5jdGlvbkNhbGwoZnVuY3Rpb25DYWxsKQogICAgICAgICAgICAgLCBtX2RlbHRhQ2hlY2tU
b0NhbGwoZGVsdGFDaGVja1RvQ2FsbCkKLSAgICAgICAgICAgICwgbV9kZWx0YUNhbGxUb0xvYWQo
ZGVsdGFDYWxsVG9Mb2FkKQorICAgICAgICAgICAgLCBtX2RlbHRhQ2FsbFRvTG9hZE9yU3RvcmUo
ZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAg
SklUQ29tcGlsZXI6OkNhbGwgbV9mdW5jdGlvbkNhbGw7CiAgICAgICAgIGludHB0cl90IG1fZGVs
dGFDaGVja1RvQ2FsbDsKLSAgICAgICAgaW50cHRyX3QgbV9kZWx0YUNhbGxUb0xvYWQ7CisgICAg
ICAgIGludHB0cl90IG1fZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZTsKICAgICB9OwogCiAgICAgVmVj
dG9yPFByb3BlcnR5QWNjZXNzUmVjb3JkLCA0PiBtX3Byb3BlcnR5QWNjZXNzZXM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNw
cAkocmV2aXNpb24gODk3NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcwLDExICs3NzAsMTQgQEAgdm9p
ZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIGNhc2UgUHV0QnlJZDog
ewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzLCBiYXNlKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBi
YXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworCisgICAgICAgIGNhY2hlZFB1dEJ5
SWQoYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0Y2guZ3ByKCksIG5vZGUuaWRlbnRpZmllck51bWJl
cigpLCBmYWxzZSwgbm90Q2VsbCk7CiAKLSAgICAgICAgY2FsbE9wZXJhdGlvbihtX2ppdC5jb2Rl
QmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IDogb3BlcmF0
aW9uUHV0QnlJZE5vblN0cmljdCwgdmFsdWVHUFIsIGJhc2VHUFIsIGlkZW50aWZpZXIobm9kZS5p
ZGVudGlmaWVyTnVtYmVyKCkpKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwog
ICAgICAgICBicmVhazsKICAgICB9CkBAIC03ODIsMTEgKzc4NSwxNCBAQCB2b2lkIE5vblNwZWN1
bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7CiAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOwogICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMsIGJhc2UpOwogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90
Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGJhc2VH
UFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisKKyAgICAgICAgY2FjaGVkUHV0QnlJZChi
YXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaC5ncHIoKSwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCks
IHRydWUsIG5vdENlbGwpOwogCi0gICAgICAgIGNhbGxPcGVyYXRpb24obV9qaXQuY29kZUJsb2Nr
KCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCA6IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QsIHZhbHVlR1BSLCBiYXNlR1BSLCBpZGVudGlmaWVy
KG5vZGUuaWRlbnRpZmllck51bWJlcigpKSk7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiA4OTc3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDcgQEAKICAgICAgICAgImptcCBfIiBTVFJJTkdJWkUoZnVuY3Rpb24pICJXaXRoUmV0dXJu
QWRkcmVzcyIgIlxuIiBcCiAgICAgKTsKICNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX0FS
RzRfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTUyhmdW5jdGlvbiwgcmN4KQorI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJH
NV9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTKGZ1bmN0aW9uLCByOCkKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CkBAIC0yODQsNiArMjg1LDc0IEBAIHZvaWQgb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dChFeGUKICAgICBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpLnB1dERpcmVjdChleGVjLCAq
cHJvcGVydHlOYW1lLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAK
K3ZvaWQgb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyKTsKK0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9BUkc1X1JFVFVSTl9BRERSRVNTKG9wZXJhdGlvblB1dEJ5SWRT
dHJpY3RPcHRpbWl6ZSk7Cit2b2lkIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZVdpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIEpTVmFsdWUgYmFzZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkQmFzZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSk7Cisg
ICAgCisgICAgYmFzZS5wdXQoZXhlYywgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAg
IAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5n
ZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBpZiAoc3R1YkluZm8uc2VlbikKKyAgICAg
ICAgZGZnUmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgc3R1
YkluZm8sIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwor
fQorCit2b2lkIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRy
ZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0
cik7CitGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJHNV9SRVRVUk5fQUREUkVTUyhvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpOwordm9pZCBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqIHBy
b3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU1ZhbHVlIGJh
c2UgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOworICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KGZhbHNlKTsKKyAgICAKKyAgICBiYXNlLnB1dChleGVjLCAqcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2xvdCk7CisgICAgCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+
Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAgIGlmIChzdHViSW5m
by5zZWVuKQorICAgICAgICBkZmdSZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlLCAqcHJvcGVydHlO
YW1lLCBzbG90LCBzdHViSW5mbywgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgc3R1YkluZm8u
c2VlbiA9IHRydWU7Cit9CisKK3ZvaWQgb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGlt
aXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1l
LCBSZXR1cm5BZGRyZXNzUHRyKTsKK0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9BUkc1X1JFVFVSTl9B
RERSRVNTKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Cit2b2lkIG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIEpTVmFsdWUgYmFzZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7
CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSk7CisgICAgCisgICAgYmFzZS5wdXREaXJl
Y3QoZXhlYywgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1
cm5BZGRyZXNzKTsKKyAgICBpZiAoc3R1YkluZm8uc2VlbikKKyAgICAgICAgZGZnUmVwYXRjaFB1
dEJ5SUQoZXhlYywgYmFzZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHRydWUpOwor
ICAgIGVsc2UKKyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Cit9CisKK3ZvaWQgb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyKTsKK0ZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9BUkc1X1JFVFVSTl9BRERSRVNTKG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3RPcHRpbWl6ZSk7Cit2b2lkIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJp
Y3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciog
cHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIEpTVmFsdWUg
YmFzZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CisgICAgUHV0UHJvcGVydHlTbG90
IHNsb3QoZmFsc2UpOworICAgIAorICAgIGJhc2UucHV0RGlyZWN0KGV4ZWMsICpwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8g
PSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgaWYg
KHN0dWJJbmZvLnNlZW4pCisgICAgICAgIGRmZ1JlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2UsICpw
cm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCB0cnVlKTsKKyAgICBlbHNlCisgICAgICAgIHN0
dWJJbmZvLnNlZW4gPSB0cnVlOworfQorCiBib29sIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikKIHsKICAgICByZXR1cm4ganNMZXNzKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiA4OTc3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC02
NCw2ICs2NCwxMCBAQCB2b2lkIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiwgCiB2
b2lkIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciopOwog
dm9pZCBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIq
KTsKIHZvaWQgb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVu
dGlmaWVyKik7Cit2b2lkIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
LCBJZGVudGlmaWVyKik7Cit2b2lkIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlLCBJZGVudGlmaWVyKik7Cit2b2lkIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKik7Cit2b2lkIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKik7CiBib29s
IG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpOwogYm9vbCBvcGVyYXRpb25Db21wYXJlTGVz
c0VxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpOwogYm9vbCBvcGVyYXRpb25Db21wYXJlRXEoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDg5NzczKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksMTYgKzM5LDE5IEBAIHN0YXRpYyB2b2lkIGRmZ1JlcGF0Y2hDYWxsKENvZGVCbG9j
ayogY28KICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbik7
CiB9CiAKLXN0YXRpYyB2b2lkIGRmZ1JlcGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
c2l6ZV90IG9mZnNldCkKK3N0YXRpYyB2b2lkIGRmZ1JlcGF0Y2hCeUlkU2VsZkFjY2VzcyhDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgc2l6ZV90IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVu
Y3Rpb24sIGJvb2wgY29tcGFjdCkKIHsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIo
Y29kZUJsb2NrKTsKIAogICAgIC8vIE9ubHkgb3B0aW1pemUgb25jZSEKLSAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQp
OworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwg
c2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAvLyBQYXRjaCB0aGUgc3RydWN0dXJlIGNoZWNrICYg
dGhlIG9mZnNldCBvZiB0aGUgbG9hZC4KICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1
YkluZm8udS51bnNldC5kZWx0YUNoZWNrVG9DYWxsKSwgc3RydWN0dXJlKTsKLSAgICByZXBhdGNo
QnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBh
Y3RBdE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9hZCksIHNpemVvZihKU1Zh
bHVlKSAqIG9mZnNldCk7CisgICAgaWYgKGNvbXBhY3QpCisgICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zm
c2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIHNpemVvZihKU1Zh
bHVlKSAqIG9mZnNldCk7CisgICAgZWxzZQorICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2go
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8u
dS51bnNldC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0
KTsKIH0KIAogc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKQEAgLTc2LDcgKzc5LDcgQEAgc3RhdGlj
IGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICBpZiAoKHNsb3QuY2Fj
aGVkUHJvcGVydHlUeXBlKCkgIT0gUHJvcGVydHlTbG90OjpWYWx1ZSkgfHwgKChzbG90LmNhY2hl
ZE9mZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpKSA+ICh1bnNpZ25lZClNYWNyb0Fzc2VtYmxlcjo6
TWF4aW11bUNvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgZGZnUmVwYXRjaEdldEJ5SWRTZWxmKGNvZGVCbG9jaywgc3R1
YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgIGRmZ1JlcGF0
Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCksIG9wZXJhdGlvbkdldEJ5SWQsIHRydWUpOwogICAgICAgICBzdHViSW5mby5p
bml0R2V0QnlJZFNlbGYoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IHN0cnVjdHVyZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTkyLDYgKzk1LDUz
IEBAIHZvaWQgZGZnUmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCAKICAgICAgICAgZGZn
UmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgb3BlcmF0aW9uR2V0QnlJZCk7CiB9CiAKK3N0YXRpYyBWX0RGR09wZXJhdGlvbl9FSkpJIGFw
cHJvcHJpYXRlUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgYm9v
bCBkaXJlY3QpCit7CisgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgaWYg
KGRpcmVjdCkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
OworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsKKyAgICB9CisgICAgaWYg
KGRpcmVjdCkKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7
CisgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7Cit9CisKK3N0YXRpYyBib29s
IHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIGJvb2wgZGlyZWN0KQoreworICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4
ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwo
KTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKKyAg
ICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgorICAgIGlmIChzbG90LmJhc2Uo
KSA9PSBiYXNlVmFsdWUpIHsKKyAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5
U2xvdDo6TmV3UHJvcGVydHkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ZGZnUmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwg
c2xvdC5jYWNoZWRPZmZzZXQoKSwgYXBwcm9wcmlhdGVQdXRCeUlkRnVuY3Rpb24oc2xvdCwgZGly
ZWN0KSwgZmFsc2UpOworICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UoKmdsb2Jh
bERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIEZJWE1FOiBzaG91bGQgc3VwcG9ydCB0aGUg
dHJhbnNpdGlvbiBjYXNlIQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBkZmdSZXBhdGNo
UHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBib29sIGRpcmVjdCkKK3sKKyAgICBib29sIGNhY2hlZCA9IHRy
eUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1Yklu
Zm8sIGRpcmVjdCk7CisgICAgaWYgKCFjYWNoZWQpCisgICAgICAgIGRmZ1JlcGF0Y2hDYWxsKGV4
ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRl
UHV0QnlJZEZ1bmN0aW9uKHNsb3QsIGRpcmVjdCkpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBh
dGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNo
LmgJKHJldmlzaW9uIDg5NzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBh
dGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAogdm9pZCBkZmdSZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqLCBKU1Zh
bHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1
YkluZm8mKTsKK3ZvaWQgZGZnUmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZv
JiwgYm9vbCBkaXJlY3QpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiA4OTc3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjMsMjUgKzg2MywyMyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBQdXRCeUlkOiB7
Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIpOwotICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzLCBiYXNlKTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG1faml0LmNvZGVCbG9j
aygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgOiBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0LCB2YWx1ZUdQUiwgYmFzZUdQUiwgaWRlbnRpZmllcihub2RlLmlkZW50
aWZpZXJOdW1iZXIoKSkpOworICAgICAgICBjYWNoZWRQdXRCeUlkKGJhc2UuZ3ByKCksIHZhbHVl
LmdwcigpLCBzY3JhdGNoLmdwcigpLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgZmFsc2UpOwor
ICAgICAgICAKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKLSAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdw
cigpOwotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMsIGJhc2UpOwor
CisgICAgICAgIGNhY2hlZFB1dEJ5SWQoYmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCksIHNjcmF0Y2gu
Z3ByKCksIG5vZGUuaWRlbnRpZmllck51bWJlcigpLCB0cnVlKTsKIAotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3QgOiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0LCB2YWx1ZUdQ
UiwgYmFzZUdQUiwgaWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkpOwogICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
</data>
<flag name="review"
          id="92904"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98783</attachid>
            <date>2011-06-27 14:15:05 -0700</date>
            <delta_ts>2011-06-27 14:17:07 -0700</delta_ts>
            <desc>the patch (fix review)</desc>
            <filename>putbyid_patch_3.diff</filename>
            <type>text/plain</type>
            <size>23036</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk3NzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAK
KzIwMTEtMDYtMjYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGRvZXMgbm90IHBl
cmZvcm0gcHV0X2J5X2lkIGNhY2hpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MzQwOQorCisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgICog
ZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgor
ICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjphZGRQcm9wZXJ0eUFjY2Vzcyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OlByb3BlcnR5QWNjZXNzUmVjb3JkOjpQcm9wZXJ0eUFjY2Vzc1JlY29yZCk6CisgICAgICAg
ICogZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25T
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1JlcGF0
Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRmZ1JlcGF0Y2hCeUlkU2VsZkFjY2Vzcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjph
cHByb3ByaWF0ZVB1dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVQ
dXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjpkZmdSZXBhdGNoUHV0QnlJRCk6CisgICAgICAg
ICogZGZnL0RGR1JlcGF0Y2guaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKwogMjAxMS0w
Ni0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEdhdmluIEJhcnJhY2xvdWdoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDg5NzczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5pb24g
ewogICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICBpbnRwdHJfdCBkZWx0YUNo
ZWNrVG9DYWxsOwotICAgICAgICAgICAgICAgIGludHB0cl90IGRlbHRhQ2FsbFRvTG9hZDsKKyAg
ICAgICAgICAgICAgICBpbnRwdHJfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlOwogICAgICAgICAg
ICAgfSB1bnNldDsKICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgV3JpdGVC
YXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDg5NzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUwLDYgKzM1MCw0NyBAQCB2b2lkIEpJVENvZGVH
ZW5lcmF0b3I6OmNhY2hlZEdldEJ5SWQoR1BSCiAgICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3Mo
ZnVuY3Rpb25DYWxsLCBjaGVja1RvQ2FsbCwgY2FsbFRvTG9hZCk7CiB9CiAKK3ZvaWQgSklUQ29k
ZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BS
LCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBw
dXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKK3sKKyAgICBKSVRDb21w
aWxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKKyAgICBKSVRDb21waWxlcjo6
SnVtcCBzdHJ1Y3R1cmVDaGVjayA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxl
cjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRy
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSkpOworICAgIAorICAgIGlmIChzbG93UGF0aFRh
cmdldC5pc1NldCgpKQorICAgICAgICBzbG93UGF0aFRhcmdldC5saW5rKCZtX2ppdCk7CisKKyAg
ICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnLCBiYXNlR1BSLCB2YWx1ZUdQ
Uik7CisgICAgc2V0dXBUd29TdHViQXJnczxHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86
OmFyZ3VtZW50R1BSMj4odmFsdWVHUFIsIGJhc2VHUFIpOworICAgIG1faml0Lm1vdmUoSklUQ29t
cGlsZXI6OkltbVB0cihpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIzKTsKKyAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZfREZHT3BlcmF0aW9uX0VKSkkgb3B0aW1pemVk
Q2FsbDsKKyAgICBpZiAobV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKSB7CisgICAg
ICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQorICAgICAgICAgICAg
b3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rp
b25DYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcHRpbWl6ZWRDYWxsKTsKKyAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworCisgICAgSklUQ29tcGls
ZXI6Okp1bXAgaGFuZGxlZEJ5QyA9IG1faml0Lmp1bXAoKTsKKyAgICBzdHJ1Y3R1cmVDaGVjay5s
aW5rKCZtX2ppdCk7CisKKyAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7
CisgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3Rv
cmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSLCAwKSk7CisKKyAgICBpbnRwdHJfdCBjaGVja1RvQ2FsbCA9IG1faml0LmRp
ZmZlcmVuY2VCZXR3ZWVuKHN0cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsKTsKKyAgICBp
bnRwdHJfdCBjYWxsVG9TdG9yZSA9IG1faml0LmRpZmZlcmVuY2VCZXR3ZWVuKGZ1bmN0aW9uQ2Fs
bCwgc3RvcmVXaXRoUGF0Y2gpOworCisgICAgaGFuZGxlZEJ5Qy5saW5rKCZtX2ppdCk7CisKKyAg
ICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcyhmdW5jdGlvbkNhbGwsIGNoZWNrVG9DYWxsLCBjYWxs
VG9TdG9yZSk7Cit9CisKICNpZm5kZWYgTkRFQlVHCiBzdGF0aWMgY29uc3QgY2hhciogZGF0YUZv
cm1hdFN0cmluZyhEYXRhRm9ybWF0IGZvcm1hdCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA4OTc3MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MDEsNiArNTAxLDcgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogICAgIHZvaWQg
Y2FjaGVkR2V0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRD
b21waWxlcjo6SnVtcCgpKTsKKyAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoR1BSUmVnIGJhc2VHUFIs
IEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29t
cGlsZXI6Okp1bXAoKSk7CiAKICAgICAvLyBDYWxsZWQgb25jZSBhIG5vZGUgaGFzIGNvbXBsZXRl
ZCBjb2RlIGdlbmVyYXRpb24gYnV0IHByaW9yIHRvIHNldHRpbmcKICAgICAvLyBpdHMgcmVzdWx0
LCB0byBmcmVlIHVwIGl0cyBjaGlsZHJlbi4gKFRoaXMgbXVzdCBoYXBwZW4gcHJpb3IgdG8gc2V0
dGluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAJKHJldmlzaW9uIDg5NzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4OCw3ICszODgsNyBAQCB2b2lkIEpJVENv
bXBpbGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kCiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZv
JiBpbmZvID0gbV9jb2RlQmxvY2stPnN0cnVjdHVyZVN0dWJJbmZvKGkpOwogICAgICAgICBpbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNj
ZXNzZXNbaV0ubV9mdW5jdGlvbkNhbGwpOwogICAgICAgICBpbmZvLnUudW5zZXQuZGVsdGFDaGVj
a1RvQ2FsbCA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2hlY2tUb0NhbGw7Ci0gICAg
ICAgIGluZm8udS51bnNldC5kZWx0YUNhbGxUb0xvYWQgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0u
bV9kZWx0YUNhbGxUb0xvYWQ7CisgICAgICAgIGluZm8udS51bnNldC5kZWx0YUNhbGxUb0xvYWRP
clN0b3JlID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZTsK
ICAgICB9CiAKICAgICAvLyBGSVhNRTogc3dpdGNoIHRoZSByZWdpc3RlciBmaWxlIGNoZWNrICYg
YXJpdHkgY2hlY2sgb3ZlciB0byBERkdPcGVydGFpb24gc3R5bGUgY2FsbHMsIG5vdCBKSVQgc3R1
YnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShy
ZXZpc2lvbiA4OTc3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDkgKzIzMiw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNsZWFyU2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZyk7CiAjZW5kaWYKIAotICAgIHZvaWQgYWRk
UHJvcGVydHlBY2Nlc3MoSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxsLCBpbnRwdHJfdCBk
ZWx0YUNoZWNrVG9DYWxsLCBpbnRwdHJfdCBkZWx0YUNhbGxUb0xvYWQpCisgICAgdm9pZCBhZGRQ
cm9wZXJ0eUFjY2VzcyhKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwsIGludHB0cl90IGRl
bHRhQ2hlY2tUb0NhbGwsIGludHB0cl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpCiAgICAgewot
ICAgICAgICBtX3Byb3BlcnR5QWNjZXNzZXMuYXBwZW5kKFByb3BlcnR5QWNjZXNzUmVjb3JkKGZ1
bmN0aW9uQ2FsbCwgZGVsdGFDaGVja1RvQ2FsbCwgZGVsdGFDYWxsVG9Mb2FkKSk7CisgICAgICAg
IG1fcHJvcGVydHlBY2Nlc3Nlcy5hcHBlbmQoUHJvcGVydHlBY2Nlc3NSZWNvcmQoZnVuY3Rpb25D
YWxsLCBkZWx0YUNoZWNrVG9DYWxsLCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlKSk7CiAgICAgfQog
CiBwcml2YXRlOgpAQCAtMjU4LDE2ICsyNTgsMTYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Q2Fs
bFJlY29yZD4gbV9jYWxsczsKIAogICAgIHN0cnVjdCBQcm9wZXJ0eUFjY2Vzc1JlY29yZCB7Ci0g
ICAgICAgIFByb3BlcnR5QWNjZXNzUmVjb3JkKEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2Fs
bCwgaW50cHRyX3QgZGVsdGFDaGVja1RvQ2FsbCwgaW50cHRyX3QgZGVsdGFDYWxsVG9Mb2FkKQor
ICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNh
bGwsIGludHB0cl90IGRlbHRhQ2hlY2tUb0NhbGwsIGludHB0cl90IGRlbHRhQ2FsbFRvTG9hZE9y
U3RvcmUpCiAgICAgICAgICAgICA6IG1fZnVuY3Rpb25DYWxsKGZ1bmN0aW9uQ2FsbCkKICAgICAg
ICAgICAgICwgbV9kZWx0YUNoZWNrVG9DYWxsKGRlbHRhQ2hlY2tUb0NhbGwpCi0gICAgICAgICAg
ICAsIG1fZGVsdGFDYWxsVG9Mb2FkKGRlbHRhQ2FsbFRvTG9hZCkKKyAgICAgICAgICAgICwgbV9k
ZWx0YUNhbGxUb0xvYWRPclN0b3JlKGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpCiAgICAgICAgIHsK
ICAgICAgICAgfQogCiAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIG1fZnVuY3Rpb25DYWxsOwog
ICAgICAgICBpbnRwdHJfdCBtX2RlbHRhQ2hlY2tUb0NhbGw7Ci0gICAgICAgIGludHB0cl90IG1f
ZGVsdGFDYWxsVG9Mb2FkOworICAgICAgICBpbnRwdHJfdCBtX2RlbHRhQ2FsbFRvTG9hZE9yU3Rv
cmU7CiAgICAgfTsKIAogICAgIFZlY3RvcjxQcm9wZXJ0eUFjY2Vzc1JlY29yZCwgND4gbV9wcm9w
ZXJ0eUFjY2Vzc2VzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVj
dWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDg5NzczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc3MCwxMSArNzcwLDE0IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3Vs
YXQKICAgICBjYXNlIFB1dEJ5SWQ6IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUu
Y2hpbGQyKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgYmFzZSk7CiAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIAorICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsK
KworICAgICAgICBjYWNoZWRQdXRCeUlkKGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoLmdwcigp
LCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0LCBub3RDZWxsKTsKIAotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3QgOiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0LCB2YWx1ZUdQUiwg
YmFzZUdQUiwgaWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkpOwogICAgICAgICBu
b1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTc4Miwx
MSArNzg1LDE0IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAg
ICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUu
Y2hpbGQyKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgYmFzZSk7CiAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIAorICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsK
KworICAgICAgICBjYWNoZWRQdXRCeUlkKGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoLmdwcigp
LCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0LCBub3RDZWxsKTsKIAotICAgICAgICBj
YWxsT3BlcmF0aW9uKG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3QgOiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0LCB2
YWx1ZUdQUiwgYmFzZUdQUiwgaWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkpOwog
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gODk3NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAgICAgICAgICJqbXAgXyIgU1RS
SU5HSVpFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAogICAgICk7CiAjZGVm
aW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9BUkc0X1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uKSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKKyNkZWZp
bmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX0FSRzVfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24pIEZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcjgpCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMjg0LDYgKzI4NSw3NCBAQCB2b2lkIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QoRXhlCiAgICAgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRCYXNlKS5wdXREaXJlY3QoZXhlYywgKnByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCit2b2lkIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RP
cHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5
TmFtZSwgUmV0dXJuQWRkcmVzc1B0cik7CitGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJHNV9SRVRV
Uk5fQUREUkVTUyhvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpOwordm9pZCBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2Us
IElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
KQoreworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBKU1ZhbHVlIGJhc2UgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOworICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KHRydWUpOworICAgIAorICAgIGJhc2UucHV0KGV4ZWMsICpwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Cisg
ICAgaWYgKHN0dWJJbmZvLnNlZW4pCisgICAgICAgIGRmZ1JlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJh
c2UsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOworICAgIGVsc2UK
KyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Cit9CisKK3ZvaWQgb3BlcmF0aW9uUHV0QnlJ
ZE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmll
ciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyKTsKK0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9BUkc1X1JFVFVSTl9BRERSRVNTKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSk7
Cit2b2lkIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNz
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOworICAgIEpTVmFsdWUgYmFzZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UpOworICAgIAorICAgIGJh
c2UucHV0KGV4ZWMsICpwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8o
cmV0dXJuQWRkcmVzcyk7CisgICAgaWYgKHN0dWJJbmZvLnNlZW4pCisgICAgICAgIGRmZ1JlcGF0
Y2hQdXRCeUlEKGV4ZWMsIGJhc2UsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBOb3RE
aXJlY3QpOworICAgIGVsc2UKKyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Cit9CisKK3Zv
aWQgb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyKTsK
K0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9BUkc1X1JFVFVSTl9BRERSRVNTKG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Cit2b2lkIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciog
cHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIEpTVmFsdWUg
YmFzZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CisgICAgUHV0UHJvcGVydHlTbG90
IHNsb3QodHJ1ZSk7CisgICAgCisgICAgYmFzZS5wdXREaXJlY3QoZXhlYywgKnByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9
IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBpZiAo
c3R1YkluZm8uc2VlbikKKyAgICAgICAgZGZnUmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgKnBy
b3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7CisgICAgZWxzZQorICAgICAgICBz
dHViSW5mby5zZWVuID0gdHJ1ZTsKK30KKwordm9pZCBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKiBw
cm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIpOworRlVOQ1RJT05fV1JBUFBFUl9XSVRIX0FS
RzVfUkVUVVJOX0FERFJFU1Mob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXpl
KTsKK3ZvaWQgb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplV2l0aFJldHVy
bkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRCYXNlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSk7CisgICAg
CisgICAgYmFzZS5wdXREaXJlY3QoZXhlYywgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwor
ICAgIAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygp
LT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBpZiAoc3R1YkluZm8uc2VlbikKKyAg
ICAgICAgZGZnUmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIERpcmVjdCk7CisgICAgZWxzZQorICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1
ZTsKK30KKwogYm9vbCBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAg
cmV0dXJuIGpzTGVzcyhleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkT3AyKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAkocmV2aXNpb24gODk3NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOSBAQAogI2lu
Y2x1ZGUgPGRmZy9ERkdKSVRDb21waWxlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2VudW0gUHV0S2luZCB7IERpcmVjdCwgTm90RGlyZWN0IH07CisKIGV4dGVybiAi
QyIgewogCiAvLyBUaGVzZSB0eXBlZGVmcyBwcm92aWRlIHR5cGVjaGVja2luZyB3aGVuIGdlbmVy
YXRpbmcgY2FsbHMgb3V0IHRvIGhlbHBlciByb3V0aW5lczsKQEAgLTY0LDYgKzY3LDEwIEBAIHZv
aWQgb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqLCAKIHZvaWQgb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKik7CiB2b2lkIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciopOwogdm9pZCBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqKTsKK3ZvaWQg
b3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqKTsK
K3ZvaWQgb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50
aWZpZXIqKTsKK3ZvaWQgb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIElkZW50aWZpZXIqKTsKK3ZvaWQgb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqKTsKIGJvb2wgb3BlcmF0aW9uQ29tcGFy
ZUxlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMik7CiBib29sIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CiBi
b29sIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gODk3NzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2
IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIK
ICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKQEAgLTM5LDE2ICszOCwxOSBAQCBzdGF0aWMgdm9pZCBkZmdSZXBhdGNoQ2FsbChDb2Rl
QmxvY2sqIGNvCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rp
b24pOwogfQogCi1zdGF0aWMgdm9pZCBkZmdSZXBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHNpemVfdCBvZmZzZXQpCitzdGF0aWMgdm9pZCBkZmdSZXBhdGNoQnlJZFNlbGZBY2Nlc3Mo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvZmZzZXQsIGNvbnN0IEZ1bmN0aW9uUHRyICZzbG93UGF0
aEZ1bmN0aW9uLCBib29sIGNvbXBhY3QpCiB7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKGNvZGVCbG9jayk7CiAKICAgICAvLyBPbmx5IG9wdGltaXplIG9uY2UhCi0gICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRC
eUlkKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIHNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgLy8gUGF0Y2ggdGhlIHN0cnVjdHVyZSBjaGVj
ayAmIHRoZSBvZmZzZXQgb2YgdGhlIGxvYWQuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90
KXN0dWJJbmZvLnUudW5zZXQuZGVsdGFDaGVja1RvQ2FsbCksIHN0cnVjdHVyZSk7Ci0gICAgcmVw
YXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxD
b21wYWN0QXRPZmZzZXQoc3R1YkluZm8udS51bnNldC5kZWx0YUNhbGxUb0xvYWQpLCBzaXplb2Yo
SlNWYWx1ZSkgKiBvZmZzZXQpOworICAgIGlmIChjb21wYWN0KQorICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RB
dE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBzaXplb2Yo
SlNWYWx1ZSkgKiBvZmZzZXQpOworICAgIGVsc2UKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBh
dGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJ
bmZvLnUudW5zZXQuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIHNpemVvZihKU1ZhbHVlKSAqIG9m
ZnNldCk7CiB9CiAKIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCkBAIC03Niw3ICs3OCw3IEBAIHN0
YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgaWYgKChzbG90
LmNhY2hlZFByb3BlcnR5VHlwZSgpICE9IFByb3BlcnR5U2xvdDo6VmFsdWUpIHx8ICgoc2xvdC5j
YWNoZWRPZmZzZXQoKSAqIHNpemVvZihKU1ZhbHVlKSkgPiAodW5zaWduZWQpTWFjcm9Bc3NlbWJs
ZXI6Ok1heGltdW1Db21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGRmZ1JlcGF0Y2hHZXRCeUlkU2VsZihjb2RlQmxvY2ss
IHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICBkZmdS
ZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90
LmNhY2hlZE9mZnNldCgpLCBvcGVyYXRpb25HZXRCeUlkLCB0cnVlKTsKICAgICAgICAgc3R1Yklu
Zm8uaW5pdEdldEJ5SWRTZWxmKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHJ1Y3R1cmUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC05Miw2ICs5
NCw1MyBAQCB2b2lkIGRmZ1JlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgCiAgICAgICAg
IGRmZ1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwogfQogCitzdGF0aWMgVl9ERkdPcGVyYXRpb25fRUpK
SSBhcHByb3ByaWF0ZVB1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3Qs
IFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgeworICAg
ICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdDsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3Q7CisgICAgfQorICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7CisgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3Q7Cit9CisKK3N0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0
S2luZCkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwor
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAg
ICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpT
Q2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7CisgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVh
YmxlRGljdGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBPcHRpbWl6
ZSBzZWxmIGFjY2Vzcy4KKyAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSB7CisgICAg
ICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGRmZ1JlcGF0Y2hCeUlkU2VsZkFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIGFw
cHJvcHJpYXRlUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7CisgICAgICAg
IHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZSgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgLy8gRklYTUU6IHNob3VsZCBzdXBwb3J0IHRoZSB0cmFuc2l0aW9uIGNhc2UhCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1
dEtpbmQgcHV0S2luZCkKK3sKKyAgICBib29sIGNhY2hlZCA9IHRyeUNhY2hlUHV0QnlJRChleGVj
LCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOworICAg
IGlmICghY2FjaGVkKQorICAgICAgICBkZmdSZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZVB1dEJ5SWRGdW5jdGlvbihz
bG90LCBwdXRLaW5kKSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkocmV2aXNpb24gODk3
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkod29ya2luZyBj
b3B5KQpAQCAtMjksMTAgKzI5LDEyIEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRl
IDxkZmcvREZHSklUQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDxkZmcvREZHT3BlcmF0aW9ucy5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgZGZnUmVwYXRjaEdldEJ5
SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiA4OTc3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjMsMjUgKzg2MywyMyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAg
Y2FzZSBQdXRCeUlkOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5j
aGlsZDEpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hp
bGQxKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIpOwot
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzLCBiYXNlKTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9u
KG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3QgOiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0LCB2YWx1ZUdQUiwgYmFzZUdQUiwgaWRlbnRp
Zmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkpOworICAgICAgICBjYWNoZWRQdXRCeUlkKGJh
c2UuZ3ByKCksIHZhbHVlLmdwcigpLCBzY3JhdGNoLmdwcigpLCBub2RlLmlkZW50aWZpZXJOdW1i
ZXIoKSwgTm90RGlyZWN0KTsKKyAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7
Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIpOwotICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzLCBiYXNlKTsKKworICAgICAgICBjYWNoZWRQdXRCeUlkKGJhc2UuZ3ByKCksIHZh
bHVlLmdwcigpLCBzY3JhdGNoLmdwcigpLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0
KTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1v
ZGUoKSA/IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgOiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0LCB2YWx1ZUdQUiwgYmFzZUdQUiwgaWRlbnRpZmllcihub2RlLmlkZW50aWZp
ZXJOdW1iZXIoKSkpOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHJl
dmlzaW9uIDg5NzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDMxLDcgKzEwMzEsNyBAQAogI2lmIEVOQUJMRShKSVQpICYmIFVT
RShKU1ZBTFVFNjQpICYmIFBMQVRGT1JNKE1BQykKICNkZWZpbmUgRU5BQkxFX0RGR19KSVQgMQog
LyogRW5hYmxlZCB3aXRoIHJlc3RyaWN0aW9ucyB0byBjaXJjdW12ZW50IGtub3duIHBlcmZvcm1h
bmNlIHJlZ3Jlc3Npb25zLiAqLwotI2RlZmluZSBFTkFCTEVfREZHX0pJVF9SRVNUUklDVElPTlMg
MQorI2RlZmluZSBFTkFCTEVfREZHX0pJVF9SRVNUUklDVElPTlMgMAogI2VuZGlmCiAKIC8qIEVu
c3VyZSB0aGF0IGVpdGhlciB0aGUgSklUIG9yIHRoZSBpbnRlcnByZXRlciBoYXMgYmVlbiBlbmFi
bGVkLiAqLwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98784</attachid>
            <date>2011-06-27 14:17:07 -0700</date>
            <delta_ts>2011-06-27 14:38:21 -0700</delta_ts>
            <desc>the patch (fix review)</desc>
            <filename>putbyid_patch_3.diff</filename>
            <type>text/plain</type>
            <size>22473</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk3NzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAK
KzIwMTEtMDYtMjYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGRvZXMgbm90IHBl
cmZvcm0gcHV0X2J5X2lkIGNhY2hpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MzQwOQorCisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgICog
ZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgor
ICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjphZGRQcm9wZXJ0eUFjY2Vzcyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OlByb3BlcnR5QWNjZXNzUmVjb3JkOjpQcm9wZXJ0eUFjY2Vzc1JlY29yZCk6CisgICAgICAg
ICogZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25T
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1JlcGF0
Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRmZ1JlcGF0Y2hCeUlkU2VsZkFjY2Vzcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjph
cHByb3ByaWF0ZVB1dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVQ
dXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjpkZmdSZXBhdGNoUHV0QnlJRCk6CisgICAgICAg
ICogZGZnL0RGR1JlcGF0Y2guaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKwogMjAxMS0w
Ni0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEdhdmluIEJhcnJhY2xvdWdoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDg5NzczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5pb24g
ewogICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICBpbnRwdHJfdCBkZWx0YUNo
ZWNrVG9DYWxsOwotICAgICAgICAgICAgICAgIGludHB0cl90IGRlbHRhQ2FsbFRvTG9hZDsKKyAg
ICAgICAgICAgICAgICBpbnRwdHJfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlOwogICAgICAgICAg
ICAgfSB1bnNldDsKICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgV3JpdGVC
YXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDg5NzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUwLDYgKzM1MCw0NyBAQCB2b2lkIEpJVENvZGVH
ZW5lcmF0b3I6OmNhY2hlZEdldEJ5SWQoR1BSCiAgICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3Mo
ZnVuY3Rpb25DYWxsLCBjaGVja1RvQ2FsbCwgY2FsbFRvTG9hZCk7CiB9CiAKK3ZvaWQgSklUQ29k
ZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BS
LCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBw
dXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKK3sKKyAgICBKSVRDb21w
aWxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKKyAgICBKSVRDb21waWxlcjo6
SnVtcCBzdHJ1Y3R1cmVDaGVjayA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxl
cjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRy
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSkpOworICAgIAorICAgIGlmIChzbG93UGF0aFRh
cmdldC5pc1NldCgpKQorICAgICAgICBzbG93UGF0aFRhcmdldC5saW5rKCZtX2ppdCk7CisKKyAg
ICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnLCBiYXNlR1BSLCB2YWx1ZUdQ
Uik7CisgICAgc2V0dXBUd29TdHViQXJnczxHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86
OmFyZ3VtZW50R1BSMj4odmFsdWVHUFIsIGJhc2VHUFIpOworICAgIG1faml0Lm1vdmUoSklUQ29t
cGlsZXI6OkltbVB0cihpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIzKTsKKyAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZfREZHT3BlcmF0aW9uX0VKSkkgb3B0aW1pemVk
Q2FsbDsKKyAgICBpZiAobV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKSB7CisgICAg
ICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQorICAgICAgICAgICAg
b3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rp
b25DYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcHRpbWl6ZWRDYWxsKTsKKyAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworCisgICAgSklUQ29tcGls
ZXI6Okp1bXAgaGFuZGxlZEJ5QyA9IG1faml0Lmp1bXAoKTsKKyAgICBzdHJ1Y3R1cmVDaGVjay5s
aW5rKCZtX2ppdCk7CisKKyAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7
CisgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3Rv
cmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSLCAwKSk7CisKKyAgICBpbnRwdHJfdCBjaGVja1RvQ2FsbCA9IG1faml0LmRp
ZmZlcmVuY2VCZXR3ZWVuKHN0cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsKTsKKyAgICBp
bnRwdHJfdCBjYWxsVG9TdG9yZSA9IG1faml0LmRpZmZlcmVuY2VCZXR3ZWVuKGZ1bmN0aW9uQ2Fs
bCwgc3RvcmVXaXRoUGF0Y2gpOworCisgICAgaGFuZGxlZEJ5Qy5saW5rKCZtX2ppdCk7CisKKyAg
ICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcyhmdW5jdGlvbkNhbGwsIGNoZWNrVG9DYWxsLCBjYWxs
VG9TdG9yZSk7Cit9CisKICNpZm5kZWYgTkRFQlVHCiBzdGF0aWMgY29uc3QgY2hhciogZGF0YUZv
cm1hdFN0cmluZyhEYXRhRm9ybWF0IGZvcm1hdCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA4OTc3MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MDEsNiArNTAxLDcgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogICAgIHZvaWQg
Y2FjaGVkR2V0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRD
b21waWxlcjo6SnVtcCgpKTsKKyAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoR1BSUmVnIGJhc2VHUFIs
IEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29t
cGlsZXI6Okp1bXAoKSk7CiAKICAgICAvLyBDYWxsZWQgb25jZSBhIG5vZGUgaGFzIGNvbXBsZXRl
ZCBjb2RlIGdlbmVyYXRpb24gYnV0IHByaW9yIHRvIHNldHRpbmcKICAgICAvLyBpdHMgcmVzdWx0
LCB0byBmcmVlIHVwIGl0cyBjaGlsZHJlbi4gKFRoaXMgbXVzdCBoYXBwZW4gcHJpb3IgdG8gc2V0
dGluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAJKHJldmlzaW9uIDg5NzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4OCw3ICszODgsNyBAQCB2b2lkIEpJVENv
bXBpbGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kCiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZv
JiBpbmZvID0gbV9jb2RlQmxvY2stPnN0cnVjdHVyZVN0dWJJbmZvKGkpOwogICAgICAgICBpbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNj
ZXNzZXNbaV0ubV9mdW5jdGlvbkNhbGwpOwogICAgICAgICBpbmZvLnUudW5zZXQuZGVsdGFDaGVj
a1RvQ2FsbCA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2hlY2tUb0NhbGw7Ci0gICAg
ICAgIGluZm8udS51bnNldC5kZWx0YUNhbGxUb0xvYWQgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0u
bV9kZWx0YUNhbGxUb0xvYWQ7CisgICAgICAgIGluZm8udS51bnNldC5kZWx0YUNhbGxUb0xvYWRP
clN0b3JlID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZTsK
ICAgICB9CiAKICAgICAvLyBGSVhNRTogc3dpdGNoIHRoZSByZWdpc3RlciBmaWxlIGNoZWNrICYg
YXJpdHkgY2hlY2sgb3ZlciB0byBERkdPcGVydGFpb24gc3R5bGUgY2FsbHMsIG5vdCBKSVQgc3R1
YnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShy
ZXZpc2lvbiA4OTc3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDkgKzIzMiw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNsZWFyU2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZyk7CiAjZW5kaWYKIAotICAgIHZvaWQgYWRk
UHJvcGVydHlBY2Nlc3MoSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxsLCBpbnRwdHJfdCBk
ZWx0YUNoZWNrVG9DYWxsLCBpbnRwdHJfdCBkZWx0YUNhbGxUb0xvYWQpCisgICAgdm9pZCBhZGRQ
cm9wZXJ0eUFjY2VzcyhKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwsIGludHB0cl90IGRl
bHRhQ2hlY2tUb0NhbGwsIGludHB0cl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpCiAgICAgewot
ICAgICAgICBtX3Byb3BlcnR5QWNjZXNzZXMuYXBwZW5kKFByb3BlcnR5QWNjZXNzUmVjb3JkKGZ1
bmN0aW9uQ2FsbCwgZGVsdGFDaGVja1RvQ2FsbCwgZGVsdGFDYWxsVG9Mb2FkKSk7CisgICAgICAg
IG1fcHJvcGVydHlBY2Nlc3Nlcy5hcHBlbmQoUHJvcGVydHlBY2Nlc3NSZWNvcmQoZnVuY3Rpb25D
YWxsLCBkZWx0YUNoZWNrVG9DYWxsLCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlKSk7CiAgICAgfQog
CiBwcml2YXRlOgpAQCAtMjU4LDE2ICsyNTgsMTYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Q2Fs
bFJlY29yZD4gbV9jYWxsczsKIAogICAgIHN0cnVjdCBQcm9wZXJ0eUFjY2Vzc1JlY29yZCB7Ci0g
ICAgICAgIFByb3BlcnR5QWNjZXNzUmVjb3JkKEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2Fs
bCwgaW50cHRyX3QgZGVsdGFDaGVja1RvQ2FsbCwgaW50cHRyX3QgZGVsdGFDYWxsVG9Mb2FkKQor
ICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNh
bGwsIGludHB0cl90IGRlbHRhQ2hlY2tUb0NhbGwsIGludHB0cl90IGRlbHRhQ2FsbFRvTG9hZE9y
U3RvcmUpCiAgICAgICAgICAgICA6IG1fZnVuY3Rpb25DYWxsKGZ1bmN0aW9uQ2FsbCkKICAgICAg
ICAgICAgICwgbV9kZWx0YUNoZWNrVG9DYWxsKGRlbHRhQ2hlY2tUb0NhbGwpCi0gICAgICAgICAg
ICAsIG1fZGVsdGFDYWxsVG9Mb2FkKGRlbHRhQ2FsbFRvTG9hZCkKKyAgICAgICAgICAgICwgbV9k
ZWx0YUNhbGxUb0xvYWRPclN0b3JlKGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpCiAgICAgICAgIHsK
ICAgICAgICAgfQogCiAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIG1fZnVuY3Rpb25DYWxsOwog
ICAgICAgICBpbnRwdHJfdCBtX2RlbHRhQ2hlY2tUb0NhbGw7Ci0gICAgICAgIGludHB0cl90IG1f
ZGVsdGFDYWxsVG9Mb2FkOworICAgICAgICBpbnRwdHJfdCBtX2RlbHRhQ2FsbFRvTG9hZE9yU3Rv
cmU7CiAgICAgfTsKIAogICAgIFZlY3RvcjxQcm9wZXJ0eUFjY2Vzc1JlY29yZCwgND4gbV9wcm9w
ZXJ0eUFjY2Vzc2VzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVj
dWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDg5NzczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc3MCwxMSArNzcwLDE0IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3Vs
YXQKICAgICBjYXNlIFB1dEJ5SWQ6IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUu
Y2hpbGQyKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgYmFzZSk7CiAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIAorICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsK
KworICAgICAgICBjYWNoZWRQdXRCeUlkKGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoLmdwcigp
LCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0LCBub3RDZWxsKTsKIAotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3QgOiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0LCB2YWx1ZUdQUiwg
YmFzZUdQUiwgaWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkpOwogICAgICAgICBu
b1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTc4Miwx
MSArNzg1LDE0IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAg
ICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUu
Y2hpbGQyKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgYmFzZSk7CiAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIAorICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsK
KworICAgICAgICBjYWNoZWRQdXRCeUlkKGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoLmdwcigp
LCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0LCBub3RDZWxsKTsKIAotICAgICAgICBj
YWxsT3BlcmF0aW9uKG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3QgOiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0LCB2
YWx1ZUdQUiwgYmFzZUdQUiwgaWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkpOwog
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gODk3NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAgICAgICAgICJqbXAgXyIgU1RS
SU5HSVpFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAogICAgICk7CiAjZGVm
aW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9BUkc0X1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uKSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKKyNkZWZp
bmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX0FSRzVfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24pIEZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcjgpCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMjg0LDYgKzI4NSw3NCBAQCB2b2lkIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QoRXhlCiAgICAgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRCYXNlKS5wdXREaXJlY3QoZXhlYywgKnByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCit2b2lkIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RP
cHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5
TmFtZSwgUmV0dXJuQWRkcmVzc1B0cik7CitGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJHNV9SRVRV
Uk5fQUREUkVTUyhvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpOwordm9pZCBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2Us
IElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
KQoreworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBKU1ZhbHVlIGJhc2UgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOworICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KHRydWUpOworICAgIAorICAgIGJhc2UucHV0KGV4ZWMsICpwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Cisg
ICAgaWYgKHN0dWJJbmZvLnNlZW4pCisgICAgICAgIGRmZ1JlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJh
c2UsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOworICAgIGVsc2UK
KyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Cit9CisKK3ZvaWQgb3BlcmF0aW9uUHV0QnlJ
ZE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmll
ciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyKTsKK0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9BUkc1X1JFVFVSTl9BRERSRVNTKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSk7
Cit2b2lkIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNz
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOworICAgIEpTVmFsdWUgYmFzZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UpOworICAgIAorICAgIGJh
c2UucHV0KGV4ZWMsICpwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8o
cmV0dXJuQWRkcmVzcyk7CisgICAgaWYgKHN0dWJJbmZvLnNlZW4pCisgICAgICAgIGRmZ1JlcGF0
Y2hQdXRCeUlEKGV4ZWMsIGJhc2UsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBOb3RE
aXJlY3QpOworICAgIGVsc2UKKyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Cit9CisKK3Zv
aWQgb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyKTsK
K0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9BUkc1X1JFVFVSTl9BRERSRVNTKG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Cit2b2lkIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciog
cHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIEpTVmFsdWUg
YmFzZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CisgICAgUHV0UHJvcGVydHlTbG90
IHNsb3QodHJ1ZSk7CisgICAgCisgICAgYmFzZS5wdXREaXJlY3QoZXhlYywgKnByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9
IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBpZiAo
c3R1YkluZm8uc2VlbikKKyAgICAgICAgZGZnUmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgKnBy
b3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7CisgICAgZWxzZQorICAgICAgICBz
dHViSW5mby5zZWVuID0gdHJ1ZTsKK30KKwordm9pZCBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKiBw
cm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIpOworRlVOQ1RJT05fV1JBUFBFUl9XSVRIX0FS
RzVfUkVUVVJOX0FERFJFU1Mob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXpl
KTsKK3ZvaWQgb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplV2l0aFJldHVy
bkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRCYXNlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSk7CisgICAg
CisgICAgYmFzZS5wdXREaXJlY3QoZXhlYywgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwor
ICAgIAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygp
LT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBpZiAoc3R1YkluZm8uc2VlbikKKyAg
ICAgICAgZGZnUmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIERpcmVjdCk7CisgICAgZWxzZQorICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1
ZTsKK30KKwogYm9vbCBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAg
cmV0dXJuIGpzTGVzcyhleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkT3AyKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAkocmV2aXNpb24gODk3NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOSBAQAogI2lu
Y2x1ZGUgPGRmZy9ERkdKSVRDb21waWxlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2VudW0gUHV0S2luZCB7IERpcmVjdCwgTm90RGlyZWN0IH07CisKIGV4dGVybiAi
QyIgewogCiAvLyBUaGVzZSB0eXBlZGVmcyBwcm92aWRlIHR5cGVjaGVja2luZyB3aGVuIGdlbmVy
YXRpbmcgY2FsbHMgb3V0IHRvIGhlbHBlciByb3V0aW5lczsKQEAgLTY0LDYgKzY3LDEwIEBAIHZv
aWQgb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqLCAKIHZvaWQgb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKik7CiB2b2lkIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciopOwogdm9pZCBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqKTsKK3ZvaWQg
b3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqKTsK
K3ZvaWQgb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50
aWZpZXIqKTsKK3ZvaWQgb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIElkZW50aWZpZXIqKTsKK3ZvaWQgb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqKTsKIGJvb2wgb3BlcmF0aW9uQ29tcGFy
ZUxlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMik7CiBib29sIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CiBi
b29sIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gODk3NzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2
IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIK
ICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKQEAgLTM5LDE2ICszOCwxOSBAQCBzdGF0aWMgdm9pZCBkZmdSZXBhdGNoQ2FsbChDb2Rl
QmxvY2sqIGNvCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rp
b24pOwogfQogCi1zdGF0aWMgdm9pZCBkZmdSZXBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHNpemVfdCBvZmZzZXQpCitzdGF0aWMgdm9pZCBkZmdSZXBhdGNoQnlJZFNlbGZBY2Nlc3Mo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvZmZzZXQsIGNvbnN0IEZ1bmN0aW9uUHRyICZzbG93UGF0
aEZ1bmN0aW9uLCBib29sIGNvbXBhY3QpCiB7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKGNvZGVCbG9jayk7CiAKICAgICAvLyBPbmx5IG9wdGltaXplIG9uY2UhCi0gICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRC
eUlkKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIHNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgLy8gUGF0Y2ggdGhlIHN0cnVjdHVyZSBjaGVj
ayAmIHRoZSBvZmZzZXQgb2YgdGhlIGxvYWQuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90
KXN0dWJJbmZvLnUudW5zZXQuZGVsdGFDaGVja1RvQ2FsbCksIHN0cnVjdHVyZSk7Ci0gICAgcmVw
YXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxD
b21wYWN0QXRPZmZzZXQoc3R1YkluZm8udS51bnNldC5kZWx0YUNhbGxUb0xvYWQpLCBzaXplb2Yo
SlNWYWx1ZSkgKiBvZmZzZXQpOworICAgIGlmIChjb21wYWN0KQorICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RB
dE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBzaXplb2Yo
SlNWYWx1ZSkgKiBvZmZzZXQpOworICAgIGVsc2UKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBh
dGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJ
bmZvLnUudW5zZXQuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIHNpemVvZihKU1ZhbHVlKSAqIG9m
ZnNldCk7CiB9CiAKIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCkBAIC03Niw3ICs3OCw3IEBAIHN0
YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgaWYgKChzbG90
LmNhY2hlZFByb3BlcnR5VHlwZSgpICE9IFByb3BlcnR5U2xvdDo6VmFsdWUpIHx8ICgoc2xvdC5j
YWNoZWRPZmZzZXQoKSAqIHNpemVvZihKU1ZhbHVlKSkgPiAodW5zaWduZWQpTWFjcm9Bc3NlbWJs
ZXI6Ok1heGltdW1Db21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGRmZ1JlcGF0Y2hHZXRCeUlkU2VsZihjb2RlQmxvY2ss
IHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICBkZmdS
ZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90
LmNhY2hlZE9mZnNldCgpLCBvcGVyYXRpb25HZXRCeUlkLCB0cnVlKTsKICAgICAgICAgc3R1Yklu
Zm8uaW5pdEdldEJ5SWRTZWxmKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHJ1Y3R1cmUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC05Miw2ICs5
NCw1MyBAQCB2b2lkIGRmZ1JlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgCiAgICAgICAg
IGRmZ1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwogfQogCitzdGF0aWMgVl9ERkdPcGVyYXRpb25fRUpK
SSBhcHByb3ByaWF0ZVB1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3Qs
IFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgeworICAg
ICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdDsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3Q7CisgICAgfQorICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7CisgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3Q7Cit9CisKK3N0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0
S2luZCkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwor
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAg
ICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpT
Q2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7CisgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVh
YmxlRGljdGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBPcHRpbWl6
ZSBzZWxmIGFjY2Vzcy4KKyAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSB7CisgICAg
ICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGRmZ1JlcGF0Y2hCeUlkU2VsZkFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIGFw
cHJvcHJpYXRlUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7CisgICAgICAg
IHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZSgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgLy8gRklYTUU6IHNob3VsZCBzdXBwb3J0IHRoZSB0cmFuc2l0aW9uIGNhc2UhCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1
dEtpbmQgcHV0S2luZCkKK3sKKyAgICBib29sIGNhY2hlZCA9IHRyeUNhY2hlUHV0QnlJRChleGVj
LCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOworICAg
IGlmICghY2FjaGVkKQorICAgICAgICBkZmdSZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZVB1dEJ5SWRGdW5jdGlvbihz
bG90LCBwdXRLaW5kKSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkocmV2aXNpb24gODk3
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkod29ya2luZyBj
b3B5KQpAQCAtMjksMTAgKzI5LDEyIEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRl
IDxkZmcvREZHSklUQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDxkZmcvREZHT3BlcmF0aW9ucy5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgZGZnUmVwYXRjaEdldEJ5
SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiA4OTc3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjMsMjUgKzg2MywyMyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAg
Y2FzZSBQdXRCeUlkOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5j
aGlsZDEpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hp
bGQxKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIpOwot
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzLCBiYXNlKTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9u
KG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3QgOiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0LCB2YWx1ZUdQUiwgYmFzZUdQUiwgaWRlbnRp
Zmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkpOworICAgICAgICBjYWNoZWRQdXRCeUlkKGJh
c2UuZ3ByKCksIHZhbHVlLmdwcigpLCBzY3JhdGNoLmdwcigpLCBub2RlLmlkZW50aWZpZXJOdW1i
ZXIoKSwgTm90RGlyZWN0KTsKKyAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7
Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIpOwotICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzLCBiYXNlKTsKKworICAgICAgICBjYWNoZWRQdXRCeUlkKGJhc2UuZ3ByKCksIHZh
bHVlLmdwcigpLCBzY3JhdGNoLmdwcigpLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0
KTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1v
ZGUoKSA/IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgOiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0LCB2YWx1ZUdQUiwgYmFzZUdQUiwgaWRlbnRpZmllcihub2RlLmlkZW50aWZp
ZXJOdW1iZXIoKSkpOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>