<?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>92957</bug_id>
          
          <creation_ts>2012-08-02 01:13:17 -0700</creation_ts>
          <short_desc>DFGSpeculativeJIT.h has too many inline method bodies</short_desc>
          <delta_ts>2012-08-02 01:28:22 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>685075</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-02 01:13:17 -0700</bug_when>
    <thetext>The methods are definitely too big to be inlined, so their inline nature does not help. The fact that their innards are visible in the header makes the code harder to read. We should move the bodies into out-of-line implementations in DFGSpeculativeJIT.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685077</commentid>
    <comment_count>1</comment_count>
      <attachid>156000</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-02 01:15:35 -0700</bug_when>
    <thetext>Created attachment 156000
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685082</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-02 01:17:26 -0700</bug_when>
    <thetext>Attachment 156000 did not pass style-queue:

Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2166:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2166:  The parameter name &quot;jsValueSource&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2166:  The parameter name &quot;nodeIndex&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2167:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2167:  The parameter name &quot;jsValueSource&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2169:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2169:  The parameter name &quot;jsValueSource&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2169:  The parameter name &quot;nodeIndex&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2170:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2170:  The parameter name &quot;jsValueSource&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2172:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2172:  The parameter name &quot;jsValueSource&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2172:  The parameter name &quot;nodeIndex&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2172:  The parameter name &quot;recovery&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2173:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2173:  The parameter name &quot;jsValueSource&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2173:  The parameter name &quot;recovery&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2179:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2179:  The parameter name &quot;jsValueSource&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2179:  The parameter name &quot;nodeIndex&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2183:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2186:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2186:  The parameter name &quot;jsValueSource&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2186:  The parameter name &quot;nodeIndex&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2186:  The parameter name &quot;valueRecovery&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
JavaScriptCore/dfg/DFGSpeculativeJIT.h:2187:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2187:  The parameter name &quot;jsValueSource&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2187:  The parameter name &quot;nodeIndex&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2187:  The parameter name &quot;valueRecovery&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2188:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2188:  The parameter name &quot;jsValueSource&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2188:  The parameter name &quot;nodeIndex&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2190:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2190:  The parameter name &quot;jsValueRegs&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2190:  The parameter name &quot;nodeIndex&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2191:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2191:  The parameter name &quot;jsValueRegs&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2192:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2192:  The parameter name &quot;jsValueRegs&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2192:  The parameter name &quot;nodeIndex&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 40 in 3 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>685084</commentid>
    <comment_count>3</comment_count>
      <attachid>156000</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-08-02 01:17:56 -0700</bug_when>
    <thetext>Comment on attachment 156000
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685085</commentid>
    <comment_count>4</comment_count>
      <attachid>156000</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-02 01:18:43 -0700</bug_when>
    <thetext>Comment on attachment 156000
the patch

I will fix style errors and land manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685091</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-02 01:23:41 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/124420</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685093</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-02 01:28:22 -0700</bug_when>
    <thetext>Additional style fix overlooked in previous patch fixed in http://trac.webkit.org/changeset/124422</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156000</attachid>
            <date>2012-08-02 01:15:35 -0700</date>
            <delta_ts>2012-08-02 01:18:43 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>uninline_patch_1.diff</filename>
            <type>text/plain</type>
            <size>19844</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI0NDE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDEyLTA4LTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHU3BlY3VsYXRpdmVKSVQuaCBoYXMgdG9vIG1hbnkgaW5saW5lIG1ldGhvZCBib2RpZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyOTU3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGlvbkNoZWNrKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0aW9uV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVja1dpdGhDb25kaXRpb25hbERpcmVjdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0
aXZlRXhlY3V0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb25XaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24pOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
CiAyMDEyLTA4LTAxICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTI0NDA2LgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDEyNDQxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxNjMgQEAgU3BlY3VsYXRpdmVKSVQ6On5T
cGVjdWxhdGl2ZUpJVCgpCiAgICAgV1RGOjpkZWxldGVBbGxWYWx1ZXMobV9zbG93UGF0aEdlbmVy
YXRvcnMpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRL
aW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRl
eCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKK3sKKyAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNh
bkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKKyAgICBtX2ppdC5jb2RlQmxv
Y2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0Lmdy
YXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9G
YWlsLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291
cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCit7Cisg
ICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJn
dW1lbnRUeXBlcyk7CisgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBu
b2RlVXNlLmluZGV4KCksIGp1bXBUb0ZhaWwpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJj
ZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1Rv
RmFpbCkKK3sKKyAgICBBU1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBtX2lz
Q2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXAs
IDE2PiBqdW1wVmVjdG9yID0ganVtcHNUb0ZhaWwuanVtcHMoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwganVtcFZlY3Rvci5zaXplKCk7ICsraSkKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlSW5kZXgsIGp1bXBWZWN0b3JbaV0pOworfQor
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpT
VmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QmIGp1bXBzVG9GYWlsKQoreworICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCku
Y2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOworICAgIHNwZWN1bGF0aW9u
Q2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5pbmRleCgpLCBqdW1wc1RvRmFpbCk7
Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2lu
ZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiBy
ZWNvdmVyeSkKK3sKKyAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgIHJldHVybjsKKyAg
ICBBU1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1
bWVudFR5cGVzKTsKKyAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kU3BlY3VsYXRpb25SZWNv
dmVyeShyZWNvdmVyeSk7CisgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NS
RXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4KSwganVtcFRvRmFpbCwgdGhpcywgbV9zdHJlYW0tPnNp
emUoKSwgbV9qaXQuY29kZUJsb2NrKCktPm51bWJlck9mU3BlY3VsYXRpb25SZWNvdmVyaWVzKCkp
KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBr
aW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3Zl
cnkpCit7CisgICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0No
ZWNraW5nQXJndW1lbnRUeXBlcyk7CisgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVl
U291cmNlLCBub2RlVXNlLmluZGV4KCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKK30KKworSnVt
cFJlcGxhY2VtZW50V2F0Y2hwb2ludCogU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uV2F0Y2hw
b2ludChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRl
eCBub2RlSW5kZXgpCit7CisgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICByZXR1cm4g
MDsKKyAgICBBU1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tp
bmdBcmd1bWVudFR5cGVzKTsKKyAgICBPU1JFeGl0JiBleGl0ID0gbV9qaXQuY29kZUJsb2NrKCkt
Pm9zckV4aXQoCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KAorICAg
ICAgICAgICAgT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLAorICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4
KSwKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAoKSwgdGhpcywgbV9zdHJl
YW0tPnNpemUoKSkpKTsKKyAgICBleGl0Lm1fd2F0Y2hwb2ludEluZGV4ID0gbV9qaXQuY29kZUJs
b2NrKCktPmFwcGVuZFdhdGNocG9pbnQoCisgICAgICAgIEp1bXBSZXBsYWNlbWVudFdhdGNocG9p
bnQobV9qaXQud2F0Y2hwb2ludExhYmVsKCkpKTsKKyAgICByZXR1cm4gJm1faml0LmNvZGVCbG9j
aygpLT53YXRjaHBvaW50KGV4aXQubV93YXRjaHBvaW50SW5kZXgpOworfQorCitKdW1wUmVwbGFj
ZW1lbnRXYXRjaHBvaW50KiBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25XYXRjaHBvaW50KEV4
aXRLaW5kIGtpbmQpCit7CisgICAgcmV0dXJuIHNwZWN1bGF0aW9uV2F0Y2hwb2ludChraW5kLCBK
U1ZhbHVlU291cmNlKCksIE5vTm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmZvcndh
cmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNv
dXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFp
bCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKK3sKKyAgICBBU1NFUlQoYXQo
bV9jb21waWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsK
KyAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVJbmRleCwganVt
cFRvRmFpbCk7CisgICAgCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGlmICghdmFsdWVSZWNv
dmVyeSkgeworICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBwcmVjZWRpbmcgbm9kZSB3YXMgYSBT
ZXRMb2NhbCB3aXRoIHRoZSBzYW1lIGNvZGUgb3JpZ2luLgorICAgICAgICBOb2RlKiBzZXRMb2Nh
bCA9ICZhdChtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChtX2luZGV4SW5CbG9j
ayAtIDEpKTsKKyAgICAgICAgQVNTRVJUKHNldExvY2FsLT5vcCgpID09IFNldExvY2FsKTsKKyAg
ICAgICAgQVNTRVJUKHNldExvY2FsLT5jb2RlT3JpZ2luID09IGF0KG1fY29tcGlsZUluZGV4KS5j
b2RlT3JpZ2luKTsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICB1bnNpZ25lZCBzZXRMb2NhbElu
ZGV4SW5CbG9jayA9IG1faW5kZXhJbkJsb2NrICsgMTsKKyAgICAKKyAgICBOb2RlKiBzZXRMb2Nh
bCA9ICZhdChtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChzZXRMb2NhbEluZGV4
SW5CbG9jaykpOworICAgIGJvb2wgaGFkSW50MzJUb0RvdWJsZSA9IGZhbHNlOworICAgIAorICAg
IGlmIChzZXRMb2NhbC0+b3AoKSA9PSBJbnQzMlRvRG91YmxlKSB7CisgICAgICAgIHNldExvY2Fs
ID0gJmF0KG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KCsrc2V0TG9jYWxJbmRl
eEluQmxvY2spKTsKKyAgICAgICAgaGFkSW50MzJUb0RvdWJsZSA9IHRydWU7CisgICAgfQorICAg
IGlmIChzZXRMb2NhbC0+b3AoKSA9PSBGbHVzaCB8fCBzZXRMb2NhbC0+b3AoKSA9PSBQaGFudG9t
KQorICAgICAgICBzZXRMb2NhbCA9ICZhdChtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2td
LT5hdCgrK3NldExvY2FsSW5kZXhJbkJsb2NrKSk7CisgICAgICAgIAorICAgIGlmICghIXZhbHVl
UmVjb3ZlcnkpIHsKKyAgICAgICAgaWYgKGhhZEludDMyVG9Eb3VibGUpCisgICAgICAgICAgICBB
U1NFUlQoYXQoc2V0TG9jYWwtPmNoaWxkMSgpKS5jaGlsZDEoKSA9PSBtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VSVChzZXRMb2NhbC0+Y2hpbGQxKCkgPT0g
bV9jb21waWxlSW5kZXgpOworICAgIH0KKyAgICBBU1NFUlQoc2V0TG9jYWwtPm9wKCkgPT0gU2V0
TG9jYWwpOworICAgIEFTU0VSVChzZXRMb2NhbC0+Y29kZU9yaWdpbiA9PSBhdChtX2NvbXBpbGVJ
bmRleCkuY29kZU9yaWdpbik7CisKKyAgICBOb2RlKiBuZXh0Tm9kZSA9ICZhdChtX2ppdC5ncmFw
aCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChzZXRMb2NhbEluZGV4SW5CbG9jayArIDEpKTsKKyAg
ICBBU1NFUlQobmV4dE5vZGUtPmNvZGVPcmlnaW4gIT0gYXQobV9jb21waWxlSW5kZXgpLmNvZGVP
cmlnaW4pOworICAgICAgICAKKyAgICBPU1JFeGl0JiBleGl0ID0gbV9qaXQuY29kZUJsb2NrKCkt
Pmxhc3RPU1JFeGl0KCk7CisgICAgZXhpdC5tX2NvZGVPcmlnaW4gPSBuZXh0Tm9kZS0+Y29kZU9y
aWdpbjsKKyAgICAgICAgCisgICAgaWYgKCF2YWx1ZVJlY292ZXJ5KQorICAgICAgICByZXR1cm47
CisgICAgZXhpdC5tX2xhc3RTZXRPcGVyYW5kID0gc2V0TG9jYWwtPmxvY2FsKCk7CisgICAgZXhp
dC5tX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZSA9IGFkb3B0UmVmKAorICAgICAgICBuZXcgVmFsdWVS
ZWNvdmVyeU92ZXJyaWRlKHNldExvY2FsLT5sb2NhbCgpLCB2YWx1ZVJlY292ZXJ5KSk7Cit9CisK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYg
dmFsdWVSZWNvdmVyeSkKK3sKKyAgICBBU1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQo
KSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJs
ZXI6Okp1bXAsIDE2PiBqdW1wVmVjdG9yID0ganVtcHNUb0ZhaWwuanVtcHMoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwganVtcFZlY3Rvci5zaXplKCk7ICsraSkKKyAgICAgICAgZm9y
d2FyZFNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBqdW1w
VmVjdG9yW2ldLCB2YWx1ZVJlY292ZXJ5KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRpb25DaGVja1dpdGhDb25kaXRpb25hbERpcmVjdGlvbihFeGl0S2luZCBraW5kLCBKU1Zh
bHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGJvb2wgaXNGb3J3YXJkKQoreworICAgIGlmIChpc0Zvcndh
cmQpCisgICAgICAgIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2Us
IG5vZGVJbmRleCwganVtcFRvRmFpbCk7CisgICAgZWxzZQorICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVJbmRleCwganVtcFRvRmFpbCk7Cit9CisKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlSW5kZXggbm9kZUluZGV4KQorewor
ICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMpOworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICBkYXRhTG9n
KCJTcGVjdWxhdGl2ZUpJVCB3YXMgdGVybWluYXRlZC5cbiIpOworI2VuZGlmCisgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQorICAgICAgICByZXR1cm47CisgICAgc3BlY3VsYXRpb25DaGVjayhraW5k
LCBqc1ZhbHVlUmVncywgbm9kZUluZGV4LCBtX2ppdC5qdW1wKCkpOworICAgIG1fY29tcGlsZU9r
YXkgPSBmYWxzZTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRp
dmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIEVkZ2Ug
bm9kZVVzZSkKK3sKKyAgICBBU1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBt
X2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKKyAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihraW5kLCBqc1ZhbHVlUmVncywgbm9kZVVzZS5pbmRleCgpKTsKK30KKwordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb25XaXRoQ29uZGl0aW9uYWxE
aXJlY3Rpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGVJbmRl
eCBub2RlSW5kZXgsIGJvb2wgaXNGb3J3YXJkKQoreworICAgIEFTU0VSVChhdChtX2NvbXBpbGVJ
bmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOworI2lmIERGR19F
TkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICBkYXRhTG9nKCJTcGVjdWxhdGl2ZUpJVCB3YXMgdGVy
bWluYXRlZC5cbiIpOworI2VuZGlmCisgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICBy
ZXR1cm47CisgICAgc3BlY3VsYXRpb25DaGVja1dpdGhDb25kaXRpb25hbERpcmVjdGlvbihraW5k
LCBqc1ZhbHVlUmVncywgbm9kZUluZGV4LCBtX2ppdC5qdW1wKCksIGlzRm9yd2FyZCk7CisgICAg
bV9jb21waWxlT2theSA9IGZhbHNlOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjphZGRTbG93
UGF0aEdlbmVyYXRvcihQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aEdlbmVy
YXRvcikKIHsKICAgICBtX3Nsb3dQYXRoR2VuZXJhdG9ycy5hcHBlbmQoc2xvd1BhdGhHZW5lcmF0
b3IubGVha1B0cigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDEyNDQxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjE2MywxNjMgKzIx
NjMsMzMgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBjaGVj
ayB3aXRob3V0IGFkZGl0aW9uYWwgcmVjb3ZlcnkuCi0gICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNr
KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5v
ZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKLSAgICB7Ci0gICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJU
KGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBl
cyk7Ci0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2lu
ZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlRm9yKG5vZGVJbmRleCksIGp1bXBUb0ZhaWwsIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsK
LSAgICB9Ci0gICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVT
b3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBq
dW1wVG9GYWlsKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5F
eGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7Ci0gICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5pbmRleCgpLCBqdW1wVG9GYWlsKTsK
LSAgICB9CisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVT
b3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAganVtcFRvRmFpbCk7CisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBqdW1wVG9GYWlsKTsKICAgICAvLyBBZGQgYSBzZXQgb2Ygc3BlY3VsYXRpb24g
Y2hlY2tzIHdpdGhvdXQgYWRkaXRpb25hbCByZWNvdmVyeS4KLSAgICB2b2lkIHNwZWN1bGF0aW9u
Q2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5k
ZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0No
ZWNraW5nQXJndW1lbnRUeXBlcyk7Ci0gICAgICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVt
cCwgMTY+IGp1bXBWZWN0b3IgPSBqdW1wc1RvRmFpbC5qdW1wcygpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwganVtcFZlY3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBqdW1wVmVjdG9y
W2ldKTsKLSAgICB9Ci0gICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpT
VmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QmIGp1bXBzVG9GYWlsKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGF0KG1fY29tcGls
ZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7Ci0gICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5pbmRleCgpLCBq
dW1wc1RvRmFpbCk7Ci0gICAgfQorICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBr
aW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpOworICAgIHZvaWQgc3BlY3VsYXRp
b25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ug
bm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCk7CiAgICAgLy8g
QWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aCBhZGRpdGlvbmFsIHJlY292ZXJ5LgotICAgIHZv
aWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVT
b3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0Zh
aWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQotICAgIHsKLSAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQo
YXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
KTsKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZFNwZWN1bGF0aW9uUmVjb3Zlcnko
cmVjb3ZlcnkpOwotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JF
eGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlzLCBtX3N0cmVhbS0+c2l6
ZSgpLCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxhdGlvblJlY292ZXJpZXMoKSkp
OwotICAgIH0KLSAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1
ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQotICAgIHsK
LSAgICAgICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNr
aW5nQXJndW1lbnRUeXBlcyk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1
ZVNvdXJjZSwgbm9kZVVzZS5pbmRleCgpLCBqdW1wVG9GYWlsLCByZWNvdmVyeSk7Ci0gICAgfQor
ICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpz
VmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1
bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KTsKKyAgICB2b2lk
IHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291
cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0
IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KTsKICAgICAvLyBVc2UgdGhpcyBsaWtlIHlv
dSB3b3VsZCB1c2Ugc3BlY3VsYXRpb25DaGVjaygpLCBleGNlcHQgdGhhdCB5b3UgZG9uJ3QgcGFz
cyBpdCBhIGp1bXAKICAgICAvLyAoYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSB0byBleGVjdXRlIGEg
YnJhbmNoOyB0aGF0J3Mga2luZCBvZiB0aGUgd2hvbGUgcG9pbnQpLCBhbmQgeW91CiAgICAgLy8g
bXVzdCByZWdpc3RlciB0aGUgcmV0dXJuZWQgV2F0Y2hwb2ludCB3aXRoIHNvbWV0aGluZyByZWxl
dmFudC4gSW4gZ2VuZXJhbCwgdGhpcyBzaG91bGQKICAgICAvLyBiZSB1c2VkIHdpdGggZXh0cmVt
ZSBjYXJlLiBVc2Ugc3BlY3VsYXRpb25DaGVjaygpIHVubGVzcyB5b3UndmUgZ290IGFuIGFtYXpp
bmcgcmVhc29uCiAgICAgLy8gbm90IHRvLgotICAgIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQq
IHNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFs
dWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgQVNTRVJUKGF0KG1fY29t
cGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7Ci0gICAg
ICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdC5jb2RlQmxvY2soKS0+b3NyRXhpdCgKLSAgICAgICAg
ICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KAotICAgICAgICAgICAgICAgIE9T
UkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0
LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAoKSwgdGhpcywgbV9zdHJlYW0t
PnNpemUoKSkpKTsKLSAgICAgICAgZXhpdC5tX3dhdGNocG9pbnRJbmRleCA9IG1faml0LmNvZGVC
bG9jaygpLT5hcHBlbmRXYXRjaHBvaW50KAotICAgICAgICAgICAgSnVtcFJlcGxhY2VtZW50V2F0
Y2hwb2ludChtX2ppdC53YXRjaHBvaW50TGFiZWwoKSkpOwotICAgICAgICByZXR1cm4gJm1faml0
LmNvZGVCbG9jaygpLT53YXRjaHBvaW50KGV4aXQubV93YXRjaHBvaW50SW5kZXgpOwotICAgIH0K
KyAgICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBzcGVjdWxhdGlvbldhdGNocG9pbnQoRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUlu
ZGV4KTsKICAgICAvLyBUaGUgZGVmYXVsdCBmb3Igc3BlY3VsYXRpb24gd2F0Y2hwb2ludHMgaXMg
dGhhdCB0aGV5J3JlIHVuY291bnRlZCwgYmVjYXVzZSB0aGUKICAgICAvLyBhY3Qgb2YgZmlyaW5n
IGEgd2F0Y2hwb2ludCBpbnZhbGlkYXRlcyBpdC4gU28sIGZ1dHVyZSByZWNvbXBpbGF0aW9ucyB3
aWxsIG5vdAogICAgIC8vIGF0dGVtcHQgdG8gc2V0IHRoaXMgd2F0Y2hwb2ludCBhZ2Fpbi4KLSAg
ICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBzcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtp
bmQga2luZCA9IFVuY291bnRhYmxlV2F0Y2hwb2ludCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBz
cGVjdWxhdGlvbldhdGNocG9pbnQoa2luZCwgSlNWYWx1ZVNvdXJjZSgpLCBOb05vZGUpOwotICAg
IH0KKyAgICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBzcGVjdWxhdGlvbldhdGNocG9pbnQo
RXhpdEtpbmQga2luZCA9IFVuY291bnRhYmxlV2F0Y2hwb2ludCk7CiAgICAgLy8gTm90ZTogbm90
IHNwZWNpZnlpbmcgdGhlIHZhbHVlUmVjb3ZlcnkgYXJndW1lbnQgKGxlYXZpbmcgaXQgYXMgVmFs
dWVSZWNvdmVyeSgpKSBpbXBsaWVzCiAgICAgLy8gdGhhdCB5b3UndmUgZW5zdXJlZCB0aGF0IHRo
ZXJlIGV4aXN0cyBhIE1vdkhpbnQgcHJpb3IgdG8geW91ciB1c2Ugb2YgZm9yd2FyZFNwZWN1bGF0
aW9uQ2hlY2soKS4KLSAgICB2b2lkIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVS
ZWNvdmVyeSA9IFZhbHVlUmVjb3ZlcnkoKSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChhdChtX2Nv
bXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOwotICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVJbmRleCwganVt
cFRvRmFpbCk7Ci0gICAgICAgIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgaWYgKCF2
YWx1ZVJlY292ZXJ5KSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBwcmVjZWRpbmcg
bm9kZSB3YXMgYSBTZXRMb2NhbCB3aXRoIHRoZSBzYW1lIGNvZGUgb3JpZ2luLgotICAgICAgICAg
ICAgTm9kZSogc2V0TG9jYWwgPSAmYXQobV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+
YXQobV9pbmRleEluQmxvY2sgLSAxKSk7Ci0gICAgICAgICAgICBBU1NFUlQoc2V0TG9jYWwtPm9w
KCkgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgQVNTRVJUKHNldExvY2FsLT5jb2RlT3JpZ2lu
ID09IGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKTsKLSAgICAgICAgfQotI2VuZGlmCi0g
ICAgICAgIAotICAgICAgICB1bnNpZ25lZCBzZXRMb2NhbEluZGV4SW5CbG9jayA9IG1faW5kZXhJ
bkJsb2NrICsgMTsKLSAgICAgICAgCi0gICAgICAgIE5vZGUqIHNldExvY2FsID0gJmF0KG1faml0
LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KHNldExvY2FsSW5kZXhJbkJsb2NrKSk7Ci0g
ICAgICAgIGJvb2wgaGFkSW50MzJUb0RvdWJsZSA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAg
aWYgKHNldExvY2FsLT5vcCgpID09IEludDMyVG9Eb3VibGUpIHsKLSAgICAgICAgICAgIHNldExv
Y2FsID0gJmF0KG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KCsrc2V0TG9jYWxJ
bmRleEluQmxvY2spKTsKLSAgICAgICAgICAgIGhhZEludDMyVG9Eb3VibGUgPSB0cnVlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChzZXRMb2NhbC0+b3AoKSA9PSBGbHVzaCB8fCBzZXRMb2NhbC0+
b3AoKSA9PSBQaGFudG9tKQotICAgICAgICAgICAgc2V0TG9jYWwgPSAmYXQobV9qaXQuZ3JhcGgo
KS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoKytzZXRMb2NhbEluZGV4SW5CbG9jaykpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKCEhdmFsdWVSZWNvdmVyeSkgewotICAgICAgICAgICAgaWYgKGhhZElu
dDMyVG9Eb3VibGUpCi0gICAgICAgICAgICAgICAgQVNTRVJUKGF0KHNldExvY2FsLT5jaGlsZDEo
KSkuY2hpbGQxKCkgPT0gbV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIEFTU0VSVChzZXRMb2NhbC0+Y2hpbGQxKCkgPT0gbV9jb21waWxlSW5kZXgpOwot
ICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChzZXRMb2NhbC0+b3AoKSA9PSBTZXRMb2NhbCk7Ci0g
ICAgICAgIEFTU0VSVChzZXRMb2NhbC0+Y29kZU9yaWdpbiA9PSBhdChtX2NvbXBpbGVJbmRleCku
Y29kZU9yaWdpbik7Ci0KLSAgICAgICAgTm9kZSogbmV4dE5vZGUgPSAmYXQobV9qaXQuZ3JhcGgo
KS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoc2V0TG9jYWxJbmRleEluQmxvY2sgKyAxKSk7Ci0gICAg
ICAgIEFTU0VSVChuZXh0Tm9kZS0+Y29kZU9yaWdpbiAhPSBhdChtX2NvbXBpbGVJbmRleCkuY29k
ZU9yaWdpbik7Ci0gICAgICAgIAotICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9qaXQuY29kZUJs
b2NrKCktPmxhc3RPU1JFeGl0KCk7Ci0gICAgICAgIGV4aXQubV9jb2RlT3JpZ2luID0gbmV4dE5v
ZGUtPmNvZGVPcmlnaW47Ci0gICAgICAgIAotICAgICAgICBpZiAoIXZhbHVlUmVjb3ZlcnkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGV4aXQubV9sYXN0U2V0T3BlcmFuZCA9IHNldExv
Y2FsLT5sb2NhbCgpOwotICAgICAgICBleGl0Lm1fdmFsdWVSZWNvdmVyeU92ZXJyaWRlID0gYWRv
cHRSZWYoCi0gICAgICAgICAgICBuZXcgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKHNldExvY2FsLT5s
b2NhbCgpLCB2YWx1ZVJlY292ZXJ5KSk7Ci0gICAgfQotICAgIHZvaWQgZm9yd2FyZFNwZWN1bGF0
aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2Rl
SW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsLCBj
b25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeSgpKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0No
ZWNraW5nQXJndW1lbnRUeXBlcyk7Ci0gICAgICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVt
cCwgMTY+IGp1bXBWZWN0b3IgPSBqdW1wc1RvRmFpbC5qdW1wcygpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwganVtcFZlY3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGZv
cndhcmRTcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVJbmRleCwganVt
cFZlY3RvcltpXSwgdmFsdWVSZWNvdmVyeSk7Ci0gICAgfQotICAgIHZvaWQgc3BlY3VsYXRpb25D
aGVja1dpdGhDb25kaXRpb25hbERpcmVjdGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBUb0ZhaWwsIGJvb2wgaXNGb3J3YXJkKQotICAgIHsKLSAgICAgICAgaWYgKGlzRm9yd2Fy
ZCkKLSAgICAgICAgICAgIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG5vZGVJbmRleCwganVtcFRvRmFpbCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBqdW1wVG9GYWls
KTsKLSAgICB9Ci0KKyAgICB2b2lkIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVS
ZWNvdmVyeSA9IFZhbHVlUmVjb3ZlcnkoKSk7CisgICAgdm9pZCBmb3J3YXJkU3BlY3VsYXRpb25D
aGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRl
eCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5KCkpOworICAgIHZv
aWQgc3BlY3VsYXRpb25DaGVja1dpdGhDb25kaXRpb25hbERpcmVjdGlvbihFeGl0S2luZCBraW5k
LCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGJvb2wgaXNGb3J3YXJkKTsKICAgICAvLyBDYWxs
ZWQgd2hlbiB3ZSBzdGF0aWNhbGx5IGRldGVybWluZSB0aGF0IGEgc3BlY3VsYXRpb24gd2lsbCBm
YWlsLgotICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2lu
ZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewot
ICAgICAgICBBU1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tp
bmdBcmd1bWVudFR5cGVzKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAg
IGRhdGFMb2coIlNwZWN1bGF0aXZlSklUIHdhcyB0ZXJtaW5hdGVkLlxuIik7Ci0jZW5kaWYKLSAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlSW5kZXgsIG1faml0Lmp1bXAo
KSk7Ci0gICAgICAgIG1fY29tcGlsZU9rYXkgPSBmYWxzZTsKLSAgICB9Ci0gICAgdm9pZCB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1Zh
bHVlUmVncywgRWRnZSBub2RlVXNlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGF0KG1fY29tcGls
ZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7Ci0gICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlVXNl
LmluZGV4KCkpOwotICAgIH0KLSAgICB2b2lkIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
V2l0aENvbmRpdGlvbmFsRGlyZWN0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFs
dWVSZWdzLCBOb2RlSW5kZXggbm9kZUluZGV4LCBib29sIGlzRm9yd2FyZCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMpOwotI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0
YUxvZygiU3BlY3VsYXRpdmVKSVQgd2FzIHRlcm1pbmF0ZWQuXG4iKTsKLSNlbmRpZgotICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2tXaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oa2luZCwganNWYWx1ZVJlZ3MsIG5v
ZGVJbmRleCwgbV9qaXQuanVtcCgpLCBpc0ZvcndhcmQpOwotICAgICAgICBtX2NvbXBpbGVPa2F5
ID0gZmFsc2U7Ci0gICAgfQorICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
RXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGVJbmRleCBub2RlSW5k
ZXgpOworICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2lu
ZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIEVkZ2Ugbm9kZVVzZSk7CisgICAgdm9pZCB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbldpdGhDb25kaXRpb25hbERpcmVjdGlvbihFeGl0S2lu
ZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZUluZGV4IG5vZGVJbmRleCwgYm9v
bCBpc0ZvcndhcmQpOwogICAgIAogICAgIHRlbXBsYXRlPGJvb2wgc3RyaWN0PgogICAgIEdQUlJl
ZyBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5G
b3JtYXQpOwo=
</data>
<flag name="review"
          id="165588"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>