<?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>187430</bug_id>
          
          <creation_ts>2018-07-06 21:53:13 -0700</creation_ts>
          <short_desc>Optimize packing of RootInlineBox</short_desc>
          <delta_ts>2018-07-08 22:10:23 -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>Layout and Rendering</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1440098</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-07-06 21:53:13 -0700</bug_when>
    <thetext>RootInlineBox can be packed better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440099</commentid>
    <comment_count>1</comment_count>
      <attachid>344514</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-07-06 21:53:41 -0700</bug_when>
    <thetext>Created attachment 344514
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440101</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-07-06 21:54:11 -0700</bug_when>
    <thetext>Before:

 29$ $ ./Tools/Scripts/dump-class-layout -c Release WebCore RootInlineBox
  +0 &lt;176&gt; RootInlineBox
  +0 &lt;112&gt;     WebCore::InlineFlowBox WebCore::InlineFlowBox
  +0 &lt; 64&gt;         WebCore::InlineBox WebCore::InlineBox
  +0 &lt;  8&gt;            __vtbl_ptr_type * _vptr
  +8 &lt;  8&gt;           WebCore::InlineBox * m_next
 +16 &lt;  8&gt;           WebCore::InlineBox * m_prev
 +24 &lt;  8&gt;           WebCore::InlineFlowBox * m_parent
 +32 &lt;  8&gt;           WebCore::RenderObject &amp; m_renderer
 +40 &lt;  4&gt;           float m_expansion
 +44 &lt;  4&gt;             WebCore::InlineBox::InlineBoxBitfields m_bitfields
 +44 &lt;  4&gt;               unsigned int m_firstLine : 1
 +44 &lt;  4&gt;               unsigned int m_constructed : 1
 +44 &lt;  4&gt;               unsigned int m_bidiEmbeddingLevel : 6
 +45 &lt;  4&gt;               unsigned int m_dirty : 1
 +45 &lt;  4&gt;               unsigned int m_extracted : 1
 +45 &lt;  4&gt;               unsigned int m_hasVirtualLogicalHeight : 1
 +45 &lt;  4&gt;               unsigned int m_isHorizontal : 1
 +45 &lt;  4&gt;               unsigned int m_endsWithBreak : 1
 +45 &lt;  4&gt;               unsigned int m_hasSelectedChildrenOrCanHaveLeadingExpansion : 1
 +45 &lt;  4&gt;               unsigned int m_canHaveTrailingExpansion : 1
 +45 &lt;  4&gt;               unsigned int m_knownToHaveNoOverflow : 1
 +46 &lt;  4&gt;               unsigned int m_hasEllipsisBoxOrHyphen : 1
 +46 &lt;  4&gt;               unsigned int m_dirOverride : 1
 +46 &lt;  4&gt;               unsigned int m_behavesLikeText : 1
 +46 &lt;  4&gt;               unsigned int m_forceTrailingExpansion : 1
 +46 &lt;  4&gt;               unsigned int m_forceLeadingExpansion : 1
 +46 &lt;  4&gt;               unsigned int m_determinedIfNextOnLineExists : 1
 +46 &lt;  4&gt;               unsigned int m_nextOnLineExists : 1
 +48 &lt;  8&gt;             WebCore::FloatPoint m_topLeft
 +48 &lt;  4&gt;               float m_x
 +52 &lt;  4&gt;               float m_y
 +56 &lt;  4&gt;           float m_logicalWidth
 +60 &lt;  4&gt;       &lt;PADDING: 4 bytes&gt;
 +64 &lt;  8&gt;         WTF::RefPtr&lt;WebCore::RenderOverflow, WTF::DumbPtrTraits&lt;WebCore::RenderOverflow&gt; &gt; m_overflow
 +64 &lt;  8&gt;           WTF::DumbPtrTraits&lt;WebCore::RenderOverflow&gt;::StorageType m_ptr
 +72 &lt;  8&gt;       WebCore::InlineBox * m_firstChild
 +80 &lt;  8&gt;       WebCore::InlineBox * m_lastChild
 +88 &lt;  8&gt;       WebCore::InlineFlowBox * m_prevLineBox
 +96 &lt;  8&gt;       WebCore::InlineFlowBox * m_nextLineBox
+104 &lt;  4&gt;       unsigned int m_includeLogicalLeftEdge : 1
+104 &lt;  4&gt;       unsigned int m_includeLogicalRightEdge : 1
+104 &lt;  4&gt;       unsigned int m_hasTextChildren : 1
+104 &lt;  4&gt;       unsigned int m_hasTextDescendants : 1
+104 &lt;  4&gt;       unsigned int m_descendantsHaveSameLineHeightAndBaseline : 1
+104 &lt;  4&gt;       unsigned int m_baselineType : 1
+104 &lt;  4&gt;       unsigned int m_hasAnnotationsBefore : 1
+104 &lt;  4&gt;       unsigned int m_hasAnnotationsAfter : 1
+105 &lt;  4&gt;       unsigned int m_lineBreakBidiStatusEor : 5
+105 &lt;  4&gt;       unsigned int m_lineBreakBidiStatusLastStrong : 5
+106 &lt;  4&gt;       unsigned int m_lineBreakBidiStatusLast : 5
+106 &lt;  4&gt;       unsigned int m_isFirstAfterPageBreak : 1
+110 &lt;  2&gt;   &lt;PADDING: 2 bytes&gt;
+112 &lt;  8&gt;     WTF::CanMakeWeakPtr&lt;WebCore::RootInlineBox&gt; WTF::CanMakeWeakPtr&lt;WebCore::RootInlineBox&gt;
+112 &lt;  8&gt;         WTF::WeakPtrFactory&lt;WebCore::RootInlineBox&gt; m_weakFactory
+112 &lt;  8&gt;             WTF::RefPtr&lt;WTF::WeakReference&lt;WebCore::RootInlineBox&gt;, WTF::DumbPtrTraits&lt;WTF::WeakReference&lt;WebCore::RootInlineBox&gt; &gt; &gt; m_ref
+112 &lt;  8&gt;               WTF::DumbPtrTraits&lt;WTF::WeakReference&lt;WebCore::RootInlineBox&gt; &gt;::StorageType m_ptr
+120 &lt;  4&gt;   unsigned int m_lineBreakPos
+124 &lt;  4&gt;   &lt;PADDING: 4 bytes&gt;
+128 &lt;  8&gt;     WTF::WeakPtr&lt;WebCore::RenderObject&gt; m_lineBreakObj
+128 &lt;  8&gt;         WTF::RefPtr&lt;WTF::WeakReference&lt;WebCore::RenderObject&gt;, WTF::DumbPtrTraits&lt;WTF::WeakReference&lt;WebCore::RenderObject&gt; &gt; &gt; m_ref
+128 &lt;  8&gt;           WTF::DumbPtrTraits&lt;WTF::WeakReference&lt;WebCore::RenderObject&gt; &gt;::StorageType m_ptr
+136 &lt;  8&gt;     WTF::RefPtr&lt;WebCore::BidiContext, WTF::DumbPtrTraits&lt;WebCore::BidiContext&gt; &gt; m_lineBreakContext
+136 &lt;  8&gt;       WTF::DumbPtrTraits&lt;WebCore::BidiContext&gt;::StorageType m_ptr
+144 &lt;  4&gt;     WebCore::LayoutUnit m_lineTop
+144 &lt;  4&gt;       int m_value
+148 &lt;  4&gt;     WebCore::LayoutUnit m_lineBottom
+148 &lt;  4&gt;       int m_value
+152 &lt;  4&gt;     WebCore::LayoutUnit m_lineTopWithLeading
+152 &lt;  4&gt;       int m_value
+156 &lt;  4&gt;     WebCore::LayoutUnit m_lineBottomWithLeading
+156 &lt;  4&gt;       int m_value
+160 &lt;  4&gt;     WebCore::LayoutUnit m_paginationStrut
+160 &lt;  4&gt;       int m_value
+164 &lt;  4&gt;     WebCore::LayoutUnit m_paginatedLineWidth
+164 &lt;  4&gt;       int m_value
+168 &lt;  8&gt;     std::__1::unique_ptr&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt;, std::__1::default_delete&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; &gt; &gt; m_floats
+168 &lt;  8&gt;         std::__1::__compressed_pair&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; *, std::__1::default_delete&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; &gt; &gt; __ptr_
+168 &lt;  8&gt;             std::__1::__compressed_pair_elem&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; *, 0, false&gt; std::__1::__compressed_pair_elem&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; *, 0, false&gt;
+168 &lt;  8&gt;               WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; * __value_
+168 &lt;  1&gt;             std::__1::__compressed_pair_elem&lt;std::__1::default_delete&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; &gt;, 1, true&gt; std::__1::__compressed_pair_elem&lt;std::__1::default_delete&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; &gt;, 1, true&gt;
+168 &lt;  1&gt;                 std::__1::default_delete&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; &gt; std::__1::default_delete&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; &gt;
Total byte size: 176
Total pad bytes: 10
Padding percentage: 5.68 %


After:

 32$ $ ./Tools/Scripts/dump-class-layout -c Release WebCore RootInlineBox
  +0 &lt;168&gt; RootInlineBox
  +0 &lt;104&gt;     WebCore::InlineFlowBox WebCore::InlineFlowBox
  +0 &lt; 64&gt;         WebCore::InlineBox WebCore::InlineBox
  +0 &lt;  8&gt;            __vtbl_ptr_type * _vptr
  +8 &lt;  8&gt;           WebCore::InlineBox * m_next
 +16 &lt;  8&gt;           WebCore::InlineBox * m_prev
 +24 &lt;  8&gt;           WebCore::InlineFlowBox * m_parent
 +32 &lt;  8&gt;           WebCore::RenderObject &amp; m_renderer
 +40 &lt;  4&gt;           float m_logicalWidth
 +44 &lt;  4&gt;           float m_expansion
 +48 &lt;  4&gt;             WebCore::InlineBox::InlineBoxBitfields m_bitfields
 +48 &lt;  4&gt;               unsigned int m_firstLine : 1
 +48 &lt;  4&gt;               unsigned int m_constructed : 1
 +48 &lt;  4&gt;               unsigned int m_bidiEmbeddingLevel : 6
 +49 &lt;  4&gt;               unsigned int m_dirty : 1
 +49 &lt;  4&gt;               unsigned int m_extracted : 1
 +49 &lt;  4&gt;               unsigned int m_hasVirtualLogicalHeight : 1
 +49 &lt;  4&gt;               unsigned int m_isHorizontal : 1
 +49 &lt;  4&gt;               unsigned int m_endsWithBreak : 1
 +49 &lt;  4&gt;               unsigned int m_hasSelectedChildrenOrCanHaveLeadingExpansion : 1
 +49 &lt;  4&gt;               unsigned int m_canHaveTrailingExpansion : 1
 +49 &lt;  4&gt;               unsigned int m_knownToHaveNoOverflow : 1
 +50 &lt;  4&gt;               unsigned int m_hasEllipsisBoxOrHyphen : 1
 +50 &lt;  4&gt;               unsigned int m_dirOverride : 1
 +50 &lt;  4&gt;               unsigned int m_behavesLikeText : 1
 +50 &lt;  4&gt;               unsigned int m_forceTrailingExpansion : 1
 +50 &lt;  4&gt;               unsigned int m_forceLeadingExpansion : 1
 +50 &lt;  4&gt;               unsigned int m_determinedIfNextOnLineExists : 1
 +50 &lt;  4&gt;               unsigned int m_nextOnLineExists : 1
 +52 &lt;  8&gt;             WebCore::FloatPoint m_topLeft
 +52 &lt;  4&gt;               float m_x
 +56 &lt;  4&gt;               float m_y
 +60 &lt;  4&gt;       unsigned int m_includeLogicalLeftEdge : 1
 +60 &lt;  4&gt;       unsigned int m_includeLogicalRightEdge : 1
 +60 &lt;  4&gt;       unsigned int m_hasTextChildren : 1
 +60 &lt;  4&gt;       unsigned int m_hasTextDescendants : 1
 +60 &lt;  4&gt;       unsigned int m_descendantsHaveSameLineHeightAndBaseline : 1
 +60 &lt;  4&gt;       unsigned int m_baselineType : 1
 +60 &lt;  4&gt;       unsigned int m_hasAnnotationsBefore : 1
 +60 &lt;  4&gt;       unsigned int m_hasAnnotationsAfter : 1
 +61 &lt;  4&gt;       unsigned int m_lineBreakBidiStatusEor : 5
 +61 &lt;  4&gt;       unsigned int m_lineBreakBidiStatusLastStrong : 5
 +62 &lt;  4&gt;       unsigned int m_lineBreakBidiStatusLast : 5
 +62 &lt;  4&gt;       unsigned int m_isFirstAfterPageBreak : 1
 +64 &lt;  8&gt;         WTF::RefPtr&lt;WebCore::RenderOverflow, WTF::DumbPtrTraits&lt;WebCore::RenderOverflow&gt; &gt; m_overflow
 +64 &lt;  8&gt;           WTF::DumbPtrTraits&lt;WebCore::RenderOverflow&gt;::StorageType m_ptr
 +72 &lt;  8&gt;       WebCore::InlineBox * m_firstChild
 +80 &lt;  8&gt;       WebCore::InlineBox * m_lastChild
 +88 &lt;  8&gt;       WebCore::InlineFlowBox * m_prevLineBox
 +96 &lt;  8&gt;       WebCore::InlineFlowBox * m_nextLineBox
+104 &lt;  8&gt;     WTF::CanMakeWeakPtr&lt;WebCore::RootInlineBox&gt; WTF::CanMakeWeakPtr&lt;WebCore::RootInlineBox&gt;
+104 &lt;  8&gt;         WTF::WeakPtrFactory&lt;WebCore::RootInlineBox&gt; m_weakFactory
+104 &lt;  8&gt;             WTF::RefPtr&lt;WTF::WeakReference&lt;WebCore::RootInlineBox&gt;, WTF::DumbPtrTraits&lt;WTF::WeakReference&lt;WebCore::RootInlineBox&gt; &gt; &gt; m_ref
+104 &lt;  8&gt;               WTF::DumbPtrTraits&lt;WTF::WeakReference&lt;WebCore::RootInlineBox&gt; &gt;::StorageType m_ptr
+112 &lt;  8&gt;     WTF::WeakPtr&lt;WebCore::RenderObject&gt; m_lineBreakObj
+112 &lt;  8&gt;         WTF::RefPtr&lt;WTF::WeakReference&lt;WebCore::RenderObject&gt;, WTF::DumbPtrTraits&lt;WTF::WeakReference&lt;WebCore::RenderObject&gt; &gt; &gt; m_ref
+112 &lt;  8&gt;           WTF::DumbPtrTraits&lt;WTF::WeakReference&lt;WebCore::RenderObject&gt; &gt;::StorageType m_ptr
+120 &lt;  8&gt;     WTF::RefPtr&lt;WebCore::BidiContext, WTF::DumbPtrTraits&lt;WebCore::BidiContext&gt; &gt; m_lineBreakContext
+120 &lt;  8&gt;       WTF::DumbPtrTraits&lt;WebCore::BidiContext&gt;::StorageType m_ptr
+128 &lt;  4&gt;     WebCore::LayoutUnit m_lineTop
+128 &lt;  4&gt;       int m_value
+132 &lt;  4&gt;     WebCore::LayoutUnit m_lineBottom
+132 &lt;  4&gt;       int m_value
+136 &lt;  4&gt;     WebCore::LayoutUnit m_lineTopWithLeading
+136 &lt;  4&gt;       int m_value
+140 &lt;  4&gt;     WebCore::LayoutUnit m_lineBottomWithLeading
+140 &lt;  4&gt;       int m_value
+144 &lt;  4&gt;     WebCore::LayoutUnit m_paginationStrut
+144 &lt;  4&gt;       int m_value
+148 &lt;  4&gt;     WebCore::LayoutUnit m_paginatedLineWidth
+148 &lt;  4&gt;       int m_value
+152 &lt;  8&gt;     std::__1::unique_ptr&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt;, std::__1::default_delete&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; &gt; &gt; m_floats
+152 &lt;  8&gt;         std::__1::__compressed_pair&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; *, std::__1::default_delete&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; &gt; &gt; __ptr_
+152 &lt;  8&gt;             std::__1::__compressed_pair_elem&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; *, 0, false&gt; std::__1::__compressed_pair_elem&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; *, 0, false&gt;
+152 &lt;  8&gt;               WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; * __value_
+152 &lt;  1&gt;             std::__1::__compressed_pair_elem&lt;std::__1::default_delete&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; &gt;, 1, true&gt; std::__1::__compressed_pair_elem&lt;std::__1::default_delete&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; &gt;, 1, true&gt;
+152 &lt;  1&gt;                 std::__1::default_delete&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; &gt; std::__1::default_delete&lt;WTF::Vector&lt;WTF::WeakPtr&lt;WebCore::RenderBox&gt;, 0, WTF::CrashOnOverflow, 16&gt; &gt;
+160 &lt;  4&gt;   unsigned int m_lineBreakPos
+164 &lt;  4&gt;   &lt;PADDING: 4 bytes&gt;
Total byte size: 168
Total pad bytes: 4
Padding percentage: 2.38 %</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440103</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-07-06 21:54:50 -0700</bug_when>
    <thetext>631 instances on nytimes.com, so this saves about 5KB.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440193</commentid>
    <comment_count>4</comment_count>
      <attachid>344535</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-07-07 20:50:44 -0700</bug_when>
    <thetext>Created attachment 344535
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440291</commentid>
    <comment_count>5</comment_count>
      <attachid>344535</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-08 22:09:28 -0700</bug_when>
    <thetext>Comment on attachment 344535
Patch

Clearing flags on attachment: 344535

Committed r233634: &lt;https://trac.webkit.org/changeset/233634&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440292</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-08 22:09:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440293</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-07-08 22:10:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/41960324&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>344514</attachid>
            <date>2018-07-06 21:53:41 -0700</date>
            <delta_ts>2018-07-07 20:50:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>rootinlinebox-packing.patch</filename>
            <type>text/plain</type>
            <size>5468</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAppbmRleCA3N2E2ODY1NWFlYTIwZDc2Yjhk
ZTdmYjQ4MjQ0ZjdmMDdiNmNiM2I0Li5iMTRiYTAyYWQzOWJjYjU0MzI4NDE4M2JjN2UzNmM1MDY3
NWQ3OWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCkBAIC0yOTQsNiArMjk0
LDkgQEAgcHJpdmF0ZToKIAogICAgIFJlbmRlck9iamVjdCYgbV9yZW5kZXJlcjsKIAorcHJvdGVj
dGVkOgorICAgIGZsb2F0IG1fbG9naWNhbFdpZHRoIHsgMCB9OworcHJpdmF0ZToKICAgICBmbG9h
dCBtX2V4cGFuc2lvbiB7IDAgfTsKIAogI2RlZmluZSBBRERfQk9PTEVBTl9CSVRGSUVMRChuYW1l
LCBOYW1lKSBcCkBAIC0zODUsOSArMzg4LDkgQEAgcHJvdGVjdGVkOgogICAgICAgICAsIG1fcHJl
dihwcmV2KQogICAgICAgICAsIG1fcGFyZW50KHBhcmVudCkKICAgICAgICAgLCBtX3JlbmRlcmVy
KHJlbmRlcmVyKQorICAgICAgICAsIG1fbG9naWNhbFdpZHRoKGxvZ2ljYWxXaWR0aCkKICAgICAg
ICAgLCBtX2JpdGZpZWxkcyhmaXJzdExpbmUsIGNvbnN0cnVjdGVkLCBkaXJ0eSwgZXh0cmFjdGVk
LCBpc0hvcml6b250YWwpCiAgICAgICAgICwgbV90b3BMZWZ0KHRvcExlZnQpCi0gICAgICAgICwg
bV9sb2dpY2FsV2lkdGgobG9naWNhbFdpZHRoKQogICAgIHsKICAgICB9CiAKQEAgLTQxMSw3ICs0
MTQsNiBAQCBwcm90ZWN0ZWQ6CiAKIHByb3RlY3RlZDoKICAgICBGbG9hdFBvaW50IG1fdG9wTGVm
dDsKLSAgICBmbG9hdCBtX2xvZ2ljYWxXaWR0aCB7IDAgfTsKIAogI2lmICFBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTl9ESVNBQkxFRAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAppbmRleCA2YmI5Mzc3OTk5NWEzMTk3NjMyNzRkZjY4
YTBkZmJmNTVkODBiNzNkLi42YWRjNmNiN2Y3MzUzZjAxODI2MGFlOTM3YzlhNjZjNWNjYmVlMjRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCkBAIC00Nyw4
ICs0Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1Q
TChJbmxpbmVGbG93Qm94KTsKIAogc3RydWN0IFNhbWVTaXplQXNJbmxpbmVGbG93Qm94IDogcHVi
bGljIElubGluZUJveCB7Ci0gICAgdm9pZCogcG9pbnRlcnNbNV07CiAgICAgdWludDMyX3QgYml0
ZmllbGRzIDogMjM7CisgICAgdm9pZCogcG9pbnRlcnNbNV07CiB9OwogCiBDT01QSUxFX0FTU0VS
VChzaXplb2YoSW5saW5lRmxvd0JveCkgPT0gc2l6ZW9mKFNhbWVTaXplQXNJbmxpbmVGbG93Qm94
KSwgSW5saW5lRmxvd0JveF9zaG91bGRfc3RheV9zbWFsbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guaAppbmRleCA2YzRkNThmMDBmYTIzZWE5MzVlYWZiNmYzZWY5NmY1
OTAwNDQ0MDk4Li5jNjJlNzJjNGVjOWYyMjY5OGVjMWJmNWVjMmVlZTJmZjRjMGFkMDdkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKQEAgLTQyLDEwICs0Miw2IEBA
IGNsYXNzIElubGluZUZsb3dCb3ggOiBwdWJsaWMgSW5saW5lQm94IHsKIHB1YmxpYzoKICAgICBl
eHBsaWNpdCBJbmxpbmVGbG93Qm94KFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5kZXJlcikKICAg
ICAgICAgOiBJbmxpbmVCb3gocmVuZGVyZXIpCi0gICAgICAgICwgbV9maXJzdENoaWxkKG51bGxw
dHIpCi0gICAgICAgICwgbV9sYXN0Q2hpbGQobnVsbHB0cikKLSAgICAgICAgLCBtX3ByZXZMaW5l
Qm94KG51bGxwdHIpCi0gICAgICAgICwgbV9uZXh0TGluZUJveChudWxscHRyKQogICAgICAgICAs
IG1faW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZShmYWxzZSkKICAgICAgICAgLCBtX2luY2x1ZGVMb2dp
Y2FsUmlnaHRFZGdlKGZhbHNlKQogICAgICAgICAsIG1fZGVzY2VuZGFudHNIYXZlU2FtZUxpbmVI
ZWlnaHRBbmRCYXNlbGluZSh0cnVlKQpAQCAtNTYsNiArNTIsMTAgQEAgcHVibGljOgogI2lmICFB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTl9ESVNBQkxFRAogICAgICAgICAsIG1faGFz
QmFkQ2hpbGRMaXN0KGZhbHNlKQogI2VuZGlmCisgICAgICAgICwgbV9maXJzdENoaWxkKG51bGxw
dHIpCisgICAgICAgICwgbV9sYXN0Q2hpbGQobnVsbHB0cikKKyAgICAgICAgLCBtX3ByZXZMaW5l
Qm94KG51bGxwdHIpCisgICAgICAgICwgbV9uZXh0TGluZUJveChudWxscHRyKQogICAgIHsKICAg
ICAgICAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEZpcmVmb3ggYWx3YXlzIGNyZWF0ZSBhIG1h
cmtlciBmb3IgbGlzdCBpdGVtcywgZXZlbiB3aGVuIHRoZSBsaXN0LXN0eWxlLXR5cGUgaXMgbm9u
ZS4gIFdlIGRvIG5vdCBtYWtlIGEgbWFya2VyCiAgICAgICAgIC8vIGluIHRoZSBsaXN0LXN0eWxl
LXR5cGU6IG5vbmUgY2FzZSwgc2luY2UgaXQgaXMgd2FzdGVmdWwgdG8gZG8gc28uICBIb3dldmVy
LCBpbiBvcmRlciB0byBtYXRjaCBvdGhlciBicm93c2VycyB3ZSBoYXZlIHRvIHByZXRlbmQgbGlr
ZQpAQCAtMzA4LDE1ICszMDgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRkUmVwbGFjZWRDaGls
ZE92ZXJmbG93KGNvbnN0IElubGluZUJveCosIExheW91dFJlY3QmIGxvZ2ljYWxMYXlvdXRPdmVy
ZmxvdywgTGF5b3V0UmVjdCYgbG9naWNhbFZpc3VhbE92ZXJmbG93KTsKICAgICB2b2lkIGNvbnN0
cmFpblRvTGluZVRvcEFuZEJvdHRvbUlmTmVlZGVkKExheW91dFJlY3QmKSBjb25zdDsKIAotcHJv
dGVjdGVkOgotICAgIFJlZlB0cjxSZW5kZXJPdmVyZmxvdz4gbV9vdmVyZmxvdzsKLQotICAgIElu
bGluZUJveCogbV9maXJzdENoaWxkOwotICAgIElubGluZUJveCogbV9sYXN0Q2hpbGQ7Ci0gICAg
Ci0gICAgSW5saW5lRmxvd0JveCogbV9wcmV2TGluZUJveDsgLy8gVGhlIHByZXZpb3VzIGJveCB0
aGF0IGFsc28gdXNlcyBvdXIgUmVuZGVyT2JqZWN0Ci0gICAgSW5saW5lRmxvd0JveCogbV9uZXh0
TGluZUJveDsgLy8gVGhlIG5leHQgYm94IHRoYXQgYWxzbyB1c2VzIG91ciBSZW5kZXJPYmplY3QK
LQogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2luY2x1ZGVMb2dpY2FsTGVmdEVkZ2UgOiAxOwog
ICAgIHVuc2lnbmVkIG1faW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UgOiAxOwpAQCAtMzQ2LDYgKzMz
NywxNSBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faGFzQmFkQ2hpbGRM
aXN0IDogMTsKICNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgUmVmUHRyPFJlbmRlck92ZXJmbG93
PiBtX292ZXJmbG93OworCisgICAgSW5saW5lQm94KiBtX2ZpcnN0Q2hpbGQ7CisgICAgSW5saW5l
Qm94KiBtX2xhc3RDaGlsZDsKKyAgICAKKyAgICBJbmxpbmVGbG93Qm94KiBtX3ByZXZMaW5lQm94
OyAvLyBUaGUgcHJldmlvdXMgYm94IHRoYXQgYWxzbyB1c2VzIG91ciBSZW5kZXJPYmplY3QKKyAg
ICBJbmxpbmVGbG93Qm94KiBtX25leHRMaW5lQm94OyAvLyBUaGUgbmV4dCBib3ggdGhhdCBhbHNv
IHVzZXMgb3VyIFJlbmRlck9iamVjdAogfTsKIAogI2lmZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCmluZGV4IGM4YzBlNTQzOWYyMzJlNTIxNTQy
MWM4MjBhNjA1NjgzYzQwNjRjMjAuLjVkYTVkZTcyODI2OTA4ZTBiZDFmNmI1NzkzZDAxYTQ4ZTAw
MDFkZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKQEAg
LTYzLDcgKzYzLDYgQEAgc3RhdGljIENvbnRhaW5pbmdGcmFnbWVudE1hcCYgY29udGFpbmluZ0Zy
YWdtZW50TWFwKFJlbmRlckJsb2NrRmxvdyYgYmxvY2spCiAKIFJvb3RJbmxpbmVCb3g6OlJvb3RJ
bmxpbmVCb3goUmVuZGVyQmxvY2tGbG93JiBibG9jaykKICAgICA6IElubGluZUZsb3dCb3goYmxv
Y2spCi0gICAgLCBtX2xpbmVCcmVha1BvcygwKQogewogICAgIHNldElzSG9yaXpvbnRhbChibG9j
ay5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Um9vdElubGluZUJveC5oCmluZGV4IGRkOTU5NGZmYmNmYmMwZjYyYjlhZTcxYTc1NDJhNTgwNzdk
NWMyMTEuLjM3OTAyMWUwMjg2MTVmOWI0MDM1MzRiMTVlMGI2MWQ1NTBlZDcyMWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaApAQCAtMjExLDkgKzIxMSw2IEBAIHBy
aXZhdGU6CiAKICAgICBMYXlvdXRVbml0IGJlZm9yZUFubm90YXRpb25zQWRqdXN0bWVudCgpIGNv
bnN0OwogCi0gICAgLy8gVGhpcyBmb2xkcyBpbnRvIHRoZSBwYWRkaW5nIGF0IHRoZSBlbmQgb2Yg
SW5saW5lRmxvd0JveCBvbiA2NC1iaXQuCi0gICAgdW5zaWduZWQgbV9saW5lQnJlYWtQb3M7Ci0K
ICAgICAvLyBXaGVyZSB0aGlzIGxpbmUgZW5kZWQuICBUaGUgZXhhY3Qgb2JqZWN0IGFuZCB0aGUg
cG9zaXRpb24gd2l0aGluIHRoYXQgb2JqZWN0IGFyZSBzdG9yZWQgc28gdGhhdAogICAgIC8vIHdl
IGNhbiBjcmVhdGUgYW4gSW5saW5lSXRlcmF0b3IgYmVnaW5uaW5nIGp1c3QgYWZ0ZXIgdGhlIGVu
ZCBvZiB0aGlzIGxpbmUuCiAgICAgV2Vha1B0cjxSZW5kZXJPYmplY3Q+IG1fbGluZUJyZWFrT2Jq
OwpAQCAtMjMxLDYgKzIyOCw4IEBAIHByaXZhdGU6CiAgICAgLy8gRmxvYXRzIGhhbmdpbmcgb2Zm
IHRoZSBsaW5lIGFyZSBwdXNoZWQgaW50byB0aGlzIHZlY3RvciBkdXJpbmcgbGF5b3V0LiBJdCBp
cyBvbmx5CiAgICAgLy8gZ29vZCBmb3IgYXMgbG9uZyBhcyB0aGUgbGluZSBoYXMgbm90IGJlZW4g
bWFya2VkIGRpcnR5LgogICAgIHN0ZDo6dW5pcXVlX3B0cjxDbGVhbkxpbmVGbG9hdExpc3Q+IG1f
ZmxvYXRzOworCisgICAgdW5zaWduZWQgbV9saW5lQnJlYWtQb3MgeyAwIH07CiB9OwogCiBpbmxp
bmUgUm9vdElubGluZUJveCogUm9vdElubGluZUJveDo6bmV4dFJvb3RCb3goKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>344535</attachid>
            <date>2018-07-07 20:50:44 -0700</date>
            <delta_ts>2018-07-08 22:09:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-187430-20180707205043.patch</filename>
            <type>text/plain</type>
            <size>15533</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMzNjE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODk1NDU4OWEzYzRmMjM3
MzE5MTY1NDNkYjVmNjYxMGE3NmQzNmViNS4uNmJjZjVkOGZhY2E3NTQ0MTk5NjlkM2U2ZjQ0NTg5
NTBjNjFkZTM3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE4LTA3LTA3ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIE9wdGltaXplIHBh
Y2tpbmcgb2YgUm9vdElubGluZUJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg3NDMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW4gSW5saW5lQm94LCBtb3ZlIHRoZSBtX2xvZ2ljYWxXaWR0aCBmbG9h
dCB1cCBuZXh0IHRvIHRoZSBtX2V4cGFuc2lvbiBmbG9hdCB3aXRoIG1fdG9wTGVmdCBuZXh0OyB0
aGlzCisgICAgICAgIGF2b2lkcyBwYWRkaW5nIG9mIDQgYnl0ZXMgYWZ0ZXIgdGhpcyBmbG9hdC4K
KyAgICAgICAgCisgICAgICAgIEluIElubGluZUZsb3dCb3gsIG1vdmUgdGhlIGJpdGZpZWxkcyBi
ZWZvcmUgdGhlIHBvaW50ZXJzIHNvIHRoZXkgY2FuIHNudWcgdXAgaW50byB0aGUKKyAgICAgICAg
NCBieXRlcyBhZnRlciBtX2V4cGFuc2lvbiBpbiB0aGUgYmFzZSBjbGFzcy4KKyAgICAgICAgCisg
ICAgICAgIFRoZSBjb21tZW50IGFib3V0IG1fbGluZUJyZWFrUG9zJ3MgcGFkZGluZyBpbiBSb290
SW5saW5lQm94IGlzIHdyb25nOyBqdXN0IG1vdmUgaXQgdG8gdGhlIGVuZAorICAgICAgICB0byBh
dm9pZCBwYWRkaW5nIGJlZm9yZSB0aGUgbV9saW5lQnJlYWtPYmogcG9pbnRlci4KKyAgICAgICAg
CisgICAgICAgIE1ha2UgbV9sb2dpY2FsV2lkdGggcHJpdmF0ZSBhbmQgaGF2ZSBkZXJpdmVkIGNs
YXNzZXMgdXNlIHRoZSBhY2Nlc3Nvci4KKyAgICAgICAgCisgICAgICAgIE1ha2UgRWxsaXBzaXNC
b3ggNCBieXRlcyBzbWFsbGVyIHRvby4KKworICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0Jv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6RWxsaXBzaXNCb3gpOgorICAg
ICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6OnBhaW50TWFya3VwQm94KToKKyAgICAgICAgKFdl
YkNvcmU6OkVsbGlwc2lzQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL0Vs
bGlwc2lzQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUJveC5oOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lQm94OjpJbmxpbmVCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6SW5saW5lRmxvd0JveCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpmcmFtZVJlY3RJbmNsdWRpbmdMaW5lSGVpZ2h0IGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
VGV4dEJveDo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dEJhY2tncm91bmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZSBjb25zdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Um9vdElubGluZUJveDo6Um9vdElubGluZUJveCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJ
bmxpbmVCb3guaDoKKwogMjAxOC0wNy0wNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBs
ZS5jb20+CiAKICAgICAgICAgU2VtYW50aWMgY29sb3JzIGRvbid0IHVwZGF0ZSB3aGVuIGFjY2Vz
c2liaWxpdHkgSW5jcmVhc2UgQ29udHJhc3QgbW9kZSBpcyBlbmFibGVkLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKaW5kZXggOTUyNDQ3OTUwNWJlYWUyMWU1YTdkYTBm
NjU5Yzg4ZmM3YjZmODFhZi4uODEwNTRhM2IzNTIzMWNiYWRkNjA3YjU1NjZjMWY1ZTMyYjZmMzJm
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCkBAIC0zOSw3ICsz
OSw2IEBAIEVsbGlwc2lzQm94OjpFbGxpcHNpc0JveChSZW5kZXJCbG9ja0Zsb3cmIHJlbmRlcmVy
LCBjb25zdCBBdG9taWNTdHJpbmcmIGVsbGlwc2lzCiAgICAgLCBtX3Nob3VsZFBhaW50TWFya3Vw
Qm94KG1hcmt1cEJveCkKICAgICAsIG1faGVpZ2h0KGhlaWdodCkKICAgICAsIG1fc3RyKGVsbGlw
c2lzU3RyKQotICAgICwgbV9zZWxlY3Rpb25TdGF0ZShSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5v
bmUpCiB7CiAjaWYgIUFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OX0RJU0FCTEVECiAg
ICAgbV9pc0V2ZXJJbkNoaWxkTGlzdCA9IGZhbHNlOwpAQCAtMTA4LDcgKzEwNyw3IEBAIHZvaWQg
RWxsaXBzaXNCb3g6OnBhaW50TWFya3VwQm94KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPCiAgICAgICAgIHJldHVybjsKIAogICAgIExheW91dFBvaW50IGFk
anVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldDsKLSAgICBhZGp1c3RlZFBhaW50T2Zmc2V0
Lm1vdmUoeCgpICsgbV9sb2dpY2FsV2lkdGggLSBtYXJrdXBCb3gtPngoKSwKKyAgICBhZGp1c3Rl
ZFBhaW50T2Zmc2V0Lm1vdmUoeCgpICsgbG9naWNhbFdpZHRoKCkgLSBtYXJrdXBCb3gtPngoKSwK
ICAgICAgICAgeSgpICsgc3R5bGUuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIChtYXJrdXBCb3gt
PnkoKSArIG1hcmt1cEJveC0+bGluZVN0eWxlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSkpOwog
ICAgIG1hcmt1cEJveC0+cGFpbnQocGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBsaW5l
VG9wLCBsaW5lQm90dG9tKTsKIH0KQEAgLTE1Myw3ICsxNTIsNyBAQCBib29sIEVsbGlwc2lzQm94
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdQogICAgIC8vIEhpdCB0ZXN0IHRoZSBtYXJrdXAgYm94LgogICAgIGlmIChJbmxpbmVC
b3gqIG1hcmt1cEJveCA9IHRoaXMtPm1hcmt1cEJveCgpKSB7CiAgICAgICAgIGNvbnN0IFJlbmRl
clN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKLSAgICAgICAgTGF5b3V0VW5p
dCBtdHggPSBhZGp1c3RlZExvY2F0aW9uLngoKSArIG1fbG9naWNhbFdpZHRoIC0gbWFya3VwQm94
LT54KCk7CisgICAgICAgIExheW91dFVuaXQgbXR4ID0gYWRqdXN0ZWRMb2NhdGlvbi54KCkgKyBs
b2dpY2FsV2lkdGgoKSAtIG1hcmt1cEJveC0+eCgpOwogICAgICAgICBMYXlvdXRVbml0IG10eSA9
IGFkanVzdGVkTG9jYXRpb24ueSgpICsgbGluZVN0eWxlLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkg
LSAobWFya3VwQm94LT55KCkgKyBtYXJrdXBCb3gtPmxpbmVTdHlsZSgpLmZvbnRNZXRyaWNzKCku
YXNjZW50KCkpOwogICAgICAgICBpZiAobWFya3VwQm94LT5ub2RlQXRQb2ludChyZXF1ZXN0LCBy
ZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIExheW91dFBvaW50KG10eCwgbXR5KSwgbGluZVRv
cCwgbGluZUJvdHRvbSwgaGl0VGVzdEFjdGlvbikpIHsKICAgICAgICAgICAgIGJsb2NrRmxvdygp
LnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkg
LSBMYXlvdXRTaXplKG10eCwgbXR5KSk7CkBAIC0xNjEsNyArMTYwLDcgQEAgYm9vbCBFbGxpcHNp
c0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3UKICAgICAgICAgfQogICAgIH0KIAotICAgIExheW91dFJlY3QgYm91bmRzUmVj
dChhZGp1c3RlZExvY2F0aW9uLCBMYXlvdXRTaXplKG1fbG9naWNhbFdpZHRoLCBtX2hlaWdodCkp
OworICAgIExheW91dFJlY3QgYm91bmRzUmVjdChhZGp1c3RlZExvY2F0aW9uLCBMYXlvdXRTaXpl
KGxvZ2ljYWxXaWR0aCgpLCBtX2hlaWdodCkpOwogICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5n
KCkgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKEhpdFRlc3RMb2NhdGlvbjo6cmVjdEZvclBvaW50
KGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSwgMCwgMCwgMCwgMCkpKSB7CiAgICAgICAgIGJs
b2NrRmxvdygpLnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVy
LnBvaW50KCkgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOwogICAgICAgICBpZiAo
cmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQoYmxvY2tGbG93KCkuZWxlbWVudCgp
LCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBib3VuZHNSZWN0KSA9PSBIaXRUZXN0UHJv
Z3Jlc3M6OlN0b3ApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBz
aXNCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCmluZGV4IGI2
MWI4NGYxNjJkMDRiMzYwZTc1YzU2NTAwNzRkNzNjYmFjMjRiOWYuLmViZTE5NDE0NDFhOWYzZjU5
YjlhNzVlNDE0YjU0M2YwMDc0MDc1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FbGxpcHNpc0JveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNp
c0JveC5oCkBAIC00Niw5ICs0Niw5IEBAIHByaXZhdGU6CiAgICAgSW5saW5lQm94KiBtYXJrdXBC
b3goKSBjb25zdDsKIAogICAgIGJvb2wgbV9zaG91bGRQYWludE1hcmt1cEJveDsKKyAgICBSZW5k
ZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIG1fc2VsZWN0aW9uU3RhdGUgeyBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvbk5vbmUgfTsKICAgICBpbnQgbV9oZWlnaHQ7CiAgICAgQXRvbWljU3RyaW5nIG1f
c3RyOwotICAgIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgbV9zZWxlY3Rpb25TdGF0ZTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVC
b3guaAppbmRleCA3N2E2ODY1NWFlYTIwZDc2YjhkZTdmYjQ4MjQ0ZjdmMDdiNmNiM2I0Li5hMDVm
ZTM4ZWMyNzU5YTYyNDg5NzU4YzMyYWQ0OWU2YzQyYWM5YjI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUJveC5oCkBAIC0yOTQsNyArMjk0LDEwIEBAIHByaXZhdGU6CiAKICAgICBSZW5k
ZXJPYmplY3QmIG1fcmVuZGVyZXI7CiAKK3ByaXZhdGU6CisgICAgZmxvYXQgbV9sb2dpY2FsV2lk
dGggeyAwIH07CiAgICAgZmxvYXQgbV9leHBhbnNpb24geyAwIH07CisgICAgRmxvYXRQb2ludCBt
X3RvcExlZnQ7CiAKICNkZWZpbmUgQUREX0JPT0xFQU5fQklURklFTEQobmFtZSwgTmFtZSkgXAog
ICAgIHByaXZhdGU6XApAQCAtMzg1LDkgKzM4OCw5IEBAIHByb3RlY3RlZDoKICAgICAgICAgLCBt
X3ByZXYocHJldikKICAgICAgICAgLCBtX3BhcmVudChwYXJlbnQpCiAgICAgICAgICwgbV9yZW5k
ZXJlcihyZW5kZXJlcikKLSAgICAgICAgLCBtX2JpdGZpZWxkcyhmaXJzdExpbmUsIGNvbnN0cnVj
dGVkLCBkaXJ0eSwgZXh0cmFjdGVkLCBpc0hvcml6b250YWwpCi0gICAgICAgICwgbV90b3BMZWZ0
KHRvcExlZnQpCiAgICAgICAgICwgbV9sb2dpY2FsV2lkdGgobG9naWNhbFdpZHRoKQorICAgICAg
ICAsIG1fdG9wTGVmdCh0b3BMZWZ0KQorICAgICAgICAsIG1fYml0ZmllbGRzKGZpcnN0TGluZSwg
Y29uc3RydWN0ZWQsIGRpcnR5LCBleHRyYWN0ZWQsIGlzSG9yaXpvbnRhbCkKICAgICB7CiAgICAg
fQogCkBAIC00MTAsOCArNDEzLDYgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgZXh0cmFjdGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuZXh0cmFjdGVkKCk7IH0KIAogcHJvdGVjdGVkOgot
ICAgIEZsb2F0UG9pbnQgbV90b3BMZWZ0OwotICAgIGZsb2F0IG1fbG9naWNhbFdpZHRoIHsgMCB9
OwogCiAjaWYgIUFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OX0RJU0FCTEVECiBwcml2
YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCmluZGV4IDZi
YjkzNzc5OTk1YTMxOTc2MzI3NGRmNjhhMGRmYmY1NWQ4MGI3M2QuLjZhZGM2Y2I3ZjczNTNmMDE4
MjYwYWU5MzdjOWE2NmM1Y2NiZWUyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVGbG93Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5jcHAKQEAgLTQ3LDggKzQ3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKElubGluZUZsb3dCb3gpOwogCiBzdHJ1Y3QgU2FtZVNp
emVBc0lubGluZUZsb3dCb3ggOiBwdWJsaWMgSW5saW5lQm94IHsKLSAgICB2b2lkKiBwb2ludGVy
c1s1XTsKICAgICB1aW50MzJfdCBiaXRmaWVsZHMgOiAyMzsKKyAgICB2b2lkKiBwb2ludGVyc1s1
XTsKIH07CiAKIENPTVBJTEVfQVNTRVJUKHNpemVvZihJbmxpbmVGbG93Qm94KSA9PSBzaXplb2Yo
U2FtZVNpemVBc0lubGluZUZsb3dCb3gpLCBJbmxpbmVGbG93Qm94X3Nob3VsZF9zdGF5X3NtYWxs
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCmluZGV4IDZjNGQ1OGYw
MGZhMjNlYTkzNWVhZmI2ZjNlZjk2ZjU5MDA0NDQwOTguLjI3YzYyMjk0NjZjYTUxZDQ3YTgyYTVh
MzJlMzUxOGEyYmJhNDdmMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dC
b3guaApAQCAtNDIsMTAgKzQyLDYgQEAgY2xhc3MgSW5saW5lRmxvd0JveCA6IHB1YmxpYyBJbmxp
bmVCb3ggewogcHVibGljOgogICAgIGV4cGxpY2l0IElubGluZUZsb3dCb3goUmVuZGVyQm94TW9k
ZWxPYmplY3QmIHJlbmRlcmVyKQogICAgICAgICA6IElubGluZUJveChyZW5kZXJlcikKLSAgICAg
ICAgLCBtX2ZpcnN0Q2hpbGQobnVsbHB0cikKLSAgICAgICAgLCBtX2xhc3RDaGlsZChudWxscHRy
KQotICAgICAgICAsIG1fcHJldkxpbmVCb3gobnVsbHB0cikKLSAgICAgICAgLCBtX25leHRMaW5l
Qm94KG51bGxwdHIpCiAgICAgICAgICwgbV9pbmNsdWRlTG9naWNhbExlZnRFZGdlKGZhbHNlKQog
ICAgICAgICAsIG1faW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UoZmFsc2UpCiAgICAgICAgICwgbV9k
ZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKHRydWUpCkBAIC01Niw2ICs1
MiwxMCBAQCBwdWJsaWM6CiAjaWYgIUFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OX0RJ
U0FCTEVECiAgICAgICAgICwgbV9oYXNCYWRDaGlsZExpc3QoZmFsc2UpCiAjZW5kaWYKKyAgICAg
ICAgLCBtX2ZpcnN0Q2hpbGQobnVsbHB0cikKKyAgICAgICAgLCBtX2xhc3RDaGlsZChudWxscHRy
KQorICAgICAgICAsIG1fcHJldkxpbmVCb3gobnVsbHB0cikKKyAgICAgICAgLCBtX25leHRMaW5l
Qm94KG51bGxwdHIpCiAgICAgewogICAgICAgICAvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRmly
ZWZveCBhbHdheXMgY3JlYXRlIGEgbWFya2VyIGZvciBsaXN0IGl0ZW1zLCBldmVuIHdoZW4gdGhl
IGxpc3Qtc3R5bGUtdHlwZSBpcyBub25lLiAgV2UgZG8gbm90IG1ha2UgYSBtYXJrZXIKICAgICAg
ICAgLy8gaW4gdGhlIGxpc3Qtc3R5bGUtdHlwZTogbm9uZSBjYXNlLCBzaW5jZSBpdCBpcyB3YXN0
ZWZ1bCB0byBkbyBzby4gIEhvd2V2ZXIsIGluIG9yZGVyIHRvIG1hdGNoIG90aGVyIGJyb3dzZXJz
IHdlIGhhdmUgdG8gcHJldGVuZCBsaWtlCkBAIC0yNzQsOCArMjc0LDggQEAgcHVibGljOgogICAg
IEZsb2F0UmVjdCBmcmFtZVJlY3RJbmNsdWRpbmdMaW5lSGVpZ2h0KExheW91dFVuaXQgbGluZVRv
cCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzSG9y
aXpvbnRhbCgpKQotICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChtX3RvcExlZnQueCgpLCBs
aW5lVG9wLCB3aWR0aCgpLCBsaW5lQm90dG9tIC0gbGluZVRvcCk7Ci0gICAgICAgIHJldHVybiBG
bG9hdFJlY3QobGluZVRvcCwgbV90b3BMZWZ0LnkoKSwgbGluZUJvdHRvbSAtIGxpbmVUb3AsIGhl
aWdodCgpKTsKKyAgICAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoeCgpLCBsaW5lVG9wLCB3aWR0
aCgpLCBsaW5lQm90dG9tIC0gbGluZVRvcCk7CisgICAgICAgIHJldHVybiBGbG9hdFJlY3QobGlu
ZVRvcCwgeSgpLCBsaW5lQm90dG9tIC0gbGluZVRvcCwgaGVpZ2h0KCkpOwogICAgIH0KICAgICAK
ICAgICBGbG9hdFJlY3QgbG9naWNhbEZyYW1lUmVjdEluY2x1ZGluZ0xpbmVIZWlnaHQoTGF5b3V0
VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIGNvbnN0CkBAIC0zMDgsMTUgKzMw
OCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGRSZXBsYWNlZENoaWxkT3ZlcmZsb3coY29uc3Qg
SW5saW5lQm94KiwgTGF5b3V0UmVjdCYgbG9naWNhbExheW91dE92ZXJmbG93LCBMYXlvdXRSZWN0
JiBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cpOwogICAgIHZvaWQgY29uc3RyYWluVG9MaW5lVG9wQW5k
Qm90dG9tSWZOZWVkZWQoTGF5b3V0UmVjdCYpIGNvbnN0OwogCi1wcm90ZWN0ZWQ6Ci0gICAgUmVm
UHRyPFJlbmRlck92ZXJmbG93PiBtX292ZXJmbG93OwotCi0gICAgSW5saW5lQm94KiBtX2ZpcnN0
Q2hpbGQ7Ci0gICAgSW5saW5lQm94KiBtX2xhc3RDaGlsZDsKLSAgICAKLSAgICBJbmxpbmVGbG93
Qm94KiBtX3ByZXZMaW5lQm94OyAvLyBUaGUgcHJldmlvdXMgYm94IHRoYXQgYWxzbyB1c2VzIG91
ciBSZW5kZXJPYmplY3QKLSAgICBJbmxpbmVGbG93Qm94KiBtX25leHRMaW5lQm94OyAvLyBUaGUg
bmV4dCBib3ggdGhhdCBhbHNvIHVzZXMgb3VyIFJlbmRlck9iamVjdAotCiBwcml2YXRlOgogICAg
IHVuc2lnbmVkIG1faW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSA6IDE7CiAgICAgdW5zaWduZWQgbV9p
bmNsdWRlTG9naWNhbFJpZ2h0RWRnZSA6IDE7CkBAIC0zNDYsNiArMzM3LDE1IEBAIHByb3RlY3Rl
ZDoKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9oYXNCYWRDaGlsZExpc3QgOiAxOwogI2VuZGlm
CisKK3Byb3RlY3RlZDoKKyAgICBSZWZQdHI8UmVuZGVyT3ZlcmZsb3c+IG1fb3ZlcmZsb3c7CisK
KyAgICBJbmxpbmVCb3gqIG1fZmlyc3RDaGlsZDsKKyAgICBJbmxpbmVCb3gqIG1fbGFzdENoaWxk
OworICAgIAorICAgIElubGluZUZsb3dCb3gqIG1fcHJldkxpbmVCb3g7IC8vIFRoZSBwcmV2aW91
cyBib3ggdGhhdCBhbHNvIHVzZXMgb3VyIFJlbmRlck9iamVjdAorICAgIElubGluZUZsb3dCb3gq
IG1fbmV4dExpbmVCb3g7IC8vIFRoZSBuZXh0IGJveCB0aGF0IGFsc28gdXNlcyBvdXIgUmVuZGVy
T2JqZWN0CiB9OwogCiAjaWZkZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAKaW5kZXggYThjMTlhM2NhNDU0ZGZjZGM1Y2Y1NTg5MmRiOGJhZDIyOTYz
YzM1OS4uMDM0YWZiYzBmMTM4ZTgyNWUyZDcxN2IyMjM3ZmFiNTBmYzdmNmMwMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtMjAzLDcgKzIwMyw3IEBA
IExheW91dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0
YXJ0UG9zLCB1bnNpZ25lZCBlbmRQb3MpCiAKICAgICBUZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVU
ZXh0UnVuKCk7CiAKLSAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KExh
eW91dFBvaW50KGxvZ2ljYWxMZWZ0KCksIHNlbGVjdGlvblRvcCksIExheW91dFNpemUobV9sb2dp
Y2FsV2lkdGgsIHNlbGVjdGlvbkhlaWdodCkpOworICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVj
dCA9IExheW91dFJlY3QoTGF5b3V0UG9pbnQobG9naWNhbExlZnQoKSwgc2VsZWN0aW9uVG9wKSwg
TGF5b3V0U2l6ZShsb2dpY2FsV2lkdGgoKSwgc2VsZWN0aW9uSGVpZ2h0KSk7CiAgICAgLy8gQXZv
aWQgbWVhc3VyaW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxlY3Rl
ZCBhcyBhbiBvcHRpbWl6YXRpb24uCiAgICAgaWYgKHNQb3MgfHwgZVBvcyAhPSB0ZXh0UnVuLmxl
bmd0aCgpKQogICAgICAgICBsaW5lRm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRl
eHRSdW4sIHNlbGVjdGlvblJlY3QsIHNQb3MsIGVQb3MpOwpAQCAtNDc0LDcgKzQ3NCw3IEBAIHZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91
dFBvaW50JiBwYWludE9mZnNldCwKICAgICAgICAgICAgIC8vIE5PVEU6IFdlYktpdCdzIGJlaGF2
aW9yIGRpZmZlcnMgZnJvbSB0aGF0IG9mIElFIHdoaWNoIGFwcGVhcnMgdG8ganVzdCBvdmVybGF5
IHRoZSBlbGxpcHNpcyBvbiB0b3Agb2YgdGhlCiAgICAgICAgICAgICAvLyB0cnVuY2F0ZWQgc3Ry
aW5nIGkuZS4gIHxIZWxsb3xDQkF8IC0+IHwuLi5sb3xDQkF8CiAgICAgICAgICAgICBMYXlvdXRV
bml0IHdpZHRoT2ZWaXNpYmxlVGV4dCA9IHJlbmRlcmVyKCkud2lkdGgobV9zdGFydCwgbV90cnVu
Y2F0aW9uLCB0ZXh0UG9zKCksIGlzRmlyc3RMaW5lKCkpOwotICAgICAgICAgICAgTGF5b3V0VW5p
dCB3aWR0aE9mSGlkZGVuVGV4dCA9IG1fbG9naWNhbFdpZHRoIC0gd2lkdGhPZlZpc2libGVUZXh0
OworICAgICAgICAgICAgTGF5b3V0VW5pdCB3aWR0aE9mSGlkZGVuVGV4dCA9IGxvZ2ljYWxXaWR0
aCgpIC0gd2lkdGhPZlZpc2libGVUZXh0OwogICAgICAgICAgICAgTGF5b3V0U2l6ZSB0cnVuY2F0
aW9uT2Zmc2V0KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHdpZHRoT2ZIaWRkZW5UZXh0IDog
LXdpZHRoT2ZIaWRkZW5UZXh0LCAwKTsKICAgICAgICAgICAgIGxvY2FsUGFpbnRPZmZzZXQubW92
ZShpc0hvcml6b250YWwoKSA/IHRydW5jYXRpb25PZmZzZXQgOiB0cnVuY2F0aW9uT2Zmc2V0LnRy
YW5zcG9zZWRTaXplKCkpOwogICAgICAgICB9CkBAIC02NjksNyArNjY5LDcgQEAgdm9pZCBJbmxp
bmVUZXh0Qm94OjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICBmbG9hdCBzdGFydCA9IDA7IC8v
IHN0YXJ0IG9mIGxpbmUgdG8gZHJhdywgcmVsYXRpdmUgdG8gdHgKLSAgICBmbG9hdCB3aWR0aCA9
IG1fbG9naWNhbFdpZHRoOyAvLyBob3cgbXVjaCBsaW5lIHRvIGRyYXcKKyAgICBmbG9hdCB3aWR0
aCA9IGxvZ2ljYWxXaWR0aCgpOyAvLyBob3cgbXVjaCBsaW5lIHRvIGRyYXcKIAogICAgIC8vIEF2
b2lkIG1lYXN1cmluZyB0aGUgdGV4dCB3aGVuIHRoZSBlbnRpcmUgbGluZSBib3ggaXMgc2VsZWN0
ZWQgYXMgYW4gb3B0aW1pemF0aW9uLgogICAgIGlmIChtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0IHx8
IG1hcmtlZFRleHQuZW5kT2Zmc2V0ICE9IGNsYW1wZWRPZmZzZXQoZW5kKCkgKyAxKSkgewpAQCAt
OTk3LDcgKzk5Nyw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0QmFja2dy
b3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQCiAgICAgTGF5b3V0VW5pdCBk
ZWx0YVkgPSByZW5kZXJlcigpLnN0eWxlKCkuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8g
c2VsZWN0aW9uQm90dG9tIC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNhbFRvcCgpIC0gc2VsZWN0
aW9uVG9wOwogICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0ID0gc3RkOjptYXg8TGF5b3V0
VW5pdD4oMCwgc2VsZWN0aW9uQm90dG9tIC0gc2VsZWN0aW9uVG9wKTsKIAotICAgIExheW91dFJl
Y3Qgc2VsZWN0aW9uUmVjdCA9IExheW91dFJlY3QoYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnko
KSAtIGRlbHRhWSwgbV9sb2dpY2FsV2lkdGgsIHNlbGVjdGlvbkhlaWdodCk7CisgICAgTGF5b3V0
UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdChib3hPcmlnaW4ueCgpLCBib3hPcmlnaW4u
eSgpIC0gZGVsdGFZLCBsb2dpY2FsV2lkdGgoKSwgc2VsZWN0aW9uSGVpZ2h0KTsKICAgICBsaW5l
Rm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3Qs
IGNsYW1wZWRTdGFydE9mZnNldCwgY2xhbXBlZEVuZE9mZnNldCk7CiAKICAgICAvLyBGSVhNRTog
U3VwcG9ydCBwYWludGluZyBjb21iaW5lZCB0ZXh0LiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTM+LgpAQCAtMTE0NCw3ICsxMTQ0LDcgQEAgdm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBGbG9hdFAKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGZsb2F0IHN0YXJ0
ID0gMDsgLy8gc3RhcnQgb2YgbGluZSB0byBkcmF3LCByZWxhdGl2ZSB0byB0eAotICAgIGZsb2F0
IHdpZHRoID0gbV9sb2dpY2FsV2lkdGg7IC8vIGhvdyBtdWNoIGxpbmUgdG8gZHJhdworICAgIGZs
b2F0IHdpZHRoID0gbG9naWNhbFdpZHRoKCk7IC8vIGhvdyBtdWNoIGxpbmUgdG8gZHJhdwogICAg
IGJvb2wgdXNlV2hvbGVXaWR0aCA9IHRydWU7CiAgICAgdW5zaWduZWQgcGFpbnRTdGFydCA9IG1f
c3RhcnQ7CiAgICAgdW5zaWduZWQgcGFpbnRFbmQgPSBlbmQoKSArIDE7IC8vIGVuZCBwb2ludHMg
YXQgdGhlIGxhc3QgY2hhciwgbm90IHBhc3QgaXQKQEAgLTExNjMsNyArMTE2Myw3IEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgRmxvYXRQCiAgICAgfQogICAgIGlmICghdXNlV2hvbGVXaWR0aCkgewogICAg
ICAgICB3aWR0aCA9IHJlbmRlcmVyKCkud2lkdGgocGFpbnRTdGFydCwgcGFpbnRFbmQgLSBwYWlu
dFN0YXJ0LCB0ZXh0UG9zKCkgKyBzdGFydCwgaXNGaXJzdExpbmUoKSk7Ci0gICAgICAgIG1pcnJv
clJUTFNlZ21lbnQobV9sb2dpY2FsV2lkdGgsIGRpcmVjdGlvbigpLCBzdGFydCwgd2lkdGgpOwor
ICAgICAgICBtaXJyb3JSVExTZWdtZW50KGxvZ2ljYWxXaWR0aCgpLCBkaXJlY3Rpb24oKSwgc3Rh
cnQsIHdpZHRoKTsKICAgICB9CiAKICAgICAvLyBUaGljayBtYXJrZWQgdGV4dCB1bmRlcmxpbmVz
IGFyZSAycHggdGhpY2sgYXMgbG9uZyBhcyB0aGVyZSBpcyByb29tIGZvciB0aGUgMnB4IGxpbmUg
dW5kZXIgdGhlIGJhc2VsaW5lLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVC
b3guY3BwCmluZGV4IGM4YzBlNTQzOWYyMzJlNTIxNTQyMWM4MjBhNjA1NjgzYzQwNjRjMjAuLjVk
YTVkZTcyODI2OTA4ZTBiZDFmNmI1NzkzZDAxYTQ4ZTAwMDFkZTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKQEAgLTYzLDcgKzYzLDYgQEAgc3RhdGljIENv
bnRhaW5pbmdGcmFnbWVudE1hcCYgY29udGFpbmluZ0ZyYWdtZW50TWFwKFJlbmRlckJsb2NrRmxv
dyYgYmxvY2spCiAKIFJvb3RJbmxpbmVCb3g6OlJvb3RJbmxpbmVCb3goUmVuZGVyQmxvY2tGbG93
JiBibG9jaykKICAgICA6IElubGluZUZsb3dCb3goYmxvY2spCi0gICAgLCBtX2xpbmVCcmVha1Bv
cygwKQogewogICAgIHNldElzSG9yaXpvbnRhbChibG9jay5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5l
Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCmluZGV4IGRk
OTU5NGZmYmNmYmMwZjYyYjlhZTcxYTc1NDJhNTgwNzdkNWMyMTEuLjM3OTAyMWUwMjg2MTVmOWI0
MDM1MzRiMTVlMGI2MWQ1NTBlZDcyMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9Sb290SW5saW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJ
bmxpbmVCb3guaApAQCAtMjExLDkgKzIxMSw2IEBAIHByaXZhdGU6CiAKICAgICBMYXlvdXRVbml0
IGJlZm9yZUFubm90YXRpb25zQWRqdXN0bWVudCgpIGNvbnN0OwogCi0gICAgLy8gVGhpcyBmb2xk
cyBpbnRvIHRoZSBwYWRkaW5nIGF0IHRoZSBlbmQgb2YgSW5saW5lRmxvd0JveCBvbiA2NC1iaXQu
Ci0gICAgdW5zaWduZWQgbV9saW5lQnJlYWtQb3M7Ci0KICAgICAvLyBXaGVyZSB0aGlzIGxpbmUg
ZW5kZWQuICBUaGUgZXhhY3Qgb2JqZWN0IGFuZCB0aGUgcG9zaXRpb24gd2l0aGluIHRoYXQgb2Jq
ZWN0IGFyZSBzdG9yZWQgc28gdGhhdAogICAgIC8vIHdlIGNhbiBjcmVhdGUgYW4gSW5saW5lSXRl
cmF0b3IgYmVnaW5uaW5nIGp1c3QgYWZ0ZXIgdGhlIGVuZCBvZiB0aGlzIGxpbmUuCiAgICAgV2Vh
a1B0cjxSZW5kZXJPYmplY3Q+IG1fbGluZUJyZWFrT2JqOwpAQCAtMjMxLDYgKzIyOCw4IEBAIHBy
aXZhdGU6CiAgICAgLy8gRmxvYXRzIGhhbmdpbmcgb2ZmIHRoZSBsaW5lIGFyZSBwdXNoZWQgaW50
byB0aGlzIHZlY3RvciBkdXJpbmcgbGF5b3V0LiBJdCBpcyBvbmx5CiAgICAgLy8gZ29vZCBmb3Ig
YXMgbG9uZyBhcyB0aGUgbGluZSBoYXMgbm90IGJlZW4gbWFya2VkIGRpcnR5LgogICAgIHN0ZDo6
dW5pcXVlX3B0cjxDbGVhbkxpbmVGbG9hdExpc3Q+IG1fZmxvYXRzOworCisgICAgdW5zaWduZWQg
bV9saW5lQnJlYWtQb3MgeyAwIH07CiB9OwogCiBpbmxpbmUgUm9vdElubGluZUJveCogUm9vdElu
bGluZUJveDo6bmV4dFJvb3RCb3goKSBjb25zdAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>