<?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>33957</bug_id>
          
          <creation_ts>2010-01-21 09:07:36 -0800</creation_ts>
          <short_desc>[v8] Implement Node map in intrusive way for better speed</short_desc>
          <delta_ts>2010-01-27 11:18:43 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="anton muhin">antonm</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>japhet</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>183212</commentid>
    <comment_count>0</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-01-21 09:07:36 -0800</bug_when>
    <thetext>Implement Node map in intrusive way</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183214</commentid>
    <comment_count>1</comment_count>
      <attachid>47126</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-01-21 09:08:49 -0800</bug_when>
    <thetext>Created attachment 47126
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183215</commentid>
    <comment_count>2</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-01-21 09:12:13 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=47126) [details]
&gt; Patch

This patch depends on https://bugs.webkit.org/show_bug.cgi?id=32430 so all the builds should fail.  I would rerun EWSes when other patch is submitted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183238</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-21 10:19:06 -0800</bug_when>
    <thetext>Attachment 47126 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/203247</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183373</commentid>
    <comment_count>4</comment_count>
      <attachid>47126</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-21 16:28:56 -0800</bug_when>
    <thetext>Comment on attachment 47126
Patch

+ if (!wrapper) return v8::Persistent&lt;v8::Object&gt;();

Should be two lines.  (This nit repeated many times.)

+ TableChunk

Why not just use Vector?

+ virtual v8::Persistent&lt;ValueType&gt; get(KeyType* obj)

Are these methods already virtual?  It seems like we shouldn&apos;t need that.  We should be able to use templates to solve the dispatch problem at compile time.

r- for style, but curious about the above questions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183420</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-21 17:34:31 -0800</bug_when>
    <thetext>By Vector, I mean HashMap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183629</commentid>
    <comment_count>6</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-01-22 06:30:42 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 47126 [details])
&gt; + if (!wrapper) return v8::Persistent&lt;v8::Object&gt;();
&gt; 
&gt; Should be two lines.  (This nit repeated many times.)

Hopefully fixed all those, sorry.  Just curious, how difficult it&apos;d be to add this check into style-checking script?

&gt; + TableChunk
&gt; 
&gt; Why not just use Vector?

I am not sure I fully understand you.  You later corrected it to HashMap.  Anyway, one thing I&apos;d like to escape is x2 allocation policy used by wtf&apos;s HashTable and Vector for two reasons: less memory and speed.

I know one deficiency of my current implementation: it thrashes when on adds and removes the element which could lead to allocation and deallocation of next chunk.  It&apos;s quite easy to fix, but would complicate the code slightly.  What do you think, should I fix it immediately?

&gt; + virtual v8::Persistent&lt;ValueType&gt; get(KeyType* obj)
&gt; 
&gt; Are these methods already virtual?  It seems like we shouldn&apos;t need that.  We
&gt; should be able to use templates to solve the dispatch problem at compile time.

I think they already are---WeakReferenceMap declares all those methods as virtual.

I wholeheartedly agree with you that we should at least try to de-virtualize them though, but could we save it for another CL?

Running through tests on my box and uploading new patch.  Thanks a lot for comments, Adam.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183634</commentid>
    <comment_count>7</comment_count>
      <attachid>47201</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-01-22 06:59:06 -0800</bug_when>
    <thetext>Created attachment 47201
Addressing stylistic issues and rebaselining</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183665</commentid>
    <comment_count>8</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-01-22 08:46:41 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 47126 [details] [details])
&gt; &gt; + if (!wrapper) return v8::Persistent&lt;v8::Object&gt;();
&gt; &gt; 
&gt; &gt; Should be two lines.  (This nit repeated many times.)
&gt; 
&gt; Hopefully fixed all those, sorry.  Just curious, how difficult it&apos;d be to add
&gt; this check into style-checking script?

Simply an issue of figuring out an appropriate regex/code to detect this and putting it in the style checking script (along with an appropriate error category and test). The hardest part is the correct detection (which may not be too hard). If you&apos;d like to do it, that would be great, imo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184382</commentid>
    <comment_count>9</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-01-25 11:25:45 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; (From update of attachment 47126 [details] [details] [details])
&gt; &gt; &gt; + if (!wrapper) return v8::Persistent&lt;v8::Object&gt;();
&gt; &gt; &gt; 
&gt; &gt; &gt; Should be two lines.  (This nit repeated many times.)
&gt; &gt; 
&gt; &gt; Hopefully fixed all those, sorry.  Just curious, how difficult it&apos;d be to add
&gt; &gt; this check into style-checking script?
&gt; 
&gt; Simply an issue of figuring out an appropriate regex/code to detect this and
&gt; putting it in the style checking script (along with an appropriate error
&gt; category and test). The hardest part is the correct detection (which may not be
&gt; too hard). If you&apos;d like to do it, that would be great, imo.

Thanks, David, I think I found the place.  Let me try to hack it in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184423</commentid>
    <comment_count>10</comment_count>
      <attachid>47372</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-01-25 15:11:47 -0800</bug_when>
    <thetext>Created attachment 47372
Refactoring underlying storage into ChunkedTable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184442</commentid>
    <comment_count>11</comment_count>
      <attachid>47372</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-25 16:21:24 -0800</bug_when>
    <thetext>Comment on attachment 47372
Refactoring underlying storage into ChunkedTable

+ m_table()

You don&apos;t need to call the default constructor explicitly.

+ static int const kNoEntries = (1 &lt;&lt; 10) - 1;

Perhaps numberOfEntries?  (WebKit-land doesn&apos;t use &quot;k&quot; and the No is confusing).

Thanks for factoring ChunkedTable out.  It&apos;s much easier to follow what&apos;s going on abstractly.  As we discussed, we should move ChunkedTable to a more generic location in a future patch.

Looks great!  I wish we had some unit testing for ChunkedTable, but that&apos;s not the way WebKit rolls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184583</commentid>
    <comment_count>12</comment_count>
      <attachid>47409</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-01-26 07:02:25 -0800</bug_when>
    <thetext>Created attachment 47409
Addressing Adam comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184585</commentid>
    <comment_count>13</comment_count>
      <attachid>47409</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-26 07:14:45 -0800</bug_when>
    <thetext>Comment on attachment 47409
Addressing Adam comments

thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184587</commentid>
    <comment_count>14</comment_count>
      <attachid>47410</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-01-26 07:20:06 -0800</bug_when>
    <thetext>Created attachment 47410
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185044</commentid>
    <comment_count>15</comment_count>
      <attachid>47410</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-27 05:17:41 -0800</bug_when>
    <thetext>Comment on attachment 47410
Patch for landing

Rejecting patch 47410 from commit-queue.

Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;]&quot; exit_code: 1
Last 500 characters of output:
/V8DOMMap.cpp
	M	WebCore/bindings/v8/V8DOMMap.h
	M	WebCore/bindings/v8/V8DOMWrapper.cpp
	M	WebCore/bindings/v8/V8DOMWrapper.h
A repository hook failed: MERGE request failed on &apos;/repository/webkit/trunk&apos;: Commit blocked by pre-commit hook (exit code 1) with output:
svnlook: Can&apos;t write to stream: Broken pipe

    The following ChangeLog files contain OOPS:

        trunk/WebCore/ChangeLog

    Please don&apos;t ever say &quot;OOPS&quot; in a ChangeLog file.
 at /usr/local/git/libexec/git-core/git-svn line 558


Full output: http://webkit-commit-queue.appspot.com/results/214946</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185046</commentid>
    <comment_count>16</comment_count>
      <attachid>47521</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-01-27 05:27:34 -0800</bug_when>
    <thetext>Created attachment 47521
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185157</commentid>
    <comment_count>17</comment_count>
      <attachid>47521</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-27 11:18:35 -0800</bug_when>
    <thetext>Comment on attachment 47521
Patch for landing

Clearing flags on attachment: 47521

Committed r53944: &lt;http://trac.webkit.org/changeset/53944&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185158</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-27 11:18:43 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47126</attachid>
            <date>2010-01-21 09:08:49 -0800</date>
            <delta_ts>2010-01-22 06:58:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33957-20100121200847.patch</filename>
            <type>text/plain</type>
            <size>18469</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmU3Y2QxMC4uNjUwYzZhZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxMC0wMS0yMSAgYW50b24gbXVoaW4g
IDxhbnRvbm1AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnQgTm9kZSBtYXAgaW4gaW50cnVzaXZlIHdheQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM5NTcKKworICAgICAg
ICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGEu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGE6OnJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1h
cCk6CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6Z2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6c2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6
cmVtb3ZlSWZQcmVzZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVz
aXZlRE9NV3JhcHBlck1hcDo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0
b3JlOjpJbnRydXNpdmVET01XcmFwcGVyTWFwOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpE
T01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJNYXA6OmNsZWFyKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6YWxsb2NhdGVUYWJs
ZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3Jh
cHBlck1hcDo6ZnJlZVRhYmxlRW50cnkpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGFT
dG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjpJbnRydXNpdmVET01XcmFw
cGVyTWFwOjpJbnRydXNpdmVET01XcmFwcGVyTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURh
dGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6Y2xlYXJFbnRyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpET01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJNYXA6OmNsZWFyRW50cmll
cyk6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJN
YXA6OnZpc2l0RW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6OkludHJ1
c2l2ZURPTVdyYXBwZXJNYXA6OlRhYmxlQ2h1bms6OlRhYmxlQ2h1bmspOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NRGF0YVN0b3JlOjpkb21Ob2RlTWFwKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9T
dGF0aWNET01EYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljRE9NRGF0YVN0
b3JlOjpTdGF0aWNET01EYXRhU3RvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1N0YXRpY0RP
TURhdGFTdG9yZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmdldERPTU5vZGVNYXApOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9N
TWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXA6OkFic3Ry
YWN0V2Vha1JlZmVyZW5jZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdFdlYWtSZWZl
cmVuY2VNYXA6OndlYWtSZWZlcmVuY2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpXZWFr
UmVmZXJlbmNlTWFwOjpXZWFrUmVmZXJlbmNlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OldlYWtS
ZWZlcmVuY2VNYXA6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWFrUmVmZXJlbmNlTWFwOjp2
aXNpdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydERvY3VtZW50VG9WOE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBl
cjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBl
cjo6Y29udmVydE5ld05vZGVUb1Y4T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERP
TVdyYXBwZXIuaDoKKwogMjAxMC0wMS0xOSAgQW50b24gTXVoaW4gIDxhbnRvbm1AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURh
dGEuaAppbmRleCA5MzQ4MGNhLi43ZmE5ZTdkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0RPTURhdGEuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGEuaApAQCAtNjIs
NyArNjIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGVyZWZEZWxheWVk
T2JqZWN0cygpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0YXRp
YyB2b2lkIHJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1hcChET01XcmFwcGVyTWFwPFQ+JiBkb21N
YXApOworICAgICAgICBzdGF0aWMgdm9pZCByZW1vdmVPYmplY3RzRnJvbVdyYXBwZXJNYXAoQWJz
dHJhY3RXZWFrUmVmZXJlbmNlTWFwPFQsIHY4OjpPYmplY3Q+JiBkb21NYXApOwogCiAgICAgICAg
IFRocmVhZElkZW50aWZpZXIgb3duaW5nVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9vd25pbmdU
aHJlYWQ7IH0KIApAQCAtMTEzLDcgKzExMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgRE9NRGF0YTo6cmVtb3ZlT2Jq
ZWN0c0Zyb21XcmFwcGVyTWFwKERPTVdyYXBwZXJNYXA8VD4mIGRvbU1hcCkKKyAgICB2b2lkIERP
TURhdGE6OnJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1hcChBYnN0cmFjdFdlYWtSZWZlcmVuY2VN
YXA8VCwgdjg6Ok9iamVjdD4mIGRvbU1hcCkKICAgICB7CiAgICAgICAgIFdyYXBwZXJNYXBPYmpl
Y3RSZW1vdmVyPFQ+IHJlbW92ZXI7CiAgICAgICAgIGRvbU1hcC52aXNpdCgmcmVtb3Zlcik7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAKaW5kZXggMzM2ZjY2Mi4uOTBiYjU3MCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcApAQCAtMTc0LDYgKzE3NCwxMDYgQEAgdm9p
ZCBET01EYXRhU3RvcmU6OndlYWtOb2RlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
PiB2OE9iamVjdCwgdm9pZCogZG8KICAgICB9CiB9CiAKK3Y4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IERPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6Z2V0KE5vZGUqIG9iaikK
K3sKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Piogd3JhcHBlciA9IG9iai0+d3JhcHBl
cigpOworICAgIGlmICghd3JhcHBlcikgcmV0dXJuIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
KCk7CisgICAgcmV0dXJuICp3cmFwcGVyOworfQorCit2b2lkIERPTURhdGFTdG9yZTo6SW50cnVz
aXZlRE9NV3JhcHBlck1hcDo6c2V0KE5vZGUqIG9iaiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD4gd3JhcHBlcikKK3sKKyAgICBBU1NFUlQob2JqKTsKKyAgICBBU1NFUlQoIW9iai0+d3JhcHBl
cigpKTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiogZW50cnkgPSBhbGxvY2F0ZVRh
YmxlRW50cnkoKTsKKyAgICAqZW50cnkgPSB3cmFwcGVyOworICAgIG9iai0+c2V0V3JhcHBlcihl
bnRyeSk7CisgICAgd3JhcHBlci5NYWtlV2VhayhvYmosIHdlYWtSZWZlcmVuY2VDYWxsYmFjaygp
KTsKK30KKworYm9vbCBET01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJNYXA6OnJlbW92
ZUlmUHJlc2VudChOb2RlKiBvYmosIHY4OjpQZXJzaXN0ZW50PHY4OjpEYXRhPiB2YWx1ZSkKK3sK
KyAgICBBU1NFUlQob2JqKTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiogZW50cnkg
PSBvYmotPndyYXBwZXIoKTsKKyAgICBpZiAoIWVudHJ5KSByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCplbnRyeSAhPSB2YWx1ZSkgcmV0dXJuIGZhbHNlOworICAgIG9iai0+Y2xlYXJXcmFwcGVyKCk7
CisgICAgZnJlZVRhYmxlRW50cnkoZW50cnkpOworICAgIHZhbHVlLkRpc3Bvc2UoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBET01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJN
YXA6OmNvbnRhaW5zKE5vZGUqIG9iaikKK3sKKyAgICByZXR1cm4gb2JqLT53cmFwcGVyKCk7Cit9
CisKK3ZvaWQgRE9NRGF0YVN0b3JlOjpJbnRydXNpdmVET01XcmFwcGVyTWFwOjp2aXNpdChWaXNp
dG9yKiB2aXNpdG9yKQoreworICAgIGlmICghbV9jaHVua3MpIHJldHVybjsKKyAgICB2aXNpdEVu
dHJpZXMobV9jaHVua3MtPm1fZW50cmllcywgbV9jdXJyZW50LCB2aXNpdG9yKTsKKyAgICBmb3Ig
KFRhYmxlQ2h1bmsqIGNodW5rID0gbV9jaHVua3MtPm1fcHJldmlvdXM7IGNodW5rOyBjaHVuayA9
IGNodW5rLT5tX3ByZXZpb3VzKQorICAgICAgICB2aXNpdEVudHJpZXMoY2h1bmstPm1fZW50cmll
cywgY2h1bmstPm1fZW50cmllcyArIGtOb0VudHJpZXMsIHZpc2l0b3IpOworfQorCit2b2lkIERP
TURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6Y2xlYXIoKQoreworICAgIGlmICgh
bV9jaHVua3MpIHJldHVybjsKKyAgICBjbGVhckVudHJpZXMobV9jaHVua3MtPm1fZW50cmllcywg
bV9jdXJyZW50KTsKKyAgICBUYWJsZUNodW5rKiBsYXN0ID0gbV9jaHVua3M7CisgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgVGFibGVDaHVuayogcHJldmlvdXMgPSBsYXN0LT5tX3ByZXZpb3Vz
OworICAgICAgICBpZiAoIXByZXZpb3VzKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
bGV0ZSBsYXN0OworICAgICAgICBjbGVhckVudHJpZXMocHJldmlvdXMtPm1fZW50cmllcywgcHJl
dmlvdXMtPm1fZW50cmllcyArIGtOb0VudHJpZXMpOworICAgICAgICBsYXN0ID0gcHJldmlvdXM7
CisgICAgfQorICAgIG1fY2h1bmtzID0gbGFzdDsKKyAgICBtX2N1cnJlbnQgPSBtX2NodW5rcy0+
bV9lbnRyaWVzOworICAgIG1fbGFzdCA9IG1fY3VycmVudCArIGtOb0VudHJpZXM7Cit9CisKK3Y4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KiBET01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBw
ZXJNYXA6OmFsbG9jYXRlVGFibGVFbnRyeSgpCit7CisgICAgaWYgKFVOTElLRUxZKG1fY3VycmVu
dCA9PSBtX2xhc3QpKSB7CisgICAgICAgIG1fY2h1bmtzID0gbmV3IFRhYmxlQ2h1bmsobV9jaHVu
a3MpOworICAgICAgICBtX2N1cnJlbnQgPSBtX2NodW5rcy0+bV9lbnRyaWVzOworICAgICAgICBt
X2xhc3QgPSBtX2N1cnJlbnQgKyBrTm9FbnRyaWVzOworICAgIH0KKyAgICBBU1NFUlQoKG1fY2h1
bmtzLT5tX2VudHJpZXMgPD0gbV9jdXJyZW50KSAmJiAobV9jdXJyZW50IDwgbV9sYXN0KSk7CisK
KyNpZm5kZWYgTkRFQlVHCisgICAgKm1fY3VycmVudCA9IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+KCk7CisjZW5kaWYKKyAgICByZXR1cm4gbV9jdXJyZW50Kys7Cit9CisKK3ZvaWQgRE9NRGF0
YVN0b3JlOjpJbnRydXNpdmVET01XcmFwcGVyTWFwOjpmcmVlVGFibGVFbnRyeSh2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiogZW50cnkpCit7CisgICAgQVNTRVJUKGVudHJ5KTsKKyAgICBBU1NF
UlQoVjhOb2RlOjp0b05hdGl2ZSgqZW50cnkpKTsKKyAgICBBU1NFUlQobV9jdXJyZW50ID4gbV9j
aHVua3MtPm1fZW50cmllcyk7CisgICAgbV9jdXJyZW50LS07CisgICAgaWYgKGVudHJ5ICE9IG1f
Y3VycmVudCkgeworICAgICAgICAqZW50cnkgPSAqbV9jdXJyZW50OworICAgICAgICBOb2RlKiBu
b2RlID0gVjhOb2RlOjp0b05hdGl2ZSgqZW50cnkpOworICAgICAgICBBU1NFUlQobm9kZSk7Cisg
ICAgICAgIG5vZGUtPnNldFdyYXBwZXIoZW50cnkpOworICAgIH0KKyAgICBpZiAoVU5MSUtFTFko
bV9jdXJyZW50ID09IG1fY2h1bmtzLT5tX2VudHJpZXMpKSB7CisgICAgICBUYWJsZUNodW5rKiB0
b0RlbGV0ZSA9IG1fY2h1bmtzOworICAgICAgbV9jaHVua3MgPSB0b0RlbGV0ZS0+bV9wcmV2aW91
czsKKyAgICAgIGlmIChtX2NodW5rcykKKyAgICAgICAgICBtX2N1cnJlbnQgPSBtX2xhc3QgPSBt
X2NodW5rcy0+bV9lbnRyaWVzICsga05vRW50cmllczsKKyAgICAgIGVsc2UKKyAgICAgICAgICBt
X2N1cnJlbnQgPSBtX2xhc3QgPSAwOworICAgICAgZGVsZXRlIHRvRGVsZXRlOworICAgIH0KKwor
ICAgIEFTU0VSVCghbV9jaHVua3MgfHwgKChtX2NodW5rcy0+bV9lbnRyaWVzIDwgbV9jdXJyZW50
KSAmJiAobV9jdXJyZW50IDw9IG1fbGFzdCkpKTsKK30KKwogI2lmIEVOQUJMRShTVkcpCiAKIHZv
aWQgRE9NRGF0YVN0b3JlOjp3ZWFrU1ZHRWxlbWVudEluc3RhbmNlQ2FsbGJhY2sodjg6OlBlcnNp
c3RlbnQ8djg6OlZhbHVlPiB2OE9iamVjdCwgdm9pZCogZG9tT2JqZWN0KQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
RE9NRGF0YVN0b3JlLmgKaW5kZXggZTAyNzA1OC4uYjdhZmY3NyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RP
TURhdGFTdG9yZS5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIERPTURhdGFTdG9yZV9oCiAK
ICNpbmNsdWRlICJET01PYmplY3RzSW5jbHVkZS5oIgorI2luY2x1ZGUgIlY4Tm9kZS5oIgogCiAj
aW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtODYsNiArODcsNjQg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgRE9NRGF0YSogbV9kb21EYXRhOwog
ICAgICAgICB9OwogCisgICAgICAgIGNsYXNzIEludHJ1c2l2ZURPTVdyYXBwZXJNYXAgOiBwdWJs
aWMgQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwPE5vZGUsIHY4OjpPYmplY3Q+IHsKKyAgICAgICAg
cHVibGljOgorICAgICAgICAgICAgSW50cnVzaXZlRE9NV3JhcHBlck1hcCh2ODo6V2Vha1JlZmVy
ZW5jZUNhbGxiYWNrIGNhbGxiYWNrKQorICAgICAgICAgICAgICAgIDogQWJzdHJhY3RXZWFrUmVm
ZXJlbmNlTWFwPE5vZGUsIHY4OjpPYmplY3Q+KGNhbGxiYWNrKSwKKyAgICAgICAgICAgICAgICAg
IG1fY2h1bmtzKDApLAorICAgICAgICAgICAgICAgICAgbV9jdXJyZW50KDApLAorICAgICAgICAg
ICAgICAgICAgbV9sYXN0KDApIHsgfQorCisgICAgICAgICAgICB2aXJ0dWFsIHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+IGdldChOb2RlKiBvYmopOworICAgICAgICAgICAgdmlydHVhbCB2b2lk
IHNldChOb2RlKiBvYmosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpOworICAg
ICAgICAgICAgdmlydHVhbCBib29sIGNvbnRhaW5zKE5vZGUqIG9iaik7CisgICAgICAgICAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoVmlzaXRvciogdmlzaXRvcik7CisgICAgICAgICAgICB2aXJ0dWFs
IGJvb2wgcmVtb3ZlSWZQcmVzZW50KE5vZGUqIGtleSwgdjg6OlBlcnNpc3RlbnQ8djg6OkRhdGE+
IHZhbHVlKTsKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOworCisgICAgICAgIHBy
aXZhdGU6CisgICAgICAgICAgICBzdGF0aWMgdm9pZCBjbGVhckVudHJ5KHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+KiBlbnRyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gVjhOb2RlOjp0b05hdGl2ZSgqZW50cnkpOworICAgICAgICAgICAgICAgIEFTU0VS
VChub2RlLT53cmFwcGVyKCkgPT0gZW50cnkpOworCisgICAgICAgICAgICAgICAgbm9kZS0+Y2xl
YXJXcmFwcGVyKCk7CisgICAgICAgICAgICAgICAgZW50cnktPkRpc3Bvc2UoKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc3RhdGljIHZvaWQgY2xlYXJFbnRyaWVzKHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+KiBmaXJzdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIGxhc3Qp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yICh2ODo6UGVyc2lzdGVudDx2ODo6
T2JqZWN0PiogZW50cnkgPSBmaXJzdDsgZW50cnkgPCBsYXN0OyBlbnRyeSsrKQorICAgICAgICAg
ICAgICAgICAgICBjbGVhckVudHJ5KGVudHJ5KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgc3RhdGljIHZvaWQgdmlzaXRFbnRyaWVzKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KiBm
aXJzdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIGxhc3QsIFZpc2l0b3IqIHZpc2l0b3Ip
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yICh2ODo6UGVyc2lzdGVudDx2ODo6
T2JqZWN0PiogZW50cnkgPSBmaXJzdDsgZW50cnkgPCBsYXN0OyBlbnRyeSsrKSB7CisgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBWOE5vZGU6OnRvTmF0aXZlKCplbnRyeSk7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT53cmFwcGVyKCkgPT0gZW50cnkpOworCisgICAg
ICAgICAgICAgICAgICAgIHZpc2l0b3ItPnZpc2l0RE9NV3JhcHBlcihub2RlLCAqZW50cnkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdGljIGlu
dCBjb25zdCBrTm9FbnRyaWVzID0gKDEgPDwgMTApIC0gMTsKKworICAgICAgICAgICAgc3RydWN0
IFRhYmxlQ2h1bmsgeworICAgICAgICAgICAgICAgIGV4cGxpY2l0IFRhYmxlQ2h1bmsoVGFibGVD
aHVuayogcHJldmlvdXMpIDogbV9wcmV2aW91cyhwcmV2aW91cykgeyB9CisgICAgICAgICAgICAg
ICAgVGFibGVDaHVuayogY29uc3QgbV9wcmV2aW91czsKKyAgICAgICAgICAgICAgICB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0PiBtX2VudHJpZXNba05vRW50cmllc107CisgICAgICAgICAgICB9
OworCisKKyAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KiBhbGxvY2F0ZVRh
YmxlRW50cnkoKTsKKyAgICAgICAgICAgIHZvaWQgZnJlZVRhYmxlRW50cnkodjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD4qIGVudHJ5KTsKKworICAgICAgICAgICAgVGFibGVDaHVuayogbV9jaHVu
a3M7CisgICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiogbV9jdXJyZW50Owor
ICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIG1fbGFzdDsKKyAgICAgICAg
fTsKKwogICAgICAgICBET01EYXRhU3RvcmUoRE9NRGF0YSopOwogICAgICAgICB2aXJ0dWFsIH5E
T01EYXRhU3RvcmUoKTsKIApAQCAtMTAyLDcgKzE2MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICB2b2lkKiBnZXRET01XcmFwcGVyTWFwKERPTVdyYXBwZXJNYXBUeXBlKTsKIAot
ICAgICAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8Tm9kZT4mIGRvbU5vZGVNYXAoKSB7IHJldHVy
biAqbV9kb21Ob2RlTWFwOyB9CisgICAgICAgIERPTU5vZGVNYXBwaW5nJiBkb21Ob2RlTWFwKCkg
eyByZXR1cm4gKm1fZG9tTm9kZU1hcDsgfQogICAgICAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8
dm9pZD4mIGRvbU9iamVjdE1hcCgpIHsgcmV0dXJuICptX2RvbU9iamVjdE1hcDsgfQogICAgICAg
ICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8dm9pZD4mIGFjdGl2ZURvbU9iamVjdE1hcCgpIHsgcmV0
dXJuICptX2FjdGl2ZURvbU9iamVjdE1hcDsgfQogI2lmIEVOQUJMRShTVkcpCkBAIC0xMjIsNyAr
MTgxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgdm9pZCB3ZWFrU1ZH
T2JqZWN0V2l0aENvbnRleHRDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4T2Jq
ZWN0LCB2b2lkKiBkb21PYmplY3QpOwogI2VuZGlmCiAgICAgICAgIAotICAgICAgICBJbnRlcm5h
bERPTVdyYXBwZXJNYXA8Tm9kZT4qIG1fZG9tTm9kZU1hcDsKKyAgICAgICAgRE9NTm9kZU1hcHBp
bmcqIG1fZG9tTm9kZU1hcDsKICAgICAgICAgSW50ZXJuYWxET01XcmFwcGVyTWFwPHZvaWQ+KiBt
X2RvbU9iamVjdE1hcDsKICAgICAgICAgSW50ZXJuYWxET01XcmFwcGVyTWFwPHZvaWQ+KiBtX2Fj
dGl2ZURvbU9iamVjdE1hcDsKICNpZiBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9T
dGF0aWNET01EYXRhU3RvcmUuY3BwCmluZGV4IDNhMDJjMGIuLjcyMjA1MWIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmNwcAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBTdGF0aWNET01EYXRhU3RvcmU6OlN0YXRpY0RPTURhdGFTdG9y
ZShET01EYXRhKiBkb21EYXRhKQogICAgIDogRE9NRGF0YVN0b3JlKGRvbURhdGEpCi0gICAgLCBt
X3N0YXRpY0RvbU5vZGVNYXAoZG9tRGF0YSwgJkRPTURhdGFTdG9yZTo6d2Vha05vZGVDYWxsYmFj
aykKKyAgICAsIG1fc3RhdGljRG9tTm9kZU1hcCgmRE9NRGF0YVN0b3JlOjp3ZWFrTm9kZUNhbGxi
YWNrKQogICAgICwgbV9zdGF0aWNEb21PYmplY3RNYXAoZG9tRGF0YSwgJkRPTURhdGFTdG9yZTo6
d2Vha0RPTU9iamVjdENhbGxiYWNrKQogICAgICwgbV9zdGF0aWNBY3RpdmVEb21PYmplY3RNYXAo
ZG9tRGF0YSwgJkRPTURhdGFTdG9yZTo6d2Vha0FjdGl2ZURPTU9iamVjdENhbGxiYWNrKQogI2lm
IEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURh
dGFTdG9yZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuaAppbmRl
eCA0Y2QwNTE1Li42NGE5MGUwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRp
Y0RPTURhdGFTdG9yZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0
b3JlLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIFN0YXRpY0RPTURhdGFTdG9yZShE
T01EYXRhKik7CiAKIHByaXZhdGU6Ci0gICAgSW50ZXJuYWxET01XcmFwcGVyTWFwPE5vZGU+IG1f
c3RhdGljRG9tTm9kZU1hcDsKKyAgICBJbnRydXNpdmVET01XcmFwcGVyTWFwIG1fc3RhdGljRG9t
Tm9kZU1hcDsKICAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8dm9pZD4gbV9zdGF0aWNEb21PYmpl
Y3RNYXA7CiAgICAgSW50ZXJuYWxET01XcmFwcGVyTWFwPHZvaWQ+IG1fc3RhdGljQWN0aXZlRG9t
T2JqZWN0TWFwOwogI2lmIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NTWFwLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuY3BwCmluZGV4
IDgzZTI2ODQuLmZhMmZiYTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01N
YXAuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuY3BwCkBAIC02NSw3ICs2
NSw3IEBAIHZvaWQgZW5hYmxlRmFzdGVyRE9NU3RvcmVBY2Nlc3MoKQogICAgIGZhc3RlckRPTVN0
b3JlQWNjZXNzID0gdHJ1ZTsKIH0KIAotRE9NV3JhcHBlck1hcDxOb2RlPiYgZ2V0RE9NTm9kZU1h
cCgpCitET01Ob2RlTWFwcGluZyYgZ2V0RE9NTm9kZU1hcCgpCiB7CiAgICAgcmV0dXJuIGdldERP
TURhdGFTdG9yZSgpLmRvbU5vZGVNYXAoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01NYXAuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaAppbmRleCBj
ZGRiMGE0Li5kNDJkYWE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFw
LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCkBAIC00MSwxMiArNDEsMzYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNWR0VsZW1lbnRJbnN0YW5jZTsKICNl
bmRpZgogCisgICAgdGVtcGxhdGUgPGNsYXNzIEtleVR5cGUsIGNsYXNzIFZhbHVlVHlwZT4gY2xh
c3MgQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFic3Ry
YWN0V2Vha1JlZmVyZW5jZU1hcCh2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrKSA6
IG1fd2Vha1JlZmVyZW5jZUNhbGxiYWNrKGNhbGxiYWNrKSB7IH0KKworICAgICAgICBjbGFzcyBW
aXNpdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0
RE9NV3JhcHBlcihLZXlUeXBlKiBrZXksIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4gb2JqZWN0
KSA9IDA7CisgICAgICAgIH07CisKKyAgICAgICAgdmlydHVhbCB2ODo6UGVyc2lzdGVudDxWYWx1
ZVR5cGU+IGdldChLZXlUeXBlKiBvYmopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldChL
ZXlUeXBlKiBvYmosIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4gd3JhcHBlcikgPSAwOworICAg
ICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnMoS2V5VHlwZSogb2JqKSA9IDA7CisgICAgICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChWaXNpdG9yKiB2aXNpdG9yKSA9IDA7CisgICAgICAgIHZpcnR1YWwg
Ym9vbCByZW1vdmVJZlByZXNlbnQoS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDx2ODo6RGF0
YT4gdmFsdWUpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAwOworCisgICAg
ICAgIHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sgd2Vha1JlZmVyZW5jZUNhbGxiYWNrKCkgeyBy
ZXR1cm4gbV93ZWFrUmVmZXJlbmNlQ2FsbGJhY2s7IH0KKyAgICBwcml2YXRlOgorICAgICAgICB2
ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIG1fd2Vha1JlZmVyZW5jZUNhbGxiYWNrOworICAgIH07
CisKKyAgICB0eXBlZGVmIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDxOb2RlLCB2ODo6T2JqZWN0
PiBET01Ob2RlTWFwcGluZzsKKwogICAgIC8vIEEgdGFibGUgb2Ygd3JhcHBlcnMgd2l0aCB3ZWFr
IHBvaW50ZXJzLgogICAgIC8vIFRoaXMgdGFibGUgYWxsb3dzIHVzIHRvIGF2b2lkIHRyYWNrIHdy
YXBwZWQgb2JqZWN0cyBmb3IgZGVidWdnaW5nCiAgICAgLy8gYW5kIGZvciBlbnN1cmluZyB0aGF0
IHdlIGRvbid0IGRvdWJsZSB3cmFwIHRoZSBzYW1lIG9iamVjdC4KLSAgICB0ZW1wbGF0ZTxjbGFz
cyBLZXlUeXBlLCBjbGFzcyBWYWx1ZVR5cGU+IGNsYXNzIFdlYWtSZWZlcmVuY2VNYXAgeworICAg
IHRlbXBsYXRlPGNsYXNzIEtleVR5cGUsIGNsYXNzIFZhbHVlVHlwZT4gY2xhc3MgV2Vha1JlZmVy
ZW5jZU1hcCA6IHB1YmxpYyBBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXA8S2V5VHlwZSwgVmFsdWVU
eXBlPiB7CiAgICAgcHVibGljOgotICAgICAgICBXZWFrUmVmZXJlbmNlTWFwKHY4OjpXZWFrUmVm
ZXJlbmNlQ2FsbGJhY2sgY2FsbGJhY2spIDogbV93ZWFrUmVmZXJlbmNlQ2FsbGJhY2soY2FsbGJh
Y2spIHsgfQorICAgICAgICB0eXBlZGVmIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDxLZXlUeXBl
LCBWYWx1ZVR5cGU+IFBhcmVudDsKKyAgICAgICAgV2Vha1JlZmVyZW5jZU1hcCh2ODo6V2Vha1Jl
ZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrKSA6IFBhcmVudChjYWxsYmFjaykgeyB9CiAgICAgICAg
IHZpcnR1YWwgfldlYWtSZWZlcmVuY2VNYXAoKQogICAgICAgICB7CiAgICAgI2lmbmRlZiBOREVC
VUcKQEAgLTY1LDcgKzg5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IHZvaWQgc2V0KEtleVR5cGUqIG9iaiwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPiB3cmFwcGVy
KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fbWFwLmNvbnRhaW5zKG9iaikpOwot
ICAgICAgICAgICAgd3JhcHBlci5NYWtlV2VhayhvYmosIG1fd2Vha1JlZmVyZW5jZUNhbGxiYWNr
KTsKKyAgICAgICAgICAgIHdyYXBwZXIuTWFrZVdlYWsob2JqLCBQYXJlbnQ6OndlYWtSZWZlcmVu
Y2VDYWxsYmFjaygpKTsKICAgICAgICAgICAgIG1fbWFwLnNldChvYmosICp3cmFwcGVyKTsKICAg
ICAgICAgfQogCkBAIC05OSwxNCArMTIzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIGJvb2wgY29udGFpbnMoS2V5VHlwZSogb2JqKSB7IHJldHVybiBtX21hcC5jb250YWlucyhv
YmopOyB9CiAKLSAgICAgICAgY2xhc3MgVmlzaXRvciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAg
ICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdERPTVdyYXBwZXIoS2V5VHlwZSosIHY4OjpQZXJzaXN0
ZW50PFZhbHVlVHlwZT4pID0gMDsKLSAgICAgICAgcHJvdGVjdGVkOgotICAgICAgICAgICAgdmly
dHVhbCB+VmlzaXRvcigpIHsgfQotICAgICAgICB9OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChWaXNpdG9yKiB2aXNpdG9yKQorICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQodHlwZW5h
bWUgUGFyZW50OjpWaXNpdG9yKiB2aXNpdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICB0eXBl
bmFtZSBIYXNoTWFwPEtleVR5cGUqLCBWYWx1ZVR5cGUqPjo6aXRlcmF0b3IgaXQgPSBtX21hcC5i
ZWdpbigpOwogICAgICAgICAgICAgZm9yICg7IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KQpAQCAt
MTM5LDcgKzE1Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB9OwogCiAgICAgLy8gQSBt
YXAgZnJvbSBET00gbm9kZSB0byBpdHMgSlMgd3JhcHBlci4KLSAgICBET01XcmFwcGVyTWFwPE5v
ZGU+JiBnZXRET01Ob2RlTWFwKCk7CisgICAgRE9NTm9kZU1hcHBpbmcmIGdldERPTU5vZGVNYXAo
KTsKICAgICB2b2lkIHZpc2l0RE9NTm9kZXNJbkN1cnJlbnRUaHJlYWQoRE9NV3JhcHBlck1hcDxO
b2RlPjo6VmlzaXRvciopOwogCiAgICAgLy8gQSBtYXAgZnJvbSBhIERPTSBvYmplY3QgKG5vbi1u
b2RlKSB0byBpdHMgSlMgd3JhcHBlci4gVGhpcyBtYXAgZG9lcyBub3QgY29udGFpbiB0aGUgRE9N
IG9iamVjdHMgd2hpY2ggY2FuIGhhdmUgcGVuZGluZyBhY3Rpdml0eSAoYWN0aXZlIGRvbSBvYmpl
Y3RzKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAppbmRleCBjMzhhYjRiLi43ZWVl
OWNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCkBAIC0zMyw2ICszMyw3IEBA
CiAKICNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNo
cm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiRE9NRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiRE9N
T2JqZWN0c0luY2x1ZGUuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC0xMDQ4LDcgKzEwNDksNyBAQCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0RG9jdW1lbnRUb1Y4T2JqZWN0KERvY3VtZW50
KiBkb2N1bWVudAogICAgIGlmIChwcm94eSkKICAgICAgICAgcHJveHktPndpbmRvd1NoZWxsKCkt
PmluaXRDb250ZXh0SWZOZWVkZWQoKTsKIAotICAgIERPTVdyYXBwZXJNYXA8Tm9kZT4mIGRvbU5v
ZGVNYXAgPSBnZXRET01Ob2RlTWFwKCk7CisgICAgRE9NTm9kZU1hcHBpbmcmIGRvbU5vZGVNYXAg
PSBnZXRET01Ob2RlTWFwKCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0g
ZG9tTm9kZU1hcC5nZXQoZG9jdW1lbnQpOwogICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIGNvbnZlcnROZXdOb2RlVG9WOE9iamVjdChkb2N1bWVudCwgcHJveHksIGRv
bU5vZGVNYXApOwpAQCAtMTA1NiwyNSArMTA1NywzOSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
VjhET01XcmFwcGVyOjpjb252ZXJ0RG9jdW1lbnRUb1Y4T2JqZWN0KERvY3VtZW50KiBkb2N1bWVu
dAogICAgIHJldHVybiB3cmFwcGVyOwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGdldFdyYXBwZXIoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQo
KSk7CisgICAgVjhJc29sYXRlZENvbnRleHQqIGNvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6
Z2V0RW50ZXJlZCgpOworICAgIGlmIChMSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+KiB3cmFwcGVyID0gbm9kZS0+d3JhcHBlcigpOworICAgICAg
ICBpZiAoIXdyYXBwZXIpCisgICAgICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCk7CisgICAgICAgIHJldHVybiAqd3JhcHBlcjsKKyAgICB9CisKKyAgICBET01Ob2RlTWFwcGlu
ZyYgZG9tTm9kZU1hcCA9IGNvbnRleHQtPndvcmxkKCktPmRvbURhdGFTdG9yZSgpLT5kb21Ob2Rl
TWFwKCk7CisgICAgcmV0dXJuIGRvbU5vZGVNYXAuZ2V0KG5vZGUpOworfQorCiB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoTm9kZSogbm9k
ZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwogICAgIAor
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gZ2V0V3JhcHBlcihub2RlKTsKKyAg
ICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gd3JhcHBlcjsKKwogICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IG5vZGUtPmRvY3VtZW50KCk7CiAgICAgaWYgKG5vZGUgPT0g
ZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBjb252ZXJ0RG9jdW1lbnRUb1Y4T2JqZWN0KGRvY3Vt
ZW50KTsKLSAgICAKLSAgICBET01XcmFwcGVyTWFwPE5vZGU+JiBkb21Ob2RlTWFwID0gZ2V0RE9N
Tm9kZU1hcCgpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGRvbU5vZGVN
YXAuZ2V0KG5vZGUpOwotICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IGNvbnZlcnROZXdOb2RlVG9WOE9iamVjdChub2RlLCAwLCBkb21Ob2RlTWFwKTsKLSAgICAKLSAg
ICByZXR1cm4gd3JhcHBlcjsKKworICAgIHJldHVybiBjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3Qo
bm9kZSwgMCwgZ2V0RE9NTm9kZU1hcCgpKTsKIH0KICAgICAKIC8vIENhbGxlciBjaGVja3Mgbm9k
ZSBpcyBub3QgbnVsbC4KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZl
cnROZXdOb2RlVG9WOE9iamVjdChOb2RlKiBub2RlLCBWOFByb3h5KiBwcm94eSwgRE9NV3JhcHBl
ck1hcDxOb2RlPiYgZG9tTm9kZU1hcCkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBw
ZXI6OmNvbnZlcnROZXdOb2RlVG9WOE9iamVjdChOb2RlKiBub2RlLCBWOFByb3h5KiBwcm94eSwg
RE9NTm9kZU1hcHBpbmcmIGRvbU5vZGVNYXApCiB7CiAgICAgaWYgKCFwcm94eSAmJiBub2RlLT5k
b2N1bWVudCgpKQogICAgICAgICBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKG5vZGUtPmRvY3Vt
ZW50KCktPmZyYW1lKCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKaW5kZXggZWU3OTUw
OS4uNmU1MjIzNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIu
aAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCkBAIC0xNTAsNyArMTUw
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnROZXdO
b2RlVG9WOE9iamVjdChub2RlLCAwLCBnZXRET01Ob2RlTWFwKCkpOwogICAgICAgICB9CiAKLSAg
ICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0TmV3Tm9kZVRvVjhPYmpl
Y3QoTm9kZSosIFY4UHJveHkqLCBET01XcmFwcGVyTWFwPE5vZGU+Jik7CisgICAgICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydE5ld05vZGVUb1Y4T2JqZWN0KE5vZGUqLCBW
OFByb3h5KiwgRE9NTm9kZU1hcHBpbmcmKTsKIAogICAgICAgICBzdGF0aWMgVjhDbGFzc0luZGV4
OjpWOFdyYXBwZXJUeXBlIGRvbVdyYXBwZXJUeXBlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47201</attachid>
            <date>2010-01-22 06:59:06 -0800</date>
            <delta_ts>2010-01-25 15:11:38 -0800</delta_ts>
            <desc>Addressing stylistic issues and rebaselining</desc>
            <filename>bug-33957-20100122175904.patch</filename>
            <type>text/plain</type>
            <size>18505</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDA0ZTg3Yi4uYTc1ZTlmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxMC0wMS0yMSAgQW50b24gTXVoaW4g
IDxhbnRvbm1AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnQgTm9kZSBtYXAgaW4gaW50cnVzaXZlIHdheQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM5NTcKKworICAgICAg
ICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGEu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGE6OnJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1h
cCk6CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6Z2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6c2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6
cmVtb3ZlSWZQcmVzZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVz
aXZlRE9NV3JhcHBlck1hcDo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0
b3JlOjpJbnRydXNpdmVET01XcmFwcGVyTWFwOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpE
T01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJNYXA6OmNsZWFyKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6YWxsb2NhdGVUYWJs
ZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3Jh
cHBlck1hcDo6ZnJlZVRhYmxlRW50cnkpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGFT
dG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjpJbnRydXNpdmVET01XcmFw
cGVyTWFwOjpJbnRydXNpdmVET01XcmFwcGVyTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURh
dGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6Y2xlYXJFbnRyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpET01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJNYXA6OmNsZWFyRW50cmll
cyk6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJN
YXA6OnZpc2l0RW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6OkludHJ1
c2l2ZURPTVdyYXBwZXJNYXA6OlRhYmxlQ2h1bms6OlRhYmxlQ2h1bmspOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NRGF0YVN0b3JlOjpkb21Ob2RlTWFwKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9T
dGF0aWNET01EYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljRE9NRGF0YVN0
b3JlOjpTdGF0aWNET01EYXRhU3RvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1N0YXRpY0RP
TURhdGFTdG9yZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmdldERPTU5vZGVNYXApOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9N
TWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXA6OkFic3Ry
YWN0V2Vha1JlZmVyZW5jZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdFdlYWtSZWZl
cmVuY2VNYXA6OndlYWtSZWZlcmVuY2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpXZWFr
UmVmZXJlbmNlTWFwOjpXZWFrUmVmZXJlbmNlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OldlYWtS
ZWZlcmVuY2VNYXA6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWFrUmVmZXJlbmNlTWFwOjp2
aXNpdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydERvY3VtZW50VG9WOE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBl
cjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBl
cjo6Y29udmVydE5ld05vZGVUb1Y4T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERP
TVdyYXBwZXIuaDoKKwogMjAxMC0wMS0yMiAgQmVuIE11cmRvY2ggIDxiZW5tQGdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L0RPTURhdGEuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5oCmlu
ZGV4IDkzNDgwY2EuLjdmYTllN2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9N
RGF0YS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5oCkBAIC02Miw3ICs2Miw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBkZXJlZkRlbGF5ZWRPYmplY3Rz
KCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgc3RhdGljIHZvaWQg
cmVtb3ZlT2JqZWN0c0Zyb21XcmFwcGVyTWFwKERPTVdyYXBwZXJNYXA8VD4mIGRvbU1hcCk7Cisg
ICAgICAgIHN0YXRpYyB2b2lkIHJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1hcChBYnN0cmFjdFdl
YWtSZWZlcmVuY2VNYXA8VCwgdjg6Ok9iamVjdD4mIGRvbU1hcCk7CiAKICAgICAgICAgVGhyZWFk
SWRlbnRpZmllciBvd25pbmdUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX293bmluZ1RocmVhZDsg
fQogCkBAIC0xMTMsNyArMTEzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIH0KIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBET01EYXRhOjpyZW1vdmVPYmplY3RzRnJv
bVdyYXBwZXJNYXAoRE9NV3JhcHBlck1hcDxUPiYgZG9tTWFwKQorICAgIHZvaWQgRE9NRGF0YTo6
cmVtb3ZlT2JqZWN0c0Zyb21XcmFwcGVyTWFwKEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDxULCB2
ODo6T2JqZWN0PiYgZG9tTWFwKQogICAgIHsKICAgICAgICAgV3JhcHBlck1hcE9iamVjdFJlbW92
ZXI8VD4gcmVtb3ZlcjsKICAgICAgICAgZG9tTWFwLnZpc2l0KCZyZW1vdmVyKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcCBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvRE9NRGF0YVN0b3JlLmNwcAppbmRleCAzMzZmNjYyLi5lZjBmNGQ0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9ET01EYXRhU3RvcmUuY3BwCkBAIC0xNzQsNiArMTc0LDExMSBAQCB2b2lkIERPTURh
dGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4T2Jq
ZWN0LCB2b2lkKiBkbwogICAgIH0KIH0KIAordjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gRE9N
RGF0YVN0b3JlOjpJbnRydXNpdmVET01XcmFwcGVyTWFwOjpnZXQoTm9kZSogb2JqKQoreworICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KiB3cmFwcGVyID0gb2JqLT53cmFwcGVyKCk7Cisg
ICAgaWYgKCF3cmFwcGVyKQorICAgICAgICByZXR1cm4gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD4oKTsKKyAgICByZXR1cm4gKndyYXBwZXI7Cit9CisKK3ZvaWQgRE9NRGF0YVN0b3JlOjpJbnRy
dXNpdmVET01XcmFwcGVyTWFwOjpzZXQoTm9kZSogb2JqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0PiB3cmFwcGVyKQoreworICAgIEFTU0VSVChvYmopOworICAgIEFTU0VSVCghb2JqLT53cmFw
cGVyKCkpOworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KiBlbnRyeSA9IGFsbG9jYXRl
VGFibGVFbnRyeSgpOworICAgICplbnRyeSA9IHdyYXBwZXI7CisgICAgb2JqLT5zZXRXcmFwcGVy
KGVudHJ5KTsKKyAgICB3cmFwcGVyLk1ha2VXZWFrKG9iaiwgd2Vha1JlZmVyZW5jZUNhbGxiYWNr
KCkpOworfQorCitib29sIERPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6cmVt
b3ZlSWZQcmVzZW50KE5vZGUqIG9iaiwgdjg6OlBlcnNpc3RlbnQ8djg6OkRhdGE+IHZhbHVlKQor
eworICAgIEFTU0VSVChvYmopOworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KiBlbnRy
eSA9IG9iai0+d3JhcHBlcigpOworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoKmVudHJ5ICE9IHZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
b2JqLT5jbGVhcldyYXBwZXIoKTsKKyAgICBmcmVlVGFibGVFbnRyeShlbnRyeSk7CisgICAgdmFs
dWUuRGlzcG9zZSgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIERPTURhdGFTdG9yZTo6
SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6Y29udGFpbnMoTm9kZSogb2JqKQoreworICAgIHJldHVy
biBvYmotPndyYXBwZXIoKTsKK30KKwordm9pZCBET01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdy
YXBwZXJNYXA6OnZpc2l0KFZpc2l0b3IqIHZpc2l0b3IpCit7CisgICAgaWYgKCFtX2NodW5rcykK
KyAgICAgICAgcmV0dXJuOworICAgIHZpc2l0RW50cmllcyhtX2NodW5rcy0+bV9lbnRyaWVzLCBt
X2N1cnJlbnQsIHZpc2l0b3IpOworICAgIGZvciAoVGFibGVDaHVuayogY2h1bmsgPSBtX2NodW5r
cy0+bV9wcmV2aW91czsgY2h1bms7IGNodW5rID0gY2h1bmstPm1fcHJldmlvdXMpCisgICAgICAg
IHZpc2l0RW50cmllcyhjaHVuay0+bV9lbnRyaWVzLCBjaHVuay0+bV9lbnRyaWVzICsga05vRW50
cmllcywgdmlzaXRvcik7Cit9CisKK3ZvaWQgRE9NRGF0YVN0b3JlOjpJbnRydXNpdmVET01XcmFw
cGVyTWFwOjpjbGVhcigpCit7CisgICAgaWYgKCFtX2NodW5rcykKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNsZWFyRW50cmllcyhtX2NodW5rcy0+bV9lbnRyaWVzLCBtX2N1cnJlbnQpOworICAgIFRh
YmxlQ2h1bmsqIGxhc3QgPSBtX2NodW5rczsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBU
YWJsZUNodW5rKiBwcmV2aW91cyA9IGxhc3QtPm1fcHJldmlvdXM7CisgICAgICAgIGlmICghcHJl
dmlvdXMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVsZXRlIGxhc3Q7CisgICAgICAg
IGNsZWFyRW50cmllcyhwcmV2aW91cy0+bV9lbnRyaWVzLCBwcmV2aW91cy0+bV9lbnRyaWVzICsg
a05vRW50cmllcyk7CisgICAgICAgIGxhc3QgPSBwcmV2aW91czsKKyAgICB9CisgICAgbV9jaHVu
a3MgPSBsYXN0OworICAgIG1fY3VycmVudCA9IG1fY2h1bmtzLT5tX2VudHJpZXM7CisgICAgbV9s
YXN0ID0gbV9jdXJyZW50ICsga05vRW50cmllczsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4qIERPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6YWxsb2NhdGVUYWJs
ZUVudHJ5KCkKK3sKKyAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50ID09IG1fbGFzdCkpIHsKKyAg
ICAgICAgbV9jaHVua3MgPSBuZXcgVGFibGVDaHVuayhtX2NodW5rcyk7CisgICAgICAgIG1fY3Vy
cmVudCA9IG1fY2h1bmtzLT5tX2VudHJpZXM7CisgICAgICAgIG1fbGFzdCA9IG1fY3VycmVudCAr
IGtOb0VudHJpZXM7CisgICAgfQorICAgIEFTU0VSVCgobV9jaHVua3MtPm1fZW50cmllcyA8PSBt
X2N1cnJlbnQpICYmIChtX2N1cnJlbnQgPCBtX2xhc3QpKTsKKworI2lmbmRlZiBOREVCVUcKKyAg
ICAqbV9jdXJyZW50ID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4oKTsKKyNlbmRpZgorICAg
IHJldHVybiBtX2N1cnJlbnQrKzsKK30KKwordm9pZCBET01EYXRhU3RvcmU6OkludHJ1c2l2ZURP
TVdyYXBwZXJNYXA6OmZyZWVUYWJsZUVudHJ5KHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KiBl
bnRyeSkKK3sKKyAgICBBU1NFUlQoZW50cnkpOworICAgIEFTU0VSVChWOE5vZGU6OnRvTmF0aXZl
KCplbnRyeSkpOworICAgIEFTU0VSVChtX2N1cnJlbnQgPiBtX2NodW5rcy0+bV9lbnRyaWVzKTsK
KyAgICBtX2N1cnJlbnQtLTsKKyAgICBpZiAoZW50cnkgIT0gbV9jdXJyZW50KSB7CisgICAgICAg
ICplbnRyeSA9ICptX2N1cnJlbnQ7CisgICAgICAgIE5vZGUqIG5vZGUgPSBWOE5vZGU6OnRvTmF0
aXZlKCplbnRyeSk7CisgICAgICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgbm9kZS0+c2V0V3Jh
cHBlcihlbnRyeSk7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnQgPT0gbV9jaHVu
a3MtPm1fZW50cmllcykpIHsKKyAgICAgIFRhYmxlQ2h1bmsqIHRvRGVsZXRlID0gbV9jaHVua3M7
CisgICAgICBtX2NodW5rcyA9IHRvRGVsZXRlLT5tX3ByZXZpb3VzOworICAgICAgaWYgKG1fY2h1
bmtzKQorICAgICAgICAgIG1fY3VycmVudCA9IG1fbGFzdCA9IG1fY2h1bmtzLT5tX2VudHJpZXMg
KyBrTm9FbnRyaWVzOworICAgICAgZWxzZQorICAgICAgICAgIG1fY3VycmVudCA9IG1fbGFzdCA9
IDA7CisgICAgICBkZWxldGUgdG9EZWxldGU7CisgICAgfQorCisgICAgQVNTRVJUKCFtX2NodW5r
cyB8fCAoKG1fY2h1bmtzLT5tX2VudHJpZXMgPCBtX2N1cnJlbnQpICYmIChtX2N1cnJlbnQgPD0g
bV9sYXN0KSkpOworfQorCiAjaWYgRU5BQkxFKFNWRykKIAogdm9pZCBET01EYXRhU3RvcmU6Ondl
YWtTVkdFbGVtZW50SW5zdGFuY2VDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4
T2JqZWN0LCB2b2lkKiBkb21PYmplY3QpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0RPTURhdGFTdG9yZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAppbmRl
eCBlMDI3MDU4Li5iN2FmZjc3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURh
dGFTdG9yZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmgKQEAgLTMy
LDYgKzMyLDcgQEAKICNkZWZpbmUgRE9NRGF0YVN0b3JlX2gKIAogI2luY2x1ZGUgIkRPTU9iamVj
dHNJbmNsdWRlLmgiCisjaW5jbHVkZSAiVjhOb2RlLmgiCiAKICNpbmNsdWRlIDx2OC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC04Niw2ICs4Nyw2NCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgICAgICBET01EYXRhKiBtX2RvbURhdGE7CiAgICAgICAgIH07CiAKKyAgICAg
ICAgY2xhc3MgSW50cnVzaXZlRE9NV3JhcHBlck1hcCA6IHB1YmxpYyBBYnN0cmFjdFdlYWtSZWZl
cmVuY2VNYXA8Tm9kZSwgdjg6Ok9iamVjdD4geworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBJbnRydXNpdmVET01XcmFwcGVyTWFwKHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sgY2FsbGJh
Y2spCisgICAgICAgICAgICAgICAgOiBBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXA8Tm9kZSwgdjg6
Ok9iamVjdD4oY2FsbGJhY2spLAorICAgICAgICAgICAgICAgICAgbV9jaHVua3MoMCksCisgICAg
ICAgICAgICAgICAgICBtX2N1cnJlbnQoMCksCisgICAgICAgICAgICAgICAgICBtX2xhc3QoMCkg
eyB9CisKKyAgICAgICAgICAgIHZpcnR1YWwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gZ2V0
KE5vZGUqIG9iaik7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0KE5vZGUqIG9iaiwgdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcik7CisgICAgICAgICAgICB2aXJ0dWFsIGJv
b2wgY29udGFpbnMoTm9kZSogb2JqKTsKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdChW
aXNpdG9yKiB2aXNpdG9yKTsKKyAgICAgICAgICAgIHZpcnR1YWwgYm9vbCByZW1vdmVJZlByZXNl
bnQoTm9kZSoga2V5LCB2ODo6UGVyc2lzdGVudDx2ODo6RGF0YT4gdmFsdWUpOworICAgICAgICAg
ICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IHN0YXRpYyB2b2lkIGNsZWFyRW50cnkodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIGVudHJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBWOE5vZGU6OnRv
TmF0aXZlKCplbnRyeSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPndyYXBwZXIoKSA9
PSBlbnRyeSk7CisKKyAgICAgICAgICAgICAgICBub2RlLT5jbGVhcldyYXBwZXIoKTsKKyAgICAg
ICAgICAgICAgICBlbnRyeS0+RGlzcG9zZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzdGF0aWMgdm9pZCBjbGVhckVudHJpZXModjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIGZp
cnN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiogbGFzdCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KiBlbnRyeSA9IGZp
cnN0OyBlbnRyeSA8IGxhc3Q7IGVudHJ5KyspCisgICAgICAgICAgICAgICAgICAgIGNsZWFyRW50
cnkoZW50cnkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdGF0aWMgdm9pZCB2aXNp
dEVudHJpZXModjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIGZpcnN0LCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0PiogbGFzdCwgVmlzaXRvciogdmlzaXRvcikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KiBlbnRyeSA9IGZp
cnN0OyBlbnRyeSA8IGxhc3Q7IGVudHJ5KyspIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IFY4Tm9kZTo6dG9OYXRpdmUoKmVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPndyYXBwZXIoKSA9PSBlbnRyeSk7CisKKyAgICAgICAgICAgICAgICAgICAgdmlz
aXRvci0+dmlzaXRET01XcmFwcGVyKG5vZGUsICplbnRyeSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdGF0aWMgaW50IGNvbnN0IGtOb0VudHJpZXMg
PSAoMSA8PCAxMCkgLSAxOworCisgICAgICAgICAgICBzdHJ1Y3QgVGFibGVDaHVuayB7CisgICAg
ICAgICAgICAgICAgZXhwbGljaXQgVGFibGVDaHVuayhUYWJsZUNodW5rKiBwcmV2aW91cykgOiBt
X3ByZXZpb3VzKHByZXZpb3VzKSB7IH0KKyAgICAgICAgICAgICAgICBUYWJsZUNodW5rKiBjb25z
dCBtX3ByZXZpb3VzOworICAgICAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
IG1fZW50cmllc1trTm9FbnRyaWVzXTsKKyAgICAgICAgICAgIH07CisKKworICAgICAgICAgICAg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIGFsbG9jYXRlVGFibGVFbnRyeSgpOworICAgICAg
ICAgICAgdm9pZCBmcmVlVGFibGVFbnRyeSh2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiogZW50
cnkpOworCisgICAgICAgICAgICBUYWJsZUNodW5rKiBtX2NodW5rczsKKyAgICAgICAgICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KiBtX2N1cnJlbnQ7CisgICAgICAgICAgICB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0PiogbV9sYXN0OworICAgICAgICB9OworCiAgICAgICAgIERPTURh
dGFTdG9yZShET01EYXRhKik7CiAgICAgICAgIHZpcnR1YWwgfkRPTURhdGFTdG9yZSgpOwogCkBA
IC0xMDIsNyArMTYxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQqIGdl
dERPTVdyYXBwZXJNYXAoRE9NV3JhcHBlck1hcFR5cGUpOwogCi0gICAgICAgIEludGVybmFsRE9N
V3JhcHBlck1hcDxOb2RlPiYgZG9tTm9kZU1hcCgpIHsgcmV0dXJuICptX2RvbU5vZGVNYXA7IH0K
KyAgICAgICAgRE9NTm9kZU1hcHBpbmcmIGRvbU5vZGVNYXAoKSB7IHJldHVybiAqbV9kb21Ob2Rl
TWFwOyB9CiAgICAgICAgIEludGVybmFsRE9NV3JhcHBlck1hcDx2b2lkPiYgZG9tT2JqZWN0TWFw
KCkgeyByZXR1cm4gKm1fZG9tT2JqZWN0TWFwOyB9CiAgICAgICAgIEludGVybmFsRE9NV3JhcHBl
ck1hcDx2b2lkPiYgYWN0aXZlRG9tT2JqZWN0TWFwKCkgeyByZXR1cm4gKm1fYWN0aXZlRG9tT2Jq
ZWN0TWFwOyB9CiAjaWYgRU5BQkxFKFNWRykKQEAgLTEyMiw3ICsxODEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdlYWtTVkdPYmplY3RXaXRoQ29udGV4dENh
bGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdjhPYmplY3QsIHZvaWQqIGRvbU9iamVj
dCk7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIEludGVybmFsRE9NV3JhcHBlck1hcDxOb2Rl
PiogbV9kb21Ob2RlTWFwOworICAgICAgICBET01Ob2RlTWFwcGluZyogbV9kb21Ob2RlTWFwOwog
ICAgICAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8dm9pZD4qIG1fZG9tT2JqZWN0TWFwOwogICAg
ICAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8dm9pZD4qIG1fYWN0aXZlRG9tT2JqZWN0TWFwOwog
I2lmIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RP
TURhdGFTdG9yZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5j
cHAKaW5kZXggM2EwMmMwYi4uNzIyMDUxYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9TdGF0aWNET01EYXRhU3RvcmUuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGlj
RE9NRGF0YVN0b3JlLmNwcApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFN0YXRpY0RPTURhdGFTdG9yZTo6U3RhdGljRE9NRGF0YVN0b3JlKERPTURhdGEqIGRvbURhdGEp
CiAgICAgOiBET01EYXRhU3RvcmUoZG9tRGF0YSkKLSAgICAsIG1fc3RhdGljRG9tTm9kZU1hcChk
b21EYXRhLCAmRE9NRGF0YVN0b3JlOjp3ZWFrTm9kZUNhbGxiYWNrKQorICAgICwgbV9zdGF0aWNE
b21Ob2RlTWFwKCZET01EYXRhU3RvcmU6OndlYWtOb2RlQ2FsbGJhY2spCiAgICAgLCBtX3N0YXRp
Y0RvbU9iamVjdE1hcChkb21EYXRhLCAmRE9NRGF0YVN0b3JlOjp3ZWFrRE9NT2JqZWN0Q2FsbGJh
Y2spCiAgICAgLCBtX3N0YXRpY0FjdGl2ZURvbU9iamVjdE1hcChkb21EYXRhLCAmRE9NRGF0YVN0
b3JlOjp3ZWFrQWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2spCiAjaWYgRU5BQkxFKFNWRykKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmggYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5oCmluZGV4IDRjZDA1MTUuLjY0YTkwZTAg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmgKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuaApAQCAtNDgsNyArNDgs
NyBAQCBwdWJsaWM6CiAgICAgU3RhdGljRE9NRGF0YVN0b3JlKERPTURhdGEqKTsKIAogcHJpdmF0
ZToKLSAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8Tm9kZT4gbV9zdGF0aWNEb21Ob2RlTWFwOwor
ICAgIEludHJ1c2l2ZURPTVdyYXBwZXJNYXAgbV9zdGF0aWNEb21Ob2RlTWFwOwogICAgIEludGVy
bmFsRE9NV3JhcHBlck1hcDx2b2lkPiBtX3N0YXRpY0RvbU9iamVjdE1hcDsKICAgICBJbnRlcm5h
bERPTVdyYXBwZXJNYXA8dm9pZD4gbV9zdGF0aWNBY3RpdmVEb21PYmplY3RNYXA7CiAjaWYgRU5B
QkxFKFNWRykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5jcHAKaW5kZXggODNlMjY4NC4uZmEyZmJhMyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5jcHAKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOERPTU1hcC5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBlbmFibGVG
YXN0ZXJET01TdG9yZUFjY2VzcygpCiAgICAgZmFzdGVyRE9NU3RvcmVBY2Nlc3MgPSB0cnVlOwog
fQogCi1ET01XcmFwcGVyTWFwPE5vZGU+JiBnZXRET01Ob2RlTWFwKCkKK0RPTU5vZGVNYXBwaW5n
JiBnZXRET01Ob2RlTWFwKCkKIHsKICAgICByZXR1cm4gZ2V0RE9NRGF0YVN0b3JlKCkuZG9tTm9k
ZU1hcCgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCmluZGV4IGNkZGIwYTQuLmQ0MmRhYTQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4RE9NTWFwLmgKQEAgLTQxLDEyICs0MSwzNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgU1ZHRWxlbWVudEluc3RhbmNlOwogI2VuZGlmCiAKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgS2V5VHlwZSwgY2xhc3MgVmFsdWVUeXBlPiBjbGFzcyBBYnN0cmFjdFdlYWtSZWZl
cmVuY2VNYXAgeworICAgIHB1YmxpYzoKKyAgICAgICAgQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFw
KHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sgY2FsbGJhY2spIDogbV93ZWFrUmVmZXJlbmNlQ2Fs
bGJhY2soY2FsbGJhY2spIHsgfQorCisgICAgICAgIGNsYXNzIFZpc2l0b3IgeworICAgICAgICBw
dWJsaWM6CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRET01XcmFwcGVyKEtleVR5cGUq
IGtleSwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPiBvYmplY3QpID0gMDsKKyAgICAgICAgfTsK
KworICAgICAgICB2aXJ0dWFsIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4gZ2V0KEtleVR5cGUq
IG9iaikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0KEtleVR5cGUqIG9iaiwgdjg6OlBl
cnNpc3RlbnQ8VmFsdWVUeXBlPiB3cmFwcGVyKSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBj
b250YWlucyhLZXlUeXBlKiBvYmopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0KFZp
c2l0b3IqIHZpc2l0b3IpID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIHJlbW92ZUlmUHJlc2Vu
dChLZXlUeXBlKiBrZXksIHY4OjpQZXJzaXN0ZW50PHY4OjpEYXRhPiB2YWx1ZSkgPSAwOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7CisKKyAgICAgICAgdjg6OldlYWtSZWZlcmVu
Y2VDYWxsYmFjayB3ZWFrUmVmZXJlbmNlQ2FsbGJhY2soKSB7IHJldHVybiBtX3dlYWtSZWZlcmVu
Y2VDYWxsYmFjazsgfQorICAgIHByaXZhdGU6CisgICAgICAgIHY4OjpXZWFrUmVmZXJlbmNlQ2Fs
bGJhY2sgbV93ZWFrUmVmZXJlbmNlQ2FsbGJhY2s7CisgICAgfTsKKworICAgIHR5cGVkZWYgQWJz
dHJhY3RXZWFrUmVmZXJlbmNlTWFwPE5vZGUsIHY4OjpPYmplY3Q+IERPTU5vZGVNYXBwaW5nOwor
CiAgICAgLy8gQSB0YWJsZSBvZiB3cmFwcGVycyB3aXRoIHdlYWsgcG9pbnRlcnMuCiAgICAgLy8g
VGhpcyB0YWJsZSBhbGxvd3MgdXMgdG8gYXZvaWQgdHJhY2sgd3JhcHBlZCBvYmplY3RzIGZvciBk
ZWJ1Z2dpbmcKICAgICAvLyBhbmQgZm9yIGVuc3VyaW5nIHRoYXQgd2UgZG9uJ3QgZG91YmxlIHdy
YXAgdGhlIHNhbWUgb2JqZWN0LgotICAgIHRlbXBsYXRlPGNsYXNzIEtleVR5cGUsIGNsYXNzIFZh
bHVlVHlwZT4gY2xhc3MgV2Vha1JlZmVyZW5jZU1hcCB7CisgICAgdGVtcGxhdGU8Y2xhc3MgS2V5
VHlwZSwgY2xhc3MgVmFsdWVUeXBlPiBjbGFzcyBXZWFrUmVmZXJlbmNlTWFwIDogcHVibGljIEFi
c3RyYWN0V2Vha1JlZmVyZW5jZU1hcDxLZXlUeXBlLCBWYWx1ZVR5cGU+IHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIFdlYWtSZWZlcmVuY2VNYXAodjg6OldlYWtSZWZlcmVuY2VDYWxsYmFjayBjYWxs
YmFjaykgOiBtX3dlYWtSZWZlcmVuY2VDYWxsYmFjayhjYWxsYmFjaykgeyB9CisgICAgICAgIHR5
cGVkZWYgQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwPEtleVR5cGUsIFZhbHVlVHlwZT4gUGFyZW50
OworICAgICAgICBXZWFrUmVmZXJlbmNlTWFwKHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sgY2Fs
bGJhY2spIDogUGFyZW50KGNhbGxiYWNrKSB7IH0KICAgICAgICAgdmlydHVhbCB+V2Vha1JlZmVy
ZW5jZU1hcCgpCiAgICAgICAgIHsKICAgICAjaWZuZGVmIE5ERUJVRwpAQCAtNjUsNyArODksNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXQoS2V5VHlwZSog
b2JqLCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IHdyYXBwZXIpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIEFTU0VSVCghbV9tYXAuY29udGFpbnMob2JqKSk7Ci0gICAgICAgICAgICB3cmFwcGVy
Lk1ha2VXZWFrKG9iaiwgbV93ZWFrUmVmZXJlbmNlQ2FsbGJhY2spOworICAgICAgICAgICAgd3Jh
cHBlci5NYWtlV2VhayhvYmosIFBhcmVudDo6d2Vha1JlZmVyZW5jZUNhbGxiYWNrKCkpOwogICAg
ICAgICAgICAgbV9tYXAuc2V0KG9iaiwgKndyYXBwZXIpOwogICAgICAgICB9CiAKQEAgLTk5LDE0
ICsxMjMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgYm9vbCBjb250YWlucyhL
ZXlUeXBlKiBvYmopIHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKG9iaik7IH0KIAotICAgICAgICBj
bGFzcyBWaXNpdG9yIHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgdmlydHVhbCB2b2lk
IHZpc2l0RE9NV3JhcHBlcihLZXlUeXBlKiwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPikgPSAw
OwotICAgICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgICAgICB2aXJ0dWFsIH5WaXNpdG9yKCkgeyB9
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0KFZpc2l0b3IqIHZpc2l0
b3IpCisgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdCh0eXBlbmFtZSBQYXJlbnQ6OlZpc2l0b3Iq
IHZpc2l0b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8S2V5VHlw
ZSosIFZhbHVlVHlwZSo+OjppdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7CiAgICAgICAgICAg
ICBmb3IgKDsgaXQgIT0gbV9tYXAuZW5kKCk7ICsraXQpCkBAIC0xMzksNyArMTU2LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIH07CiAKICAgICAvLyBBIG1hcCBmcm9tIERPTSBub2RlIHRv
IGl0cyBKUyB3cmFwcGVyLgotICAgIERPTVdyYXBwZXJNYXA8Tm9kZT4mIGdldERPTU5vZGVNYXAo
KTsKKyAgICBET01Ob2RlTWFwcGluZyYgZ2V0RE9NTm9kZU1hcCgpOwogICAgIHZvaWQgdmlzaXRE
T01Ob2Rlc0luQ3VycmVudFRocmVhZChET01XcmFwcGVyTWFwPE5vZGU+OjpWaXNpdG9yKik7CiAK
ICAgICAvLyBBIG1hcCBmcm9tIGEgRE9NIG9iamVjdCAobm9uLW5vZGUpIHRvIGl0cyBKUyB3cmFw
cGVyLiBUaGlzIG1hcCBkb2VzIG5vdCBjb250YWluIHRoZSBET00gb2JqZWN0cyB3aGljaCBjYW4g
aGF2ZSBwZW5kaW5nIGFjdGl2aXR5IChhY3RpdmUgZG9tIG9iamVjdHMpLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTVdyYXBwZXIuY3BwCmluZGV4IDk2ZDA2MGQuLjA2ZDgwNDEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV3JhcHBlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJWOERPTVdy
YXBwZXIuaCIKIAogI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5j
bHVkZSAiRE9NRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiRE9NT2JqZWN0c0luY2x1ZGUuaCIKICNp
bmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50Lmgi
CkBAIC0xMDQ4LDcgKzEwNDksNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0RG9jdW1lbnRUb1Y4T2JqZWN0KERvY3VtZW50KiBkb2N1bWVudAogICAgIGlmIChw
cm94eSkKICAgICAgICAgcHJveHktPndpbmRvd1NoZWxsKCktPmluaXRDb250ZXh0SWZOZWVkZWQo
KTsKIAotICAgIERPTVdyYXBwZXJNYXA8Tm9kZT4mIGRvbU5vZGVNYXAgPSBnZXRET01Ob2RlTWFw
KCk7CisgICAgRE9NTm9kZU1hcHBpbmcmIGRvbU5vZGVNYXAgPSBnZXRET01Ob2RlTWFwKCk7CiAg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZG9tTm9kZU1hcC5nZXQoZG9jdW1l
bnQpOwogICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGNvbnZlcnRO
ZXdOb2RlVG9WOE9iamVjdChkb2N1bWVudCwgcHJveHksIGRvbU5vZGVNYXApOwpAQCAtMTA1Niwy
NSArMTA1NywzOSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0
RG9jdW1lbnRUb1Y4T2JqZWN0KERvY3VtZW50KiBkb2N1bWVudAogICAgIHJldHVybiB3cmFwcGVy
OwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldFdyYXBwZXIoTm9kZSogbm9k
ZSkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgVjhJc29sYXRlZENv
bnRleHQqIGNvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpOworICAgIGlm
IChMSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
KiB3cmFwcGVyID0gbm9kZS0+d3JhcHBlcigpOworICAgICAgICBpZiAoIXdyYXBwZXIpCisgICAg
ICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgICAgIHJldHVybiAq
d3JhcHBlcjsKKyAgICB9CisKKyAgICBET01Ob2RlTWFwcGluZyYgZG9tTm9kZU1hcCA9IGNvbnRl
eHQtPndvcmxkKCktPmRvbURhdGFTdG9yZSgpLT5kb21Ob2RlTWFwKCk7CisgICAgcmV0dXJuIGRv
bU5vZGVNYXAuZ2V0KG5vZGUpOworfQorCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFw
cGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwogICAgIAorICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB3cmFwcGVyID0gZ2V0V3JhcHBlcihub2RlKTsKKyAgICBpZiAoIXdyYXBwZXIuSXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gd3JhcHBlcjsKKwogICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IG5vZGUtPmRvY3VtZW50KCk7CiAgICAgaWYgKG5vZGUgPT0gZG9jdW1lbnQpCiAgICAgICAgIHJl
dHVybiBjb252ZXJ0RG9jdW1lbnRUb1Y4T2JqZWN0KGRvY3VtZW50KTsKLSAgICAKLSAgICBET01X
cmFwcGVyTWFwPE5vZGU+JiBkb21Ob2RlTWFwID0gZ2V0RE9NTm9kZU1hcCgpOwotICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGRvbU5vZGVNYXAuZ2V0KG5vZGUpOwotICAgIGlm
ICh3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGNvbnZlcnROZXdOb2RlVG9WOE9i
amVjdChub2RlLCAwLCBkb21Ob2RlTWFwKTsKLSAgICAKLSAgICByZXR1cm4gd3JhcHBlcjsKKwor
ICAgIHJldHVybiBjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3Qobm9kZSwgMCwgZ2V0RE9NTm9kZU1h
cCgpKTsKIH0KICAgICAKIC8vIENhbGxlciBjaGVja3Mgbm9kZSBpcyBub3QgbnVsbC4KLXY4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnROZXdOb2RlVG9WOE9iamVjdChO
b2RlKiBub2RlLCBWOFByb3h5KiBwcm94eSwgRE9NV3JhcHBlck1hcDxOb2RlPiYgZG9tTm9kZU1h
cCkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnROZXdOb2RlVG9W
OE9iamVjdChOb2RlKiBub2RlLCBWOFByb3h5KiBwcm94eSwgRE9NTm9kZU1hcHBpbmcmIGRvbU5v
ZGVNYXApCiB7CiAgICAgaWYgKCFwcm94eSAmJiBub2RlLT5kb2N1bWVudCgpKQogICAgICAgICBw
cm94eSA9IFY4UHJveHk6OnJldHJpZXZlKG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKaW5kZXggYmRmNjU0Ny4uMTNmMDJiZCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5oCkBAIC0xNTAsNyArMTUwLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnROZXdOb2RlVG9WOE9iamVjdChub2RlLCAw
LCBnZXRET01Ob2RlTWFwKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3QoTm9kZSosIFY4UHJveHkqLCBE
T01XcmFwcGVyTWFwPE5vZGU+Jik7CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gY29udmVydE5ld05vZGVUb1Y4T2JqZWN0KE5vZGUqLCBWOFByb3h5KiwgRE9NTm9kZU1hcHBp
bmcmKTsKIAogICAgICAgICBzdGF0aWMgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGRvbVdy
YXBwZXJUeXBlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47372</attachid>
            <date>2010-01-25 15:11:47 -0800</date>
            <delta_ts>2010-01-26 07:02:15 -0800</delta_ts>
            <desc>Refactoring underlying storage into ChunkedTable</desc>
            <filename>bug-33957-20100126021145.patch</filename>
            <type>text/plain</type>
            <size>19150</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzVmNjdlYi4uYTkwYzVjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxMC0wMS0yMSAgQW50b24gTXVoaW4g
IDxhbnRvbm1AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnQgTm9kZSBtYXAgaW4gaW50cnVzaXZlIHdheQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM5NTcKKworICAgICAg
ICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGEu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGE6OnJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1h
cCk6CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6Z2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6c2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6
cmVtb3ZlSWZQcmVzZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVz
aXZlRE9NV3JhcHBlck1hcDo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0
b3JlOjpJbnRydXNpdmVET01XcmFwcGVyTWFwOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpE
T01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJNYXA6OmNsZWFyKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6YWxsb2NhdGVUYWJs
ZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3Jh
cHBlck1hcDo6ZnJlZVRhYmxlRW50cnkpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGFT
dG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjpJbnRydXNpdmVET01XcmFw
cGVyTWFwOjpJbnRydXNpdmVET01XcmFwcGVyTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURh
dGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6Y2xlYXJFbnRyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpET01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJNYXA6OmNsZWFyRW50cmll
cyk6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJN
YXA6OnZpc2l0RW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6OkludHJ1
c2l2ZURPTVdyYXBwZXJNYXA6OlRhYmxlQ2h1bms6OlRhYmxlQ2h1bmspOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NRGF0YVN0b3JlOjpkb21Ob2RlTWFwKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9T
dGF0aWNET01EYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljRE9NRGF0YVN0
b3JlOjpTdGF0aWNET01EYXRhU3RvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1N0YXRpY0RP
TURhdGFTdG9yZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmdldERPTU5vZGVNYXApOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9N
TWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXA6OkFic3Ry
YWN0V2Vha1JlZmVyZW5jZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdFdlYWtSZWZl
cmVuY2VNYXA6OndlYWtSZWZlcmVuY2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpXZWFr
UmVmZXJlbmNlTWFwOjpXZWFrUmVmZXJlbmNlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OldlYWtS
ZWZlcmVuY2VNYXA6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWFrUmVmZXJlbmNlTWFwOjp2
aXNpdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydERvY3VtZW50VG9WOE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBl
cjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBl
cjo6Y29udmVydE5ld05vZGVUb1Y4T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERP
TVdyYXBwZXIuaDoKKwogMjAxMC0wMS0yNCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RP
TURhdGEuaAppbmRleCA5MzQ4MGNhLi43ZmE5ZTdkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L0RPTURhdGEuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGEuaApAQCAt
NjIsNyArNjIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGVyZWZEZWxh
eWVkT2JqZWN0cygpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0
YXRpYyB2b2lkIHJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1hcChET01XcmFwcGVyTWFwPFQ+JiBk
b21NYXApOworICAgICAgICBzdGF0aWMgdm9pZCByZW1vdmVPYmplY3RzRnJvbVdyYXBwZXJNYXAo
QWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwPFQsIHY4OjpPYmplY3Q+JiBkb21NYXApOwogCiAgICAg
ICAgIFRocmVhZElkZW50aWZpZXIgb3duaW5nVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9vd25p
bmdUaHJlYWQ7IH0KIApAQCAtMTEzLDcgKzExMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgRE9NRGF0YTo6cmVtb3Zl
T2JqZWN0c0Zyb21XcmFwcGVyTWFwKERPTVdyYXBwZXJNYXA8VD4mIGRvbU1hcCkKKyAgICB2b2lk
IERPTURhdGE6OnJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1hcChBYnN0cmFjdFdlYWtSZWZlcmVu
Y2VNYXA8VCwgdjg6Ok9iamVjdD4mIGRvbU1hcCkKICAgICB7CiAgICAgICAgIFdyYXBwZXJNYXBP
YmplY3RSZW1vdmVyPFQ+IHJlbW92ZXI7CiAgICAgICAgIGRvbU1hcC52aXNpdCgmcmVtb3Zlcik7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAKaW5kZXggMzM2ZjY2Mi4uZTE4MWViYyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcApAQCAtMTc0LDYgKzE3NCwyMCBAQCB2
b2lkIERPTURhdGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFs
dWU+IHY4T2JqZWN0LCB2b2lkKiBkbwogICAgIH0KIH0KIAorYm9vbCBET01EYXRhU3RvcmU6Oklu
dHJ1c2l2ZURPTVdyYXBwZXJNYXA6OnJlbW92ZUlmUHJlc2VudChOb2RlKiBvYmosIHY4OjpQZXJz
aXN0ZW50PHY4OjpEYXRhPiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQob2JqKTsKKyAgICB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0PiogZW50cnkgPSBvYmotPndyYXBwZXIoKTsKKyAgICBpZiAoIWVu
dHJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCplbnRyeSAhPSB2YWx1ZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIG9iai0+Y2xlYXJXcmFwcGVyKCk7CisgICAgbV90YWJs
ZS5yZW1vdmUoZW50cnkpOworICAgIHZhbHVlLkRpc3Bvc2UoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwogI2lmIEVOQUJMRShTVkcpCiAKIHZvaWQgRE9NRGF0YVN0b3JlOjp3ZWFrU1ZHRWxlbWVu
dEluc3RhbmNlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2OE9iamVjdCwgdm9p
ZCogZG9tT2JqZWN0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3Rv
cmUuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmgKaW5kZXggZTAyNzA1OC4u
Y2ZiOWMyYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oCkBAIC0zMiw2ICszMiw3IEBA
CiAjZGVmaW5lIERPTURhdGFTdG9yZV9oCiAKICNpbmNsdWRlICJET01PYmplY3RzSW5jbHVkZS5o
IgorI2luY2x1ZGUgIlY4Tm9kZS5oIgogCiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgpAQCAtNDksNiArNTAsOTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
dHlwZWRlZiBXVEY6OlZlY3RvcjxET01EYXRhU3RvcmUqPiBET01EYXRhTGlzdDsKIAorICAgIHRl
bXBsYXRlIDxjbGFzcyBULCBpbnQgQ0hVTktfU0laRSwgY2xhc3MgVHJhaXRzPgorICAgIGNsYXNz
IENodW5rZWRUYWJsZSB7CisgICAgICBwdWJsaWM6CisgICAgICAgIENodW5rZWRUYWJsZSgpIDog
bV9jaHVua3MoMCksIG1fY3VycmVudCgwKSwgbV9sYXN0KDApIHsgfQorCisgICAgICAgIFQqIGFk
ZChUIGVsZW1lbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gbV9s
YXN0KSB7CisgICAgICAgICAgICAgICAgbV9jaHVua3MgPSBuZXcgQ2h1bmsobV9jaHVua3MpOwor
ICAgICAgICAgICAgICAgIG1fY3VycmVudCA9IG1fY2h1bmtzLT5tX2VudHJpZXM7CisgICAgICAg
ICAgICAgICAgbV9sYXN0ID0gbV9jdXJyZW50ICsgQ0hVTktfU0laRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIEFTU0VSVCgobV9jaHVua3MtPm1fZW50cmllcyA8PSBtX2N1cnJlbnQpICYm
IChtX2N1cnJlbnQgPCBtX2xhc3QpKTsKKyAgICAgICAgICAgIFQqIHAgPSBtX2N1cnJlbnQrKzsK
KyAgICAgICAgICAgICpwID0gZWxlbWVudDsKKyAgICAgICAgICAgIHJldHVybiBwOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCByZW1vdmUoVCogZWxlbWVudCkKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKGVsZW1lbnQpOworICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudCA+IG1f
Y2h1bmtzLT5tX2VudHJpZXMpOworICAgICAgICAgICAgbV9jdXJyZW50LS07CisgICAgICAgICAg
ICBpZiAoZWxlbWVudCAhPSBtX2N1cnJlbnQpCisgICAgICAgICAgICAgICAgVHJhaXRzOjptb3Zl
KGVsZW1lbnQsIG1fY3VycmVudCk7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09IG1fY2h1
bmtzLT5tX2VudHJpZXMpIHsKKyAgICAgICAgICAgICAgICBDaHVuayogdG9EZWxldGUgPSBtX2No
dW5rczsKKyAgICAgICAgICAgICAgICBtX2NodW5rcyA9IHRvRGVsZXRlLT5tX3ByZXZpb3VzOwor
ICAgICAgICAgICAgICAgIG1fY3VycmVudCA9IG1fbGFzdCA9IG1fY2h1bmtzID8gbV9jaHVua3Mt
Pm1fZW50cmllcyArIENIVU5LX1NJWkUgOiAwOworICAgICAgICAgICAgICAgIGRlbGV0ZSB0b0Rl
bGV0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVCghbV9jaHVua3MgfHwgKCht
X2NodW5rcy0+bV9lbnRyaWVzIDwgbV9jdXJyZW50KSAmJiAobV9jdXJyZW50IDw9IG1fbGFzdCkp
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoIW1fY2h1bmtzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgY2xlYXJFbnRyaWVzKG1fY2h1bmtzLT5tX2VudHJpZXMsIG1fY3VycmVudCk7CisgICAgICAg
ICAgICBDaHVuayogbGFzdCA9IG1fY2h1bmtzOworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgICAgICAgICBDaHVuayogcHJldmlvdXMgPSBsYXN0LT5tX3ByZXZpb3VzOworICAg
ICAgICAgICAgICAgIGlmICghcHJldmlvdXMpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGRlbGV0ZSBsYXN0OworICAgICAgICAgICAgICAgIGNsZWFyRW50cmll
cyhwcmV2aW91cy0+bV9lbnRyaWVzLCBwcmV2aW91cy0+bV9lbnRyaWVzICsgQ0hVTktfU0laRSk7
CisgICAgICAgICAgICAgICAgbGFzdCA9IHByZXZpb3VzOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBtX2NodW5rcyA9IGxhc3Q7CisgICAgICAgICAgICBtX2N1cnJlbnQgPSBtX2NodW5r
cy0+bV9lbnRyaWVzOworICAgICAgICAgICAgbV9sYXN0ID0gbV9jdXJyZW50ICsgQ0hVTktfU0la
RTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgdmlzaXQodHlwZW5hbWUgVHJhaXRzOjpWaXNp
dG9yKiB2aXNpdG9yKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fY2h1bmtzKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgdmlzaXRFbnRyaWVzKG1fY2h1bmtz
LT5tX2VudHJpZXMsIG1fY3VycmVudCwgdmlzaXRvcik7CisgICAgICAgICAgICBmb3IgKENodW5r
KiBjaHVuayA9IG1fY2h1bmtzLT5tX3ByZXZpb3VzOyBjaHVuazsgY2h1bmsgPSBjaHVuay0+bV9w
cmV2aW91cykKKyAgICAgICAgICAgICAgICB2aXNpdEVudHJpZXMoY2h1bmstPm1fZW50cmllcywg
Y2h1bmstPm1fZW50cmllcyArIENIVU5LX1NJWkUsIHZpc2l0b3IpOworICAgICAgICB9CisKKyAg
ICAgIHByaXZhdGU6CisgICAgICAgIHN0cnVjdCBDaHVuayB7CisgICAgICAgICAgICBleHBsaWNp
dCBDaHVuayhDaHVuayogcHJldmlvdXMpIDogbV9wcmV2aW91cyhwcmV2aW91cykgeyB9CisgICAg
ICAgICAgICBDaHVuayogY29uc3QgbV9wcmV2aW91czsKKyAgICAgICAgICAgIFQgbV9lbnRyaWVz
W0NIVU5LX1NJWkVdOworICAgICAgICB9OworCisgICAgICAgIHN0YXRpYyB2b2lkIGNsZWFyRW50
cmllcyhUKiBmaXJzdCwgVCogbGFzdCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChUKiBl
bnRyeSA9IGZpcnN0OyBlbnRyeSA8IGxhc3Q7IGVudHJ5KyspCisgICAgICAgICAgICAgICAgVHJh
aXRzOjpjbGVhcihlbnRyeSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCB2aXNp
dEVudHJpZXMoVCogZmlyc3QsIFQqIGxhc3QsIHR5cGVuYW1lIFRyYWl0czo6VmlzaXRvciogdmlz
aXRvcikKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChUKiBlbnRyeSA9IGZpcnN0OyBlbnRy
eSA8IGxhc3Q7IGVudHJ5KyspCisgICAgICAgICAgICAgICAgVHJhaXRzOjp2aXNpdChlbnRyeSwg
dmlzaXRvcik7CisgICAgICAgIH0KKworICAgICAgICBDaHVuayogbV9jaHVua3M7CisgICAgICAg
IFQqIG1fY3VycmVudDsKKyAgICAgICAgVCogbV9sYXN0OworICAgIH07CisKICAgICAvLyBET01E
YXRhU3RvcmUKICAgICAvLwogICAgIC8vIERPTURhdGFTdG9yZSBpcyB0aGUgYmFja2luZyBzdG9y
ZSB0aGF0IGhvbGRzIHRoZSBtYXBzIGJldHdlZW4gRE9NIG9iamVjdHMKQEAgLTg2LDYgKzE3Niw4
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBET01EYXRhKiBtX2RvbURhdGE7
CiAgICAgICAgIH07CiAKKyAgICAgICAgY2xhc3MgSW50cnVzaXZlRE9NV3JhcHBlck1hcCA6IHB1
YmxpYyBBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXA8Tm9kZSwgdjg6Ok9iamVjdD4geworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBJbnRydXNpdmVET01XcmFwcGVyTWFwKHY4OjpXZWFrUmVm
ZXJlbmNlQ2FsbGJhY2sgY2FsbGJhY2spCisgICAgICAgICAgICAgICAgOiBBYnN0cmFjdFdlYWtS
ZWZlcmVuY2VNYXA8Tm9kZSwgdjg6Ok9iamVjdD4oY2FsbGJhY2spLAorICAgICAgICAgICAgICAg
ICAgbV90YWJsZSgpIHsgfQorCisgICAgICAgICAgICB2aXJ0dWFsIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+IGdldChOb2RlKiBvYmopCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIHdyYXBwZXIgPSBvYmotPndyYXBwZXIoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlciA/ICp3cmFwcGVyIDogdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD4oKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmlydHVhbCB2b2lk
IHNldChOb2RlKiBvYmosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9iaik7CisgICAgICAgICAgICAgICAg
QVNTRVJUKCFvYmotPndyYXBwZXIoKSk7CisgICAgICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD4qIGVudHJ5ID0gbV90YWJsZS5hZGQod3JhcHBlcik7CisgICAgICAgICAgICAg
ICAgb2JqLT5zZXRXcmFwcGVyKGVudHJ5KTsKKyAgICAgICAgICAgICAgICB3cmFwcGVyLk1ha2VX
ZWFrKG9iaiwgd2Vha1JlZmVyZW5jZUNhbGxiYWNrKCkpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnMoTm9kZSogb2JqKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBvYmotPndyYXBwZXIoKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0KFZpc2l0b3IqIHZpc2l0b3IpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbV90YWJsZS52aXNpdCh2aXNpdG9yKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdmlydHVhbCBib29sIHJlbW92ZUlmUHJlc2VudChOb2RlKiBr
ZXksIHY4OjpQZXJzaXN0ZW50PHY4OjpEYXRhPiB2YWx1ZSk7CisKKyAgICAgICAgICAgIHZpcnR1
YWwgdm9pZCBjbGVhcigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV90YWJsZS5j
bGVhcigpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBz
dGF0aWMgaW50IGNvbnN0IGtOb0VudHJpZXMgPSAoMSA8PCAxMCkgLSAxOworCisgICAgICAgICAg
ICBzdHJ1Y3QgQ2h1bmtlZFRhYmxlVHJhaXRzIHsKKyAgICAgICAgICAgICAgICB0eXBlZGVmIElu
dHJ1c2l2ZURPTVdyYXBwZXJNYXA6OlZpc2l0b3IgVmlzaXRvcjsKKworICAgICAgICAgICAgICAg
IHN0YXRpYyB2b2lkIG1vdmUodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIHRhcmdldCwgdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIHNvdXJjZSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICp0YXJnZXQgPSAqc291cmNlOworICAgICAgICAgICAgICAgICAgICBO
b2RlKiBub2RlID0gVjhOb2RlOjp0b05hdGl2ZSgqdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRXcmFwcGVyKHRh
cmdldCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQg
Y2xlYXIodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIGVudHJ5KQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IFY4Tm9kZTo6dG9OYXRpdmUoKmVu
dHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPndyYXBwZXIoKSA9PSBlbnRy
eSk7CisKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJXcmFwcGVyKCk7CisgICAgICAg
ICAgICAgICAgICAgIGVudHJ5LT5EaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXQodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4q
IGVudHJ5LCBWaXNpdG9yKiB2aXNpdG9yKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IFY4Tm9kZTo6dG9OYXRpdmUoKmVudHJ5KTsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPndyYXBwZXIoKSA9PSBlbnRyeSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgdmlzaXRvci0+dmlzaXRET01XcmFwcGVyKG5vZGUsICplbnRyeSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgdHlwZWRlZiBDaHVu
a2VkVGFibGU8djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4sIGtOb0VudHJpZXMsIENodW5rZWRU
YWJsZVRyYWl0cz4gVGFibGU7CisgICAgICAgICAgICBUYWJsZSBtX3RhYmxlOworICAgICAgICB9
OworCiAgICAgICAgIERPTURhdGFTdG9yZShET01EYXRhKik7CiAgICAgICAgIHZpcnR1YWwgfkRP
TURhdGFTdG9yZSgpOwogCkBAIC0xMDIsNyArMjY2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIHZvaWQqIGdldERPTVdyYXBwZXJNYXAoRE9NV3JhcHBlck1hcFR5cGUpOwogCi0g
ICAgICAgIEludGVybmFsRE9NV3JhcHBlck1hcDxOb2RlPiYgZG9tTm9kZU1hcCgpIHsgcmV0dXJu
ICptX2RvbU5vZGVNYXA7IH0KKyAgICAgICAgRE9NTm9kZU1hcHBpbmcmIGRvbU5vZGVNYXAoKSB7
IHJldHVybiAqbV9kb21Ob2RlTWFwOyB9CiAgICAgICAgIEludGVybmFsRE9NV3JhcHBlck1hcDx2
b2lkPiYgZG9tT2JqZWN0TWFwKCkgeyByZXR1cm4gKm1fZG9tT2JqZWN0TWFwOyB9CiAgICAgICAg
IEludGVybmFsRE9NV3JhcHBlck1hcDx2b2lkPiYgYWN0aXZlRG9tT2JqZWN0TWFwKCkgeyByZXR1
cm4gKm1fYWN0aXZlRG9tT2JqZWN0TWFwOyB9CiAjaWYgRU5BQkxFKFNWRykKQEAgLTEyMiw3ICsy
ODYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdlYWtTVkdP
YmplY3RXaXRoQ29udGV4dENhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdjhPYmpl
Y3QsIHZvaWQqIGRvbU9iamVjdCk7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIEludGVybmFs
RE9NV3JhcHBlck1hcDxOb2RlPiogbV9kb21Ob2RlTWFwOworICAgICAgICBET01Ob2RlTWFwcGlu
ZyogbV9kb21Ob2RlTWFwOwogICAgICAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8dm9pZD4qIG1f
ZG9tT2JqZWN0TWFwOwogICAgICAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8dm9pZD4qIG1fYWN0
aXZlRG9tT2JqZWN0TWFwOwogI2lmIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0
YXRpY0RPTURhdGFTdG9yZS5jcHAKaW5kZXggM2EwMmMwYi4uNzIyMDUxYiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuY3BwCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmNwcApAQCAtMzUsNyArMzUsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFN0YXRpY0RPTURhdGFTdG9yZTo6U3RhdGljRE9NRGF0YVN0b3Jl
KERPTURhdGEqIGRvbURhdGEpCiAgICAgOiBET01EYXRhU3RvcmUoZG9tRGF0YSkKLSAgICAsIG1f
c3RhdGljRG9tTm9kZU1hcChkb21EYXRhLCAmRE9NRGF0YVN0b3JlOjp3ZWFrTm9kZUNhbGxiYWNr
KQorICAgICwgbV9zdGF0aWNEb21Ob2RlTWFwKCZET01EYXRhU3RvcmU6OndlYWtOb2RlQ2FsbGJh
Y2spCiAgICAgLCBtX3N0YXRpY0RvbU9iamVjdE1hcChkb21EYXRhLCAmRE9NRGF0YVN0b3JlOjp3
ZWFrRE9NT2JqZWN0Q2FsbGJhY2spCiAgICAgLCBtX3N0YXRpY0FjdGl2ZURvbU9iamVjdE1hcChk
b21EYXRhLCAmRE9NRGF0YVN0b3JlOjp3ZWFrQWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2spCiAjaWYg
RU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0
YVN0b3JlLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5oCmluZGV4
IDRjZDA1MTUuLjY0YTkwZTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGlj
RE9NRGF0YVN0b3JlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3Rv
cmUuaApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgU3RhdGljRE9NRGF0YVN0b3JlKERP
TURhdGEqKTsKIAogcHJpdmF0ZToKLSAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8Tm9kZT4gbV9z
dGF0aWNEb21Ob2RlTWFwOworICAgIEludHJ1c2l2ZURPTVdyYXBwZXJNYXAgbV9zdGF0aWNEb21O
b2RlTWFwOwogICAgIEludGVybmFsRE9NV3JhcHBlck1hcDx2b2lkPiBtX3N0YXRpY0RvbU9iamVj
dE1hcDsKICAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8dm9pZD4gbV9zdGF0aWNBY3RpdmVEb21P
YmplY3RNYXA7CiAjaWYgRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01NYXAuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5jcHAKaW5kZXgg
ODNlMjY4NC4uZmEyZmJhMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1h
cC5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5jcHAKQEAgLTY1LDcgKzY1
LDcgQEAgdm9pZCBlbmFibGVGYXN0ZXJET01TdG9yZUFjY2VzcygpCiAgICAgZmFzdGVyRE9NU3Rv
cmVBY2Nlc3MgPSB0cnVlOwogfQogCi1ET01XcmFwcGVyTWFwPE5vZGU+JiBnZXRET01Ob2RlTWFw
KCkKK0RPTU5vZGVNYXBwaW5nJiBnZXRET01Ob2RlTWFwKCkKIHsKICAgICByZXR1cm4gZ2V0RE9N
RGF0YVN0b3JlKCkuZG9tTm9kZU1hcCgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTU1hcC5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCmluZGV4IGNk
ZGIwYTQuLmQ0MmRhYTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAu
aAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgKQEAgLTQxLDEyICs0MSwzNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU1ZHRWxlbWVudEluc3RhbmNlOwogI2Vu
ZGlmCiAKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgS2V5VHlwZSwgY2xhc3MgVmFsdWVUeXBlPiBjbGFz
cyBBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXAgeworICAgIHB1YmxpYzoKKyAgICAgICAgQWJzdHJh
Y3RXZWFrUmVmZXJlbmNlTWFwKHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sgY2FsbGJhY2spIDog
bV93ZWFrUmVmZXJlbmNlQ2FsbGJhY2soY2FsbGJhY2spIHsgfQorCisgICAgICAgIGNsYXNzIFZp
c2l0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRE
T01XcmFwcGVyKEtleVR5cGUqIGtleSwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPiBvYmplY3Qp
ID0gMDsKKyAgICAgICAgfTsKKworICAgICAgICB2aXJ0dWFsIHY4OjpQZXJzaXN0ZW50PFZhbHVl
VHlwZT4gZ2V0KEtleVR5cGUqIG9iaikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0KEtl
eVR5cGUqIG9iaiwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPiB3cmFwcGVyKSA9IDA7CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBjb250YWlucyhLZXlUeXBlKiBvYmopID0gMDsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHZpc2l0KFZpc2l0b3IqIHZpc2l0b3IpID0gMDsKKyAgICAgICAgdmlydHVhbCBi
b29sIHJlbW92ZUlmUHJlc2VudChLZXlUeXBlKiBrZXksIHY4OjpQZXJzaXN0ZW50PHY4OjpEYXRh
PiB2YWx1ZSkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7CisKKyAgICAg
ICAgdjg6OldlYWtSZWZlcmVuY2VDYWxsYmFjayB3ZWFrUmVmZXJlbmNlQ2FsbGJhY2soKSB7IHJl
dHVybiBtX3dlYWtSZWZlcmVuY2VDYWxsYmFjazsgfQorICAgIHByaXZhdGU6CisgICAgICAgIHY4
OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sgbV93ZWFrUmVmZXJlbmNlQ2FsbGJhY2s7CisgICAgfTsK
KworICAgIHR5cGVkZWYgQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwPE5vZGUsIHY4OjpPYmplY3Q+
IERPTU5vZGVNYXBwaW5nOworCiAgICAgLy8gQSB0YWJsZSBvZiB3cmFwcGVycyB3aXRoIHdlYWsg
cG9pbnRlcnMuCiAgICAgLy8gVGhpcyB0YWJsZSBhbGxvd3MgdXMgdG8gYXZvaWQgdHJhY2sgd3Jh
cHBlZCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcKICAgICAvLyBhbmQgZm9yIGVuc3VyaW5nIHRoYXQg
d2UgZG9uJ3QgZG91YmxlIHdyYXAgdGhlIHNhbWUgb2JqZWN0LgotICAgIHRlbXBsYXRlPGNsYXNz
IEtleVR5cGUsIGNsYXNzIFZhbHVlVHlwZT4gY2xhc3MgV2Vha1JlZmVyZW5jZU1hcCB7CisgICAg
dGVtcGxhdGU8Y2xhc3MgS2V5VHlwZSwgY2xhc3MgVmFsdWVUeXBlPiBjbGFzcyBXZWFrUmVmZXJl
bmNlTWFwIDogcHVibGljIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDxLZXlUeXBlLCBWYWx1ZVR5
cGU+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFdlYWtSZWZlcmVuY2VNYXAodjg6OldlYWtSZWZl
cmVuY2VDYWxsYmFjayBjYWxsYmFjaykgOiBtX3dlYWtSZWZlcmVuY2VDYWxsYmFjayhjYWxsYmFj
aykgeyB9CisgICAgICAgIHR5cGVkZWYgQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwPEtleVR5cGUs
IFZhbHVlVHlwZT4gUGFyZW50OworICAgICAgICBXZWFrUmVmZXJlbmNlTWFwKHY4OjpXZWFrUmVm
ZXJlbmNlQ2FsbGJhY2sgY2FsbGJhY2spIDogUGFyZW50KGNhbGxiYWNrKSB7IH0KICAgICAgICAg
dmlydHVhbCB+V2Vha1JlZmVyZW5jZU1hcCgpCiAgICAgICAgIHsKICAgICAjaWZuZGVmIE5ERUJV
RwpAQCAtNjUsNyArODksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzZXQoS2V5VHlwZSogb2JqLCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IHdyYXBwZXIp
CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCghbV9tYXAuY29udGFpbnMob2JqKSk7Ci0g
ICAgICAgICAgICB3cmFwcGVyLk1ha2VXZWFrKG9iaiwgbV93ZWFrUmVmZXJlbmNlQ2FsbGJhY2sp
OworICAgICAgICAgICAgd3JhcHBlci5NYWtlV2VhayhvYmosIFBhcmVudDo6d2Vha1JlZmVyZW5j
ZUNhbGxiYWNrKCkpOwogICAgICAgICAgICAgbV9tYXAuc2V0KG9iaiwgKndyYXBwZXIpOwogICAg
ICAgICB9CiAKQEAgLTk5LDE0ICsxMjMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgYm9vbCBjb250YWlucyhLZXlUeXBlKiBvYmopIHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKG9i
aik7IH0KIAotICAgICAgICBjbGFzcyBWaXNpdG9yIHsKLSAgICAgICAgcHVibGljOgotICAgICAg
ICAgICAgdmlydHVhbCB2b2lkIHZpc2l0RE9NV3JhcHBlcihLZXlUeXBlKiwgdjg6OlBlcnNpc3Rl
bnQ8VmFsdWVUeXBlPikgPSAwOwotICAgICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgICAgICB2aXJ0
dWFsIH5WaXNpdG9yKCkgeyB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHZp
c2l0KFZpc2l0b3IqIHZpc2l0b3IpCisgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdCh0eXBlbmFt
ZSBQYXJlbnQ6OlZpc2l0b3IqIHZpc2l0b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIHR5cGVu
YW1lIEhhc2hNYXA8S2V5VHlwZSosIFZhbHVlVHlwZSo+OjppdGVyYXRvciBpdCA9IG1fbWFwLmJl
Z2luKCk7CiAgICAgICAgICAgICBmb3IgKDsgaXQgIT0gbV9tYXAuZW5kKCk7ICsraXQpCkBAIC0x
MzksNyArMTU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIH07CiAKICAgICAvLyBBIG1h
cCBmcm9tIERPTSBub2RlIHRvIGl0cyBKUyB3cmFwcGVyLgotICAgIERPTVdyYXBwZXJNYXA8Tm9k
ZT4mIGdldERPTU5vZGVNYXAoKTsKKyAgICBET01Ob2RlTWFwcGluZyYgZ2V0RE9NTm9kZU1hcCgp
OwogICAgIHZvaWQgdmlzaXRET01Ob2Rlc0luQ3VycmVudFRocmVhZChET01XcmFwcGVyTWFwPE5v
ZGU+OjpWaXNpdG9yKik7CiAKICAgICAvLyBBIG1hcCBmcm9tIGEgRE9NIG9iamVjdCAobm9uLW5v
ZGUpIHRvIGl0cyBKUyB3cmFwcGVyLiBUaGlzIG1hcCBkb2VzIG5vdCBjb250YWluIHRoZSBET00g
b2JqZWN0cyB3aGljaCBjYW4gaGF2ZSBwZW5kaW5nIGFjdGl2aXR5IChhY3RpdmUgZG9tIG9iamVj
dHMpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCmluZGV4IDk2ZDA2MGQuLjA2ZDgw
NDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKIAogI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiRE9NRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiRE9NT2Jq
ZWN0c0luY2x1ZGUuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyQ2xpZW50LmgiCkBAIC0xMDQ4LDcgKzEwNDksNyBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0RG9jdW1lbnRUb1Y4T2JqZWN0KERvY3VtZW50KiBk
b2N1bWVudAogICAgIGlmIChwcm94eSkKICAgICAgICAgcHJveHktPndpbmRvd1NoZWxsKCktPmlu
aXRDb250ZXh0SWZOZWVkZWQoKTsKIAotICAgIERPTVdyYXBwZXJNYXA8Tm9kZT4mIGRvbU5vZGVN
YXAgPSBnZXRET01Ob2RlTWFwKCk7CisgICAgRE9NTm9kZU1hcHBpbmcmIGRvbU5vZGVNYXAgPSBn
ZXRET01Ob2RlTWFwKCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZG9t
Tm9kZU1hcC5nZXQoZG9jdW1lbnQpOwogICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGNvbnZlcnROZXdOb2RlVG9WOE9iamVjdChkb2N1bWVudCwgcHJveHksIGRvbU5v
ZGVNYXApOwpAQCAtMTA1NiwyNSArMTA1NywzOSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhE
T01XcmFwcGVyOjpjb252ZXJ0RG9jdW1lbnRUb1Y4T2JqZWN0KERvY3VtZW50KiBkb2N1bWVudAog
ICAgIHJldHVybiB3cmFwcGVyOwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdl
dFdyYXBwZXIoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7
CisgICAgVjhJc29sYXRlZENvbnRleHQqIGNvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0
RW50ZXJlZCgpOworICAgIGlmIChMSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+KiB3cmFwcGVyID0gbm9kZS0+d3JhcHBlcigpOworICAgICAgICBp
ZiAoIXdyYXBwZXIpCisgICAgICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7
CisgICAgICAgIHJldHVybiAqd3JhcHBlcjsKKyAgICB9CisKKyAgICBET01Ob2RlTWFwcGluZyYg
ZG9tTm9kZU1hcCA9IGNvbnRleHQtPndvcmxkKCktPmRvbURhdGFTdG9yZSgpLT5kb21Ob2RlTWFw
KCk7CisgICAgcmV0dXJuIGRvbU5vZGVNYXAuZ2V0KG5vZGUpOworfQorCiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoTm9kZSogbm9kZSkK
IHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwogICAgIAorICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gZ2V0V3JhcHBlcihub2RlKTsKKyAgICBp
ZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gd3JhcHBlcjsKKwogICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IG5vZGUtPmRvY3VtZW50KCk7CiAgICAgaWYgKG5vZGUgPT0gZG9j
dW1lbnQpCiAgICAgICAgIHJldHVybiBjb252ZXJ0RG9jdW1lbnRUb1Y4T2JqZWN0KGRvY3VtZW50
KTsKLSAgICAKLSAgICBET01XcmFwcGVyTWFwPE5vZGU+JiBkb21Ob2RlTWFwID0gZ2V0RE9NTm9k
ZU1hcCgpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGRvbU5vZGVNYXAu
Z2V0KG5vZGUpOwotICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGNv
bnZlcnROZXdOb2RlVG9WOE9iamVjdChub2RlLCAwLCBkb21Ob2RlTWFwKTsKLSAgICAKLSAgICBy
ZXR1cm4gd3JhcHBlcjsKKworICAgIHJldHVybiBjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3Qobm9k
ZSwgMCwgZ2V0RE9NTm9kZU1hcCgpKTsKIH0KICAgICAKIC8vIENhbGxlciBjaGVja3Mgbm9kZSBp
cyBub3QgbnVsbC4KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnRO
ZXdOb2RlVG9WOE9iamVjdChOb2RlKiBub2RlLCBWOFByb3h5KiBwcm94eSwgRE9NV3JhcHBlck1h
cDxOb2RlPiYgZG9tTm9kZU1hcCkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6
OmNvbnZlcnROZXdOb2RlVG9WOE9iamVjdChOb2RlKiBub2RlLCBWOFByb3h5KiBwcm94eSwgRE9N
Tm9kZU1hcHBpbmcmIGRvbU5vZGVNYXApCiB7CiAgICAgaWYgKCFwcm94eSAmJiBub2RlLT5kb2N1
bWVudCgpKQogICAgICAgICBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKG5vZGUtPmRvY3VtZW50
KCktPmZyYW1lKCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBw
ZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKaW5kZXggYmRmNjU0Ny4u
MTNmMDJiZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCkBAIC0xNTAsNyArMTUwLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnROZXdOb2Rl
VG9WOE9iamVjdChub2RlLCAwLCBnZXRET01Ob2RlTWFwKCkpOwogICAgICAgICB9CiAKLSAgICAg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3Qo
Tm9kZSosIFY4UHJveHkqLCBET01XcmFwcGVyTWFwPE5vZGU+Jik7CisgICAgICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydE5ld05vZGVUb1Y4T2JqZWN0KE5vZGUqLCBWOFBy
b3h5KiwgRE9NTm9kZU1hcHBpbmcmKTsKIAogICAgICAgICBzdGF0aWMgVjhDbGFzc0luZGV4OjpW
OFdyYXBwZXJUeXBlIGRvbVdyYXBwZXJUeXBlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47409</attachid>
            <date>2010-01-26 07:02:25 -0800</date>
            <delta_ts>2010-01-26 07:19:56 -0800</delta_ts>
            <desc>Addressing Adam comments</desc>
            <filename>bug-33957-20100126180223.patch</filename>
            <type>text/plain</type>
            <size>19178</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDA5YWU1ZS4uNGQxODI3ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxMC0wMS0yNiBBbnRvbiBNdWhpbiA8
YW50b25tQGdvb2dsZS5jb20+CisgICAgICAgIFJldmlldyBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbXBsZW1lbnQgTm9kZSBtYXAgaW4gaW50cnVzaXZlIHdheSBmb3IgYmV0dGVyIHNw
ZWVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM5
NTcKKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGJpbmRpbmdz
L3Y4L0RPTURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGE6OnJlbW92ZU9iamVjdHNG
cm9tV3JhcHBlck1hcCk6CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBl
ck1hcDo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9N
V3JhcHBlck1hcDo6cmVtb3ZlSWZQcmVzZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFT
dG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NRGF0YVN0b3JlOjpJbnRydXNpdmVET01XcmFwcGVyTWFwOjp2aXNpdCk6CisgICAgICAg
IChXZWJDb3JlOjpET01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJNYXA6OmNsZWFyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6
YWxsb2NhdGVUYWJsZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50
cnVzaXZlRE9NV3JhcHBlck1hcDo6ZnJlZVRhYmxlRW50cnkpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L0RPTURhdGFTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjpJbnRy
dXNpdmVET01XcmFwcGVyTWFwOjpJbnRydXNpdmVET01XcmFwcGVyTWFwKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6Y2xlYXJFbnRyeSk6
CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJNYXA6
OmNsZWFyRW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6OkludHJ1c2l2
ZURPTVdyYXBwZXJNYXA6OnZpc2l0RW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRh
U3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJNYXA6OlRhYmxlQ2h1bms6OlRhYmxlQ2h1bmspOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjpkb21Ob2RlTWFwKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3Rh
dGljRE9NRGF0YVN0b3JlOjpTdGF0aWNET01EYXRhU3RvcmUpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NTWFw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERPTU5vZGVNYXApOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4RE9NTWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdFdlYWtSZWZlcmVu
Y2VNYXA6OkFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdFdlYWtSZWZlcmVuY2VNYXA6OndlYWtSZWZlcmVuY2VDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWFrUmVmZXJlbmNlTWFwOjpXZWFrUmVmZXJlbmNlTWFwKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYWtSZWZlcmVuY2VNYXA6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWFrUmVm
ZXJlbmNlTWFwOjp2aXNpdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydERvY3VtZW50VG9WOE9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlY4RE9NV3JhcHBlcjo6Y29udmVydE5ld05vZGVUb1Y4T2JqZWN0KToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuaDoKKwogMjAxMC0wMS0yNiAgUGF2ZWwgRmVsZG1hbiAgPHBm
ZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQ6IGFkZGVkIG51bGwg
Y2hlY2sgaW50byB0aGUgdGltZWxpbmUgYWdlbnQgZ2V0dGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9ET01EYXRhLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGEuaApp
bmRleCA5MzQ4MGNhLi43ZmE5ZTdkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RP
TURhdGEuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGEuaApAQCAtNjIsNyArNjIs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGVyZWZEZWxheWVkT2JqZWN0
cygpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0YXRpYyB2b2lk
IHJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1hcChET01XcmFwcGVyTWFwPFQ+JiBkb21NYXApOwor
ICAgICAgICBzdGF0aWMgdm9pZCByZW1vdmVPYmplY3RzRnJvbVdyYXBwZXJNYXAoQWJzdHJhY3RX
ZWFrUmVmZXJlbmNlTWFwPFQsIHY4OjpPYmplY3Q+JiBkb21NYXApOwogCiAgICAgICAgIFRocmVh
ZElkZW50aWZpZXIgb3duaW5nVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9vd25pbmdUaHJlYWQ7
IH0KIApAQCAtMTEzLDcgKzExMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgRE9NRGF0YTo6cmVtb3ZlT2JqZWN0c0Zy
b21XcmFwcGVyTWFwKERPTVdyYXBwZXJNYXA8VD4mIGRvbU1hcCkKKyAgICB2b2lkIERPTURhdGE6
OnJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1hcChBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXA8VCwg
djg6Ok9iamVjdD4mIGRvbU1hcCkKICAgICB7CiAgICAgICAgIFdyYXBwZXJNYXBPYmplY3RSZW1v
dmVyPFQ+IHJlbW92ZXI7CiAgICAgICAgIGRvbU1hcC52aXNpdCgmcmVtb3Zlcik7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAKaW5kZXggMzM2ZjY2Mi4uZTE4MWViYyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcApAQCAtMTc0LDYgKzE3NCwyMCBAQCB2b2lkIERPTURh
dGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4T2Jq
ZWN0LCB2b2lkKiBkbwogICAgIH0KIH0KIAorYm9vbCBET01EYXRhU3RvcmU6OkludHJ1c2l2ZURP
TVdyYXBwZXJNYXA6OnJlbW92ZUlmUHJlc2VudChOb2RlKiBvYmosIHY4OjpQZXJzaXN0ZW50PHY4
OjpEYXRhPiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQob2JqKTsKKyAgICB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0PiogZW50cnkgPSBvYmotPndyYXBwZXIoKTsKKyAgICBpZiAoIWVudHJ5KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCplbnRyeSAhPSB2YWx1ZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIG9iai0+Y2xlYXJXcmFwcGVyKCk7CisgICAgbV90YWJsZS5yZW1vdmUo
ZW50cnkpOworICAgIHZhbHVlLkRpc3Bvc2UoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogI2lm
IEVOQUJMRShTVkcpCiAKIHZvaWQgRE9NRGF0YVN0b3JlOjp3ZWFrU1ZHRWxlbWVudEluc3RhbmNl
Q2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2OE9iamVjdCwgdm9pZCogZG9tT2Jq
ZWN0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaCBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmgKaW5kZXggZTAyNzA1OC4uNTRhNDllNyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5l
IERPTURhdGFTdG9yZV9oCiAKICNpbmNsdWRlICJET01PYmplY3RzSW5jbHVkZS5oIgorI2luY2x1
ZGUgIlY4Tm9kZS5oIgogCiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgpAQCAtNDksNiArNTAsOTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgdHlwZWRlZiBX
VEY6OlZlY3RvcjxET01EYXRhU3RvcmUqPiBET01EYXRhTGlzdDsKIAorICAgIHRlbXBsYXRlIDxj
bGFzcyBULCBpbnQgQ0hVTktfU0laRSwgY2xhc3MgVHJhaXRzPgorICAgIGNsYXNzIENodW5rZWRU
YWJsZSB7CisgICAgICBwdWJsaWM6CisgICAgICAgIENodW5rZWRUYWJsZSgpIDogbV9jaHVua3Mo
MCksIG1fY3VycmVudCgwKSwgbV9sYXN0KDApIHsgfQorCisgICAgICAgIFQqIGFkZChUIGVsZW1l
bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gbV9sYXN0KSB7Cisg
ICAgICAgICAgICAgICAgbV9jaHVua3MgPSBuZXcgQ2h1bmsobV9jaHVua3MpOworICAgICAgICAg
ICAgICAgIG1fY3VycmVudCA9IG1fY2h1bmtzLT5tX2VudHJpZXM7CisgICAgICAgICAgICAgICAg
bV9sYXN0ID0gbV9jdXJyZW50ICsgQ0hVTktfU0laRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIEFTU0VSVCgobV9jaHVua3MtPm1fZW50cmllcyA8PSBtX2N1cnJlbnQpICYmIChtX2N1cnJl
bnQgPCBtX2xhc3QpKTsKKyAgICAgICAgICAgIFQqIHAgPSBtX2N1cnJlbnQrKzsKKyAgICAgICAg
ICAgICpwID0gZWxlbWVudDsKKyAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCByZW1vdmUoVCogZWxlbWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKGVsZW1lbnQpOworICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudCA+IG1fY2h1bmtzLT5t
X2VudHJpZXMpOworICAgICAgICAgICAgbV9jdXJyZW50LS07CisgICAgICAgICAgICBpZiAoZWxl
bWVudCAhPSBtX2N1cnJlbnQpCisgICAgICAgICAgICAgICAgVHJhaXRzOjptb3ZlKGVsZW1lbnQs
IG1fY3VycmVudCk7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09IG1fY2h1bmtzLT5tX2Vu
dHJpZXMpIHsKKyAgICAgICAgICAgICAgICBDaHVuayogdG9EZWxldGUgPSBtX2NodW5rczsKKyAg
ICAgICAgICAgICAgICBtX2NodW5rcyA9IHRvRGVsZXRlLT5tX3ByZXZpb3VzOworICAgICAgICAg
ICAgICAgIG1fY3VycmVudCA9IG1fbGFzdCA9IG1fY2h1bmtzID8gbV9jaHVua3MtPm1fZW50cmll
cyArIENIVU5LX1NJWkUgOiAwOworICAgICAgICAgICAgICAgIGRlbGV0ZSB0b0RlbGV0ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVCghbV9jaHVua3MgfHwgKChtX2NodW5rcy0+
bV9lbnRyaWVzIDwgbV9jdXJyZW50KSAmJiAobV9jdXJyZW50IDw9IG1fbGFzdCkpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
IW1fY2h1bmtzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgY2xlYXJF
bnRyaWVzKG1fY2h1bmtzLT5tX2VudHJpZXMsIG1fY3VycmVudCk7CisgICAgICAgICAgICBDaHVu
ayogbGFzdCA9IG1fY2h1bmtzOworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
ICAgICAgICBDaHVuayogcHJldmlvdXMgPSBsYXN0LT5tX3ByZXZpb3VzOworICAgICAgICAgICAg
ICAgIGlmICghcHJldmlvdXMpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGRlbGV0ZSBsYXN0OworICAgICAgICAgICAgICAgIGNsZWFyRW50cmllcyhwcmV2aW91
cy0+bV9lbnRyaWVzLCBwcmV2aW91cy0+bV9lbnRyaWVzICsgQ0hVTktfU0laRSk7CisgICAgICAg
ICAgICAgICAgbGFzdCA9IHByZXZpb3VzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBt
X2NodW5rcyA9IGxhc3Q7CisgICAgICAgICAgICBtX2N1cnJlbnQgPSBtX2NodW5rcy0+bV9lbnRy
aWVzOworICAgICAgICAgICAgbV9sYXN0ID0gbV9jdXJyZW50ICsgQ0hVTktfU0laRTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgdmlzaXQodHlwZW5hbWUgVHJhaXRzOjpWaXNpdG9yKiB2aXNp
dG9yKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fY2h1bmtzKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgdmlzaXRFbnRyaWVzKG1fY2h1bmtzLT5tX2VudHJp
ZXMsIG1fY3VycmVudCwgdmlzaXRvcik7CisgICAgICAgICAgICBmb3IgKENodW5rKiBjaHVuayA9
IG1fY2h1bmtzLT5tX3ByZXZpb3VzOyBjaHVuazsgY2h1bmsgPSBjaHVuay0+bV9wcmV2aW91cykK
KyAgICAgICAgICAgICAgICB2aXNpdEVudHJpZXMoY2h1bmstPm1fZW50cmllcywgY2h1bmstPm1f
ZW50cmllcyArIENIVU5LX1NJWkUsIHZpc2l0b3IpOworICAgICAgICB9CisKKyAgICAgIHByaXZh
dGU6CisgICAgICAgIHN0cnVjdCBDaHVuayB7CisgICAgICAgICAgICBleHBsaWNpdCBDaHVuayhD
aHVuayogcHJldmlvdXMpIDogbV9wcmV2aW91cyhwcmV2aW91cykgeyB9CisgICAgICAgICAgICBD
aHVuayogY29uc3QgbV9wcmV2aW91czsKKyAgICAgICAgICAgIFQgbV9lbnRyaWVzW0NIVU5LX1NJ
WkVdOworICAgICAgICB9OworCisgICAgICAgIHN0YXRpYyB2b2lkIGNsZWFyRW50cmllcyhUKiBm
aXJzdCwgVCogbGFzdCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChUKiBlbnRyeSA9IGZp
cnN0OyBlbnRyeSA8IGxhc3Q7IGVudHJ5KyspCisgICAgICAgICAgICAgICAgVHJhaXRzOjpjbGVh
cihlbnRyeSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdEVudHJpZXMo
VCogZmlyc3QsIFQqIGxhc3QsIHR5cGVuYW1lIFRyYWl0czo6VmlzaXRvciogdmlzaXRvcikKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yIChUKiBlbnRyeSA9IGZpcnN0OyBlbnRyeSA8IGxhc3Q7
IGVudHJ5KyspCisgICAgICAgICAgICAgICAgVHJhaXRzOjp2aXNpdChlbnRyeSwgdmlzaXRvcik7
CisgICAgICAgIH0KKworICAgICAgICBDaHVuayogbV9jaHVua3M7CisgICAgICAgIFQqIG1fY3Vy
cmVudDsKKyAgICAgICAgVCogbV9sYXN0OworICAgIH07CisKICAgICAvLyBET01EYXRhU3RvcmUK
ICAgICAvLwogICAgIC8vIERPTURhdGFTdG9yZSBpcyB0aGUgYmFja2luZyBzdG9yZSB0aGF0IGhv
bGRzIHRoZSBtYXBzIGJldHdlZW4gRE9NIG9iamVjdHMKQEAgLTg2LDYgKzE3Niw3OSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBET01EYXRhKiBtX2RvbURhdGE7CiAgICAgICAg
IH07CiAKKyAgICAgICAgY2xhc3MgSW50cnVzaXZlRE9NV3JhcHBlck1hcCA6IHB1YmxpYyBBYnN0
cmFjdFdlYWtSZWZlcmVuY2VNYXA8Tm9kZSwgdjg6Ok9iamVjdD4geworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBJbnRydXNpdmVET01XcmFwcGVyTWFwKHY4OjpXZWFrUmVmZXJlbmNlQ2Fs
bGJhY2sgY2FsbGJhY2spCisgICAgICAgICAgICAgICAgOiBBYnN0cmFjdFdlYWtSZWZlcmVuY2VN
YXA8Tm9kZSwgdjg6Ok9iamVjdD4oY2FsbGJhY2spIHsgfQorCisgICAgICAgICAgICB2aXJ0dWFs
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IGdldChOb2RlKiBvYmopCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIHdyYXBwZXIgPSBv
YmotPndyYXBwZXIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlciA/ICp3cmFwcGVy
IDogdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4oKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgdmlydHVhbCB2b2lkIHNldChOb2RlKiBvYmosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IHdyYXBwZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9iaik7
CisgICAgICAgICAgICAgICAgQVNTRVJUKCFvYmotPndyYXBwZXIoKSk7CisgICAgICAgICAgICAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIGVudHJ5ID0gbV90YWJsZS5hZGQod3JhcHBl
cik7CisgICAgICAgICAgICAgICAgb2JqLT5zZXRXcmFwcGVyKGVudHJ5KTsKKyAgICAgICAgICAg
ICAgICB3cmFwcGVyLk1ha2VXZWFrKG9iaiwgd2Vha1JlZmVyZW5jZUNhbGxiYWNrKCkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnMoTm9kZSogb2Jq
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBvYmotPndyYXBwZXIoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0KFZpc2l0b3Iq
IHZpc2l0b3IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV90YWJsZS52aXNpdCh2
aXNpdG9yKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmlydHVhbCBib29sIHJlbW92
ZUlmUHJlc2VudChOb2RlKiBrZXksIHY4OjpQZXJzaXN0ZW50PHY4OjpEYXRhPiB2YWx1ZSk7CisK
KyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbV90YWJsZS5jbGVhcigpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBzdGF0aWMgaW50IGNvbnN0IG51bWJlck9mRW50cmllcyA9ICgxIDw8
IDEwKSAtIDE7CisKKyAgICAgICAgICAgIHN0cnVjdCBDaHVua2VkVGFibGVUcmFpdHMgeworICAg
ICAgICAgICAgICAgIHR5cGVkZWYgSW50cnVzaXZlRE9NV3JhcHBlck1hcDo6VmlzaXRvciBWaXNp
dG9yOworCisgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgbW92ZSh2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0PiogdGFyZ2V0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Piogc291cmNlKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnRhcmdldCA9ICpzb3VyY2U7
CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBWOE5vZGU6OnRvTmF0aXZlKCp0YXJn
ZXQpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPnNldFdyYXBwZXIodGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBzdGF0aWMgdm9pZCBjbGVhcih2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Piog
ZW50cnkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gVjhOb2RlOjp0b05hdGl2ZSgqZW50cnkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bm9kZS0+d3JhcHBlcigpID09IGVudHJ5KTsKKworICAgICAgICAgICAgICAgICAgICBub2RlLT5j
bGVhcldyYXBwZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPkRpc3Bvc2UoKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdCh2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0PiogZW50cnksIFZpc2l0b3IqIHZpc2l0b3IpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gVjhOb2RlOjp0b05h
dGl2ZSgqZW50cnkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+d3JhcHBlcigp
ID09IGVudHJ5KTsKKworICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLT52aXNpdERPTVdyYXBw
ZXIobm9kZSwgKmVudHJ5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICB0eXBlZGVmIENodW5rZWRUYWJsZTx2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiwgbnVtYmVyT2ZFbnRyaWVzLCBDaHVua2VkVGFibGVUcmFpdHM+IFRhYmxlOworICAgICAgICAg
ICAgVGFibGUgbV90YWJsZTsKKyAgICAgICAgfTsKKwogICAgICAgICBET01EYXRhU3RvcmUoRE9N
RGF0YSopOwogICAgICAgICB2aXJ0dWFsIH5ET01EYXRhU3RvcmUoKTsKIApAQCAtMTAyLDcgKzI2
NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkKiBnZXRET01XcmFwcGVy
TWFwKERPTVdyYXBwZXJNYXBUeXBlKTsKIAotICAgICAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8
Tm9kZT4mIGRvbU5vZGVNYXAoKSB7IHJldHVybiAqbV9kb21Ob2RlTWFwOyB9CisgICAgICAgIERP
TU5vZGVNYXBwaW5nJiBkb21Ob2RlTWFwKCkgeyByZXR1cm4gKm1fZG9tTm9kZU1hcDsgfQogICAg
ICAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8dm9pZD4mIGRvbU9iamVjdE1hcCgpIHsgcmV0dXJu
ICptX2RvbU9iamVjdE1hcDsgfQogICAgICAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8dm9pZD4m
IGFjdGl2ZURvbU9iamVjdE1hcCgpIHsgcmV0dXJuICptX2FjdGl2ZURvbU9iamVjdE1hcDsgfQog
I2lmIEVOQUJMRShTVkcpCkBAIC0xMjIsNyArMjg1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBzdGF0aWMgdm9pZCB3ZWFrU1ZHT2JqZWN0V2l0aENvbnRleHRDYWxsYmFjayh2ODo6
UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4T2JqZWN0LCB2b2lkKiBkb21PYmplY3QpOwogI2VuZGlm
CiAgICAgICAgIAotICAgICAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8Tm9kZT4qIG1fZG9tTm9k
ZU1hcDsKKyAgICAgICAgRE9NTm9kZU1hcHBpbmcqIG1fZG9tTm9kZU1hcDsKICAgICAgICAgSW50
ZXJuYWxET01XcmFwcGVyTWFwPHZvaWQ+KiBtX2RvbU9iamVjdE1hcDsKICAgICAgICAgSW50ZXJu
YWxET01XcmFwcGVyTWFwPHZvaWQ+KiBtX2FjdGl2ZURvbU9iamVjdE1hcDsKICNpZiBFTkFCTEUo
U1ZHKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUu
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuY3BwCmluZGV4IDNh
MDJjMGIuLjcyMjA1MWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGljRE9N
RGF0YVN0b3JlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9y
ZS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTdGF0aWNET01E
YXRhU3RvcmU6OlN0YXRpY0RPTURhdGFTdG9yZShET01EYXRhKiBkb21EYXRhKQogICAgIDogRE9N
RGF0YVN0b3JlKGRvbURhdGEpCi0gICAgLCBtX3N0YXRpY0RvbU5vZGVNYXAoZG9tRGF0YSwgJkRP
TURhdGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjaykKKyAgICAsIG1fc3RhdGljRG9tTm9kZU1hcCgm
RE9NRGF0YVN0b3JlOjp3ZWFrTm9kZUNhbGxiYWNrKQogICAgICwgbV9zdGF0aWNEb21PYmplY3RN
YXAoZG9tRGF0YSwgJkRPTURhdGFTdG9yZTo6d2Vha0RPTU9iamVjdENhbGxiYWNrKQogICAgICwg
bV9zdGF0aWNBY3RpdmVEb21PYmplY3RNYXAoZG9tRGF0YSwgJkRPTURhdGFTdG9yZTo6d2Vha0Fj
dGl2ZURPTU9iamVjdENhbGxiYWNrKQogI2lmIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9TdGF0aWNET01EYXRhU3RvcmUuaAppbmRleCA0Y2QwNTE1Li42NGE5MGUwIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5oCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGlj
OgogICAgIFN0YXRpY0RPTURhdGFTdG9yZShET01EYXRhKik7CiAKIHByaXZhdGU6Ci0gICAgSW50
ZXJuYWxET01XcmFwcGVyTWFwPE5vZGU+IG1fc3RhdGljRG9tTm9kZU1hcDsKKyAgICBJbnRydXNp
dmVET01XcmFwcGVyTWFwIG1fc3RhdGljRG9tTm9kZU1hcDsKICAgICBJbnRlcm5hbERPTVdyYXBw
ZXJNYXA8dm9pZD4gbV9zdGF0aWNEb21PYmplY3RNYXA7CiAgICAgSW50ZXJuYWxET01XcmFwcGVy
TWFwPHZvaWQ+IG1fc3RhdGljQWN0aXZlRG9tT2JqZWN0TWFwOwogI2lmIEVOQUJMRShTVkcpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01NYXAuY3BwCmluZGV4IDgzZTI2ODQuLmZhMmZiYTMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01NYXAuY3BwCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgZW5hYmxlRmFzdGVyRE9NU3Rv
cmVBY2Nlc3MoKQogICAgIGZhc3RlckRPTVN0b3JlQWNjZXNzID0gdHJ1ZTsKIH0KIAotRE9NV3Jh
cHBlck1hcDxOb2RlPiYgZ2V0RE9NTm9kZU1hcCgpCitET01Ob2RlTWFwcGluZyYgZ2V0RE9NTm9k
ZU1hcCgpCiB7CiAgICAgcmV0dXJuIGdldERPTURhdGFTdG9yZSgpLmRvbU5vZGVNYXAoKTsKIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01NYXAuaAppbmRleCBjZGRiMGE0Li5kNDJkYWE0IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OERPTU1hcC5oCkBAIC00MSwxMiArNDEsMzYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIFNWR0VsZW1lbnRJbnN0YW5jZTsKICNlbmRpZgogCisgICAgdGVtcGxhdGUgPGNsYXNzIEtl
eVR5cGUsIGNsYXNzIFZhbHVlVHlwZT4gY2xhc3MgQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcCh2ODo6V2Vha1Jl
ZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrKSA6IG1fd2Vha1JlZmVyZW5jZUNhbGxiYWNrKGNhbGxi
YWNrKSB7IH0KKworICAgICAgICBjbGFzcyBWaXNpdG9yIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0RE9NV3JhcHBlcihLZXlUeXBlKiBrZXksIHY4OjpQ
ZXJzaXN0ZW50PFZhbHVlVHlwZT4gb2JqZWN0KSA9IDA7CisgICAgICAgIH07CisKKyAgICAgICAg
dmlydHVhbCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IGdldChLZXlUeXBlKiBvYmopID0gMDsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHNldChLZXlUeXBlKiBvYmosIHY4OjpQZXJzaXN0ZW50PFZh
bHVlVHlwZT4gd3JhcHBlcikgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnMoS2V5
VHlwZSogb2JqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdChWaXNpdG9yKiB2aXNp
dG9yKSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCByZW1vdmVJZlByZXNlbnQoS2V5VHlwZSog
a2V5LCB2ODo6UGVyc2lzdGVudDx2ODo6RGF0YT4gdmFsdWUpID0gMDsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGNsZWFyKCkgPSAwOworCisgICAgICAgIHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sg
d2Vha1JlZmVyZW5jZUNhbGxiYWNrKCkgeyByZXR1cm4gbV93ZWFrUmVmZXJlbmNlQ2FsbGJhY2s7
IH0KKyAgICBwcml2YXRlOgorICAgICAgICB2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIG1fd2Vh
a1JlZmVyZW5jZUNhbGxiYWNrOworICAgIH07CisKKyAgICB0eXBlZGVmIEFic3RyYWN0V2Vha1Jl
ZmVyZW5jZU1hcDxOb2RlLCB2ODo6T2JqZWN0PiBET01Ob2RlTWFwcGluZzsKKwogICAgIC8vIEEg
dGFibGUgb2Ygd3JhcHBlcnMgd2l0aCB3ZWFrIHBvaW50ZXJzLgogICAgIC8vIFRoaXMgdGFibGUg
YWxsb3dzIHVzIHRvIGF2b2lkIHRyYWNrIHdyYXBwZWQgb2JqZWN0cyBmb3IgZGVidWdnaW5nCiAg
ICAgLy8gYW5kIGZvciBlbnN1cmluZyB0aGF0IHdlIGRvbid0IGRvdWJsZSB3cmFwIHRoZSBzYW1l
IG9iamVjdC4KLSAgICB0ZW1wbGF0ZTxjbGFzcyBLZXlUeXBlLCBjbGFzcyBWYWx1ZVR5cGU+IGNs
YXNzIFdlYWtSZWZlcmVuY2VNYXAgeworICAgIHRlbXBsYXRlPGNsYXNzIEtleVR5cGUsIGNsYXNz
IFZhbHVlVHlwZT4gY2xhc3MgV2Vha1JlZmVyZW5jZU1hcCA6IHB1YmxpYyBBYnN0cmFjdFdlYWtS
ZWZlcmVuY2VNYXA8S2V5VHlwZSwgVmFsdWVUeXBlPiB7CiAgICAgcHVibGljOgotICAgICAgICBX
ZWFrUmVmZXJlbmNlTWFwKHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sgY2FsbGJhY2spIDogbV93
ZWFrUmVmZXJlbmNlQ2FsbGJhY2soY2FsbGJhY2spIHsgfQorICAgICAgICB0eXBlZGVmIEFic3Ry
YWN0V2Vha1JlZmVyZW5jZU1hcDxLZXlUeXBlLCBWYWx1ZVR5cGU+IFBhcmVudDsKKyAgICAgICAg
V2Vha1JlZmVyZW5jZU1hcCh2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrKSA6IFBh
cmVudChjYWxsYmFjaykgeyB9CiAgICAgICAgIHZpcnR1YWwgfldlYWtSZWZlcmVuY2VNYXAoKQog
ICAgICAgICB7CiAgICAgI2lmbmRlZiBOREVCVUcKQEAgLTY1LDcgKzg5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0KEtleVR5cGUqIG9iaiwgdjg6OlBl
cnNpc3RlbnQ8VmFsdWVUeXBlPiB3cmFwcGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NF
UlQoIW1fbWFwLmNvbnRhaW5zKG9iaikpOwotICAgICAgICAgICAgd3JhcHBlci5NYWtlV2Vhayhv
YmosIG1fd2Vha1JlZmVyZW5jZUNhbGxiYWNrKTsKKyAgICAgICAgICAgIHdyYXBwZXIuTWFrZVdl
YWsob2JqLCBQYXJlbnQ6OndlYWtSZWZlcmVuY2VDYWxsYmFjaygpKTsKICAgICAgICAgICAgIG1f
bWFwLnNldChvYmosICp3cmFwcGVyKTsKICAgICAgICAgfQogCkBAIC05OSwxNCArMTIzLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgY29udGFpbnMoS2V5VHlwZSogb2Jq
KSB7IHJldHVybiBtX21hcC5jb250YWlucyhvYmopOyB9CiAKLSAgICAgICAgY2xhc3MgVmlzaXRv
ciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdERPTVdy
YXBwZXIoS2V5VHlwZSosIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4pID0gMDsKLSAgICAgICAg
cHJvdGVjdGVkOgotICAgICAgICAgICAgdmlydHVhbCB+VmlzaXRvcigpIHsgfQotICAgICAgICB9
OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdChWaXNpdG9yKiB2aXNpdG9yKQorICAgICAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQodHlwZW5hbWUgUGFyZW50OjpWaXNpdG9yKiB2aXNpdG9yKQog
ICAgICAgICB7CiAgICAgICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPEtleVR5cGUqLCBWYWx1ZVR5
cGUqPjo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOwogICAgICAgICAgICAgZm9yICg7IGl0
ICE9IG1fbWFwLmVuZCgpOyArK2l0KQpAQCAtMTM5LDcgKzE1Niw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICB9OwogCiAgICAgLy8gQSBtYXAgZnJvbSBET00gbm9kZSB0byBpdHMgSlMgd3Jh
cHBlci4KLSAgICBET01XcmFwcGVyTWFwPE5vZGU+JiBnZXRET01Ob2RlTWFwKCk7CisgICAgRE9N
Tm9kZU1hcHBpbmcmIGdldERPTU5vZGVNYXAoKTsKICAgICB2b2lkIHZpc2l0RE9NTm9kZXNJbkN1
cnJlbnRUaHJlYWQoRE9NV3JhcHBlck1hcDxOb2RlPjo6VmlzaXRvciopOwogCiAgICAgLy8gQSBt
YXAgZnJvbSBhIERPTSBvYmplY3QgKG5vbi1ub2RlKSB0byBpdHMgSlMgd3JhcHBlci4gVGhpcyBt
YXAgZG9lcyBub3QgY29udGFpbiB0aGUgRE9NIG9iamVjdHMgd2hpY2ggY2FuIGhhdmUgcGVuZGlu
ZyBhY3Rpdml0eSAoYWN0aXZlIGRvbSBvYmplY3RzKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFw
cGVyLmNwcAppbmRleCBkNWQwMWNkLi5iMDEyMTEzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAK
ICNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkRPTURh
dGFTdG9yZS5oIgogI2luY2x1ZGUgIkRPTU9iamVjdHNJbmNsdWRlLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtMTA0OSw3
ICsxMDUwLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydERv
Y3VtZW50VG9WOE9iamVjdChEb2N1bWVudCogZG9jdW1lbnQKICAgICBpZiAocHJveHkpCiAgICAg
ICAgIHByb3h5LT53aW5kb3dTaGVsbCgpLT5pbml0Q29udGV4dElmTmVlZGVkKCk7CiAKLSAgICBE
T01XcmFwcGVyTWFwPE5vZGU+JiBkb21Ob2RlTWFwID0gZ2V0RE9NTm9kZU1hcCgpOworICAgIERP
TU5vZGVNYXBwaW5nJiBkb21Ob2RlTWFwID0gZ2V0RE9NTm9kZU1hcCgpOwogICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGRvbU5vZGVNYXAuZ2V0KGRvY3VtZW50KTsKICAgICBp
ZiAod3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBjb252ZXJ0TmV3Tm9kZVRvVjhP
YmplY3QoZG9jdW1lbnQsIHByb3h5LCBkb21Ob2RlTWFwKTsKQEAgLTEwNTcsMjUgKzEwNTgsMzkg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydERvY3VtZW50VG9W
OE9iamVjdChEb2N1bWVudCogZG9jdW1lbnQKICAgICByZXR1cm4gd3JhcHBlcjsKIH0KIAorc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXRXcmFwcGVyKE5vZGUqIG5vZGUpCit7CisgICAg
QVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBjb250
ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKTsKKyAgICBpZiAoTElLRUxZKCFj
b250ZXh0KSkgeworICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Piogd3JhcHBlciA9
IG5vZGUtPndyYXBwZXIoKTsKKyAgICAgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICAgICAgcmV0
dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgICAgICByZXR1cm4gKndyYXBwZXI7Cisg
ICAgfQorCisgICAgRE9NTm9kZU1hcHBpbmcmIGRvbU5vZGVNYXAgPSBjb250ZXh0LT53b3JsZCgp
LT5kb21EYXRhU3RvcmUoKS0+ZG9tTm9kZU1hcCgpOworICAgIHJldHVybiBkb21Ob2RlTWFwLmdl
dChub2RlKTsKK30KKwogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVy
dE5vZGVUb1Y4T2JqZWN0KE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gdjg6Ok51bGwoKTsKICAgICAKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBl
ciA9IGdldFdyYXBwZXIobm9kZSk7CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIHdyYXBwZXI7CisKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBub2RlLT5kb2N1
bWVudCgpOwogICAgIGlmIChub2RlID09IGRvY3VtZW50KQogICAgICAgICByZXR1cm4gY29udmVy
dERvY3VtZW50VG9WOE9iamVjdChkb2N1bWVudCk7Ci0gICAgCi0gICAgRE9NV3JhcHBlck1hcDxO
b2RlPiYgZG9tTm9kZU1hcCA9IGdldERPTU5vZGVNYXAoKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZXIgPSBkb21Ob2RlTWFwLmdldChub2RlKTsKLSAgICBpZiAod3JhcHBlci5J
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3Qobm9kZSwg
MCwgZG9tTm9kZU1hcCk7Ci0gICAgCi0gICAgcmV0dXJuIHdyYXBwZXI7CisKKyAgICByZXR1cm4g
Y29udmVydE5ld05vZGVUb1Y4T2JqZWN0KG5vZGUsIDAsIGdldERPTU5vZGVNYXAoKSk7CiB9CiAg
ICAgCiAvLyBDYWxsZXIgY2hlY2tzIG5vZGUgaXMgbm90IG51bGwuCi12ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3QoTm9kZSogbm9kZSwg
VjhQcm94eSogcHJveHksIERPTVdyYXBwZXJNYXA8Tm9kZT4mIGRvbU5vZGVNYXApCit2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3QoTm9k
ZSogbm9kZSwgVjhQcm94eSogcHJveHksIERPTU5vZGVNYXBwaW5nJiBkb21Ob2RlTWFwKQogewog
ICAgIGlmICghcHJveHkgJiYgbm9kZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcHJveHkgPSBWOFBy
b3h5OjpyZXRyaWV2ZShub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV3JhcHBlci5oCmluZGV4IGJkZjY1NDcuLjEzZjAyYmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TVdyYXBwZXIuaApAQCAtMTUwLDcgKzE1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgICAgIHJldHVybiBjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3Qobm9kZSwgMCwgZ2V0RE9NTm9k
ZU1hcCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gY29udmVydE5ld05vZGVUb1Y4T2JqZWN0KE5vZGUqLCBWOFByb3h5KiwgRE9NV3JhcHBlck1h
cDxOb2RlPiYpOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRO
ZXdOb2RlVG9WOE9iamVjdChOb2RlKiwgVjhQcm94eSosIERPTU5vZGVNYXBwaW5nJik7CiAKICAg
ICAgICAgc3RhdGljIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkb21XcmFwcGVyVHlwZSh2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47410</attachid>
            <date>2010-01-26 07:20:06 -0800</date>
            <delta_ts>2010-01-27 05:27:25 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-33957-20100126182004.patch</filename>
            <type>text/plain</type>
            <size>19178</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDA5YWU1ZS4uNGQxODI3ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxMC0wMS0yNiBBbnRvbiBNdWhpbiA8
YW50b25tQGdvb2dsZS5jb20+CisgICAgICAgIFJldmlldyBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbXBsZW1lbnQgTm9kZSBtYXAgaW4gaW50cnVzaXZlIHdheSBmb3IgYmV0dGVyIHNw
ZWVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM5
NTcKKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGJpbmRpbmdz
L3Y4L0RPTURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGE6OnJlbW92ZU9iamVjdHNG
cm9tV3JhcHBlck1hcCk6CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBl
ck1hcDo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9N
V3JhcHBlck1hcDo6cmVtb3ZlSWZQcmVzZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFT
dG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NRGF0YVN0b3JlOjpJbnRydXNpdmVET01XcmFwcGVyTWFwOjp2aXNpdCk6CisgICAgICAg
IChXZWJDb3JlOjpET01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJNYXA6OmNsZWFyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6
YWxsb2NhdGVUYWJsZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50
cnVzaXZlRE9NV3JhcHBlck1hcDo6ZnJlZVRhYmxlRW50cnkpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L0RPTURhdGFTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjpJbnRy
dXNpdmVET01XcmFwcGVyTWFwOjpJbnRydXNpdmVET01XcmFwcGVyTWFwKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6Y2xlYXJFbnRyeSk6
CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJNYXA6
OmNsZWFyRW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6OkludHJ1c2l2
ZURPTVdyYXBwZXJNYXA6OnZpc2l0RW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRh
U3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJNYXA6OlRhYmxlQ2h1bms6OlRhYmxlQ2h1bmspOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjpkb21Ob2RlTWFwKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3Rh
dGljRE9NRGF0YVN0b3JlOjpTdGF0aWNET01EYXRhU3RvcmUpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NTWFw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERPTU5vZGVNYXApOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4RE9NTWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdFdlYWtSZWZlcmVu
Y2VNYXA6OkFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdFdlYWtSZWZlcmVuY2VNYXA6OndlYWtSZWZlcmVuY2VDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWFrUmVmZXJlbmNlTWFwOjpXZWFrUmVmZXJlbmNlTWFwKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYWtSZWZlcmVuY2VNYXA6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWFrUmVm
ZXJlbmNlTWFwOjp2aXNpdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydERvY3VtZW50VG9WOE9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlY4RE9NV3JhcHBlcjo6Y29udmVydE5ld05vZGVUb1Y4T2JqZWN0KToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuaDoKKwogMjAxMC0wMS0yNiAgUGF2ZWwgRmVsZG1hbiAgPHBm
ZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQ6IGFkZGVkIG51bGwg
Y2hlY2sgaW50byB0aGUgdGltZWxpbmUgYWdlbnQgZ2V0dGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9ET01EYXRhLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGEuaApp
bmRleCA5MzQ4MGNhLi43ZmE5ZTdkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RP
TURhdGEuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGEuaApAQCAtNjIsNyArNjIs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGVyZWZEZWxheWVkT2JqZWN0
cygpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0YXRpYyB2b2lk
IHJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1hcChET01XcmFwcGVyTWFwPFQ+JiBkb21NYXApOwor
ICAgICAgICBzdGF0aWMgdm9pZCByZW1vdmVPYmplY3RzRnJvbVdyYXBwZXJNYXAoQWJzdHJhY3RX
ZWFrUmVmZXJlbmNlTWFwPFQsIHY4OjpPYmplY3Q+JiBkb21NYXApOwogCiAgICAgICAgIFRocmVh
ZElkZW50aWZpZXIgb3duaW5nVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9vd25pbmdUaHJlYWQ7
IH0KIApAQCAtMTEzLDcgKzExMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgRE9NRGF0YTo6cmVtb3ZlT2JqZWN0c0Zy
b21XcmFwcGVyTWFwKERPTVdyYXBwZXJNYXA8VD4mIGRvbU1hcCkKKyAgICB2b2lkIERPTURhdGE6
OnJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1hcChBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXA8VCwg
djg6Ok9iamVjdD4mIGRvbU1hcCkKICAgICB7CiAgICAgICAgIFdyYXBwZXJNYXBPYmplY3RSZW1v
dmVyPFQ+IHJlbW92ZXI7CiAgICAgICAgIGRvbU1hcC52aXNpdCgmcmVtb3Zlcik7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAKaW5kZXggMzM2ZjY2Mi4uZTE4MWViYyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcApAQCAtMTc0LDYgKzE3NCwyMCBAQCB2b2lkIERPTURh
dGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4T2Jq
ZWN0LCB2b2lkKiBkbwogICAgIH0KIH0KIAorYm9vbCBET01EYXRhU3RvcmU6OkludHJ1c2l2ZURP
TVdyYXBwZXJNYXA6OnJlbW92ZUlmUHJlc2VudChOb2RlKiBvYmosIHY4OjpQZXJzaXN0ZW50PHY4
OjpEYXRhPiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQob2JqKTsKKyAgICB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0PiogZW50cnkgPSBvYmotPndyYXBwZXIoKTsKKyAgICBpZiAoIWVudHJ5KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCplbnRyeSAhPSB2YWx1ZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIG9iai0+Y2xlYXJXcmFwcGVyKCk7CisgICAgbV90YWJsZS5yZW1vdmUo
ZW50cnkpOworICAgIHZhbHVlLkRpc3Bvc2UoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogI2lm
IEVOQUJMRShTVkcpCiAKIHZvaWQgRE9NRGF0YVN0b3JlOjp3ZWFrU1ZHRWxlbWVudEluc3RhbmNl
Q2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2OE9iamVjdCwgdm9pZCogZG9tT2Jq
ZWN0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaCBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmgKaW5kZXggZTAyNzA1OC4uNTRhNDllNyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5l
IERPTURhdGFTdG9yZV9oCiAKICNpbmNsdWRlICJET01PYmplY3RzSW5jbHVkZS5oIgorI2luY2x1
ZGUgIlY4Tm9kZS5oIgogCiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgpAQCAtNDksNiArNTAsOTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgdHlwZWRlZiBX
VEY6OlZlY3RvcjxET01EYXRhU3RvcmUqPiBET01EYXRhTGlzdDsKIAorICAgIHRlbXBsYXRlIDxj
bGFzcyBULCBpbnQgQ0hVTktfU0laRSwgY2xhc3MgVHJhaXRzPgorICAgIGNsYXNzIENodW5rZWRU
YWJsZSB7CisgICAgICBwdWJsaWM6CisgICAgICAgIENodW5rZWRUYWJsZSgpIDogbV9jaHVua3Mo
MCksIG1fY3VycmVudCgwKSwgbV9sYXN0KDApIHsgfQorCisgICAgICAgIFQqIGFkZChUIGVsZW1l
bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gbV9sYXN0KSB7Cisg
ICAgICAgICAgICAgICAgbV9jaHVua3MgPSBuZXcgQ2h1bmsobV9jaHVua3MpOworICAgICAgICAg
ICAgICAgIG1fY3VycmVudCA9IG1fY2h1bmtzLT5tX2VudHJpZXM7CisgICAgICAgICAgICAgICAg
bV9sYXN0ID0gbV9jdXJyZW50ICsgQ0hVTktfU0laRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIEFTU0VSVCgobV9jaHVua3MtPm1fZW50cmllcyA8PSBtX2N1cnJlbnQpICYmIChtX2N1cnJl
bnQgPCBtX2xhc3QpKTsKKyAgICAgICAgICAgIFQqIHAgPSBtX2N1cnJlbnQrKzsKKyAgICAgICAg
ICAgICpwID0gZWxlbWVudDsKKyAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCByZW1vdmUoVCogZWxlbWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKGVsZW1lbnQpOworICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudCA+IG1fY2h1bmtzLT5t
X2VudHJpZXMpOworICAgICAgICAgICAgbV9jdXJyZW50LS07CisgICAgICAgICAgICBpZiAoZWxl
bWVudCAhPSBtX2N1cnJlbnQpCisgICAgICAgICAgICAgICAgVHJhaXRzOjptb3ZlKGVsZW1lbnQs
IG1fY3VycmVudCk7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09IG1fY2h1bmtzLT5tX2Vu
dHJpZXMpIHsKKyAgICAgICAgICAgICAgICBDaHVuayogdG9EZWxldGUgPSBtX2NodW5rczsKKyAg
ICAgICAgICAgICAgICBtX2NodW5rcyA9IHRvRGVsZXRlLT5tX3ByZXZpb3VzOworICAgICAgICAg
ICAgICAgIG1fY3VycmVudCA9IG1fbGFzdCA9IG1fY2h1bmtzID8gbV9jaHVua3MtPm1fZW50cmll
cyArIENIVU5LX1NJWkUgOiAwOworICAgICAgICAgICAgICAgIGRlbGV0ZSB0b0RlbGV0ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVCghbV9jaHVua3MgfHwgKChtX2NodW5rcy0+
bV9lbnRyaWVzIDwgbV9jdXJyZW50KSAmJiAobV9jdXJyZW50IDw9IG1fbGFzdCkpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
IW1fY2h1bmtzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgY2xlYXJF
bnRyaWVzKG1fY2h1bmtzLT5tX2VudHJpZXMsIG1fY3VycmVudCk7CisgICAgICAgICAgICBDaHVu
ayogbGFzdCA9IG1fY2h1bmtzOworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
ICAgICAgICBDaHVuayogcHJldmlvdXMgPSBsYXN0LT5tX3ByZXZpb3VzOworICAgICAgICAgICAg
ICAgIGlmICghcHJldmlvdXMpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGRlbGV0ZSBsYXN0OworICAgICAgICAgICAgICAgIGNsZWFyRW50cmllcyhwcmV2aW91
cy0+bV9lbnRyaWVzLCBwcmV2aW91cy0+bV9lbnRyaWVzICsgQ0hVTktfU0laRSk7CisgICAgICAg
ICAgICAgICAgbGFzdCA9IHByZXZpb3VzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBt
X2NodW5rcyA9IGxhc3Q7CisgICAgICAgICAgICBtX2N1cnJlbnQgPSBtX2NodW5rcy0+bV9lbnRy
aWVzOworICAgICAgICAgICAgbV9sYXN0ID0gbV9jdXJyZW50ICsgQ0hVTktfU0laRTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgdmlzaXQodHlwZW5hbWUgVHJhaXRzOjpWaXNpdG9yKiB2aXNp
dG9yKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fY2h1bmtzKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgdmlzaXRFbnRyaWVzKG1fY2h1bmtzLT5tX2VudHJp
ZXMsIG1fY3VycmVudCwgdmlzaXRvcik7CisgICAgICAgICAgICBmb3IgKENodW5rKiBjaHVuayA9
IG1fY2h1bmtzLT5tX3ByZXZpb3VzOyBjaHVuazsgY2h1bmsgPSBjaHVuay0+bV9wcmV2aW91cykK
KyAgICAgICAgICAgICAgICB2aXNpdEVudHJpZXMoY2h1bmstPm1fZW50cmllcywgY2h1bmstPm1f
ZW50cmllcyArIENIVU5LX1NJWkUsIHZpc2l0b3IpOworICAgICAgICB9CisKKyAgICAgIHByaXZh
dGU6CisgICAgICAgIHN0cnVjdCBDaHVuayB7CisgICAgICAgICAgICBleHBsaWNpdCBDaHVuayhD
aHVuayogcHJldmlvdXMpIDogbV9wcmV2aW91cyhwcmV2aW91cykgeyB9CisgICAgICAgICAgICBD
aHVuayogY29uc3QgbV9wcmV2aW91czsKKyAgICAgICAgICAgIFQgbV9lbnRyaWVzW0NIVU5LX1NJ
WkVdOworICAgICAgICB9OworCisgICAgICAgIHN0YXRpYyB2b2lkIGNsZWFyRW50cmllcyhUKiBm
aXJzdCwgVCogbGFzdCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChUKiBlbnRyeSA9IGZp
cnN0OyBlbnRyeSA8IGxhc3Q7IGVudHJ5KyspCisgICAgICAgICAgICAgICAgVHJhaXRzOjpjbGVh
cihlbnRyeSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdEVudHJpZXMo
VCogZmlyc3QsIFQqIGxhc3QsIHR5cGVuYW1lIFRyYWl0czo6VmlzaXRvciogdmlzaXRvcikKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yIChUKiBlbnRyeSA9IGZpcnN0OyBlbnRyeSA8IGxhc3Q7
IGVudHJ5KyspCisgICAgICAgICAgICAgICAgVHJhaXRzOjp2aXNpdChlbnRyeSwgdmlzaXRvcik7
CisgICAgICAgIH0KKworICAgICAgICBDaHVuayogbV9jaHVua3M7CisgICAgICAgIFQqIG1fY3Vy
cmVudDsKKyAgICAgICAgVCogbV9sYXN0OworICAgIH07CisKICAgICAvLyBET01EYXRhU3RvcmUK
ICAgICAvLwogICAgIC8vIERPTURhdGFTdG9yZSBpcyB0aGUgYmFja2luZyBzdG9yZSB0aGF0IGhv
bGRzIHRoZSBtYXBzIGJldHdlZW4gRE9NIG9iamVjdHMKQEAgLTg2LDYgKzE3Niw3OSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBET01EYXRhKiBtX2RvbURhdGE7CiAgICAgICAg
IH07CiAKKyAgICAgICAgY2xhc3MgSW50cnVzaXZlRE9NV3JhcHBlck1hcCA6IHB1YmxpYyBBYnN0
cmFjdFdlYWtSZWZlcmVuY2VNYXA8Tm9kZSwgdjg6Ok9iamVjdD4geworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBJbnRydXNpdmVET01XcmFwcGVyTWFwKHY4OjpXZWFrUmVmZXJlbmNlQ2Fs
bGJhY2sgY2FsbGJhY2spCisgICAgICAgICAgICAgICAgOiBBYnN0cmFjdFdlYWtSZWZlcmVuY2VN
YXA8Tm9kZSwgdjg6Ok9iamVjdD4oY2FsbGJhY2spIHsgfQorCisgICAgICAgICAgICB2aXJ0dWFs
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IGdldChOb2RlKiBvYmopCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIHdyYXBwZXIgPSBv
YmotPndyYXBwZXIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlciA/ICp3cmFwcGVy
IDogdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4oKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgdmlydHVhbCB2b2lkIHNldChOb2RlKiBvYmosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IHdyYXBwZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9iaik7
CisgICAgICAgICAgICAgICAgQVNTRVJUKCFvYmotPndyYXBwZXIoKSk7CisgICAgICAgICAgICAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIGVudHJ5ID0gbV90YWJsZS5hZGQod3JhcHBl
cik7CisgICAgICAgICAgICAgICAgb2JqLT5zZXRXcmFwcGVyKGVudHJ5KTsKKyAgICAgICAgICAg
ICAgICB3cmFwcGVyLk1ha2VXZWFrKG9iaiwgd2Vha1JlZmVyZW5jZUNhbGxiYWNrKCkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnMoTm9kZSogb2Jq
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBvYmotPndyYXBwZXIoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0KFZpc2l0b3Iq
IHZpc2l0b3IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV90YWJsZS52aXNpdCh2
aXNpdG9yKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmlydHVhbCBib29sIHJlbW92
ZUlmUHJlc2VudChOb2RlKiBrZXksIHY4OjpQZXJzaXN0ZW50PHY4OjpEYXRhPiB2YWx1ZSk7CisK
KyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbV90YWJsZS5jbGVhcigpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBzdGF0aWMgaW50IGNvbnN0IG51bWJlck9mRW50cmllcyA9ICgxIDw8
IDEwKSAtIDE7CisKKyAgICAgICAgICAgIHN0cnVjdCBDaHVua2VkVGFibGVUcmFpdHMgeworICAg
ICAgICAgICAgICAgIHR5cGVkZWYgSW50cnVzaXZlRE9NV3JhcHBlck1hcDo6VmlzaXRvciBWaXNp
dG9yOworCisgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgbW92ZSh2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0PiogdGFyZ2V0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Piogc291cmNlKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnRhcmdldCA9ICpzb3VyY2U7
CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBWOE5vZGU6OnRvTmF0aXZlKCp0YXJn
ZXQpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPnNldFdyYXBwZXIodGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBzdGF0aWMgdm9pZCBjbGVhcih2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Piog
ZW50cnkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gVjhOb2RlOjp0b05hdGl2ZSgqZW50cnkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bm9kZS0+d3JhcHBlcigpID09IGVudHJ5KTsKKworICAgICAgICAgICAgICAgICAgICBub2RlLT5j
bGVhcldyYXBwZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPkRpc3Bvc2UoKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdCh2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0PiogZW50cnksIFZpc2l0b3IqIHZpc2l0b3IpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gVjhOb2RlOjp0b05h
dGl2ZSgqZW50cnkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+d3JhcHBlcigp
ID09IGVudHJ5KTsKKworICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLT52aXNpdERPTVdyYXBw
ZXIobm9kZSwgKmVudHJ5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICB0eXBlZGVmIENodW5rZWRUYWJsZTx2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiwgbnVtYmVyT2ZFbnRyaWVzLCBDaHVua2VkVGFibGVUcmFpdHM+IFRhYmxlOworICAgICAgICAg
ICAgVGFibGUgbV90YWJsZTsKKyAgICAgICAgfTsKKwogICAgICAgICBET01EYXRhU3RvcmUoRE9N
RGF0YSopOwogICAgICAgICB2aXJ0dWFsIH5ET01EYXRhU3RvcmUoKTsKIApAQCAtMTAyLDcgKzI2
NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkKiBnZXRET01XcmFwcGVy
TWFwKERPTVdyYXBwZXJNYXBUeXBlKTsKIAotICAgICAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8
Tm9kZT4mIGRvbU5vZGVNYXAoKSB7IHJldHVybiAqbV9kb21Ob2RlTWFwOyB9CisgICAgICAgIERP
TU5vZGVNYXBwaW5nJiBkb21Ob2RlTWFwKCkgeyByZXR1cm4gKm1fZG9tTm9kZU1hcDsgfQogICAg
ICAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8dm9pZD4mIGRvbU9iamVjdE1hcCgpIHsgcmV0dXJu
ICptX2RvbU9iamVjdE1hcDsgfQogICAgICAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8dm9pZD4m
IGFjdGl2ZURvbU9iamVjdE1hcCgpIHsgcmV0dXJuICptX2FjdGl2ZURvbU9iamVjdE1hcDsgfQog
I2lmIEVOQUJMRShTVkcpCkBAIC0xMjIsNyArMjg1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBzdGF0aWMgdm9pZCB3ZWFrU1ZHT2JqZWN0V2l0aENvbnRleHRDYWxsYmFjayh2ODo6
UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4T2JqZWN0LCB2b2lkKiBkb21PYmplY3QpOwogI2VuZGlm
CiAgICAgICAgIAotICAgICAgICBJbnRlcm5hbERPTVdyYXBwZXJNYXA8Tm9kZT4qIG1fZG9tTm9k
ZU1hcDsKKyAgICAgICAgRE9NTm9kZU1hcHBpbmcqIG1fZG9tTm9kZU1hcDsKICAgICAgICAgSW50
ZXJuYWxET01XcmFwcGVyTWFwPHZvaWQ+KiBtX2RvbU9iamVjdE1hcDsKICAgICAgICAgSW50ZXJu
YWxET01XcmFwcGVyTWFwPHZvaWQ+KiBtX2FjdGl2ZURvbU9iamVjdE1hcDsKICNpZiBFTkFCTEUo
U1ZHKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUu
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuY3BwCmluZGV4IDNh
MDJjMGIuLjcyMjA1MWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGljRE9N
RGF0YVN0b3JlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9y
ZS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTdGF0aWNET01E
YXRhU3RvcmU6OlN0YXRpY0RPTURhdGFTdG9yZShET01EYXRhKiBkb21EYXRhKQogICAgIDogRE9N
RGF0YVN0b3JlKGRvbURhdGEpCi0gICAgLCBtX3N0YXRpY0RvbU5vZGVNYXAoZG9tRGF0YSwgJkRP
TURhdGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjaykKKyAgICAsIG1fc3RhdGljRG9tTm9kZU1hcCgm
RE9NRGF0YVN0b3JlOjp3ZWFrTm9kZUNhbGxiYWNrKQogICAgICwgbV9zdGF0aWNEb21PYmplY3RN
YXAoZG9tRGF0YSwgJkRPTURhdGFTdG9yZTo6d2Vha0RPTU9iamVjdENhbGxiYWNrKQogICAgICwg
bV9zdGF0aWNBY3RpdmVEb21PYmplY3RNYXAoZG9tRGF0YSwgJkRPTURhdGFTdG9yZTo6d2Vha0Fj
dGl2ZURPTU9iamVjdENhbGxiYWNrKQogI2lmIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9TdGF0aWNET01EYXRhU3RvcmUuaAppbmRleCA0Y2QwNTE1Li42NGE5MGUwIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5oCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGlj
OgogICAgIFN0YXRpY0RPTURhdGFTdG9yZShET01EYXRhKik7CiAKIHByaXZhdGU6Ci0gICAgSW50
ZXJuYWxET01XcmFwcGVyTWFwPE5vZGU+IG1fc3RhdGljRG9tTm9kZU1hcDsKKyAgICBJbnRydXNp
dmVET01XcmFwcGVyTWFwIG1fc3RhdGljRG9tTm9kZU1hcDsKICAgICBJbnRlcm5hbERPTVdyYXBw
ZXJNYXA8dm9pZD4gbV9zdGF0aWNEb21PYmplY3RNYXA7CiAgICAgSW50ZXJuYWxET01XcmFwcGVy
TWFwPHZvaWQ+IG1fc3RhdGljQWN0aXZlRG9tT2JqZWN0TWFwOwogI2lmIEVOQUJMRShTVkcpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01NYXAuY3BwCmluZGV4IDgzZTI2ODQuLmZhMmZiYTMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01NYXAuY3BwCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgZW5hYmxlRmFzdGVyRE9NU3Rv
cmVBY2Nlc3MoKQogICAgIGZhc3RlckRPTVN0b3JlQWNjZXNzID0gdHJ1ZTsKIH0KIAotRE9NV3Jh
cHBlck1hcDxOb2RlPiYgZ2V0RE9NTm9kZU1hcCgpCitET01Ob2RlTWFwcGluZyYgZ2V0RE9NTm9k
ZU1hcCgpCiB7CiAgICAgcmV0dXJuIGdldERPTURhdGFTdG9yZSgpLmRvbU5vZGVNYXAoKTsKIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01NYXAuaAppbmRleCBjZGRiMGE0Li5kNDJkYWE0IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OERPTU1hcC5oCkBAIC00MSwxMiArNDEsMzYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIFNWR0VsZW1lbnRJbnN0YW5jZTsKICNlbmRpZgogCisgICAgdGVtcGxhdGUgPGNsYXNzIEtl
eVR5cGUsIGNsYXNzIFZhbHVlVHlwZT4gY2xhc3MgQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcCh2ODo6V2Vha1Jl
ZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrKSA6IG1fd2Vha1JlZmVyZW5jZUNhbGxiYWNrKGNhbGxi
YWNrKSB7IH0KKworICAgICAgICBjbGFzcyBWaXNpdG9yIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0RE9NV3JhcHBlcihLZXlUeXBlKiBrZXksIHY4OjpQ
ZXJzaXN0ZW50PFZhbHVlVHlwZT4gb2JqZWN0KSA9IDA7CisgICAgICAgIH07CisKKyAgICAgICAg
dmlydHVhbCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IGdldChLZXlUeXBlKiBvYmopID0gMDsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHNldChLZXlUeXBlKiBvYmosIHY4OjpQZXJzaXN0ZW50PFZh
bHVlVHlwZT4gd3JhcHBlcikgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnMoS2V5
VHlwZSogb2JqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdChWaXNpdG9yKiB2aXNp
dG9yKSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCByZW1vdmVJZlByZXNlbnQoS2V5VHlwZSog
a2V5LCB2ODo6UGVyc2lzdGVudDx2ODo6RGF0YT4gdmFsdWUpID0gMDsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGNsZWFyKCkgPSAwOworCisgICAgICAgIHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sg
d2Vha1JlZmVyZW5jZUNhbGxiYWNrKCkgeyByZXR1cm4gbV93ZWFrUmVmZXJlbmNlQ2FsbGJhY2s7
IH0KKyAgICBwcml2YXRlOgorICAgICAgICB2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIG1fd2Vh
a1JlZmVyZW5jZUNhbGxiYWNrOworICAgIH07CisKKyAgICB0eXBlZGVmIEFic3RyYWN0V2Vha1Jl
ZmVyZW5jZU1hcDxOb2RlLCB2ODo6T2JqZWN0PiBET01Ob2RlTWFwcGluZzsKKwogICAgIC8vIEEg
dGFibGUgb2Ygd3JhcHBlcnMgd2l0aCB3ZWFrIHBvaW50ZXJzLgogICAgIC8vIFRoaXMgdGFibGUg
YWxsb3dzIHVzIHRvIGF2b2lkIHRyYWNrIHdyYXBwZWQgb2JqZWN0cyBmb3IgZGVidWdnaW5nCiAg
ICAgLy8gYW5kIGZvciBlbnN1cmluZyB0aGF0IHdlIGRvbid0IGRvdWJsZSB3cmFwIHRoZSBzYW1l
IG9iamVjdC4KLSAgICB0ZW1wbGF0ZTxjbGFzcyBLZXlUeXBlLCBjbGFzcyBWYWx1ZVR5cGU+IGNs
YXNzIFdlYWtSZWZlcmVuY2VNYXAgeworICAgIHRlbXBsYXRlPGNsYXNzIEtleVR5cGUsIGNsYXNz
IFZhbHVlVHlwZT4gY2xhc3MgV2Vha1JlZmVyZW5jZU1hcCA6IHB1YmxpYyBBYnN0cmFjdFdlYWtS
ZWZlcmVuY2VNYXA8S2V5VHlwZSwgVmFsdWVUeXBlPiB7CiAgICAgcHVibGljOgotICAgICAgICBX
ZWFrUmVmZXJlbmNlTWFwKHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sgY2FsbGJhY2spIDogbV93
ZWFrUmVmZXJlbmNlQ2FsbGJhY2soY2FsbGJhY2spIHsgfQorICAgICAgICB0eXBlZGVmIEFic3Ry
YWN0V2Vha1JlZmVyZW5jZU1hcDxLZXlUeXBlLCBWYWx1ZVR5cGU+IFBhcmVudDsKKyAgICAgICAg
V2Vha1JlZmVyZW5jZU1hcCh2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrKSA6IFBh
cmVudChjYWxsYmFjaykgeyB9CiAgICAgICAgIHZpcnR1YWwgfldlYWtSZWZlcmVuY2VNYXAoKQog
ICAgICAgICB7CiAgICAgI2lmbmRlZiBOREVCVUcKQEAgLTY1LDcgKzg5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0KEtleVR5cGUqIG9iaiwgdjg6OlBl
cnNpc3RlbnQ8VmFsdWVUeXBlPiB3cmFwcGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NF
UlQoIW1fbWFwLmNvbnRhaW5zKG9iaikpOwotICAgICAgICAgICAgd3JhcHBlci5NYWtlV2Vhayhv
YmosIG1fd2Vha1JlZmVyZW5jZUNhbGxiYWNrKTsKKyAgICAgICAgICAgIHdyYXBwZXIuTWFrZVdl
YWsob2JqLCBQYXJlbnQ6OndlYWtSZWZlcmVuY2VDYWxsYmFjaygpKTsKICAgICAgICAgICAgIG1f
bWFwLnNldChvYmosICp3cmFwcGVyKTsKICAgICAgICAgfQogCkBAIC05OSwxNCArMTIzLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgY29udGFpbnMoS2V5VHlwZSogb2Jq
KSB7IHJldHVybiBtX21hcC5jb250YWlucyhvYmopOyB9CiAKLSAgICAgICAgY2xhc3MgVmlzaXRv
ciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdERPTVdy
YXBwZXIoS2V5VHlwZSosIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4pID0gMDsKLSAgICAgICAg
cHJvdGVjdGVkOgotICAgICAgICAgICAgdmlydHVhbCB+VmlzaXRvcigpIHsgfQotICAgICAgICB9
OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdChWaXNpdG9yKiB2aXNpdG9yKQorICAgICAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQodHlwZW5hbWUgUGFyZW50OjpWaXNpdG9yKiB2aXNpdG9yKQog
ICAgICAgICB7CiAgICAgICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPEtleVR5cGUqLCBWYWx1ZVR5
cGUqPjo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOwogICAgICAgICAgICAgZm9yICg7IGl0
ICE9IG1fbWFwLmVuZCgpOyArK2l0KQpAQCAtMTM5LDcgKzE1Niw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICB9OwogCiAgICAgLy8gQSBtYXAgZnJvbSBET00gbm9kZSB0byBpdHMgSlMgd3Jh
cHBlci4KLSAgICBET01XcmFwcGVyTWFwPE5vZGU+JiBnZXRET01Ob2RlTWFwKCk7CisgICAgRE9N
Tm9kZU1hcHBpbmcmIGdldERPTU5vZGVNYXAoKTsKICAgICB2b2lkIHZpc2l0RE9NTm9kZXNJbkN1
cnJlbnRUaHJlYWQoRE9NV3JhcHBlck1hcDxOb2RlPjo6VmlzaXRvciopOwogCiAgICAgLy8gQSBt
YXAgZnJvbSBhIERPTSBvYmplY3QgKG5vbi1ub2RlKSB0byBpdHMgSlMgd3JhcHBlci4gVGhpcyBt
YXAgZG9lcyBub3QgY29udGFpbiB0aGUgRE9NIG9iamVjdHMgd2hpY2ggY2FuIGhhdmUgcGVuZGlu
ZyBhY3Rpdml0eSAoYWN0aXZlIGRvbSBvYmplY3RzKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFw
cGVyLmNwcAppbmRleCBkNWQwMWNkLi5iMDEyMTEzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAK
ICNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkRPTURh
dGFTdG9yZS5oIgogI2luY2x1ZGUgIkRPTU9iamVjdHNJbmNsdWRlLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtMTA0OSw3
ICsxMDUwLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydERv
Y3VtZW50VG9WOE9iamVjdChEb2N1bWVudCogZG9jdW1lbnQKICAgICBpZiAocHJveHkpCiAgICAg
ICAgIHByb3h5LT53aW5kb3dTaGVsbCgpLT5pbml0Q29udGV4dElmTmVlZGVkKCk7CiAKLSAgICBE
T01XcmFwcGVyTWFwPE5vZGU+JiBkb21Ob2RlTWFwID0gZ2V0RE9NTm9kZU1hcCgpOworICAgIERP
TU5vZGVNYXBwaW5nJiBkb21Ob2RlTWFwID0gZ2V0RE9NTm9kZU1hcCgpOwogICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGRvbU5vZGVNYXAuZ2V0KGRvY3VtZW50KTsKICAgICBp
ZiAod3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBjb252ZXJ0TmV3Tm9kZVRvVjhP
YmplY3QoZG9jdW1lbnQsIHByb3h5LCBkb21Ob2RlTWFwKTsKQEAgLTEwNTcsMjUgKzEwNTgsMzkg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydERvY3VtZW50VG9W
OE9iamVjdChEb2N1bWVudCogZG9jdW1lbnQKICAgICByZXR1cm4gd3JhcHBlcjsKIH0KIAorc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXRXcmFwcGVyKE5vZGUqIG5vZGUpCit7CisgICAg
QVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBjb250
ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKTsKKyAgICBpZiAoTElLRUxZKCFj
b250ZXh0KSkgeworICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Piogd3JhcHBlciA9
IG5vZGUtPndyYXBwZXIoKTsKKyAgICAgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICAgICAgcmV0
dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgICAgICByZXR1cm4gKndyYXBwZXI7Cisg
ICAgfQorCisgICAgRE9NTm9kZU1hcHBpbmcmIGRvbU5vZGVNYXAgPSBjb250ZXh0LT53b3JsZCgp
LT5kb21EYXRhU3RvcmUoKS0+ZG9tTm9kZU1hcCgpOworICAgIHJldHVybiBkb21Ob2RlTWFwLmdl
dChub2RlKTsKK30KKwogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVy
dE5vZGVUb1Y4T2JqZWN0KE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gdjg6Ok51bGwoKTsKICAgICAKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBl
ciA9IGdldFdyYXBwZXIobm9kZSk7CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIHdyYXBwZXI7CisKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBub2RlLT5kb2N1
bWVudCgpOwogICAgIGlmIChub2RlID09IGRvY3VtZW50KQogICAgICAgICByZXR1cm4gY29udmVy
dERvY3VtZW50VG9WOE9iamVjdChkb2N1bWVudCk7Ci0gICAgCi0gICAgRE9NV3JhcHBlck1hcDxO
b2RlPiYgZG9tTm9kZU1hcCA9IGdldERPTU5vZGVNYXAoKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZXIgPSBkb21Ob2RlTWFwLmdldChub2RlKTsKLSAgICBpZiAod3JhcHBlci5J
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3Qobm9kZSwg
MCwgZG9tTm9kZU1hcCk7Ci0gICAgCi0gICAgcmV0dXJuIHdyYXBwZXI7CisKKyAgICByZXR1cm4g
Y29udmVydE5ld05vZGVUb1Y4T2JqZWN0KG5vZGUsIDAsIGdldERPTU5vZGVNYXAoKSk7CiB9CiAg
ICAgCiAvLyBDYWxsZXIgY2hlY2tzIG5vZGUgaXMgbm90IG51bGwuCi12ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3QoTm9kZSogbm9kZSwg
VjhQcm94eSogcHJveHksIERPTVdyYXBwZXJNYXA8Tm9kZT4mIGRvbU5vZGVNYXApCit2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3QoTm9k
ZSogbm9kZSwgVjhQcm94eSogcHJveHksIERPTU5vZGVNYXBwaW5nJiBkb21Ob2RlTWFwKQogewog
ICAgIGlmICghcHJveHkgJiYgbm9kZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcHJveHkgPSBWOFBy
b3h5OjpyZXRyaWV2ZShub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV3JhcHBlci5oCmluZGV4IGJkZjY1NDcuLjEzZjAyYmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TVdyYXBwZXIuaApAQCAtMTUwLDcgKzE1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgICAgIHJldHVybiBjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3Qobm9kZSwgMCwgZ2V0RE9NTm9k
ZU1hcCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gY29udmVydE5ld05vZGVUb1Y4T2JqZWN0KE5vZGUqLCBWOFByb3h5KiwgRE9NV3JhcHBlck1h
cDxOb2RlPiYpOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRO
ZXdOb2RlVG9WOE9iamVjdChOb2RlKiwgVjhQcm94eSosIERPTU5vZGVNYXBwaW5nJik7CiAKICAg
ICAgICAgc3RhdGljIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkb21XcmFwcGVyVHlwZSh2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47521</attachid>
            <date>2010-01-27 05:27:34 -0800</date>
            <delta_ts>2010-01-27 11:18:35 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-33957-20100127162731.patch</filename>
            <type>text/plain</type>
            <size>19116</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzhlOWMwNi4uODJhMmM0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxMC0wMS0yNyBBbnRvbiBNdWhpbiA8
YW50b25tQGdvb2dsZS5jb20+CisgICAgICAgIFJldmlldyBieSBBZGFtIEJhcnRoLgorCisgICAg
ICAgIEltcGxlbWVudCBOb2RlIG1hcCBpbiBpbnRydXNpdmUgd2F5IGZvciBiZXR0ZXIgc3BlZWQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzk1Nwor
CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6RE9N
RGF0YTo6cmVtb3ZlT2JqZWN0c0Zyb21XcmFwcGVyTWFwKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9ET01EYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjpJbnRy
dXNpdmVET01XcmFwcGVyTWFwOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3Jl
OjpJbnRydXNpdmVET01XcmFwcGVyTWFwOjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0
YVN0b3JlOjpJbnRydXNpdmVET01XcmFwcGVyTWFwOjpyZW1vdmVJZlByZXNlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjpJbnRydXNpdmVET01XcmFwcGVyTWFwOjpjb250YWlu
cyk6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJN
YXA6OnZpc2l0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9N
V3JhcHBlck1hcDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjpJbnRy
dXNpdmVET01XcmFwcGVyTWFwOjphbGxvY2F0ZVRhYmxlRW50cnkpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NRGF0YVN0b3JlOjpJbnRydXNpdmVET01XcmFwcGVyTWFwOjpmcmVlVGFibGVFbnRyeSk6
CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpET01EYXRhU3RvcmU6OkludHJ1c2l2ZURPTVdyYXBwZXJNYXA6OkludHJ1c2l2ZURPTVdyYXBw
ZXJNYXApOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjpJbnRydXNpdmVET01XcmFw
cGVyTWFwOjpjbGVhckVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50
cnVzaXZlRE9NV3JhcHBlck1hcDo6Y2xlYXJFbnRyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6dmlzaXRFbnRyaWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6SW50cnVzaXZlRE9NV3JhcHBlck1hcDo6VGFibGVD
aHVuazo6VGFibGVDaHVuayk6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6OmRvbU5v
ZGVNYXApOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdGF0aWNET01EYXRhU3RvcmU6OlN0YXRpY0RPTURhdGFTdG9yZSk6
CisgICAgICAgICogYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmg6CisgICAgICAgICog
YmluZGluZ3MvdjgvVjhET01NYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RE9NTm9kZU1h
cCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01NYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDo6QWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDo6d2Vha1JlZmVyZW5jZUNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OldlYWtSZWZlcmVuY2VNYXA6OldlYWtSZWZlcmVu
Y2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDo6c2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYWtSZWZlcmVuY2VNYXA6OnZpc2l0KToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9WOERPTVdyYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpj
b252ZXJ0RG9jdW1lbnRUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFdyYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0TmV3Tm9kZVRvVjhPYmpl
Y3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorCiAyMDEwLTAxLTI3
ICBKb2NlbHluIFR1cmNvdHRlICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgVG9yIEFybmUgVmVzdGLDuC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRE9NRGF0YS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmgKaW5kZXgg
OTM0ODBjYS4uN2ZhOWU3ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRh
LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmgKQEAgLTYyLDcgKzYyLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGRlcmVmRGVsYXllZE9iamVjdHMoKTsK
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAgICBzdGF0aWMgdm9pZCByZW1v
dmVPYmplY3RzRnJvbVdyYXBwZXJNYXAoRE9NV3JhcHBlck1hcDxUPiYgZG9tTWFwKTsKKyAgICAg
ICAgc3RhdGljIHZvaWQgcmVtb3ZlT2JqZWN0c0Zyb21XcmFwcGVyTWFwKEFic3RyYWN0V2Vha1Jl
ZmVyZW5jZU1hcDxULCB2ODo6T2JqZWN0PiYgZG9tTWFwKTsKIAogICAgICAgICBUaHJlYWRJZGVu
dGlmaWVyIG93bmluZ1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3duaW5nVGhyZWFkOyB9CiAK
QEAgLTExMyw3ICsxMTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIERPTURhdGE6OnJlbW92ZU9iamVjdHNGcm9tV3Jh
cHBlck1hcChET01XcmFwcGVyTWFwPFQ+JiBkb21NYXApCisgICAgdm9pZCBET01EYXRhOjpyZW1v
dmVPYmplY3RzRnJvbVdyYXBwZXJNYXAoQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwPFQsIHY4OjpP
YmplY3Q+JiBkb21NYXApCiAgICAgewogICAgICAgICBXcmFwcGVyTWFwT2JqZWN0UmVtb3ZlcjxU
PiByZW1vdmVyOwogICAgICAgICBkb21NYXAudmlzaXQoJnJlbW92ZXIpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9ET01EYXRhU3RvcmUuY3BwCmluZGV4IDMzNmY2NjIuLmUxODFlYmMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0RPTURhdGFTdG9yZS5jcHAKQEAgLTE3NCw2ICsxNzQsMjAgQEAgdm9pZCBET01EYXRhU3Rv
cmU6OndlYWtOb2RlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2OE9iamVjdCwg
dm9pZCogZG8KICAgICB9CiB9CiAKK2Jvb2wgRE9NRGF0YVN0b3JlOjpJbnRydXNpdmVET01XcmFw
cGVyTWFwOjpyZW1vdmVJZlByZXNlbnQoTm9kZSogb2JqLCB2ODo6UGVyc2lzdGVudDx2ODo6RGF0
YT4gdmFsdWUpCit7CisgICAgQVNTRVJUKG9iaik7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4qIGVudHJ5ID0gb2JqLT53cmFwcGVyKCk7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICgqZW50cnkgIT0gdmFsdWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBvYmotPmNsZWFyV3JhcHBlcigpOworICAgIG1fdGFibGUucmVtb3ZlKGVudHJ5
KTsKKyAgICB2YWx1ZS5EaXNwb3NlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKICNpZiBFTkFC
TEUoU1ZHKQogCiB2b2lkIERPTURhdGFTdG9yZTo6d2Vha1NWR0VsZW1lbnRJbnN0YW5jZUNhbGxi
YWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdjhPYmplY3QsIHZvaWQqIGRvbU9iamVjdCkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmggYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oCmluZGV4IGUwMjcwNTguLjU0YTQ5ZTcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmgKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBET01E
YXRhU3RvcmVfaAogCiAjaW5jbHVkZSAiRE9NT2JqZWN0c0luY2x1ZGUuaCIKKyNpbmNsdWRlICJW
OE5vZGUuaCIKIAogI2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAg
LTQ5LDYgKzUwLDk1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHR5cGVkZWYgV1RGOjpW
ZWN0b3I8RE9NRGF0YVN0b3JlKj4gRE9NRGF0YUxpc3Q7CiAKKyAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgaW50IENIVU5LX1NJWkUsIGNsYXNzIFRyYWl0cz4KKyAgICBjbGFzcyBDaHVua2VkVGFibGUg
eworICAgICAgcHVibGljOgorICAgICAgICBDaHVua2VkVGFibGUoKSA6IG1fY2h1bmtzKDApLCBt
X2N1cnJlbnQoMCksIG1fbGFzdCgwKSB7IH0KKworICAgICAgICBUKiBhZGQoVCBlbGVtZW50KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09IG1fbGFzdCkgeworICAgICAg
ICAgICAgICAgIG1fY2h1bmtzID0gbmV3IENodW5rKG1fY2h1bmtzKTsKKyAgICAgICAgICAgICAg
ICBtX2N1cnJlbnQgPSBtX2NodW5rcy0+bV9lbnRyaWVzOworICAgICAgICAgICAgICAgIG1fbGFz
dCA9IG1fY3VycmVudCArIENIVU5LX1NJWkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBB
U1NFUlQoKG1fY2h1bmtzLT5tX2VudHJpZXMgPD0gbV9jdXJyZW50KSAmJiAobV9jdXJyZW50IDwg
bV9sYXN0KSk7CisgICAgICAgICAgICBUKiBwID0gbV9jdXJyZW50Kys7CisgICAgICAgICAgICAq
cCA9IGVsZW1lbnQ7CisgICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgcmVtb3ZlKFQqIGVsZW1lbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChl
bGVtZW50KTsKKyAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnQgPiBtX2NodW5rcy0+bV9lbnRy
aWVzKTsKKyAgICAgICAgICAgIG1fY3VycmVudC0tOworICAgICAgICAgICAgaWYgKGVsZW1lbnQg
IT0gbV9jdXJyZW50KQorICAgICAgICAgICAgICAgIFRyYWl0czo6bW92ZShlbGVtZW50LCBtX2N1
cnJlbnQpOworICAgICAgICAgICAgaWYgKG1fY3VycmVudCA9PSBtX2NodW5rcy0+bV9lbnRyaWVz
KSB7CisgICAgICAgICAgICAgICAgQ2h1bmsqIHRvRGVsZXRlID0gbV9jaHVua3M7CisgICAgICAg
ICAgICAgICAgbV9jaHVua3MgPSB0b0RlbGV0ZS0+bV9wcmV2aW91czsKKyAgICAgICAgICAgICAg
ICBtX2N1cnJlbnQgPSBtX2xhc3QgPSBtX2NodW5rcyA/IG1fY2h1bmtzLT5tX2VudHJpZXMgKyBD
SFVOS19TSVpFIDogMDsKKyAgICAgICAgICAgICAgICBkZWxldGUgdG9EZWxldGU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBBU1NFUlQoIW1fY2h1bmtzIHx8ICgobV9jaHVua3MtPm1fZW50
cmllcyA8IG1fY3VycmVudCkgJiYgKG1fY3VycmVudCA8PSBtX2xhc3QpKSk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2No
dW5rcykKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGNsZWFyRW50cmll
cyhtX2NodW5rcy0+bV9lbnRyaWVzLCBtX2N1cnJlbnQpOworICAgICAgICAgICAgQ2h1bmsqIGxh
c3QgPSBtX2NodW5rczsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAg
ICAgQ2h1bmsqIHByZXZpb3VzID0gbGFzdC0+bV9wcmV2aW91czsKKyAgICAgICAgICAgICAgICBp
ZiAoIXByZXZpb3VzKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBkZWxldGUgbGFzdDsKKyAgICAgICAgICAgICAgICBjbGVhckVudHJpZXMocHJldmlvdXMtPm1f
ZW50cmllcywgcHJldmlvdXMtPm1fZW50cmllcyArIENIVU5LX1NJWkUpOworICAgICAgICAgICAg
ICAgIGxhc3QgPSBwcmV2aW91czsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jaHVu
a3MgPSBsYXN0OworICAgICAgICAgICAgbV9jdXJyZW50ID0gbV9jaHVua3MtPm1fZW50cmllczsK
KyAgICAgICAgICAgIG1fbGFzdCA9IG1fY3VycmVudCArIENIVU5LX1NJWkU7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIHZpc2l0KHR5cGVuYW1lIFRyYWl0czo6VmlzaXRvciogdmlzaXRvcikK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2NodW5rcykKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIHZpc2l0RW50cmllcyhtX2NodW5rcy0+bV9lbnRyaWVzLCBt
X2N1cnJlbnQsIHZpc2l0b3IpOworICAgICAgICAgICAgZm9yIChDaHVuayogY2h1bmsgPSBtX2No
dW5rcy0+bV9wcmV2aW91czsgY2h1bms7IGNodW5rID0gY2h1bmstPm1fcHJldmlvdXMpCisgICAg
ICAgICAgICAgICAgdmlzaXRFbnRyaWVzKGNodW5rLT5tX2VudHJpZXMsIGNodW5rLT5tX2VudHJp
ZXMgKyBDSFVOS19TSVpFLCB2aXNpdG9yKTsKKyAgICAgICAgfQorCisgICAgICBwcml2YXRlOgor
ICAgICAgICBzdHJ1Y3QgQ2h1bmsgeworICAgICAgICAgICAgZXhwbGljaXQgQ2h1bmsoQ2h1bmsq
IHByZXZpb3VzKSA6IG1fcHJldmlvdXMocHJldmlvdXMpIHsgfQorICAgICAgICAgICAgQ2h1bmsq
IGNvbnN0IG1fcHJldmlvdXM7CisgICAgICAgICAgICBUIG1fZW50cmllc1tDSFVOS19TSVpFXTsK
KyAgICAgICAgfTsKKworICAgICAgICBzdGF0aWMgdm9pZCBjbGVhckVudHJpZXMoVCogZmlyc3Qs
IFQqIGxhc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoVCogZW50cnkgPSBmaXJzdDsg
ZW50cnkgPCBsYXN0OyBlbnRyeSsrKQorICAgICAgICAgICAgICAgIFRyYWl0czo6Y2xlYXIoZW50
cnkpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRFbnRyaWVzKFQqIGZp
cnN0LCBUKiBsYXN0LCB0eXBlbmFtZSBUcmFpdHM6OlZpc2l0b3IqIHZpc2l0b3IpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGZvciAoVCogZW50cnkgPSBmaXJzdDsgZW50cnkgPCBsYXN0OyBlbnRy
eSsrKQorICAgICAgICAgICAgICAgIFRyYWl0czo6dmlzaXQoZW50cnksIHZpc2l0b3IpOworICAg
ICAgICB9CisKKyAgICAgICAgQ2h1bmsqIG1fY2h1bmtzOworICAgICAgICBUKiBtX2N1cnJlbnQ7
CisgICAgICAgIFQqIG1fbGFzdDsKKyAgICB9OworCiAgICAgLy8gRE9NRGF0YVN0b3JlCiAgICAg
Ly8KICAgICAvLyBET01EYXRhU3RvcmUgaXMgdGhlIGJhY2tpbmcgc3RvcmUgdGhhdCBob2xkcyB0
aGUgbWFwcyBiZXR3ZWVuIERPTSBvYmplY3RzCkBAIC04Niw2ICsxNzYsNzkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICAgICAgRE9NRGF0YSogbV9kb21EYXRhOwogICAgICAgICB9Owog
CisgICAgICAgIGNsYXNzIEludHJ1c2l2ZURPTVdyYXBwZXJNYXAgOiBwdWJsaWMgQWJzdHJhY3RX
ZWFrUmVmZXJlbmNlTWFwPE5vZGUsIHY4OjpPYmplY3Q+IHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgSW50cnVzaXZlRE9NV3JhcHBlck1hcCh2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNr
IGNhbGxiYWNrKQorICAgICAgICAgICAgICAgIDogQWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwPE5v
ZGUsIHY4OjpPYmplY3Q+KGNhbGxiYWNrKSB7IH0KKworICAgICAgICAgICAgdmlydHVhbCB2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBnZXQoTm9kZSogb2JqKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KiB3cmFwcGVyID0gb2JqLT53
cmFwcGVyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIgPyAqd3JhcHBlciA6IHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHZpcnR1YWwgdm9pZCBzZXQoTm9kZSogb2JqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3
cmFwcGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChvYmopOworICAg
ICAgICAgICAgICAgIEFTU0VSVCghb2JqLT53cmFwcGVyKCkpOworICAgICAgICAgICAgICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KiBlbnRyeSA9IG1fdGFibGUuYWRkKHdyYXBwZXIpOwor
ICAgICAgICAgICAgICAgIG9iai0+c2V0V3JhcHBlcihlbnRyeSk7CisgICAgICAgICAgICAgICAg
d3JhcHBlci5NYWtlV2VhayhvYmosIHdlYWtSZWZlcmVuY2VDYWxsYmFjaygpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdmlydHVhbCBib29sIGNvbnRhaW5zKE5vZGUqIG9iaikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqLT53cmFwcGVyKCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdChWaXNpdG9yKiB2aXNp
dG9yKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fdGFibGUudmlzaXQodmlzaXRv
cik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZpcnR1YWwgYm9vbCByZW1vdmVJZlBy
ZXNlbnQoTm9kZSoga2V5LCB2ODo6UGVyc2lzdGVudDx2ODo6RGF0YT4gdmFsdWUpOworCisgICAg
ICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG1fdGFibGUuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgc3RhdGljIGludCBjb25zdCBudW1iZXJPZkVudHJpZXMgPSAoMSA8PCAxMCkg
LSAxOworCisgICAgICAgICAgICBzdHJ1Y3QgQ2h1bmtlZFRhYmxlVHJhaXRzIHsKKyAgICAgICAg
ICAgICAgICB0eXBlZGVmIEludHJ1c2l2ZURPTVdyYXBwZXJNYXA6OlZpc2l0b3IgVmlzaXRvcjsK
KworICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIG1vdmUodjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4qIHRhcmdldCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIHNvdXJjZSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICp0YXJnZXQgPSAqc291cmNlOworICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gVjhOb2RlOjp0b05hdGl2ZSgqdGFyZ2V0KTsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBu
b2RlLT5zZXRXcmFwcGVyKHRhcmdldCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgc3RhdGljIHZvaWQgY2xlYXIodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIGVudHJ5
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IFY4
Tm9kZTo6dG9OYXRpdmUoKmVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PndyYXBwZXIoKSA9PSBlbnRyeSk7CisKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJX
cmFwcGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5EaXNwb3NlKCk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXQodjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4qIGVudHJ5LCBWaXNpdG9yKiB2aXNpdG9yKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IFY4Tm9kZTo6dG9OYXRpdmUo
KmVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPndyYXBwZXIoKSA9PSBl
bnRyeSk7CisKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci0+dmlzaXRET01XcmFwcGVyKG5v
ZGUsICplbnRyeSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKworICAgICAg
ICAgICAgdHlwZWRlZiBDaHVua2VkVGFibGU8djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4sIG51
bWJlck9mRW50cmllcywgQ2h1bmtlZFRhYmxlVHJhaXRzPiBUYWJsZTsKKyAgICAgICAgICAgIFRh
YmxlIG1fdGFibGU7CisgICAgICAgIH07CisKICAgICAgICAgRE9NRGF0YVN0b3JlKERPTURhdGEq
KTsKICAgICAgICAgdmlydHVhbCB+RE9NRGF0YVN0b3JlKCk7CiAKQEAgLTEwMiw3ICsyNjUsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCogZ2V0RE9NV3JhcHBlck1hcChE
T01XcmFwcGVyTWFwVHlwZSk7CiAKLSAgICAgICAgSW50ZXJuYWxET01XcmFwcGVyTWFwPE5vZGU+
JiBkb21Ob2RlTWFwKCkgeyByZXR1cm4gKm1fZG9tTm9kZU1hcDsgfQorICAgICAgICBET01Ob2Rl
TWFwcGluZyYgZG9tTm9kZU1hcCgpIHsgcmV0dXJuICptX2RvbU5vZGVNYXA7IH0KICAgICAgICAg
SW50ZXJuYWxET01XcmFwcGVyTWFwPHZvaWQ+JiBkb21PYmplY3RNYXAoKSB7IHJldHVybiAqbV9k
b21PYmplY3RNYXA7IH0KICAgICAgICAgSW50ZXJuYWxET01XcmFwcGVyTWFwPHZvaWQ+JiBhY3Rp
dmVEb21PYmplY3RNYXAoKSB7IHJldHVybiAqbV9hY3RpdmVEb21PYmplY3RNYXA7IH0KICNpZiBF
TkFCTEUoU1ZHKQpAQCAtMTIyLDcgKzI4NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgc3RhdGljIHZvaWQgd2Vha1NWR09iamVjdFdpdGhDb250ZXh0Q2FsbGJhY2sodjg6OlBlcnNp
c3RlbnQ8djg6OlZhbHVlPiB2OE9iamVjdCwgdm9pZCogZG9tT2JqZWN0KTsKICNlbmRpZgogICAg
ICAgICAKLSAgICAgICAgSW50ZXJuYWxET01XcmFwcGVyTWFwPE5vZGU+KiBtX2RvbU5vZGVNYXA7
CisgICAgICAgIERPTU5vZGVNYXBwaW5nKiBtX2RvbU5vZGVNYXA7CiAgICAgICAgIEludGVybmFs
RE9NV3JhcHBlck1hcDx2b2lkPiogbV9kb21PYmplY3RNYXA7CiAgICAgICAgIEludGVybmFsRE9N
V3JhcHBlck1hcDx2b2lkPiogbV9hY3RpdmVEb21PYmplY3RNYXA7CiAjaWYgRU5BQkxFKFNWRykK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmNwcAppbmRleCAzYTAyYzBi
Li43MjIwNTFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFT
dG9yZS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuY3Bw
CkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU3RhdGljRE9NRGF0YVN0
b3JlOjpTdGF0aWNET01EYXRhU3RvcmUoRE9NRGF0YSogZG9tRGF0YSkKICAgICA6IERPTURhdGFT
dG9yZShkb21EYXRhKQotICAgICwgbV9zdGF0aWNEb21Ob2RlTWFwKGRvbURhdGEsICZET01EYXRh
U3RvcmU6OndlYWtOb2RlQ2FsbGJhY2spCisgICAgLCBtX3N0YXRpY0RvbU5vZGVNYXAoJkRPTURh
dGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjaykKICAgICAsIG1fc3RhdGljRG9tT2JqZWN0TWFwKGRv
bURhdGEsICZET01EYXRhU3RvcmU6OndlYWtET01PYmplY3RDYWxsYmFjaykKICAgICAsIG1fc3Rh
dGljQWN0aXZlRG9tT2JqZWN0TWFwKGRvbURhdGEsICZET01EYXRhU3RvcmU6OndlYWtBY3RpdmVE
T01PYmplY3RDYWxsYmFjaykKICNpZiBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU3Rh
dGljRE9NRGF0YVN0b3JlLmgKaW5kZXggNGNkMDUxNS4uNjRhOTBlMCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuaAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAg
ICBTdGF0aWNET01EYXRhU3RvcmUoRE9NRGF0YSopOwogCiBwcml2YXRlOgotICAgIEludGVybmFs
RE9NV3JhcHBlck1hcDxOb2RlPiBtX3N0YXRpY0RvbU5vZGVNYXA7CisgICAgSW50cnVzaXZlRE9N
V3JhcHBlck1hcCBtX3N0YXRpY0RvbU5vZGVNYXA7CiAgICAgSW50ZXJuYWxET01XcmFwcGVyTWFw
PHZvaWQ+IG1fc3RhdGljRG9tT2JqZWN0TWFwOwogICAgIEludGVybmFsRE9NV3JhcHBlck1hcDx2
b2lkPiBtX3N0YXRpY0FjdGl2ZURvbU9iamVjdE1hcDsKICNpZiBFTkFCTEUoU1ZHKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NTWFwLmNwcAppbmRleCA4M2UyNjg0Li5mYTJmYmEzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NTWFwLmNwcApAQCAtNjUsNyArNjUsNyBAQCB2b2lkIGVuYWJsZUZhc3RlckRPTVN0b3JlQWNj
ZXNzKCkKICAgICBmYXN0ZXJET01TdG9yZUFjY2VzcyA9IHRydWU7CiB9CiAKLURPTVdyYXBwZXJN
YXA8Tm9kZT4mIGdldERPTU5vZGVNYXAoKQorRE9NTm9kZU1hcHBpbmcmIGdldERPTU5vZGVNYXAo
KQogewogICAgIHJldHVybiBnZXRET01EYXRhU3RvcmUoKS5kb21Ob2RlTWFwKCk7CiB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmggYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NTWFwLmgKaW5kZXggY2RkYjBhNC4uZDQyZGFhNCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01N
YXAuaApAQCAtNDEsMTIgKzQxLDM2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBT
VkdFbGVtZW50SW5zdGFuY2U7CiAjZW5kaWYKIAorICAgIHRlbXBsYXRlIDxjbGFzcyBLZXlUeXBl
LCBjbGFzcyBWYWx1ZVR5cGU+IGNsYXNzIEFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcCB7CisgICAg
cHVibGljOgorICAgICAgICBBYnN0cmFjdFdlYWtSZWZlcmVuY2VNYXAodjg6OldlYWtSZWZlcmVu
Y2VDYWxsYmFjayBjYWxsYmFjaykgOiBtX3dlYWtSZWZlcmVuY2VDYWxsYmFjayhjYWxsYmFjaykg
eyB9CisKKyAgICAgICAgY2xhc3MgVmlzaXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdERPTVdyYXBwZXIoS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lz
dGVudDxWYWx1ZVR5cGU+IG9iamVjdCkgPSAwOworICAgICAgICB9OworCisgICAgICAgIHZpcnR1
YWwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPiBnZXQoS2V5VHlwZSogb2JqKSA9IDA7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXQoS2V5VHlwZSogb2JqLCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5
cGU+IHdyYXBwZXIpID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGNvbnRhaW5zKEtleVR5cGUq
IG9iaikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoVmlzaXRvciogdmlzaXRvcikg
PSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgcmVtb3ZlSWZQcmVzZW50KEtleVR5cGUqIGtleSwg
djg6OlBlcnNpc3RlbnQ8djg6OkRhdGE+IHZhbHVlKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBjbGVhcigpID0gMDsKKworICAgICAgICB2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIHdlYWtS
ZWZlcmVuY2VDYWxsYmFjaygpIHsgcmV0dXJuIG1fd2Vha1JlZmVyZW5jZUNhbGxiYWNrOyB9Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgdjg6OldlYWtSZWZlcmVuY2VDYWxsYmFjayBtX3dlYWtSZWZl
cmVuY2VDYWxsYmFjazsKKyAgICB9OworCisgICAgdHlwZWRlZiBBYnN0cmFjdFdlYWtSZWZlcmVu
Y2VNYXA8Tm9kZSwgdjg6Ok9iamVjdD4gRE9NTm9kZU1hcHBpbmc7CisKICAgICAvLyBBIHRhYmxl
IG9mIHdyYXBwZXJzIHdpdGggd2VhayBwb2ludGVycy4KICAgICAvLyBUaGlzIHRhYmxlIGFsbG93
cyB1cyB0byBhdm9pZCB0cmFjayB3cmFwcGVkIG9iamVjdHMgZm9yIGRlYnVnZ2luZwogICAgIC8v
IGFuZCBmb3IgZW5zdXJpbmcgdGhhdCB3ZSBkb24ndCBkb3VibGUgd3JhcCB0aGUgc2FtZSBvYmpl
Y3QuCi0gICAgdGVtcGxhdGU8Y2xhc3MgS2V5VHlwZSwgY2xhc3MgVmFsdWVUeXBlPiBjbGFzcyBX
ZWFrUmVmZXJlbmNlTWFwIHsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBLZXlUeXBlLCBjbGFzcyBWYWx1
ZVR5cGU+IGNsYXNzIFdlYWtSZWZlcmVuY2VNYXAgOiBwdWJsaWMgQWJzdHJhY3RXZWFrUmVmZXJl
bmNlTWFwPEtleVR5cGUsIFZhbHVlVHlwZT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgV2Vha1Jl
ZmVyZW5jZU1hcCh2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrKSA6IG1fd2Vha1Jl
ZmVyZW5jZUNhbGxiYWNrKGNhbGxiYWNrKSB7IH0KKyAgICAgICAgdHlwZWRlZiBBYnN0cmFjdFdl
YWtSZWZlcmVuY2VNYXA8S2V5VHlwZSwgVmFsdWVUeXBlPiBQYXJlbnQ7CisgICAgICAgIFdlYWtS
ZWZlcmVuY2VNYXAodjg6OldlYWtSZWZlcmVuY2VDYWxsYmFjayBjYWxsYmFjaykgOiBQYXJlbnQo
Y2FsbGJhY2spIHsgfQogICAgICAgICB2aXJ0dWFsIH5XZWFrUmVmZXJlbmNlTWFwKCkKICAgICAg
ICAgewogICAgICNpZm5kZWYgTkRFQlVHCkBAIC02NSw3ICs4OSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHNldChLZXlUeXBlKiBvYmosIHY4OjpQZXJzaXN0
ZW50PFZhbHVlVHlwZT4gd3JhcHBlcikKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKCFt
X21hcC5jb250YWlucyhvYmopKTsKLSAgICAgICAgICAgIHdyYXBwZXIuTWFrZVdlYWsob2JqLCBt
X3dlYWtSZWZlcmVuY2VDYWxsYmFjayk7CisgICAgICAgICAgICB3cmFwcGVyLk1ha2VXZWFrKG9i
aiwgUGFyZW50Ojp3ZWFrUmVmZXJlbmNlQ2FsbGJhY2soKSk7CiAgICAgICAgICAgICBtX21hcC5z
ZXQob2JqLCAqd3JhcHBlcik7CiAgICAgICAgIH0KIApAQCAtOTksMTQgKzEyMyw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIGNvbnRhaW5zKEtleVR5cGUqIG9iaikgeyBy
ZXR1cm4gbV9tYXAuY29udGFpbnMob2JqKTsgfQogCi0gICAgICAgIGNsYXNzIFZpc2l0b3Igewot
ICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRET01XcmFwcGVy
KEtleVR5cGUqLCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+KSA9IDA7Ci0gICAgICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgICAgIHZpcnR1YWwgflZpc2l0b3IoKSB7IH0KLSAgICAgICAgfTsKLQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoVmlzaXRvciogdmlzaXRvcikKKyAgICAgICAgdmly
dHVhbCB2b2lkIHZpc2l0KHR5cGVuYW1lIFBhcmVudDo6VmlzaXRvciogdmlzaXRvcikKICAgICAg
ICAgewogICAgICAgICAgICAgdHlwZW5hbWUgSGFzaE1hcDxLZXlUeXBlKiwgVmFsdWVUeXBlKj46
Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsKICAgICAgICAgICAgIGZvciAoOyBpdCAhPSBt
X21hcC5lbmQoKTsgKytpdCkKQEAgLTEzOSw3ICsxNTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgfTsKIAogICAgIC8vIEEgbWFwIGZyb20gRE9NIG5vZGUgdG8gaXRzIEpTIHdyYXBwZXIu
Ci0gICAgRE9NV3JhcHBlck1hcDxOb2RlPiYgZ2V0RE9NTm9kZU1hcCgpOworICAgIERPTU5vZGVN
YXBwaW5nJiBnZXRET01Ob2RlTWFwKCk7CiAgICAgdm9pZCB2aXNpdERPTU5vZGVzSW5DdXJyZW50
VGhyZWFkKERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3IqKTsKIAogICAgIC8vIEEgbWFwIGZy
b20gYSBET00gb2JqZWN0IChub24tbm9kZSkgdG8gaXRzIEpTIHdyYXBwZXIuIFRoaXMgbWFwIGRv
ZXMgbm90IGNvbnRhaW4gdGhlIERPTSBvYmplY3RzIHdoaWNoIGNhbiBoYXZlIHBlbmRpbmcgYWN0
aXZpdHkgKGFjdGl2ZSBkb20gb2JqZWN0cykuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV3JhcHBlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5j
cHAKaW5kZXggZDVkMDFjZC4uYjAxMjExMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTVdyYXBwZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVy
LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogCiAjaW5j
bHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJET01EYXRhU3Rv
cmUuaCIKICNpbmNsdWRlICJET01PYmplY3RzSW5jbHVkZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50
TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTEwNDksNyArMTA1
MCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnREb2N1bWVu
dFRvVjhPYmplY3QoRG9jdW1lbnQqIGRvY3VtZW50CiAgICAgaWYgKHByb3h5KQogICAgICAgICBw
cm94eS0+d2luZG93U2hlbGwoKS0+aW5pdENvbnRleHRJZk5lZWRlZCgpOwogCi0gICAgRE9NV3Jh
cHBlck1hcDxOb2RlPiYgZG9tTm9kZU1hcCA9IGdldERPTU5vZGVNYXAoKTsKKyAgICBET01Ob2Rl
TWFwcGluZyYgZG9tTm9kZU1hcCA9IGdldERPTU5vZGVNYXAoKTsKICAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXBwZXIgPSBkb21Ob2RlTWFwLmdldChkb2N1bWVudCk7CiAgICAgaWYgKHdy
YXBwZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gY29udmVydE5ld05vZGVUb1Y4T2JqZWN0
KGRvY3VtZW50LCBwcm94eSwgZG9tTm9kZU1hcCk7CkBAIC0xMDU3LDI1ICsxMDU4LDM5IEBAIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnREb2N1bWVudFRvVjhPYmpl
Y3QoRG9jdW1lbnQqIGRvY3VtZW50CiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKK3N0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0V3JhcHBlcihOb2RlKiBub2RlKQoreworICAgIEFTU0VS
VChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyAgICBWOElzb2xhdGVkQ29udGV4dCogY29udGV4dCA9
IFY4SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRlcmVkKCk7CisgICAgaWYgKExJS0VMWSghY29udGV4
dCkpIHsKKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIHdyYXBwZXIgPSBub2Rl
LT53cmFwcGVyKCk7CisgICAgICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICAgICAgcmV0dXJuICp3cmFwcGVyOworICAgIH0K
KworICAgIERPTU5vZGVNYXBwaW5nJiBkb21Ob2RlTWFwID0gY29udGV4dC0+d29ybGQoKS0+ZG9t
RGF0YVN0b3JlKCktPmRvbU5vZGVNYXAoKTsKKyAgICByZXR1cm4gZG9tTm9kZU1hcC5nZXQobm9k
ZSk7Cit9CisKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2Rl
VG9WOE9iamVjdChOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJu
IHY4OjpOdWxsKCk7CiAgICAgCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBn
ZXRXcmFwcGVyKG5vZGUpOworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiB3cmFwcGVyOworCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQo
KTsKICAgICBpZiAobm9kZSA9PSBkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGNvbnZlcnREb2N1
bWVudFRvVjhPYmplY3QoZG9jdW1lbnQpOwotICAgIAotICAgIERPTVdyYXBwZXJNYXA8Tm9kZT4m
IGRvbU5vZGVNYXAgPSBnZXRET01Ob2RlTWFwKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyID0gZG9tTm9kZU1hcC5nZXQobm9kZSk7Ci0gICAgaWYgKHdyYXBwZXIuSXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gY29udmVydE5ld05vZGVUb1Y4T2JqZWN0KG5vZGUsIDAsIGRv
bU5vZGVNYXApOwotICAgIAotICAgIHJldHVybiB3cmFwcGVyOworCisgICAgcmV0dXJuIGNvbnZl
cnROZXdOb2RlVG9WOE9iamVjdChub2RlLCAwLCBnZXRET01Ob2RlTWFwKCkpOwogfQogICAgIAog
Ly8gQ2FsbGVyIGNoZWNrcyBub2RlIGlzIG5vdCBudWxsLgotdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4RE9NV3JhcHBlcjo6Y29udmVydE5ld05vZGVUb1Y4T2JqZWN0KE5vZGUqIG5vZGUsIFY4UHJv
eHkqIHByb3h5LCBET01XcmFwcGVyTWFwPE5vZGU+JiBkb21Ob2RlTWFwKQordjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydE5ld05vZGVUb1Y4T2JqZWN0KE5vZGUqIG5v
ZGUsIFY4UHJveHkqIHByb3h5LCBET01Ob2RlTWFwcGluZyYgZG9tTm9kZU1hcCkKIHsKICAgICBp
ZiAoIXByb3h5ICYmIG5vZGUtPmRvY3VtZW50KCkpCiAgICAgICAgIHByb3h5ID0gVjhQcm94eTo6
cmV0cmlldmUobm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuaAppbmRleCBiZGY2NTQ3Li4xM2YwMmJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFw
cGVyLmgKQEAgLTE1MCw3ICsxNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAg
ICByZXR1cm4gY29udmVydE5ld05vZGVUb1Y4T2JqZWN0KG5vZGUsIDAsIGdldERPTU5vZGVNYXAo
KSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNv
bnZlcnROZXdOb2RlVG9WOE9iamVjdChOb2RlKiwgVjhQcm94eSosIERPTVdyYXBwZXJNYXA8Tm9k
ZT4mKTsKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0TmV3Tm9k
ZVRvVjhPYmplY3QoTm9kZSosIFY4UHJveHkqLCBET01Ob2RlTWFwcGluZyYpOwogCiAgICAgICAg
IHN0YXRpYyBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgZG9tV3JhcHBlclR5cGUodjg6Okhh
bmRsZTx2ODo6T2JqZWN0Pik7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>