<?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>26010</bug_id>
          
          <creation_ts>2009-05-25 09:05:20 -0700</creation_ts>
          <short_desc>Serialize calls to WebInspector</short_desc>
          <delta_ts>2009-05-26 05:24:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>123046</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-05-25 09:05:20 -0700</bug_when>
    <thetext>Serialize calls to WebInspector. This is the first step where method calls are being serialized to arrays (not yet JSON stringified ones) and are being dispatched on the client. This change also allows client to override InspectorFrontend, so that the serialized calls can be made on a given object instead of in-process WebInspector global. This will be the main control flow when InspectorController is decoupled from the in-process frontend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123048</commentid>
    <comment_count>1</comment_count>
      <attachid>30652</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-05-25 09:09:30 -0700</bug_when>
    <thetext>Created attachment 30652
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123057</commentid>
    <comment_count>2</comment_count>
      <attachid>30652</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-05-25 10:55:30 -0700</bug_when>
    <thetext>Comment on attachment 30652
patch

&gt; +    overrideFrontendObject(m_scriptState, webInspectorObj);

I think &quot;proxy&quot; is a better term for this than &quot;override&quot;.

Maybe frontendProxyObject?

&gt; +WebInspector.dispatch = function() {
&gt; +  var methodName = arguments[0];
&gt; +  var parameters = Array.prototype.slice.call(arguments, 1);
&gt; +  WebInspector[methodName].apply(this, parameters);
&gt; +}

Please use 4 spaces for indenting.

r- for that. Otherwise r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123072</commentid>
    <comment_count>3</comment_count>
      <attachid>30652</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-05-25 12:41:25 -0700</bug_when>
    <thetext>Comment on attachment 30652
patch

&gt; +ScriptFunctionCall* InspectorFrontend::newFunctionCall(const String&amp; functionName)
&gt; +{
&gt; +    ScriptFunctionCall* function = new ScriptFunctionCall(m_scriptState, m_webInspector, &quot;dispatch&quot;);
&gt; +    function-&gt;appendArgument(functionName);
&gt; +    return function;
&gt; +}

This would be an ideal place to use PassOwnPtr rather than a raw pointer, to indicate that ownership of an object is being transferred out of the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123074</commentid>
    <comment_count>4</comment_count>
      <attachid>30659</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-05-25 13:32:23 -0700</bug_when>
    <thetext>Created attachment 30659
patch

(In reply to comment #2)
&gt; (From update of attachment 30652 [review])
&gt; &gt; +    overrideFrontendObject(m_scriptState, webInspectorObj);
&gt; 
&gt; I think &quot;proxy&quot; is a better term for this than &quot;override&quot;.
&gt; 
&gt; Maybe frontendProxyObject?
&gt; 

Renamed to setFrontendProxyObject

&gt; &gt; +WebInspector.dispatch = function() {
&gt; &gt; +  var methodName = arguments[0];
&gt; &gt; +  var parameters = Array.prototype.slice.call(arguments, 1);
&gt; &gt; +  WebInspector[methodName].apply(this, parameters);
&gt; &gt; +}
&gt; 
&gt; Please use 4 spaces for indenting.
&gt; 

Done. Sorry about that - old habit.

&gt; r- for that. Otherwise r+.
&gt; 

(In reply to comment #3)
&gt; (From update of attachment 30652 [review])
&gt; &gt; +ScriptFunctionCall* InspectorFrontend::newFunctionCall(const String&amp; functionName)
&gt; &gt; +{
&gt; &gt; +    ScriptFunctionCall* function = new ScriptFunctionCall(m_scriptState, m_webInspector, &quot;dispatch&quot;);
&gt; &gt; +    function-&gt;appendArgument(functionName);
&gt; &gt; +    return function;
&gt; &gt; +}
&gt; 
&gt; This would be an ideal place to use PassOwnPtr rather than a raw pointer, to
&gt; indicate that ownership of an object is being transferred out of the function.
&gt; 

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123120</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-26 05:24:47 -0700</bug_when>
    <thetext>Committed revision 44149.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30652</attachid>
            <date>2009-05-25 09:09:30 -0700</date>
            <delta_ts>2009-05-25 13:32:23 -0700</delta_ts>
            <desc>patch</desc>
            <filename>serialize.txt</filename>
            <type>text/plain</type>
            <size>16680</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZTJiZDVhNy4uZjE2NzA5NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAwOS0wNS0yNSAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTZXJpYWxpemUgY2FsbHMgdG8gV2ViSW5zcGVjdG9yLiBUaGlz
IGlzIHRoZSBmaXJzdCBzdGVwIHdoZXJlIG1ldGhvZCAKKyAgICAgICAgY2FsbHMgYXJlIGJlaW5n
IHNlcmlhbGl6ZWQgdG8gYXJyYXlzIChub3QgeWV0IEpTT04gc3RyaW5naWZpZWQgb25lcykgYW5k
IAorICAgICAgICBhcmUgYmVpbmcgZGlzcGF0Y2hlZCBvbiB0aGUgY2xpZW50LiBUaGlzIGNoYW5n
ZSBhbHNvIGFsbG93cyBjbGllbnQgdG8gb3ZlcnJpZGUgCisgICAgICAgIEluc3BlY3RvckZyb250
ZW5kLCBzbyB0aGF0IHRoZSBzZXJpYWxpemVkIGNhbGxzIGNhbiBiZSBtYWRlIG9uIGEgZ2l2ZW4g
b2JqZWN0CisgICAgICAgIGluc3RlYWQgb2YgaW4tcHJvY2VzcyBXZWJJbnNwZWN0b3IgZ2xvYmFs
LiBUaGlzIHdpbGwgYmUgdGhlIG1haW4gY29udHJvbCBmbG93CisgICAgICAgIHdoZW4gSW5zcGVj
dG9yQ29udHJvbGxlciBpcyBkZWNvdXBsZWQgZnJvbSB0aGUgaW4tcHJvY2VzcyBmcm9udGVuZC4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYwMTAK
KworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNjcmlwdE9iamVjdFJlYWR5KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Om92ZXJyaWRlRnJvbnRlbmRPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvdyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kOjphZGRNZXNzYWdlVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kOjphZGRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZDo6dXBkYXRlUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmQ6OnJlbW92ZVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250
ZW5kOjp1cGRhdGVGb2N1c2VkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZDo6c2V0QXR0YWNoZWRXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmQ6Omluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OnNob3dQYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZDo6cG9wdWxhdGVJbnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kOjpkZWJ1Z2dlcldhc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmQ6OmRlYnVnZ2VyV2FzRGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRnJvbnRlbmQ6OnByb2ZpbGVyV2FzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZDo6cHJvZmlsZXJXYXNEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZDo6cGFyc2VkU2NyaXB0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kOjpmYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjphZGRQcm9maWxlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kOjpzZXRSZWNvcmRpbmdQcm9maWxlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpwYXVzZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OnJlc3VtZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmQ6OmFkZERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kOjphZGRET01TdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kOjpuZXdGdW5jdGlvbkNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmQ6OmNhbGxTaW1wbGVGdW5jdGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kLmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3Iu
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuZGlzcGF0Y2gpOgorCiAyMDA5LTA1LTIzICBIb2xn
ZXIgSGFucyBQZXRlciBGcmV5dGhlciAgPHplY2tlQHNlbGZpc2gub3JnPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQgYnVpbGQgZml4IGZvciBRdC4gQ2hhbmdlIHNpZ25hdHVyZSB0byBoYXZlIFBhc3NP
d25QdHIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGM5
OWMxNmQuLjBhNmRlZmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwCkBAIC01MzQsMTggKzUzNCwyNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNjcmlw
dE9iamVjdFJlYWR5KCkKICAgICBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yT2JqOwogICAgIGlm
ICghU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQobV9zY3JpcHRTdGF0ZSwgIldlYkluc3BlY3RvciIs
IHdlYkluc3BlY3Rvck9iaikpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2Zyb250ZW5kLnNldChu
ZXcgSW5zcGVjdG9yRnJvbnRlbmQobV9zY3JpcHRTdGF0ZSwgd2ViSW5zcGVjdG9yT2JqKSk7Cisg
ICAgb3ZlcnJpZGVGcm9udGVuZE9iamVjdChtX3NjcmlwdFN0YXRlLCB3ZWJJbnNwZWN0b3JPYmop
OwogCiAgICAgLy8gTWFrZSBzdXJlIG91ciB3aW5kb3cgaXMgdmlzaWJsZSBub3cgdGhhdCB0aGUg
cGFnZSBsb2FkZWQKICAgICBzaG93V2luZG93KCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6b3ZlcnJpZGVGcm9udGVuZE9iamVjdChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIFNj
cmlwdE9iamVjdCB3ZWJJbnNwZWN0b3JPYmopCit7CisgICAgbV9mcm9udGVuZC5zZXQobmV3IElu
c3BlY3RvckZyb250ZW5kKHNjcmlwdFN0YXRlLCB3ZWJJbnNwZWN0b3JPYmopKTsKK30KKwogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93KCkKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwotCisgICAgCiAgICAgaWYgKCFtX3BhZ2UpIHsKKyAgICAgICAgaWYgKG1f
ZnJvbnRlbmQuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm47ICAvLyBXZSBhcmUgdXNpbmcgY3Vz
dG9tIGZyb250ZW5kIC0gbm8gbmVlZCB0byBjcmVhdGUgcGFnZS4KKwogICAgICAgICBtX3BhZ2Ug
PSBtX2NsaWVudC0+Y3JlYXRlUGFnZSgpOwogICAgICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTYwNCw4ICs2MTIsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmNsb3NlV2luZG93KCkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlw
dE9iamVjdHMoKQogewotICAgIEFTU0VSVChtX3NjcmlwdFN0YXRlKTsKLSAgICBpZiAoIW1fc2Ny
aXB0U3RhdGUpCisgICAgQVNTRVJUKG1fZnJvbnRlbmQpOworICAgIGlmICghbV9mcm9udGVuZC5n
ZXQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVzb3VyY2VzTWFwOjppdGVyYXRvciByZXNv
dXJjZXNFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaAppbmRleCBkODZmNDRlLi5mMzM5ODI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oCkBAIC0xODQsNiArMTg0LDcgQEAgcHVibGljOgogICAgIHZvaWQg
d2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlKCk7CiAKICAgICB2b2lkIHNjcmlwdE9iamVjdFJl
YWR5KCk7CisgICAgdm9pZCBvdmVycmlkZUZyb250ZW5kT2JqZWN0KFNjcmlwdFN0YXRlKiBzdGF0
ZSwgU2NyaXB0T2JqZWN0IG9iamVjdCk7CiAKICAgICB2b2lkIHBvcHVsYXRlU2NyaXB0T2JqZWN0
cygpOwogICAgIHZvaWQgcmVzZXRTY3JpcHRPYmplY3RzKCk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5jcHAKaW5kZXggYzMzYTViNS4uMTI1YWQ3MyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIlNj
cmlwdE9iamVjdFF1YXJhbnRpbmUuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1
ZGUgIlNjcmlwdFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQogI2luY2x1ZGUgPHBhcnNlci9Tb3VyY2VDb2RlLmg+CkBA
IC00OSwxMiArNTAsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB2b2lkIGNh
bGxTaW1wbGVGdW5jdGlvbihTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFNjcmlwdE9i
amVjdCYgdGhpc09iamVjdCwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQotewotICAgIFNjcmlw
dEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihzY3JpcHRTdGF0ZSwgdGhpc09iamVjdCwgZnVuY3Rpb25O
YW1lKTsKLSAgICBmdW5jdGlvbi5jYWxsKCk7Ci19Ci0KIEluc3BlY3RvckZyb250ZW5kOjpJbnNw
ZWN0b3JGcm9udGVuZChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIFNjcmlwdE9iamVjdCB3ZWJJ
bnNwZWN0b3IpCiAgICAgOiBtX3NjcmlwdFN0YXRlKHNjcmlwdFN0YXRlKQogICAgICwgbV93ZWJJ
bnNwZWN0b3Iod2ViSW5zcGVjdG9yKQpAQCAtNzIsNDQgKzY3LDQ0IEBAIEpTT05PYmplY3QgSW5z
cGVjdG9yRnJvbnRlbmQ6Om5ld0pTT05PYmplY3QoKSB7CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoY29uc3QgSlNPTk9iamVjdCYgbWVzc2FnZU9iaiwgY29u
c3QgVmVjdG9yPFNjcmlwdFN0cmluZz4mIGZyYW1lcywgY29uc3QgVmVjdG9yPFNjcmlwdFZhbHVl
PiB3cmFwcGVkQXJndW1lbnRzLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgU2NyaXB0
RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiYWRk
TWVzc2FnZVRvQ29uc29sZSIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG1lc3NhZ2VP
Ymouc2NyaXB0T2JqZWN0KCkpOworICAgIE93blB0cjxTY3JpcHRGdW5jdGlvbkNhbGw+IGZ1bmN0
aW9uKG5ld0Z1bmN0aW9uQ2FsbCgiYWRkTWVzc2FnZVRvQ29uc29sZSIpKTsKKyAgICBmdW5jdGlv
bi0+YXBwZW5kQXJndW1lbnQobWVzc2FnZU9iai5zY3JpcHRPYmplY3QoKSk7CiAgICAgaWYgKCFm
cmFtZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFt
ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChmcmFt
ZXNbaV0pOworICAgICAgICAgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KGZyYW1lc1tpXSk7
CiAgICAgfSBlbHNlIGlmICghd3JhcHBlZEFyZ3VtZW50cy5pc0VtcHR5KCkpIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHdyYXBwZWRBcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCh3cmFwcGVkQXJndW1lbnRzW2ldKTsK
KyAgICAgICAgICAgIGZ1bmN0aW9uLT5hcHBlbmRBcmd1bWVudCh3cmFwcGVkQXJndW1lbnRzW2ld
KTsKICAgICB9IGVsc2UKLSAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQobWVzc2FnZSk7
Ci0gICAgZnVuY3Rpb24uY2FsbCgpOworICAgICAgICBmdW5jdGlvbi0+YXBwZW5kQXJndW1lbnQo
bWVzc2FnZSk7CisgICAgZnVuY3Rpb24tPmNhbGwoKTsKIH0KIAogYm9vbCBJbnNwZWN0b3JGcm9u
dGVuZDo6YWRkUmVzb3VyY2UobG9uZyBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEpTT05PYmplY3Qm
IHJlc291cmNlT2JqKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3Njcmlw
dFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImFkZFJlc291cmNlIik7Ci0gICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQoaWRlbnRpZmllcik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQocmVz
b3VyY2VPYmouc2NyaXB0T2JqZWN0KCkpOworICAgIE93blB0cjxTY3JpcHRGdW5jdGlvbkNhbGw+
IGZ1bmN0aW9uKG5ld0Z1bmN0aW9uQ2FsbCgiYWRkUmVzb3VyY2UiKSk7CisgICAgZnVuY3Rpb24t
PmFwcGVuZEFyZ3VtZW50KGlkZW50aWZpZXIpOworICAgIGZ1bmN0aW9uLT5hcHBlbmRBcmd1bWVu
dChyZXNvdXJjZU9iai5zY3JpcHRPYmplY3QoKSk7CiAgICAgYm9vbCBoYWRFeGNlcHRpb24gPSBm
YWxzZTsKLSAgICBmdW5jdGlvbi5jYWxsKGhhZEV4Y2VwdGlvbik7CisgICAgZnVuY3Rpb24tPmNh
bGwoaGFkRXhjZXB0aW9uKTsKICAgICByZXR1cm4gIWhhZEV4Y2VwdGlvbjsKIH0KIAogYm9vbCBJ
bnNwZWN0b3JGcm9udGVuZDo6dXBkYXRlUmVzb3VyY2UobG9uZyBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IEpTT05PYmplY3QmIHJlc291cmNlT2JqKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgInVwZGF0ZVJlc291cmNlIik7
Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaWRlbnRpZmllcik7Ci0gICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQocmVzb3VyY2VPYmouc2NyaXB0T2JqZWN0KCkpOworICAgIE93blB0cjxT
Y3JpcHRGdW5jdGlvbkNhbGw+IGZ1bmN0aW9uKG5ld0Z1bmN0aW9uQ2FsbCgidXBkYXRlUmVzb3Vy
Y2UiKSk7CisgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KGlkZW50aWZpZXIpOworICAgIGZ1
bmN0aW9uLT5hcHBlbmRBcmd1bWVudChyZXNvdXJjZU9iai5zY3JpcHRPYmplY3QoKSk7CiAgICAg
Ym9vbCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKLSAgICBmdW5jdGlvbi5jYWxsKGhhZEV4Y2VwdGlv
bik7CisgICAgZnVuY3Rpb24tPmNhbGwoaGFkRXhjZXB0aW9uKTsKICAgICByZXR1cm4gIWhhZEV4
Y2VwdGlvbjsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6cmVtb3ZlUmVzb3VyY2UobG9u
ZyBsb25nIGlkZW50aWZpZXIpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1f
c2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAicmVtb3ZlUmVzb3VyY2UiKTsKLSAgICBmdW5j
dGlvbi5hcHBlbmRBcmd1bWVudChpZGVudGlmaWVyKTsKLSAgICBmdW5jdGlvbi5jYWxsKCk7Cisg
ICAgT3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4gZnVuY3Rpb24obmV3RnVuY3Rpb25DYWxsKCJy
ZW1vdmVSZXNvdXJjZSIpKTsKKyAgICBmdW5jdGlvbi0+YXBwZW5kQXJndW1lbnQoaWRlbnRpZmll
cik7CisgICAgZnVuY3Rpb24tPmNhbGwoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
dXBkYXRlRm9jdXNlZE5vZGUoTm9kZSogbm9kZSkKQEAgLTExOCwxNiArMTEzLDE2IEBAIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OnVwZGF0ZUZvY3VzZWROb2RlKE5vZGUqIG5vZGUpCiAgICAgaWYg
KCFnZXRRdWFyYW50aW5lZFNjcmlwdE9iamVjdChub2RlLCBxdWFyYW50aW5lZE5vZGUpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRT
dGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJ1cGRhdGVGb2N1c2VkTm9kZSIpOwotICAgIGZ1bmN0aW9u
LmFwcGVuZEFyZ3VtZW50KHF1YXJhbnRpbmVkTm9kZSk7Ci0gICAgZnVuY3Rpb24uY2FsbCgpOwor
ICAgIE93blB0cjxTY3JpcHRGdW5jdGlvbkNhbGw+IGZ1bmN0aW9uKG5ld0Z1bmN0aW9uQ2FsbCgi
dXBkYXRlRm9jdXNlZE5vZGUiKSk7CisgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KHF1YXJh
bnRpbmVkTm9kZSk7CisgICAgZnVuY3Rpb24tPmNhbGwoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6c2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRhY2hlZCkKIHsKLSAgICBTY3JpcHRG
dW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJzZXRB
dHRhY2hlZFdpbmRvdyIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGF0dGFjaGVkKTsK
LSAgICBmdW5jdGlvbi5jYWxsKCk7CisgICAgT3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4gZnVu
Y3Rpb24obmV3RnVuY3Rpb25DYWxsKCJzZXRBdHRhY2hlZFdpbmRvdyIpKTsKKyAgICBmdW5jdGlv
bi0+YXBwZW5kQXJndW1lbnQoYXR0YWNoZWQpOworICAgIGZ1bmN0aW9uLT5jYWxsKCk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Omluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFy
ZWQoRnJhbWUqIGZyYW1lKQpAQCAtMTM2LDkgKzEzMSw5IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6Omluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQoRnJhbWUqIGZyYW1lKQogICAg
IGlmICghZ2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QoZnJhbWUtPmRvbVdpbmRvdygpLCBkb21X
aW5kb3cpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rp
b24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJpbnNwZWN0ZWRXaW5kb3dDbGVhcmVk
Iik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZG9tV2luZG93KTsKLSAgICBmdW5jdGlv
bi5jYWxsKCk7CisgICAgT3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4gZnVuY3Rpb24obmV3RnVu
Y3Rpb25DYWxsKCJpbnNwZWN0ZWRXaW5kb3dDbGVhcmVkIikpOworICAgIGZ1bmN0aW9uLT5hcHBl
bmRBcmd1bWVudChkb21XaW5kb3cpOworICAgIGZ1bmN0aW9uLT5jYWxsKCk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OnNob3dQYW5lbChpbnQgcGFuZWwpCkBAIC0xNjksOTQgKzE2NCw5
NCBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpzaG93UGFuZWwoaW50IHBhbmVsKQogICAgIH0K
IAogICAgIGlmIChzaG93RnVuY3Rpb25OYW1lKQotICAgICAgICBjYWxsU2ltcGxlRnVuY3Rpb24o
bV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsIHNob3dGdW5jdGlvbk5hbWUpOworICAgICAg
ICBjYWxsU2ltcGxlRnVuY3Rpb24oc2hvd0Z1bmN0aW9uTmFtZSk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yRnJvbnRlbmQ6OnBvcHVsYXRlSW50ZXJmYWNlKCkKIHsKLSAgICBjYWxsU2ltcGxlRnVuY3Rp
b24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJwb3B1bGF0ZUludGVyZmFjZSIpOwor
ICAgIGNhbGxTaW1wbGVGdW5jdGlvbigicG9wdWxhdGVJbnRlcmZhY2UiKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZDo6cmVzZXQoKQogewotICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3Nj
cmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgInJlc2V0Iik7CisgICAgY2FsbFNpbXBsZUZ1bmN0
aW9uKCJyZXNldCIpOwogfQogCiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKIHZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRlYnVnZ2VyV2FzRW5hYmxlZCgpCiB7Ci0gICAgY2FsbFNp
bXBsZUZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGVidWdnZXJXYXNF
bmFibGVkIik7CisgICAgY2FsbFNpbXBsZUZ1bmN0aW9uKCJkZWJ1Z2dlcldhc0VuYWJsZWQiKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGVidWdnZXJXYXNEaXNhYmxlZCgpCiB7Ci0g
ICAgY2FsbFNpbXBsZUZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGVi
dWdnZXJXYXNEaXNhYmxlZCIpOworICAgIGNhbGxTaW1wbGVGdW5jdGlvbigiZGVidWdnZXJXYXNE
aXNhYmxlZCIpOwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpwcm9maWxlcldhc0VuYWJs
ZWQoKQogewotICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3Bl
Y3RvciwgInByb2ZpbGVyV2FzRW5hYmxlZCIpOworICAgIGNhbGxTaW1wbGVGdW5jdGlvbigicHJv
ZmlsZXJXYXNFbmFibGVkIik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnByb2ZpbGVy
V2FzRGlzYWJsZWQoKQogewotICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBt
X3dlYkluc3BlY3RvciwgInByb2ZpbGVyV2FzRGlzYWJsZWQiKTsKKyAgICBjYWxsU2ltcGxlRnVu
Y3Rpb24oInByb2ZpbGVyV2FzRGlzYWJsZWQiKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZDo6cGFyc2VkU2NyaXB0U291cmNlKGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlKQogewot
ICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3Bl
Y3RvciwgInBhcnNlZFNjcmlwdFNvdXJjZSIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oc291cmNlLnByb3ZpZGVyKCktPmFzSUQoKSkpOwotICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHNvdXJjZS5wcm92aWRlcigpLT51cmwoKSk7Ci0gICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoSlNDOjpVU3RyaW5nKHNvdXJjZS5kYXRhKCksIHNvdXJj
ZS5sZW5ndGgoKSkpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHNvdXJjZS5maXJzdExp
bmUoKSk7Ci0gICAgZnVuY3Rpb24uY2FsbCgpOworICAgIE93blB0cjxTY3JpcHRGdW5jdGlvbkNh
bGw+IGZ1bmN0aW9uKG5ld0Z1bmN0aW9uQ2FsbCgicGFyc2VkU2NyaXB0U291cmNlIikpOworICAg
IGZ1bmN0aW9uLT5hcHBlbmRBcmd1bWVudChzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHNvdXJjZS5w
cm92aWRlcigpLT5hc0lEKCkpKTsKKyAgICBmdW5jdGlvbi0+YXBwZW5kQXJndW1lbnQoc291cmNl
LnByb3ZpZGVyKCktPnVybCgpKTsKKyAgICBmdW5jdGlvbi0+YXBwZW5kQXJndW1lbnQoSlNDOjpV
U3RyaW5nKHNvdXJjZS5kYXRhKCksIHNvdXJjZS5sZW5ndGgoKSkpOworICAgIGZ1bmN0aW9uLT5h
cHBlbmRBcmd1bWVudChzb3VyY2UuZmlyc3RMaW5lKCkpOworICAgIGZ1bmN0aW9uLT5jYWxsKCk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmZhaWxlZFRvUGFyc2VTY3JpcHRTb3VyY2Uo
Y29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UsIGludCBlcnJvckxpbmUsIGNvbnN0IEpTQzo6
VVN0cmluZyYgZXJyb3JNZXNzYWdlKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlv
bihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImZhaWxlZFRvUGFyc2VTY3JpcHRTb3Vy
Y2UiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzb3VyY2UucHJvdmlkZXIoKS0+dXJs
KCkpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KEpTQzo6VVN0cmluZyhzb3VyY2UuZGF0
YSgpLCBzb3VyY2UubGVuZ3RoKCkpKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzb3Vy
Y2UuZmlyc3RMaW5lKCkpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGVycm9yTGluZSk7
Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZXJyb3JNZXNzYWdlKTsKLSAgICBmdW5jdGlv
bi5jYWxsKCk7CisgICAgT3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4gZnVuY3Rpb24obmV3RnVu
Y3Rpb25DYWxsKCJmYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlIikpOworICAgIGZ1bmN0aW9uLT5h
cHBlbmRBcmd1bWVudChzb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkpOworICAgIGZ1bmN0aW9uLT5h
cHBlbmRBcmd1bWVudChKU0M6OlVTdHJpbmcoc291cmNlLmRhdGEoKSwgc291cmNlLmxlbmd0aCgp
KSk7CisgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KHNvdXJjZS5maXJzdExpbmUoKSk7Cisg
ICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KGVycm9yTGluZSk7CisgICAgZnVuY3Rpb24tPmFw
cGVuZEFyZ3VtZW50KGVycm9yTWVzc2FnZSk7CisgICAgZnVuY3Rpb24tPmNhbGwoKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkUHJvZmlsZShjb25zdCBKU0M6OkpTVmFsdWUmIHBy
b2ZpbGUpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUs
IG1fd2ViSW5zcGVjdG9yLCAiYWRkUHJvZmlsZSIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3Vt
ZW50KHByb2ZpbGUpOwotICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAgICBPd25QdHI8U2NyaXB0RnVu
Y3Rpb25DYWxsPiBmdW5jdGlvbihuZXdGdW5jdGlvbkNhbGwoImFkZFByb2ZpbGUiKSk7CisgICAg
ZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KHByb2ZpbGUpOworICAgIGZ1bmN0aW9uLT5jYWxsKCk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNldFJlY29yZGluZ1Byb2ZpbGUoYm9vbCBp
c1Byb2ZpbGluZykKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRT
dGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJzZXRSZWNvcmRpbmdQcm9maWxlIik7Ci0gICAgZnVuY3Rp
b24uYXBwZW5kQXJndW1lbnQoaXNQcm9maWxpbmcpOwotICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAg
ICBPd25QdHI8U2NyaXB0RnVuY3Rpb25DYWxsPiBmdW5jdGlvbihuZXdGdW5jdGlvbkNhbGwoInNl
dFJlY29yZGluZ1Byb2ZpbGUiKSk7CisgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KGlzUHJv
ZmlsaW5nKTsKKyAgICBmdW5jdGlvbi0+Y2FsbCgpOwogfQogCiB2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpwYXVzZWRTY3JpcHQoKQogewotICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdFN0
YXRlLCBtX3dlYkluc3BlY3RvciwgInBhdXNlZFNjcmlwdCIpOworICAgIGNhbGxTaW1wbGVGdW5j
dGlvbigicGF1c2VkU2NyaXB0Iik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnJlc3Vt
ZWRTY3JpcHQoKQogewotICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dl
Ykluc3BlY3RvciwgInJlc3VtZWRTY3JpcHQiKTsKKyAgICBjYWxsU2ltcGxlRnVuY3Rpb24oInJl
c3VtZWRTY3JpcHQiKTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogYm9vbCBJ
bnNwZWN0b3JGcm9udGVuZDo6YWRkRGF0YWJhc2UoY29uc3QgSlNPTk9iamVjdCYgZGJPYmplY3Qp
CiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2Vi
SW5zcGVjdG9yLCAiYWRkRGF0YWJhc2UiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChk
Yk9iamVjdC5zY3JpcHRPYmplY3QoKSk7CisgICAgT3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4g
ZnVuY3Rpb24obmV3RnVuY3Rpb25DYWxsKCJhZGREYXRhYmFzZSIpKTsKKyAgICBmdW5jdGlvbi0+
YXBwZW5kQXJndW1lbnQoZGJPYmplY3Quc2NyaXB0T2JqZWN0KCkpOwogICAgIGJvb2wgaGFkRXhj
ZXB0aW9uID0gZmFsc2U7Ci0gICAgZnVuY3Rpb24uY2FsbChoYWRFeGNlcHRpb24pOworICAgIGZ1
bmN0aW9uLT5jYWxsKGhhZEV4Y2VwdGlvbik7CiAgICAgcmV0dXJuICFoYWRFeGNlcHRpb247CiB9
CiAjZW5kaWYKQEAgLTI2NCwxMiArMjU5LDI2IEBAIGJvb2wgSW5zcGVjdG9yRnJvbnRlbmQ6OmFk
ZERhdGFiYXNlKGNvbnN0IEpTT05PYmplY3QmIGRiT2JqZWN0KQogI2lmIEVOQUJMRShET01fU1RP
UkFHRSkKIGJvb2wgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZERPTVN0b3JhZ2UoY29uc3QgSlNPTk9i
amVjdCYgZG9tU3RvcmFnZU9iaikKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24o
bV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJhZGRET01TdG9yYWdlIik7Ci0gICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQoZG9tU3RvcmFnZU9iai5zY3JpcHRPYmplY3QoKSk7CisgICAg
T3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4gZnVuY3Rpb24obmV3RnVuY3Rpb25DYWxsKCJhZGRE
T01TdG9yYWdlIikpOworICAgIGZ1bmN0aW9uLT5hcHBlbmRBcmd1bWVudChkb21TdG9yYWdlT2Jq
LnNjcmlwdE9iamVjdCgpKTsKICAgICBib29sIGhhZEV4Y2VwdGlvbiA9IGZhbHNlOwotICAgIGZ1
bmN0aW9uLmNhbGwoaGFkRXhjZXB0aW9uKTsKKyAgICBmdW5jdGlvbi0+Y2FsbChoYWRFeGNlcHRp
b24pOwogICAgIHJldHVybiAhaGFkRXhjZXB0aW9uOwogfQogI2VuZGlmCiAKK1NjcmlwdEZ1bmN0
aW9uQ2FsbCogSW5zcGVjdG9yRnJvbnRlbmQ6Om5ld0Z1bmN0aW9uQ2FsbChjb25zdCBTdHJpbmcm
IGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uID0gbmV3
IFNjcmlwdEZ1bmN0aW9uQ2FsbChtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3Bh
dGNoIik7CisgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KGZ1bmN0aW9uTmFtZSk7CisgICAg
cmV0dXJuIGZ1bmN0aW9uOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpjYWxsU2ltcGxl
RnVuY3Rpb24oY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUpCit7CisgICAgU2NyaXB0RnVuY3Rp
b25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2gi
KTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChmdW5jdGlvbk5hbWUpOworICAgIGZ1bmN0
aW9uLmNhbGwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kLmgKaW5kZXggNDY3ZWM5Yy4uNWNmNDg5YiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZC5oCkBAIC00NSw2ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBDb25zb2xlTWVzc2FnZTsKICAgICBjbGFzcyBJbnNwZWN0b3JSZXNvdXJj
ZTsKICAgICBjbGFzcyBOb2RlOworICAgIGNsYXNzIFNjcmlwdEZ1bmN0aW9uQ2FsbDsKICAgICBj
bGFzcyBTY3JpcHRTdHJpbmc7CiAKICAgICBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZCB7CkBAIC04
OCw2ICs4OSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAgICAgcHJpdmF0ZToK
KyAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsKiBuZXdGdW5jdGlvbkNhbGwoY29uc3QgU3RyaW5n
JiBmdW5jdGlvbk5hbWUpOworICAgICAgICB2b2lkIGNhbGxTaW1wbGVGdW5jdGlvbihjb25zdCBT
dHJpbmcmIGZ1bmN0aW9uTmFtZSk7CiAgICAgICAgIFNjcmlwdFN0YXRlKiBtX3NjcmlwdFN0YXRl
OwogICAgICAgICBTY3JpcHRPYmplY3QgbV93ZWJJbnNwZWN0b3I7CiAgICAgfTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IDQxODg4NDkuLmQ0ZmE5ZjIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtMzg5LDYgKzM4OSwx
MiBAQCB2YXIgd2luZG93TG9hZGVkID0gZnVuY3Rpb24oKQogCiB3aW5kb3cuYWRkRXZlbnRMaXN0
ZW5lcigibG9hZCIsIHdpbmRvd0xvYWRlZCwgZmFsc2UpOwogCitXZWJJbnNwZWN0b3IuZGlzcGF0
Y2ggPSBmdW5jdGlvbigpIHsKKyAgdmFyIG1ldGhvZE5hbWUgPSBhcmd1bWVudHNbMF07CisgIHZh
ciBwYXJhbWV0ZXJzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsK
KyAgV2ViSW5zcGVjdG9yW21ldGhvZE5hbWVdLmFwcGx5KHRoaXMsIHBhcmFtZXRlcnMpOworfQor
CiBXZWJJbnNwZWN0b3Iud2luZG93VW5sb2FkID0gZnVuY3Rpb24oZXZlbnQpCiB7CiAgICAgSW5z
cGVjdG9yQ29udHJvbGxlci53aW5kb3dVbmxvYWRpbmcoKTsK
</data>
<flag name="review"
          id="15516"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30659</attachid>
            <date>2009-05-25 13:32:23 -0700</date>
            <delta_ts>2009-05-25 13:35:48 -0700</delta_ts>
            <desc>patch</desc>
            <filename>serialize.txt</filename>
            <type>text/plain</type>
            <size>16860</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZTJiZDVhNy4uZjE2NzA5NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAwOS0wNS0yNSAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTZXJpYWxpemUgY2FsbHMgdG8gV2ViSW5zcGVjdG9yLiBUaGlz
IGlzIHRoZSBmaXJzdCBzdGVwIHdoZXJlIG1ldGhvZCAKKyAgICAgICAgY2FsbHMgYXJlIGJlaW5n
IHNlcmlhbGl6ZWQgdG8gYXJyYXlzIChub3QgeWV0IEpTT04gc3RyaW5naWZpZWQgb25lcykgYW5k
IAorICAgICAgICBhcmUgYmVpbmcgZGlzcGF0Y2hlZCBvbiB0aGUgY2xpZW50LiBUaGlzIGNoYW5n
ZSBhbHNvIGFsbG93cyBjbGllbnQgdG8gb3ZlcnJpZGUgCisgICAgICAgIEluc3BlY3RvckZyb250
ZW5kLCBzbyB0aGF0IHRoZSBzZXJpYWxpemVkIGNhbGxzIGNhbiBiZSBtYWRlIG9uIGEgZ2l2ZW4g
b2JqZWN0CisgICAgICAgIGluc3RlYWQgb2YgaW4tcHJvY2VzcyBXZWJJbnNwZWN0b3IgZ2xvYmFs
LiBUaGlzIHdpbGwgYmUgdGhlIG1haW4gY29udHJvbCBmbG93CisgICAgICAgIHdoZW4gSW5zcGVj
dG9yQ29udHJvbGxlciBpcyBkZWNvdXBsZWQgZnJvbSB0aGUgaW4tcHJvY2VzcyBmcm9udGVuZC4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYwMTAK
KworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNjcmlwdE9iamVjdFJlYWR5KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Om92ZXJyaWRlRnJvbnRlbmRPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvdyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kOjphZGRNZXNzYWdlVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kOjphZGRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZDo6dXBkYXRlUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmQ6OnJlbW92ZVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250
ZW5kOjp1cGRhdGVGb2N1c2VkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZDo6c2V0QXR0YWNoZWRXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmQ6Omluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OnNob3dQYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZDo6cG9wdWxhdGVJbnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kOjpkZWJ1Z2dlcldhc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmQ6OmRlYnVnZ2VyV2FzRGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRnJvbnRlbmQ6OnByb2ZpbGVyV2FzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZDo6cHJvZmlsZXJXYXNEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZDo6cGFyc2VkU2NyaXB0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kOjpmYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjphZGRQcm9maWxlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kOjpzZXRSZWNvcmRpbmdQcm9maWxlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpwYXVzZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OnJlc3VtZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmQ6OmFkZERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kOjphZGRET01TdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kOjpuZXdGdW5jdGlvbkNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmQ6OmNhbGxTaW1wbGVGdW5jdGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kLmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3Iu
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuZGlzcGF0Y2gpOgorCiAyMDA5LTA1LTIzICBIb2xn
ZXIgSGFucyBQZXRlciBGcmV5dGhlciAgPHplY2tlQHNlbGZpc2gub3JnPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQgYnVpbGQgZml4IGZvciBRdC4gQ2hhbmdlIHNpZ25hdHVyZSB0byBoYXZlIFBhc3NP
d25QdHIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGM5
OWMxNmQuLmFhMWZjYmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwCkBAIC01MzQsMTggKzUzNCwyNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNjcmlw
dE9iamVjdFJlYWR5KCkKICAgICBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yT2JqOwogICAgIGlm
ICghU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQobV9zY3JpcHRTdGF0ZSwgIldlYkluc3BlY3RvciIs
IHdlYkluc3BlY3Rvck9iaikpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2Zyb250ZW5kLnNldChu
ZXcgSW5zcGVjdG9yRnJvbnRlbmQobV9zY3JpcHRTdGF0ZSwgd2ViSW5zcGVjdG9yT2JqKSk7Cisg
ICAgc2V0RnJvbnRlbmRQcm94eU9iamVjdChtX3NjcmlwdFN0YXRlLCB3ZWJJbnNwZWN0b3JPYmop
OwogCiAgICAgLy8gTWFrZSBzdXJlIG91ciB3aW5kb3cgaXMgdmlzaWJsZSBub3cgdGhhdCB0aGUg
cGFnZSBsb2FkZWQKICAgICBzaG93V2luZG93KCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2V0RnJvbnRlbmRQcm94eU9iamVjdChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIFNj
cmlwdE9iamVjdCB3ZWJJbnNwZWN0b3JPYmopCit7CisgICAgbV9mcm9udGVuZC5zZXQobmV3IElu
c3BlY3RvckZyb250ZW5kKHNjcmlwdFN0YXRlLCB3ZWJJbnNwZWN0b3JPYmopKTsKK30KKwogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93KCkKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwotCisgICAgCiAgICAgaWYgKCFtX3BhZ2UpIHsKKyAgICAgICAgaWYgKG1f
ZnJvbnRlbmQuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm47ICAvLyBXZSBhcmUgdXNpbmcgY3Vz
dG9tIGZyb250ZW5kIC0gbm8gbmVlZCB0byBjcmVhdGUgcGFnZS4KKwogICAgICAgICBtX3BhZ2Ug
PSBtX2NsaWVudC0+Y3JlYXRlUGFnZSgpOwogICAgICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTYwNCw4ICs2MTIsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmNsb3NlV2luZG93KCkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlw
dE9iamVjdHMoKQogewotICAgIEFTU0VSVChtX3NjcmlwdFN0YXRlKTsKLSAgICBpZiAoIW1fc2Ny
aXB0U3RhdGUpCisgICAgQVNTRVJUKG1fZnJvbnRlbmQpOworICAgIGlmICghbV9mcm9udGVuZC5n
ZXQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVzb3VyY2VzTWFwOjppdGVyYXRvciByZXNv
dXJjZXNFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaAppbmRleCBkODZmNDRlLi43NDRmMmMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oCkBAIC0xODQsNiArMTg0LDcgQEAgcHVibGljOgogICAgIHZvaWQg
d2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlKCk7CiAKICAgICB2b2lkIHNjcmlwdE9iamVjdFJl
YWR5KCk7CisgICAgdm9pZCBzZXRGcm9udGVuZFByb3h5T2JqZWN0KFNjcmlwdFN0YXRlKiBzdGF0
ZSwgU2NyaXB0T2JqZWN0IG9iamVjdCk7CiAKICAgICB2b2lkIHBvcHVsYXRlU2NyaXB0T2JqZWN0
cygpOwogICAgIHZvaWQgcmVzZXRTY3JpcHRPYmplY3RzKCk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5jcHAKaW5kZXggYzMzYTViNS4uZDllOWE4ZSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIlNj
cmlwdE9iamVjdFF1YXJhbnRpbmUuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1
ZGUgIlNjcmlwdFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQogI2luY2x1ZGUgPHBhcnNlci9Tb3VyY2VDb2RlLmg+CkBA
IC00OSwxMiArNTAsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB2b2lkIGNh
bGxTaW1wbGVGdW5jdGlvbihTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFNjcmlwdE9i
amVjdCYgdGhpc09iamVjdCwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQotewotICAgIFNjcmlw
dEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihzY3JpcHRTdGF0ZSwgdGhpc09iamVjdCwgZnVuY3Rpb25O
YW1lKTsKLSAgICBmdW5jdGlvbi5jYWxsKCk7Ci19Ci0KIEluc3BlY3RvckZyb250ZW5kOjpJbnNw
ZWN0b3JGcm9udGVuZChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIFNjcmlwdE9iamVjdCB3ZWJJ
bnNwZWN0b3IpCiAgICAgOiBtX3NjcmlwdFN0YXRlKHNjcmlwdFN0YXRlKQogICAgICwgbV93ZWJJ
bnNwZWN0b3Iod2ViSW5zcGVjdG9yKQpAQCAtNzIsNDQgKzY3LDQ0IEBAIEpTT05PYmplY3QgSW5z
cGVjdG9yRnJvbnRlbmQ6Om5ld0pTT05PYmplY3QoKSB7CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoY29uc3QgSlNPTk9iamVjdCYgbWVzc2FnZU9iaiwgY29u
c3QgVmVjdG9yPFNjcmlwdFN0cmluZz4mIGZyYW1lcywgY29uc3QgVmVjdG9yPFNjcmlwdFZhbHVl
PiB3cmFwcGVkQXJndW1lbnRzLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgU2NyaXB0
RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiYWRk
TWVzc2FnZVRvQ29uc29sZSIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG1lc3NhZ2VP
Ymouc2NyaXB0T2JqZWN0KCkpOworICAgIE93blB0cjxTY3JpcHRGdW5jdGlvbkNhbGw+IGZ1bmN0
aW9uKG5ld0Z1bmN0aW9uQ2FsbCgiYWRkTWVzc2FnZVRvQ29uc29sZSIpKTsKKyAgICBmdW5jdGlv
bi0+YXBwZW5kQXJndW1lbnQobWVzc2FnZU9iai5zY3JpcHRPYmplY3QoKSk7CiAgICAgaWYgKCFm
cmFtZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFt
ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChmcmFt
ZXNbaV0pOworICAgICAgICAgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KGZyYW1lc1tpXSk7
CiAgICAgfSBlbHNlIGlmICghd3JhcHBlZEFyZ3VtZW50cy5pc0VtcHR5KCkpIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHdyYXBwZWRBcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCh3cmFwcGVkQXJndW1lbnRzW2ldKTsK
KyAgICAgICAgICAgIGZ1bmN0aW9uLT5hcHBlbmRBcmd1bWVudCh3cmFwcGVkQXJndW1lbnRzW2ld
KTsKICAgICB9IGVsc2UKLSAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQobWVzc2FnZSk7
Ci0gICAgZnVuY3Rpb24uY2FsbCgpOworICAgICAgICBmdW5jdGlvbi0+YXBwZW5kQXJndW1lbnQo
bWVzc2FnZSk7CisgICAgZnVuY3Rpb24tPmNhbGwoKTsKIH0KIAogYm9vbCBJbnNwZWN0b3JGcm9u
dGVuZDo6YWRkUmVzb3VyY2UobG9uZyBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEpTT05PYmplY3Qm
IHJlc291cmNlT2JqKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3Njcmlw
dFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImFkZFJlc291cmNlIik7Ci0gICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQoaWRlbnRpZmllcik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQocmVz
b3VyY2VPYmouc2NyaXB0T2JqZWN0KCkpOworICAgIE93blB0cjxTY3JpcHRGdW5jdGlvbkNhbGw+
IGZ1bmN0aW9uKG5ld0Z1bmN0aW9uQ2FsbCgiYWRkUmVzb3VyY2UiKSk7CisgICAgZnVuY3Rpb24t
PmFwcGVuZEFyZ3VtZW50KGlkZW50aWZpZXIpOworICAgIGZ1bmN0aW9uLT5hcHBlbmRBcmd1bWVu
dChyZXNvdXJjZU9iai5zY3JpcHRPYmplY3QoKSk7CiAgICAgYm9vbCBoYWRFeGNlcHRpb24gPSBm
YWxzZTsKLSAgICBmdW5jdGlvbi5jYWxsKGhhZEV4Y2VwdGlvbik7CisgICAgZnVuY3Rpb24tPmNh
bGwoaGFkRXhjZXB0aW9uKTsKICAgICByZXR1cm4gIWhhZEV4Y2VwdGlvbjsKIH0KIAogYm9vbCBJ
bnNwZWN0b3JGcm9udGVuZDo6dXBkYXRlUmVzb3VyY2UobG9uZyBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IEpTT05PYmplY3QmIHJlc291cmNlT2JqKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgInVwZGF0ZVJlc291cmNlIik7
Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaWRlbnRpZmllcik7Ci0gICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQocmVzb3VyY2VPYmouc2NyaXB0T2JqZWN0KCkpOworICAgIE93blB0cjxT
Y3JpcHRGdW5jdGlvbkNhbGw+IGZ1bmN0aW9uKG5ld0Z1bmN0aW9uQ2FsbCgidXBkYXRlUmVzb3Vy
Y2UiKSk7CisgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KGlkZW50aWZpZXIpOworICAgIGZ1
bmN0aW9uLT5hcHBlbmRBcmd1bWVudChyZXNvdXJjZU9iai5zY3JpcHRPYmplY3QoKSk7CiAgICAg
Ym9vbCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKLSAgICBmdW5jdGlvbi5jYWxsKGhhZEV4Y2VwdGlv
bik7CisgICAgZnVuY3Rpb24tPmNhbGwoaGFkRXhjZXB0aW9uKTsKICAgICByZXR1cm4gIWhhZEV4
Y2VwdGlvbjsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6cmVtb3ZlUmVzb3VyY2UobG9u
ZyBsb25nIGlkZW50aWZpZXIpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1f
c2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAicmVtb3ZlUmVzb3VyY2UiKTsKLSAgICBmdW5j
dGlvbi5hcHBlbmRBcmd1bWVudChpZGVudGlmaWVyKTsKLSAgICBmdW5jdGlvbi5jYWxsKCk7Cisg
ICAgT3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4gZnVuY3Rpb24obmV3RnVuY3Rpb25DYWxsKCJy
ZW1vdmVSZXNvdXJjZSIpKTsKKyAgICBmdW5jdGlvbi0+YXBwZW5kQXJndW1lbnQoaWRlbnRpZmll
cik7CisgICAgZnVuY3Rpb24tPmNhbGwoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
dXBkYXRlRm9jdXNlZE5vZGUoTm9kZSogbm9kZSkKQEAgLTExOCwxNiArMTEzLDE2IEBAIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OnVwZGF0ZUZvY3VzZWROb2RlKE5vZGUqIG5vZGUpCiAgICAgaWYg
KCFnZXRRdWFyYW50aW5lZFNjcmlwdE9iamVjdChub2RlLCBxdWFyYW50aW5lZE5vZGUpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRT
dGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJ1cGRhdGVGb2N1c2VkTm9kZSIpOwotICAgIGZ1bmN0aW9u
LmFwcGVuZEFyZ3VtZW50KHF1YXJhbnRpbmVkTm9kZSk7Ci0gICAgZnVuY3Rpb24uY2FsbCgpOwor
ICAgIE93blB0cjxTY3JpcHRGdW5jdGlvbkNhbGw+IGZ1bmN0aW9uKG5ld0Z1bmN0aW9uQ2FsbCgi
dXBkYXRlRm9jdXNlZE5vZGUiKSk7CisgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KHF1YXJh
bnRpbmVkTm9kZSk7CisgICAgZnVuY3Rpb24tPmNhbGwoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6c2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRhY2hlZCkKIHsKLSAgICBTY3JpcHRG
dW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJzZXRB
dHRhY2hlZFdpbmRvdyIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGF0dGFjaGVkKTsK
LSAgICBmdW5jdGlvbi5jYWxsKCk7CisgICAgT3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4gZnVu
Y3Rpb24obmV3RnVuY3Rpb25DYWxsKCJzZXRBdHRhY2hlZFdpbmRvdyIpKTsKKyAgICBmdW5jdGlv
bi0+YXBwZW5kQXJndW1lbnQoYXR0YWNoZWQpOworICAgIGZ1bmN0aW9uLT5jYWxsKCk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Omluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFy
ZWQoRnJhbWUqIGZyYW1lKQpAQCAtMTM2LDkgKzEzMSw5IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6Omluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQoRnJhbWUqIGZyYW1lKQogICAg
IGlmICghZ2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QoZnJhbWUtPmRvbVdpbmRvdygpLCBkb21X
aW5kb3cpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rp
b24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJpbnNwZWN0ZWRXaW5kb3dDbGVhcmVk
Iik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZG9tV2luZG93KTsKLSAgICBmdW5jdGlv
bi5jYWxsKCk7CisgICAgT3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4gZnVuY3Rpb24obmV3RnVu
Y3Rpb25DYWxsKCJpbnNwZWN0ZWRXaW5kb3dDbGVhcmVkIikpOworICAgIGZ1bmN0aW9uLT5hcHBl
bmRBcmd1bWVudChkb21XaW5kb3cpOworICAgIGZ1bmN0aW9uLT5jYWxsKCk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OnNob3dQYW5lbChpbnQgcGFuZWwpCkBAIC0xNjksOTQgKzE2NCw5
NCBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpzaG93UGFuZWwoaW50IHBhbmVsKQogICAgIH0K
IAogICAgIGlmIChzaG93RnVuY3Rpb25OYW1lKQotICAgICAgICBjYWxsU2ltcGxlRnVuY3Rpb24o
bV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsIHNob3dGdW5jdGlvbk5hbWUpOworICAgICAg
ICBjYWxsU2ltcGxlRnVuY3Rpb24oc2hvd0Z1bmN0aW9uTmFtZSk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yRnJvbnRlbmQ6OnBvcHVsYXRlSW50ZXJmYWNlKCkKIHsKLSAgICBjYWxsU2ltcGxlRnVuY3Rp
b24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJwb3B1bGF0ZUludGVyZmFjZSIpOwor
ICAgIGNhbGxTaW1wbGVGdW5jdGlvbigicG9wdWxhdGVJbnRlcmZhY2UiKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZDo6cmVzZXQoKQogewotICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3Nj
cmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgInJlc2V0Iik7CisgICAgY2FsbFNpbXBsZUZ1bmN0
aW9uKCJyZXNldCIpOwogfQogCiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKIHZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRlYnVnZ2VyV2FzRW5hYmxlZCgpCiB7Ci0gICAgY2FsbFNp
bXBsZUZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGVidWdnZXJXYXNF
bmFibGVkIik7CisgICAgY2FsbFNpbXBsZUZ1bmN0aW9uKCJkZWJ1Z2dlcldhc0VuYWJsZWQiKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGVidWdnZXJXYXNEaXNhYmxlZCgpCiB7Ci0g
ICAgY2FsbFNpbXBsZUZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGVi
dWdnZXJXYXNEaXNhYmxlZCIpOworICAgIGNhbGxTaW1wbGVGdW5jdGlvbigiZGVidWdnZXJXYXNE
aXNhYmxlZCIpOwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpwcm9maWxlcldhc0VuYWJs
ZWQoKQogewotICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3Bl
Y3RvciwgInByb2ZpbGVyV2FzRW5hYmxlZCIpOworICAgIGNhbGxTaW1wbGVGdW5jdGlvbigicHJv
ZmlsZXJXYXNFbmFibGVkIik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnByb2ZpbGVy
V2FzRGlzYWJsZWQoKQogewotICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBt
X3dlYkluc3BlY3RvciwgInByb2ZpbGVyV2FzRGlzYWJsZWQiKTsKKyAgICBjYWxsU2ltcGxlRnVu
Y3Rpb24oInByb2ZpbGVyV2FzRGlzYWJsZWQiKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZDo6cGFyc2VkU2NyaXB0U291cmNlKGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlKQogewot
ICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3Bl
Y3RvciwgInBhcnNlZFNjcmlwdFNvdXJjZSIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oc291cmNlLnByb3ZpZGVyKCktPmFzSUQoKSkpOwotICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHNvdXJjZS5wcm92aWRlcigpLT51cmwoKSk7Ci0gICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoSlNDOjpVU3RyaW5nKHNvdXJjZS5kYXRhKCksIHNvdXJj
ZS5sZW5ndGgoKSkpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHNvdXJjZS5maXJzdExp
bmUoKSk7Ci0gICAgZnVuY3Rpb24uY2FsbCgpOworICAgIE93blB0cjxTY3JpcHRGdW5jdGlvbkNh
bGw+IGZ1bmN0aW9uKG5ld0Z1bmN0aW9uQ2FsbCgicGFyc2VkU2NyaXB0U291cmNlIikpOworICAg
IGZ1bmN0aW9uLT5hcHBlbmRBcmd1bWVudChzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHNvdXJjZS5w
cm92aWRlcigpLT5hc0lEKCkpKTsKKyAgICBmdW5jdGlvbi0+YXBwZW5kQXJndW1lbnQoc291cmNl
LnByb3ZpZGVyKCktPnVybCgpKTsKKyAgICBmdW5jdGlvbi0+YXBwZW5kQXJndW1lbnQoSlNDOjpV
U3RyaW5nKHNvdXJjZS5kYXRhKCksIHNvdXJjZS5sZW5ndGgoKSkpOworICAgIGZ1bmN0aW9uLT5h
cHBlbmRBcmd1bWVudChzb3VyY2UuZmlyc3RMaW5lKCkpOworICAgIGZ1bmN0aW9uLT5jYWxsKCk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmZhaWxlZFRvUGFyc2VTY3JpcHRTb3VyY2Uo
Y29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UsIGludCBlcnJvckxpbmUsIGNvbnN0IEpTQzo6
VVN0cmluZyYgZXJyb3JNZXNzYWdlKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlv
bihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImZhaWxlZFRvUGFyc2VTY3JpcHRTb3Vy
Y2UiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzb3VyY2UucHJvdmlkZXIoKS0+dXJs
KCkpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KEpTQzo6VVN0cmluZyhzb3VyY2UuZGF0
YSgpLCBzb3VyY2UubGVuZ3RoKCkpKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzb3Vy
Y2UuZmlyc3RMaW5lKCkpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGVycm9yTGluZSk7
Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZXJyb3JNZXNzYWdlKTsKLSAgICBmdW5jdGlv
bi5jYWxsKCk7CisgICAgT3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4gZnVuY3Rpb24obmV3RnVu
Y3Rpb25DYWxsKCJmYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlIikpOworICAgIGZ1bmN0aW9uLT5h
cHBlbmRBcmd1bWVudChzb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkpOworICAgIGZ1bmN0aW9uLT5h
cHBlbmRBcmd1bWVudChKU0M6OlVTdHJpbmcoc291cmNlLmRhdGEoKSwgc291cmNlLmxlbmd0aCgp
KSk7CisgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KHNvdXJjZS5maXJzdExpbmUoKSk7Cisg
ICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KGVycm9yTGluZSk7CisgICAgZnVuY3Rpb24tPmFw
cGVuZEFyZ3VtZW50KGVycm9yTWVzc2FnZSk7CisgICAgZnVuY3Rpb24tPmNhbGwoKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkUHJvZmlsZShjb25zdCBKU0M6OkpTVmFsdWUmIHBy
b2ZpbGUpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUs
IG1fd2ViSW5zcGVjdG9yLCAiYWRkUHJvZmlsZSIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3Vt
ZW50KHByb2ZpbGUpOwotICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAgICBPd25QdHI8U2NyaXB0RnVu
Y3Rpb25DYWxsPiBmdW5jdGlvbihuZXdGdW5jdGlvbkNhbGwoImFkZFByb2ZpbGUiKSk7CisgICAg
ZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KHByb2ZpbGUpOworICAgIGZ1bmN0aW9uLT5jYWxsKCk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNldFJlY29yZGluZ1Byb2ZpbGUoYm9vbCBp
c1Byb2ZpbGluZykKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRT
dGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJzZXRSZWNvcmRpbmdQcm9maWxlIik7Ci0gICAgZnVuY3Rp
b24uYXBwZW5kQXJndW1lbnQoaXNQcm9maWxpbmcpOwotICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAg
ICBPd25QdHI8U2NyaXB0RnVuY3Rpb25DYWxsPiBmdW5jdGlvbihuZXdGdW5jdGlvbkNhbGwoInNl
dFJlY29yZGluZ1Byb2ZpbGUiKSk7CisgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KGlzUHJv
ZmlsaW5nKTsKKyAgICBmdW5jdGlvbi0+Y2FsbCgpOwogfQogCiB2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpwYXVzZWRTY3JpcHQoKQogewotICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdFN0
YXRlLCBtX3dlYkluc3BlY3RvciwgInBhdXNlZFNjcmlwdCIpOworICAgIGNhbGxTaW1wbGVGdW5j
dGlvbigicGF1c2VkU2NyaXB0Iik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnJlc3Vt
ZWRTY3JpcHQoKQogewotICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dl
Ykluc3BlY3RvciwgInJlc3VtZWRTY3JpcHQiKTsKKyAgICBjYWxsU2ltcGxlRnVuY3Rpb24oInJl
c3VtZWRTY3JpcHQiKTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogYm9vbCBJ
bnNwZWN0b3JGcm9udGVuZDo6YWRkRGF0YWJhc2UoY29uc3QgSlNPTk9iamVjdCYgZGJPYmplY3Qp
CiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2Vi
SW5zcGVjdG9yLCAiYWRkRGF0YWJhc2UiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChk
Yk9iamVjdC5zY3JpcHRPYmplY3QoKSk7CisgICAgT3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4g
ZnVuY3Rpb24obmV3RnVuY3Rpb25DYWxsKCJhZGREYXRhYmFzZSIpKTsKKyAgICBmdW5jdGlvbi0+
YXBwZW5kQXJndW1lbnQoZGJPYmplY3Quc2NyaXB0T2JqZWN0KCkpOwogICAgIGJvb2wgaGFkRXhj
ZXB0aW9uID0gZmFsc2U7Ci0gICAgZnVuY3Rpb24uY2FsbChoYWRFeGNlcHRpb24pOworICAgIGZ1
bmN0aW9uLT5jYWxsKGhhZEV4Y2VwdGlvbik7CiAgICAgcmV0dXJuICFoYWRFeGNlcHRpb247CiB9
CiAjZW5kaWYKQEAgLTI2NCwxMiArMjU5LDI2IEBAIGJvb2wgSW5zcGVjdG9yRnJvbnRlbmQ6OmFk
ZERhdGFiYXNlKGNvbnN0IEpTT05PYmplY3QmIGRiT2JqZWN0KQogI2lmIEVOQUJMRShET01fU1RP
UkFHRSkKIGJvb2wgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZERPTVN0b3JhZ2UoY29uc3QgSlNPTk9i
amVjdCYgZG9tU3RvcmFnZU9iaikKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24o
bV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJhZGRET01TdG9yYWdlIik7Ci0gICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQoZG9tU3RvcmFnZU9iai5zY3JpcHRPYmplY3QoKSk7CisgICAg
T3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4gZnVuY3Rpb24obmV3RnVuY3Rpb25DYWxsKCJhZGRE
T01TdG9yYWdlIikpOworICAgIGZ1bmN0aW9uLT5hcHBlbmRBcmd1bWVudChkb21TdG9yYWdlT2Jq
LnNjcmlwdE9iamVjdCgpKTsKICAgICBib29sIGhhZEV4Y2VwdGlvbiA9IGZhbHNlOwotICAgIGZ1
bmN0aW9uLmNhbGwoaGFkRXhjZXB0aW9uKTsKKyAgICBmdW5jdGlvbi0+Y2FsbChoYWRFeGNlcHRp
b24pOwogICAgIHJldHVybiAhaGFkRXhjZXB0aW9uOwogfQogI2VuZGlmCiAKK1Bhc3NPd25QdHI8
U2NyaXB0RnVuY3Rpb25DYWxsPiBJbnNwZWN0b3JGcm9udGVuZDo6bmV3RnVuY3Rpb25DYWxsKGNv
bnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lKQoreworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCogZnVu
Y3Rpb24gPSBuZXcgU2NyaXB0RnVuY3Rpb25DYWxsKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVj
dG9yLCAiZGlzcGF0Y2giKTsKKyAgICBmdW5jdGlvbi0+YXBwZW5kQXJndW1lbnQoZnVuY3Rpb25O
YW1lKTsKKyAgICByZXR1cm4gZnVuY3Rpb247Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
OmNhbGxTaW1wbGVGdW5jdGlvbihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBT
Y3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3Is
ICJkaXNwYXRjaCIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGZ1bmN0aW9uTmFtZSk7
CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAppbmRleCA0NjdlYzljLi5kOGZlM2JlIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2lu
Y2x1ZGUgIkpTT05PYmplY3QuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKIG5h
bWVzcGFjZSBKU0MgewpAQCAtNDUsNiArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgQ29uc29sZU1lc3NhZ2U7CiAgICAgY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CiAgICAg
Y2xhc3MgTm9kZTsKKyAgICBjbGFzcyBTY3JpcHRGdW5jdGlvbkNhbGw7CiAgICAgY2xhc3MgU2Ny
aXB0U3RyaW5nOwogCiAgICAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQgewpAQCAtODgsNiArOTAs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6CisgICAgICAg
IFBhc3NPd25QdHI8U2NyaXB0RnVuY3Rpb25DYWxsPiBuZXdGdW5jdGlvbkNhbGwoY29uc3QgU3Ry
aW5nJiBmdW5jdGlvbk5hbWUpOworICAgICAgICB2b2lkIGNhbGxTaW1wbGVGdW5jdGlvbihjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSk7CiAgICAgICAgIFNjcmlwdFN0YXRlKiBtX3NjcmlwdFN0
YXRlOwogICAgICAgICBTY3JpcHRPYmplY3QgbV93ZWJJbnNwZWN0b3I7CiAgICAgfTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IDQxODg4NDkuLjNmZjBiNDUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtMzg5LDYgKzM4
OSwxMiBAQCB2YXIgd2luZG93TG9hZGVkID0gZnVuY3Rpb24oKQogCiB3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcigibG9hZCIsIHdpbmRvd0xvYWRlZCwgZmFsc2UpOwogCitXZWJJbnNwZWN0b3IuZGlz
cGF0Y2ggPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgbWV0aG9kTmFtZSA9IGFyZ3VtZW50c1swXTsK
KyAgICB2YXIgcGFyYW1ldGVycyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50
cywgMSk7CisgICAgV2ViSW5zcGVjdG9yW21ldGhvZE5hbWVdLmFwcGx5KHRoaXMsIHBhcmFtZXRl
cnMpOworfQorCiBXZWJJbnNwZWN0b3Iud2luZG93VW5sb2FkID0gZnVuY3Rpb24oZXZlbnQpCiB7
CiAgICAgSW5zcGVjdG9yQ29udHJvbGxlci53aW5kb3dVbmxvYWRpbmcoKTsK
</data>
<flag name="review"
          id="15521"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>