<?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>157490</bug_id>
          
          <creation_ts>2016-05-09 14:41:28 -0700</creation_ts>
          <short_desc>Numerous block selection issues on iOS</short_desc>
          <delta_ts>2016-05-10 17:21:11 -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 Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Enrica Casucci">enrica</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1191318</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-05-09 14:41:28 -0700</bug_when>
    <thetext>This bug tracks the works required to fix a number of issues with block selections on iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191323</commentid>
    <comment_count>1</comment_count>
      <attachid>278442</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-05-09 14:52:32 -0700</bug_when>
    <thetext>Created attachment 278442
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191325</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-09 14:54:57 -0700</bug_when>
    <thetext>Attachment 278442 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:478:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:389:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191398</commentid>
    <comment_count>3</comment_count>
      <attachid>278442</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-05-09 17:45:35 -0700</bug_when>
    <thetext>Comment on attachment 278442
Patch

I found a problem with the patch. Removing the review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191425</commentid>
    <comment_count>4</comment_count>
      <attachid>278442</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-09 20:07:45 -0700</bug_when>
    <thetext>Comment on attachment 278442
Patch

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

A few comments even though this is not yet ready for review.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:884
&gt; +    bool canShrink = false;

No need for this local variable.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:890
&gt; +    if (renderer &amp;&amp; renderer-&gt;childrenInline() &amp;&amp; (is&lt;RenderBlock&gt;(*renderer) &amp;&amp; !downcast&lt;RenderBlock&gt;(*renderer).inlineElementContinuation()) &amp;&amp; !renderer-&gt;isTable())

This should just be a return statement.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:892
&gt; +    return canShrink;

I would write it more like this:

    if (!node)
        return false;
    Element* element;
    if (is&lt;Element&gt;(*node))
        element = &amp;downcast&lt;Element&gt;(*node);
    else {
        element = node-&gt;parentElement();
        if (!element)
            return false;
    }
    auto* renderer = element-&gt;renderer();
    if (!is&lt;RenderBlock&gt;(renderer))
        return false;
    auto&amp; block = downcast&lt;RenderBlock&gt;(*renderer);
    return block.childrenInline &amp;&amp; !block.inlineElementContinuation()) &amp;&amp; !block.isTable();

Might want to put the whole &quot;get from Node all the way to a RenderBlock&quot; part into a separate helper function.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:895
&gt; +static bool canShrinkToTextSelection(Range *range)

Argument type should be Range&amp;, since it won’t work with a null pointer.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:902
&gt; +static bool hasCustomLineHeight(Node* node)

Argument type should be Node&amp;, since it won’t work with a null pointer.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:907
&gt; +    if (renderer &amp;&amp; renderer-&gt;style().lineHeight().isSpecified())
&gt; +        return true;
&gt; +    return false;

Should just be return x; rather than if (x) return true; return false;

    auto* renderer = node.renderer();
    return renderer &amp;&amp; renderer-&gt;style().lineHeight().isSpecified();

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:921
&gt; +            RenderText *renderText = downcast&lt;RenderBlockFlow&gt;(renderer)-&gt;findClosestTextAtAbsolutePoint(point);

Should be auto*, not RenderText *. Position of &quot;*&quot; and also better not to specify the type so the type can be as specific as possible

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1626
&gt; +//        if (flags == None)
&gt; +//            m_currentBlockSelection = nullptr;

Please don’t check in commented out code.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1641
&gt; +PassRefPtr&lt;Range&gt; WebPage::switchToBlockSelectionAtPoint(const IntPoint&amp; point, SelectionHandlePosition handlePosition)

New code should return RefPtr, not PassRefPtr.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1647
&gt; +        Node *currentNode = &amp;currentRange-&gt;startContainer();

Should be Node* with space after the *.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1669
&gt; +        return (handlePoint.y() &lt; m_blockRectForTextSelection.y());

No need for parentheses for return value.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1694
&gt; +    SelectionHandlePosition handlePosition = baseIsStart ? SelectionHandlePosition::Bottom : SelectionHandlePosition::Top;
&gt; +
&gt;      

Extra blank line here, only need one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191610</commentid>
    <comment_count>5</comment_count>
      <attachid>278521</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-05-10 12:45:28 -0700</bug_when>
    <thetext>Created attachment 278521
Patch2

Fixes additional issue found and addresses Darin&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191611</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-10 12:47:13 -0700</bug_when>
    <thetext>Attachment 278521 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:478:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:389:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191737</commentid>
    <comment_count>7</comment_count>
      <attachid>278521</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-05-10 17:02:15 -0700</bug_when>
    <thetext>Comment on attachment 278521
Patch2

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

&gt; Source/WebKit2/ChangeLog:11
&gt; +        This patch fixes a number of issues with block selection on iOS like.
&gt; +        We not longer eagerly choose block selection vs text selection and we

The grammar here is not quite right (sentence ending with like, &quot;not&quot;, etc.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191747</commentid>
    <comment_count>8</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-05-10 17:21:11 -0700</bug_when>
    <thetext>Committed revision 200660.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278442</attachid>
            <date>2016-05-09 14:52:32 -0700</date>
            <delta_ts>2016-05-10 12:45:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>block-selection-webkit.txt</filename>
            <type>text/plain</type>
            <size>22573</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMDM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE2LTA1LTA5ICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgTnVtZXJvdXMgYmxvY2sgc2Vs
ZWN0aW9uIGlzc3VlcyBvbiBpT1MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTc0OTAKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjU3MTc5NzcKKyAg
ICAgICAgcmRhcjovL3Byb2JsZW0vMjMwNDIyMTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgor
ICAgICAgICBFeHBvcnRpbmcgbWV0aG9kLgorCiAyMDE2LTA1LTAzICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgU3BlZWQgdXAgSlNHbG9iYWxPYmplY3QgaW5pdGlh
bGl6YXRpb24gYnkgbWFraW5nIHNvbWUgcHJvcGVydGllcyBsYXp5CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMjAwMzg0KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc1Nyw3ICs3NTcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNFeHBsaWNpdGx5
U2V0RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbm9uaW5oZXJpdGVkX2ZsYWdzLmhhc0V4cGxp
Y2l0bHlTZXREaXJlY3Rpb24oKTsgfQogCiAgICAgY29uc3QgTGVuZ3RoJiBzcGVjaWZpZWRMaW5l
SGVpZ2h0KCkgY29uc3Q7Ci0gICAgTGVuZ3RoIGxpbmVIZWlnaHQoKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBMZW5ndGggbGluZUhlaWdodCgpIGNvbnN0OwogICAgIGludCBjb21wdXRlZExp
bmVIZWlnaHQoKSBjb25zdDsKIAogICAgIEVXaGl0ZVNwYWNlIHdoaXRlU3BhY2UoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxFV2hpdGVTcGFjZT4oaW5oZXJpdGVkX2ZsYWdzLl93aGl0ZV9z
cGFjZSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMDM4NCkKKysrIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE2LTA1LTA5
ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgTnVtZXJvdXMg
YmxvY2sgc2VsZWN0aW9uIGlzc3VlcyBvbiBpT1MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc0OTAKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjU3
MTc5NzcKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjMwNDIyMTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGZpeGVzIGEgbnVtYmVy
IG9mIGlzc3VlcyB3aXRoIGJsb2NrIHNlbGVjdGlvbiBvbiBpT1MgbGlrZS4KKyAgICAgICAgV2Ug
bm90IGxvbmdlciBlYWdlcmx5IGNob29zZSBibG9jayBzZWxlY3Rpb24gdnMgdGV4dCBzZWxlY3Rp
b24gYW5kIHdlCisgICAgICAgIG1ha2Ugc3VyZSB3ZSBhcmUgY2FwYWJsZSBvZiBzd2l0Y2hpbmcg
YmFjayB0byB0ZXh0IHNlbGVjdGlvbiBmcm9tIGJsb2NrCisgICAgICAgIHVuZGVyIGV2ZXJ5IGNp
cmN1bXN0YW5jZS4gVGhlIHBhdGNoIGFsc28gZml4ZXMgdGhlIGxvZ2ljIHVzZWQgdG8gZGVjaWRl
CisgICAgICAgIHdoZW4gdG8gc3dpdGNoIHRvIGJsb2NrIHNlbGVjdGlvbi4gSXQgbm93IGNvbXB1
dGVzIHRoZSByZWN0YW5nbGUgZm9yIHRoZQorICAgICAgICBwYXJhZ3JhcGggY29udGFpbmluZyB0
aGUgaW5pdGlhbCB0ZXh0IHNlbGVjdGlvbiB0byBkZWNpZGUgd2hlbiB3ZSBhcmUKKyAgICAgICAg
YWN0dWFsbHkgZHJhZ2dpbmcgb3V0c2lkZSB0aGUgYm91bmRhcmllcyBvZiB0aGUgcGFyYWdyYXBo
IGJsb2NrLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgIChzZWxlY3Rpb25DaGFu
Z2VkV2l0aEdlc3R1cmUpOgorICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaCk6Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgY2hhbmdlU2VsZWN0aW9uV2l0aFRvdWNoQXQ6d2l0aFNl
bGVjdGlvblRvdWNoOmJhc2VJc1N0YXJ0Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2Vi
UGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omdlc3R1cmVD
YWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dG91Y2hlc0NhbGxiYWNr
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjphdXRvY29ycmVjdGlvbkRhdGFDYWxs
YmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2VsZWN0V2l0aEdlc3R1cmUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnVwZGF0ZVNlbGVjdGlvbldpdGhUb3Vj
aGVzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6
c2VsZWN0aW9uQm94Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpjYW5TaHJpbmtUb1RleHRT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpoYXNDdXN0b21MaW5lSGVpZ2h0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6cmFuZ2VGb3JXZWJTZWxlY3Rpb25BdFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29udHJhY3RlZFJhbmdlRnJvbUhhbmRsZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y2xlYXJTZWxlY3Rpb24pOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpzd2l0Y2hUb0Jsb2NrU2VsZWN0aW9uQXRQb2ludCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnNob3VsZFN3aXRjaFRvQmxvY2tNb2RlRm9ySGFuZGxlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RXaXRoVHdvVG91Y2hlcyk6CisKIDIwMTYtMDUtMDIgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIENoYW5nZSBJREwgZW51bWVy
YXRpb25zIHRvIGJlIG5lc3RlZCBpbiB0aGVpciBDKysgY2xhc3MgaW5zdGVhZCBvZiBhdCBXZWJD
b3JlIG5hbWVzcGFjZSBsZXZlbApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAkocmV2aXNpb24gMjAwMzg0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNyArMjUwLDcgQEAgdHlwZWRlZiBH
ZW5lcmljQ2FsbGJhY2s8Y29uc3QgU3RyaW5nJiwgZAogCiAjaWYgUExBVEZPUk0oSU9TKQogdHlw
ZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCwg
dWludDMyX3QsIHVpbnQzMl90PiBHZXN0dXJlQ2FsbGJhY2s7Ci10eXBlZGVmIEdlbmVyaWNDYWxs
YmFjazxjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90PiBUb3VjaGVzQ2FsbGJhY2s7
Cit0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQz
Ml90LCB1aW50MzJfdD4gVG91Y2hlc0NhbGxiYWNrOwogc3RydWN0IE5vZGVBc3Npc3RhbmNlQXJn
dW1lbnRzIHsKICAgICBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiBtX25vZGVJbmZvcm1hdGlvbjsK
ICAgICBib29sIG1fdXNlcklzSW50ZXJhY3Rpbmc7CkBAIC00NzUsNyArNDc1LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgd2lsbENvbW1pdExheWVyVHJlZSh1aW50NjRfdCB0cmFuc2FjdGlvbklEKTsK
IAogICAgIHZvaWQgc2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIFdl
YkNvcmU6OlRleHRHcmFudWxhcml0eSwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdl
c3R1cmVTdGF0ZSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgc3RkOjpmdW5j
dGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90LCB1aW50MzJfdCwg
dWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7Ci0gICAgdm9pZCB1cGRhdGVTZWxlY3Rp
b25XaXRoVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCwgdWludDMyX3QgdG91Y2hlcywg
Ym9vbCBiYXNlSXNTdGFydCwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYsIHVpbnQzMl90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAgIHZvaWQgdXBkYXRl
U2VsZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIHVpbnQzMl90IHRv
dWNoZXMsIGJvb2wgYmFzZUlzU3RhcnQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmLCB1aW50MzJfdCwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7
CiAgICAgdm9pZCBzZWxlY3RXaXRoVHdvVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBm
cm9tLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCB0bywgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVp
bnQzMl90IGdlc3R1cmVTdGF0ZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJy
b3IpPik7CiAgICAgdm9pZCB1cGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaChjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCwgdWludDMyX3QgdG91Y2gsIHVpbnQzMl90IGhhbmRsZVBvc2l0aW9uKTsK
ICAgICB2b2lkIGV4dGVuZFNlbGVjdGlvbihXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkpOwpAQCAt
MTM2Nyw3ICsxMzY3LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogI2lmIFBMQVRGT1JNKElPUykKICAg
ICB2b2lkIGdlc3R1cmVDYWxsYmFjayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90
LCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQ2NF90KTsKLSAgICB2b2lkIHRvdWNoZXNDYWxsYmFj
ayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90LCB1aW50NjRfdCk7CisgICAgdm9p
ZCB0b3VjaGVzQ2FsbGJhY2soY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCwgdWlu
dDMyX3QsIHVpbnQ2NF90KTsKICAgICB2b2lkIGF1dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgY29uc3QgU3RyaW5nJiwgZmxvYXQsIHVp
bnQ2NF90LCB1aW50NjRfdCk7CiAgICAgdm9pZCBhdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFj
ayhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCB1aW50NjRfdCwgdWludDY0X3QsIHVpbnQ2NF90KTsKICAgICB2b2lkIHNlbGVjdGlvbkNv
bnRleHRDYWxsYmFjayhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCB1aW50NjRfdCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDIwMDM4NCkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE3
MSw3ICsxNzEsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogI2VuZGlmCiAjaWYgUExB
VEZPUk0oSU9TKQogICAgIEdlc3R1cmVDYWxsYmFjayhXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwg
dWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDMyX3QgZmxh
Z3MsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCi0gICAgVG91Y2hlc0NhbGxiYWNrKFdlYkNvcmU6Oklu
dFBvaW50IHBvaW50LCB1aW50MzJfdCB0b3VjaGVzLCB1aW50NjRfdCBjYWxsYmFja0lEKQorICAg
IFRvdWNoZXNDYWxsYmFjayhXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgdWludDMyX3QgdG91Y2hl
cywgdWludDMyX3QgZmxhZ3MsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgQXV0b2NvcnJlY3Rp
b25EYXRhQ2FsbGJhY2soVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gdGV4dFJlY3RzLCBTdHJp
bmcgZm9udE5hbWUsIGRvdWJsZSBmb250U2l6ZSwgdWludDY0X3QgdHJhaXRzLCB1aW50NjRfdCBj
YWxsYmFja0lEKQogICAgIEF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxiYWNrKFN0cmluZyBiZWZv
cmVUZXh0LCBTdHJpbmcgbWFya2VkVGV4dCwgU3RyaW5nIHNlbGVjdGVkVGV4dCwgU3RyaW5nIGFm
dGVyVGV4dCwgdWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0aCwgdWludDY0X3QgY2Fs
bGJhY2tJRCkKICAgICBTZWxlY3Rpb25Db250ZXh0Q2FsbGJhY2soU3RyaW5nIHNlbGVjdGVkVGV4
dCwgU3RyaW5nIGJlZm9yZVRleHQsIFN0cmluZyBhZnRlclRleHQsIHVpbnQ2NF90IGNhbGxiYWNr
SUQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQkocmV2aXNpb24gMjAwMzg0KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTIyMTgsMTQgKzIyMTgsMTQgQEAgc3RhdGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdl
ZFdpdGhHZXN0dXJlKAogICAgICAgICBbKFVJV0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQgKilb
dmlldyBpbnRlcmFjdGlvbkFzc2lzdGFudF0gc2VsZWN0aW9uQ2hhbmdlZFdpdGhHZXN0dXJlQXQ6
KENHUG9pbnQpcG9pbnQgd2l0aEdlc3R1cmU6dG9VSVdLR2VzdHVyZVR5cGUoKEdlc3R1cmVUeXBl
KWdlc3R1cmVUeXBlKSB3aXRoU3RhdGU6dG9VSUdlc3R1cmVSZWNvZ25pemVyU3RhdGUoc3RhdGlj
X2Nhc3Q8R2VzdHVyZVJlY29nbml6ZXJTdGF0ZT4oZ2VzdHVyZVN0YXRlKSkgd2l0aEZsYWdzOih0
b1VJV0tTZWxlY3Rpb25GbGFncygoU2VsZWN0aW9uRmxhZ3MpZmxhZ3MpKV07CiB9CiAKLXN0YXRp
YyB2b2lkIHNlbGVjdGlvbkNoYW5nZWRXaXRoVG91Y2goV0tDb250ZW50VmlldyAqdmlldywgY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCB0b3VjaCwgV2ViS2l0OjpDYWxs
YmFja0Jhc2U6OkVycm9yIGVycm9yKQorc3RhdGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZFdpdGhU
b3VjaChXS0NvbnRlbnRWaWV3ICp2aWV3LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQs
IHVpbnQzMl90IHRvdWNoLCB1aW50MzJfdCBmbGFncywgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVy
cm9yIGVycm9yKQogewogICAgIGlmIChlcnJvciAhPSBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJy
b3I6Ok5vbmUpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgaWYgKFt2aWV3IHdlYlNlbGVjdGlvbkFzc2lzdGFudF0pCi0gICAgICAg
IFsoVUlXS1NlbGVjdGlvbkFzc2lzdGFudCAqKVt2aWV3IHdlYlNlbGVjdGlvbkFzc2lzdGFudF0g
c2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaEF0OihDR1BvaW50KXBvaW50IHdpdGhTZWxlY3Rpb25U
b3VjaDp0b1VJV0tTZWxlY3Rpb25Ub3VjaCgoU2VsZWN0aW9uVG91Y2gpdG91Y2gpXTsKKyAgICAg
ICAgWyhVSVdLU2VsZWN0aW9uQXNzaXN0YW50ICopW3ZpZXcgd2ViU2VsZWN0aW9uQXNzaXN0YW50
XSBzZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoQXQ6KENHUG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlv
blRvdWNoOnRvVUlXS1NlbGVjdGlvblRvdWNoKChTZWxlY3Rpb25Ub3VjaCl0b3VjaCkgd2l0aEZs
YWdzOnN0YXRpY19jYXN0PFVJV0tTZWxlY3Rpb25GbGFncz4oZmxhZ3MpXTsKICAgICBlbHNlCiAg
ICAgICAgIFsoVUlXS1RleHRJbnRlcmFjdGlvbkFzc2lzdGFudCAqKVt2aWV3IGludGVyYWN0aW9u
QXNzaXN0YW50XSBzZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoQXQ6KENHUG9pbnQpcG9pbnQgd2l0
aFNlbGVjdGlvblRvdWNoOnRvVUlXS1NlbGVjdGlvblRvdWNoKChTZWxlY3Rpb25Ub3VjaCl0b3Vj
aCldOwogfQpAQCAtMjI1NSw4ICsyMjU1LDggQEAgLSAodm9pZCljaGFuZ2VTZWxlY3Rpb25XaXRo
R2VzdHVyZUF0OihDRwogLSAodm9pZCljaGFuZ2VTZWxlY3Rpb25XaXRoVG91Y2hBdDooQ0dQb2lu
dClwb2ludCB3aXRoU2VsZWN0aW9uVG91Y2g6KFVJV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCBiYXNl
SXNTdGFydDooQk9PTCliYXNlSXNTdGFydAogewogICAgIF91c2luZ0dlc3R1cmVGb3JTZWxlY3Rp
b24gPSBZRVM7Ci0gICAgX3BhZ2UtPnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKFdlYkNvcmU6
OkludFBvaW50KHBvaW50KSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvU2VsZWN0aW9uVG91Y2go
dG91Y2gpKSwgYmFzZUlzU3RhcnQsIFtzZWxmLCB0b3VjaF0oY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIHBvaW50LCB1aW50MzJfdCB0b3VjaCwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVy
cm9yKSB7Ci0gICAgICAgIHNlbGVjdGlvbkNoYW5nZWRXaXRoVG91Y2goc2VsZiwgcG9pbnQsIHRv
dWNoLCBlcnJvcik7CisgICAgX3BhZ2UtPnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKFdlYkNv
cmU6OkludFBvaW50KHBvaW50KSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvU2VsZWN0aW9uVG91
Y2godG91Y2gpKSwgYmFzZUlzU3RhcnQsIFtzZWxmLCB0b3VjaF0oY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIHBvaW50LCB1aW50MzJfdCB0b3VjaCwgdWludDMyX3QgZmxhZ3MsIFdlYktpdDo6Q2Fs
bGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkV2l0aFRv
dWNoKHNlbGYsIHBvaW50LCB0b3VjaCwgZmxhZ3MsIGVycm9yKTsKICAgICAgICAgaWYgKHRvdWNo
ICE9IFVJV0tTZWxlY3Rpb25Ub3VjaFN0YXJ0ZWQgJiYgdG91Y2ggIT0gVUlXS1NlbGVjdGlvblRv
dWNoTW92ZWQpCiAgICAgICAgICAgICBfdXNpbmdHZXN0dXJlRm9yU2VsZWN0aW9uID0gTk87CiAg
ICAgfSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQ
cm94eUlPUy5tbQkocmV2aXNpb24gMjAwMzg0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2VzdHVyZUNhbGxiYWNrKGNvbnN0CiAgICAgY2FsbGJhY2st
PnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1ZShwb2ludCwgZ2VzdHVyZVR5cGUsIGdlc3R1
cmVTdGF0ZSwgZmxhZ3MpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6dG91Y2hlc0NhbGxiYWNr
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgdG91Y2hlcywgdWludDY0
X3QgY2FsbGJhY2tJRCkKK3ZvaWQgV2ViUGFnZVByb3h5Ojp0b3VjaGVzQ2FsbGJhY2soY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCB0b3VjaGVzLCB1aW50MzJfdCBmbGFn
cywgdWludDY0X3QgY2FsbGJhY2tJRCkKIHsKICAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFj
a3MudGFrZTxUb3VjaGVzQ2FsbGJhY2s+KGNhbGxiYWNrSUQpOwogICAgIGlmICghY2FsbGJhY2sp
IHsKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dG91Y2hlc0NhbGxiYWNr
KGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjYWxsYmFjay0+cGVyZm9ybUNh
bGxiYWNrV2l0aFJldHVyblZhbHVlKHBvaW50LCB0b3VjaGVzKTsKKyAgICBjYWxsYmFjay0+cGVy
Zm9ybUNhbGxiYWNrV2l0aFJldHVyblZhbHVlKHBvaW50LCB0b3VjaGVzLCBmbGFncyk7CiB9CiAK
IHZvaWQgV2ViUGFnZVByb3h5OjphdXRvY29ycmVjdGlvbkRhdGFDYWxsYmFjayhjb25zdCBWZWN0
b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYgcmVjdHMsIGNvbnN0IFN0cmluZyYgZm9udE5hbWUsIGZs
b2F0IGZvbnRTaXplLCB1aW50NjRfdCBmb250VHJhaXRzLCB1aW50NjRfdCBjYWxsYmFja0lEKQpA
QCAtMzg2LDEwICszODYsMTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNlbGVjdFdpdGhHZXN0dXJl
KGNvbgogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2VsZWN0V2l0aEdl
c3R1cmUocG9pbnQsICh1aW50MzJfdClncmFudWxhcml0eSwgZ2VzdHVyZVR5cGUsIGdlc3R1cmVT
dGF0ZSwgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJ
RCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgdWludDMyX3QgdG91Y2hlcywgYm9vbCBiYXNl
SXNTdGFydCwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVp
bnQzMl90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2Vi
UGFnZVByb3h5Ojp1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCBwb2ludCwgdWludDMyX3QgdG91Y2hlcywgYm9vbCBiYXNlSXNTdGFydCwgc3RkOjpmdW5j
dGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90LCB1aW50MzJfdCwg
Q2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCiB7CiAgICAgaWYgKCFpc1Zh
bGlkKCkpIHsKLSAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihXZWJDb3JlOjpJbnRQb2ludCgpLCAw
LCBDYWxsYmFja0Jhc2U6OkVycm9yOjpVbmtub3duKTsKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlv
bihXZWJDb3JlOjpJbnRQb2ludCgpLCAwLCAwLCBDYWxsYmFja0Jhc2U6OkVycm9yOjpVbmtub3du
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiAyMDAzODQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nzgs
NiArOTc4LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlc2V0VGV4dEF1dG9zaXppbmdCZWZvcmVM
YXlvdXRJZk5lZWRlZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIG9sZFNpemUsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYgbmV3U2l6ZSk7CiAgICAgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9u
IHZpc2libGVQb3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2ludChjb25zdCBXZWJDb3JlOjpGcmFt
ZSYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lz
dGVkTm9kZSk7CiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2VGb3JHcmFudWxh
cml0eUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYsIHVpbnQzMl90IGdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWRO
b2RlKTsKKyAgICBib29sIHNob3VsZFN3aXRjaFRvQmxvY2tNb2RlRm9ySGFuZGxlKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBoYW5kbGVQb2ludCwgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb24pOwor
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHN3aXRjaFRvQmxvY2tTZWxlY3Rpb25BdFBv
aW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb24pOwog
I2VuZGlmCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbnRl
cnByZXRLZXlFdmVudChjb25zdCBXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7CkBAIC0xNDA5LDYg
KzE0MTEsOCBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3NjcmVlblNpemU7
CiAgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fYXZhaWxhYmxlU2NyZWVuU2l6ZTsKICAgICBSZWZQ
dHI8V2ViQ29yZTo6UmFuZ2U+IG1fY3VycmVudEJsb2NrU2VsZWN0aW9uOworICAgIFdlYkNvcmU6
OkludFJlY3QgbV9ibG9ja1JlY3RGb3JUZXh0U2VsZWN0aW9uOworCiAgICAgUmVmUHRyPFdlYkNv
cmU6OlJhbmdlPiBtX2luaXRpYWxTZWxlY3Rpb247CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX2Js
b2NrU2VsZWN0aW9uRGVzaXJlZFNpemU7CiAgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fbWF4aW11
bVVub2JzY3VyZWRTaXplOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkocmV2aXNpb24gMjAwMzg0KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC04NzksNiArODc5LDM0IEBAIHN0YXRpYyBJbnRSZWN0IHNlbGVjdGlvbkJveEZvclJh
bmdlKFdlYkMKICAgICByZXR1cm4gYm91bmRpbmdSZWN0OwogfQogCitzdGF0aWMgYm9vbCBjYW5T
aHJpbmtUb1RleHRTZWxlY3Rpb24oTm9kZSogbm9kZSkKK3sKKyAgICBib29sIGNhblNocmluayA9
IGZhbHNlOworICAgIAorICAgIGlmIChub2RlICYmICFpczxFbGVtZW50Pigqbm9kZSkpCisgICAg
ICAgIG5vZGUgPSBub2RlLT5wYXJlbnRFbGVtZW50KCk7CisgICAgCisgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IChub2RlKSA/IG5vZGUtPnJlbmRlcmVyKCkgOiBudWxscHRyOworICAgIGlm
IChyZW5kZXJlciAmJiByZW5kZXJlci0+Y2hpbGRyZW5JbmxpbmUoKSAmJiAoaXM8UmVuZGVyQmxv
Y2s+KCpyZW5kZXJlcikgJiYgIWRvd25jYXN0PFJlbmRlckJsb2NrPigqcmVuZGVyZXIpLmlubGlu
ZUVsZW1lbnRDb250aW51YXRpb24oKSkgJiYgIXJlbmRlcmVyLT5pc1RhYmxlKCkpCisgICAgICAg
IGNhblNocmluayA9IHRydWU7CisgICAgcmV0dXJuIGNhblNocmluazsKK30KKworc3RhdGljIGJv
b2wgY2FuU2hyaW5rVG9UZXh0U2VsZWN0aW9uKFJhbmdlICpyYW5nZSkKK3sKKyAgICBpZiAocmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCkuaXNUZXh0Tm9kZSgpICYmIHJhbmdlLT5lbmRDb250YWluZXIo
KS5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBjYW5TaHJp
bmtUb1RleHRTZWxlY3Rpb24ocmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkpOworfQor
CitzdGF0aWMgYm9vbCBoYXNDdXN0b21MaW5lSGVpZ2h0KE5vZGUqIG5vZGUpCit7CisgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVy
ICYmIHJlbmRlcmVyLT5zdHlsZSgpLmxpbmVIZWlnaHQoKS5pc1NwZWNpZmllZCgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAgCiBQYXNzUmVmUHRyPFJh
bmdlPiBXZWJQYWdlOjpyYW5nZUZvcldlYlNlbGVjdGlvbkF0UG9zaXRpb24oY29uc3QgSW50UG9p
bnQmIHBvaW50LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBTZWxlY3Rpb25GbGFn
cyYgZmxhZ3MpCiB7CiAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFt
ZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KChwb2ludCksIEhpdFRlc3RS
ZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBIaXRUZXN0UmVxdWVz
dDo6RGlzYWxsb3dTaGFkb3dDb250ZW50IHwgSGl0VGVzdFJlcXVlc3Q6OkFsbG93Q2hpbGRGcmFt
ZUNvbnRlbnQpOwpAQCAtODg3LDE5ICs5MTUsMjUgQEAgUGFzc1JlZlB0cjxSYW5nZT4gV2ViUGFn
ZTo6cmFuZ2VGb3JXZWJTZQogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CiAgICAgRmxvYXRSZWN0
IGJvdW5kaW5nUmVjdEluU2Nyb2xsVmlld0Nvb3JkaW5hdGVzOwogCisgICAgaWYgKCFjdXJyZW50
Tm9kZS0+aXNUZXh0Tm9kZSgpICYmICFjYW5TaHJpbmtUb1RleHRTZWxlY3Rpb24oY3VycmVudE5v
ZGUpICYmIGhhc0N1c3RvbUxpbmVIZWlnaHQoY3VycmVudE5vZGUpKSB7CisgICAgICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYg
KGlzPFJlbmRlckJsb2NrRmxvdz4ocmVuZGVyZXIpKSB7CisgICAgICAgICAgICBSZW5kZXJUZXh0
ICpyZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihyZW5kZXJlciktPmZpbmRD
bG9zZXN0VGV4dEF0QWJzb2x1dGVQb2ludChwb2ludCk7CisgICAgICAgICAgICBpZiAocmVuZGVy
VGV4dCAmJiByZW5kZXJUZXh0LT50ZXh0Tm9kZSgpKQorICAgICAgICAgICAgICAgIGN1cnJlbnRO
b2RlID0gcmVuZGVyVGV4dC0+dGV4dE5vZGUoKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlm
IChjdXJyZW50Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgIHJhbmdlID0gZW5jbG9zaW5n
VGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBQYXJhZ3JhcGhHcmFudWxhcml0eSwgRGly
ZWN0aW9uRm9yd2FyZCk7CiAgICAgICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UtPmNvbGxhcHNlZCgp
KQogICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGN1cnJlbnROb2RlLT5kb2N1bWVu
dCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pOwotICAgICAgICBpZiAoIXJhbmdlKQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgYm91bmRpbmdSZWN0SW5TY3JvbGxWaWV3Q29v
cmRpbmF0ZXMgPSBzZWxlY3Rpb25Cb3hGb3JSYW5nZShyYW5nZS5nZXQoKSk7Ci0gICAgICAgIGJv
dW5kaW5nUmVjdEluU2Nyb2xsVmlld0Nvb3JkaW5hdGVzLnNjYWxlKG1fcGFnZS0+cGFnZVNjYWxl
RmFjdG9yKCkpOwotICAgICAgICBpZiAoYm91bmRpbmdSZWN0SW5TY3JvbGxWaWV3Q29vcmRpbmF0
ZXMud2lkdGgoKSA+IG1fYmxvY2tTZWxlY3Rpb25EZXNpcmVkU2l6ZS53aWR0aCgpICYmIGJvdW5k
aW5nUmVjdEluU2Nyb2xsVmlld0Nvb3JkaW5hdGVzLmhlaWdodCgpID4gbV9ibG9ja1NlbGVjdGlv
bkRlc2lyZWRTaXplLmhlaWdodCgpKQotICAgICAgICAgICAgcmV0dXJuIHdvcmRSYW5nZUZyb21Q
b3NpdGlvbihwb3NpdGlvbik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9ibG9ja1Jl
Y3RGb3JUZXh0U2VsZWN0aW9uID0gc2VsZWN0aW9uQm94Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpOwor
ICAgICAgICAgICAgcmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOworICAg
ICAgICB9CiAKLSAgICAgICAgY3VycmVudE5vZGUgPSByYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250
YWluZXIoKTsKKyAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgIH0KIAogICAgIGlmICghY3VycmVu
dE5vZGUtPmlzRWxlbWVudE5vZGUoKSkKQEAgLTE0MzAsNiArMTQ2NCw4IEBAIFBhc3NSZWZQdHI8
UmFuZ2U+IFdlYlBhZ2U6OmNvbnRyYWN0ZWRSYW4KICAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5k
bGVQb3NpdGlvbjo6VG9wOgogICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpC
b3R0b206CiAgICAgICAgICAgICBpc0JldHRlckNob2ljZSA9IChjb3B5UmVjdC5oZWlnaHQoKSA8
IGN1cnJlbnRCb3guaGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKGNvcHlSZWN0LmhlaWdodCgp
ID09IGN1cnJlbnRCb3guaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgaXNCZXR0ZXJDaG9pY2Ug
PSBjYW5TaHJpbmtUb1RleHRTZWxlY3Rpb24obmV3UmFuZ2UuZ2V0KCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkxlZnQ6CiAgICAg
ICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlJpZ2h0OgpAQCAtMTQ2NCwxMiArMTUw
MCw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OmNvbnRyYWN0ZWRSYW4KICAgICAvLyB0
aGVyZSBhcmUgbXVsdGlwbGUgc3ViLWVsZW1lbnQgYmxvY2tzIGJlbmVhdGggdXMuICBJZiB3ZSBk
aWRuJ3QgZmluZAogICAgIC8vIG11bHRpcGxlIHN1Yi1lbGVtZW50IGJsb2NrcywgZG9uJ3Qgc2hy
aW5rIHRvIGEgc3ViLWVsZW1lbnQgYmxvY2suCiAKLSAgICBOb2RlKiBub2RlID0gYmVzdFJhbmdl
LT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpOwotICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKQotICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50RWxlbWVudCgpOwotCi0gICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyICYm
IHJlbmRlcmVyLT5jaGlsZHJlbklubGluZSgpICYmIChpczxSZW5kZXJCbG9jaz4oKnJlbmRlcmVy
KSAmJiAhZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikuaW5saW5lRWxlbWVudENvbnRp
bnVhdGlvbigpKSAmJiAhcmVuZGVyZXItPmlzVGFibGUoKSkKKyAgICBpZiAoY2FuU2hyaW5rVG9U
ZXh0U2VsZWN0aW9uKGJlc3RSYW5nZS5nZXQoKSkpCiAgICAgICAgIGZsYWdzID0gTm9uZTsKIAog
ICAgIHJldHVybiBiZXN0UmFuZ2U7CkBAIC0xNTkxLDYgKzE2MjIsOCBAQCB2b2lkIFdlYlBhZ2U6
OnVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2Vs
ZWN0aW9uVG91Y2g6Ok1vdmVkOgogICAgICAgICBjaGFuZ2VCbG9ja1NlbGVjdGlvbihhZGp1c3Rl
ZFBvaW50LCBzdGF0aWNfY2FzdDxTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbj4oaGFuZGxlUG9zaXRp
b24pLCBncm93VGhyZXNob2xkLCBzaHJpbmtUaHJlc2hvbGQsIGZsYWdzKTsKKy8vICAgICAgICBp
ZiAoZmxhZ3MgPT0gTm9uZSkKKy8vICAgICAgICAgICAgbV9jdXJyZW50QmxvY2tTZWxlY3Rpb24g
PSBudWxscHRyOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm47
CkBAIC0xNjA1LDE3ICsxNjM4LDU5IEBAIHZvaWQgV2ViUGFnZTo6Y2xlYXJTZWxlY3Rpb24oKQog
ICAgIG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0
aW9uKCkuY2xlYXIoKTsKIH0KIAorUGFzc1JlZlB0cjxSYW5nZT4gV2ViUGFnZTo6c3dpdGNoVG9C
bG9ja1NlbGVjdGlvbkF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50LCBTZWxlY3Rpb25IYW5k
bGVQb3NpdGlvbiBoYW5kbGVQb3NpdGlvbikKK3sKKyAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIFJlZlB0cjxSYW5n
ZT4gbmV3UmFuZ2U7CisgICAgUmVmUHRyPFJhbmdlPiBjdXJyZW50UmFuZ2UgPSBmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmIChjdXJyZW50
UmFuZ2UpIHsKKyAgICAgICAgTm9kZSAqY3VycmVudE5vZGUgPSAmY3VycmVudFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpOworICAgICAgICBpZiAoY3VycmVudE5vZGUtPmlzVGV4dE5vZGUoKSkgewor
ICAgICAgICAgICAgbmV3UmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkoY3Vy
cmVudFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIFBhcmFncmFwaEdyYW51bGFyaXR5LCBEaXJlY3Rp
b25CYWNrd2FyZCk7CisgICAgICAgICAgICBpZiAobmV3UmFuZ2UgJiYgbmV3UmFuZ2UtPmNvbGxh
cHNlZCgpKQorICAgICAgICAgICAgICAgIG5ld1JhbmdlID0gbnVsbHB0cjsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKCFuZXdSYW5nZSAmJiAhY3VycmVudE5vZGUtPmlzRWxlbWVu
dE5vZGUoKSkKKyAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnBhcmVudEVs
ZW1lbnQoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbmV3UmFuZ2UgJiYgY3VycmVudE5vZGUp
IHsKKyAgICAgICAgICAgIG5ld1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShjdXJyZW50Tm9kZS0+ZG9j
dW1lbnQoKSk7CisgICAgICAgICAgICBuZXdSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCpjdXJy
ZW50Tm9kZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIG5ld1JhbmdlOworfQorCitib29sIFdlYlBhZ2U6OnNob3VsZFN3aXRjaFRvQmxvY2tNb2Rl
Rm9ySGFuZGxlKGNvbnN0IEludFBvaW50JiBoYW5kbGVQb2ludCwgU2VsZWN0aW9uSGFuZGxlUG9z
aXRpb24gaGFuZGxlUG9zaXRpb24pCit7CisgICAgc3dpdGNoIChoYW5kbGVQb3NpdGlvbikgewor
ICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlRvcDoKKyAgICAgICAgcmV0dXJuICho
YW5kbGVQb2ludC55KCkgPCBtX2Jsb2NrUmVjdEZvclRleHRTZWxlY3Rpb24ueSgpKTsKKyAgICBj
YXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpSaWdodDoKKyAgICAgICAgcmV0dXJuIChoYW5k
bGVQb2ludC54KCkgPiBtX2Jsb2NrUmVjdEZvclRleHRTZWxlY3Rpb24ubWF4WCgpKTsKKyAgICBj
YXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpCb3R0b206CisgICAgICAgIHJldHVybiAoaGFu
ZGxlUG9pbnQueSgpID4gbV9ibG9ja1JlY3RGb3JUZXh0U2VsZWN0aW9uLm1heFkoKSk7CisgICAg
Y2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6TGVmdDoKKyAgICAgICAgcmV0dXJuIChoYW5k
bGVQb2ludC54KCkgPCBtX2Jsb2NrUmVjdEZvclRleHRTZWxlY3Rpb24ueCgpKTsKKyAgICB9Cit9
CisKIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgSW50UG9p
bnQmIHBvaW50LCB1aW50MzJfdCB0b3VjaGVzLCBib29sIGJhc2VJc1N0YXJ0LCB1aW50NjRfdCBj
YWxsYmFja0lEKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVy
KCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0g
ZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWUudmlldygpLT5yb290Vmlld1RvQ29u
dGVudHMocG9pbnQpKTsKKyAgICBJbnRQb2ludCBwb2ludEluRG9jdW1lbnQgPSBmcmFtZS52aWV3
KCktPnJvb3RWaWV3VG9Db250ZW50cyhwb2ludCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0
aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQocG9pbnRJbkRvY3VtZW50KTsKICAg
ICBpZiAocG9zaXRpb24uaXNOdWxsKCkpIHsKLSAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpUb3VjaGVzQ2FsbGJhY2socG9pbnQsIHRvdWNoZXMsIGNhbGxiYWNrSUQpKTsKKyAg
ICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpUb3VjaGVzQ2FsbGJhY2socG9pbnQs
IHRvdWNoZXMsIDAsIGNhbGxiYWNrSUQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2U7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHJlc3VsdDsKKyAgICBT
ZWxlY3Rpb25GbGFncyBmbGFncyA9IE5vbmU7CisgICAgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb24g
aGFuZGxlUG9zaXRpb24gPSBiYXNlSXNTdGFydCA/IFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpC
b3R0b20gOiBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6VG9wOworCiAgICAgCiAgICAgc3dpdGNo
IChzdGF0aWNfY2FzdDxTZWxlY3Rpb25Ub3VjaD4odG91Y2hlcykpIHsKICAgICBjYXNlIFNlbGVj
dGlvblRvdWNoOjpTdGFydGVkOgpAQCAtMTY0MCwxMyArMTcxNSwyNyBAQCB2b2lkIFdlYlBhZ2U6
OnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBT
ZWxlY3Rpb25Ub3VjaDo6TW92ZWQ6Ci0gICAgICAgIHJhbmdlID0gcmFuZ2VGb3JQb3NpdGlvbigm
ZnJhbWUsIHBvc2l0aW9uLCBiYXNlSXNTdGFydCk7CisgICAgICAgIGlmIChzaG91bGRTd2l0Y2hU
b0Jsb2NrTW9kZUZvckhhbmRsZShwb2ludEluRG9jdW1lbnQsIGhhbmRsZVBvc2l0aW9uKSkgewor
ICAgICAgICAgICAgcmFuZ2UgPSBzd2l0Y2hUb0Jsb2NrU2VsZWN0aW9uQXRQb2ludChwb2ludElu
RG9jdW1lbnQsIGhhbmRsZVBvc2l0aW9uKTsKKyAgICAgICAgICAgIGZsYWdzID0gSXNCbG9ja1Nl
bGVjdGlvbjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByYW5nZSA9IHJhbmdlRm9yUG9z
aXRpb24oJmZyYW1lLCBwb3NpdGlvbiwgYmFzZUlzU3RhcnQpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgaWYgKHJhbmdlKQorICAgIGlmIChyYW5nZSAmJiBmbGFncyAhPSBJc0Jsb2NrU2Vs
ZWN0aW9uKQogICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdl
LmdldCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCB0cnVlKTsKIAotICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6VG91Y2hlc0NhbGxiYWNrKHBvaW50LCB0b3VjaGVzLCBjYWxsYmFja0lE
KSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpUb3VjaGVzQ2FsbGJhY2socG9p
bnQsIHRvdWNoZXMsIGZsYWdzLCBjYWxsYmFja0lEKSk7CisgICAgaWYgKHJhbmdlICYmIGZsYWdz
ID09IElzQmxvY2tTZWxlY3Rpb24pIHsKKyAgICAgICAgLy8gV2UganVzdCBzd2l0Y2hlZCB0byBi
bG9jayBzZWxlY3Rpb24gdGhlcmVmb3JlIHdlIG5lZWQgdG8gY29tcHV0ZSB0aGUgdGhyZXNob2xk
cy4KKyAgICAgICAgbV9jdXJyZW50QmxvY2tTZWxlY3Rpb24gPSByYW5nZTsKKyAgICAgICAgZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgcG9zaXRpb24uYWZm
aW5pdHkoKSwgdHJ1ZSk7CisgICAgICAgIAorICAgICAgICBmbG9hdCBncm93VGhyZXNob2xkID0g
MDsKKyAgICAgICAgZmxvYXQgc2hyaW5rVGhyZXNob2xkID0gMDsKKyAgICAgICAgY29tcHV0ZUV4
cGFuZEFuZFNocmlua1RocmVzaG9sZHNGb3JIYW5kbGUocG9pbnQsIGhhbmRsZVBvc2l0aW9uLCBn
cm93VGhyZXNob2xkLCBzaHJpbmtUaHJlc2hvbGQpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkRpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoKHN0YXRpY19jYXN0
PHVpbnQzMl90PihTZWxlY3Rpb25Ub3VjaDo6U3RhcnRlZCksIHN0YXRpY19jYXN0PHVpbnQzMl90
PihJc0Jsb2NrU2VsZWN0aW9uKSwgZ3Jvd1RocmVzaG9sZCwgc2hyaW5rVGhyZXNob2xkKSk7Cisg
ICAgfQogfQogCiB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhUd29Ub3VjaGVzKGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBmcm9tLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgdG8sIHVpbnQzMl90
IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQ2NF90IGNhbGxiYWNrSUQp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278521</attachid>
            <date>2016-05-10 12:45:28 -0700</date>
            <delta_ts>2016-05-10 17:02:15 -0700</delta_ts>
            <desc>Patch2</desc>
            <filename>block-selection-webkit.txt</filename>
            <type>text/plain</type>
            <size>22912</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMDU5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE2LTA1LTA5ICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgTnVtZXJvdXMgYmxvY2sgc2Vs
ZWN0aW9uIGlzc3VlcyBvbiBpT1MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTc0OTAKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjU3MTc5NzcKKyAg
ICAgICAgcmRhcjovL3Byb2JsZW0vMjMwNDIyMTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgor
ICAgICAgICBFeHBvcnRpbmcgbWV0aG9kLgorCiAyMDE2LTA1LTA5ICBTaW1vbiBGcmFzZXIgIDxz
aW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIENsZWFuIHVwIGlPUyB0ZXh0IGF1dG9z
aXppbmcgY29kZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmgJKHJldmlzaW9uIDIwMDU5NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NTcsNyArNzU3LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgaGFzRXhwbGljaXRseVNldERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG5vbmluaGVyaXRlZF9mbGFncy5oYXNFeHBsaWNpdGx5U2V0RGlyZWN0aW9uKCk7IH0KIAogICAg
IGNvbnN0IExlbmd0aCYgc3BlY2lmaWVkTGluZUhlaWdodCgpIGNvbnN0OwotICAgIExlbmd0aCBs
aW5lSGVpZ2h0KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgTGVuZ3RoIGxpbmVIZWlnaHQo
KSBjb25zdDsKICAgICBpbnQgY29tcHV0ZWRMaW5lSGVpZ2h0KCkgY29uc3Q7CiAKICAgICBFV2hp
dGVTcGFjZSB3aGl0ZVNwYWNlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RVdoaXRlU3Bh
Y2U+KGluaGVyaXRlZF9mbGFncy5fd2hpdGVfc3BhY2UpOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyMDA1OTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw0NiBAQAorMjAxNi0wNS0wOSAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBw
bGUuY29tPgorCisgICAgICAgIE51bWVyb3VzIGJsb2NrIHNlbGVjdGlvbiBpc3N1ZXMgb24gaU9T
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3NDkw
CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzI1NzE3OTc3CisgICAgICAgIHJkYXI6Ly9wcm9ibGVt
LzIzMDQyMjE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBmaXhlcyBhIG51bWJlciBvZiBpc3N1ZXMgd2l0aCBibG9jayBzZWxlY3Rp
b24gb24gaU9TIGxpa2UuCisgICAgICAgIFdlIG5vdCBsb25nZXIgZWFnZXJseSBjaG9vc2UgYmxv
Y2sgc2VsZWN0aW9uIHZzIHRleHQgc2VsZWN0aW9uIGFuZCB3ZQorICAgICAgICBtYWtlIHN1cmUg
d2UgYXJlIGNhcGFibGUgb2Ygc3dpdGNoaW5nIGJhY2sgdG8gdGV4dCBzZWxlY3Rpb24gZnJvbSBi
bG9jaworICAgICAgICB1bmRlciBldmVyeSBjaXJjdW1zdGFuY2UuIFRoZSBwYXRjaCBhbHNvIGZp
eGVzIHRoZSBsb2dpYyB1c2VkIHRvIGRlY2lkZQorICAgICAgICB3aGVuIHRvIHN3aXRjaCB0byBi
bG9jayBzZWxlY3Rpb24uIEl0IG5vdyBjb21wdXRlcyB0aGUgcmVjdGFuZ2xlIGZvciB0aGUKKyAg
ICAgICAgcGFyYWdyYXBoIGNvbnRhaW5pbmcgdGhlIGluaXRpYWwgdGV4dCBzZWxlY3Rpb24gdG8g
ZGVjaWRlIHdoZW4gd2UgYXJlCisgICAgICAgIGFjdHVhbGx5IGRyYWdnaW5nIG91dHNpZGUgdGhl
IGJvdW5kYXJpZXMgb2YgdGhlIHBhcmFncmFwaCBibG9jay4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lm1tOgorICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlZFdpdGhHZXN0dXJlKToKKyAgICAgICAgKHNl
bGVjdGlvbkNoYW5nZWRXaXRoVG91Y2gpOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNoYW5n
ZVNlbGVjdGlvbldpdGhUb3VjaEF0OndpdGhTZWxlY3Rpb25Ub3VjaDpiYXNlSXNTdGFydDpdKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpnZXN0dXJlQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OnRvdWNoZXNDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6YXV0b2NvcnJlY3Rpb25EYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnNlbGVjdFdpdGhHZXN0dXJlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5Ojp1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OnNlbGVjdGlvbkJveEZvclJhbmdlKToKKyAgICAg
ICAgKFdlYktpdDo6Y2FuU2hyaW5rVG9UZXh0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
aGFzQ3VzdG9tTGluZUhlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJhbmdlRm9y
V2ViU2VsZWN0aW9uQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvbnRy
YWN0ZWRSYW5nZUZyb21IYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVC
bG9ja1NlbGVjdGlvbldpdGhUb3VjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNsZWFy
U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c3dpdGNoVG9CbG9ja1NlbGVj
dGlvbkF0UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzaG91bGRTd2l0Y2hUb0Js
b2NrTW9kZUZvckhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZVNlbGVj
dGlvbldpdGhUb3VjaGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2VsZWN0V2l0aFR3
b1RvdWNoZXMpOgorCiAyMDE2LTA1LTA2ICBBZGEgQ2hhbiAgPGFkYWNoYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIEFkZCBXS1BhZ2VSZWYgU1BJIHRvIHRlbGwgd2hldGhlciB0aGVyZSdzIGEgdmlk
ZW8gcGxheWluZyBpbiBlbmhhbmNlZCBmdWxsc2NyZWVuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyMDA1OTQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw3ICsyNTAs
NyBAQCB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBTdHJpbmcmLCBkCiAKICNpZiBQTEFU
Rk9STShJT1MpCiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3Q+IEdlc3R1cmVDYWxsYmFjazsKLXR5cGVk
ZWYgR2VuZXJpY0NhbGxiYWNrPGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3Q+IFRv
dWNoZXNDYWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiwgdWludDMyX3QsIHVpbnQzMl90PiBUb3VjaGVzQ2FsbGJhY2s7CiBzdHJ1Y3QgTm9k
ZUFzc2lzdGFuY2VBcmd1bWVudHMgewogICAgIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uIG1fbm9k
ZUluZm9ybWF0aW9uOwogICAgIGJvb2wgbV91c2VySXNJbnRlcmFjdGluZzsKQEAgLTQ3NSw3ICs0
NzUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsQ29tbWl0TGF5ZXJUcmVlKHVpbnQ2NF90IHRy
YW5zYWN0aW9uSUQpOwogCiAgICAgdm9pZCBzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCB1aW50MzJfdCBnZXN0dXJlVHlw
ZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWRO
b2RlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMy
X3QsIHVpbnQzMl90LCB1aW50MzJfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKLSAgICB2b2lk
IHVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCB1aW50
MzJfdCB0b3VjaGVzLCBib29sIGJhc2VJc1N0YXJ0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7Cisg
ICAgdm9pZCB1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCwgdWludDMyX3QgdG91Y2hlcywgYm9vbCBiYXNlSXNTdGFydCwgc3RkOjpmdW5jdGlvbjx2b2lk
IChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90LCB1aW50MzJfdCwgQ2FsbGJhY2tC
YXNlOjpFcnJvcik+KTsKICAgICB2b2lkIHNlbGVjdFdpdGhUd29Ub3VjaGVzKGNvbnN0IFdlYkNv
cmU6OkludFBvaW50IGZyb20sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHRvLCB1aW50MzJfdCBn
ZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCwgQ2Fs
bGJhY2tCYXNlOjpFcnJvcik+KTsKICAgICB2b2lkIHVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRv
dWNoKGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCB1aW50MzJfdCB0b3VjaCwgdWludDMyX3QgaGFu
ZGxlUG9zaXRpb24pOwogICAgIHZvaWQgZXh0ZW5kU2VsZWN0aW9uKFdlYkNvcmU6OlRleHRHcmFu
dWxhcml0eSk7CkBAIC0xMzY4LDcgKzEzNjgsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAjaWYgUExB
VEZPUk0oSU9TKQogICAgIHZvaWQgZ2VzdHVyZUNhbGxiYWNrKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDY0X3QpOwotICAgIHZvaWQg
dG91Y2hlc0NhbGxiYWNrKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QsIHVpbnQ2
NF90KTsKKyAgICB2b2lkIHRvdWNoZXNDYWxsYmFjayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYs
IHVpbnQzMl90LCB1aW50MzJfdCwgdWludDY0X3QpOwogICAgIHZvaWQgYXV0b2NvcnJlY3Rpb25E
YXRhQ2FsbGJhY2soY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBjb25zdCBTdHJp
bmcmLCBmbG9hdCwgdWludDY0X3QsIHVpbnQ2NF90KTsKICAgICB2b2lkIGF1dG9jb3JyZWN0aW9u
Q29udGV4dENhbGxiYWNrKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90LCB1aW50NjRfdCwgdWludDY0X3QpOwogICAgIHZv
aWQgc2VsZWN0aW9uQ29udGV4dENhbGxiYWNrKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjAwNTk0KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtMTcxLDcgKzE3MSw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAj
ZW5kaWYKICNpZiBQTEFURk9STShJT1MpCiAgICAgR2VzdHVyZUNhbGxiYWNrKFdlYkNvcmU6Oklu
dFBvaW50IHBvaW50LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRl
LCB1aW50MzJfdCBmbGFncywgdWludDY0X3QgY2FsbGJhY2tJRCkKLSAgICBUb3VjaGVzQ2FsbGJh
Y2soV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90IHRvdWNoZXMsIHVpbnQ2NF90IGNh
bGxiYWNrSUQpCisgICAgVG91Y2hlc0NhbGxiYWNrKFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1
aW50MzJfdCB0b3VjaGVzLCB1aW50MzJfdCBmbGFncywgdWludDY0X3QgY2FsbGJhY2tJRCkKICAg
ICBBdXRvY29ycmVjdGlvbkRhdGFDYWxsYmFjayhWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiB0
ZXh0UmVjdHMsIFN0cmluZyBmb250TmFtZSwgZG91YmxlIGZvbnRTaXplLCB1aW50NjRfdCB0cmFp
dHMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgQXV0b2NvcnJlY3Rpb25Db250ZXh0Q2FsbGJh
Y2soU3RyaW5nIGJlZm9yZVRleHQsIFN0cmluZyBtYXJrZWRUZXh0LCBTdHJpbmcgc2VsZWN0ZWRU
ZXh0LCBTdHJpbmcgYWZ0ZXJUZXh0LCB1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3Ro
LCB1aW50NjRfdCBjYWxsYmFja0lEKQogICAgIFNlbGVjdGlvbkNvbnRleHRDYWxsYmFjayhTdHJp
bmcgc2VsZWN0ZWRUZXh0LCBTdHJpbmcgYmVmb3JlVGV4dCwgU3RyaW5nIGFmdGVyVGV4dCwgdWlu
dDY0X3QgY2FsbGJhY2tJRCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCShyZXZpc2lvbiAyMDA1OTQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbQkod29ya2luZyBjb3B5KQpAQCAtMjIxOCwxNCArMjIxOCwxNCBAQCBzdGF0aWMgdm9pZCBz
ZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmUoCiAgICAgICAgIFsoVUlXS1RleHRJbnRlcmFjdGlv
bkFzc2lzdGFudCAqKVt2aWV3IGludGVyYWN0aW9uQXNzaXN0YW50XSBzZWxlY3Rpb25DaGFuZ2Vk
V2l0aEdlc3R1cmVBdDooQ0dQb2ludClwb2ludCB3aXRoR2VzdHVyZTp0b1VJV0tHZXN0dXJlVHlw
ZSgoR2VzdHVyZVR5cGUpZ2VzdHVyZVR5cGUpIHdpdGhTdGF0ZTp0b1VJR2VzdHVyZVJlY29nbml6
ZXJTdGF0ZShzdGF0aWNfY2FzdDxHZXN0dXJlUmVjb2duaXplclN0YXRlPihnZXN0dXJlU3RhdGUp
KSB3aXRoRmxhZ3M6KHRvVUlXS1NlbGVjdGlvbkZsYWdzKChTZWxlY3Rpb25GbGFncylmbGFncykp
XTsKIH0KIAotc3RhdGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaChXS0NvbnRlbnRW
aWV3ICp2aWV3LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IHRvdWNo
LCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpCitzdGF0aWMgdm9pZCBzZWxlY3Rp
b25DaGFuZ2VkV2l0aFRvdWNoKFdLQ29udGVudFZpZXcgKnZpZXcsIGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBwb2ludCwgdWludDMyX3QgdG91Y2gsIHVpbnQzMl90IGZsYWdzLCBXZWJLaXQ6OkNh
bGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpCiB7CiAgICAgaWYgKGVycm9yICE9IFdlYktpdDo6Q2Fs
bGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoW3ZpZXcgd2ViU2VsZWN0aW9uQXNzaXN0
YW50XSkKLSAgICAgICAgWyhVSVdLU2VsZWN0aW9uQXNzaXN0YW50ICopW3ZpZXcgd2ViU2VsZWN0
aW9uQXNzaXN0YW50XSBzZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoQXQ6KENHUG9pbnQpcG9pbnQg
d2l0aFNlbGVjdGlvblRvdWNoOnRvVUlXS1NlbGVjdGlvblRvdWNoKChTZWxlY3Rpb25Ub3VjaCl0
b3VjaCldOworICAgICAgICBbKFVJV0tTZWxlY3Rpb25Bc3Npc3RhbnQgKilbdmlldyB3ZWJTZWxl
Y3Rpb25Bc3Npc3RhbnRdIHNlbGVjdGlvbkNoYW5nZWRXaXRoVG91Y2hBdDooQ0dQb2ludClwb2lu
dCB3aXRoU2VsZWN0aW9uVG91Y2g6dG9VSVdLU2VsZWN0aW9uVG91Y2goKFNlbGVjdGlvblRvdWNo
KXRvdWNoKSB3aXRoRmxhZ3M6c3RhdGljX2Nhc3Q8VUlXS1NlbGVjdGlvbkZsYWdzPihmbGFncyld
OwogICAgIGVsc2UKICAgICAgICAgWyhVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50ICopW3Zp
ZXcgaW50ZXJhY3Rpb25Bc3Npc3RhbnRdIHNlbGVjdGlvbkNoYW5nZWRXaXRoVG91Y2hBdDooQ0dQ
b2ludClwb2ludCB3aXRoU2VsZWN0aW9uVG91Y2g6dG9VSVdLU2VsZWN0aW9uVG91Y2goKFNlbGVj
dGlvblRvdWNoKXRvdWNoKV07CiB9CkBAIC0yMjU1LDggKzIyNTUsOCBAQCAtICh2b2lkKWNoYW5n
ZVNlbGVjdGlvbldpdGhHZXN0dXJlQXQ6KENHCiAtICh2b2lkKWNoYW5nZVNlbGVjdGlvbldpdGhU
b3VjaEF0OihDR1BvaW50KXBvaW50IHdpdGhTZWxlY3Rpb25Ub3VjaDooVUlXS1NlbGVjdGlvblRv
dWNoKXRvdWNoIGJhc2VJc1N0YXJ0OihCT09MKWJhc2VJc1N0YXJ0CiB7CiAgICAgX3VzaW5nR2Vz
dHVyZUZvclNlbGVjdGlvbiA9IFlFUzsKLSAgICBfcGFnZS0+dXBkYXRlU2VsZWN0aW9uV2l0aFRv
dWNoZXMoV2ViQ29yZTo6SW50UG9pbnQocG9pbnQpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odG9T
ZWxlY3Rpb25Ub3VjaCh0b3VjaCkpLCBiYXNlSXNTdGFydCwgW3NlbGYsIHRvdWNoXShjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IHRvdWNoLCBXZWJLaXQ6OkNhbGxiYWNr
QmFzZTo6RXJyb3IgZXJyb3IpIHsKLSAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaChz
ZWxmLCBwb2ludCwgdG91Y2gsIGVycm9yKTsKKyAgICBfcGFnZS0+dXBkYXRlU2VsZWN0aW9uV2l0
aFRvdWNoZXMoV2ViQ29yZTo6SW50UG9pbnQocG9pbnQpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
dG9TZWxlY3Rpb25Ub3VjaCh0b3VjaCkpLCBiYXNlSXNTdGFydCwgW3NlbGYsIHRvdWNoXShjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IHRvdWNoLCB1aW50MzJfdCBmbGFn
cywgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgICAgIHNlbGVjdGlv
bkNoYW5nZWRXaXRoVG91Y2goc2VsZiwgcG9pbnQsIHRvdWNoLCBmbGFncywgZXJyb3IpOwogICAg
ICAgICBpZiAodG91Y2ggIT0gVUlXS1NlbGVjdGlvblRvdWNoU3RhcnRlZCAmJiB0b3VjaCAhPSBV
SVdLU2VsZWN0aW9uVG91Y2hNb3ZlZCkKICAgICAgICAgICAgIF91c2luZ0dlc3R1cmVGb3JTZWxl
Y3Rpb24gPSBOTzsKICAgICB9KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
V2ViUGFnZVByb3h5SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCShyZXZpc2lvbiAyMDA1OTQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTM4LDcgKzEzOCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXN0dXJlQ2FsbGJhY2soY29uc3QK
ICAgICBjYWxsYmFjay0+cGVyZm9ybUNhbGxiYWNrV2l0aFJldHVyblZhbHVlKHBvaW50LCBnZXN0
dXJlVHlwZSwgZ2VzdHVyZVN0YXRlLCBmbGFncyk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojp0
b3VjaGVzQ2FsbGJhY2soY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCB0
b3VjaGVzLCB1aW50NjRfdCBjYWxsYmFja0lEKQordm9pZCBXZWJQYWdlUHJveHk6OnRvdWNoZXND
YWxsYmFjayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IHRvdWNoZXMs
IHVpbnQzMl90IGZsYWdzLCB1aW50NjRfdCBjYWxsYmFja0lEKQogewogICAgIGF1dG8gY2FsbGJh
Y2sgPSBtX2NhbGxiYWNrcy50YWtlPFRvdWNoZXNDYWxsYmFjaz4oY2FsbGJhY2tJRCk7CiAgICAg
aWYgKCFjYWxsYmFjaykgewpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp0
b3VjaGVzQ2FsbGJhY2soY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhbGxi
YWNrLT5wZXJmb3JtQ2FsbGJhY2tXaXRoUmV0dXJuVmFsdWUocG9pbnQsIHRvdWNoZXMpOworICAg
IGNhbGxiYWNrLT5wZXJmb3JtQ2FsbGJhY2tXaXRoUmV0dXJuVmFsdWUocG9pbnQsIHRvdWNoZXMs
IGZsYWdzKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmF1dG9jb3JyZWN0aW9uRGF0YUNhbGxi
YWNrKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiByZWN0cywgY29uc3QgU3RyaW5n
JiBmb250TmFtZSwgZmxvYXQgZm9udFNpemUsIHVpbnQ2NF90IGZvbnRUcmFpdHMsIHVpbnQ2NF90
IGNhbGxiYWNrSUQpCkBAIC0zODYsMTAgKzM4NiwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2Vs
ZWN0V2l0aEdlc3R1cmUoY29uCiAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZWxlY3RXaXRoR2VzdHVyZShwb2ludCwgKHVpbnQzMl90KWdyYW51bGFyaXR5LCBnZXN0dXJl
VHlwZSwgZ2VzdHVyZVN0YXRlLCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgY2FsbGJh
Y2tJRCksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZVNlbGVjdGlv
bldpdGhUb3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCB0b3Vj
aGVzLCBib29sIGJhc2VJc1N0YXJ0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0
aW9uKQordm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCB0b3VjaGVzLCBib29sIGJhc2VJc1N0
YXJ0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMy
X3QsIHVpbnQzMl90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsK
ICAgICBpZiAoIWlzVmFsaWQoKSkgewotICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKFdlYkNvcmU6
OkludFBvaW50KCksIDAsIENhbGxiYWNrQmFzZTo6RXJyb3I6OlVua25vd24pOworICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKFdlYkNvcmU6OkludFBvaW50KCksIDAsIDAsIENhbGxiYWNrQmFzZTo6
RXJyb3I6OlVua25vd24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDIwMDU5NCkK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk3OCw2ICs5NzgsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzZXRUZXh0QXV0
b3NpemluZygpOwogICAgIFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25J
bkZvY3VzZWROb2RlRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUpOwogICAgIFBh
c3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlRm9yR3JhbnVsYXJpdHlBdFBvaW50KGNvbnN0
IFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCBncmFu
dWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSk7CisgICAgYm9vbCBz
aG91bGRTd2l0Y2hUb0Jsb2NrTW9kZUZvckhhbmRsZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
aGFuZGxlUG9pbnQsIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uKTsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6UmFuZ2U+IHN3aXRjaFRvQmxvY2tTZWxlY3Rpb25BdFBvaW50KGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiwgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb24pOwogI2VuZGlmCiAjaWYgIVBMQVRGT1JN
KENPQ09BKQogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbnRlcnByZXRLZXlFdmVudChjb25zdCBX
ZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7CkBAIC0xNDA5LDYgKzE0MTEsOCBAQCBwcml2YXRlOgog
ICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3NjcmVlblNpemU7CiAgICAgV2ViQ29yZTo6RmxvYXRT
aXplIG1fYXZhaWxhYmxlU2NyZWVuU2l6ZTsKICAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IG1f
Y3VycmVudEJsb2NrU2VsZWN0aW9uOworICAgIFdlYkNvcmU6OkludFJlY3QgbV9ibG9ja1JlY3RG
b3JUZXh0U2VsZWN0aW9uOworCiAgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBtX2luaXRpYWxT
ZWxlY3Rpb247CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX2Jsb2NrU2VsZWN0aW9uRGVzaXJlZFNp
emU7CiAgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fbWF4aW11bVVub2JzY3VyZWRTaXplOwpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFn
ZUlPUy5tbQkocmV2aXNpb24gMjAwNTk0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NzksMjcgKzg3OSw1
NyBAQCBzdGF0aWMgSW50UmVjdCBzZWxlY3Rpb25Cb3hGb3JSYW5nZShXZWJDCiAgICAgcmV0dXJu
IGJvdW5kaW5nUmVjdDsKIH0KIAorc3RhdGljIGJvb2wgY2FuU2hyaW5rVG9UZXh0U2VsZWN0aW9u
KE5vZGUqIG5vZGUpCit7CisgICAgaWYgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KCpub2RlKSkKKyAg
ICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKKyAgICAKKyAgICBhdXRvKiByZW5k
ZXJlciA9IChub2RlKSA/IG5vZGUtPnJlbmRlcmVyKCkgOiBudWxscHRyOworICAgIHJldHVybiBy
ZW5kZXJlciAmJiByZW5kZXJlci0+Y2hpbGRyZW5JbmxpbmUoKSAmJiAoaXM8UmVuZGVyQmxvY2s+
KCpyZW5kZXJlcikgJiYgIWRvd25jYXN0PFJlbmRlckJsb2NrPigqcmVuZGVyZXIpLmlubGluZUVs
ZW1lbnRDb250aW51YXRpb24oKSkgJiYgIXJlbmRlcmVyLT5pc1RhYmxlKCk7Cit9CisKK3N0YXRp
YyBib29sIGNhblNocmlua1RvVGV4dFNlbGVjdGlvbihSYW5nZSYgcmFuZ2UpCit7CisgICAgaWYg
KHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuaXNUZXh0Tm9kZSgpICYmIHJhbmdlLmVuZENvbnRhaW5l
cigpLmlzVGV4dE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGNhblNo
cmlua1RvVGV4dFNlbGVjdGlvbihyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpKTsKK30K
Kworc3RhdGljIGJvb2wgaGFzQ3VzdG9tTGluZUhlaWdodChOb2RlJiBub2RlKQoreworICAgIGF1
dG8qIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigpOworICAgIHJldHVybiByZW5kZXJlciAmJiBy
ZW5kZXJlci0+c3R5bGUoKS5saW5lSGVpZ2h0KCkuaXNTcGVjaWZpZWQoKTsKK30KKyAgICAKIFBh
c3NSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OnJhbmdlRm9yV2ViU2VsZWN0aW9uQXRQb3NpdGlvbihj
b25zdCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIFNl
bGVjdGlvbkZsYWdzJiBmbGFncykKIHsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fcGFn
ZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQoKHBvaW50
KSwgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSB8IEhp
dFRlc3RSZXF1ZXN0OjpEaXNhbGxvd1VzZXJBZ2VudFNoYWRvd0NvbnRlbnQgfCBIaXRUZXN0UmVx
dWVzdDo6QWxsb3dDaGlsZEZyYW1lQ29udGVudCk7CiAKICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9
IHJlc3VsdC5pbm5lck5vZGUoKTsKKyAgICBpZiAoIWN1cnJlbnROb2RlKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwogICAgIEZsb2F0UmVjdCBib3Vu
ZGluZ1JlY3RJblNjcm9sbFZpZXdDb29yZGluYXRlczsKIAorICAgIGlmICghY3VycmVudE5vZGUt
PmlzVGV4dE5vZGUoKSAmJiAhY2FuU2hyaW5rVG9UZXh0U2VsZWN0aW9uKGN1cnJlbnROb2RlKSAm
JiBoYXNDdXN0b21MaW5lSGVpZ2h0KCpjdXJyZW50Tm9kZSkpIHsKKyAgICAgICAgYXV0byogcmVu
ZGVyZXIgPSBjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJs
b2NrRmxvdz4ocmVuZGVyZXIpKSB7CisgICAgICAgICAgICBhdXRvICpyZW5kZXJUZXh0ID0gZG93
bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihyZW5kZXJlciktPmZpbmRDbG9zZXN0VGV4dEF0QWJzb2x1
dGVQb2ludChwb2ludCk7CisgICAgICAgICAgICBpZiAocmVuZGVyVGV4dCAmJiByZW5kZXJUZXh0
LT50ZXh0Tm9kZSgpKQorICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlID0gcmVuZGVyVGV4dC0+
dGV4dE5vZGUoKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmIChjdXJyZW50Tm9kZS0+aXNU
ZXh0Tm9kZSgpKSB7CiAgICAgICAgIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFy
aXR5KHBvc2l0aW9uLCBQYXJhZ3JhcGhHcmFudWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCk7CiAg
ICAgICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UtPmNvbGxhcHNlZCgpKQogICAgICAgICAgICAgcmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKGN1cnJlbnROb2RlLT5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9z
aXRpb24pOwotICAgICAgICBpZiAoIXJhbmdlKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICAgICAgYm91bmRpbmdSZWN0SW5TY3JvbGxWaWV3Q29vcmRpbmF0ZXMgPSBzZWxlY3Rp
b25Cb3hGb3JSYW5nZShyYW5nZS5nZXQoKSk7Ci0gICAgICAgIGJvdW5kaW5nUmVjdEluU2Nyb2xs
Vmlld0Nvb3JkaW5hdGVzLnNjYWxlKG1fcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCkpOwotICAgICAg
ICBpZiAoYm91bmRpbmdSZWN0SW5TY3JvbGxWaWV3Q29vcmRpbmF0ZXMud2lkdGgoKSA+IG1fYmxv
Y2tTZWxlY3Rpb25EZXNpcmVkU2l6ZS53aWR0aCgpICYmIGJvdW5kaW5nUmVjdEluU2Nyb2xsVmll
d0Nvb3JkaW5hdGVzLmhlaWdodCgpID4gbV9ibG9ja1NlbGVjdGlvbkRlc2lyZWRTaXplLmhlaWdo
dCgpKQotICAgICAgICAgICAgcmV0dXJuIHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbik7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9ibG9ja1JlY3RGb3JUZXh0U2VsZWN0aW9u
ID0gc2VsZWN0aW9uQm94Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgcmFuZ2Ug
PSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICB9CiAKLSAgICAgICAg
Y3VycmVudE5vZGUgPSByYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKKyAgICAgICAg
cmV0dXJuIHJhbmdlOwogICAgIH0KIAogICAgIGlmICghY3VycmVudE5vZGUtPmlzRWxlbWVudE5v
ZGUoKSkKQEAgLTE0MzAsNiArMTQ2MCw4IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OmNv
bnRyYWN0ZWRSYW4KICAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6VG9wOgog
ICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpCb3R0b206CiAgICAgICAgICAg
ICBpc0JldHRlckNob2ljZSA9IChjb3B5UmVjdC5oZWlnaHQoKSA8IGN1cnJlbnRCb3guaGVpZ2h0
KCkpOworICAgICAgICAgICAgaWYgKGNvcHlSZWN0LmhlaWdodCgpID09IGN1cnJlbnRCb3guaGVp
Z2h0KCkpCisgICAgICAgICAgICAgICAgaXNCZXR0ZXJDaG9pY2UgPSBjYW5TaHJpbmtUb1RleHRT
ZWxlY3Rpb24oKm5ld1JhbmdlLmdldCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpMZWZ0OgogICAgICAgICBjYXNlIFNlbGVjdGlv
bkhhbmRsZVBvc2l0aW9uOjpSaWdodDoKQEAgLTE0NjQsMTIgKzE0OTYsNyBAQCBQYXNzUmVmUHRy
PFJhbmdlPiBXZWJQYWdlOjpjb250cmFjdGVkUmFuCiAgICAgLy8gdGhlcmUgYXJlIG11bHRpcGxl
IHN1Yi1lbGVtZW50IGJsb2NrcyBiZW5lYXRoIHVzLiAgSWYgd2UgZGlkbid0IGZpbmQKICAgICAv
LyBtdWx0aXBsZSBzdWItZWxlbWVudCBibG9ja3MsIGRvbid0IHNocmluayB0byBhIHN1Yi1lbGVt
ZW50IGJsb2NrLgogCi0gICAgTm9kZSogbm9kZSA9IGJlc3RSYW5nZS0+Y29tbW9uQW5jZXN0b3JD
b250YWluZXIoKTsKLSAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgbm9k
ZSA9IG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKLQotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBub2RlLT5yZW5kZXJlcigpOwotICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+Y2hpbGRy
ZW5JbmxpbmUoKSAmJiAoaXM8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikgJiYgIWRvd25jYXN0PFJl
bmRlckJsb2NrPigqcmVuZGVyZXIpLmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKSkgJiYgIXJl
bmRlcmVyLT5pc1RhYmxlKCkpCisgICAgaWYgKGNhblNocmlua1RvVGV4dFNlbGVjdGlvbigqYmVz
dFJhbmdlLmdldCgpKSkKICAgICAgICAgZmxhZ3MgPSBOb25lOwogCiAgICAgcmV0dXJuIGJlc3RS
YW5nZTsKQEAgLTE2MDUsMTggKzE2MzIsNTkgQEAgdm9pZCBXZWJQYWdlOjpjbGVhclNlbGVjdGlv
bigpCiAgICAgbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5z
ZWxlY3Rpb24oKS5jbGVhcigpOwogfQogCitSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OnN3aXRjaFRv
QmxvY2tTZWxlY3Rpb25BdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCwgU2VsZWN0aW9uSGFu
ZGxlUG9zaXRpb24gaGFuZGxlUG9zaXRpb24pCit7CisgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBSZWZQdHI8UmFu
Z2U+IG5ld1JhbmdlOworICAgIFJlZlB0cjxSYW5nZT4gY3VycmVudFJhbmdlID0gZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoY3VycmVu
dFJhbmdlKSB7CisgICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gJmN1cnJlbnRSYW5nZS0+c3Rh
cnRDb250YWluZXIoKTsKKyAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5pc1RleHROb2RlKCkpIHsK
KyAgICAgICAgICAgIG5ld1JhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KGN1
cnJlbnRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBQYXJhZ3JhcGhHcmFudWxhcml0eSwgRGlyZWN0
aW9uQmFja3dhcmQpOworICAgICAgICAgICAgaWYgKG5ld1JhbmdlICYmIG5ld1JhbmdlLT5jb2xs
YXBzZWQoKSkKKyAgICAgICAgICAgICAgICBuZXdSYW5nZSA9IG51bGxwdHI7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmICghbmV3UmFuZ2UgJiYgIWN1cnJlbnROb2RlLT5pc0VsZW1l
bnROb2RlKCkpCisgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5wYXJlbnRF
bGVtZW50KCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW5ld1JhbmdlICYmIGN1cnJlbnROb2Rl
KSB7CisgICAgICAgICAgICBuZXdSYW5nZSA9IFJhbmdlOjpjcmVhdGUoY3VycmVudE5vZGUtPmRv
Y3VtZW50KCkpOworICAgICAgICAgICAgbmV3UmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cygqY3Vy
cmVudE5vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBuZXdSYW5nZTsKK30KKworYm9vbCBXZWJQYWdlOjpzaG91bGRTd2l0Y2hUb0Jsb2NrTW9k
ZUZvckhhbmRsZShjb25zdCBJbnRQb2ludCYgaGFuZGxlUG9pbnQsIFNlbGVjdGlvbkhhbmRsZVBv
c2l0aW9uIGhhbmRsZVBvc2l0aW9uKQoreworICAgIHN3aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsK
KyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpUb3A6CisgICAgICAgIHJldHVybiBo
YW5kbGVQb2ludC55KCkgPCBtX2Jsb2NrUmVjdEZvclRleHRTZWxlY3Rpb24ueSgpOworICAgIGNh
c2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlJpZ2h0OgorICAgICAgICByZXR1cm4gaGFuZGxl
UG9pbnQueCgpID4gbV9ibG9ja1JlY3RGb3JUZXh0U2VsZWN0aW9uLm1heFgoKTsKKyAgICBjYXNl
IFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpCb3R0b206CisgICAgICAgIHJldHVybiBoYW5kbGVQ
b2ludC55KCkgPiBtX2Jsb2NrUmVjdEZvclRleHRTZWxlY3Rpb24ubWF4WSgpOworICAgIGNhc2Ug
U2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkxlZnQ6CisgICAgICAgIHJldHVybiBoYW5kbGVQb2lu
dC54KCkgPCBtX2Jsb2NrUmVjdEZvclRleHRTZWxlY3Rpb24ueCgpOworICAgIH0KK30KKwogdm9p
ZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBJbnRQb2ludCYgcG9p
bnQsIHVpbnQzMl90IHRvdWNoZXMsIGJvb2wgYmFzZUlzU3RhcnQsIHVpbnQ2NF90IGNhbGxiYWNr
SUQpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSBmcmFtZS52
aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhw
b2ludCkpOworICAgIEludFBvaW50IHBvaW50SW5Eb2N1bWVudCA9IGZyYW1lLnZpZXcoKS0+cm9v
dFZpZXdUb0NvbnRlbnRzKHBvaW50KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSBm
cmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludEluRG9jdW1lbnQpOwogICAgIGlmIChw
b3NpdGlvbi5pc051bGwoKSkgewotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OlRvdWNoZXNDYWxsYmFjayhwb2ludCwgdG91Y2hlcywgY2FsbGJhY2tJRCkpOworICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlRvdWNoZXNDYWxsYmFjayhwb2ludCwgdG91Y2hl
cywgMCwgY2FsbGJhY2tJRCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUmVmUHRy
PFJhbmdlPiByYW5nZTsKICAgICBWaXNpYmxlUG9zaXRpb24gcmVzdWx0OwotICAgIAorICAgIFNl
bGVjdGlvbkZsYWdzIGZsYWdzID0gTm9uZTsKKyAgICBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbiBo
YW5kbGVQb3NpdGlvbiA9IGJhc2VJc1N0YXJ0ID8gU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkJv
dHRvbSA6IFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpUb3A7CisKICAgICBzd2l0Y2ggKHN0YXRp
Y19jYXN0PFNlbGVjdGlvblRvdWNoPih0b3VjaGVzKSkgewogICAgIGNhc2UgU2VsZWN0aW9uVG91
Y2g6OlN0YXJ0ZWQ6CiAgICAgY2FzZSBTZWxlY3Rpb25Ub3VjaDo6RW5kZWROb3RNb3Zpbmc6CkBA
IC0xNjQwLDEzICsxNzA4LDI3IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aFRv
dWNoZXMKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNlbGVjdGlvblRvdWNoOjpNb3ZlZDoK
LSAgICAgICAgcmFuZ2UgPSByYW5nZUZvclBvc2l0aW9uKCZmcmFtZSwgcG9zaXRpb24sIGJhc2VJ
c1N0YXJ0KTsKKyAgICAgICAgaWYgKHNob3VsZFN3aXRjaFRvQmxvY2tNb2RlRm9ySGFuZGxlKHBv
aW50SW5Eb2N1bWVudCwgaGFuZGxlUG9zaXRpb24pKSB7CisgICAgICAgICAgICByYW5nZSA9IHN3
aXRjaFRvQmxvY2tTZWxlY3Rpb25BdFBvaW50KHBvaW50SW5Eb2N1bWVudCwgaGFuZGxlUG9zaXRp
b24pOworICAgICAgICAgICAgZmxhZ3MgPSBJc0Jsb2NrU2VsZWN0aW9uOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VGb3JQb3NpdGlvbigmZnJhbWUsIHBvc2l0aW9u
LCBiYXNlSXNTdGFydCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZiAocmFuZ2UpCisg
ICAgaWYgKHJhbmdlICYmIGZsYWdzICE9IElzQmxvY2tTZWxlY3Rpb24pCiAgICAgICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIHBvc2l0aW9uLmFmZmlu
aXR5KCksIHRydWUpOwogCi0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpUb3VjaGVz
Q2FsbGJhY2socG9pbnQsIHRvdWNoZXMsIGNhbGxiYWNrSUQpKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlRvdWNoZXNDYWxsYmFjayhwb2ludCwgdG91Y2hlcywgZmxhZ3MsIGNh
bGxiYWNrSUQpKTsKKyAgICBpZiAocmFuZ2UgJiYgZmxhZ3MgPT0gSXNCbG9ja1NlbGVjdGlvbikg
eworICAgICAgICAvLyBXZSBqdXN0IHN3aXRjaGVkIHRvIGJsb2NrIHNlbGVjdGlvbiB0aGVyZWZv
cmUgd2UgbmVlZCB0byBjb21wdXRlIHRoZSB0aHJlc2hvbGRzLgorICAgICAgICBtX2N1cnJlbnRC
bG9ja1NlbGVjdGlvbiA9IHJhbmdlOworICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3RlZFJhbmdlKHJhbmdlLmdldCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCB0cnVlKTsKKyAgICAg
ICAgCisgICAgICAgIGZsb2F0IGdyb3dUaHJlc2hvbGQgPSAwOworICAgICAgICBmbG9hdCBzaHJp
bmtUaHJlc2hvbGQgPSAwOworICAgICAgICBjb21wdXRlRXhwYW5kQW5kU2hyaW5rVGhyZXNob2xk
c0ZvckhhbmRsZShwb2ludCwgaGFuZGxlUG9zaXRpb24sIGdyb3dUaHJlc2hvbGQsIHNocmlua1Ro
cmVzaG9sZCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkVXBkYXRl
QmxvY2tTZWxlY3Rpb25XaXRoVG91Y2goc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFNlbGVjdGlvblRv
dWNoOjpTdGFydGVkKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KElzQmxvY2tTZWxlY3Rpb24pLCBn
cm93VGhyZXNob2xkLCBzaHJpbmtUaHJlc2hvbGQpKTsKKyAgICB9CiB9CiAKIHZvaWQgV2ViUGFn
ZTo6c2VsZWN0V2l0aFR3b1RvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGZyb20sIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiB0bywgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90
IGdlc3R1cmVTdGF0ZSwgdWludDY0X3QgY2FsbGJhY2tJRCkKQEAgLTE3ODEsNiArMTg2MywxNCBA
QCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBCiB7CiAgICAgY29uc3Qg
RnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJh
bWUoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gcmFuZ2VGb3JHcmFudWxhcml0eUF0UG9p
bnQoZnJhbWUsIHBvaW50LCBncmFudWxhcml0eSwgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5v
ZGUpOworICAgIGlmICghaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUpIHsKKyAgICAgICAg
bV9ibG9ja1NlbGVjdGlvbkRlc2lyZWRTaXplLnNldFdpZHRoKGJsb2NrU2VsZWN0aW9uU3RhcnRX
aWR0aCk7CisgICAgICAgIG1fYmxvY2tTZWxlY3Rpb25EZXNpcmVkU2l6ZS5zZXRIZWlnaHQoYmxv
Y2tTZWxlY3Rpb25TdGFydEhlaWdodCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrU2VsZWN0aW9u
ID0gbnVsbHB0cjsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IGVuY2xv
c2luZ1RleHRVbml0T2ZHcmFudWxhcml0eSh2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9y
UG9pbnQoZnJhbWUsIHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSksIFBhcmFn
cmFwaEdyYW51bGFyaXR5LCBEaXJlY3Rpb25Gb3J3YXJkKTsKKyAgICAgICAgaWYgKHBhcmFncmFw
aFJhbmdlICYmICFwYXJhZ3JhcGhSYW5nZS0+Y29sbGFwc2VkKCkpCisgICAgICAgICAgICBtX2Js
b2NrUmVjdEZvclRleHRTZWxlY3Rpb24gPSBzZWxlY3Rpb25Cb3hGb3JSYW5nZShwYXJhZ3JhcGhS
YW5nZS5nZXQoKSk7CisgICAgfQogCiAgICAgaWYgKHJhbmdlKQogICAgICAgICBmcmFtZS5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBVUFNUUkVBTSwgdHJ1ZSk7Cg==
</data>
<flag name="review"
          id="302611"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>