<?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>52255</bug_id>
          
          <creation_ts>2011-01-11 15:08:31 -0800</creation_ts>
          <short_desc>Add a Region class which represents a graphical region</short_desc>
          <delta_ts>2011-01-11 15:40:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>332710</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-01-11 15:08:31 -0800</bug_when>
    <thetext>Add a Region class which represents a graphical region</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332715</commentid>
    <comment_count>1</comment_count>
      <attachid>78607</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-01-11 15:14:34 -0800</bug_when>
    <thetext>Created attachment 78607
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332717</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-11 15:16:24 -0800</bug_when>
    <thetext>Attachment 78607 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebKit2/ChangeLog&apos;, u&apos;WebKit2/Platform/Reg...&quot; exit_code: 1
WebKit2/Platform/Region.cpp:124:  Region::Shape::spans_begin is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit2/Platform/Region.cpp:129:  Region::Shape::spans_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit2/Platform/Region.cpp:134:  Region::Shape::segments_begin is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit2/Platform/Region.cpp:146:  Region::Shape::segments_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit2/Platform/Region.h:76:  spans_begin is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit2/Platform/Region.h:77:  spans_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit2/Platform/Region.h:80:  segments_begin is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit2/Platform/Region.h:81:  segments_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 8 in 4 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>332732</commentid>
    <comment_count>3</comment_count>
      <attachid>78607</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-01-11 15:35:08 -0800</bug_when>
    <thetext>Comment on attachment 78607
Patch

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

We should consider moving this to WebCore at some point.

&gt; WebKit2/Platform/Region.cpp:131
&gt; +    return m_spans.data() + m_spans.size();

This could be m_spans.end(). Same with begin.

&gt; WebKit2/Platform/Region.cpp:137
&gt; +    assert(it &gt;= m_spans.data());
&gt; +    assert(it &lt; m_spans.data() + m_spans.size());

Wrong assert style.

&gt; WebKit2/Platform/Region.cpp:149


Also wrong assert.

&gt; WebKit2/Platform/Region.cpp:155
&gt; +    assert(it + 1 &lt; m_spans.data() + m_spans.size());

Wrong assert.

&gt; WebKit2/Platform/Region.cpp:170
&gt; +void Region::Shape::dump() const
&gt; +{
&gt; +    for (Shape::SpanIterator span = spans_begin(), end = spans_end(); span != end; ++span) {
&gt; +        printf(&quot;%6d: (&quot;, span-&gt;y);
&gt; +        for (Shape::SegmentIterator segment = segments_begin(span), end = segments_end(span); segment != end; ++segment)
&gt; +            printf(&quot;%d &quot;, *segment);
&gt; +        printf(&quot;)\n&quot;);
&gt; +    }
&gt; +
&gt; +    printf(&quot;\n&quot;);
&gt; +}

This should be debug only.

&gt; WebKit2/Platform/Region.cpp:191
&gt; +            assert(firstSegment != lastSegment);

Wrong assert style.

&gt; WebKit2/Platform/Region.cpp:204
&gt; +    assert(minX &lt;= maxX);
&gt; +    assert(minY &lt;= maxY);

Wrong assert style.

&gt; WebKit2/Platform/Region.cpp:226
&gt; +enum {
&gt; +    Shape1,
&gt; +    Shape2,
&gt; +};

These are dead code.

&gt; WebKit2/Platform/Region.cpp:231
&gt; +    // FIXME: These should be static asserts.

THEY ARE!

&gt; WebKit2/Platform/Region.cpp:251
&gt; +    SegmentIterator segments2 = 0;
&gt; +    SegmentIterator segments2End = 0;
&gt; +
&gt; +    

Extra new line.

&gt; WebKit2/Platform/Region.cpp:278
&gt; +        std::vector&lt;int&gt; segments;

Please use WTF::Vector instead.

&gt; WebKit2/Platform/Region.cpp:392
&gt; +    static const int opCode = 1;

This makes me sad. Name it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332740</commentid>
    <comment_count>4</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-01-11 15:40:34 -0800</bug_when>
    <thetext>Committed r75562: &lt;http://trac.webkit.org/changeset/75562&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78607</attachid>
            <date>2011-01-11 15:14:34 -0800</date>
            <delta_ts>2011-01-11 15:35:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52255-20110111151433.patch</filename>
            <type>text/plain</type>
            <size>23860</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTU1OCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMTEtMDEtMTEgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgYSBSZWdpb24gY2xhc3Mgd2hpY2ggcmVwcmVzZW50cyBhIGdyYXBoaWNhbCByZWdpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMjU1CisK
KyAgICAgICAgKiBQbGF0Zm9ybS9SZWdpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
UmVnaW9uOjpSZWdpb24pOgorICAgICAgICAoV2ViS2l0OjpSZWdpb246OnJlY3RzKToKKyAgICAg
ICAgKFdlYktpdDo6UmVnaW9uOjpTaGFwZTo6U2hhcGUpOgorICAgICAgICAoV2ViS2l0OjpSZWdp
b246OlNoYXBlOjphcHBlbmRTcGFuKToKKyAgICAgICAgKFdlYktpdDo6UmVnaW9uOjpTaGFwZTo6
Y2FuQ29hbGVzY2UpOgorICAgICAgICAoV2ViS2l0OjpSZWdpb246OlNoYXBlOjphcHBlbmRTcGFu
cyk6CisgICAgICAgIChXZWJLaXQ6OlJlZ2lvbjo6U2hhcGU6OmFwcGVuZFNlZ21lbnQpOgorICAg
ICAgICAoV2ViS2l0OjpSZWdpb246OlNoYXBlOjpzcGFuc19iZWdpbik6CisgICAgICAgIChXZWJL
aXQ6OlJlZ2lvbjo6U2hhcGU6OnNwYW5zX2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlZ2lvbjo6
U2hhcGU6OnNlZ21lbnRzX2JlZ2luKToKKyAgICAgICAgKFdlYktpdDo6UmVnaW9uOjpTaGFwZTo6
c2VnbWVudHNfZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVnaW9uOjpTaGFwZTo6ZHVtcCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlZ2lvbjo6U2hhcGU6OmJvdW5kcyk6CisgICAgICAgIChXZWJLaXQ6
OlJlZ2lvbjo6U2hhcGU6Om1vdmUpOgorICAgICAgICAoV2ViS2l0OjpSZWdpb246OlNoYXBlOjpz
d2FwKToKKyAgICAgICAgKFdlYktpdDo6UmVnaW9uOjpTaGFwZTo6c2hhcGVPcGVyYXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpSZWdpb246OlNoYXBlOjpVbmlvbk9wZXJhdGlvbjo6dHJ5U2ltcGxl
T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVnaW9uOjpTaGFwZTo6dW5pb25TaGFwZXMp
OgorICAgICAgICAoV2ViS2l0OjpSZWdpb246OlNoYXBlOjpJbnRlcnNlY3RPcGVyYXRpb246OnRy
eVNpbXBsZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlZ2lvbjo6U2hhcGU6OmludGVy
c2VjdFNoYXBlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlZ2lvbjo6U2hhcGU6OlN1YnRyYWN0T3Bl
cmF0aW9uOjp0cnlTaW1wbGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZWdpb246OlNo
YXBlOjpzdWJ0cmFjdFNoYXBlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlZ2lvbjo6ZHVtcCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlZ2lvbjo6aW50ZXJzZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVn
aW9uOjp1bml0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlZ2lvbjo6c3VidHJhY3QpOgorICAgICAg
ICAoV2ViS2l0OjpSZWdpb246Om1vdmUpOgorICAgICAgICAqIFBsYXRmb3JtL1JlZ2lvbi5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVnaW9uOjpib3VuZHMpOgorICAgICAgICAoV2ViS2l0
OjpSZWdpb246OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpSZWdpb246OlNwYW46OlNwYW4p
OgorICAgICAgICAoV2ViS2l0OjpSZWdpb246OlNoYXBlOjppc0VtcHR5KToKKyAgICAgICAgKiBX
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTEtMDEtMTEgIEFuZGVycyBD
YXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KSW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vUmVnaW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1BsYXRmb3JtL1JlZ2lvbi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1Bs
YXRmb3JtL1JlZ2lvbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgIlJlZ2lvbi5oIgorCisvLyBBIHJlZ2lvbiBjbGFzcyBiYXNl
ZCBvbiB0aGUgcGFwZXIgIlNjYW5saW5lIENvaGVyZW50IFNoYXBlIEFsZ2VicmEiCisvLyBieSBK
b25hdGhhbiBFLiBTdGVpbmhhcnQgZnJvbSB0aGUgYm9vayAiR3JhcGhpY3MgR2VtcyBJSSIuCisv
LworLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzIHR3byB2ZWN0b3JzIGluc3RlYWQgb2YgbGlu
a2VkIGxpc3QsIGFuZAorLy8gYWxzbyBjb21wcmVzc2VzIHJlZ2lvbnMgd2hlbiBwb3NzaWJsZS4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZWdp
b246OlJlZ2lvbigpCit7Cit9CisKK1JlZ2lvbjo6UmVnaW9uKGNvbnN0IEludFJlY3QmIHJlY3Qp
CisgICAgOiBtX2JvdW5kcyhyZWN0KQorICAgICwgbV9zaGFwZShyZWN0KQoreworfQorCitWZWN0
b3I8SW50UmVjdD4gUmVnaW9uOjpyZWN0cygpIGNvbnN0Cit7CisgICAgVmVjdG9yPEludFJlY3Q+
IHJlY3RzOworCisgICAgZm9yIChTaGFwZTo6U3Bhbkl0ZXJhdG9yIHNwYW4gPSBtX3NoYXBlLnNw
YW5zX2JlZ2luKCksIGVuZCA9IG1fc2hhcGUuc3BhbnNfZW5kKCk7IHNwYW4gIT0gZW5kICYmIHNw
YW4gKyAxICE9IGVuZDsgKytzcGFuKSB7CisgICAgICAgIGludCB5ID0gc3Bhbi0+eTsKKyAgICAg
ICAgaW50IGhlaWdodCA9IChzcGFuICsgMSktPnkgLSB5OworCisgICAgICAgIGZvciAoU2hhcGU6
OlNlZ21lbnRJdGVyYXRvciBzZWdtZW50ID0gbV9zaGFwZS5zZWdtZW50c19iZWdpbihzcGFuKSwg
ZW5kID0gbV9zaGFwZS5zZWdtZW50c19lbmQoc3Bhbik7IHNlZ21lbnQgIT0gZW5kICYmIHNlZ21l
bnQgKyAxICE9IGVuZDsgc2VnbWVudCArPSAyKSB7CisgICAgICAgICAgICBpbnQgeCA9ICpzZWdt
ZW50OworICAgICAgICAgICAgaW50IHdpZHRoID0gKihzZWdtZW50ICsgMSkgLSB4OworCisgICAg
ICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVjdHM7Cit9CisKK1JlZ2lvbjo6U2hhcGU6OlNo
YXBlKCkKK3sKK30KKworUmVnaW9uOjpTaGFwZTo6U2hhcGUoY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBhcHBlbmRTcGFuKHJlY3QueSgpKTsKKyAgICBhcHBlbmRTZWdtZW50KHJlY3QueCgp
KTsKKyAgICBhcHBlbmRTZWdtZW50KHJlY3QucmlnaHQoKSk7CisgICAgYXBwZW5kU3BhbihyZWN0
LmJvdHRvbSgpKTsKK30KKwordm9pZCBSZWdpb246OlNoYXBlOjphcHBlbmRTcGFuKGludCB5KQor
eworICAgIG1fc3BhbnMuYXBwZW5kKFNwYW4oeSwgbV9zZWdtZW50cy5zaXplKCkpKTsKK30KKwor
Ym9vbCBSZWdpb246OlNoYXBlOjpjYW5Db2FsZXNjZShTZWdtZW50SXRlcmF0b3IgYmVnaW4sIFNl
Z21lbnRJdGVyYXRvciBlbmQpCit7CisgICAgaWYgKG1fc3BhbnMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBTZWdtZW50SXRlcmF0b3IgbGFzdFNwYW5CZWdpbiA9IG1f
c2VnbWVudHMuZGF0YSgpICsgbV9zcGFucy5sYXN0KCkuc2VnbWVudEluZGV4OworICAgIFNlZ21l
bnRJdGVyYXRvciBsYXN0U3BhbkVuZCA9IG1fc2VnbWVudHMuZGF0YSgpICsgbV9zZWdtZW50cy5z
aXplKCk7CisKKyAgICAvLyBDaGVjayBpZiBib3RoIHNwYW5zIGhhdmUgYW4gZXF1YWwgbnVtYmVy
IG9mIHNlZ21lbnRzLgorICAgIGlmIChsYXN0U3BhbkVuZCAtIGxhc3RTcGFuQmVnaW4gIT0gZW5k
IC0gYmVnaW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENoZWNrIGlmIGJvdGgg
c3BhbnMgYXJlIGVxdWFsLgorICAgIGlmICghc3RkOjplcXVhbChiZWdpbiwgZW5kLCBsYXN0U3Bh
bkJlZ2luKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gU2luY2UgdGhlIHNlZ21l
bnRzIGFyZSBlcXVhbCB0aGUgc2Vjb25kIHNlZ21lbnQgY2FuIGp1c3QgYmUgaWdub3JlZC4KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZWdpb246OlNoYXBlOjphcHBlbmRTcGFuKGludCB5
LCBTZWdtZW50SXRlcmF0b3IgYmVnaW4sIFNlZ21lbnRJdGVyYXRvciBlbmQpCit7CisgICAgaWYg
KGNhbkNvYWxlc2NlKGJlZ2luLCBlbmQpKQorICAgICAgICByZXR1cm47CisgIAorICAgIGFwcGVu
ZFNwYW4oeSk7CisgICAgbV9zZWdtZW50cy5hcHBlbmRSYW5nZShiZWdpbiwgZW5kKTsKK30KKwor
dm9pZCBSZWdpb246OlNoYXBlOjphcHBlbmRTcGFucyhjb25zdCBTaGFwZSYgc2hhcGUsIFNwYW5J
dGVyYXRvciBiZWdpbiwgU3Bhbkl0ZXJhdG9yIGVuZCkKK3sKKyAgICBmb3IgKFNwYW5JdGVyYXRv
ciBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGFwcGVuZFNwYW4oaXQtPnks
IHNoYXBlLnNlZ21lbnRzX2JlZ2luKGl0KSwgc2hhcGUuc2VnbWVudHNfZW5kKGl0KSk7Cit9CisK
K3ZvaWQgUmVnaW9uOjpTaGFwZTo6YXBwZW5kU2VnbWVudChpbnQgeCkKK3sKKyAgICBtX3NlZ21l
bnRzLmFwcGVuZCh4KTsKK30KKworUmVnaW9uOjpTaGFwZTo6U3Bhbkl0ZXJhdG9yIFJlZ2lvbjo6
U2hhcGU6OnNwYW5zX2JlZ2luKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zcGFucy5kYXRhKCk7
Cit9CisKK1JlZ2lvbjo6U2hhcGU6OlNwYW5JdGVyYXRvciBSZWdpb246OlNoYXBlOjpzcGFuc19l
bmQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NwYW5zLmRhdGEoKSArIG1fc3BhbnMuc2l6ZSgp
OworfQorCitSZWdpb246OlNoYXBlOjpTZWdtZW50SXRlcmF0b3IgUmVnaW9uOjpTaGFwZTo6c2Vn
bWVudHNfYmVnaW4oU3Bhbkl0ZXJhdG9yIGl0KSBjb25zdAoreworICAgIGFzc2VydChpdCA+PSBt
X3NwYW5zLmRhdGEoKSk7CisgICAgYXNzZXJ0KGl0IDwgbV9zcGFucy5kYXRhKCkgKyBtX3NwYW5z
LnNpemUoKSk7CisKKyAgICAvLyBDaGVjayBpZiB0aGlzIHNwYW4gaGFzIGFueSBzZWdtZW50cy4K
KyAgICBpZiAoaXQtPnNlZ21lbnRJbmRleCA9PSBtX3NlZ21lbnRzLnNpemUoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gJm1fc2VnbWVudHNbaXQtPnNlZ21lbnRJbmRleF07Cit9
CisKK1JlZ2lvbjo6U2hhcGU6OlNlZ21lbnRJdGVyYXRvciBSZWdpb246OlNoYXBlOjpzZWdtZW50
c19lbmQoU3Bhbkl0ZXJhdG9yIGl0KSBjb25zdAoreworICAgIGFzc2VydChpdCA+PSBtX3NwYW5z
LmRhdGEoKSk7CisgICAgYXNzZXJ0KGl0IDwgbV9zcGFucy5kYXRhKCkgKyBtX3NwYW5zLnNpemUo
KSk7CisKKyAgICAvLyBDaGVjayBpZiB0aGlzIHNwYW4gaGFzIGFueSBzZWdtZW50cy4KKyAgICBp
ZiAoaXQtPnNlZ21lbnRJbmRleCA9PSBtX3NlZ21lbnRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBhc3NlcnQoaXQgKyAxIDwgbV9zcGFucy5kYXRhKCkgKyBtX3NwYW5zLnNpemUo
KSk7CisgICAgcmV0dXJuICZtX3NlZ21lbnRzWyhpdCArIDEpLT5zZWdtZW50SW5kZXhdOworfQor
Cit2b2lkIFJlZ2lvbjo6U2hhcGU6OmR1bXAoKSBjb25zdAoreworICAgIGZvciAoU2hhcGU6OlNw
YW5JdGVyYXRvciBzcGFuID0gc3BhbnNfYmVnaW4oKSwgZW5kID0gc3BhbnNfZW5kKCk7IHNwYW4g
IT0gZW5kOyArK3NwYW4pIHsKKyAgICAgICAgcHJpbnRmKCIlNmQ6ICgiLCBzcGFuLT55KTsKKwor
ICAgICAgICBmb3IgKFNoYXBlOjpTZWdtZW50SXRlcmF0b3Igc2VnbWVudCA9IHNlZ21lbnRzX2Jl
Z2luKHNwYW4pLCBlbmQgPSBzZWdtZW50c19lbmQoc3Bhbik7IHNlZ21lbnQgIT0gZW5kOyArK3Nl
Z21lbnQpCisgICAgICAgICAgICBwcmludGYoIiVkICIsICpzZWdtZW50KTsKKyAgICAgICAgcHJp
bnRmKCIpXG4iKTsKKyAgICB9CisKKyAgICBwcmludGYoIlxuIik7Cit9CisKK0ludFJlY3QgUmVn
aW9uOjpTaGFwZTo6Ym91bmRzKCkgY29uc3QKK3sKKyAgICBpZiAoaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gSW50UmVjdCgpOworCisgICAgU3Bhbkl0ZXJhdG9yIHNwYW4gPSBzcGFuc19iZWdp
bigpOworICAgIGludCBtaW5ZID0gc3Bhbi0+eTsKKworICAgIFNwYW5JdGVyYXRvciBsYXN0U3Bh
biA9IHNwYW5zX2VuZCgpIC0gMTsKKyAgICBpbnQgbWF4WSA9IGxhc3RTcGFuLT55OworCisgICAg
aW50IG1pblggPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgIGludCBtYXhY
ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKKworICAgIHdoaWxlIChzcGFuICE9
IGxhc3RTcGFuKSB7CisgICAgICAgIFNlZ21lbnRJdGVyYXRvciBmaXJzdFNlZ21lbnQgPSBzZWdt
ZW50c19iZWdpbihzcGFuKTsKKyAgICAgICAgU2VnbWVudEl0ZXJhdG9yIGxhc3RTZWdtZW50ID0g
c2VnbWVudHNfZW5kKHNwYW4pIC0gMTsKKworICAgICAgICBpZiAoZmlyc3RTZWdtZW50ICYmIGxh
c3RTZWdtZW50KSB7CisgICAgICAgICAgICBhc3NlcnQoZmlyc3RTZWdtZW50ICE9IGxhc3RTZWdt
ZW50KTsKKworICAgICAgICAgICAgaWYgKCpmaXJzdFNlZ21lbnQgPCBtaW5YKQorICAgICAgICAg
ICAgICAgIG1pblggPSAqZmlyc3RTZWdtZW50OworCisgICAgICAgICAgICBpZiAoKmxhc3RTZWdt
ZW50ID4gbWF4WCkKKyAgICAgICAgICAgICAgICBtYXhYID0gKmxhc3RTZWdtZW50OworICAgICAg
ICB9CisKKyAgICAgICAgKytzcGFuOworICAgIH0KKworICAgIGFzc2VydChtaW5YIDw9IG1heFgp
OworICAgIGFzc2VydChtaW5ZIDw9IG1heFkpOworCisgICAgcmV0dXJuIEludFJlY3QobWluWCwg
bWluWSwgbWF4WCAtIG1pblgsIG1heFkgLSBtaW5ZKTsKK30KKwordm9pZCBSZWdpb246OlNoYXBl
Ojptb3ZlKGludCB4LCBpbnQgeSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc2Vn
bWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fc2VnbWVudHNbaV0gKz0geDsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fc3BhbnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fc3BhbnNb
aV0ueSArPSB5OworfQorCit2b2lkIFJlZ2lvbjo6U2hhcGU6OnN3YXAoU2hhcGUmIG90aGVyKQor
eworICAgIG1fc2VnbWVudHMuc3dhcChvdGhlci5tX3NlZ21lbnRzKTsKKyAgICBtX3NwYW5zLnN3
YXAob3RoZXIubV9zcGFucyk7Cit9CisKK2VudW0geworICAgIFNoYXBlMSwKKyAgICBTaGFwZTIs
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb24+CitSZWdpb246OlNoYXBlIFJlZ2lv
bjo6U2hhcGU6OnNoYXBlT3BlcmF0aW9uKGNvbnN0IFNoYXBlJiBzaGFwZTEsIGNvbnN0IFNoYXBl
JiBzaGFwZTIpCit7CisgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBiZSBzdGF0aWMgYXNzZXJ0
cy4KKyAgICBDT01QSUxFX0FTU0VSVCghKCFPcGVyYXRpb246OnNob3VsZEFkZFJlbWFpbmluZ1Nl
Z21lbnRzRnJvbVNwYW4xICYmIE9wZXJhdGlvbjo6c2hvdWxkQWRkUmVtYWluaW5nU2VnbWVudHNG
cm9tU3BhbjIpLCBpbnZhbGlkX3NlZ21lbnRfY29tYmluYXRpb24pOworICAgIENPTVBJTEVfQVNT
RVJUKCEoIU9wZXJhdGlvbjo6c2hvdWxkQWRkUmVtYWluaW5nU3BhbnNGcm9tU2hhcGUxICYmIE9w
ZXJhdGlvbjo6c2hvdWxkQWRkUmVtYWluaW5nU3BhbnNGcm9tU2hhcGUyKSwgaW52YWxpZF9zcGFu
X2NvbWJpbmF0aW9uKTsKKworICAgIFNoYXBlIHJlc3VsdDsKKyAgICBpZiAoT3BlcmF0aW9uOjp0
cnlTaW1wbGVPcGVyYXRpb24oc2hhcGUxLCBzaGFwZTIsIHJlc3VsdCkpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisKKyAgICBTcGFuSXRlcmF0b3Igc3BhbnMxID0gc2hhcGUxLnNwYW5zX2JlZ2lu
KCk7CisgICAgU3Bhbkl0ZXJhdG9yIHNwYW5zMUVuZCA9IHNoYXBlMS5zcGFuc19lbmQoKTsKKwor
ICAgIFNwYW5JdGVyYXRvciBzcGFuczIgPSBzaGFwZTIuc3BhbnNfYmVnaW4oKTsKKyAgICBTcGFu
SXRlcmF0b3Igc3BhbnMyRW5kID0gc2hhcGUyLnNwYW5zX2VuZCgpOworCisgICAgU2VnbWVudEl0
ZXJhdG9yIHNlZ21lbnRzMSA9IDA7CisgICAgU2VnbWVudEl0ZXJhdG9yIHNlZ21lbnRzMUVuZCA9
IDA7CisKKyAgICBTZWdtZW50SXRlcmF0b3Igc2VnbWVudHMyID0gMDsKKyAgICBTZWdtZW50SXRl
cmF0b3Igc2VnbWVudHMyRW5kID0gMDsKKworICAgIAorICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwg
c3BhbnMuCisgICAgd2hpbGUgKHNwYW5zMSAhPSBzcGFuczFFbmQgJiYgc3BhbnMyICE9IHNwYW5z
MkVuZCkgeworICAgICAgICBpbnQgeTsKKyAgICAgICAgaW50IHRlc3QgPSBzcGFuczEtPnkgLSBz
cGFuczItPnk7CisKKyAgICAgICAgaWYgKHRlc3QgPD0gMCkgeworICAgICAgICAgICAgeSA9IHNw
YW5zMS0+eTsKKworICAgICAgICAgICAgc2VnbWVudHMxID0gc2hhcGUxLnNlZ21lbnRzX2JlZ2lu
KHNwYW5zMSk7CisgICAgICAgICAgICBzZWdtZW50czFFbmQgPSBzaGFwZTEuc2VnbWVudHNfZW5k
KHNwYW5zMSk7CisgICAgICAgICAgICArK3NwYW5zMTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGVzdCA+PSAwKSB7CisgICAgICAgICAgICB5ID0gc3BhbnMyLT55OworCisgICAgICAgICAgICBz
ZWdtZW50czIgPSBzaGFwZTIuc2VnbWVudHNfYmVnaW4oc3BhbnMyKTsKKyAgICAgICAgICAgIHNl
Z21lbnRzMkVuZCA9IHNoYXBlMi5zZWdtZW50c19lbmQoc3BhbnMyKTsKKyAgICAgICAgICAgICsr
c3BhbnMyOworICAgICAgICB9CisKKyAgICAgICAgaW50IGZsYWcgPSAwOworICAgICAgICBpbnQg
b2xkRmxhZyA9IDA7CisKKyAgICAgICAgU2VnbWVudEl0ZXJhdG9yIHMxID0gc2VnbWVudHMxOwor
ICAgICAgICBTZWdtZW50SXRlcmF0b3IgczIgPSBzZWdtZW50czI7CisKKyAgICAgICAgc3RkOjp2
ZWN0b3I8aW50PiBzZWdtZW50czsKKworICAgICAgICAvLyBOb3cgaXRlcmF0ZSBvdmVyIHRoZSBz
ZWdtZW50cyBpbiBlYWNoIHNwYW4gYW5kIGNvbnN0cnVjdCBhIG5ldyB2ZWN0b3Igb2Ygc2VnbWVu
dHMuCisgICAgICAgIHdoaWxlIChzMSAhPSBzZWdtZW50czFFbmQgJiYgczIgIT0gc2VnbWVudHMy
RW5kKSB7CisgICAgICAgICAgICBpbnQgdGVzdCA9ICpzMSAtICpzMjsKKyAgICAgICAgICAgIGlu
dCB4OworCisgICAgICAgICAgICBpZiAodGVzdCA8PSAwKSB7CisgICAgICAgICAgICAgICAgeCA9
ICpzMTsKKyAgICAgICAgICAgICAgICBmbGFnID0gZmxhZyBeIDE7CisgICAgICAgICAgICAgICAg
KytzMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0ZXN0ID49IDApIHsKKyAgICAg
ICAgICAgICAgICB4ID0gKnMyOworICAgICAgICAgICAgICAgIGZsYWcgPSBmbGFnIF4gMjsKKyAg
ICAgICAgICAgICAgICArK3MyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZmxh
ZyA9PSBPcGVyYXRpb246Om9wQ29kZSB8fCBvbGRGbGFnID09IE9wZXJhdGlvbjo6b3BDb2RlKQor
ICAgICAgICAgICAgICAgIHNlZ21lbnRzLnB1c2hfYmFjayh4KTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgb2xkRmxhZyA9IGZsYWc7CisgICAgICAgIH0KKworICAgICAgICAvLyBBZGQgYW55
IHJlbWFpbmluZyBzZWdtZW50cy4KKyAgICAgICAgaWYgKE9wZXJhdGlvbjo6c2hvdWxkQWRkUmVt
YWluaW5nU2VnbWVudHNGcm9tU3BhbjEgJiYgczEgIT0gc2VnbWVudHMxRW5kKQorICAgICAgICAg
ICAgc2VnbWVudHMuaW5zZXJ0KHNlZ21lbnRzLmVuZCgpLCBzMSwgc2VnbWVudHMxRW5kKTsKKyAg
ICAgICAgZWxzZSBpZiAoT3BlcmF0aW9uOjpzaG91bGRBZGRSZW1haW5pbmdTZWdtZW50c0Zyb21T
cGFuMiAmJiBzMiAhPSBzZWdtZW50czJFbmQpCisgICAgICAgICAgICBzZWdtZW50cy5pbnNlcnQo
c2VnbWVudHMuZW5kKCksIHMyLCBzZWdtZW50czJFbmQpOworCisgICAgICAgIC8vIEFkZCB0aGUg
c3Bhbi4KKyAgICAgICAgaWYgKCFzZWdtZW50cy5lbXB0eSgpIHx8ICFyZXN1bHQuaXNFbXB0eSgp
KQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZFNwYW4oeSwgc2VnbWVudHMuZGF0YSgpLCBzZWdt
ZW50cy5kYXRhKCkgKyBzZWdtZW50cy5zaXplKCkpOworICAgIH0KKworICAgIC8vIEFkZCBhbnkg
cmVtYWluaW5nIHNwYW5zLgorICAgIGlmIChPcGVyYXRpb246OnNob3VsZEFkZFJlbWFpbmluZ1Nw
YW5zRnJvbVNoYXBlMSAmJiBzcGFuczEgIT0gc3BhbnMxRW5kKQorICAgICAgICByZXN1bHQuYXBw
ZW5kU3BhbnMoc2hhcGUxLCBzcGFuczEsIHNwYW5zMUVuZCk7CisgICAgZWxzZSBpZiAoT3BlcmF0
aW9uOjpzaG91bGRBZGRSZW1haW5pbmdTcGFuc0Zyb21TaGFwZTIgJiYgc3BhbnMyICE9IHNwYW5z
MkVuZCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZFNwYW5zKHNoYXBlMiwgc3BhbnMyLCBzcGFuczJF
bmQpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RydWN0IFJlZ2lvbjo6U2hhcGU6OlVu
aW9uT3BlcmF0aW9uIHsKKyAgICBzdGF0aWMgYm9vbCB0cnlTaW1wbGVPcGVyYXRpb24oY29uc3Qg
U2hhcGUmIHNoYXBlMSwgY29uc3QgU2hhcGUmIHNoYXBlMiwgU2hhcGUmIHJlc3VsdCkKKyAgICB7
CisgICAgICAgIGlmIChzaGFwZTEuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICByZXN1bHQgPSBz
aGFwZTI7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKHNoYXBlMi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNoYXBl
MTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBpbnQgb3BDb2RlID0gMDsKKworICAg
IHN0YXRpYyBjb25zdCBib29sIHNob3VsZEFkZFJlbWFpbmluZ1NlZ21lbnRzRnJvbVNwYW4xID0g
dHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzaG91bGRBZGRSZW1haW5pbmdTZWdtZW50c0Zy
b21TcGFuMiA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2hvdWxkQWRkUmVtYWluaW5n
U3BhbnNGcm9tU2hhcGUxID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzaG91bGRBZGRS
ZW1haW5pbmdTcGFuc0Zyb21TaGFwZTIgPSB0cnVlOworfTsKKworUmVnaW9uOjpTaGFwZSBSZWdp
b246OlNoYXBlOjp1bmlvblNoYXBlcyhjb25zdCBTaGFwZSYgc2hhcGUxLCBjb25zdCBTaGFwZSYg
c2hhcGUyKQoreworICAgIHJldHVybiBzaGFwZU9wZXJhdGlvbjxVbmlvbk9wZXJhdGlvbj4oc2hh
cGUxLCBzaGFwZTIpOworfQorCitzdHJ1Y3QgUmVnaW9uOjpTaGFwZTo6SW50ZXJzZWN0T3BlcmF0
aW9uIHsKKyAgICBzdGF0aWMgYm9vbCB0cnlTaW1wbGVPcGVyYXRpb24oY29uc3QgU2hhcGUmIHNo
YXBlMSwgY29uc3QgU2hhcGUmIHNoYXBlMiwgU2hhcGUmIHJlc3VsdCkKKyAgICB7CisgICAgICAg
IGlmIChzaGFwZTEuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICByZXN1bHQgPSBTaGFwZSgpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hhcGUy
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgcmVzdWx0ID0gc2hhcGUxOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IGludCBvcENvZGUgPSAzOworICAgIAorICAg
IHN0YXRpYyBjb25zdCBib29sIHNob3VsZEFkZFJlbWFpbmluZ1NlZ21lbnRzRnJvbVNwYW4xID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2hvdWxkQWRkUmVtYWluaW5nU2VnbWVudHNG
cm9tU3BhbjIgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzaG91bGRBZGRSZW1haW5p
bmdTcGFuc0Zyb21TaGFwZTEgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzaG91bGRB
ZGRSZW1haW5pbmdTcGFuc0Zyb21TaGFwZTIgPSBmYWxzZTsKK307CisKK1JlZ2lvbjo6U2hhcGUg
UmVnaW9uOjpTaGFwZTo6aW50ZXJzZWN0U2hhcGVzKGNvbnN0IFNoYXBlJiBzaGFwZTEsIGNvbnN0
IFNoYXBlJiBzaGFwZTIpCit7CisgICAgcmV0dXJuIHNoYXBlT3BlcmF0aW9uPEludGVyc2VjdE9w
ZXJhdGlvbj4oc2hhcGUxLCBzaGFwZTIpOworfQorCitzdHJ1Y3QgUmVnaW9uOjpTaGFwZTo6U3Vi
dHJhY3RPcGVyYXRpb24geworICAgIHN0YXRpYyBib29sIHRyeVNpbXBsZU9wZXJhdGlvbihjb25z
dCBTaGFwZSYgc2hhcGUxLCBjb25zdCBTaGFwZSYgc2hhcGUyLCBSZWdpb246OlNoYXBlJiByZXN1
bHQpCisgICAgeworICAgICAgICAKKyAgICAgICAgaWYgKHNoYXBlMS5pc0VtcHR5KCkgfHwgc2hh
cGUyLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgcmVzdWx0ID0gU2hhcGUoKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdCBpbnQgb3BDb2RlID0gMTsKKyAgICAK
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBzaG91bGRBZGRSZW1haW5pbmdTZWdtZW50c0Zyb21TcGFu
MSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2hvdWxkQWRkUmVtYWluaW5nU2VnbWVu
dHNGcm9tU3BhbjIgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzaG91bGRBZGRSZW1h
aW5pbmdTcGFuc0Zyb21TaGFwZTEgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIHNob3Vs
ZEFkZFJlbWFpbmluZ1NwYW5zRnJvbVNoYXBlMiA9IGZhbHNlOworfTsKKworUmVnaW9uOjpTaGFw
ZSBSZWdpb246OlNoYXBlOjpzdWJ0cmFjdFNoYXBlcyhjb25zdCBTaGFwZSYgc2hhcGUxLCBjb25z
dCBTaGFwZSYgc2hhcGUyKQoreworICAgIHJldHVybiBzaGFwZU9wZXJhdGlvbjxTdWJ0cmFjdE9w
ZXJhdGlvbj4oc2hhcGUxLCBzaGFwZTIpOworfQorCisjaWZuZGVmIE5ERUJVRwordm9pZCBSZWdp
b246OmR1bXAoKSBjb25zdAoreworICAgIHByaW50ZigiQm91bmRzOiAoJWQsICVkLCAlZCwgJWQp
XG4iLAorICAgICAgICAgICBtX2JvdW5kcy54KCksIG1fYm91bmRzLnkoKSwgbV9ib3VuZHMud2lk
dGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpOworICAgIG1fc2hhcGUuZHVtcCgpOworfQorI2VuZGlm
CisKK3ZvaWQgUmVnaW9uOjppbnRlcnNlY3QoY29uc3QgUmVnaW9uJiByZWdpb24pCit7CisgICAg
aWYgKCFtX2JvdW5kcy5pbnRlcnNlY3RzKHJlZ2lvbi5tX2JvdW5kcykpIHsKKyAgICAgICAgbV9z
aGFwZSA9IFNoYXBlKCk7CisgICAgICAgIG1fYm91bmRzID0gSW50UmVjdCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgU2hhcGUgaW50ZXJzZWN0ZWRTaGFwZSA9IFNoYXBlOjppbnRl
cnNlY3RTaGFwZXMobV9zaGFwZSwgcmVnaW9uLm1fc2hhcGUpOworCisgICAgbV9zaGFwZS5zd2Fw
KGludGVyc2VjdGVkU2hhcGUpOworICAgIG1fYm91bmRzID0gbV9zaGFwZS5ib3VuZHMoKTsKK30K
Kwordm9pZCBSZWdpb246OnVuaXRlKGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQoreworICAgIFNoYXBl
IHVuaXRlZFNoYXBlID0gU2hhcGU6OnVuaW9uU2hhcGVzKG1fc2hhcGUsIHJlZ2lvbi5tX3NoYXBl
KTsKKworICAgIG1fc2hhcGUuc3dhcCh1bml0ZWRTaGFwZSk7CisgICAgbV9ib3VuZHMudW5pdGUo
cmVnaW9uLm1fYm91bmRzKTsKK30KKwordm9pZCBSZWdpb246OnN1YnRyYWN0KGNvbnN0IFJlZ2lv
biYgcmVnaW9uKQoreworICAgIFNoYXBlIHN1YnRyYWN0ZWRTaGFwZSA9IFNoYXBlOjpzdWJ0cmFj
dFNoYXBlcyhtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7CisKKyAgICBtX3NoYXBlLnN3YXAoc3Vi
dHJhY3RlZFNoYXBlKTsKKyAgICBtX2JvdW5kcyA9IG1fc2hhcGUuYm91bmRzKCk7Cit9CisKK3Zv
aWQgUmVnaW9uOjptb3ZlKGludCB4LCBpbnQgeSkKK3sKKyAgICBtX2JvdW5kcy5tb3ZlKHgsIHkp
OworICAgIG1fc2hhcGUubW92ZSh4LCB5KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
SW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vUmVnaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9Q
bGF0Zm9ybS9SZWdpb24uaAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvUGxhdGZvcm0vUmVnaW9u
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBSZWdpb25faAorI2RlZmluZSBSZWdpb25faAorCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRS
ZWN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8dmVjdG9yPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVnaW9uIHsKK3B1YmxpYzoKKyAgICBSZWdpb24o
KTsKKyAgICBSZWdpb24oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworCisgICAgV2ViQ29yZTo6
SW50UmVjdCBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQorICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzLmlzRW1wdHkoKTsgfQorCisgICAgVmVjdG9y
PFdlYkNvcmU6OkludFJlY3Q+IHJlY3RzKCkgY29uc3Q7CisKKyAgICB2b2lkIHVuaXRlKGNvbnN0
IFJlZ2lvbiYpOworICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IFJlZ2lvbiYpOworICAgIHZvaWQg
c3VidHJhY3QoY29uc3QgUmVnaW9uJik7CisKKyAgICB2b2lkIG1vdmUoaW50IHgsIGludCB5KTsK
KworI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoKSBjb25zdDsKKyNlbmRpZgorCitwcml2
YXRlOgorICAgIHN0cnVjdCBTcGFuIHsKKyAgICAgICAgU3BhbihpbnQgeSwgc2l6ZV90IHNlZ21l
bnRJbmRleCkKKyAgICAgICAgICAgIDogeSh5KSwgc2VnbWVudEluZGV4KHNlZ21lbnRJbmRleCkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaW50IHk7CisgICAgICAgIHNpemVfdCBz
ZWdtZW50SW5kZXg7CisgICAgfTsKKworICAgIGNsYXNzIFNoYXBlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFNoYXBlKCk7CisgICAgICAgIFNoYXBlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsK
KworICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kcygpIGNvbnN0OworICAgICAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3NwYW5zLmlzRW1wdHkoKTsgfQorCisgICAgICAg
IHR5cGVkZWYgY29uc3QgU3BhbiogU3Bhbkl0ZXJhdG9yOworICAgICAgICBTcGFuSXRlcmF0b3Ig
c3BhbnNfYmVnaW4oKSBjb25zdDsKKyAgICAgICAgU3Bhbkl0ZXJhdG9yIHNwYW5zX2VuZCgpIGNv
bnN0OworICAgICAgICAKKyAgICAgICAgdHlwZWRlZiBjb25zdCBpbnQqIFNlZ21lbnRJdGVyYXRv
cjsKKyAgICAgICAgU2VnbWVudEl0ZXJhdG9yIHNlZ21lbnRzX2JlZ2luKFNwYW5JdGVyYXRvcikg
Y29uc3Q7CisgICAgICAgIFNlZ21lbnRJdGVyYXRvciBzZWdtZW50c19lbmQoU3Bhbkl0ZXJhdG9y
KSBjb25zdDsKKworICAgICAgICBzdGF0aWMgU2hhcGUgdW5pb25TaGFwZXMoY29uc3QgU2hhcGUm
IHNoYXBlMSwgY29uc3QgU2hhcGUmIHNoYXBlMik7CisgICAgICAgIHN0YXRpYyBTaGFwZSBpbnRl
cnNlY3RTaGFwZXMoY29uc3QgU2hhcGUmIHNoYXBlMSwgY29uc3QgU2hhcGUmIHNoYXBlMik7Cisg
ICAgICAgIHN0YXRpYyBTaGFwZSBzdWJ0cmFjdFNoYXBlcyhjb25zdCBTaGFwZSYgc2hhcGUxLCBj
b25zdCBTaGFwZSYgc2hhcGUyKTsKKworICAgICAgICB2b2lkIG1vdmUoaW50IHgsIGludCB5KTsK
KyAgICAgICAgdm9pZCBzd2FwKFNoYXBlJik7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIHZv
aWQgZHVtcCgpIGNvbnN0OworI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgICBzdHJ1Y3Qg
VW5pb25PcGVyYXRpb247CisgICAgICAgIHN0cnVjdCBJbnRlcnNlY3RPcGVyYXRpb247CisgICAg
ICAgIHN0cnVjdCBTdWJ0cmFjdE9wZXJhdGlvbjsKKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wZXJhdGlvbj4KKyAgICAgICAgc3RhdGljIFNoYXBlIHNoYXBlT3BlcmF0aW9u
KGNvbnN0IFNoYXBlJiBzaGFwZTEsIGNvbnN0IFNoYXBlJiBzaGFwZTIpOworCisgICAgICAgIHZv
aWQgYXBwZW5kU2VnbWVudChpbnQgeCk7CisgICAgICAgIHZvaWQgYXBwZW5kU3BhbihpbnQgeSk7
CisgICAgICAgIHZvaWQgYXBwZW5kU3BhbihpbnQgeSwgU2VnbWVudEl0ZXJhdG9yIGJlZ2luLCBT
ZWdtZW50SXRlcmF0b3IgZW5kKTsKKyAgICAgICAgdm9pZCBhcHBlbmRTcGFucyhjb25zdCBTaGFw
ZSYsIFNwYW5JdGVyYXRvciBiZWdpbiwgU3Bhbkl0ZXJhdG9yIGVuZCk7CisKKyAgICAgICAgYm9v
bCBjYW5Db2FsZXNjZShTZWdtZW50SXRlcmF0b3IgYmVnaW4sIFNlZ21lbnRJdGVyYXRvciBlbmQp
OworCisgICAgICAgIC8vIEZJWE1FOiBUaGVzZSB2ZWN0b3JzIHNob3VsZCBoYXZlIGlubGluZSBz
aXplcy4gRmlndXJlIG91dCBhIGdvb2Qgb3B0aW1hbCB2YWx1ZS4KKyAgICAgICAgVmVjdG9yPGlu
dD4gbV9zZWdtZW50czsKKyAgICAgICAgVmVjdG9yPFNwYW4+IG1fc3BhbnM7ICAgICAgICAKKyAg
ICB9OworCisgICAgV2ViQ29yZTo6SW50UmVjdCBtX2JvdW5kczsKKyAgICBTaGFwZSBtX3NoYXBl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBSZWdpb25faApJbmRl
eDogV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc1
NTU4KQorKysgV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTEzMyw2ICsxMzMsOCBAQAogCQkxQTY0MjI5QTEyREQwMjkyMDBDQUFFMkMg
LyogRHJhd2luZ0FyZWFNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE2NDIyOTgxMkREMDI5MjAwQ0FBRTJDIC8qIERyYXdpbmdBcmVhTWVz
c2FnZXMuaCAqLzsgfTsKIAkJMUE2NDIzMDgxMkREMDlFQjAwQ0FBRTJDIC8qIERyYXdpbmdBcmVh
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE2NDIzMDYxMkREMDlFQjAwQ0FBRTJDIC8qIERyYXdpbmdBcmVhUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQkxQTY0MjMwOTEyREQwOUVCMDBDQUFFMkMg
LyogRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTY0MjMwNzEyREQwOUVCMDBDQUFFMkMgLyogRHJhd2luZ0Fy
ZWFQcm94eU1lc3NhZ2VzLmggKi87IH07CisJCTFBNjQyMzUyMTJERDE4N0MwMENBQUUyQyAvKiBS
ZWdpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUE2NDIzNTAxMkREMTg3QzAwQ0FBRTJDIC8qIFJlZ2lvbi5jcHAgKi87IH07CisJCTFBNjQyMzUz
MTJERDE4N0MwMENBQUUyQyAvKiBSZWdpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBNjQyMzUxMTJERDE4N0MwMENBQUUyQyAvKiBSZWdpb24uaCAq
LzsgfTsKIAkJMUE2RjlGOTAxMUUxM0VGQzAwREIxMzcxIC8qIENvbW1hbmRMaW5lLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTZGOUY4RTExRTEzRUZD
MDBEQjEzNzEgLyogQ29tbWFuZExpbmUuaCAqLzsgfTsKIAkJMUE2RjlGQjcxMUUxNDA4NTAwREIx
MzcxIC8qIENvbW1hbmRMaW5lTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBNkY5RkI2MTFFMTQwODUwMERCMTM3MSAvKiBDb21tYW5kTGluZU1h
Yy5jcHAgKi87IH07CiAJCTFBNkZBMDFFMTFFMTUyNjMwMERCMTM3MSAvKiBXZWJQcm9jZXNzTWFp
bk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
NkZBMDFEMTFFMTUyNjMwMERCMTM3MSAvKiBXZWJQcm9jZXNzTWFpbk1hYy5tbSAqLzsgfTsKQEAg
LTg0Nyw2ICs4NDksOCBAQAogCQkxQTY0MjJGQzEyREQwOEZFMDBDQUFFMkMgLyogRHJhd2luZ0Fy
ZWFQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBEcmF3aW5nQXJlYVBy
b3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTY0MjMwNjEy
REQwOUVCMDBDQUFFMkMgLyogRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEcmF3aW5nQXJlYVByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcDsgcGF0aCA9IC9Vc2Vycy9hbmRlcnNjYS9CdWlsZC9EZWJ1Zy9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL0RyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQkxQTY0MjMwNzEyREQwOUVCMDBDQUFFMkMgLyog
RHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oOyBwYXRoID0gL1VzZXJzL2FuZGVyc2NhL0J1
aWxkL0RlYnVnL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2Vz
Lmg7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CisJCTFBNjQyMzUwMTJERDE4N0MwMENB
QUUyQyAvKiBSZWdpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVnaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE2NDIzNTExMkREMTg3
QzAwQ0FBRTJDIC8qIFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZWdpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE2RjlGOEUxMUUxM0VGQzAw
REIxMzcxIC8qIENvbW1hbmRMaW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvbW1hbmRMaW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNkY5RkI2MTFF
MTQwODUwMERCMTM3MSAvKiBDb21tYW5kTGluZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb21tYW5kTGluZU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBNkZBMDFEMTFFMTUyNjMwMERCMTM3MSAvKiBXZWJQcm9jZXNzTWFpbk1hYy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlByb2Nlc3NNYWlu
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQwMSw2ICsyNDA1LDggQEAK
IAkJCQlDMEUzQUE0NTEyMDlFMkJBMDBBNDlEMDEgLyogTW9kdWxlLmNwcCAqLywKIAkJCQlDMEUz
QUE0NDEyMDlFMkJBMDBBNDlEMDEgLyogTW9kdWxlLmggKi8sCiAJCQkJQkM4NzgwRkIxMTYxQzJC
ODAwQ0MyNzY4IC8qIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCAqLywKKwkJCQkxQTY0MjM1
MDEyREQxODdDMDBDQUFFMkMgLyogUmVnaW9uLmNwcCAqLywKKwkJCQkxQTY0MjM1MTEyREQxODdD
MDBDQUFFMkMgLyogUmVnaW9uLmggKi8sCiAJCQkJQkMyRTZFNzcxMTQxOTcwQzAwQTYzQjFFIC8q
IFJ1bkxvb3AuY3BwICovLAogCQkJCUJDMkU2RTc4MTE0MTk3MEMwMEE2M0IxRSAvKiBSdW5Mb29w
LmggKi8sCiAJCQkJMUEyNEJFRDMxMjA4OTREMTAwRkJCMDU5IC8qIFNoYXJlZE1lbW9yeS5oICov
LApAQCAtMzAwNCw2ICszMDEwLDcgQEAKIAkJCQkxQTY0MjFGNjEyRENGQkFCMDBDQUFFMkMgLyog
RHJhd2luZ0FyZWFJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY0MjI5QTEyREQwMjkyMDBD
QUFFMkMgLyogRHJhd2luZ0FyZWFNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2NDIz
MDkxMkREMDlFQjAwQ0FBRTJDIC8qIERyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMUE2NDIzNTMxMkREMTg3QzAwQ0FBRTJDIC8qIFJlZ2lvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0zNDU2LDYgKzM0NjMsNyBAQAogCQkJCTFBNjQyMUY3MTJEQ0ZCQUIwMENBQUUy
QyAvKiBEcmF3aW5nQXJlYUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2NDIyOTkxMkRE
MDI5MjAwQ0FBRTJDIC8qIERyYXdpbmdBcmVhTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBNjQyMzA4MTJERDA5RUIwMENBQUUyQyAvKiBEcmF3aW5nQXJlYVByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNjQyMzUyMTJERDE4N0MwMENB
QUUyQyAvKiBSZWdpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Cg==
</data>
<flag name="review"
          id="69954"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>