<?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>62940</bug_id>
          
          <creation_ts>2011-06-18 15:10:09 -0700</creation_ts>
          <short_desc>Disallow assigning into PassOwnArrayPtr, PassOwnPtr and PassRefPtr</short_desc>
          <delta_ts>2011-06-20 13:22:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>423264</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-06-18 15:10:09 -0700</bug_when>
    <thetext>Disallow assigning into PassOwnArrayPtr, PassOwnPtr and PassRefPtr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423265</commentid>
    <comment_count>1</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-06-18 15:13:18 -0700</bug_when>
    <thetext>In order to tighten our &quot;pass a reference&quot; style smart pointers, I think we should disallow assigning into them; this will hopefully encourage people to only use them for parameters and return values, and should also help reduce the bugs that will be found by https://bugs.webkit.org/show_bug.cgi?id=44989 (which I have a separate patch for).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423266</commentid>
    <comment_count>2</comment_count>
      <attachid>97707</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-06-18 15:19:21 -0700</bug_when>
    <thetext>Created attachment 97707
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423267</commentid>
    <comment_count>3</comment_count>
      <attachid>97707</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-18 15:37:52 -0700</bug_when>
    <thetext>Comment on attachment 97707
Patch

Attachment 97707 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8872956</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423274</commentid>
    <comment_count>4</comment_count>
      <attachid>97707</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-18 16:51:16 -0700</bug_when>
    <thetext>Comment on attachment 97707
Patch

Attachment 97707 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/8874987</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423284</commentid>
    <comment_count>5</comment_count>
      <attachid>97707</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-18 17:29:20 -0700</bug_when>
    <thetext>Comment on attachment 97707
Patch

Anders, it looks like V8 bindings have some problems of this type, so this breaks the V8 build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423287</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-18 17:37:35 -0700</bug_when>
    <thetext>This is a really great idea. We just have to do it with the changes to keep V8 bindings working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423297</commentid>
    <comment_count>7</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-06-18 19:13:48 -0700</bug_when>
    <thetext>The offending line in V8HTMLTextAreaElement.cpp is:

    EXCEPTION_BLOCK(PassRefPtr&lt;DOMStringList&gt;, suggestions, v8ValueToWebCoreDOMStringList(args[2]));

in addSpellcheckRangeCallback.

EXCEPTION_BLOCK is a macro that looks like:

#define EXCEPTION_BLOCK(type, var, value) \
    type var;                             \
    {                                     \
        v8::TryCatch block;               \
        var = (value);                    \
        if (block.HasCaught())            \
            return block.ReThrow();       \
    }


This is a V8 wrapper around the HTMLTextAreaElement member function

    void addSpellcheckRange(unsigned long start, unsigned long length, RefPtr&lt;DOMStringList&gt;, unsigned short options = 0);

which the IDL file specifies as:

        void addSpellcheckRange(in unsigned long start, in unsigned long length, in [Optional] DOMStringList suggestions, in [Optional] unsigned short options);

Now there&apos;s code in the V8 bindings generator (GetNativeType to be exact) to always return PassRefPtr&lt;DOMStringList&gt; for DOMStringList parameters:

    return &quot;PassRefPtr&lt;DOMStringList&gt;&quot; if $type eq &quot;DOMStringList&quot; and $isParameter;

That doesn&apos;t seem necessary to me, but was added in https://bugs.webkit.org/show_bug.cgi?id=56950</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423333</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-18 22:11:44 -0700</bug_when>
    <thetext>I can sort out any V8 issues for you on Monday.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423369</commentid>
    <comment_count>9</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-06-19 08:36:39 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I can sort out any V8 issues for you on Monday.

That&apos;d be great. I filed https://bugs.webkit.org/show_bug.cgi?id=62947 to test a patch that simply makes the V8 bindings stop using PassRefPtr&lt;DOMStringList&gt; for DOMStringList parameters, and that seems to have built fine...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423387</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-19 13:02:53 -0700</bug_when>
    <thetext>Here’s my take on those bindings quirks:

Those DOM spellcheck range functions are wrong to use RefPtr for their arguments. I just noticed that mistake separately. They should take PassRefPtr or a raw pointer. We never use RefPtr for an argument!

The binding script is wrong to ever explicitly a PassRefPtr. I know of no downside to passing a raw pointer at the bindings level and letting the compiler generate the conversion to PassRefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423390</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-19 13:13:06 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Those DOM spellcheck range functions are wrong to use RefPtr for their arguments. I just noticed that mistake separately. They should take PassRefPtr or a raw pointer. We never use RefPtr for an argument!

I filed bug 62954 about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423873</commentid>
    <comment_count>12</comment_count>
      <attachid>97842</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-06-20 12:46:36 -0700</bug_when>
    <thetext>Created attachment 97842
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423878</commentid>
    <comment_count>13</comment_count>
      <attachid>97842</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-20 12:50:10 -0700</bug_when>
    <thetext>Comment on attachment 97842
Patch

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

&gt; Source/WebCore/editing/htmlediting.cpp:892
&gt; +    RefPtr&lt;Node&gt; tabTextNode = prpTabTextNode;

I would have put this at the top of the function instead of here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423907</commentid>
    <comment_count>14</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-06-20 13:22:01 -0700</bug_when>
    <thetext>Committed r89283: &lt;http://trac.webkit.org/changeset/89283&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97707</attachid>
            <date>2011-06-18 15:19:21 -0700</date>
            <delta_ts>2011-06-20 12:46:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62940-20110618151919.patch</filename>
            <type>text/plain</type>
            <size>21066</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODkyMDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAK
KzIwMTEtMDYtMTggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEaXNhbGxvdyBhc3Np
Z25pbmcgaW50byBQYXNzT3duQXJyYXlQdHIsIFBhc3NPd25QdHIgYW5kIFBhc3NSZWZQdHIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyOTQwCisKKyAg
ICAgICAgUmVtb3ZlIGNsZWFyKCkgYW5kIGFsbCBhc3NpZ25tZW50IG9wZXJhdG9ycyBleGNlcHQg
b25lIHdoaWNoIG5vdyBoYXMgYSBDT01QSUxFX0FTU0VSVC4KKworICAgICAgICAqIHd0Zi9QYXNz
T3duQXJyYXlQdHIuaDoKKyAgICAgICAgKFdURjo6UGFzc093bkFycmF5UHRyOjpvcGVyYXRvcj0p
OgorICAgICAgICAqIHd0Zi9QYXNzT3duUHRyLmg6CisgICAgICAgIChXVEY6OlBhc3NPd25QdHI6
Om9wZXJhdG9yPSk6CisgICAgICAgICogd3RmL1Bhc3NSZWZQdHIuaDoKKyAgICAgICAgKFdURjo6
UGFzc1JlZlB0cjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6Tm9uTnVsbFBhc3NSZWZQdHI6
Om9wZXJhdG9yPSk6CisKIDIwMTEtMDYtMTggIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5i
b3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI4OTE4NC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFzc093bkFycmF5UHRyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXNzT3duQXJyYXlQdHIuaAkocmV2
aXNpb24gODkyMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NPd25BcnJheVB0
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKIAogICAgIFB0clR5
cGUgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KIAotICAgIHZvaWQgY2xlYXIoKTsKICAg
ICBQdHJUeXBlIGxlYWtQdHIoKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk47CiAKICAgICBUJiBv
cGVyYXRvciooKSBjb25zdCB7IEFTU0VSVChtX3B0cik7IHJldHVybiAqbV9wdHI7IH0KQEAgLTcw
LDkgKzY5LDcgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3B0ciA/ICZQYXNzT3duQXJyYXlQdHI6Om1fcHRyIDogMDsgfQogI2Vu
ZGlmCiAKLSAgICBQYXNzT3duQXJyYXlQdHImIG9wZXJhdG9yPShjb25zdCBQYXNzT3duQXJyYXlQ
dHI8VD4mKTsKLSAgICBQYXNzT3duQXJyYXlQdHImIG9wZXJhdG9yPShzdGQ6Om51bGxwdHJfdCkg
eyBjbGVhcigpOyByZXR1cm4gKnRoaXM7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBQYXNz
T3duQXJyYXlQdHImIG9wZXJhdG9yPShjb25zdCBQYXNzT3duQXJyYXlQdHI8VT4mKTsKKyAgICBQ
YXNzT3duQXJyYXlQdHImIG9wZXJhdG9yPShjb25zdCBQYXNzT3duQXJyYXlQdHImKSB7IENPTVBJ
TEVfQVNTRVJUKCFzaXplb2YoVCopLCBQYXNzT3duQXJyYXlQdHJfc2hvdWxkX25ldmVyX2JlX2Fz
c2lnbmVkX3RvKTsgcmV0dXJuICp0aGlzOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBm
cmllbmQgUGFzc093bkFycmF5UHRyPFU+IGFkb3B0QXJyYXlQdHIoVSopOwogCkBAIC04MiwxMyAr
NzksNiBAQCBwcml2YXRlOgogICAgIG11dGFibGUgUHRyVHlwZSBtX3B0cjsKIH07CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIFBhc3NPd25BcnJheVB0cjxUPjo6Y2xlYXIoKQot
ewotICAgIFB0clR5cGUgcHRyID0gbV9wdHI7Ci0gICAgbV9wdHIgPSAwOwotICAgIGRlbGV0ZU93
bmVkQXJyYXlQdHIocHRyKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVu
YW1lIFBhc3NPd25BcnJheVB0cjxUPjo6UHRyVHlwZSBQYXNzT3duQXJyYXlQdHI8VD46OmxlYWtQ
dHIoKSBjb25zdAogewogICAgIFB0clR5cGUgcHRyID0gbV9wdHI7CkBAIC05NiwyNiArODYsNiBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgUGFzCiAgICAgcmV0dXJuIHB0
cjsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NPd25BcnJheVB0cjxUPiYg
UGFzc093bkFycmF5UHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgUGFzc093bkFycmF5UHRyPFQ+JiBv
cHRyKQotewotICAgIFB0clR5cGUgcHRyID0gbV9wdHI7Ci0gICAgbV9wdHIgPSBvcHRyLmxlYWtQ
dHIoKTsKLSAgICBBU1NFUlQoIXB0ciB8fCBtX3B0ciAhPSBwdHIpOwotICAgIGlmIChwdHIpCi0g
ICAgICAgIGRlbGV0ZU93bmVkQXJyYXlQdHIocHRyKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+IGlubGluZSBQYXNzT3du
QXJyYXlQdHI8VD4mIFBhc3NPd25BcnJheVB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFBhc3NPd25B
cnJheVB0cjxVPiYgb3B0cikKLXsKLSAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOwotICAgIG1fcHRy
ID0gb3B0ci5sZWFrUHRyKCk7Ci0gICAgQVNTRVJUKCFwdHIgfHwgbV9wdHIgIT0gcHRyKTsKLSAg
ICBpZiAocHRyKQotICAgICAgICBkZWxldGVPd25lZEFycmF5UHRyKHB0cik7Ci0gICAgcmV0dXJu
ICp0aGlzOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFBhc3NPd25BcnJheVB0cjxUPiYgYSwgY29uc3QgUGFzc093bkFy
cmF5UHRyPFU+JiBiKSAKIHsKICAgICByZXR1cm4gYS5nZXQoKSA9PSBiLmdldCgpOyAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFzc093blB0ci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFzc093blB0ci5oCShyZXZpc2lvbiA4OTIwNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFzc093blB0ci5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw3ICs1Nyw2IEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgICAgIFB0clR5cGUgZ2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9wdHI7IH0KIAotICAgICAgICB2b2lkIGNsZWFyKCk7CiAgICAgICAg
IFB0clR5cGUgbGVha1B0cigpIGNvbnN0IFdBUk5fVU5VU0VEX1JFVFVSTjsKIAogICAgICAgICBW
YWx1ZVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJuICptX3B0
cjsgfQpAQCAtNjksOSArNjgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgdHlwZWRlZiBQ
dHJUeXBlIFBhc3NPd25QdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlOwogICAgICAgICBvcGVyYXRv
ciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgPyAmUGFzc093blB0
cjo6bV9wdHIgOiAwOyB9CiAKLSAgICAgICAgUGFzc093blB0ciYgb3BlcmF0b3I9KGNvbnN0IFBh
c3NPd25QdHI8VD4mKTsKLSAgICAgICAgUGFzc093blB0ciYgb3BlcmF0b3I9KHN0ZDo6bnVsbHB0
cl90KSB7IGNsZWFyKCk7IHJldHVybiAqdGhpczsgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBQYXNzT3duUHRyJiBvcGVyYXRvcj0oY29uc3QgUGFzc093blB0cjxVPiYpOworICAgICAg
ICBQYXNzT3duUHRyJiBvcGVyYXRvcj0oY29uc3QgUGFzc093blB0ciYpIHsgQ09NUElMRV9BU1NF
UlQoIXNpemVvZihUKiksIFBhc3NPd25QdHJfc2hvdWxkX25ldmVyX2JlX2Fzc2lnbmVkX3RvKTsg
cmV0dXJuICp0aGlzOyB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gZnJpZW5kIFBh
c3NPd25QdHI8VT4gYWRvcHRQdHIoVSopOwogCkBAIC04OCwxMyArODUsNiBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgbXV0YWJsZSBQdHJUeXBlIG1fcHRyOwogICAgIH07CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBQYXNzT3duUHRyPFQ+OjpjbGVhcigpCi0gICAg
ewotICAgICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOwotICAgICAgICBtX3B0ciA9IDA7Ci0gICAg
ICAgIGRlbGV0ZU93bmVkUHRyKHB0cik7Ci0gICAgfQotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIHR5cGVuYW1lIFBhc3NPd25QdHI8VD46OlB0clR5cGUgUGFzc093blB0cjxUPjo6
bGVha1B0cigpIGNvbnN0CiAgICAgewogICAgICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOwpAQCAt
MTAyLDI2ICs5Miw2IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICByZXR1cm4gcHRyOwogICAg
IH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzT3duUHRyPFQ+JiBQYXNz
T3duUHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgUGFzc093blB0cjxUPiYgb3B0cikKLSAgICB7Ci0g
ICAgICAgIFB0clR5cGUgcHRyID0gbV9wdHI7Ci0gICAgICAgIG1fcHRyID0gb3B0ci5sZWFrUHRy
KCk7Ci0gICAgICAgIEFTU0VSVCghcHRyIHx8IG1fcHRyICE9IHB0cik7Ci0gICAgICAgIGlmIChw
dHIpCi0gICAgICAgICAgICBkZWxldGVPd25lZFB0cihwdHIpOwotICAgICAgICByZXR1cm4gKnRo
aXM7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUg
VT4gaW5saW5lIFBhc3NPd25QdHI8VD4mIFBhc3NPd25QdHI8VD46Om9wZXJhdG9yPShjb25zdCBQ
YXNzT3duUHRyPFU+JiBvcHRyKQotICAgIHsKLSAgICAgICAgUHRyVHlwZSBwdHIgPSBtX3B0cjsK
LSAgICAgICAgbV9wdHIgPSBvcHRyLmxlYWtQdHIoKTsKLSAgICAgICAgQVNTRVJUKCFwdHIgfHwg
bV9wdHIgIT0gcHRyKTsKLSAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgIGRlbGV0ZU93bmVk
UHRyKHB0cik7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBhc3NP
d25QdHI8VD4mIGEsIGNvbnN0IFBhc3NPd25QdHI8VT4mIGIpIAogICAgIHsKICAgICAgICAgcmV0
dXJuIGEuZ2V0KCkgPT0gYi5nZXQoKTsgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1Bhc3NSZWZQdHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bh
c3NSZWZQdHIuaAkocmV2aXNpb24gODkyMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1Bhc3NSZWZQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNiBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgCiAgICAgICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9
CiAKLSAgICAgICAgdm9pZCBjbGVhcigpOwogICAgICAgICBUKiBsZWFrUmVmKCkgY29uc3QgV0FS
Tl9VTlVTRURfUkVUVVJOOwogCiAgICAgICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJu
ICptX3B0cjsgfQpAQCAtODksMTMgKzg4LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHR5
cGVkZWYgVCogKFBhc3NSZWZQdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKICAgICAgICAgb3Bl
cmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID8gJlBhc3NS
ZWZQdHI6Om1fcHRyIDogMDsgfQogCi0gICAgICAgIFBhc3NSZWZQdHImIG9wZXJhdG9yPShUKik7
Ci0gICAgICAgIFBhc3NSZWZQdHImIG9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyJik7Ci0jaWYg
IUhBVkUoTlVMTFBUUikKLSAgICAgICAgUGFzc1JlZlB0ciYgb3BlcmF0b3I9KHN0ZDo6bnVsbHB0
cl90KSB7IGNsZWFyKCk7IHJldHVybiAqdGhpczsgfQotI2VuZGlmCi0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+IFBhc3NSZWZQdHImIG9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPFU+Jik7
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFBhc3NSZWZQdHImIG9wZXJhdG9yPShjb25z
dCBSZWZQdHI8VT4mKTsKKyAgICAgICAgUGFzc1JlZlB0ciYgb3BlcmF0b3I9KGNvbnN0IFBhc3NS
ZWZQdHImKSB7IENPTVBJTEVfQVNTRVJUKCFzaXplb2YoVCopLCBQYXNzUmVmUHRyX3Nob3VsZF9u
ZXZlcl9iZV9hc3NpZ25lZF90byk7IHJldHVybiAqdGhpczsgfQogCiAgICAgICAgIGZyaWVuZCBQ
YXNzUmVmUHRyIGFkb3B0UmVmPFQ+KFQqKTsKIApAQCAtMTU1LDEyICsxNDgsMTMgQEAgbmFtZXNw
YWNlIFdURiB7CiAKICAgICAgICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KIAot
ICAgICAgICB2b2lkIGNsZWFyKCk7CiAgICAgICAgIFQqIGxlYWtSZWYoKSBjb25zdCBXQVJOX1VO
VVNFRF9SRVRVUk4geyBUKiB0bXAgPSBtX3B0cjsgbV9wdHIgPSAwOyByZXR1cm4gdG1wOyB9CiAK
ICAgICAgICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fcHRyOyB9CiAgICAgICAg
IFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQogCisgICAgICAgIE5vbk51
bGxQYXNzUmVmUHRyJiBvcGVyYXRvcj0oY29uc3QgTm9uTnVsbFBhc3NSZWZQdHImKSB7IENPTVBJ
TEVfQVNTRVJUKCFzaXplb2YoVCopLCBOb25OdWxsUGFzc1JlZlB0cl9zaG91bGRfbmV2ZXJfYmVf
YXNzaWduZWRfdG8pOyByZXR1cm4gKnRoaXM7IH0KKwogICAgICAgICAvLyBGSVhNRTogUmVtb3Zl
IHJlbGVhc2VSZWYgb25jZSB3ZSBjaGFuZ2UgYWxsIGNhbGxlcnMgdG8gY2FsbCBsZWFrUmVmIGlu
c3RlYWQuCiAgICAgICAgIFQqIHJlbGVhc2VSZWYoKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk4g
eyByZXR1cm4gbGVha1JlZigpOyB9CiAKQEAgLTE3NSwxMyArMTY5LDYgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgIHJlZklmTm90TnVsbChwdHIpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSB2b2lkIFBhc3NSZWZQdHI8VD46OmNsZWFyKCkKLSAgICB7Ci0gICAg
ICAgIFQqIHB0ciA9IG1fcHRyOwotICAgICAgICBtX3B0ciA9IDA7Ci0gICAgICAgIGRlcmVmSWZO
b3ROdWxsKHB0cik7Ci0gICAgfQotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQq
IFBhc3NSZWZQdHI8VD46OmxlYWtSZWYoKSBjb25zdAogICAgIHsKICAgICAgICAgVCogcHRyID0g
bV9wdHI7CkBAIC0xODksNDEgKzE3Niw2IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICByZXR1
cm4gcHRyOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVu
YW1lIFU+IGlubGluZSBQYXNzUmVmUHRyPFQ+JiBQYXNzUmVmUHRyPFQ+OjpvcGVyYXRvcj0oY29u
c3QgUmVmUHRyPFU+JiBvKQotICAgIHsKLSAgICAgICAgVCogb3B0ciA9IG8uZ2V0KCk7Ci0gICAg
ICAgIHJlZklmTm90TnVsbChvcHRyKTsKLSAgICAgICAgVCogcHRyID0gbV9wdHI7Ci0gICAgICAg
IG1fcHRyID0gb3B0cjsKLSAgICAgICAgZGVyZWZJZk5vdE51bGwocHRyKTsKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
UGFzc1JlZlB0cjxUPiYgUGFzc1JlZlB0cjxUPjo6b3BlcmF0b3I9KFQqIG9wdHIpCi0gICAgewot
ICAgICAgICByZWZJZk5vdE51bGwob3B0cik7Ci0gICAgICAgIFQqIHB0ciA9IG1fcHRyOwotICAg
ICAgICBtX3B0ciA9IG9wdHI7Ci0gICAgICAgIGRlcmVmSWZOb3ROdWxsKHB0cik7Ci0gICAgICAg
IHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
UGFzc1JlZlB0cjxUPiYgUGFzc1JlZlB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8
VD4mIHJlZikKLSAgICB7Ci0gICAgICAgIFQqIHB0ciA9IG1fcHRyOwotICAgICAgICBtX3B0ciA9
IHJlZi5sZWFrUmVmKCk7Ci0gICAgICAgIGRlcmVmSWZOb3ROdWxsKHB0cik7Ci0gICAgICAgIHJl
dHVybiAqdGhpczsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxh
dGU8dHlwZW5hbWUgVT4gaW5saW5lIFBhc3NSZWZQdHI8VD4mIFBhc3NSZWZQdHI8VD46Om9wZXJh
dG9yPShjb25zdCBQYXNzUmVmUHRyPFU+JiByZWYpCi0gICAgewotICAgICAgICBUKiBwdHIgPSBt
X3B0cjsKLSAgICAgICAgbV9wdHIgPSByZWYubGVha1JlZigpOwotICAgICAgICBkZXJlZklmTm90
TnVsbChwdHIpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
UGFzc1JlZlB0cjxUPiYgYSwgY29uc3QgUGFzc1JlZlB0cjxVPiYgYikgCiAgICAgeyAKICAgICAg
ICAgcmV0dXJuIGEuZ2V0KCkgPT0gYi5nZXQoKTsgCkBAIC0yOTUsMTMgKzI0Nyw2IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICByZXR1cm4gcC5nZXQoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBOb25OdWxsUGFzc1JlZlB0cjxUPjo6Y2xlYXIoKQot
ICAgIHsKLSAgICAgICAgVCogcHRyID0gbV9wdHI7Ci0gICAgICAgIG1fcHRyID0gMDsKLSAgICAg
ICAgZGVyZWZJZk5vdE51bGwocHRyKTsKLSAgICB9Ci0KIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1
c2luZyBXVEY6OlBhc3NSZWZQdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA4OTIwNykKKysr
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDExLTA2LTE4ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGlzYWxsb3cgYXNz
aWduaW5nIGludG8gUGFzc093bkFycmF5UHRyLCBQYXNzT3duUHRyIGFuZCBQYXNzUmVmUHRyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjk0MAorCisg
ICAgICAgIE1ha2Ugc3VyZSB0aGF0IHdlIG5ldmVyIGFzc2lnbiBpbnRvIGFueSBhbHJlYWR5IGV4
aXN0aW5nIFBhc3NSZWZQdHIuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlNZWRpYUNvbnRyb2xzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZWRp
YUNvbnRyb2w6OmNyZWF0ZSk6CisgICAgICAgIFJlbW92ZSBsb2NhbCBQYXNzUmVmUHRyIHZhcmlh
YmxlLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpzZXRCb2R5KToKKyAgICAgICAgUmVuYW1lIHRoZSBQYXNzUmVmUHRyIHBhcmFtZXRl
ciBhbmQgY3JlYXRlIGEgUmVmUHRyIHZhcmlhYmxlLgorCisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6c2V0Rm9jdXNlZE5vZGUpOgorICAgICAgICBEaXR0by4KKworICAgICAgICAqIGVkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNv
bW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKToKKyAgICAgICAgVGhlcmUncyBubyByZWFzb24gdG8g
dXNlIGEgUGFzc1JlZlB0ciBoZXJlLiBVc2UgYSBSZWZQdHIsIGFuZCBkb24ndCBpbml0aWFsaXpl
IGl0IHNpbmNlIGl0J3MgaW1wbGljaXRseSBpbml0aWFsaXplZC4KKworICAgICAgICAqIGVkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
RWRpdENvbW1hbmQ6OnBydW5lKToKKyAgICAgICAgUmVuYW1lIHRoZSBQYXNzUmVmUHRyIHBhcmFt
ZXRlciBhbmQgY3JlYXRlIGEgUmVmUHRyIHZhcmlhYmxlLgorCisgICAgICAgICogZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6aW5zZXJ0QXNMaXN0SXRlbXMpOgorICAgICAgICBEaXR0by4KKworICAg
ICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
VGFiU3BhbkVsZW1lbnQpOgorICAgICAgICBEaXR0by4KKworICAgICAgICAqIGh0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbFN0eWxlKToKKyAgICAgICAgRGl0dG8uCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OmZvcm1GaW5hbGl6ZSk6CisgICAgICAgIERpdHRvLgorCisgICAgICAg
IChXZWJDb3JlOjpzZXRIVFRQQm9keSk6CisgICAgICAgIFVzZSBhbiBPd25QdHIgaW5zdGVhZCBv
ZiBleHBsaWNpdGx5IGRlbGV0aW5nIHRoZSBmb3JtIHZhcmlhYmxlLgorCiAyMDExLTA2LTE4ICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5TWVkaWFDb250cm9scy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAJKHJldmlzaW9uIDg5MjA3KQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9s
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDI3ICs2MywyMCBAQCBQYXNzUmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3Q+IEFjY2Vzc2liCiAgICAgZWxzZQogICAgICAgICBjb250cm9sVHlwZSA9
IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbEVsZW1lbnQqPihub2RlKS0+ZGlzcGxheVR5cGUoKTsK
IAotICAgIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqOwogICAgIHN3aXRjaCAo
Y29udHJvbFR5cGUpIHsKICAgICBjYXNlIE1lZGlhU2xpZGVyOgotICAgICAgICBvYmogPSBBY2Nl
c3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6Y3JlYXRlKHJlbmRlcmVyKTsKLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6Y3JlYXRlKHJlbmRl
cmVyKTsKIAogICAgIGNhc2UgTWVkaWFDdXJyZW50VGltZURpc3BsYXk6CiAgICAgY2FzZSBNZWRp
YVRpbWVSZW1haW5pbmdEaXNwbGF5OgotICAgICAgICBvYmogPSBBY2Nlc3NpYmlsaXR5TWVkaWFU
aW1lRGlzcGxheTo6Y3JlYXRlKHJlbmRlcmVyKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybiBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6Y3JlYXRlKHJlbmRlcmVyKTsKIAog
ICAgIGNhc2UgTWVkaWFDb250cm9sc1BhbmVsOgotICAgICAgICBvYmogPSBBY2Nlc3NpYmlsaXR5
TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6Y3JlYXRlKHJlbmRlcmVyKTsKLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6Y3Jl
YXRlKHJlbmRlcmVyKTsKIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIG9iaiA9IGFkb3B0UmVmKG5l
dyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sKHJlbmRlcmVyKSk7Ci0gICAgICAgIGJyZWFrOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wocmVu
ZGVyZXIpKTsKICAgICB9Ci0KLSAgICByZXR1cm4gb2JqOwogfQogCiBNZWRpYUNvbnRyb2xFbGVt
ZW50VHlwZSBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpjb250cm9sVHlwZSgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDg5MjA3KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxMyw4ICsyMDEzLDEw
IEBAIEhUTUxFbGVtZW50KiBEb2N1bWVudDo6Ym9keSgpIGNvbnN0CiAgICAgcmV0dXJuIHRvSFRN
TEVsZW1lbnQoYm9keSk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnNldEJvZHkoUGFzc1JlZlB0cjxI
VE1MRWxlbWVudD4gbmV3Qm9keSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIERvY3VtZW50Ojpz
ZXRCb2R5KFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHBycE5ld0JvZHksIEV4Y2VwdGlvbkNvZGUm
IGVjKQogeworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbmV3Qm9keSA9IHBycE5ld0JvZHk7CisK
ICAgICBpZiAoIW5ld0JvZHkgfHwgIWRvY3VtZW50RWxlbWVudCgpIHx8ICFuZXdCb2R5LT5oYXNU
YWdOYW1lKGJvZHlUYWcpKSB7IAogICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjAzMSw5ICsyMDMzLDkgQEAgdm9pZCBEb2N1bWVudDo6c2V0
Qm9keShQYXNzUmVmUHRyPEhUTUxFbAogCiAgICAgSFRNTEVsZW1lbnQqIGIgPSBib2R5KCk7CiAg
ICAgaWYgKCFiKQotICAgICAgICBkb2N1bWVudEVsZW1lbnQoKS0+YXBwZW5kQ2hpbGQobmV3Qm9k
eSwgZWMpOworICAgICAgICBkb2N1bWVudEVsZW1lbnQoKS0+YXBwZW5kQ2hpbGQobmV3Qm9keS5y
ZWxlYXNlKCksIGVjKTsKICAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50RWxlbWVudCgpLT5yZXBs
YWNlQ2hpbGQobmV3Qm9keSwgYiwgZWMpOworICAgICAgICBkb2N1bWVudEVsZW1lbnQoKS0+cmVw
bGFjZUNoaWxkKG5ld0JvZHkucmVsZWFzZSgpLCBiLCBlYyk7CiB9CiAKIEhUTUxIZWFkRWxlbWVu
dCogRG9jdW1lbnQ6OmhlYWQoKQpAQCAtMzA2OCw4ICszMDcwLDEwIEBAIHZvaWQgRG9jdW1lbnQ6
OnNldERhc2hib2FyZFJlZ2lvbnMoY29uc3QKIH0KICNlbmRpZgogCi1ib29sIERvY3VtZW50Ojpz
ZXRGb2N1c2VkTm9kZShQYXNzUmVmUHRyPE5vZGU+IG5ld0ZvY3VzZWROb2RlKQoteyAgICAKK2Jv
b2wgRG9jdW1lbnQ6OnNldEZvY3VzZWROb2RlKFBhc3NSZWZQdHI8Tm9kZT4gcHJwTmV3Rm9jdXNl
ZE5vZGUpCit7CisgICAgUmVmUHRyPE5vZGU+IG5ld0ZvY3VzZWROb2RlID0gcHJwTmV3Rm9jdXNl
ZE5vZGU7CisKICAgICAvLyBNYWtlIHN1cmUgbmV3Rm9jdXNlZE5vZGUgaXMgYWN0dWFsbHkgaW4g
dGhpcyBkb2N1bWVudAogICAgIGlmIChuZXdGb2N1c2VkTm9kZSAmJiAobmV3Rm9jdXNlZE5vZGUt
PmRvY3VtZW50KCkgIT0gdGhpcykpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzE0Miw3ICsz
MTQ2LDcgQEAgYm9vbCBEb2N1bWVudDo6c2V0Rm9jdXNlZE5vZGUoUGFzc1JlZlB0cgogICAgICAg
ICAgICAgZ290byBTZXRGb2N1c2VkTm9kZURvbmU7CiAgICAgICAgIH0KICAgICAgICAgLy8gU2V0
IGZvY3VzIG9uIHRoZSBuZXcgbm9kZQotICAgICAgICBtX2ZvY3VzZWROb2RlID0gbmV3Rm9jdXNl
ZE5vZGUuZ2V0KCk7CisgICAgICAgIG1fZm9jdXNlZE5vZGUgPSBuZXdGb2N1c2VkTm9kZTsKIAog
ICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZm9jdXMgZXZlbnQgYW5kIGxldCB0aGUgbm9kZSBkbyBh
bnkgb3RoZXIgZm9jdXMgcmVsYXRlZCBhY3Rpdml0aWVzIChpbXBvcnRhbnQgZm9yIHRleHQgZmll
bGRzKQogICAgICAgICBtX2ZvY3VzZWROb2RlLT5kaXNwYXRjaEZvY3VzRXZlbnQoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lv
biA4OTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDU4LDcgKzEwNTgsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21t
YW5kOjpyZW1vdmVJbmxpbmVTdHlsCiAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gcHJldiA9IGVs
ZW0tPnRyYXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKCk7CiAgICAgICAgICAgICBSZWZQdHI8
Tm9kZT4gbmV4dCA9IGVsZW0tPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICAgICAgICAgIFJlZlB0
cjxFZGl0aW5nU3R5bGU+IHN0eWxlVG9QdXNoRG93bjsKLSAgICAgICAgICAgIFBhc3NSZWZQdHI8
Tm9kZT4gY2hpbGROb2RlID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBjaGlsZE5vZGU7
CiAgICAgICAgICAgICBpZiAoaXNTdHlsZWRJbmxpbmVFbGVtZW50VG9SZW1vdmUoZWxlbS5nZXQo
KSkpIHsKICAgICAgICAgICAgICAgICBzdHlsZVRvUHVzaERvd24gPSBFZGl0aW5nU3R5bGU6OmNy
ZWF0ZSgpOwogICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGVsZW0tPmZpcnN0Q2hpbGQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwCShyZXZpc2lvbiA4OTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsOCArMjQ3LDEwIEBAIHN0YXRp
YyBib29sIGhhc0FSZW5kZXJlZERlc2NlbmRhbnQoTm9kZSoKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBydW5lKFBhc3NSZWZQdHI8Tm9kZT4gbm9k
ZSkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBydW5lKFBhc3NSZWZQdHI8Tm9kZT4gcHJw
Tm9kZSkKIHsKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IHBycE5vZGU7CisKICAgICB3aGlsZSAo
bm9kZSkgewogICAgICAgICAvLyBJZiB5b3UgY2hhbmdlIHRoaXMgcnVsZSB5b3UgbWF5IGhhdmUg
dG8gYWRkIGFuIHVwZGF0ZUxheW91dCgpIGhlcmUuCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDg5MjA3KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyMzUsOCArMTIzNSwxMCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjppbnNlcnROb2RlCiAKIC8vIElmIHRoZSB1c2VyIGlzIGluc2VydGluZyBhIGxpc3QgaW50
byBhbiBleGlzdGluZyBsaXN0LCBpbnN0ZWFkIG9mIG5lc3RpbmcgdGhlIGxpc3QsCiAvLyB3ZSBw
dXQgdGhlIGxpc3QgaXRlbXMgaW50byB0aGUgZXhpc3RpbmcgbGlzdC4KLU5vZGUqIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjppbnNlcnRBc0xpc3RJdGVtcyhQYXNzUmVmUHRyPE5vZGU+IGxpc3RF
bGVtZW50LCBOb2RlKiBpbnNlcnRpb25CbG9jaywgY29uc3QgUG9zaXRpb24mIGluc2VydFBvcykK
K05vZGUqIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjppbnNlcnRBc0xpc3RJdGVtcyhQYXNzUmVm
UHRyPE5vZGU+IHBycExpc3RFbGVtZW50LCBOb2RlKiBpbnNlcnRpb25CbG9jaywgY29uc3QgUG9z
aXRpb24mIGluc2VydFBvcykKIHsKKyAgICBSZWZQdHI8Tm9kZT4gbGlzdEVsZW1lbnQgPSBwcnBM
aXN0RWxlbWVudDsKKwogICAgIHdoaWxlIChsaXN0RWxlbWVudC0+aGFzQ2hpbGROb2RlcygpICYm
IGlzTGlzdEVsZW1lbnQobGlzdEVsZW1lbnQtPmZpcnN0Q2hpbGQoKSkgJiYgbGlzdEVsZW1lbnQt
PmNoaWxkTm9kZUNvdW50KCkgPT0gMSkKICAgICAgICAgbGlzdEVsZW1lbnQgPSBsaXN0RWxlbWVu
dC0+Zmlyc3RDaGlsZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5n
LmNwcAkocmV2aXNpb24gODkyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgyLDE5ICs4ODIsMjEgQEAgUG9zaXRpb24gcG9z
aXRpb25PdXRzaWRlVGFiU3Bhbihjb25zdCBQbwogICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50
QmVmb3JlTm9kZShub2RlKTsKIH0KIAotUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVUYWJTcGFu
RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIFBhc3NSZWZQdHI8Tm9kZT4gdGFiVGV4dE5vZGUp
CitQYXNzUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZVRhYlNwYW5FbGVtZW50KERvY3VtZW50KiBkb2N1
bWVudCwgUGFzc1JlZlB0cjxOb2RlPiBwcnBUYWJUZXh0Tm9kZSkKIHsKICAgICAvLyBNYWtlIHRo
ZSBzcGFuIHRvIGhvbGQgdGhlIHRhYi4KICAgICBSZWZQdHI8RWxlbWVudD4gc3BhbkVsZW1lbnQg
PSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChzcGFuVGFnLCBmYWxzZSk7CiAgICAgc3BhbkVsZW1l
bnQtPnNldEF0dHJpYnV0ZShjbGFzc0F0dHIsIEFwcGxlVGFiU3BhbkNsYXNzKTsKICAgICBzcGFu
RWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgIndoaXRlLXNwYWNlOnByZSIpOwogCisg
ICAgUmVmUHRyPE5vZGU+IHRhYlRleHROb2RlID0gcHJwVGFiVGV4dE5vZGU7CisKICAgICAvLyBB
ZGQgdGFiIHRleHQgdG8gdGhhdCBzcGFuLgogICAgIGlmICghdGFiVGV4dE5vZGUpCiAgICAgICAg
IHRhYlRleHROb2RlID0gZG9jdW1lbnQtPmNyZWF0ZUVkaXRpbmdUZXh0Tm9kZSgiXHQiKTsKIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHNwYW5FbGVtZW50LT5hcHBlbmRDaGlsZCh0
YWJUZXh0Tm9kZSwgZWMpOworICAgIHNwYW5FbGVtZW50LT5hcHBlbmRDaGlsZCh0YWJUZXh0Tm9k
ZS5yZWxlYXNlKCksIGVjKTsKICAgICBBU1NFUlQoZWMgPT0gMCk7CiAKICAgICByZXR1cm4gc3Bh
bkVsZW1lbnQucmVsZWFzZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiA4OTIwNykK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Niw4ICszNjYsMTAgQEAgQ2FudmFzU3R5bGUqIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6cwogICAgIHJldHVybiBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUu
Z2V0KCk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VTdHls
ZShQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiBzdHlsZSkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzZXRTdHJva2VTdHlsZShQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiBwcnBTdHlsZSkK
IHsKKyAgICBSZWZQdHI8Q2FudmFzU3R5bGU+IHN0eWxlID0gcHJwU3R5bGU7CisKICAgICBpZiAo
IXN0eWxlKQogICAgICAgICByZXR1cm47CiAKQEAgLTM4Miw3ICszODQsNyBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlCiAgICAgfSBlbHNlCiAgICAgICAgIGNoZWNr
T3JpZ2luKHN0eWxlLT5jYW52YXNQYXR0ZXJuKCkpOwogCi0gICAgc3RhdGUoKS5tX3N0cm9rZVN0
eWxlID0gc3R5bGU7CisgICAgc3RhdGUoKS5tX3N0cm9rZVN0eWxlID0gc3R5bGUucmVsZWFzZSgp
OwogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFj
KQogICAgICAgICByZXR1cm47CkBAIC0zOTUsOCArMzk3LDEwIEBAIENhbnZhc1N0eWxlKiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmYKICAgICByZXR1cm4gc3RhdGUoKS5tX2ZpbGxTdHlsZS5n
ZXQoKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxTdHlsZShQ
YXNzUmVmUHRyPENhbnZhc1N0eWxlPiBzdHlsZSkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzZXRGaWxsU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gcHJwU3R5bGUpCiB7Cisg
ICAgUmVmUHRyPENhbnZhc1N0eWxlPiBzdHlsZSA9IHBycFN0eWxlOworCiAgICAgaWYgKCFzdHls
ZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC00MTEsNyArNDE1LDcgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxTdAogICAgIH0gZWxzZQogICAgICAgICBjaGVja09yaWdp
bihzdHlsZS0+Y2FudmFzUGF0dGVybigpKTsKIAotICAgIHN0YXRlKCkubV9maWxsU3R5bGUgPSBz
dHlsZTsKKyAgICBzdGF0ZSgpLm1fZmlsbFN0eWxlID0gc3R5bGUucmVsZWFzZSgpOwogICAgIEdy
YXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3Jt
RGF0YVN0cmVhbU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQkocmV2aXNpb24gODkyMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjU0LDEyICsyNTQsMTEgQEAgc3RhdGljIHZvaWQqIGZvcm1DcmVhdGUo
Q0ZSZWFkU3RyZWFtUmVmIAogCiBzdGF0aWMgdm9pZCBmb3JtRmluYWxpemUoQ0ZSZWFkU3RyZWFt
UmVmIHN0cmVhbSwgdm9pZCogY29udGV4dCkKIHsKLSAgICBGb3JtU3RyZWFtRmllbGRzKiBmb3Jt
ID0gc3RhdGljX2Nhc3Q8Rm9ybVN0cmVhbUZpZWxkcyo+KGNvbnRleHQpOworICAgIE93blB0cjxG
b3JtU3RyZWFtRmllbGRzPiBmb3JtID0gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8Rm9ybVN0cmVhbUZp
ZWxkcyo+KGNvbnRleHQpKTsKIAogICAgIGdldFN0cmVhbUZvcm1EYXRhTWFwKCkucmVtb3ZlKHN0
cmVhbSk7CiAKLSAgICBjbG9zZUN1cnJlbnRTdHJlYW0oZm9ybSk7Ci0gICAgZGVsZXRlIGZvcm07
CisgICAgY2xvc2VDdXJyZW50U3RyZWFtKGZvcm0uZ2V0KCkpOwogfQogCiBzdGF0aWMgQm9vbGVh
biBmb3JtT3BlbihDRlJlYWRTdHJlYW1SZWYsIENGU3RyZWFtRXJyb3IqIGVycm9yLCBCb29sZWFu
KiBvcGVuQ29tcGxldGUsIHZvaWQqIGNvbnRleHQpCkBAIC0zODMsOCArMzgyLDEwIEBAIHN0YXRp
YyB2b2lkIGZvcm1FdmVudENhbGxiYWNrKENGUmVhZFN0cmUKICAgICB9CiB9CiAKLXZvaWQgc2V0
SFRUUEJvZHkoTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCwgUGFzc1JlZlB0cjxGb3JtRGF0
YT4gZm9ybURhdGEpCit2b2lkIHNldEhUVFBCb2R5KE5TTXV0YWJsZVVSTFJlcXVlc3QgKnJlcXVl
c3QsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IHBycEZvcm1EYXRhKQogeworICAgIFJlZlB0cjxGb3Jt
RGF0YT4gZm9ybURhdGEgPSBwcnBGb3JtRGF0YTsKKwogICAgIGlmICghZm9ybURhdGEpCiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCkBAIC00MzksNyArNDQwLDcgQEAgdm9pZCBzZXRIVFRQQm9k
eShOU011dGFibGVVUkxSZXF1ZXN0ICpyZQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgfQotICAgICAgICBmb3JtRGF0YSA9IG5ld0Zvcm1EYXRhOworICAgICAgICBm
b3JtRGF0YSA9IG5ld0Zvcm1EYXRhLnJlbGVhc2UoKTsKICAgICAgICAgY291bnQgPSBmb3JtRGF0
YS0+ZWxlbWVudHMoKS5zaXplKCk7CiAgICAgfQogI2VuZGlmCkBAIC00NzAsNyArNDcxLDcgQEAg
dm9pZCBzZXRIVFRQQm9keShOU011dGFibGVVUkxSZXF1ZXN0ICpyZQogICAgIC8vIENyZWF0ZSBh
bmQgc2V0IHRoZSBzdHJlYW0uCiAKICAgICAvLyBQYXNzIHRoZSBsZW5ndGggYWxvbmcgd2l0aCB0
aGUgZm9ybURhdGEgc28gaXQgZG9lcyBub3QgaGF2ZSB0byBiZSByZWNvbXB1dGVkLgotICAgIEZv
cm1Db250ZXh0IGZvcm1Db250ZXh0ID0geyBmb3JtRGF0YS5yZWxlYXNlUmVmKCksIGxlbmd0aCB9
OworICAgIEZvcm1Db250ZXh0IGZvcm1Db250ZXh0ID0geyBmb3JtRGF0YS5yZWxlYXNlKCkubGVh
a1JlZigpLCBsZW5ndGggfTsKIAogICAgIFJldGFpblB0cjxDRlJlYWRTdHJlYW1SZWY+IHN0cmVh
bShBZG9wdENGLCB3a0NyZWF0ZUN1c3RvbUNGUmVhZFN0cmVhbShmb3JtQ3JlYXRlLCBmb3JtRmlu
YWxpemUsCiAgICAgICAgIGZvcm1PcGVuLCBmb3JtUmVhZCwgZm9ybUNhblJlYWQsIGZvcm1DbG9z
ZSwgZm9ybVNjaGVkdWxlLCBmb3JtVW5zY2hlZHVsZSwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97842</attachid>
            <date>2011-06-20 12:46:36 -0700</date>
            <delta_ts>2011-06-20 12:50:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62940-20110620124635.patch</filename>
            <type>text/plain</type>
            <size>21057</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODkyNjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAK
KzIwMTEtMDYtMjAgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEaXNhbGxvdyBhc3Np
Z25pbmcgaW50byBQYXNzT3duQXJyYXlQdHIsIFBhc3NPd25QdHIgYW5kIFBhc3NSZWZQdHIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyOTQwCisKKyAg
ICAgICAgUmVtb3ZlIGNsZWFyKCkgYW5kIGFsbCBhc3NpZ25tZW50IG9wZXJhdG9ycyBleGNlcHQg
b25lIHdoaWNoIG5vdyBoYXMgYSBDT01QSUxFX0FTU0VSVC4KKworICAgICAgICAqIHd0Zi9QYXNz
T3duQXJyYXlQdHIuaDoKKyAgICAgICAgKFdURjo6UGFzc093bkFycmF5UHRyOjpvcGVyYXRvcj0p
OgorICAgICAgICAqIHd0Zi9QYXNzT3duUHRyLmg6CisgICAgICAgIChXVEY6OlBhc3NPd25QdHI6
Om9wZXJhdG9yPSk6CisgICAgICAgICogd3RmL1Bhc3NSZWZQdHIuaDoKKyAgICAgICAgKFdURjo6
UGFzc1JlZlB0cjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6Tm9uTnVsbFBhc3NSZWZQdHI6
Om9wZXJhdG9yPSk6CisKIDIwMTEtMDYtMjAgIEp1YW4gQy4gTW9udGVtYXlvciAgPGptb250QGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFzc093bkFycmF5UHRyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXNzT3duQXJyYXlQdHIuaAkocmV2aXNpb24gODkyNjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NPd25BcnJheVB0ci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKIAogICAgIFB0clR5cGUgZ2V0KCkgY29u
c3QgeyByZXR1cm4gbV9wdHI7IH0KIAotICAgIHZvaWQgY2xlYXIoKTsKICAgICBQdHJUeXBlIGxl
YWtQdHIoKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk47CiAKICAgICBUJiBvcGVyYXRvciooKSBj
b25zdCB7IEFTU0VSVChtX3B0cik7IHJldHVybiAqbV9wdHI7IH0KQEAgLTcwLDkgKzY5LDcgQEAg
cHVibGljOgogICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3B0ciA/ICZQYXNzT3duQXJyYXlQdHI6Om1fcHRyIDogMDsgfQogI2VuZGlmCiAKLSAgICBQ
YXNzT3duQXJyYXlQdHImIG9wZXJhdG9yPShjb25zdCBQYXNzT3duQXJyYXlQdHI8VD4mKTsKLSAg
ICBQYXNzT3duQXJyYXlQdHImIG9wZXJhdG9yPShzdGQ6Om51bGxwdHJfdCkgeyBjbGVhcigpOyBy
ZXR1cm4gKnRoaXM7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBQYXNzT3duQXJyYXlQdHIm
IG9wZXJhdG9yPShjb25zdCBQYXNzT3duQXJyYXlQdHI8VT4mKTsKKyAgICBQYXNzT3duQXJyYXlQ
dHImIG9wZXJhdG9yPShjb25zdCBQYXNzT3duQXJyYXlQdHImKSB7IENPTVBJTEVfQVNTRVJUKCFz
aXplb2YoVCopLCBQYXNzT3duQXJyYXlQdHJfc2hvdWxkX25ldmVyX2JlX2Fzc2lnbmVkX3RvKTsg
cmV0dXJuICp0aGlzOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBmcmllbmQgUGFzc093
bkFycmF5UHRyPFU+IGFkb3B0QXJyYXlQdHIoVSopOwogCkBAIC04MiwxMyArNzksNiBAQCBwcml2
YXRlOgogICAgIG11dGFibGUgUHRyVHlwZSBtX3B0cjsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSB2b2lkIFBhc3NPd25BcnJheVB0cjxUPjo6Y2xlYXIoKQotewotICAgIFB0clR5
cGUgcHRyID0gbV9wdHI7Ci0gICAgbV9wdHIgPSAwOwotICAgIGRlbGV0ZU93bmVkQXJyYXlQdHIo
cHRyKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIFBhc3NPd25B
cnJheVB0cjxUPjo6UHRyVHlwZSBQYXNzT3duQXJyYXlQdHI8VD46OmxlYWtQdHIoKSBjb25zdAog
ewogICAgIFB0clR5cGUgcHRyID0gbV9wdHI7CkBAIC05NiwyNiArODYsNiBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgUGFzCiAgICAgcmV0dXJuIHB0cjsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NPd25BcnJheVB0cjxUPiYgUGFzc093bkFycmF5
UHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgUGFzc093bkFycmF5UHRyPFQ+JiBvcHRyKQotewotICAg
IFB0clR5cGUgcHRyID0gbV9wdHI7Ci0gICAgbV9wdHIgPSBvcHRyLmxlYWtQdHIoKTsKLSAgICBB
U1NFUlQoIXB0ciB8fCBtX3B0ciAhPSBwdHIpOwotICAgIGlmIChwdHIpCi0gICAgICAgIGRlbGV0
ZU93bmVkQXJyYXlQdHIocHRyKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+IGlubGluZSBQYXNzT3duQXJyYXlQdHI8VD4m
IFBhc3NPd25BcnJheVB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFBhc3NPd25BcnJheVB0cjxVPiYg
b3B0cikKLXsKLSAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOwotICAgIG1fcHRyID0gb3B0ci5sZWFr
UHRyKCk7Ci0gICAgQVNTRVJUKCFwdHIgfHwgbV9wdHIgIT0gcHRyKTsKLSAgICBpZiAocHRyKQot
ICAgICAgICBkZWxldGVPd25lZEFycmF5UHRyKHB0cik7Ci0gICAgcmV0dXJuICp0aGlzOwotfQot
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFBhc3NPd25BcnJheVB0cjxUPiYgYSwgY29uc3QgUGFzc093bkFycmF5UHRyPFU+JiBi
KSAKIHsKICAgICByZXR1cm4gYS5nZXQoKSA9PSBiLmdldCgpOyAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvUGFzc093blB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvUGFzc093blB0ci5oCShyZXZpc2lvbiA4OTI2OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvUGFzc093blB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw2
IEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgICAgIFB0clR5cGUgZ2V0KCkgY29uc3QgeyByZXR1
cm4gbV9wdHI7IH0KIAotICAgICAgICB2b2lkIGNsZWFyKCk7CiAgICAgICAgIFB0clR5cGUgbGVh
a1B0cigpIGNvbnN0IFdBUk5fVU5VU0VEX1JFVFVSTjsKIAogICAgICAgICBWYWx1ZVR5cGUmIG9w
ZXJhdG9yKigpIGNvbnN0IHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJuICptX3B0cjsgfQpAQCAtNjks
OSArNjgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgdHlwZWRlZiBQdHJUeXBlIFBhc3NP
d25QdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlOwogICAgICAgICBvcGVyYXRvciBVbnNwZWNpZmll
ZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgPyAmUGFzc093blB0cjo6bV9wdHIgOiAw
OyB9CiAKLSAgICAgICAgUGFzc093blB0ciYgb3BlcmF0b3I9KGNvbnN0IFBhc3NPd25QdHI8VD4m
KTsKLSAgICAgICAgUGFzc093blB0ciYgb3BlcmF0b3I9KHN0ZDo6bnVsbHB0cl90KSB7IGNsZWFy
KCk7IHJldHVybiAqdGhpczsgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBQYXNzT3du
UHRyJiBvcGVyYXRvcj0oY29uc3QgUGFzc093blB0cjxVPiYpOworICAgICAgICBQYXNzT3duUHRy
JiBvcGVyYXRvcj0oY29uc3QgUGFzc093blB0ciYpIHsgQ09NUElMRV9BU1NFUlQoIXNpemVvZihU
KiksIFBhc3NPd25QdHJfc2hvdWxkX25ldmVyX2JlX2Fzc2lnbmVkX3RvKTsgcmV0dXJuICp0aGlz
OyB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gZnJpZW5kIFBhc3NPd25QdHI8VT4g
YWRvcHRQdHIoVSopOwogCkBAIC04OCwxMyArODUsNiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgbXV0YWJsZSBQdHJUeXBlIG1fcHRyOwogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdm9pZCBQYXNzT3duUHRyPFQ+OjpjbGVhcigpCi0gICAgewotICAgICAgICBQ
dHJUeXBlIHB0ciA9IG1fcHRyOwotICAgICAgICBtX3B0ciA9IDA7Ci0gICAgICAgIGRlbGV0ZU93
bmVkUHRyKHB0cik7Ci0gICAgfQotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5
cGVuYW1lIFBhc3NPd25QdHI8VD46OlB0clR5cGUgUGFzc093blB0cjxUPjo6bGVha1B0cigpIGNv
bnN0CiAgICAgewogICAgICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOwpAQCAtMTAyLDI2ICs5Miw2
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIAotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzT3duUHRyPFQ+JiBQYXNzT3duUHRyPFQ+Ojpv
cGVyYXRvcj0oY29uc3QgUGFzc093blB0cjxUPiYgb3B0cikKLSAgICB7Ci0gICAgICAgIFB0clR5
cGUgcHRyID0gbV9wdHI7Ci0gICAgICAgIG1fcHRyID0gb3B0ci5sZWFrUHRyKCk7Ci0gICAgICAg
IEFTU0VSVCghcHRyIHx8IG1fcHRyICE9IHB0cik7Ci0gICAgICAgIGlmIChwdHIpCi0gICAgICAg
ICAgICBkZWxldGVPd25lZFB0cihwdHIpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4gaW5saW5lIFBh
c3NPd25QdHI8VD4mIFBhc3NPd25QdHI8VD46Om9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRyPFU+
JiBvcHRyKQotICAgIHsKLSAgICAgICAgUHRyVHlwZSBwdHIgPSBtX3B0cjsKLSAgICAgICAgbV9w
dHIgPSBvcHRyLmxlYWtQdHIoKTsKLSAgICAgICAgQVNTRVJUKCFwdHIgfHwgbV9wdHIgIT0gcHRy
KTsKLSAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgIGRlbGV0ZU93bmVkUHRyKHB0cik7Ci0g
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBhc3NPd25QdHI8VD4mIGEs
IGNvbnN0IFBhc3NPd25QdHI8VT4mIGIpIAogICAgIHsKICAgICAgICAgcmV0dXJuIGEuZ2V0KCkg
PT0gYi5nZXQoKTsgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NSZWZQdHIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NSZWZQdHIuaAko
cmV2aXNpb24gODkyNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NSZWZQdHIu
aAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgCiAgICAgICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CiAKLSAgICAgICAg
dm9pZCBjbGVhcigpOwogICAgICAgICBUKiBsZWFrUmVmKCkgY29uc3QgV0FSTl9VTlVTRURfUkVU
VVJOOwogCiAgICAgICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICptX3B0cjsgfQpA
QCAtODksMTMgKzg4LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHR5cGVkZWYgVCogKFBh
c3NSZWZQdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKICAgICAgICAgb3BlcmF0b3IgVW5zcGVj
aWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID8gJlBhc3NSZWZQdHI6Om1fcHRy
IDogMDsgfQogCi0gICAgICAgIFBhc3NSZWZQdHImIG9wZXJhdG9yPShUKik7Ci0gICAgICAgIFBh
c3NSZWZQdHImIG9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyJik7Ci0jaWYgIUhBVkUoTlVMTFBU
UikKLSAgICAgICAgUGFzc1JlZlB0ciYgb3BlcmF0b3I9KHN0ZDo6bnVsbHB0cl90KSB7IGNsZWFy
KCk7IHJldHVybiAqdGhpczsgfQotI2VuZGlmCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
IFBhc3NSZWZQdHImIG9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPFU+Jik7Ci0gICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IFBhc3NSZWZQdHImIG9wZXJhdG9yPShjb25zdCBSZWZQdHI8VT4m
KTsKKyAgICAgICAgUGFzc1JlZlB0ciYgb3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHImKSB7IENP
TVBJTEVfQVNTRVJUKCFzaXplb2YoVCopLCBQYXNzUmVmUHRyX3Nob3VsZF9uZXZlcl9iZV9hc3Np
Z25lZF90byk7IHJldHVybiAqdGhpczsgfQogCiAgICAgICAgIGZyaWVuZCBQYXNzUmVmUHRyIGFk
b3B0UmVmPFQ+KFQqKTsKIApAQCAtMTU1LDEyICsxNDgsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiAK
ICAgICAgICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KIAotICAgICAgICB2b2lk
IGNsZWFyKCk7CiAgICAgICAgIFQqIGxlYWtSZWYoKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk4g
eyBUKiB0bXAgPSBtX3B0cjsgbV9wdHIgPSAwOyByZXR1cm4gdG1wOyB9CiAKICAgICAgICAgVCYg
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fcHRyOyB9CiAgICAgICAgIFQqIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQogCisgICAgICAgIE5vbk51bGxQYXNzUmVmUHRy
JiBvcGVyYXRvcj0oY29uc3QgTm9uTnVsbFBhc3NSZWZQdHImKSB7IENPTVBJTEVfQVNTRVJUKCFz
aXplb2YoVCopLCBOb25OdWxsUGFzc1JlZlB0cl9zaG91bGRfbmV2ZXJfYmVfYXNzaWduZWRfdG8p
OyByZXR1cm4gKnRoaXM7IH0KKwogICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHJlbGVhc2VSZWYg
b25jZSB3ZSBjaGFuZ2UgYWxsIGNhbGxlcnMgdG8gY2FsbCBsZWFrUmVmIGluc3RlYWQuCiAgICAg
ICAgIFQqIHJlbGVhc2VSZWYoKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk4geyByZXR1cm4gbGVh
a1JlZigpOyB9CiAKQEAgLTE3NSwxMyArMTY5LDYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAg
IHJlZklmTm90TnVsbChwdHIpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSB2b2lkIFBhc3NSZWZQdHI8VD46OmNsZWFyKCkKLSAgICB7Ci0gICAgICAgIFQqIHB0ciA9
IG1fcHRyOwotICAgICAgICBtX3B0ciA9IDA7Ci0gICAgICAgIGRlcmVmSWZOb3ROdWxsKHB0cik7
Ci0gICAgfQotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIFBhc3NSZWZQdHI8
VD46OmxlYWtSZWYoKSBjb25zdAogICAgIHsKICAgICAgICAgVCogcHRyID0gbV9wdHI7CkBAIC0x
ODksNDEgKzE3Niw2IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICByZXR1cm4gcHRyOwogICAg
IH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+IGlubGlu
ZSBQYXNzUmVmUHRyPFQ+JiBQYXNzUmVmUHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgUmVmUHRyPFU+
JiBvKQotICAgIHsKLSAgICAgICAgVCogb3B0ciA9IG8uZ2V0KCk7Ci0gICAgICAgIHJlZklmTm90
TnVsbChvcHRyKTsKLSAgICAgICAgVCogcHRyID0gbV9wdHI7Ci0gICAgICAgIG1fcHRyID0gb3B0
cjsKLSAgICAgICAgZGVyZWZJZk5vdE51bGwocHRyKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwot
ICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1JlZlB0cjxU
PiYgUGFzc1JlZlB0cjxUPjo6b3BlcmF0b3I9KFQqIG9wdHIpCi0gICAgewotICAgICAgICByZWZJ
Zk5vdE51bGwob3B0cik7Ci0gICAgICAgIFQqIHB0ciA9IG1fcHRyOwotICAgICAgICBtX3B0ciA9
IG9wdHI7Ci0gICAgICAgIGRlcmVmSWZOb3ROdWxsKHB0cik7Ci0gICAgICAgIHJldHVybiAqdGhp
czsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1JlZlB0cjxU
PiYgUGFzc1JlZlB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8VD4mIHJlZikKLSAg
ICB7Ci0gICAgICAgIFQqIHB0ciA9IG1fcHRyOwotICAgICAgICBtX3B0ciA9IHJlZi5sZWFrUmVm
KCk7Ci0gICAgICAgIGRlcmVmSWZOb3ROdWxsKHB0cik7Ci0gICAgICAgIHJldHVybiAqdGhpczsK
LSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUg
VT4gaW5saW5lIFBhc3NSZWZQdHI8VD4mIFBhc3NSZWZQdHI8VD46Om9wZXJhdG9yPShjb25zdCBQ
YXNzUmVmUHRyPFU+JiByZWYpCi0gICAgewotICAgICAgICBUKiBwdHIgPSBtX3B0cjsKLSAgICAg
ICAgbV9wdHIgPSByZWYubGVha1JlZigpOwotICAgICAgICBkZXJlZklmTm90TnVsbChwdHIpOwot
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUGFzc1JlZlB0cjxU
PiYgYSwgY29uc3QgUGFzc1JlZlB0cjxVPiYgYikgCiAgICAgeyAKICAgICAgICAgcmV0dXJuIGEu
Z2V0KCkgPT0gYi5nZXQoKTsgCkBAIC0yOTUsMTMgKzI0Nyw2IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICByZXR1cm4gcC5nZXQoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgdm9pZCBOb25OdWxsUGFzc1JlZlB0cjxUPjo6Y2xlYXIoKQotICAgIHsKLSAgICAg
ICAgVCogcHRyID0gbV9wdHI7Ci0gICAgICAgIG1fcHRyID0gMDsKLSAgICAgICAgZGVyZWZJZk5v
dE51bGwocHRyKTsKLSAgICB9Ci0KIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OlBh
c3NSZWZQdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA4OTI2OSkKKysrIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDExLTA2LTIw
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGlzYWxsb3cgYXNzaWduaW5nIGludG8g
UGFzc093bkFycmF5UHRyLCBQYXNzT3duUHRyIGFuZCBQYXNzUmVmUHRyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjk0MAorCisgICAgICAgIE1ha2Ug
c3VyZSB0aGF0IHdlIG5ldmVyIGFzc2lnbiBpbnRvIGFueSBhbHJlYWR5IGV4aXN0aW5nIFBhc3NS
ZWZQdHIuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRy
b2xzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OmNy
ZWF0ZSk6CisgICAgICAgIFJlbW92ZSBsb2NhbCBQYXNzUmVmUHRyIHZhcmlhYmxlLgorCisgICAg
ICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRC
b2R5KToKKyAgICAgICAgUmVuYW1lIHRoZSBQYXNzUmVmUHRyIHBhcmFtZXRlciBhbmQgY3JlYXRl
IGEgUmVmUHRyIHZhcmlhYmxlLgorCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0Rm9j
dXNlZE5vZGUpOgorICAgICAgICBEaXR0by4KKworICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92
ZUlubGluZVN0eWxlKToKKyAgICAgICAgVGhlcmUncyBubyByZWFzb24gdG8gdXNlIGEgUGFzc1Jl
ZlB0ciBoZXJlLiBVc2UgYSBSZWZQdHIsIGFuZCBkb24ndCBpbml0aWFsaXplIGl0IHNpbmNlIGl0
J3MgaW1wbGljaXRseSBpbml0aWFsaXplZC4KKworICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6
OnBydW5lKToKKyAgICAgICAgUmVuYW1lIHRoZSBQYXNzUmVmUHRyIHBhcmFtZXRlciBhbmQgY3Jl
YXRlIGEgUmVmUHRyIHZhcmlhYmxlLgorCisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6aW5zZXJ0QXNMaXN0SXRlbXMpOgorICAgICAgICBEaXR0by4KKworICAgICAgICAqIGVkaXRp
bmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVGFiU3BhbkVsZW1l
bnQpOgorICAgICAgICBEaXR0by4KKworICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnNldFN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0RmlsbFN0eWxlKToKKyAgICAgICAgRGl0dG8uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OmZvcm1GaW5hbGl6ZSk6CisgICAgICAgIERpdHRvLgorCisgICAgICAgIChXZWJDb3JlOjpz
ZXRIVFRQQm9keSk6CisgICAgICAgIFVzZSBhbiBPd25QdHIgaW5zdGVhZCBvZiBleHBsaWNpdGx5
IGRlbGV0aW5nIHRoZSBmb3JtIHZhcmlhYmxlLgorCiAyMDExLTA2LTIwICBNYXJrIFBpbGdyaW0g
IDxwaWxncmltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRo
LgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFD
b250cm9scy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAJKHJldmlzaW9uIDg5MjY5KQorKysgU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDI3ICs2MywyMCBAQCBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlP
YmplY3Q+IEFjY2Vzc2liCiAgICAgZWxzZQogICAgICAgICBjb250cm9sVHlwZSA9IHN0YXRpY19j
YXN0PE1lZGlhQ29udHJvbEVsZW1lbnQqPihub2RlKS0+ZGlzcGxheVR5cGUoKTsKIAotICAgIFBh
c3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqOwogICAgIHN3aXRjaCAoY29udHJvbFR5
cGUpIHsKICAgICBjYXNlIE1lZGlhU2xpZGVyOgotICAgICAgICBvYmogPSBBY2Nlc3NpYmlsaXR5
TWVkaWFUaW1lbGluZTo6Y3JlYXRlKHJlbmRlcmVyKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAg
IHJldHVybiBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6Y3JlYXRlKHJlbmRlcmVyKTsKIAog
ICAgIGNhc2UgTWVkaWFDdXJyZW50VGltZURpc3BsYXk6CiAgICAgY2FzZSBNZWRpYVRpbWVSZW1h
aW5pbmdEaXNwbGF5OgotICAgICAgICBvYmogPSBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxh
eTo6Y3JlYXRlKHJlbmRlcmVyKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6Y3JlYXRlKHJlbmRlcmVyKTsKIAogICAgIGNhc2Ug
TWVkaWFDb250cm9sc1BhbmVsOgotICAgICAgICBvYmogPSBBY2Nlc3NpYmlsaXR5TWVkaWFDb250
cm9sc0NvbnRhaW5lcjo6Y3JlYXRlKHJlbmRlcmVyKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAg
IHJldHVybiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6Y3JlYXRlKHJlbmRl
cmVyKTsKIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIG9iaiA9IGFkb3B0UmVmKG5ldyBBY2Nlc3Np
YmlsaXR5TWVkaWFDb250cm9sKHJlbmRlcmVyKSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wocmVuZGVyZXIpKTsK
ICAgICB9Ci0KLSAgICByZXR1cm4gb2JqOwogfQogCiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBB
Y2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpjb250cm9sVHlwZSgpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDg5MjY5KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxMyw4ICsyMDEzLDEwIEBAIEhUTUxF
bGVtZW50KiBEb2N1bWVudDo6Ym9keSgpIGNvbnN0CiAgICAgcmV0dXJuIHRvSFRNTEVsZW1lbnQo
Ym9keSk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnNldEJvZHkoUGFzc1JlZlB0cjxIVE1MRWxlbWVu
dD4gbmV3Qm9keSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIERvY3VtZW50OjpzZXRCb2R5KFBh
c3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHBycE5ld0JvZHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewor
ICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbmV3Qm9keSA9IHBycE5ld0JvZHk7CisKICAgICBpZiAo
IW5ld0JvZHkgfHwgIWRvY3VtZW50RWxlbWVudCgpIHx8ICFuZXdCb2R5LT5oYXNUYWdOYW1lKGJv
ZHlUYWcpKSB7IAogICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKICAgICAgICAg
cmV0dXJuOwpAQCAtMjAzMSw5ICsyMDMzLDkgQEAgdm9pZCBEb2N1bWVudDo6c2V0Qm9keShQYXNz
UmVmUHRyPEhUTUxFbAogCiAgICAgSFRNTEVsZW1lbnQqIGIgPSBib2R5KCk7CiAgICAgaWYgKCFi
KQotICAgICAgICBkb2N1bWVudEVsZW1lbnQoKS0+YXBwZW5kQ2hpbGQobmV3Qm9keSwgZWMpOwor
ICAgICAgICBkb2N1bWVudEVsZW1lbnQoKS0+YXBwZW5kQ2hpbGQobmV3Qm9keS5yZWxlYXNlKCks
IGVjKTsKICAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50RWxlbWVudCgpLT5yZXBsYWNlQ2hpbGQo
bmV3Qm9keSwgYiwgZWMpOworICAgICAgICBkb2N1bWVudEVsZW1lbnQoKS0+cmVwbGFjZUNoaWxk
KG5ld0JvZHkucmVsZWFzZSgpLCBiLCBlYyk7CiB9CiAKIEhUTUxIZWFkRWxlbWVudCogRG9jdW1l
bnQ6OmhlYWQoKQpAQCAtMzA2OCw4ICszMDcwLDEwIEBAIHZvaWQgRG9jdW1lbnQ6OnNldERhc2hi
b2FyZFJlZ2lvbnMoY29uc3QKIH0KICNlbmRpZgogCi1ib29sIERvY3VtZW50OjpzZXRGb2N1c2Vk
Tm9kZShQYXNzUmVmUHRyPE5vZGU+IG5ld0ZvY3VzZWROb2RlKQoteyAgICAKK2Jvb2wgRG9jdW1l
bnQ6OnNldEZvY3VzZWROb2RlKFBhc3NSZWZQdHI8Tm9kZT4gcHJwTmV3Rm9jdXNlZE5vZGUpCit7
CisgICAgUmVmUHRyPE5vZGU+IG5ld0ZvY3VzZWROb2RlID0gcHJwTmV3Rm9jdXNlZE5vZGU7CisK
ICAgICAvLyBNYWtlIHN1cmUgbmV3Rm9jdXNlZE5vZGUgaXMgYWN0dWFsbHkgaW4gdGhpcyBkb2N1
bWVudAogICAgIGlmIChuZXdGb2N1c2VkTm9kZSAmJiAobmV3Rm9jdXNlZE5vZGUtPmRvY3VtZW50
KCkgIT0gdGhpcykpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzE0Miw3ICszMTQ2LDcgQEAg
Ym9vbCBEb2N1bWVudDo6c2V0Rm9jdXNlZE5vZGUoUGFzc1JlZlB0cgogICAgICAgICAgICAgZ290
byBTZXRGb2N1c2VkTm9kZURvbmU7CiAgICAgICAgIH0KICAgICAgICAgLy8gU2V0IGZvY3VzIG9u
IHRoZSBuZXcgbm9kZQotICAgICAgICBtX2ZvY3VzZWROb2RlID0gbmV3Rm9jdXNlZE5vZGUuZ2V0
KCk7CisgICAgICAgIG1fZm9jdXNlZE5vZGUgPSBuZXdGb2N1c2VkTm9kZTsKIAogICAgICAgICAv
LyBEaXNwYXRjaCB0aGUgZm9jdXMgZXZlbnQgYW5kIGxldCB0aGUgbm9kZSBkbyBhbnkgb3RoZXIg
Zm9jdXMgcmVsYXRlZCBhY3Rpdml0aWVzIChpbXBvcnRhbnQgZm9yIHRleHQgZmllbGRzKQogICAg
ICAgICBtX2ZvY3VzZWROb2RlLT5kaXNwYXRjaEZvY3VzRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA4OTI2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDU4LDcgKzEwNTgsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1v
dmVJbmxpbmVTdHlsCiAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gcHJldiA9IGVsZW0tPnRyYXZl
cnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKCk7CiAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4
dCA9IGVsZW0tPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICAgICAgICAgIFJlZlB0cjxFZGl0aW5n
U3R5bGU+IHN0eWxlVG9QdXNoRG93bjsKLSAgICAgICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4gY2hp
bGROb2RlID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBjaGlsZE5vZGU7CiAgICAgICAg
ICAgICBpZiAoaXNTdHlsZWRJbmxpbmVFbGVtZW50VG9SZW1vdmUoZWxlbS5nZXQoKSkpIHsKICAg
ICAgICAgICAgICAgICBzdHlsZVRvUHVzaERvd24gPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOwog
ICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGVsZW0tPmZpcnN0Q2hpbGQoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZp
c2lvbiA4OTI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsOCArMjQ3LDEwIEBAIHN0YXRpYyBib29sIGhh
c0FSZW5kZXJlZERlc2NlbmRhbnQoTm9kZSoKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnBydW5lKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKK3ZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnBydW5lKFBhc3NSZWZQdHI8Tm9kZT4gcHJwTm9kZSkKIHsK
KyAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IHBycE5vZGU7CisKICAgICB3aGlsZSAobm9kZSkgewog
ICAgICAgICAvLyBJZiB5b3UgY2hhbmdlIHRoaXMgcnVsZSB5b3UgbWF5IGhhdmUgdG8gYWRkIGFu
IHVwZGF0ZUxheW91dCgpIGhlcmUuCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBu
b2RlLT5yZW5kZXJlcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDg5MjY5KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMzUsOCArMTIzNSwxMCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjppbnNl
cnROb2RlCiAKIC8vIElmIHRoZSB1c2VyIGlzIGluc2VydGluZyBhIGxpc3QgaW50byBhbiBleGlz
dGluZyBsaXN0LCBpbnN0ZWFkIG9mIG5lc3RpbmcgdGhlIGxpc3QsCiAvLyB3ZSBwdXQgdGhlIGxp
c3QgaXRlbXMgaW50byB0aGUgZXhpc3RpbmcgbGlzdC4KLU5vZGUqIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjppbnNlcnRBc0xpc3RJdGVtcyhQYXNzUmVmUHRyPE5vZGU+IGxpc3RFbGVtZW50LCBO
b2RlKiBpbnNlcnRpb25CbG9jaywgY29uc3QgUG9zaXRpb24mIGluc2VydFBvcykKK05vZGUqIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjppbnNlcnRBc0xpc3RJdGVtcyhQYXNzUmVmUHRyPE5vZGU+
IHBycExpc3RFbGVtZW50LCBOb2RlKiBpbnNlcnRpb25CbG9jaywgY29uc3QgUG9zaXRpb24mIGlu
c2VydFBvcykKIHsKKyAgICBSZWZQdHI8Tm9kZT4gbGlzdEVsZW1lbnQgPSBwcnBMaXN0RWxlbWVu
dDsKKwogICAgIHdoaWxlIChsaXN0RWxlbWVudC0+aGFzQ2hpbGROb2RlcygpICYmIGlzTGlzdEVs
ZW1lbnQobGlzdEVsZW1lbnQtPmZpcnN0Q2hpbGQoKSkgJiYgbGlzdEVsZW1lbnQtPmNoaWxkTm9k
ZUNvdW50KCkgPT0gMSkKICAgICAgICAgbGlzdEVsZW1lbnQgPSBsaXN0RWxlbWVudC0+Zmlyc3RD
aGlsZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2
aXNpb24gODkyNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODgyLDE5ICs4ODIsMjEgQEAgUG9zaXRpb24gcG9zaXRpb25PdXRz
aWRlVGFiU3Bhbihjb25zdCBQbwogICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9k
ZShub2RlKTsKIH0KIAotUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVUYWJTcGFuRWxlbWVudChE
b2N1bWVudCogZG9jdW1lbnQsIFBhc3NSZWZQdHI8Tm9kZT4gdGFiVGV4dE5vZGUpCitQYXNzUmVm
UHRyPEVsZW1lbnQ+IGNyZWF0ZVRhYlNwYW5FbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgUGFz
c1JlZlB0cjxOb2RlPiBwcnBUYWJUZXh0Tm9kZSkKIHsKICAgICAvLyBNYWtlIHRoZSBzcGFuIHRv
IGhvbGQgdGhlIHRhYi4KICAgICBSZWZQdHI8RWxlbWVudD4gc3BhbkVsZW1lbnQgPSBkb2N1bWVu
dC0+Y3JlYXRlRWxlbWVudChzcGFuVGFnLCBmYWxzZSk7CiAgICAgc3BhbkVsZW1lbnQtPnNldEF0
dHJpYnV0ZShjbGFzc0F0dHIsIEFwcGxlVGFiU3BhbkNsYXNzKTsKICAgICBzcGFuRWxlbWVudC0+
c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgIndoaXRlLXNwYWNlOnByZSIpOwogCisgICAgUmVmUHRy
PE5vZGU+IHRhYlRleHROb2RlID0gcHJwVGFiVGV4dE5vZGU7CisKICAgICAvLyBBZGQgdGFiIHRl
eHQgdG8gdGhhdCBzcGFuLgogICAgIGlmICghdGFiVGV4dE5vZGUpCiAgICAgICAgIHRhYlRleHRO
b2RlID0gZG9jdW1lbnQtPmNyZWF0ZUVkaXRpbmdUZXh0Tm9kZSgiXHQiKTsKIAogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIHNwYW5FbGVtZW50LT5hcHBlbmRDaGlsZCh0YWJUZXh0Tm9k
ZSwgZWMpOworICAgIHNwYW5FbGVtZW50LT5hcHBlbmRDaGlsZCh0YWJUZXh0Tm9kZS5yZWxlYXNl
KCksIGVjKTsKICAgICBBU1NFUlQoZWMgPT0gMCk7CiAKICAgICByZXR1cm4gc3BhbkVsZW1lbnQu
cmVsZWFzZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiA4OTI2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2Niw4ICszNjYsMTAgQEAgQ2FudmFzU3R5bGUqIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6cwogICAgIHJldHVybiBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUuZ2V0KCk7CiB9
CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VTdHlsZShQYXNzUmVm
UHRyPENhbnZhc1N0eWxlPiBzdHlsZSkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRTdHJva2VTdHlsZShQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiBwcnBTdHlsZSkKIHsKKyAgICBS
ZWZQdHI8Q2FudmFzU3R5bGU+IHN0eWxlID0gcHJwU3R5bGU7CisKICAgICBpZiAoIXN0eWxlKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTM4Miw3ICszODQsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0U3Ryb2tlCiAgICAgfSBlbHNlCiAgICAgICAgIGNoZWNrT3JpZ2luKHN0
eWxlLT5jYW52YXNQYXR0ZXJuKCkpOwogCi0gICAgc3RhdGUoKS5tX3N0cm9rZVN0eWxlID0gc3R5
bGU7CisgICAgc3RhdGUoKS5tX3N0cm9rZVN0eWxlID0gc3R5bGUucmVsZWFzZSgpOwogICAgIEdy
YXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAg
ICByZXR1cm47CkBAIC0zOTUsOCArMzk3LDEwIEBAIENhbnZhc1N0eWxlKiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmYKICAgICByZXR1cm4gc3RhdGUoKS5tX2ZpbGxTdHlsZS5nZXQoKTsKIH0K
IAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxTdHlsZShQYXNzUmVmUHRy
PENhbnZhc1N0eWxlPiBzdHlsZSkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRG
aWxsU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gcHJwU3R5bGUpCiB7CisgICAgUmVmUHRy
PENhbnZhc1N0eWxlPiBzdHlsZSA9IHBycFN0eWxlOworCiAgICAgaWYgKCFzdHlsZSkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC00MTEsNyArNDE1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnNldEZpbGxTdAogICAgIH0gZWxzZQogICAgICAgICBjaGVja09yaWdpbihzdHlsZS0+
Y2FudmFzUGF0dGVybigpKTsKIAotICAgIHN0YXRlKCkubV9maWxsU3R5bGUgPSBzdHlsZTsKKyAg
ICBzdGF0ZSgpLm1fZmlsbFN0eWxlID0gc3R5bGUucmVsZWFzZSgpOwogICAgIEdyYXBoaWNzQ29u
dGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVh
bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21h
Yy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQkocmV2aXNpb24gODkyNjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjU0LDEyICsyNTQsMTEgQEAgc3RhdGljIHZvaWQqIGZvcm1DcmVhdGUoQ0ZSZWFkU3Ry
ZWFtUmVmIAogCiBzdGF0aWMgdm9pZCBmb3JtRmluYWxpemUoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVh
bSwgdm9pZCogY29udGV4dCkKIHsKLSAgICBGb3JtU3RyZWFtRmllbGRzKiBmb3JtID0gc3RhdGlj
X2Nhc3Q8Rm9ybVN0cmVhbUZpZWxkcyo+KGNvbnRleHQpOworICAgIE93blB0cjxGb3JtU3RyZWFt
RmllbGRzPiBmb3JtID0gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8Rm9ybVN0cmVhbUZpZWxkcyo+KGNv
bnRleHQpKTsKIAogICAgIGdldFN0cmVhbUZvcm1EYXRhTWFwKCkucmVtb3ZlKHN0cmVhbSk7CiAK
LSAgICBjbG9zZUN1cnJlbnRTdHJlYW0oZm9ybSk7Ci0gICAgZGVsZXRlIGZvcm07CisgICAgY2xv
c2VDdXJyZW50U3RyZWFtKGZvcm0uZ2V0KCkpOwogfQogCiBzdGF0aWMgQm9vbGVhbiBmb3JtT3Bl
bihDRlJlYWRTdHJlYW1SZWYsIENGU3RyZWFtRXJyb3IqIGVycm9yLCBCb29sZWFuKiBvcGVuQ29t
cGxldGUsIHZvaWQqIGNvbnRleHQpCkBAIC0zODMsOCArMzgyLDEwIEBAIHN0YXRpYyB2b2lkIGZv
cm1FdmVudENhbGxiYWNrKENGUmVhZFN0cmUKICAgICB9CiB9CiAKLXZvaWQgc2V0SFRUUEJvZHko
TlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCwgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURh
dGEpCit2b2lkIHNldEhUVFBCb2R5KE5TTXV0YWJsZVVSTFJlcXVlc3QgKnJlcXVlc3QsIFBhc3NS
ZWZQdHI8Rm9ybURhdGE+IHBycEZvcm1EYXRhKQogeworICAgIFJlZlB0cjxGb3JtRGF0YT4gZm9y
bURhdGEgPSBwcnBGb3JtRGF0YTsKKwogICAgIGlmICghZm9ybURhdGEpCiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCkBAIC00MzksNyArNDQwLDcgQEAgdm9pZCBzZXRIVFRQQm9keShOU011dGFi
bGVVUkxSZXF1ZXN0ICpyZQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgICAgICBmb3JtRGF0YSA9IG5ld0Zvcm1EYXRhOworICAgICAgICBmb3JtRGF0YSA9
IG5ld0Zvcm1EYXRhLnJlbGVhc2UoKTsKICAgICAgICAgY291bnQgPSBmb3JtRGF0YS0+ZWxlbWVu
dHMoKS5zaXplKCk7CiAgICAgfQogI2VuZGlmCkBAIC00NzAsNyArNDcxLDcgQEAgdm9pZCBzZXRI
VFRQQm9keShOU011dGFibGVVUkxSZXF1ZXN0ICpyZQogICAgIC8vIENyZWF0ZSBhbmQgc2V0IHRo
ZSBzdHJlYW0uCiAKICAgICAvLyBQYXNzIHRoZSBsZW5ndGggYWxvbmcgd2l0aCB0aGUgZm9ybURh
dGEgc28gaXQgZG9lcyBub3QgaGF2ZSB0byBiZSByZWNvbXB1dGVkLgotICAgIEZvcm1Db250ZXh0
IGZvcm1Db250ZXh0ID0geyBmb3JtRGF0YS5yZWxlYXNlUmVmKCksIGxlbmd0aCB9OworICAgIEZv
cm1Db250ZXh0IGZvcm1Db250ZXh0ID0geyBmb3JtRGF0YS5yZWxlYXNlKCkubGVha1JlZigpLCBs
ZW5ndGggfTsKIAogICAgIFJldGFpblB0cjxDRlJlYWRTdHJlYW1SZWY+IHN0cmVhbShBZG9wdENG
LCB3a0NyZWF0ZUN1c3RvbUNGUmVhZFN0cmVhbShmb3JtQ3JlYXRlLCBmb3JtRmluYWxpemUsCiAg
ICAgICAgIGZvcm1PcGVuLCBmb3JtUmVhZCwgZm9ybUNhblJlYWQsIGZvcm1DbG9zZSwgZm9ybVNj
aGVkdWxlLCBmb3JtVW5zY2hlZHVsZSwK
</data>
<flag name="review"
          id="91912"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>