<?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>17497</bug_id>
          
          <creation_ts>2008-02-23 00:59:23 -0800</creation_ts>
          <short_desc>eliminate DeprecatedValueList</short_desc>
          <delta_ts>2008-12-13 14:59:02 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>71569</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-23 00:59:23 -0800</bug_when>
    <thetext>Need to get rid of this class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71570</commentid>
    <comment_count>1</comment_count>
      <attachid>19290</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-23 01:05:23 -0800</bug_when>
    <thetext>Created attachment 19290
patch to do this for SegmentedString</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71640</commentid>
    <comment_count>2</comment_count>
      <attachid>19290</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-02-23 14:26:44 -0800</bug_when>
    <thetext>Comment on attachment 19290
patch to do this for SegmentedString

r=me, though I assume this requires the changes the to Deque first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71692</commentid>
    <comment_count>3</comment_count>
      <attachid>19290</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-23 23:39:54 -0800</bug_when>
    <thetext>Comment on attachment 19290
patch to do this for SegmentedString

Committed revision 30546.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71844</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-24 23:02:21 -0800</bug_when>
    <thetext>These are the three remaining clients:

    1) CSSMutableStyleDeclaration::m_values -- can be a Vector, I think
    2) Document::m_windowEventListeners -- Vector? ListHashSet?
    3) EventTargetNode::m_regdListeners  -- Vector? ListHashSet?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71944</commentid>
    <comment_count>5</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2008-02-25 17:05:27 -0800</bug_when>
    <thetext>I think that CSSMutableStyleDeclaration might be a great candidate for ListHashMap, something like

ListHashMap&lt;int, CSSProperty&gt;

(the item accessor will be O(n), but that is already the case)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102452</commentid>
    <comment_count>6</comment_count>
      <attachid>26003</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-13 13:16:25 -0800</bug_when>
    <thetext>Created attachment 26003
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102455</commentid>
    <comment_count>7</comment_count>
      <attachid>26003</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2008-12-13 13:53:50 -0800</bug_when>
    <thetext>Comment on attachment 26003
patch

&gt;  #endif
&gt; Index: WebCore/dom/EventTargetNode.cpp
&gt; ===================================================================
&gt; --- WebCore/dom/EventTargetNode.cpp	(revision 39276)
&gt; +++ WebCore/dom/EventTargetNode.cpp	(working copy)
&gt; +const RegisteredEventListeners&amp; EventTargetNode::eventListeners() const
&gt; +{
&gt; +    if (hasRareData()) {
&gt; +        if (RegisteredEventListeners* listeners = rareData()-&gt;listeners())
&gt; +            return *listeners;
&gt; +    }
&gt; +    static const RegisteredEventListeners* emptyListenersVector = new RegisteredEventListeners;
&gt; +    return *emptyListenersVector;

Clever!

&gt;  void EventTargetNode::removeEventListener(const AtomicString&amp; eventType, EventListener* listener, bool useCapture)
&gt;  {
&gt; -    if (!m_regdListeners)
&gt; +    if (!hasRareData())
&gt;          return;
&gt;  
&gt; -    RegisteredEventListenerList::Iterator end = m_regdListeners-&gt;end();
&gt; -    for (RegisteredEventListenerList::Iterator it = m_regdListeners-&gt;begin(); it != end; ++it) {
&gt; -        RegisteredEventListener&amp; r = **it;
&gt; +    RegisteredEventListeners* listeners = rareData()-&gt;listeners();
&gt; +    if (!listeners)
&gt; +        return;
&gt; +
&gt; +    size_t size = listeners-&gt;size();
&gt; +    for (size_t i = 0; i &lt; size; ++i) {
&gt; +        RegisteredEventListener&amp; r = *(*listeners)[i];

I prefer listeners-&gt;at(i).

&gt;  void EventTargetNode::removeInlineEventListenerForType(const AtomicString&amp; eventType)
&gt;  {
&gt; +
&gt; +    size_t size = listeners-&gt;size();
&gt; +    for (size_t i = 0; i &lt; size; ++i) {
&gt; +        RegisteredEventListener&amp; r = *(*listeners)[i];
&gt; +        if (r.eventType() != eventType || !r.listener()-&gt;isInline())
&gt;              continue;
&gt;

Same thing here.
  
&gt; +
&gt; +typedef Vector&lt;RefPtr&lt;RegisteredEventListener&gt; &gt; RegisteredEventListeners;
&gt;

I think RegistereEventListenerVector is better here.
  
r=me!

I usually delete the files in a separate commit. Boy it feels great to see those red patches on webkit-changes ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102460</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-13 14:59:02 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/39279
http://trac.webkit.org/changeset/39280
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19290</attachid>
            <date>2008-02-23 01:05:23 -0800</date>
            <delta_ts>2008-12-13 13:13:18 -0800</delta_ts>
            <desc>patch to do this for SegmentedString</desc>
            <filename>SegmentedStringPatch.txt</filename>
            <type>text/plain</type>
            <size>7855</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDUxOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMDgtMDItMjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gcmVw
bGFjZSBTZWdtZW50ZWRTdHJpbmcncyB1c2Ugb2YgRGVwcmVjYXRlZFZhbHVlTGlzdCB3aXRoIERl
cXVlCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTZWdtZW50ZWRTdHJpbmc6Omxlbmd0aCk6IFVwZGF0ZSB0byB1c2UgRGVx
dWUuCisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRTdHJpbmc6OnNldEV4Y2x1ZGVMaW5lTnVt
YmVycyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjphcHBlbmQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6cHJlcGVuZCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjphZHZhbmNlU3Vic3RyaW5n
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRTdHJpbmc6OnRvU3RyaW5nKTog
RGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuaDogVHdlYWsg
Zm9ybWF0dGluZy4gRG9uJ3QgYm90aGVyIG1ha2luZyBhbiBlbnRpcmUKKyAgICAgICAgY2xhc3Mg
cHJpdmF0ZSB3aXRoIGEgc2luZ2xlIGZyaWVuZC4gQ2hhbmdlIG1fc2JzdHJpbmdzIGZyb20gYSBE
ZXByZWNhdGVkVmFsdWVMaXN0CisgICAgICAgIHRvIGEgRGVxdWUuCisKIDIwMDgtMDItMjIgIEp1
c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVu
dGVkU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVu
dGVkU3RyaW5nLmNwcAkocmV2aXNpb24gMzA1MTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQv
U2VnbWVudGVkU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC01OSwxMCArNTksMTAgQEAgdW5zaWduZWQgU2VnbWVudGVkU3RyaW5nOjpsZW5ndGgoKSBj
b25zdAogICAgICAgICAgICAgKytsZW5ndGg7CiAgICAgfQogICAgIGlmIChtX2NvbXBvc2l0ZSkg
ewotICAgICAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxTZWdtZW50ZWRTdWJz
dHJpbmc+IGkgPSBtX3N1YnN0cmluZ3MuYmVnaW4oKTsKLSAgICAgICAgRGVwcmVjYXRlZFZhbHVl
TGlzdENvbnN0SXRlcmF0b3I8U2VnbWVudGVkU3Vic3RyaW5nPiBlID0gbV9zdWJzdHJpbmdzLmVu
ZCgpOwotICAgICAgICBmb3IgKDsgaSAhPSBlOyArK2kpCi0gICAgICAgICAgICBsZW5ndGggKz0g
KCppKS5tX2xlbmd0aDsKKyAgICAgICAgRGVxdWU8U2VnbWVudGVkU3Vic3RyaW5nPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3N1YnN0cmluZ3MuYmVnaW4oKTsKKyAgICAgICAgRGVxdWU8U2VnbWVu
dGVkU3Vic3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZSA9IG1fc3Vic3RyaW5ncy5lbmQoKTsKKyAg
ICAgICAgZm9yICg7IGl0ICE9IGU7ICsraXQpCisgICAgICAgICAgICBsZW5ndGggKz0gaXQtPm1f
bGVuZ3RoOwogICAgIH0KICAgICByZXR1cm4gbGVuZ3RoOwogfQpAQCAtNzAsMTAgKzcwLDEwIEBA
IHVuc2lnbmVkIFNlZ21lbnRlZFN0cmluZzo6bGVuZ3RoKCkgY29uc3QKIHZvaWQgU2VnbWVudGVk
U3RyaW5nOjpzZXRFeGNsdWRlTGluZU51bWJlcnMoKQogewogICAgIGlmIChtX2NvbXBvc2l0ZSkg
ewotICAgICAgICBEZXByZWNhdGVkVmFsdWVMaXN0SXRlcmF0b3I8U2VnbWVudGVkU3Vic3RyaW5n
PiBpID0gbV9zdWJzdHJpbmdzLmJlZ2luKCk7Ci0gICAgICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RJ
dGVyYXRvcjxTZWdtZW50ZWRTdWJzdHJpbmc+IGUgPSBtX3N1YnN0cmluZ3MuZW5kKCk7Ci0gICAg
ICAgIGZvciAoOyBpICE9IGU7ICsraSkKLSAgICAgICAgICAgICgqaSkuc2V0RXhjbHVkZUxpbmVO
dW1iZXJzKCk7CisgICAgICAgIERlcXVlPFNlZ21lbnRlZFN1YnN0cmluZz46Oml0ZXJhdG9yIGl0
ID0gbV9zdWJzdHJpbmdzLmJlZ2luKCk7CisgICAgICAgIERlcXVlPFNlZ21lbnRlZFN1YnN0cmlu
Zz46Oml0ZXJhdG9yIGUgPSBtX3N1YnN0cmluZ3MuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdCAh
PSBlOyArK2l0KQorICAgICAgICAgICAgaXQtPnNldEV4Y2x1ZGVMaW5lTnVtYmVycygpOwogICAg
IH0gZWxzZQogICAgICAgICBtX2N1cnJlbnRTdHJpbmcuc2V0RXhjbHVkZUxpbmVOdW1iZXJzKCk7
CiB9CkBAIC0xMjAsMTAgKzEyMCwxMCBAQCB2b2lkIFNlZ21lbnRlZFN0cmluZzo6YXBwZW5kKGNv
bnN0IFNlZ21lCiAgICAgQVNTRVJUKCFzLmVzY2FwZWQoKSk7CiAgICAgYXBwZW5kKHMubV9jdXJy
ZW50U3RyaW5nKTsKICAgICBpZiAocy5tX2NvbXBvc2l0ZSkgewotICAgICAgICBEZXByZWNhdGVk
VmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxTZWdtZW50ZWRTdWJzdHJpbmc+IGkgPSBzLm1fc3Vic3Ry
aW5ncy5iZWdpbigpOwotICAgICAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxT
ZWdtZW50ZWRTdWJzdHJpbmc+IGUgPSBzLm1fc3Vic3RyaW5ncy5lbmQoKTsKLSAgICAgICAgZm9y
ICg7IGkgIT0gZTsgKytpKQotICAgICAgICAgICAgYXBwZW5kKCppKTsKKyAgICAgICAgRGVxdWU8
U2VnbWVudGVkU3Vic3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzLm1fc3Vic3RyaW5ncy5i
ZWdpbigpOworICAgICAgICBEZXF1ZTxTZWdtZW50ZWRTdWJzdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciBlID0gcy5tX3N1YnN0cmluZ3MuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdCAhPSBlOyArK2l0
KQorICAgICAgICAgICAgYXBwZW5kKCppdCk7CiAgICAgfQogICAgIG1fY3VycmVudENoYXIgPSBt
X3B1c2hlZENoYXIxID8gJm1fcHVzaGVkQ2hhcjEgOiBtX2N1cnJlbnRTdHJpbmcubV9jdXJyZW50
OwogfQpAQCAtMTMzLDEwICsxMzMsMTAgQEAgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OnByZXBlbmQo
Y29uc3QgU2VnbQogICAgIEFTU0VSVCghZXNjYXBlZCgpKTsKICAgICBBU1NFUlQoIXMuZXNjYXBl
ZCgpKTsKICAgICBpZiAocy5tX2NvbXBvc2l0ZSkgewotICAgICAgICBEZXByZWNhdGVkVmFsdWVM
aXN0Q29uc3RJdGVyYXRvcjxTZWdtZW50ZWRTdWJzdHJpbmc+IGkgPSBzLm1fc3Vic3RyaW5ncy5m
cm9tTGFzdCgpOwotICAgICAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxTZWdt
ZW50ZWRTdWJzdHJpbmc+IGUgPSBzLm1fc3Vic3RyaW5ncy5lbmQoKTsKLSAgICAgICAgZm9yICg7
IGkgIT0gZTsgLS1pKQotICAgICAgICAgICAgcHJlcGVuZCgqaSk7CisgICAgICAgIERlcXVlPFNl
Z21lbnRlZFN1YnN0cmluZz46OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgaXQgPSBzLm1fc3Vic3Ry
aW5ncy5yYmVnaW4oKTsKKyAgICAgICAgRGVxdWU8U2VnbWVudGVkU3Vic3RyaW5nPjo6Y29uc3Rf
cmV2ZXJzZV9pdGVyYXRvciBlID0gcy5tX3N1YnN0cmluZ3MucmVuZCgpOworICAgICAgICBmb3Ig
KDsgaXQgIT0gZTsgKytpdCkKKyAgICAgICAgICAgIHByZXBlbmQoKml0KTsKICAgICB9CiAgICAg
cHJlcGVuZChzLm1fY3VycmVudFN0cmluZyk7CiAgICAgbV9jdXJyZW50Q2hhciA9IG1fcHVzaGVk
Q2hhcjEgPyAmbV9wdXNoZWRDaGFyMSA6IG1fY3VycmVudFN0cmluZy5tX2N1cnJlbnQ7CkBAIC0x
NDYsNyArMTQ2LDcgQEAgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VTdWJzdHJpbmcoKQog
ewogICAgIGlmIChtX2NvbXBvc2l0ZSkgewogICAgICAgICBtX2N1cnJlbnRTdHJpbmcgPSBtX3N1
YnN0cmluZ3MuZmlyc3QoKTsKLSAgICAgICAgbV9zdWJzdHJpbmdzLnJlbW92ZShtX3N1YnN0cmlu
Z3MuYmVnaW4oKSk7CisgICAgICAgIG1fc3Vic3RyaW5ncy5yZW1vdmVGaXJzdCgpOwogICAgICAg
ICBpZiAobV9zdWJzdHJpbmdzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fY29tcG9zaXRlID0g
ZmFsc2U7CiAgICAgfSBlbHNlIHsKQEAgLTE2NCwxMCArMTY0LDEwIEBAIFN0cmluZyBTZWdtZW50
ZWRTdHJpbmc6OnRvU3RyaW5nKCkgY29uc3QKICAgICB9CiAgICAgbV9jdXJyZW50U3RyaW5nLmFw
cGVuZFRvKHJlc3VsdCk7CiAgICAgaWYgKG1fY29tcG9zaXRlKSB7Ci0gICAgICAgIERlcHJlY2F0
ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFNlZ21lbnRlZFN1YnN0cmluZz4gaSA9IG1fc3Vic3Ry
aW5ncy5iZWdpbigpOwotICAgICAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxT
ZWdtZW50ZWRTdWJzdHJpbmc+IGUgPSBtX3N1YnN0cmluZ3MuZW5kKCk7Ci0gICAgICAgIGZvciAo
OyBpICE9IGU7ICsraSkKLSAgICAgICAgICAgICgqaSkuYXBwZW5kVG8ocmVzdWx0KTsKKyAgICAg
ICAgRGVxdWU8U2VnbWVudGVkU3Vic3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N1YnN0
cmluZ3MuYmVnaW4oKTsKKyAgICAgICAgRGVxdWU8U2VnbWVudGVkU3Vic3RyaW5nPjo6Y29uc3Rf
aXRlcmF0b3IgZSA9IG1fc3Vic3RyaW5ncy5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0ICE9IGU7
ICsraXQpCisgICAgICAgICAgICBpdC0+YXBwZW5kVG8ocmVzdWx0KTsKICAgICB9CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5n
LmgJKHJldmlzaW9uIDMwNTE1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0
cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwyMCArMjAsMjIgQEAKICNpZm5kZWYgU2VnbWVu
dGVkU3RyaW5nX2gKICNkZWZpbmUgU2VnbWVudGVkU3RyaW5nX2gKIAotI2luY2x1ZGUgIkRlcHJl
Y2F0ZWRWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi9EZXF1ZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNlZ21lbnRlZFN0
cmluZzsKIAogY2xhc3MgU2VnbWVudGVkU3Vic3RyaW5nIHsKLXByaXZhdGU6Ci0gICAgZnJpZW5k
IGNsYXNzIFNlZ21lbnRlZFN0cmluZzsKLSAgICAKK3B1YmxpYzoKICAgICBTZWdtZW50ZWRTdWJz
dHJpbmcoKSA6IG1fbGVuZ3RoKDApLCBtX2N1cnJlbnQoMCksIG1fZG9Ob3RFeGNsdWRlTGluZU51
bWJlcnModHJ1ZSkge30KLSAgICBTZWdtZW50ZWRTdWJzdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIp
IDogbV9zdHJpbmcoc3RyKSwgbV9sZW5ndGgoc3RyLmxlbmd0aCgpKSwgbV9kb05vdEV4Y2x1ZGVM
aW5lTnVtYmVycyh0cnVlKSB7Ci0gICAgICAgIG1fY3VycmVudCA9IG1fbGVuZ3RoID09IDAgPyAw
IDogbV9zdHJpbmcuY2hhcmFjdGVycygpOworICAgIFNlZ21lbnRlZFN1YnN0cmluZyhjb25zdCBT
dHJpbmcmIHN0cikKKyAgICAgICAgOiBtX2xlbmd0aChzdHIubGVuZ3RoKCkpCisgICAgICAgICwg
bV9jdXJyZW50KHN0ci5pc0VtcHR5KCkgPyAwIDogc3RyLmNoYXJhY3RlcnMoKSkKKyAgICAgICAg
LCBtX3N0cmluZyhzdHIpCisgICAgICAgICwgbV9kb05vdEV4Y2x1ZGVMaW5lTnVtYmVycyh0cnVl
KQorICAgIHsKICAgICB9CiAKICAgICBTZWdtZW50ZWRTdWJzdHJpbmcoY29uc3QgVUNoYXIqIHN0
ciwgaW50IGxlbmd0aCkgOiBtX2xlbmd0aChsZW5ndGgpLCBtX2N1cnJlbnQobGVuZ3RoID09IDAg
PyAwIDogc3RyKSwgbV9kb05vdEV4Y2x1ZGVMaW5lTnVtYmVycyh0cnVlKSB7fQpAQCAtNDUsNyAr
NDcsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRFeGNsdWRlTGluZU51bWJlcnMoKSB7IG1f
ZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMgPSBmYWxzZTsgfQogCi0gICAgdm9pZCBhcHBlbmRUbyhT
dHJpbmcmIHN0cikgY29uc3QgeworICAgIHZvaWQgYXBwZW5kVG8oU3RyaW5nJiBzdHIpIGNvbnN0
CisgICAgewogICAgICAgICBpZiAobV9zdHJpbmcuY2hhcmFjdGVycygpID09IG1fY3VycmVudCkg
ewogICAgICAgICAgICAgaWYgKHN0ci5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgc3RyID0g
bV9zdHJpbmc7CkBAIC01Niw5ICs1OSwxMiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQog
Ci0gICAgU3RyaW5nIG1fc3RyaW5nOworcHVibGljOgogICAgIGludCBtX2xlbmd0aDsKICAgICBj
b25zdCBVQ2hhciogbV9jdXJyZW50OworCitwcml2YXRlOgorICAgIFN0cmluZyBtX3N0cmluZzsK
ICAgICBib29sIG1fZG9Ob3RFeGNsdWRlTGluZU51bWJlcnM7CiB9OwogCkBAIC03Nyw4ICs4Myw4
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIHZvaWQgYXBwZW5kKGNvbnN0
IFNlZ21lbnRlZFN0cmluZyAmKTsKLSAgICB2b2lkIHByZXBlbmQoY29uc3QgU2VnbWVudGVkU3Ry
aW5nICYpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpOworICAgIHZv
aWQgcHJlcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKICAgICAKICAgICBib29sIGV4Y2x1
ZGVMaW5lTnVtYmVycygpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFN0cmluZy5leGNsdWRlTGlu
ZU51bWJlcnMoKTsgfQogICAgIHZvaWQgc2V0RXhjbHVkZUxpbmVOdW1iZXJzKCk7CkBAIC0xNDks
OCArMTU1LDggQEAgcHVibGljOgogICAgIGNvbnN0IFVDaGFyKiBvcGVyYXRvci0+KCkgY29uc3Qg
eyByZXR1cm4gY3VycmVudCgpOyB9CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgYXBwZW5kKGNv
bnN0IFNlZ21lbnRlZFN1YnN0cmluZyAmKTsKLSAgICB2b2lkIHByZXBlbmQoY29uc3QgU2VnbWVu
dGVkU3Vic3RyaW5nICYpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN1YnN0cmlu
ZyYpOworICAgIHZvaWQgcHJlcGVuZChjb25zdCBTZWdtZW50ZWRTdWJzdHJpbmcmKTsKIAogICAg
IHZvaWQgYWR2YW5jZVNsb3dDYXNlKCk7CiAgICAgdm9pZCBhZHZhbmNlU2xvd0Nhc2UoaW50JiBs
aW5lTnVtYmVyKTsKQEAgLTE2MSw3ICsxNjcsNyBAQCBwcml2YXRlOgogICAgIFVDaGFyIG1fcHVz
aGVkQ2hhcjI7CiAgICAgU2VnbWVudGVkU3Vic3RyaW5nIG1fY3VycmVudFN0cmluZzsKICAgICBj
b25zdCBVQ2hhciogbV9jdXJyZW50Q2hhcjsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PFNlZ21l
bnRlZFN1YnN0cmluZz4gbV9zdWJzdHJpbmdzOworICAgIERlcXVlPFNlZ21lbnRlZFN1YnN0cmlu
Zz4gbV9zdWJzdHJpbmdzOwogICAgIGJvb2wgbV9jb21wb3NpdGU7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26003</attachid>
            <date>2008-12-13 13:16:25 -0800</date>
            <delta_ts>2008-12-13 13:53:50 -0800</delta_ts>
            <desc>patch</desc>
            <filename>ValueListPatch.txt</filename>
            <type>text/plain</type>
            <size>61611</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTI3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAwIEBACisyMDA4LTEyLTEzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ5NworICAgICAgICAgIGVs
aW1pbmF0ZSBEZXByZWNhdGVkVmFsdWVMaXN0CisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVEZWNs
YXJhdGlvbi5jcHA6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZS4KKworICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlQWxsRXZlbnRM
aXN0ZW5lcnNGcm9tQWxsTm9kZXMpOgorICAgICAgICBTZXQgdGhlIHJlbW92ZWQgZmxhZyBvbiB0
aGUgd2luZG93IGV2ZW50IGxpc3RlbmVycyBpbiBjYXNlIHdlCisgICAgICAgIGFyZSBpbiB0aGUg
bWlkZGxlIG9mIGRpc3BhdGNoaW5nIGV2ZW50cyBvbiB0aGlzIHdpbmRvdy4KKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpjbGVhcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OmhhbmRsZVdpbmRvd0V2ZW50KTogQ2hhbmdlZCB0byB1c2UgYSB2ZWN0b3IKKyAgICAgICAg
aW5zdGVhZCBvZiBhIERlcHJlY2F0ZWRQdHJMaXN0LgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OndpbmRvd0lubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlV2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUp
OiBEaXR0by4KKyAgICAgICAgQWxzbyBhZGRlZCBhIGNhbGwgdG8gc2V0UmVtb3ZlZCwgd2hpY2gg
aXMgbmVlZGVkIGhlcmUganVzdCBhcyBpbgorICAgICAgICBvdGhlciBmdW5jdGlvbnMgdGhhdCBy
ZW1vdmUuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlV2luZG93RXZlbnRMaXN0
ZW5lcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Omhhc1dpbmRvd0V2ZW50
TGlzdGVuZXIpOiBEaXR0by4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOiBDaGFuZ2VkIFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdCB0bworICAgICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0
ZW5lcnMuCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjphdHRhY2gpOiBVc2UgYSBmdW5jdGlvbiB0byBhY2Nlc3MgcmFyZSBkYXRhIGluc3Rl
YWQKKyAgICAgICAgb2YgZ2V0dGluZyBkaXJlY3RseSBhdCB0aGUgZGF0YSBmaWVsZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmZvY3VzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjpjYW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUpOiBEaXR0by4KKworICAgICAgICAq
IGRvbS9FbGVtZW50UmFyZURhdGEuaDogVXNlICJ1c2luZyIgdG8gbWFrZSB0aGluZ3MgdGhhdCBh
cmUgcHJvdGVjdGVkCisgICAgICAgIGluIE5vZGVSYXJlRGF0YSBiZSBwdWJsaWMgaGVyZS4KKwor
ICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5oOiBSZW1vdmVkIGluY2x1ZGUgb2YgRGVwcmVjYXRl
ZFZhbHVlTGlzdCBhbmQKKyAgICAgICAgcmVsYXRlZCBkZWNsZWFyYXRpb25zIHRoYXQgd2VyZW4n
dCBuZWVkZWQuIFR3ZWFrZWQgdGhlIGRlZmluaXRpb25zCisgICAgICAgIG9mIHRoZSBmb3JiaWRF
dmVudERpc3BhdGNoIGZ1bmN0aW9ucyB0b28uCisKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXRO
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6RXZlbnRUYXJnZXRO
b2RlKTogRWxpbWluYXRlZCBjb2RlIHRoYXQKKyAgICAgICAgd2FzIHVzZWQgdG8gaW5pdGlhbGl6
ZWQgbV9yZWdkTGlzdGVuZXJzLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjp+
RXZlbnRUYXJnZXROb2RlKTogRWxtaW5hdGVkIGRlbGV0ZSBvZgorICAgICAgICBtX3JlZ2RMaXN0
ZW5lcnMuIENoYW5nZWQgY29kZSB0byB1c2UgZXZlbnRMaXN0ZW5lcnMoKSBpbnN0ZWFkIG9mCisg
ICAgICAgIG1fcmVnZExpc3RlbmVycy4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9k
ZTo6ZXZlbnRMaXN0ZW5lcnMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0
Tm9kZTo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOiBVc2UgZXZlbnRMaXN0ZW5lcnMuCisgICAgICAg
IChXZWJDb3JlOjpFdmVudFRhcmdldE5vZGU6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6d2lsbE1vdmVUb05ld093bmVyRG9j
dW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6ZGlkTW92
ZVRvTmV3T3duZXJEb2N1bWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJn
ZXROb2RlOjphZGRFdmVudExpc3RlbmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFdmVu
dFRhcmdldE5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50VGFyZ2V0Tm9kZTo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMpOiBEaXR0by4KKyAg
ICAgICAgQWxzbyBhZGRlZCBjb2RlIHRvIGNhbGwgc2V0UmVtb3ZlZCBvbiBhbGwgdGhlIGxpc3Rl
bmVycy4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6aGFuZGxlTG9jYWxFdmVu
dHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hH
ZW5lcmljRXZlbnQpOiBGaXhlZCBpbmRlbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
VGFyZ2V0Tm9kZTo6cmVtb3ZlSW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUpOiBVc2UKKyAgICAg
ICAgdGhlIG5ldyBldmVudCBsaXN0ZW5lcnMgdmVjdG9yLiBBbHNvIGFkZGVkIG1pc3NpbmcgY2Fs
bCB0byBzZXRSZW1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjppbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZSk6IERpdHRvLgorCisgICAgICAgICogZG9tL0V2ZW50VGFy
Z2V0Tm9kZS5oOiBBZGRlZCBhIG5ldyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnMgdHlwZQorICAg
ICAgICBhbmQgcmVwbGFjZWQgdGhlIG9sZCBsb2NhbEV2ZW50TGlzdGVuZXJzIGZ1bmN0aW9uIHdp
dGggYSBuZXcKKyAgICAgICAgZXZlbnRMaXN0ZW5lcnNUeXBlIGZ1bmN0aW9uLiBSZW1vdmVkIG1f
cmVnZExpc3RlbmVycy4KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGU6OmNoaWxkTm9kZXMpOiBSZW1vdmVkIHVubmVlZGVkIHN0ZCBwcmVmaXguCisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpzZXRGb2N1cyk6IFVzZSBmdW5jdGlvbiBpbnN0ZWFkIG9mIGdv
aW5nIGRpcmVjdGx5CisgICAgICAgIGF0IHJhcmUgZGF0YS4KKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OnJhcmVEYXRhRm9jdXNlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cmVn
aXN0ZXJEeW5hbWljTm9kZUxpc3QpOiBSZW1vdmVkIHVubmVlZGVkIHN0ZCBwcmVmaXguCisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5TmFtZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6Y29tcGFyZURvY3VtZW50UG9zaXRpb24pOiBEaXR0by4KKworICAgICAg
ICAqIGRvbS9Ob2RlLmg6IFJlbW92ZWQgdW5uZWVkZWQgZm9yd2FyZCBkZWNsYXJhdGlvbiBvZgor
ICAgICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci4gVGhpcyBpcyBub3cgaW4gRXZlbnRUYXJn
ZXROb2RlLgorCisgICAgICAgICogZG9tL05vZGVSYXJlRGF0YS5oOiBSZW5hbWVkIG1fZm9jdXNl
ZCB0byBtX2lzRm9jdXNlZCBhbmQgbWFkZSBpdAorICAgICAgICBwcml2YXRlLiBNYWRlIG1fbmVl
ZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2ggcHJpdmF0ZS4KKyAgICAgICAg
QWRkZWQgbGlzdGVuZXJzIGFuZCBlbnN1cmVMaXN0ZW5lcnMgZnVuY3Rpb25zIGFzIHdlbGwgYXMg
aXNGb2N1c2VkLAorICAgICAgICBzZXRGb2N1c2VkLCBhbmQgZm9jdXMtYXBwZWFyYW5jZSBmdW5j
dGlvbnMuIE1hZGUgYWxsIGRhdGEgbWVtYmVycyBwcml2YXRlLgorCisgICAgICAgICogZG9tL1Jl
Z2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcDogUmVtb3ZlZCBvcGVyYXRvciA9PS4KKyAgICAgICAg
KiBkb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaDogUmVtb3ZlZCBvcGVyYXRvciA9PSBhbmQg
IT0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9EZXByZWNhdGVkVmFsdWVMaXN0Lmg6IFB1dCBhbiAj
ZXJyb3IgaW4gaGVyZSB0byBwcmVwYXJlCisgICAgICAgIHRvIGRlbGV0ZSBpdC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9EZXByZWNhdGVkVmFsdWVMaXN0SW1wbC5jcHA6IERlbGV0ZWQgdGhlIGNvbnRl
bnRzLiBMYXRlcgorICAgICAgICB3ZSB3aWxsIGRlbGV0ZSB0aGUgZmlsZSB0b28uCisgICAgICAg
ICogcGxhdGZvcm0vRGVwcmVjYXRlZFZhbHVlTGlzdEltcGwuaDogUHV0IGFuICNlcnJvciBpbiBo
ZXJlIHRvIHByZXBhcmUKKyAgICAgICAgdG8gZGVsZXRlIGl0LgorCisgICAgICAgICogc3ZnL1NW
R0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzTG9hZExpc3RlbmVyKTogUmV3cm90
ZSB0byB3b3JrIHdpdGggdGhlIHZlY3Rvci4KKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50Ojp0cmFuc2ZlckV2ZW50TGlzdGVu
ZXJzVG9TaGFkb3dUcmVlKTogRGl0dG8uCisKIDIwMDgtMTItMTMgIERpcmsgU2NodWx6ZSAgPGty
aXRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6
IFdlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAzOTI3NikKKysrIFdlYkNv
cmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw2IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHkuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5h
bWVzLmgiCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRWYWx1ZUxp
c3QuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RG
OwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzkyNzYpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMTksNiArMTMxOSw5IEBAIHZvaWQgRG9jdW1lbnQ6
OmNsZWFyRnJhbWVQb2ludGVyKCkKIAogdm9pZCBEb2N1bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0
ZW5lcnNGcm9tQWxsTm9kZXMoKQogeworICAgIHNpemVfdCBzaXplID0gbV93aW5kb3dFdmVudExp
c3RlbmVycy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisg
ICAgICAgIG1fd2luZG93RXZlbnRMaXN0ZW5lcnNbaV0tPnNldFJlbW92ZWQodHJ1ZSk7CiAgICAg
bV93aW5kb3dFdmVudExpc3RlbmVycy5jbGVhcigpOwogICAgIHJlbW92ZUFsbERpc2Nvbm5lY3Rl
ZE5vZGVFdmVudExpc3RlbmVycygpOwogICAgIGZvciAoTm9kZSAqbiA9IHRoaXM7IG47IG4gPSBu
LT50cmF2ZXJzZU5leHROb2RlKCkpIHsKQEAgLTE3MjAsNiArMTcyMyw5IEBAIHZvaWQgRG9jdW1l
bnQ6OmNsZWFyKCkKIAogICAgIHJlbW92ZUNoaWxkcmVuKCk7CiAKKyAgICBzaXplX3Qgc2l6ZSA9
IG1fd2luZG93RXZlbnRMaXN0ZW5lcnMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKQorICAgICAgICBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzW2ldLT5zZXRSZW1v
dmVkKHRydWUpOwogICAgIG1fd2luZG93RXZlbnRMaXN0ZW5lcnMuY2xlYXIoKTsKIH0KIApAQCAt
MjY5NSwxOCArMjcwMSwxOSBAQCBDU1NTdHlsZURlY2xhcmF0aW9uKiBEb2N1bWVudDo6Z2V0T3Zl
cnJpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmhhbmRsZVdpbmRvd0V2ZW50
KEV2ZW50KiBldnQsIGJvb2wgdXNlQ2FwdHVyZSkKK3ZvaWQgRG9jdW1lbnQ6OmhhbmRsZVdpbmRv
d0V2ZW50KEV2ZW50KiBldmVudCwgYm9vbCB1c2VDYXB0dXJlKQogewogICAgIGlmIChtX3dpbmRv
d0V2ZW50TGlzdGVuZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAg
ICAvLyBpZiBhbnkgaHRtbCBldmVudCBsaXN0ZW5lcnMgYXJlIHJlZ2lzdGVyZWQgb24gdGhlIHdp
bmRvdywgdGhlbiBkaXNwYXRjaCB0aGVtIGhlcmUKLSAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
ckxpc3QgbGlzdGVuZXJzQ29weSA9IG1fd2luZG93RXZlbnRMaXN0ZW5lcnM7Ci0gICAgUmVnaXN0
ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OjppdGVyYXRvciBpdCA9IGxpc3RlbmVyc0NvcHkuYmVnaW4o
KTsKLSAgICAKLSAgICBmb3IgKDsgaXQgIT0gbGlzdGVuZXJzQ29weS5lbmQoKTsgKytpdCkKLSAg
ICAgICAgaWYgKCgqaXQpLT5ldmVudFR5cGUoKSA9PSBldnQtPnR5cGUoKSAmJiAoKml0KS0+dXNl
Q2FwdHVyZSgpID09IHVzZUNhcHR1cmUgJiYgISgqaXQpLT5yZW1vdmVkKCkpIAotICAgICAgICAg
ICAgKCppdCktPmxpc3RlbmVyKCktPmhhbmRsZUV2ZW50KGV2dCwgdHJ1ZSk7CisgICAgLy8gSWYg
YW55IEhUTUwgZXZlbnQgbGlzdGVuZXJzIGFyZSByZWdpc3RlcmVkIG9uIHRoZSB3aW5kb3csIGRp
c3BhdGNoIHRoZW0gaGVyZS4KKyAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnMgbGlzdGVuZXJz
Q29weSA9IG1fd2luZG93RXZlbnRMaXN0ZW5lcnM7CisgICAgc2l6ZV90IHNpemUgPSBsaXN0ZW5l
cnNDb3B5LnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgciA9ICpsaXN0ZW5lcnNDb3B5W2ldOwor
ICAgICAgICBpZiAoci5ldmVudFR5cGUoKSA9PSBldmVudC0+dHlwZSgpICYmIHIudXNlQ2FwdHVy
ZSgpID09IHVzZUNhcHR1cmUgJiYgIXIucmVtb3ZlZCgpKQorICAgICAgICAgICAgci5saXN0ZW5l
cigpLT5oYW5kbGVFdmVudChldmVudCwgdHJ1ZSk7CisgICAgfQogfQogCiB2b2lkIERvY3VtZW50
OjpzZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcikKQEAgLTI3MTks
MjQgKzI3MjYsMjcgQEAgdm9pZCBEb2N1bWVudDo6c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZQog
CiBFdmVudExpc3RlbmVyKiBEb2N1bWVudDo6d2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCiB7Ci0gICAgUmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXJMaXN0OjppdGVyYXRvciBpdCA9IG1fd2luZG93RXZlbnRMaXN0ZW5lcnMuYmVnaW4o
KTsKLSAgICBmb3IgKDsgaXQgIT0gbV93aW5kb3dFdmVudExpc3RlbmVycy5lbmQoKTsgKytpdCkg
ewotICAgICAgICBpZiAoKCppdCktPmV2ZW50VHlwZSgpID09IGV2ZW50VHlwZSAmJiAoKml0KS0+
bGlzdGVuZXIoKS0+aXNJbmxpbmUoKSkKLSAgICAgICAgICAgIHJldHVybiAoKml0KS0+bGlzdGVu
ZXIoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fd2luZG93RXZlbnRMaXN0ZW5lcnMuc2l6ZSgpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyJiByID0gKm1fd2luZG93RXZlbnRMaXN0ZW5lcnNbaV07CisgICAgICAg
IGlmIChyLmV2ZW50VHlwZSgpID09IGV2ZW50VHlwZSAmJiByLmxpc3RlbmVyKCktPmlzSW5saW5l
KCkpCisgICAgICAgICAgICByZXR1cm4gci5saXN0ZW5lcigpOwogICAgIH0KICAgICByZXR1cm4g
MDsKIH0KIAogdm9pZCBEb2N1bWVudDo6cmVtb3ZlV2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCiB7Ci0gICAgUmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXJMaXN0OjppdGVyYXRvciBpdCA9IG1fd2luZG93RXZlbnRMaXN0ZW5lcnMuYmVn
aW4oKTsKLSAgICBmb3IgKDsgaXQgIT0gbV93aW5kb3dFdmVudExpc3RlbmVycy5lbmQoKTsgKytp
dCkgewotICAgICAgICBpZiAoKCppdCktPmV2ZW50VHlwZSgpID09IGV2ZW50VHlwZSAmJiAoKml0
KS0+bGlzdGVuZXIoKS0+aXNJbmxpbmUoKSkgeworICAgIHNpemVfdCBzaXplID0gbV93aW5kb3dF
dmVudExpc3RlbmVycy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKKyAgICAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHIgPSAqbV93aW5kb3dFdmVu
dExpc3RlbmVyc1tpXTsKKyAgICAgICAgaWYgKHIuZXZlbnRUeXBlKCkgPT0gZXZlbnRUeXBlICYm
IHIubGlzdGVuZXIoKS0+aXNJbmxpbmUoKSkgewogICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9
PSBldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpCiAgICAgICAgICAgICAgICAgcmVtb3ZlUGVuZGlu
Z0ZyYW1lVW5sb2FkRXZlbnRDb3VudCgpOwogICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnRUeXBl
ID09IGV2ZW50TmFtZXMoKS5iZWZvcmV1bmxvYWRFdmVudCkKICAgICAgICAgICAgICAgICByZW1v
dmVQZW5kaW5nRnJhbWVCZWZvcmVVbmxvYWRFdmVudENvdW50KCk7Ci0gICAgICAgICAgICBtX3dp
bmRvd0V2ZW50TGlzdGVuZXJzLnJlbW92ZShpdCk7CisgICAgICAgICAgICByLnNldFJlbW92ZWQo
dHJ1ZSk7CisgICAgICAgICAgICBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzLnJlbW92ZShpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTI3NTcsMTUgKzI3NjcsMTYg
QEAgdm9pZCBEb2N1bWVudDo6YWRkV2luZG93RXZlbnRMaXN0ZW5lcihjbwogCiB2b2lkIERvY3Vt
ZW50OjpyZW1vdmVXaW5kb3dFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewotICAgIFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6aXRlcmF0b3IgaXQgPSBtX3dpbmRvd0V2ZW50TGlz
dGVuZXJzLmJlZ2luKCk7Ci0gICAgZm9yICg7IGl0ICE9IG1fd2luZG93RXZlbnRMaXN0ZW5lcnMu
ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHIgPSAqKml0
OworICAgIHNpemVfdCBzaXplID0gbV93aW5kb3dFdmVudExpc3RlbmVycy5zaXplKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgUmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXImIHIgPSAqbV93aW5kb3dFdmVudExpc3RlbmVyc1tpXTsKICAgICAgICAgaWYg
KHIuZXZlbnRUeXBlKCkgPT0gZXZlbnRUeXBlICYmIHIubGlzdGVuZXIoKSA9PSBsaXN0ZW5lciAm
JiByLnVzZUNhcHR1cmUoKSA9PSB1c2VDYXB0dXJlKSB7CiAgICAgICAgICAgICBpZiAoZXZlbnRU
eXBlID09IGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkKICAgICAgICAgICAgICAgICByZW1vdmVQ
ZW5kaW5nRnJhbWVVbmxvYWRFdmVudENvdW50KCk7CiAgICAgICAgICAgICBlbHNlIGlmIChldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLmJlZm9yZXVubG9hZEV2ZW50KQogICAgICAgICAgICAgICAg
IHJlbW92ZVBlbmRpbmdGcmFtZUJlZm9yZVVubG9hZEV2ZW50Q291bnQoKTsKLSAgICAgICAgICAg
IG1fd2luZG93RXZlbnRMaXN0ZW5lcnMucmVtb3ZlKGl0KTsKKyAgICAgICAgICAgIHIuc2V0UmVt
b3ZlZCh0cnVlKTsKKyAgICAgICAgICAgIG1fd2luZG93RXZlbnRMaXN0ZW5lcnMucmVtb3ZlKGkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMjc3MywxMCArMjc4
NCwxMSBAQCB2b2lkIERvY3VtZW50OjpyZW1vdmVXaW5kb3dFdmVudExpc3RlbmVyCiAKIGJvb2wg
RG9jdW1lbnQ6Omhhc1dpbmRvd0V2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUpCiB7Ci0gICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OjppdGVyYXRvciBpdCA9
IG1fd2luZG93RXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsKLSAgICBmb3IgKDsgaXQgIT0gbV93aW5k
b3dFdmVudExpc3RlbmVycy5lbmQoKTsgKytpdCkKLSAgICAgICAgaWYgKCgqaXQpLT5ldmVudFR5
cGUoKSA9PSBldmVudFR5cGUpCisgICAgc2l6ZV90IHNpemUgPSBtX3dpbmRvd0V2ZW50TGlzdGVu
ZXJzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAg
ICAgICBpZiAobV93aW5kb3dFdmVudExpc3RlbmVyc1tpXS0+ZXZlbnRUeXBlKCkgPT0gZXZlbnRU
eXBlKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgIHJldHVybiBmYWxzZTsK
IH0KIApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAzOTI3NikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg2Nyw3ICs4NjcsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxTdHlsZVNoZWV0TGlzdD4gbV9zdHlsZVNoZWV0czsgLy8gQWxsIG9mIHRoZSBzdHlsZXNoZWV0
cyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gZWZmZWN0IGZvciBvdXIgbWVkaWEgdHlwZSBhbmQgc3R5
bGVzaGVldCBzZXQuCiAgICAgTGlzdEhhc2hTZXQ8Tm9kZSo+IG1fc3R5bGVTaGVldENhbmRpZGF0
ZU5vZGVzOyAvLyBBbGwgb2YgdGhlIG5vZGVzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgcHJvdmlk
ZSBzdHlsZXNoZWV0cyB0byB0aGUgZG9jdW1lbnQgKDxsaW5rPiwgPHN0eWxlPiwgPD94bWwtc3R5
bGVzaGVldD4pCiAKLSAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3QgbV93aW5kb3dFdmVu
dExpc3RlbmVyczsKKyAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnMgbV93aW5kb3dFdmVudExp
c3RlbmVyczsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxGb3JtRWxlbWVudEtleSwgVmVjdG9yPFN0
cmluZz4sIEZvcm1FbGVtZW50S2V5SGFzaCwgRm9ybUVsZW1lbnRLZXlIYXNoVHJhaXRzPiBGb3Jt
RWxlbWVudFN0YXRlTWFwOwogICAgIExpc3RIYXNoU2V0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnRX
aXRoU3RhdGUqPiBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZTsKSW5kZXg6IFdlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lv
biAzOTI3NikKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NDksMTAgKzY0OSwxMCBAQCB2b2lkIEVsZW1lbnQ6OmF0dGFjaCgpCiAgICAgQ29udGFpbmVyTm9k
ZTo6YXR0YWNoKCk7CiAgICAgaWYgKGhhc1JhcmVEYXRhKCkpIHsgICAKICAgICAgICAgRWxlbWVu
dFJhcmVEYXRhKiBkYXRhID0gcmFyZURhdGEoKTsKLSAgICAgICAgaWYgKGRhdGEtPm1fbmVlZHNG
b2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2gpIHsKKyAgICAgICAgaWYgKGRhdGEt
Pm5lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoKCkpIHsKICAgICAgICAg
ICAgIGlmIChpc0ZvY3VzYWJsZSgpICYmIGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgPT0gdGhp
cykKICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVGb2N1c0FwcGVhcmFuY2VTb29u
KCk7Ci0gICAgICAgICAgICBkYXRhLT5tX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFm
dGVyQXR0YWNoID0gZmFsc2U7CisgICAgICAgICAgICBkYXRhLT5zZXROZWVkc0ZvY3VzQXBwZWFy
YW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaChmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBA
IC0xMDgzLDcgKzEwODMsNyBAQCB2b2lkIEVsZW1lbnQ6OmZvY3VzKGJvb2wgcmVzdG9yZVByZXZp
b3VzCiAgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkTm9kZSh0aGlz
LCBkb2MtPmZyYW1lKCkpOwogCiAgICAgaWYgKCFpc0ZvY3VzYWJsZSgpKSB7Ci0gICAgICAgIGVu
c3VyZVJhcmVEYXRhKCktPm1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRh
Y2ggPSB0cnVlOworICAgICAgICBlbnN1cmVSYXJlRGF0YSgpLT5zZXROZWVkc0ZvY3VzQXBwZWFy
YW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCh0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAgICAgCkBAIC0xMTc4LDcgKzExNzgsNyBAQCBSZW5kZXJTdHlsZSogRWxlbWVudDo6Y29t
cHV0ZWRTdHlsZSgpCiB2b2lkIEVsZW1lbnQ6OmNhbmNlbEZvY3VzQXBwZWFyYW5jZVVwZGF0ZSgp
CiB7CiAgICAgaWYgKGhhc1JhcmVEYXRhKCkpCi0gICAgICAgIHJhcmVEYXRhKCktPm1fbmVlZHNG
b2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2ggPSBmYWxzZTsKKyAgICAgICAgcmFy
ZURhdGEoKS0+c2V0TmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2goZmFs
c2UpOwogICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IHRoaXMpCiAgICAgICAg
IGRvY3VtZW50KCktPmNhbmNlbEZvY3VzQXBwZWFyYW5jZVVwZGF0ZSgpOwogfQpJbmRleDogV2Vi
Q29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxl
bWVudFJhcmVEYXRhLmgJKHJldmlzaW9uIDM5Mjc2KQorKysgV2ViQ29yZS9kb20vRWxlbWVudFJh
cmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDEyIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIEVsZW1lbnRSYXJlRGF0YSA6IHB1YmxpYyBOb2RlUmFyZURhdGEgewogcHVi
bGljOgogICAgIEVsZW1lbnRSYXJlRGF0YShFbGVtZW50Kik7CisKICAgICB2b2lkIHJlc2V0Q29t
cHV0ZWRTdHlsZShFbGVtZW50Kik7CiAKKyAgICB1c2luZyBOb2RlUmFyZURhdGE6Om5lZWRzRm9j
dXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoOworICAgIHVzaW5nIE5vZGVSYXJlRGF0
YTo6c2V0TmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2g7CisKICAgICBJ
bnRTaXplIG1fbWluaW11bVNpemVGb3JSZXNpemluZzsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IG1fY29tcHV0ZWRTdHlsZTsKIH07CkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDM5Mjc2KQor
KysgV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIs
NiBAQAogI2lmbmRlZiBFdmVudFRhcmdldF9oCiAjZGVmaW5lIEV2ZW50VGFyZ2V0X2gKIAotI2lu
Y2x1ZGUgIkRlcHJlY2F0ZWRWYWx1ZUxpc3QuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Myw3ICs0Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBFdmVudExpc3RlbmVyOwogICAgIGNsYXNzIEV2ZW50VGFyZ2V0Tm9kZTsK
ICAgICBjbGFzcyBNZXNzYWdlUG9ydDsKLSAgICBjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
cjsKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogICAgIGNsYXNzIFNWR0VsZW1l
bnRJbnN0YW5jZTsKICAgICBjbGFzcyBXb3JrZXI7CkBAIC01Myw5ICs1MSw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBEZXByZWNhdGVkVmFsdWVMaXN0OwotICAgIHR5cGVkZWYg
RGVwcmVjYXRlZFZhbHVlTGlzdDxSZWZQdHI8UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI+ID4gUmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OwotCiAgICAgY2xhc3MgRXZlbnRUYXJnZXQgewogICAg
IHB1YmxpYzoKICAgICAgICAgdmlydHVhbCBNZXNzYWdlUG9ydCogdG9NZXNzYWdlUG9ydCgpOwpA
QCAtOTUsMTQgKzkwLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2
b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSA9IDA7CiAgICAgfTsKIAorICAgIHZvaWQgZm9yYmlkRXZl
bnREaXNwYXRjaCgpOworICAgIHZvaWQgYWxsb3dFdmVudERpc3BhdGNoKCk7CisKICNpZm5kZWYg
TkRFQlVHCi12b2lkIGZvcmJpZEV2ZW50RGlzcGF0Y2goKTsKLXZvaWQgYWxsb3dFdmVudERpc3Bh
dGNoKCk7Ci1ib29sIGV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKTsKKyAgICBib29sIGV2ZW50RGlz
cGF0Y2hGb3JiaWRkZW4oKTsKICNlbHNlCi1pbmxpbmUgdm9pZCBmb3JiaWRFdmVudERpc3BhdGNo
KCkgeyB9Ci1pbmxpbmUgdm9pZCBhbGxvd0V2ZW50RGlzcGF0Y2goKSB7IH0KLSNlbmRpZiAvLyBO
REVCVUcgCisgICAgaW5saW5lIHZvaWQgZm9yYmlkRXZlbnREaXNwYXRjaCgpIHsgfQorICAgIGlu
bGluZSB2b2lkIGFsbG93RXZlbnREaXNwYXRjaCgpIHsgfQorI2VuZGlmCiAKIH0KKwogI2VuZGlm
CkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHJldmlzaW9uIDM5Mjc2KQorKysgV2ViQ29y
ZS9kb20vRXZlbnRUYXJnZXROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBA
QAogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAj
aW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgorI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKQEAgLTYyLDE3ICs2MywxMyBAQCBzdGF0aWMgSGFzaFNl
dDxFdmVudFRhcmdldE5vZGUqPiogZ05vZGVzCiAKIEV2ZW50VGFyZ2V0Tm9kZTo6RXZlbnRUYXJn
ZXROb2RlKERvY3VtZW50KiBkb2MsIGJvb2wgaXNFbGVtZW50LCBib29sIGlzQ29udGFpbmVyKQog
ICAgIDogTm9kZShkb2MsIGlzRWxlbWVudCwgaXNDb250YWluZXIpCi0gICAgLCBtX3JlZ2RMaXN0
ZW5lcnMoMCkKIHsKIH0KIAogRXZlbnRUYXJnZXROb2RlOjp+RXZlbnRUYXJnZXROb2RlKCkKIHsK
LSAgICBpZiAobV9yZWdkTGlzdGVuZXJzICYmICFtX3JlZ2RMaXN0ZW5lcnMtPmlzRW1wdHkoKSAm
JiAhaW5Eb2N1bWVudCgpKQorICAgIGlmICghZXZlbnRMaXN0ZW5lcnMoKS5pc0VtcHR5KCkgJiYg
IWluRG9jdW1lbnQoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckRpc2Nvbm5lY3Rl
ZE5vZGVXaXRoRXZlbnRMaXN0ZW5lcnModGhpcyk7Ci0KLSAgICBkZWxldGUgbV9yZWdkTGlzdGVu
ZXJzOwotICAgIG1fcmVnZExpc3RlbmVycyA9IDA7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIEV2ZW50VGFyZ2V0Tm9kZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkBAIC04
MCw5ICs3NywxOSBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBFdmVudFRhcmdldE5vZGU6CiAg
ICAgcmV0dXJuIGRvY3VtZW50KCk7CiB9CiAKK2NvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
cyYgRXZlbnRUYXJnZXROb2RlOjpldmVudExpc3RlbmVycygpIGNvbnN0Cit7CisgICAgaWYgKGhh
c1JhcmVEYXRhKCkpIHsKKyAgICAgICAgaWYgKFJlZ2lzdGVyZWRFdmVudExpc3RlbmVycyogbGlz
dGVuZXJzID0gcmFyZURhdGEoKS0+bGlzdGVuZXJzKCkpCisgICAgICAgICAgICByZXR1cm4gKmxp
c3RlbmVyczsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
cyogZW1wdHlMaXN0ZW5lcnNWZWN0b3IgPSBuZXcgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJzOwor
ICAgIHJldHVybiAqZW1wdHlMaXN0ZW5lcnNWZWN0b3I7Cit9CisKIHZvaWQgRXZlbnRUYXJnZXRO
b2RlOjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7Ci0gICAgaWYgKG1fcmVnZExpc3RlbmVycyAm
JiAhbV9yZWdkTGlzdGVuZXJzLT5pc0VtcHR5KCkpCisgICAgaWYgKCFldmVudExpc3RlbmVycygp
LmlzRW1wdHkoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckRpc2Nvbm5lY3RlZE5v
ZGVXaXRoRXZlbnRMaXN0ZW5lcnModGhpcyk7CiAKICAgICBOb2RlOjppbnNlcnRlZEludG9Eb2N1
bWVudCgpOwpAQCAtOTAsNyArOTcsNyBAQCB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6aW5zZXJ0ZWRJ
bnRvRG9jdW1lCiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpyZW1vdmVkRnJvbURvY3VtZW50KCkK
IHsKLSAgICBpZiAobV9yZWdkTGlzdGVuZXJzICYmICFtX3JlZ2RMaXN0ZW5lcnMtPmlzRW1wdHko
KSkKKyAgICBpZiAoIWV2ZW50TGlzdGVuZXJzKCkuaXNFbXB0eSgpKQogICAgICAgICBkb2N1bWVu
dCgpLT5yZWdpc3RlckRpc2Nvbm5lY3RlZE5vZGVXaXRoRXZlbnRMaXN0ZW5lcnModGhpcyk7CiAK
ICAgICBOb2RlOjpyZW1vdmVkRnJvbURvY3VtZW50KCk7CkBAIC05OCw3ICsxMDUsNyBAQCB2b2lk
IEV2ZW50VGFyZ2V0Tm9kZTo6cmVtb3ZlZEZyb21Eb2N1bWVuCiAKIHZvaWQgRXZlbnRUYXJnZXRO
b2RlOjp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpCiB7Ci0gICAgaWYgKG1fcmVnZExpc3Rl
bmVycyAmJiAhbV9yZWdkTGlzdGVuZXJzLT5pc0VtcHR5KCkpCisgICAgaWYgKCFldmVudExpc3Rl
bmVycygpLmlzRW1wdHkoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckRpc2Nvbm5l
Y3RlZE5vZGVXaXRoRXZlbnRMaXN0ZW5lcnModGhpcyk7CiAKICAgICBOb2RlOjp3aWxsTW92ZVRv
TmV3T3duZXJEb2N1bWVudCgpOwpAQCAtMTA2LDcgKzExMyw3IEBAIHZvaWQgRXZlbnRUYXJnZXRO
b2RlOjp3aWxsTW92ZVRvTmV3T3duZXIKIAogdm9pZCBFdmVudFRhcmdldE5vZGU6OmRpZE1vdmVU
b05ld093bmVyRG9jdW1lbnQoKQogewotICAgIGlmIChtX3JlZ2RMaXN0ZW5lcnMgJiYgIW1fcmVn
ZExpc3RlbmVycy0+aXNFbXB0eSgpKQorICAgIGlmICghZXZlbnRMaXN0ZW5lcnMoKS5pc0VtcHR5
KCkpCiAgICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRGlzY29ubmVjdGVkTm9kZVdpdGhFdmVu
dExpc3RlbmVycyh0aGlzKTsKIAogICAgIE5vZGU6OmRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQo
KTsKQEAgLTEzOCw0MSArMTQ1LDQ0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVTVkdFbGVt
ZW50SW5zdGEKIAogdm9pZCBFdmVudFRhcmdldE5vZGU6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVu
ZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKLSAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsK
LSAgICBpZiAoIWRvYy0+YXR0YWNoZWQoKSkKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlz
LT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQtPmF0dGFjaGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGRvYy0+YWRkTGlzdGVuZXJUeXBlSWZOZWVkZWQoZXZlbnRUeXBlKTsKKyAg
ICBkb2N1bWVudC0+YWRkTGlzdGVuZXJUeXBlSWZOZWVkZWQoZXZlbnRUeXBlKTsKIAotICAgIGlm
ICghbV9yZWdkTGlzdGVuZXJzKQotICAgICAgICBtX3JlZ2RMaXN0ZW5lcnMgPSBuZXcgUmVnaXN0
ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OworICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVycyYgbGlz
dGVuZXJzID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTGlzdGVuZXJzKCk7CiAKICAgICAvLyBS
ZW1vdmUgZXhpc3RpbmcgaWRlbnRpY2FsIGxpc3RlbmVyIHNldCB3aXRoIGlkZW50aWNhbCBhcmd1
bWVudHMuCiAgICAgLy8gVGhlIERPTTIgc3BlYyBzYXlzIHRoYXQgImR1cGxpY2F0ZSBpbnN0YW5j
ZXMgYXJlIGRpc2NhcmRlZCIgaW4gdGhpcyBjYXNlLgogICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIo
ZXZlbnRUeXBlLCBsaXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVyZSk7CiAKICAgICAvLyBhZGRpbmcg
dGhlIGZpcnN0IG9uZQotICAgIGlmIChtX3JlZ2RMaXN0ZW5lcnMtPmlzRW1wdHkoKSAmJiAhaW5E
b2N1bWVudCgpKQotICAgICAgICBkb2MtPnJlZ2lzdGVyRGlzY29ubmVjdGVkTm9kZVdpdGhFdmVu
dExpc3RlbmVycyh0aGlzKTsKKyAgICBpZiAobGlzdGVuZXJzLmlzRW1wdHkoKSAmJiAhaW5Eb2N1
bWVudCgpKQorICAgICAgICBkb2N1bWVudC0+cmVnaXN0ZXJEaXNjb25uZWN0ZWROb2RlV2l0aEV2
ZW50TGlzdGVuZXJzKHRoaXMpOwogCi0gICAgbV9yZWdkTGlzdGVuZXJzLT5hcHBlbmQoUmVnaXN0
ZXJlZEV2ZW50TGlzdGVuZXI6OmNyZWF0ZShldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJl
KSk7CisgICAgbGlzdGVuZXJzLmFwcGVuZChSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6Y3JlYXRl
KGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpKTsKICAgICB1cGRhdGVTVkdFbGVtZW50
SW5zdGFuY2VzQWZ0ZXJFdmVudExpc3RlbmVyQ2hhbmdlKHRoaXMpOwogfQogCiB2b2lkIEV2ZW50
VGFyZ2V0Tm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKLSAgICBp
ZiAoIW1fcmVnZExpc3RlbmVycykKKyAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6SXRlcmF0b3IgZW5kID0g
bV9yZWdkTGlzdGVuZXJzLT5lbmQoKTsKLSAgICBmb3IgKFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
TGlzdDo6SXRlcmF0b3IgaXQgPSBtX3JlZ2RMaXN0ZW5lcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgciA9ICoqaXQ7CisgICAg
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJzKiBsaXN0ZW5lcnMgPSByYXJlRGF0YSgpLT5saXN0ZW5l
cnMoKTsKKyAgICBpZiAoIWxpc3RlbmVycykKKyAgICAgICAgcmV0dXJuOworCisgICAgc2l6ZV90
IHNpemUgPSBsaXN0ZW5lcnMtPnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkgeworICAgICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgciA9ICooKmxpc3Rl
bmVycylbaV07CiAgICAgICAgIGlmIChyLmV2ZW50VHlwZSgpID09IGV2ZW50VHlwZSAmJiByLmxp
c3RlbmVyKCkgPT0gbGlzdGVuZXIgJiYgci51c2VDYXB0dXJlKCkgPT0gdXNlQ2FwdHVyZSkgewot
ICAgICAgICAgICAgKCppdCktPnNldFJlbW92ZWQodHJ1ZSk7Ci0gICAgICAgICAgICBpdCA9IG1f
cmVnZExpc3RlbmVycy0+cmVtb3ZlKGl0KTsKKyAgICAgICAgICAgIHIuc2V0UmVtb3ZlZCh0cnVl
KTsKKyAgICAgICAgICAgIGxpc3RlbmVycy0+cmVtb3ZlKGkpOwogCiAgICAgICAgICAgICAvLyBy
ZW1vdmVkIGxhc3QKLSAgICAgICAgICAgIGlmIChtX3JlZ2RMaXN0ZW5lcnMtPmlzRW1wdHkoKSAm
JiAhaW5Eb2N1bWVudCgpKQorICAgICAgICAgICAgaWYgKGxpc3RlbmVycy0+aXNFbXB0eSgpICYm
ICFpbkRvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckRp
c2Nvbm5lY3RlZE5vZGVXaXRoRXZlbnRMaXN0ZW5lcnModGhpcyk7CiAKICAgICAgICAgICAgIHVw
ZGF0ZVNWR0VsZW1lbnRJbnN0YW5jZXNBZnRlckV2ZW50TGlzdGVuZXJDaGFuZ2UodGhpcyk7CkBA
IC0xODMsMjQgKzE5MywzMCBAQCB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6cmVtb3ZlRXZlbnRMaXN0
ZW5lCiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpyZW1vdmVBbGxFdmVudExpc3RlbmVycygpCiB7
Ci0gICAgZGVsZXRlIG1fcmVnZExpc3RlbmVyczsKLSAgICBtX3JlZ2RMaXN0ZW5lcnMgPSAwOwot
fQotCi12b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQgKmV2dCwg
Ym9vbCB1c2VDYXB0dXJlKQotewotICAgIGlmIChkaXNhYmxlZCgpICYmIGV2dC0+aXNNb3VzZUV2
ZW50KCkpCisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoIW1fcmVnZExpc3RlbmVycyB8fCBtX3JlZ2RMaXN0ZW5lcnMtPmlzRW1wdHkoKSkKKyAgICBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnMqIGxpc3RlbmVycyA9IHJhcmVEYXRhKCktPmxpc3RlbmVy
cygpOworICAgIGlmICghbGlzdGVuZXJzKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lckxpc3QgbGlzdGVuZXJzQ29weSA9ICptX3JlZ2RMaXN0ZW5lcnM7Ci0g
ICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OjpJdGVyYXRvciBlbmQgPSBsaXN0ZW5lcnND
b3B5LmVuZCgpOworICAgIHNpemVfdCBzaXplID0gbGlzdGVuZXJzLT5zaXplKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICgqbGlzdGVuZXJzKVtpXS0+
c2V0UmVtb3ZlZCh0cnVlKTsKKyAgICBsaXN0ZW5lcnMtPmNsZWFyKCk7Cit9CisKK3ZvaWQgRXZl
bnRUYXJnZXROb2RlOjpoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCogZXZlbnQsIGJvb2wgdXNlQ2Fw
dHVyZSkKK3sKKyAgICBpZiAoZGlzYWJsZWQoKSAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkpCisg
ICAgICAgIHJldHVybjsKIAotICAgIGZvciAoUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OjpJ
dGVyYXRvciBpdCA9IGxpc3RlbmVyc0NvcHkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIGlmICgoKml0KS0+ZXZlbnRUeXBlKCkgPT0gZXZ0LT50eXBlKCkgJiYgKCppdCktPnVz
ZUNhcHR1cmUoKSA9PSB1c2VDYXB0dXJlICYmICEoKml0KS0+cmVtb3ZlZCgpKQotICAgICAgICAg
ICAgKCppdCktPmxpc3RlbmVyKCktPmhhbmRsZUV2ZW50KGV2dCwgZmFsc2UpOworICAgIFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVycyBsaXN0ZW5lcnNDb3B5ID0gZXZlbnRMaXN0ZW5lcnMoKTsKKyAg
ICBzaXplX3Qgc2l6ZSA9IGxpc3RlbmVyc0NvcHkuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3Rl
bmVyJiByID0gKmxpc3RlbmVyc0NvcHlbaV07CisgICAgICAgIGlmIChyLmV2ZW50VHlwZSgpID09
IGV2ZW50LT50eXBlKCkgJiYgci51c2VDYXB0dXJlKCkgPT0gdXNlQ2FwdHVyZSAmJiAhci5yZW1v
dmVkKCkpCisgICAgICAgICAgICByLmxpc3RlbmVyKCktPmhhbmRsZUV2ZW50KGV2ZW50LCBmYWxz
ZSk7CiAgICAgfQogfQogCkBAIC0yNjksMTMgKzI4NSwxMiBAQCBib29sIEV2ZW50VGFyZ2V0Tm9k
ZTo6ZGlzcGF0Y2hHZW5lcmljRXZlCiAgICAgRGVwcmVjYXRlZFB0ckxpc3Q8Tm9kZT4gbm9kZUNo
YWluOwogCiAgICAgaWYgKGluRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgZm9yIChOb2RlKiBu
ID0gdGhpczsgbjsgbiA9IG4tPmV2ZW50UGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGZvciAoTm9k
ZSogbiA9IHRoaXM7IG47IG4gPSBuLT5ldmVudFBhcmVudE5vZGUoKSkgewogI2lmIEVOQUJMRShT
VkcpCiAgICAgICAgICAgICAvLyBTa2lwIDx1c2U+IHNoYWRvdyB0cmVlIGVsZW1lbnRzICAgIAog
ICAgICAgICAgICAgaWYgKG4tPmlzU1ZHRWxlbWVudCgpICYmIG4tPmlzU2hhZG93Tm9kZSgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogI2VuZGlmCi0KICAgICAgICAgICAgIG4tPnJlZigp
OwogICAgICAgICAgICAgbm9kZUNoYWluLnByZXBlbmQobik7CiAgICAgICAgIH0KQEAgLTY3Mywx
OSArNjg4LDI0IEBAIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaFN0b3JhZ2VFdmUKIAog
dm9pZCBFdmVudFRhcmdldE5vZGU6OnJlbW92ZUlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQogewotICAgIGlmICghbV9yZWdkTGlzdGVuZXJz
KSAvLyBub3RoaW5nIHRvIHJlbW92ZQorICAgIGlmICghaGFzUmFyZURhdGEoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6SXRlcmF0b3Ig
ZW5kID0gbV9yZWdkTGlzdGVuZXJzLT5lbmQoKTsKLSAgICBmb3IgKFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyTGlzdDo6SXRlcmF0b3IgaXQgPSBtX3JlZ2RMaXN0ZW5lcnMtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9ICgqaXQpLT5s
aXN0ZW5lcigpOwotICAgICAgICBpZiAoKCppdCktPmV2ZW50VHlwZSgpICE9IGV2ZW50VHlwZSB8
fCAhbGlzdGVuZXItPmlzSW5saW5lKCkpCisKKyAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnMq
IGxpc3RlbmVycyA9IHJhcmVEYXRhKCktPmxpc3RlbmVycygpOworICAgIGlmICghbGlzdGVuZXJz
KQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3Qgc2l6ZSA9IGxpc3RlbmVycy0+c2l6ZSgp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyJiByID0gKigqbGlzdGVuZXJzKVtpXTsKKyAgICAgICAgaWYgKHIu
ZXZlbnRUeXBlKCkgIT0gZXZlbnRUeXBlIHx8ICFyLmxpc3RlbmVyKCktPmlzSW5saW5lKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpdCA9IG1fcmVnZExpc3RlbmVycy0+cmVt
b3ZlKGl0KTsKKyAgICAgICAgci5zZXRSZW1vdmVkKHRydWUpOworICAgICAgICBsaXN0ZW5lcnMt
PnJlbW92ZShpKTsKIAogICAgICAgICAvLyByZW1vdmVkIGxhc3QKLSAgICAgICAgaWYgKG1fcmVn
ZExpc3RlbmVycy0+aXNFbXB0eSgpICYmICFpbkRvY3VtZW50KCkpCisgICAgICAgIGlmIChsaXN0
ZW5lcnMtPmlzRW1wdHkoKSAmJiAhaW5Eb2N1bWVudCgpKQogICAgICAgICAgICAgZG9jdW1lbnQo
KS0+dW5yZWdpc3RlckRpc2Nvbm5lY3RlZE5vZGVXaXRoRXZlbnRMaXN0ZW5lcnModGhpcyk7CiAK
ICAgICAgICAgdXBkYXRlU1ZHRWxlbWVudEluc3RhbmNlc0FmdGVyRXZlbnRMaXN0ZW5lckNoYW5n
ZSh0aGlzKTsKQEAgLTcwOCwxMyArNzI4LDEzIEBAIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRJ
bmxpbmVFdmVudExpc3QKIAogRXZlbnRMaXN0ZW5lciogRXZlbnRUYXJnZXROb2RlOjppbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3QK
IHsKLSAgICBpZiAoIW1fcmVnZExpc3RlbmVycykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0g
ICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OjpJdGVyYXRvciBlbmQgPSBtX3JlZ2RMaXN0
ZW5lcnMtPmVuZCgpOwotICAgIGZvciAoUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OjpJdGVy
YXRvciBpdCA9IG1fcmVnZExpc3RlbmVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBpZiAoKCppdCktPmV2ZW50VHlwZSgpID09IGV2ZW50VHlwZSAmJiAoKml0KS0+bGlzdGVu
ZXIoKS0+aXNJbmxpbmUoKSkKLSAgICAgICAgICAgIHJldHVybiAoKml0KS0+bGlzdGVuZXIoKTsK
KyAgICBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnMmIGxpc3RlbmVycyA9IGV2ZW50TGlz
dGVuZXJzKCk7CisgICAgc2l6ZV90IHNpemUgPSBsaXN0ZW5lcnMuc2l6ZSgpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGNvbnN0IFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyJiByID0gKmxpc3RlbmVyc1tpXTsKKyAgICAgICAgaWYgKHIuZXZlbnRUeXBl
KCkgPT0gZXZlbnRUeXBlICYmIHIubGlzdGVuZXIoKS0+aXNJbmxpbmUoKSkKKyAgICAgICAgICAg
IHJldHVybiByLmxpc3RlbmVyKCk7CisgICAgfQogICAgIHJldHVybiAwOwogfQogCkluZGV4OiBX
ZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9F
dmVudFRhcmdldE5vZGUuaAkocmV2aXNpb24gMzkyNzYpCisrKyBXZWJDb3JlL2RvbS9FdmVudFRh
cmdldE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAo
QykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAx
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDcsIDIwMDggTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzIsNiArMzIsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF0dHJpYnV0ZTsKIGNsYXNzIEZyYW1lOworY2xh
c3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI7CisKK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lcj4gPiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnM7CiAKIGNsYXNz
IEV2ZW50VGFyZ2V0Tm9kZSA6IHB1YmxpYyBOb2RlLCBwdWJsaWMgRXZlbnRUYXJnZXQgewogcHVi
bGljOgpAQCAtOTUsNyArOTgsNyBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgdmlydHVhbCBib29s
IGRpc2FibGVkKCkgY29uc3Q7CiAKLSAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3QqIGxv
Y2FsRXZlbnRMaXN0ZW5lcnMoKSBjb25zdCB7IHJldHVybiBtX3JlZ2RMaXN0ZW5lcnM7IH0KKyAg
ICBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnMmIGV2ZW50TGlzdGVuZXJzKCkgY29uc3Q7
CiAKICAgICBFdmVudExpc3RlbmVyKiBvbmFib3J0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRPbmFi
b3J0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwpAQCAtMTgxLDEwICsxODQsNiBAQCBwdWJs
aWM6CiAgICAgdXNpbmcgTm9kZTo6cmVmOwogICAgIHVzaW5nIE5vZGU6OmRlcmVmOwogIAotcHJv
dGVjdGVkOgotICAgIGZyaWVuZCBjbGFzcyBFdmVudFRhcmdldDsKLSAgICBSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lckxpc3QqIG1fcmVnZExpc3RlbmVyczsKLQogcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVm
RXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAzOTI3NikKKysrIFdl
YkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw4IEBACiAjaW5j
bHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVy
Lmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTI2Miw3ICsyNjQsNyBAQCBQYXNzUmVmUHRyPE5v
ZGVMaXN0PiBOb2RlOjpjaGlsZE5vZGVzKCkKIHsKICAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBl
bnN1cmVSYXJlRGF0YSgpOwogICAgIGlmICghZGF0YS0+bm9kZUxpc3RzKCkpIHsKLSAgICAgICAg
ZGF0YS0+c2V0Tm9kZUxpc3RzKHN0ZDo6YXV0b19wdHI8Tm9kZUxpc3RzTm9kZURhdGE+KG5ldyBO
b2RlTGlzdHNOb2RlRGF0YSkpOworICAgICAgICBkYXRhLT5zZXROb2RlTGlzdHMoYXV0b19wdHI8
Tm9kZUxpc3RzTm9kZURhdGE+KG5ldyBOb2RlTGlzdHNOb2RlRGF0YSkpOwogICAgICAgICBkb2N1
bWVudCgpLT5hZGROb2RlTGlzdENhY2hlKCk7CiAgICAgfQogCkBAIC00NzUsMTMgKzQ3NywxMyBA
QCBib29sIE5vZGU6OmNhbkxhenlBdHRhY2goKQogdm9pZCBOb2RlOjpzZXRGb2N1cyhib29sIGIp
CiB7IAogICAgIGlmIChiIHx8IGhhc1JhcmVEYXRhKCkpCi0gICAgICAgIGVuc3VyZVJhcmVEYXRh
KCktPm1fZm9jdXNlZCA9IGI7CisgICAgICAgIGVuc3VyZVJhcmVEYXRhKCktPnNldEZvY3VzZWQo
Yik7CiB9CiAKIGJvb2wgTm9kZTo6cmFyZURhdGFGb2N1c2VkKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoaGFzUmFyZURhdGEoKSk7Ci0gICAgcmV0dXJuIHJhcmVEYXRhKCktPm1fZm9jdXNlZDsKKyAg
ICByZXR1cm4gcmFyZURhdGEoKS0+aXNGb2N1c2VkKCk7CiB9CiAgICAgCiBib29sIE5vZGU6Omlz
Rm9jdXNhYmxlKCkgY29uc3QKQEAgLTUxMiw3ICs1MTQsNyBAQCB2b2lkIE5vZGU6OnJlZ2lzdGVy
RHluYW1pY05vZGVMaXN0KER5bmFtCiB7CiAgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gZW5zdXJl
UmFyZURhdGEoKTsKICAgICBpZiAoIWRhdGEtPm5vZGVMaXN0cygpKSB7Ci0gICAgICAgIGRhdGEt
PnNldE5vZGVMaXN0cyhzdGQ6OmF1dG9fcHRyPE5vZGVMaXN0c05vZGVEYXRhPihuZXcgTm9kZUxp
c3RzTm9kZURhdGEpKTsKKyAgICAgICAgZGF0YS0+c2V0Tm9kZUxpc3RzKGF1dG9fcHRyPE5vZGVM
aXN0c05vZGVEYXRhPihuZXcgTm9kZUxpc3RzTm9kZURhdGEpKTsKICAgICAgICAgZG9jdW1lbnQo
KS0+YWRkTm9kZUxpc3RDYWNoZSgpOwogICAgIH0gZWxzZSBpZiAoIW1fZG9jdW1lbnQtPmhhc05v
ZGVMaXN0Q2FjaGVzKCkpIHsKICAgICAgICAgLy8gV2UgaGF2ZW4ndCBiZWVuIHJlY2VpdmluZyBu
b3RpZmljYXRpb25zIHdoaWxlIHRoZXJlIHdlcmUgbm8gcmVnaXN0ZXJlZCBsaXN0cywgc28gdGhl
IGNhY2hlIGlzIGludmFsaWQgbm93LgpAQCAtMTIyNSw3ICsxMjI3LDcgQEAgUGFzc1JlZlB0cjxO
b2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeQogewogICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9
IGVuc3VyZVJhcmVEYXRhKCk7CiAgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkgewotICAgICAg
ICBkYXRhLT5zZXROb2RlTGlzdHMoc3RkOjphdXRvX3B0cjxOb2RlTGlzdHNOb2RlRGF0YT4obmV3
IE5vZGVMaXN0c05vZGVEYXRhKSk7CisgICAgICAgIGRhdGEtPnNldE5vZGVMaXN0cyhhdXRvX3B0
cjxOb2RlTGlzdHNOb2RlRGF0YT4obmV3IE5vZGVMaXN0c05vZGVEYXRhKSk7CiAgICAgICAgIGRv
Y3VtZW50KCktPmFkZE5vZGVMaXN0Q2FjaGUoKTsKICAgICB9CiAKQEAgLTEyNDAsNyArMTI0Miw3
IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnkKIHsKICAgICBOb2Rl
UmFyZURhdGEqIGRhdGEgPSBlbnN1cmVSYXJlRGF0YSgpOwogICAgIGlmICghZGF0YS0+bm9kZUxp
c3RzKCkpIHsKLSAgICAgICAgZGF0YS0+c2V0Tm9kZUxpc3RzKHN0ZDo6YXV0b19wdHI8Tm9kZUxp
c3RzTm9kZURhdGE+KG5ldyBOb2RlTGlzdHNOb2RlRGF0YSkpOworICAgICAgICBkYXRhLT5zZXRO
b2RlTGlzdHMoYXV0b19wdHI8Tm9kZUxpc3RzTm9kZURhdGE+KG5ldyBOb2RlTGlzdHNOb2RlRGF0
YSkpOwogICAgICAgICBkb2N1bWVudCgpLT5hZGROb2RlTGlzdENhY2hlKCk7CiAgICAgfQogCkBA
IC0xNzY1LDcgKzE3NjcsNyBAQCB1bnNpZ25lZCBzaG9ydCBOb2RlOjpjb21wYXJlRG9jdW1lbnRQ
b3NpCiAgICAgLy8gV2FsayB0aGUgdHdvIGNoYWlucyBiYWNrd2FyZHMgYW5kIGxvb2sgZm9yIHRo
ZSBmaXJzdCBkaWZmZXJlbmNlLgogICAgIHVuc2lnbmVkIGluZGV4MSA9IGNoYWluMS5zaXplKCk7
CiAgICAgdW5zaWduZWQgaW5kZXgyID0gY2hhaW4yLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzdGQ6Om1pbihpbmRleDEsIGluZGV4Mik7IGk7IC0taSkgeworICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1pbihpbmRleDEsIGluZGV4Mik7IGk7IC0taSkgewogICAgICAgICBOb2RlKiBjaGls
ZDEgPSBjaGFpbjFbLS1pbmRleDFdOwogICAgICAgICBOb2RlKiBjaGlsZDIgPSBjaGFpbjJbLS1p
bmRleDJdOwogICAgICAgICBpZiAoY2hpbGQxICE9IGNoaWxkMikgewpJbmRleDogV2ViQ29yZS9k
b20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMzky
NzYpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDYg
QEAgY2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50OwogY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50
OwogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogY2xhc3MgUXVhbGlmaWVkTmFtZTsKLWNsYXNz
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOwogY2xhc3MgUmVuZGVyQXJlbmE7CiBjbGFzcyBSZW5k
ZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTdHlsZTsKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGVSYXJl
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCShyZXZpc2lv
biAzOTI3NikKKysrIFdlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNSBAQAotLyoqCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIENvbXB1
dGVyLCBJbmMuCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBEYXZpZCBTbWl0aCA8Y2F0ZmlzaC5t
YW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDYgKzIzLDggQEAKICNkZWZpbmUgTm9k
ZVJhcmVEYXRhX2gKIAogI2luY2x1ZGUgIkR5bmFtaWNOb2RlTGlzdC5oIgorI2luY2x1ZGUgIkV2
ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oIgogI2lu
Y2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KQEAgLTU0LDkgKzU1LDkgQEAgc3RydWN0IE5vZGVMaXN0c05vZGVEYXRh
IHsKIGNsYXNzIE5vZGVSYXJlRGF0YSB7CiBwdWJsaWM6ICAgIAogICAgIE5vZGVSYXJlRGF0YSgp
Ci0gICAgICAgIDogbV9mb2N1c2VkKGZhbHNlKQotICAgICAgICAsIG1fdGFiSW5kZXgoMCkKLSAg
ICAgICAgLCBtX3RhYkluZGV4U2V0RXhwbGljaXRseShmYWxzZSkKKyAgICAgICAgOiBtX3RhYklu
ZGV4KDApCisgICAgICAgICwgbV90YWJJbmRleFdhc1NldEV4cGxpY2l0bHkoZmFsc2UpCisgICAg
ICAgICwgbV9pc0ZvY3VzZWQoZmFsc2UpCiAgICAgICAgICwgbV9uZWVkc0ZvY3VzQXBwZWFyYW5j
ZVVwZGF0ZVNvb25BZnRlckF0dGFjaChmYWxzZSkKICAgICB7CiAgICAgfQpAQCAtNzksMTggKzgw
LDM0IEBAIHB1YmxpYzogICAgCiAgICAgTm9kZUxpc3RzTm9kZURhdGEqIG5vZGVMaXN0cygpIGNv
bnN0IHsgcmV0dXJuIG1fbm9kZUxpc3RzLmdldCgpOyB9CiAgICAgCiAgICAgc2hvcnQgdGFiSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX3RhYkluZGV4OyB9Ci0gICAgdm9pZCBzZXRUYWJJbmRleEV4
cGxpY2l0bHkoc2hvcnQgaW5kZXgpIHsgbV90YWJJbmRleCA9IGluZGV4OyBtX3RhYkluZGV4U2V0
RXhwbGljaXRseSA9IHRydWU7IH0KLSAgICBib29sIHRhYkluZGV4U2V0RXhwbGljaXRseSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGFiSW5kZXhTZXRFeHBsaWNpdGx5OyB9Ci0gICAgICAgIAotICAgIGJv
b2wgbV9mb2N1c2VkIDogMTsKKyAgICB2b2lkIHNldFRhYkluZGV4RXhwbGljaXRseShzaG9ydCBp
bmRleCkgeyBtX3RhYkluZGV4ID0gaW5kZXg7IG1fdGFiSW5kZXhXYXNTZXRFeHBsaWNpdGx5ID0g
dHJ1ZTsgfQorICAgIGJvb2wgdGFiSW5kZXhTZXRFeHBsaWNpdGx5KCkgY29uc3QgeyByZXR1cm4g
bV90YWJJbmRleFdhc1NldEV4cGxpY2l0bHk7IH0KKworICAgIFJlZ2lzdGVyZWRFdmVudExpc3Rl
bmVycyogbGlzdGVuZXJzKCkgeyByZXR1cm4gbV9ldmVudExpc3RlbmVycy5nZXQoKTsgfQorICAg
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVycyYgZW5zdXJlTGlzdGVuZXJzKCkKKyAgICB7CisgICAg
ICAgIGlmICghbV9ldmVudExpc3RlbmVycykKKyAgICAgICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMu
c2V0KG5ldyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnMpOworICAgICAgICByZXR1cm4gKm1fZXZl
bnRMaXN0ZW5lcnM7CisgICAgfQorCisgICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdCB7IHJldHVy
biBtX2lzRm9jdXNlZDsgfQorICAgIHZvaWQgc2V0Rm9jdXNlZChib29sIGZvY3VzZWQpIHsgbV9p
c0ZvY3VzZWQgPSBmb2N1c2VkOyB9CisKK3Byb3RlY3RlZDoKKyAgICAvLyBmb3IgRWxlbWVudFJh
cmVEYXRhCisgICAgYm9vbCBuZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFj
aCgpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJB
dHRhY2g7IH0KKyAgICB2b2lkIHNldE5lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVy
QXR0YWNoKGJvb2wgbmVlZHMpIHsgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRl
ckF0dGFjaCA9IG5lZWRzOyB9CiAKIHByaXZhdGU6CiAgICAgT3duUHRyPE5vZGVMaXN0c05vZGVE
YXRhPiBtX25vZGVMaXN0czsKKyAgICBPd25QdHI8UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJzID4g
bV9ldmVudExpc3RlbmVyczsKICAgICBzaG9ydCBtX3RhYkluZGV4OwotICAgIGJvb2wgbV90YWJJ
bmRleFNldEV4cGxpY2l0bHkgOiAxOwotcHVibGljOgotICAgIGJvb2wgbV9uZWVkc0ZvY3VzQXBw
ZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA6IDE7IC8vZm9yIEVsZW1lbnRSYXJlRGF0YQor
ICAgIGJvb2wgbV90YWJJbmRleFdhc1NldEV4cGxpY2l0bHkgOiAxOworICAgIGJvb2wgbV9pc0Zv
Y3VzZWQgOiAxOworICAgIGJvb2wgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRl
ckF0dGFjaCA6IDE7CiB9OworCiB9IC8vbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDogV2ViQ29y
ZS9kb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMzkyNzYpCisrKyBXZWJD
b3JlL2RvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDkgKzM1LDQgQEAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI6OlJlZ2lzdGVyZWRFdmVudAogewog
fQogCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGEsIGNv
bnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBiKQotewotICAgIHJldHVybiBhLmV2ZW50VHlw
ZSgpID09IGIuZXZlbnRUeXBlKCkgJiYgYS5saXN0ZW5lcigpID09IGIubGlzdGVuZXIoKSAmJiBh
LnVzZUNhcHR1cmUoKSA9PSBiLnVzZUNhcHR1cmUoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAz
OTI3NikKKysrIFdlYkNvcmUvZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDEwICs1Myw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9v
bCBtX3JlbW92ZWQ7CiAgICAgfTsKIAotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyJiwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImKTsKLSAg
ICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBh
LCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgYikgeyByZXR1cm4gIShhID09IGIpOyB9
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFZhbHVlTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFZhbHVlTGlzdC5oCShyZXZp
c2lvbiAzOTI3NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFZhbHVlTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDE1MSArMSBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBEZXByZWNhdGVkVmFsdWVMaXN0X2gKLSNkZWZpbmUgRGVwcmVjYXRlZFZhbHVlTGlzdF9oCi0K
LSNpbmNsdWRlICJEZXByZWNhdGVkVmFsdWVMaXN0SW1wbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBEZXByZWNhdGVkVmFsdWVMaXN0OwotdGVt
cGxhdGUgPGNsYXNzIFQ+IGNsYXNzIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yOwot
Ci10ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBEZXByZWNhdGVkVmFsdWVMaXN0Tm9kZSA6IHByaXZh
dGUgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlIHsKLXB1YmxpYzoKLSAgICBEZXByZWNhdGVk
VmFsdWVMaXN0Tm9kZShjb25zdCBUICZ2YWwpIDogdmFsdWUodmFsKSB7IH0KLSAgICBUIHZhbHVl
OwotICAgIGZyaWVuZCBjbGFzcyBEZXByZWNhdGVkVmFsdWVMaXN0PFQ+OwotfTsKLQotdGVtcGxh
dGU8Y2xhc3MgVD4gY2xhc3MgRGVwcmVjYXRlZFZhbHVlTGlzdEl0ZXJhdG9yIHsKLXB1YmxpYzog
Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdEl0ZXJhdG9yKCkgeyB9Ci0KLSAgICBUJiBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiAoKERlcHJlY2F0ZWRWYWx1ZUxpc3ROb2RlPFQ+ICopaW1wbC5u
b2RlKCkpLT52YWx1ZTsgfSAKLQotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RJdGVyYXRvciAmb3Bl
cmF0b3IrKygpIHsgKytpbXBsOyByZXR1cm4gKnRoaXM7IH0gICAgCi0gICAgRGVwcmVjYXRlZFZh
bHVlTGlzdEl0ZXJhdG9yICZvcGVyYXRvci0tKCkgeyAtLWltcGw7IHJldHVybiAqdGhpczsgfQot
ICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RJdGVyYXRvciBvcGVyYXRvcisrKGludCkgeyByZXR1cm4g
aW1wbCsrOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlz
dEl0ZXJhdG9yICZvdGhlcikgeyByZXR1cm4gaW1wbCA9PSBvdGhlci5pbXBsOyB9Ci0gICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3RJdGVyYXRvciAmb3RoZXIpIHsg
cmV0dXJuIGltcGwgIT0gb3RoZXIuaW1wbDsgfQotCi1wcml2YXRlOgotICAgIERlcHJlY2F0ZWRW
YWx1ZUxpc3RJdGVyYXRvcihjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbEl0ZXJhdG9yICZw
SW1wKSA6IGltcGwocEltcCkgeyB9Ci0KLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbEl0ZXJh
dG9yIGltcGw7Ci0KLSAgICBmcmllbmQgY2xhc3MgRGVwcmVjYXRlZFZhbHVlTGlzdDxUPjsKLSAg
ICBmcmllbmQgY2xhc3MgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD47Ci19Owot
Ci10ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRv
ciB7Ci1wdWJsaWM6Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3IoKSB7IH0K
LSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcihjb25zdCBEZXByZWNhdGVkVmFs
dWVMaXN0SXRlcmF0b3I8VD4gJml0KSA6IGltcGwoaXQuaW1wbCkgeyB9Ci0KLSAgICBjb25zdCBU
JiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAoKGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3RO
b2RlPFQ+ICopaW1wbC5ub2RlKCkpLT52YWx1ZTsgfQotICAgIAotICAgIERlcHJlY2F0ZWRWYWx1
ZUxpc3RDb25zdEl0ZXJhdG9yICZvcGVyYXRvcisrKCkgeyArK2ltcGw7IHJldHVybiAqdGhpczsg
fQotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yICZvcGVyYXRvci0tKCkgeyAt
LWltcGw7IHJldHVybiAqdGhpczsgfQotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJh
dG9yIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBpbXBsKys7IH0KLQotICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvciAmb3RoZXIpIHsgcmV0
dXJuIGltcGwgPT0gb3RoZXIuaW1wbDsgfQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBEZXBy
ZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvciAmb3RoZXIpIHsgcmV0dXJuIGltcGwgIT0gb3Ro
ZXIuaW1wbDsgfQotCi1wcml2YXRlOgotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJh
dG9yKGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsSXRlcmF0b3IgJnBJbXApIDogaW1wbChw
SW1wKSB7IH0KLQotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsSXRlcmF0b3IgaW1wbDsKLQot
ICAgIGZyaWVuZCBjbGFzcyBEZXByZWNhdGVkVmFsdWVMaXN0PFQ+OwotfTsKLQotdGVtcGxhdGU8
Y2xhc3MgVD4gYm9vbCBvcGVyYXRvcj09KGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8VD4gJmEs
IGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8VD4gJmIpOwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4g
Y2xhc3MgRGVwcmVjYXRlZFZhbHVlTGlzdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBEZXByZWNh
dGVkVmFsdWVMaXN0SXRlcmF0b3I8VD4gSXRlcmF0b3I7Ci0gICAgdHlwZWRlZiBEZXByZWNhdGVk
VmFsdWVMaXN0SXRlcmF0b3I8VD4gaXRlcmF0b3I7Ci0gICAgdHlwZWRlZiBEZXByZWNhdGVkVmFs
dWVMaXN0Q29uc3RJdGVyYXRvcjxUPiBDb25zdEl0ZXJhdG9yOwotICAgIHR5cGVkZWYgRGVwcmVj
YXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gY29uc3RfaXRlcmF0b3I7Ci0KLSAgICBEZXBy
ZWNhdGVkVmFsdWVMaXN0KCkgOiBpbXBsKGRlbGV0ZU5vZGUsIGNvcHlOb2RlKSB7IH0KLSAgICAg
ICAgCi0gICAgdm9pZCBjbGVhcigpIHsgaW1wbC5jbGVhcigpOyB9Ci0gICAgdW5zaWduZWQgY291
bnQoKSBjb25zdCB7IHJldHVybiBpbXBsLmNvdW50KCk7IH0KLSAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBpbXBsLmlzRW1wdHkoKTsgfQotCi0gICAgSXRlcmF0b3IgYXBwZW5kKGNv
bnN0IFQgJnZhbCkgeyByZXR1cm4gaW1wbC5hcHBlbmROb2RlKG5ldyBEZXByZWNhdGVkVmFsdWVM
aXN0Tm9kZTxUPih2YWwpKTsgfSAKLSAgICBJdGVyYXRvciBwcmVwZW5kKGNvbnN0IFQgJnZhbCkg
eyByZXR1cm4gaW1wbC5wcmVwZW5kTm9kZShuZXcgRGVwcmVjYXRlZFZhbHVlTGlzdE5vZGU8VD4o
dmFsKSk7IH0gCi0gICAgdm9pZCByZW1vdmUoY29uc3QgVCAmdmFsKSB7IERlcHJlY2F0ZWRWYWx1
ZUxpc3ROb2RlPFQ+IG5vZGUodmFsKTsgaW1wbC5yZW1vdmVFcXVhbE5vZGVzKCZub2RlLCBub2Rl
c0VxdWFsKTsgfQotICAgIHVuc2lnbmVkIGNvbnRhaW5zKGNvbnN0IFQgJnZhbCkgY29uc3QgeyBE
ZXByZWNhdGVkVmFsdWVMaXN0Tm9kZTxUPiBub2RlKHZhbCk7IHJldHVybiBpbXBsLmNvbnRhaW5z
RXF1YWxOb2Rlcygmbm9kZSwgbm9kZXNFcXVhbCk7IH0KLSAgICBJdGVyYXRvciBmaW5kKGNvbnN0
IFQgJnZhbCkgY29uc3QgeyBEZXByZWNhdGVkVmFsdWVMaXN0Tm9kZTxUPiBub2RlKHZhbCk7IHJl
dHVybiBpbXBsLmZpbmRFcXVhbE5vZGUoJm5vZGUsIG5vZGVzRXF1YWwpOyB9Ci0KLSAgICBJdGVy
YXRvciBpbnNlcnQoSXRlcmF0b3IgaXRlciwgY29uc3QgVCYgdmFsKSB7IHJldHVybiBpbXBsLmlu
c2VydChpdGVyLmltcGwsIG5ldyBEZXByZWNhdGVkVmFsdWVMaXN0Tm9kZTxUPih2YWwpKTsgfQot
ICAgIEl0ZXJhdG9yIHJlbW92ZShJdGVyYXRvciBpdGVyKSB7IHJldHVybiBpbXBsLnJlbW92ZUl0
ZXJhdG9yKGl0ZXIuaW1wbCk7IH0KLSAgICBJdGVyYXRvciBmcm9tTGFzdCgpIHsgcmV0dXJuIGlt
cGwuZnJvbUxhc3QoKTsgfQotCi0gICAgVCYgZmlyc3QoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxE
ZXByZWNhdGVkVmFsdWVMaXN0Tm9kZTxUPiAqPihpbXBsLmZpcnN0Tm9kZSgpKS0+dmFsdWU7IH0K
LSAgICBjb25zdCBUJiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PERlcHJlY2F0
ZWRWYWx1ZUxpc3ROb2RlPFQ+ICo+KGltcGwuZmlyc3ROb2RlKCkpLT52YWx1ZTsgfQotICAgIFQm
IGxhc3QoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxEZXByZWNhdGVkVmFsdWVMaXN0Tm9kZTxUPiAq
PihpbXBsLmxhc3ROb2RlKCkpLT52YWx1ZTsgfQotICAgIGNvbnN0IFQmIGxhc3QoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxEZXByZWNhdGVkVmFsdWVMaXN0Tm9kZTxUPiAqPihpbXBsLmxh
c3ROb2RlKCkpLT52YWx1ZTsgfQotCi0gICAgSXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpbXBs
LmJlZ2luKCk7IH0KLSAgICBJdGVyYXRvciBlbmQoKSB7IHJldHVybiBpbXBsLmVuZCgpOyB9Ci0K
LSAgICBDb25zdEl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaW1wbC5iZWdpbigpOyB9
Ci0gICAgQ29uc3RJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpbXBsLmVuZCgpOyB9Ci0g
ICAgQ29uc3RJdGVyYXRvciBjb25zdEJlZ2luKCkgY29uc3QgeyByZXR1cm4gaW1wbC5iZWdpbigp
OyB9Ci0gICAgQ29uc3RJdGVyYXRvciBjb25zdEVuZCgpIGNvbnN0IHsgcmV0dXJuIGltcGwuZW5k
KCk7IH0KLSAgICBDb25zdEl0ZXJhdG9yIGZyb21MYXN0KCkgY29uc3QgeyByZXR1cm4gaW1wbC5m
cm9tTGFzdCgpOyB9Ci0KLSAgICBUJiBvcGVyYXRvcltdICh1bnNpZ25lZCBpbmRleCkgeyByZXR1
cm4gKChEZXByZWNhdGVkVmFsdWVMaXN0Tm9kZTxUPiAqKWltcGwubm9kZUF0KGluZGV4KSktPnZh
bHVlOyB9Ci0gICAgY29uc3QgVCYgb3BlcmF0b3JbXSAodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuICgoY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlzdE5vZGU8VD4gKilpbXBsLm5vZGVBdChp
bmRleCkpLT52YWx1ZTsgfQotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3QgJm9wZXJhdG9yKz0oY29u
c3QgVCAmdmFsdWUpIHsgaW1wbC5hcHBlbmROb2RlKG5ldyBEZXByZWNhdGVkVmFsdWVMaXN0Tm9k
ZTxUPih2YWx1ZSkpOyByZXR1cm4gKnRoaXM7IH0KLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0ICZv
cGVyYXRvcjw8KGNvbnN0IFQgJnZhbHVlKSB7IGltcGwuYXBwZW5kTm9kZShuZXcgRGVwcmVjYXRl
ZFZhbHVlTGlzdE5vZGU8VD4odmFsdWUpKTsgcmV0dXJuICp0aGlzOyB9Ci0gICAgCi0gICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3I9PTw+KGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8VD4gJiwgY29u
c3QgRGVwcmVjYXRlZFZhbHVlTGlzdDxUPiAmKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgRGVwcmVj
YXRlZFZhbHVlTGlzdEltcGwgaW1wbDsKLQotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZU5vZGUoRGVw
cmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlICpub2RlKSB7IGRlbGV0ZSAoRGVwcmVjYXRlZFZhbHVl
TGlzdE5vZGU8VD4gKilub2RlOyB9Ci0gICAgc3RhdGljIGJvb2wgbm9kZXNFcXVhbChjb25zdCBE
ZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKmEsIGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3RJ
bXBsTm9kZSAqYikKLSAgICAgICAgeyByZXR1cm4gKChEZXByZWNhdGVkVmFsdWVMaXN0Tm9kZTxU
PiAqKWEpLT52YWx1ZSA9PSAoKERlcHJlY2F0ZWRWYWx1ZUxpc3ROb2RlPFQ+ICopYiktPnZhbHVl
OyB9Ci0gICAgc3RhdGljIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqY29weU5vZGUoRGVw
cmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlICpub2RlKQotICAgICAgICB7IHJldHVybiBuZXcgRGVw
cmVjYXRlZFZhbHVlTGlzdE5vZGU8VD4oKChEZXByZWNhdGVkVmFsdWVMaXN0Tm9kZTxUPiAqKW5v
ZGUpLT52YWx1ZSk7IH0KLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1pbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8VD4gJmEsIGNvbnN0IERlcHJlY2F0ZWRW
YWx1ZUxpc3Q8VD4gJmIpCi17Ci0gICAgcmV0dXJuIGEuaW1wbC5pc0VxdWFsKGIuaW1wbCwgRGVw
cmVjYXRlZFZhbHVlTGlzdDxUPjo6bm9kZXNFcXVhbCk7Ci19Ci0KLX0KLQotI2VuZGlmCisjZXJy
b3IgVG8gYmUgZGVsZXRlZC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFZhbHVl
TGlzdEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFZh
bHVlTGlzdEltcGwuY3BwCShyZXZpc2lvbiAzOTI3NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vRGVw
cmVjYXRlZFZhbHVlTGlzdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQwNyArMSBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVk
VmFsdWVMaXN0SW1wbC5oIgotCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsOjpQcml2YXRlIDogcHVibGlj
IFJlZkNvdW50ZWQ8RGVwcmVjYXRlZFZhbHVlTGlzdEltcGw6OlByaXZhdGU+IHsKLXB1YmxpYzoK
LSAgICBQcml2YXRlKHZvaWQgKCpkZWxldGVGdW5jKShEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5v
ZGUgKiksIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqKCpjb3B5RnVuYykoRGVwcmVjYXRl
ZFZhbHVlTGlzdEltcGxOb2RlICopKTsKLSAgICBQcml2YXRlKGNvbnN0IFByaXZhdGUgJm90aGVy
KTsKLQotICAgIH5Qcml2YXRlKCk7Ci0KLSAgICB2b2lkIGNvcHlMaXN0KERlcHJlY2F0ZWRWYWx1
ZUxpc3RJbXBsTm9kZSAqbCwgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlIComaGVhZCwgRGVw
cmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlIComdGFpbCkgY29uc3Q7Ci0gICAgdm9pZCBkZWxldGVM
aXN0KERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqbCk7Ci0KLSAgICBEZXByZWNhdGVkVmFs
dWVMaXN0SW1wbE5vZGUgKmhlYWQ7Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlICp0
YWlsOwotCi0gICAgdm9pZCAoKmRlbGV0ZU5vZGUpKERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9k
ZSAqKTsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKigqY29weU5vZGUpKERlcHJl
Y2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqKTsKLSAgICB1bnNpZ25lZCBjb3VudDsKLX07Ci0KLWlu
bGluZSBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbDo6UHJpdmF0ZTo6UHJpdmF0ZSh2b2lkICgqZGVs
ZXRlRnVuYykoRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlKiksCi0gICAgICAgIERlcHJlY2F0
ZWRWYWx1ZUxpc3RJbXBsTm9kZSogKCpjb3B5RnVuYykoRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxO
b2RlKikpCi0gICAgOiBoZWFkKE5VTEwpCi0gICAgLCB0YWlsKE5VTEwpCi0gICAgLCBkZWxldGVO
b2RlKGRlbGV0ZUZ1bmMpCi0gICAgLCBjb3B5Tm9kZShjb3B5RnVuYykKLSAgICAsIGNvdW50KDAp
Ci17Ci19Ci0KLWlubGluZSBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbDo6UHJpdmF0ZTo6UHJpdmF0
ZShjb25zdCBQcml2YXRlICZvdGhlcikKLSAgICA6IFJlZkNvdW50ZWQ8UHJpdmF0ZT4oKQotICAg
ICwgZGVsZXRlTm9kZShvdGhlci5kZWxldGVOb2RlKQotICAgICwgY29weU5vZGUob3RoZXIuY29w
eU5vZGUpCi0gICAgLCBjb3VudChvdGhlci5jb3VudCkKLXsKLSAgICBvdGhlci5jb3B5TGlzdChv
dGhlci5oZWFkLCBoZWFkLCB0YWlsKTsKLX0KLQotaW5saW5lIERlcHJlY2F0ZWRWYWx1ZUxpc3RJ
bXBsOjpQcml2YXRlOjp+UHJpdmF0ZSgpCi17Ci0gICAgZGVsZXRlTGlzdChoZWFkKTsKLX0KLQot
dm9pZCBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbDo6UHJpdmF0ZTo6Y29weUxpc3QoRGVwcmVjYXRl
ZFZhbHVlTGlzdEltcGxOb2RlICpsLCBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKiZoZWFk
LCBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKiZ0YWlsKSBjb25zdAotewotICAgIERlcHJl
Y2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqcHJldiA9IE5VTEw7Ci0gICAgRGVwcmVjYXRlZFZhbHVl
TGlzdEltcGxOb2RlICpub2RlID0gbDsKLQotICAgIGhlYWQgPSBOVUxMOwotCi0gICAgd2hpbGUg
KG5vZGUgIT0gTlVMTCkgewotICAgICAgICBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKmNv
cHkgPSBjb3B5Tm9kZShub2RlKTsKLSAgICAgICAgaWYgKHByZXYgPT0gTlVMTCkgewotICAgICAg
ICAgICAgaGVhZCA9IGNvcHk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcmV2LT5u
ZXh0ID0gY29weTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvcHktPnByZXYgPSBwcmV2OwotICAg
ICAgICBjb3B5LT5uZXh0ID0gTlVMTDsKLQotICAgICAgICBwcmV2ID0gY29weTsKLSAgICAgICAg
bm9kZSA9IG5vZGUtPm5leHQ7Ci0gICAgfQotCi0gICAgdGFpbCA9IHByZXY7Ci19Ci0KLXZvaWQg
RGVwcmVjYXRlZFZhbHVlTGlzdEltcGw6OlByaXZhdGU6OmRlbGV0ZUxpc3QoRGVwcmVjYXRlZFZh
bHVlTGlzdEltcGxOb2RlICpsKQotewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAq
cCA9IGw7Ci0gICAgCi0gICAgd2hpbGUgKHAgIT0gTlVMTCkgewotICAgICAgICBEZXByZWNhdGVk
VmFsdWVMaXN0SW1wbE5vZGUgKm5leHQgPSBwLT5uZXh0OwotICAgICAgICBkZWxldGVOb2RlKHAp
OwotICAgICAgICBwID0gbmV4dDsKLSAgICB9Ci19Ci0KLURlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBs
OjpEZXByZWNhdGVkVmFsdWVMaXN0SW1wbCh2b2lkICgqZGVsZXRlRnVuYykoRGVwcmVjYXRlZFZh
bHVlTGlzdEltcGxOb2RlICopLCBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKigqY29weUZ1
bmMpKERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqKSkgOgotICAgIGQoYWRvcHRSZWYobmV3
IFByaXZhdGUoZGVsZXRlRnVuYywgY29weUZ1bmMpKSkKLXsKLX0KLQotRGVwcmVjYXRlZFZhbHVl
TGlzdEltcGw6OkRlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsKGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxp
c3RJbXBsICZvdGhlcikgOgotICAgIGQob3RoZXIuZCkKLXsKLX0KLQotRGVwcmVjYXRlZFZhbHVl
TGlzdEltcGw6On5EZXByZWNhdGVkVmFsdWVMaXN0SW1wbCgpCi17Ci19Ci0KLXZvaWQgRGVwcmVj
YXRlZFZhbHVlTGlzdEltcGw6OmNsZWFyKCkKLXsKLSAgICBpZiAoZC0+aGVhZCkgewotICAgICAg
ICBjb3B5T25Xcml0ZSgpOwotICAgICAgICBkLT5kZWxldGVMaXN0KGQtPmhlYWQpOwotICAgICAg
ICBkLT5oZWFkID0gTlVMTDsKLSAgICAgICAgZC0+dGFpbCA9IE5VTEw7Ci0gICAgICAgIGQtPmNv
dW50ID0gMDsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsOjpj
b3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGQtPmNvdW50OwotfQotCi1ib29sIERlcHJlY2F0
ZWRWYWx1ZUxpc3RJbXBsOjppc0VtcHR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZC0+Y291bnQg
PT0gMDsKLX0KLQotRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvciBEZXByZWNhdGVkVmFs
dWVMaXN0SW1wbDo6YXBwZW5kTm9kZShEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKm5vZGUp
Ci17Ci0gICAgY29weU9uV3JpdGUoKTsKLQotICAgIG5vZGUtPm5leHQgPSBOVUxMOwotICAgIG5v
ZGUtPnByZXYgPSBkLT50YWlsOwotICAgIGQtPnRhaWwgPSBub2RlOwotICAgIAotICAgIGlmIChk
LT5oZWFkID09IE5VTEwpIHsKLSAgICAgICAgZC0+aGVhZCA9IG5vZGU7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgbm9kZS0+cHJldi0+bmV4dCA9IG5vZGU7Ci0gICAgfQotCi0gICAgZC0+Y291bnQr
KzsKLSAgICAKLSAgICByZXR1cm4gbm9kZTsKLX0KLQotRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJ
dGVyYXRvciBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbDo6cHJlcGVuZE5vZGUoRGVwcmVjYXRlZFZh
bHVlTGlzdEltcGxOb2RlICpub2RlKQotewotICAgIGNvcHlPbldyaXRlKCk7Ci0KLSAgICBub2Rl
LT5uZXh0ID0gZC0+aGVhZDsKLSAgICBub2RlLT5wcmV2ID0gTlVMTDsKLSAgICBkLT5oZWFkID0g
bm9kZTsKLQotICAgIGlmIChkLT50YWlsID09IE5VTEwpIHsKLSAgICAgICAgZC0+dGFpbCA9IG5v
ZGU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbm9kZS0+bmV4dC0+cHJldiA9IG5vZGU7Ci0gICAg
fQotCi0gICAgZC0+Y291bnQrKzsKLSAgICAKLSAgICByZXR1cm4gbm9kZTsKLX0KLQotdm9pZCBE
ZXByZWNhdGVkVmFsdWVMaXN0SW1wbDo6cmVtb3ZlRXF1YWxOb2RlcyhEZXByZWNhdGVkVmFsdWVM
aXN0SW1wbE5vZGUgKm5vZGUsIGJvb2wgKCplcXVhbEZ1bmMpKGNvbnN0IERlcHJlY2F0ZWRWYWx1
ZUxpc3RJbXBsTm9kZSAqLCBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKikpCi17
Ci0gICAgY29weU9uV3JpdGUoKTsKLQotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAq
bmV4dDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqcCA9IGQtPmhlYWQ7
IHAgIT0gTlVMTDsgcCA9IG5leHQpIHsKLSAgICAgICAgbmV4dCA9IHAtPm5leHQ7Ci0gICAgICAg
IGlmIChlcXVhbEZ1bmMobm9kZSwgcCkpIHsKLSAgICAgICAgICAgIGlmIChwLT5uZXh0ICE9IE5V
TEwpIHsKLSAgICAgICAgICAgICAgICBwLT5uZXh0LT5wcmV2ID0gcC0+cHJldjsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZC0+dGFpbCA9IHAtPnByZXY7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChwLT5wcmV2ICE9IE5VTEwpIHsKLSAgICAgICAgICAg
ICAgICBwLT5wcmV2LT5uZXh0ID0gcC0+bmV4dDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgZC0+aGVhZCA9IHAtPm5leHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGQtPmRlbGV0ZU5vZGUocCk7Ci0KLSAgICAgICAgICAgIGQtPmNvdW50LS07Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLXVuc2lnbmVkIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsOjpjb250YWlu
c0VxdWFsTm9kZXMoRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlICpub2RlLCBib29sICgqZXF1
YWxGdW5jKShjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKiwgY29uc3QgRGVwcmVj
YXRlZFZhbHVlTGlzdEltcGxOb2RlICopKSBjb25zdAotewotICAgIHVuc2lnbmVkIGNvbnRhaW5z
ID0gMDsKLQotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlICpwID0gZC0+aGVh
ZDsgcCAhPSBOVUxMOyBwID0gcC0+bmV4dCkgewotICAgICAgICBpZiAoZXF1YWxGdW5jKG5vZGUs
IHApKSB7Ci0gICAgICAgICAgICArK2NvbnRhaW5zOwotICAgICAgICB9Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBjb250YWluczsKLX0KLQotRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRv
ciBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbDo6ZmluZEVxdWFsTm9kZShEZXByZWNhdGVkVmFsdWVM
aXN0SW1wbE5vZGUgKm5vZGUsIGJvb2wgKCplcXVhbEZ1bmMpKGNvbnN0IERlcHJlY2F0ZWRWYWx1
ZUxpc3RJbXBsTm9kZSAqLCBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKikpIGNv
bnN0Ci17Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvciBpdCA9IGJlZ2luKCk7
Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvciBlbmRJdCA9IGVuZCgpOwotICAg
IHdoaWxlIChpdCAhPSBlbmRJdCkgewotICAgICAgICBpZiAoZXF1YWxGdW5jKG5vZGUsIGl0Lm5v
ZGUoKSkpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGl0Kys7Ci0g
ICAgfQotICAgIHJldHVybiBpdDsKLX0KLQotRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRv
ciBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbDo6aW5zZXJ0KGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxp
c3RJbXBsSXRlcmF0b3IgJml0ZXJhdG9yLCBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKm5v
ZGUpCi17Ci0gICAgY29weU9uV3JpdGUoKTsKLSAgICAKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0
SW1wbE5vZGUgKm5leHQgPSBpdGVyYXRvci5ub2RlSW1wbDsKLSAgICAKLSAgICBpZiAobmV4dCA9
PSBOVUxMKQotICAgICAgICByZXR1cm4gYXBwZW5kTm9kZShub2RlKTsKLSAgICAKLSAgICBpZiAo
bmV4dCA9PSBkLT5oZWFkKQotICAgICAgICByZXR1cm4gcHJlcGVuZE5vZGUobm9kZSk7Ci0gICAg
Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlICpwcmV2ID0gbmV4dC0+cHJldjsKLSAg
ICAKLSAgICBub2RlLT5uZXh0ID0gbmV4dDsKLSAgICBub2RlLT5wcmV2ID0gcHJldjsKLSAgICBu
ZXh0LT5wcmV2ID0gbm9kZTsKLSAgICBwcmV2LT5uZXh0ID0gbm9kZTsKLSAgICAKLSAgICBkLT5j
b3VudCsrOwotICAgIAotICAgIHJldHVybiBub2RlOwotfQotCi1EZXByZWNhdGVkVmFsdWVMaXN0
SW1wbEl0ZXJhdG9yIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsOjpyZW1vdmVJdGVyYXRvcihEZXBy
ZWNhdGVkVmFsdWVMaXN0SW1wbEl0ZXJhdG9yICZpdGVyYXRvcikKLXsKLSAgICBjb3B5T25Xcml0
ZSgpOwotCi0gICAgaWYgKGl0ZXJhdG9yLm5vZGVJbXBsID09IE5VTEwpIHsKLSAgICAgICAgcmV0
dXJuIGl0ZXJhdG9yOwotICAgIH0KLQotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAq
bmV4dCA9IGl0ZXJhdG9yLm5vZGVJbXBsLT5uZXh0OwotCi0gICAgLy8gZGV0YWNoIG5vZGUKLSAg
ICBpZiAoaXRlcmF0b3Iubm9kZUltcGwtPm5leHQgIT0gTlVMTCkgewotICAgICAgICBpdGVyYXRv
ci5ub2RlSW1wbC0+bmV4dC0+cHJldiA9IGl0ZXJhdG9yLm5vZGVJbXBsLT5wcmV2OwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGQtPnRhaWwgPSBpdGVyYXRvci5ub2RlSW1wbC0+cHJldjsKLSAgICB9
Ci0gICAgaWYgKGl0ZXJhdG9yLm5vZGVJbXBsLT5wcmV2ICE9IE5VTEwpIHsKLSAgICAgICAgaXRl
cmF0b3Iubm9kZUltcGwtPnByZXYtPm5leHQgPSBpdGVyYXRvci5ub2RlSW1wbC0+bmV4dDsKLSAg
ICB9IGVsc2UgewotICAgICAgICBkLT5oZWFkID0gaXRlcmF0b3Iubm9kZUltcGwtPm5leHQ7Ci0g
ICAgfQotICAgIAotICAgIGQtPmRlbGV0ZU5vZGUoaXRlcmF0b3Iubm9kZUltcGwpOwotICAgIGQt
PmNvdW50LS07Ci0KLSAgICByZXR1cm4gRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvcihu
ZXh0KTsKLX0KLQotRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvciBEZXByZWNhdGVkVmFs
dWVMaXN0SW1wbDo6ZnJvbUxhc3QoKQotewotICAgIGNvcHlPbldyaXRlKCk7Ci0gICAgcmV0dXJu
IERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsSXRlcmF0b3IobGFzdE5vZGUoKSk7Ci19Ci0KLURlcHJl
Y2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqRGVwcmVjYXRlZFZhbHVlTGlzdEltcGw6OmZpcnN0Tm9k
ZSgpCi17Ci0gICAgY29weU9uV3JpdGUoKTsKLSAgICByZXR1cm4gKChjb25zdCBEZXByZWNhdGVk
VmFsdWVMaXN0SW1wbCAqKXRoaXMpLT5maXJzdE5vZGUoKTsKLX0KLQotRGVwcmVjYXRlZFZhbHVl
TGlzdEltcGxOb2RlICpEZXByZWNhdGVkVmFsdWVMaXN0SW1wbDo6bGFzdE5vZGUoKQotewotICAg
IGNvcHlPbldyaXRlKCk7Ci0gICAgcmV0dXJuICgoY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlzdElt
cGwgKil0aGlzKS0+bGFzdE5vZGUoKTsKLX0KLQotRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2Rl
ICpEZXByZWNhdGVkVmFsdWVMaXN0SW1wbDo6Zmlyc3ROb2RlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZC0+aGVhZDsKLX0KLQotRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlICpEZXByZWNhdGVk
VmFsdWVMaXN0SW1wbDo6bGFzdE5vZGUoKSBjb25zdAotewotICAgIHJldHVybiBkLT50YWlsOwot
fQotCi1EZXByZWNhdGVkVmFsdWVMaXN0SW1wbEl0ZXJhdG9yIERlcHJlY2F0ZWRWYWx1ZUxpc3RJ
bXBsOjpiZWdpbigpCi17Ci0gICAgY29weU9uV3JpdGUoKTsKLSAgICByZXR1cm4gKChjb25zdCBE
ZXByZWNhdGVkVmFsdWVMaXN0SW1wbCAqKXRoaXMpLT5iZWdpbigpOwotfQotCi1EZXByZWNhdGVk
VmFsdWVMaXN0SW1wbEl0ZXJhdG9yIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsOjplbmQoKQotewot
ICAgIGNvcHlPbldyaXRlKCk7Ci0gICAgcmV0dXJuICgoY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlz
dEltcGwgKil0aGlzKS0+ZW5kKCk7Ci19Ci0KLQotRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVy
YXRvciBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbDo6YmVnaW4oKSBjb25zdAotewotICAgIHJldHVy
biBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbEl0ZXJhdG9yKGZpcnN0Tm9kZSgpKTsKLX0KLQotRGVw
cmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvciBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbDo6ZW5k
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvcihO
VUxMKTsKLX0KLQotRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvciBEZXByZWNhdGVkVmFs
dWVMaXN0SW1wbDo6ZnJvbUxhc3QoKSBjb25zdAotewotICAgIHJldHVybiBEZXByZWNhdGVkVmFs
dWVMaXN0SW1wbEl0ZXJhdG9yKGxhc3ROb2RlKCkpOwotfQotCi1EZXByZWNhdGVkVmFsdWVMaXN0
SW1wbE5vZGUgKkRlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsOjpub2RlQXQodW5zaWduZWQgaW5kZXgp
Ci17Ci0gICAgY29weU9uV3JpdGUoKTsKLQotICAgIGlmIChkLT5jb3VudCA8PSBpbmRleCkgewot
ICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0SW1w
bE5vZGUgKnAgPSBkLT5oZWFkOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGV4
OyBpKyspIHsKLSAgICAgICAgcCA9IHAtPm5leHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHA7Ci19
Ci0KLURlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqRGVwcmVjYXRlZFZhbHVlTGlzdEltcGw6
Om5vZGVBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKLXsKLSAgICBpZiAoZC0+Y291bnQgPD0gaW5k
ZXgpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgRGVwcmVjYXRlZFZhbHVl
TGlzdEltcGxOb2RlICpwID0gZC0+aGVhZDsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBpbmRleDsgaSsrKSB7Ci0gICAgICAgIHAgPSBwLT5uZXh0OwotICAgIH0KLQotICAgIHJldHVy
biBwOwotfQotCi1EZXByZWNhdGVkVmFsdWVMaXN0SW1wbCYgRGVwcmVjYXRlZFZhbHVlTGlzdElt
cGw6Om9wZXJhdG9yPShjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbCAmb3RoZXIpCi17Ci0g
ICAgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGwgdG1wKG90aGVyKTsKLSAgICBSZWZQdHI8UHJpdmF0
ZT4gdG1wRCA9IHRtcC5kOwotCi0gICAgdG1wLmQgPSBkOwotICAgIGQgPSB0bXBEOwotCi0gICAg
cmV0dXJuICp0aGlzOwotfQotCi12b2lkIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsOjpjb3B5T25X
cml0ZSgpCi17Ci0gICAgaWYgKCFkLT5oYXNPbmVSZWYoKSkKLSAgICAgICAgZCA9IGFkb3B0UmVm
KG5ldyBQcml2YXRlKCpkKSk7Ci19Ci0KLWJvb2wgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGw6Omlz
RXF1YWwoY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGwgJm90aGVyLCBib29sICgqZXF1YWxG
dW5jKShjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKiwgY29uc3QgRGVwcmVjYXRl
ZFZhbHVlTGlzdEltcGxOb2RlICopKSBjb25zdAotewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RJ
bXBsTm9kZSAqcCwgKnE7Ci0gICAgZm9yIChwID0gZC0+aGVhZCwgcSA9IG90aGVyLmQtPmhlYWQ7
IHAgJiYgcTsgcCA9IHAtPm5leHQsIHEgPSBxLT5uZXh0KSB7Ci0gICAgICAgIGlmICghZXF1YWxG
dW5jKHAsIHEpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuICFwICYmICFxOwotfQotCi19CisvKiBUbyBiZSBkZWxldGVkLiAqLwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9EZXByZWNhdGVkVmFsdWVMaXN0SW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFZhbHVlTGlzdEltcGwuaAkocmV2aXNpb24g
MzkyNzYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTg5ICsxIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsX2gKLSNkZWZpbmUgRGVwcmVjYXRlZFZhbHVlTGlzdElt
cGxfaAotCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZTsKLQotY2xhc3MgRGVwcmVjYXRlZFZh
bHVlTGlzdEltcGxJdGVyYXRvcgotewotcHVibGljOiAKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0
SW1wbEl0ZXJhdG9yKCk7Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERlcHJlY2F0
ZWRWYWx1ZUxpc3RJbXBsSXRlcmF0b3IgJm90aGVyKTsKLSAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvciAmb3RoZXIpOwotCi0gICAgRGVwcmVj
YXRlZFZhbHVlTGlzdEltcGxOb2RlICpub2RlKCk7Ci0gICAgY29uc3QgRGVwcmVjYXRlZFZhbHVl
TGlzdEltcGxOb2RlICpub2RlKCkgY29uc3Q7Ci0KLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0SW1w
bEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVy
YXRvciBvcGVyYXRvcisrKGludCk7Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRv
ciYgb3BlcmF0b3ItLSgpOwotCi1wcml2YXRlOgotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBs
SXRlcmF0b3IoY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlICpuKTsKLQotICAgIERl
cHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqbm9kZUltcGw7Ci0KLSAgICBmcmllbmQgY2xhc3Mg
RGVwcmVjYXRlZFZhbHVlTGlzdEltcGw7Ci19OwotCi1jbGFzcyBEZXByZWNhdGVkVmFsdWVMaXN0
SW1wbCAKLXsKLXB1YmxpYzoKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbCh2b2lkICgqZGVs
ZXRlRnVuYykoRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlICopLCBEZXByZWNhdGVkVmFsdWVM
aXN0SW1wbE5vZGUgKigqY29weU5vZGUpKERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqKSk7
Ci0gICAgfkRlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsKCk7Ci0gICAgCi0gICAgRGVwcmVjYXRlZFZh
bHVlTGlzdEltcGwoY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGwmKTsKLSAgICBEZXByZWNh
dGVkVmFsdWVMaXN0SW1wbCYgb3BlcmF0b3I9KGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBs
Jik7Ci0gICAgICAgIAotICAgIHZvaWQgY2xlYXIoKTsKLSAgICB1bnNpZ25lZCBjb3VudCgpIGNv
bnN0OwotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwotCi0gICAgRGVwcmVjYXRlZFZhbHVlTGlz
dEltcGxJdGVyYXRvciBhcHBlbmROb2RlKERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqbm9k
ZSk7Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvciBwcmVwZW5kTm9kZShEZXBy
ZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKm5vZGUpOwotICAgIHZvaWQgcmVtb3ZlRXF1YWxOb2Rl
cyhEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKm5vZGUsIGJvb2wgKCplcXVhbEZ1bmMpKGNv
bnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqLCBjb25zdCBEZXByZWNhdGVkVmFsdWVM
aXN0SW1wbE5vZGUgKikpOwotICAgIHVuc2lnbmVkIGNvbnRhaW5zRXF1YWxOb2RlcyhEZXByZWNh
dGVkVmFsdWVMaXN0SW1wbE5vZGUgKm5vZGUsIGJvb2wgKCplcXVhbEZ1bmMpKGNvbnN0IERlcHJl
Y2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqLCBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5v
ZGUgKikpIGNvbnN0OwotICAgIAotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsSXRlcmF0b3Ig
ZmluZEVxdWFsTm9kZShEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKm5vZGUsIGJvb2wgKCpl
cXVhbEZ1bmMpKGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqLCBjb25zdCBEZXBy
ZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKikpIGNvbnN0OwotCi0gICAgRGVwcmVjYXRlZFZhbHVl
TGlzdEltcGxJdGVyYXRvciBpbnNlcnQoY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVy
YXRvciAmaXRlcmF0b3IsIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSogbm9kZSk7Ci0gICAg
RGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvciByZW1vdmVJdGVyYXRvcihEZXByZWNhdGVk
VmFsdWVMaXN0SW1wbEl0ZXJhdG9yICZpdGVyYXRvcik7Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlz
dEltcGxJdGVyYXRvciBmcm9tTGFzdCgpOwotCi0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxO
b2RlICpmaXJzdE5vZGUoKTsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKmxhc3RO
b2RlKCk7Ci0KLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKmZpcnN0Tm9kZSgpIGNv
bnN0OwotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqbGFzdE5vZGUoKSBjb25zdDsK
LQotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsSXRlcmF0b3IgYmVnaW4oKTsKLSAgICBEZXBy
ZWNhdGVkVmFsdWVMaXN0SW1wbEl0ZXJhdG9yIGVuZCgpOwotCi0gICAgRGVwcmVjYXRlZFZhbHVl
TGlzdEltcGxJdGVyYXRvciBiZWdpbigpIGNvbnN0OwotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RJ
bXBsSXRlcmF0b3IgZW5kKCkgY29uc3Q7Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVy
YXRvciBmcm9tTGFzdCgpIGNvbnN0OwotICAgIAotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBs
Tm9kZSAqbm9kZUF0KHVuc2lnbmVkIGluZGV4KTsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0SW1w
bE5vZGUgKm5vZGVBdCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0gICAgCi0gICAgYm9vbCBpc0Vx
dWFsKGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsICZvdGhlciwgYm9vbCAoKmVxdWFsRnVu
YykoY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlICosIGNvbnN0IERlcHJlY2F0ZWRW
YWx1ZUxpc3RJbXBsTm9kZSAqKSkgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIHZvaWQgY29w
eU9uV3JpdGUoKTsKLQotICAgIGNsYXNzIFByaXZhdGU7Ci0KLSAgICBSZWZQdHI8UHJpdmF0ZT4g
ZDsKLSAgICAKLSAgICBmcmllbmQgY2xhc3MgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlOwot
fTsKLQotY2xhc3MgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlCi17Ci1wcm90ZWN0ZWQ6Ci0g
ICAgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlKCk7Ci0KLXByaXZhdGU6Ci0gICAgRGVwcmVj
YXRlZFZhbHVlTGlzdEltcGxOb2RlICpwcmV2OwotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBs
Tm9kZSAqbmV4dDsKLQotICAgIGZyaWVuZCBjbGFzcyBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbDsK
LSAgICBmcmllbmQgY2xhc3MgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvcjsKLSAgICBm
cmllbmQgY2xhc3MgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGw6OlByaXZhdGU7Ci19OwotCi1pbmxp
bmUgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvcjo6RGVwcmVjYXRlZFZhbHVlTGlzdElt
cGxJdGVyYXRvcigpIDogCi0gICAgbm9kZUltcGwoTlVMTCkKLXsKLX0KLQotaW5saW5lIGJvb2wg
RGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBEZXByZWNh
dGVkVmFsdWVMaXN0SW1wbEl0ZXJhdG9yICZvdGhlcikKLXsKLSAgICByZXR1cm4gbm9kZUltcGwg
PT0gb3RoZXIubm9kZUltcGw7Ci19Ci0KLWlubGluZSBib29sIERlcHJlY2F0ZWRWYWx1ZUxpc3RJ
bXBsSXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVy
YXRvciAmb3RoZXIpCi17Ci0gICAgcmV0dXJuIG5vZGVJbXBsICE9IG90aGVyLm5vZGVJbXBsOwot
fQotCi1pbmxpbmUgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlICpEZXByZWNhdGVkVmFsdWVM
aXN0SW1wbEl0ZXJhdG9yOjpub2RlKCkKLXsKLSAgICByZXR1cm4gbm9kZUltcGw7Ci19Ci0KLWlu
bGluZSBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKkRlcHJlY2F0ZWRWYWx1ZUxp
c3RJbXBsSXRlcmF0b3I6Om5vZGUoKSBjb25zdAotewotICAgIHJldHVybiBub2RlSW1wbDsKLX0K
LQotaW5saW5lIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsSXRlcmF0b3ImIERlcHJlY2F0ZWRWYWx1
ZUxpc3RJbXBsSXRlcmF0b3I6Om9wZXJhdG9yKysoKQotewotICAgIGlmIChub2RlSW1wbCAhPSBO
VUxMKSB7Ci0gICAgICAgIG5vZGVJbXBsID0gbm9kZUltcGwtPm5leHQ7Ci0gICAgfQotICAgIHJl
dHVybiAqdGhpczsKLX0KLQotaW5saW5lIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsSXRlcmF0b3Ig
RGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvcjo6b3BlcmF0b3IrKyhpbnQpCi17Ci0gICAg
RGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvciB0bXAoKnRoaXMpOwotCi0gICAgaWYgKG5v
ZGVJbXBsICE9IE5VTEwpIHsKLSAgICAgICAgbm9kZUltcGwgPSBub2RlSW1wbC0+bmV4dDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdG1wOwotfQotCi1pbmxpbmUgRGVwcmVjYXRlZFZhbHVlTGlzdElt
cGxJdGVyYXRvciYgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvcjo6b3BlcmF0b3ItLSgp
Ci17Ci0gICAgaWYgKG5vZGVJbXBsICE9IE5VTEwpIHsKLSAgICAgICAgbm9kZUltcGwgPSBub2Rl
SW1wbC0+cHJldjsKLSAgICB9Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1pbmxpbmUgRGVwcmVj
YXRlZFZhbHVlTGlzdEltcGxJdGVyYXRvcjo6RGVwcmVjYXRlZFZhbHVlTGlzdEltcGxJdGVyYXRv
cihjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKm4pIDoKLSAgICBub2RlSW1wbCgo
RGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlICopbikKLXsKLX0KLQotaW5saW5lIERlcHJlY2F0
ZWRWYWx1ZUxpc3RJbXBsTm9kZTo6RGVwcmVjYXRlZFZhbHVlTGlzdEltcGxOb2RlKCkgOiAKLSAg
ICBwcmV2KE5VTEwpLCAKLSAgICBuZXh0KE5VTEwpCi17Ci19Ci0KLX0KLQotI2VuZGlmCisjZXJy
b3IgVG8gYmUgZGVsZXRlZC4KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAzOTI3NikKKysr
IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsMTMgKzE4
OCwxMiBAQCBzdGF0aWMgYm9vbCBoYXNMb2FkTGlzdGVuZXIoU1ZHRWxlbWVudCogCiB7CiAgICAg
Tm9kZSogY3VycmVudE5vZGUgPSBub2RlOwogICAgIHdoaWxlIChjdXJyZW50Tm9kZSAmJiBjdXJy
ZW50Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgIFJlZ2lzdGVyZWRFdmVudExpc3Rl
bmVyTGlzdCAqbGlzdCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihjdXJyZW50Tm9kZSktPmxvY2Fs
RXZlbnRMaXN0ZW5lcnMoKTsKLSAgICAgICAgaWYgKGxpc3QpIHsKLSAgICAgICAgICAgIFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyTGlzdDo6SXRlcmF0b3IgZW5kID0gbGlzdC0+ZW5kKCk7Ci0gICAg
ICAgICAgICBmb3IgKFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6SXRlcmF0b3IgaXQgPSBs
aXN0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgaWYgKCgqaXQp
LT5ldmVudFR5cGUoKSA9PSBldmVudE5hbWVzKCkubG9hZEV2ZW50ICYmCi0gICAgICAgICAgICAg
ICAgICAgICgqaXQpLT51c2VDYXB0dXJlKCkgPT0gdHJ1ZSB8fCBjdXJyZW50Tm9kZSA9PSBub2Rl
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY29uc3QgUmVnaXN0
ZXJlZEV2ZW50TGlzdGVuZXJzJiBsaXN0ZW5lcnMgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oY3Vy
cmVudE5vZGUpLT5ldmVudExpc3RlbmVycygpOworICAgICAgICBzaXplX3Qgc2l6ZSA9IGxpc3Rl
bmVycy5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
CisgICAgICAgICAgICBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgciA9ICpsaXN0ZW5l
cnNbaV07CisgICAgICAgICAgICBpZiAoci5ldmVudFR5cGUoKSA9PSBldmVudE5hbWVzKCkubG9h
ZEV2ZW50ICYmIHIudXNlQ2FwdHVyZSgpIHx8IGN1cnJlbnROb2RlID09IG5vZGUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgY3VycmVudE5vZGUgPSBj
dXJyZW50Tm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1Vz
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAzOTI3NikKKysrIFdlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NjcsMTggKzc2NywxOCBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6OnRyYW5z
ZmVyRXZlbnRMaXN0ZW5lCiAgICAgQVNTRVJUKG9yaWdpbmFsRWxlbWVudCk7CiAKICAgICBpZiAo
U1ZHRWxlbWVudCogc2hhZG93VHJlZUVsZW1lbnQgPSB0YXJnZXQtPnNoYWRvd1RyZWVFbGVtZW50
KCkpIHsKLSAgICAgICAgaWYgKFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdCogbG9jYWxFdmVu
dExpc3RlbmVycyA9IG9yaWdpbmFsRWxlbWVudC0+bG9jYWxFdmVudExpc3RlbmVycygpKSB7Ci0g
ICAgICAgICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q6Okl0ZXJhdG9yIGVuZCA9IGxv
Y2FsRXZlbnRMaXN0ZW5lcnMtPmVuZCgpOwotICAgICAgICAgICAgZm9yIChSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lckxpc3Q6Okl0ZXJhdG9yIGl0ID0gbG9jYWxFdmVudExpc3RlbmVycy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgRXZlbnRMaXN0ZW5lciogbGlz
dGVuZXIgPSAoKml0KS0+bGlzdGVuZXIoKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobGlzdGVu
ZXIpOwotCi0gICAgICAgICAgICAgICAgLy8gRXZlbnQgbGlzdGVuZXJzIGNyZWF0ZWQgZnJvbSBt
YXJrdXAgaGF2ZSBhbHJlYWR5IGJlZW4gdHJhbnNmZXJlZCB0byB0aGUgc2hhZG93IHRyZWUgZHVy
aW5nIGNsb25pbmchCi0gICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyLT53YXNDcmVhdGVkRnJv
bU1hcmt1cCgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY29uc3Qg
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJzJiBsaXN0ZW5lcnMgPSBvcmlnaW5hbEVsZW1lbnQtPmV2
ZW50TGlzdGVuZXJzKCk7CisgICAgICAgIHNpemVfdCBzaXplID0gbGlzdGVuZXJzLnNpemUoKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAg
IGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiByID0gKmxpc3RlbmVyc1tpXTsKKyAgICAg
ICAgICAgIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gci5saXN0ZW5lcigpOworICAgICAgICAg
ICAgQVNTRVJUKGxpc3RlbmVyKTsKKworICAgICAgICAgICAgLy8gRXZlbnQgbGlzdGVuZXJzIGNy
ZWF0ZWQgZnJvbSBtYXJrdXAgaGF2ZSBhbHJlYWR5IGJlZW4gdHJhbnNmZXJlZCB0byB0aGUgc2hh
ZG93IHRyZWUgZHVyaW5nIGNsb25pbmchCisgICAgICAgICAgICBpZiAobGlzdGVuZXItPndhc0Ny
ZWF0ZWRGcm9tTWFya3VwKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
ICAgICAgICBzaGFkb3dUcmVlRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcigoKml0KS0+ZXZlbnRU
eXBlKCksIGxpc3RlbmVyLCAoKml0KS0+dXNlQ2FwdHVyZSgpKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNoYWRvd1RyZWVFbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKHIuZXZlbnRUeXBl
KCksIGxpc3RlbmVyLCByLnVzZUNhcHR1cmUoKSk7CiAgICAgICAgIH0KICAgICB9CiAK
</data>
<flag name="review"
          id="12236"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>