<?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>51508</bug_id>
          
          <creation_ts>2010-12-22 16:57:53 -0800</creation_ts>
          <short_desc>WebProcess should be terminated if invalid frameIDs are passed to the UIProcess</short_desc>
          <delta_ts>2010-12-22 17:58:00 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>325797</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-12-22 16:57:53 -0800</bug_when>
    <thetext>The webProcess should be terminated if invalid frameIDs are passed to the UIProcess.  We should fix this and introduce a mechanism to do this in general.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325799</commentid>
    <comment_count>1</comment_count>
      <attachid>77280</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-12-22 16:59:40 -0800</bug_when>
    <thetext>Created attachment 77280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325820</commentid>
    <comment_count>2</comment_count>
      <attachid>77280</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-22 17:43:25 -0800</bug_when>
    <thetext>Comment on attachment 77280
Patch

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

&gt; WebKit2/Platform/CoreIPC/Connection.cpp:54
&gt; +    , m_inDispatchMessageCount(0)

I’m not sure this count is helpful. It’s just for the assertion?

&gt; WebKit2/Platform/CoreIPC/Connection.h:65
&gt; +    if (!(assertion)) { \
&gt; +        ASSERT(assertion); \

This evaluates the assertion twice in debug builds. It’s not obvious how to avoid that. We can probably live with this for a while, since it affects the macro not all the macro call sites.

&gt; WebKit2/UIProcess/WebPageProxy.cpp:76
&gt; +// FIXME: This should be generalized and moved to a different place.

Please do remove that FIXME.

&gt; WebKit2/UIProcess/WebPageProxy.cpp:891
&gt;      process()-&gt;frameCreated(frameID, m_mainFrame.get());

There is no need for the get() here. You can pass a RefPtr to a PassRefPtr without it. Unless frameCreated takes a raw pointer. In which case I wonder why owns the subframe proxy below.

&gt; WebKit2/UIProcess/WebPageProxy.cpp:902
&gt; +    RefPtr&lt;WebFrameProxy&gt; subFrame = WebFrameProxy::create(this, frameID);
&gt; +
&gt; +    // Add the frame to the process wide map.
&gt; +    process()-&gt;frameCreated(frameID, subFrame.get());

I probably would have done this in one line without the local variable. Also, if frameCreated takes ownership, this should be release() rather than get().

Since subframe is a word, I would not capitalize the “f” in this local variable or in function names.

&gt; WebKit2/UIProcess/WebProcessProxy.cpp:47
&gt; +template&lt;typename HashMap&gt;
&gt; +static inline bool isGoodMapKey(const typename HashMap::KeyType&amp; key)

Could just name this isGoodKey since the map will be right there was the template argument.

As we discussed, this would be great as a public HashMap static member function.

&gt; WebKit2/UIProcess/WebProcessProxy.cpp:49
&gt; +    return key != HashTraits&lt;typename HashMap::KeyType&gt;::emptyValue() &amp;&amp; !HashTraits&lt;typename HashMap::KeyType&gt;::isDeletedValue(key);

This implementation may be as good as we can achieve, but it gives the wrong answer for maps using non-default traits. We should consider making the trait typedefs public so they can be used for things like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325822</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-12-22 17:58:00 -0800</bug_when>
    <thetext>Landed in r74528.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77280</attachid>
            <date>2010-12-22 16:59:40 -0800</date>
            <delta_ts>2010-12-22 17:43:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patchForConnection.diff</filename>
            <type>text/plain</type>
            <size>23649</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDUxOSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMTAtMTItMjIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJQcm9j
ZXNzIHNob3VsZCBiZSB0ZXJtaW5hdGVkIGlmIGludmFsaWQgZnJhbWVJRHMgYXJlCisgICAgICAg
IHBhc3NlZCB0byB0aGUgVUlQcm9jZXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTE1MDgKKworICAgICAgICAtIEludHJvZHVjZSBhIG1lY2hhbmlz
bSB0byBtYXJrIGEgbWVzc2FnZXMgYXMgaW52YWxpZCBkdWUgdG8KKyAgICAgICAgICByZWFzb25z
IG90aGVyIHRoYW4gaW4gYWJpbGl0eSB0byBkZWNvZGUgdGhlIG1lc3NhZ2UsIGVnLiBhbgorICAg
ICAgICAgIGludmFsaWQgZnJhbWVJRCBpcyBwYXNzZWQgaW4gYSBtZXNzYWdlLgorCisgICAgICAg
ICogUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAgICAgKENvcmVJUEM6OkNv
bm5lY3Rpb246OkNvbm5lY3Rpb24pOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6bWFy
a0N1cnJlbnRseURpc3BhdGNoZWRNZXNzYWdlQXNJbnZhbGlkKTogU2V0cworICAgICAgICB0aGUg
bV9kaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UgYml0IHNvIHRoYXQgaXQgY2FuIGJlIHBpY2tlZCB1
cCBpbiAKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZXMpOiBD
aGVjayBmb3IgbV9kaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UgaW4KKyAgICAgICAgYWRkaXRpb24g
dG8gdGFpbnRlZCBhcmd1bWVudHMuCisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0
aW9uLmg6CisgICAgICAgIEFkZCBiYXNlIG1hY3JvIGZvciBvdGhlcnMgdG8gZXh0ZW5kLCB0aGF0
IGNhbGxzIG1hcmtDdXJyZW50bHlEaXNwYXRjaGVkTWVzc2FnZUFzSW52YWxpZCgpCisgICAgICAg
IEFTU0VSVHMsIGFuZCByZXR1cm5zLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHA6CisgICAgICAgIEFkZCBNZXNzYWdlIGNoZWNrcyBmb3IgYWxsIFdlYkZyYW1lUHJveHkn
cyBnb3R0ZW4gZnJvbSBmcmFtZUlEcyBwYXNzZWQKKyAgICAgICAgb3ZlciB0aGUgd2lyZS4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
aXNHb29kTWFwS2V5KToKKyAgICAgICAgQ2hlY2tzIHRoYXQgdGhlIGtleSBjYW4gYmUgaW5zZXJ0
ZWQgc2FmZWx5IGludG8gYSBtYXAgKGVnLiBub3QgdGhlIGVtcHR5IG9yIGRlbGV0ZWQgdmFsdWUp
LgorCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6d2ViRnJhbWUpOgorICAgICAg
ICBSZXR1cm4gbnVsbCBmb3IgYmFkIGtleXMgKGVnLiAwIG9yIC0xKS4KKworICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUHJveHk6OmNhbkNyZWF0ZUZyYW1lKToKKyAgICAgICAgQWRkZWQuIENo
ZWNrcyB0aGF0IHRoZSBJRCBpcyBnb29kIGFuZCBub3QgaW4gdGhlIG1hcCB5ZXQuIFVzZWQKKyAg
ICAgICAgYXMgYSBjb25zaXN0ZW5jeSBjaGVjayBiZWZvcmUgY3JlYXRpbmcgZnJhbWVzLgorCisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6ZnJhbWVDcmVhdGVkKTogCisgICAgICAg
IEFTU0VSVCB0aGF0IHRoZSBrZXkgaXMgZ29vZCwgaW4gYWRkaXRpb24gdG8gbm90IGluIHRoZSBt
YXAgeWV0LgorCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6ZGlkRGVzdHJveUZy
YW1lKToKKyAgICAgICAgQVNTRVJUIHRoYXQgdGhlIGtleSBpcyBnb29kLgorCisgICAgICAgICog
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oOgorICAgICAgICBNb3ZlIFdlYkZyYW1lUHJveHkg
SGFzaE1hcCB0eXBlIGludG8gYSB0eXBlZGVmLgorCiAyMDEwLTEyLTIyICBBbmRlcnMgQ2FybHNz
b24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGJ1aWxkLgpJbmRleDogV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcAkocmV2aXNpb24gNzQ0MzApCisrKyBX
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDYgKzUxLDggQEAgQ29ubmVjdGlvbjo6Q29ubmVjdGlvbihJZGVudGlmaWVyIGlkZW50aQog
ICAgICwgbV9pc0Nvbm5lY3RlZChmYWxzZSkKICAgICAsIG1fY29ubmVjdGlvblF1ZXVlKCJjb20u
YXBwbGUuQ29yZUlQQy5SZWNlaXZlUXVldWUiKQogICAgICwgbV9jbGllbnRSdW5Mb29wKGNsaWVu
dFJ1bkxvb3ApCisgICAgLCBtX2luRGlzcGF0Y2hNZXNzYWdlQ291bnQoMCkKKyAgICAsIG1fZGlk
UmVjZWl2ZUludmFsaWRNZXNzYWdlKGZhbHNlKQogICAgICwgbV9zaG91bGRXYWl0Rm9yU3luY1Jl
cGxpZXModHJ1ZSkKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwpAQCAtNzgsNiArODAsMTQgQEAg
dm9pZCBDb25uZWN0aW9uOjppbnZhbGlkYXRlKCkKICAgICBtX2Nvbm5lY3Rpb25RdWV1ZS5zY2hl
ZHVsZVdvcmsoV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6cGxhdGZvcm1JbnZh
bGlkYXRlKSk7CiB9CiAKK3ZvaWQgQ29ubmVjdGlvbjo6bWFya0N1cnJlbnRseURpc3BhdGNoZWRN
ZXNzYWdlQXNJbnZhbGlkKCkKK3sKKyAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3
aGlsZSBwcm9jZXNzaW5nIGEgbWVzc2FnZS4KKyAgICBBU1NFUlQobV9pbkRpc3BhdGNoTWVzc2Fn
ZUNvdW50ID4gMCk7CisKKyAgICBtX2RpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZSA9IHRydWU7Cit9
CisKIFBhc3NPd25QdHI8QXJndW1lbnRFbmNvZGVyPiBDb25uZWN0aW9uOjpjcmVhdGVTeW5jTWVz
c2FnZUFyZ3VtZW50RW5jb2Rlcih1aW50NjRfdCBkZXN0aW5hdGlvbklELCB1aW50NjRfdCYgc3lu
Y1JlcXVlc3RJRCkKIHsKICAgICBPd25QdHI8QXJndW1lbnRFbmNvZGVyPiBhcmd1bWVudEVuY29k
ZXIgPSBBcmd1bWVudEVuY29kZXI6OmNyZWF0ZShkZXN0aW5hdGlvbklEKTsKQEAgLTQyMCwxMyAr
NDMwLDIzIEBAIHZvaWQgQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlcygpCiAgICAgICAgIElu
Y29taW5nTWVzc2FnZSYgbWVzc2FnZSA9IGluY29taW5nTWVzc2FnZXNbaV07CiAgICAgICAgIE93
blB0cjxBcmd1bWVudERlY29kZXI+IGFyZ3VtZW50cyA9IG1lc3NhZ2UucmVsZWFzZUFyZ3VtZW50
cygpOwogCisgICAgICAgIG1faW5EaXNwYXRjaE1lc3NhZ2VDb3VudCsrOworCisgICAgICAgIGJv
b2wgb2xkRGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlID0gbV9kaWRSZWNlaXZlSW52YWxpZE1lc3Nh
Z2U7CisgICAgICAgIG1fZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlID0gZmFsc2U7CisKICAgICAg
ICAgaWYgKG1lc3NhZ2UubWVzc2FnZUlEKCkuaXNTeW5jKCkpCiAgICAgICAgICAgICBkaXNwYXRj
aFN5bmNNZXNzYWdlKG1lc3NhZ2UubWVzc2FnZUlEKCksIGFyZ3VtZW50cy5nZXQoKSk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZSh0aGlzLCBt
ZXNzYWdlLm1lc3NhZ2VJRCgpLCBhcmd1bWVudHMuZ2V0KCkpOwogCi0gICAgICAgIGlmIChhcmd1
bWVudHMtPmlzSW52YWxpZCgpKQorICAgICAgICBtX2RpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZSB8
PSBhcmd1bWVudHMtPmlzSW52YWxpZCgpOworICAgICAgICBtX2luRGlzcGF0Y2hNZXNzYWdlQ291
bnQtLTsKKworICAgICAgICBpZiAobV9kaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UpCiAgICAgICAg
ICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKHRoaXMsIG1lc3NhZ2UubWVz
c2FnZUlEKCkpOworCisgICAgICAgIG1fZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlID0gb2xkRGlk
UmVjZWl2ZUludmFsaWRNZXNzYWdlOwogICAgIH0KIH0KIApJbmRleDogV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvQ29ubmVjdGlvbi5oCShyZXZpc2lvbiA3NDQzMCkKKysrIFdlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy9Db25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDE0IEBAIGVu
dW0gU3luY1JlcGx5TW9kZSB7CiAgICAgTWFudWFsUmVwbHkKIH07CiAKKyNkZWZpbmUgTUVTU0FH
RV9DSEVDS19CQVNFKGFzc2VydGlvbiwgY29ubmVjdGlvbikgZG8gXAorICAgIGlmICghKGFzc2Vy
dGlvbikpIHsgXAorICAgICAgICBBU1NFUlQoYXNzZXJ0aW9uKTsgXAorICAgICAgICAoY29ubmVj
dGlvbiktPm1hcmtDdXJyZW50bHlEaXNwYXRjaGVkTWVzc2FnZUFzSW52YWxpZCgpOyBcCisgICAg
ICAgIHJldHVybjsgXAorICAgIH0gXAord2hpbGUgKDApCisKIGNsYXNzIENvbm5lY3Rpb24gOiBw
dWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxDb25uZWN0aW9uPiB7CiBwdWJsaWM6CiAgICAgY2xhc3Mg
TWVzc2FnZVJlY2VpdmVyIHsKQEAgLTEwMSw2ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICBib29s
IG9wZW4oKTsKICAgICB2b2lkIGludmFsaWRhdGUoKTsKKyAgICB2b2lkIG1hcmtDdXJyZW50bHlE
aXNwYXRjaGVkTWVzc2FnZUFzSW52YWxpZCgpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgdmFyaWFu
dCBvZiBzZW5kIGlzIGRlcHJlY2F0ZWQsIGFsbCBjbGllbnRzIHNob3VsZCBtb3ZlIHRvIHRoZSBv
dmVybG9hZCB0aGF0IHRha2VzIGEgbWVzc2FnZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFLCB0
eXBlbmFtZSBUPiBib29sIHNlbmQoRSBtZXNzYWdlSUQsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQs
IGNvbnN0IFQmIGFyZ3VtZW50cyk7CkBAIC0xODUsNiArMTk0LDkgQEAgcHJpdmF0ZToKICAgICBX
b3JrUXVldWUgbV9jb25uZWN0aW9uUXVldWU7CiAgICAgUnVuTG9vcCogbV9jbGllbnRSdW5Mb29w
OwogCisgICAgdWludDMyX3QgbV9pbkRpc3BhdGNoTWVzc2FnZUNvdW50OworICAgIGJvb2wgbV9k
aWRSZWNlaXZlSW52YWxpZE1lc3NhZ2U7CisKICAgICAvLyBJbmNvbWluZyBtZXNzYWdlcy4KICAg
ICB0eXBlZGVmIE1lc3NhZ2U8QXJndW1lbnREZWNvZGVyPiBJbmNvbWluZ01lc3NhZ2U7CiAKSW5k
ZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gNzQ0MzApCisrKyBXZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3
Myw5IEBACiAvLyBUaGlzIGNvbnRyb2xzIHdoYXQgc3RyYXRlZ3kgd2UgdXNlIGZvciBtb3VzZSB3
aGVlbCBjb2FsZXNpbmcuCiAjZGVmaW5lIE1FUkdFX1dIRUVMX0VWRU5UUyAwCiAKKy8vIEZJWE1F
OiBUaGlzIHNob3VsZCBiZSBnZW5lcmFsaXplZCBhbmQgbW92ZWQgdG8gYSBkaWZmZXJlbnQgcGxh
Y2UuCisjZGVmaW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0Uo
YXNzZXJ0aW9uLCBwcm9jZXNzKCktPmNvbm5lY3Rpb24oKSkKKwogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtODc5LDE2ICs4ODIsMjQgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OmludGVycHJldEtleUV2ZW50KHVpbgogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkQ3JlYXRlTWFpbkZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpCiB7Ci0gICAgQVNTRVJUKCFtX21h
aW5GcmFtZSk7CisgICAgTUVTU0FHRV9DSEVDSyghbV9tYWluRnJhbWUpOworICAgIE1FU1NBR0Vf
Q0hFQ0socHJvY2VzcygpLT5jYW5DcmVhdGVGcmFtZShmcmFtZUlEKSk7CiAKICAgICBtX21haW5G
cmFtZSA9IFdlYkZyYW1lUHJveHk6OmNyZWF0ZSh0aGlzLCBmcmFtZUlEKTsKKworICAgIC8vIEFk
ZCB0aGUgZnJhbWUgdG8gdGhlIHByb2Nlc3Mgd2lkZSBtYXAuCiAgICAgcHJvY2VzcygpLT5mcmFt
ZUNyZWF0ZWQoZnJhbWVJRCwgbV9tYWluRnJhbWUuZ2V0KCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGlkQ3JlYXRlU3ViRnJhbWUodWludDY0X3QgZnJhbWVJRCkKIHsKLSAgICBBU1NFUlQo
bV9tYWluRnJhbWUpOwotICAgIHByb2Nlc3MoKS0+ZnJhbWVDcmVhdGVkKGZyYW1lSUQsIFdlYkZy
YW1lUHJveHk6OmNyZWF0ZSh0aGlzLCBmcmFtZUlEKS5nZXQoKSk7CisgICAgTUVTU0FHRV9DSEVD
SyhtX21haW5GcmFtZSk7CisgICAgTUVTU0FHRV9DSEVDSyhwcm9jZXNzKCktPmNhbkNyZWF0ZUZy
YW1lKGZyYW1lSUQpKTsKKyAgICAKKyAgICBSZWZQdHI8V2ViRnJhbWVQcm94eT4gc3ViRnJhbWUg
PSBXZWJGcmFtZVByb3h5OjpjcmVhdGUodGhpcywgZnJhbWVJRCk7CisKKyAgICAvLyBBZGQgdGhl
IGZyYW1lIHRvIHRoZSBwcm9jZXNzIHdpZGUgbWFwLgorICAgIHByb2Nlc3MoKS0+ZnJhbWVDcmVh
dGVkKGZyYW1lSUQsIHN1YkZyYW1lLmdldCgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRp
ZFN0YXJ0UHJvZ3Jlc3MoKQpAQCAtOTIwLDYgKzkzMSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRTdGFydFByb3Zpc2lvbmFsTG8KICAgICAgICAgcmV0dXJuOwogCiAgICAgV2ViRnJhbWVQcm94
eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOworICAgIE1FU1NBR0VfQ0hF
Q0soZnJhbWUpOwogCiAgICAgaWYgKCFsb2FkaW5nU3Vic3RpdHV0ZURhdGFGb3JVbnJlYWNoYWJs
ZVVSTCkKICAgICAgICAgZnJhbWUtPnNldFVucmVhY2hhYmxlVVJMKFN0cmluZygpKTsKQEAgLTkz
Niw4ICs5NDgsMTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcgog
ICAgICAgICByZXR1cm47CiAKICAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHByb2Nlc3MoKS0+
d2ViRnJhbWUoZnJhbWVJRCk7CisgICAgTUVTU0FHRV9DSEVDSyhmcmFtZSk7CiAKICAgICBmcmFt
ZS0+ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKHVybCk7CisKICAg
ICBtX2xvYWRlckNsaWVudC5kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExv
YWRGb3JGcmFtZSh0aGlzLCBmcmFtZSwgdXNlckRhdGEuZ2V0KCkpOwogfQogCkBAIC05NDksOCAr
OTYzLDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRGYWlsUHJvdmlzaW9uYWxMb2EKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZy
YW1lKGZyYW1lSUQpOworICAgIE1FU1NBR0VfQ0hFQ0soZnJhbWUpOwogCiAgICAgZnJhbWUtPmRp
ZEZhaWxQcm92aXNpb25hbExvYWQoKTsKKwogICAgIG1fbG9hZGVyQ2xpZW50LmRpZEZhaWxQcm92
aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZSh0aGlzLCBmcmFtZSwgZXJyb3IsIHVzZXJEYXRh
LmdldCgpKTsKIH0KIApAQCAtOTYyLDYgKzk3OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRD
b21taXRMb2FkRm9yRnJhbWUKICAgICAgICAgcmV0dXJuOwogCiAgICAgV2ViRnJhbWVQcm94eSog
ZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOworICAgIE1FU1NBR0VfQ0hFQ0so
ZnJhbWUpOwogCiAgICAgZnJhbWUtPnNldE1JTUVUeXBlKG1pbWVUeXBlKTsKICAgICBmcmFtZS0+
c2V0SXNGcmFtZVNldChmYWxzZSk7CkBAIC05ODQsNiArMTAwMSw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpkaWRGaW5pc2hEb2N1bWVudExvYWQKICAgICAgICAgcmV0dXJuOwogCiAgICAgV2ViRnJh
bWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOworICAgIE1FU1NB
R0VfQ0hFQ0soZnJhbWUpOwogCiAgICAgbV9sb2FkZXJDbGllbnQuZGlkRmluaXNoRG9jdW1lbnRM
b2FkRm9yRnJhbWUodGhpcywgZnJhbWUsIHVzZXJEYXRhLmdldCgpKTsKIH0KQEAgLTk5Niw4ICsx
MDE0LDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaW5pc2hMb2FkRm9yRnJhbWUKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZy
YW1lKGZyYW1lSUQpOworICAgIE1FU1NBR0VfQ0hFQ0soZnJhbWUpOwogCiAgICAgZnJhbWUtPmRp
ZEZpbmlzaExvYWQoKTsKKwogICAgIG1fbG9hZGVyQ2xpZW50LmRpZEZpbmlzaExvYWRGb3JGcmFt
ZSh0aGlzLCBmcmFtZSwgdXNlckRhdGEuZ2V0KCkpOwogfQogCkBAIC0xMDA5LDYgKzEwMjksOCBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmFpbExvYWRGb3JGcmFtZSh1CiAgICAgICAgIHJldHVy
bjsKIAogICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53ZWJGcmFtZShmcmFt
ZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNLKGZyYW1lKTsKKwogICAgIGZyYW1lLT5kaWRGYWlsTG9h
ZCgpOwogCiAgICAgbV9sb2FkZXJDbGllbnQuZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZSh0
aGlzLCBmcmFtZSwgZXJyb3IsIHVzZXJEYXRhLmdldCgpKTsKQEAgLTEwMjIsNiArMTA0NCw4IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpkaWRTYW1lRG9jdW1lbnROYXZpZ2EKICAgICAgICAgcmV0dXJu
OwogCiAgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1l
SUQpOworICAgIE1FU1NBR0VfQ0hFQ0soZnJhbWUpOworCiAgICAgZnJhbWUtPmRpZFNhbWVEb2N1
bWVudE5hdmlnYXRpb24odXJsKTsKIAogICAgIG1fbG9hZGVyQ2xpZW50LmRpZFNhbWVEb2N1bWVu
dE5hdmlnYXRpb25Gb3JGcmFtZSh0aGlzLCBmcmFtZSwgc3RhdGljX2Nhc3Q8U2FtZURvY3VtZW50
TmF2aWdhdGlvblR5cGU+KG9wYXF1ZVNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlKSwgdXNlckRh
dGEuZ2V0KCkpOwpAQCAtMTAzNSw2ICsxMDU5LDggQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJl
Y2VpdmVUaXRsZUZvckZyYQogICAgICAgICByZXR1cm47CiAKICAgICBXZWJGcmFtZVByb3h5KiBm
cmFtZSA9IHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CisgICAgTUVTU0FHRV9DSEVDSyhm
cmFtZSk7CisKICAgICBmcmFtZS0+ZGlkQ2hhbmdlVGl0bGUodGl0bGUpOwogICAgIAogICAgIG1f
bG9hZGVyQ2xpZW50LmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKHRoaXMsIHRpdGxlLCBmcmFtZSwg
dXNlckRhdGEuZ2V0KCkpOwpAQCAtMTA0OCw2ICsxMDc0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmRpZEZpcnN0TGF5b3V0Rm9yRnJhbQogICAgICAgICByZXR1cm47CiAKICAgICBXZWJGcmFtZVBy
b3h5KiBmcmFtZSA9IHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CisgICAgTUVTU0FHRV9D
SEVDSyhmcmFtZSk7CiAKICAgICBtX2xvYWRlckNsaWVudC5kaWRGaXJzdExheW91dEZvckZyYW1l
KHRoaXMsIGZyYW1lLCB1c2VyRGF0YS5nZXQoKSk7CiB9CkBAIC0xMDYwLDYgKzEwODcsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmlyc3RWaXN1YWxseU5vbkVtCiAgICAgICAgIHJldHVybjsK
IAogICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlE
KTsKKyAgICBNRVNTQUdFX0NIRUNLKGZyYW1lKTsKIAogICAgIG1fbG9hZGVyQ2xpZW50LmRpZEZp
cnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0YS5n
ZXQoKSk7CiB9CkBAIC0xMDcyLDYgKzExMDAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVt
b3ZlRnJhbWVGcm9tSGllCiAgICAgICAgIHJldHVybjsKIAogICAgIFdlYkZyYW1lUHJveHkqIGZy
YW1lID0gcHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNLKGZy
YW1lKTsKIAogICAgIG1fbG9hZGVyQ2xpZW50LmRpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeSh0
aGlzLCBmcmFtZSwgdXNlckRhdGEuZ2V0KCkpOwogfQpAQCAtMTA4NCw2ICsxMTEzLDcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmRpZERpc3BsYXlJbnNlY3VyZUNvbgogICAgICAgICByZXR1cm47CiAK
ICAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7
CisgICAgTUVTU0FHRV9DSEVDSyhmcmFtZSk7CiAKICAgICBtX2xvYWRlckNsaWVudC5kaWREaXNw
bGF5SW5zZWN1cmVDb250ZW50Rm9yRnJhbWUodGhpcywgZnJhbWUsIHVzZXJEYXRhLmdldCgpKTsK
IH0KQEAgLTEwOTYsNiArMTEyNiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSdW5JbnNlY3Vy
ZUNvbnRlbnQKICAgICAgICAgcmV0dXJuOwogCiAgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBw
cm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOworICAgIE1FU1NBR0VfQ0hFQ0soZnJhbWUpOwog
CiAgICAgbV9sb2FkZXJDbGllbnQuZGlkUnVuSW5zZWN1cmVDb250ZW50Rm9yRnJhbWUodGhpcywg
ZnJhbWUsIHVzZXJEYXRhLmdldCgpKTsKIH0KQEAgLTExMDMsNiArMTEzNCw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpkaWRSdW5JbnNlY3VyZUNvbnRlbnQKIHZvaWQgV2ViUGFnZVByb3h5OjpmcmFt
ZURpZEJlY29tZUZyYW1lU2V0KHVpbnQ2NF90IGZyYW1lSUQsIGJvb2wgdmFsdWUpCiB7CiAgICAg
V2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOworICAg
IE1FU1NBR0VfQ0hFQ0soZnJhbWUpOwogCiAgICAgZnJhbWUtPnNldElzRnJhbWVTZXQodmFsdWUp
OwogfQpAQCAtMTExMiw2ICsxMTQ0LDggQEAgdm9pZCBXZWJQYWdlUHJveHk6OmZyYW1lRGlkQmVj
b21lRnJhbWVTZQogdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24odWludDY0X3QgZnJhbWVJRCwgdWludDMyX3Qgb3BhcXVlTmF2aWdhdGlvblR5cGUsIHVp
bnQzMl90IG9wYXF1ZU1vZGlmaWVycywgaW50MzJfdCBvcGFxdWVNb3VzZUJ1dHRvbiwgY29uc3Qg
U3RyaW5nJiB1cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQpCiB7CiAgICAgV2ViRnJhbWVQcm94eSog
ZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOworICAgIE1FU1NBR0VfQ0hFQ0so
ZnJhbWUpOworCiAgICAgTmF2aWdhdGlvblR5cGUgbmF2aWdhdGlvblR5cGUgPSBzdGF0aWNfY2Fz
dDxOYXZpZ2F0aW9uVHlwZT4ob3BhcXVlTmF2aWdhdGlvblR5cGUpOwogICAgIFdlYkV2ZW50OjpN
b2RpZmllcnMgbW9kaWZpZXJzID0gc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4ob3Bh
cXVlTW9kaWZpZXJzKTsKICAgICBXZWJNb3VzZUV2ZW50OjpCdXR0b24gbW91c2VCdXR0b24gPSBz
dGF0aWNfY2FzdDxXZWJNb3VzZUV2ZW50OjpCdXR0b24+KG9wYXF1ZU1vdXNlQnV0dG9uKTsKQEAg
LTExMjQsNiArMTE1OCw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZp
Z2EKIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24odWlu
dDY0X3QgZnJhbWVJRCwgdWludDMyX3Qgb3BhcXVlTmF2aWdhdGlvblR5cGUsIHVpbnQzMl90IG9w
YXF1ZU1vZGlmaWVycywgaW50MzJfdCBvcGFxdWVNb3VzZUJ1dHRvbiwgY29uc3QgU3RyaW5nJiB1
cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQpCiB7CiAgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBw
cm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOworICAgIE1FU1NBR0VfQ0hFQ0soZnJhbWUpOwor
CiAgICAgTmF2aWdhdGlvblR5cGUgbmF2aWdhdGlvblR5cGUgPSBzdGF0aWNfY2FzdDxOYXZpZ2F0
aW9uVHlwZT4ob3BhcXVlTmF2aWdhdGlvblR5cGUpOwogICAgIFdlYkV2ZW50OjpNb2RpZmllcnMg
bW9kaWZpZXJzID0gc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4ob3BhcXVlTW9kaWZp
ZXJzKTsKICAgICBXZWJNb3VzZUV2ZW50OjpCdXR0b24gbW91c2VCdXR0b24gPSBzdGF0aWNfY2Fz
dDxXZWJNb3VzZUV2ZW50OjpCdXR0b24+KG9wYXF1ZU1vdXNlQnV0dG9uKTsKQEAgLTExMzYsNiAr
MTE3Miw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW4KIHZvaWQg
V2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JNSU1FVHlwZSh1aW50NjRfdCBmcmFtZUlELCBj
b25zdCBTdHJpbmcmIE1JTUVUeXBlLCBjb25zdCBTdHJpbmcmIHVybCwgdWludDY0X3QgbGlzdGVu
ZXJJRCwgYm9vbCYgcmVjZWl2ZWRQb2xpY3lBY3Rpb24sIHVpbnQ2NF90JiBwb2xpY3lBY3Rpb24s
IHVpbnQ2NF90JiBkb3dubG9hZElEKQogewogICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJv
Y2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNLKGZyYW1lKTsKKwog
ICAgIFJlZlB0cjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+IGxpc3RlbmVyID0gZnJhbWUt
PnNldFVwUG9saWN5TGlzdGVuZXJQcm94eShsaXN0ZW5lcklEKTsKIAogICAgIEFTU0VSVCghbV9p
bkRlY2lkZVBvbGljeUZvck1JTUVUeXBlKTsKQEAgLTExNjYsNyArMTIwNCwxMCBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6d2lsbFN1Ym1pdEZvcm0odWludDY0CiAgICAgICAgIHJldHVybjsKIAogICAg
IFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKTsKKyAg
ICBNRVNTQUdFX0NIRUNLKGZyYW1lKTsKKwogICAgIFdlYkZyYW1lUHJveHkqIHNvdXJjZUZyYW1l
ID0gcHJvY2VzcygpLT53ZWJGcmFtZShzb3VyY2VGcmFtZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNL
KHNvdXJjZUZyYW1lKTsKIAogICAgIFJlZlB0cjxXZWJGb3JtU3VibWlzc2lvbkxpc3RlbmVyUHJv
eHk+IGxpc3RlbmVyID0gZnJhbWUtPnNldFVwRm9ybVN1Ym1pc3Npb25MaXN0ZW5lclByb3h5KGxp
c3RlbmVySUQpOwogICAgIGlmICghbV9mb3JtQ2xpZW50LndpbGxTdWJtaXRGb3JtKHRoaXMsIGZy
YW1lLCBzb3VyY2VGcmFtZSwgdGV4dEZpZWxkVmFsdWVzLnN0cmluZ1BhaXJWZWN0b3IoKSwgdXNl
ckRhdGEuZ2V0KCksIGxpc3RlbmVyLmdldCgpKSkKQEAgLTExNzgsNiArMTIxOSw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5Ojp3aWxsU3VibWl0Rm9ybSh1aW50NjQKIHZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRJbml0aWF0ZUxvYWRGb3JSZXNvdXJjZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCByZXNv
dXJjZUlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBX
ZWJGcmFtZVByb3h5KiBmcmFtZSA9IHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CisgICAg
TUVTU0FHRV9DSEVDSyhmcmFtZSk7CiAKICAgICBtX3Jlc291cmNlTG9hZENsaWVudC5kaWRJbml0
aWF0ZUxvYWRGb3JSZXNvdXJjZSh0aGlzLCBmcmFtZSwgcmVzb3VyY2VJZGVudGlmaWVyLCByZXF1
ZXN0KTsKIH0KQEAgLTExODUsNiArMTIyNyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRJbml0
aWF0ZUxvYWRGb3JSZXMKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRTZW5kUmVxdWVzdEZvclJlc291
cmNlKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVj
dFJlc3BvbnNlKQogewogICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53ZWJG
cmFtZShmcmFtZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNLKGZyYW1lKTsKIAogICAgIG1fcmVzb3Vy
Y2VMb2FkQ2xpZW50LmRpZFNlbmRSZXF1ZXN0Rm9yUmVzb3VyY2UodGhpcywgZnJhbWUsIHJlc291
cmNlSWRlbnRpZmllciwgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiB9CkBAIC0xMTkyLDYg
KzEyMzUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkU2VuZFJlcXVlc3RGb3JSZXNvCiB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2UodWludDY0X3QgZnJh
bWVJRCwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKIHsKICAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHByb2Nlc3MoKS0+d2Vi
RnJhbWUoZnJhbWVJRCk7CisgICAgTUVTU0FHRV9DSEVDSyhmcmFtZSk7CiAKICAgICBtX3Jlc291
cmNlTG9hZENsaWVudC5kaWRSZWNlaXZlUmVzcG9uc2VGb3JSZXNvdXJjZSh0aGlzLCBmcmFtZSwg
cmVzb3VyY2VJZGVudGlmaWVyLCByZXNwb25zZSk7CiB9CkBAIC0xMTk5LDYgKzEyNDMsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yCiB2b2lkIFdlYlBhZ2VQcm94
eTo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhGb3JSZXNvdXJjZSh1aW50NjRfdCBmcmFtZUlELCB1
aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IGNvbnRlbnRMZW5ndGgpCiB7CiAg
ICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOwor
ICAgIE1FU1NBR0VfQ0hFQ0soZnJhbWUpOwogCiAgICAgbV9yZXNvdXJjZUxvYWRDbGllbnQuZGlk
UmVjZWl2ZUNvbnRlbnRMZW5ndGhGb3JSZXNvdXJjZSh0aGlzLCBmcmFtZSwgcmVzb3VyY2VJZGVu
dGlmaWVyLCBjb250ZW50TGVuZ3RoKTsKIH0KQEAgLTEyMDYsNiArMTI1MSw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpkaWRSZWNlaXZlQ29udGVudExlbmcKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRG
aW5pc2hMb2FkRm9yUmVzb3VyY2UodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcmVzb3VyY2VJ
ZGVudGlmaWVyKQogewogICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53ZWJG
cmFtZShmcmFtZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNLKGZyYW1lKTsKIAogICAgIG1fcmVzb3Vy
Y2VMb2FkQ2xpZW50LmRpZEZpbmlzaExvYWRGb3JSZXNvdXJjZSh0aGlzLCBmcmFtZSwgcmVzb3Vy
Y2VJZGVudGlmaWVyKTsKIH0KQEAgLTEyMTMsMTEgKzEyNTksMTEgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmRpZEZpbmlzaExvYWRGb3JSZXNvdQogdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZhaWxMb2Fk
Rm9yUmVzb3VyY2UodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVy
LCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICBXZWJGcmFtZVByb3h5KiBmcmFt
ZSA9IHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CisgICAgTUVTU0FHRV9DSEVDSyhmcmFt
ZSk7CiAKICAgICBtX3Jlc291cmNlTG9hZENsaWVudC5kaWRGYWlsTG9hZEZvclJlc291cmNlKHRo
aXMsIGZyYW1lLCByZXNvdXJjZUlkZW50aWZpZXIsIGVycm9yKTsKIH0KIAotCiAvLyBVSUNsaWVu
dAogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlTmV3UGFnZShjb25zdCBXaW5kb3dGZWF0dXJl
cyYgd2luZG93RmVhdHVyZXMsIHVpbnQzMl90IG9wYXF1ZU1vZGlmaWVycywgaW50MzJfdCBvcGFx
dWVNb3VzZUJ1dHRvbiwgdWludDY0X3QmIG5ld1BhZ2VJRCwgV2ViUGFnZUNyZWF0aW9uUGFyYW1l
dGVycyYgbmV3UGFnZVBhcmFtZXRlcnMpCkBAIC0xMjQzLDE3ICsxMjg5LDI2IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpjbG9zZVBhZ2UoKQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlw
dEFsZXJ0KHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBt
X3VpQ2xpZW50LnJ1bkphdmFTY3JpcHRBbGVydCh0aGlzLCBtZXNzYWdlLCBwcm9jZXNzKCktPndl
YkZyYW1lKGZyYW1lSUQpKTsKKyAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHByb2Nlc3MoKS0+
d2ViRnJhbWUoZnJhbWVJRCk7CisgICAgTUVTU0FHRV9DSEVDSyhmcmFtZSk7CisKKyAgICBtX3Vp
Q2xpZW50LnJ1bkphdmFTY3JpcHRBbGVydCh0aGlzLCBtZXNzYWdlLCBmcmFtZSk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0Q29uZmlybSh1aW50NjRfdCBmcmFtZUlELCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIGJvb2wmIHJlc3VsdCkKIHsKLSAgICByZXN1bHQgPSBtX3Vp
Q2xpZW50LnJ1bkphdmFTY3JpcHRDb25maXJtKHRoaXMsIG1lc3NhZ2UsIHByb2Nlc3MoKS0+d2Vi
RnJhbWUoZnJhbWVJRCkpOworICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53
ZWJGcmFtZShmcmFtZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNLKGZyYW1lKTsKKworICAgIHJlc3Vs
dCA9IG1fdWlDbGllbnQucnVuSmF2YVNjcmlwdENvbmZpcm0odGhpcywgbWVzc2FnZSwgZnJhbWUp
OwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdFByb21wdCh1aW50NjRfdCBm
cmFtZUlELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVl
LCBTdHJpbmcmIHJlc3VsdCkKIHsKLSAgICByZXN1bHQgPSBtX3VpQ2xpZW50LnJ1bkphdmFTY3Jp
cHRQcm9tcHQodGhpcywgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCBwcm9jZXNzKCktPndlYkZyYW1l
KGZyYW1lSUQpKTsKKyAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHByb2Nlc3MoKS0+d2ViRnJh
bWUoZnJhbWVJRCk7CisgICAgTUVTU0FHRV9DSEVDSyhmcmFtZSk7CisKKyAgICByZXN1bHQgPSBt
X3VpQ2xpZW50LnJ1bkphdmFTY3JpcHRQcm9tcHQodGhpcywgbWVzc2FnZSwgZGVmYXVsdFZhbHVl
LCBmcmFtZSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRTdGF0dXNUZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCkKQEAgLTEzMzUsNyArMTM5MCwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2Fu
UnVuQmVmb3JlVW5sb2FkQ29uCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpydW5CZWZvcmVVbmxvYWRD
b25maXJtUGFuZWwoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1aW50NjRfdCBmcmFtZUlELCBib29s
JiBzaG91bGRDbG9zZSkKIHsKLSAgICBzaG91bGRDbG9zZSA9IG1fdWlDbGllbnQucnVuQmVmb3Jl
VW5sb2FkQ29uZmlybVBhbmVsKHRoaXMsIG1lc3NhZ2UsIHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJh
bWVJRCkpOworICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53ZWJGcmFtZShm
cmFtZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNLKGZyYW1lKTsKKworICAgIHNob3VsZENsb3NlID0g
bV91aUNsaWVudC5ydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwodGhpcywgbWVzc2FnZSwgZnJh
bWUpOwogfQogCiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCkBAIC0xMzYyLDkgKzE0
MjAsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJ1bk9wZW5QYW5lbCh1aW50NjRfdAogICAgICAg
ICBtX29wZW5QYW5lbFJlc3VsdExpc3RlbmVyID0gMDsKICAgICB9CiAKKyAgICBXZWJGcmFtZVBy
b3h5KiBmcmFtZSA9IHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CisgICAgTUVTU0FHRV9D
SEVDSyhmcmFtZSk7CisKICAgICBtX29wZW5QYW5lbFJlc3VsdExpc3RlbmVyID0gV2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXJQcm94eTo6Y3JlYXRlKHRoaXMpOwogCi0gICAgaWYgKCFtX3VpQ2xp
ZW50LnJ1bk9wZW5QYW5lbCh0aGlzLCBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpLCBkYXRh
LCBtX29wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmdldCgpKSkKKyAgICBpZiAoIW1fdWlDbGllbnQu
cnVuT3BlblBhbmVsKHRoaXMsIGZyYW1lLCBkYXRhLCBtX29wZW5QYW5lbFJlc3VsdExpc3RlbmVy
LmdldCgpKSkKICAgICAgICAgZGlkQ2FuY2VsRm9yT3BlblBhbmVsKCk7CiB9CiAKQEAgLTE2ODks
NyArMTc1MCw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlRXZlbnQodWludDMKICAg
ICBjYXNlIFdlYkV2ZW50OjpSYXdLZXlEb3duOgogICAgIGNhc2UgV2ViRXZlbnQ6OkNoYXI6IHsK
ICAgICAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCBldmVudCA9IG1fa2V5RXZlbnRRdWV1ZS5m
aXJzdCgpOwotICAgICAgICBBU1NFUlQodHlwZSA9PSBldmVudC50eXBlKCkpOworICAgICAgICBN
RVNTQUdFX0NIRUNLKHR5cGUgPT0gZXZlbnQudHlwZSgpKTsKKwogICAgICAgICBtX2tleUV2ZW50
UXVldWUucmVtb3ZlRmlyc3QoKTsKIAogICAgICAgICBpZiAoaGFuZGxlZCkKQEAgLTE3NDgsNyAr
MTgxMCwxNSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkR2V0U291cmNlRm9yRnJhbWUoCiAKIHZv
aWQgV2ViUGFnZVByb3h5Ojpmb2N1c2VkRnJhbWVDaGFuZ2VkKHVpbnQ2NF90IGZyYW1lSUQpCiB7
Ci0gICAgbV9mb2N1c2VkRnJhbWUgPSBmcmFtZUlEID8gcHJvY2VzcygpLT53ZWJGcmFtZShmcmFt
ZUlEKSA6IDA7CisgICAgaWYgKCFmcmFtZUlEKSB7CisgICAgICAgIG1fZm9jdXNlZEZyYW1lID0g
MDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0g
cHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNLKGZyYW1lKTsK
KworICAgIG1fZm9jdXNlZEZyYW1lID0gZnJhbWU7CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCkBAIC0xODU2LDYgKzE5MjYsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6YmFj
a0ZvcndhcmRDbGVhcigpCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2FuQXV0aGVudGljYXRlQWdhaW5z
dFByb3RlY3Rpb25TcGFjZUluRnJhbWUodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6
UHJvdGVjdGlvblNwYWNlJiBjb3JlUHJvdGVjdGlvblNwYWNlLCBib29sJiBjYW5BdXRoZW50aWNh
dGUpCiB7CiAgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZy
YW1lSUQpOworICAgIE1FU1NBR0VfQ0hFQ0soZnJhbWUpOworCiAgICAgUmVmUHRyPFdlYlByb3Rl
Y3Rpb25TcGFjZT4gcHJvdGVjdGlvblNwYWNlID0gV2ViUHJvdGVjdGlvblNwYWNlOjpjcmVhdGUo
Y29yZVByb3RlY3Rpb25TcGFjZSk7CiAgICAgCiAgICAgY2FuQXV0aGVudGljYXRlID0gbV9sb2Fk
ZXJDbGllbnQuY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUluRnJhbWUodGhp
cywgZnJhbWUsIHByb3RlY3Rpb25TcGFjZS5nZXQoKSk7CkBAIC0xODY0LDYgKzE5MzYsOCBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6Y2FuQXV0aGVudGljYXRlQWdhaW5zCiB2b2lkIFdlYlBhZ2VQcm94
eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHVpbnQ2NF90IGZyYW1lSUQsIGNv
bnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjb3JlQ2hhbGxlbmdlLCB1aW50
NjRfdCBjaGFsbGVuZ2VJRCkKIHsKICAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHByb2Nlc3Mo
KS0+d2ViRnJhbWUoZnJhbWVJRCk7CisgICAgTUVTU0FHRV9DSEVDSyhmcmFtZSk7CisKICAgICBS
ZWZQdHI8QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eT4gYXV0aGVudGljYXRpb25DaGFsbGVu
Z2UgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoY29yZUNoYWxsZW5nZSwg
Y2hhbGxlbmdlSUQsIHRoaXMpOwogICAgIAogICAgIG1fbG9hZGVyQ2xpZW50LmRpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZUluRnJhbWUodGhpcywgZnJhbWUsIGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLmdldCgpKTsKQEAgLTE4NzIsNiArMTk0Niw4IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpkaWRSZWNlaXZlQXV0aGVudGljYXQKIHZvaWQgV2ViUGFnZVByb3h5OjpleGNlZWRlZERhdGFi
YXNlUXVvdGEodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwg
dWludDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50VXNhZ2UsIHVpbnQ2NF90IGV4
cGVjdGVkVXNhZ2UsIHVpbnQ2NF90JiBuZXdRdW90YSkKIHsKICAgICBXZWJGcmFtZVByb3h5KiBm
cmFtZSA9IHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CisgICAgTUVTU0FHRV9DSEVDSyhm
cmFtZSk7CisKICAgICBSZWZQdHI8V2ViU2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFdlYlNlY3Vy
aXR5T3JpZ2luOjpjcmVhdGUob3JpZ2luSWRlbnRpZmllcik7CiAKICAgICBuZXdRdW90YSA9IG1f
dWlDbGllbnQuZXhjZWVkZWREYXRhYmFzZVF1b3RhKHRoaXMsIGZyYW1lLCBvcmlnaW4uZ2V0KCks
IGRhdGFiYXNlTmFtZSwgZGlzcGxheU5hbWUsIGN1cnJlbnRRdW90YSwgY3VycmVudFVzYWdlLCBl
eHBlY3RlZFVzYWdlKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAko
cmV2aXNpb24gNzQ0MzApCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hNYXA+Citz
dGF0aWMgaW5saW5lIGJvb2wgaXNHb29kTWFwS2V5KGNvbnN0IHR5cGVuYW1lIEhhc2hNYXA6Oktl
eVR5cGUmIGtleSkKK3sKKyAgICByZXR1cm4ga2V5ICE9IEhhc2hUcmFpdHM8dHlwZW5hbWUgSGFz
aE1hcDo6S2V5VHlwZT46OmVtcHR5VmFsdWUoKSAmJiAhSGFzaFRyYWl0czx0eXBlbmFtZSBIYXNo
TWFwOjpLZXlUeXBlPjo6aXNEZWxldGVkVmFsdWUoa2V5KTsKK30KKwogc3RhdGljIHVpbnQ2NF90
IGdlbmVyYXRlUGFnZUlEKCkKIHsKICAgICBzdGF0aWMgdWludDY0X3QgdW5pcXVlUGFnZUlEID0g
MTsKQEAgLTI4MSw3ICsyODcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkQ2xvc2UoQ29y
ZUlQQzo6CiAKICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHBhZ2VzLnNpemUoKTsgaSA8
IHNpemU7ICsraSkKICAgICAgICAgcGFnZXNbaV0tPnByb2Nlc3NEaWRDcmFzaCgpOwotCiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoQ29yZUlQQzo6
Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQpCkBAIC0zMzgsMTIgKzM0
MywxNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nCiAKIFdlYkZy
YW1lUHJveHkqIFdlYlByb2Nlc3NQcm94eTo6d2ViRnJhbWUodWludDY0X3QgZnJhbWVJRCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9mcmFtZU1hcC5nZXQoZnJhbWVJRCkuZ2V0KCk7CisgICAgcmV0
dXJuIGlzR29vZE1hcEtleTxXZWJGcmFtZVByb3h5TWFwPihmcmFtZUlEKSA/IG1fZnJhbWVNYXAu
Z2V0KGZyYW1lSUQpLmdldCgpIDogMDsKK30KKworYm9vbCBXZWJQcm9jZXNzUHJveHk6OmNhbkNy
ZWF0ZUZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzR29vZE1h
cEtleTxXZWJGcmFtZVByb3h5TWFwPihmcmFtZUlEKSAmJiAhbV9mcmFtZU1hcC5jb250YWlucyhm
cmFtZUlEKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmZyYW1lQ3JlYXRlZCh1aW50NjRf
dCBmcmFtZUlELCBXZWJGcmFtZVByb3h5KiBmcmFtZVByb3h5KQogewotICAgIEFTU0VSVCghbV9m
cmFtZU1hcC5jb250YWlucyhmcmFtZUlEKSk7CisgICAgQVNTRVJUKGNhbkNyZWF0ZUZyYW1lKGZy
YW1lSUQpKTsKICAgICBtX2ZyYW1lTWFwLnNldChmcmFtZUlELCBmcmFtZVByb3h5KTsKIH0KIApA
QCAtMzUyLDYgKzM2Miw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWREZXN0cm95RnJhbWUo
dWkKICAgICAvLyBJZiB0aGUgcGFnZSBpcyBjbG9zZWQgYmVmb3JlIGl0IGhhcyBoYWQgdGhlIGNo
YW5jZSB0byBzZW5kIHRoZSBEaWRDcmVhdGVNYWluRnJhbWUgbWVzc2FnZQogICAgIC8vIGJhY2sg
dG8gdGhlIFVJUHJvY2VzcywgdGhlbiB0aGUgZnJhbWVEZXN0cm95ZWQgbWVzc2FnZSB3aWxsIHN0
aWxsIGJlIHJlY2VpdmVkIGJlY2F1c2UgaXQKICAgICAvLyBnZXRzIHNlbnQgZGlyZWN0bHkgdG8g
dGhlIFdlYlByb2Nlc3NQcm94eS4KKyAgICBBU1NFUlQoaXNHb29kTWFwS2V5PFdlYkZyYW1lUHJv
eHlNYXA+KGZyYW1lSUQpKTsKICAgICBtX2ZyYW1lTWFwLnJlbW92ZShmcmFtZUlEKTsKIH0KIApJ
bmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDc0NDMwKQorKysg
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDYgKzU1LDcgQEAgY2xhc3MgV2ViUHJvY2Vzc1Byb3h5IDogcHVibGljIFJlZkNvdW50ZQogcHVi
bGljOgogICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VQcm94eT4g
PiBXZWJQYWdlUHJveHlNYXA7CiAgICAgdHlwZWRlZiBXZWJQYWdlUHJveHlNYXA6OmNvbnN0X2l0
ZXJhdG9yOjpWYWx1ZXMgcGFnZXNfY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBIYXNoTWFw
PHVpbnQ2NF90LCBSZWZQdHI8V2ViRnJhbWVQcm94eT4gPiBXZWJGcmFtZVByb3h5TWFwOwogICAg
IHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+
ID4gV2ViQmFja0ZvcndhcmRMaXN0SXRlbU1hcDsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YlByb2Nlc3NQcm94eT4gY3JlYXRlKFdlYkNvbnRleHQqKTsKQEAgLTk1LDYgKzk2LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgY2FuU2VuZE1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBpc1ZhbGlkKCkg
fHwgaXNMYXVuY2hpbmcoKTsgfQogCiAgICAgV2ViRnJhbWVQcm94eSogd2ViRnJhbWUodWludDY0
X3QpIGNvbnN0OworICAgIGJvb2wgY2FuQ3JlYXRlRnJhbWUodWludDY0X3QgZnJhbWVJRCkgY29u
c3Q7CiAgICAgdm9pZCBmcmFtZUNyZWF0ZWQodWludDY0X3QsIFdlYkZyYW1lUHJveHkqKTsKICAg
ICB2b2lkIGRpZERlc3Ryb3lGcmFtZSh1aW50NjRfdCk7CiAgICAgdm9pZCBkaXNjb25uZWN0RnJh
bWVzRnJvbVBhZ2UoV2ViUGFnZVByb3h5Kik7IC8vIEluY2x1ZGluZyBtYWluIGZyYW1lLgpAQCAt
MTQ0LDkgKzE0Niw4IEBAIHByaXZhdGU6CiAgICAgV2ViQ29udGV4dCogbV9jb250ZXh0OwogCiAg
ICAgV2ViUGFnZVByb3h5TWFwIG1fcGFnZU1hcDsKKyAgICBXZWJGcmFtZVByb3h5TWFwIG1fZnJh
bWVNYXA7CiAgICAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbU1hcCBtX2JhY2tGb3J3YXJkTGlzdEl0
ZW1NYXA7Ci0KLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViRnJhbWVQcm94eT4gPiBt
X2ZyYW1lTWFwOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgRSwgdHlwZW5hbWUgVD4K
</data>
<flag name="review"
          id="68352"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>