<?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>130274</bug_id>
          
          <creation_ts>2014-03-14 16:54:02 -0700</creation_ts>
          <short_desc>[Mac] Rewrite WebHTMLConverter::_computedStringForNode in C++</short_desc>
          <delta_ts>2014-03-17 15:05:05 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</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>
          
          <blocked>130227</blocked>
    
    <blocked>130284</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>andersca</cc>
    
    <cc>enrica</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>990739</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-03-14 16:54:02 -0700</bug_when>
    <thetext>_computedStringForNode should be rewritten in C++ for performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990747</commentid>
    <comment_count>1</comment_count>
      <attachid>226781</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-03-14 17:05:54 -0700</bug_when>
    <thetext>Created attachment 226781
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990748</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-03-14 17:06:31 -0700</bug_when>
    <thetext>This reduces the runtime from 25-26s to 21-22s (another 20% improvement).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990891</commentid>
    <comment_count>3</comment_count>
      <attachid>226781</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-03-15 14:46:04 -0700</bug_when>
    <thetext>Comment on attachment 226781
Cleanup

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

&gt; Source/WebCore/platform/mac/HTMLConverter.mm:631
&gt; +    if (RefPtr&lt;CSSValue&gt; value = computedStylePropertyForElement(element, propertyName)) {
&gt; +        String result;
&gt; +        if (stringFromCSSValue(*value, result))
&gt; +            return result;
&gt; +    }
&gt; +
&gt; +    if (RefPtr&lt;CSSValue&gt; value = computedStylePropertyForElement(element, propertyName)) {
&gt; +        String result;
&gt; +        if (value-&gt;isInheritedValue())
&gt; +            inherit = true;
&gt; +        else if (stringFromCSSValue(*value, result))
&gt; +            return result;
&gt; +    }

Why are we calling computedStylePropertyForElement(element, propertyName) twice here?

&gt; Source/WebCore/platform/mac/HTMLConverter.mm:720
&gt; +        if (Node* parent = node.parentNode())

This is really a ContainerNode*.

&gt; Source/WebCore/platform/mac/HTMLConverter.mm:733
&gt; +    if (!result.length())

I&apos;d use isEmpty() here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990892</commentid>
    <comment_count>4</comment_count>
      <attachid>226781</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-03-15 14:46:05 -0700</bug_when>
    <thetext>Comment on attachment 226781
Cleanup

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

&gt; Source/WebCore/platform/mac/HTMLConverter.mm:631
&gt; +    if (RefPtr&lt;CSSValue&gt; value = computedStylePropertyForElement(element, propertyName)) {
&gt; +        String result;
&gt; +        if (stringFromCSSValue(*value, result))
&gt; +            return result;
&gt; +    }
&gt; +
&gt; +    if (RefPtr&lt;CSSValue&gt; value = computedStylePropertyForElement(element, propertyName)) {
&gt; +        String result;
&gt; +        if (value-&gt;isInheritedValue())
&gt; +            inherit = true;
&gt; +        else if (stringFromCSSValue(*value, result))
&gt; +            return result;
&gt; +    }

Why are we calling computedStylePropertyForElement(element, propertyName) twice here?

&gt; Source/WebCore/platform/mac/HTMLConverter.mm:720
&gt; +        if (Node* parent = node.parentNode())

This is really a ContainerNode*.

&gt; Source/WebCore/platform/mac/HTMLConverter.mm:733
&gt; +    if (!result.length())

I&apos;d use isEmpty() here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991064</commentid>
    <comment_count>5</comment_count>
      <attachid>226781</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-03-16 19:17:15 -0700</bug_when>
    <thetext>Comment on attachment 226781
Cleanup

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

&gt;&gt;&gt; Source/WebCore/platform/mac/HTMLConverter.mm:631
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; Why are we calling computedStylePropertyForElement(element, propertyName) twice here?
&gt; 
&gt; Why are we calling computedStylePropertyForElement(element, propertyName) twice here?

Oops, the second is supposed to be calling computedStylePropertyForElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991379</commentid>
    <comment_count>6</comment_count>
      <attachid>226959</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-03-17 14:00:12 -0700</bug_when>
    <thetext>Created attachment 226959
Fixed the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991413</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-03-17 15:05:05 -0700</bug_when>
    <thetext>Committed r165761: &lt;http://trac.webkit.org/changeset/165761&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226781</attachid>
            <date>2014-03-14 17:05:54 -0700</date>
            <delta_ts>2014-03-17 14:00:09 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-130274-20140314170535.patch</filename>
            <type>text/plain</type>
            <size>17486</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTY2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE0LTAzLTE0ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFtNYWNdIFJld3JpdGUgV2ViSFRN
TENvbnZlcnRlcjo6X2NvbXB1dGVkU3RyaW5nRm9yTm9kZSBpbiBDKysKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDI3NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJld3JvdGUgV2ViSFRNTENvbnZlcnRl
cjo6X2NvbXB1dGVkU3RyaW5nRm9yTm9kZSBhcyBIVE1MQ29udmVydGVyQ2FjaGVzOjpwcm9wZXJ0
eVZhbHVlRm9yTm9kZS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLmg6
IFJlbW92ZWQgdW51c2VkIGNhY2hlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvSFRNTENvbnZl
cnRlci5tbToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmNvbXB1dGVkU3R5bGVQcm9w
ZXJ0eUZvckVsZW1lbnQpOiBBZGRlZCB1c2UgY29uc3QgU3RyaW5nJiBpbnN0ZWFkIG9mIFN0cmlu
ZyYgb24gcHJvcGVydHkgbmFtZS4KKyAgICAgICAgKEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmlubGlu
ZVN0eWxlUHJvcGVydHlGb3JFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChIVE1MQ29udmVydGVy
Q2FjaGVzOjpwcm9wZXJ0eVZhbHVlRm9yTm9kZSk6IFJlbmFtZWQgYW5kIHJld3JpdHRlbiBmcm9t
IF9jb21wdXRlZFN0cmluZ0Zvck5vZGUuCisgICAgICAgICgtW1dlYkhUTUxDb252ZXJ0ZXIgX3N0
cmluZ0Zvck5vZGU6cHJvcGVydHk6XSk6IFNpbXBseSByZXR1cm4gdGhlIGNvbXB1dGVkIHZhbHVl
IGluc3RlYWQgb2Ygc3RvcmluZyBpdCBpbiB0aGUgY2FjaGUKKyAgICAgICAgbm93IHRoYXQgdGhl
IGNvbXB1dGluZyB0aGUgdmFsdWUgaXMgZmFzdC4KKyAgICAgICAgKC1bV2ViSFRNTENvbnZlcnRl
ciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkhUTUxDb252ZXJ0ZXIgaW5pdF0pOgorCiAyMDE0
LTAzLTE0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IFJlbGVhc2UtYXNzZXJ0IGlmIHNvbWVvbmUgc3RhcnRzIHRoZSBXZWJUaHJlYWQgaW4gdGhlIFdl
YlByb2Nlc3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9IVE1MQ29udmVydGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hUTUxDb252ZXJ0
ZXIuaAkocmV2aXNpb24gMTY1NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hU
TUxDb252ZXJ0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsOCArNTYsNiBAQCBAaW50ZXJmYWNl
IFdlYkhUTUxDb252ZXJ0ZXIgOiBOU09iamVjdCB7CiAgICAgTlNNdXRhYmxlQXJyYXkgKl90ZXh0
VGFibGVSb3dzOwogICAgIE5TTXV0YWJsZUFycmF5ICpfdGV4dFRhYmxlUm93QXJyYXlzOwogICAg
IE5TTXV0YWJsZUFycmF5ICpfdGV4dFRhYmxlUm93QmFja2dyb3VuZENvbG9yczsKLSAgICBOU011
dGFibGVEaWN0aW9uYXJ5ICpfc3BlY2lmaWVkU3R5bGVzRm9yRWxlbWVudHM7Ci0gICAgTlNNdXRh
YmxlRGljdGlvbmFyeSAqX3N0cmluZ3NGb3JOb2RlczsKICAgICBOU011dGFibGVEaWN0aW9uYXJ5
ICpfZmxvYXRzRm9yTm9kZXM7CiAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2NvbG9yc0Zvck5v
ZGVzOwogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKl9hdHRyaWJ1dGVzRm9yRWxlbWVudHM7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5tbQkocmV2
aXNpb24gMTY1NjQyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hUTUxDb252ZXJ0
ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTQwMCw4ICs0MDAsMTAgQEAgY29uc3QgdW5pY2hhciBX
ZWJOZXh0TGluZUNoYXJhY3RlciA9IDB4MAogCiBjbGFzcyBIVE1MQ29udmVydGVyQ2FjaGVzIHsK
IHB1YmxpYzoKLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjb21wdXRlZFN0eWxlUHJvcGVydHlG
b3JFbGVtZW50KEVsZW1lbnQmLCBTdHJpbmcmKTsKLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBp
bmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChFbGVtZW50JiwgU3RyaW5nJik7CisgICAgU3Ry
aW5nIHByb3BlcnR5VmFsdWVGb3JOb2RlKE5vZGUmLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSk7CisKKyAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JF
bGVtZW50KEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBpbmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChFbGVtZW50JiwgY29uc3QgU3RyaW5nJik7
CiAKIHByaXZhdGU6CiAgICAgSGFzaE1hcDxFbGVtZW50Kiwgc3RkOjp1bmlxdWVfcHRyPENvbXB1
dGVkU3R5bGVFeHRyYWN0b3I+PiBtX2NvbXB1dGVkU3R5bGVzOwpAQCAtNTYxLDcgKzU2Myw3IEBA
IC0gKE5TQXJyYXkgKilfY2hpbGRyZW5Gb3JOb2RlOihET01Ob2RlICoKICAgICByZXR1cm4gYXJy
YXk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTVmFsdWU+IEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmNvbXB1
dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBIVE1MQ29udmVydGVyQ2FjaGVzOjpjb21w
dXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlOYW1lKQogewogICAgIENTU1Byb3BlcnR5SUQgcHJvcGV0eUlkID0gY3NzUHJv
cGVydHlJRChwcm9wZXJ0eU5hbWUpOwogICAgIGlmIChwcm9wZXR5SWQgPT0gQ1NTUHJvcGVydHlJ
bnZhbGlkKQpAQCAtNTc0LDcgKzU3Niw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IEhUTUxDb252
ZXJ0ZXJDYWNoZXMKICAgICByZXR1cm4gY29tcHV0ZWRTdHlsZS5wcm9wZXJ0eVZhbHVlKHByb3Bl
dHlJZCk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTVmFsdWU+IEhUTUxDb252ZXJ0ZXJDYWNoZXM6Omlu
bGluZVN0eWxlUHJvcGVydHlGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIFN0cmluZyYgcHJv
cGVydHlOYW1lKQorUGFzc1JlZlB0cjxDU1NWYWx1ZT4gSFRNTENvbnZlcnRlckNhY2hlczo6aW5s
aW5lU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5n
JiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXR5SWQgPSBjc3NQcm9w
ZXJ0eUlEKHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKHByb3BldHlJZCA9PSBDU1NQcm9wZXJ0eUlu
dmFsaWQgfHwgIWVsZW1lbnQuaXNTdHlsZWRFbGVtZW50KCkpCkBAIC02MDQsMTMxICs2MDYsMTMy
IEBAIHN0YXRpYyBib29sIHN0cmluZ0Zyb21DU1NWYWx1ZShDU1NWYWx1ZSYKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLS0gKE5TU3RyaW5nICopX2NvbXB1dGVkU3RyaW5nRm9yTm9kZTooRE9NTm9k
ZSAqKW5vZGUgcHJvcGVydHk6KE5TU3RyaW5nICopa2V5CitTdHJpbmcgSFRNTENvbnZlcnRlckNh
Y2hlczo6cHJvcGVydHlWYWx1ZUZvck5vZGUoTm9kZSYgbm9kZSwgY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgYm9vbCBoYXZlUmVzdWx0ID0gZmFsc2U7Ci0gICAgU3RyaW5nIHJl
c3VsdDsKLSAgICBib29sIGluaGVyaXQgPSB0cnVlOwotICAgIE5vZGUqIGNvcmVOb2RlID0gY29y
ZShub2RlKTsKLSAgICBpZiAoY29yZU5vZGUgJiYgY29yZU5vZGUtPmlzRWxlbWVudE5vZGUoKSkg
ewotICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gdG9FbGVtZW50KCpjb3JlTm9kZSk7Ci0gICAg
ICAgIFN0cmluZyBwcm9wZXJ0eU5hbWUgPSBrZXk7Ci0gICAgICAgIGluaGVyaXQgPSBmYWxzZTsK
LSAgICAgICAgaWYgKCFoYXZlUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPENTU1Zh
bHVlPiB2YWx1ZSA9IF9jYWNoZXMtPmNvbXB1dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxl
bWVudCwgcHJvcGVydHlOYW1lKSkKLSAgICAgICAgICAgICAgICBoYXZlUmVzdWx0ID0gc3RyaW5n
RnJvbUNTU1ZhbHVlKCp2YWx1ZSwgcmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWhh
dmVSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gX2Nh
Y2hlcy0+Y29tcHV0ZWRTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eU5h
bWUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpCi0g
ICAgICAgICAgICAgICAgICAgIGluaGVyaXQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgaGF2ZVJlc3VsdCA9IHN0cmluZ0Zyb21DU1NWYWx1ZSgqdmFs
dWUsIHJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgRWxlbWVudCog
Y29yZUVsZW1lbnQgPSAmZWxlbWVudDsKLSAgICAgICAgaWYgKCFoYXZlUmVzdWx0KSB7Ci0gICAg
ICAgICAgICBpZiAoW0AiZGlzcGxheSIgaXNFcXVhbFRvU3RyaW5nOmtleV0pIHsKLSAgICAgICAg
ICAgICAgICBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoaGVhZFRhZykgfHwgY29yZUVsZW1l
bnQtPmhhc1RhZ05hbWUoc2NyaXB0VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShhcHBs
ZXRUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKG5vZnJhbWVzVGFnKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gIm5vbmUiOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNv
cmVFbGVtZW50LT5oYXNUYWdOYW1lKGFkZHJlc3NUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdO
YW1lKGJsb2NrcXVvdGVUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGJvZHlUYWcpIHx8
IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGNlbnRlclRhZykKLSAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShkZFRhZykgfHwgY29yZUVsZW1lbnQtPmhh
c1RhZ05hbWUoZGlyVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShkaXZUYWcpIHx8IGNv
cmVFbGVtZW50LT5oYXNUYWdOYW1lKGRsVGFnKQotICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGR0VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFt
ZShmaWVsZHNldFRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRhZykgfHwgY29y
ZUVsZW1lbnQtPmhhc1RhZ05hbWUoZnJhbWVUYWcpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
fHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoZnJhbWVzZXRUYWcpIHx8IGNvcmVFbGVtZW50LT5o
YXNUYWdOYW1lKGhyVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBj
b3JlRWxlbWVudC0+aGFzVGFnTmFtZShoMVRhZykKLSAgICAgICAgICAgICAgICAgICAgICAgICB8
fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShoMlRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05h
bWUoaDNUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGg0VGFnKSB8fCBjb3JlRWxlbWVu
dC0+aGFzVGFnTmFtZShoNVRhZykKLSAgICAgICAgICAgICAgICAgICAgICAgICB8fCBjb3JlRWxl
bWVudC0+aGFzVGFnTmFtZShoNlRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoaWZyYW1l
VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShtZW51VGFnKSB8fCBjb3JlRWxlbWVudC0+
aGFzVGFnTmFtZShub3NjcmlwdFRhZykKLSAgICAgICAgICAgICAgICAgICAgICAgICB8fCBjb3Jl
RWxlbWVudC0+aGFzVGFnTmFtZShvbFRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUocFRh
ZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUocHJlVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFz
VGFnTmFtZSh1bFRhZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJibG9jayI7Ci0g
ICAgICAgICAgICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUobGlUYWcpKQot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAibGlzdC1pdGVtIjsKLSAgICAgICAgICAgICAg
ICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCi0gICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9ICJ0YWJsZSI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29y
ZUVsZW1lbnQtPmhhc1RhZ05hbWUodHJUYWcpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSAidGFibGUtcm93IjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFz
VGFnTmFtZSh0aFRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUodGRUYWcpKQotICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSAidGFibGUtY2VsbCI7Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUodGhlYWRUYWcpKQotICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSAidGFibGUtaGVhZGVyLWdyb3VwIjsKLSAgICAgICAgICAgICAgICBlbHNl
IGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh0Ym9keVRhZykpCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9ICJ0YWJsZS1yb3ctZ3JvdXAiOwotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHRmb290VGFnKSkKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gInRhYmxlLWZvb3Rlci1ncm91cCI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
Y29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoY29sVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gInRhYmxlLWNvbHVtbiI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29yZUVsZW1l
bnQtPmhhc1RhZ05hbWUoY29sZ3JvdXBUYWcpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSAidGFibGUtY29sdW1uLWdyb3VwIjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3JlRWxl
bWVudC0+aGFzVGFnTmFtZShjYXB0aW9uVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gInRhYmxlLWNhcHRpb24iOwotICAgICAgICAgICAgfSBlbHNlIGlmIChbQCJ3aGl0ZS1zcGFj
ZSIgaXNFcXVhbFRvU3RyaW5nOmtleV0pIHsKLSAgICAgICAgICAgICAgICBpZiAoY29yZUVsZW1l
bnQtPmhhc1RhZ05hbWUocHJlVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gInBy
ZSI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBpbmhlcml0ID0g
WUVTOwotICAgICAgICAgICAgfSBlbHNlIGlmIChbQCJmb250LXN0eWxlIiBpc0VxdWFsVG9TdHJp
bmc6a2V5XSkgewotICAgICAgICAgICAgICAgIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShp
VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShjaXRlVGFnKSB8fCBjb3JlRWxlbWVudC0+
aGFzVGFnTmFtZShlbVRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUodmFyVGFnKSB8fCBj
b3JlRWxlbWVudC0+aGFzVGFnTmFtZShhZGRyZXNzVGFnKSkKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gIml0YWxpYyI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBpbmhlcml0ID0gWUVTOwotICAgICAgICAgICAgfSBlbHNlIGlmIChbQCJmb250LXdlaWdo
dCIgaXNFcXVhbFRvU3RyaW5nOmtleV0pIHsKLSAgICAgICAgICAgICAgICBpZiAoY29yZUVsZW1l
bnQtPmhhc1RhZ05hbWUoYlRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoc3Ryb25nVGFn
KSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh0aFRhZykpCi0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9ICJib2xkZXIiOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgaW5oZXJpdCA9IFlFUzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoW0AidGV4dC1kZWNv
cmF0aW9uIiBpc0VxdWFsVG9TdHJpbmc6a2V5XSkgewotICAgICAgICAgICAgICAgIGlmIChjb3Jl
RWxlbWVudC0+aGFzVGFnTmFtZSh1VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShpbnNU
YWcpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAidW5kZXJsaW5lIjsKLSAgICAgICAg
ICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShzVGFnKSB8fCBjb3JlRWxl
bWVudC0+aGFzVGFnTmFtZShzdHJpa2VUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGRl
bFRhZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJsaW5lLXRocm91Z2giOwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgaW5oZXJpdCA9IFlFUzsgLy8g
Pz8/IHRoaXMgaXMgbm90IHN0cmljdGx5IGNvcnJlY3QKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
W0AidGV4dC1hbGlnbiIgaXNFcXVhbFRvU3RyaW5nOmtleV0pIHsKLSAgICAgICAgICAgICAgICBp
ZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoY2VudGVyVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFz
VGFnTmFtZShjYXB0aW9uVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh0aFRhZykpCi0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJjZW50ZXIiOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgaW5oZXJpdCA9IFlFUzsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoW0AidmVydGljYWwtYWxpZ24iIGlzRXF1YWxUb1N0cmluZzprZXldKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHN1cFRhZykpCi0gICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9ICJzdXBlciI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29y
ZUVsZW1lbnQtPmhhc1RhZ05hbWUoc3ViVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gInN1YiI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05h
bWUodGhlYWRUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHRib2R5VGFnKSB8fCBjb3Jl
RWxlbWVudC0+aGFzVGFnTmFtZSh0Zm9vdFRhZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9ICJtaWRkbGUiOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvcmVFbGVtZW50LT5oYXNU
YWdOYW1lKHRyVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh0aFRhZykgfHwgY29yZUVs
ZW1lbnQtPmhhc1RhZ05hbWUodGRUYWcpKQotICAgICAgICAgICAgICAgICAgICBpbmhlcml0ID0g
WUVTOwotICAgICAgICAgICAgfSBlbHNlIGlmIChbQCJmb250LWZhbWlseSIgaXNFcXVhbFRvU3Ry
aW5nOmtleV0gfHwgW0AiZm9udC12YXJpYW50IiBpc0VxdWFsVG9TdHJpbmc6a2V5XSB8fCBbQCJm
b250LWVmZmVjdCIgaXNFcXVhbFRvU3RyaW5nOmtleV0KLSAgICAgICAgICAgICAgICAgICAgICAg
fHwgW0AidGV4dC10cmFuc2Zvcm0iIGlzRXF1YWxUb1N0cmluZzprZXldIHx8IFtAInRleHQtc2hh
ZG93IiBpc0VxdWFsVG9TdHJpbmc6a2V5XSB8fCBbQCJ2aXNpYmlsaXR5IiBpc0VxdWFsVG9TdHJp
bmc6a2V5XQotICAgICAgICAgICAgICAgICAgICAgICB8fCBbQCJib3JkZXItY29sbGFwc2UiIGlz
RXF1YWxUb1N0cmluZzprZXldIHx8IFtAImVtcHR5LWNlbGxzIiBpc0VxdWFsVG9TdHJpbmc6a2V5
XSB8fCBbQCJ3b3JkLXNwYWNpbmciIGlzRXF1YWxUb1N0cmluZzprZXldCi0gICAgICAgICAgICAg
ICAgICAgICAgIHx8IFtAImxpc3Qtc3R5bGUtdHlwZSIgaXNFcXVhbFRvU3RyaW5nOmtleV0gfHwg
W0AiZGlyZWN0aW9uIiBpc0VxdWFsVG9TdHJpbmc6a2V5XSkgewotICAgICAgICAgICAgICAgIGlu
aGVyaXQgPSBZRVM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBpZiAoIW5vZGUuaXNF
bGVtZW50Tm9kZSgpKSB7CisgICAgICAgIGlmIChOb2RlKiBwYXJlbnQgPSBub2RlLnBhcmVudE5v
ZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlRm9yTm9kZSgqcGFyZW50LCBw
cm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgYm9v
bCBpbmhlcml0ID0gZmFsc2U7CisgICAgRWxlbWVudCYgZWxlbWVudCA9IHRvRWxlbWVudChub2Rl
KTsKKyAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGNvbXB1dGVkU3R5bGVQcm9wZXJ0
eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlOYW1lKSkgeworICAgICAgICBTdHJpbmcgcmVz
dWx0OworICAgICAgICBpZiAoc3RyaW5nRnJvbUNTU1ZhbHVlKCp2YWx1ZSwgcmVzdWx0KSkKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYgKFJlZlB0cjxDU1NWYWx1
ZT4gdmFsdWUgPSBjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KGVsZW1lbnQsIHByb3Bl
cnR5TmFtZSkpIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdDsKKyAgICAgICAgaWYgKHZhbHVlLT5p
c0luaGVyaXRlZFZhbHVlKCkpCisgICAgICAgICAgICBpbmhlcml0ID0gdHJ1ZTsKKyAgICAgICAg
ZWxzZSBpZiAoc3RyaW5nRnJvbUNTU1ZhbHVlKCp2YWx1ZSwgcmVzdWx0KSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3dpdGNoIChjc3NQcm9wZXJ0eUlEKHByb3Bl
cnR5TmFtZSkpIHsKKyAgICBjYXNlIENTU1Byb3BlcnR5RGlzcGxheToKKyAgICAgICAgaWYgKGVs
ZW1lbnQuaGFzVGFnTmFtZShoZWFkVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoc2NyaXB0VGFn
KSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUo
bm9mcmFtZXNUYWcpKQorICAgICAgICAgICAgcmV0dXJuICJub25lIjsKKyAgICAgICAgZWxzZSBp
ZiAoZWxlbWVudC5oYXNUYWdOYW1lKGFkZHJlc3NUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShi
bG9ja3F1b3RlVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoYm9keVRhZykgfHwgZWxlbWVudC5o
YXNUYWdOYW1lKGNlbnRlclRhZykKKyAgICAgICAgICAgICB8fCBlbGVtZW50Lmhhc1RhZ05hbWUo
ZGRUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShkaXJUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFt
ZShkaXZUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShkbFRhZykKKyAgICAgICAgICAgICB8fCBl
bGVtZW50Lmhhc1RhZ05hbWUoZHRUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShmaWVsZHNldFRh
ZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGZvcm1UYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShm
cmFtZVRhZykKKyAgICAgICAgICAgICB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoZnJhbWVzZXRUYWcp
IHx8IGVsZW1lbnQuaGFzVGFnTmFtZShoclRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGh0bWxU
YWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShoMVRhZykKKyAgICAgICAgICAgICB8fCBlbGVtZW50
Lmhhc1RhZ05hbWUoaDJUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShoM1RhZykgfHwgZWxlbWVu
dC5oYXNUYWdOYW1lKGg0VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoaDVUYWcpCisgICAgICAg
ICAgICAgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGg2VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUo
aWZyYW1lVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUobWVudVRhZykgfHwgZWxlbWVudC5oYXNU
YWdOYW1lKG5vc2NyaXB0VGFnKQorICAgICAgICAgICAgIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShv
bFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHBUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShw
cmVUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZSh1bFRhZykpCisgICAgICAgICAgICByZXR1cm4g
ImJsb2NrIjsKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKGxpVGFnKSkKKyAg
ICAgICAgICAgIHJldHVybiAibGlzdC1pdGVtIjsKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5o
YXNUYWdOYW1lKHRhYmxlVGFnKSkKKyAgICAgICAgICAgIHJldHVybiAidGFibGUiOworICAgICAg
ICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUodHJUYWcpKQorICAgICAgICAgICAgcmV0dXJu
ICJ0YWJsZS1yb3ciOworICAgICAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUodGhUYWcp
IHx8IGVsZW1lbnQuaGFzVGFnTmFtZSh0ZFRhZykpCisgICAgICAgICAgICByZXR1cm4gInRhYmxl
LWNlbGwiOworICAgICAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUodGhlYWRUYWcpKQor
ICAgICAgICAgICAgcmV0dXJuICJ0YWJsZS1oZWFkZXItZ3JvdXAiOworICAgICAgICBlbHNlIGlm
IChlbGVtZW50Lmhhc1RhZ05hbWUodGJvZHlUYWcpKQorICAgICAgICAgICAgcmV0dXJuICJ0YWJs
ZS1yb3ctZ3JvdXAiOworICAgICAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUodGZvb3RU
YWcpKQorICAgICAgICAgICAgcmV0dXJuICJ0YWJsZS1mb290ZXItZ3JvdXAiOworICAgICAgICBl
bHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoY29sVGFnKSkKKyAgICAgICAgICAgIHJldHVybiAi
dGFibGUtY29sdW1uIjsKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKGNvbGdy
b3VwVGFnKSkKKyAgICAgICAgICAgIHJldHVybiAidGFibGUtY29sdW1uLWdyb3VwIjsKKyAgICAg
ICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKGNhcHRpb25UYWcpKQorICAgICAgICAgICAg
cmV0dXJuICJ0YWJsZS1jYXB0aW9uIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdoaXRlU3BhY2U6CisgICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUocHJlVGFnKSkK
KyAgICAgICAgICAgIHJldHVybiAicHJlIjsKKyAgICAgICAgaW5oZXJpdCA9IHRydWU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5bGU6CisgICAgICAgIGlmIChl
bGVtZW50Lmhhc1RhZ05hbWUoaVRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGNpdGVUYWcpIHx8
IGVsZW1lbnQuaGFzVGFnTmFtZShlbVRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHZhclRhZykg
fHwgZWxlbWVudC5oYXNUYWdOYW1lKGFkZHJlc3NUYWcpKQorICAgICAgICAgICAgcmV0dXJuICJp
dGFsaWMiOworICAgICAgICBpbmhlcml0ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQ6CisgICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUo
YlRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHN0cm9uZ1RhZykgfHwgZWxlbWVudC5oYXNUYWdO
YW1lKHRoVGFnKSkKKyAgICAgICAgICAgIHJldHVybiAiYm9sZGVyIjsKKyAgICAgICAgaW5oZXJp
dCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0RGVjb3Jh
dGlvbjoKKyAgICAgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZSh1VGFnKSB8fCBlbGVtZW50Lmhh
c1RhZ05hbWUoaW5zVGFnKSkKKyAgICAgICAgICAgIHJldHVybiAidW5kZXJsaW5lIjsKKyAgICAg
ICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKHNUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFt
ZShzdHJpa2VUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShkZWxUYWcpKQorICAgICAgICAgICAg
cmV0dXJuICJsaW5lLXRocm91Z2giOworICAgICAgICBpbmhlcml0ID0gdHJ1ZTsgLy8gRklYTUU6
IFRoaXMgaXMgbm90IHN0cmljdGx5IGNvcnJlY3QKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHRBbGlnbjoKKyAgICAgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShjZW50
ZXJUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShjYXB0aW9uVGFnKSB8fCBlbGVtZW50Lmhhc1Rh
Z05hbWUodGhUYWcpKQorICAgICAgICAgICAgcmV0dXJuICJjZW50ZXIiOworICAgICAgICBpbmhl
cml0ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9wZXJ0eVZlcnRpY2Fs
QWxpZ246CisgICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoc3VwVGFnKSkKKyAgICAgICAg
ICAgIHJldHVybiAic3VwZXIiOworICAgICAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUo
c3ViVGFnKSkKKyAgICAgICAgICAgIHJldHVybiAic3ViIjsKKyAgICAgICAgZWxzZSBpZiAoZWxl
bWVudC5oYXNUYWdOYW1lKHRoZWFkVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUodGJvZHlUYWcp
IHx8IGVsZW1lbnQuaGFzVGFnTmFtZSh0Zm9vdFRhZykpCisgICAgICAgICAgICByZXR1cm4gIm1p
ZGRsZSI7CisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZSh0clRhZykgfHwgZWxl
bWVudC5oYXNUYWdOYW1lKHRoVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUodGRUYWcpKQorICAg
ICAgICAgICAgaW5oZXJpdCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJv
cGVydHlGb250RmFtaWx5OgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudDoKKyAgICBj
YXNlIENTU1Byb3BlcnR5VGV4dFRyYW5zZm9ybToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFNo
YWRvdzoKKyAgICBjYXNlIENTU1Byb3BlcnR5VmlzaWJpbGl0eToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyQ29sbGFwc2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUVtcHR5Q2VsbHM6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdvcmRTcGFjaW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5
bGVUeXBlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246CisgICAgICAgIGluaGVyaXQg
PSB0cnVlOyAvLyBGSVhNRTogTGV0IGNsYXNzZXMgaW4gdGhlIGNzcyBjb21wb25lbnQgZmlndXJl
IHRoaXMgb3V0LgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgaWYgKCFoYXZlUmVzdWx0ICYmIGluaGVyaXQpIHsKLSAgICAgICAgRE9NTm9k
ZSAqcGFyZW50Tm9kZSA9IFtub2RlIHBhcmVudE5vZGVdOwotICAgICAgICBpZiAocGFyZW50Tm9k
ZSkKLSAgICAgICAgICAgIHJldHVybiBbc2VsZiBfc3RyaW5nRm9yTm9kZTpwYXJlbnROb2RlIHBy
b3BlcnR5OmtleV07CisKKyAgICBpZiAoaW5oZXJpdCkgeworICAgICAgICBpZiAoTm9kZSogcGFy
ZW50ID0gbm9kZS5wYXJlbnROb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1
ZUZvck5vZGUoKnBhcmVudCwgcHJvcGVydHlOYW1lKTsKICAgICB9Ci0gICAgaWYgKGhhdmVSZXN1
bHQpCi0gICAgICAgIHJldHVybiByZXN1bHQubG93ZXIoKTsKLSAgICByZXR1cm4gbmlsOworICAg
IAorICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAogLSAoTlNTdHJpbmcgKilfc3RyaW5nRm9yTm9k
ZTooRE9NTm9kZSAqKW5vZGUgcHJvcGVydHk6KE5TU3RyaW5nICopa2V5CiB7Ci0gICAgTlNTdHJp
bmcgKnJlc3VsdCA9IG5pbDsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gYXR0
cmlidXRlRGljdGlvbmFyeSA9IFtfc3RyaW5nc0Zvck5vZGVzIG9iamVjdEZvcktleTpub2RlXTsK
LSAgICBpZiAoIWF0dHJpYnV0ZURpY3Rpb25hcnkpIHsKLSAgICAgICAgYXR0cmlidXRlRGljdGlv
bmFyeSA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAg
ICAgIFtfc3RyaW5nc0Zvck5vZGVzIHNldE9iamVjdDphdHRyaWJ1dGVEaWN0aW9uYXJ5LmdldCgp
IGZvcktleTpub2RlXTsKLSAgICB9Ci0gICAgcmVzdWx0ID0gW2F0dHJpYnV0ZURpY3Rpb25hcnkg
b2JqZWN0Rm9yS2V5OmtleV07Ci0gICAgaWYgKHJlc3VsdCkgewotICAgICAgICBpZiAoW3Jlc3Vs
dCBpc0VxdWFsVG9TdHJpbmc6QCIiXSkKLSAgICAgICAgICAgIHJlc3VsdCA9IG5pbDsKLSAgICB9
IGVsc2UgewotICAgICAgICByZXN1bHQgPSBbc2VsZiBfY29tcHV0ZWRTdHJpbmdGb3JOb2RlOm5v
ZGUgcHJvcGVydHk6a2V5XTsKLSAgICAgICAgW2F0dHJpYnV0ZURpY3Rpb25hcnkgc2V0T2JqZWN0
OihyZXN1bHQgPyByZXN1bHQgOiBAIiIpIGZvcktleTprZXldOwotICAgIH0KKyAgICBOb2RlKiBj
b3JlTm9kZSA9IGNvcmUobm9kZSk7CisgICAgaWYgKCFjb3JlTm9kZSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBTdHJpbmcgcmVzdWx0ID0gX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUo
KmNvcmVOb2RlLCBTdHJpbmcoa2V5KSk7CisgICAgaWYgKCFyZXN1bHQubGVuZ3RoKCkpCisgICAg
ICAgIHJldHVybiBuaWw7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjQxOSw4ICsyNDIy
LDYgQEAgLSAodm9pZClkZWFsbG9jCiAgICAgW190ZXh0VGFibGVSb3dzIHJlbGVhc2VdOwogICAg
IFtfdGV4dFRhYmxlUm93QXJyYXlzIHJlbGVhc2VdOwogICAgIFtfdGV4dFRhYmxlUm93QmFja2dy
b3VuZENvbG9ycyByZWxlYXNlXTsKLSAgICBbX3NwZWNpZmllZFN0eWxlc0ZvckVsZW1lbnRzIHJl
bGVhc2VdOwotICAgIFtfc3RyaW5nc0Zvck5vZGVzIHJlbGVhc2VdOwogICAgIFtfZmxvYXRzRm9y
Tm9kZXMgcmVsZWFzZV07CiAgICAgW19jb2xvcnNGb3JOb2RlcyByZWxlYXNlXTsKICAgICBbX2F0
dHJpYnV0ZXNGb3JFbGVtZW50cyByZWxlYXNlXTsKQEAgLTI0NDgsOCArMjQ0OSw2IEBAIC0gKGlk
KWluaXQKICAgICBfdGV4dFRhYmxlUm93cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRd
OwogICAgIF90ZXh0VGFibGVSb3dBcnJheXMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
XTsKICAgICBfdGV4dFRhYmxlUm93QmFja2dyb3VuZENvbG9ycyA9IFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRdOwotICAgIF9zcGVjaWZpZWRTdHlsZXNGb3JFbGVtZW50cyA9IFtbTlNNdXRh
YmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgX3N0cmluZ3NGb3JOb2RlcyA9IFtbTlNN
dXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CiAgICAgX2Zsb2F0c0Zvck5vZGVzID0gW1tO
U011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKICAgICBfY29sb3JzRm9yTm9kZXMgPSBb
W05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwogICAgIF9hdHRyaWJ1dGVzRm9yRWxl
bWVudHMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226959</attachid>
            <date>2014-03-17 14:00:12 -0700</date>
            <delta_ts>2014-03-17 14:06:59 -0700</delta_ts>
            <desc>Fixed the bug</desc>
            <filename>bug-130274-20140317140008.patch</filename>
            <type>text/plain</type>
            <size>17514</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTc0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE0LTAzLTE3ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFtNYWNdIFJld3JpdGUgV2ViSFRN
TENvbnZlcnRlcjo6X2NvbXB1dGVkU3RyaW5nRm9yTm9kZSBpbiBDKysKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDI3NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJld3JvdGUgV2ViSFRNTENvbnZlcnRl
cjo6X2NvbXB1dGVkU3RyaW5nRm9yTm9kZSBhcyBIVE1MQ29udmVydGVyQ2FjaGVzOjpwcm9wZXJ0
eVZhbHVlRm9yTm9kZS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLmg6
IFJlbW92ZWQgdW51c2VkIGNhY2hlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvSFRNTENvbnZl
cnRlci5tbToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmNvbXB1dGVkU3R5bGVQcm9w
ZXJ0eUZvckVsZW1lbnQpOiBBZGRlZCB1c2UgY29uc3QgU3RyaW5nJiBpbnN0ZWFkIG9mIFN0cmlu
ZyYgb24gcHJvcGVydHkgbmFtZS4KKyAgICAgICAgKEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmlubGlu
ZVN0eWxlUHJvcGVydHlGb3JFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChIVE1MQ29udmVydGVy
Q2FjaGVzOjpwcm9wZXJ0eVZhbHVlRm9yTm9kZSk6IFJlbmFtZWQgYW5kIHJld3JpdHRlbiBmcm9t
IF9jb21wdXRlZFN0cmluZ0Zvck5vZGUuCisgICAgICAgICgtW1dlYkhUTUxDb252ZXJ0ZXIgX3N0
cmluZ0Zvck5vZGU6cHJvcGVydHk6XSk6IFNpbXBseSByZXR1cm4gdGhlIGNvbXB1dGVkIHZhbHVl
IGluc3RlYWQgb2Ygc3RvcmluZyBpdCBpbiB0aGUgY2FjaGUKKyAgICAgICAgbm93IHRoYXQgdGhl
IGNvbXB1dGluZyB0aGUgdmFsdWUgaXMgZmFzdC4KKyAgICAgICAgKC1bV2ViSFRNTENvbnZlcnRl
ciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkhUTUxDb252ZXJ0ZXIgaW5pdF0pOgorCiAyMDE0
LTAxLTI5ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFtDU1MgR3JpZCBMYXlvdXRdIGdldENvbXB1dGVkU3R5bGUoKSBub3QgdXNpbmcgYXV0aG9y
J3Mgb3JkZXIgd2hlbiBzaG93aW5nIG5hbWVkIGdyaWQgbGluZXMKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0hUTUxDb252ZXJ0ZXIuaAkocmV2aXNpb24gMTY1NzQ3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hUTUxDb252ZXJ0ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNTYsOCArNTYsNiBAQCBAaW50ZXJmYWNlIFdlYkhUTUxDb252ZXJ0ZXIgOiBOU09iamVj
dCB7CiAgICAgTlNNdXRhYmxlQXJyYXkgKl90ZXh0VGFibGVSb3dzOwogICAgIE5TTXV0YWJsZUFy
cmF5ICpfdGV4dFRhYmxlUm93QXJyYXlzOwogICAgIE5TTXV0YWJsZUFycmF5ICpfdGV4dFRhYmxl
Um93QmFja2dyb3VuZENvbG9yczsKLSAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpfc3BlY2lmaWVk
U3R5bGVzRm9yRWxlbWVudHM7Ci0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX3N0cmluZ3NGb3JO
b2RlczsKICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpfZmxvYXRzRm9yTm9kZXM7CiAgICAgTlNN
dXRhYmxlRGljdGlvbmFyeSAqX2NvbG9yc0Zvck5vZGVzOwogICAgIE5TTXV0YWJsZURpY3Rpb25h
cnkgKl9hdHRyaWJ1dGVzRm9yRWxlbWVudHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvSFRNTENvbnZlcnRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5tbQkocmV2aXNpb24gMTY1NzQ3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0hUTUxDb252ZXJ0ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTQw
MSw4ICs0MDEsMTAgQEAgY29uc3QgdW5pY2hhciBXZWJOZXh0TGluZUNoYXJhY3RlciA9IDB4MAog
CiBjbGFzcyBIVE1MQ29udmVydGVyQ2FjaGVzIHsKIHB1YmxpYzoKLSAgICBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KEVsZW1lbnQmLCBTdHJpbmcm
KTsKLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBpbmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVu
dChFbGVtZW50JiwgU3RyaW5nJik7CisgICAgU3RyaW5nIHByb3BlcnR5VmFsdWVGb3JOb2RlKE5v
ZGUmLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisKKyAgICBQYXNzUmVmUHRyPENTU1Zh
bHVlPiBjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KEVsZW1lbnQmLCBjb25zdCBTdHJp
bmcmKTsKKyAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBpbmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxl
bWVudChFbGVtZW50JiwgY29uc3QgU3RyaW5nJik7CiAKIHByaXZhdGU6CiAgICAgSGFzaE1hcDxF
bGVtZW50Kiwgc3RkOjp1bmlxdWVfcHRyPENvbXB1dGVkU3R5bGVFeHRyYWN0b3I+PiBtX2NvbXB1
dGVkU3R5bGVzOwpAQCAtNTYyLDcgKzU2NCw3IEBAIC0gKE5TQXJyYXkgKilfY2hpbGRyZW5Gb3JO
b2RlOihET01Ob2RlICoKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTVmFs
dWU+IEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmNvbXB1dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQo
RWxlbWVudCYgZWxlbWVudCwgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCitQYXNzUmVmUHRyPENTU1Zh
bHVlPiBIVE1MQ29udmVydGVyQ2FjaGVzOjpjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50
KEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogewogICAgIENT
U1Byb3BlcnR5SUQgcHJvcGV0eUlkID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwogICAg
IGlmIChwcm9wZXR5SWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQpAQCAtNTc1LDcgKzU3Nyw3IEBA
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IEhUTUxDb252ZXJ0ZXJDYWNoZXMKICAgICByZXR1cm4gY29t
cHV0ZWRTdHlsZS5wcm9wZXJ0eVZhbHVlKHByb3BldHlJZCk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NT
VmFsdWU+IEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmlubGluZVN0eWxlUHJvcGVydHlGb3JFbGVtZW50
KEVsZW1lbnQmIGVsZW1lbnQsIFN0cmluZyYgcHJvcGVydHlOYW1lKQorUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gSFRNTENvbnZlcnRlckNhY2hlczo6aW5saW5lU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQo
RWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgQ1NT
UHJvcGVydHlJRCBwcm9wZXR5SWQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CiAgICAg
aWYgKHByb3BldHlJZCA9PSBDU1NQcm9wZXJ0eUludmFsaWQgfHwgIWVsZW1lbnQuaXNTdHlsZWRF
bGVtZW50KCkpCkBAIC02MDUsMTMxICs2MDcsMTMyIEBAIHN0YXRpYyBib29sIHN0cmluZ0Zyb21D
U1NWYWx1ZShDU1NWYWx1ZSYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLS0gKE5TU3RyaW5nICop
X2NvbXB1dGVkU3RyaW5nRm9yTm9kZTooRE9NTm9kZSAqKW5vZGUgcHJvcGVydHk6KE5TU3RyaW5n
ICopa2V5CitTdHJpbmcgSFRNTENvbnZlcnRlckNhY2hlczo6cHJvcGVydHlWYWx1ZUZvck5vZGUo
Tm9kZSYgbm9kZSwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgYm9vbCBoYXZl
UmVzdWx0ID0gZmFsc2U7Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBib29sIGluaGVyaXQgPSB0
cnVlOwotICAgIE5vZGUqIGNvcmVOb2RlID0gY29yZShub2RlKTsKLSAgICBpZiAoY29yZU5vZGUg
JiYgY29yZU5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICBFbGVtZW50JiBlbGVtZW50
ID0gdG9FbGVtZW50KCpjb3JlTm9kZSk7Ci0gICAgICAgIFN0cmluZyBwcm9wZXJ0eU5hbWUgPSBr
ZXk7Ci0gICAgICAgIGluaGVyaXQgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFoYXZlUmVzdWx0KSB7
Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IF9jYWNoZXMtPmNvbXB1
dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlOYW1lKSkKLSAgICAg
ICAgICAgICAgICBoYXZlUmVzdWx0ID0gc3RyaW5nRnJvbUNTU1ZhbHVlKCp2YWx1ZSwgcmVzdWx0
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWhhdmVSZXN1bHQpIHsKLSAgICAgICAgICAgIGlm
IChSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gX2NhY2hlcy0+Y29tcHV0ZWRTdHlsZVByb3BlcnR5
Rm9yRWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgIGluaGVyaXQg
PSB0cnVlOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgaGF2ZVJl
c3VsdCA9IHN0cmluZ0Zyb21DU1NWYWx1ZSgqdmFsdWUsIHJlc3VsdCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgRWxlbWVudCogY29yZUVsZW1lbnQgPSAmZWxlbWVudDsKLSAg
ICAgICAgaWYgKCFoYXZlUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAoW0AiZGlzcGxheSIgaXNF
cXVhbFRvU3RyaW5nOmtleV0pIHsKLSAgICAgICAgICAgICAgICBpZiAoY29yZUVsZW1lbnQtPmhh
c1RhZ05hbWUoaGVhZFRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoc2NyaXB0VGFnKSB8
fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNU
YWdOYW1lKG5vZnJhbWVzVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gIm5vbmUi
OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGFkZHJl
c3NUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpIHx8IGNvcmVF
bGVtZW50LT5oYXNUYWdOYW1lKGJvZHlUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGNl
bnRlclRhZykKLSAgICAgICAgICAgICAgICAgICAgICAgICB8fCBjb3JlRWxlbWVudC0+aGFzVGFn
TmFtZShkZFRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoZGlyVGFnKSB8fCBjb3JlRWxl
bWVudC0+aGFzVGFnTmFtZShkaXZUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGRsVGFn
KQotICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGR0
VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShmaWVsZHNldFRhZykgfHwgY29yZUVsZW1l
bnQtPmhhc1RhZ05hbWUoZm9ybVRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoZnJhbWVU
YWcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUo
ZnJhbWVzZXRUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGhyVGFnKSB8fCBjb3JlRWxl
bWVudC0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShoMVRh
ZykKLSAgICAgICAgICAgICAgICAgICAgICAgICB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSho
MlRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoaDNUYWcpIHx8IGNvcmVFbGVtZW50LT5o
YXNUYWdOYW1lKGg0VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShoNVRhZykKLSAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShoNlRhZykgfHwg
Y29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFn
TmFtZShtZW51VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShub3NjcmlwdFRhZykKLSAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShvbFRhZykg
fHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUocFRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05h
bWUocHJlVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh1bFRhZykpCi0gICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9ICJibG9jayI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29y
ZUVsZW1lbnQtPmhhc1RhZ05hbWUobGlUYWcpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSAibGlzdC1pdGVtIjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFz
VGFnTmFtZSh0YWJsZVRhZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJ0YWJsZSI7
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUodHJUYWcp
KQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAidGFibGUtcm93IjsKLSAgICAgICAgICAg
ICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh0aFRhZykgfHwgY29yZUVsZW1l
bnQtPmhhc1RhZ05hbWUodGRUYWcpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAidGFi
bGUtY2VsbCI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05h
bWUodGhlYWRUYWcpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAidGFibGUtaGVhZGVy
LWdyb3VwIjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFt
ZSh0Ym9keVRhZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJ0YWJsZS1yb3ctZ3Jv
dXAiOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHRm
b290VGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gInRhYmxlLWZvb3Rlci1ncm91
cCI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoY29s
VGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gInRhYmxlLWNvbHVtbiI7Ci0gICAg
ICAgICAgICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoY29sZ3JvdXBUYWcp
KQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAidGFibGUtY29sdW1uLWdyb3VwIjsKLSAg
ICAgICAgICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShjYXB0aW9uVGFn
KSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gInRhYmxlLWNhcHRpb24iOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChbQCJ3aGl0ZS1zcGFjZSIgaXNFcXVhbFRvU3RyaW5nOmtleV0pIHsK
LSAgICAgICAgICAgICAgICBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUocHJlVGFnKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gInByZSI7Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBpbmhlcml0ID0gWUVTOwotICAgICAgICAgICAgfSBlbHNlIGlm
IChbQCJmb250LXN0eWxlIiBpc0VxdWFsVG9TdHJpbmc6a2V5XSkgewotICAgICAgICAgICAgICAg
IGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShpVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFn
TmFtZShjaXRlVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShlbVRhZykgfHwgY29yZUVs
ZW1lbnQtPmhhc1RhZ05hbWUodmFyVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShhZGRy
ZXNzVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gIml0YWxpYyI7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBpbmhlcml0ID0gWUVTOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChbQCJmb250LXdlaWdodCIgaXNFcXVhbFRvU3RyaW5nOmtleV0pIHsK
LSAgICAgICAgICAgICAgICBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoYlRhZykgfHwgY29y
ZUVsZW1lbnQtPmhhc1RhZ05hbWUoc3Ryb25nVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFt
ZSh0aFRhZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJib2xkZXIiOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgaW5oZXJpdCA9IFlFUzsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoW0AidGV4dC1kZWNvcmF0aW9uIiBpc0VxdWFsVG9TdHJpbmc6a2V5
XSkgewotICAgICAgICAgICAgICAgIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh1VGFnKSB8
fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShpbnNUYWcpKQotICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSAidW5kZXJsaW5lIjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVu
dC0+aGFzVGFnTmFtZShzVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShzdHJpa2VUYWcp
IHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGRlbFRhZykpCi0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9ICJsaW5lLXRocm91Z2giOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgaW5oZXJpdCA9IFlFUzsgLy8gPz8/IHRoaXMgaXMgbm90IHN0cmljdGx5IGNv
cnJlY3QKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoW0AidGV4dC1hbGlnbiIgaXNFcXVhbFRvU3Ry
aW5nOmtleV0pIHsKLSAgICAgICAgICAgICAgICBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUo
Y2VudGVyVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShjYXB0aW9uVGFnKSB8fCBjb3Jl
RWxlbWVudC0+aGFzVGFnTmFtZSh0aFRhZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
ICJjZW50ZXIiOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgaW5o
ZXJpdCA9IFlFUzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoW0AidmVydGljYWwtYWxpZ24iIGlz
RXF1YWxUb1N0cmluZzprZXldKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvcmVFbGVtZW50LT5o
YXNUYWdOYW1lKHN1cFRhZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJzdXBlciI7
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoc3ViVGFn
KSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gInN1YiI7Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUodGhlYWRUYWcpIHx8IGNvcmVFbGVtZW50
LT5oYXNUYWdOYW1lKHRib2R5VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh0Zm9vdFRh
ZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJtaWRkbGUiOwotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHRyVGFnKSB8fCBjb3JlRWxlbWVu
dC0+aGFzVGFnTmFtZSh0aFRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUodGRUYWcpKQot
ICAgICAgICAgICAgICAgICAgICBpbmhlcml0ID0gWUVTOwotICAgICAgICAgICAgfSBlbHNlIGlm
IChbQCJmb250LWZhbWlseSIgaXNFcXVhbFRvU3RyaW5nOmtleV0gfHwgW0AiZm9udC12YXJpYW50
IiBpc0VxdWFsVG9TdHJpbmc6a2V5XSB8fCBbQCJmb250LWVmZmVjdCIgaXNFcXVhbFRvU3RyaW5n
OmtleV0KLSAgICAgICAgICAgICAgICAgICAgICAgfHwgW0AidGV4dC10cmFuc2Zvcm0iIGlzRXF1
YWxUb1N0cmluZzprZXldIHx8IFtAInRleHQtc2hhZG93IiBpc0VxdWFsVG9TdHJpbmc6a2V5XSB8
fCBbQCJ2aXNpYmlsaXR5IiBpc0VxdWFsVG9TdHJpbmc6a2V5XQotICAgICAgICAgICAgICAgICAg
ICAgICB8fCBbQCJib3JkZXItY29sbGFwc2UiIGlzRXF1YWxUb1N0cmluZzprZXldIHx8IFtAImVt
cHR5LWNlbGxzIiBpc0VxdWFsVG9TdHJpbmc6a2V5XSB8fCBbQCJ3b3JkLXNwYWNpbmciIGlzRXF1
YWxUb1N0cmluZzprZXldCi0gICAgICAgICAgICAgICAgICAgICAgIHx8IFtAImxpc3Qtc3R5bGUt
dHlwZSIgaXNFcXVhbFRvU3RyaW5nOmtleV0gfHwgW0AiZGlyZWN0aW9uIiBpc0VxdWFsVG9TdHJp
bmc6a2V5XSkgewotICAgICAgICAgICAgICAgIGluaGVyaXQgPSBZRVM7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KKyAgICBpZiAoIW5vZGUuaXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgIGlm
IChOb2RlKiBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBw
cm9wZXJ0eVZhbHVlRm9yTm9kZSgqcGFyZW50LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgYm9vbCBpbmhlcml0ID0gZmFsc2U7CisgICAgRWxl
bWVudCYgZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICBpZiAoUmVmUHRyPENTU1ZhbHVl
PiB2YWx1ZSA9IGNvbXB1dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVy
dHlOYW1lKSkgeworICAgICAgICBTdHJpbmcgcmVzdWx0OworICAgICAgICBpZiAoc3RyaW5nRnJv
bUNTU1ZhbHVlKCp2YWx1ZSwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBpbmxpbmVTdHlsZVByb3Bl
cnR5Rm9yRWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIFN0cmluZyBy
ZXN1bHQ7CisgICAgICAgIGlmICh2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKQorICAgICAgICAg
ICAgaW5oZXJpdCA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHN0cmluZ0Zyb21DU1NWYWx1ZSgq
dmFsdWUsIHJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IHN3aXRjaCAoY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpKSB7CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eURpc3BsYXk6CisgICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoaGVhZFRhZykgfHwg
ZWxlbWVudC5oYXNUYWdOYW1lKHNjcmlwdFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGFwcGxl
dFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKG5vZnJhbWVzVGFnKSkKKyAgICAgICAgICAgIHJl
dHVybiAibm9uZSI7CisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShhZGRyZXNz
VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoYmxvY2txdW90ZVRhZykgfHwgZWxlbWVudC5oYXNU
YWdOYW1lKGJvZHlUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShjZW50ZXJUYWcpCisgICAgICAg
ICAgICAgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGRkVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUo
ZGlyVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoZGl2VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05h
bWUoZGxUYWcpCisgICAgICAgICAgICAgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGR0VGFnKSB8fCBl
bGVtZW50Lmhhc1RhZ05hbWUoZmllbGRzZXRUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShmb3Jt
VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoZnJhbWVUYWcpCisgICAgICAgICAgICAgfHwgZWxl
bWVudC5oYXNUYWdOYW1lKGZyYW1lc2V0VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoaHJUYWcp
IHx8IGVsZW1lbnQuaGFzVGFnTmFtZShodG1sVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoaDFU
YWcpCisgICAgICAgICAgICAgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGgyVGFnKSB8fCBlbGVtZW50
Lmhhc1RhZ05hbWUoaDNUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShoNFRhZykgfHwgZWxlbWVu
dC5oYXNUYWdOYW1lKGg1VGFnKQorICAgICAgICAgICAgIHx8IGVsZW1lbnQuaGFzVGFnTmFtZSho
NlRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGlmcmFtZVRhZykgfHwgZWxlbWVudC5oYXNUYWdO
YW1lKG1lbnVUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShub3NjcmlwdFRhZykKKyAgICAgICAg
ICAgICB8fCBlbGVtZW50Lmhhc1RhZ05hbWUob2xUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShw
VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUocHJlVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUo
dWxUYWcpKQorICAgICAgICAgICAgcmV0dXJuICJibG9jayI7CisgICAgICAgIGVsc2UgaWYgKGVs
ZW1lbnQuaGFzVGFnTmFtZShsaVRhZykpCisgICAgICAgICAgICByZXR1cm4gImxpc3QtaXRlbSI7
CisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZSh0YWJsZVRhZykpCisgICAgICAg
ICAgICByZXR1cm4gInRhYmxlIjsKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1l
KHRyVGFnKSkKKyAgICAgICAgICAgIHJldHVybiAidGFibGUtcm93IjsKKyAgICAgICAgZWxzZSBp
ZiAoZWxlbWVudC5oYXNUYWdOYW1lKHRoVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUodGRUYWcp
KQorICAgICAgICAgICAgcmV0dXJuICJ0YWJsZS1jZWxsIjsKKyAgICAgICAgZWxzZSBpZiAoZWxl
bWVudC5oYXNUYWdOYW1lKHRoZWFkVGFnKSkKKyAgICAgICAgICAgIHJldHVybiAidGFibGUtaGVh
ZGVyLWdyb3VwIjsKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKHRib2R5VGFn
KSkKKyAgICAgICAgICAgIHJldHVybiAidGFibGUtcm93LWdyb3VwIjsKKyAgICAgICAgZWxzZSBp
ZiAoZWxlbWVudC5oYXNUYWdOYW1lKHRmb290VGFnKSkKKyAgICAgICAgICAgIHJldHVybiAidGFi
bGUtZm9vdGVyLWdyb3VwIjsKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKGNv
bFRhZykpCisgICAgICAgICAgICByZXR1cm4gInRhYmxlLWNvbHVtbiI7CisgICAgICAgIGVsc2Ug
aWYgKGVsZW1lbnQuaGFzVGFnTmFtZShjb2xncm91cFRhZykpCisgICAgICAgICAgICByZXR1cm4g
InRhYmxlLWNvbHVtbi1ncm91cCI7CisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFt
ZShjYXB0aW9uVGFnKSkKKyAgICAgICAgICAgIHJldHVybiAidGFibGUtY2FwdGlvbiI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlOgorICAgICAgICBpZiAo
ZWxlbWVudC5oYXNUYWdOYW1lKHByZVRhZykpCisgICAgICAgICAgICByZXR1cm4gInByZSI7Cisg
ICAgICAgIGluaGVyaXQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3Bl
cnR5Rm9udFN0eWxlOgorICAgICAgICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKGlUYWcpIHx8IGVs
ZW1lbnQuaGFzVGFnTmFtZShjaXRlVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoZW1UYWcpIHx8
IGVsZW1lbnQuaGFzVGFnTmFtZSh2YXJUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShhZGRyZXNz
VGFnKSkKKyAgICAgICAgICAgIHJldHVybiAiaXRhbGljIjsKKyAgICAgICAgaW5oZXJpdCA9IHRy
dWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlGb250V2VpZ2h0OgorICAg
ICAgICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKGJUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShz
dHJvbmdUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZSh0aFRhZykpCisgICAgICAgICAgICByZXR1
cm4gImJvbGRlciI7CisgICAgICAgIGluaGVyaXQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb246CisgICAgICAgIGlmIChlbGVtZW50Lmhh
c1RhZ05hbWUodVRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGluc1RhZykpCisgICAgICAgICAg
ICByZXR1cm4gInVuZGVybGluZSI7CisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFt
ZShzVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoc3RyaWtlVGFnKSB8fCBlbGVtZW50Lmhhc1Rh
Z05hbWUoZGVsVGFnKSkKKyAgICAgICAgICAgIHJldHVybiAibGluZS10aHJvdWdoIjsKKyAgICAg
ICAgaW5oZXJpdCA9IHRydWU7IC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBzdHJpY3RseSBjb3JyZWN0
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0QWxpZ246CisgICAgICAg
IGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoY2VudGVyVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUo
Y2FwdGlvblRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHRoVGFnKSkKKyAgICAgICAgICAgIHJl
dHVybiAiY2VudGVyIjsKKyAgICAgICAgaW5oZXJpdCA9IHRydWU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduOgorICAgICAgICBpZiAoZWxlbWVudC5o
YXNUYWdOYW1lKHN1cFRhZykpCisgICAgICAgICAgICByZXR1cm4gInN1cGVyIjsKKyAgICAgICAg
ZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKHN1YlRhZykpCisgICAgICAgICAgICByZXR1cm4g
InN1YiI7CisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZSh0aGVhZFRhZykgfHwg
ZWxlbWVudC5oYXNUYWdOYW1lKHRib2R5VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUodGZvb3RU
YWcpKQorICAgICAgICAgICAgcmV0dXJuICJtaWRkbGUiOworICAgICAgICBlbHNlIGlmIChlbGVt
ZW50Lmhhc1RhZ05hbWUodHJUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZSh0aFRhZykgfHwgZWxl
bWVudC5oYXNUYWdOYW1lKHRkVGFnKSkKKyAgICAgICAgICAgIGluaGVyaXQgPSB0cnVlOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseToKKyAgICBjYXNlIENT
U1Byb3BlcnR5Rm9udFZhcmlhbnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRUcmFuc2Zvcm06
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRTaGFkb3c6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVZp
c2liaWxpdHk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckNvbGxhcHNlOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlFbXB0eUNlbGxzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkU3BhY2luZzoK
KyAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlVHlwZToKKyAgICBjYXNlIENTU1Byb3BlcnR5
RGlyZWN0aW9uOgorICAgICAgICBpbmhlcml0ID0gdHJ1ZTsgLy8gRklYTUU6IExldCBjbGFzc2Vz
IGluIHRoZSBjc3MgY29tcG9uZW50IGZpZ3VyZSB0aGlzIG91dC4KKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlmICghaGF2ZVJlc3VsdCAm
JiBpbmhlcml0KSB7Ci0gICAgICAgIERPTU5vZGUgKnBhcmVudE5vZGUgPSBbbm9kZSBwYXJlbnRO
b2RlXTsKLSAgICAgICAgaWYgKHBhcmVudE5vZGUpCi0gICAgICAgICAgICByZXR1cm4gW3NlbGYg
X3N0cmluZ0Zvck5vZGU6cGFyZW50Tm9kZSBwcm9wZXJ0eTprZXldOworCisgICAgaWYgKGluaGVy
aXQpIHsKKyAgICAgICAgaWYgKE5vZGUqIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWVGb3JOb2RlKCpwYXJlbnQsIHByb3BlcnR5TmFt
ZSk7CiAgICAgfQotICAgIGlmIChoYXZlUmVzdWx0KQotICAgICAgICByZXR1cm4gcmVzdWx0Lmxv
d2VyKCk7Ci0gICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAK
IC0gKE5TU3RyaW5nICopX3N0cmluZ0Zvck5vZGU6KERPTU5vZGUgKilub2RlIHByb3BlcnR5OihO
U1N0cmluZyAqKWtleQogewotICAgIE5TU3RyaW5nICpyZXN1bHQgPSBuaWw7Ci0gICAgUmV0YWlu
UHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZURpY3Rpb25hcnkgPSBbX3N0cmluZ3NG
b3JOb2RlcyBvYmplY3RGb3JLZXk6bm9kZV07Ci0gICAgaWYgKCFhdHRyaWJ1dGVEaWN0aW9uYXJ5
KSB7Ci0gICAgICAgIGF0dHJpYnV0ZURpY3Rpb25hcnkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGlj
dGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgICAgICBbX3N0cmluZ3NGb3JOb2RlcyBzZXRPYmpl
Y3Q6YXR0cmlidXRlRGljdGlvbmFyeS5nZXQoKSBmb3JLZXk6bm9kZV07Ci0gICAgfQotICAgIHJl
c3VsdCA9IFthdHRyaWJ1dGVEaWN0aW9uYXJ5IG9iamVjdEZvcktleTprZXldOwotICAgIGlmIChy
ZXN1bHQpIHsKLSAgICAgICAgaWYgKFtyZXN1bHQgaXNFcXVhbFRvU3RyaW5nOkAiIl0pCi0gICAg
ICAgICAgICByZXN1bHQgPSBuaWw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gW3Nl
bGYgX2NvbXB1dGVkU3RyaW5nRm9yTm9kZTpub2RlIHByb3BlcnR5OmtleV07Ci0gICAgICAgIFth
dHRyaWJ1dGVEaWN0aW9uYXJ5IHNldE9iamVjdDoocmVzdWx0ID8gcmVzdWx0IDogQCIiKSBmb3JL
ZXk6a2V5XTsKLSAgICB9CisgICAgTm9kZSogY29yZU5vZGUgPSBjb3JlKG5vZGUpOworICAgIGlm
ICghY29yZU5vZGUpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgU3RyaW5nIHJlc3VsdCA9IF9j
YWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKCpjb3JlTm9kZSwgU3RyaW5nKGtleSkpOworICAg
IGlmICghcmVzdWx0Lmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gbmlsOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKQEAgLTI0MjAsOCArMjQyMyw2IEBAIC0gKHZvaWQpZGVhbGxvYwogICAgIFtf
dGV4dFRhYmxlUm93cyByZWxlYXNlXTsKICAgICBbX3RleHRUYWJsZVJvd0FycmF5cyByZWxlYXNl
XTsKICAgICBbX3RleHRUYWJsZVJvd0JhY2tncm91bmRDb2xvcnMgcmVsZWFzZV07Ci0gICAgW19z
cGVjaWZpZWRTdHlsZXNGb3JFbGVtZW50cyByZWxlYXNlXTsKLSAgICBbX3N0cmluZ3NGb3JOb2Rl
cyByZWxlYXNlXTsKICAgICBbX2Zsb2F0c0Zvck5vZGVzIHJlbGVhc2VdOwogICAgIFtfY29sb3Jz
Rm9yTm9kZXMgcmVsZWFzZV07CiAgICAgW19hdHRyaWJ1dGVzRm9yRWxlbWVudHMgcmVsZWFzZV07
CkBAIC0yNDQ5LDggKzI0NTAsNiBAQCAtIChpZClpbml0CiAgICAgX3RleHRUYWJsZVJvd3MgPSBb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKICAgICBfdGV4dFRhYmxlUm93QXJyYXlzID0g
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07CiAgICAgX3RleHRUYWJsZVJvd0JhY2tncm91
bmRDb2xvcnMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICBfc3BlY2lmaWVk
U3R5bGVzRm9yRWxlbWVudHMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwot
ICAgIF9zdHJpbmdzRm9yTm9kZXMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRd
OwogICAgIF9mbG9hdHNGb3JOb2RlcyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5p
dF07CiAgICAgX2NvbG9yc0Zvck5vZGVzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBp
bml0XTsKICAgICBfYXR0cmlidXRlc0ZvckVsZW1lbnRzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5
IGFsbG9jXSBpbml0XTsK
</data>
<flag name="review"
          id="251195"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>