<?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>160238</bug_id>
          
          <creation_ts>2016-07-27 04:11:50 -0700</creation_ts>
          <short_desc>[Coordinated Graphics] Improve scheduling of tasks between threads in CoordinatedGraphicsScene</short_desc>
          <delta_ts>2016-07-27 08:59:30 -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>WebKit2</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1214850</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-07-27 04:11:50 -0700</bug_when>
    <thetext>Avoid scheduling tasks to the main thread if the scene is detached. Do not take references when not actually sending tasks to another threads. Use Function instead of std::function on dispatch methods. Remove purgeBackingStores that is actually never called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214851</commentid>
    <comment_count>1</comment_count>
      <attachid>284684</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-07-27 04:18:14 -0700</bug_when>
    <thetext>Created attachment 284684
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214872</commentid>
    <comment_count>2</comment_count>
      <attachid>284684</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-07-27 06:44:22 -0700</bug_when>
    <thetext>Comment on attachment 284684
Patch

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

Questions

&gt; Source/WebKit2/ChangeLog:12
&gt; +         - Use Function instead of std::function on dispatch methods.

Why, just to use our thing instead of the standard one? Is there an advantage to WTF::Function?

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:44
&gt; +    RunLoop::main().dispatch([protectedThis = makeRef(*this), function = WTFMove(function)] {

Why is this correct? We don&apos;t use |this| inside the lambda, so why the need to keep it alive? If the ref is really needed then it should be handled inside |function|, right?

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:56
&gt; +    m_clientRunLoop.dispatch([protectedThis = makeRef(*this), function = WTFMove(function)] {

Ditto.

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:158
&gt; +    dispatchOnClientRunLoop([this] {

Why no protector?

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:622
&gt; +    dispatchOnMainThread([this] {

Ditto.

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:689
&gt; +    dispatchOnMainThread([this, layerID, offset] {

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214874</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-07-27 06:51:53 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 284684 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=284684&amp;action=review
&gt; 
&gt; Questions
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:12
&gt; &gt; +         - Use Function instead of std::function on dispatch methods.
&gt; 
&gt; Why, just to use our thing instead of the standard one? Is there an
&gt; advantage to WTF::Function?

This is WTF::Function.

&gt; &gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:44
&gt; &gt; +    RunLoop::main().dispatch([protectedThis = makeRef(*this), function = WTFMove(function)] {
&gt; 
&gt; Why is this correct? We don&apos;t use |this| inside the lambda, so why the need
&gt; to keep it alive? If the ref is really needed then it should be handled
&gt; inside |function|, right?

Just to ensure the scene is alive, that&apos;s why it&apos;s called protectedThis. Before this patch all caller do that themselves, and in some cases unnecessarily, because we only need it when scheduling to another thread. Now it&apos;s done here to simplify the callers.

&gt; &gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:56
&gt; &gt; +    m_clientRunLoop.dispatch([protectedThis = makeRef(*this), function = WTFMove(function)] {
&gt; 
&gt; Ditto.

Ditto.

&gt; &gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:158
&gt; &gt; +    dispatchOnClientRunLoop([this] {
&gt; 
&gt; Why no protector?

Because dispatchOnClientRunLoop is protecting this only when actually needed.

&gt; &gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:622
&gt; &gt; +    dispatchOnMainThread([this] {
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:689
&gt; &gt; +    dispatchOnMainThread([this, layerID, offset] {
&gt; 
&gt; Ditto.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214900</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-07-27 08:22:04 -0700</bug_when>
    <thetext>(In reply to comment #3) 
&gt; This is WTF::Function.

Why is WTF::Function preferred to std::function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214913</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-07-27 08:44:30 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3) 
&gt; &gt; This is WTF::Function.
&gt; 
&gt; Why is WTF::Function preferred to std::function?

WTF::Function is non-copyable, so it&apos;s safer to use between threads and allows to capture things like Ref&lt;&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214925</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-07-27 08:59:30 -0700</bug_when>
    <thetext>Committed r203776: &lt;http://trac.webkit.org/changeset/203776&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284684</attachid>
            <date>2016-07-27 04:18:14 -0700</date>
            <delta_ts>2016-07-27 06:44:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-scene-cleanup.diff</filename>
            <type>text/plain</type>
            <size>20235</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0Y2E0NDVlLi5iOTdlMTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTEg
QEAKIDIwMTYtMDctMjcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtDb29yZGluYXRlZCBHcmFwaGljc10gSW1wcm92ZSBzY2hlZHVsaW5nIG9m
IHRhc2tzIGJldHdlZW4gdGhyZWFkcyBpbiBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDIzOAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFr
ZXMgdGhlIGZvbGxvd2luZyBpbXByb3ZlbWVudHM6CisKKyAgICAgICAgIC0gQXZvaWQgc2NoZWR1
bGluZyB0YXNrcyB0byB0aGUgbWFpbiB0aHJlYWQgaWYgdGhlIHNjZW5lIGlzIGRldGFjaGVkLgor
ICAgICAgICAgLSBEbyBub3QgdGFrZSByZWZlcmVuY2VzIHdoZW4gbm90IGFjdHVhbGx5IHNlbmRp
bmcgdGFza3MgdG8gYW5vdGhlciB0aHJlYWRzLgorICAgICAgICAgLSBVc2UgRnVuY3Rpb24gaW5z
dGVhZCBvZiBzdGQ6OmZ1bmN0aW9uIG9uIGRpc3BhdGNoIG1ldGhvZHMuCisgICAgICAgICAtIFJl
bW92ZSBwdXJnZUJhY2tpbmdTdG9yZXMgdGhhdCBpcyBhY3R1YWxseSBuZXZlciBjYWxsZWQuIEl0
J3Mgb25seSBzY2hlZHVsZWQgZnJvbSBwdXJnZUdMUmVzb3VyY2VzKCkgdGhhdAorICAgICAgICAg
ICBpcyBhbHdheXMgY2FsbGVkIGFmdGVyIGRldGFjaC4KKworICAgICAgICAqIFNoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGlzcGF0Y2hPbk1haW5UaHJlYWQpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRpc3BhdGNoT25DbGll
bnRSdW5Mb29wKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpw
YWludFRvQ3VycmVudEdMQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6dXBkYXRlVmlld3BvcnQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6Om9uTmV3QnVmZmVyQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRTY2VuZVN0YXRlKToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAg
ICAoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnB1cmdlR0xSZXNvdXJjZXMpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdFNjcm9sbE9m
ZnNldCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGV0YWNo
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRBY3RpdmUp
OgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRpc3BhdGNoQ29t
bWl0U2Nyb2xsT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpwdXJnZUJhY2tpbmdTdG9yZXMpOiBEZWxldGVkLgorICAgICAgICAqIFNo
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oOgorICAg
ICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJl
YWRlZENvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRlZENvbXBvc2l0b3I6
OnB1cmdlQmFja2luZ1N0b3Jlcyk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OnB1cmdlQmFja2luZ1N0b3Jlcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGlu
Z0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRv
cjo6aW52YWxpZGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHVyZ2VCYWNraW5n
U3RvcmVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3Qu
bWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaDoKKworMjAxNi0wNy0yNyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAgICAgU3Bs
aXQgY2FsY3VsYXRlQ2FjaGVTaXplcyBpbiB0d28gbWV0aG9kcwogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMjM3CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCmluZGV4IGRmNTAyYTUuLmExOWU4NTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcApAQCAtMzQsMjAgKzM0LDI4IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRpc3BhdGNoT25NYWluVGhyZWFkKHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiYmIGZ1bmN0aW9uKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRp
c3BhdGNoT25NYWluVGhyZWFkKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKIHsKLSAgICBp
ZiAoaXNNYWluVGhyZWFkKCkpCisgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CiAgICAgICAgIGZ1
bmN0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RG
TW92ZShmdW5jdGlvbikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGZ1bmN0aW9u
ID0gV1RGTW92ZShmdW5jdGlvbildIHsKKyAgICAgICAgZnVuY3Rpb24oKTsKKyAgICB9KTsKIH0K
IAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRpc3BhdGNoT25DbGllbnRSdW5Mb29w
KHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKQordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OmRpc3BhdGNoT25DbGllbnRSdW5Mb29wKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5j
dGlvbikKIHsKLSAgICBpZiAoJm1fY2xpZW50UnVuTG9vcCA9PSAmUnVuTG9vcDo6Y3VycmVudCgp
KQorICAgIGlmICgmbV9jbGllbnRSdW5Mb29wID09ICZSdW5Mb29wOjpjdXJyZW50KCkpIHsKICAg
ICAgICAgZnVuY3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY2xpZW50UnVuTG9vcC5kaXNw
YXRjaChXVEZNb3ZlKGZ1bmN0aW9uKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBt
X2NsaWVudFJ1bkxvb3AuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
ZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0geworICAgICAgICBmdW5jdGlvbigpOworICAg
IH0pOwogfQogCiBzdGF0aWMgYm9vbCBsYXllclNob3VsZEhhdmVCYWNraW5nU3RvcmUoVGV4dHVy
ZU1hcHBlckxheWVyKiBsYXllcikKQEAgLTExMywxMiArMTIxLDggQEAgdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cmkKICAgICBtX3RleHR1cmVNYXBwZXItPmVuZENsaXAoKTsKICAgICBtX3RleHR1cmVN
YXBwZXItPmVuZFBhaW50aW5nKCk7CiAKLSAgICBpZiAoY3VycmVudFJvb3RMYXllci0+ZGVzY2Vu
ZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkgewotICAgICAgICBSZWZQdHI8Q29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lPiBwcm90ZWN0b3IodGhpcyk7Ci0gICAgICAgIGRpc3BhdGNo
T25DbGllbnRSdW5Mb29wKFtwcm90ZWN0b3JdIHsKLSAgICAgICAgICAgIHByb3RlY3Rvci0+dXBk
YXRlVmlld3BvcnQoKTsKLSAgICAgICAgfSk7Ci0gICAgfQorICAgIGlmIChjdXJyZW50Um9vdExh
eWVyLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQorICAgICAgICB1
cGRhdGVWaWV3cG9ydCgpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cGFp
bnRUb0dyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250
ZXh0LCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBib29sIGRyYXdzQmFja2dyb3VuZCkK
QEAgLTE0OSw5ICsxNTMsMTIgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnBhaW50
VG9HcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHAKIAogdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVwZGF0ZVZpZXdwb3J0KCkKIHsKLSAgICBBU1NFUlQoJm1f
Y2xpZW50UnVuTG9vcCA9PSAmUnVuTG9vcDo6Y3VycmVudCgpKTsKLSAgICBpZiAobV9jbGllbnQp
Ci0gICAgICAgIG1fY2xpZW50LT51cGRhdGVWaWV3cG9ydCgpOworICAgIGlmICghbV9jbGllbnQp
CisgICAgICAgIHJldHVybjsKKyAgICBkaXNwYXRjaE9uQ2xpZW50UnVuTG9vcChbdGhpc10gewor
ICAgICAgICBpZiAobV9jbGllbnQpCisgICAgICAgICAgICBtX2NsaWVudC0+dXBkYXRlVmlld3Bv
cnQoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmFkanVz
dFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoY29uc3QgRmxvYXRQb2ludCYgY29udGVudFBvc2l0aW9u
KQpAQCAtMjAyLDEwICsyMDksNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c3lu
Y1BsYXRmb3JtTGF5ZXJJZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheQogI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpvbk5ld0J1ZmZlckF2YWlsYWJsZSgpCiB7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZT4gcHJvdGVjdG9yKHRoaXMpOwotICAgIGRpc3BhdGNoT25DbGllbnRSdW5Mb29w
KFtwcm90ZWN0b3JdIHsKLSAgICAgICAgcHJvdGVjdG9yLT51cGRhdGVWaWV3cG9ydCgpOwotICAg
IH0pOworICAgIHVwZGF0ZVZpZXdwb3J0KCk7CiB9CiAjZW5kaWYKIApAQCAtNjA4LDE2ICs2MTIs
MTcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdFNjZW5lU3RhdGUoY29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJgogICAgIHJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNr
aW5nc0lmTmVlZGVkKCk7CiAKICAgICAvLyBUaGUgcGVuZGluZyB0aWxlcyBzdGF0ZSBpcyBvbiBp
dHMgd2F5IGZvciB0aGUgc2NyZWVuLCB0ZWxsIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGhl
IG5leHQgb25lLgotICAgIFJlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU+IHByb3RlY3Rv
cih0aGlzKTsKLSAgICBkaXNwYXRjaE9uTWFpblRocmVhZChbcHJvdGVjdG9yXSB7Ci0gICAgICAg
IHByb3RlY3Rvci0+cmVuZGVyTmV4dEZyYW1lKCk7Ci0gICAgfSk7CisgICAgcmVuZGVyTmV4dEZy
YW1lKCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW5kZXJOZXh0RnJh
bWUoKQogewotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPnJlbmRlck5leHRG
cmFtZSgpOworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKyAgICBkaXNwYXRj
aE9uTWFpblRocmVhZChbdGhpc10geworICAgICAgICBpZiAobV9jbGllbnQpCisgICAgICAgICAg
ICBtX2NsaWVudC0+cmVuZGVyTmV4dEZyYW1lKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjplbnN1cmVSb290TGF5ZXIoKQpAQCAtNjU2LDYgKzY2MSw4IEBA
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzeW5jUmVtb3RlQ29udGVudCgpCiAKIHZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwdXJnZUdMUmVzb3VyY2VzKCkKIHsKKyAgICBB
U1NFUlQoIW1fY2xpZW50KTsKKwogICAgIG1faW1hZ2VCYWNraW5ncy5jbGVhcigpOwogICAgIG1f
cmVsZWFzZWRJbWFnZUJhY2tpbmdzLmNsZWFyKCk7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CkBAIC02NzMsMzQgKzY4MCwxOCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cHVy
Z2VHTFJlc291cmNlcygpCiAgICAgbV90ZXh0dXJlTWFwcGVyID0gbnVsbHB0cjsKICAgICBtX2Jh
Y2tpbmdTdG9yZXMuY2xlYXIoKTsKICAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZl
cnMuY2xlYXIoKTsKLQotICAgIHNldEFjdGl2ZShmYWxzZSk7Ci0KLSAgICBSZWZQdHI8Q29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lPiBwcm90ZWN0b3IodGhpcyk7Ci0gICAgZGlzcGF0Y2hPbk1haW5U
aHJlYWQoW3Byb3RlY3Rvcl0gewotICAgICAgICBwcm90ZWN0b3ItPnB1cmdlQmFja2luZ1N0b3Jl
cygpOwotICAgIH0pOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGlzcGF0
Y2hDb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0KQotewotICAgIG1fY2xpZW50LT5jb21taXRTY3JvbGxPZmZzZXQobGF5ZXJJRCwgb2Zmc2V0
KTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdFNjcm9sbE9mZnNl
dCh1aW50MzJfdCBsYXllcklELCBjb25zdCBJbnRTaXplJiBvZmZzZXQpCiB7Ci0gICAgUmVmUHRy
PENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZT4gcHJvdGVjdG9yKHRoaXMpOwotICAgIGRpc3BhdGNo
T25NYWluVGhyZWFkKFtwcm90ZWN0b3IsIGxheWVySUQsIG9mZnNldF0gewotICAgICAgICBwcm90
ZWN0b3ItPmRpc3BhdGNoQ29tbWl0U2Nyb2xsT2Zmc2V0KGxheWVySUQsIG9mZnNldCk7CisgICAg
aWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGRpc3BhdGNoT25NYWluVGhyZWFk
KFt0aGlzLCBsYXllcklELCBvZmZzZXRdIHsKKyAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAg
ICAgICAgbV9jbGllbnQtPmNvbW1pdFNjcm9sbE9mZnNldChsYXllcklELCBvZmZzZXQpOwogICAg
IH0pOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cHVyZ2VCYWNraW5nU3Rv
cmVzKCkKLXsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5wdXJnZUJhY2tp
bmdTdG9yZXMoKTsKLX0KLQogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVy
QW5pbWF0aW9uc0lmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIsIGNvbnN0IENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKIHsKICAgICBpZiAoIXN0YXRlLmFuaW1h
dGlvbnNDaGFuZ2VkKQpAQCAtNzEzLDcgKzcwNCw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpkZXRhY2goKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbV9y
ZW5kZXJRdWV1ZS5jbGVhcigpOwotICAgIG1fY2xpZW50ID0gMDsKKyAgICBtX2lzQWN0aXZlID0g
ZmFsc2U7CisgICAgbV9jbGllbnQgPSBudWxscHRyOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6YXBwZW5kVXBkYXRlKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9u
KQpAQCAtNzI4LDYgKzcyMCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjphcHBl
bmRVcGRhdGUoc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pCiAKIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRBY3RpdmUoYm9vbCBhY3RpdmUpCiB7CisgICAgaWYgKCFt
X2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKG1faXNBY3RpdmUgPT0gYWN0aXZl
KQogICAgICAgICByZXR1cm47CiAKQEAgLTczNiwxMiArNzMxLDggQEAgdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnNldEFjdGl2ZShib29sIGFjdGl2ZSkKICAgICAvLyBhbmQgY2Fubm90
IGJlIGFwcGxpZWQgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UuCiAgICAgbV9yZW5kZXJR
dWV1ZS5jbGVhcigpOwogICAgIG1faXNBY3RpdmUgPSBhY3RpdmU7Ci0gICAgaWYgKG1faXNBY3Rp
dmUpIHsKLSAgICAgICAgUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZT4gcHJvdGVjdG9y
KHRoaXMpOwotICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZChbcHJvdGVjdG9yXSB7Ci0gICAg
ICAgICAgICBwcm90ZWN0b3ItPnJlbmRlck5leHRGcmFtZSgpOwotICAgICAgICB9KTsKLSAgICB9
CisgICAgaWYgKG1faXNBY3RpdmUpCisgICAgICAgIHJlbmRlck5leHRGcmFtZSgpOwogfQogCiBU
ZXh0dXJlTWFwcGVyTGF5ZXIqIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZmluZFNjcm9sbGFi
bGVDb250ZW50c0xheWVyQXQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzU2NlbmUuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCmluZGV4IGI0NmM1YzMuLjQxZDU5OWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCkBAIC0zMyw3ICszMyw3IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyRlBTQ291bnRlci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvVGV4dHVyZU1hcHBlckxheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgotI2lu
Y2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SdW5M
b29wLmg+CkBAIC01Niw3ICs1Niw2IEBAIGNsYXNzIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOwog
Y2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5Db29yZGluYXRlZEdyYXBoaWNzU2NlbmVDbGllbnQoKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgcHVyZ2VCYWNraW5nU3RvcmVzKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0
RnJhbWUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpZXdwb3J0KCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgb2Zmc2V0KSA9IDA7CkBAIC0xMzEsMTEgKzEzMCwxMCBAQCBwcml2
YXRlOgogICAgIHZvaWQgc3luY1JlbW90ZUNvbnRlbnQoKTsKICAgICB2b2lkIGFkanVzdFBvc2l0
aW9uRm9yRml4ZWRMYXllcnMoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgY29udGVudFBvc2l0
aW9uKTsKIAotICAgIHZvaWQgZGlzcGF0Y2hPbk1haW5UaHJlYWQoc3RkOjpmdW5jdGlvbjx2b2lk
KCk+JiYpOwotICAgIHZvaWQgZGlzcGF0Y2hPbkNsaWVudFJ1bkxvb3Aoc3RkOjpmdW5jdGlvbjx2
b2lkKCk+JiYpOworICAgIHZvaWQgZGlzcGF0Y2hPbk1haW5UaHJlYWQoRnVuY3Rpb248dm9pZCgp
PiYmKTsKKyAgICB2b2lkIGRpc3BhdGNoT25DbGllbnRSdW5Mb29wKEZ1bmN0aW9uPHZvaWQoKT4m
Jik7CiAgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOwogICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1l
KCk7Ci0gICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKIAogICAgIHZvaWQgY3JlYXRlTGF5
ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsKICAgICB2b2lkIGRlbGV0ZUxheWVyKFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCk7CkBAIC0xNTAsOCArMTQ4LDYgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHJlbW92ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJMYXllciopOwogICAgIHZvaWQgcmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckxheWVyKik7CiAKLSAgICB2b2lkIGRpc3BhdGNoQ29tbWl0U2Ny
b2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG9mZnNl
dCk7Ci0KICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCiAgICAgdm9pZCBv
bk5ld0J1ZmZlckF2YWlsYWJsZSgpIG92ZXJyaWRlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3Iv
VGhyZWFkZWRDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3BwCmluZGV4
IDY1ODBhMzUuLjlhNDdlNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVk
Y29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3BwCkBAIC0xNDAsMTIgKzE0MCw2IEBAIHZv
aWQgVGhyZWFkZWRDb21wb3NpdG9yOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBkZWx0YSkKICAg
ICB9KTsKIH0KIAotdm9pZCBUaHJlYWRlZENvbXBvc2l0b3I6OnB1cmdlQmFja2luZ1N0b3Jlcygp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBtX2NsaWVudC0+cHVyZ2VCYWNr
aW5nU3RvcmVzKCk7Ci19Ci0KIHZvaWQgVGhyZWFkZWRDb21wb3NpdG9yOjpyZW5kZXJOZXh0RnJh
bWUoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhy
ZWFkZWRDb21wb3NpdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmgKaW5kZXggM2MwMDIz
YS4uMWQzYmE5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRv
ci9UaHJlYWRlZENvbXBvc2l0b3IuaApAQCAtNTMsNyArNTMsNiBAQCBwdWJsaWM6CiAgICAgY2xh
c3MgQ2xpZW50IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxl
Q29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmLCBmbG9hdCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHVyZ2VCYWNraW5n
U3RvcmVzKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCkgPSAw
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVy
SUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG9mZnNldCkgPSAwOwogICAgIH07CkBAIC04MSw3
ICs4MCw2IEBAIHByaXZhdGU6CiAgICAgVGhyZWFkZWRDb21wb3NpdG9yKENsaWVudCopOwogCiAg
ICAgLy8gQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50Ci0gICAgdm9pZCBwdXJnZUJhY2tp
bmdTdG9yZXMoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpIG92ZXJyaWRl
OwogICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKSBvdmVycmlkZTsKICAgICB2b2lkIGNvbW1pdFNj
cm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBvZmZz
ZXQpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHkuY3BwCmluZGV4IGRlMWYwYWYuLmUyYzY2OTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKQEAgLTg1LDExICs4
NSw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFt
ZSgpCiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkucHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6UmVuZGVyTmV4dEZyYW1lKCksIG1fZHJhd2lu
Z0FyZWFQcm94eS0+cGFnZSgpLnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBtX2RyYXdpbmdBcmVh
UHJveHktPnBhZ2UoKS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpQdXJnZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCku
cGFnZUlEKCkpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21t
aXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQog
ewogICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OkNvbW1pdFNjcm9sbE9mZnNldChsYXllcklELCBv
ZmZzZXQpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS5wYWdlSUQoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaAppbmRleCA4ZjI4NjY3
Li40ZjM4ZGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5LmgKQEAgLTUxLDcgKzUxLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVW
aWV3cG9ydCgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKSBvdmVycmlkZTsKIAogICAgIHZvaWQgY29t
bWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IG9mZnNldCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKaW5kZXggNjY0MGM1MS4uNzM1YjdmMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5j
cHAKQEAgLTU5LDYgKzU5LDEyIEBAIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6On5Db21wb3NpdGlu
Z0Nvb3JkaW5hdG9yKCkKICAgICAgICAgcmVnaXN0ZXJlZExheWVyLT5zZXRDb29yZGluYXRvcihu
dWxscHRyKTsKIH0KIAordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjppbnZhbGlkYXRlKCkK
K3sKKyAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7CisgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7
Cit9CisKIHZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKIHsKICAgICBpZiAobV9yb290Q29tcG9z
aXRpbmdMYXllciA9PSBncmFwaGljc0xheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGlu
YXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCmluZGV4IGMzMWFlNTcuLmY5OGEzNmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9y
LmgKQEAgLTY2LDYgKzY2LDggQEAgcHVibGljOgogICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3Io
V2ViQ29yZTo6UGFnZSosIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCYpOwogICAgIHZp
cnR1YWwgfkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IoKTsKIAorICAgIHZvaWQgaW52YWxpZGF0ZSgp
OworCiAgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKik7CiAgICAgdm9pZCBzZXRWaWV3T3ZlcmxheVJvb3RMYXllcihXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKik7CiAgICAgdm9pZCBzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
KTsKQEAgLTczLDExICs3NSw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRl
bnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50Jik7CiAgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKLSAgICB2b2lkIHB1cmdlQmFja2lu
Z1N0b3JlcygpOwogICAgIHZvaWQgY29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG9mZnNldCk7CiAKICAgICB2b2lkIGNyZWF0ZVJvb3RM
YXllcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdm9pZCBjbGVhclJvb3RMYXllcigp
IHsgbV9yb290TGF5ZXIgPSBudWxscHRyOyB9CiAgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciog
cm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KICAgICBXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIG1haW5Db250ZW50c0xheWVyKCk7CiAKQEAg
LTEyMyw2ICsxMjMsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZmx1c2hQZW5kaW5nSW1hZ2VCYWNr
aW5nQ2hhbmdlcygpOwogICAgIHZvaWQgY2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCk7CiAKKyAg
ICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOworCiAgICAgdm9pZCBzY2hlZHVsZVJlbGVhc2VJ
bmFjdGl2ZUF0bGFzZXMoKTsKIAogICAgIHZvaWQgcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVy
RmlyZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3QuY3BwCmluZGV4IGIyMThmZjEuLjQ3OGQ1Y2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApA
QCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjppbnZhbGlk
YXRlKCkKIHsKICAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwogCi0gICAgbV9jb29yZGlu
YXRvci5jbGVhclJvb3RMYXllcigpOworICAgIG1fY29vcmRpbmF0b3IuaW52YWxpZGF0ZSgpOwog
ICAgIExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKTsKIH0KIApAQCAtMTUwLDExICsxNTAsNiBA
QCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVuZGVyTmV4dEZyYW1lKCkKICAgICBt
X2Nvb3JkaW5hdG9yLnJlbmRlck5leHRGcmFtZSgpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBtX2Nvb3JkaW5hdG9yLnB1
cmdlQmFja2luZ1N0b3JlcygpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
ZGlkRmx1c2hSb290TGF5ZXIoY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpCiB7
CiAgICAgLy8gQmVjYXVzZSBvdXIgdmlldy1yZWxhdGl2ZSBvdmVybGF5IHJvb3QgbGF5ZXIgaXMg
bm90IGF0dGFjaGVkIHRvIHRoZSBGcmFtZVZpZXcncyBHcmFwaGljc0xheWVyIHRyZWUsIHdlIG5l
ZWQgdG8gZmx1c2ggaXQgbWFudWFsbHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhv
c3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDYyNzlhMmEuLjA3YTNiOTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdC5oCkBAIC01OSw3ICs1OSw2IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgc2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50Jik7CiAgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKLSAgICB2b2lkIHB1cmdl
QmFja2luZ1N0b3JlcygpOwogICAgIHZvaWQgY29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxh
eWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG9mZnNldCk7CiAKICAgICBXZWJDb3JlOjpH
cmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSBvdmVycmlkZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbgppbmRleCBlMTcwNWI3Li43M2Y5NTNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0Lm1lc3NhZ2VzLmluCkBAIC0yMyw3ICsyMyw2IEBACiBtZXNzYWdlcyAtPiBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3QgTGVnYWN5UmVjZWl2ZXIgewogICAgIFNldFZpc2libGVDb250ZW50
c1JlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QsIFdlYkNvcmU6OkZs
b2F0UG9pbnQgdHJhamVjdG9yeVZlY3RvcnkpCiAgICAgUmVuZGVyTmV4dEZyYW1lKCkKLSAgICBQ
dXJnZUJhY2tpbmdTdG9yZXMoKQogICAgIENvbW1pdFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXll
cklELCBXZWJDb3JlOjpJbnRTaXplIG9mZnNldCkKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFk
ZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmgKaW5kZXggNmQxOTA3ZC4uNmE5OTBjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRl
ZExheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCkBA
IC04MiwxMSArODIsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LnNl
dFZpc2libGVDb250ZW50c1JlY3QocmVjdCwgdHJhamVjdG9yeVZlY3Rvciwgc2NhbGUpOwogICAg
ICAgICB9CiAKLSAgICAgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKSBvdmVycmlkZQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QucHVyZ2VCYWNraW5nU3RvcmVzKCk7
Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpIG92ZXJyaWRlCiAg
ICAgICAgIHsKICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC5yZW5kZXJOZXh0RnJhbWUoKTsK
</data>
<flag name="review"
          id="308324"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>